From 4f443dce95ff6f8221c189880a70c74ce1c1f238 Mon Sep 17 00:00:00 2001 From: Ludovic CHEVALIER Date: Thu, 21 Dec 2017 16:13:22 +0100 Subject: [PATCH] [SPIP][PLUGINS] v3.0-->v3.2 --- scripts/maj.sh | 2 +- www/CHANGELOG.txt | 1618 - www/INSTALL.txt | 8 +- www/config/ecran_securite.php | 10 +- www/ecrire/action/activer_plugins.php | 77 +- www/ecrire/action/ajouter_lien.php | 40 +- www/ecrire/action/annuler_job.php | 23 +- www/ecrire/action/auth.php | 24 +- www/ecrire/action/calculer_taille_cache.php | 83 +- www/ecrire/action/confirmer_email.php | 36 +- www/ecrire/action/confirmer_inscription.php | 55 +- www/ecrire/action/converser.php | 64 +- www/ecrire/action/cookie.php | 89 +- www/ecrire/action/debloquer_edition.php | 30 +- www/ecrire/action/desinstaller_plugin.php | 48 +- www/ecrire/action/editer_article.php | 409 +- www/ecrire/action/editer_auteur.php | 346 +- www/ecrire/action/editer_liens.php | 678 +- www/ecrire/action/editer_logo.php | 187 + www/ecrire/action/editer_objet.php | 290 +- www/ecrire/action/editer_rubrique.php | 151 +- www/ecrire/action/etre_webmestre.php | 30 +- www/ecrire/action/forcer_job.php | 23 +- www/ecrire/action/iconifier.php | 131 - www/ecrire/action/inscrire_auteur.php | 210 +- www/ecrire/action/instituer_langue_objet.php | 20 +- .../action/instituer_langue_rubrique.php | 38 +- www/ecrire/action/instituer_objet.php | 35 +- www/ecrire/action/logout.php | 113 +- www/ecrire/action/menu_rubriques.php | 151 +- www/ecrire/action/preferer.php | 89 +- www/ecrire/action/purger.php | 54 +- www/ecrire/action/purger_queue.php | 20 +- www/ecrire/action/redirect.php | 126 +- www/ecrire/action/referencer_traduction.php | 65 +- www/ecrire/action/reorganiser.php | 91 - www/ecrire/action/session.php | 39 +- www/ecrire/action/super_cron.php | 42 +- www/ecrire/action/supprimer_lien.php | 41 +- www/ecrire/action/supprimer_rubrique.php | 38 +- www/ecrire/action/tester.php | 179 +- www/ecrire/action/tester_taille.php | 95 +- www/ecrire/auth/ldap.php | 242 +- www/ecrire/auth/sha256.inc.php | 863 +- www/ecrire/auth/spip.php | 268 +- www/ecrire/balise/configurer_metas.php | 84 +- www/ecrire/balise/formulaire_.php | 209 +- www/ecrire/balise/formulaire_admin.php | 277 +- .../balise/formulaire_ecrire_auteur.php | 85 +- www/ecrire/balise/formulaire_inscription.php | 63 +- www/ecrire/balise/info_.php | 50 +- www/ecrire/balise/login_prive.php | 80 +- www/ecrire/balise/login_public.php | 81 +- www/ecrire/balise/logo_.php | 178 +- www/ecrire/balise/menu_lang.php | 76 +- www/ecrire/balise/menu_lang_ecrire.php | 109 +- www/ecrire/balise/url_.php | 336 +- www/ecrire/balise/url_logout.php | 66 +- www/ecrire/base/abstract_sql.php | 2289 +- www/ecrire/base/auxiliaires.php | 12 +- www/ecrire/base/connect_sql.php | 511 +- www/ecrire/base/create.php | 146 +- www/ecrire/base/delete_all.php | 35 +- www/ecrire/base/dump.php | 502 +- www/ecrire/base/objets.php | 1030 +- www/ecrire/base/repair.php | 139 +- www/ecrire/base/serial.php | 12 +- www/ecrire/base/trouver_table.php | 112 +- www/ecrire/base/upgrade.php | 486 +- www/ecrire/charsets/cp1250.php | 180 +- www/ecrire/charsets/cp1251.php | 166 +- www/ecrire/charsets/cp1256.php | 169 +- www/ecrire/charsets/html.php | 153 +- www/ecrire/charsets/iso-8859-1.php | 155 +- www/ecrire/charsets/iso-8859-15.php | 32 +- www/ecrire/charsets/iso-8859-6.php | 86 +- www/ecrire/charsets/iso-8859-9.php | 28 +- www/ecrire/charsets/mathml.php | 3377 +- www/ecrire/charsets/translit.php | 443 +- www/ecrire/charsets/translitcomplexe.php | 183 +- www/ecrire/exec/403.php | 53 +- www/ecrire/exec/404.php | 38 +- www/ecrire/exec/admin_plugin.php | 221 +- www/ecrire/exec/base_delete_all.php | 40 +- www/ecrire/exec/base_repair.php | 37 +- www/ecrire/exec/demande_mise_a_jour.php | 33 +- www/ecrire/exec/fond.php | 57 +- www/ecrire/exec/fond_monobloc.php | 176 +- www/ecrire/exec/info_plugin.php | 40 +- www/ecrire/exec/informer.php | 35 +- www/ecrire/exec/install.php | 38 +- www/ecrire/exec/plonger.php | 37 +- www/ecrire/exec/puce_statut.php | 69 +- www/ecrire/exec/rechercher.php | 161 +- www/ecrire/exec/selectionner.php | 36 +- www/ecrire/exec/upgrade.php | 72 +- www/ecrire/exec/valider_xml.php | 378 +- www/ecrire/genie/mail.php | 48 +- www/ecrire/genie/maintenance.php | 80 +- www/ecrire/genie/mise_a_jour.php | 175 +- www/ecrire/genie/optimiser.php | 174 +- www/ecrire/inc/acces.php | 412 +- www/ecrire/inc/actions.php | 134 +- www/ecrire/inc/admin.php | 294 +- www/ecrire/inc/aider.php | 242 - www/ecrire/inc/auth.php | 561 +- www/ecrire/inc/autoriser.php | 1580 +- www/ecrire/inc/bandeau.php | 247 +- www/ecrire/inc/boutons.php | 147 +- www/ecrire/inc/charger_php_extension.php | 65 +- www/ecrire/inc/charsets.php | 967 +- www/ecrire/inc/chercher_logo.php | 64 +- www/ecrire/inc/chercher_rubrique.php | 332 +- www/ecrire/inc/commencer_page.php | 176 +- www/ecrire/inc/completer_traduction.php | 77 + www/ecrire/inc/config.php | 438 +- www/ecrire/inc/cookie.php | 139 +- www/ecrire/inc/couleurs.php | 177 +- www/ecrire/inc/csv.php | 124 +- www/ecrire/inc/cvt_autosave.php | 86 +- www/ecrire/inc/cvt_configurer.php | 239 +- www/ecrire/inc/cvt_multietapes.php | 307 +- www/ecrire/inc/definir_menus_favoris.php | 40 + www/ecrire/inc/distant.php | 1300 +- www/ecrire/inc/documents.php | 212 +- www/ecrire/inc/drapeau_edition.php | 237 +- www/ecrire/inc/editer.php | 662 +- www/ecrire/inc/envoyer_mail.php | 177 +- www/ecrire/inc/exporter_csv.php | 135 + www/ecrire/inc/filtres.php | 4967 ++- www/ecrire/inc/filtres_boites.php | 166 +- www/ecrire/inc/filtres_dates.php | 1280 + www/ecrire/inc/filtres_ecrire.php | 403 +- www/ecrire/inc/filtres_images_lib_mini.php | 1370 +- www/ecrire/inc/filtres_images_mini.php | 521 +- www/ecrire/inc/filtres_mime.php | 197 +- www/ecrire/inc/filtres_mini.php | 251 +- .../inc/filtres_selecteur_generique.php | 233 + www/ecrire/inc/flock.php | 664 +- www/ecrire/inc/genie.php | 201 +- www/ecrire/inc/headers.php | 220 +- www/ecrire/inc/icone_renommer.php | 61 +- www/ecrire/inc/iconifier.php | 35 +- www/ecrire/inc/importer_csv.php | 115 + www/ecrire/inc/informer.php | 61 +- www/ecrire/inc/install.php | 563 +- www/ecrire/inc/invalideur.php | 281 +- www/ecrire/inc/journal.php | 16 +- www/ecrire/inc/json.php | 50 +- www/ecrire/inc/lang.php | 326 +- www/ecrire/inc/lang_liste.php | 17 +- www/ecrire/inc/layer.php | 197 +- www/ecrire/inc/lien.php | 371 +- www/ecrire/inc/lien_court.php | 12 +- www/ecrire/inc/lister_objets.php | 52 +- www/ecrire/inc/log.php | 95 +- www/ecrire/inc/mail.php | 28 +- www/ecrire/inc/math.php | 111 +- www/ecrire/inc/meta.php | 229 +- www/ecrire/inc/minipres.php | 193 +- www/ecrire/inc/modifier.php | 146 +- www/ecrire/inc/nfslock.php | 176 +- www/ecrire/inc/notifications.php | 147 +- www/ecrire/inc/pclzip.php | 5702 ---- www/ecrire/inc/pipelines.php | 202 +- www/ecrire/inc/pipelines_ecrire.php | 239 +- www/ecrire/inc/plonger.php | 108 +- www/ecrire/inc/plugin.php | 1285 +- www/ecrire/inc/precharger_article.php | 62 +- www/ecrire/inc/precharger_objet.php | 129 +- www/ecrire/inc/prepare_recherche.php | 133 +- .../preselectionner_parent_nouvel_objet.php | 34 +- www/ecrire/inc/presentation.php | 274 +- www/ecrire/inc/presentation_mini.php | 233 +- www/ecrire/inc/presenter_enfants.php | 219 +- www/ecrire/inc/puce_statut.php | 313 +- www/ecrire/inc/queue.php | 514 +- www/ecrire/inc/recherche_to_array.php | 187 +- www/ecrire/inc/rechercher.php | 236 +- www/ecrire/inc/roles.php | 376 + www/ecrire/inc/rubriques.php | 481 +- www/ecrire/inc/securiser_action.php | 278 +- www/ecrire/inc/selectionner.php | 148 +- www/ecrire/inc/session.php | 662 +- www/ecrire/inc/simplexml_to_array.php | 56 +- www/ecrire/inc/surligne.php | 78 +- www/ecrire/inc/texte.php | 307 +- www/ecrire/inc/texte_mini.php | 462 +- www/ecrire/inc/traduire.php | 348 +- www/ecrire/inc/urls.php | 254 +- www/ecrire/inc/utils.php | 3218 +- www/ecrire/inc/xml.php | 299 +- www/ecrire/inc_version.php | 322 +- www/ecrire/index.php | 93 +- www/ecrire/install/etape_.php | 33 +- www/ecrire/install/etape_1.php | 61 +- www/ecrire/install/etape_2.php | 183 +- www/ecrire/install/etape_3.php | 412 +- www/ecrire/install/etape_3b.php | 99 +- www/ecrire/install/etape_4.php | 58 +- www/ecrire/install/etape_chmod.php | 139 +- www/ecrire/install/etape_fin.php | 55 +- www/ecrire/install/etape_ldap1.php | 103 +- www/ecrire/install/etape_ldap2.php | 71 +- www/ecrire/install/etape_ldap3.php | 68 +- www/ecrire/install/etape_ldap4.php | 103 +- www/ecrire/install/etape_ldap5.php | 75 +- www/ecrire/iterateur/condition.php | 41 +- www/ecrire/iterateur/data.php | 513 +- www/ecrire/iterateur/php.php | 38 +- www/ecrire/iterateur/pour.php | 28 +- www/ecrire/iterateur/sql.php | 87 +- www/ecrire/lang/ecrire.xml | 439 +- www/ecrire/lang/ecrire_ar.php | 256 +- www/ecrire/lang/ecrire_ast.php | 194 +- www/ecrire/lang/ecrire_ay.php | 59 +- www/ecrire/lang/ecrire_bg.php | 154 +- www/ecrire/lang/ecrire_br.php | 207 +- www/ecrire/lang/ecrire_bs.php | 130 +- www/ecrire/lang/ecrire_ca.php | 262 +- www/ecrire/lang/ecrire_co.php | 189 +- www/ecrire/lang/ecrire_cpf.php | 179 +- www/ecrire/lang/ecrire_cpf_hat.php | 162 +- www/ecrire/lang/ecrire_cs.php | 159 +- www/ecrire/lang/ecrire_da.php | 136 +- www/ecrire/lang/ecrire_de.php | 210 +- www/ecrire/lang/ecrire_en.php | 217 +- www/ecrire/lang/ecrire_eo.php | 199 +- www/ecrire/lang/ecrire_es.php | 195 +- www/ecrire/lang/ecrire_eu.php | 177 +- www/ecrire/lang/ecrire_fa.php | 200 +- www/ecrire/lang/ecrire_fon.php | 133 +- www/ecrire/lang/ecrire_fr.php | 235 +- www/ecrire/lang/ecrire_fr_fem.php | 285 +- www/ecrire/lang/ecrire_gl.php | 193 +- www/ecrire/lang/ecrire_he.php | 80 +- www/ecrire/lang/ecrire_hu.php | 155 +- www/ecrire/lang/ecrire_id.php | 155 +- www/ecrire/lang/ecrire_it.php | 216 +- www/ecrire/lang/ecrire_it_fem.php | 301 +- www/ecrire/lang/ecrire_ja.php | 142 +- www/ecrire/lang/ecrire_km.php | 147 +- www/ecrire/lang/ecrire_lb.php | 171 +- www/ecrire/lang/ecrire_my.php | 144 +- www/ecrire/lang/ecrire_nl.php | 706 +- www/ecrire/lang/ecrire_oc_auv.php | 155 +- www/ecrire/lang/ecrire_oc_gsc.php | 155 +- www/ecrire/lang/ecrire_oc_lms.php | 155 +- www/ecrire/lang/ecrire_oc_lnc.php | 164 +- www/ecrire/lang/ecrire_oc_ni.php | 364 +- www/ecrire/lang/ecrire_oc_ni_la.php | 157 +- www/ecrire/lang/ecrire_oc_ni_mis.php | 389 +- www/ecrire/lang/ecrire_oc_prv.php | 157 +- www/ecrire/lang/ecrire_oc_va.php | 155 +- www/ecrire/lang/ecrire_pl.php | 183 +- www/ecrire/lang/ecrire_pt.php | 197 +- www/ecrire/lang/ecrire_pt_br.php | 300 +- www/ecrire/lang/ecrire_ro.php | 178 +- www/ecrire/lang/ecrire_ru.php | 489 +- www/ecrire/lang/ecrire_sk.php | 221 +- www/ecrire/lang/ecrire_sv.php | 188 +- www/ecrire/lang/ecrire_tr.php | 312 +- www/ecrire/lang/ecrire_uk.php | 863 + www/ecrire/lang/ecrire_vi.php | 136 +- www/ecrire/lang/ecrire_zh.php | 145 +- www/ecrire/lang/public.xml | 245 +- www/ecrire/lang/public_ar.php | 8 +- www/ecrire/lang/public_ast.php | 8 +- www/ecrire/lang/public_ay.php | 8 +- www/ecrire/lang/public_bg.php | 8 +- www/ecrire/lang/public_br.php | 20 +- www/ecrire/lang/public_bs.php | 8 +- www/ecrire/lang/public_ca.php | 10 +- www/ecrire/lang/public_co.php | 8 +- www/ecrire/lang/public_cpf.php | 8 +- www/ecrire/lang/public_cpf_hat.php | 8 +- www/ecrire/lang/public_cs.php | 8 +- www/ecrire/lang/public_da.php | 8 +- www/ecrire/lang/public_de.php | 8 +- www/ecrire/lang/public_en.php | 8 +- www/ecrire/lang/public_eo.php | 8 +- www/ecrire/lang/public_es.php | 8 +- www/ecrire/lang/public_eu.php | 8 +- www/ecrire/lang/public_fa.php | 8 +- www/ecrire/lang/public_fon.php | 8 +- www/ecrire/lang/public_fr.php | 6 +- www/ecrire/lang/public_fr_fem.php | 18 +- www/ecrire/lang/public_gl.php | 8 +- www/ecrire/lang/public_he.php | 8 +- www/ecrire/lang/public_hr.php | 8 +- www/ecrire/lang/public_hu.php | 8 +- www/ecrire/lang/public_id.php | 8 +- www/ecrire/lang/public_it.php | 8 +- www/ecrire/lang/public_it_fem.php | 8 +- www/ecrire/lang/public_ja.php | 8 +- www/ecrire/lang/public_km.php | 8 +- www/ecrire/lang/public_lb.php | 8 +- www/ecrire/lang/public_my.php | 8 +- www/ecrire/lang/public_nl.php | 46 +- www/ecrire/lang/public_oc_auv.php | 8 +- www/ecrire/lang/public_oc_gsc.php | 8 +- www/ecrire/lang/public_oc_lms.php | 8 +- www/ecrire/lang/public_oc_lnc.php | 8 +- www/ecrire/lang/public_oc_ni.php | 10 +- www/ecrire/lang/public_oc_ni_la.php | 8 +- www/ecrire/lang/public_oc_ni_mis.php | 14 +- www/ecrire/lang/public_oc_prv.php | 8 +- www/ecrire/lang/public_oc_va.php | 8 +- www/ecrire/lang/public_pl.php | 8 +- www/ecrire/lang/public_pt.php | 8 +- www/ecrire/lang/public_pt_br.php | 12 +- www/ecrire/lang/public_ro.php | 8 +- www/ecrire/lang/public_ru.php | 18 +- www/ecrire/lang/public_sk.php | 8 +- www/ecrire/lang/public_sv.php | 8 +- www/ecrire/lang/public_tr.php | 8 +- www/ecrire/lang/public_uk.php | 121 + www/ecrire/lang/public_vi.php | 8 +- www/ecrire/lang/public_zh.php | 8 +- www/ecrire/lang/spip.xml | 287 +- www/ecrire/lang/spip_ar.php | 30 +- www/ecrire/lang/spip_ast.php | 9 +- www/ecrire/lang/spip_ay.php | 9 +- www/ecrire/lang/spip_bg.php | 9 +- www/ecrire/lang/spip_br.php | 66 +- www/ecrire/lang/spip_bs.php | 12 +- www/ecrire/lang/spip_ca.php | 27 +- www/ecrire/lang/spip_co.php | 15 +- www/ecrire/lang/spip_cpf.php | 11 +- www/ecrire/lang/spip_cpf_hat.php | 15 +- www/ecrire/lang/spip_cs.php | 9 +- www/ecrire/lang/spip_da.php | 9 +- www/ecrire/lang/spip_de.php | 27 +- www/ecrire/lang/spip_en.php | 22 +- www/ecrire/lang/spip_eo.php | 15 +- www/ecrire/lang/spip_es.php | 21 +- www/ecrire/lang/spip_eu.php | 17 +- www/ecrire/lang/spip_fa.php | 27 +- www/ecrire/lang/spip_fon.php | 9 +- www/ecrire/lang/spip_fr.php | 21 +- www/ecrire/lang/spip_fr_fem.php | 39 +- www/ecrire/lang/spip_gl.php | 9 +- www/ecrire/lang/spip_he.php | 9 +- www/ecrire/lang/spip_hr.php | 11 +- www/ecrire/lang/spip_hu.php | 11 +- www/ecrire/lang/spip_id.php | 9 +- www/ecrire/lang/spip_it.php | 24 +- www/ecrire/lang/spip_it_fem.php | 9 +- www/ecrire/lang/spip_ja.php | 39 +- www/ecrire/lang/spip_km.php | 9 +- www/ecrire/lang/spip_lb.php | 23 +- www/ecrire/lang/spip_my.php | 96 +- www/ecrire/lang/spip_nl.php | 408 +- www/ecrire/lang/spip_oc_auv.php | 9 +- www/ecrire/lang/spip_oc_gsc.php | 9 +- www/ecrire/lang/spip_oc_lms.php | 9 +- www/ecrire/lang/spip_oc_lnc.php | 9 +- www/ecrire/lang/spip_oc_ni.php | 9 +- www/ecrire/lang/spip_oc_ni_la.php | 9 +- www/ecrire/lang/spip_oc_ni_mis.php | 118 +- www/ecrire/lang/spip_oc_prv.php | 9 +- www/ecrire/lang/spip_oc_va.php | 9 +- www/ecrire/lang/spip_pl.php | 9 +- www/ecrire/lang/spip_pt.php | 15 +- www/ecrire/lang/spip_pt_br.php | 36 +- www/ecrire/lang/spip_ro.php | 9 +- www/ecrire/lang/spip_ru.php | 189 +- www/ecrire/lang/spip_sk.php | 26 +- www/ecrire/lang/spip_sv.php | 9 +- www/ecrire/lang/spip_tr.php | 9 +- www/ecrire/lang/spip_uk.php | 724 + www/ecrire/lang/spip_vi.php | 9 +- www/ecrire/lang/spip_zh.php | 9 +- www/ecrire/maj/svn10000.php | 585 +- www/ecrire/maj/v009.php | 74 +- www/ecrire/maj/v010.php | 38 +- www/ecrire/maj/v011.php | 26 +- www/ecrire/maj/v012.php | 33 +- www/ecrire/maj/v013.php | 36 +- www/ecrire/maj/v014.php | 136 +- www/ecrire/maj/v015.php | 22 +- www/ecrire/maj/v016.php | 35 +- www/ecrire/maj/v017.php | 72 +- www/ecrire/maj/v018.php | 53 +- www/ecrire/maj/v019.php | 596 +- www/ecrire/maj/v019_pre193.php | 171 +- www/ecrire/notifications/instituerarticle.php | 46 +- www/ecrire/oo/index.php | 8 - www/ecrire/paquet.xml | 33 +- www/ecrire/plugins/afficher_liste.php | 86 +- www/ecrire/plugins/afficher_nom_plugin.php | 44 +- www/ecrire/plugins/afficher_plugin.php | 272 +- www/ecrire/plugins/afficher_repertoires.php | 82 +- www/ecrire/plugins/extraire_boutons.php | 38 +- www/ecrire/plugins/extraire_pipelines.php | 36 +- www/ecrire/plugins/get_infos.php | 97 +- www/ecrire/plugins/infos_paquet.php | 190 +- www/ecrire/plugins/infos_plugin.php | 175 +- www/ecrire/plugins/installer.php | 227 +- www/ecrire/plugins/verifie_conformite.php | 217 +- www/ecrire/prive.php | 13 +- www/ecrire/public.php | 159 +- www/ecrire/public/admin.php | 71 +- www/ecrire/public/aiguiller.php | 276 +- www/ecrire/public/assembler.php | 497 +- www/ecrire/public/balises.php | 2536 +- www/ecrire/public/boucles.php | 108 +- www/ecrire/public/cacher.php | 274 +- www/ecrire/public/compiler.php | 1393 +- www/ecrire/public/composer.php | 964 +- www/ecrire/public/criteres.php | 2708 +- www/ecrire/public/debusquer.php | 545 +- www/ecrire/public/decompiler.php | 222 +- www/ecrire/public/evaluer_page.php | 38 +- www/ecrire/public/format_html.php | 124 +- www/ecrire/public/interfaces.php | 731 +- www/ecrire/public/iterateur.php | 267 +- www/ecrire/public/jointures.php | 485 +- www/ecrire/public/normaliser.php | 187 +- www/ecrire/public/parametrer.php | 186 +- www/ecrire/public/phraser_html.php | 592 +- www/ecrire/public/quete.php | 572 +- www/ecrire/public/references.php | 743 +- www/ecrire/public/sandbox.php | 128 +- www/ecrire/public/styliser.php | 131 +- www/ecrire/public/styliser_par_z.php | 369 +- www/ecrire/public/tracer.php | 132 +- www/ecrire/req/mysql.php | 1827 +- www/ecrire/req/pg.exp.php | 1541 + www/ecrire/req/pg.php | 1372 - www/ecrire/req/sqlite2.php | 24 +- www/ecrire/req/sqlite3.php | 26 +- www/ecrire/req/sqlite_fonctions.php | 449 +- www/ecrire/req/sqlite_generique.php | 2288 +- www/ecrire/typographie/en.php | 13 +- www/ecrire/typographie/fr.php | 55 +- www/ecrire/urls/page.php | 64 +- www/ecrire/xml/analyser_dtd.php | 361 +- www/ecrire/xml/indenter.php | 80 +- www/ecrire/xml/interfaces.php | 52 +- www/ecrire/xml/sax.php | 257 +- www/ecrire/xml/valider.php | 588 +- www/htaccess.txt | 14 +- www/index.php | 3 +- www/plugins-dist/aide/aide_logo-32.png | Bin 0 -> 2271 bytes www/plugins-dist/aide/aide_options.php | 9 + www/plugins-dist/aide/inc/aide.php | 320 + www/plugins-dist/aide/lang/paquet-aide.xml | 4 + www/plugins-dist/aide/lang/paquet-aide_fr.php | 14 + www/plugins-dist/aide/paquet.xml | 16 + .../aide/prive/squelettes/contenu/aide.html | 45 + .../squelettes/contenu/aide_fonctions.php | 122 + www/plugins-dist/archiviste/inc/archives.php | 176 + www/plugins-dist/archiviste/inc/pcltar.php | 3488 ++ www/plugins-dist/archiviste/inc/pclzip.php | 5659 ++++ .../archiviste/lang/paquet-archiviste.xml | 4 + .../archiviste/lang/paquet-archiviste_fr.php | 14 + .../archiviste/lib/pcltar/pclerror.lib.php | 132 + .../archiviste/lib/pcltar/pcltrace.lib.php | 454 + .../archiviste/lib/pcltar/readme.txt | 493 + www/plugins-dist/archiviste/paquet.xml | 17 + .../themes/spip/images/archiviste-128.png | Bin 0 -> 4071 bytes .../themes/spip/images/archiviste-32.png | Bin 0 -> 1011 bytes .../themes/spip/images/archiviste-64.png | Bin 0 -> 1989 bytes .../archiviste/tests/TestCase.inc | 80 + .../archiviste/tests/deballer_archives.php | 45 + .../archiviste/tests/emballer_archives.php | 27 + .../archiviste/tests/informer_archives.php | 28 + .../archiviste/tests/initialiser_archives.php | 70 + .../archiviste/tests/retirer_archives.php | 28 + .../breves/action/editer_breve.php | 205 +- www/plugins-dist/breves/base/breves.php | 88 +- .../breves/breves_administrations.php | 46 +- www/plugins-dist/breves/breves_autoriser.php | 116 +- www/plugins-dist/breves/breves_ieconfig.php | 43 +- www/plugins-dist/breves/breves_pipelines.php | 324 +- .../breves/formulaires/configurer_breves.html | 10 +- .../breves/formulaires/configurer_breves.php | 50 +- .../breves/formulaires/editer_breve.html | 46 +- .../breves/formulaires/editer_breve.php | 194 +- www/plugins-dist/breves/lang/breves.xml | 9 +- www/plugins-dist/breves/lang/breves_ar.php | 8 +- www/plugins-dist/breves/lang/breves_ast.php | 6 +- www/plugins-dist/breves/lang/breves_ay.php | 6 +- www/plugins-dist/breves/lang/breves_bg.php | 6 +- www/plugins-dist/breves/lang/breves_br.php | 6 +- www/plugins-dist/breves/lang/breves_bs.php | 6 +- www/plugins-dist/breves/lang/breves_ca.php | 6 +- www/plugins-dist/breves/lang/breves_co.php | 6 +- www/plugins-dist/breves/lang/breves_cpf.php | 6 +- .../breves/lang/breves_cpf_hat.php | 6 +- www/plugins-dist/breves/lang/breves_cs.php | 6 +- www/plugins-dist/breves/lang/breves_da.php | 6 +- www/plugins-dist/breves/lang/breves_de.php | 6 +- www/plugins-dist/breves/lang/breves_el.php | 6 +- www/plugins-dist/breves/lang/breves_en.php | 6 +- www/plugins-dist/breves/lang/breves_en_hx.php | 6 +- www/plugins-dist/breves/lang/breves_eo.php | 6 +- www/plugins-dist/breves/lang/breves_es.php | 6 +- www/plugins-dist/breves/lang/breves_eu.php | 6 +- www/plugins-dist/breves/lang/breves_fa.php | 6 +- www/plugins-dist/breves/lang/breves_fi.php | 6 +- www/plugins-dist/breves/lang/breves_fon.php | 6 +- www/plugins-dist/breves/lang/breves_fr.php | 6 +- .../breves/lang/breves_fr_fem.php | 6 +- www/plugins-dist/breves/lang/breves_fr_tu.php | 6 +- www/plugins-dist/breves/lang/breves_gl.php | 6 +- .../breves/lang/breves_grecgr.php | 52 - www/plugins-dist/breves/lang/breves_hac.php | 6 +- www/plugins-dist/breves/lang/breves_he.php | 6 +- www/plugins-dist/breves/lang/breves_hr.php | 6 +- www/plugins-dist/breves/lang/breves_hu.php | 6 +- www/plugins-dist/breves/lang/breves_id.php | 6 +- www/plugins-dist/breves/lang/breves_is.php | 6 +- www/plugins-dist/breves/lang/breves_isl.php | 52 - www/plugins-dist/breves/lang/breves_it.php | 6 +- .../breves/lang/breves_it_fem.php | 6 +- www/plugins-dist/breves/lang/breves_ja.php | 6 +- www/plugins-dist/breves/lang/breves_km.php | 6 +- www/plugins-dist/breves/lang/breves_la.php | 6 +- www/plugins-dist/breves/lang/breves_lb.php | 6 +- www/plugins-dist/breves/lang/breves_lt.php | 6 +- www/plugins-dist/breves/lang/breves_my.php | 6 +- www/plugins-dist/breves/lang/breves_nap.php | 6 +- www/plugins-dist/breves/lang/breves_nb.php | 6 +- www/plugins-dist/breves/lang/breves_ne.php | 6 +- www/plugins-dist/breves/lang/breves_nl.php | 18 +- www/plugins-dist/breves/lang/breves_no.php | 52 - .../breves/lang/breves_oc_auv.php | 6 +- .../breves/lang/breves_oc_gsc.php | 6 +- .../breves/lang/breves_oc_lms.php | 6 +- .../breves/lang/breves_oc_lnc.php | 6 +- www/plugins-dist/breves/lang/breves_oc_ni.php | 6 +- .../breves/lang/breves_oc_ni_la.php | 6 +- .../breves/lang/breves_oc_ni_mis.php | 50 + .../breves/lang/breves_oc_prv.php | 6 +- www/plugins-dist/breves/lang/breves_oc_va.php | 6 +- www/plugins-dist/breves/lang/breves_pl.php | 6 +- www/plugins-dist/breves/lang/breves_pt.php | 6 +- www/plugins-dist/breves/lang/breves_pt_br.php | 6 +- www/plugins-dist/breves/lang/breves_rn.php | 6 +- www/plugins-dist/breves/lang/breves_ro.php | 6 +- www/plugins-dist/breves/lang/breves_roa.php | 6 +- www/plugins-dist/breves/lang/breves_ru.php | 6 +- www/plugins-dist/breves/lang/breves_sc.php | 6 +- www/plugins-dist/breves/lang/breves_sk.php | 6 +- www/plugins-dist/breves/lang/breves_sq.php | 6 +- www/plugins-dist/breves/lang/breves_ss.php | 52 - www/plugins-dist/breves/lang/breves_sv.php | 6 +- www/plugins-dist/breves/lang/breves_tl.php | 52 - www/plugins-dist/breves/lang/breves_tr.php | 6 +- www/plugins-dist/breves/lang/breves_tt.php | 52 - www/plugins-dist/breves/lang/breves_uk.php | 48 +- www/plugins-dist/breves/lang/breves_vi.php | 6 +- www/plugins-dist/breves/lang/breves_wo.php | 6 +- www/plugins-dist/breves/lang/breves_zh.php | 6 +- .../breves/lang/paquet-breves.xml | 15 +- .../breves/lang/paquet-breves_ar.php | 6 +- .../breves/lang/paquet-breves_br.php | 15 + .../breves/lang/paquet-breves_de.php | 6 +- .../breves/lang/paquet-breves_en.php | 6 +- .../breves/lang/paquet-breves_eo.php | 6 +- .../breves/lang/paquet-breves_es.php | 6 +- .../breves/lang/paquet-breves_fa.php | 6 +- .../breves/lang/paquet-breves_fr.php | 6 +- .../breves/lang/paquet-breves_fr_fem.php | 6 +- .../breves/lang/paquet-breves_fr_tu.php | 6 +- .../breves/lang/paquet-breves_hac.php | 14 + .../breves/lang/paquet-breves_it.php | 6 +- .../breves/lang/paquet-breves_lb.php | 6 +- .../breves/lang/paquet-breves_nl.php | 8 +- .../breves/lang/paquet-breves_oc_ni_mis.php | 15 + .../breves/lang/paquet-breves_pt.php | 6 +- .../breves/lang/paquet-breves_pt_br.php | 6 +- .../breves/lang/paquet-breves_ru.php | 6 +- .../breves/lang/paquet-breves_sk.php | 6 +- .../breves/lang/paquet-breves_uk.php | 15 + www/plugins-dist/breves/paquet.xml | 6 +- .../breves/prive/objets/liste/breves.html | 6 +- .../breves/prive/rss/a_suivre-breves.html | 13 +- .../prive/squelettes/contenu/breve.html | 2 +- .../prive/squelettes/inclure/plan-breves.html | 50 +- .../compagnon/action/compagnon.php | 26 +- .../article_redaction_redacteur.html | 20 +- .../compagnon/compagnon_administrations.php | 41 +- .../compagnon/compagnon_fonctions.php | 26 +- .../compagnon/compagnon_messages.php | 77 +- .../compagnon/compagnon_pipelines.php | 95 +- .../formulaires/configurer_compagnon.html | 10 +- .../formulaires/reinitialiser_compagnon.html | 10 +- .../formulaires/reinitialiser_compagnon.php | 30 +- www/plugins-dist/compagnon/lang/compagnon.xml | 59 +- .../compagnon/lang/compagnon_ar.php | 9 +- .../compagnon/lang/compagnon_br.php | 48 + .../compagnon/lang/compagnon_ca.php | 8 +- .../compagnon/lang/compagnon_de.php | 8 +- .../compagnon/lang/compagnon_en.php | 11 +- .../compagnon/lang/compagnon_eo.php | 8 +- .../compagnon/lang/compagnon_es.php | 62 +- .../compagnon/lang/compagnon_fa.php | 8 +- .../compagnon/lang/compagnon_fr.php | 12 +- .../compagnon/lang/compagnon_fr_fem.php | 16 +- .../compagnon/lang/compagnon_fr_tu.php | 12 +- .../compagnon/lang/compagnon_it.php | 9 +- .../compagnon/lang/compagnon_lb.php | 8 +- .../compagnon/lang/compagnon_nl.php | 72 +- .../compagnon/lang/compagnon_oc_ni_mis.php | 78 + .../compagnon/lang/compagnon_pt.php | 8 +- .../compagnon/lang/compagnon_pt_br.php | 8 +- .../compagnon/lang/compagnon_ru.php | 69 +- .../compagnon/lang/compagnon_sk.php | 16 +- .../compagnon/lang/compagnon_uk.php | 63 + .../compagnon/lang/paquet-compagnon.xml | 11 +- .../compagnon/lang/paquet-compagnon_ar.php | 6 +- .../compagnon/lang/paquet-compagnon_de.php | 6 +- .../compagnon/lang/paquet-compagnon_en.php | 6 +- .../compagnon/lang/paquet-compagnon_eo.php | 6 +- .../compagnon/lang/paquet-compagnon_es.php | 6 +- .../compagnon/lang/paquet-compagnon_fa.php | 6 +- .../compagnon/lang/paquet-compagnon_fr.php | 6 +- .../lang/paquet-compagnon_fr_fem.php | 6 +- .../compagnon/lang/paquet-compagnon_fr_tu.php | 17 + .../compagnon/lang/paquet-compagnon_it.php | 6 +- .../compagnon/lang/paquet-compagnon_lb.php | 6 +- .../compagnon/lang/paquet-compagnon_nl.php | 6 +- .../lang/paquet-compagnon_oc_ni_mis.php | 17 + .../compagnon/lang/paquet-compagnon_pt.php | 6 +- .../compagnon/lang/paquet-compagnon_pt_br.php | 6 +- .../compagnon/lang/paquet-compagnon_ru.php | 6 +- .../compagnon/lang/paquet-compagnon_sk.php | 6 +- .../compagnon/lang/paquet-compagnon_uk.php | 16 + www/plugins-dist/compagnon/paquet.xml | 10 +- .../prive/javascript/jquery.twinkle.js | 1410 +- .../prive/style_prive_plugin_compagnon.html | 28 +- .../compresseur/compresseur_fonctions.php | 116 +- .../compresseur/compresseur_ieconfig.php | 56 +- .../compresseur/compresseur_options.php | 64 +- .../compresseur/compresseur_pipeline.php | 76 +- .../formulaires/configurer_compresseur.html | 55 +- .../formulaires/configurer_compresseur.php | 55 +- .../compresseur/images/compresseur-16.png | Bin 824 -> 658 bytes .../compresseur/images/compresseur-24.png | Bin 1736 -> 1437 bytes .../compresseur/images/compresseur-32.png | Bin 2448 -> 1852 bytes .../compresseur/inc/compresseur.php | 331 +- .../inc/compresseur_concatener.php | 136 +- .../compresseur/inc/compresseur_embarquer.php | 75 +- .../compresseur/inc/compresseur_minifier.php | 270 +- .../compresseur/lang/compresseur.xml | 66 +- .../compresseur/lang/compresseur_ar.php | 23 +- .../compresseur/lang/compresseur_ast.php | 14 +- .../compresseur/lang/compresseur_br.php | 11 +- .../compresseur/lang/compresseur_ca.php | 11 +- .../compresseur/lang/compresseur_co.php | 12 +- .../compresseur/lang/compresseur_de.php | 22 +- .../compresseur/lang/compresseur_en.php | 19 +- .../compresseur/lang/compresseur_eo.php | 16 +- .../compresseur/lang/compresseur_es.php | 16 +- .../compresseur/lang/compresseur_eu.php | 10 +- .../compresseur/lang/compresseur_fa.php | 13 +- .../compresseur/lang/compresseur_fr.php | 22 +- .../compresseur/lang/compresseur_fr_fem.php | 22 +- .../compresseur/lang/compresseur_fr_tu.php | 22 +- .../compresseur/lang/compresseur_gl.php | 14 +- .../compresseur/lang/compresseur_he.php | 6 +- .../compresseur/lang/compresseur_it.php | 16 +- .../compresseur/lang/compresseur_it_fem.php | 14 +- .../compresseur/lang/compresseur_lb.php | 13 +- .../compresseur/lang/compresseur_nl.php | 27 +- .../lang/compresseur_oc_ni_mis.php | 29 + .../compresseur/lang/compresseur_pt.php | 13 +- .../compresseur/lang/compresseur_pt_br.php | 19 +- .../compresseur/lang/compresseur_ro.php | 11 +- .../compresseur/lang/compresseur_ru.php | 13 +- .../compresseur/lang/compresseur_sk.php | 19 +- .../compresseur/lang/compresseur_sv.php | 9 +- .../compresseur/lang/compresseur_tr.php | 11 +- .../compresseur/lang/compresseur_uk.php | 23 +- .../compresseur/lang/paquet-compresseur.xml | 15 +- .../lang/paquet-compresseur_ar.php | 6 +- .../lang/paquet-compresseur_de.php | 6 +- .../lang/paquet-compresseur_en.php | 6 +- .../lang/paquet-compresseur_eo.php | 6 +- .../lang/paquet-compresseur_es.php | 6 +- .../lang/paquet-compresseur_fa.php | 6 +- .../lang/paquet-compresseur_fr.php | 6 +- .../lang/paquet-compresseur_fr_fem.php | 6 +- .../lang/paquet-compresseur_fr_tu.php | 15 + .../lang/paquet-compresseur_hac.php | 15 + .../lang/paquet-compresseur_it.php | 6 +- .../lang/paquet-compresseur_lb.php | 6 +- .../lang/paquet-compresseur_nl.php | 10 +- .../lang/paquet-compresseur_oc_ni_mis.php | 15 + .../lang/paquet-compresseur_pt.php | 6 +- .../lang/paquet-compresseur_pt_br.php | 6 +- .../lang/paquet-compresseur_ru.php | 6 +- .../lang/paquet-compresseur_sk.php | 6 +- .../lang/paquet-compresseur_uk.php | 15 + .../class.JavaScriptPacker.php | 2 +- .../compresseur/lib/csstidy/README | 3 + .../compresseur/lib/csstidy/class.csstidy.php | 4 +- .../lib/csstidy/class.csstidy_optimise.php | 8 +- .../lib/csstidy/class.csstidy_print.php | 6 + www/plugins-dist/compresseur/lib/jQl/README | 46 + .../compresseur/lib/jQl/README.md | 46 + www/plugins-dist/compresseur/lib/jQl/jQl.js | 291 + .../compresseur/lib/jQl/jQl.min.js | 1 + .../lib/minify_html/class.minify_html.php | 13 +- www/plugins-dist/compresseur/paquet.xml | 12 +- .../compresseur/tests/compacte.html | 3 +- .../compresseur/tests/compacte_css.php | 158 +- .../compresseur/tests/css/expected.css | 4 +- .../tests/css/expected_highest_screen.css | 2 +- .../compresseur/tests/css/expected_more.css | 6 +- .../tests/css/expected_more_screen.css | 6 +- .../tests/css/expected_url_abs.css | 21 + .../compresseur/tests/css/source.css | 5 + .../compresseur/tests/css/source_url_abs.css | 21 + www/plugins-dist/dump/action/restaurer.php | 32 +- www/plugins-dist/dump/action/sauvegarder.php | 22 +- .../dump/action/supprimer_dump.php | 45 + .../dump/action/telecharger_dump.php | 36 +- www/plugins-dist/dump/base/restaurer.php | 79 +- www/plugins-dist/dump/connect/dump.php | 15 +- www/plugins-dist/dump/dump_autoriser.php | 44 + www/plugins-dist/dump/exec/base_restaurer.php | 18 +- .../formulaires/inc-lister-sauvegardes.html | 18 +- .../inc-lister-sauvegardes_fonctions.php | 6 +- .../dump/formulaires/restaurer.html | 30 +- .../dump/formulaires/restaurer.php | 108 +- .../dump/formulaires/sauvegarder.html | 17 +- .../dump/formulaires/sauvegarder.php | 76 +- www/plugins-dist/dump/inc/dump.php | 299 +- www/plugins-dist/dump/inc/sauvegarder.php | 56 +- www/plugins-dist/dump/lang/dump.xml | 124 +- www/plugins-dist/dump/lang/dump_ar.php | 7 +- www/plugins-dist/dump/lang/dump_ast.php | 6 +- www/plugins-dist/dump/lang/dump_ay.php | 6 +- www/plugins-dist/dump/lang/dump_bg.php | 6 +- www/plugins-dist/dump/lang/dump_br.php | 6 +- www/plugins-dist/dump/lang/dump_bs.php | 6 +- www/plugins-dist/dump/lang/dump_ca.php | 6 +- www/plugins-dist/dump/lang/dump_co.php | 8 +- www/plugins-dist/dump/lang/dump_cpf.php | 6 +- www/plugins-dist/dump/lang/dump_cpf_hat.php | 6 +- www/plugins-dist/dump/lang/dump_cs.php | 6 +- www/plugins-dist/dump/lang/dump_da.php | 6 +- www/plugins-dist/dump/lang/dump_de.php | 7 +- www/plugins-dist/dump/lang/dump_en.php | 7 +- www/plugins-dist/dump/lang/dump_en_hx.php | 6 +- www/plugins-dist/dump/lang/dump_eo.php | 6 +- www/plugins-dist/dump/lang/dump_es.php | 60 +- www/plugins-dist/dump/lang/dump_eu.php | 6 +- www/plugins-dist/dump/lang/dump_fa.php | 6 +- www/plugins-dist/dump/lang/dump_fi.php | 6 +- www/plugins-dist/dump/lang/dump_fon.php | 6 +- www/plugins-dist/dump/lang/dump_fr.php | 7 +- www/plugins-dist/dump/lang/dump_fr_fem.php | 7 +- www/plugins-dist/dump/lang/dump_fr_tu.php | 7 +- www/plugins-dist/dump/lang/dump_gl.php | 6 +- www/plugins-dist/dump/lang/dump_hu.php | 6 +- www/plugins-dist/dump/lang/dump_id.php | 6 +- www/plugins-dist/dump/lang/dump_is.php | 80 - www/plugins-dist/dump/lang/dump_it.php | 7 +- www/plugins-dist/dump/lang/dump_it_fem.php | 6 +- www/plugins-dist/dump/lang/dump_ja.php | 6 +- www/plugins-dist/dump/lang/dump_km.php | 6 +- www/plugins-dist/dump/lang/dump_lb.php | 6 +- www/plugins-dist/dump/lang/dump_my.php | 6 +- www/plugins-dist/dump/lang/dump_nb.php | 6 +- www/plugins-dist/dump/lang/dump_nl.php | 34 +- www/plugins-dist/dump/lang/dump_no.php | 80 - www/plugins-dist/dump/lang/dump_oc_auv.php | 6 +- www/plugins-dist/dump/lang/dump_oc_gsc.php | 6 +- www/plugins-dist/dump/lang/dump_oc_lms.php | 6 +- www/plugins-dist/dump/lang/dump_oc_lnc.php | 6 +- www/plugins-dist/dump/lang/dump_oc_ni.php | 6 +- www/plugins-dist/dump/lang/dump_oc_ni_la.php | 6 +- www/plugins-dist/dump/lang/dump_oc_ni_mis.php | 81 + www/plugins-dist/dump/lang/dump_oc_prv.php | 6 +- www/plugins-dist/dump/lang/dump_oc_va.php | 6 +- www/plugins-dist/dump/lang/dump_pl.php | 6 +- www/plugins-dist/dump/lang/dump_pt.php | 6 +- www/plugins-dist/dump/lang/dump_pt_br.php | 40 +- www/plugins-dist/dump/lang/dump_ro.php | 6 +- www/plugins-dist/dump/lang/dump_ru.php | 21 +- www/plugins-dist/dump/lang/dump_sk.php | 7 +- www/plugins-dist/dump/lang/dump_sv.php | 6 +- www/plugins-dist/dump/lang/dump_tr.php | 6 +- www/plugins-dist/dump/lang/dump_uk.php | 78 + www/plugins-dist/dump/lang/dump_vi.php | 8 +- www/plugins-dist/dump/lang/dump_zh.php | 6 +- www/plugins-dist/dump/lang/paquet-dump.xml | 11 +- www/plugins-dist/dump/lang/paquet-dump_ar.php | 6 +- www/plugins-dist/dump/lang/paquet-dump_de.php | 6 +- www/plugins-dist/dump/lang/paquet-dump_en.php | 6 +- www/plugins-dist/dump/lang/paquet-dump_eo.php | 6 +- www/plugins-dist/dump/lang/paquet-dump_es.php | 6 +- www/plugins-dist/dump/lang/paquet-dump_fa.php | 6 +- www/plugins-dist/dump/lang/paquet-dump_fr.php | 6 +- .../dump/lang/paquet-dump_fr_fem.php | 6 +- .../dump/lang/paquet-dump_fr_tu.php | 15 + www/plugins-dist/dump/lang/paquet-dump_it.php | 6 +- www/plugins-dist/dump/lang/paquet-dump_lb.php | 6 +- www/plugins-dist/dump/lang/paquet-dump_nl.php | 6 +- .../dump/lang/paquet-dump_oc_ni_mis.php | 15 + www/plugins-dist/dump/lang/paquet-dump_pt.php | 6 +- .../dump/lang/paquet-dump_pt_br.php | 6 +- www/plugins-dist/dump/lang/paquet-dump_ru.php | 6 +- www/plugins-dist/dump/lang/paquet-dump_sk.php | 6 +- www/plugins-dist/dump/lang/paquet-dump_uk.php | 15 + www/plugins-dist/dump/paquet.xml | 6 +- .../contenu/restaurer_fonctions.php | 37 +- .../prive/squelettes/contenu/sauvegarder.html | 4 +- .../contenu/sauvegarder_fonctions.php | 56 +- .../dump/prive/style_prive_plugin_dump.html | 1 + .../filtres_images/filtres/couleurs.php | 174 +- .../filtres_images/filtres/images_lib.php | 381 +- .../filtres/images_transforme.php | 1513 +- .../filtres_images/filtres/images_typo.php | 620 +- .../filtres_images/images_fonctions.php | 29 +- .../filtres_images/inc/filtres_images.php | 33 - .../inc/filtres_images_compat.php | 56 - .../filtres_images/lang/paquet-images.xml | 11 +- .../filtres_images/lang/paquet-images_ar.php | 6 +- .../filtres_images/lang/paquet-images_de.php | 6 +- .../filtres_images/lang/paquet-images_en.php | 6 +- .../filtres_images/lang/paquet-images_es.php | 6 +- .../filtres_images/lang/paquet-images_fa.php | 6 +- .../filtres_images/lang/paquet-images_fr.php | 6 +- .../lang/paquet-images_fr_fem.php | 6 +- .../lang/paquet-images_fr_tu.php | 15 + .../filtres_images/lang/paquet-images_it.php | 6 +- .../filtres_images/lang/paquet-images_lb.php | 6 +- .../filtres_images/lang/paquet-images_nl.php | 6 +- .../lang/paquet-images_oc_ni_mis.php | 15 + .../filtres_images/lang/paquet-images_pt.php | 6 +- .../lang/paquet-images_pt_br.php | 6 +- .../filtres_images/lang/paquet-images_ru.php | 6 +- .../filtres_images/lang/paquet-images_sk.php | 6 +- .../filtres_images/lang/paquet-images_uk.php | 15 + www/plugins-dist/filtres_images/paquet.xml | 6 +- .../filtres_images/tests/_couleur_hsl2rgb.php | 3045 +- .../filtres_images/tests/_couleur_hsv2rgb.php | 3066 +- .../filtres_images/tests/_couleur_rgb2hsl.php | 8279 +++-- .../filtres_images/tests/_couleur_rgb2hsv.php | 8298 +++-- .../filtres_images/tests/couleur_extraire.php | 83 +- .../filtres_images/tests/imagesrc.html | 4 +- .../tests/multiple_de_trois.php | 207 +- www/plugins-dist/forum/README.md | 79 + www/plugins-dist/forum/TODO.md | 7 + .../forum/action/editer_forum.php | 36 +- .../forum/action/instituer_forum.php | 45 +- .../forum/action/instituer_lot_forum.php | 76 +- .../forum/balise/formulaire_forum.php | 123 +- .../forum/balise/formulaire_forum_prive.php | 69 +- www/plugins-dist/forum/base/forum.php | 144 +- .../formulaires/activer_forums_objet.html | 10 +- .../formulaires/activer_forums_objet.php | 69 +- .../configurer_forums_contenu.html | 23 +- .../formulaires/configurer_forums_contenu.php | 36 +- .../configurer_forums_notifications.html | 18 +- .../configurer_forums_notifications.php | 23 +- .../configurer_forums_participants.html | 41 +- .../configurer_forums_participants.php | 24 +- .../formulaires/configurer_forums_prives.html | 32 +- .../formulaires/configurer_forums_prives.php | 33 +- www/plugins-dist/forum/formulaires/forum.html | 83 +- www/plugins-dist/forum/formulaires/forum.php | 1065 +- .../forum/formulaires/forum_prive.html | 52 +- .../forum/formulaires/forum_prive.php | 164 +- .../forum/formulaires/gestion_forum.html | 104 - .../forum/formulaires/gestion_forum.php | 94 - .../forum/formulaires/inc-forum_previsu.html | 18 +- .../formulaires/inc-gestion_forum_liste.html | 66 - .../forum/formulaires/inc-login_forum.html | 14 +- .../forum/forum_administrations.php | 66 +- www/plugins-dist/forum/forum_autoriser.php | 230 +- www/plugins-dist/forum/forum_fonctions.php | 82 +- www/plugins-dist/forum/forum_ieconfig.php | 61 +- www/plugins-dist/forum/forum_pipelines.php | 297 +- .../inc/article_accepter_forums_publics.php | 11 +- .../forum/inc/email_notification_forum.php | 99 +- www/plugins-dist/forum/inc/forum.php | 143 +- www/plugins-dist/forum/inc/forum_insert.php | 128 +- www/plugins-dist/forum/lang/forum.xml | 153 +- www/plugins-dist/forum/lang/forum_ar.php | 13 +- www/plugins-dist/forum/lang/forum_ast.php | 6 +- www/plugins-dist/forum/lang/forum_ay.php | 6 +- www/plugins-dist/forum/lang/forum_bg.php | 6 +- www/plugins-dist/forum/lang/forum_br.php | 69 +- www/plugins-dist/forum/lang/forum_bs.php | 8 +- www/plugins-dist/forum/lang/forum_ca.php | 6 +- www/plugins-dist/forum/lang/forum_co.php | 6 +- www/plugins-dist/forum/lang/forum_cpf.php | 6 +- www/plugins-dist/forum/lang/forum_cpf_hat.php | 6 +- www/plugins-dist/forum/lang/forum_cs.php | 6 +- www/plugins-dist/forum/lang/forum_da.php | 6 +- www/plugins-dist/forum/lang/forum_de.php | 17 +- www/plugins-dist/forum/lang/forum_el.php | 6 +- www/plugins-dist/forum/lang/forum_en.php | 11 +- www/plugins-dist/forum/lang/forum_en_hx.php | 6 +- www/plugins-dist/forum/lang/forum_eo.php | 6 +- www/plugins-dist/forum/lang/forum_es.php | 101 +- www/plugins-dist/forum/lang/forum_eu.php | 31 +- www/plugins-dist/forum/lang/forum_fa.php | 7 +- www/plugins-dist/forum/lang/forum_fon.php | 6 +- www/plugins-dist/forum/lang/forum_fr.php | 11 +- www/plugins-dist/forum/lang/forum_fr_fem.php | 11 +- www/plugins-dist/forum/lang/forum_fr_tu.php | 11 +- www/plugins-dist/forum/lang/forum_gl.php | 6 +- www/plugins-dist/forum/lang/forum_grecgr.php | 176 - www/plugins-dist/forum/lang/forum_hac.php | 6 +- www/plugins-dist/forum/lang/forum_he.php | 6 +- www/plugins-dist/forum/lang/forum_hu.php | 6 +- www/plugins-dist/forum/lang/forum_id.php | 6 +- www/plugins-dist/forum/lang/forum_is.php | 6 +- www/plugins-dist/forum/lang/forum_isl.php | 176 - www/plugins-dist/forum/lang/forum_it.php | 11 +- www/plugins-dist/forum/lang/forum_it_fem.php | 6 +- www/plugins-dist/forum/lang/forum_ja.php | 6 +- www/plugins-dist/forum/lang/forum_km.php | 6 +- www/plugins-dist/forum/lang/forum_lb.php | 6 +- www/plugins-dist/forum/lang/forum_lt.php | 16 +- www/plugins-dist/forum/lang/forum_my.php | 6 +- www/plugins-dist/forum/lang/forum_nap.php | 6 +- www/plugins-dist/forum/lang/forum_nb.php | 6 +- www/plugins-dist/forum/lang/forum_nl.php | 143 +- www/plugins-dist/forum/lang/forum_oc_auv.php | 6 +- www/plugins-dist/forum/lang/forum_oc_gsc.php | 6 +- www/plugins-dist/forum/lang/forum_oc_lms.php | 6 +- www/plugins-dist/forum/lang/forum_oc_lnc.php | 6 +- www/plugins-dist/forum/lang/forum_oc_ni.php | 24 +- .../forum/lang/forum_oc_ni_la.php | 6 +- .../forum/lang/forum_oc_ni_mis.php | 185 + www/plugins-dist/forum/lang/forum_oc_prv.php | 6 +- www/plugins-dist/forum/lang/forum_oc_va.php | 6 +- www/plugins-dist/forum/lang/forum_pl.php | 6 +- www/plugins-dist/forum/lang/forum_pt.php | 6 +- www/plugins-dist/forum/lang/forum_pt_br.php | 43 +- www/plugins-dist/forum/lang/forum_rn.php | 6 +- www/plugins-dist/forum/lang/forum_ro.php | 6 +- www/plugins-dist/forum/lang/forum_roa.php | 6 +- www/plugins-dist/forum/lang/forum_ru.php | 25 +- www/plugins-dist/forum/lang/forum_sk.php | 11 +- www/plugins-dist/forum/lang/forum_sv.php | 6 +- www/plugins-dist/forum/lang/forum_tr.php | 6 +- www/plugins-dist/forum/lang/forum_uk.php | 175 + www/plugins-dist/forum/lang/forum_vi.php | 6 +- www/plugins-dist/forum/lang/forum_zh.php | 6 +- www/plugins-dist/forum/lang/paquet-forum.xml | 12 +- .../forum/lang/paquet-forum_ar.php | 6 +- .../forum/lang/paquet-forum_de.php | 6 +- .../forum/lang/paquet-forum_en.php | 6 +- .../forum/lang/paquet-forum_es.php | 6 +- .../forum/lang/paquet-forum_fa.php | 6 +- .../forum/lang/paquet-forum_fr.php | 6 +- .../forum/lang/paquet-forum_fr_fem.php | 6 +- .../forum/lang/paquet-forum_fr_tu.php | 15 + .../forum/lang/paquet-forum_it.php | 6 +- .../forum/lang/paquet-forum_lb.php | 6 +- .../forum/lang/paquet-forum_nl.php | 10 +- .../forum/lang/paquet-forum_oc_ni_mis.php | 15 + .../forum/lang/paquet-forum_pt.php | 6 +- .../forum/lang/paquet-forum_pt_br.php | 6 +- .../forum/lang/paquet-forum_ru.php | 6 +- .../forum/lang/paquet-forum_sk.php | 6 +- .../forum/lang/paquet-forum_uk.php | 15 + .../forum/notifications/forumposte.php | 49 +- .../forum/notifications/forumvalide.php | 77 +- www/plugins-dist/forum/paquet.xml | 8 +- .../forum/prive/javascript/actiongroup.js | 20 +- .../prive/modeles/forum-actions-moderer.html | 10 +- .../forum/prive/modeles/forum_fonctions.php | 21 +- .../objets/liste/controler_forum_cvt.html | 22 - .../prive/objets/liste/participer_forum.html | 4 +- .../objets/liste/participer_forum_thread.html | 18 +- www/plugins-dist/forum/prive/rss/forums.html | 4 +- .../forum/prive/rss/forums_interne.html | 2 +- .../forum/prive/rss/forums_prop.html | 4 +- .../forum/prive/rss/forums_public.html | 4 +- .../forum/prive/rss/forums_spam.html | 4 +- .../forum/prive/rss/forums_vide.html | 4 +- .../squelettes/contenu/controler_forum.html | 4 +- .../navigation/controler_forum.html | 4 +- .../forum/prive/style_prive_plugin_forum.html | 4 +- www/plugins-dist/forum/public/forum.php | 173 +- .../forum/urls/generer_url_ecrire_forum.php | 20 +- .../forum/urls/generer_url_forum.php | 16 +- .../css/images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 180 -> 0 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 178 -> 0 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 120 -> 0 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 105 -> 0 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 111 -> 0 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 110 -> 0 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 119 -> 0 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 101 -> 0 bytes .../css/images/ui-icons_222222_256x240.png | Bin 4369 -> 0 bytes .../css/images/ui-icons_2e83ff_256x240.png | Bin 4369 -> 0 bytes .../css/images/ui-icons_454545_256x240.png | Bin 4369 -> 0 bytes .../css/images/ui-icons_888888_256x240.png | Bin 4369 -> 0 bytes .../css/images/ui-icons_cd0a0a_256x240.png | Bin 4369 -> 0 bytes www/plugins-dist/jquery_ui/css/jquery-ui.css | 565 - .../jquery_ui/css/jquery.ui.accordion.css | 19 - .../jquery_ui/css/jquery.ui.all.css | 11 - .../jquery_ui/css/jquery.ui.autocomplete.css | 53 - .../jquery_ui/css/jquery.ui.base.css | 11 - .../jquery_ui/css/jquery.ui.button.css | 38 - .../jquery_ui/css/jquery.ui.core.css | 38 - .../jquery_ui/css/jquery.ui.datepicker.css | 68 - .../jquery_ui/css/jquery.ui.dialog.css | 21 - .../jquery_ui/css/jquery.ui.progressbar.css | 11 - .../jquery_ui/css/jquery.ui.resizable.css | 20 - .../jquery_ui/css/jquery.ui.selectable.css | 10 - .../jquery_ui/css/jquery.ui.slider.css | 24 - .../jquery_ui/css/jquery.ui.tabs.css | 18 - .../jquery_ui/css/jquery.ui.theme.css | 249 - .../css/ui/images/ui-icons_444444_256x240.png | Bin 0 -> 6992 bytes .../css/ui/images/ui-icons_555555_256x240.png | Bin 0 -> 6988 bytes .../css/ui/images/ui-icons_777620_256x240.png | Bin 0 -> 4549 bytes .../css/ui/images/ui-icons_777777_256x240.png | Bin 0 -> 6999 bytes .../css/ui/images/ui-icons_cc0000_256x240.png | Bin 0 -> 4549 bytes .../css/ui/images/ui-icons_ffffff_256x240.png | Bin 0 -> 6299 bytes .../jquery_ui/css/ui/jquery-ui.css | 1312 + .../jquery_ui/css/ui/jquery-ui.min.css | 7 + .../jquery_ui/css/ui/jquery-ui.structure.css | 886 + .../css/ui/jquery-ui.structure.min.css | 5 + .../jquery_ui/css/ui/jquery-ui.theme.css | 443 + .../jquery_ui/css/ui/jquery-ui.theme.min.css | 5 + .../jquery_ui/jqueryui_pipelines.php | 422 +- .../jquery_ui/lang/paquet-jqueryui.xml | 30 +- .../jquery_ui/lang/paquet-jqueryui_ar.php | 6 +- .../jquery_ui/lang/paquet-jqueryui_de.php | 6 +- .../jquery_ui/lang/paquet-jqueryui_en.php | 6 +- .../jquery_ui/lang/paquet-jqueryui_es.php | 18 +- .../jquery_ui/lang/paquet-jqueryui_fr.php | 8 +- .../jquery_ui/lang/paquet-jqueryui_fr_fem.php | 8 +- .../jquery_ui/lang/paquet-jqueryui_fr_tu.php | 19 + .../jquery_ui/lang/paquet-jqueryui_it.php | 6 +- .../jquery_ui/lang/paquet-jqueryui_lb.php | 8 +- .../jquery_ui/lang/paquet-jqueryui_nl.php | 18 +- .../lang/paquet-jqueryui_oc_ni_mis.php | 19 + .../jquery_ui/lang/paquet-jqueryui_pt.php | 8 +- .../jquery_ui/lang/paquet-jqueryui_pt_br.php | 19 + .../jquery_ui/lang/paquet-jqueryui_ru.php | 14 +- .../jquery_ui/lang/paquet-jqueryui_sk.php | 8 +- .../jquery_ui/lang/paquet-jqueryui_uk.php | 19 + www/plugins-dist/jquery_ui/paquet.xml | 7 +- .../prive/javascript/ui/i18n/datepicker-af.js | 37 + .../javascript/ui/i18n/datepicker-ar-DZ.js | 39 + .../prive/javascript/ui/i18n/datepicker-ar.js | 39 + .../prive/javascript/ui/i18n/datepicker-az.js | 37 + .../prive/javascript/ui/i18n/datepicker-be.js | 37 + .../prive/javascript/ui/i18n/datepicker-bg.js | 38 + .../prive/javascript/ui/i18n/datepicker-bs.js | 37 + .../prive/javascript/ui/i18n/datepicker-ca.js | 37 + .../prive/javascript/ui/i18n/datepicker-cs.js | 37 + .../javascript/ui/i18n/datepicker-cy-GB.js | 45 + .../prive/javascript/ui/i18n/datepicker-da.js | 37 + .../prive/javascript/ui/i18n/datepicker-de.js | 37 + .../prive/javascript/ui/i18n/datepicker-el.js | 37 + .../javascript/ui/i18n/datepicker-en-AU.js | 37 + .../javascript/ui/i18n/datepicker-en-GB.js | 37 + .../javascript/ui/i18n/datepicker-en-NZ.js | 37 + .../prive/javascript/ui/i18n/datepicker-eo.js | 37 + .../prive/javascript/ui/i18n/datepicker-es.js | 37 + .../prive/javascript/ui/i18n/datepicker-et.js | 45 + .../prive/javascript/ui/i18n/datepicker-eu.js | 36 + .../prive/javascript/ui/i18n/datepicker-fa.js | 73 + .../prive/javascript/ui/i18n/datepicker-fi.js | 37 + .../prive/javascript/ui/i18n/datepicker-fo.js | 45 + .../javascript/ui/i18n/datepicker-fr-CA.js | 37 + .../javascript/ui/i18n/datepicker-fr-CH.js | 37 + .../prive/javascript/ui/i18n/datepicker-fr.js | 39 + .../prive/javascript/ui/i18n/datepicker-gl.js | 37 + .../prive/javascript/ui/i18n/datepicker-he.js | 37 + .../prive/javascript/ui/i18n/datepicker-hi.js | 37 + .../prive/javascript/ui/i18n/datepicker-hr.js | 37 + .../prive/javascript/ui/i18n/datepicker-hu.js | 36 + .../prive/javascript/ui/i18n/datepicker-hy.js | 37 + .../prive/javascript/ui/i18n/datepicker-id.js | 37 + .../prive/javascript/ui/i18n/datepicker-is.js | 45 + .../javascript/ui/i18n/datepicker-it-CH.js | 37 + .../prive/javascript/ui/i18n/datepicker-it.js | 37 + .../prive/javascript/ui/i18n/datepicker-ja.js | 37 + .../prive/javascript/ui/i18n/datepicker-ka.js | 48 + .../prive/javascript/ui/i18n/datepicker-kk.js | 37 + .../prive/javascript/ui/i18n/datepicker-km.js | 37 + .../prive/javascript/ui/i18n/datepicker-ko.js | 37 + .../prive/javascript/ui/i18n/datepicker-ky.js | 38 + .../prive/javascript/ui/i18n/datepicker-lb.js | 45 + .../prive/javascript/ui/i18n/datepicker-lt.js | 45 + .../prive/javascript/ui/i18n/datepicker-lv.js | 45 + .../prive/javascript/ui/i18n/datepicker-mk.js | 37 + .../prive/javascript/ui/i18n/datepicker-ml.js | 37 + .../prive/javascript/ui/i18n/datepicker-ms.js | 37 + .../prive/javascript/ui/i18n/datepicker-nb.js | 49 + .../javascript/ui/i18n/datepicker-nl-BE.js | 37 + .../prive/javascript/ui/i18n/datepicker-nl.js | 37 + .../prive/javascript/ui/i18n/datepicker-nn.js | 49 + .../prive/javascript/ui/i18n/datepicker-no.js | 50 + .../prive/javascript/ui/i18n/datepicker-pl.js | 37 + .../javascript/ui/i18n/datepicker-pt-BR.js | 45 + .../prive/javascript/ui/i18n/datepicker-pt.js | 44 + .../prive/javascript/ui/i18n/datepicker-rm.js | 61 + .../prive/javascript/ui/i18n/datepicker-ro.js | 40 + .../prive/javascript/ui/i18n/datepicker-ru.js | 37 + .../prive/javascript/ui/i18n/datepicker-sk.js | 37 + .../prive/javascript/ui/i18n/datepicker-sl.js | 38 + .../prive/javascript/ui/i18n/datepicker-sq.js | 37 + .../javascript/ui/i18n/datepicker-sr-SR.js | 37 + .../prive/javascript/ui/i18n/datepicker-sr.js | 37 + .../prive/javascript/ui/i18n/datepicker-sv.js | 37 + .../prive/javascript/ui/i18n/datepicker-ta.js | 53 + .../prive/javascript/ui/i18n/datepicker-th.js | 37 + .../prive/javascript/ui/i18n/datepicker-tj.js | 37 + .../prive/javascript/ui/i18n/datepicker-tr.js | 37 + .../prive/javascript/ui/i18n/datepicker-uk.js | 38 + .../prive/javascript/ui/i18n/datepicker-vi.js | 37 + .../javascript/ui/i18n/datepicker-zh-CN.js | 37 + .../javascript/ui/i18n/datepicker-zh-HK.js | 37 + .../javascript/ui/i18n/datepicker-zh-TW.js | 37 + .../javascript/ui/i18n/jquery-ui-i18n.js | 1646 - .../ui/i18n/jquery.ui.datepicker-af.js | 23 - .../ui/i18n/jquery.ui.datepicker-ar-DZ.js | 23 - .../ui/i18n/jquery.ui.datepicker-ar.js | 23 - .../ui/i18n/jquery.ui.datepicker-az.js | 23 - .../ui/i18n/jquery.ui.datepicker-bg.js | 24 - .../ui/i18n/jquery.ui.datepicker-bs.js | 23 - .../ui/i18n/jquery.ui.datepicker-ca.js | 23 - .../ui/i18n/jquery.ui.datepicker-cs.js | 23 - .../ui/i18n/jquery.ui.datepicker-cy-GB.js | 23 - .../ui/i18n/jquery.ui.datepicker-da.js | 23 - .../ui/i18n/jquery.ui.datepicker-de.js | 23 - .../ui/i18n/jquery.ui.datepicker-el.js | 23 - .../ui/i18n/jquery.ui.datepicker-en-AU.js | 23 - .../ui/i18n/jquery.ui.datepicker-en-GB.js | 23 - .../ui/i18n/jquery.ui.datepicker-en-NZ.js | 23 - .../ui/i18n/jquery.ui.datepicker-eo.js | 23 - .../ui/i18n/jquery.ui.datepicker-es.js | 23 - .../ui/i18n/jquery.ui.datepicker-et.js | 23 - .../ui/i18n/jquery.ui.datepicker-eu.js | 23 - .../ui/i18n/jquery.ui.datepicker-fa.js | 59 - .../ui/i18n/jquery.ui.datepicker-fi.js | 23 - .../ui/i18n/jquery.ui.datepicker-fo.js | 23 - .../ui/i18n/jquery.ui.datepicker-fr-CH.js | 23 - .../ui/i18n/jquery.ui.datepicker-fr.js | 25 - .../ui/i18n/jquery.ui.datepicker-gl.js | 23 - .../ui/i18n/jquery.ui.datepicker-he.js | 23 - .../ui/i18n/jquery.ui.datepicker-hi.js | 23 - .../ui/i18n/jquery.ui.datepicker-hr.js | 23 - .../ui/i18n/jquery.ui.datepicker-hu.js | 23 - .../ui/i18n/jquery.ui.datepicker-hy.js | 23 - .../ui/i18n/jquery.ui.datepicker-id.js | 23 - .../ui/i18n/jquery.ui.datepicker-is.js | 23 - .../ui/i18n/jquery.ui.datepicker-it.js | 23 - .../ui/i18n/jquery.ui.datepicker-ja.js | 23 - .../ui/i18n/jquery.ui.datepicker-ka.js | 21 - .../ui/i18n/jquery.ui.datepicker-kk.js | 23 - .../ui/i18n/jquery.ui.datepicker-km.js | 23 - .../ui/i18n/jquery.ui.datepicker-ko.js | 23 - .../ui/i18n/jquery.ui.datepicker-lb.js | 23 - .../ui/i18n/jquery.ui.datepicker-lt.js | 23 - .../ui/i18n/jquery.ui.datepicker-lv.js | 23 - .../ui/i18n/jquery.ui.datepicker-mk.js | 23 - .../ui/i18n/jquery.ui.datepicker-ml.js | 23 - .../ui/i18n/jquery.ui.datepicker-ms.js | 23 - .../ui/i18n/jquery.ui.datepicker-nl-BE.js | 23 - .../ui/i18n/jquery.ui.datepicker-nl.js | 23 - .../ui/i18n/jquery.ui.datepicker-no.js | 23 - .../ui/i18n/jquery.ui.datepicker-pl.js | 23 - .../ui/i18n/jquery.ui.datepicker-pt-BR.js | 23 - .../ui/i18n/jquery.ui.datepicker-pt.js | 22 - .../ui/i18n/jquery.ui.datepicker-rm.js | 21 - .../ui/i18n/jquery.ui.datepicker-ro.js | 26 - .../ui/i18n/jquery.ui.datepicker-ru.js | 23 - .../ui/i18n/jquery.ui.datepicker-sk.js | 23 - .../ui/i18n/jquery.ui.datepicker-sl.js | 24 - .../ui/i18n/jquery.ui.datepicker-sq.js | 23 - .../ui/i18n/jquery.ui.datepicker-sr-SR.js | 23 - .../ui/i18n/jquery.ui.datepicker-sr.js | 23 - .../ui/i18n/jquery.ui.datepicker-sv.js | 23 - .../ui/i18n/jquery.ui.datepicker-ta.js | 23 - .../ui/i18n/jquery.ui.datepicker-th.js | 23 - .../ui/i18n/jquery.ui.datepicker-tj.js | 23 - .../ui/i18n/jquery.ui.datepicker-tr.js | 23 - .../ui/i18n/jquery.ui.datepicker-uk.js | 24 - .../ui/i18n/jquery.ui.datepicker-vi.js | 23 - .../ui/i18n/jquery.ui.datepicker-zh-CN.js | 23 - .../ui/i18n/jquery.ui.datepicker-zh-HK.js | 23 - .../ui/i18n/jquery.ui.datepicker-zh-TW.js | 23 - .../prive/javascript/ui/jquery-ui.js | 26257 ++++++++++------ .../prive/javascript/ui/jquery-ui.min.js | 13 + .../javascript/ui/jquery.effects.blind.js | 49 - .../javascript/ui/jquery.effects.bounce.js | 78 - .../javascript/ui/jquery.effects.clip.js | 54 - .../javascript/ui/jquery.effects.core.js | 772 - .../javascript/ui/jquery.effects.drop.js | 50 - .../javascript/ui/jquery.effects.explode.js | 79 - .../javascript/ui/jquery.effects.fade.js | 32 - .../javascript/ui/jquery.effects.fold.js | 56 - .../javascript/ui/jquery.effects.highlight.js | 50 - .../javascript/ui/jquery.effects.pulsate.js | 51 - .../javascript/ui/jquery.effects.scale.js | 178 - .../javascript/ui/jquery.effects.shake.js | 57 - .../javascript/ui/jquery.effects.slide.js | 50 - .../javascript/ui/jquery.effects.transfer.js | 45 - .../javascript/ui/jquery.ui.accordion.js | 611 - .../javascript/ui/jquery.ui.autocomplete.js | 631 - .../prive/javascript/ui/jquery.ui.button.js | 414 - .../prive/javascript/ui/jquery.ui.core.js | 319 - .../javascript/ui/jquery.ui.datepicker.js | 1824 -- .../prive/javascript/ui/jquery.ui.dialog.js | 878 - .../javascript/ui/jquery.ui.draggable.js | 833 - .../javascript/ui/jquery.ui.droppable.js | 296 - .../prive/javascript/ui/jquery.ui.mouse.js | 165 - .../prive/javascript/ui/jquery.ui.position.js | 303 - .../javascript/ui/jquery.ui.progressbar.js | 109 - .../javascript/ui/jquery.ui.resizable.js | 807 - .../javascript/ui/jquery.ui.selectable.js | 267 - .../prive/javascript/ui/jquery.ui.slider.js | 662 - .../prive/javascript/ui/jquery.ui.sortable.js | 1082 - .../prive/javascript/ui/jquery.ui.tabs.js | 757 - .../prive/javascript/ui/jquery.ui.widget.js | 272 - .../colorbox/black-greybox/colorbox.css | 71 +- .../colorbox/black-greybox/colorbox_rtl.css | 73 +- .../colorbox/black-greybox/images/border.png | Bin 163 -> 139 bytes .../black-greybox/images/controls.png | Bin 2324 -> 2027 bytes .../colorbox/black-simple/colorbox.css | 54 +- .../colorbox/black-simple/colorbox_rtl.css | 56 +- .../colorbox/black-striped/colorbox.css | 97 +- .../colorbox/black-striped/colorbox_rtl.css | 97 +- .../black-striped/images/controls.png | Bin 1249 -> 1261 bytes .../internet_explorer/borderBottomCenter.png | Bin 111 -> 0 bytes .../internet_explorer/borderBottomLeft.png | Bin 215 -> 0 bytes .../internet_explorer/borderBottomRight.png | Bin 217 -> 0 bytes .../internet_explorer/borderMiddleLeft.png | Bin 108 -> 0 bytes .../internet_explorer/borderMiddleRight.png | Bin 108 -> 0 bytes .../internet_explorer/borderTopCenter.png | Bin 111 -> 0 bytes .../internet_explorer/borderTopLeft.png | Bin 216 -> 0 bytes .../internet_explorer/borderTopRight.png | Bin 214 -> 0 bytes .../colorbox/black-striped/images/overlay.png | Bin 182 -> 115 bytes .../mediabox/colorbox/bootstrap/colorbox.css | 22 +- .../colorbox/bootstrap/colorbox_rtl.css | 23 +- .../mediabox/colorbox/fancybox/colorbox.css | 47 +- .../colorbox/fancybox/colorbox_rtl.css | 45 +- .../fancybox/mediabox_config_theme.php | 9 +- .../mediabox/colorbox/thickbox/colorbox.css | 41 +- .../colorbox/thickbox/colorbox_rtl.css | 45 +- .../colorbox/white-shadow/colorbox.css | 100 +- .../colorbox/white-shadow/colorbox_rtl.css | 100 +- .../colorbox/white-shadow/images/border1.png | Bin 896 -> 629 bytes .../colorbox/white-shadow/images/border2.png | Bin 183 -> 112 bytes .../internet_explorer/borderBottomCenter.png | Bin 153 -> 0 bytes .../internet_explorer/borderBottomLeft.png | Bin 473 -> 0 bytes .../internet_explorer/borderBottomRight.png | Bin 470 -> 0 bytes .../internet_explorer/borderMiddleLeft.png | Bin 154 -> 0 bytes .../internet_explorer/borderMiddleRight.png | Bin 148 -> 0 bytes .../internet_explorer/borderTopCenter.png | Bin 143 -> 0 bytes .../internet_explorer/borderTopLeft.png | Bin 405 -> 0 bytes .../internet_explorer/borderTopRight.png | Bin 465 -> 0 bytes .../colorbox/white-simple/colorbox.css | 48 +- .../colorbox/white-simple/colorbox_rtl.css | 61 +- .../colorbox/white-simple/images/controls.png | Bin 1652 -> 503 bytes .../white-simple/images/start_rtl.png | Bin 0 -> 178 bytes .../formulaires/configurer_mediabox.html | 103 +- .../formulaires/configurer_mediabox.php | 193 +- .../mediabox/javascript/jquery.colorbox.js | 2127 +- .../mediabox/javascript/spip.mediabox.js | 14 +- .../mediabox/javascript/splash.mediabox.js | 37 +- www/plugins-dist/mediabox/lang/mediabox.xml | 57 +- .../mediabox/lang/mediabox_ar.php | 10 +- .../mediabox/lang/mediabox_de.php | 8 +- .../mediabox/lang/mediabox_en.php | 8 +- .../mediabox/lang/mediabox_es.php | 8 +- .../mediabox/lang/mediabox_fa.php | 6 +- .../mediabox/lang/mediabox_fr.php | 8 +- .../mediabox/lang/mediabox_fr_fem.php | 8 +- .../mediabox/lang/mediabox_fr_tu.php | 55 + .../mediabox/lang/mediabox_it.php | 8 +- .../mediabox/lang/mediabox_lb.php | 8 +- .../mediabox/lang/mediabox_nl.php | 30 +- .../mediabox/lang/mediabox_oc_ni_mis.php | 55 + .../mediabox/lang/mediabox_pt.php | 8 +- .../mediabox/lang/mediabox_pt_br.php | 55 + .../mediabox/lang/mediabox_ru.php | 10 +- .../mediabox/lang/mediabox_sk.php | 8 +- .../mediabox/lang/mediabox_uk.php | 55 + .../mediabox/lang/paquet-mediabox.xml | 15 +- .../mediabox/lang/paquet-mediabox_ar.php | 6 +- .../mediabox/lang/paquet-mediabox_de.php | 6 +- .../mediabox/lang/paquet-mediabox_en.php | 6 +- .../mediabox/lang/paquet-mediabox_es.php | 6 +- .../mediabox/lang/paquet-mediabox_fa.php | 6 +- .../mediabox/lang/paquet-mediabox_fr.php | 6 +- .../mediabox/lang/paquet-mediabox_fr_fem.php | 6 +- .../mediabox/lang/paquet-mediabox_fr_tu.php | 28 + .../mediabox/lang/paquet-mediabox_it.php | 6 +- .../mediabox/lang/paquet-mediabox_lb.php | 6 +- .../mediabox/lang/paquet-mediabox_nl.php | 14 +- .../lang/paquet-mediabox_oc_ni_mis.php | 28 + .../mediabox/lang/paquet-mediabox_pt.php | 6 +- .../mediabox/lang/paquet-mediabox_pt_br.php | 28 + .../mediabox/lang/paquet-mediabox_ru.php | 6 +- .../mediabox/lang/paquet-mediabox_sk.php | 6 +- .../mediabox/lang/paquet-mediabox_uk.php | 27 + .../mediabox/mediabox_ieconfig.php | 28 +- .../mediabox/mediabox_pipelines.php | 247 +- www/plugins-dist/mediabox/paquet.xml | 6 +- .../prive/colorbox/white-shadow/colorbox.css | 117 +- .../colorbox/white-shadow/colorbox_rtl.css | 74 + .../internet_explorer/borderBottomCenter.png | Bin 153 -> 0 bytes .../internet_explorer/borderBottomLeft.png | Bin 473 -> 0 bytes .../internet_explorer/borderBottomRight.png | Bin 470 -> 0 bytes .../internet_explorer/borderMiddleLeft.png | Bin 154 -> 0 bytes .../internet_explorer/borderMiddleRight.png | Bin 148 -> 0 bytes .../internet_explorer/borderTopCenter.png | Bin 143 -> 0 bytes .../internet_explorer/borderTopLeft.png | Bin 405 -> 0 bytes .../internet_explorer/borderTopRight.png | Bin 465 -> 0 bytes .../medias/action/acceder_document.php | 168 +- .../medias/action/ajouter_documents.php | 478 +- .../medias/action/changer_mode_document.php | 28 +- .../medias/action/copier_local.php | 51 +- .../action/desordonner_liens_documents.php | 108 + .../medias/action/dissocier_document.php | 120 +- .../medias/action/editer_document.php | 267 +- .../action/ordonner_liens_documents.php | 103 + .../medias/action/supprimer_document.php | 55 +- .../action/supprimer_tous_orphelins.php | 114 +- www/plugins-dist/medias/action/tourner.php | 96 +- .../action/verifier_documents_brises.php | 17 +- .../action/verifier_documents_liens.php | 26 +- www/plugins-dist/medias/base/medias.php | 281 +- www/plugins-dist/medias/base/typedoc.php | 814 +- .../formulaires/changer_fichier_document.html | 14 +- .../formulaires/changer_fichier_document.php | 55 +- .../formulaires/configurer_documents.html | 14 +- .../formulaires/configurer_documents.php | 58 +- .../medias/formulaires/editer_document.html | 101 +- .../medias/formulaires/editer_document.php | 244 +- .../formulaires/illustrer_document.html | 17 +- .../medias/formulaires/illustrer_document.php | 65 +- .../inc-lister_archive_jointe.html | 18 +- .../formulaires/inc-upload_document.html | 202 +- .../medias/formulaires/joindre_document.html | 3 +- .../medias/formulaires/joindre_document.php | 834 +- .../formulaires/methodes_upload/distant.html | 8 + .../formulaires/methodes_upload/ftp.html | 16 + .../methodes_upload/mediatheque.html | 14 + .../formulaires/methodes_upload/upload.html | 8 + .../medias/inc/choisir_mode_document.php | 49 +- .../medias/inc/documenter_objet.php | 40 +- www/plugins-dist/medias/inc/documents.php | 188 +- www/plugins-dist/medias/inc/getdocument.php | 55 +- .../medias/inc/joindre_document.php | 746 +- .../medias/inc/marquer_doublons_doc.php | 234 +- .../medias/inc/renseigner_document.php | 129 +- .../inc/verifier_document_mode_image.php | 20 +- .../inc/verifier_document_mode_vignette.php | 20 +- www/plugins-dist/medias/inc/vignette.php | 56 +- .../gestion_listes_documents.js.html | 195 + .../medias/javascript/jquery.multifile.js | 639 +- .../medias/javascript/medias_edit.js | 11 +- .../medias/javascript/mejs-init.js | 94 + .../medias/javascript/mejs-init.min.js | 1 + www/plugins-dist/medias/lang/medias.xml | 152 +- www/plugins-dist/medias/lang/medias_ar.php | 27 +- www/plugins-dist/medias/lang/medias_ast.php | 6 +- www/plugins-dist/medias/lang/medias_ay.php | 6 +- www/plugins-dist/medias/lang/medias_bg.php | 6 +- www/plugins-dist/medias/lang/medias_br.php | 6 +- www/plugins-dist/medias/lang/medias_bs.php | 6 +- www/plugins-dist/medias/lang/medias_ca.php | 6 +- www/plugins-dist/medias/lang/medias_co.php | 6 +- www/plugins-dist/medias/lang/medias_cpf.php | 6 +- .../medias/lang/medias_cpf_hat.php | 6 +- www/plugins-dist/medias/lang/medias_cs.php | 6 +- www/plugins-dist/medias/lang/medias_da.php | 6 +- www/plugins-dist/medias/lang/medias_de.php | 24 +- www/plugins-dist/medias/lang/medias_el.php | 6 +- www/plugins-dist/medias/lang/medias_en.php | 27 +- www/plugins-dist/medias/lang/medias_en_hx.php | 6 +- www/plugins-dist/medias/lang/medias_eo.php | 6 +- www/plugins-dist/medias/lang/medias_es.php | 81 +- www/plugins-dist/medias/lang/medias_eu.php | 6 +- www/plugins-dist/medias/lang/medias_fa.php | 9 +- www/plugins-dist/medias/lang/medias_fon.php | 6 +- www/plugins-dist/medias/lang/medias_fr.php | 25 +- .../medias/lang/medias_fr_fem.php | 21 +- www/plugins-dist/medias/lang/medias_fr_tu.php | 25 +- www/plugins-dist/medias/lang/medias_gl.php | 6 +- www/plugins-dist/medias/lang/medias_hac.php | 6 +- www/plugins-dist/medias/lang/medias_he.php | 6 +- www/plugins-dist/medias/lang/medias_hr.php | 6 +- www/plugins-dist/medias/lang/medias_hu.php | 6 +- www/plugins-dist/medias/lang/medias_id.php | 6 +- www/plugins-dist/medias/lang/medias_is.php | 6 +- www/plugins-dist/medias/lang/medias_it.php | 9 +- .../medias/lang/medias_it_fem.php | 6 +- www/plugins-dist/medias/lang/medias_ja.php | 6 +- www/plugins-dist/medias/lang/medias_km.php | 6 +- www/plugins-dist/medias/lang/medias_kr.php | 192 - www/plugins-dist/medias/lang/medias_la.php | 6 +- www/plugins-dist/medias/lang/medias_lb.php | 7 +- www/plugins-dist/medias/lang/medias_lt.php | 6 +- www/plugins-dist/medias/lang/medias_my.php | 6 +- www/plugins-dist/medias/lang/medias_nap.php | 6 +- www/plugins-dist/medias/lang/medias_nb.php | 6 +- www/plugins-dist/medias/lang/medias_ne.php | 6 +- www/plugins-dist/medias/lang/medias_nl.php | 191 +- .../medias/lang/medias_oc_auv.php | 6 +- .../medias/lang/medias_oc_gsc.php | 6 +- .../medias/lang/medias_oc_lms.php | 6 +- .../medias/lang/medias_oc_lnc.php | 6 +- www/plugins-dist/medias/lang/medias_oc_ni.php | 6 +- .../medias/lang/medias_oc_ni_la.php | 6 +- .../medias/lang/medias_oc_ni_mis.php | 195 + .../medias/lang/medias_oc_prv.php | 6 +- www/plugins-dist/medias/lang/medias_oc_va.php | 6 +- www/plugins-dist/medias/lang/medias_pl.php | 6 +- www/plugins-dist/medias/lang/medias_pt.php | 7 +- www/plugins-dist/medias/lang/medias_pt_br.php | 111 +- www/plugins-dist/medias/lang/medias_ro.php | 6 +- www/plugins-dist/medias/lang/medias_roa.php | 6 +- www/plugins-dist/medias/lang/medias_ru.php | 31 +- www/plugins-dist/medias/lang/medias_sk.php | 23 +- www/plugins-dist/medias/lang/medias_sq.php | 6 +- www/plugins-dist/medias/lang/medias_sv.php | 6 +- www/plugins-dist/medias/lang/medias_tr.php | 6 +- www/plugins-dist/medias/lang/medias_uk.php | 207 + www/plugins-dist/medias/lang/medias_vi.php | 6 +- www/plugins-dist/medias/lang/medias_wo.php | 6 +- www/plugins-dist/medias/lang/medias_zh.php | 6 +- .../medias/lang/paquet-medias.xml | 11 +- .../medias/lang/paquet-medias_ar.php | 6 +- .../medias/lang/paquet-medias_de.php | 6 +- .../medias/lang/paquet-medias_en.php | 6 +- .../medias/lang/paquet-medias_es.php | 6 +- .../medias/lang/paquet-medias_fa.php | 6 +- .../medias/lang/paquet-medias_fr.php | 6 +- .../medias/lang/paquet-medias_fr_fem.php | 6 +- .../medias/lang/paquet-medias_fr_tu.php | 15 + .../medias/lang/paquet-medias_it.php | 6 +- .../medias/lang/paquet-medias_lb.php | 6 +- .../medias/lang/paquet-medias_nl.php | 6 +- .../medias/lang/paquet-medias_oc_ni_mis.php | 15 + .../medias/lang/paquet-medias_pt.php | 6 +- .../medias/lang/paquet-medias_pt_br.php | 6 +- .../medias/lang/paquet-medias_ru.php | 6 +- .../medias/lang/paquet-medias_sk.php | 6 +- .../medias/lang/paquet-medias_uk.php | 15 + .../medias/lib/getid3/extension.cache.dbm.php | 209 + .../lib/getid3/extension.cache.mysql.php | 190 + .../lib/getid3/extension.cache.mysqli.php | 183 + .../lib/getid3/extension.cache.sqlite3.php | 266 + .../medias/lib/getid3/getid3.lib.php | 1433 + www/plugins-dist/medias/lib/getid3/getid3.php | 1840 ++ .../medias/lib/getid3/module.archive.gzip.php | 281 + .../medias/lib/getid3/module.archive.rar.php | 51 + .../medias/lib/getid3/module.archive.szip.php | 97 + .../medias/lib/getid3/module.archive.tar.php | 177 + .../medias/lib/getid3/module.archive.zip.php | 513 + .../lib/getid3/module.audio-video.asf.php | 2013 ++ .../lib/getid3/module.audio-video.bink.php | 72 + .../lib/getid3/module.audio-video.flv.php | 745 + .../getid3/module.audio-video.matroska.php | 1790 ++ .../lib/getid3/module.audio-video.mpeg.php | 606 + .../lib/getid3/module.audio-video.nsv.php | 224 + .../getid3/module.audio-video.quicktime.php | 2493 ++ .../lib/getid3/module.audio-video.real.php | 528 + .../lib/getid3/module.audio-video.riff.php | 2595 ++ .../lib/getid3/module.audio-video.swf.php | 140 + .../lib/getid3/module.audio-video.ts.php | 79 + .../medias/lib/getid3/module.audio.aa.php | 59 + .../medias/lib/getid3/module.audio.aac.php | 513 + .../medias/lib/getid3/module.audio.ac3.php | 733 + .../medias/lib/getid3/module.audio.amr.php | 96 + .../medias/lib/getid3/module.audio.au.php | 163 + .../medias/lib/getid3/module.audio.avr.php | 125 + .../medias/lib/getid3/module.audio.bonk.php | 228 + .../medias/lib/getid3/module.audio.dsf.php | 133 + .../medias/lib/getid3/module.audio.dss.php | 99 + .../medias/lib/getid3/module.audio.dts.php | 291 + .../medias/lib/getid3/module.audio.flac.php | 453 + .../medias/lib/getid3/module.audio.la.php | 226 + .../medias/lib/getid3/module.audio.lpac.php | 128 + .../medias/lib/getid3/module.audio.midi.php | 530 + .../medias/lib/getid3/module.audio.mod.php | 99 + .../medias/lib/getid3/module.audio.monkey.php | 204 + .../medias/lib/getid3/module.audio.mp3.php | 2022 ++ .../medias/lib/getid3/module.audio.mpc.php | 507 + .../medias/lib/getid3/module.audio.ogg.php | 840 + .../lib/getid3/module.audio.optimfrog.php | 427 + .../medias/lib/getid3/module.audio.rkau.php | 93 + .../lib/getid3/module.audio.shorten.php | 182 + .../medias/lib/getid3/module.audio.tta.php | 107 + .../medias/lib/getid3/module.audio.voc.php | 205 + .../medias/lib/getid3/module.audio.vqf.php | 160 + .../lib/getid3/module.audio.wavpack.php | 398 + .../medias/lib/getid3/module.graphic.bmp.php | 688 + .../medias/lib/getid3/module.graphic.efax.php | 51 + .../medias/lib/getid3/module.graphic.gif.php | 182 + .../medias/lib/getid3/module.graphic.jpg.php | 349 + .../medias/lib/getid3/module.graphic.pcd.php | 133 + .../medias/lib/getid3/module.graphic.png.php | 530 + .../medias/lib/getid3/module.graphic.svg.php | 102 + .../medias/lib/getid3/module.graphic.tiff.php | 225 + .../medias/lib/getid3/module.misc.cue.php | 312 + .../medias/lib/getid3/module.misc.exe.php | 59 + .../medias/lib/getid3/module.misc.iso.php | 388 + .../lib/getid3/module.misc.msoffice.php | 38 + .../medias/lib/getid3/module.misc.par2.php | 31 + .../medias/lib/getid3/module.misc.pdf.php | 31 + .../medias/lib/getid3/module.tag.apetag.php | 416 + .../medias/lib/getid3/module.tag.id3v1.php | 381 + .../medias/lib/getid3/module.tag.id3v2.php | 3742 +++ .../medias/lib/getid3/module.tag.lyrics3.php | 298 + .../medias/lib/getid3/module.tag.xmp.php | 768 + .../medias/lib/getid3/write.apetag.php | 224 + .../medias/lib/getid3/write.id3v1.php | 137 + .../medias/lib/getid3/write.id3v2.php | 2109 ++ .../medias/lib/getid3/write.lyrics3.php | 72 + .../medias/lib/getid3/write.metaflac.php | 162 + www/plugins-dist/medias/lib/getid3/write.php | 653 + .../medias/lib/getid3/write.real.php | 274 + .../medias/lib/getid3/write.vorbiscomment.php | 120 + www/plugins-dist/medias/lib/mejs/lang/ca.js | 89 + www/plugins-dist/medias/lib/mejs/lang/cs.js | 90 + www/plugins-dist/medias/lib/mejs/lang/de.js | 90 + www/plugins-dist/medias/lib/mejs/lang/es.js | 90 + www/plugins-dist/medias/lib/mejs/lang/fa.js | 90 + www/plugins-dist/medias/lib/mejs/lang/fr.js | 91 + www/plugins-dist/medias/lib/mejs/lang/hr.js | 87 + www/plugins-dist/medias/lib/mejs/lang/hu.js | 90 + www/plugins-dist/medias/lib/mejs/lang/it.js | 90 + www/plugins-dist/medias/lib/mejs/lang/ja.js | 90 + www/plugins-dist/medias/lib/mejs/lang/ko.js | 90 + www/plugins-dist/medias/lib/mejs/lang/nl.js | 91 + www/plugins-dist/medias/lib/mejs/lang/pl.js | 90 + .../medias/lib/mejs/lang/pt-br.js | 91 + www/plugins-dist/medias/lib/mejs/lang/pt.js | 92 + www/plugins-dist/medias/lib/mejs/lang/ro.js | 90 + www/plugins-dist/medias/lib/mejs/lang/ru.js | 90 + www/plugins-dist/medias/lib/mejs/lang/sk.js | 90 + www/plugins-dist/medias/lib/mejs/lang/sv.js | 89 + www/plugins-dist/medias/lib/mejs/lang/uk.js | 89 + .../medias/lib/mejs/lang/zh-cn.js | 90 + www/plugins-dist/medias/lib/mejs/lang/zh.js | 91 + .../lib/mejs/mediaelement-and-player.js | 8255 +++++ .../lib/mejs/mediaelement-and-player.min.js | 12 + .../lib/mejs/mediaelement-flash-audio-ogg.swf | Bin 0 -> 303685 bytes .../lib/mejs/mediaelement-flash-audio.swf | Bin 0 -> 4350 bytes .../lib/mejs/mediaelement-flash-video-hls.swf | Bin 0 -> 92749 bytes .../mejs/mediaelement-flash-video-mdash.swf | Bin 0 -> 401418 bytes .../lib/mejs/mediaelement-flash-video.swf | Bin 0 -> 8017 bytes .../medias/lib/mejs/mediaelement.js | 3848 +++ .../medias/lib/mejs/mediaelement.min.js | 12 + .../lib/mejs/mediaelementplayer-legacy.css | 771 + .../mejs/mediaelementplayer-legacy.min.css | 1 + .../medias/lib/mejs/mediaelementplayer.css | 771 + .../lib/mejs/mediaelementplayer.min.css | 1 + .../medias/lib/mejs/mejs-controls.png | Bin 0 -> 2883 bytes .../medias/lib/mejs/mejs-controls.svg | 1 + .../medias/lib/mejs/renderers/dailymotion.js | 393 + .../lib/mejs/renderers/dailymotion.min.js | 12 + .../medias/lib/mejs/renderers/facebook.js | 347 + .../medias/lib/mejs/renderers/facebook.min.js | 12 + .../medias/lib/mejs/renderers/soundcloud.js | 306 + .../lib/mejs/renderers/soundcloud.min.js | 12 + .../medias/lib/mejs/renderers/twitch.js | 374 + .../medias/lib/mejs/renderers/twitch.min.js | 12 + .../medias/lib/mejs/renderers/vimeo.js | 405 + .../medias/lib/mejs/renderers/vimeo.min.js | 12 + .../medias/medias_administrations.php | 147 +- www/plugins-dist/medias/medias_autoriser.php | 353 +- www/plugins-dist/medias/medias_fonctions.php | 282 +- www/plugins-dist/medias/medias_ieconfig.php | 28 +- www/plugins-dist/medias/medias_pipelines.php | 346 +- www/plugins-dist/medias/metadata/audio.php | 54 + www/plugins-dist/medias/metadata/flv.php | 36 - www/plugins-dist/medias/metadata/html.php | 17 +- www/plugins-dist/medias/metadata/image.php | 23 +- www/plugins-dist/medias/metadata/svg.php | 60 +- www/plugins-dist/medias/metadata/swf.php | 11 +- www/plugins-dist/medias/metadata/video.php | 56 + .../medias/modeles/application.html | 4 +- www/plugins-dist/medias/modeles/audio.html | 33 +- www/plugins-dist/medias/modeles/doc.html | 7 +- .../medias/modeles/document_case.html | 10 +- .../modeles/document_case_fonctions.php | 60 +- .../medias/modeles/document_desc.html | 130 +- .../modeles/document_desc_fonctions.php | 16 + www/plugins-dist/medias/modeles/emb.html | 6 +- .../medias/modeles/emb_fonctions.php | 30 +- www/plugins-dist/medias/modeles/emb_mp4.html | 1 + www/plugins-dist/medias/modeles/image.html | 8 +- www/plugins-dist/medias/modeles/img.html | 4 +- www/plugins-dist/medias/modeles/text.html | 2 +- .../medias/modeles/text_html.html | 2 +- www/plugins-dist/medias/modeles/video.html | 65 +- www/plugins-dist/medias/paquet.xml | 24 +- .../objets/contenu/portfolio_document.html | 2 +- .../medias/prive/objets/liste/documents.html | 4 +- .../prive/squelettes/contenu/documents.html | 2 +- .../inclure/ajouter-documents_fonctions.php | 6 +- .../squelettes/inclure/colonne-documents.html | 4 +- .../squelettes/inclure/document_infos.html | 27 +- .../inclure/mediatheque-choisir.html | 2 +- .../inclure/mediatheque-galerie.html | 2 +- .../inclure/mediatheque-navigation.html | 3 +- .../mediatheque-navigation_fonctions.php | 17 +- .../inclure/portfolio-documents.html | 80 +- .../prive/style_prive_plugin_medias.html | 273 +- .../prive/themes/spip/images/deplacer-16.png | Bin 0 -> 205 bytes .../themes/spip/images/documents-cases-16.png | Bin 0 -> 186 bytes .../themes/spip/images/documents-liste-16.png | Bin 0 -> 183 bytes .../spip/images/documents-liste-courte-16.png | Bin 0 -> 159 bytes .../medias/prive/vignettes/index.php | 27 +- .../medias/puce_statut/document.php | 8 +- .../medias/urls/generer_url_document.php | 9 +- .../urls/generer_url_ecrire_document.php | 9 +- .../mots/action/editer_groupe_mots.php | 118 +- www/plugins-dist/mots/action/editer_mot.php | 306 +- .../mots/action/supprimer_groupe_mots.php | 40 +- .../mots/action/supprimer_mot.php | 15 +- www/plugins-dist/mots/base/mots.php | 157 +- .../mots/formulaires/administrer_mot.html | 64 + .../mots/formulaires/administrer_mot.php | 243 + .../mots/formulaires/configurer_mots.html | 30 +- .../mots/formulaires/configurer_mots.php | 58 +- .../mots/formulaires/editer_groupe_mot.html | 38 +- .../mots/formulaires/editer_groupe_mot.php | 155 +- .../mots/formulaires/editer_mot.html | 22 +- .../mots/formulaires/editer_mot.php | 272 +- www/plugins-dist/mots/inc/mots.php | 102 +- www/plugins-dist/mots/lang/adminmots_en.php | 44 + www/plugins-dist/mots/lang/adminmots_fr.php | 44 + www/plugins-dist/mots/lang/mots.xml | 19 +- www/plugins-dist/mots/lang/mots_an.php | 91 - www/plugins-dist/mots/lang/mots_ar.php | 10 +- www/plugins-dist/mots/lang/mots_ast.php | 6 +- www/plugins-dist/mots/lang/mots_ay.php | 6 +- www/plugins-dist/mots/lang/mots_bg.php | 6 +- www/plugins-dist/mots/lang/mots_bn.php | 91 - www/plugins-dist/mots/lang/mots_bo.php | 91 - www/plugins-dist/mots/lang/mots_bois.php | 91 - www/plugins-dist/mots/lang/mots_br.php | 6 +- www/plugins-dist/mots/lang/mots_bs.php | 6 +- www/plugins-dist/mots/lang/mots_ca.php | 6 +- www/plugins-dist/mots/lang/mots_co.php | 6 +- www/plugins-dist/mots/lang/mots_co_attic.php | 91 - www/plugins-dist/mots/lang/mots_cpf.php | 6 +- www/plugins-dist/mots/lang/mots_cpf_hat.php | 6 +- www/plugins-dist/mots/lang/mots_cs.php | 6 +- www/plugins-dist/mots/lang/mots_da.php | 6 +- www/plugins-dist/mots/lang/mots_de.php | 8 +- www/plugins-dist/mots/lang/mots_en.php | 6 +- www/plugins-dist/mots/lang/mots_en_hx.php | 6 +- www/plugins-dist/mots/lang/mots_eo.php | 6 +- www/plugins-dist/mots/lang/mots_es.php | 6 +- www/plugins-dist/mots/lang/mots_es_mx_pop.php | 91 - www/plugins-dist/mots/lang/mots_eu.php | 6 +- www/plugins-dist/mots/lang/mots_fa.php | 6 +- www/plugins-dist/mots/lang/mots_fi.php | 6 +- www/plugins-dist/mots/lang/mots_fon.php | 6 +- www/plugins-dist/mots/lang/mots_fr.php | 6 +- www/plugins-dist/mots/lang/mots_fr_fem.php | 6 +- www/plugins-dist/mots/lang/mots_fr_sc.php | 91 - www/plugins-dist/mots/lang/mots_fr_tu.php | 6 +- www/plugins-dist/mots/lang/mots_gl.php | 6 +- www/plugins-dist/mots/lang/mots_gr.php | 91 - www/plugins-dist/mots/lang/mots_hac.php | 6 +- www/plugins-dist/mots/lang/mots_he.php | 6 +- www/plugins-dist/mots/lang/mots_hu.php | 6 +- www/plugins-dist/mots/lang/mots_id.php | 6 +- www/plugins-dist/mots/lang/mots_is.php | 6 +- www/plugins-dist/mots/lang/mots_it.php | 6 +- www/plugins-dist/mots/lang/mots_it_fem.php | 6 +- www/plugins-dist/mots/lang/mots_iu.php | 91 - www/plugins-dist/mots/lang/mots_ja.php | 6 +- www/plugins-dist/mots/lang/mots_km.php | 6 +- www/plugins-dist/mots/lang/mots_lb.php | 6 +- www/plugins-dist/mots/lang/mots_mg.php | 91 - www/plugins-dist/mots/lang/mots_mk.php | 91 - www/plugins-dist/mots/lang/mots_my.php | 6 +- www/plugins-dist/mots/lang/mots_nl.php | 60 +- www/plugins-dist/mots/lang/mots_no.php | 6 +- www/plugins-dist/mots/lang/mots_oc_auv.php | 6 +- www/plugins-dist/mots/lang/mots_oc_gsc.php | 6 +- www/plugins-dist/mots/lang/mots_oc_lms.php | 6 +- www/plugins-dist/mots/lang/mots_oc_lnc.php | 6 +- www/plugins-dist/mots/lang/mots_oc_ni.php | 6 +- www/plugins-dist/mots/lang/mots_oc_ni_la.php | 6 +- www/plugins-dist/mots/lang/mots_oc_ni_mis.php | 87 + www/plugins-dist/mots/lang/mots_oc_pro.php | 6 +- www/plugins-dist/mots/lang/mots_oc_prv.php | 6 +- www/plugins-dist/mots/lang/mots_oc_va.php | 6 +- www/plugins-dist/mots/lang/mots_oci_va.php | 91 - www/plugins-dist/mots/lang/mots_pl.php | 6 +- www/plugins-dist/mots/lang/mots_pt.php | 6 +- www/plugins-dist/mots/lang/mots_pt_br.php | 18 +- www/plugins-dist/mots/lang/mots_qu.php | 91 - www/plugins-dist/mots/lang/mots_ro.php | 6 +- www/plugins-dist/mots/lang/mots_ru.php | 32 +- www/plugins-dist/mots/lang/mots_scn.php | 91 - www/plugins-dist/mots/lang/mots_sk.php | 6 +- www/plugins-dist/mots/lang/mots_src.php | 91 - www/plugins-dist/mots/lang/mots_sro.php | 91 - www/plugins-dist/mots/lang/mots_sv.php | 6 +- www/plugins-dist/mots/lang/mots_sw.php | 91 - www/plugins-dist/mots/lang/mots_ta.php | 91 - www/plugins-dist/mots/lang/mots_tr.php | 6 +- www/plugins-dist/mots/lang/mots_ty.php | 91 - www/plugins-dist/mots/lang/mots_uk.php | 84 + www/plugins-dist/mots/lang/mots_ur.php | 91 - www/plugins-dist/mots/lang/mots_vi.php | 6 +- www/plugins-dist/mots/lang/mots_zh.php | 6 +- www/plugins-dist/mots/lang/paquet-mots.xml | 13 +- www/plugins-dist/mots/lang/paquet-mots_ar.php | 6 +- www/plugins-dist/mots/lang/paquet-mots_de.php | 6 +- www/plugins-dist/mots/lang/paquet-mots_en.php | 6 +- www/plugins-dist/mots/lang/paquet-mots_es.php | 6 +- www/plugins-dist/mots/lang/paquet-mots_fa.php | 6 +- www/plugins-dist/mots/lang/paquet-mots_fr.php | 6 +- .../mots/lang/paquet-mots_fr_fem.php | 6 +- .../mots/lang/paquet-mots_fr_tu.php | 15 + www/plugins-dist/mots/lang/paquet-mots_it.php | 6 +- www/plugins-dist/mots/lang/paquet-mots_lb.php | 6 +- www/plugins-dist/mots/lang/paquet-mots_nl.php | 8 +- .../mots/lang/paquet-mots_oc_ni_mis.php | 15 + www/plugins-dist/mots/lang/paquet-mots_pt.php | 6 +- .../mots/lang/paquet-mots_pt_br.php | 6 +- www/plugins-dist/mots/lang/paquet-mots_ru.php | 8 +- www/plugins-dist/mots/lang/paquet-mots_sk.php | 6 +- www/plugins-dist/mots/lang/paquet-mots_uk.php | 15 + .../mots/mots_administrations.php | 85 +- www/plugins-dist/mots/mots_autoriser.php | 302 +- www/plugins-dist/mots/mots_ieconfig.php | 41 +- www/plugins-dist/mots/mots_pipelines.php | 105 +- www/plugins-dist/mots/paquet.xml | 6 +- .../prive/objets/contenu/groupe_mots.html | 12 +- .../mots/prive/objets/infos/mot.html | 6 +- .../mots/prive/objets/infos/mot_fonctions.php | 11 +- .../mots/prive/objets/liste/mots-admin.html | 8 +- .../objets/liste/mots-admin_fonctions.php | 11 +- .../mots/prive/objets/liste/mots.html | 6 +- .../objets/liste/mots_associer-recherche.html | 2 +- .../prive/objets/liste/mots_associer.html | 2 +- .../mots/prive/objets/liste/mots_lies.html | 8 +- .../prive/squelettes/contenu/groupe_mots.html | 4 +- .../mots/prive/squelettes/contenu/mot.html | 6 +- .../squelettes/inclure/administrer_mot.html | 15 + .../prive/squelettes/navigation/mots.html | 2 +- www/plugins-dist/mots/puce_statut/mot.php | 28 +- .../configurer_vieux_butineurs.html | 53 - .../configurer_vieux_butineurs.php | 35 - .../msie_compat/images/msiecompat-16.png | Bin 587 -> 0 bytes .../msie_compat/images/msiecompat-24.png | Bin 1060 -> 0 bytes .../msie_compat/images/msiecompat-32.png | Bin 1330 -> 0 bytes .../msie_compat/javascript/IE7.js | 2 - .../msie_compat/javascript/IE8.js | 2 - .../msie_compat/javascript/IE9.js | 2886 -- .../msie_compat/javascript/blank.gif | Bin 63 -> 0 bytes .../msie_compat/javascript/ie7-recalc.js | 2 - .../msie_compat/javascript/ie7-squish.js | 36 - .../msie_compat/javascript/jquery.ifixpng.js | 137 - .../msie_compat/lang/msiecompat.xml | 54 - .../msie_compat/lang/msiecompat_ar.php | 20 - .../msie_compat/lang/msiecompat_ast.php | 22 - .../msie_compat/lang/msiecompat_ca.php | 22 - .../msie_compat/lang/msiecompat_de.php | 20 - .../msie_compat/lang/msiecompat_en.php | 20 - .../msie_compat/lang/msiecompat_es.php | 20 - .../msie_compat/lang/msiecompat_eu.php | 20 - .../msie_compat/lang/msiecompat_fa.php | 18 - .../msie_compat/lang/msiecompat_fr.php | 18 - .../msie_compat/lang/msiecompat_fr_fem.php | 20 - .../msie_compat/lang/msiecompat_fr_tu.php | 20 - .../msie_compat/lang/msiecompat_it.php | 23 - .../msie_compat/lang/msiecompat_lb.php | 20 - .../msie_compat/lang/msiecompat_nl.php | 20 - .../msie_compat/lang/msiecompat_pt.php | 20 - .../msie_compat/lang/msiecompat_pt_br.php | 22 - .../msie_compat/lang/msiecompat_ru.php | 26 - .../msie_compat/lang/msiecompat_sk.php | 20 - .../msie_compat/lang/paquet-msie_compat.xml | 43 - .../lang/paquet-msie_compat_ar.php | 20 - .../lang/paquet-msie_compat_de.php | 20 - .../lang/paquet-msie_compat_en.php | 18 - .../lang/paquet-msie_compat_es.php | 20 - .../lang/paquet-msie_compat_fa.php | 20 - .../lang/paquet-msie_compat_fr.php | 18 - .../lang/paquet-msie_compat_fr_fem.php | 20 - .../lang/paquet-msie_compat_it.php | 18 - .../lang/paquet-msie_compat_lb.php | 19 - .../lang/paquet-msie_compat_nl.php | 20 - .../lang/paquet-msie_compat_pt.php | 20 - .../lang/paquet-msie_compat_pt_br.php | 20 - .../lang/paquet-msie_compat_ru.php | 20 - .../lang/paquet-msie_compat_sk.php | 20 - .../msie_compat/lang/paquet-msiecompat.xml | 2 - www/plugins-dist/msie_compat/msie_compat.php | 98 - .../msie_compat/msie_compat_ieconfig.php | 13 - www/plugins-dist/msie_compat/paquet.xml | 26 - .../organiseur/action/effacer_messagerecu.php | 18 +- .../organiseur/action/envoyer_message.php | 21 +- .../organiseur/action/quete_autocomplete.php | 18 +- .../action/quete_calendrier_prive.php | 92 +- .../organiseur/action/supprimer_message.php | 16 +- .../organiseur/base/organiseur.php | 56 +- www/plugins-dist/organiseur/calendrier.css | 58 +- .../calendrier_quete.json_fonctions.php | 10 +- .../organiseur/contenu/calendrier.html | 77 +- .../configurer_messagerie_agenda.html | 10 +- .../configurer_messagerie_agenda.php | 34 +- .../formulaires/editer_message.html | 48 +- .../organiseur/formulaires/editer_message.js | 34 +- .../organiseur/formulaires/editer_message.php | 181 +- .../organiseur/inc/date_gestion.php | 29 +- www/plugins-dist/organiseur/inc/messages.php | 121 +- .../organiseur/inc/quete_calendrier.php | 434 +- .../javascript/jquery.autocomplete.js | 808 - .../organiseur/lang/organiseur.xml | 45 +- .../organiseur/lang/organiseur_ar.php | 7 +- .../organiseur/lang/organiseur_de.php | 7 +- .../organiseur/lang/organiseur_en.php | 7 +- .../organiseur/lang/organiseur_es.php | 7 +- .../organiseur/lang/organiseur_fa.php | 6 +- .../organiseur/lang/organiseur_fr.php | 6 +- .../organiseur/lang/organiseur_fr_fem.php | 7 +- .../organiseur/lang/organiseur_fr_tu.php | 82 + .../organiseur/lang/organiseur_it.php | 7 +- .../organiseur/lang/organiseur_nl.php | 53 +- .../organiseur/lang/organiseur_oc_ni_mis.php | 82 + .../organiseur/lang/organiseur_pt.php | 6 +- .../organiseur/lang/organiseur_pt_br.php | 82 + .../organiseur/lang/organiseur_ru.php | 7 +- .../organiseur/lang/organiseur_sk.php | 7 +- .../organiseur/lang/organiseur_uk.php | 82 + .../organiseur/lang/paquet-organiseur.xml | 15 +- .../organiseur/lang/paquet-organiseur_ar.php | 6 +- .../organiseur/lang/paquet-organiseur_de.php | 6 +- .../organiseur/lang/paquet-organiseur_en.php | 6 +- .../organiseur/lang/paquet-organiseur_es.php | 6 +- .../organiseur/lang/paquet-organiseur_fa.php | 6 +- .../organiseur/lang/paquet-organiseur_fr.php | 6 +- .../lang/paquet-organiseur_fr_fem.php | 6 +- .../lang/paquet-organiseur_fr_tu.php | 15 + .../organiseur/lang/paquet-organiseur_it.php | 6 +- .../organiseur/lang/paquet-organiseur_lb.php | 6 +- .../organiseur/lang/paquet-organiseur_nl.php | 10 +- .../lang/paquet-organiseur_oc_ni_mis.php | 15 + .../organiseur/lang/paquet-organiseur_pt.php | 6 +- .../lang/paquet-organiseur_pt_br.php | 15 + .../organiseur/lang/paquet-organiseur_ru.php | 6 +- .../organiseur/lang/paquet-organiseur_sk.php | 6 +- .../organiseur/lang/paquet-organiseur_uk.php | 15 + .../lib/fullcalendar/fullcalendar.css | 1885 +- .../lib/fullcalendar/fullcalendar.js | 18915 ++++++++--- .../lib/fullcalendar/fullcalendar.min.css | 5 + .../lib/fullcalendar/fullcalendar.min.js | 123 +- .../lib/fullcalendar/fullcalendar.print.css | 255 +- .../fullcalendar/fullcalendar.print.min.css | 5 + .../organiseur/lib/fullcalendar/gcal.js | 222 +- .../organiseur/lib/fullcalendar/gcal.min.js | 6 + .../organiseur/lib/fullcalendar/locale-all.js | 5 + .../lib/moment/moment-with-locales.js | 12910 ++++++++ .../lib/moment/moment-with-locales.min.js | 1216 + .../organiseur/lib/moment/moment.js | 4301 +++ .../organiseur/lib/moment/moment.min.js | 551 + .../notifications/instituermessage.php | 38 +- .../organiseur/organiseur_administrations.php | 31 +- .../organiseur/organiseur_autoriser.php | 103 +- .../organiseur/organiseur_fonctions.php | 112 +- .../organiseur/organiseur_ieconfig.php | 42 +- .../organiseur/organiseur_pipelines.php | 165 +- www/plugins-dist/organiseur/paquet.xml | 6 +- .../prive/objets/liste/messages-recus.html | 37 +- .../prive/squelettes/contenu/calendrier.html | 85 +- .../prive/squelettes/contenu/message.html | 8 +- .../organiseur-autocomplete-auteur.html | 22 +- .../squelettes/inclure/organiseur-rv.html | 22 +- .../prive/squelettes/navigation/message.html | 112 +- .../prive/style_prive_plugin_organiseur.html | 2 +- .../petitions/action/confirmer_signature.php | 67 +- .../petitions/action/editer_petition.php | 100 +- .../petitions/action/editer_signature.php | 114 +- .../petitions/action/relancer_signature.php | 29 +- .../petitions/action/supprimer_signature.php | 22 +- .../action/traiter_lot_signature.php | 46 +- .../petitions/action/valider_signature.php | 16 +- .../petitions/balise/formulaire_signature.php | 29 +- www/plugins-dist/petitions/base/petitions.php | 156 +- .../formulaires/activer_petition_article.html | 38 +- .../formulaires/activer_petition_article.php | 100 +- .../petitions/formulaires/signature.html | 34 +- .../petitions/formulaires/signature.php | 196 +- .../petitions/lang/paquet-petitions.xml | 9 + .../petitions/lang/paquet-petitions_ar.php | 6 +- .../petitions/lang/paquet-petitions_de.php | 6 +- .../petitions/lang/paquet-petitions_en.php | 6 +- .../petitions/lang/paquet-petitions_es.php | 6 +- .../petitions/lang/paquet-petitions_fa.php | 6 +- .../petitions/lang/paquet-petitions_fr.php | 6 +- .../lang/paquet-petitions_fr_fem.php | 6 +- .../petitions/lang/paquet-petitions_fr_tu.php | 15 + .../petitions/lang/paquet-petitions_it.php | 6 +- .../petitions/lang/paquet-petitions_nl.php | 6 +- .../lang/paquet-petitions_oc_ni_mis.php | 15 + .../petitions/lang/paquet-petitions_pt.php | 6 +- .../petitions/lang/paquet-petitions_pt_br.php | 6 +- .../petitions/lang/paquet-petitions_ru.php | 6 +- .../petitions/lang/paquet-petitions_sk.php | 6 +- .../petitions/lang/paquet-petitions_uk.php | 15 + www/plugins-dist/petitions/lang/petitions.xml | 144 +- .../petitions/lang/petitions_ar.php | 10 +- .../petitions/lang/petitions_ast.php | 12 +- .../petitions/lang/petitions_ay.php | 12 +- .../petitions/lang/petitions_bg.php | 12 +- .../petitions/lang/petitions_br.php | 67 +- .../petitions/lang/petitions_bs.php | 12 +- .../petitions/lang/petitions_ca.php | 12 +- .../petitions/lang/petitions_co.php | 12 +- .../petitions/lang/petitions_cpf.php | 12 +- .../petitions/lang/petitions_cpf_hat.php | 12 +- .../petitions/lang/petitions_cs.php | 12 +- .../petitions/lang/petitions_da.php | 12 +- .../petitions/lang/petitions_de.php | 11 +- .../petitions/lang/petitions_el.php | 12 +- .../petitions/lang/petitions_en.php | 10 +- .../petitions/lang/petitions_en_hx.php | 12 +- .../petitions/lang/petitions_eo.php | 12 +- .../petitions/lang/petitions_es.php | 10 +- .../petitions/lang/petitions_es_co.php | 6 +- .../petitions/lang/petitions_eu.php | 12 +- .../petitions/lang/petitions_fa.php | 10 +- .../petitions/lang/petitions_fi.php | 9 +- .../petitions/lang/petitions_fon.php | 12 +- .../petitions/lang/petitions_fr.php | 10 +- .../petitions/lang/petitions_fr_biblio.php | 112 - .../petitions/lang/petitions_fr_fem.php | 10 +- .../petitions/lang/petitions_fr_tu.php | 10 +- .../petitions/lang/petitions_gl.php | 12 +- .../petitions/lang/petitions_hac.php | 12 +- .../petitions/lang/petitions_he.php | 12 +- .../petitions/lang/petitions_hr.php | 6 +- .../petitions/lang/petitions_hu.php | 12 +- .../petitions/lang/petitions_id.php | 12 +- .../petitions/lang/petitions_is.php | 6 +- .../petitions/lang/petitions_it.php | 10 +- .../petitions/lang/petitions_it_fem.php | 12 +- .../petitions/lang/petitions_ja.php | 12 +- .../petitions/lang/petitions_km.php | 12 +- .../petitions/lang/petitions_kr.php | 112 - .../petitions/lang/petitions_lb.php | 12 +- .../petitions/lang/petitions_ling.php | 112 - .../petitions/lang/petitions_lt.php | 13 +- .../petitions/lang/petitions_my.php | 12 +- .../petitions/lang/petitions_nap.php | 6 +- .../petitions/lang/petitions_nb.php | 12 +- .../petitions/lang/petitions_ne.php | 6 +- .../petitions/lang/petitions_nl.php | 83 +- .../petitions/lang/petitions_no.php | 112 - .../petitions/lang/petitions_oc_auv.php | 12 +- .../petitions/lang/petitions_oc_gsc.php | 12 +- .../petitions/lang/petitions_oc_lms.php | 12 +- .../petitions/lang/petitions_oc_lnc.php | 12 +- .../petitions/lang/petitions_oc_ni.php | 12 +- .../petitions/lang/petitions_oc_ni_la.php | 12 +- .../petitions/lang/petitions_oc_ni_mis.php | 115 + .../petitions/lang/petitions_oc_prv.php | 12 +- .../petitions/lang/petitions_oc_va.php | 12 +- .../petitions/lang/petitions_pl.php | 12 +- .../petitions/lang/petitions_pt.php | 10 +- .../petitions/lang/petitions_pt_br.php | 81 +- .../petitions/lang/petitions_rn.php | 112 - .../petitions/lang/petitions_ro.php | 12 +- .../petitions/lang/petitions_roa.php | 6 +- .../petitions/lang/petitions_ru.php | 46 +- .../petitions/lang/petitions_sk.php | 10 +- .../petitions/lang/petitions_sq.php | 6 +- .../petitions/lang/petitions_sv.php | 12 +- .../petitions/lang/petitions_tr.php | 12 +- .../petitions/lang/petitions_uk.php | 106 +- .../petitions/lang/petitions_vi.php | 12 +- .../petitions/lang/petitions_wo.php | 6 +- .../petitions/lang/petitions_zh.php | 12 +- www/plugins-dist/petitions/paquet.xml | 8 +- .../petitions/petitions_administrations.php | 55 +- .../petitions/petitions_autoriser.php | 129 +- .../petitions/petitions_fonctions.php | 87 +- .../petitions/petitions_options.php | 9 +- .../petitions/petitions_pipelines.php | 42 +- .../contenu/controler_petition.html | 2 +- .../plan/action/deplacer_objets.php | 109 + www/plugins-dist/plan/action/plan.php | 48 + www/plugins-dist/plan/css/plan_prive.css.html | 56 + www/plugins-dist/plan/lang/paquet-plan.xml | 28 + www/plugins-dist/plan/lang/paquet-plan_ar.php | 16 + www/plugins-dist/plan/lang/paquet-plan_de.php | 16 + www/plugins-dist/plan/lang/paquet-plan_en.php | 17 + www/plugins-dist/plan/lang/paquet-plan_fr.php | 15 + .../plan/lang/paquet-plan_fr_fem.php | 17 + .../plan/lang/paquet-plan_fr_tu.php | 17 + www/plugins-dist/plan/lang/paquet-plan_nl.php | 17 + .../plan/lang/paquet-plan_pt_br.php | 17 + www/plugins-dist/plan/lang/paquet-plan_sk.php | 16 + www/plugins-dist/plan/lang/plan.xml | 26 + www/plugins-dist/plan/lang/plan_ar.php | 37 + www/plugins-dist/plan/lang/plan_de.php | 33 + www/plugins-dist/plan/lang/plan_en.php | 37 + www/plugins-dist/plan/lang/plan_fr.php | 35 + www/plugins-dist/plan/lang/plan_fr_fem.php | 33 + www/plugins-dist/plan/lang/plan_fr_tu.php | 37 + www/plugins-dist/plan/lang/plan_nl.php | 37 + www/plugins-dist/plan/lang/plan_pt_br.php | 33 + www/plugins-dist/plan/lib/jstree/LICENSE-MIT | 22 + www/plugins-dist/plan/lib/jstree/README.md | 658 + .../plan/lib/jstree/dist/jstree.js | 8305 +++++ .../plan/lib/jstree/dist/jstree.min.js | 6 + .../jstree/dist/themes/default-dark/32px.png | Bin 0 -> 1562 bytes .../jstree/dist/themes/default-dark/40px.png | Bin 0 -> 5717 bytes .../jstree/dist/themes/default-dark/style.css | 1146 + .../dist/themes/default-dark/style.min.css | 1 + .../dist/themes/default-dark/throbber.gif | Bin 0 -> 1720 bytes .../lib/jstree/dist/themes/default/32px.png | Bin 0 -> 3121 bytes .../lib/jstree/dist/themes/default/40px.png | Bin 0 -> 1880 bytes .../lib/jstree/dist/themes/default/style.css | 1102 + .../jstree/dist/themes/default/style.min.css | 1 + .../jstree/dist/themes/default/throbber.gif | Bin 0 -> 1720 bytes www/plugins-dist/plan/paquet.xml | 19 + www/plugins-dist/plan/plan_fonctions.php | 143 + .../plan/prive/javascript/spiptree.js | 255 + .../plan/prive/squelettes/contenu/plan.html | 45 + .../plan/prive/squelettes/head/plan.html | 7 + .../squelettes/inclure/plan-articles.html | 44 + .../inclure/plan-articles_fonctions.php | 8 + .../squelettes/inclure/plan-rubriques.html | 34 + .../plan/prive/squelettes/inclure/plan.html | 38 + .../prive/themes/spip/images/plan-128.png | Bin 0 -> 502 bytes .../plan/prive/themes/spip/images/plan-16.png | Bin 0 -> 160 bytes .../plan/prive/themes/spip/images/plan-32.png | Bin 0 -> 201 bytes .../plan/prive/themes/spip/images/plan-64.png | Bin 0 -> 311 bytes .../action/porte_plume_previsu.php | 36 +- .../porte_plume/barre_outils/edition.php | 646 +- .../porte_plume/barre_outils/forum.php | 43 +- .../porte_plume/barre_outils/vide.php | 28 + .../porte_plume/barre_outils_icones.css.html | 7 - .../porte_plume/css/barre_outils.css | 91 +- .../css/barre_outils_icones.css.html | 23 + .../porte_plume/css/img/arrow_in.png | Bin 0 -> 633 bytes .../porte_plume/css/img/arrow_out.png | Bin 0 -> 684 bytes .../css/{images => img}/handle.png | Bin .../porte_plume/css/{images => img}/menu.png | Bin .../css/{images => img}/submenu.png | Bin .../formulaires/configurer_porte_plume.html | 10 +- .../porte_plume/javascript/jquery.markitup.js | 165 +- .../javascript/jquery.markitup_pour_spip.js | 243 +- .../javascript/jquery.previsu_spip.js | 146 +- .../javascript/porte_plume_forcer_hauteur.js | 17 +- .../javascript/porte_plume_start.js.html | 64 + .../porte_plume_start.js_fonctions.php | 12 + .../porte_plume/lang/barreoutils.xml | 16 + .../porte_plume/lang/barreoutils_ar.php | 6 +- .../porte_plume/lang/barreoutils_de.php | 6 +- .../porte_plume/lang/barreoutils_en.php | 8 +- .../porte_plume/lang/barreoutils_es.php | 6 +- .../porte_plume/lang/barreoutils_fa.php | 6 +- .../porte_plume/lang/barreoutils_fr.php | 6 +- .../porte_plume/lang/barreoutils_fr_fem.php | 6 +- .../porte_plume/lang/barreoutils_fr_tu.php | 112 + .../porte_plume/lang/barreoutils_it.php | 6 +- .../porte_plume/lang/barreoutils_nl.php | 12 +- .../lang/barreoutils_oc_ni_mis.php | 112 + .../porte_plume/lang/barreoutils_pt.php | 6 +- .../porte_plume/lang/barreoutils_pt_br.php | 104 + .../porte_plume/lang/barreoutils_ru.php | 16 +- .../porte_plume/lang/barreoutils_sk.php | 6 +- .../porte_plume/lang/barreoutils_uk.php | 104 + .../porte_plume/lang/paquet-porte_plume.xml | 12 + .../lang/paquet-porte_plume_ar.php | 6 +- .../lang/paquet-porte_plume_de.php | 6 +- .../lang/paquet-porte_plume_en.php | 6 +- .../lang/paquet-porte_plume_es.php | 6 +- .../lang/paquet-porte_plume_fa.php | 6 +- .../lang/paquet-porte_plume_fr.php | 6 +- .../lang/paquet-porte_plume_fr_fem.php | 6 +- .../lang/paquet-porte_plume_fr_tu.php | 16 + .../lang/paquet-porte_plume_it.php | 6 +- .../lang/paquet-porte_plume_nl.php | 6 +- .../lang/paquet-porte_plume_oc_ni_mis.php | 16 + .../lang/paquet-porte_plume_pt.php | 6 +- .../lang/paquet-porte_plume_pt_br.php | 16 + .../lang/paquet-porte_plume_ru.php | 6 +- .../lang/paquet-porte_plume_sk.php | 6 +- .../lang/paquet-porte_plume_uk.php | 16 + www/plugins-dist/porte_plume/paquet.xml | 6 +- .../porte_plume/porte_plume_fonctions.php | 1818 +- .../porte_plume/porte_plume_ieconfig.php | 62 +- .../porte_plume/porte_plume_pipelines.php | 116 +- .../porte_plume/porte_plume_start.js.html | 64 - .../porte_plume_start.js_fonctions.php | 85 - .../prive/porte_plume_preview_fonctions.php | 13 +- .../porte_plume/tests/all_tests.php | 9 +- .../tests/barre_outil_markitup.php | 195 +- .../porte_plume/tests/lanceur_spip.php | 7 +- .../revisions/afficher_diff/champ.php | 43 +- .../revisions/afficher_diff/id_rubrique.php | 28 +- .../revisions/afficher_diff/jointure.php | 56 +- www/plugins-dist/revisions/base/revisions.php | 109 +- .../configurer_revisions_objets.html | 10 +- .../configurer_revisions_objets.php | 32 +- .../revisions/formulaires/reviser.html | 10 +- .../revisions/formulaires/reviser.php | 111 +- .../revisions/genie/optimiser_revisions.php | 59 +- www/plugins-dist/revisions/inc/diff.php | 340 +- www/plugins-dist/revisions/inc/revisions.php | 529 +- .../revisions/inc/revisions_autoriser.php | 49 +- .../revisions/inc/revisions_pipeline.php | 216 +- .../revisions/inc/suivi_versions.php | 150 +- .../revisions/lang/paquet-revisions.xml | 11 +- .../revisions/lang/paquet-revisions_ar.php | 6 +- .../revisions/lang/paquet-revisions_de.php | 6 +- .../revisions/lang/paquet-revisions_en.php | 6 +- .../revisions/lang/paquet-revisions_es.php | 6 +- .../revisions/lang/paquet-revisions_fa.php | 6 +- .../revisions/lang/paquet-revisions_fr.php | 6 +- .../lang/paquet-revisions_fr_fem.php | 6 +- .../revisions/lang/paquet-revisions_fr_tu.php | 15 + .../revisions/lang/paquet-revisions_it.php | 6 +- .../revisions/lang/paquet-revisions_lb.php | 6 +- .../revisions/lang/paquet-revisions_nl.php | 6 +- .../lang/paquet-revisions_oc_ni_mis.php | 15 + .../revisions/lang/paquet-revisions_pt.php | 6 +- .../revisions/lang/paquet-revisions_pt_br.php | 6 +- .../revisions/lang/paquet-revisions_ru.php | 6 +- .../revisions/lang/paquet-revisions_sk.php | 6 +- .../revisions/lang/paquet-revisions_uk.php | 15 + www/plugins-dist/revisions/lang/revisions.xml | 15 +- .../revisions/lang/revisions_ar.php | 6 +- .../revisions/lang/revisions_ast.php | 6 +- .../revisions/lang/revisions_ay.php | 6 +- .../revisions/lang/revisions_bg.php | 6 +- .../revisions/lang/revisions_br.php | 6 +- .../revisions/lang/revisions_bs.php | 6 +- .../revisions/lang/revisions_ca.php | 6 +- .../revisions/lang/revisions_co.php | 6 +- .../revisions/lang/revisions_cpf.php | 6 +- .../revisions/lang/revisions_cpf_hat.php | 6 +- .../revisions/lang/revisions_cs.php | 6 +- .../revisions/lang/revisions_de.php | 6 +- .../revisions/lang/revisions_el.php | 6 +- .../revisions/lang/revisions_en.php | 6 +- .../revisions/lang/revisions_eo.php | 6 +- .../revisions/lang/revisions_es.php | 6 +- .../revisions/lang/revisions_eu.php | 6 +- .../revisions/lang/revisions_fa.php | 6 +- .../revisions/lang/revisions_fon.php | 6 +- .../revisions/lang/revisions_fr.php | 6 +- .../revisions/lang/revisions_fr_fem.php | 6 +- .../revisions/lang/revisions_fr_tu.php | 6 +- .../revisions/lang/revisions_gl.php | 6 +- .../revisions/lang/revisions_he.php | 6 +- .../revisions/lang/revisions_hu.php | 6 +- .../revisions/lang/revisions_id.php | 6 +- .../revisions/lang/revisions_it.php | 6 +- .../revisions/lang/revisions_it_fem.php | 6 +- .../revisions/lang/revisions_ja.php | 6 +- .../revisions/lang/revisions_km.php | 6 +- .../revisions/lang/revisions_lb.php | 6 +- .../revisions/lang/revisions_my.php | 6 +- .../revisions/lang/revisions_nl.php | 16 +- .../revisions/lang/revisions_oc_auv.php | 6 +- .../revisions/lang/revisions_oc_gsc.php | 6 +- .../revisions/lang/revisions_oc_lms.php | 6 +- .../revisions/lang/revisions_oc_lnc.php | 6 +- .../revisions/lang/revisions_oc_ni.php | 6 +- .../revisions/lang/revisions_oc_ni_la.php | 6 +- .../revisions/lang/revisions_oc_ni_mis.php | 59 + .../revisions/lang/revisions_oc_prv.php | 6 +- .../revisions/lang/revisions_oc_va.php | 6 +- .../revisions/lang/revisions_pl.php | 6 +- .../revisions/lang/revisions_pt.php | 6 +- .../revisions/lang/revisions_pt_br.php | 39 +- .../revisions/lang/revisions_rn.php | 6 +- .../revisions/lang/revisions_ro.php | 9 +- .../revisions/lang/revisions_ru.php | 6 +- .../revisions/lang/revisions_sk.php | 6 +- .../revisions/lang/revisions_sv.php | 6 +- .../revisions/lang/revisions_tr.php | 6 +- .../revisions/lang/revisions_uk.php | 52 +- .../revisions/lang/revisions_vi.php | 6 +- .../revisions/lang/revisions_wa.php | 6 +- .../revisions/lang/revisions_zh.php | 6 +- www/plugins-dist/revisions/paquet.xml | 8 +- .../objets/contenu/revision_fonctions.php | 52 +- .../prive/objets/liste/versions.html | 2 +- .../prive/objets/liste/versions_fonctions.php | 6 +- .../prive/rss/revisions_fonctions.php | 6 +- .../prive/squelettes/contenu/revision.html | 8 +- .../squelettes/contenu/revision_fonctions.php | 6 +- .../prive/style_prive_plugin_revisions.html | 6 +- .../revisions/revisions_administrations.php | 248 +- .../revisions/revisions_autoriser.php | 44 + .../revisions/revisions_ieconfig.php | 49 +- www/plugins-dist/safehtml/inc/safehtml.php | 28 +- .../safehtml/lang/paquet-safehtml.xml | 21 + .../safehtml/lang/paquet-safehtml_ar.php | 15 + .../safehtml/lang/paquet-safehtml_de.php | 15 + .../safehtml/lang/paquet-safehtml_en.php | 6 +- .../safehtml/lang/paquet-safehtml_es.php | 6 +- .../safehtml/lang/paquet-safehtml_fr.php | 6 +- .../safehtml/lang/paquet-safehtml_fr_fem.php | 6 +- .../safehtml/lang/paquet-safehtml_fr_tu.php | 15 + .../safehtml/lang/paquet-safehtml_it.php | 6 +- .../safehtml/lang/paquet-safehtml_nl.php | 15 + .../lang/paquet-safehtml_oc_ni_mis.php | 15 + .../safehtml/lang/paquet-safehtml_pt.php | 6 +- .../safehtml/lang/paquet-safehtml_pt_br.php | 15 + .../safehtml/lang/paquet-safehtml_ru.php | 6 +- .../safehtml/lang/paquet-safehtml_sk.php | 6 +- .../safehtml/lang/paquet-safehtml_uk.php | 15 + .../lib/safehtml/classes/HTMLSax3.php | 16 +- .../safehtml/classes/HTMLSax3/Decorators.php | 20 +- .../lib/safehtml/classes/safehtml.php | 933 +- www/plugins-dist/safehtml/paquet.xml | 6 +- www/plugins-dist/sites/action/editer_site.php | 191 +- .../sites/action/exporter_bookmarks.php | 21 +- .../action/importer_bookmarks_netscape.php | 119 +- .../sites/action/importer_bookmarks_opml.php | 128 + .../sites/action/instituer_syndic_article.php | 14 +- www/plugins-dist/sites/action/purger_site.php | 10 +- .../sites/action/syndiquer_site.php | 17 +- .../sites/balise/formulaire_site.php | 22 +- www/plugins-dist/sites/base/sites.php | 182 +- .../sites/formulaires/configurer_sites.html | 42 +- .../sites/formulaires/configurer_sites.php | 63 +- .../sites/formulaires/editer_site.html | 50 +- .../sites/formulaires/editer_site.php | 205 +- .../formulaires/editer_site_fonctions.php | 17 +- .../sites/formulaires/exporter_sites.html | 18 +- .../sites/formulaires/exporter_sites.php | 25 +- .../sites/formulaires/importer_sites.html | 22 +- .../sites/formulaires/importer_sites.php | 67 +- .../formulaires/regler_moderation_site.html | 18 +- .../formulaires/regler_moderation_site.php | 97 +- www/plugins-dist/sites/formulaires/site.html | 18 +- www/plugins-dist/sites/formulaires/site.php | 37 +- www/plugins-dist/sites/genie/syndic.php | 252 +- www/plugins-dist/sites/inc/feedfinder.php | 217 +- www/plugins-dist/sites/inc/site.php | 84 +- www/plugins-dist/sites/inc/syndic.php | 459 +- www/plugins-dist/sites/lang/paquet-sites.xml | 11 +- .../sites/lang/paquet-sites_ar.php | 6 +- .../sites/lang/paquet-sites_de.php | 6 +- .../sites/lang/paquet-sites_en.php | 6 +- .../sites/lang/paquet-sites_es.php | 6 +- .../sites/lang/paquet-sites_fa.php | 6 +- .../sites/lang/paquet-sites_fr.php | 6 +- .../sites/lang/paquet-sites_fr_fem.php | 6 +- .../sites/lang/paquet-sites_fr_tu.php | 15 + .../sites/lang/paquet-sites_it.php | 6 +- .../sites/lang/paquet-sites_lb.php | 6 +- .../sites/lang/paquet-sites_nl.php | 6 +- .../sites/lang/paquet-sites_oc_ni_mis.php | 15 + .../sites/lang/paquet-sites_pt.php | 6 +- .../sites/lang/paquet-sites_pt_br.php | 6 +- .../sites/lang/paquet-sites_ru.php | 6 +- .../sites/lang/paquet-sites_sk.php | 6 +- .../sites/lang/paquet-sites_uk.php | 15 + www/plugins-dist/sites/lang/sites.xml | 137 +- www/plugins-dist/sites/lang/sites_ar.php | 12 +- www/plugins-dist/sites/lang/sites_ast.php | 12 +- www/plugins-dist/sites/lang/sites_ay.php | 8 +- www/plugins-dist/sites/lang/sites_bg.php | 7 +- www/plugins-dist/sites/lang/sites_br.php | 39 +- www/plugins-dist/sites/lang/sites_bs.php | 7 +- www/plugins-dist/sites/lang/sites_ca.php | 12 +- www/plugins-dist/sites/lang/sites_co.php | 9 +- www/plugins-dist/sites/lang/sites_cpf.php | 7 +- www/plugins-dist/sites/lang/sites_cpf_hat.php | 7 +- www/plugins-dist/sites/lang/sites_cs.php | 7 +- www/plugins-dist/sites/lang/sites_da.php | 7 +- www/plugins-dist/sites/lang/sites_de.php | 12 +- www/plugins-dist/sites/lang/sites_en.php | 16 +- www/plugins-dist/sites/lang/sites_en_hx.php | 7 +- www/plugins-dist/sites/lang/sites_eo.php | 12 +- www/plugins-dist/sites/lang/sites_es.php | 12 +- www/plugins-dist/sites/lang/sites_eu.php | 12 +- www/plugins-dist/sites/lang/sites_fa.php | 12 +- www/plugins-dist/sites/lang/sites_fi.php | 7 +- www/plugins-dist/sites/lang/sites_fon.php | 7 +- www/plugins-dist/sites/lang/sites_fr.php | 12 +- www/plugins-dist/sites/lang/sites_fr_fem.php | 12 +- www/plugins-dist/sites/lang/sites_fr_tu.php | 12 +- www/plugins-dist/sites/lang/sites_gl.php | 12 +- www/plugins-dist/sites/lang/sites_hac.php | 6 +- www/plugins-dist/sites/lang/sites_he.php | 7 +- www/plugins-dist/sites/lang/sites_hu.php | 7 +- www/plugins-dist/sites/lang/sites_id.php | 7 +- www/plugins-dist/sites/lang/sites_is.php | 6 +- www/plugins-dist/sites/lang/sites_it.php | 12 +- www/plugins-dist/sites/lang/sites_it_fem.php | 7 +- www/plugins-dist/sites/lang/sites_ja.php | 7 +- www/plugins-dist/sites/lang/sites_km.php | 7 +- www/plugins-dist/sites/lang/sites_lb.php | 12 +- www/plugins-dist/sites/lang/sites_my.php | 7 +- www/plugins-dist/sites/lang/sites_nl.php | 108 +- www/plugins-dist/sites/lang/sites_no.php | 11 +- www/plugins-dist/sites/lang/sites_oc_auv.php | 7 +- www/plugins-dist/sites/lang/sites_oc_gsc.php | 7 +- www/plugins-dist/sites/lang/sites_oc_lms.php | 7 +- www/plugins-dist/sites/lang/sites_oc_lnc.php | 7 +- www/plugins-dist/sites/lang/sites_oc_ni.php | 13 +- .../sites/lang/sites_oc_ni_la.php | 7 +- .../sites/lang/sites_oc_ni_mis.php | 158 + www/plugins-dist/sites/lang/sites_oc_prv.php | 7 +- www/plugins-dist/sites/lang/sites_oc_va.php | 7 +- www/plugins-dist/sites/lang/sites_pl.php | 10 +- www/plugins-dist/sites/lang/sites_pt.php | 12 +- www/plugins-dist/sites/lang/sites_pt_br.php | 80 +- www/plugins-dist/sites/lang/sites_ro.php | 10 +- www/plugins-dist/sites/lang/sites_ru.php | 26 +- www/plugins-dist/sites/lang/sites_sk.php | 12 +- www/plugins-dist/sites/lang/sites_sv.php | 7 +- www/plugins-dist/sites/lang/sites_tr.php | 7 +- www/plugins-dist/sites/lang/sites_uk.php | 156 + www/plugins-dist/sites/lang/sites_vi.php | 7 +- www/plugins-dist/sites/lang/sites_zh.php | 7 +- .../sites/liens/implicite_site.php | 14 +- www/plugins-dist/sites/paquet.xml | 8 +- .../objets/liste/sites-sansidsyndic.html | 1 + .../sites/prive/objets/liste/syndic.html | 2 +- .../prive/objets/liste/syndic_articles.html | 6 +- .../liste/syndic_articles_fonctions.php | 13 +- .../sites/prive/rss/a_suivre-sites.html | 13 +- .../sites/prive/squelettes/contenu/site.html | 8 +- .../sites/prive/squelettes/contenu/sites.html | 1 + .../squelettes/contenu/sites_export.html | 2 +- .../squelettes/contenu/sites_import.html | 2 +- .../sites/prive/squelettes/extra/site.html | 2 +- .../prive/squelettes/inclure/plan-syndic.html | 54 +- .../prive/squelettes/navigation/sites.html | 4 +- .../prive/style_prive_plugin_syndic.html | 9 +- .../sites/prive/transmettre/bookmarks.html | 2 +- www/plugins-dist/sites/puce_statut/site.php | 18 +- .../sites/sites_administrations.php | 29 +- www/plugins-dist/sites/sites_autoriser.php | 84 +- www/plugins-dist/sites/sites_fonctions.php | 25 +- www/plugins-dist/sites/sites_ieconfig.php | 26 +- www/plugins-dist/sites/sites_pipelines.php | 212 +- .../lang/paquet-squelettes_par_rubrique.xml | 12 +- .../paquet-squelettes_par_rubrique_ar.php | 6 +- .../paquet-squelettes_par_rubrique_de.php | 6 +- .../paquet-squelettes_par_rubrique_en.php | 6 +- .../paquet-squelettes_par_rubrique_es.php | 6 +- .../paquet-squelettes_par_rubrique_fa.php | 6 +- .../paquet-squelettes_par_rubrique_fr.php | 6 +- .../paquet-squelettes_par_rubrique_fr_fem.php | 6 +- .../paquet-squelettes_par_rubrique_fr_tu.php | 15 + .../paquet-squelettes_par_rubrique_it.php | 6 +- .../paquet-squelettes_par_rubrique_lb.php | 6 +- .../paquet-squelettes_par_rubrique_nl.php | 6 +- ...quet-squelettes_par_rubrique_oc_ni_mis.php | 15 + .../paquet-squelettes_par_rubrique_pt.php | 6 +- .../paquet-squelettes_par_rubrique_pt_br.php | 6 +- .../paquet-squelettes_par_rubrique_ru.php | 8 +- .../paquet-squelettes_par_rubrique_sk.php | 6 +- .../paquet-squelettes_par_rubrique_uk.php | 15 + .../squelettes_par_rubrique/paquet.xml | 6 +- .../squelettes_par_rubrique_options.php | 51 +- .../action/statistiques_archiver.php | 381 + .../statistiques/base/delete_referers.php | 17 +- .../statistiques/base/delete_stats.php | 15 +- www/plugins-dist/statistiques/base/stats.php | 100 +- .../exec/base_delete_referers.php | 18 +- .../statistiques/exec/base_delete_stats.php | 18 +- .../formulaires/configurer_compteur.html | 44 +- .../formulaires/configurer_compteur.php | 35 +- .../statistiques/genie/popularites.php | 64 +- .../statistiques/genie/visites.php | 302 +- .../statistiques/inc/referenceurs.php | 108 +- .../statistiques/inc/statistiques.php | 41 +- .../inc/stats_referers_to_array.php | 75 +- .../inc/stats_visites_to_array.php | 89 +- .../statistiques/javascript/excanvas.js | 131 +- .../statistiques/javascript/jquery.flot.js | 2191 +- .../javascript/jquery.flot.selection.js | 142 +- .../javascript/jquery.flot.time.js | 432 + .../statistiques/javascript/jquery.tflot.js | 6 +- .../statistiques/lang/paquet-stats.xml | 12 +- .../statistiques/lang/paquet-stats_ar.php | 6 +- .../statistiques/lang/paquet-stats_de.php | 6 +- .../statistiques/lang/paquet-stats_en.php | 6 +- .../statistiques/lang/paquet-stats_es.php | 6 +- .../statistiques/lang/paquet-stats_fa.php | 6 +- .../statistiques/lang/paquet-stats_fr.php | 6 +- .../statistiques/lang/paquet-stats_fr_fem.php | 6 +- .../statistiques/lang/paquet-stats_fr_tu.php | 16 + .../statistiques/lang/paquet-stats_it.php | 6 +- .../statistiques/lang/paquet-stats_lb.php | 6 +- .../statistiques/lang/paquet-stats_nl.php | 6 +- .../lang/paquet-stats_oc_ni_mis.php | 16 + .../statistiques/lang/paquet-stats_pt.php | 6 +- .../statistiques/lang/paquet-stats_pt_br.php | 6 +- .../statistiques/lang/paquet-stats_ru.php | 8 +- .../statistiques/lang/paquet-stats_sk.php | 6 +- .../statistiques/lang/paquet-stats_uk.php | 16 + .../statistiques/lang/statistiques.xml | 137 +- .../statistiques/lang/statistiques_ar.php | 26 +- .../statistiques/lang/statistiques_ast.php | 6 +- .../statistiques/lang/statistiques_ay.php | 6 +- .../statistiques/lang/statistiques_bg.php | 6 +- .../statistiques/lang/statistiques_br.php | 6 +- .../statistiques/lang/statistiques_bs.php | 6 +- .../statistiques/lang/statistiques_ca.php | 6 +- .../statistiques/lang/statistiques_co.php | 6 +- .../statistiques/lang/statistiques_cpf.php | 6 +- .../lang/statistiques_cpf_hat.php | 6 +- .../statistiques/lang/statistiques_cs.php | 6 +- .../statistiques/lang/statistiques_da.php | 6 +- .../statistiques/lang/statistiques_de.php | 26 +- .../statistiques/lang/statistiques_el.php | 6 +- .../statistiques/lang/statistiques_en.php | 28 +- .../statistiques/lang/statistiques_en_hx.php | 6 +- .../statistiques/lang/statistiques_eo.php | 6 +- .../statistiques/lang/statistiques_es.php | 27 +- .../statistiques/lang/statistiques_eu.php | 6 +- .../statistiques/lang/statistiques_fa.php | 6 +- .../statistiques/lang/statistiques_fi.php | 6 +- .../statistiques/lang/statistiques_fon.php | 6 +- .../statistiques/lang/statistiques_fr.php | 26 +- .../statistiques/lang/statistiques_fr_fem.php | 27 +- .../statistiques/lang/statistiques_fr_tu.php | 44 +- .../statistiques/lang/statistiques_gl.php | 6 +- .../statistiques/lang/statistiques_hac.php | 6 +- .../statistiques/lang/statistiques_he.php | 6 +- .../statistiques/lang/statistiques_hu.php | 6 +- .../statistiques/lang/statistiques_id.php | 6 +- .../statistiques/lang/statistiques_is.php | 6 +- .../statistiques/lang/statistiques_it.php | 25 +- .../statistiques/lang/statistiques_it_fem.php | 6 +- .../statistiques/lang/statistiques_ja.php | 6 +- .../statistiques/lang/statistiques_km.php | 6 +- .../statistiques/lang/statistiques_lb.php | 6 +- .../statistiques/lang/statistiques_my.php | 6 +- .../statistiques/lang/statistiques_nb.php | 6 +- .../statistiques/lang/statistiques_nl.php | 26 +- .../statistiques/lang/statistiques_no.php | 6 +- .../statistiques/lang/statistiques_oc_auv.php | 6 +- .../statistiques/lang/statistiques_oc_gsc.php | 6 +- .../statistiques/lang/statistiques_oc_lms.php | 6 +- .../statistiques/lang/statistiques_oc_lnc.php | 6 +- .../statistiques/lang/statistiques_oc_ni.php | 6 +- .../lang/statistiques_oc_ni_la.php | 6 +- .../lang/statistiques_oc_ni_mis.php | 79 + .../statistiques/lang/statistiques_oc_prv.php | 6 +- .../statistiques/lang/statistiques_oc_va.php | 6 +- .../statistiques/lang/statistiques_pl.php | 6 +- .../statistiques/lang/statistiques_pt.php | 6 +- .../statistiques/lang/statistiques_pt_br.php | 44 +- .../statistiques/lang/statistiques_ro.php | 6 +- .../statistiques/lang/statistiques_ru.php | 29 +- .../statistiques/lang/statistiques_sk.php | 26 +- .../statistiques/lang/statistiques_sv.php | 6 +- .../statistiques/lang/statistiques_tr.php | 6 +- .../statistiques/lang/statistiques_uk.php | 78 + .../statistiques/lang/statistiques_vi.php | 6 +- .../statistiques/lang/statistiques_zh.php | 6 +- www/plugins-dist/statistiques/paquet.xml | 6 +- .../squelettes/contenu/stats_archiver.html | 28 + .../contenu/stats_lang_fonctions.php | 63 +- .../squelettes/contenu/stats_referers.html | 4 +- .../contenu/stats_referers_fonctions.php | 23 +- .../contenu/stats_repartition_fonctions.php | 119 +- .../inclure/admin_stats_archiver.html | 5 + .../inclure/stats-visites-data_fonctions.php | 38 +- .../inclure/stats-visites-jours.html | 14 +- .../inclure/stats-visites-jours_fonctions.php | 6 +- .../inclure/stats-visites-mois.html | 8 +- .../inclure/stats-visites-mois_fonctions.php | 6 +- .../inclure/stats-visites-populaires.html | 6 +- .../squelettes/navigation/stats_archiver.html | 17 + .../prive/squelettes/top/stats_referers.html | 3 +- .../statistiques/prive/stats/visites.html | 11 +- .../prive/style_prive_plugin_stats.html | 10 +- .../statistiques/public/stats.php | 130 +- .../statistiques/stats_administrations.php | 49 +- .../statistiques/stats_autoriser.php | 125 +- .../statistiques/stats_ieconfig.php | 44 +- .../statistiques/stats_pipelines.php | 209 +- www/plugins-dist/svp/action/actionner.php | 87 +- .../svp/action/actualiser_depot.php | 20 +- www/plugins-dist/svp/action/editer_depot.php | 41 +- .../svp/action/supprimer_depot.php | 9 +- www/plugins-dist/svp/action/teleporter.php | 67 +- www/plugins-dist/svp/base/svp_declarer.php | 342 +- www/plugins-dist/svp/exec/admin_plugin.php | 110 +- .../svp/formulaires/admin_plugin.html | 75 +- .../svp/formulaires/admin_plugin.php | 108 +- .../svp/formulaires/ajouter_depot.html | 10 +- .../svp/formulaires/ajouter_depot.php | 45 +- .../svp/formulaires/charger_plugin.html | 33 +- .../svp/formulaires/charger_plugin.php | 77 +- .../formulaires/charger_plugin_archive.html | 12 +- .../formulaires/charger_plugin_archive.php | 36 +- .../svp/formulaires/configurer_svp.html | 32 +- .../svp/formulaires/editer_depot.html | 26 +- .../svp/formulaires/editer_depot.php | 28 +- .../svp/formulaires/inc-admin_plugin.html | 143 +- .../inc-admin_plugin_fonctions.php | 30 + .../formulaires/inc-confirmer_actions.html | 11 +- .../svp/formulaires/inc-plugins_trouves.html | 4 +- .../svp/genie/svp_actualiser_depots.php | 11 +- .../svp/genie/svp_taches_generales_cron.php | 13 +- www/plugins-dist/svp/inc/pcltar.php | 3557 --- www/plugins-dist/svp/inc/svp_actionner.php | 869 +- www/plugins-dist/svp/inc/svp_decider.php | 478 +- .../svp/inc/svp_depoter_distant.php | 413 +- .../svp/inc/svp_depoter_local.php | 303 +- www/plugins-dist/svp/inc/svp_outiller.php | 238 +- www/plugins-dist/svp/inc/svp_phraser.php | 195 +- www/plugins-dist/svp/inc/svp_rechercher.php | 151 +- .../svp/inc/where_compatible_spip.php | 49 +- www/plugins-dist/svp/lang/paquet-svp.xml | 13 + www/plugins-dist/svp/lang/paquet-svp_ar.php | 6 +- www/plugins-dist/svp/lang/paquet-svp_de.php | 10 +- www/plugins-dist/svp/lang/paquet-svp_en.php | 6 +- www/plugins-dist/svp/lang/paquet-svp_es.php | 6 +- www/plugins-dist/svp/lang/paquet-svp_fa.php | 6 +- www/plugins-dist/svp/lang/paquet-svp_fr.php | 6 +- .../svp/lang/paquet-svp_fr_fem.php | 6 +- .../svp/lang/paquet-svp_fr_tu.php | 15 + www/plugins-dist/svp/lang/paquet-svp_it.php | 6 +- www/plugins-dist/svp/lang/paquet-svp_nl.php | 10 +- .../svp/lang/paquet-svp_oc_ni_mis.php | 15 + www/plugins-dist/svp/lang/paquet-svp_pt.php | 6 +- .../svp/lang/paquet-svp_pt_br.php | 15 + www/plugins-dist/svp/lang/paquet-svp_ru.php | 6 +- www/plugins-dist/svp/lang/paquet-svp_sk.php | 6 +- www/plugins-dist/svp/lang/paquet-svp_uk.php | 15 + www/plugins-dist/svp/lang/svp.xml | 45 +- www/plugins-dist/svp/lang/svp_ar.php | 35 +- www/plugins-dist/svp/lang/svp_de.php | 37 +- www/plugins-dist/svp/lang/svp_en.php | 25 +- www/plugins-dist/svp/lang/svp_es.php | 91 +- www/plugins-dist/svp/lang/svp_fa.php | 14 +- www/plugins-dist/svp/lang/svp_fr.php | 24 +- www/plugins-dist/svp/lang/svp_fr_fem.php | 20 +- www/plugins-dist/svp/lang/svp_fr_tu.php | 296 + www/plugins-dist/svp/lang/svp_it.php | 20 +- www/plugins-dist/svp/lang/svp_nl.php | 292 + www/plugins-dist/svp/lang/svp_oc_ni_mis.php | 292 + www/plugins-dist/svp/lang/svp_pt_br.php | 291 + www/plugins-dist/svp/lang/svp_ru.php | 129 +- www/plugins-dist/svp/lang/svp_sk.php | 29 +- www/plugins-dist/svp/lang/svp_uk.php | 282 + .../svp/lib/pcltar/pclerror.lib.php | 132 - .../svp/lib/pcltar/pcltrace.lib.php | 454 - www/plugins-dist/svp/lib/pcltar/readme.txt | 493 - www/plugins-dist/svp/paquet.xml | 9 +- www/plugins-dist/svp/paquet_xml.html | 9 + .../svp/plugins/fusion_paquet.php | 23 +- .../svp/plugins/fusion_plugin.php | 126 +- .../svp/plugins/preparer_sql_paquet.php | 109 +- .../svp/plugins/preparer_sql_plugin.php | 169 +- .../svp/prive/objets/liste/paquets.html | 2 +- .../svp/prive/objets/liste/plugins.html | 2 +- .../squelettes/contenu/svp_admin_plugin.html | 23 +- .../squelettes/inclure/plugin_detail.html | 25 +- .../squelettes/inclure/voir_en_ligne.html | 2 +- .../inclure/voir_en_ligne_fonctions.php | 4 +- .../navigation/svp_admin_plugin_fonctions.php | 8 +- .../svp/prive/style_prive_plugin_svp.html | 51 +- www/plugins-dist/svp/svp_administrations.php | 30 +- www/plugins-dist/svp/svp_fonctions.php | 449 +- www/plugins-dist/svp/svp_ieconfig.php | 62 +- www/plugins-dist/svp/svp_pipelines.php | 72 +- www/plugins-dist/svp/teleporter/git.php | 127 +- www/plugins-dist/svp/teleporter/http.php | 131 +- .../svp/teleporter/http_deballe_tgz.php | 96 +- .../svp/teleporter/http_deballe_zip.php | 87 +- www/plugins-dist/svp/teleporter/svn.php | 103 +- .../svp/tests_debug/criteres.html | 47 - www/plugins-dist/svp/tests_debug/depot.xml | 381 - .../svp/tests_debug/depot_non_conforme.xml | 5 - .../svp/tests_debug/fonctions.html | 207 - www/plugins-dist/svp/xml.html | 1 + .../textwheel/engine/textwheel.php | 298 +- .../textwheel/engine/textwheelrule.php | 72 +- .../textwheel/engine/textwheelruleset.php | 105 +- www/plugins-dist/textwheel/inc/autoliens.php | 36 +- www/plugins-dist/textwheel/inc/lien.php | 816 +- www/plugins-dist/textwheel/inc/notes.php | 188 +- .../textwheel/inc/ressource-mini.php | 7 + www/plugins-dist/textwheel/inc/ressource.php | 67 +- www/plugins-dist/textwheel/inc/texte.php | 619 +- www/plugins-dist/textwheel/inc/textwheel.php | 60 +- www/plugins-dist/textwheel/inc/yaml-mini.php | 21 +- www/plugins-dist/textwheel/lang/paquet-tw.xml | 14 +- .../textwheel/lang/paquet-tw_ar.php | 6 +- .../textwheel/lang/paquet-tw_de.php | 6 +- .../textwheel/lang/paquet-tw_en.php | 6 +- .../textwheel/lang/paquet-tw_es.php | 6 +- .../textwheel/lang/paquet-tw_fa.php | 6 +- .../textwheel/lang/paquet-tw_fr.php | 6 +- .../textwheel/lang/paquet-tw_fr_fem.php | 6 +- .../textwheel/lang/paquet-tw_fr_tu.php | 15 + .../textwheel/lang/paquet-tw_it.php | 6 +- .../textwheel/lang/paquet-tw_lb.php | 6 +- .../textwheel/lang/paquet-tw_nl.php | 6 +- .../textwheel/lang/paquet-tw_oc_ni_mis.php | 15 + .../textwheel/lang/paquet-tw_pt.php | 6 +- .../textwheel/lang/paquet-tw_pt_br.php | 15 + .../textwheel/lang/paquet-tw_ru.php | 6 +- .../textwheel/lang/paquet-tw_sk.php | 6 +- .../textwheel/lang/paquet-tw_uk.php | 15 + www/plugins-dist/textwheel/lang/tw.xml | 3 + www/plugins-dist/textwheel/lang/tw_en.php | 6 +- www/plugins-dist/textwheel/lang/tw_es.php | 6 +- www/plugins-dist/textwheel/lang/tw_fr.php | 6 +- www/plugins-dist/textwheel/lang/tw_nl.php | 16 + www/plugins-dist/textwheel/paquet.xml | 17 +- .../prive/themes/spip/images/br-auto-10.png | Bin 248 -> 177 bytes .../themes/spip/images/br-auto_rtl-10.png | Bin 0 -> 185 bytes .../prive/themes/spip/images/br-manuel-10.png | Bin 250 -> 169 bytes .../themes/spip/images/br-manuel_rtl-10.png | Bin 0 -> 176 bytes .../prive/themes/spip/images/br-no-10.png | Bin 244 -> 136 bytes .../prive/themes/spip/images/br-no_rtl-10.png | Bin 0 -> 131 bytes .../tests/data/base/atx_heading.html | 3 + .../textwheel/tests/data/base/atx_heading.txt | 5 + .../tests/data/base/block-level_html.html | 8 + .../tests/data/base/block-level_html.txt | 15 + .../data/base/blockquote_quote_poesie.html | 13 + .../data/base/blockquote_quote_poesie.txt | 18 + .../tests/data/base/cadre_block.html | 7 + .../textwheel/tests/data/base/cadre_block.txt | 9 + .../textwheel/tests/data/base/code_block.html | 6 + .../textwheel/tests/data/base/code_block.txt | 9 + .../textwheel/tests/data/base/code_span.html | 5 + .../textwheel/tests/data/base/code_span.txt | 9 + .../tests/data/base/compound_blockquote.html | 5 + .../tests/data/base/compound_blockquote.txt | 11 + .../tests/data/base/compound_emphasis.html | 2 + .../tests/data/base/compound_emphasis.txt | 4 + .../tests/data/base/compound_list.html | 7 + .../tests/data/base/compound_list.txt | 12 + .../tests/data/base/deeply_nested_list.html | 1 + .../tests/data/base/deeply_nested_list.txt | 7 + .../textwheel/tests/data/base/em_strong.html | 4 + .../textwheel/tests/data/base/em_strong.txt | 7 + .../textwheel/tests/data/base/email.html | 2 + .../textwheel/tests/data/base/email.txt | 3 + .../textwheel/tests/data/base/emphasis.html | 7 + .../textwheel/tests/data/base/emphasis.txt | 12 + .../textwheel/tests/data/base/escaping.html | 4 + .../textwheel/tests/data/base/escaping.txt | 9 + .../tests/data/base/fenced_code_block.html | 5 + .../tests/data/base/fenced_code_block.txt | 14 + .../tests/data/base/image_reference.html | 3 + .../tests/data/base/image_reference.txt | 3 + .../tests/data/base/inline_link.html | 3 + .../textwheel/tests/data/base/inline_link.txt | 5 + .../tests/data/base/inline_link_title.html | 10 + .../tests/data/base/inline_link_title.txt | 19 + .../textwheel/tests/data/base/lazy_list.html | 2 + .../textwheel/tests/data/base/lazy_list.txt | 2 + .../textwheel/tests/data/base/math.html | 3 + .../textwheel/tests/data/base/math.txt | 5 + .../textwheel/tests/data/base/mixed_list.html | 7 + .../textwheel/tests/data/base/mixed_list.txt | 13 + .../data/base/multiline_list_paragraph.html | 4 + .../data/base/multiline_list_paragraph.txt | 5 + .../data/base/nested_block-level_html.html | 20 + .../data/base/nested_block-level_html.txt | 23 + .../textwheel/tests/data/base/notes.html | 12 + .../textwheel/tests/data/base/notes.txt | 7 + .../tests/data/base/ordered_list.html | 3 + .../tests/data/base/ordered_list.txt | 8 + .../tests/data/base/paragraph_list.html | 9 + .../tests/data/base/paragraph_list.txt | 14 + .../base/self-closing_block-level_html.html | 4 + .../base/self-closing_block-level_html.txt | 7 + .../tests/data/base/simple_blockquote.html | 9 + .../tests/data/base/simple_blockquote.txt | 9 + .../tests/data/base/span-level_html.html | 5 + .../tests/data/base/span-level_html.txt | 7 + .../tests/data/base/sparse_dense_list.html | 1 + .../tests/data/base/sparse_dense_list.txt | 4 + .../tests/data/base/sparse_list.html | 3 + .../textwheel/tests/data/base/sparse_list.txt | 11 + .../tests/data/base/special_characters.html | 9 + .../tests/data/base/special_characters.txt | 15 + .../tests/data/base/unordered_list.html | 5 + .../tests/data/base/unordered_list.txt | 9 + .../textwheel/tests/data/base/whitespace.html | 5 + .../textwheel/tests/data/base/whitespace.txt | 5 + .../tests/data/modeles_block/atx_heading.html | 7 + .../tests/data/modeles_block/atx_heading.txt | 5 + .../data/modeles_block/block-level_html.html | 8 + .../data/modeles_block/block-level_html.txt | 15 + .../blockquote_quote_poesie.html | 15 + .../modeles_block/blockquote_quote_poesie.txt | 18 + .../tests/data/modeles_block/cadre_block.html | 9 + .../tests/data/modeles_block/cadre_block.txt | 9 + .../tests/data/modeles_block/code_block.html | 8 + .../tests/data/modeles_block/code_block.txt | 9 + .../tests/data/modeles_block/code_span.html | 5 + .../tests/data/modeles_block/code_span.txt | 9 + .../modeles_block/compound_blockquote.html | 7 + .../modeles_block/compound_blockquote.txt | 11 + .../data/modeles_block/compound_emphasis.html | 2 + .../data/modeles_block/compound_emphasis.txt | 4 + .../data/modeles_block/compound_list.html | 15 + .../data/modeles_block/compound_list.txt | 12 + .../modeles_block/deeply_nested_list.html | 8 + .../data/modeles_block/deeply_nested_list.txt | 7 + .../tests/data/modeles_block/em_strong.html | 16 + .../tests/data/modeles_block/em_strong.txt | 7 + .../tests/data/modeles_block/email.html | 2 + .../tests/data/modeles_block/email.txt | 3 + .../tests/data/modeles_block/emphasis.html | 33 + .../tests/data/modeles_block/emphasis.txt | 12 + .../tests/data/modeles_block/escaping.html | 5 + .../tests/data/modeles_block/escaping.txt_ | 9 + .../data/modeles_block/fenced_code_block.html | 5 + .../data/modeles_block/fenced_code_block.txt | 14 + .../data/modeles_block/image_reference.html | 5 + .../data/modeles_block/image_reference.txt | 3 + .../tests/data/modeles_block/inline_link.html | 17 + .../tests/data/modeles_block/inline_link.txt | 11 + .../data/modeles_block/inline_link_title.html | 37 + .../data/modeles_block/inline_link_title.txt | 9 + .../tests/data/modeles_block/lazy_list.html | 4 + .../tests/data/modeles_block/lazy_list.txt | 2 + .../tests/data/modeles_block/mixed_list.html | 20 + .../tests/data/modeles_block/mixed_list.txt | 13 + .../multiline_list_paragraph.html | 7 + .../multiline_list_paragraph.txt | 5 + .../nested_block-level_html.html | 21 + .../modeles_block/nested_block-level_html.txt | 23 + .../tests/data/modeles_block/notes.html | 12 + .../tests/data/modeles_block/notes.txt | 7 + .../data/modeles_block/ordered_list.html | 7 + .../tests/data/modeles_block/ordered_list.txt | 8 + .../data/modeles_block/paragraph_list.html | 16 + .../data/modeles_block/paragraph_list.txt | 14 + .../self-closing_block-level_html.html | 4 + .../self-closing_block-level_html.txt | 7 + .../data/modeles_block/simple_blockquote.html | 13 + .../data/modeles_block/simple_blockquote.txt | 9 + .../data/modeles_block/span-level_html.html | 15 + .../data/modeles_block/span-level_html.txt | 7 + .../data/modeles_block/sparse_dense_list.html | 4 + .../data/modeles_block/sparse_dense_list.txt | 4 + .../tests/data/modeles_block/sparse_list.html | 7 + .../tests/data/modeles_block/sparse_list.txt | 11 + .../data/modeles_block/unordered_list.html | 11 + .../data/modeles_block/unordered_list.txt | 9 + .../tests/data/modeles_block/whitespace.html | 10 + .../tests/data/modeles_block/whitespace.txt | 5 + .../data/modeles_inline/atx_heading.html | 3 + .../tests/data/modeles_inline/atx_heading.txt | 5 + .../data/modeles_inline/block-level_html.html | 8 + .../data/modeles_inline/block-level_html.txt | 15 + .../blockquote_quote_poesie.html | 13 + .../blockquote_quote_poesie.txt | 18 + .../data/modeles_inline/cadre_block.html | 7 + .../tests/data/modeles_inline/cadre_block.txt | 9 + .../tests/data/modeles_inline/code_block.html | 6 + .../tests/data/modeles_inline/code_block.txt | 9 + .../tests/data/modeles_inline/code_span.html | 5 + .../tests/data/modeles_inline/code_span.txt | 9 + .../modeles_inline/compound_blockquote.html | 5 + .../modeles_inline/compound_blockquote.txt | 11 + .../modeles_inline/compound_emphasis.html | 2 + .../data/modeles_inline/compound_emphasis.txt | 4 + .../data/modeles_inline/compound_list.html | 7 + .../data/modeles_inline/compound_list.txt | 12 + .../modeles_inline/deeply_nested_list.html | 1 + .../modeles_inline/deeply_nested_list.txt | 7 + .../tests/data/modeles_inline/em_strong.html | 4 + .../tests/data/modeles_inline/em_strong.txt | 7 + .../tests/data/modeles_inline/email.html | 2 + .../tests/data/modeles_inline/email.txt | 3 + .../tests/data/modeles_inline/emphasis.html | 7 + .../tests/data/modeles_inline/emphasis.txt | 12 + .../tests/data/modeles_inline/escaping.html | 5 + .../tests/data/modeles_inline/escaping.txt_ | 9 + .../modeles_inline/fenced_code_block.html | 5 + .../data/modeles_inline/fenced_code_block.txt | 14 + .../data/modeles_inline/image_reference.html | 3 + .../data/modeles_inline/image_reference.txt | 3 + .../data/modeles_inline/inline_link.html | 6 + .../tests/data/modeles_inline/inline_link.txt | 11 + .../modeles_inline/inline_link_title.html | 10 + .../data/modeles_inline/inline_link_title.txt | 19 + .../tests/data/modeles_inline/lazy_list.html | 2 + .../tests/data/modeles_inline/lazy_list.txt | 2 + .../tests/data/modeles_inline/mixed_list.html | 7 + .../tests/data/modeles_inline/mixed_list.txt | 13 + .../multiline_list_paragraph.html | 4 + .../multiline_list_paragraph.txt | 5 + .../nested_block-level_html.html | 20 + .../nested_block-level_html.txt | 23 + .../tests/data/modeles_inline/notes.html | 12 + .../tests/data/modeles_inline/notes.txt | 7 + .../data/modeles_inline/ordered_list.html | 3 + .../data/modeles_inline/ordered_list.txt | 8 + .../data/modeles_inline/paragraph_list.html | 9 + .../data/modeles_inline/paragraph_list.txt | 14 + .../self-closing_block-level_html.html | 4 + .../self-closing_block-level_html.txt | 7 + .../modeles_inline/simple_blockquote.html | 9 + .../data/modeles_inline/simple_blockquote.txt | 9 + .../data/modeles_inline/span-level_html.html | 5 + .../data/modeles_inline/span-level_html.txt | 7 + .../modeles_inline/sparse_dense_list.html | 1 + .../data/modeles_inline/sparse_dense_list.txt | 4 + .../data/modeles_inline/sparse_list.html | 3 + .../tests/data/modeles_inline/sparse_list.txt | 11 + .../data/modeles_inline/unordered_list.html | 5 + .../data/modeles_inline/unordered_list.txt | 9 + .../tests/data/modeles_inline/whitespace.html | 5 + .../tests/data/modeles_inline/whitespace.txt | 5 + .../tests/data/typo/atx_heading.html | 3 + .../textwheel/tests/data/typo/atx_heading.txt | 5 + .../tests/data/typo/block-level_html.html | 8 + .../tests/data/typo/block-level_html.txt | 15 + .../data/typo/blockquote_quote_poesie.html | 13 + .../data/typo/blockquote_quote_poesie.txt | 18 + .../tests/data/typo/cadre_block.html | 7 + .../textwheel/tests/data/typo/cadre_block.txt | 9 + .../textwheel/tests/data/typo/code_block.html | 6 + .../textwheel/tests/data/typo/code_block.txt | 9 + .../textwheel/tests/data/typo/code_span.html | 5 + .../textwheel/tests/data/typo/code_span.txt | 9 + .../tests/data/typo/compound_blockquote.html | 5 + .../tests/data/typo/compound_blockquote.txt | 11 + .../tests/data/typo/compound_emphasis.html | 2 + .../tests/data/typo/compound_emphasis.txt | 4 + .../tests/data/typo/compound_list.html | 7 + .../tests/data/typo/compound_list.txt | 12 + .../tests/data/typo/deeply_nested_list.html | 1 + .../tests/data/typo/deeply_nested_list.txt | 7 + .../textwheel/tests/data/typo/em_strong.html | 4 + .../textwheel/tests/data/typo/em_strong.txt | 7 + .../textwheel/tests/data/typo/email.html | 2 + .../textwheel/tests/data/typo/email.txt | 3 + .../textwheel/tests/data/typo/emphasis.html | 7 + .../textwheel/tests/data/typo/emphasis.txt | 12 + .../textwheel/tests/data/typo/escaping.html | 5 + .../textwheel/tests/data/typo/escaping.txt_ | 9 + .../tests/data/typo/fenced_code_block.html | 5 + .../tests/data/typo/fenced_code_block.txt | 14 + .../tests/data/typo/image_reference.html | 3 + .../tests/data/typo/image_reference.txt | 3 + .../tests/data/typo/inline_link.html | 2 + .../textwheel/tests/data/typo/inline_link.txt | 3 + .../tests/data/typo/inline_link_title.html | 10 + .../tests/data/typo/inline_link_title.txt | 19 + .../textwheel/tests/data/typo/lazy_list.html | 2 + .../textwheel/tests/data/typo/lazy_list.txt | 2 + .../textwheel/tests/data/typo/mixed_list.html | 7 + .../textwheel/tests/data/typo/mixed_list.txt | 13 + .../data/typo/multiline_list_paragraph.html | 4 + .../data/typo/multiline_list_paragraph.txt | 5 + .../data/typo/nested_block-level_html.html | 20 + .../data/typo/nested_block-level_html.txt | 23 + .../textwheel/tests/data/typo/notes.html | 12 + .../textwheel/tests/data/typo/notes.txt | 7 + .../tests/data/typo/ordered_list.html | 3 + .../tests/data/typo/ordered_list.txt | 8 + .../tests/data/typo/paragraph_list.html | 9 + .../tests/data/typo/paragraph_list.txt | 14 + .../typo/self-closing_block-level_html.html | 4 + .../typo/self-closing_block-level_html.txt | 7 + .../tests/data/typo/simple_blockquote.html | 9 + .../tests/data/typo/simple_blockquote.txt | 9 + .../tests/data/typo/span-level_html.html | 5 + .../tests/data/typo/span-level_html.txt | 7 + .../tests/data/typo/sparse_dense_list.html | 1 + .../tests/data/typo/sparse_dense_list.txt | 4 + .../tests/data/typo/sparse_list.html | 3 + .../textwheel/tests/data/typo/sparse_list.txt | 11 + .../tests/data/typo/unordered_list.html | 5 + .../tests/data/typo/unordered_list.txt | 9 + .../textwheel/tests/data/typo/whitespace.html | 5 + .../textwheel/tests/data/typo/whitespace.txt | 5 + .../textwheel/tests/simpletest/all_tests.php | 9 + .../tests/simpletest/lanceur_spip.php | 12 + .../simpletest/nettoyer_raccourcis_typo.php | 197 + .../squelettes/modeles/textwheel_block.html | 1 + .../squelettes/modeles/textwheel_inline.html | 1 + .../textwheel/tests/tw_propre.php | 68 + .../tests/tw_propre_modeles_block.php | 68 + .../tests/tw_propre_modeles_inline.php | 68 + .../textwheel/tests/tw_propre_typo.php | 68 + www/plugins-dist/textwheel/textwheel-32.png | Bin 2613 -> 2341 bytes www/plugins-dist/textwheel/typographie/en.php | 22 +- www/plugins-dist/textwheel/typographie/fr.php | 43 +- .../textwheel/wheels/spip/echappe-js.php | 43 + .../textwheel/wheels/spip/echappe-js.yaml | 48 + .../wheels/spip/interdire-scripts.yaml | 3 +- .../textwheel/wheels/spip/spip-listes.php | 58 +- .../textwheel/wheels/spip/spip-listes.yaml | 6 +- .../wheels/spip/spip-paragrapher.php | 84 +- .../wheels/spip/spip-paragrapher.yaml | 30 +- .../textwheel/wheels/spip/spip-tableaux.php | 6 +- .../textwheel/wheels/spip/spip.php | 59 +- .../textwheel/wheels/spip/spip.yaml | 50 +- .../urls_etendues/action/editer_url.php | 309 +- .../urls_etendues/action/supprimer_url.php | 38 +- .../urls_etendues/action/urls_actualiser.php | 38 +- .../urls_etendues/action/urls_liberer.php | 32 - .../urls_etendues/action/urls_verrouiller.php | 32 - www/plugins-dist/urls_etendues/base/urls.php | 42 +- .../formulaires/configurer_urls.html | 18 +- .../formulaires/configurer_urls.php | 50 +- .../formulaires/configurer_urls_arbo.html | 32 +- .../configurer_urls_arbo_fonctions.php | 6 +- .../formulaires/configurer_urls_propres.html | 32 +- .../configurer_urls_propres_fonctions.php | 6 +- .../formulaires/editer_url_objet.html | 12 +- .../formulaires/editer_url_objet.php | 86 +- .../urls_etendues/lang/paquet-urls.xml | 9 + .../urls_etendues/lang/paquet-urls_ar.php | 6 +- .../urls_etendues/lang/paquet-urls_de.php | 6 +- .../urls_etendues/lang/paquet-urls_en.php | 6 +- .../urls_etendues/lang/paquet-urls_es.php | 6 +- .../urls_etendues/lang/paquet-urls_fa.php | 6 +- .../urls_etendues/lang/paquet-urls_fr.php | 6 +- .../urls_etendues/lang/paquet-urls_fr_fem.php | 6 +- .../urls_etendues/lang/paquet-urls_fr_tu.php | 15 + .../urls_etendues/lang/paquet-urls_it.php | 6 +- .../urls_etendues/lang/paquet-urls_nl.php | 6 +- .../lang/paquet-urls_oc_ni_mis.php | 15 + .../urls_etendues/lang/paquet-urls_pt_br.php | 6 +- .../urls_etendues/lang/paquet-urls_ru.php | 6 +- .../urls_etendues/lang/paquet-urls_sk.php | 6 +- .../urls_etendues/lang/paquet-urls_uk.php | 15 + www/plugins-dist/urls_etendues/lang/urls.xml | 22 +- .../urls_etendues/lang/urls_ar.php | 8 +- .../urls_etendues/lang/urls_ast.php | 6 +- .../urls_etendues/lang/urls_br.php | 6 +- .../urls_etendues/lang/urls_bs.php | 70 - .../urls_etendues/lang/urls_ca.php | 6 +- .../urls_etendues/lang/urls_co.php | 6 +- .../urls_etendues/lang/urls_cpf_hat.php | 70 - .../urls_etendues/lang/urls_cs.php | 6 +- .../urls_etendues/lang/urls_de.php | 6 +- .../urls_etendues/lang/urls_el.php | 70 - .../urls_etendues/lang/urls_en.php | 12 +- .../urls_etendues/lang/urls_eo.php | 6 +- .../urls_etendues/lang/urls_es.php | 8 +- .../urls_etendues/lang/urls_et.php | 70 - .../urls_etendues/lang/urls_eu.php | 70 - .../urls_etendues/lang/urls_fa.php | 6 +- .../urls_etendues/lang/urls_fi.php | 70 - .../urls_etendues/lang/urls_fr.php | 8 +- .../urls_etendues/lang/urls_fr_biblio.php | 70 - .../urls_etendues/lang/urls_fr_fem.php | 8 +- .../urls_etendues/lang/urls_fr_stal.php | 70 - .../urls_etendues/lang/urls_fr_tu.php | 8 +- .../urls_etendues/lang/urls_gl.php | 6 +- .../urls_etendues/lang/urls_he.php | 70 - .../urls_etendues/lang/urls_hi.php | 70 - .../urls_etendues/lang/urls_hr.php | 70 - .../urls_etendues/lang/urls_hu.php | 70 - .../urls_etendues/lang/urls_is.php | 70 - .../urls_etendues/lang/urls_it.php | 8 +- .../urls_etendues/lang/urls_it_fem.php | 6 +- .../urls_etendues/lang/urls_km.php | 70 - .../urls_etendues/lang/urls_ko.php | 70 - .../urls_etendues/lang/urls_lb.php | 6 +- .../urls_etendues/lang/urls_lt.php | 70 - .../urls_etendues/lang/urls_lv.php | 70 - .../urls_etendues/lang/urls_nb.php | 70 - .../urls_etendues/lang/urls_ne.php | 70 - .../urls_etendues/lang/urls_nl.php | 70 +- .../urls_etendues/lang/urls_no.php | 70 - .../urls_etendues/lang/urls_oc_ni.php | 70 - .../urls_etendues/lang/urls_oc_ni_mis.php | 74 + .../urls_etendues/lang/urls_pl.php | 70 - .../urls_etendues/lang/urls_ps.php | 70 - .../urls_etendues/lang/urls_pt.php | 8 +- .../urls_etendues/lang/urls_pt_br.php | 64 +- .../urls_etendues/lang/urls_ro.php | 6 +- .../urls_etendues/lang/urls_ru.php | 14 +- .../urls_etendues/lang/urls_sh.php | 70 - .../urls_etendues/lang/urls_sk.php | 8 +- .../urls_etendues/lang/urls_sl.php | 70 - .../urls_etendues/lang/urls_sq.php | 70 - .../urls_etendues/lang/urls_sr.php | 70 - .../urls_etendues/lang/urls_sv.php | 70 - .../urls_etendues/lang/urls_th.php | 70 - .../urls_etendues/lang/urls_tr.php | 6 +- .../urls_etendues/lang/urls_uk.php | 97 +- .../urls_etendues/lang/urls_wa.php | 70 - www/plugins-dist/urls_etendues/paquet.xml | 8 +- .../prive/objets/liste/urls.html | 2 + .../contenu/configurer_urls_fonctions.php | 13 +- .../squelettes/navigation/controler_urls.html | 3 + .../prive/style_prive_plugin_urls.html | 2 +- www/plugins-dist/urls_etendues/urls/arbo.php | 740 +- www/plugins-dist/urls_etendues/urls/html.php | 56 +- .../urls_etendues/urls/libres.php | 14 +- .../urls_etendues/urls/propres.php | 303 +- .../urls_etendues/urls/propres2.php | 14 +- .../urls_etendues/urls/propres_qs.php | 15 +- .../urls_etendues/urls/simple.php | 72 +- .../urls_etendues/urls/standard.php | 120 - .../urls_etendues/urls_administrations.php | 88 +- .../urls_etendues/urls_ieconfig.php | 28 +- .../urls_etendues/urls_pipeline.php | 59 +- .../vertebres/lang/paquet-vertebres.xml | 14 +- .../vertebres/lang/paquet-vertebres_ar.php | 6 +- .../vertebres/lang/paquet-vertebres_de.php | 6 +- .../vertebres/lang/paquet-vertebres_en.php | 6 +- .../vertebres/lang/paquet-vertebres_es.php | 6 +- .../vertebres/lang/paquet-vertebres_fa.php | 6 +- .../vertebres/lang/paquet-vertebres_fr.php | 6 +- .../lang/paquet-vertebres_fr_fem.php | 6 +- .../vertebres/lang/paquet-vertebres_fr_tu.php | 16 + .../vertebres/lang/paquet-vertebres_it.php | 6 +- .../vertebres/lang/paquet-vertebres_lb.php | 6 +- .../vertebres/lang/paquet-vertebres_nl.php | 6 +- .../lang/paquet-vertebres_oc_ni_mis.php | 16 + .../vertebres/lang/paquet-vertebres_pt_br.php | 16 + .../vertebres/lang/paquet-vertebres_ru.php | 6 +- .../vertebres/lang/paquet-vertebres_sk.php | 6 +- .../vertebres/lang/paquet-vertebres_uk.php | 16 + www/plugins-dist/vertebres/lang/vertebres.xml | 46 +- .../vertebres/lang/vertebres_ar.php | 11 +- .../vertebres/lang/vertebres_de.php | 11 +- .../vertebres/lang/vertebres_en.php | 11 +- .../vertebres/lang/vertebres_es.php | 11 +- .../vertebres/lang/vertebres_fa.php | 6 +- .../vertebres/lang/vertebres_fr.php | 11 +- .../vertebres/lang/vertebres_fr_fem.php | 11 +- .../vertebres/lang/vertebres_fr_tu.php | 20 + .../vertebres/lang/vertebres_it.php | 11 +- .../vertebres/lang/vertebres_lb.php | 6 +- .../vertebres/lang/vertebres_nl.php | 11 +- .../vertebres/lang/vertebres_oc_ni_mis.php | 20 + .../vertebres/lang/vertebres_pt_br.php | 20 + .../vertebres/lang/vertebres_ru.php | 11 +- .../vertebres/lang/vertebres_sk.php | 11 +- .../vertebres/lang/vertebres_uk.php | 20 + www/plugins-dist/vertebres/paquet.xml | 11 +- .../prive/squelettes/contenu/vertebres.html | 26 +- .../prive/themes/spip/images/tables-16.png | Bin 0 -> 577 bytes .../prive/themes/spip/images/tables-32.png | Bin 0 -> 1231 bytes .../vertebres/public/vertebrer.php | 185 +- .../vertebres/vertebres_pipelines.php | 74 +- .../Menu_langue_lien/balise/menu_lang.php | 6 +- .../configurer_menu_lang_liens.html | 10 +- .../formulaires/menu_lang.html | 14 +- www/plugins/Menu_langue_lien/lang/mll.xml | 24 +- www/plugins/Menu_langue_lien/lang/mll_en.php | 2 +- www/plugins/Menu_langue_lien/lang/mll_es.php | 2 +- www/plugins/Menu_langue_lien/lang/mll_nl.php | 2 +- www/plugins/Menu_langue_lien/lang/mll_ru.php | 2 +- www/plugins/Menu_langue_lien/lang/mll_sk.php | 2 +- .../Menu_langue_lien/lang/paquet-mll.xml | 22 +- .../Menu_langue_lien/lang/paquet-mll_en.php | 2 +- .../Menu_langue_lien/lang/paquet-mll_es.php | 2 +- .../Menu_langue_lien/lang/paquet-mll_nl.php | 2 +- .../Menu_langue_lien/lang/paquet-mll_ru.php | 2 +- .../Menu_langue_lien/lang/paquet-mll_sk.php | 2 +- www/plugins/Menu_langue_lien/mll_options.php | 1 - www/plugins/Menu_langue_lien/paquet.xml | 19 +- www/plugins/Menu_langue_lien/plugin.xml | 33 +- www/plugins/Menu_langue_lien/svn.revision | 8 +- www/plugins/abomailmans/lang/abomailmans.xml | 25 +- .../abomailmans/lang/abomailmans_de.php | 4 +- .../abomailmans/lang/abomailmans_en.php | 4 +- .../abomailmans/lang/abomailmans_es.php | 5 +- .../abomailmans/lang/abomailmans_fr.php | 2 - .../abomailmans/lang/abomailmans_fr_tu.php | 4 +- .../abomailmans/lang/abomailmans_sk.php | 5 +- .../abomailmans/lang/paquet-abomailmans.xml | 22 +- .../lang/paquet-abomailmans_de.php | 4 +- .../lang/paquet-abomailmans_en.php | 4 +- .../lang/paquet-abomailmans_es.php | 4 +- .../lang/paquet-abomailmans_fr.php | 2 - .../lang/paquet-abomailmans_fr_tu.php | 4 +- .../lang/paquet-abomailmans_sk.php | 4 +- www/plugins/abomailmans/paquet.xml | 8 +- www/plugins/abomailmans/svn.revision | 8 +- .../compositions_fonctions.php | 24 +- .../compositions_v3/compositions_pipeline.php | 3 +- .../formulaires/editer_composition_objet.php | 2 +- .../compositions_v3/inc/compositions.php | 2 +- .../compositions_v3/lang/compositions.xml | 37 +- .../compositions_v3/lang/compositions_de.php | 2 +- .../compositions_v3/lang/compositions_en.php | 4 +- .../compositions_v3/lang/compositions_es.php | 2 +- .../compositions_v3/lang/compositions_nl.php | 2 +- .../compositions_v3/lang/compositions_ru.php | 2 +- .../compositions_v3/lang/compositions_sk.php | 2 +- .../lang/paquet-compositions.xml | 24 +- .../lang/paquet-compositions_en.php | 2 +- .../lang/paquet-compositions_es.php | 2 +- .../lang/paquet-compositions_nl.php | 2 +- .../lang/paquet-compositions_ru.php | 2 +- .../lang/paquet-compositions_sk.php | 2 +- www/plugins/compositions_v3/paquet.xml | 6 +- .../style_prive_plugin_compositions.html | 1 + www/plugins/compositions_v3/svn.revision | 8 +- .../css/enluminurestypo.css | 2 +- .../css/enluminurestypo_prive.css | 4 + .../editeur/table.js | 2 +- .../editeur/table_rtl.js | 2 +- .../lang/enlumtypo.xml | 25 +- .../lang/enlumtypo_ar.php | 2 +- .../lang/enlumtypo_en.php | 2 +- .../lang/enlumtypo_es.php | 2 +- .../lang/enlumtypo_it.php | 2 +- .../lang/enlumtypo_nl.php | 2 +- .../lang/enlumtypo_pt_br.php | 45 + .../lang/enlumtypo_ru.php | 2 +- .../lang/paquet-typoenluminee.xml | 4 +- .../enluminures_typographiques_v3/paquet.xml | 10 +- .../enluminures_typographiques_v3/plugin.xml | 8 +- .../svn.revision | 8 +- .../typoenluminee.php | 8 +- .../typoenluminee_options.php | 4 +- www/plugins/facteur/classes/facteur.php | 10 +- www/plugins/facteur/emails/inc-button.html | 9 +- .../facteur/facteur_administrations.php | 13 +- .../facteur/facteur_ieconfig_metas.php | 36 +- www/plugins/facteur/facteur_pipelines.php | 20 +- .../formulaires/configurer_facteur.html | 21 +- .../formulaires/configurer_facteur.php | 442 +- www/plugins/facteur/inc/envoyer_mail.php | 54 +- www/plugins/facteur/inc/facteur_classes.php | 9 +- www/plugins/facteur/lang/facteur.xml | 59 +- www/plugins/facteur/lang/facteur_de.php | 27 +- www/plugins/facteur/lang/facteur_en.php | 23 +- www/plugins/facteur/lang/facteur_es.php | 2 +- www/plugins/facteur/lang/facteur_fa.php | 2 +- www/plugins/facteur/lang/facteur_fr.php | 3 + www/plugins/facteur/lang/facteur_fr_tu.php | 2 +- www/plugins/facteur/lang/facteur_it.php | 2 +- www/plugins/facteur/lang/facteur_nl.php | 5 +- .../facteur/lang/facteur_oc_ni_mis.php | 2 +- www/plugins/facteur/lang/facteur_pt_br.php | 2 +- www/plugins/facteur/lang/facteur_sk.php | 2 +- www/plugins/facteur/lang/paquet-facteur.xml | 33 +- .../facteur/lang/paquet-facteur_de.php | 6 +- .../facteur/lang/paquet-facteur_en.php | 2 +- .../facteur/lang/paquet-facteur_es.php | 2 +- .../facteur/lang/paquet-facteur_fr_tu.php | 2 +- .../facteur/lang/paquet-facteur_nl.php | 2 +- .../facteur/lang/paquet-facteur_pt_br.php | 4 +- .../facteur/lang/paquet-facteur_ru.php | 2 +- .../facteur/lang/paquet-facteur_sk.php | 2 +- .../facteur/lib/markdownify/markdownify.php | 2 +- .../lib/markdownify/markdownify_extra.php | 4 +- www/plugins/facteur/paquet.xml | 7 +- www/plugins/facteur/phpmailer-php5/README.md | 184 - www/plugins/facteur/phpmailer-php5/VERSION | 2 +- .../facteur/phpmailer-php5/changelog.md | 620 - .../phpmailer-php5/class.phpmailer.php | 276 +- .../phpmailer-php5/class.phpmaileroauth.php | 1 + .../class.phpmaileroauthgoogle.php | 3 +- .../facteur/phpmailer-php5/class.pop3.php | 2 +- .../facteur/phpmailer-php5/class.smtp.php | 90 +- .../facteur/phpmailer-php5/composer.json | 3 +- .../facteur/phpmailer-php5/composer.lock | 3576 +++ .../phpmailer-php5/extras/htmlfilter.php | 11 +- .../extras/ntlm_sasl_client.php | 4 +- .../phpmailer-php5/get_oauth_token.php | 108 +- .../language/phpmailer.lang-br.php | 28 - ...iler.lang-cz.php => phpmailer.lang-cs.php} | 0 ...iler.lang-dk.php => phpmailer.lang-da.php} | 0 .../language/phpmailer.lang-de.php | 26 +- .../language/phpmailer.lang-es.php | 2 +- .../language/phpmailer.lang-ka.php | 2 +- ...iler.lang-no.php => phpmailer.lang-nb.php} | 0 .../language/phpmailer.lang-pl.php | 2 +- .../language/phpmailer.lang-pt_br.php | 28 + .../language/phpmailer.lang-ro.php | 34 +- .../language/phpmailer.lang-ru.php | 4 +- .../language/phpmailer.lang-se.php | 26 - .../language/phpmailer.lang-sv.php | 26 + .../phpmailer-php5/travis.phpunit.xml.dist | 34 - www/plugins/facteur/svn.revision | 8 +- .../action/formidable_recuperer_fichier.php | 52 + ...formidable_recuperer_fichier_par_email.php | 44 + .../formidable/base/formidable_tables.php | 8 +- .../corbeille/formulaires_pre_suppression.php | 26 + .../formulaires_reponses_pre_suppression.php | 20 + .../formidable/echanger/formulaire/forms.php | 2 - .../exec/puce_statut_formulaires.php | 2 +- .../formidable/formidable_administrations.php | 7 +- .../formidable/formidable_autorisations.php | 5 +- .../formidable/formidable_fonctions.php | 68 +- www/plugins/formidable/formidable_options.php | 10 + .../formidable/formidable_pipelines.php | 132 +- .../formulaires/editer_formulaire_champs.php | 2 +- .../editer_formulaire_traitements.php | 9 +- .../exporter_formulaire_reponses.html | 9 +- .../exporter_formulaire_reponses.php | 204 +- .../formidable/formulaires/formidable.html | 101 +- .../formidable/formulaires/formidable.php | 306 +- .../formulaires/importer_formulaire.html | 2 +- .../formidable_effacer_enregistrements.php | 42 + .../formidable_effacer_fichiers_email.php | 13 + .../formidable/genie/formidable_hasher_ip.php | 32 + .../collectionjson/formulaires_reponses.php | 48 +- .../formidable/inc/formidable_fichiers.php | 549 + www/plugins/formidable/lang/formidable.xml | 54 +- www/plugins/formidable/lang/formidable_ar.php | 15 +- www/plugins/formidable/lang/formidable_de.php | 12 +- www/plugins/formidable/lang/formidable_en.php | 69 +- www/plugins/formidable/lang/formidable_es.php | 23 +- www/plugins/formidable/lang/formidable_fr.php | 65 +- www/plugins/formidable/lang/formidable_it.php | 11 +- .../formidable/lang/formidable_pt_br.php | 248 +- www/plugins/formidable/lang/formidable_ru.php | 19 +- www/plugins/formidable/lang/formidable_sk.php | 13 +- www/plugins/formidable/lang/formulaire.xml | 11 +- .../formidable/lang/formulaire_pt_br.php | 22 + www/plugins/formidable/lang/formulaire_ru.php | 5 +- .../formidable/lang/formulaires_reponse.xml | 7 +- .../lang/formulaires_reponse_pt_br.php | 31 + .../formidable/lang/paquet-formidable.xml | 15 +- .../formidable/lang/paquet-formidable_en.php | 2 +- .../formidable/lang/paquet-formidable_es.php | 2 +- .../lang/paquet-formidable_pt_br.php | 15 + .../modeles/formulaires_reponse.html | 9 +- .../notifications/formulaire_accuse.html | 4 +- .../notifications/formulaire_email.html | 21 +- www/plugins/formidable/paquet.xml | 21 +- .../prive/listes/corbeille_formulaires.html | 18 + .../corbeille_formulaires_reponses.html | 18 + .../objets/contenu/formulaires_reponse.html | 6 + .../liste/formulaires_associer_fonctions.php | 6 +- .../liste/formulaires_lies_fonctions.php | 6 +- .../contenu/formulaires_analyse.html | 2 +- .../contenu/formulaires_reponse.html | 2 +- .../contenu/formulaires_reponses.html | 2 +- .../extra/formulaires_reponses.html | 7 +- .../hierarchie/formulaires_analyse.html | 2 +- .../inclure/formulaires_reponses-filtres.html | 8 +- .../squelettes/navigation/formulaire.html | 2 +- .../navigation/formulaires_analyse.html | 2 +- .../navigation/formulaires_reponse.html | 2 +- .../navigation/formulaires_reponses.html | 2 +- .../formidable/saisies-analyses/auteurs.html | 22 + .../formidable/saisies-analyses/fichiers.html | 3 + .../saisies-analyses/fieldset.html} | 0 .../saisies-analyses/selection.html | 4 +- www/plugins/formidable/svn.revision | 8 +- www/plugins/formidable/traiter/email.php | 348 +- www/plugins/formidable/traiter/email.yaml | 39 +- .../formidable/traiter/enregistrement.php | 53 +- .../formidable/traiter/enregistrement.yaml | 15 +- www/plugins/gis/action/editer_gis.php | 2 +- .../gis/action/gis_geocoder_rechercher.php | 5 +- www/plugins/gis/css/leaflet_nodirection.css | 8 +- .../gis/formulaires/configurer_gis.html | 16 +- www/plugins/gis/formulaires/editer_gis.php | 2 +- www/plugins/gis/gis_fonctions.php | 2 +- www/plugins/gis/gis_options.php | 13 +- www/plugins/gis/javascript/gis.js.html | 24 +- www/plugins/gis/javascript/gis_geocoder.js | 19 +- www/plugins/gis/javascript/gis_utils.js | 15 +- www/plugins/gis/javascript/leaflet.gis.js | 134 +- www/plugins/gis/lang/gis.xml | 17 +- www/plugins/gis/lang/gis_de.php | 2 +- www/plugins/gis/lang/gis_en.php | 2 +- www/plugins/gis/lang/gis_es.php | 32 +- www/plugins/gis/lang/gis_fr.php | 7 +- www/plugins/gis/lang/gis_nl.php | 10 + www/plugins/gis/lang/gis_pt_br.php | 2 +- www/plugins/gis/lang/gis_sk.php | 2 +- .../plugins/leaflet.markercluster-src.js | 172 +- www/plugins/gis/modeles/carte_gis.html | 4 +- www/plugins/gis/modeles/carte_gis.yaml | 8 + www/plugins/gis/paquet.xml | 8 +- .../gis/prive/style_prive_plugin_gis.html | 5 +- www/plugins/gis/saisies/carte.html | 26 +- www/plugins/gis/svn.revision | 8 +- www/plugins/menus_1/action/editer_menu.php | 57 +- .../menus_1/action/editer_menus_entree.php | 42 +- www/plugins/menus_1/action/exporter_menu.php | 45 +- www/plugins/menus_1/action/generer_menus.php | 12 +- www/plugins/menus_1/action/supprimer_menu.php | 17 +- .../menus_1/balise/menus_afficher_entree.php | 25 +- www/plugins/menus_1/base/menus_tables.php | 52 +- .../menus_1/formulaires/configurer_menus.php | 22 +- .../menus_1/formulaires/editer_menu.php | 48 +- .../formulaires/editer_menus_entree.php | 112 +- www/plugins/menus_1/inc/menus.php | 155 +- www/plugins/menus_1/inc/menus_autoriser.php | 14 +- www/plugins/menus_1/inclure/menu.html | 11 +- www/plugins/menus_1/lang/menus.xml | 63 +- www/plugins/menus_1/lang/menus_ar.php | 2 +- www/plugins/menus_1/lang/menus_ca.php | 4 +- www/plugins/menus_1/lang/menus_de.php | 16 +- www/plugins/menus_1/lang/menus_en.php | 16 +- www/plugins/menus_1/lang/menus_es.php | 6 +- www/plugins/menus_1/lang/menus_fa.php | 6 +- www/plugins/menus_1/lang/menus_fr.php | 5 +- www/plugins/menus_1/lang/menus_it.php | 4 +- www/plugins/menus_1/lang/menus_nl.php | 5 +- www/plugins/menus_1/lang/menus_pt_br.php | 6 +- www/plugins/menus_1/lang/menus_ru.php | 2 +- www/plugins/menus_1/lang/menus_sk.php | 6 +- www/plugins/menus_1/lang/paquet-menus.xml | 38 +- www/plugins/menus_1/lang/paquet-menus_ar.php | 2 +- www/plugins/menus_1/lang/paquet-menus_de.php | 2 +- www/plugins/menus_1/lang/paquet-menus_en.php | 2 +- www/plugins/menus_1/lang/paquet-menus_es.php | 2 +- www/plugins/menus_1/lang/paquet-menus_it.php | 2 +- www/plugins/menus_1/lang/paquet-menus_nl.php | 2 +- .../menus_1/lang/paquet-menus_pt_br.php | 2 +- www/plugins/menus_1/lang/paquet-menus_sk.php | 2 +- www/plugins/menus_1/menus/objet.html | 9 +- .../menus_1/menus/rubriques_completes.html | 449 +- .../menus_1/menus/rubriques_completes.xml | 1 + www/plugins/menus_1/menus_administrations.php | 297 +- www/plugins/menus_1/menus_fonctions.php | 36 +- www/plugins/menus_1/menus_ieconfig.php | 317 +- www/plugins/menus_1/menus_pipelines.php | 21 +- www/plugins/menus_1/paquet.xml | 8 +- www/plugins/menus_1/svn.revision | 8 +- www/plugins/multilang/CHANGELOG.md | 12 +- www/plugins/multilang/alire.txt | 6 +- .../formulaires/configurer_multilang.html | 29 +- www/plugins/multilang/javascript/multilang.js | 21 +- .../multilang_init.js_fonctions.php | 5 +- www/plugins/multilang/lang/multilang.xml | 38 +- www/plugins/multilang/lang/multilang_de.php | 2 +- www/plugins/multilang/lang/multilang_en.php | 2 +- www/plugins/multilang/lang/multilang_es.php | 2 +- www/plugins/multilang/lang/multilang_fa.php | 2 +- www/plugins/multilang/lang/multilang_nl.php | 2 +- www/plugins/multilang/lang/multilang_ru.php | 2 +- www/plugins/multilang/lang/multilang_sk.php | 2 +- www/plugins/multilang/lang/multilang_uk.php | 2 +- .../multilang/lang/paquet-multilang.xml | 34 +- .../multilang/lang/paquet-multilang_de.php | 2 +- .../multilang/lang/paquet-multilang_en.php | 2 +- .../multilang/lang/paquet-multilang_es.php | 2 +- .../multilang/lang/paquet-multilang_it.php | 2 +- .../multilang/lang/paquet-multilang_nl.php | 2 +- .../multilang/lang/paquet-multilang_ru.php | 2 +- .../multilang/lang/paquet-multilang_sk.php | 2 +- .../multilang/lang/paquet-multilang_uk.php | 2 +- www/plugins/multilang/multilang_pipelines.php | 1 - www/plugins/multilang/paquet.xml | 12 +- www/plugins/multilang/svn.revision | 8 +- www/plugins/nospam/inc/nospam.php | 1 + www/plugins/nospam/lang/nospam.xml | 41 +- www/plugins/nospam/lang/nospam_ar.php | 2 +- www/plugins/nospam/lang/nospam_de.php | 4 +- www/plugins/nospam/lang/nospam_en.php | 2 +- www/plugins/nospam/lang/nospam_es.php | 2 +- www/plugins/nospam/lang/nospam_fa.php | 2 +- www/plugins/nospam/lang/nospam_fr_tu.php | 2 +- www/plugins/nospam/lang/nospam_nl.php | 2 +- www/plugins/nospam/lang/nospam_pt_br.php | 29 + www/plugins/nospam/lang/nospam_sk.php | 2 +- www/plugins/nospam/lang/paquet-nospam.xml | 30 +- www/plugins/nospam/lang/paquet-nospam_ar.php | 2 +- www/plugins/nospam/lang/paquet-nospam_de.php | 5 +- www/plugins/nospam/lang/paquet-nospam_en.php | 2 +- www/plugins/nospam/lang/paquet-nospam_es.php | 2 +- .../nospam/lang/paquet-nospam_fr_tu.php | 2 +- www/plugins/nospam/lang/paquet-nospam_nl.php | 2 +- .../nospam/lang/paquet-nospam_pt_br.php | 15 + www/plugins/nospam/lang/paquet-nospam_sk.php | 2 +- www/plugins/nospam/nospam_pipelines.php | 311 +- www/plugins/nospam/paquet.xml | 6 +- www/plugins/nospam/plugin.xml | 6 +- www/plugins/nospam/svn.revision | 8 +- .../action/instituer_forum_paremail.php | 2 +- .../formulaires/configurer_notifications.html | 20 + .../notifications2/genie/notifications.php | 3 +- .../notifications2/lang/notifications.xml | 38 +- .../notifications2/lang/notifications_de.php | 13 +- .../notifications2/lang/notifications_en.php | 4 +- .../notifications2/lang/notifications_es.php | 4 +- .../notifications2/lang/notifications_fa.php | 4 +- .../notifications2/lang/notifications_fr.php | 11 +- .../notifications2/lang/notifications_nl.php | 13 +- .../notifications2/lang/notifications_sk.php | 4 +- .../lang/paquet-notifications.xml | 28 +- .../lang/paquet-notifications_de.php | 2 +- .../lang/paquet-notifications_en.php | 2 +- .../lang/paquet-notifications_es.php | 2 +- .../lang/paquet-notifications_fa.php | 2 +- .../lang/paquet-notifications_nl.php | 2 +- .../lang/paquet-notifications_sk.php | 2 +- .../notifications/forumvalide.php | 181 +- .../notifications/inc-article.html | 6 +- .../notifications/inc-breve.html | 6 +- .../notifications/instituerarticle.php | 2 +- .../notifications/instituerbreve.php | 2 +- .../notifications/petition_signee.html | 2 +- .../notifications_pipelines.php | 30 +- www/plugins/notifications2/nouveautes.html | 7 +- www/plugins/notifications2/paquet.xml | 10 +- www/plugins/notifications2/svn.revision | 8 +- .../odt2spip_30/action/odt2spip_importe.php | 164 - .../formulaires/configurer_odt2spip.html | 26 - .../odt2spip_30/formulaires/odt2spip.html | 49 - .../inc/odt2spip_generer_sortie.php | 184 - .../inc/odt2spip_retailler_img.php | 69 - .../inc/odt2spip_traiter_mathml.php | 54 - www/plugins/odt2spip_30/lang/odtspip_en.php | 45 - www/plugins/odt2spip_30/lang/odtspip_fr.php | 61 - .../odt2spip_30/odt2spip_administrations.php | 49 - .../odt2spip_30/odt2spip_pipelines.php | 43 - www/plugins/odt2spip_30/paquet.xml | 19 - www/plugins/odt2spip_30/svn.revision | 10 - .../tests/content_test_complet.xml | 2 - .../tests/content_test_complet_indente.xml | 874 - .../odt2spip_32/action/api_convert_to.php | 64 + .../odt2spip_32/action/odt2spip_importe.php | 91 + .../formulaires/configurer_odt2spip.html | 78 + .../formulaires/configurer_odt2spip.php | 52 + .../formulaires/document2spip.html | 52 + .../odt2spip_32/formulaires/document2spip.php | 143 + .../odt2spip_32/formulaires/odt2spip.html | 43 + .../odt2spip_32/formulaires/odt2spip.php | 116 + .../odt2spip_nettoyer_repertoire_upload.php | 95 + .../inc/convertir_avec_libreoffice.php | 44 + www/plugins/odt2spip_32/inc/libreoffice.php | 141 + www/plugins/odt2spip_32/inc/odt2spip.php | 426 + .../inc/odt2spip.xsl | 0 .../inc/odt2spip_generer_sortie.php | 211 + .../inc/odt2spip_retailler_img.php | 75 + .../inc/odt2spip_traiter_mathml.php | 56 + .../inc/xsltml/README | 0 .../inc/xsltml/cmarkup.xsl | 0 .../inc/xsltml/entities.xsl | 0 .../inc/xsltml/glayout.xsl | 0 .../inc/xsltml/mmltex.xsl | 0 .../inc/xsltml/scripts.xsl | 0 .../inc/xsltml/tables.xsl | 0 .../inc/xsltml/tokens.xsl | 0 .../lang/odtspip_de.php | 0 www/plugins/odt2spip_32/lang/odtspip_en.php | 79 + www/plugins/odt2spip_32/lang/odtspip_fr.php | 76 + .../lang/odtspip_it.php | 0 .../lang/odtspip_ro.php | 0 .../lang/paquet-odt2spip_en.php | 0 .../lang/paquet-odt2spip_fr.php | 0 .../odt2spip-24.png | Bin .../odt2spip-64.png | Bin .../odt2spip_32/odt2spip_administrations.php | 50 + .../odt2spip_32/odt2spip_pipelines.php | 59 + www/plugins/odt2spip_32/paquet.xml | 25 + .../contenu/configurer_odt2spip.html | 0 .../squelettes/inclure/document2spip.html | 3 + .../prive/squelettes/inclure/odt2spip.html | 3 + www/plugins/odt2spip_32/svn.revision | 10 + .../tests/content_math_objet1.xml | 0 .../tests/content_math_objet2.xml | 0 .../tests/content_math_objet3.xml | 0 .../tests/content_test_complet.xml | 2 + .../tests/content_test_complet_indente.xml | 874 + .../tests/test_complet.odt | Bin .../redirhttps/lang/paquet-redirhttps.xml | 16 +- .../redirhttps/lang/paquet-redirhttps_en.php | 2 +- .../redirhttps/lang/paquet-redirhttps_es.php | 2 +- .../redirhttps/lang/paquet-redirhttps_sk.php | 2 +- www/plugins/redirhttps/paquet.xml | 6 +- www/plugins/redirhttps/plugin.xml | 2 +- www/plugins/redirhttps/redirhttps_options.php | 2 +- www/plugins/redirhttps/svn.revision | 8 +- .../rss_article_3_0/base/rssarticle.php | 6 +- .../rss_article_3_0/exec/rss_article.php | 5 +- .../formulaires/editer_rssarticle.php | 5 +- .../genie/rssarticle_copie.php | 11 +- .../lang/paquet-rssarticle_fr.php | 29 +- .../rss_article_3_0/lang/rssarticle_ar.php | 6 +- .../rss_article_3_0/lang/rssarticle_fr.php | 6 +- www/plugins/rss_article_3_0/paquet.xml | 8 +- .../rssarticle_administrations.php | 6 +- .../rss_article_3_0/rssarticle_pipelines.php | 5 +- www/plugins/rss_article_3_0/svn.revision | 8 +- .../saisies/balise/configurer_saisie.php | 1 - .../saisies/balise/generer_saisies.php | 1 - www/plugins/saisies/balise/saisie.php | 19 +- www/plugins/saisies/balise/voir_saisie.php | 1 - www/plugins/saisies/balise/voir_saisies.php | 3 +- .../{test => demo}/configurer_saisie.html | 0 .../{test => demo}/generer_saisies.html | 0 .../saisies/{test => demo}/saisie.html | 0 .../saisies/{test => demo}/voir_saisie.html | 0 .../saisies/{test => demo}/voir_saisies.html | 0 .../formulaires/construire_formulaire.html | 135 +- .../formulaires/construire_formulaire.php | 141 +- .../inc-construire_formulaire-actions.html | 6 +- .../inc-generer_saisies_configurables.html | 2 +- .../saisies/formulaires/inc-saisies-cvt.html | 6 +- .../saisies/formulaires/saisies_cvt.php | 31 +- www/plugins/saisies/images/saisies-16.png | Bin 0 -> 429 bytes www/plugins/saisies/images/saisies-24.png | Bin 0 -> 597 bytes www/plugins/saisies/images/saisies-32.png | Bin 0 -> 825 bytes www/plugins/saisies/images/saisies_email.png | Bin 0 -> 581 bytes www/plugins/saisies/inc/saisies.php | 151 +- www/plugins/saisies/inc/saisies_afficher.php | 266 +- www/plugins/saisies/inc/saisies_lister.php | 69 +- www/plugins/saisies/inc/saisies_manipuler.php | 26 +- .../saisies/inclure/js_afficher_si.html | 4 +- www/plugins/saisies/inclure/voir_saisies.html | 7 +- www/plugins/saisies/lang/paquet-saisies.xml | 38 +- .../saisies/lang/paquet-saisies_ar.php | 2 +- .../saisies/lang/paquet-saisies_de.php | 2 +- .../saisies/lang/paquet-saisies_en.php | 2 +- .../saisies/lang/paquet-saisies_es.php | 2 +- .../saisies/lang/paquet-saisies_fr_tu.php | 2 +- .../saisies/lang/paquet-saisies_nl.php | 2 +- .../saisies/lang/paquet-saisies_pt_br.php | 2 +- .../saisies/lang/paquet-saisies_ru.php | 2 +- .../saisies/lang/paquet-saisies_sk.php | 2 +- www/plugins/saisies/lang/saisies.xml | 70 +- www/plugins/saisies/lang/saisies_ca.php | 2 +- www/plugins/saisies/lang/saisies_de.php | 46 +- www/plugins/saisies/lang/saisies_en.php | 20 +- www/plugins/saisies/lang/saisies_es.php | 11 +- www/plugins/saisies/lang/saisies_fa.php | 2 +- www/plugins/saisies/lang/saisies_fr.php | 18 +- www/plugins/saisies/lang/saisies_fr_tu.php | 21 +- www/plugins/saisies/lang/saisies_it.php | 2 +- www/plugins/saisies/lang/saisies_nl.php | 24 +- www/plugins/saisies/lang/saisies_pt_br.php | 10 +- www/plugins/saisies/lang/saisies_ru.php | 4 +- www/plugins/saisies/lang/saisies_sk.php | 8 +- www/plugins/saisies/paquet.xml | 17 +- .../prive/squelettes/contenu/saisies_doc.html | 34 + .../squelettes/navigation/saisies_doc.html | 9 + .../prive/style_prive_plugin_saisies.html | 23 + www/plugins/saisies/saisies-vues/_base.html | 21 +- www/plugins/saisies/saisies-vues/case.html | 7 +- .../saisies/saisies-vues/checkbox.html | 2 +- .../saisies/saisies-vues/fieldset.html | 4 +- www/plugins/saisies/saisies-vues/mot.html | 2 +- www/plugins/saisies/saisies.css.html | 3 + www/plugins/saisies/saisies/_base.html | 6 +- www/plugins/saisies/saisies/auteurs.html | 1 + www/plugins/saisies/saisies/auteurs.yaml | 11 + www/plugins/saisies/saisies/case.yaml | 44 +- www/plugins/saisies/saisies/checkbox.html | 4 +- www/plugins/saisies/saisies/checkbox.yaml | 5 + .../saisies/saisies/destinataires.html | 8 +- www/plugins/saisies/saisies/email.yaml | 164 + www/plugins/saisies/saisies/explication.html | 4 +- www/plugins/saisies/saisies/fieldset.html | 10 +- www/plugins/saisies/saisies/hidden.html | 4 +- .../position_construire_formulaire.html | 2 +- .../saisies/saisies/selecteur_document.html | 14 +- www/plugins/saisies/saisies/textarea.yaml | 2 +- www/plugins/saisies/saisies_fonctions.php | 81 +- www/plugins/saisies/saisies_pipelines.php | 363 +- www/plugins/saisies/svn.revision | 8 +- www/plugins/seo-dev/lang/paquet-seo.xml | 31 +- www/plugins/seo-dev/lang/paquet-seo_de.php | 16 + www/plugins/seo-dev/lang/paquet-seo_en.php | 2 +- www/plugins/seo-dev/lang/paquet-seo_es.php | 2 +- www/plugins/seo-dev/lang/paquet-seo_nl.php | 2 +- www/plugins/seo-dev/lang/paquet-seo_pt_br.php | 2 +- www/plugins/seo-dev/lang/paquet-seo_ru.php | 4 +- www/plugins/seo-dev/lang/paquet-seo_sk.php | 2 +- www/plugins/seo-dev/lang/seo.xml | 39 +- www/plugins/seo-dev/lang/seo_de.php | 72 + www/plugins/seo-dev/lang/seo_en.php | 2 +- www/plugins/seo-dev/lang/seo_es.php | 2 +- www/plugins/seo-dev/lang/seo_nl.php | 2 +- www/plugins/seo-dev/lang/seo_pt_br.php | 2 +- www/plugins/seo-dev/lang/seo_ru.php | 6 +- www/plugins/seo-dev/lang/seo_sk.php | 2 +- www/plugins/seo-dev/paquet.xml | 6 +- www/plugins/seo-dev/seo_fonctions.php | 7 +- www/plugins/seo-dev/svn.revision | 8 +- www/plugins/skel_lhc/plugin.xml | 2 +- www/plugins/spip-bonux-3/inc/exporter_csv.php | 3 +- www/plugins/spip-bonux-3/inc/importer_csv.php | 36 +- .../spip-bonux-3/lang/paquet-spip_bonux.xml | 41 +- .../lang/paquet-spip_bonux_ar.php | 2 +- .../lang/paquet-spip_bonux_de.php | 8 +- .../lang/paquet-spip_bonux_en.php | 2 +- .../lang/paquet-spip_bonux_es.php | 2 +- .../lang/paquet-spip_bonux_fa.php | 2 +- .../lang/paquet-spip_bonux_nl.php | 2 +- .../lang/paquet-spip_bonux_pt_br.php | 2 +- .../lang/paquet-spip_bonux_ru.php | 2 +- .../lang/paquet-spip_bonux_sk.php | 2 +- www/plugins/spip-bonux-3/lang/spip_bonux.xml | 41 +- .../spip-bonux-3/lang/spip_bonux_ar.php | 2 +- .../spip-bonux-3/lang/spip_bonux_de.php | 4 +- .../spip-bonux-3/lang/spip_bonux_en.php | 2 +- .../spip-bonux-3/lang/spip_bonux_es.php | 2 +- .../spip-bonux-3/lang/spip_bonux_fa.php | 2 +- .../spip-bonux-3/lang/spip_bonux_nl.php | 2 +- .../spip-bonux-3/lang/spip_bonux_pt_br.php | 2 +- .../spip-bonux-3/lang/spip_bonux_ru.php | 2 +- .../spip-bonux-3/lang/spip_bonux_sk.php | 2 +- .../lib/array_column/_array_column.php | 115 + .../lib/array_column/array_column.php | 115 - www/plugins/spip-bonux-3/paquet.xml | 8 +- .../public/spip_bonux_criteres.php | 2 +- .../spip-bonux-3/spip_bonux_fonctions.php | 210 +- .../spip-bonux-3/spip_bonux_options.php | 37 +- www/plugins/spip-bonux-3/svn.revision | 8 +- .../contenu/page-carte_de_sites.html | 2 +- www/plugins/spip_carte_de_sites/paquet.xml | 4 +- .../spip_piwik/action/piwik_creer_site.php | 34 + .../action/piwik_recuperer_liste.php | 37 + www/plugins/spip_piwik/balise/piwik.php | 51 + .../fonds/cfg_piwik.html | 0 .../formulaires/configurer_piwik.html | 0 .../configurer_piwik_fonctions.php | 70 + .../images/piwik-22.png | Bin .../images/piwik.png | Bin .../inc/js-cnil.html | 0 .../spip_piwik/inc/piwik_recuperer_data.php | 33 + www/plugins/spip_piwik/lang/paquet-piwik.xml | 27 + .../spip_piwik/lang/paquet-piwik_de.php | 15 + .../spip_piwik/lang/paquet-piwik_en.php | 15 + .../spip_piwik/lang/paquet-piwik_es.php | 15 + .../spip_piwik/lang/paquet-piwik_fa.php | 15 + .../spip_piwik/lang/paquet-piwik_fr.php | 13 + .../spip_piwik/lang/paquet-piwik_nl.php | 15 + .../spip_piwik/lang/paquet-piwik_ru.php | 15 + .../spip_piwik/lang/paquet-piwik_sk.php | 15 + www/plugins/spip_piwik/lang/piwik.xml | 26 + www/plugins/spip_piwik/lang/piwik_ca.php | 53 + www/plugins/spip_piwik/lang/piwik_de.php | 64 + www/plugins/spip_piwik/lang/piwik_en.php | 64 + www/plugins/spip_piwik/lang/piwik_es.php | 62 + www/plugins/spip_piwik/lang/piwik_fa.php | 62 + www/plugins/spip_piwik/lang/piwik_fr.php | 62 + www/plugins/spip_piwik/lang/piwik_fr_tu.php | 62 + www/plugins/spip_piwik/lang/piwik_nl.php | 64 + www/plugins/spip_piwik/lang/piwik_sk.php | 64 + www/plugins/spip_piwik/paquet.xml | 27 + www/plugins/spip_piwik/piwik.png | Bin 0 -> 4703 bytes .../spip_piwik/piwik_administrations.php | 64 + www/plugins/spip_piwik/piwik_pipelines.php | 189 + www/plugins/spip_piwik/plugin.xml | 33 + .../prive/piwik.html | 0 .../squelettes/contenu/configurer_piwik.html | 0 .../saisies/sites_piwik.html | 0 www/plugins/spip_piwik/svn.revision | 10 + .../action/piwik_creer_site.php | 33 - .../action/piwik_recuperer_liste.php | 36 - www/plugins/spip_piwik_2_0/balise/piwik.php | 43 - .../configurer_piwik_fonctions.php | 67 - .../inc/piwik_recuperer_data.php | 33 - .../spip_piwik_2_0/lang/paquet-piwik.xml | 24 - .../spip_piwik_2_0/lang/paquet-piwik_de.php | 15 - .../spip_piwik_2_0/lang/paquet-piwik_en.php | 15 - .../spip_piwik_2_0/lang/paquet-piwik_es.php | 15 - .../spip_piwik_2_0/lang/paquet-piwik_fa.php | 15 - .../spip_piwik_2_0/lang/paquet-piwik_fr.php | 13 - .../spip_piwik_2_0/lang/paquet-piwik_nl.php | 15 - .../spip_piwik_2_0/lang/paquet-piwik_ru.php | 15 - .../spip_piwik_2_0/lang/paquet-piwik_sk.php | 15 - www/plugins/spip_piwik_2_0/lang/piwik.xml | 26 - www/plugins/spip_piwik_2_0/lang/piwik_ca.php | 53 - www/plugins/spip_piwik_2_0/lang/piwik_de.php | 64 - www/plugins/spip_piwik_2_0/lang/piwik_en.php | 64 - www/plugins/spip_piwik_2_0/lang/piwik_es.php | 62 - www/plugins/spip_piwik_2_0/lang/piwik_fa.php | 62 - www/plugins/spip_piwik_2_0/lang/piwik_fr.php | 62 - .../spip_piwik_2_0/lang/piwik_fr_tu.php | 62 - www/plugins/spip_piwik_2_0/lang/piwik_nl.php | 64 - www/plugins/spip_piwik_2_0/lang/piwik_sk.php | 64 - www/plugins/spip_piwik_2_0/paquet.xml | 27 - www/plugins/spip_piwik_2_0/piwik.png | Bin 5651 -> 0 bytes .../spip_piwik_2_0/piwik_administrations.php | 67 - .../spip_piwik_2_0/piwik_pipelines.php | 183 - www/plugins/spip_piwik_2_0/plugin.xml | 33 - www/plugins/spip_piwik_2_0/svn.revision | 10 - www/plugins/verifier/images/icones-infos.txt | 2 +- www/plugins/verifier/images/verifier-16.png | Bin 0 -> 605 bytes www/plugins/verifier/images/verifier-24.png | Bin 0 -> 998 bytes www/plugins/verifier/images/verifier-32.png | Bin 0 -> 1485 bytes www/plugins/verifier/inc/is_email.php | 1 + www/plugins/verifier/inc/verifier.php | 42 +- www/plugins/verifier/lang/paquet-verifier.xml | 35 +- .../verifier/lang/paquet-verifier_de.php | 2 +- .../verifier/lang/paquet-verifier_en.php | 2 +- .../verifier/lang/paquet-verifier_es.php | 2 +- .../verifier/lang/paquet-verifier_fr_tu.php | 2 +- .../verifier/lang/paquet-verifier_nl.php | 2 +- .../verifier/lang/paquet-verifier_pt_br.php | 16 + .../verifier/lang/paquet-verifier_ru.php | 2 +- .../verifier/lang/paquet-verifier_sk.php | 2 +- www/plugins/verifier/lang/verifier.xml | 67 +- www/plugins/verifier/lang/verifier_ca.php | 6 +- www/plugins/verifier/lang/verifier_de.php | 18 +- www/plugins/verifier/lang/verifier_en.php | 58 +- www/plugins/verifier/lang/verifier_es.php | 24 +- www/plugins/verifier/lang/verifier_fa.php | 22 +- www/plugins/verifier/lang/verifier_fr.php | 66 +- www/plugins/verifier/lang/verifier_fr_tu.php | 24 +- www/plugins/verifier/lang/verifier_it.php | 10 +- www/plugins/verifier/lang/verifier_nl.php | 52 +- www/plugins/verifier/lang/verifier_pt_br.php | 77 +- www/plugins/verifier/lang/verifier_ru.php | 22 +- www/plugins/verifier/lang/verifier_sk.php | 42 +- www/plugins/verifier/paquet.xml | 10 +- www/plugins/verifier/plugin.xml | 9 +- .../squelettes/contenu/verifier_doc.html | 41 + .../squelettes/navigation/verifier_doc.html | 9 + .../prive/style_prive_plugin_verifier.html | 24 + www/plugins/verifier/svn.revision | 8 +- www/plugins/verifier/verifier/code_postal.php | 5 +- .../verifier/verifier/comparaison_champ.yaml | 2 +- www/plugins/verifier/verifier/decimal.php | 10 +- www/plugins/verifier/verifier/decimal.yaml | 11 + www/plugins/verifier/verifier/fichiers.php | 266 + www/plugins/verifier/verifier/fichiers.yaml | 55 + www/plugins/verifier/verifier/id_objet.yaml | 10 +- .../verifier/verifier/image_upload.php | 40 + .../verifier/image_upload_multiple.php | 48 + www/plugins/verifier/verifier/password.php | 39 + www/plugins/verifier/verifier/siren_siret.php | 4 +- www/plugins/verifier/verifier/telephone.php | 3 +- www/plugins/verifier/verifier/url.php | 25 +- www/plugins/verifier/verifier/url.yaml | 1 + www/plugins/verifier/verifier_fonctions.php | 11 + www/plugins/yaml/lang/paquet-yaml.xml | 36 +- www/plugins/yaml/lang/paquet-yaml_de.php | 16 + www/plugins/yaml/lang/paquet-yaml_en.php | 2 +- www/plugins/yaml/lang/paquet-yaml_es.php | 2 +- www/plugins/yaml/lang/paquet-yaml_fa.php | 2 +- www/plugins/yaml/lang/paquet-yaml_nl.php | 2 +- www/plugins/yaml/lang/paquet-yaml_pt_br.php | 15 + www/plugins/yaml/lang/paquet-yaml_ru.php | 2 +- www/plugins/yaml/lang/paquet-yaml_sk.php | 2 +- www/plugins/yaml/paquet.xml | 6 +- www/plugins/yaml/plugin.xml | 6 +- www/plugins/yaml/svn.revision | 8 +- .../zen-garden-2/lang/paquet-zengarden.xml | 34 +- .../zen-garden-2/lang/paquet-zengarden_de.php | 2 +- .../zen-garden-2/lang/paquet-zengarden_en.php | 2 +- .../zen-garden-2/lang/paquet-zengarden_es.php | 2 +- .../zen-garden-2/lang/paquet-zengarden_fa.php | 2 +- .../zen-garden-2/lang/paquet-zengarden_nl.php | 2 +- .../zen-garden-2/lang/paquet-zengarden_ru.php | 2 +- .../zen-garden-2/lang/paquet-zengarden_sk.php | 2 +- www/plugins/zen-garden-2/lang/zengarden.xml | 24 +- .../zen-garden-2/lang/zengarden_de.php | 2 +- .../zen-garden-2/lang/zengarden_en.php | 2 +- .../zen-garden-2/lang/zengarden_es.php | 2 +- .../zen-garden-2/lang/zengarden_fa.php | 2 +- .../zen-garden-2/lang/zengarden_nl.php | 2 +- .../zen-garden-2/lang/zengarden_sk.php | 2 +- www/plugins/zen-garden-2/paquet.xml | 6 +- www/plugins/zen-garden-2/svn.revision | 8 +- www/plugins/zpip_v1/conventions.txt | 2 +- .../zpip_v1/inclure/ajax_parallel_load.html | 1 + www/plugins/zpip_v1/inclure/barre-nav.html | 2 +- www/plugins/zpip_v1/inclure/pied.html | 2 +- www/plugins/zpip_v1/plugin.xml | 8 +- www/plugins/zpip_v1/svn.revision | 8 +- www/plugins/zpip_v1/z_options.php | 3 + www/plugins/zpip_v1/z_pipelines.php | 7 +- www/prive/aide_body.css | 2 +- www/prive/aide_menu.html | 4 +- www/prive/ajax_item_pick_fonctions.php | 6 +- www/prive/ajax_selecteur_fonctions.php | 6 +- www/prive/echafaudage/contenu/objet.html | 8 +- .../contenu/objet_edit.sans_rubrique.html | 6 +- .../hierarchie/objet_fonctions.php | 17 +- .../formulaires/configurer_annonces.html | 66 +- www/prive/formulaires/configurer_annonces.php | 93 +- .../formulaires/configurer_articles.html | 54 +- www/prive/formulaires/configurer_articles.php | 73 +- .../formulaires/configurer_avertisseur.html | 10 +- .../formulaires/configurer_avertisseur.php | 34 +- www/prive/formulaires/configurer_flux.html | 10 +- www/prive/formulaires/configurer_flux.php | 34 +- .../formulaires/configurer_identite.html | 26 +- www/prive/formulaires/configurer_identite.php | 54 +- www/prive/formulaires/configurer_langage.html | 10 +- www/prive/formulaires/configurer_langage.php | 28 +- www/prive/formulaires/configurer_langue.html | 18 +- www/prive/formulaires/configurer_langue.php | 29 +- www/prive/formulaires/configurer_logos.html | 14 +- www/prive/formulaires/configurer_logos.php | 38 +- www/prive/formulaires/configurer_metas.php | 86 +- .../formulaires/configurer_moderniseur.html | 10 +- .../formulaires/configurer_moderniseur.php | 29 +- .../configurer_multilinguisme.html | 50 +- .../formulaires/configurer_multilinguisme.php | 107 +- .../formulaires/configurer_preferences.html | 42 +- .../formulaires/configurer_preferences.php | 70 +- .../configurer_preferences_menus.html | 89 + .../configurer_preferences_menus.php | 78 + .../configurer_previsualiseur.html | 14 +- .../formulaires/configurer_previsualiseur.php | 22 +- .../formulaires/configurer_redacteurs.html | 10 +- .../formulaires/configurer_redacteurs.php | 39 +- .../formulaires/configurer_reducteur.html | 50 +- .../formulaires/configurer_reducteur.php | 144 +- .../formulaires/configurer_relayeur.html | 20 +- www/prive/formulaires/configurer_relayeur.php | 108 +- .../formulaires/configurer_rubriques.html | 14 +- .../formulaires/configurer_rubriques.php | 38 +- .../formulaires/configurer_transcodeur.html | 22 +- .../formulaires/configurer_transcodeur.php | 27 +- .../formulaires/configurer_visiteurs.html | 10 +- .../formulaires/configurer_visiteurs.php | 42 +- www/prive/formulaires/dater.html | 45 +- www/prive/formulaires/dater.php | 302 +- www/prive/formulaires/dateur/inc-dateur.html | 7 +- .../formulaires/dateur/jquery.dateur.js.html | 4 +- .../formulaires/dateur/jquery.time_picker.js | 251 +- www/prive/formulaires/dateur/time_picker.css | 16 +- www/prive/formulaires/declarer_bases.html | 40 +- www/prive/formulaires/declarer_bases.php | 210 +- www/prive/formulaires/declarer_bases_2.html | 16 +- www/prive/formulaires/declarer_bases_3.html | 10 +- www/prive/formulaires/editer_article.html | 148 +- www/prive/formulaires/editer_article.php | 198 +- www/prive/formulaires/editer_auteur.html | 74 +- www/prive/formulaires/editer_auteur.php | 410 +- www/prive/formulaires/editer_liens.html | 2 +- www/prive/formulaires/editer_liens.php | 392 +- www/prive/formulaires/editer_logo.html | 25 +- www/prive/formulaires/editer_logo.php | 245 +- www/prive/formulaires/editer_rubrique.html | 22 +- www/prive/formulaires/editer_rubrique.php | 184 +- www/prive/formulaires/inc-apercu-logo.html | 2 +- www/prive/formulaires/inc-choisir-objets.html | 8 +- .../formulaires/inc-instituer_auteur.html | 6 +- .../inc-instituer_auteur_fonctions.php | 60 +- www/prive/formulaires/instituer_objet.html | 20 +- www/prive/formulaires/instituer_objet.php | 123 +- www/prive/formulaires/login.html | 22 +- www/prive/formulaires/login.php | 277 +- www/prive/formulaires/recherche_ecrire.php | 43 +- www/prive/formulaires/rediriger_article.html | 17 +- www/prive/formulaires/rediriger_article.php | 54 +- www/prive/formulaires/selecteur/ajax.html | 6 +- .../formulaires/selecteur/ajax_fonctions.php | 5 - www/prive/formulaires/selecteur/articles.html | 2 +- .../selecteur/articles_fonctions.php | 5 - .../formulaires/selecteur/generique.html | 4 +- .../selecteur/generique_fonctions.php | 183 +- .../selecteur/hierarchie-articles.html | 2 +- .../selecteur/hierarchie-rubriques.html | 2 +- .../selecteur/inc-nav-articles.html | 4 +- .../selecteur/inc-nav-rubriques_fonctions.php | 5 - .../selecteur/jquery-ui-1.8.custom.js | 2671 -- .../formulaires/selecteur/jquery.picker.js | 16 +- .../selecteur/jquery.selecteur.js.html | 8 + .../formulaires/selecteur/navigateur.html | 1 + .../selecteur/navigateur_fonctions.php | 5 - .../formulaires/selecteur/picker-ajax.html | 8 +- .../selecteur/picker-ajax_fonctions.php | 5 - .../formulaires/selecteur/rubriques.html | 4 +- .../selecteur/rubriques_fonctions.php | 5 - .../selecteur/selecteur_fonctions.php | 6 - www/prive/formulaires/traduire.html | 41 +- www/prive/formulaires/traduire.php | 147 +- www/prive/ical_prive.html | 2 +- www/prive/images/favicon-spip.png | Bin 0 -> 4701 bytes www/prive/images/index.php | 26 +- www/prive/images/logo-spip.png | Bin 0 -> 30305 bytes www/prive/images/rien.gif | Bin www/prive/informer_auteur_fonctions.php | 57 +- www/prive/javascript/ajaxCallback.js | 182 +- www/prive/javascript/gadgets.js | 5 +- www/prive/javascript/jquery-migrate-3.0.1.js | 632 + www/prive/javascript/jquery.autosave.js | 29 +- www/prive/javascript/jquery.colors.js | 123 - www/prive/javascript/jquery.cookie.js | 127 +- www/prive/javascript/jquery.form.js | 2185 +- www/prive/javascript/jquery.ifixpng.js | 137 - www/prive/javascript/jquery.js | 15623 ++++----- www/prive/javascript/js.cookie.js | 165 + www/prive/javascript/layer.js | 139 +- www/prive/javascript/login-sha-min.js | 140 +- www/prive/javascript/login.js | 54 +- www/prive/javascript/pause.js | 41 - www/prive/login.html | 2 +- www/prive/modeles/mail_inscription.html | 6 +- .../modeles/mail_nouveaux_identifiants.html | 29 + www/prive/objets/contenu/auteur.html | 2 +- www/prive/objets/editer/liens.html | 8 +- .../objets/editer/rediriger_article.html | 2 - www/prive/objets/infos/auteur.html | 11 +- .../objets/infos/inc-auteur-rubriques.html | 6 +- www/prive/objets/liste/articles-trad.html | 1 + www/prive/objets/liste/articles.html | 11 +- www/prive/objets/liste/articles_associer.html | 59 + www/prive/objets/liste/articles_fonctions.php | 14 +- www/prive/objets/liste/articles_lies.html | 48 + www/prive/objets/liste/auteurs.html | 15 +- www/prive/objets/liste/auteurs_associer.html | 7 +- .../liste/auteurs_associer_fonctions.php | 8 +- www/prive/objets/liste/auteurs_fonctions.php | 126 +- www/prive/objets/liste/auteurs_lies.html | 10 +- .../objets/liste/auteurs_lies_fonctions.php | 8 +- .../liste/objets-en-edition_fonctions.php | 7 +- www/prive/objets/liste/objets-trad.html | 14 +- .../objets/liste/objets-trad_fonctions.php | 21 +- www/prive/objets/liste/objets.html | 3 +- www/prive/objets/liste/rubriques.html | 4 +- .../objets/liste/rubriques_associer.html | 4 +- www/prive/objets/liste/rubriques_lies.html | 6 +- www/prive/objets/liste/visiteurs.html | 13 +- .../objets/liste/visiteurs_fonctions.php | 7 +- www/prive/paquet.dtd | 21 +- www/prive/rss/a_suivre.html | 21 +- www/prive/rss/a_suivre_fonctions.php | 22 + www/prive/spip_admin.css | 7 +- www/prive/spip_pass.html | 4 +- www/prive/spip_style.css | 2 +- www/prive/squelettes/body.html | 2 +- www/prive/squelettes/contenu/admin_tech.html | 4 +- www/prive/squelettes/contenu/aide.html | 45 - .../squelettes/contenu/aide_fonctions.php | 105 - www/prive/squelettes/contenu/article.html | 12 +- www/prive/squelettes/contenu/auteur.html | 8 +- www/prive/squelettes/contenu/auteur_edit.html | 2 +- .../contenu/configurer_preferences.html | 4 + .../contenu/job_queue_fonctions.php | 22 +- .../contenu/navigation_fonctions.php | 6 +- www/prive/squelettes/contenu/plan.html | 13 +- www/prive/squelettes/contenu/recherche.html | 10 +- .../contenu/recherche_fonctions.php | 18 +- www/prive/squelettes/contenu/rubrique.html | 8 +- www/prive/squelettes/extra/article.html | 2 +- www/prive/squelettes/hierarchie/dist.html | 8 +- .../squelettes/hierarchie/dist_fonctions.php | 6 +- .../squelettes/inclure/admin_vider_cache.html | 4 +- .../inclure/admin_vider_images.html | 4 +- www/prive/squelettes/inclure/barre-nav.html | 124 +- .../inclure/barre-nav_fonctions.php | 5 +- .../squelettes/inclure/favicon-head.html | 16 + www/prive/squelettes/inclure/head.html | 23 +- .../squelettes/inclure/menu-navigation.html | 9 +- .../inclure/menu-navigation_fonctions.php | 6 +- .../squelettes/inclure/pied_fonctions.php | 5 +- .../squelettes/inclure/plan-articles.html | 15 - .../squelettes/inclure/plan-rubriques.html | 17 +- www/prive/squelettes/navigation/accueil.html | 11 +- .../navigation/configurer_fonctions.php | 6 +- www/prive/squelettes/structure.html | 2 +- www/prive/squelettes/top/auteur.html | 4 + www/prive/squelettes/top/infos_perso.html | 2 +- www/prive/style_prive.css.html | 2 +- www/prive/themes/spip/bando.css.html | 17 +- www/prive/themes/spip/box_skins.css.html | 20 +- www/prive/themes/spip/content.css.html | 12 +- www/prive/themes/spip/exceptions.css.html | 7 +- www/prive/themes/spip/forms.css.html | 129 +- www/prive/themes/spip/icons.css.html | 10 +- .../spip/images/degrade-etapes-rose-left.gif | Bin 0 -> 3208 bytes .../spip/images/degrade-etapes-rose-right.gif | Bin 0 -> 3192 bytes .../spip/images/degrade-etapes-vert-left.gif | Bin 2618 -> 0 bytes .../spip/images/degrade-etapes-vert-right.gif | Bin 2597 -> 0 bytes .../themes/spip/images/developpement-48.png | Bin 0 -> 1310 bytes www/prive/themes/spip/images/erreur-16.png | Bin www/prive/themes/spip/images/erreur-32.png | Bin www/prive/themes/spip/images/fond-imgs.png | Bin 0 -> 956 bytes www/prive/themes/spip/images/ok-16.png | Bin www/prive/themes/spip/images/ok-32.png | Bin www/prive/themes/spip/images/php-16.png | Bin 0 -> 418 bytes .../{boussole-16.png => plan_site-16.png} | Bin .../{boussole-24.png => plan_site-24.png} | Bin .../{boussole-32.png => plan_site-32.png} | Bin www/prive/themes/spip/images/plugin-32.png | Bin www/prive/themes/spip/images/spip.png | Bin 1641 -> 1607 bytes www/prive/themes/spip/images/warning-32.png | Bin www/prive/themes/spip/lists.css.html | 43 +- www/prive/themes/spip/minipres.css | 48 +- www/prive/themes/spip/picker.css.html | 2 +- www/prive/themes/spip/reset.css | 0 www/prive/themes/spip/style_prive.css.html | 6 +- www/prive/themes/spip/theme.css.html | 256 +- www/prive/themes/spip/typo.css.html | 45 +- www/rien.gif | Bin 63 -> 0 bytes www/spip.php | 10 +- www/spip.png | Bin 5462 -> 1212 bytes www/squelettes-dist/404.html | 7 +- www/squelettes-dist/article.html | 28 +- www/squelettes-dist/auteur.html | 12 +- www/squelettes-dist/breve.html | 16 +- www/squelettes-dist/calendrier.html | 6 +- www/squelettes-dist/contact.html | 11 +- www/squelettes-dist/css/clear.css | 140 +- www/squelettes-dist/css/font.css | 9 + www/squelettes-dist/css/form.css | 9 +- www/squelettes-dist/css/img/background.png | Bin 3935 -> 0 bytes www/squelettes-dist/css/layout.css | 113 +- www/squelettes-dist/css/links.css | 107 + www/squelettes-dist/css/media.css | 133 + www/squelettes-dist/css/reset.css | 173 +- www/squelettes-dist/css/spip.css | 86 +- www/squelettes-dist/css/style.css | 182 - www/squelettes-dist/css/theme.css | 268 + www/squelettes-dist/css/typo.css | 710 +- www/squelettes-dist/distrib.html | 7 - .../formulaires/ecrire_auteur.html | 29 +- .../formulaires/ecrire_auteur.php | 90 +- .../formulaires/inscription.html | 22 +- .../formulaires/inscription.php | 122 +- .../formulaires/mot_de_passe.html | 14 +- .../formulaires/mot_de_passe.php | 108 +- www/squelettes-dist/formulaires/oubli.html | 10 +- www/squelettes-dist/formulaires/oubli.php | 79 +- .../formulaires/recherche.html | 2 +- www/squelettes-dist/formulaires/recherche.php | 19 +- www/squelettes-dist/forum.html | 9 +- www/squelettes-dist/ical.html | 1 - www/squelettes-dist/icon/skel.png | Bin 38318 -> 5020 bytes www/squelettes-dist/identifiants.html | 45 +- www/squelettes-dist/inclure/documents.html | 61 +- www/squelettes-dist/inclure/footer.html | 10 +- www/squelettes-dist/inclure/forum.html | 4 +- www/squelettes-dist/inclure/head.html | 21 +- www/squelettes-dist/inclure/header.html | 5 +- www/squelettes-dist/inclure/nav.html | 2 +- www/squelettes-dist/inclure/recents.html | 4 +- www/squelettes-dist/lang/paquet-dist.xml | 15 +- www/squelettes-dist/lang/paquet-dist_ar.php | 6 +- www/squelettes-dist/lang/paquet-dist_de.php | 6 +- www/squelettes-dist/lang/paquet-dist_en.php | 6 +- www/squelettes-dist/lang/paquet-dist_eo.php | 6 +- www/squelettes-dist/lang/paquet-dist_es.php | 6 +- www/squelettes-dist/lang/paquet-dist_fa.php | 6 +- www/squelettes-dist/lang/paquet-dist_fr.php | 6 +- .../lang/paquet-dist_fr_fem.php | 6 +- .../lang/paquet-dist_fr_tu.php | 15 + www/squelettes-dist/lang/paquet-dist_hac.php | 15 + www/squelettes-dist/lang/paquet-dist_it.php | 6 +- www/squelettes-dist/lang/paquet-dist_lb.php | 6 +- www/squelettes-dist/lang/paquet-dist_nl.php | 10 +- .../lang/paquet-dist_oc_ni_mis.php | 15 + www/squelettes-dist/lang/paquet-dist_pt.php | 6 +- .../lang/paquet-dist_pt_br.php | 6 +- www/squelettes-dist/lang/paquet-dist_ru.php | 6 +- www/squelettes-dist/lang/paquet-dist_sk.php | 6 +- www/squelettes-dist/lang/paquet-dist_uk.php | 15 + www/squelettes-dist/mot.html | 25 +- www/squelettes-dist/paquet.xml | 8 +- www/squelettes-dist/plan.html | 9 +- www/squelettes-dist/recherche.html | 9 +- www/squelettes-dist/robots.txt.html | 2 +- www/squelettes-dist/rubrique.html | 25 +- www/squelettes-dist/site.html | 18 +- www/squelettes-dist/sitemap.xml.html | 33 +- www/squelettes-dist/sommaire.html | 12 +- www/squelettes-dist/spip.ico | Bin 1406 -> 4286 bytes www/squelettes-dist/win_width.htc | 23 - www/svn.revision | 12 +- 4059 files changed, 292395 insertions(+), 155444 deletions(-) delete mode 100644 www/CHANGELOG.txt create mode 100644 www/ecrire/action/editer_logo.php delete mode 100644 www/ecrire/action/iconifier.php delete mode 100644 www/ecrire/action/reorganiser.php delete mode 100644 www/ecrire/inc/aider.php create mode 100644 www/ecrire/inc/completer_traduction.php create mode 100644 www/ecrire/inc/definir_menus_favoris.php create mode 100644 www/ecrire/inc/exporter_csv.php create mode 100644 www/ecrire/inc/filtres_dates.php create mode 100644 www/ecrire/inc/filtres_selecteur_generique.php create mode 100644 www/ecrire/inc/importer_csv.php delete mode 100644 www/ecrire/inc/pclzip.php create mode 100644 www/ecrire/inc/roles.php mode change 100755 => 100644 www/ecrire/lang/ecrire_fr_fem.php create mode 100644 www/ecrire/lang/ecrire_uk.php mode change 100755 => 100644 www/ecrire/lang/public_br.php mode change 100755 => 100644 www/ecrire/lang/public_fr_fem.php create mode 100644 www/ecrire/lang/public_uk.php mode change 100755 => 100644 www/ecrire/lang/spip_fr_fem.php create mode 100644 www/ecrire/lang/spip_uk.php delete mode 100644 www/ecrire/oo/index.php create mode 100644 www/ecrire/req/pg.exp.php delete mode 100644 www/ecrire/req/pg.php create mode 100644 www/plugins-dist/aide/aide_logo-32.png create mode 100644 www/plugins-dist/aide/aide_options.php create mode 100644 www/plugins-dist/aide/inc/aide.php create mode 100644 www/plugins-dist/aide/lang/paquet-aide.xml create mode 100644 www/plugins-dist/aide/lang/paquet-aide_fr.php create mode 100644 www/plugins-dist/aide/paquet.xml create mode 100644 www/plugins-dist/aide/prive/squelettes/contenu/aide.html create mode 100644 www/plugins-dist/aide/prive/squelettes/contenu/aide_fonctions.php create mode 100644 www/plugins-dist/archiviste/inc/archives.php create mode 100644 www/plugins-dist/archiviste/inc/pcltar.php create mode 100644 www/plugins-dist/archiviste/inc/pclzip.php create mode 100644 www/plugins-dist/archiviste/lang/paquet-archiviste.xml create mode 100644 www/plugins-dist/archiviste/lang/paquet-archiviste_fr.php create mode 100644 www/plugins-dist/archiviste/lib/pcltar/pclerror.lib.php create mode 100644 www/plugins-dist/archiviste/lib/pcltar/pcltrace.lib.php create mode 100644 www/plugins-dist/archiviste/lib/pcltar/readme.txt create mode 100644 www/plugins-dist/archiviste/paquet.xml create mode 100644 www/plugins-dist/archiviste/prive/themes/spip/images/archiviste-128.png create mode 100644 www/plugins-dist/archiviste/prive/themes/spip/images/archiviste-32.png create mode 100644 www/plugins-dist/archiviste/prive/themes/spip/images/archiviste-64.png create mode 100644 www/plugins-dist/archiviste/tests/TestCase.inc create mode 100644 www/plugins-dist/archiviste/tests/deballer_archives.php create mode 100644 www/plugins-dist/archiviste/tests/emballer_archives.php create mode 100644 www/plugins-dist/archiviste/tests/informer_archives.php create mode 100644 www/plugins-dist/archiviste/tests/initialiser_archives.php create mode 100644 www/plugins-dist/archiviste/tests/retirer_archives.php delete mode 100644 www/plugins-dist/breves/lang/breves_grecgr.php delete mode 100644 www/plugins-dist/breves/lang/breves_isl.php delete mode 100644 www/plugins-dist/breves/lang/breves_no.php create mode 100644 www/plugins-dist/breves/lang/breves_oc_ni_mis.php delete mode 100644 www/plugins-dist/breves/lang/breves_ss.php delete mode 100644 www/plugins-dist/breves/lang/breves_tl.php delete mode 100644 www/plugins-dist/breves/lang/breves_tt.php create mode 100644 www/plugins-dist/breves/lang/paquet-breves_br.php create mode 100644 www/plugins-dist/breves/lang/paquet-breves_hac.php create mode 100644 www/plugins-dist/breves/lang/paquet-breves_oc_ni_mis.php create mode 100644 www/plugins-dist/breves/lang/paquet-breves_uk.php create mode 100644 www/plugins-dist/compagnon/lang/compagnon_br.php create mode 100644 www/plugins-dist/compagnon/lang/compagnon_oc_ni_mis.php create mode 100644 www/plugins-dist/compagnon/lang/compagnon_uk.php create mode 100644 www/plugins-dist/compagnon/lang/paquet-compagnon_fr_tu.php create mode 100644 www/plugins-dist/compagnon/lang/paquet-compagnon_oc_ni_mis.php create mode 100644 www/plugins-dist/compagnon/lang/paquet-compagnon_uk.php create mode 100644 www/plugins-dist/compresseur/lang/compresseur_oc_ni_mis.php create mode 100644 www/plugins-dist/compresseur/lang/paquet-compresseur_fr_tu.php create mode 100644 www/plugins-dist/compresseur/lang/paquet-compresseur_hac.php create mode 100644 www/plugins-dist/compresseur/lang/paquet-compresseur_oc_ni_mis.php create mode 100644 www/plugins-dist/compresseur/lang/paquet-compresseur_uk.php create mode 100644 www/plugins-dist/compresseur/lib/jQl/README create mode 100644 www/plugins-dist/compresseur/lib/jQl/README.md create mode 100644 www/plugins-dist/compresseur/lib/jQl/jQl.js create mode 100644 www/plugins-dist/compresseur/lib/jQl/jQl.min.js create mode 100644 www/plugins-dist/compresseur/tests/css/expected_url_abs.css create mode 100644 www/plugins-dist/compresseur/tests/css/source_url_abs.css create mode 100644 www/plugins-dist/dump/action/supprimer_dump.php create mode 100644 www/plugins-dist/dump/dump_autoriser.php delete mode 100644 www/plugins-dist/dump/lang/dump_is.php delete mode 100644 www/plugins-dist/dump/lang/dump_no.php create mode 100644 www/plugins-dist/dump/lang/dump_oc_ni_mis.php create mode 100644 www/plugins-dist/dump/lang/dump_uk.php create mode 100644 www/plugins-dist/dump/lang/paquet-dump_fr_tu.php create mode 100644 www/plugins-dist/dump/lang/paquet-dump_oc_ni_mis.php create mode 100644 www/plugins-dist/dump/lang/paquet-dump_uk.php delete mode 100644 www/plugins-dist/filtres_images/inc/filtres_images.php delete mode 100644 www/plugins-dist/filtres_images/inc/filtres_images_compat.php create mode 100644 www/plugins-dist/filtres_images/lang/paquet-images_fr_tu.php create mode 100644 www/plugins-dist/filtres_images/lang/paquet-images_oc_ni_mis.php create mode 100644 www/plugins-dist/filtres_images/lang/paquet-images_uk.php create mode 100644 www/plugins-dist/forum/README.md create mode 100644 www/plugins-dist/forum/TODO.md delete mode 100644 www/plugins-dist/forum/formulaires/gestion_forum.html delete mode 100644 www/plugins-dist/forum/formulaires/gestion_forum.php delete mode 100644 www/plugins-dist/forum/formulaires/inc-gestion_forum_liste.html delete mode 100644 www/plugins-dist/forum/lang/forum_grecgr.php delete mode 100644 www/plugins-dist/forum/lang/forum_isl.php create mode 100644 www/plugins-dist/forum/lang/forum_oc_ni_mis.php create mode 100644 www/plugins-dist/forum/lang/forum_uk.php create mode 100644 www/plugins-dist/forum/lang/paquet-forum_fr_tu.php create mode 100644 www/plugins-dist/forum/lang/paquet-forum_oc_ni_mis.php create mode 100644 www/plugins-dist/forum/lang/paquet-forum_uk.php delete mode 100644 www/plugins-dist/forum/prive/objets/liste/controler_forum_cvt.html delete mode 100644 www/plugins-dist/jquery_ui/css/images/ui-bg_flat_0_aaaaaa_40x100.png delete mode 100644 www/plugins-dist/jquery_ui/css/images/ui-bg_flat_75_ffffff_40x100.png delete mode 100644 www/plugins-dist/jquery_ui/css/images/ui-bg_glass_55_fbf9ee_1x400.png delete mode 100644 www/plugins-dist/jquery_ui/css/images/ui-bg_glass_65_ffffff_1x400.png delete mode 100644 www/plugins-dist/jquery_ui/css/images/ui-bg_glass_75_dadada_1x400.png delete mode 100644 www/plugins-dist/jquery_ui/css/images/ui-bg_glass_75_e6e6e6_1x400.png delete mode 100644 www/plugins-dist/jquery_ui/css/images/ui-bg_glass_95_fef1ec_1x400.png delete mode 100644 www/plugins-dist/jquery_ui/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png delete mode 100644 www/plugins-dist/jquery_ui/css/images/ui-icons_222222_256x240.png delete mode 100644 www/plugins-dist/jquery_ui/css/images/ui-icons_2e83ff_256x240.png delete mode 100644 www/plugins-dist/jquery_ui/css/images/ui-icons_454545_256x240.png delete mode 100644 www/plugins-dist/jquery_ui/css/images/ui-icons_888888_256x240.png delete mode 100644 www/plugins-dist/jquery_ui/css/images/ui-icons_cd0a0a_256x240.png delete mode 100644 www/plugins-dist/jquery_ui/css/jquery-ui.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.accordion.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.all.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.autocomplete.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.base.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.button.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.core.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.datepicker.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.dialog.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.progressbar.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.resizable.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.selectable.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.slider.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.tabs.css delete mode 100644 www/plugins-dist/jquery_ui/css/jquery.ui.theme.css create mode 100644 www/plugins-dist/jquery_ui/css/ui/images/ui-icons_444444_256x240.png create mode 100644 www/plugins-dist/jquery_ui/css/ui/images/ui-icons_555555_256x240.png create mode 100644 www/plugins-dist/jquery_ui/css/ui/images/ui-icons_777620_256x240.png create mode 100644 www/plugins-dist/jquery_ui/css/ui/images/ui-icons_777777_256x240.png create mode 100644 www/plugins-dist/jquery_ui/css/ui/images/ui-icons_cc0000_256x240.png create mode 100644 www/plugins-dist/jquery_ui/css/ui/images/ui-icons_ffffff_256x240.png create mode 100644 www/plugins-dist/jquery_ui/css/ui/jquery-ui.css create mode 100644 www/plugins-dist/jquery_ui/css/ui/jquery-ui.min.css create mode 100644 www/plugins-dist/jquery_ui/css/ui/jquery-ui.structure.css create mode 100644 www/plugins-dist/jquery_ui/css/ui/jquery-ui.structure.min.css create mode 100644 www/plugins-dist/jquery_ui/css/ui/jquery-ui.theme.css create mode 100644 www/plugins-dist/jquery_ui/css/ui/jquery-ui.theme.min.css create mode 100644 www/plugins-dist/jquery_ui/lang/paquet-jqueryui_fr_tu.php create mode 100644 www/plugins-dist/jquery_ui/lang/paquet-jqueryui_oc_ni_mis.php create mode 100644 www/plugins-dist/jquery_ui/lang/paquet-jqueryui_pt_br.php create mode 100644 www/plugins-dist/jquery_ui/lang/paquet-jqueryui_uk.php create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-af.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ar-DZ.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ar.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-az.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-be.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-bg.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-bs.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ca.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-cs.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-cy-GB.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-da.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-de.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-el.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-en-AU.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-en-GB.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-en-NZ.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-eo.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-es.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-et.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-eu.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fa.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fi.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fo.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fr-CA.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fr-CH.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fr.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-gl.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-he.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hi.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hr.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hu.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hy.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-id.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-is.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-it-CH.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-it.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ja.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ka.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-kk.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-km.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ko.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ky.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-lb.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-lt.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-lv.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-mk.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ml.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ms.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nb.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nl-BE.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nl.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nn.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-no.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-pl.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-pt-BR.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-pt.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-rm.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ro.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ru.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sk.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sl.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sq.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sr-SR.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sr.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sv.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ta.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-th.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-tj.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-tr.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-uk.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-vi.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-zh-CN.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-zh-HK.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-zh-TW.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery-ui-i18n.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-af.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ar-DZ.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ar.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-az.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-bg.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-bs.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ca.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-cs.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-cy-GB.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-da.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-de.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-el.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-en-AU.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-en-GB.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-en-NZ.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-eo.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-es.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-et.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-eu.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fa.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fi.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fo.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fr-CH.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fr.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-gl.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-he.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hi.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hr.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hu.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hy.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-id.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-is.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-it.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ja.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ka.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-kk.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-km.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ko.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-lb.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-lt.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-lv.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-mk.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ml.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ms.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-nl-BE.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-nl.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-no.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-pl.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-pt-BR.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-pt.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-rm.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ro.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ru.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sk.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sl.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sq.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sr-SR.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sr.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sv.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ta.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-th.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-tj.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-tr.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-uk.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-vi.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-zh-CN.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-zh-HK.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-zh-TW.js create mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery-ui.min.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.blind.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.bounce.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.clip.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.core.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.drop.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.explode.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.fade.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.fold.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.highlight.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.pulsate.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.scale.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.shake.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.slide.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.transfer.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.accordion.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.autocomplete.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.button.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.core.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.datepicker.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.dialog.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.draggable.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.droppable.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.mouse.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.position.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.progressbar.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.resizable.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.selectable.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.slider.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.sortable.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.tabs.js delete mode 100644 www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.widget.js delete mode 100644 www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderBottomCenter.png delete mode 100644 www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderBottomLeft.png delete mode 100644 www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderBottomRight.png delete mode 100644 www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderMiddleLeft.png delete mode 100644 www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderMiddleRight.png delete mode 100644 www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderTopCenter.png delete mode 100644 www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderTopLeft.png delete mode 100644 www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderTopRight.png delete mode 100644 www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderBottomCenter.png delete mode 100644 www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderBottomLeft.png delete mode 100644 www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderBottomRight.png delete mode 100644 www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderMiddleLeft.png delete mode 100644 www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderMiddleRight.png delete mode 100644 www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderTopCenter.png delete mode 100644 www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderTopLeft.png delete mode 100644 www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderTopRight.png create mode 100644 www/plugins-dist/mediabox/colorbox/white-simple/images/start_rtl.png create mode 100644 www/plugins-dist/mediabox/lang/mediabox_fr_tu.php create mode 100644 www/plugins-dist/mediabox/lang/mediabox_oc_ni_mis.php create mode 100644 www/plugins-dist/mediabox/lang/mediabox_pt_br.php create mode 100644 www/plugins-dist/mediabox/lang/mediabox_uk.php create mode 100644 www/plugins-dist/mediabox/lang/paquet-mediabox_fr_tu.php create mode 100644 www/plugins-dist/mediabox/lang/paquet-mediabox_oc_ni_mis.php create mode 100644 www/plugins-dist/mediabox/lang/paquet-mediabox_pt_br.php create mode 100644 www/plugins-dist/mediabox/lang/paquet-mediabox_uk.php create mode 100644 www/plugins-dist/mediabox/prive/colorbox/white-shadow/colorbox_rtl.css delete mode 100644 www/plugins-dist/mediabox/prive/colorbox/white-shadow/images/internet_explorer/borderBottomCenter.png delete mode 100644 www/plugins-dist/mediabox/prive/colorbox/white-shadow/images/internet_explorer/borderBottomLeft.png delete mode 100644 www/plugins-dist/mediabox/prive/colorbox/white-shadow/images/internet_explorer/borderBottomRight.png delete mode 100644 www/plugins-dist/mediabox/prive/colorbox/white-shadow/images/internet_explorer/borderMiddleLeft.png delete mode 100644 www/plugins-dist/mediabox/prive/colorbox/white-shadow/images/internet_explorer/borderMiddleRight.png delete mode 100644 www/plugins-dist/mediabox/prive/colorbox/white-shadow/images/internet_explorer/borderTopCenter.png delete mode 100644 www/plugins-dist/mediabox/prive/colorbox/white-shadow/images/internet_explorer/borderTopLeft.png delete mode 100644 www/plugins-dist/mediabox/prive/colorbox/white-shadow/images/internet_explorer/borderTopRight.png create mode 100644 www/plugins-dist/medias/action/desordonner_liens_documents.php create mode 100644 www/plugins-dist/medias/action/ordonner_liens_documents.php create mode 100644 www/plugins-dist/medias/formulaires/methodes_upload/distant.html create mode 100644 www/plugins-dist/medias/formulaires/methodes_upload/ftp.html create mode 100644 www/plugins-dist/medias/formulaires/methodes_upload/mediatheque.html create mode 100644 www/plugins-dist/medias/formulaires/methodes_upload/upload.html create mode 100644 www/plugins-dist/medias/javascript/gestion_listes_documents.js.html create mode 100644 www/plugins-dist/medias/javascript/mejs-init.js create mode 100644 www/plugins-dist/medias/javascript/mejs-init.min.js delete mode 100644 www/plugins-dist/medias/lang/medias_kr.php create mode 100644 www/plugins-dist/medias/lang/medias_oc_ni_mis.php create mode 100644 www/plugins-dist/medias/lang/medias_uk.php create mode 100644 www/plugins-dist/medias/lang/paquet-medias_fr_tu.php create mode 100644 www/plugins-dist/medias/lang/paquet-medias_oc_ni_mis.php create mode 100644 www/plugins-dist/medias/lang/paquet-medias_uk.php create mode 100644 www/plugins-dist/medias/lib/getid3/extension.cache.dbm.php create mode 100644 www/plugins-dist/medias/lib/getid3/extension.cache.mysql.php create mode 100644 www/plugins-dist/medias/lib/getid3/extension.cache.mysqli.php create mode 100644 www/plugins-dist/medias/lib/getid3/extension.cache.sqlite3.php create mode 100644 www/plugins-dist/medias/lib/getid3/getid3.lib.php create mode 100644 www/plugins-dist/medias/lib/getid3/getid3.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.archive.gzip.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.archive.rar.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.archive.szip.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.archive.tar.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.archive.zip.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio-video.asf.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio-video.bink.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio-video.flv.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio-video.matroska.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio-video.mpeg.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio-video.nsv.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio-video.quicktime.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio-video.real.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio-video.riff.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio-video.swf.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio-video.ts.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.aa.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.aac.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.ac3.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.amr.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.au.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.avr.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.bonk.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.dsf.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.dss.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.dts.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.flac.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.la.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.lpac.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.midi.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.mod.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.monkey.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.mp3.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.mpc.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.ogg.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.optimfrog.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.rkau.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.shorten.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.tta.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.voc.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.vqf.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.audio.wavpack.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.graphic.bmp.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.graphic.efax.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.graphic.gif.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.graphic.jpg.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.graphic.pcd.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.graphic.png.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.graphic.svg.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.graphic.tiff.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.misc.cue.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.misc.exe.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.misc.iso.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.misc.msoffice.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.misc.par2.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.misc.pdf.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.tag.apetag.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.tag.id3v1.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.tag.id3v2.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.tag.lyrics3.php create mode 100644 www/plugins-dist/medias/lib/getid3/module.tag.xmp.php create mode 100644 www/plugins-dist/medias/lib/getid3/write.apetag.php create mode 100644 www/plugins-dist/medias/lib/getid3/write.id3v1.php create mode 100644 www/plugins-dist/medias/lib/getid3/write.id3v2.php create mode 100644 www/plugins-dist/medias/lib/getid3/write.lyrics3.php create mode 100644 www/plugins-dist/medias/lib/getid3/write.metaflac.php create mode 100644 www/plugins-dist/medias/lib/getid3/write.php create mode 100644 www/plugins-dist/medias/lib/getid3/write.real.php create mode 100644 www/plugins-dist/medias/lib/getid3/write.vorbiscomment.php create mode 100644 www/plugins-dist/medias/lib/mejs/lang/ca.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/cs.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/de.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/es.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/fa.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/fr.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/hr.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/hu.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/it.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/ja.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/ko.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/nl.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/pl.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/pt-br.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/pt.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/ro.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/ru.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/sk.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/sv.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/uk.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/zh-cn.js create mode 100644 www/plugins-dist/medias/lib/mejs/lang/zh.js create mode 100644 www/plugins-dist/medias/lib/mejs/mediaelement-and-player.js create mode 100644 www/plugins-dist/medias/lib/mejs/mediaelement-and-player.min.js create mode 100644 www/plugins-dist/medias/lib/mejs/mediaelement-flash-audio-ogg.swf create mode 100644 www/plugins-dist/medias/lib/mejs/mediaelement-flash-audio.swf create mode 100644 www/plugins-dist/medias/lib/mejs/mediaelement-flash-video-hls.swf create mode 100644 www/plugins-dist/medias/lib/mejs/mediaelement-flash-video-mdash.swf create mode 100644 www/plugins-dist/medias/lib/mejs/mediaelement-flash-video.swf create mode 100644 www/plugins-dist/medias/lib/mejs/mediaelement.js create mode 100644 www/plugins-dist/medias/lib/mejs/mediaelement.min.js create mode 100644 www/plugins-dist/medias/lib/mejs/mediaelementplayer-legacy.css create mode 100644 www/plugins-dist/medias/lib/mejs/mediaelementplayer-legacy.min.css create mode 100644 www/plugins-dist/medias/lib/mejs/mediaelementplayer.css create mode 100644 www/plugins-dist/medias/lib/mejs/mediaelementplayer.min.css create mode 100644 www/plugins-dist/medias/lib/mejs/mejs-controls.png create mode 100644 www/plugins-dist/medias/lib/mejs/mejs-controls.svg create mode 100644 www/plugins-dist/medias/lib/mejs/renderers/dailymotion.js create mode 100644 www/plugins-dist/medias/lib/mejs/renderers/dailymotion.min.js create mode 100644 www/plugins-dist/medias/lib/mejs/renderers/facebook.js create mode 100644 www/plugins-dist/medias/lib/mejs/renderers/facebook.min.js create mode 100644 www/plugins-dist/medias/lib/mejs/renderers/soundcloud.js create mode 100644 www/plugins-dist/medias/lib/mejs/renderers/soundcloud.min.js create mode 100644 www/plugins-dist/medias/lib/mejs/renderers/twitch.js create mode 100644 www/plugins-dist/medias/lib/mejs/renderers/twitch.min.js create mode 100644 www/plugins-dist/medias/lib/mejs/renderers/vimeo.js create mode 100644 www/plugins-dist/medias/lib/mejs/renderers/vimeo.min.js create mode 100644 www/plugins-dist/medias/metadata/audio.php delete mode 100644 www/plugins-dist/medias/metadata/flv.php create mode 100644 www/plugins-dist/medias/metadata/video.php create mode 100644 www/plugins-dist/medias/modeles/document_desc_fonctions.php create mode 100644 www/plugins-dist/medias/modeles/emb_mp4.html create mode 100644 www/plugins-dist/medias/prive/themes/spip/images/deplacer-16.png create mode 100644 www/plugins-dist/medias/prive/themes/spip/images/documents-cases-16.png create mode 100644 www/plugins-dist/medias/prive/themes/spip/images/documents-liste-16.png create mode 100644 www/plugins-dist/medias/prive/themes/spip/images/documents-liste-courte-16.png create mode 100644 www/plugins-dist/mots/formulaires/administrer_mot.html create mode 100644 www/plugins-dist/mots/formulaires/administrer_mot.php create mode 100644 www/plugins-dist/mots/lang/adminmots_en.php create mode 100644 www/plugins-dist/mots/lang/adminmots_fr.php delete mode 100644 www/plugins-dist/mots/lang/mots_an.php delete mode 100644 www/plugins-dist/mots/lang/mots_bn.php delete mode 100644 www/plugins-dist/mots/lang/mots_bo.php delete mode 100644 www/plugins-dist/mots/lang/mots_bois.php delete mode 100644 www/plugins-dist/mots/lang/mots_co_attic.php delete mode 100644 www/plugins-dist/mots/lang/mots_es_mx_pop.php delete mode 100644 www/plugins-dist/mots/lang/mots_fr_sc.php delete mode 100644 www/plugins-dist/mots/lang/mots_gr.php delete mode 100644 www/plugins-dist/mots/lang/mots_iu.php delete mode 100644 www/plugins-dist/mots/lang/mots_mg.php delete mode 100644 www/plugins-dist/mots/lang/mots_mk.php create mode 100644 www/plugins-dist/mots/lang/mots_oc_ni_mis.php delete mode 100644 www/plugins-dist/mots/lang/mots_oci_va.php delete mode 100644 www/plugins-dist/mots/lang/mots_qu.php delete mode 100644 www/plugins-dist/mots/lang/mots_scn.php delete mode 100644 www/plugins-dist/mots/lang/mots_src.php delete mode 100644 www/plugins-dist/mots/lang/mots_sro.php delete mode 100644 www/plugins-dist/mots/lang/mots_sw.php delete mode 100644 www/plugins-dist/mots/lang/mots_ta.php delete mode 100644 www/plugins-dist/mots/lang/mots_ty.php create mode 100644 www/plugins-dist/mots/lang/mots_uk.php delete mode 100644 www/plugins-dist/mots/lang/mots_ur.php create mode 100644 www/plugins-dist/mots/lang/paquet-mots_fr_tu.php create mode 100644 www/plugins-dist/mots/lang/paquet-mots_oc_ni_mis.php create mode 100644 www/plugins-dist/mots/lang/paquet-mots_uk.php create mode 100644 www/plugins-dist/mots/prive/squelettes/inclure/administrer_mot.html delete mode 100644 www/plugins-dist/msie_compat/formulaires/configurer_vieux_butineurs.html delete mode 100644 www/plugins-dist/msie_compat/formulaires/configurer_vieux_butineurs.php delete mode 100644 www/plugins-dist/msie_compat/images/msiecompat-16.png delete mode 100644 www/plugins-dist/msie_compat/images/msiecompat-24.png delete mode 100644 www/plugins-dist/msie_compat/images/msiecompat-32.png delete mode 100644 www/plugins-dist/msie_compat/javascript/IE7.js delete mode 100644 www/plugins-dist/msie_compat/javascript/IE8.js delete mode 100644 www/plugins-dist/msie_compat/javascript/IE9.js delete mode 100644 www/plugins-dist/msie_compat/javascript/blank.gif delete mode 100644 www/plugins-dist/msie_compat/javascript/ie7-recalc.js delete mode 100644 www/plugins-dist/msie_compat/javascript/ie7-squish.js delete mode 100644 www/plugins-dist/msie_compat/javascript/jquery.ifixpng.js delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat.xml delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_ar.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_ast.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_ca.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_de.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_en.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_es.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_eu.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_fa.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_fr.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_fr_fem.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_fr_tu.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_it.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_lb.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_nl.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_pt.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_pt_br.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_ru.php delete mode 100644 www/plugins-dist/msie_compat/lang/msiecompat_sk.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat.xml delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_ar.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_de.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_en.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_es.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_fa.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_fr.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_fr_fem.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_it.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_lb.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_nl.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_pt.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_pt_br.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_ru.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msie_compat_sk.php delete mode 100644 www/plugins-dist/msie_compat/lang/paquet-msiecompat.xml delete mode 100644 www/plugins-dist/msie_compat/msie_compat.php delete mode 100644 www/plugins-dist/msie_compat/msie_compat_ieconfig.php delete mode 100644 www/plugins-dist/msie_compat/paquet.xml delete mode 100644 www/plugins-dist/organiseur/javascript/jquery.autocomplete.js create mode 100644 www/plugins-dist/organiseur/lang/organiseur_fr_tu.php create mode 100644 www/plugins-dist/organiseur/lang/organiseur_oc_ni_mis.php create mode 100644 www/plugins-dist/organiseur/lang/organiseur_pt_br.php create mode 100644 www/plugins-dist/organiseur/lang/organiseur_uk.php create mode 100644 www/plugins-dist/organiseur/lang/paquet-organiseur_fr_tu.php create mode 100644 www/plugins-dist/organiseur/lang/paquet-organiseur_oc_ni_mis.php create mode 100644 www/plugins-dist/organiseur/lang/paquet-organiseur_pt_br.php create mode 100644 www/plugins-dist/organiseur/lang/paquet-organiseur_uk.php create mode 100644 www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.min.css create mode 100644 www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.print.min.css create mode 100644 www/plugins-dist/organiseur/lib/fullcalendar/gcal.min.js create mode 100644 www/plugins-dist/organiseur/lib/fullcalendar/locale-all.js create mode 100644 www/plugins-dist/organiseur/lib/moment/moment-with-locales.js create mode 100644 www/plugins-dist/organiseur/lib/moment/moment-with-locales.min.js create mode 100644 www/plugins-dist/organiseur/lib/moment/moment.js create mode 100644 www/plugins-dist/organiseur/lib/moment/moment.min.js create mode 100644 www/plugins-dist/petitions/lang/paquet-petitions_fr_tu.php create mode 100644 www/plugins-dist/petitions/lang/paquet-petitions_oc_ni_mis.php create mode 100644 www/plugins-dist/petitions/lang/paquet-petitions_uk.php delete mode 100644 www/plugins-dist/petitions/lang/petitions_fr_biblio.php delete mode 100644 www/plugins-dist/petitions/lang/petitions_kr.php delete mode 100644 www/plugins-dist/petitions/lang/petitions_ling.php delete mode 100644 www/plugins-dist/petitions/lang/petitions_no.php create mode 100644 www/plugins-dist/petitions/lang/petitions_oc_ni_mis.php delete mode 100644 www/plugins-dist/petitions/lang/petitions_rn.php create mode 100644 www/plugins-dist/plan/action/deplacer_objets.php create mode 100644 www/plugins-dist/plan/action/plan.php create mode 100644 www/plugins-dist/plan/css/plan_prive.css.html create mode 100644 www/plugins-dist/plan/lang/paquet-plan.xml create mode 100644 www/plugins-dist/plan/lang/paquet-plan_ar.php create mode 100644 www/plugins-dist/plan/lang/paquet-plan_de.php create mode 100644 www/plugins-dist/plan/lang/paquet-plan_en.php create mode 100644 www/plugins-dist/plan/lang/paquet-plan_fr.php create mode 100644 www/plugins-dist/plan/lang/paquet-plan_fr_fem.php create mode 100644 www/plugins-dist/plan/lang/paquet-plan_fr_tu.php create mode 100644 www/plugins-dist/plan/lang/paquet-plan_nl.php create mode 100644 www/plugins-dist/plan/lang/paquet-plan_pt_br.php create mode 100644 www/plugins-dist/plan/lang/paquet-plan_sk.php create mode 100644 www/plugins-dist/plan/lang/plan.xml create mode 100644 www/plugins-dist/plan/lang/plan_ar.php create mode 100644 www/plugins-dist/plan/lang/plan_de.php create mode 100644 www/plugins-dist/plan/lang/plan_en.php create mode 100644 www/plugins-dist/plan/lang/plan_fr.php create mode 100644 www/plugins-dist/plan/lang/plan_fr_fem.php create mode 100644 www/plugins-dist/plan/lang/plan_fr_tu.php create mode 100644 www/plugins-dist/plan/lang/plan_nl.php create mode 100644 www/plugins-dist/plan/lang/plan_pt_br.php create mode 100644 www/plugins-dist/plan/lib/jstree/LICENSE-MIT create mode 100644 www/plugins-dist/plan/lib/jstree/README.md create mode 100644 www/plugins-dist/plan/lib/jstree/dist/jstree.js create mode 100644 www/plugins-dist/plan/lib/jstree/dist/jstree.min.js create mode 100644 www/plugins-dist/plan/lib/jstree/dist/themes/default-dark/32px.png create mode 100644 www/plugins-dist/plan/lib/jstree/dist/themes/default-dark/40px.png create mode 100644 www/plugins-dist/plan/lib/jstree/dist/themes/default-dark/style.css create mode 100644 www/plugins-dist/plan/lib/jstree/dist/themes/default-dark/style.min.css create mode 100644 www/plugins-dist/plan/lib/jstree/dist/themes/default-dark/throbber.gif create mode 100644 www/plugins-dist/plan/lib/jstree/dist/themes/default/32px.png create mode 100644 www/plugins-dist/plan/lib/jstree/dist/themes/default/40px.png create mode 100644 www/plugins-dist/plan/lib/jstree/dist/themes/default/style.css create mode 100644 www/plugins-dist/plan/lib/jstree/dist/themes/default/style.min.css create mode 100644 www/plugins-dist/plan/lib/jstree/dist/themes/default/throbber.gif create mode 100644 www/plugins-dist/plan/paquet.xml create mode 100644 www/plugins-dist/plan/plan_fonctions.php create mode 100644 www/plugins-dist/plan/prive/javascript/spiptree.js create mode 100644 www/plugins-dist/plan/prive/squelettes/contenu/plan.html create mode 100644 www/plugins-dist/plan/prive/squelettes/head/plan.html create mode 100644 www/plugins-dist/plan/prive/squelettes/inclure/plan-articles.html create mode 100644 www/plugins-dist/plan/prive/squelettes/inclure/plan-articles_fonctions.php create mode 100644 www/plugins-dist/plan/prive/squelettes/inclure/plan-rubriques.html create mode 100644 www/plugins-dist/plan/prive/squelettes/inclure/plan.html create mode 100644 www/plugins-dist/plan/prive/themes/spip/images/plan-128.png create mode 100644 www/plugins-dist/plan/prive/themes/spip/images/plan-16.png create mode 100644 www/plugins-dist/plan/prive/themes/spip/images/plan-32.png create mode 100644 www/plugins-dist/plan/prive/themes/spip/images/plan-64.png create mode 100644 www/plugins-dist/porte_plume/barre_outils/vide.php delete mode 100644 www/plugins-dist/porte_plume/barre_outils_icones.css.html create mode 100644 www/plugins-dist/porte_plume/css/barre_outils_icones.css.html create mode 100644 www/plugins-dist/porte_plume/css/img/arrow_in.png create mode 100644 www/plugins-dist/porte_plume/css/img/arrow_out.png rename www/plugins-dist/porte_plume/css/{images => img}/handle.png (100%) rename www/plugins-dist/porte_plume/css/{images => img}/menu.png (100%) rename www/plugins-dist/porte_plume/css/{images => img}/submenu.png (100%) create mode 100644 www/plugins-dist/porte_plume/javascript/porte_plume_start.js.html create mode 100644 www/plugins-dist/porte_plume/javascript/porte_plume_start.js_fonctions.php create mode 100644 www/plugins-dist/porte_plume/lang/barreoutils_fr_tu.php create mode 100644 www/plugins-dist/porte_plume/lang/barreoutils_oc_ni_mis.php create mode 100644 www/plugins-dist/porte_plume/lang/barreoutils_pt_br.php create mode 100644 www/plugins-dist/porte_plume/lang/barreoutils_uk.php create mode 100644 www/plugins-dist/porte_plume/lang/paquet-porte_plume_fr_tu.php create mode 100644 www/plugins-dist/porte_plume/lang/paquet-porte_plume_oc_ni_mis.php create mode 100644 www/plugins-dist/porte_plume/lang/paquet-porte_plume_pt_br.php create mode 100644 www/plugins-dist/porte_plume/lang/paquet-porte_plume_uk.php delete mode 100644 www/plugins-dist/porte_plume/porte_plume_start.js.html delete mode 100644 www/plugins-dist/porte_plume/porte_plume_start.js_fonctions.php create mode 100644 www/plugins-dist/revisions/lang/paquet-revisions_fr_tu.php create mode 100644 www/plugins-dist/revisions/lang/paquet-revisions_oc_ni_mis.php create mode 100644 www/plugins-dist/revisions/lang/paquet-revisions_uk.php create mode 100644 www/plugins-dist/revisions/lang/revisions_oc_ni_mis.php create mode 100644 www/plugins-dist/revisions/revisions_autoriser.php create mode 100644 www/plugins-dist/safehtml/lang/paquet-safehtml_ar.php create mode 100644 www/plugins-dist/safehtml/lang/paquet-safehtml_de.php create mode 100644 www/plugins-dist/safehtml/lang/paquet-safehtml_fr_tu.php create mode 100644 www/plugins-dist/safehtml/lang/paquet-safehtml_nl.php create mode 100644 www/plugins-dist/safehtml/lang/paquet-safehtml_oc_ni_mis.php create mode 100644 www/plugins-dist/safehtml/lang/paquet-safehtml_pt_br.php create mode 100644 www/plugins-dist/safehtml/lang/paquet-safehtml_uk.php create mode 100644 www/plugins-dist/sites/action/importer_bookmarks_opml.php create mode 100644 www/plugins-dist/sites/lang/paquet-sites_fr_tu.php create mode 100644 www/plugins-dist/sites/lang/paquet-sites_oc_ni_mis.php create mode 100644 www/plugins-dist/sites/lang/paquet-sites_uk.php create mode 100644 www/plugins-dist/sites/lang/sites_oc_ni_mis.php create mode 100644 www/plugins-dist/sites/lang/sites_uk.php create mode 100644 www/plugins-dist/sites/prive/objets/liste/sites-sansidsyndic.html create mode 100644 www/plugins-dist/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_fr_tu.php create mode 100644 www/plugins-dist/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_oc_ni_mis.php create mode 100644 www/plugins-dist/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_uk.php create mode 100644 www/plugins-dist/statistiques/action/statistiques_archiver.php create mode 100644 www/plugins-dist/statistiques/javascript/jquery.flot.time.js create mode 100644 www/plugins-dist/statistiques/lang/paquet-stats_fr_tu.php create mode 100644 www/plugins-dist/statistiques/lang/paquet-stats_oc_ni_mis.php create mode 100644 www/plugins-dist/statistiques/lang/paquet-stats_uk.php create mode 100644 www/plugins-dist/statistiques/lang/statistiques_oc_ni_mis.php create mode 100644 www/plugins-dist/statistiques/lang/statistiques_uk.php create mode 100644 www/plugins-dist/statistiques/prive/squelettes/contenu/stats_archiver.html create mode 100644 www/plugins-dist/statistiques/prive/squelettes/inclure/admin_stats_archiver.html create mode 100644 www/plugins-dist/statistiques/prive/squelettes/navigation/stats_archiver.html create mode 100644 www/plugins-dist/svp/formulaires/inc-admin_plugin_fonctions.php delete mode 100644 www/plugins-dist/svp/inc/pcltar.php create mode 100644 www/plugins-dist/svp/lang/paquet-svp_fr_tu.php create mode 100644 www/plugins-dist/svp/lang/paquet-svp_oc_ni_mis.php create mode 100644 www/plugins-dist/svp/lang/paquet-svp_pt_br.php create mode 100644 www/plugins-dist/svp/lang/paquet-svp_uk.php create mode 100644 www/plugins-dist/svp/lang/svp_fr_tu.php create mode 100644 www/plugins-dist/svp/lang/svp_nl.php create mode 100644 www/plugins-dist/svp/lang/svp_oc_ni_mis.php create mode 100644 www/plugins-dist/svp/lang/svp_pt_br.php create mode 100644 www/plugins-dist/svp/lang/svp_uk.php delete mode 100644 www/plugins-dist/svp/lib/pcltar/pclerror.lib.php delete mode 100644 www/plugins-dist/svp/lib/pcltar/pcltrace.lib.php delete mode 100644 www/plugins-dist/svp/lib/pcltar/readme.txt create mode 100644 www/plugins-dist/svp/paquet_xml.html delete mode 100644 www/plugins-dist/svp/tests_debug/criteres.html delete mode 100644 www/plugins-dist/svp/tests_debug/depot.xml delete mode 100644 www/plugins-dist/svp/tests_debug/depot_non_conforme.xml delete mode 100644 www/plugins-dist/svp/tests_debug/fonctions.html create mode 100644 www/plugins-dist/svp/xml.html create mode 100644 www/plugins-dist/textwheel/inc/ressource-mini.php create mode 100644 www/plugins-dist/textwheel/lang/paquet-tw_fr_tu.php create mode 100644 www/plugins-dist/textwheel/lang/paquet-tw_oc_ni_mis.php create mode 100644 www/plugins-dist/textwheel/lang/paquet-tw_pt_br.php create mode 100644 www/plugins-dist/textwheel/lang/paquet-tw_uk.php create mode 100644 www/plugins-dist/textwheel/lang/tw_nl.php create mode 100644 www/plugins-dist/textwheel/prive/themes/spip/images/br-auto_rtl-10.png create mode 100644 www/plugins-dist/textwheel/prive/themes/spip/images/br-manuel_rtl-10.png create mode 100644 www/plugins-dist/textwheel/prive/themes/spip/images/br-no_rtl-10.png create mode 100644 www/plugins-dist/textwheel/tests/data/base/atx_heading.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/atx_heading.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/block-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/block-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/blockquote_quote_poesie.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/blockquote_quote_poesie.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/cadre_block.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/cadre_block.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/code_block.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/code_block.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/code_span.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/code_span.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/compound_blockquote.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/compound_blockquote.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/compound_emphasis.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/compound_emphasis.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/compound_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/compound_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/deeply_nested_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/deeply_nested_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/em_strong.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/em_strong.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/email.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/email.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/emphasis.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/emphasis.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/escaping.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/escaping.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/fenced_code_block.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/fenced_code_block.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/image_reference.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/image_reference.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/inline_link.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/inline_link.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/inline_link_title.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/inline_link_title.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/lazy_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/lazy_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/math.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/math.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/mixed_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/mixed_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/multiline_list_paragraph.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/multiline_list_paragraph.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/nested_block-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/nested_block-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/notes.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/notes.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/ordered_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/ordered_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/paragraph_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/paragraph_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/self-closing_block-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/self-closing_block-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/simple_blockquote.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/simple_blockquote.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/span-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/span-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/sparse_dense_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/sparse_dense_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/sparse_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/sparse_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/special_characters.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/special_characters.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/unordered_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/unordered_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/base/whitespace.html create mode 100644 www/plugins-dist/textwheel/tests/data/base/whitespace.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/atx_heading.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/atx_heading.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/block-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/block-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/blockquote_quote_poesie.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/blockquote_quote_poesie.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/cadre_block.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/cadre_block.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/code_block.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/code_block.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/code_span.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/code_span.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/compound_blockquote.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/compound_blockquote.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/compound_emphasis.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/compound_emphasis.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/compound_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/compound_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/deeply_nested_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/deeply_nested_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/em_strong.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/em_strong.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/email.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/email.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/emphasis.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/emphasis.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/escaping.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/escaping.txt_ create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/fenced_code_block.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/fenced_code_block.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/image_reference.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/image_reference.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/inline_link.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/inline_link.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/inline_link_title.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/inline_link_title.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/lazy_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/lazy_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/mixed_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/mixed_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/multiline_list_paragraph.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/multiline_list_paragraph.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/nested_block-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/nested_block-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/notes.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/notes.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/ordered_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/ordered_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/paragraph_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/paragraph_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/self-closing_block-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/self-closing_block-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/simple_blockquote.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/simple_blockquote.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/span-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/span-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/sparse_dense_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/sparse_dense_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/sparse_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/sparse_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/unordered_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/unordered_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/whitespace.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_block/whitespace.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/atx_heading.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/atx_heading.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/block-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/block-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/blockquote_quote_poesie.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/blockquote_quote_poesie.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/cadre_block.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/cadre_block.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/code_block.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/code_block.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/code_span.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/code_span.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/compound_blockquote.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/compound_blockquote.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/compound_emphasis.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/compound_emphasis.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/compound_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/compound_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/deeply_nested_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/deeply_nested_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/em_strong.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/em_strong.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/email.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/email.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/emphasis.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/emphasis.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/escaping.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/escaping.txt_ create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/fenced_code_block.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/fenced_code_block.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/image_reference.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/image_reference.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/inline_link.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/inline_link.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/inline_link_title.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/inline_link_title.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/lazy_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/lazy_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/mixed_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/mixed_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/multiline_list_paragraph.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/multiline_list_paragraph.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/nested_block-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/nested_block-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/notes.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/notes.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/ordered_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/ordered_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/paragraph_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/paragraph_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/self-closing_block-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/self-closing_block-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/simple_blockquote.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/simple_blockquote.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/span-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/span-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/sparse_dense_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/sparse_dense_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/sparse_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/sparse_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/unordered_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/unordered_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/whitespace.html create mode 100644 www/plugins-dist/textwheel/tests/data/modeles_inline/whitespace.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/atx_heading.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/atx_heading.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/block-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/block-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/blockquote_quote_poesie.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/blockquote_quote_poesie.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/cadre_block.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/cadre_block.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/code_block.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/code_block.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/code_span.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/code_span.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/compound_blockquote.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/compound_blockquote.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/compound_emphasis.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/compound_emphasis.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/compound_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/compound_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/deeply_nested_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/deeply_nested_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/em_strong.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/em_strong.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/email.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/email.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/emphasis.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/emphasis.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/escaping.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/escaping.txt_ create mode 100644 www/plugins-dist/textwheel/tests/data/typo/fenced_code_block.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/fenced_code_block.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/image_reference.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/image_reference.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/inline_link.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/inline_link.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/inline_link_title.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/inline_link_title.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/lazy_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/lazy_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/mixed_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/mixed_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/multiline_list_paragraph.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/multiline_list_paragraph.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/nested_block-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/nested_block-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/notes.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/notes.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/ordered_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/ordered_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/paragraph_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/paragraph_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/self-closing_block-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/self-closing_block-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/simple_blockquote.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/simple_blockquote.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/span-level_html.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/span-level_html.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/sparse_dense_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/sparse_dense_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/sparse_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/sparse_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/unordered_list.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/unordered_list.txt create mode 100644 www/plugins-dist/textwheel/tests/data/typo/whitespace.html create mode 100644 www/plugins-dist/textwheel/tests/data/typo/whitespace.txt create mode 100644 www/plugins-dist/textwheel/tests/simpletest/all_tests.php create mode 100644 www/plugins-dist/textwheel/tests/simpletest/lanceur_spip.php create mode 100644 www/plugins-dist/textwheel/tests/simpletest/nettoyer_raccourcis_typo.php create mode 100644 www/plugins-dist/textwheel/tests/squelettes/modeles/textwheel_block.html create mode 100644 www/plugins-dist/textwheel/tests/squelettes/modeles/textwheel_inline.html create mode 100644 www/plugins-dist/textwheel/tests/tw_propre.php create mode 100644 www/plugins-dist/textwheel/tests/tw_propre_modeles_block.php create mode 100644 www/plugins-dist/textwheel/tests/tw_propre_modeles_inline.php create mode 100644 www/plugins-dist/textwheel/tests/tw_propre_typo.php create mode 100644 www/plugins-dist/textwheel/wheels/spip/echappe-js.php delete mode 100644 www/plugins-dist/urls_etendues/action/urls_liberer.php delete mode 100644 www/plugins-dist/urls_etendues/action/urls_verrouiller.php create mode 100644 www/plugins-dist/urls_etendues/lang/paquet-urls_fr_tu.php create mode 100644 www/plugins-dist/urls_etendues/lang/paquet-urls_oc_ni_mis.php create mode 100644 www/plugins-dist/urls_etendues/lang/paquet-urls_uk.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_bs.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_cpf_hat.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_el.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_et.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_eu.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_fi.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_fr_biblio.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_fr_stal.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_he.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_hi.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_hr.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_hu.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_is.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_km.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_ko.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_lt.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_lv.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_nb.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_ne.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_no.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_oc_ni.php create mode 100644 www/plugins-dist/urls_etendues/lang/urls_oc_ni_mis.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_pl.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_ps.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_sh.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_sl.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_sq.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_sr.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_sv.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_th.php delete mode 100644 www/plugins-dist/urls_etendues/lang/urls_wa.php delete mode 100644 www/plugins-dist/urls_etendues/urls/standard.php create mode 100644 www/plugins-dist/vertebres/lang/paquet-vertebres_fr_tu.php create mode 100644 www/plugins-dist/vertebres/lang/paquet-vertebres_oc_ni_mis.php create mode 100644 www/plugins-dist/vertebres/lang/paquet-vertebres_pt_br.php create mode 100644 www/plugins-dist/vertebres/lang/paquet-vertebres_uk.php create mode 100644 www/plugins-dist/vertebres/lang/vertebres_fr_tu.php create mode 100644 www/plugins-dist/vertebres/lang/vertebres_oc_ni_mis.php create mode 100644 www/plugins-dist/vertebres/lang/vertebres_pt_br.php create mode 100644 www/plugins-dist/vertebres/lang/vertebres_uk.php create mode 100644 www/plugins-dist/vertebres/prive/themes/spip/images/tables-16.png create mode 100644 www/plugins-dist/vertebres/prive/themes/spip/images/tables-32.png create mode 100644 www/plugins/enluminures_typographiques_v3/lang/enlumtypo_pt_br.php delete mode 100644 www/plugins/facteur/phpmailer-php5/README.md delete mode 100644 www/plugins/facteur/phpmailer-php5/changelog.md create mode 100644 www/plugins/facteur/phpmailer-php5/composer.lock delete mode 100755 www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-br.php rename www/plugins/facteur/phpmailer-php5/language/{phpmailer.lang-cz.php => phpmailer.lang-cs.php} (100%) mode change 100755 => 100644 rename www/plugins/facteur/phpmailer-php5/language/{phpmailer.lang-dk.php => phpmailer.lang-da.php} (100%) rename www/plugins/facteur/phpmailer-php5/language/{phpmailer.lang-no.php => phpmailer.lang-nb.php} (100%) mode change 100755 => 100644 create mode 100644 www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-pt_br.php delete mode 100755 www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-se.php create mode 100644 www/plugins/facteur/phpmailer-php5/language/phpmailer.lang-sv.php delete mode 100644 www/plugins/facteur/phpmailer-php5/travis.phpunit.xml.dist create mode 100644 www/plugins/formidable/action/formidable_recuperer_fichier.php create mode 100644 www/plugins/formidable/action/formidable_recuperer_fichier_par_email.php create mode 100644 www/plugins/formidable/corbeille/formulaires_pre_suppression.php create mode 100644 www/plugins/formidable/corbeille/formulaires_reponses_pre_suppression.php create mode 100644 www/plugins/formidable/genie/formidable_effacer_enregistrements.php create mode 100644 www/plugins/formidable/genie/formidable_effacer_fichiers_email.php create mode 100644 www/plugins/formidable/genie/formidable_hasher_ip.php create mode 100644 www/plugins/formidable/inc/formidable_fichiers.php create mode 100644 www/plugins/formidable/lang/formulaire_pt_br.php create mode 100644 www/plugins/formidable/lang/formulaires_reponse_pt_br.php create mode 100644 www/plugins/formidable/lang/paquet-formidable_pt_br.php create mode 100644 www/plugins/formidable/prive/listes/corbeille_formulaires.html create mode 100644 www/plugins/formidable/prive/listes/corbeille_formulaires_reponses.html create mode 100644 www/plugins/formidable/saisies-analyses/auteurs.html create mode 100644 www/plugins/formidable/saisies-analyses/fichiers.html rename www/{plugins-dist/compagnon/prive/javascript/compagnon.js => plugins/formidable/saisies-analyses/fieldset.html} (100%) create mode 100644 www/plugins/nospam/lang/nospam_pt_br.php create mode 100644 www/plugins/nospam/lang/paquet-nospam_pt_br.php delete mode 100644 www/plugins/odt2spip_30/action/odt2spip_importe.php delete mode 100644 www/plugins/odt2spip_30/formulaires/configurer_odt2spip.html delete mode 100644 www/plugins/odt2spip_30/formulaires/odt2spip.html delete mode 100644 www/plugins/odt2spip_30/inc/odt2spip_generer_sortie.php delete mode 100644 www/plugins/odt2spip_30/inc/odt2spip_retailler_img.php delete mode 100644 www/plugins/odt2spip_30/inc/odt2spip_traiter_mathml.php delete mode 100644 www/plugins/odt2spip_30/lang/odtspip_en.php delete mode 100644 www/plugins/odt2spip_30/lang/odtspip_fr.php delete mode 100644 www/plugins/odt2spip_30/odt2spip_administrations.php delete mode 100644 www/plugins/odt2spip_30/odt2spip_pipelines.php delete mode 100644 www/plugins/odt2spip_30/paquet.xml delete mode 100644 www/plugins/odt2spip_30/svn.revision delete mode 100644 www/plugins/odt2spip_30/tests/content_test_complet.xml delete mode 100644 www/plugins/odt2spip_30/tests/content_test_complet_indente.xml create mode 100644 www/plugins/odt2spip_32/action/api_convert_to.php create mode 100644 www/plugins/odt2spip_32/action/odt2spip_importe.php create mode 100644 www/plugins/odt2spip_32/formulaires/configurer_odt2spip.html create mode 100644 www/plugins/odt2spip_32/formulaires/configurer_odt2spip.php create mode 100644 www/plugins/odt2spip_32/formulaires/document2spip.html create mode 100644 www/plugins/odt2spip_32/formulaires/document2spip.php create mode 100644 www/plugins/odt2spip_32/formulaires/odt2spip.html create mode 100644 www/plugins/odt2spip_32/formulaires/odt2spip.php create mode 100644 www/plugins/odt2spip_32/genie/odt2spip_nettoyer_repertoire_upload.php create mode 100644 www/plugins/odt2spip_32/inc/convertir_avec_libreoffice.php create mode 100644 www/plugins/odt2spip_32/inc/libreoffice.php create mode 100644 www/plugins/odt2spip_32/inc/odt2spip.php rename www/plugins/{odt2spip_30 => odt2spip_32}/inc/odt2spip.xsl (100%) create mode 100644 www/plugins/odt2spip_32/inc/odt2spip_generer_sortie.php create mode 100644 www/plugins/odt2spip_32/inc/odt2spip_retailler_img.php create mode 100644 www/plugins/odt2spip_32/inc/odt2spip_traiter_mathml.php rename www/plugins/{odt2spip_30 => odt2spip_32}/inc/xsltml/README (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/inc/xsltml/cmarkup.xsl (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/inc/xsltml/entities.xsl (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/inc/xsltml/glayout.xsl (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/inc/xsltml/mmltex.xsl (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/inc/xsltml/scripts.xsl (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/inc/xsltml/tables.xsl (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/inc/xsltml/tokens.xsl (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/lang/odtspip_de.php (100%) create mode 100644 www/plugins/odt2spip_32/lang/odtspip_en.php create mode 100644 www/plugins/odt2spip_32/lang/odtspip_fr.php rename www/plugins/{odt2spip_30 => odt2spip_32}/lang/odtspip_it.php (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/lang/odtspip_ro.php (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/lang/paquet-odt2spip_en.php (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/lang/paquet-odt2spip_fr.php (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/odt2spip-24.png (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/odt2spip-64.png (100%) create mode 100644 www/plugins/odt2spip_32/odt2spip_administrations.php create mode 100644 www/plugins/odt2spip_32/odt2spip_pipelines.php create mode 100644 www/plugins/odt2spip_32/paquet.xml rename www/plugins/{odt2spip_30 => odt2spip_32}/prive/squelettes/contenu/configurer_odt2spip.html (100%) create mode 100644 www/plugins/odt2spip_32/prive/squelettes/inclure/document2spip.html create mode 100644 www/plugins/odt2spip_32/prive/squelettes/inclure/odt2spip.html create mode 100644 www/plugins/odt2spip_32/svn.revision rename www/plugins/{odt2spip_30 => odt2spip_32}/tests/content_math_objet1.xml (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/tests/content_math_objet2.xml (100%) rename www/plugins/{odt2spip_30 => odt2spip_32}/tests/content_math_objet3.xml (100%) create mode 100644 www/plugins/odt2spip_32/tests/content_test_complet.xml create mode 100644 www/plugins/odt2spip_32/tests/content_test_complet_indente.xml rename www/plugins/{odt2spip_30 => odt2spip_32}/tests/test_complet.odt (100%) rename www/plugins/saisies/{test => demo}/configurer_saisie.html (100%) rename www/plugins/saisies/{test => demo}/generer_saisies.html (100%) rename www/plugins/saisies/{test => demo}/saisie.html (100%) rename www/plugins/saisies/{test => demo}/voir_saisie.html (100%) rename www/plugins/saisies/{test => demo}/voir_saisies.html (100%) create mode 100644 www/plugins/saisies/images/saisies-16.png create mode 100644 www/plugins/saisies/images/saisies-24.png create mode 100644 www/plugins/saisies/images/saisies-32.png create mode 100644 www/plugins/saisies/images/saisies_email.png create mode 100644 www/plugins/saisies/prive/squelettes/contenu/saisies_doc.html create mode 100644 www/plugins/saisies/prive/squelettes/navigation/saisies_doc.html create mode 100644 www/plugins/saisies/prive/style_prive_plugin_saisies.html create mode 100644 www/plugins/saisies/saisies/email.yaml create mode 100644 www/plugins/seo-dev/lang/paquet-seo_de.php create mode 100644 www/plugins/seo-dev/lang/seo_de.php create mode 100755 www/plugins/spip-bonux-3/lib/array_column/_array_column.php delete mode 100755 www/plugins/spip-bonux-3/lib/array_column/array_column.php create mode 100644 www/plugins/spip_piwik/action/piwik_creer_site.php create mode 100644 www/plugins/spip_piwik/action/piwik_recuperer_liste.php create mode 100644 www/plugins/spip_piwik/balise/piwik.php rename www/plugins/{spip_piwik_2_0 => spip_piwik}/fonds/cfg_piwik.html (100%) rename www/plugins/{spip_piwik_2_0 => spip_piwik}/formulaires/configurer_piwik.html (100%) create mode 100644 www/plugins/spip_piwik/formulaires/configurer_piwik_fonctions.php rename www/plugins/{spip_piwik_2_0 => spip_piwik}/images/piwik-22.png (100%) rename www/plugins/{spip_piwik_2_0 => spip_piwik}/images/piwik.png (100%) rename www/plugins/{spip_piwik_2_0 => spip_piwik}/inc/js-cnil.html (100%) create mode 100644 www/plugins/spip_piwik/inc/piwik_recuperer_data.php create mode 100644 www/plugins/spip_piwik/lang/paquet-piwik.xml create mode 100644 www/plugins/spip_piwik/lang/paquet-piwik_de.php create mode 100644 www/plugins/spip_piwik/lang/paquet-piwik_en.php create mode 100644 www/plugins/spip_piwik/lang/paquet-piwik_es.php create mode 100644 www/plugins/spip_piwik/lang/paquet-piwik_fa.php create mode 100644 www/plugins/spip_piwik/lang/paquet-piwik_fr.php create mode 100644 www/plugins/spip_piwik/lang/paquet-piwik_nl.php create mode 100644 www/plugins/spip_piwik/lang/paquet-piwik_ru.php create mode 100644 www/plugins/spip_piwik/lang/paquet-piwik_sk.php create mode 100644 www/plugins/spip_piwik/lang/piwik.xml create mode 100644 www/plugins/spip_piwik/lang/piwik_ca.php create mode 100644 www/plugins/spip_piwik/lang/piwik_de.php create mode 100644 www/plugins/spip_piwik/lang/piwik_en.php create mode 100644 www/plugins/spip_piwik/lang/piwik_es.php create mode 100644 www/plugins/spip_piwik/lang/piwik_fa.php create mode 100644 www/plugins/spip_piwik/lang/piwik_fr.php create mode 100644 www/plugins/spip_piwik/lang/piwik_fr_tu.php create mode 100644 www/plugins/spip_piwik/lang/piwik_nl.php create mode 100644 www/plugins/spip_piwik/lang/piwik_sk.php create mode 100644 www/plugins/spip_piwik/paquet.xml create mode 100644 www/plugins/spip_piwik/piwik.png create mode 100644 www/plugins/spip_piwik/piwik_administrations.php create mode 100644 www/plugins/spip_piwik/piwik_pipelines.php create mode 100644 www/plugins/spip_piwik/plugin.xml rename www/plugins/{spip_piwik_2_0 => spip_piwik}/prive/piwik.html (100%) rename www/plugins/{spip_piwik_2_0 => spip_piwik}/prive/squelettes/contenu/configurer_piwik.html (100%) rename www/plugins/{spip_piwik_2_0 => spip_piwik}/saisies/sites_piwik.html (100%) create mode 100644 www/plugins/spip_piwik/svn.revision delete mode 100644 www/plugins/spip_piwik_2_0/action/piwik_creer_site.php delete mode 100644 www/plugins/spip_piwik_2_0/action/piwik_recuperer_liste.php delete mode 100644 www/plugins/spip_piwik_2_0/balise/piwik.php delete mode 100644 www/plugins/spip_piwik_2_0/formulaires/configurer_piwik_fonctions.php delete mode 100644 www/plugins/spip_piwik_2_0/inc/piwik_recuperer_data.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/paquet-piwik.xml delete mode 100644 www/plugins/spip_piwik_2_0/lang/paquet-piwik_de.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/paquet-piwik_en.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/paquet-piwik_es.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/paquet-piwik_fa.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/paquet-piwik_fr.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/paquet-piwik_nl.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/paquet-piwik_ru.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/paquet-piwik_sk.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/piwik.xml delete mode 100644 www/plugins/spip_piwik_2_0/lang/piwik_ca.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/piwik_de.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/piwik_en.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/piwik_es.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/piwik_fa.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/piwik_fr.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/piwik_fr_tu.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/piwik_nl.php delete mode 100644 www/plugins/spip_piwik_2_0/lang/piwik_sk.php delete mode 100644 www/plugins/spip_piwik_2_0/paquet.xml delete mode 100644 www/plugins/spip_piwik_2_0/piwik.png delete mode 100644 www/plugins/spip_piwik_2_0/piwik_administrations.php delete mode 100644 www/plugins/spip_piwik_2_0/piwik_pipelines.php delete mode 100644 www/plugins/spip_piwik_2_0/plugin.xml delete mode 100644 www/plugins/spip_piwik_2_0/svn.revision create mode 100644 www/plugins/verifier/images/verifier-16.png create mode 100644 www/plugins/verifier/images/verifier-24.png create mode 100644 www/plugins/verifier/images/verifier-32.png create mode 100644 www/plugins/verifier/lang/paquet-verifier_pt_br.php create mode 100644 www/plugins/verifier/prive/squelettes/contenu/verifier_doc.html create mode 100644 www/plugins/verifier/prive/squelettes/navigation/verifier_doc.html create mode 100644 www/plugins/verifier/prive/style_prive_plugin_verifier.html create mode 100755 www/plugins/verifier/verifier/fichiers.php create mode 100644 www/plugins/verifier/verifier/fichiers.yaml create mode 100755 www/plugins/verifier/verifier/image_upload.php create mode 100755 www/plugins/verifier/verifier/image_upload_multiple.php create mode 100644 www/plugins/verifier/verifier/password.php create mode 100644 www/plugins/verifier/verifier_fonctions.php create mode 100644 www/plugins/yaml/lang/paquet-yaml_de.php create mode 100644 www/plugins/yaml/lang/paquet-yaml_pt_br.php create mode 100644 www/prive/formulaires/configurer_preferences_menus.html create mode 100644 www/prive/formulaires/configurer_preferences_menus.php delete mode 100644 www/prive/formulaires/selecteur/ajax_fonctions.php delete mode 100644 www/prive/formulaires/selecteur/articles_fonctions.php delete mode 100644 www/prive/formulaires/selecteur/inc-nav-rubriques_fonctions.php delete mode 100644 www/prive/formulaires/selecteur/jquery-ui-1.8.custom.js create mode 100644 www/prive/formulaires/selecteur/jquery.selecteur.js.html delete mode 100644 www/prive/formulaires/selecteur/navigateur_fonctions.php delete mode 100644 www/prive/formulaires/selecteur/picker-ajax_fonctions.php delete mode 100644 www/prive/formulaires/selecteur/rubriques_fonctions.php delete mode 100644 www/prive/formulaires/selecteur/selecteur_fonctions.php create mode 100644 www/prive/images/favicon-spip.png create mode 100644 www/prive/images/logo-spip.png mode change 100755 => 100644 www/prive/images/rien.gif create mode 100644 www/prive/javascript/jquery-migrate-3.0.1.js delete mode 100644 www/prive/javascript/jquery.colors.js delete mode 100644 www/prive/javascript/jquery.ifixpng.js create mode 100755 www/prive/javascript/js.cookie.js delete mode 100644 www/prive/javascript/pause.js create mode 100644 www/prive/modeles/mail_nouveaux_identifiants.html delete mode 100644 www/prive/objets/editer/rediriger_article.html create mode 100644 www/prive/objets/liste/articles_associer.html create mode 100644 www/prive/objets/liste/articles_lies.html create mode 100644 www/prive/rss/a_suivre_fonctions.php delete mode 100644 www/prive/squelettes/contenu/aide.html delete mode 100644 www/prive/squelettes/contenu/aide_fonctions.php create mode 100644 www/prive/squelettes/inclure/favicon-head.html delete mode 100644 www/prive/squelettes/inclure/plan-articles.html create mode 100644 www/prive/squelettes/top/auteur.html create mode 100644 www/prive/themes/spip/images/degrade-etapes-rose-left.gif create mode 100644 www/prive/themes/spip/images/degrade-etapes-rose-right.gif delete mode 100644 www/prive/themes/spip/images/degrade-etapes-vert-left.gif delete mode 100644 www/prive/themes/spip/images/degrade-etapes-vert-right.gif create mode 100644 www/prive/themes/spip/images/developpement-48.png mode change 100755 => 100644 www/prive/themes/spip/images/erreur-16.png mode change 100755 => 100644 www/prive/themes/spip/images/erreur-32.png create mode 100644 www/prive/themes/spip/images/fond-imgs.png mode change 100755 => 100644 www/prive/themes/spip/images/ok-16.png mode change 100755 => 100644 www/prive/themes/spip/images/ok-32.png create mode 100644 www/prive/themes/spip/images/php-16.png rename www/prive/themes/spip/images/{boussole-16.png => plan_site-16.png} (100%) rename www/prive/themes/spip/images/{boussole-24.png => plan_site-24.png} (100%) rename www/prive/themes/spip/images/{boussole-32.png => plan_site-32.png} (100%) mode change 100755 => 100644 www/prive/themes/spip/images/plugin-32.png mode change 100755 => 100644 www/prive/themes/spip/images/warning-32.png mode change 100755 => 100644 www/prive/themes/spip/reset.css delete mode 100644 www/rien.gif create mode 100644 www/squelettes-dist/css/font.css delete mode 100644 www/squelettes-dist/css/img/background.png create mode 100644 www/squelettes-dist/css/links.css create mode 100644 www/squelettes-dist/css/media.css delete mode 100644 www/squelettes-dist/css/style.css create mode 100644 www/squelettes-dist/css/theme.css delete mode 100644 www/squelettes-dist/distrib.html create mode 100644 www/squelettes-dist/lang/paquet-dist_fr_tu.php create mode 100644 www/squelettes-dist/lang/paquet-dist_hac.php create mode 100644 www/squelettes-dist/lang/paquet-dist_oc_ni_mis.php create mode 100644 www/squelettes-dist/lang/paquet-dist_uk.php delete mode 100644 www/squelettes-dist/win_width.htc diff --git a/scripts/maj.sh b/scripts/maj.sh index e13d3019..56a84e63 100755 --- a/scripts/maj.sh +++ b/scripts/maj.sh @@ -54,7 +54,7 @@ done if [ ! "$SOURCE" ] then # Par default on prend la branche 3.0 - SOURCE="http://files.spip.org/spip/stable/spip-3.0.zip" + SOURCE="http://files.spip.org/spip/stable/spip-3.2.zip" fi cmd wget \ diff --git a/www/CHANGELOG.txt b/www/CHANGELOG.txt deleted file mode 100644 index ba96f00f..00000000 --- a/www/CHANGELOG.txt +++ /dev/null @@ -1,1618 +0,0 @@ -SPIP-Core spip-3.0.25 -> spip-3.0.26 08 juin 2017 -------------------------------------------------------------- - -r23474 | marcimat | (dim. 12 mars 2017) | Non exécutable. -r23504 | marcimat | (ven. 28 avril 2017) | report de r23502 : Correction d'un problème avec url_de_() depuis r23077 : une URL dans la query string faisait echouer le calcul correct.On enlève la query string avant d'analyser si on a affaire à un "vieux mode http" …Test unitaire ajouté aussi en https://zone.spip.org/trac/spip-zone/changeset/104118 du coup. -r23567 | cedric | (mer. 31 mai 2017) | Report de r23565 : On reintegre facebookexternalhit dans la liste des bots, car on ne veut pas le compter en statistiques, mais on ajoute une constante _IS_BOT_FRIEND qui matche facebookexternalhitLes botfriend ne sont pas rejetes d'un coup de 503 en cas de surcharge serveur, pour eviter les partages sociaux rates -r23571 | guytarr | (dim. 04 juin 2017) | report de c21800, c'est un oubli je suppose - -SPIP-plugins-dist spip-3.0.25 -> spip-3.0.26 08 juin 2017 -------------------------------------------------------------- - -r103243 | Francky | (sam. 11 mars 2017) | DMOZ ferme le 14/03/2017http://www.generation-nt.com/dmoz-fermeture-annuaire-sites-web-actualite-1940186.html -r103293 | Francky | (ven. 17 mars 2017) | Report de https://zone.spip.org/trac/spip-zone/changeset/103292 -r103329 | Francky | (sam. 18 mars 2017) | accents + ajout du "s" au lien de doc -r103330 | Francky | (sam. 18 mars 2017) | coquille -r103416 | Francky | (lun. 20 mars 2017) | Un fichier de langue qui ne sert à rien -r104359 | Francky | (lun. 08 mai 2017) | spip.net est maintenant en https, donc j'ajoute le "s" à http -r104360 | Francky | (lun. 08 mai 2017) | code.spip est maintenant en https, donc j'ajoute le "s" à http -r104361 | Francky | (lun. 08 mai 2017) | - Ce n'est plus http://programmer.spip.org mais http://programmer.spip.net- programmer.spip est maintenant en https, donc, j'ajoute le"s" -r104362 | Francky | (lun. 08 mai 2017) | plugins.spip est maintenant en https, donc j'ajoute le "s" à http -r104363 | Francky | (lun. 08 mai 2017) | contrib.spip est maintenant en https, donc, j'ajoute le "s" à http -r104364 | Francky | (lun. 08 mai 2017) | trad.spip est maintenant en https, donc j'ajoute le "s" à http -r104365 | Francky | (lun. 08 mai 2017) | zone.spip est maintenant en https, donc, j'ajoute le "s" à http -r104644 | Francky | (jeu. 25 mai 2017) | Report de commit de gyutarr :- https://zone.spip.org/trac/spip-zone/changeset/104221- https://zone.spip.org/trac/spip-zone/changeset/104224- https://zone.spip.org/trac/spip-zone/changeset/104236- https://zone.spip.org/trac/spip-zone/changeset/104237 - -SPIP-Core spip-3.0.24 -> spip-3.0.25 06 mars 2017 -------------------------------------------------------------- - -r23221 | marcimat | (sam. 01 oct. 2016) | Report de r23219 : Retour sur r23197 : faire fonctionner correctement les commentaires de debug des slow queries :il faut transmettre $link à la fonction ! -r23222 | cedric | (ven. 07 oct. 2016) | Revert de r23221 : au contraire de mysqli_real_escape_string, mysql_real_escape_string ne prent pas d'argument link en premier(cette difference est la cause du bug sur SPIP 3.1+ corrige par r23219 et reporte a tort sur SPIP 3.0) -r23239 | cedric | (ven. 04 nov. 2016) | Report de r23237 : Fix #3832 : encoder en ascii les URLs internationales avec caracteres UTF avant de faire une requete http dessus -r23245 | marcimat | (ven. 04 nov. 2016) | Report de r23243 : L'enregistrement des fichiers des plugins demandés, mais introuvables, ne listait que le dernier fichier en erreur,depuis l'introduction de la fonction en r18023 . Correction de la coquille donc. -r23279 | eric | (sam. 19 nov. 2016) | Report de 23376.On ajoute une option à la fonction table_valeur() pour permettre de renvoyer la valeur null d'un index existant. -r23280 | eric | (sam. 19 nov. 2016) | On incrémente le numéro de la version SPIP de la branche 3.0 à 3.0.25-dev.En effet, la dernière version stable de cette branche est la 3.0.24 et laisser cette version sur la version en dev est confusionnant mais aussi empêche un plugin de mettre un nécessite sur cette version.On en profite aussi pour mettre à jour en cohérence le paquet.xml. -r23302 | cedric | (mar. 06 déc. 2016) | Report de r23300 : Avec le laxisme qu'il y avait sur sur la saisie de url_site avant r23061 les utilisateurs avaient pris la mauvaise habitude d'eluder le http:// dans la saisieOn gere donc le cas le plus courant : si l'url n'a pas de : et commence par www. on ajoute automatiquement http:// devant, cela simplifie la vie -r23312 | b_b | (jeu. 22 déc. 2016) | report de r23310Fix #3879 : retour sur r23061 qui bloquait l'usage des raccourcis SPIP pour les liens dans le champ url_site de l'auteur -r23314 | b_b | (ven. 23 déc. 2016) | Fix #3881 : report de tardif de r21744 & r23313 afin de rétablir l'usage de _TRI_ARTICLES_RUBRIQUE dans la branche 3.0 -r23317 | rasta | (lun. 02 janv. 2017) | Backport de r23315 : On corrige date_ical, qui pour l'immense majorité des cas DOIT avoir une date avec horaires précises (ce qui se matérialise soit avec l'heure GMT + Z à la fin, soit en donnant le timezone), surtout pour tous les trucs générés par un site (publication d'articles, événement qui se passent à tel endroit, etc). Les seuls rares cas où les horaires dites "flottantes" sont acceptables c'est quand on parle d'une occupation d'un truc qui vaut peu importe l'endroit du genre "ce salarié sera occupé de 8h à 18h, qu'il se trouve à new-york ou paris", bref ça reste rare et surtout sans rapport avec ce qu'on génère nous par défaut, le core et nos plugins. - -SPIP-plugins-dist spip-3.0.24 -> spip-3.0.25 06 mars 2017 -------------------------------------------------------------- - -r100358 | b_b | (ven. 04 nov. 2016) | report de r100356retour sur r99431 : réparer le lien du form d'oubli de mot de passe quand le site est dans un sous dossiersignalé par johan sur spip-dev + merci à cedric pour la solution -r100572 | eric | (sam. 19 nov. 2016) | Report de 100570.Ajout d'une option à bel_env pour afficher clairement les valeurs chaine vide et null. -r100790 | tcharlss | (mer. 30 nov. 2016) | Report sur la branche 3.0 de https://core.spip.net/projects/medias/repository/revisions/100788 : lorsqu'on édite un document, ne pas réassocier les objets qui sont déjà liés au document, cela évite de perdre des informations en refaisant les liaisons (des rôles par exemple). -r100810 | cedric | (sam. 03 déc. 2016) | Report de r100808 : _dist sur les fonctions de ce formulaire, par principe -r100912 | maieul | (jeu. 08 déc. 2016) | report de r100911: première révision d'un objet: prendre effectivement en priorité le champ date_modif ou maj comme date de révision -r101844 | b_b | (ven. 20 janv. 2017) | Fix #3839 : dans les listes de documents, afficher le logo du document et non celui de l'articlereport partiel de r100686 / Ref https://core.spip.net/issues/3889 -r102684 | teddy | (lun. 06 févr. 2017) | C'est inc/charsets avec un 's' et non inc/charset. :-) -r102742 | Francky | (mar. 07 févr. 2017) | haosou est se nomme maintenant so -r102744 | Francky | (mar. 07 févr. 2017) | report de https://zone.spip.org/trac/spip-zone/changeset/102735 -r102815 | Francky | (sam. 11 févr. 2017) | report de https://zone.spip.org/trac/spip-zone/changeset/102814 - - - - - -SPIP-Core spip-3.0.23 -> spip-3.0.24 30 septembre 2016 -------------------------------------------------------------- - -r23176 | b_b | (lun. 26 sept. 2016) | report de r23174Depuis FF 49, la couleur #4444 est considérée valide, ce qui rend les labels du privé bien plus clairs que #666 qui était appliqué avant (ou sous chromium). On passe donc en #444, pour être certain d'avoir un contraste suffisant.Remarque : la couleur appliquée aux labels n'est jamais la même suivant la structure du formulaire (444, 666, 777, etc). Il serait inétréssant d'homogénéiser tout ça. -r23178 | b_b | (mar. 27 sept. 2016) | Fix #3831 : report de r23141 et r23148 -r23183 | cedric | (mar. 27 sept. 2016) | Report de r23179 : ne pas afficher l'url brute venant de la request (Nicolas CHATELAIN) -r23184 | cedric | (mar. 27 sept. 2016) | Report de r23180 : pas d'url absolue dans var_url (Nicolas CHATELAIN) -r23191 | cedric | (mar. 27 sept. 2016) | Report de r23185 : Eviter aussi les urls absolues windows c:\xxx et supprimer le onfocus obsolete au profit d'un placholder innofensif (Nicolas Chatelain) -r23192 | cedric | (mar. 27 sept. 2016) | Report de r23186 : echapper les guillemets dans les noms de fichier pour ne pas generer du code invalide (Nicolas Chatelain) -r23193 | cedric | (mar. 27 sept. 2016) | Report de r23187 : proteger des var_url fantaisistes sur le validateur_xml -r23196 | cedric | (mar. 27 sept. 2016) | Report de r23194 : proteger HTTP_REFERER et var_recherche qui seront utilisee dans le surlignage JS (Rastapopoulos) -r23199 | cedric | (mar. 27 sept. 2016) | Report de r23197 : proteger les commentaires de debug des slow queries -r23202 | cedric | (mer. 28 sept. 2016) | Report de r23200 : - ?exec=valider_xml n'est executable que par les webmestres- var_url ne doit pas contenir de ../../ ni de ..\..\ (windows)- elle ne lance une action que si on a un var_token qui correspond soit a la signature de l'action en POST soit a la signature de l'action+var_url en GET. Ceci evite de faire lancer le validateur par un lien malveillant fourni a un webmstre d'un site auquel on a pas acces (CSRF)(Nicolas Chatelain) -r23208 | cedric | (ven. 30 sept. 2016) | Report de r23206 : verification plus generique pour prendre en compte le cas windows - -SPIP-plugins-dist spip-3.0.23 -> spip-3.0.24 30 septembre 2016 -------------------------------------------------------------- - -r99661 | cedric | (mar. 27 sept. 2016) | Report de r85602 : Fix http://core.spip.org/issues/2938 : quand on met un zip dans tmp/ le memoriser dans la session pour le nettoyer au hit suivant si ce n'est pas un $_POST (ie si on a abandonne l'upload/deballage). Au passage on met les zip dans un sous dossier tmp/zip/ plutot que directement dans tmp/ -r99662 | cedric | (mar. 27 sept. 2016) | Report de r99659 : Complement a r85602 : utiliser la variable de session et ne passer qu'un md5 du chemin du zip dans le formulaire - - -SPIP-Core spip-3.0.22 -> spip-3.0.23 23 septembre 2016 -------------------------------------------------------------- - -r22923 | cedric | (ven. 11 mars 2016) | version : ici on est en 3.0.23-dev -r22924 | cedric | (ven. 11 mars 2016) | oups commit par erreur dans r22923 -r22930 | fil | (dim. 13 mars 2016) | report de r22929 : le robot facebook est mechant mais il est aussi bete, il faut donc le laisser faire son travail + mise a jour de la version de l'écran -r22941 | cedric | (jeu. 17 mars 2016) | define('_CALCUL_PROFILER',300) permet de loger dans le profiler les calculs de squelette qui prennent plus de 300ms(a eclaircir : quand une boucle est lente et prends plusieurs secondes, cela n'affecte pas le temps calcule ici) -r22948 | cedric | (jeu. 17 mars 2016) | Report de r22946 : un pipeline auth_administrer permet de personaliser le retour des differentes fonctions d'auth (par exemple pour renforcer la verification du mot de passe, quand flux['args']['fonction']=='verifier_pass' -r22950 | cedric | (jeu. 17 mars 2016) | Report de r22055 : Permettre de choisir une langue par defaut autre que le francais -- utile pour les sites a destination d'un public non francophone, et qui utilise des plugins partiellement traduits -- clot #3292 -r22951 | cedric | (jeu. 17 mars 2016) | Report de r22062 : Il manquait des elements pour que le parametrage de la langue par defaut soit operationnel -r22983 | b_b | (mer. 13 avril 2016) | report de r22981ne plus limiter la longueur maxi des logins dans test_login() -r23015 | denisb | (lun. 23 mai 2016) | ecrire/inc/utils.php : on affecte une vraie valeur à $prefs. report de r23013 -r23025 | b_b | (lun. 06 juin 2016) | report de r23023complément à r20876 : pas de data dans le champ url_site -r23032 | cedric | (sam. 11 juin 2016) | Report de r23030 : Bugfix erreur SQL sur langue_choisie, notamment lors de la syndication :il faut verifier l'existence du champ qui n'est pas systematique avec un champ lang+ prendre un argument $serveur en plus par coherence+ reports precedents sur les appels de calculer_langues_rubriques() -r23038 | cedric | (lun. 13 juin 2016) | Report de r23036 : fixer le bug d'inclusion introduit par r23030 -r23059 | cedric | (sam. 25 juin 2016) | Report de r23057 : recuperer_infos_distantes() renvoyait a tort un tableau avec pour seul argument un mime_type vide quand le document n'existait pas, pouvant laisser croire a son existence. On sort explicitement avec false dans ce cas, comme prevu. Et on essaye meme pas de recuperer l'URL si la source fournie n'en est pas une -r23062 | cedric | (lun. 27 juin 2016) | Report de r23060 : suite de r23023 et r20876 : soyons carrement restrictif sur ce qu'on attend -r23065 | cedric | (lun. 27 juin 2016) | Report de r23063 : Sanitizer/controler les entree fournies a valider_xml_ok (Thomas Chauchefoin) -r23068 | cedric | (lun. 27 juin 2016) | Report de r23066 : passer entites_html sur les id ajax par precaution (Guillaume Fahrer) -r23071 | cedric | (lun. 27 juin 2016) | Report de r23069 : quand on faisait recherche=/ cela etait considere a tort comme une regexp (Thomas Chauchefoin) -r23079 | cedric | (mar. 28 juin 2016) | Report de r23077 : report de r23049 sans le bug : si la request string contient le protocole et le host, il faut les depiler (cf test http://zone.spip.org/trac/spip-zone/changeset/98585) -r23100 | cedric | (mer. 06 juil. 2016) | Report de r23098 : tester_url_absolue() n'accepte pas le protocole file:// car on est sur le web -r23105 | cedric | (jeu. 07 juil. 2016) | Report de r23103 : completer r23098 : exclure tous les protocoles qui ne sont pas des URL mais que php accepte dans ses fonctions de lecture (guy) -r23108 | cedric | (jeu. 07 juil. 2016) | Report de r23106 : suite de 23103 : la casse qui peut tout casser -r23111 | marcimat | (jeu. 07 juil. 2016) | Report de r23109 : Compléter r23103 : retirer le protocole 'zip' également, et phpdoc plus à jour. -r23153 | cedric | (ven. 09 sept. 2016) | Report de r23151 : Eviter d'accepter n'importe quoi dans les redirect de l'espace prive (Tim Coen) -r23156 | cedric | (mar. 13 sept. 2016) | Report de r23154 : Quand un charger_fonction echoue renvoyer un 404 (et inliner les css si jamais on cherhcait un /truc.api/ pour que le rendu soit bon) -r23158 | marcimat | (lun. 19 sept. 2016) | Parenthèse en trop dans r23154 (RealET) -r23167 | cedric | (jeu. 22 sept. 2016) | Report de r23165 : le modele de mail utilise lors de l'inscription est modifiable via le tableau options de inscrire_auteur() - -SPIP-plugins-dist spip-3.0.22 -> spip-3.0.23 23 septembre 2016 -------------------------------------------------------------- - -r96125 | b_b | (lun. 21 mars 2016) | report de r93291il ne faut pas faire une alerte si c'est le form de forum en dessous de la previsu qu'on submit a nouveaucf https://core.spip.net/issues/3515 -r96640 | Nicod | (ven. 15 avril 2016) | report de r96638Générer des urls publiques dans les notifications de forums publics. -r97979 | Yohann | (mar. 24 mai 2016) | Ajout d’une fonction aux statistiques pour désactiver les referers. Des fois, on en a pas besoin, et ça prend de la place (beaucoup !) dans les tables SQL. -r98016 | Francky | (mar. 24 mai 2016) | Il y a eu une coquille dans le dernier commit, la version passait de 0.4.36 à 0.4.4Je change le donc le z pour lui mettre 37 -r98068 | cedric | (jeu. 26 mai 2016) | Certains flux RSS publient l'integralite de leur contenus (par exemple http://www.lelotenaction.org/pages/do/rss.xml) ce qui produit inevitablement un timeout lors de l'analyse et de la syndication.On optimise les fonctions cdata_echappe et cdata_echappe_retour, et on limite la syndication aux 1000 premiers items, surchargeable par la constante _SYNDICATION_MAX_ITEMS -r98104 | Yohann | (dim. 29 mai 2016) | On revert r97979 de la branche de maintenance. -r98274 | rasta | (jeu. 09 juin 2016) | Backport de [98272] : Correction de bug : il manquait pour les documents, ce qui empêchait par exemple l'inseration des traductions ou autre ajout de ce genre. -r98562 | cedric | (sam. 25 juin 2016) | Report de r98560 : plusieurs petits bugs sur les documents distants mal formates qui pourraient exister en base par des operations peu avouables, on teste systematiquement que le fichier ressemble bien a une URL avant de s'y fier -r98605 | cedric | (mer. 29 juin 2016) | fix r96640 qui annoncait reporter r96638 mais avait reporte le true en false -r99156 | b_b | (dim. 14 août 2016) | report de r99153revert de r86810Ref la kermesse de ​​https://core.spip.net/issues/3368 -r99434 | cedric | (ven. 09 sept. 2016) | Report de r99431 : l'URL de rappel de mot de passe doit etre une URL safe, on la force sur l'adresse_site parametree dans la configuration du site - - - -SPIP-Core spip-3.0.21 -> spip-3.0.22 10 mars 2016 -------------------------------------------------------------- - -r22472 | ben | (dim. 01 nov. 2015) | 3.0.22-dev ! tonton -r22476 | b_b | (mar. 03 nov. 2015) | report de r22475Fix #3422 : classer les rubriques du picker ajax par rang, puis ordre alpha (maieul) -r22483 | b_b | (mer. 04 nov. 2015) | report de r22482Fix #2745 : ajouter au htaccess la règle qui permet de servir les favicons des itrucs (commentée par défaut) -r22491 | marcimat | (jeu. 05 nov. 2015) | Suppression d'un $requeter défini en double (azerttyu, via damien, via exakat.io).+ phpdoc de ces 2 fonctions tant qu'on y est. -r22512 | marcimat | (ven. 06 nov. 2015) | Report de r22511 (et r22510 !) : Correction suite à un report un peu erronné en r17385 et r17386 (mauvais copier / coller !) -r22536 | cedric | (mar. 10 nov. 2015) | Report de r22530 : indentation et PHPDoc -r22537 | cedric | (mar. 10 nov. 2015) | Report de r22531 : type dans PHPDoc (marcimat) -r22538 | cedric | (mar. 10 nov. 2015) | Report de r22532 : PHPDoc, indentation -r22539 | cedric | (mar. 10 nov. 2015) | Report de r22534 : Generalisation de la prise en charge de utilisable par les plugins pour signaler qu'ils fournissent le service d'un autre pluginsi le procure est dans une version plus recente que le plugin du meme nom, c'est le procure qui l'emportePour les procure, on attribue un faux repertoire compose du repertoire du plugin qui procure suivi de /procure:xxxxce qui permet si besoin de savoir a partir de _DIR_PLUGIN_XXXX que c'est un procure, et qui procure.+ renommage d'une variable ambigue dans plugin_valide_resume -r22559 | kent1 | (lun. 16 nov. 2015) | Report de r22558Forcer la couleur de ces h6 pour éviter des cas illisibles où le container a pour couleur #fff par exemple -r22590 | rasta | (mar. 24 nov. 2015) | Backport de r22588 en 3.0 : On ajoute un fallback à la fonction url_de_base() avec d'utiliser adresse_site en dernier recours. Cela permet d'avoir une URL de site dans tous les cas, même quand on ne navigue pas avec un client web classique (par exemple en CLI, mais ça peut être d'autres types d'appel). -r22592 | marcimat | (mar. 24 nov. 2015) | Report de r22591 : Erreur dans r22534 : $p n'est pas un tableau, mais le préfixe ! -r22600 | erational | (jeu. 26 nov. 2015) | report de https://core.spip.net/projects/spip/repository/revisions/22599 -r22603 | cedric | (dim. 29 nov. 2015) | Report de r22602 : copie_locale prend un 4e argument optionnel pour specifier une taille maxi du telechargement (#3527) -r22607 | cedric | (dim. 29 nov. 2015) | Report de r22606 : #3588 : n'appeller spip_clear_opcode_cache que lorsqu'on ecrit un fichier PHP (perf issue) -r22609 | cedric | (dim. 29 nov. 2015) | Report de r22608 : oups : erreur sur r22606, toute ecriture de fichier provoquait un echec -r22631 | cedric | (dim. 06 déc. 2015) | Fix #3542 : z-index du date-picker superieur a celui des icones et de la navigation principale -r22633 | cedric | (dim. 06 déc. 2015) | Fix #3542 : probleme de overflow -r22637 | b_b | (mar. 08 déc. 2015) | report de r22636 / Fix #3614 : affichage des icones en RTL (George) -r22650 | cedric | (ven. 11 déc. 2015) | Report de r22648 : Fix #3617 : la fonction objet_modifier_champ utilise options[data] pour verifier les conflit, et si non fourni ou nul se rabat sur $_POST pour assurer la continuite de fonctionnement -r22651 | cedric | (ven. 11 déc. 2015) | Report de r22649 : Fix #3617 : passer $set a objet_modifier_champs pour qu'elle ne detecte les conflits sur $_POST que quand c'est pertinent -r22655 | cedric | (sam. 12 déc. 2015) | Report de r22652 : Full Path Disclosure dans le phraseur. Lorsqu'un symbole d'avant-boucle n'avait pas son chevron fermant,le compilateur signalait bien l'erreur mais produisait quand même du code PHP,leque étant syntaxiquement faux produisait une erreur PHP. Bonne stratégie: poursuivre la compilation un caractère après le chevron ouvrant de cette avant-boucle pour traquer les éventuelles erreurs plus loi. -r22656 | cedric | (sam. 12 déc. 2015) | Indentation (soupe d'espaces et de tabulations) -r22680 | cedric | (mer. 16 déc. 2015) | option peut prendre une valeur 'action' passee aux pipelines pre/post edition -r22684 | cedric | (ven. 18 déc. 2015) | r22281 et r22282 ont introduit une dependance de la fonction liens_absolus aux fonctions extraire_attribut et inserer_attribut, mais qui ne sont pas forcement chargees. Faire un include_spip au besoin -r22687 | cedric | (lun. 21 déc. 2015) | coquille affreuse dans r22603 qui cassait copie_locale -r22693 | denisb | (ven. 01 janv. 2016) | bonne année. -r22695 | erational | (ven. 01 janv. 2016) | backport SPIP 3.1: éviter le problème avec set_magic_quotes_runtime avec les versions PHP5.3+ -r22698 | cedric | (lun. 04 janv. 2016) | Report de r22697 : utiliser PHP_VERSION_ID plutot que version_compare pour ce code execute a chaque hit (perf issue) + emuler PHP_VERSION_ID si besoin -r22721 | cedric | (lun. 11 janv. 2016) | Report de r22719 : Perf issue sur les filtres images appliques sur des images distantes en 404 :[(#VAL{http://example.org/fichier_inexistant.png}|image_reduire{64,64})] provoquait 3 operations file_exists sur http://example.org/fichier_inexistant.png.srcque PHP interprete en faisant 3 hits http sur le fichier sauf si PHP bloque ce type d'operation. -r22781 | b_b | (mar. 02 févr. 2016) | report de r22779 : réparer le lien d'accès rapide vers la recherche (cf #3634) -r22803 | james | (sam. 06 févr. 2016) | report @22801: éviter des warning dans les logs (Camille Sauvage) -r22806 | james | (sam. 06 févr. 2016) | report de r22805 -r22816 | james | (mar. 09 févr. 2016) | report r22814 -r22820 | james | (mar. 09 févr. 2016) | report r22818 -r22824 | marcimat | (mer. 10 févr. 2016) | Report de r22822 : Le cnx doit être de la même forme dans tous les cas de retour, avec ou sans le login trouvé dans le formulaire de login. Clos https://core.spip.net/issues/3690 (Stéph R). -r22834 | marcimat | (dim. 14 févr. 2016) | Report de r22833 : Coquille sur un log. -r22840 | cedric | (jeu. 18 févr. 2016) | Catcher les erreurs de eval(), ce qui permet de generer une erreur squelette propre avec le nom du squelette qui a genere l'erreur, information qui manquait cruellement. Les utilisatateurs non admin ne voient pas l'erreur, et on genere un commentaire html a la place du resultat -r22841 | cedric | (jeu. 18 févr. 2016) | Suite de r22840 : on expose le code PHP du squelette qui fait l'erreur d'eval, avec numerotation des -r22865 | b_b | (ven. 26 févr. 2016) | report de r22863Fix #3660 : éviter de retomber sur _MEMORY_LIMIT_MIN quand memory_limit est défini à -1 dans php.ini -r22874 | rasta | (jeu. 03 mars 2016) | Juste des tabulations et espacements, pour y voir plus clair et ne pas mélanger avec des vraies modifs. -r22875 | rasta | (ven. 04 mars 2016) | Déplantage de la balise #RANG quand on a déclaré autre chose qu'un simple champ pour le titre (par exemple une expression avec fonctions et virgules).On garde exactement le même fonctionnement qu'avant avec un "AS titre_rang" rajouté. Mais on fait deux tests au lieu d'un seul :- d'abord on cherche le titre en se disant que "lang" est défini AVANT- et si on ne trouve pas, là on prend depuis le débutMais dans les deux cas, vu que c'est séparé en deux, et qu'on cherche "lang" explicitement et pas une virgule toute seule : on peut donc prendre tout caractère pour le titre, y compris les virgules qu'il y aurait dans des fonctions.Cela gère donc bien tous les cas, enfin de toute façon plus de cas qu'avant. -r22885 | rasta | (mar. 08 mars 2016) | Backport de #22884 : échapper les apostrophes (quote simple) dans les appels javascript. -r22888 | rasta | (mar. 08 mars 2016) | Backport de r22887 : Pour le javascript on fait un plus brutal "textebrut", là au moins ça marche. -r22901 | cedric | (jeu. 10 mars 2016) | Report de r22899 : Mise a jour de la liste des bots : Moreover|FunWebProducts|facebook|hootsuite|MetaURI|flipboard sont tous des bots -r22903 | cedric | (jeu. 10 mars 2016) | Report de r22872 : Fix #3680 : on change le format du contexte ajax pour pouvoir verifier la cle de signature du contexte avant de deserializer, ce qui permet de faire confiance au contenu -r22909 | cedric | (jeu. 10 mars 2016) | un var_isbot pour permettre le monitoring par robot (monitoring de la disponibilite user/robot)+ mise a jour de la liste des robots -r22910 | cedric | (jeu. 10 mars 2016) | un filtre filtrer_entites - -SPIP-plugins-dist spip-3.0.21 -> spip-3.0.22 10 mars 2016 -------------------------------------------------------------- - -r92729 | marcimat | (sam. 07 nov. 2015) | Report de r92728: Il manquait le préfixe sur l'appel d'une chaine de langue. -r92931 | real3t | (sam. 14 nov. 2015) | Ajout du moteur Lilo pour les statistiques -r92992 | cedric | (mer. 18 nov. 2015) | Robustesse de la detection du titre qui pouichait quand la balise title etait sur plusieurs (contexte.com) -r92995 | cedric | (mer. 18 nov. 2015) | On etend la prise en charge de _SYNDICATION_DEREFERENCER_URL a tout flux en verifiant que les URLs syndiquees ne sont pas des redirections, et en recuperant l'URL finale le cas echeant -r92996 | cedric | (mer. 18 nov. 2015) | quand syndication=non mais qu'il y a des articles, afficher la liste en plus du bouton pour purger, car sinon on ne sait pas ce qu'on purge -r93070 | eric | (sam. 21 nov. 2015) | Report des initialisations de certaines variables de la fonction printWordWrapped -r93160 | guytarr | (mer. 25 nov. 2015) | report de [93159] (coquille) -r93278 | cedric | (sam. 28 nov. 2015) | Version 1.5.5 de CSSTidy (bugfix font shorthand avec font-family:inherit) -r93285 | cedric | (dim. 29 nov. 2015) | Report de r93284 : Fix https://core.spip.net/issues/3527 : accepter les paquets jusqu'a 64Mo, personalisable par la constante _SVP_PAQUET_MAX_SIZE -r93407 | cedric | (dim. 06 déc. 2015) | Report de r93406 : Fix https://core.spip.net/issues/3571 : ne pas risquer que les fonctions de substitution cache_(get|set) du plugin soient utilisees par ailleurs car elles ne sont pas concues pour cela. On simplifie donc l'approche en les renommant et en les chargeant de deleguer aux fonctions de memoization si presentes -r93426 | cedric | (lun. 07 déc. 2015) | bugfix sur les URLs des pages uniques (id_parent=-1) : on ne pouvait pas les supprimer, et leur id_parent les faisait passer devant une rubrique racine dans une recherche d'URL -r93430 | cedric | (lun. 07 déc. 2015) | Utiliser partout autoriser(modifierurl) au lieu de autoriser(modifier) car cette derniere repond false quand l'objet n'existe plus en base, et dans ce cas precis on veut pouvoir supprimer l'URLautoriser(modifierurl) verifie donc si l'objet existe encore en base et dans le cas contraire on s'en remet a autoriser(administrer,url) -r93499 | pierre | (mer. 09 déc. 2015) | Espaces insécables -r93500 | pierre | (mer. 09 déc. 2015) | Annuler le commit précédent sur les espaces insécables.C'est probablement sur la chaine de langue qu'il faut intervenir.Elle est dans ecrire_fr.php, ne faudrait-il pas la déplacer dans le plugin forum texte_statut_publiestexte_statut_attente_validation? -r93710 | cedric | (mer. 16 déc. 2015) | Un hreflang sur les articles syndiques qui ne sont pas dans la langue courante -r93711 | cedric | (mer. 16 déc. 2015) | utiliser objet_modifier_champs plutot que sql_updateq, cela permet de passer par les pipelines pre/post edition -r93712 | cedric | (mer. 16 déc. 2015) | passer l'action 'syndiquer' a objet_modifier_champs -r93713 | cedric | (mer. 16 déc. 2015) | version -r93746 | erational | (jeu. 17 déc. 2015) | Le tri par défaut doit être en multi titre pour respecter la langue(report de http://zone.spip.org/trac/spip-zone/changeset/93745 ) -r94397 | denisb | (ven. 01 janv. 2016) | bonne année. -r95237 | Francky | (ven. 19 févr. 2016) | Ne sont que pour spip 3.0, ils ont une autre version pour spip 3.1 -r95523 | b_b | (ven. 26 févr. 2016) | quelques pétouilles pour ie cf https://core.spip.net/issues/3650 -r95524 | b_b | (ven. 26 févr. 2016) | encore des CDATA à échapper cf https://core.spip.net/issues/3650pour plus d'infos sur les différentes syntaxes voir http://javascript.about.com/library/blxhtml.htm -r95651 | b_b | (mar. 01 mars 2016) | report de r85647 cf https://core.spip.net/issues/2283 -r95776 | cedric | (sam. 05 mars 2016) | Eviter une notice - -SPIP-Core spip-3.0.20 -> spip-3.0.21 31 octobre 2015 -------------------------------------------------------------- - -r22267 | cedric | (mer. 24 juin 2015) | Quand la source image est dans IMG/ et contient une query-string complexe et que le fichier existe sans la query-string, on l'ignore. Repare le traitement des images qui ont une URL restreinte basee sur la query-string+htaccess -r22282 | fil | (lun. 29 juin 2015) | report de #22281 (https://core.spip.net/issues/3456) -r22315 | cedric | (lun. 20 juil. 2015) | Reparer la desinstallation des plugins dans _DIR_PLUGINS_SUPPL -r22326 | cedric | (ven. 24 juil. 2015) | Report de r22325 : Fix #3504 : purge des autosave cvt en session -r22327 | cedric | (ven. 24 juil. 2015) | Report de r21817 : 0 est une valeur acceptable pour un champ obligatoire (Frederic, Pierretux) -r22342 | cedric | (sam. 25 juil. 2015) | Fix #3510 : parametre_url sur les arguments de type tableau. On backporte la version du trunk 3.1 sur laquelle le bug a ete corrige -r22344 | cedric | (dim. 26 juil. 2015) | Report de r22343 : Fix #3494 : quand la date de redaction anterieure est utilisee, il faut pouvoir l'editer sur un article en cours de redaction, comme avant, mais sans permettre l'edition de la date.On robustifie traiter() en verifiant le droit a edition qui a ete calcule dans charger() avant de prendre en compte les request, ce qui evite tout risque de manipulation du form et d'injection d'input en html+ Report de r22338 au passage -r22362 | kent1 | (mar. 28 juil. 2015) | Récupérer le title et le hreflang du lien entourant un modèle cf #3516 -r22384 | kent1 | (mer. 12 août 2015) | Gros bug sur r22282 (cf #3456)Le passage en liens absolus se faisait uniquement sur le premier href ou src, remplaçant le premier href ou src par le dernier href / src présent dans le texte...On ne remplaçait plus lien par lien -r22392 | erational | (mar. 25 août 2015) | report de c22360 -r22393 | erational | (mar. 25 août 2015) | arménien en code HTML -r22402 | rasta | (jeu. 03 sept. 2015) | RAH. On corrige enfin ce fichu gros bug du compilateur qui faisait qu'on ne pouvait pas avoir un critère conditionnel ET plusieurs arguments.Ça marchait pour les critères sans arguments ou avec un seul argument.La raison ? Non-factorisation et doublonnage de code : actuellement, les critères mêmes persos (pas juste les trucs SQL) qui ont 0 ou 1 arguments, ne passent PAS par le même code que ceux avec 2 ou plus. Alors qu'ensuite le traitement et la regex associée sont quasiment les mêmes… mais pas tout à fait, puisque dans le cas 2 ou plus ça ne cherchait pas le "?".Pour l'instant on corrige juste le bug, mais il faudrait nettoyer le code et factoriser pour ne plus générer d'erreur de ce genre…Au passage, pour SPIP 3.0, on backport la correction du "_" manquant qui faisait, là aussi qu'avec 2 arguments ou plus, on avait pas le droit d'avoir des critères avec_plusieurs_mots, alors qu'on peut avec 0 ou 1 argument. Même raison : code fait deux fois différemment, dont la regex. -r22434 | erational | (ven. 16 oct. 2015) | pas d'accent sur Kreyòl (Peyi Dayiti) -r22436 | cedric | (lun. 19 oct. 2015) | On ajoute l'heure de publication au survol de la date, cela est utile pour faire de la programmation intensive d'article a l'avance -r22442 | cedric | (mar. 27 oct. 2015) | Report de r22441 : r17234 a introduit un include_spip() au debut de base/connect_sql.php, ce qui etait une erreur car ce fichier est inclus par inc_version avant toute initialisation du core et chargement des caches.Du coup chaque hit provoquait une invalidation du chemin car find_in_path appele trop tot croyait que son find etait nouveau, donc le hit se finissait par une ecriture du fichier tmp/cache/chemin.txt.Comme ce fichier peut etre assez gros (>100ko) et ecrit en posant un verrou, cela impactait la performance par un debit d'ecriture sur le disque et des possibles attentes entre hit concourants.Bug repere par nicod en 3.0 et confirme par RealET en 3.1 -r22444 | cedric | (mar. 27 oct. 2015) | Report de r22443 : Complement a r22441 : ne pas lever le flag en cas de find_in_path appele trop tot si le fichier n'est pas trouve -r22449 | cedric | (jeu. 29 oct. 2015) | Report de r22427 : #3371 Les squelettes de l'espace prive recoivent un flag espace_prive=1 a toute fin utile -r22450 | cedric | (jeu. 29 oct. 2015) | Report de r22428 : Fix #3371 : dans la fonction typo, si un flag espace_prive=1 est present dans le env, on echappe tout html suspect, ie qui ne passe pas a travers safehtml sans censure. Pour limiter l'impact perfo on conditionne l'echappement a la presence des caracteres < et = dans le texte, c'est a dire une balise avec un attribut, ce qui ne traitera donc quasiment aucun contenu par defaut, sauf quelques rares ou autre curiosite de ce type -r22451 | cedric | (jeu. 29 oct. 2015) | Report de r22429 : oups oubli dans r22428 : cas de typo appele en php depuis l'espace prive -r22452 | b_b | (jeu. 29 oct. 2015) | report de r22346Fix #3430 : les boucles avec langue utilisaient lang_select_public() qui changeait sauvagement la langue en debut de boucle, sans la restaurer en fin de boucle, provoquant des bugs de contexteOn modifie la compulation des boucles : lang_select_public() appelle toujours lang_select(...) avec eventuellement la langue inchangee, et la boucle finit par un lang_select() qui depile et restaure la langue pour l'iteration suivante. - -SPIP-plugins-dist spip-3.0.20 -> spip-3.0.21 31 octobre 2015 -------------------------------------------------------------- - -r91143 | kent1 | (mar. 28 juil. 2015) | Récupérer le title et le hreflang du lien entourant un modèle cf #3516 -r91205 | cedric | (jeu. 30 juil. 2015) | bug lors d'une erreur a la creation d'un mot (confirmation sur un doublon par exexemple) -r91206 | cedric | (jeu. 30 juil. 2015) | complement a r91205 -r91209 | cy_altern | (jeu. 30 juil. 2015) | report de 91148 (acces de google bot aux js et css) -r91271 | cedric | (mer. 05 août 2015) | On ne verifie et alerte sur le doublon de titre de mot cle uniquement si c'est un nouveau mot cle ou si on retitre un mot cle existant, sinon c'est penible -r91274 | cedric | (mer. 05 août 2015) | ne pas syndiquer un site en refuse -r91290 | real3t | (ven. 07 août 2015) | Mise à jour pour la reconnaissance des moteurs de recherche. Reportable en 2.1. -r91384 | real3t | (dim. 16 août 2015) | Un paramètre de plus reconnu pour Google -r91608 | kent1 | (jeu. 03 sept. 2015) | Report de la fonctionnalité de z91607"Faire prendre en compte à la prévisu l'hypothétique dir="ltr" ou dir="rtl" sur le textarea" -r91797 | marcimat | (sam. 12 sept. 2015) | Report de r91796 : Le pipeline "afficher_contenu_objet" n'était pas appelé pour l'affichage des groupes de mots sur la page exec=mots. -r92079 | chankalan | (mar. 29 sept. 2015) | pour affichage des colonnes des visites, report de http://zone.spip.org/trac/spip-zone/changeset/91091/ et http://zone.spip.org/trac/spip-zone/changeset/91404/ -r92236 | cedric | (sam. 10 oct. 2015) | Report de r92235 : soyons un peu moins bisounours : les diff necessitent aussi un interdire_scripts comme tous les contenus affiches dans l'espace prive -r92513 | b_b | (jeu. 29 oct. 2015) | Report de r92512 : éviter d'afficher le script d'autosave dans la prévisu d'un forum quand le site est en mode parano avec $filtrer_javascript = -1;Ref ​https://core.spip.net/issues/3413 merci Équipement -r92523 | b_b | (jeu. 29 oct. 2015) | report de r92522 : éviter une erreur PHP Strict Standards: Only variables should be passed by reference (Eric Camus)Ref ​https://core.spip.net/issues/3373 -r92525 | b_b | (jeu. 29 oct. 2015) | version 0.80.27 : report de r92524fix installation d'un plugin qui nécessite un plugin du core sur un site neuf, ​https://core.spip.net/issues/3572À la fin de svp_ajouter_depot(), utiliser svp_actualiser_paquets_locaux(true) qui, comme son nom l'indique, actualise les paquets locaux puis supprime les paquets locaux avec l'option true.Merci marcimat :) -r92568 | real3t | (sam. 31 oct. 2015) | Et report en 3.0 -r92576 | real3t | (sam. 31 oct. 2015) | Sur une suggestion de Franck, intégration de Haosou dont parle cet article. -r92578 | Francky | (sam. 31 oct. 2015) | Il semble que sogou soit un moteur en chinehttp://www.journaldunet.com/solutions/expert/59882/haosoule-moteur-de-recherche-qui-pourrait-changer-le-monde-du-seo-chinois.shtml -r92580 | Francky | (sam. 31 oct. 2015) | Rangement alphabétique - -SPIP-Core spip-3.0.19 -> spip-3.0.20 23 juin 2015 -------------------------------------------------------------- -r22106 | ben | (sam. 09 mai 2015) | 3.0.20 dev -r22111 | cedric | (sam. 09 mai 2015) | #3418 : loger les creations de table pour debusquer le bug -r22112 | cedric | (sam. 09 mai 2015) | #3418 : purger les opcode cache y compris sur php-fpm (a valider) / Credits pour le patch https://www.drupal.org/node/779482 -r22121 | cedric | (dim. 10 mai 2015) | Report de r22115 : realpath pour faire un clear opcode cache -r22122 | cedric | (dim. 10 mai 2015) | Report de r22116 : #3418 : Octave utilise une configuration foireuse de opcode cache, qui persiste 2s apres modification du fichier sans possibilite de l'invalider manuellement. On essaye donc de detecter cette configuration et de faire un sleep() le temps que le cache soit invalide -r22123 | cedric | (dim. 10 mai 2015) | Report de r22118 : Affectation de variable inutile (inutilisée) dans r22116. -r22124 | cedric | (dim. 10 mai 2015) | Report de r22119 : Complement a r22116 : deplacer les de code dans une fonction qui peut resservir dans un plugin si necessaire -r22125 | cedric | (dim. 10 mai 2015) | Report de r22120 : Commenter les logs inutiles de r22111, on conserve la verification et seconde tentative de creation de table en cas d'echec -r22155 | erational | (lun. 18 mai 2015) | un warning de moins. -r22204 | b_b | (ven. 05 juin 2015)| Report de r22203 / Fix #3440 : éviter la disparition du texte du troisième onglet de l'installation sous firefox win$ (merci à Franck pour le signalement) -r22208 | b_b | (mar. 09 juin 2015)| report de r22201 / Fixe #3418 : complément à r22119 ajouter une seconde à la durée de opcache.revalidate_freq, sans quoi on retombe dans le cache -r22246 | cedric | (ven. 19 juin 2015)| Report de r22245 : une option mtime sur purger_repertoire pour supprimer uniquement les fichiers plus anciens que filemtime donne -r22247 | rasta | (ven. 19 juin 2015)| Charger la l'API autoriser avant de l'utiliser… On rappelle que SPIP n'utilise pas d'autoload, et que donc on DOIT TOUJOURS penser à charger les API avant de les utiliser. :) -r22252 | toutati | (dim. 21 juin 2015)| un petit {tout} qui permet d'afficher la liste des traductions, même si l'article a une rubrique en -1 (cas du plugin pages uniques) - -SPIP-plugins-dist spip-3.0.19 -> spip-3.0.20 23 juin 2015 -------------------------------------------------------------- -r89160 | eric | (ven. 08 mai 2015) | Le décideur prend la première version compatible des plugins dépendants si plusieurs sont disponibles. Autant prendre la version la plus élevée. -r89163 | eric | (ven. 08 mai 2015) | oubli d'incrément. -r89165 | cedric | (ven. 08 mai 2015) | Fix https://core.spip.net/issues/3398 : date_thread ne doit etre mis a jour que si le message est publie -r89169 | franck | (ven. 08 mai 2015) | Ce n'est plus http://core.spip.org mais https://core.spip.net -r89230 | cedric | (sam. 09 mai 2015) | Report de r89229 : Fix https://core.spip.net/issues/2899 : erreur 404 mal geree en urls propres -r89281 | marcimat | (dim. 10 mai 2015) | Corriger #3416 : ne pas afficher obsolète un plugin local en présence d'une version plus élevée du même plugin, mais non compatible avec ce SPIP.Notons que le terme 'obsolète' ne convient pas vraiment. En effet, dans le cas suivants, tous 2 compatibles avec notre SPIP :A : prefixe TOTO | v1.0.0 | stableB : prefixe TOTO | v1.1.0 | stableC : prefixe TOTO | v1.1.1 | testAlors - A est considéré obsolète (OK)- B n'est pas considéré obsolète (OK)- C est considéré obsolète (hum…)En fait un terme 'prioritaire' sur B à true, et false sur les autres aurait été plus adapté. Parce que C n'est pas tellement obsolète,juste plus à jour, mais d'un état inférieur. -r89311 | marcimat | (mar. 12 mai 2015) | Report de r85634 : Eviter des "Warning: Illegal string offset..." (Oxymore)(JandB) -r89345 | marcimat | (jeu. 14 mai 2015) | Report de r89344 : Fermer véritablement #3398 car la correction r89165 n'avait pas vu un piège et créait un beau warning :$t, censé être un tableau, était réaffecté au dessus pour recevoir l'identifiant du thread.On nomme pour ce cas correctement la variable. -r89347 | marcimat | (jeu. 14 mai 2015) | Report de r89346 : Ferme #3443 et suite de #3380 , qui complète r89155 (et 89157) : il faut que l'autorisation d'associer des documents, tout commele fait déjà la nouvelle autorisation de dissocier des documents, prenne en compte les identifiants négatifs.Ils correspondent à l'ajout d'un document sur un nouvel article encore en édition et non encore enregistré (pas d'id_article connu),ce qui affecte le document avec 0-$id_auteur qui l'a envoyé. -r89691 | marcimat | (mer. 27 mai 2015) | Correction d'un cas très particulier lors de l'installation de SPIP et du plugin organiseur, si un pluginappelle la fonction 'creer_base()' avant l'installation du plugin organiseur. (Cas qui peut arriversi quelqu'un ajoute au moins un plugin dans plugins-dist qui fait cela, avant d'avoir installé SPIP)Dans ce cas, la table 'spip_messages' est déjà créée, et Organiseur croit que l'on vient d'une mise à jourd'un vieux SPIP. Et à ce moment là, il ne crée pas les colonnes nécessaires (imessage et messagerie) dans SPIP auteurs,mais par contre il fait toutes les procédures de mises à jour.Du coup, on ajoute une procédure de mise à jour qui peut créer ces champs s'ils manquent.Corrige une erreur «Critère inconnu =» sur le squelettes prive/objets/liste/auteurs-enligne à l'installation.À noter que ce squelette dans SPIP fait appel à la colonne imessage depuis https://core.spip.net/projects/spip/repository/revisions/21401 , alors que ce champ estdéclaré dans ce plugin. Peut être faudrait il surcharger le squelette dans ce plugin pour permettre à SPIP de pouvoir fonctionner sans. -r89923 | real3t | (ven. 05 juin 2015)| Ce bouton actualiser la liste des plugins était tellement bas que j'étais passé à côté (merci Marcimat pour le signalement) -r89933 | real3t | (ven. 05 juin 2015)| Revert à la demande d'Eric : une boite d'info, c'est dans la navigation (bon, moi, je pense que c'est une boite de raccourcis, mais...) -r90060 | b_b | (mar. 09 juin 2015)| Report de r90059Fix ​https://core.spip.net/issues/3452 : rétablir la possibilité de joindre un document sur un forumSuite à r89155, il faut définir les autorisation autoriser_forum_associerdocuments_dist et autoriser_forum_dissocierdocuments_dist pour permettre de lier/délier un document à un message de forum. Les deux fonctions renvoient toujours true pour que cela fonctionne, voir remarques ici ​https://core.spip.net/issues/3452#note-4 -r90353 | cedric | (ven. 19 juin 2015)| Report de r90352 : Detection des flooders : quand un utilisateur comptabilise plus de 200 visites d'articles dans une visite,on note son IP dans le dossier tmp/flood/Au bout de 24H (redefinissable via la constante _IP_FLOOD_TTL) on la supprime de tmp/flood/Ces IP reperees peuvent ensuite etre considerees comme des BOT ou meme kickee temporairement, au choix, action a ajouter dans le mes_options.php par exemple -r90358 | real3t | (ven. 19 juin 2015)| Report de [90354] et [90356] : Retour sur [89155] : il est autorise d'associer des documents a d'autres documents, certains plugins le font deja, evitons la casse pas trop justifiee (b_b, kent1, RealET) - - -SPIP-Core spip-3.0.17 -> spip-3.0.19 08 mai 2015 -------------------------------------------------------------- -r21519 | ben | (mer. 13 août 2014) | Allez reparton(ton) en dev pour un tour -r21529 | ben | (jeu. 21 août 2014) | Pas d'onglet dans le nom de la fonction d'autorisation. Permet à un redacteur de pouvoir remodifier la langue et la couleur dans l'espace privé -r21531 | eric | (ven. 22 août 2014) | Eviter des "illegal offset" si l'utilisateur n'est pas connecté (déjà corrigé en 3.1). -r21536 | rasta | (ven. 05 sept. 2014) | Oups : mauvais "type" appelé pour la fonction d'autorisation pour celleux qui veulent la personnaliser : il ne faut pas garder le "configurer_" qui est déjà dans le "faire" !Cela ne change rien à la sécurité, c'est toujours l'autorisation "configurer" qui est appelée par défaut. -r21539 | cedric | (mar. 09 sept. 2014) | Fix #2013 : le filtrage /auteur du statut de previsu introduit par r21500 n'etait pas pris en compte dans autoriser_previsualiser_dist() ce qui ne rendait plus visible le lien de prévisu sur les articles en cours de redaction. -r21542 | b_b | (mar. 09 sept. 2014) | report de r21541 : maj url contrib (Francky) -r21543 | suske | (mer. 10 sept. 2014) | Suite à forum.spip.net/fr_258607.html, retour partiel sur http://core.spip.org/projects/spip/repository/revisions/21272. On retire de _PROTEGE_BLOCS car cela casse le fonctionnement annoncé dans la doc (http://www.spip.net/fr_article3016.html: "on peut en réalité ajouter ... de manière très large (en clair : on peut ajouter tout au début du texte, et tout à la fin...).). L'incompatibilité perdure en 3.1-dev => revoir la doc ou revoir la rupture de compat ou proposer une màj élégante dans les textes ? -r21544 | b_b | (mer. 10 sept. 2014) | pétouille (d'ailleurs je me demande pourquoi on ne colle toujours pas d'accents dans nos commentaires ?) -r21555 | cedric | (jeu. 18 sept. 2014) | accessibilité : ce onkeypress provoquait un submit lorsqu'on quittait le focus de la recherche, en navigation au clavier. Il n'est pas necessaire, on le vire (Armony) -r21556 | cedric | (ven. 19 sept. 2014) | la page infos_perso est une variante de la page auteur avec un id_auteur implicite. On la traite de maniere derogatoire pour que les plugins y ajoutent leurs blocs comme sur la page auteur (Philippe) -r21557 | cedric | (sam. 20 sept. 2014) | Accessibilité : quand un formulaire est dans une zone aria-live="true", le screen reader vocalise chaque frappe de caractere par une relecture complete du bloc, ce qui est absolument insupportable. On devrait pouvoir ameliorer cela avec un aria-relevant adapté sur la zone, mais à tester/affiner. En attendant on pose un aria-live="off" sur les balises
contenues dans les blocs ajax, ce qui rétablit un confort d'utilisation acceptable (Armony) On pose tous ces attributs aria en JS, pour ne pas risquer d'avoir l'un sans l'autre. -r21558 | cedric | (sam. 20 sept. 2014) | Accessibilité : expliciter la fonction du bouton qui fixe la reference des traductions (balise alt de
et title du "); + "
"); exit; } -?> diff --git a/www/ecrire/inc/drapeau_edition.php b/www/ecrire/inc/drapeau_edition.php index 394a86ff..6e51ffaf 100644 --- a/www/ecrire/inc/drapeau_edition.php +++ b/www/ecrire/inc/drapeau_edition.php @@ -3,109 +3,170 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; - -// Drapeau d'edition : on regarde qui a ouvert quel objet editorial en -// edition, et on le signale aux autres redacteurs pour eviter de se marcher -// sur les pieds - -// Le format est une meta drapeau_edition qui contient un tableau -// serialise -// type_objet => (id_objet => (id_auteur => (nom_auteur => (date_modif)))) - -// a chaque mise a jour de ce tableau on oublie les enregistrements datant -// de plus d'une heure - -// Attention ce n'est pas un verrou "bloquant", juste un drapeau qui signale -// que l'on bosse sur cet objet editorial ; les autres peuvent passer outre -// (en cas de communication orale c'est plus pratique) +/** + * Gestion des drapeaux d'édition + * + * Drapeau d'edition : on regarde qui a ouvert quel objet éditorial en + * édition, et on le signale aux autres redacteurs pour éviter de se marcher + * sur les pieds + * + * Le format est une meta drapeau_edition qui contient un tableau sérialisé + * `type_objet => (id_objet => (id_auteur => (nom_auteur => (date_modif))))` + * + * À chaque mise à jour de ce tableau on oublie les enregistrements datant + * de plus d'une heure + * + * Attention ce n'est pas un verrou "bloquant", juste un drapeau qui signale + * que l'on bosse sur cet objet editorial ; les autres peuvent passer outre + * (en cas de communication orale c'est plus pratique) + * + * @package SPIP\Core\Drapeaux\Edition + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -// http://doc.spip.org/@lire_tableau_edition -function lire_tableau_edition () { +/** + * Retourne le tableau des éléments édités en cours après avoir supprimé + * les éléments trop vieux (de plus d'une heure) du tableau. + * + * @uses ecrire_tableau_edition() + * + * @return array + * Tableau des éléments édités actuellement, par objet et auteur, du type : + * `[ type d'objet ][id_objet][id_auteur][nom de l'auteur] = time()` + **/ +function lire_tableau_edition() { $edition = @unserialize($GLOBALS['meta']['drapeau_edition']); - if (!$edition) return array(); + if (!$edition) { + return array(); + } $changed = false; - $bon_pour_le_service = time()-3600; + $bon_pour_le_service = time() - 3600; // parcourir le tableau et virer les vieux foreach ($edition as $objet => $data) { - if (!is_array($data)) - unset ($edition[$objet]); // vieille version - else foreach ($data as $id => $tab) { - if (!is_array($tab)) - unset ($edition[$objet][$tab]); // vieille version - else foreach ($tab as $n => $duo) { - if (current($duo) < $bon_pour_le_service) { - unset($edition[$objet][$id][$n]); - $changed = true; + if (!is_array($data)) { + unset($edition[$objet]); + } // vieille version + else { + foreach ($data as $id => $tab) { + if (!is_array($tab)) { + unset($edition[$objet][$tab]); + } // vieille version + else { + foreach ($tab as $n => $duo) { + if (current($duo) < $bon_pour_le_service) { + unset($edition[$objet][$id][$n]); + $changed = true; + } + } + } + if (!$edition[$objet][$id]) { + unset($edition[$objet][$id]); } } - if (!$edition[$objet][$id]) - unset($edition[$objet][$id]); } - if (!$edition[$objet]) + if (!$edition[$objet]) { unset($edition[$objet]); + } } - if ($changed) + if ($changed) { ecrire_tableau_edition($edition); + } return $edition; } -// http://doc.spip.org/@ecrire_tableau_edition +/** + * Enregistre la liste des éléments édités + * + * @uses ecrire_meta() + * + * @param array $edition + * Tableau des éléments édités actuellement, par objet et auteur, du type : + * `[ type d'objet ][id_objet][id_auteur][nom de l'auteur] = time()` + **/ function ecrire_tableau_edition($edition) { ecrire_meta('drapeau_edition', serialize($edition)); } /** - * J'edite tel objet - * si l'objet est non editable dans l'espace prive, ne pas retenir le signalement - * qui correspond a un process unique + * Signale qu'un auteur édite tel objet + * + * Si l'objet est non éditable dans l'espace privé, ne pas retenir le signalement + * qui correspond à un process unique. * - * http://doc.spip.org/@signale_edition + * @see lire_tableau_edition() + * @see ecrire_tableau_edition() * * @param int $id - * @param $auteur + * Identifiant de l'objet + * @param array $auteur + * Session de l'auteur * @param string $type - * @return mixed + * Type d'objet édité */ -function signale_edition ($id, $auteur, $type='article') { +function signale_edition($id, $auteur, $type = 'article') { include_spip('base/objets'); include_spip('inc/filtres'); - if (objet_info($type,'editable')!=='oui') + if (objet_info($type, 'editable') !== 'oui') { return; + } $edition = lire_tableau_edition(); - if (isset($auteur['id_auteur']) and $id_a = $auteur['id_auteur']) + if (isset($auteur['id_auteur']) and $id_a = $auteur['id_auteur']) { $nom = $auteur['nom']; - else + } else { $nom = $id_a = $GLOBALS['ip']; - if (!is_array($edition[$type][$id])) + } + + if (!isset($edition[$type][$id]) or !is_array($edition[$type][$id])) { $edition[$type][$id] = array(); + } $edition[$type][$id][$id_a][$nom] = time(); ecrire_tableau_edition($edition); } -// Qui edite mon objet ? -// http://doc.spip.org/@qui_edite -function qui_edite ($id, $type='article') { +/** + * Qui édite mon objet ? + * + * @see lire_tableau_edition() + * + * @param integer $id + * Identifiant de l'objet + * @param string $type + * Type de l'objet + * @return array + * Tableau sous la forme `["id_auteur"]["nom de l'auteur"] = time()` + */ +function qui_edite($id, $type = 'article') { $edition = lire_tableau_edition(); - return $edition ? $edition[$type][$id] : array(); + return empty($edition[$type][$id]) ? array() : $edition[$type][$id]; } -// http://doc.spip.org/@mention_qui_edite -function mention_qui_edite ($id, $type='article') { +/** + * Afficher les auteurs ayant édités récemment l'objet. + * + * @param integer $id + * Identifiant de l'objet + * @param string $type + * Type de l'objet + * @return array + * Liste de tableaux `['nom_auteur_modif' => x|y|z, 'date_diff' => n]` + */ +function mention_qui_edite($id, $type = 'article') { $modif = qui_edite($id, $type); unset($modif[$GLOBALS['visiteur_session']['id_auteur']]); @@ -115,72 +176,94 @@ function mention_qui_edite ($id, $type='article') { $auteurs[] = typo(key($duo)); $quand = max($quand, current($duo)); } + // format lie a la chaine de langue 'avis_article_modifie' return array( 'nom_auteur_modif' => join(' | ', $auteurs), - 'date_diff' => ceil((time()-$quand) / 60) + 'date_diff' => ceil((time() - $quand) / 60) ); } } /** - * Quels sont les objets en cours d'edition par X ? + * Quels sont les objets en cours d'édition par `$id_auteur` ? * - * http://doc.spip.org/@liste_drapeau_edition + * @uses lire_tableau_edition() * - * @param $id_auteur + * @param int $id_auteur + * Identifiant de l'auteur * @return array + * Liste de tableaux `['objet' => x, 'id_objet' => n]` */ -function liste_drapeau_edition ($id_auteur) { +function liste_drapeau_edition($id_auteur) { $edition = lire_tableau_edition(); $objets_ouverts = array(); - foreach ($edition as $objet => $data) - foreach ($data as $id => $auteurs) - { + foreach ($edition as $objet => $data) { + foreach ($data as $id => $auteurs) { if (isset($auteurs[$id_auteur]) - AND is_array($auteurs[$id_auteur]) // precaution - AND (array_pop($auteurs[$id_auteur]) > time()-3600)) { + and is_array($auteurs[$id_auteur]) // precaution + and (array_pop($auteurs[$id_auteur]) > time() - 3600) + ) { $objets_ouverts[] = array( - 'objet'=>$objet, + 'objet' => $objet, 'id_objet' => $id, ); } } + } + return $objets_ouverts; } -// Quand l'auteur veut liberer tous ses objets (tous types) -// http://doc.spip.org/@debloquer_tous +/** + * Quand l'auteur veut libérer tous ses objets (tous types) + * + * @uses lire_tableau_edition() + * @uses ecrire_tableau_edition() + * + * @param integer $id_auteur + * @return void + */ function debloquer_tous($id_auteur) { $edition = lire_tableau_edition(); foreach ($edition as $objet => $data) { - foreach ($data as $id => $auteurs) - { + foreach ($data as $id => $auteurs) { if (isset($auteurs[$id_auteur])) { - unset ($edition[$objet][$id][$id_auteur]); + unset($edition[$objet][$id][$id_auteur]); ecrire_tableau_edition($edition); } } } } -// quand l'auteur libere un objet precis -// http://doc.spip.org/@debloquer_edition -function debloquer_edition($id_auteur, $id_objet, $type='article') { +/** + * Quand l'auteur libère un objet précis + * + * @uses lire_tableau_edition() + * @uses ecrire_tableau_edition() + * + * @param integer $id_auteur + * Identifiant de l'auteur + * @param integer $id_objet + * Identifiant de l'objet édité + * @param string $type + * Type de l'objet + * @return void + */ +function debloquer_edition($id_auteur, $id_objet, $type = 'article') { $edition = lire_tableau_edition(); - foreach ($edition as $objet => $data){ + foreach ($edition as $objet => $data) { if ($objet == $type) { - foreach ($data as $id => $auteurs) - { + foreach ($data as $id => $auteurs) { if ($id == $id_objet - AND isset($auteurs[$id_auteur])) { - unset ($edition[$objet][$id][$id_auteur]); + and isset($auteurs[$id_auteur]) + ) { + unset($edition[$objet][$id][$id_auteur]); ecrire_tableau_edition($edition); } } } } } -?> diff --git a/www/ecrire/inc/editer.php b/www/ecrire/inc/editer.php index 51f59f02..55680e9e 100644 --- a/www/ecrire/inc/editer.php +++ b/www/ecrire/inc/editer.php @@ -3,138 +3,281 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Fonctions d'aide à l'édition d'objets éditoriaux. + * + * @package SPIP\Core\Edition + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('base/abstract_sql'); -// http://doc.spip.org/@formulaires_editer_objet_traiter -function formulaires_editer_objet_traiter($type, $id='new', $id_parent=0, $lier_trad=0, $retour='', $config_fonc='articles_edit_config', $row=array(), $hidden=''){ +/** + * Effectue les traitements d'un formulaire d'édition d'objet éditorial + * + * Exécute une action d'édition spécifique au type d'objet s'il elle existe + * (fonction action_editer_$type), sinon exécute l'action générique + * d'édition d'objet (action_editer_objet_dist()) + * + * Si une traduction était demandée, crée le lien avec l'objet qui est + * traduit. + * + * @api + * @see action_editer_objet_dist() + * + * @param string $type + * Type d'objet + * @param int|string $id + * Identifiant de l'objet à éditer, 'new' pour un nouvel objet + * @param int $id_parent + * Identifiant de l'objet parent + * @param int $lier_trad + * Identifiant de l'objet servant de source à une nouvelle traduction + * @param string $retour + * URL de redirection après les traitements + * @param string $config_fonc + * Nom de fonction appelée au chargement permettant d'ajouter des + * valeurs de configurations dans l'environnement du formulaire + * @param array $row + * Ligne SQL de l'objet édité, si connu. + * En absence, les données sont chargées depuis l'objet en base s'il existe + * ou depuis l'objet source d'une traduction si c'est un nouvel objet + * (et une traduction). + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés (input hidden) + * du formulaire. + * @return array + * Retour des traitements. + **/ +function formulaires_editer_objet_traiter( + $type, + $id = 'new', + $id_parent = 0, + $lier_trad = 0, + $retour = '', + $config_fonc = 'articles_edit_config', + $row = array(), + $hidden = '' +) { $res = array(); // eviter la redirection forcee par l'action... set_request('redirect'); - if ($action_editer = charger_fonction("editer_$type",'action',true)) { - list($id,$err) = $action_editer($id); - } - else { - $action_editer = charger_fonction("editer_objet",'action'); - list($id,$err) = $action_editer($id,$type); + if ($action_editer = charger_fonction("editer_$type", 'action', true)) { + list($id, $err) = $action_editer($id); + } else { + $action_editer = charger_fonction('editer_objet', 'action'); + list($id, $err) = $action_editer($id, $type); } $id_table_objet = id_table_objet($type); $res[$id_table_objet] = $id; - if ($err OR !$id){ - $res['message_erreur'] = ($err?$err:_T('erreur')); - } - else{ + if ($err or !$id) { + $res['message_erreur'] = ($err ? $err : _T('erreur')); + } else { // Un lien de trad a prendre en compte - if ($lier_trad){ + if ($lier_trad) { // referencer la traduction - $referencer_traduction = charger_fonction('referencer_traduction','action'); + $referencer_traduction = charger_fonction('referencer_traduction', 'action'); $referencer_traduction($type, $id, $lier_trad); - // dupliquer tous les liens sauf les auteurs : le nouvel auteur est celui qui traduit - // cf API editer_liens - include_spip('action/editer_liens'); - objet_dupliquer_liens($type,$lier_trad,$id,null,array('auteur')); + // actions de recopie de champs / liens sur le nouvel objet créé + $completer_traduction = charger_fonction('completer_traduction', 'inc'); + $err = $completer_traduction($type, $id, $lier_trad); + if ($err) { + $res['message_erreur'] = $err; + return $res; + } } $res['message_ok'] = _T('info_modification_enregistree'); if ($retour) { - if (strncmp($retour,'javascript:',11)==0){ - $res['message_ok'] .= ''; + if (strncmp($retour, 'javascript:', 11) == 0) { + $res['message_ok'] .= ''; $res['editable'] = true; + } else { + $res['redirect'] = parametre_url($retour, $id_table_objet, $id); } - else - $res['redirect'] = parametre_url($retour,$id_table_objet,$id); } } + return $res; } -// http://doc.spip.org/@formulaires_editer_objet_verifier -function formulaires_editer_objet_verifier($type,$id='new', $oblis = array()){ +/** + * Teste les erreurs de validation d'un formulaire d'édition d'objet éditorial + * + * La fonction teste que : + * - il n'y a pas de conflit d'édition sur un ou plusieurs champs (c'est à + * dire que personne d'autre n'a modifié le champ entre le moment où on + * a saisi et le moment où on a validé le formulaire + * - tous les champs obligatoires (listés dans $oblis) sont remplis. + * + * @api + * + * @param string $type + * Type d'objet + * @param int|string $id + * Identifiant de l'objet à éditer, 'new' pour un nouvel objet + * @param array $oblis + * Liste de champs obligatoires : ils doivent avoir un contenu posté. + * @return array + * Tableau des erreurs + **/ +function formulaires_editer_objet_verifier($type, $id = 'new', $oblis = array()) { $erreurs = array(); if (intval($id)) { - $conflits = controler_contenu($type,$id); - if ($conflits AND count($conflits)) { - foreach($conflits as $champ=>$conflit) { - if (!isset($erreurs[$champ])) { $erreurs[$champ] = ''; } - $erreurs[$champ] .= _T("alerte_modif_info_concourante")."
"; + $conflits = controler_contenu($type, $id); + if ($conflits and count($conflits)) { + foreach ($conflits as $champ => $conflit) { + if (!isset($erreurs[$champ])) { + $erreurs[$champ] = ''; + } + $erreurs[$champ] .= _T('alerte_modif_info_concourante') . "
'; } } } - foreach($oblis as $obli) { + foreach ($oblis as $obli) { $value = _request($obli); - if (is_null($value) OR !(is_array($value)?count($value):strlen($value))) { - if (!isset($erreurs[$obli])) { $erreurs[$obli] = ''; } - $erreurs[$obli] .= _T("info_obligatoire"); + if (is_null($value) or !(is_array($value) ? count($value) : strlen($value))) { + if (!isset($erreurs[$obli])) { + $erreurs[$obli] = ''; + } + $erreurs[$obli] .= _T('info_obligatoire'); } } + return $erreurs; } -// http://doc.spip.org/@formulaires_editer_objet_charger -function formulaires_editer_objet_charger($type, $id='new', $id_parent=0, $lier_trad=0, $retour='', $config_fonc='articles_edit_config', $row=array(), $hidden=''){ +/** + * Construit les valeurs de chargement d'un formulaire d'édition d'objet éditorial + * + * La fonction calcule les valeurs qui seront transmises à l'environnement + * du formulaire pour son affichage. Ces valeurs sont les champs de l'objet + * éditorial d'une part, mais aussi d'autres calculant la clé d'action, + * les pipelines devant faire transiter le contenu HTML du formulaire, + * ainsi que différents champs cachés utilisés ensuite dans les traitements. + * + * Lorsqu'une création d'objet est demandée, ou lorsqu'on demande une traduction + * d'un autre, la fonction tente de précharger le contenu de l'objet en + * utilisant une fonction inc_precharger_{type}_dist permettant par exemple + * de remplir le contenu avec du texte, notamment avec la traduction source. + * + * @api + * + * @param string $type + * Type d'objet + * @param int|string $id + * Identifiant de l'objet à éditer, 'new' pour un nouvel objet + * @param int $id_parent + * Identifiant de l'objet parent + * @param int $lier_trad + * Identifiant de l'objet servant de source à une nouvelle traduction + * @param string $retour + * URL de redirection après les traitements + * @param string $config_fonc + * Nom de fonction appelée au chargement permettant d'ajouter des + * valeurs de configurations dans l'environnement du formulaire + * @param array $row + * Ligne SQL de l'objet édité, si connu. + * En absence, les données sont chargées depuis l'objet en base s'il existe + * ou depuis l'objet source d'une traduction si c'est un nouvel objet + * (et une traduction). + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés (input hidden) + * du formulaire. + * @return array + * Environnement du formulaire. + **/ +function formulaires_editer_objet_charger( + $type, + $id = 'new', + $id_parent = 0, + $lier_trad = 0, + $retour = '', + $config_fonc = 'articles_edit_config', + $row = array(), + $hidden = '' +) { $table_objet = table_objet($type); $table_objet_sql = table_objet_sql($type); $id_table_objet = id_table_objet($type); $new = !is_numeric($id); // Appel direct dans un squelette if (!$row) { - if (!$new OR $lier_trad) { - if ($select = charger_fonction("precharger_" . $type, 'inc', true)) + if (!$new or $lier_trad) { + if ($select = charger_fonction('precharger_' . $type, 'inc', true)) { $row = $select($id, $id_parent, $lier_trad); - else $row = sql_fetsel('*',$table_objet_sql,$id_table_objet."=".intval($id)); - if (!$new) + } else { + $row = sql_fetsel('*', $table_objet_sql, $id_table_objet . '=' . intval($id)); + } + if (!$new) { $md5 = controles_md5($row); + } } if (!$row) { - $trouver_table = charger_fonction('trouver_table','base'); - if ($desc = $trouver_table($table_objet)) - foreach($desc['field'] as $k=>$v) $row[$k]=''; + $row = array(); + $trouver_table = charger_fonction('trouver_table', 'base'); + if ($desc = $trouver_table($table_objet)) { + foreach ($desc['field'] as $k => $v) { + $row[$k] = ''; + } + } } } // Gaffe: sans ceci, on ecrase systematiquement l'article d'origine // (et donc: pas de lien de traduction) - $id = ($new OR $lier_trad) + $id = ($new or $lier_trad) ? 'oui' : $row[$id_table_objet]; $row[$id_table_objet] = $id; $contexte = $row; - if (strlen($id_parent) && is_numeric($id_parent) && (!isset($contexte['id_parent']) OR $new)){ - if (!isset($contexte['id_parent'])) unset($contexte['id_rubrique']); - $contexte['id_parent']=$id_parent; - } - elseif (!isset($contexte['id_parent'])){ + if (strlen($id_parent) && is_numeric($id_parent) && (!isset($contexte['id_parent']) or $new)) { + if (!isset($contexte['id_parent'])) { + unset($contexte['id_rubrique']); + } + $contexte['id_parent'] = $id_parent; + } elseif (!isset($contexte['id_parent'])) { // id_rubrique dans id_parent si possible if (isset($contexte['id_rubrique'])) { $contexte['id_parent'] = $contexte['id_rubrique']; unset($contexte['id_rubrique']); - } - else{ + } else { $contexte['id_parent'] = ''; } if (!$contexte['id_parent'] - AND $preselectionner_parent_nouvel_objet = charger_fonction("preselectionner_parent_nouvel_objet","inc",true)) - $contexte['id_parent'] = $preselectionner_parent_nouvel_objet($type,$row); + and $preselectionner_parent_nouvel_objet = charger_fonction('preselectionner_parent_nouvel_objet', 'inc', true) + ) { + $contexte['id_parent'] = $preselectionner_parent_nouvel_objet($type, $row); + } } - if ($config_fonc) + $config = array(); + if ($config_fonc) { $contexte['config'] = $config = $config_fonc($contexte); - if (!isset($config['lignes'])) $config['lignes'] = 0; + } + $config = $config + array( + 'lignes' => 0, + 'langue' => '', + ); + $att_text = " class='textarea' " - . " rows='" - . ($config['lignes'] +15) - . "' cols='40'"; - if (isset($contexte['texte'])) - list($contexte['texte'],$contexte['_texte_trop_long']) = editer_texte_recolle($contexte['texte'],$att_text); + . " rows='" + . ($config['lignes'] + 15) + . "' cols='40'"; + if (isset($contexte['texte'])) { + list($contexte['texte'], $contexte['_texte_trop_long']) = editer_texte_recolle($contexte['texte'], $att_text); + } // on veut conserver la langue de l'interface ; // on passe cette donnee sous un autre nom, au cas ou le squelette @@ -145,78 +288,86 @@ function formulaires_editer_objet_charger($type, $id='new', $id_parent=0, $lier_ } $contexte['_hidden'] = "\n" . - (!$lier_trad ? '' : - ("\n" . - "\n")) - . $hidden - . (isset($md5) ? $md5 : ''); - - - if (isset($contexte['extra'])) - $contexte['extra'] = unserialize($contexte['extra']); + (!$lier_trad ? '' : + ("\n" . + "\n")) + . $hidden + . (isset($md5) ? $md5 : ''); + // preciser que le formulaire doit passer dans un pipeline - $contexte['_pipeline'] = array('editer_contenu_objet',array('type'=>$type,'id'=>$id)); + $contexte['_pipeline'] = array('editer_contenu_objet', array('type' => $type, 'id' => $id)); // preciser que le formulaire doit etre securise auteur/action // n'est plus utile lorsque l'action accepte l'id en argument direct - // on le garde pour compat - $contexte['_action'] = array("editer_$type",$id); + // on le garde pour compat + $contexte['_action'] = array("editer_$type", $id); return $contexte; } -// -// Gestion des textes trop longs (limitation brouteurs) -// utile pour les textes > 32ko - -// http://doc.spip.org/@coupe_trop_long -function coupe_trop_long($texte){ +/** + * Gestion des textes trop longs (limitation brouteurs) + * utile pour les textes > 32ko + * + * @param string $texte + * @return array + */ +function coupe_trop_long($texte) { $aider = charger_fonction('aider', 'inc'); - if (strlen($texte) > 28*1024) { - $texte = str_replace("\r\n","\n",$texte); - $pos = strpos($texte, "\n\n", 28*1024); // coupe para > 28 ko + if (strlen($texte) > 28 * 1024) { + $texte = str_replace("\r\n", "\n", $texte); + $pos = strpos($texte, "\n\n", 28 * 1024); // coupe para > 28 ko if ($pos > 0 and $pos < 32 * 1024) { - $debut = substr($texte, 0, $pos)."\n\n\n"; + $debut = substr($texte, 0, $pos) . "\n\n\n"; $suite = substr($texte, $pos + 2); } else { - $pos = strpos($texte, " ", 28*1024); // sinon coupe espace + $pos = strpos($texte, ' ', 28 * 1024); // sinon coupe espace if (!($pos > 0 and $pos < 32 * 1024)) { - $pos = 28*1024; // au pire (pas d'espace trouv'e) + $pos = 28 * 1024; // au pire (pas d'espace trouv'e) $decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere } else { $decalage = 1; } - $debut = substr($texte,0,$pos + $decalage); // Il faut conserver l'espace s'il y en a un - $suite = substr($texte,$pos + $decalage); + $debut = substr($texte, 0, $pos + $decalage); // Il faut conserver l'espace s'il y en a un + $suite = substr($texte, $pos + $decalage); } - return (array($debut,$suite)); + + return (array($debut, $suite)); + } else { + return (array($texte, '')); } - else - return (array($texte,'')); } -// http://doc.spip.org/@editer_texte_recolle -function editer_texte_recolle($texte, $att_text) -{ - if ((strlen($texte)<29*1024) - OR (include_spip('inc/layer') AND ($GLOBALS['browser_name']!="MSIE")) ) - return array($texte,""); +/** + * Formater un `$texte` dans `textarea` + * + * @param string $texte + * @param string $att_text + * @return array + */ +function editer_texte_recolle($texte, $att_text) { + if ((strlen($texte) < 29 * 1024) + or (include_spip('inc/layer') and ($GLOBALS['browser_name'] != 'MSIE')) + ) { + return array($texte, ''); + } include_spip('inc/barre'); - $textes_supplement = "
"._T('info_texte_long')."\n"; + $textes_supplement = "
" . _T('info_texte_long') . "\n"; $nombre = 0; - while (strlen($texte)>29*1024) { - $nombre ++; - list($texte1,$texte) = coupe_trop_long($texte); - $textes_supplement .= "
" . + while (strlen($texte) > 29 * 1024) { + $nombre++; + list($texte1, $texte) = coupe_trop_long($texte); + $textes_supplement .= '
' . "\n"; - } - return array($texte,$textes_supplement); + } + + return array($texte, $textes_supplement); } /** @@ -226,58 +377,81 @@ function editer_texte_recolle($texte, $att_text) * @param $champs_contenu * @param int $longueur */ -function titre_automatique($champ_titre,$champs_contenu,$longueur=null){ - if (!_request($champ_titre)){ - $titrer_contenu = charger_fonction('titrer_contenu','inc'); - if (!is_null($longueur)) - $t = $titrer_contenu($champs_contenu,null,$longueur); - else +function titre_automatique($champ_titre, $champs_contenu, $longueur = null) { + if (!_request($champ_titre)) { + $titrer_contenu = charger_fonction('titrer_contenu', 'inc'); + if (!is_null($longueur)) { + $t = $titrer_contenu($champs_contenu, null, $longueur); + } else { $t = $titrer_contenu($champs_contenu); - if ($t) - set_request($champ_titre,$t); + } + if ($t) { + set_request($champ_titre, $t); + } } } /** - * Determiner un titre automatique, - * a partir des champs textes de contenu + * Déterminer un titre automatique, + * à partir des champs textes de contenu + * + * Les textes et le titre sont pris dans les champs postés (via `_request()`) + * et le titre calculé est de même affecté en tant que champ posté. * * @param array $champs_contenu - * liste des champs contenu textuels + * Liste des champs contenu textuels * @param array|null $c * tableau qui contient les valeurs des champs de contenu - * si null on utilise les valeurs du POST + * si `null` on utilise les valeurs du POST * @param int $longueur - * longueur de coupe + * Longueur de coupe du texte * @return string */ -function inc_titrer_contenu_dist($champs_contenu, $c=null, $longueur=50){ +function inc_titrer_contenu_dist($champs_contenu, $c = null, $longueur = 50) { // trouver un champ texte non vide - $t = ""; - foreach($champs_contenu as $champ){ - if ($t = _request($champ,$c)) + $t = ''; + foreach ($champs_contenu as $champ) { + if ($t = _request($champ, $c)) { break; + } } - if ($t){ + if ($t) { include_spip('inc/texte_mini'); - $t = couper($t,$longueur,"..."); + $t = couper($t, $longueur, '...'); } return $t; } -// Produit la liste des md5 d'un tableau de donnees, sous forme -// de inputs html -// http://doc.spip.org/@controles_md5 -function controles_md5($data, $prefixe='ctr_', $format='html'){ - if (!is_array($data)) +/** + * Calcule des clés de contrôles md5 d'un tableau de données. + * + * Produit la liste des md5 d'un tableau de données, normalement un + * tableau des colonnes/valeurs d'un objet éditorial. + * + * @param array $data + * Couples (colonne => valeur). La valeur est un entier ou un texte. + * @param string $prefixe + * Préfixe à appliquer sur les noms des clés de contrôles, devant le + * nom de la colonne + * @param string $format + * - html : Retourne les contrôles sous forme de input hidden pour un formulaire + * - autre : Retourne le tableau ('$prefixe$colonne => md5) + * @return bool|string|array + * - false si pas $data n'est pas un tableau + * - string (avec format html) : contrôles dans des input hidden + * - array sinon couples ('$prefixe$colonne => md5) + **/ +function controles_md5($data, $prefixe = 'ctr_', $format = 'html') { + if (!is_array($data)) { return false; + } $ctr = array(); foreach ($data as $key => $val) { $m = md5($val); - $k = $prefixe.$key; + $k = $prefixe . $key; switch ($format) { case 'html': @@ -289,27 +463,63 @@ function controles_md5($data, $prefixe='ctr_', $format='html'){ } } - if ($format == 'html') - return "\n\n\n".join("\n", $ctr)."\n\n"; - else + if ($format == 'html') { + return "\n\n\n" . join("\n", $ctr) . "\n\n"; + } else { return $ctr; + } } -// http://doc.spip.org/@controler_contenu -function controler_contenu($type, $id, $options=array(), $c=false, $serveur='') { +/** + * Contrôle les contenus postés d'un objet en vérifiant qu'il n'y a pas + * de conflit d'édition + * + * Repère les conflits d'édition sur un ou plusieurs champs. C'est à + * dire lorsqu'une autre personne a modifié le champ entre le moment où on + * a édité notre formulaire et le moment où on a validé le formulaire + * + * @param string $type + * Type d'objet + * @param int $id + * Identifiant de l'objet + * @param array $options + * Tableau d'options. Accèpte les index : + * - nonvide : Couples (colonne => valeur par défaut). Tous les champs + * postés qui sont vides, s'il y en a dans cette option, sont remplacés + * par la valeur indiquée + * - prefix : Préfixe des clés de contrôles ('ctr_' par défaut). Une clé + * de controle tel que 'ctr_titre' contient le md5 du titre au moment + * de l'édition. + * @param array|bool $c + * Tableau de couples (colonne=>valeur) à tester. + * Non renseigné, la fonction prend toutes les colonne de l'objet via + * _request() + * @param string $serveur + * Nom du connecteur de base de données + * @return bool|null|array + * False si aucun champ posté. + * Null si aucune modification sur les champs. + * Tableau vide si aucun de conflit d'édition. + * Tableau (clé => tableau du conflit). L'index est la colonne en conflit, + * la valeur un tableau avec 2 index : + * - base : le contenu du champ en base + * - post : le contenu posté + **/ +function controler_contenu($type, $id, $options = array(), $c = false, $serveur = '') { include_spip('inc/filtres'); $table_objet = table_objet($type); $spip_table_objet = table_objet_sql($type); - $id_table_objet = id_table_objet($type); $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table_objet, $serveur); // Appels incomplets (sans $c) if (!is_array($c)) { - foreach($desc['field'] as $champ=>$ignore) - if(_request($champ)) + foreach ($desc['field'] as $champ => $ignore) { + if (_request($champ)) { $c[$champ] = _request($champ); + } + } } // Securite : certaines variables ne sont jamais acceptees ici @@ -323,51 +533,81 @@ function controler_contenu($type, $id, $options=array(), $c=false, $serveur='') unset($c['id_secteur']); // Gerer les champs non vides - if (isset($options['nonvide']) AND is_array($options['nonvide'])) - foreach ($options['nonvide'] as $champ => $sinon) - if ($c[$champ] === '') - $c[$champ] = $sinon; + if (isset($options['nonvide']) and is_array($options['nonvide'])) { + foreach ($options['nonvide'] as $champ => $sinon) { + if ($c[$champ] === '') { + $c[$champ] = $sinon; + } + } + } // N'accepter que les champs qui existent - // TODO: ici aussi on peut valider les contenus - // en fonction du type + // [TODO] ici aussi on peut valider les contenus en fonction du type $champs = array(); - foreach($desc['field'] as $champ => $ignore) - if (isset($c[$champ])) + foreach ($desc['field'] as $champ => $ignore) { + if (isset($c[$champ])) { $champs[$champ] = $c[$champ]; + } + } // Nettoyer les valeurs $champs = array_map('corriger_caracteres', $champs); // Envoyer aux plugins - $champs = pipeline('pre_edition', + $champs = pipeline( + 'pre_edition', array( 'args' => array( 'table' => $spip_table_objet, // compatibilite 'table_objet' => $table_objet, 'spip_table_objet' => $spip_table_objet, - 'type' =>$type, + 'type' => $type, 'id_objet' => $id, - 'champs' => isset($options['champs'])?$options['champs']:array(), // [doc] c'est quoi ? - 'action' => 'controler' + 'champs' => isset($options['champs']) ? $options['champs'] : array(), // [doc] c'est quoi ? + 'action' => 'controler', + 'serveur' => $serveur, ), 'data' => $champs ) ); - if (!$champs) return false; + if (!$champs) { + return false; + } // Verifier si les mises a jour sont pertinentes, datees, en conflit etc - $conflits = controler_md5($champs, $_POST, $type, $id, $serveur, isset($options['prefix'])?$options['prefix']:'ctr_'); + $conflits = controler_md5($champs, $_POST, $type, $id, $serveur, isset($options['prefix']) ? $options['prefix'] : 'ctr_'); return $conflits; } -// Controle la liste des md5 envoyes, supprime les inchanges, -// signale les modifies depuis telle date -// http://doc.spip.org/@controler_md5 + +/** + * Contrôle la liste des md5 envoyés, supprime les inchangés, + * signale les modifiés depuis telle date + * + * @param array $champs + * Couples des champs saisis dans le formulaire (colonne => valeur postée) + * @param array $ctr + * Tableau contenant les clés de contrôles. Couples (clé => md5) + * @param string $type + * Type d'objet + * @param int $id + * Identifiant de l'objet + * @param string $serveur + * Nom du connecteur de base de données + * @param string $prefix + * Préfixe des clés de contrôles : le nom du champ est préfixé de cette valeur + * dans le tableau $ctr pour retrouver son md5. + * @return null|array + * Null si aucun champ ou aucune modification sur les champs + * Tableau vide si aucune erreur de contrôle. + * Tableau (clé => tableau du conflit). L'index est la colonne en conflit, + * la valeur un tableau avec 2 index : + * - base : le contenu du champ en base + * - post : le contenu posté + **/ function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctr_') { - $table_objet = table_objet($type); $spip_table_objet = table_objet_sql($type); $id_table_objet = id_table_objet($type); @@ -375,21 +615,27 @@ function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctr_') { // On elimine les donnees non modifiees par le formulaire (mais // potentiellement modifiees entre temps par un autre utilisateur) foreach ($champs as $key => $val) { - if (isset($ctr[$prefix.$key]) AND $m = $ctr[$prefix.$key]) { - if ($m == md5($val)) - unset ($champs[$key]); + if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) { + if (is_scalar($val) and $m == md5($val)) { + unset($champs[$key]); + } } } - if (!$champs) return; + if (!$champs) { + return; + } // On veut savoir si notre modif va avoir un impact // par rapport aux donnees contenues dans la base // (qui peuvent etre differentes de celles ayant servi a calculer le ctr) $s = sql_fetsel(array_keys($champs), $spip_table_objet, "$id_table_objet=$id", $serveur); $intact = true; - foreach ($champs as $ch => $val) + foreach ($champs as $ch => $val) { $intact &= ($s[$ch] == $val); - if ($intact) return; + } + if ($intact) { + return; + } // Detection de conflits : // On verifie si notre modif ne provient pas d'un formulaire @@ -398,7 +644,7 @@ function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctr_') { // de conflit. $ctrh = $ctrq = $conflits = array(); foreach (array_keys($champs) as $key) { - if (isset($ctr[$prefix.$key]) AND $m = $ctr[$prefix.$key]) { + if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) { $ctrh[$key] = $m; $ctrq[] = $key; } @@ -407,7 +653,8 @@ function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctr_') { $ctrq = sql_fetsel($ctrq, $spip_table_objet, "$id_table_objet=$id", $serveur); foreach ($ctrh as $key => $m) { if ($m != md5($ctrq[$key]) - AND $champs[$key] !== $ctrq[$key]) { + and $champs[$key] !== $ctrq[$key] + ) { $conflits[$key] = array( 'base' => $ctrq[$key], 'post' => $champs[$key] @@ -420,39 +667,63 @@ function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctr_') { return $conflits; } -// http://doc.spip.org/@display_conflit_champ +/** + * Afficher le contenu d'un champ selon sa longueur + * soit dans un `textarea`, soit dans un `input` + * + * @param string $x + * texte à afficher + * @return string + */ function display_conflit_champ($x) { - if (strstr($x, "\n") OR strlen($x)>80) - return "\n"; - else - return "\n"; + if (strstr($x, "\n") or strlen($x) > 80) { + return "\n"; + } else { + return "\n"; + } } -// http://doc.spip.org/@signaler_conflits_edition -function signaler_conflits_edition($conflits, $redirect='') { +/** + * Signaler une erreur entre 2 saisies d'un champ + * + * @uses preparer_diff() + * @uses propre_diff() + * @uses afficher_para_modifies() + * @uses afficher_diff() + * @uses minipres() + * + * @param array $conflits + * Valeur des champs en conflit + * @param string $redirect + * @return string + */ +function signaler_conflits_edition($conflits, $redirect = '') { include_spip('inc/minipres'); include_spip('inc/revisions'); include_spip('afficher_diff/champ'); include_spip('inc/suivi_versions'); include_spip('inc/diff'); - foreach ($conflits as $champ=>$a) { + $diffs = array(); + foreach ($conflits as $champ => $a) { // probleme de stockage ou conflit d'edition ? $base = isset($a['save']) ? $a['save'] : $a['base']; $diff = new Diff(new DiffTexte); $n = preparer_diff($a['post']); $o = preparer_diff($base); - $d = propre_diff( - afficher_para_modifies(afficher_diff($diff->comparer($n,$o)))); + $d = propre_diff(afficher_para_modifies(afficher_diff($diff->comparer($n, $o)))); - $titre = isset($a['save']) ? _L('Echec lors de l\'enregistrement du champ @champ@', array('champ' => $champ)) : $champ; + $titre = isset($a['save']) ? _L( + 'Echec lors de l\'enregistrement du champ @champ@', + array('champ' => $champ) + ) : $champ; $diffs[] = "

$titre

\n" - . "

"._T('info_conflit_edition_differences')."

\n" - . "
".$d."
\n" - . "

"._T('info_conflit_edition_votre_version')."

" + . '

' . _T('info_conflit_edition_differences') . "

\n" + . "
" . $d . "
\n" + . '

' . _T('info_conflit_edition_votre_version') . '

' . display_conflit_champ($a['post']) - . "

"._T('info_conflit_edition_version_enregistree')."

" + . '

' . _T('info_conflit_edition_version_enregistree') . '

' . display_conflit_champ($base); } @@ -460,24 +731,23 @@ function signaler_conflits_edition($conflits, $redirect='') { $id = uniqid(rand()); $redirect = "\n" - .form_hidden($redirect) - ." + style='float:" . $GLOBALS['spip_lang_right'] . "; margin-top:2em;'>\n" + . form_hidden($redirect) + . " \n"; // pour les documents, on est probablement en ajax : il faut ajaxer - if (_AJAX) + if (_AJAX) { $redirect .= '\n"; - + . "\n"; + } } echo minipres( _T('titre_conflit_edition'), - '' - .'

'._T('info_conflit_edition_avis_non_sauvegarde').'

' - .'

'._T('texte_conflit_edition_correction').'

' - ."
" - . join("\n",$diffs) - ."
\n" + . '

' . _T('info_conflit_edition_avis_non_sauvegarde') . '

' + . '

' . _T('texte_conflit_edition_correction') . '

' + . "
" + . join("\n", $diffs) + . "
\n" . $redirect ); } - -?> diff --git a/www/ecrire/inc/envoyer_mail.php b/www/ecrire/inc/envoyer_mail.php index 187eab53..29be1b36 100644 --- a/www/ecrire/inc/envoyer_mail.php +++ b/www/ecrire/inc/envoyer_mail.php @@ -3,103 +3,139 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des emails et de leur envoi + * + * @package SPIP\Core\Mail + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/charsets'); include_spip('inc/texte'); -// http://doc.spip.org/@nettoyer_titre_email +/** + * Nettoyer le titre d'un email + * + * @uses textebrut() + * @uses corriger_typo() + * + * @param string $titre + * @return string + */ function nettoyer_titre_email($titre) { return str_replace("\n", ' ', textebrut(corriger_typo($titre))); } -// http://doc.spip.org/@nettoyer_caracteres_mail +/** + * Utiliser le bon encodage de caractères selon le charset + * + * Caractères pris en compte : apostrophe, double guillemet, + * le tiret cadratin, le tiret demi-cadratin + * + * @uses filtrer_entites() + * + * @param string $t + * @return string + */ function nettoyer_caracteres_mail($t) { $t = filtrer_entites($t); if ($GLOBALS['meta']['charset'] <> 'utf-8') { $t = str_replace( - array("’","“","”"), - array("'", '"', '"'), - $t); + array('’', '“', '”'), + array("'", '"', '"'), + $t + ); } $t = str_replace( - array("—", "&endash;"), - array("--","-" ), - $t); + array('—', '&endash;'), + array('--', '-'), + $t + ); return $t; } /** * Envoi d'un mail - * http://doc.spip.org/@inc_envoyer_mail_dist * * @param string $destinataire * @param string $sujet * @param string|array $corps - * au format string, c'est un corps d'email au format texte, comme supporte nativement par le core - * au format array, c'est un corps etendu qui peut contenir - * string texte : le corps d'email au format texte - * string from : email de l'envoyeur (prioritaire sur argument $from de premier niveau, deprecie) - * array headers : tableau d'en-tetes personalises, une entree par ligne d'en-tete - * --- Support partiel par une fonction mail_embarquer_pieces_jointes a fournir, --- - * --- chargee de convertir en texte encodee les pieces jointes --- - * array pieces_jointes : listes de pieces a embarquer dans l'email, chacune au format array : - * string chemin : chemin file system pour trouver le fichier a embarquer - * string nom : nom du document tel qu'apparaissant dans l'email - * string encodage : encodage a utiliser, parmi 'base64', '7bit', '8bit', 'binary', 'quoted-printable' - * string mime : mime type du document - * --- Non implemente ici --- - * string html : le corps d'email au format html - * string nom_envoyeur : un nom d'envoyeur pour completer l'email from - * string cc : destinataires en copie conforme - * string bcc : destinataires en copie conforme cachee - * string adresse_erreur : addresse de retour en cas d'erreur d'envoi + * - au format string, c'est un corps d'email au format texte, comme supporte nativement par le core + * - au format array, c'est un corps etendu qui peut contenir + * - string texte : le corps d'email au format texte + * - string from : email de l'envoyeur (prioritaire sur argument $from de premier niveau, deprecie) + * - array headers : tableau d'en-tetes personalises, une entree par ligne d'en-tete + * --- Support partiel par une fonction mail_embarquer_pieces_jointes a fournir, --- + * --- chargee de convertir en texte encodee les pieces jointes --- + * - array pieces_jointes : listes de pieces a embarquer dans l'email, chacune au format array : + * - string chemin : chemin file system pour trouver le fichier a embarquer + * - string nom : nom du document tel qu'apparaissant dans l'email + * - string encodage : encodage a utiliser, parmi 'base64', '7bit', '8bit', 'binary', 'quoted-printable' + * - string mime : mime type du document + * --- Non implemente ici --- + * - string html : le corps d'email au format html + * - string nom_envoyeur : un nom d'envoyeur pour completer l'email from + * - string cc : destinataires en copie conforme + * - string bcc : destinataires en copie conforme cachee + * - string adresse_erreur : addresse de retour en cas d'erreur d'envoi * @param string $from (deprecie, utiliser l'entree from de $corps) * @param string $headers (deprecie, utiliser l'entree headers de $corps) * @return bool */ -function inc_envoyer_mail_dist($destinataire, $sujet, $corps, $from = "", $headers = "") { +function inc_envoyer_mail_dist($destinataire, $sujet, $corps, $from = '', $headers = '') { - if (!email_valide($destinataire)) return false; - if ($destinataire == _T('info_mail_fournisseur')) return false; // tres fort + if (!email_valide($destinataire)) { + return false; + } + if ($destinataire == _T('info_mail_fournisseur')) { + return false; + } // tres fort // Fournir si possible un Message-Id: conforme au RFC1036, // sinon SpamAssassin denoncera un MSGID_FROM_MTA_HEADER - $email_envoi = $GLOBALS['meta']["email_envoi"]; + $email_envoi = $GLOBALS['meta']['email_envoi']; if (!email_valide($email_envoi)) { - spip_log("Meta email_envoi invalide. Le mail sera probablement vu comme spam."); + spip_log('Meta email_envoi invalide. Le mail sera probablement vu comme spam.'); $email_envoi = $destinataire; } - if (is_array($corps)){ + $parts = ''; + if (is_array($corps)) { $texte = $corps['texte']; - $from = (isset($corps['from'])?$corps['from']:$from); - $headers = (isset($corps['headers'])?$corps['headers']:$headers); - if (is_array($headers)) - $headers = implode("\n",$headers); - $parts = ""; - if ($corps['pieces_jointes'] AND function_exists('mail_embarquer_pieces_jointes')) + $from = (isset($corps['from']) ? $corps['from'] : $from); + $headers = (isset($corps['headers']) ? $corps['headers'] : $headers); + if (is_array($headers)) { + $headers = implode("\n", $headers); + } + if ($corps['pieces_jointes'] and function_exists('mail_embarquer_pieces_jointes')) { $parts = mail_embarquer_pieces_jointes($corps['pieces_jointes']); - } else + } + } else { $texte = $corps; + } - if (!$from) $from = $email_envoi; + if (!$from) { + $from = $email_envoi; + } // ceci est la RegExp NO_REAL_NAME faisant hurler SpamAssassin - if (preg_match('/^["\s]*\?\s*$/', $from)) - $from .= ' (' . str_replace(')','', translitteration(str_replace('@', ' at ', $from))) . ')'; + if (preg_match('/^["\s]*\?\s*$/', $from)) { + $from .= ' (' . str_replace(')', '', translitteration(str_replace('@', ' at ', $from))) . ')'; + } // nettoyer les é ’, &emdash; etc... // les 'cliquer ici' etc sont a eviter; voir: @@ -117,23 +153,24 @@ function inc_envoyer_mail_dist($destinataire, $sujet, $corps, $from = "", $heade mb_internal_encoding('utf-8'); } - if (function_exists('wordwrap') && (preg_match(',multipart/mixed,',$headers) == 0)) + if (function_exists('wordwrap') && (preg_match(',multipart/mixed,', $headers) == 0)) { $texte = wordwrap($texte); + } list($headers, $texte) = mail_normaliser_headers($headers, $from, $destinataire, $texte, $parts); if (_OS_SERVEUR == 'windows') { - $texte = preg_replace ("@\r*\n@","\r\n", $texte); - $headers = preg_replace ("@\r*\n@","\r\n", $headers); - $sujet = preg_replace ("@\r*\n@","\r\n", $sujet); + $texte = preg_replace("@\r*\n@", "\r\n", $texte); + $headers = preg_replace("@\r*\n@", "\r\n", $headers); + $sujet = preg_replace("@\r*\n@", "\r\n", $sujet); } - spip_log("mail $destinataire\n$sujet\n$headers",'mails'); + spip_log("mail $destinataire\n$sujet\n$headers", 'mails'); // mode TEST : forcer l'email if (defined('_TEST_EMAIL_DEST')) { - if (!_TEST_EMAIL_DEST) + if (!_TEST_EMAIL_DEST) { return false; - else { + } else { $texte = "Dest : $destinataire\r\n" . $texte; $destinataire = _TEST_EMAIL_DEST; } @@ -142,16 +179,27 @@ function inc_envoyer_mail_dist($destinataire, $sujet, $corps, $from = "", $heade return @mail($destinataire, $sujet, $texte, $headers); } -function mail_normaliser_headers($headers, $from, $to, $texte, $parts="") -{ +/** + * Formater correctement l'entête d'un email + * + * @param string $headers + * @param string $from + * @param string $to + * @param string $texte + * @param string $parts + * @return array + */ +function mail_normaliser_headers($headers, $from, $to, $texte, $parts = '') { $charset = $GLOBALS['meta']['charset']; // Ajouter le Content-Type et consort s'il n'y est pas deja - if (strpos($headers, "Content-Type: ") === false) + if (strpos($headers, 'Content-Type: ') === false) { $type = - "Content-Type: text/plain;charset=\"$charset\";\n". - "Content-Transfer-Encoding: 8bit\n"; - else $type = ''; + "Content-Type: text/plain;charset=\"$charset\";\n" . + "Content-Transfer-Encoding: 8bit\n"; + } else { + $type = ''; + } // calculer un identifiant unique preg_match('/@\S+/', $from, $domain); @@ -159,7 +207,7 @@ function mail_normaliser_headers($headers, $from, $to, $texte, $parts="") // Si multi-part, s'en servir comme borne ... if ($parts) { - $texte = "--$uniq\n$type\n" . $texte ."\n"; + $texte = "--$uniq\n$type\n" . $texte . "\n"; foreach ($parts as $part) { $n = strlen($part[1]) . ($part[0] ? "\n" : ''); $e = join("\n", $part[0]); @@ -173,20 +221,21 @@ function mail_normaliser_headers($headers, $from, $to, $texte, $parts="") // .. et s'en servir pour plaire a SpamAssassin - $mid = 'Message-Id: <' . $uniq . ">"; + $mid = 'Message-Id: <' . $uniq . '>'; // indispensable pour les sites qui collent d'office From: serveur-http // sauf si deja mis par l'envoyeur - $rep = (strpos($headers,"Reply-To:")!==FALSE) ? '' : "Reply-To: $from\n"; + $rep = (strpos($headers, 'Reply-To:') !== false) ? '' : "Reply-To: $from\n"; // Nettoyer les en-tetes envoyees // Ajouter le \n final - if (strlen($headers = trim($headers))) $headers .= "\n"; + if (strlen($headers = trim($headers))) { + $headers .= "\n"; + } - // Et mentionner l'indeboulonable nomenclature ratee + // Et mentionner l'indeboulonable nomenclature ratee $headers .= "From: $from\n$type$rep$mid\nMIME-Version: 1.0\n"; return array($headers, $texte); } -?> diff --git a/www/ecrire/inc/exporter_csv.php b/www/ecrire/inc/exporter_csv.php new file mode 100644 index 00000000..872999ec --- /dev/null +++ b/www/ecrire/inc/exporter_csv.php @@ -0,0 +1,135 @@ += 1.4 - AND $v = $r1[1] - ))) + if (file_exists($dir . '/.svn/wc.db') && class_exists('SQLite3')) { + $db = new SQLite3($dir . '/.svn/wc.db'); + $result = $db->query('SELECT changed_revision FROM nodes WHERE local_relpath = "" LIMIT 1'); + if ($result) { + $row = $result->fetchArray(); + if ($row['changed_revision'] != "") { + return -$row['changed_revision']; + } + } + } else if (lire_fichier($dir . '/.svn/entries', $c) + and ( + (preg_match_all( + ',committed-rev="([0-9]+)",', $c, $r1, PREG_PATTERN_ORDER) + and $v = max($r1[1]) + ) + or + (preg_match(',^\d.*dir[\r\n]+(\d+),ms', $c, $r1) # svn >= 1.4 + and $v = $r1[1] + )) + ) { return -$v; + } // Bug ou paquet fait main return 0; @@ -167,54 +245,140 @@ $GLOBALS['spip_matrice']['filtre_text_html_dist'] = 'inc/filtres_mime.php'; $GLOBALS['spip_matrice']['filtre_audio_x_pn_realaudio'] = 'inc/filtres_mime.php'; -// charge les fonctions graphiques et applique celle demandee -// http://doc.spip.org/@filtrer +/** + * Charge et exécute un filtre (graphique ou non) + * + * Recherche la fonction prévue pour un filtre (qui peut être un filtre graphique `image_*`) + * et l'exécute avec les arguments transmis à la fonction, obtenus avec `func_get_args()` + * + * @api + * @uses image_filtrer() Pour un filtre image + * @uses chercher_filtre() Pour un autre filtre + * + * @param string $filtre + * Nom du filtre à appliquer + * @return string + * Code HTML retourné par le filtre + **/ function filtrer($filtre) { - if (isset($GLOBALS['spip_matrice'][$filtre]) and is_string($f = $GLOBALS['spip_matrice'][$filtre])){ - find_in_path($f,'', true); - $GLOBALS['spip_matrice'][$filtre] = true; - } $tous = func_get_args(); - if (substr($filtre,0,6)=='image_' && $GLOBALS['spip_matrice'][$filtre]) + if (trouver_filtre_matrice($filtre) and substr($filtre, 0, 6) == 'image_') { return image_filtrer($tous); - elseif($f = chercher_filtre($filtre)) { + } elseif ($f = chercher_filtre($filtre)) { array_shift($tous); return call_user_func_array($f, $tous); - } - else { + } else { // le filtre n'existe pas, on provoque une erreur - $msg = array('zbug_erreur_filtre', array('filtre'=>texte_script($filtre))); + $msg = array('zbug_erreur_filtre', array('filtre' => texte_script($filtre))); erreur_squelette($msg); return ''; } } -/* +/** + * Cherche un filtre spécial indiqué dans la globale `spip_matrice` + * et charge le fichier éventuellement associé contenant le filtre. + * + * Les filtres d'images par exemple sont déclarés de la sorte, tel que : + * ``` + * $GLOBALS['spip_matrice']['image_reduire'] = true; + * $GLOBALS['spip_matrice']['image_monochrome'] = 'filtres/images_complements.php'; + * ``` + * + * @param string $filtre + * @return bool true si on trouve le filtre dans la matrice, false sinon. + */ +function trouver_filtre_matrice($filtre) { + if (isset($GLOBALS['spip_matrice'][$filtre]) and is_string($f = $GLOBALS['spip_matrice'][$filtre])) { + find_in_path($f, '', true); + $GLOBALS['spip_matrice'][$filtre] = true; + } + return !empty($GLOBALS['spip_matrice'][$filtre]); +} + + +/** + * Filtre `set` qui sauve la valeur en entrée dans une variable * - * [(#CALCUL|set{toto})] enregistre le résultat de #CALCUL - * dans la variable toto et renvoie vide + * La valeur pourra être retrouvée avec `#GET{variable}`. * - * [(#CALCUL|set{toto,1})] enregistre le résultat de #CALCUL - * dans la variable toto et renvoie la valeur + * @example + * `[(#CALCUL|set{toto})]` enregistre le résultat de `#CALCUL` + * dans la variable `toto` et renvoie vide. + * C'est équivalent à `[(#SET{toto, #CALCUL})]` dans ce cas. + * `#GET{toto}` retourne la valeur sauvegardée. * + * @example + * `[(#CALCUL|set{toto,1})]` enregistre le résultat de `#CALCUL` + * dans la variable toto et renvoie la valeur. Cela permet d'utiliser + * d'autres filtres ensuite. `#GET{toto}` retourne la valeur. + * + * @filtre + * @param array $Pile Pile de données + * @param mixed $val Valeur à sauver + * @param string $key Clé d'enregistrement + * @param bool $continue True pour retourner la valeur + * @return mixed */ function filtre_set(&$Pile, $val, $key, $continue = null) { $Pile['vars'][$key] = $val; return $continue ? $val : ''; } -/* - * [(#TRUC|debug{avant}|calcul|debug{apres}|etc)] affiche - * la valeur de #TRUC avant et après le calcul +/** + * Filtre `setenv` qui enregistre une valeur dans l'environnement du squelette + * + * La valeur pourra être retrouvée avec `#ENV{variable}`. + * + * @example + * `[(#CALCUL|setenv{toto})]` enregistre le résultat de `#CALCUL` + * dans l'environnement toto et renvoie vide. + * `#ENV{toto}` retourne la valeur. + * + * `[(#CALCUL|setenv{toto,1})]` enregistre le résultat de `#CALCUL` + * dans l'environnement toto et renvoie la valeur. + * `#ENV{toto}` retourne la valeur. + * + * @filtre + * + * @param array $Pile + * @param mixed $val Valeur à enregistrer + * @param mixed $key Nom de la variable + * @param null|mixed $continue Si présent, retourne la valeur en sortie + * @return string|mixed Retourne `$val` si `$continue` présent, sinon ''. + */ +function filtre_setenv(&$Pile, $val, $key, $continue = null) { + $Pile[0][$key] = $val; + return $continue ? $val : ''; +} + +/** + * Filtre `debug` qui affiche un debug de la valeur en entrée + * + * Log la valeur dans `debug.log` et l'affiche si on est webmestre. + * + * @example + * `[(#TRUC|debug)]` affiche et log la valeur de `#TRUC` + * @example + * `[(#TRUC|debug{avant}|calcul|debug{apres}|etc)]` + * affiche la valeur de `#TRUC` avant et après le calcul, + * en précisant "avant" et "apres". + * + * @filtre + * @link http://www.spip.net/5695 + * @param mixed $val La valeur à debugguer + * @param mixed|null $key Clé pour s'y retrouver + * @return mixed Retourne la valeur (sans la modifier). */ -function filtre_debug($val, $key=null) { +function filtre_debug($val, $key = null) { $debug = ( - is_null($key) ? '' : (var_export($key,true)." = ") - ) . var_export($val, true); + is_null($key) ? '' : (var_export($key, true) . " = ") + ) . var_export($val, true); include_spip('inc/autoriser'); - if (autoriser('webmestre')) - echo "
\n",$debug,"
\n"; + if (autoriser('webmestre')) { + echo "
\n", $debug, "
\n"; + } spip_log($debug, 'debug'); @@ -222,27 +386,46 @@ function filtre_debug($val, $key=null) { } -// fonction generique d'entree des filtres images -// accepte en entree un texte complet, un img-log (produit par #LOGO_XX), -// un tag complet, ou encore un nom de fichier *local* (passer -// le filtre |copie_locale si on veut l'appliquer a un document) -// applique le filtre demande a chacune des occurrences - -// http://doc.spip.org/@image_filtrer -function image_filtrer($args){ +/** + * Exécute un filtre image + * + * Fonction générique d'entrée des filtres images. + * Accepte en entrée : + * + * - un texte complet, + * - un img-log (produit par #LOGO_XX), + * - un tag `` complet, + * - un nom de fichier *local* (passer le filtre `|copie_locale` si on veut + * l'appliquer à un document distant). + * + * Applique le filtre demande à chacune des occurrences + * + * @param array $args + * Liste des arguments : + * + * - le premier est le nom du filtre image à appliquer + * - le second est le texte sur lequel on applique le filtre + * - les suivants sont les arguments du filtre image souhaité. + * @return string + * Texte qui a reçu les filtres + **/ +function image_filtrer($args) { $filtre = array_shift($args); # enlever $filtre $texte = array_shift($args); - if (!strlen($texte)) return; - find_in_path('filtres_images_mini.php','inc/', true); + if (!strlen($texte)) { + return; + } + find_in_path('filtres_images_mini.php', 'inc/', true); statut_effacer_images_temporaires(true); // activer la suppression des images temporaires car le compilo finit la chaine par un image_graver // Cas du nom de fichier local - if ( strpos(substr($texte,strlen(_DIR_RACINE)),'..')===FALSE - AND !preg_match(',^/|[<>]|\s,S', $texte) - AND ( - file_exists(preg_replace(',[?].*$,','',$texte)) - OR preg_match(';^(\w{3,7}://);', $texte) - )) { - array_unshift($args,""); + if (strpos(substr($texte, strlen(_DIR_RACINE)), '..') === false + and !preg_match(',^/|[<>]|\s,S', $texte) + and ( + file_exists(preg_replace(',[?].*$,', '', $texte)) + or tester_url_absolue($texte) + ) + ) { + array_unshift($args, ""); $res = call_user_func_array($filtre, $args); statut_effacer_images_temporaires(false); // desactiver pour les appels hors compilo return $res; @@ -253,30 +436,35 @@ function image_filtrer($args){ ',(<([a-z]+) [^<>]*spip_documents[^<>]*>)?\s*(),UimsS', $texte, $tags, PREG_SET_ORDER)) { foreach ($tags as $tag) { - $class = extraire_attribut($tag[3],'class'); - if (!$class || (strpos($class,'no_image_filtrer')===FALSE)){ - array_unshift($args,$tag[3]); + $class = extraire_attribut($tag[3], 'class'); + if (!$class or + (strpos($class, 'filtre_inactif') == false + // compat historique a virer en 3.2 + and strpos($class, 'no_image_filtrer') === false) + ) { + array_unshift($args, $tag[3]); if ($reduit = call_user_func_array($filtre, $args)) { // En cas de span spip_documents, modifier le style=...width: - if($tag[1]){ + if ($tag[1]) { $w = extraire_attribut($reduit, 'width'); - if (!$w AND preg_match(",width:\s*(\d+)px,S",extraire_attribut($reduit,'style'),$regs)) + if (!$w and preg_match(",width:\s*(\d+)px,S", extraire_attribut($reduit, 'style'), $regs)) { $w = $regs[1]; - if ($w AND ($style = extraire_attribut($tag[1], 'style'))){ + } + if ($w and ($style = extraire_attribut($tag[1], 'style'))) { $style = preg_replace(",width:\s*\d+px,S", "width:${w}px", $style); $replace = inserer_attribut($tag[1], 'style', $style); $texte = str_replace($tag[1], $replace, $texte); } } // traiter aussi un eventuel mouseover - if ($mouseover = extraire_attribut($reduit,'onmouseover')){ - if (preg_match(",this[.]src=['\"]([^'\"]+)['\"],ims", $mouseover, $match)){ + if ($mouseover = extraire_attribut($reduit, 'onmouseover')) { + if (preg_match(",this[.]src=['\"]([^'\"]+)['\"],ims", $mouseover, $match)) { $srcover = $match[1]; array_shift($args); - array_unshift($args,""); + array_unshift($args, ""); $srcover_filter = call_user_func_array($filtre, $args); - $srcover_filter = extraire_attribut($srcover_filter,'src'); - $reduit = str_replace($srcover,$srcover_filter,$reduit); + $srcover_filter = extraire_attribut($srcover_filter, 'src'); + $reduit = str_replace($srcover, $srcover_filter, $reduit); } } $texte = str_replace($tag[3], $reduit, $texte); @@ -289,142 +477,266 @@ function image_filtrer($args){ return $texte; } -// -// Retourner taille d'une image -// pour les filtres |largeur et |hauteur -// -// http://doc.spip.org/@taille_image + +/** + * Retourne les tailles d'une image + * + * Pour les filtres `largeur` et `hauteur` + * + * @param string $img + * Balise HTML `` ou chemin de l'image (qui peut être une URL distante). + * @return array + * Liste (hauteur, largeur) en pixels + **/ function taille_image($img) { - static $largeur_img =array(), $hauteur_img= array(); + static $largeur_img = array(), $hauteur_img = array(); $srcWidth = 0; $srcHeight = 0; - $logo = extraire_attribut($img,'src'); + $logo = extraire_attribut($img, 'src'); - if (!$logo) $logo = $img; - else { - $srcWidth = extraire_attribut($img,'width'); - $srcHeight = extraire_attribut($img,'height'); + if (!$logo) { + $logo = $img; + } else { + $srcWidth = extraire_attribut($img, 'width'); + $srcHeight = extraire_attribut($img, 'height'); } // ne jamais operer directement sur une image distante pour des raisons de perfo // la copie locale a toutes les chances d'etre la ou de resservir - if (preg_match(';^(\w{3,7}://);', $logo)){ + if (tester_url_absolue($logo)) { include_spip('inc/distant'); $fichier = copie_locale($logo); $logo = $fichier ? _DIR_RACINE . $fichier : $logo; } - if (($p=strpos($logo,'?'))!==FALSE) - $logo=substr($logo,0,$p); + if (($p = strpos($logo, '?')) !== false) { + $logo = substr($logo, 0, $p); + } $srcsize = false; - if (isset($largeur_img[$logo])) + if (isset($largeur_img[$logo])) { $srcWidth = $largeur_img[$logo]; - if (isset($hauteur_img[$logo])) + } + if (isset($hauteur_img[$logo])) { $srcHeight = $hauteur_img[$logo]; - if (!$srcWidth OR !$srcHeight){ + } + if (!$srcWidth or !$srcHeight) { if (file_exists($logo) - AND $srcsize = @getimagesize($logo)){ - if (!$srcWidth) $largeur_img[$logo] = $srcWidth = $srcsize[0]; - if (!$srcHeight) $hauteur_img[$logo] = $srcHeight = $srcsize[1]; + and $srcsize = @getimagesize($logo) + ) { + if (!$srcWidth) { + $largeur_img[$logo] = $srcWidth = $srcsize[0]; + } + if (!$srcHeight) { + $hauteur_img[$logo] = $srcHeight = $srcsize[1]; + } } // $logo peut etre une reference a une image temporaire dont a n'a que le log .src // on s'y refere, l'image sera reconstruite en temps utile si necessaire - elseif(@file_exists($f = "$logo.src") - AND lire_fichier($f,$valeurs) - AND $valeurs=unserialize($valeurs)) { - if (!$srcWidth) $largeur_img[$logo] = $srcWidth = $valeurs["largeur_dest"]; - if (!$srcHeight) $hauteur_img[$logo] = $srcHeight = $valeurs["hauteur_dest"]; - } + elseif (@file_exists($f = "$logo.src") + and lire_fichier($f, $valeurs) + and $valeurs = unserialize($valeurs) + ) { + if (!$srcWidth) { + $largeur_img[$logo] = $srcWidth = $valeurs["largeur_dest"]; + } + if (!$srcHeight) { + $hauteur_img[$logo] = $srcHeight = $valeurs["hauteur_dest"]; + } + } } + return array($srcHeight, $srcWidth); } -// http://doc.spip.org/@largeur + + +/** + * Retourne la largeur d'une image + * + * @filtre + * @link http://www.spip.net/4296 + * @uses taille_image() + * @see hauteur() + * + * @param string $img + * Balise HTML `` ou chemin de l'image (qui peut être une URL distante). + * @return int|null + * Largeur en pixels, NULL ou 0 si aucune image. + **/ function largeur($img) { - if (!$img) return; - list ($h,$l) = taille_image($img); + if (!$img) { + return; + } + list($h, $l) = taille_image($img); + return $l; } -// http://doc.spip.org/@hauteur + +/** + * Retourne la hauteur d'une image + * + * @filtre + * @link http://www.spip.net/4291 + * @uses taille_image() + * @see largeur() + * + * @param string $img + * Balise HTML `` ou chemin de l'image (qui peut être une URL distante). + * @return int|null + * Hauteur en pixels, NULL ou 0 si aucune image. + **/ function hauteur($img) { - if (!$img) return; - list ($h,$l) = taille_image($img); + if (!$img) { + return; + } + list($h, $l) = taille_image($img); + return $h; } -// Echappement des entites HTML avec correction des entites "brutes" -// (generees par les butineurs lorsqu'on rentre des caracteres n'appartenant -// pas au charset de la page [iso-8859-1 par defaut]) -// -// Attention on limite cette correction aux caracteres "hauts" (en fait > 99 -// pour aller plus vite que le > 127 qui serait logique), de maniere a -// preserver des echappements de caracteres "bas" (par exemple [ ou ") -// et au cas particulier de & qui devient &amp; dans les url -// http://doc.spip.org/@corriger_entites_html +/** + * Échappement des entités HTML avec correction des entités « brutes » + * + * Ces entités peuvent être générées par les butineurs lorsqu'on rentre des + * caractères n'appartenant pas au charset de la page [iso-8859-1 par défaut] + * + * Attention on limite cette correction aux caracteres « hauts » (en fait > 99 + * pour aller plus vite que le > 127 qui serait logique), de manière à + * préserver des eéhappements de caractères « bas » (par exemple `[` ou `"`) + * et au cas particulier de `&` qui devient `&amp;` dans les URL + * + * @see corriger_toutes_entites_html() + * @param string $texte + * @return string + **/ function corriger_entites_html($texte) { - if (strpos($texte,'&') === false) return $texte; + if (strpos($texte, '&') === false) { + return $texte; + } + return preg_replace(',&(#[0-9][0-9][0-9]+;|amp;),iS', '&\1', $texte); } -// idem mais corriger aussi les &eacute; en é -// http://doc.spip.org/@corriger_toutes_entites_html + +/** + * Échappement des entités HTML avec correction des entités « brutes » ainsi + * que les `&eacute;` en `é` + * + * Identique à `corriger_entites_html()` en corrigeant aussi les + * `&eacute;` en `é` + * + * @see corriger_entites_html() + * @param string $texte + * @return string + **/ function corriger_toutes_entites_html($texte) { - if (strpos($texte,'&') === false) return $texte; + if (strpos($texte, '&') === false) { + return $texte; + } + return preg_replace(',&(#?[a-z0-9]+;),iS', '&\1', $texte); } -// http://doc.spip.org/@proteger_amp -function proteger_amp($texte){ - return str_replace('&','&',$texte); +/** + * Échappe les `&` en `&` + * + * @param string $texte + * @return string + **/ +function proteger_amp($texte) { + return str_replace('&', '&', $texte); } -// + /** - * http://doc.spip.org/@entites_html + * Échappe en entités HTML certains caractères d'un texte + * + * Traduira un code HTML en transformant en entités HTML les caractères + * en dehors du charset de la page ainsi que les `"`, `<` et `>`. + * + * Ceci permet d’insérer le texte d’une balise dans un `` + * sans dommages. + * + * @filtre + * @link http://www.spip.net/4280 + * + * @uses echappe_html() + * @uses echappe_retour() + * @uses proteger_amp() + * @uses corriger_entites_html() + * @uses corriger_toutes_entites_html() * * @param string $texte * chaine a echapper * @param bool $tout - * corriger toutes les &xx; en &xx; + * corriger toutes les `&xx;` en `&xx;` * @param bool $quote - * echapper aussi les simples quotes en ' + * Échapper aussi les simples quotes en `'` * @return mixed|string */ -function entites_html($texte, $tout=false, $quote=true) { - if (!is_string($texte) OR !$texte - OR strpbrk($texte, "&\"'<>")==false - ) return $texte; +function entites_html($texte, $tout = false, $quote = true) { + if (!is_string($texte) or !$texte + or strpbrk($texte, "&\"'<>") == false + ) { + return $texte; + } include_spip('inc/texte'); - $flags = !defined('PHP_VERSION_ID') OR PHP_VERSION_ID < 50400 ? ENT_COMPAT : ENT_COMPAT|ENT_HTML401; - $texte = spip_htmlspecialchars(echappe_retour(echappe_html($texte, '', true), '', 'proteger_amp'), $quote?ENT_QUOTES:$flags); - if ($tout) + $flags = ($quote ? ENT_QUOTES : ENT_NOQUOTES); + if (defined('ENT_HTML401')) { + $flags |= ENT_HTML401; + } + $texte = spip_htmlspecialchars(echappe_retour(echappe_html($texte, '', true), '', 'proteger_amp'), $flags); + if ($tout) { return corriger_toutes_entites_html($texte); - else + } else { return corriger_entites_html($texte); + } } -// Transformer les é dans le charset local -// http://doc.spip.org/@filtrer_entites +/** + * Convertit les caractères spéciaux HTML dans le charset du site. + * + * @exemple + * Si le charset de votre site est `utf-8`, `é` ou `é` + * sera transformé en `é` + * + * @filtre + * @link http://www.spip.net/5513 + * + * @param string $texte + * Texte à convertir + * @return string + * Texte converti + **/ function filtrer_entites($texte) { - if (strpos($texte,'&') === false) return $texte; + if (strpos($texte, '&') === false) { + return $texte; + } // filtrer $texte = html2unicode($texte); // remettre le tout dans le charset cible $texte = unicode2charset($texte); // cas particulier des " et ' qu'il faut filtrer aussi // (on le faisait deja avec un ") - if (strpos($texte,"&#")!==false) - $texte = str_replace(array("'","'",""","""), array("'","'",'"','"'), $texte); + if (strpos($texte, "&#") !== false) { + $texte = str_replace(array("'", "'", """, """), array("'", "'", '"', '"'), $texte); + } + return $texte; } -/** - * Version securisee de filtrer_entites - * @param string $t - * @return string - */ + if (!function_exists('filtre_filtrer_entites_dist')) { + /** + * Version sécurisée de filtrer_entites + * + * @uses interdire_scripts() + * @uses filtrer_entites() + * + * @param string $t + * @return string + */ function filtre_filtrer_entites_dist($t) { include_spip('inc/texte'); return interdire_scripts(filtrer_entites($t)); @@ -432,36 +744,58 @@ if (!function_exists('filtre_filtrer_entites_dist')) { } -// caracteres de controle - http://www.w3.org/TR/REC-xml/#charsets -// http://doc.spip.org/@supprimer_caracteres_illegaux +/** + * Supprime des caractères illégaux + * + * Remplace les caractères de controle par le caractère `-` + * + * @link http://www.w3.org/TR/REC-xml/#charsets + * + * @param string|array $texte + * @return string|array + **/ function supprimer_caracteres_illegaux($texte) { static $from = "\x0\x1\x2\x3\x4\x5\x6\x7\x8\xB\xC\xE\xF\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"; static $to = null; - + if (is_array($texte)) { return array_map('supprimer_caracteres_illegaux', $texte); } - - if (!$to) $to = str_repeat('-', strlen($from)); + + if (!$to) { + $to = str_repeat('-', strlen($from)); + } + return strtr($texte, $from, $to); } -// Supprimer caracteres windows et les caracteres de controle ILLEGAUX -// http://doc.spip.org/@corriger_caracteres -function corriger_caracteres ($texte) { +/** + * Correction de caractères + * + * Supprimer les caracteres windows non conformes et les caracteres de controle illégaux + * + * @param string|array $texte + * @return string|array + **/ +function corriger_caracteres($texte) { $texte = corriger_caracteres_windows($texte); $texte = supprimer_caracteres_illegaux($texte); + return $texte; } /** - * Encode du HTML pour transmission XML - * notamment dans les flux RSS + * Encode du HTML pour transmission XML notamment dans les flux RSS * - * http://doc.spip.org/@texte_backend + * Ce filtre transforme les liens en liens absolus, importe les entitées html et échappe les tags html. * - * @param $texte - * @return mixed + * @filtre + * @link http://www.spip.net/4287 + * + * @param string $texte + * Texte à transformer + * @return string + * Texte encodé pour XML */ function texte_backend($texte) { @@ -479,17 +813,17 @@ function texte_backend($texte) { // " -> " et tout ce genre de choses $u = $GLOBALS['meta']['pcre_u']; $texte = str_replace(" ", " ", $texte); - $texte = preg_replace('/\s{2,}/S'.$u, " ", $texte); + $texte = preg_replace('/\s{2,}/S' . $u, " ", $texte); // ne pas echapper les sinqle quotes car certains outils de syndication gerent mal $texte = entites_html($texte, false, false); // mais bien echapper les double quotes ! - $texte = str_replace('"','"',$texte); + $texte = str_replace('"', '"', $texte); // verifier le charset $texte = charset2unicode($texte); // Caracteres problematiques en iso-latin 1 - if ($GLOBALS['meta']['charset'] == 'iso-8859-1') { + if (isset($GLOBALS['meta']['charset']) and $GLOBALS['meta']['charset'] == 'iso-8859-1') { $texte = str_replace(chr(156), 'œ', $texte); $texte = str_replace(chr(140), 'Œ', $texte); $texte = str_replace(chr(159), 'Ÿ', $texte); @@ -501,87 +835,211 @@ function texte_backend($texte) { return str_replace($apostrophe, "'", $texte); } -// Comme ci-dessus, mais avec addslashes final pour squelettes avec PHP (rss) - +/** + * Encode et quote du HTML pour transmission XML notamment dans les flux RSS + * + * Comme texte_backend(), mais avec addslashes final pour squelettes avec PHP (rss) + * + * @uses texte_backend() + * @filtre + * + * @param string $texte + * Texte à transformer + * @return string + * Texte encodé et quote pour XML + */ function texte_backendq($texte) { return addslashes(texte_backend($texte)); } -// Enleve le numero des titres numerotes ("1. Titre" -> "Titre") -// http://doc.spip.org/@supprimer_numero + +/** + * Enlève un numéro préfixant un texte + * + * Supprime `10. ` dans la chaine `10. Titre` + * + * @filtre + * @link http://www.spip.net/4314 + * @see recuperer_numero() Pour obtenir le numéro + * @example + * ``` + * [

(#TITRE|supprimer_numero)

] + * ``` + * + * @param string $texte + * Texte + * @return int|string + * Numéro de titre, sinon chaîne vide + **/ function supprimer_numero($texte) { return preg_replace( - ",^[[:space:]]*([0-9]+)([.)]|".chr(194).'?'.chr(176).")[[:space:]]+,S", - "", $texte); + ",^[[:space:]]*([0-9]+)([.)]|" . chr(194) . '?' . chr(176) . ")[[:space:]]+,S", + "", $texte); } -// et la fonction inverse -// http://doc.spip.org/@recuperer_numero +/** + * Récupère un numéro préfixant un texte + * + * Récupère le numéro `10` dans la chaine `10. Titre` + * + * @filtre + * @link http://www.spip.net/5514 + * @see supprimer_numero() Pour supprimer le numéro + * @see balise_RANG_dist() Pour obtenir un numéro de titre + * @example + * ``` + * [(#TITRE|recuperer_numero)] + * ``` + * + * @param string $texte + * Texte + * @return int|string + * Numéro de titre, sinon chaîne vide + **/ function recuperer_numero($texte) { if (preg_match( - ",^[[:space:]]*([0-9]+)([.)]|".chr(194).'?'.chr(176).")[[:space:]]+,S", - $texte, $regs)) + ",^[[:space:]]*([0-9]+)([.)]|" . chr(194) . '?' . chr(176) . ")[[:space:]]+,S", + $texte, $regs)) { return strval($regs[1]); - else + } else { return ''; + } } -// Suppression basique et brutale de tous les <...> -// http://doc.spip.org/@supprimer_tags +/** + * Suppression basique et brutale de tous les tags + * + * Supprime tous les tags `<...>`. + * Utilisé fréquemment pour écrire des RSS. + * + * @filtre + * @link http://www.spip.net/4315 + * @example + * ``` + * [(#TITRE|supprimer_tags|texte_backend)] + * ``` + * + * @note + * Ce filtre supprime aussi les signes inférieurs `<` rencontrés. + * + * @param string $texte + * Texte à échapper + * @param string $rempl + * Inutilisé. + * @return string + * Texte converti + **/ function supprimer_tags($texte, $rempl = "") { - $texte = preg_replace(",<[^>]*>,US", $rempl, $texte); - // ne pas oublier un < final non ferme + $texte = preg_replace(",<(!--|\w|/)[^>]*>,US", $rempl, $texte); + // ne pas oublier un < final non ferme car coupe + $texte = preg_replace(",<(!--|\w|/).*$,US", $rempl, $texte); // mais qui peut aussi etre un simple signe plus petit que - $texte = str_replace('<', ' ', $texte); + $texte = str_replace('<', '<', $texte); + return $texte; } -// Convertit les <...> en la version lisible en HTML -// http://doc.spip.org/@echapper_tags +/** + * Convertit les chevrons de tag en version lisible en HTML + * + * Transforme les chevrons de tag `<...>` en entité HTML. + * + * @filtre + * @link http://www.spip.net/5515 + * @example + * ``` + *
[(#TEXTE|echapper_tags)]
+ * ``` + * + * @param string $texte + * Texte à échapper + * @param string $rempl + * Inutilisé. + * @return string + * Texte converti + **/ function echapper_tags($texte, $rempl = "") { $texte = preg_replace("/<([^>]*)>/", "<\\1>", $texte); + return $texte; } -// Convertit un texte HTML en texte brut -// http://doc.spip.org/@textebrut +/** + * Convertit un texte HTML en texte brut + * + * Enlève les tags d'un code HTML, élimine les doubles espaces. + * + * @filtre + * @link http://www.spip.net/4317 + * @example + * ``` + * [(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)] + * ``` + * + * @param string $texte + * Texte à convertir + * @return string + * Texte converti + **/ function textebrut($texte) { $u = $GLOBALS['meta']['pcre_u']; - $texte = preg_replace('/\s+/S'.$u, " ", $texte); - $texte = preg_replace("/<(p|br)( [^>]*)?".">/iS", "\n\n", $texte); + $texte = preg_replace('/\s+/S' . $u, " ", $texte); + $texte = preg_replace("/<(p|br)( [^>]*)?" . ">/iS", "\n\n", $texte); $texte = preg_replace("/^\n+/", "", $texte); $texte = preg_replace("/\n+$/", "", $texte); $texte = preg_replace("/\n +/", "\n", $texte); $texte = supprimer_tags($texte); $texte = preg_replace("/( | )+/S", " ", $texte); // nettoyer l'apostrophe curly qui pose probleme a certains rss-readers, lecteurs de mail... - $texte = str_replace("’","'",$texte); + $texte = str_replace("’", "'", $texte); + return $texte; } -// Remplace les liens SPIP en liens ouvrant dans une nouvelle fenetre (target=blank) -// http://doc.spip.org/@liens_ouvrants -function liens_ouvrants ($texte) { - return preg_replace(",]*https?://[^>]*class=[\"']spip_(out|url)\b[^>]+)>,", - "", $texte); + +/** + * Remplace les liens SPIP en liens ouvrant dans une nouvelle fenetre (target=blank) + * + * @filtre + * @link http://www.spip.net/4297 + * + * @param string $texte + * Texte avec des liens + * @return string + * Texte avec liens ouvrants + **/ +function liens_ouvrants($texte) { + if (preg_match_all(",(]*https?://[^>]*class=[\"']spip_(out|url)\b[^>]+>),imsS", + $texte, $liens, PREG_SET_ORDER)) { + foreach ($liens[0] as $a) { + $rel = 'noopener noreferrer ' . extraire_attribut($a, 'rel'); + $ablank = inserer_attribut($a, 'rel', $rel); + $ablank = inserer_attribut($ablank, 'target', '_blank'); + $texte = str_replace($a, $ablank, $texte); + } + } + + return $texte; } /** * Ajouter un attribut rel="nofollow" sur tous les liens d'un texte + * * @param string $texte * @return string */ function liens_nofollow($texte) { - if (stripos($texte,"]*>,UimsS",$texte, $regs, PREG_PATTERN_ORDER)){ - foreach($regs[0] as $a){ - $rel = extraire_attribut($a,"rel"); - if (strpos($rel,"nofollow")===false){ - $rel = "nofollow" . ($rel?" $rel":""); - $anofollow = inserer_attribut($a,"rel",$rel); - $texte = str_replace($a,$anofollow,$texte); + if (preg_match_all(",]*>,UimsS", $texte, $regs, PREG_PATTERN_ORDER)) { + foreach ($regs[0] as $a) { + $rel = extraire_attribut($a, "rel"); + if (strpos($rel, "nofollow") === false) { + $rel = "nofollow" . ($rel ? " $rel" : ""); + $anofollow = inserer_attribut($a, "rel", $rel); + $texte = str_replace($a, $anofollow, $texte); } } } @@ -589,738 +1047,421 @@ function liens_nofollow($texte) { return $texte; } -// Transformer les sauts de paragraphe en simples passages a la ligne -// http://doc.spip.org/@PtoBR -function PtoBR($texte){ - $u = $GLOBALS['meta']['pcre_u']; - $texte = preg_replace("@

@iS", "\n", $texte); +/** + * Transforme les sauts de paragraphe HTML `p` en simples passages à la ligne `br` + * + * @filtre + * @link http://www.spip.net/4308 + * @example + * ``` + * [
(#DESCRIPTIF|PtoBR)[(#NOTES|PtoBR)]
] + * ``` + * + * @param string $texte + * Texte à transformer + * @return string + * Texte sans paraghaphes + **/ +function PtoBR($texte) { + $u = $GLOBALS['meta']['pcre_u']; + $texte = preg_replace("@

@iS", "\n", $texte); $texte = preg_replace("@@UiS", "
", $texte); - $texte = preg_replace("@^\s*
@S".$u, "", $texte); + $texte = preg_replace("@^\s*
@S" . $u, "", $texte); + return $texte; } /** - * lignes_longues assure qu'un texte ne vas pas deborder d'un bloc + * Assure qu'un texte ne vas pas déborder d'un bloc * par la faute d'un mot trop long (souvent des URLs) - * Ne devrait plus etre utilise et fait directement en CSS par un style - * word-wrap:break-word; - * cf http://www.alsacreations.com/tuto/lire/1038-gerer-debordement-contenu-css.html * - * Pour assurer la compatibilite du filtre, on encapsule le contenu par - * un div ou span portant ce style inline. + * Ne devrait plus être utilisé et fait directement en CSS par un style + * `word-wrap:break-word;` * - * http://doc.spip.org/@lignes_longues + * @note + * Pour assurer la compatibilité du filtre, on encapsule le contenu par + * un `div` ou `span` portant ce style CSS inline. * - * @param string $texte - * @return string + * @filtre + * @link http://www.spip.net/4298 + * @link http://www.alsacreations.com/tuto/lire/1038-gerer-debordement-contenu-css.html + * @deprecated Utiliser le style CSS `word-wrap:break-word;` + * + * @param string $texte Texte + * @return string Texte encadré du style CSS */ function lignes_longues($texte) { - if (!strlen(trim($texte))) return $texte; + if (!strlen(trim($texte))) { + return $texte; + } include_spip('inc/texte'); - $tag = preg_match(',[:space:]],iS', $texte) ? + $tag = preg_match(',[:space:]],iS', $texte) ? 'div' : 'span'; return "<$tag style='word-wrap:break-word;'>$texte"; } -// Majuscules y compris accents, en HTML -// http://doc.spip.org/@majuscules +/** + * Passe un texte en majuscules, y compris les accents, en HTML + * + * Encadre le texte du style CSS `text-transform: uppercase;`. + * Le cas spécifique du i turc est géré. + * + * @filtre + * @example + * ``` + * [(#EXTENSION|majuscules)] + * ``` + * + * @param string $texte Texte + * @return string Texte en majuscule + */ function majuscules($texte) { - if (!strlen($texte)) return ''; + if (!strlen($texte)) { + return ''; + } // Cas du turc if ($GLOBALS['spip_lang'] == 'tr') { # remplacer hors des tags et des entites - if (preg_match_all(',<[^<>]+>|&[^;]+;,S', $texte, $regs, PREG_SET_ORDER)) - foreach ($regs as $n => $match) + if (preg_match_all(',<[^<>]+>|&[^;]+;,S', $texte, $regs, PREG_SET_ORDER)) { + foreach ($regs as $n => $match) { $texte = str_replace($match[0], "@@SPIP_TURC$n@@", $texte); + } + } $texte = str_replace('i', 'İ', $texte); - if ($regs) - foreach ($regs as $n => $match) + if ($regs) { + foreach ($regs as $n => $match) { $texte = str_replace("@@SPIP_TURC$n@@", $match[0], $texte); + } + } } // Cas general return "$texte"; } -// "127.4 ko" ou "3.1 Mo" -// http://doc.spip.org/@taille_en_octets -function taille_en_octets ($taille) { - if ($taille < 1) return ''; - if ($taille < 1024) {$taille = _T('taille_octets', array('taille' => $taille));} - else if ($taille < 1024*1024) { - $taille = _T('taille_ko', array('taille' => round($taille/1024, 1))); - } else if ($taille < 1024*1024*1024) { - $taille = _T('taille_mo', array('taille' => round($taille/1024/1024, 1))); +/** + * Retourne une taille en octets humainement lisible + * + * Tel que "127.4 ko" ou "3.1 Mo" + * + * @example + * - `[(#TAILLE|taille_en_octets)]` + * - `[(#VAL{123456789}|taille_en_octets)]` affiche `117.7 Mo` + * + * @filtre + * @link http://www.spip.net/4316 + * @param int $taille + * @return string + **/ +function taille_en_octets($taille) { + if (!defined('_KILOBYTE')) { + /** + * Définit le nombre d'octets dans un Kilobyte + * + * @var int + **/ + define('_KILOBYTE', 1024); + } + + if ($taille < 1) { + return ''; + } + if ($taille < _KILOBYTE) { + $taille = _T('taille_octets', array('taille' => $taille)); + } elseif ($taille < _KILOBYTE * _KILOBYTE) { + $taille = _T('taille_ko', array('taille' => round($taille / _KILOBYTE, 1))); + } elseif ($taille < _KILOBYTE * _KILOBYTE * _KILOBYTE) { + $taille = _T('taille_mo', array('taille' => round($taille / _KILOBYTE / _KILOBYTE, 1))); } else { - $taille = _T('taille_go', array('taille' => round($taille/1024/1024/1024, 2))); + $taille = _T('taille_go', array('taille' => round($taille / _KILOBYTE / _KILOBYTE / _KILOBYTE, 2))); } + return $taille; } -// Rend une chaine utilisable sans dommage comme attribut HTML -// http://doc.spip.org/@attribut_html -function attribut_html($texte,$textebrut = true) { +/** + * Rend une chaine utilisable sans dommage comme attribut HTML + * + * @example `
#TITRE` + * + * @filtre + * @link http://www.spip.net/4282 + * @uses textebrut() + * @uses texte_backend() + * + * @param string $texte + * Texte à mettre en attribut + * @param bool $textebrut + * Passe le texte en texte brut (enlève les balises html) ? + * @return string + * Texte prêt pour être utilisé en attribut HTML + **/ +function attribut_html($texte, $textebrut = true) { $u = $GLOBALS['meta']['pcre_u']; - if ($textebrut) - $texte = preg_replace(array(",\n,",",\s(?=\s),msS".$u),array(" ",""),textebrut($texte)); + if ($textebrut) { + $texte = preg_replace(array(",\n,", ",\s(?=\s),msS" . $u), array(" ", ""), textebrut($texte)); + } $texte = texte_backend($texte); - $texte = str_replace(array("'",'"'),array(''', '"'), $texte); - - return preg_replace(array("/&(amp;|#38;)/","/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,5};)/"),array("&","&") , $texte); + $texte = str_replace(array("'", '"'), array(''', '"'), $texte); + + return preg_replace(array("/&(amp;|#38;)/", "/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,5};)/"), array("&", "&"), + $texte); } -// Vider les url nulles comme 'http://' ou 'mailto:' -// et leur appliquer un htmlspecialchars() + gerer les & -// http://doc.spip.org/@vider_url + +/** + * Vider les URL nulles + * + * - Vide les URL vides comme `http://` ou `mailto:` (sans rien d'autre) + * - échappe les entités et gère les `&` + * + * @uses entites_html() + * + * @param string $url + * URL à vérifier et échapper + * @param bool $entites + * `true` pour échapper les entités HTML. + * @return string + * URL ou chaîne vide + **/ function vider_url($url, $entites = true) { # un message pour abs_url $GLOBALS['mode_abs_url'] = 'url'; $url = trim($url); $r = ",^(?:" . _PROTOCOLES_STD . '):?/?/?$,iS'; - return preg_match($r, $url) ? '': ($entites ? entites_html($url) : $url); -} -// Extraire une date de n'importe quel champ (a completer...) -// http://doc.spip.org/@extraire_date -function extraire_date($texte) { - // format = 2001-08 - if (preg_match(",([1-2][0-9]{3})[^0-9]*(1[0-2]|0?[1-9]),",$texte,$regs)) - return $regs[1]."-".sprintf("%02d", $regs[2])."-01"; + return preg_match($r, $url) ? '' : ($entites ? entites_html($url) : $url); } -// Maquiller une adresse e-mail -// http://doc.spip.org/@antispam + +/** + * Maquiller une adresse e-mail + * + * Remplace `@` par 3 caractères aléatoires. + * + * @uses creer_pass_aleatoire() + * + * @param string $texte Adresse email + * @return string Adresse email maquillée + **/ function antispam($texte) { include_spip('inc/acces'); $masque = creer_pass_aleatoire(3); + return preg_replace("/@/", " $masque ", $texte); } -// http://doc.spip.org/@securiser_acces -function securiser_acces($id_auteur, $cle, $dir, $op='', $args='') -{ +/** + * Vérifie un accès à faible sécurité + * + * Vérifie qu'un visiteur peut accéder à la page demandée, + * qui est protégée par une clé, calculée à partir du low_sec de l'auteur, + * et des paramètres le composant l'appel (op, args) + * + * @example + * `[(#ID_AUTEUR|securiser_acces{#ENV{cle}, rss, #ENV{op}, #ENV{args}}|sinon_interdire_acces)]` + * + * @see bouton_spip_rss() pour générer un lien de faible sécurité pour les RSS privés + * @see afficher_low_sec() pour calculer une clé valide + * @uses verifier_low_sec() + * + * @filtre + * @param int $id_auteur + * L'auteur qui demande la page + * @param string $cle + * La clé à tester + * @param string $dir + * Un type d'accès (nom du répertoire dans lequel sont rangés les squelettes demandés, tel que 'rss') + * @param string $op + * Nom de l'opération éventuelle + * @param string $args + * Nom de l'argument calculé + * @return bool + * True si on a le droit d'accès, false sinon. + **/ +function securiser_acces($id_auteur, $cle, $dir, $op = '', $args = '') { include_spip('inc/acces'); - if ($op) $dir .= " $op $args"; + if ($op) { + $dir .= " $op $args"; + } + return verifier_low_sec($id_auteur, $cle, $dir); } /** - * La fonction sinon retourne le second parametre lorsque - * le premier est considere vide, sinon retourne le premier parametre. + * Retourne le second paramètre lorsque + * le premier est considere vide, sinon retourne le premier paramètre. * - * En php sinon($a, 'rien') retourne $a ou 'rien' si $a est vide. - * En filtre spip |sinon{#TEXTE, rien} : affiche #TEXTE ou "rien" si #TEXTE est vide, + * En php `sinon($a, 'rien')` retourne `$a`, ou `'rien'` si `$a` est vide. + * En filtre SPIP `|sinon{#TEXTE, rien}` : affiche `#TEXTE` ou `rien` si `#TEXTE` est vide, + * + * @filtre + * @see filtre_logique() pour la compilation du filtre dans un squelette + * @link http://www.spip.net/4313 + * @note + * L'utilisation de `|sinon` en tant que filtre de squelette + * est directement compilé dans `public/references` par la fonction `filtre_logique()` * - * Note : l'utilisation de |sinon en tant que filtre de squelette - * est directement compile dans public/references par la fonction filtre_logique() - * * @param mixed $texte - * Contenu de reference a tester + * Contenu de reference a tester * @param mixed $sinon - * Contenu a retourner si le contenu de reference est vide + * Contenu a retourner si le contenu de reference est vide * @return mixed - * Retourne $texte, sinon $sinon. -**/ -function sinon ($texte, $sinon='') { - if ($texte OR (!is_array($texte) AND strlen($texte))) + * Retourne $texte, sinon $sinon. + **/ +function sinon($texte, $sinon = '') { + if ($texte or (!is_array($texte) and strlen($texte))) { return $texte; - else + } else { return $sinon; + } } -// |choixsivide{vide,pasvide} affiche pasvide si la chaine n'est pas vide... -// http://doc.spip.org/@choixsivide +/** + * Filtre `|choixsivide{vide, pas vide}` alias de `|?{si oui, si non}` avec les arguments inversés + * + * @example + * `[(#TEXTE|choixsivide{vide, plein})]` affiche vide si le `#TEXTE` + * est considéré vide par PHP (chaîne vide, false, 0, tableau vide, etc…). + * C'est l'équivalent de `[(#TEXTE|?{plein, vide})]` + * + * @filtre + * @see choixsiegal() + * @link http://www.spip.net/4189 + * + * @param mixed $a + * La valeur à tester + * @param mixed $vide + * Ce qui est retourné si `$a` est considéré vide + * @param mixed $pasvide + * Ce qui est retourné sinon + * @return mixed + **/ function choixsivide($a, $vide, $pasvide) { return $a ? $pasvide : $vide; } -// |choixsiegal{aquoi,oui,non} affiche oui si la chaine est egal a aquoi ... -// http://doc.spip.org/@choixsiegal -function choixsiegal($a1,$a2,$v,$f) { +/** + * Filtre `|choixsiegal{valeur, sioui, sinon}` + * + * @example + * `#LANG_DIR|choixsiegal{ltr,left,right}` retourne `left` si + * `#LANG_DIR` vaut `ltr` et `right` sinon. + * + * @filtre + * @link http://www.spip.net/4148 + * + * @param mixed $a1 + * La valeur à tester + * @param mixed $a2 + * La valeur de comparaison + * @param mixed $v + * Ce qui est retourné si la comparaison est vraie + * @param mixed $f + * Ce qui est retourné sinon + * @return mixed + **/ +function choixsiegal($a1, $a2, $v, $f) { return ($a1 == $a2) ? $v : $f; } - -// -// Date, heure, saisons -// - -// on normalise la date, si elle vient du contexte (public/parametrer.php), on force le jour -// http://doc.spip.org/@normaliser_date -function normaliser_date($date, $forcer_jour = false) { - $date = vider_date($date); - if ($date) { - if (preg_match("/^[0-9]{8,10}$/", $date)) - $date = date("Y-m-d H:i:s", $date); - if (preg_match("#^([12][0-9]{3})([-/]00)?( [-0-9:]+)?$#", $date, $regs)) - $date = $regs[1]."-00-00".$regs[3]; - else if (preg_match("#^([12][0-9]{3}[-/][01]?[0-9])([-/]00)?( [-0-9:]+)?$#", $date, $regs)) - $date = preg_replace("@/@","-",$regs[1])."-00".$regs[3]; - else - $date = date("Y-m-d H:i:s", strtotime($date)); - - if ($forcer_jour) - $date = str_replace('-00', '-01', $date); - } - return $date; -} - -// http://doc.spip.org/@vider_date -function vider_date($letexte) { - if (strncmp("0000-00-00", $letexte,10)==0) return ''; - if (strncmp("0001-01-01", $letexte,10)==0) return ''; - if (strncmp("1970-01-01", $letexte,10)==0) return ''; // eviter le bug GMT-1 - return $letexte; -} - -// http://doc.spip.org/@recup_heure -function recup_heure($date){ - - static $d = array(0,0,0); - if (!preg_match('#([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $date, $r)) - return $d; - - array_shift($r); - return $r; -} - -// http://doc.spip.org/@heures -function heures($numdate) { - $date_array = recup_heure($numdate); - if ($date_array) - list($heures, $minutes, $secondes) = $date_array; - return $heures; -} - -// http://doc.spip.org/@minutes -function minutes($numdate) { - $date_array = recup_heure($numdate); - if ($date_array) - list($heures, $minutes, $secondes) = $date_array; - return $minutes; -} - -// http://doc.spip.org/@secondes -function secondes($numdate) { - $date_array = recup_heure($numdate); - if ($date_array) - list($heures,$minutes,$secondes) = $date_array; - return $secondes; -} - -// http://doc.spip.org/@heures_minutes -function heures_minutes($numdate) { - return _T('date_fmt_heures_minutes', array('h'=> heures($numdate), 'm'=> minutes($numdate))); -} - -// http://doc.spip.org/@recup_date -function recup_date($numdate, $forcer_jour = true){ - if (!$numdate) return ''; - $heures = $minutes = $secondes = 0; - if (preg_match('#([0-9]{1,2})/([0-9]{1,2})/([0-9]{4}|[0-9]{1,2})#', $numdate, $regs)) { - $jour = $regs[1]; - $mois = $regs[2]; - $annee = $regs[3]; - if ($annee < 90){ - $annee = 2000 + $annee; - } elseif ($annee<100) { - $annee = 1900 + $annee ; - } - list($heures, $minutes, $secondes) = recup_heure($numdate); - - } - elseif (preg_match('#([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})#',$numdate, $regs)) { - $annee = $regs[1]; - $mois = $regs[2]; - $jour = $regs[3]; - list($heures, $minutes, $secondes) = recup_heure($numdate); - } - elseif (preg_match('#([0-9]{4})-([0-9]{2})#', $numdate, $regs)){ - $annee = $regs[1]; - $mois = $regs[2]; - $jour =''; - list($heures, $minutes, $secondes) = recup_heure($numdate); - } - elseif (preg_match('#^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})$#', $numdate, $regs)){ - $annee = $regs[1]; - $mois = $regs[2]; - $jour = $regs[3]; - $heures = $regs[4]; - $minutes = $regs[5]; - $secondes = $regs[6]; - } else $annee = $mois = $jour =''; - if ($annee > 4000) $annee -= 9000; - if (substr($jour, 0, 1) == '0') $jour = substr($jour, 1); - - if ($forcer_jour AND $jour == '0') $jour = '1'; - if ($forcer_jour AND $mois == '0') $mois = '1'; - if ($annee OR $mois OR $jour OR $heures OR $minutes OR $secondes) - return array($annee, $mois, $jour, $heures, $minutes, $secondes); -} - -// une date pour l'interface : utilise date_relative si le decalage -// avec time() est de moins de douze heures, sinon la date complete -// http://doc.spip.org/@date_interface -function date_interface($date, $decalage_maxi = 43200/* 12*3600 */) { - return sinon( - date_relative($date, $decalage_maxi), - affdate_heure($date) - ); -} - -// http://doc.spip.org/@date_relative -function date_relative($date, $decalage_maxi=0,$ref_date=null) { - - if (is_null($ref_date)) - $ref_time = time(); - else - $ref_time = strtotime($ref_date); - - if (!$date) return; - $decal = date("U",$ref_time) - date("U", strtotime($date)); - - if ($decalage_maxi AND ($decal > $decalage_maxi OR $decal < 0)) - return ''; - - if ($decal < 0) { - $il_y_a = "date_dans"; - $decal = -1 * $decal; - } else { - $il_y_a = "date_il_y_a"; - } - - if ($decal > 3600 * 24 * 30 * 6) - return affdate_court($date); - - if ($decal > 3600 * 24 * 30) { - $mois = floor ($decal / (3600 * 24 * 30)); - if ($mois < 2) - $delai = "$mois "._T("date_un_mois"); - else - $delai = "$mois "._T("date_mois"); - } - else if ($decal > 3600 * 24 * 7) { - $semaines = floor ($decal / (3600 * 24 * 7)); - if ($semaines < 2) - $delai = "$semaines "._T("date_une_semaine"); - else - $delai = "$semaines "._T("date_semaines"); - } - else if ($decal > 3600 * 24) { - $jours = floor ($decal / (3600 * 24)); - if ($jours < 2) - return $il_y_a=="date_dans"?_T("date_demain"):_T("date_hier"); - else - $delai = "$jours "._T("date_jours"); - } - else if ($decal >= 3600) { - $heures = floor ($decal / 3600); - if ($heures < 2) - $delai = "$heures "._T("date_une_heure"); - else - $delai = "$heures "._T("date_heures"); - } - else if ($decal >= 60) { - $minutes = floor($decal / 60); - if ($minutes < 2) - $delai = "$minutes "._T("date_une_minute"); - else - $delai = "$minutes "._T("date_minutes"); - } else { - $secondes = ceil($decal); - if ($secondes < 2) - $delai = "$secondes "._T("date_une_seconde"); - else - $delai = "$secondes "._T("date_secondes"); - } - - return _T($il_y_a, array("delai"=> $delai)); -} - - -// http://doc.spip.org/@date_relativecourt -function date_relativecourt($date, $decalage_maxi=0) { - - if (!$date) return; - $decal = date("U",strtotime(date('Y-m-d'))-strtotime(date('Y-m-d',strtotime($date)))); - - if ($decalage_maxi AND ($decal > $decalage_maxi OR $decal < 0)) +/** + * Alignements en HTML (Old-style, préférer CSS) + * + * Cette fonction ne crée pas de paragraphe + * + * @deprecated Utiliser CSS + * @param string $letexte + * @param string $justif + * @return string + */ +function aligner($letexte, $justif = '') { + $letexte = trim($letexte); + if (!strlen($letexte)) { return ''; - - if ($decal < -24*3600) { - $retour = date_relative($date, $decalage_maxi); - } - elseif ($decal < 0) { - $retour = _T("date_demain"); - } - else if ($decal < (3600 * 24) ) { - $retour = _T("date_aujourdhui"); - } - else if ($decal < (3600 * 24 *2) ) { - $retour = _T("date_hier"); - } - else { - $retour = date_relative($date, $decalage_maxi); } + // Paragrapher rapidement + $letexte = "
" + . $letexte + . "
"; - - return $retour; + return $letexte; } /** - * Formatage humain de la date $numdate selon le format $vue - * http://doc.spip.org/@affdate_base + * Justifie en HTML (Old-style, préférer CSS) * - * @param $numdate - * @param $vue - * @param array $options - * param : 'abbr' ou 'initiale' permet d'afficher les jours au format court ou initiale - * annee_courante : permet de definir l'annee de reference pour l'affichage des dates courtes - * @return mixed|string + * @deprecated Utiliser CSS + * @uses aligner() + * @param string $letexte + * @return string */ -function affdate_base($numdate, $vue, $options = array()) { - if (is_string($options)) - $options = array('param'=>$options); - $date_array = recup_date($numdate, false); - if (!$date_array) return; - list($annee, $mois, $jour, $heures, $minutes, $secondes)= $date_array; - - // 1er, 21st, etc. - $journum = $jour; - - if ($jour == 0) { - $jour = ''; - } else { - $njour = intval($jour); - if ($jourth = _T('date_jnum'.$jour)) - $jour = $jourth; - } - - $mois = intval($mois); - if ($mois > 0 AND $mois < 13) { - $nommois = _T('date_mois_'.$mois); - if ($jour) - $jourmois = _T('date_de_mois_'.$mois, array('j'=>$jour, 'nommois'=>$nommois)); - else - $jourmois = $nommois; - } else $nommois = ''; - - if ($annee < 0) { - $annee = -$annee." "._T('date_avant_jc'); - $avjc = true; - } - else $avjc = false; - - switch ($vue) { - case 'saison': - case 'saison_annee': - $saison = ''; - if ($mois > 0){ - $saison = 1; - if (($mois == 3 AND $jour >= 21) OR $mois > 3) $saison = 2; - if (($mois == 6 AND $jour >= 21) OR $mois > 6) $saison = 3; - if (($mois == 9 AND $jour >= 21) OR $mois > 9) $saison = 4; - if (($mois == 12 AND $jour >= 21) OR $mois > 12) $saison = 1; - } - if($vue == 'saison') - return $saison?_T('date_saison_'.$saison):''; - else - return $saison?trim(_T('date_fmt_saison_annee', array('saison'=>_T('date_saison_'.$saison), 'annee'=>$annee))) :''; - - case 'court': - if ($avjc) return $annee; - $a = ((isset($options['annee_courante']) AND $options['annee_courante'])?$options['annee_courante']:date('Y')); - if ($annee < ($a - 100) OR $annee > ($a + 100)) return $annee; - if ($annee != $a) return _T('date_fmt_mois_annee', array ('mois'=>$mois, 'nommois'=>spip_ucfirst($nommois), 'annee'=>$annee)); - return _T('date_fmt_jour_mois', array ('jourmois'=>$jourmois, 'jour'=>$jour, 'mois'=>$mois, 'nommois'=>$nommois, 'annee'=>$annee)); - - case 'jourcourt': - if ($avjc) return $annee; - $a = ((isset($options['annee_courante']) AND $options['annee_courante'])?$options['annee_courante']:date('Y')); - if ($annee < ($a - 100) OR $annee > ($a + 100)) return $annee; - if ($annee != $a) return _T('date_fmt_jour_mois_annee', array ('jourmois'=>$jourmois, 'jour'=>$jour, 'mois'=>$mois, 'nommois'=>$nommois, 'annee'=>$annee)); - return _T('date_fmt_jour_mois', array ('jourmois'=>$jourmois, 'jour'=>$jour, 'mois'=>$mois, 'nommois'=>$nommois, 'annee'=>$annee)); - - case 'entier': - if ($avjc) return $annee; - if ($jour) - return _T('date_fmt_jour_mois_annee', array ('jourmois'=>$jourmois, 'jour'=>$jour, 'mois'=>$mois, 'nommois'=>$nommois, 'annee'=>$annee)); - elseif ($mois) - return trim(_T('date_fmt_mois_annee', array ('mois'=>$mois, 'nommois'=>$nommois, 'annee'=>$annee))); - else - return $annee; - - case 'nom_mois': - $param = ((isset($options['param']) AND $options['param']) ? '_'.$options['param'] : ''); - if ($param and $mois) { - return _T('date_mois_'.$mois.$param); - } - return $nommois; - - case 'mois': - return sprintf("%02s",$mois); - - case 'jour': - return $jour; - - case 'journum': - return $journum; - - case 'nom_jour': - if (!$mois OR !$njour) - return ''; - $nom = mktime(1,1,1,$mois,$njour,$annee); - $nom = 1+date('w',$nom); - $param = ((isset($options['param']) AND $options['param']) ? '_'.$options['param'] : ''); - return _T('date_jour_'.$nom.$param); - - case 'mois_annee': - if ($avjc) return $annee; - return trim(_T('date_fmt_mois_annee', array('mois'=>$mois, 'nommois'=>$nommois, 'annee'=>$annee))); - - case 'annee': - return $annee; - - // Cas d'une vue non definie : retomber sur le format - // de date propose par http://www.php.net/date - default: - return date($vue, strtotime($numdate)); - } -} - -// http://doc.spip.org/@nom_jour -function nom_jour($numdate, $forme = '') { - if(!($forme == 'abbr' OR $forme == 'initiale')) $forme = ''; - return affdate_base($numdate, 'nom_jour', $forme); -} - -// http://doc.spip.org/@jour -function jour($numdate) { - return affdate_base($numdate, 'jour'); -} - -// http://doc.spip.org/@journum -function journum($numdate) { - return affdate_base($numdate, 'journum'); -} - -// http://doc.spip.org/@mois -function mois($numdate) { - return affdate_base($numdate, 'mois'); -} - -// http://doc.spip.org/@nom_mois -function nom_mois($numdate, $forme='') { - if(!($forme == 'abbr')) $forme = ''; - return affdate_base($numdate, 'nom_mois', $forme); -} - -// http://doc.spip.org/@annee -function annee($numdate) { - return affdate_base($numdate, 'annee'); -} - -// http://doc.spip.org/@saison -function saison($numdate) { - return affdate_base($numdate, 'saison'); -} - -// http://doc.spip.org/@saison_annee -function saison_annee($numdate) { - return affdate_base($numdate, 'saison_annee'); -} - -// http://doc.spip.org/@affdate -function affdate($numdate, $format='entier') { - return affdate_base($numdate, $format); -} - -// http://doc.spip.org/@affdate_court -function affdate_court($numdate, $annee_courante=null) { - return affdate_base($numdate, 'court', array('annee_courante'=>$annee_courante)); -} - -// http://doc.spip.org/@affdate_jourcourt -function affdate_jourcourt($numdate, $annee_courante=null) { - return affdate_base($numdate, 'jourcourt', array('annee_courante'=>$annee_courante)); -} - -// http://doc.spip.org/@affdate_mois_annee -function affdate_mois_annee($numdate) { - return affdate_base($numdate, 'mois_annee'); -} - -// http://doc.spip.org/@affdate_heure -function affdate_heure($numdate) { - $date_array = recup_date($numdate); - if (!$date_array) return; - list($annee, $mois, $jour, $heures, $minutes, $sec)= $date_array; - return _T('date_fmt_jour_heure', array('jour' => affdate($numdate), 'heure' => _T('date_fmt_heures_minutes', array('h'=> $heures, 'm'=> $minutes)))); -} +function justifier($letexte) { return aligner($letexte, 'justify'); } /** - * Afficher de facon textuelle les dates de debut et fin en fonction des cas - * - Lundi 20 fevrier a 18h - * - Le 20 fevrier de 18h a 20h - * - Du 20 au 23 fevrier - * - Du 20 fevrier au 30 mars - * - Du 20 fevrier 2007 au 30 mars 2008 - * $horaire='oui' ou true permet d'afficher l'horaire, toute autre valeur n'indique que le jour - * $forme peut contenir une ou plusieurs valeurs parmi - * - abbr (afficher le nom des jours en abrege) - * - hcal (generer une date au format hcal) - * - jour (forcer l'affichage des jours) - * - annee (forcer l'affichage de l'annee) + * Aligne à droite en HTML (Old-style, préférer CSS) * - * @param string $date_debut - * @param string $date_fin - * @param string $horaire - * @param string $forme - * abbr pour afficher le nom du jour en abrege (Dim. au lieu de Dimanche) - * annee pour forcer l'affichage de l'annee courante - * jour pour forcer l'affichage du nom du jour - * hcal pour avoir un markup microformat abbr + * @deprecated Utiliser CSS + * @uses aligner() + * @param string $letexte * @return string */ -function affdate_debut_fin($date_debut, $date_fin, $horaire = 'oui', $forme=''){ - $abbr = $jour = ''; - $affdate = "affdate_jourcourt"; - if (strpos($forme,'abbr') !==false) $abbr = 'abbr'; - if (strpos($forme,'annee')!==false) $affdate = 'affdate'; - if (strpos($forme,'jour') !==false) $jour = 'jour'; - - $dtstart = $dtend = $dtabbr = ""; - if (strpos($forme,'hcal')!==false) { - $dtstart = ""; - $dtend = ""; - $dtabbr = ""; - } - - $date_debut = strtotime($date_debut); - $date_fin = strtotime($date_fin); - $d = date("Y-m-d", $date_debut); - $f = date("Y-m-d", $date_fin); - $h = ($horaire==='oui' OR $horaire===true); - $hd = _T('date_fmt_heures_minutes_court', array('h'=> date("H",$date_debut), 'm'=> date("i",$date_debut))); - $hf = _T('date_fmt_heures_minutes_court', array('h'=> date("H",$date_fin), 'm'=> date("i",$date_fin))); - - if ($d==$f) - { // meme jour - $nomjour = nom_jour($d,$abbr); - $s = $affdate($d); - $s = _T('date_fmt_jour',array('nomjour'=>$nomjour,'jour' => $s)); - if ($h){ - if ($hd==$hf){ - // Lundi 20 fevrier a 18h25 - $s = spip_ucfirst(_T('date_fmt_jour_heure',array('jour'=>$s,'heure'=>$hd))); - $s = "$dtstart$s$dtabbr"; - }else{ - // Le lundi 20 fevrier de 18h00 a 20h00 - if($dtabbr && $dtstart && $dtend) - $s = _T('date_fmt_jour_heure_debut_fin_abbr',array('jour'=>spip_ucfirst($s),'heure_debut'=>$hd,'heure_fin'=>$hf,'dtstart'=>$dtstart,'dtend'=>$dtend,'dtabbr'=>$dtabbr)); - // Le lundi 20 fevrier de 18h00 a 20h00 - else - $s = spip_ucfirst(_T('date_fmt_jour_heure_debut_fin',array('jour'=>$s,'heure_debut'=>$hd,'heure_fin'=>$hf))); - } - }else{ - if($dtabbr && $dtstart) - $s = $dtstart.spip_ucfirst($s).$dtabbr; - else - $s = spip_ucfirst($s); - } - } - else if ((date("Y-m",$date_debut))==date("Y-m",$date_fin)) - { // meme annee et mois, jours differents - if(!$h) - $date_debut = jour($d); - else - $date_debut = affdate_jourcourt($d,date("Y",$date_fin)); - $date_fin = $affdate($f); - if($jour){ - $nomjour_debut = nom_jour($d,$abbr); - $date_debut = _T('date_fmt_jour',array('nomjour'=>$nomjour_debut,'jour' => $date_debut)); - $nomjour_fin = nom_jour($f,$abbr); - $date_fin = _T('date_fmt_jour',array('nomjour'=>$nomjour_fin,'jour' => $date_fin)); - } - if ($h){ - $date_debut = _T('date_fmt_jour_heure',array('jour'=>$date_debut,'heure'=>$hd)); - $date_fin = _T('date_fmt_jour_heure',array('jour'=>$date_fin,'heure'=>$hf)); - } - $date_debut = $dtstart.$date_debut.$dtabbr; - $date_fin = $dtend.$date_fin.$dtabbr; - - $s = _T('date_fmt_periode',array('date_debut' => $date_debut,'date_fin'=>$date_fin)); - } - else { - $date_debut = affdate_jourcourt($d,date("Y",$date_fin)); - $date_fin = $affdate($f); - if($jour){ - $nomjour_debut = nom_jour($d,$abbr); - $date_debut = _T('date_fmt_jour',array('nomjour'=>$nomjour_debut,'jour' => $date_debut)); - $nomjour_fin = nom_jour($f,$abbr); - $date_fin = _T('date_fmt_jour',array('nomjour'=>$nomjour_fin,'jour' => $date_fin)); - } - if ($h){ - $date_debut = _T('date_fmt_jour_heure',array('jour'=>$date_debut,'heure'=>$hd)); - $date_fin = _T('date_fmt_jour_heure',array('jour'=>$date_fin,'heure'=>$hf)); - } - - $date_debut = $dtstart.$date_debut.$dtabbr; - $date_fin=$dtend.$date_fin.$dtabbr; - $s = _T('date_fmt_periode',array('date_debut' => $date_debut,'date_fin'=>$date_fin)); - - } - return $s; -} +function aligner_droite($letexte) { return aligner($letexte, 'right'); } /** - * Alignements en HTML (Old-style, preferer CSS) - * Cette fonction ne cree pas de paragraphe - * - * http://doc.spip.org/@aligner + * Aligne à gauche en HTML (Old-style, préférer CSS) * - * @param $letexte - * @param string $justif + * @deprecated Utiliser CSS + * @uses aligner() + * @param string $letexte * @return string */ -function aligner($letexte, $justif='') { - $letexte = trim($letexte); - if (!strlen($letexte)) return ''; - - // Paragrapher rapidement - $letexte = "
" - . $letexte - ."
"; +function aligner_gauche($letexte) { return aligner($letexte, 'left'); } - return $letexte; -} -// http://doc.spip.org/@justifier -function justifier($letexte) { return aligner($letexte,'justify');} -// http://doc.spip.org/@aligner_droite -function aligner_droite($letexte) { return aligner($letexte,'right');} -// http://doc.spip.org/@aligner_gauche -function aligner_gauche($letexte) {return aligner($letexte,'left');} -// http://doc.spip.org/@centrer -function centrer($letexte) {return aligner($letexte,'center');} +/** + * Centre en HTML (Old-style, préférer CSS) + * + * @deprecated Utiliser CSS + * @uses aligner() + * @param string $letexte + * @return string + */ +function centrer($letexte) { return aligner($letexte, 'center'); } -// http://doc.spip.org/@style_align +/** + * Retourne un texte de style CSS aligné sur la langue en cours + * + * @deprecated + * @param mixed $bof Inutilisé + * @return string Style CSS + **/ function style_align($bof) { - global $spip_lang_left; - return "text-align: $spip_lang_left"; + + return "text-align: " . $GLOBALS['spip_lang_left']; } // // Export iCal // -// http://doc.spip.org/@filtrer_ical +/** + * Adapte un texte pour être inséré dans une valeur d'un export ICAL + * + * Passe le texte en utf8, enlève les sauts de lignes et échappe les virgules. + * + * @example `SUMMARY:[(#TITRE|filtrer_ical)]` + * @filtre + * + * @param string $texte + * @return string + **/ function filtrer_ical($texte) { #include_spip('inc/charsets'); $texte = html2unicode($texte); @@ -1331,155 +1472,258 @@ function filtrer_ical($texte) { return $texte; } -// http://doc.spip.org/@date_ical -function date_ical($date, $addminutes = 0) { - list($heures, $minutes, $secondes) = recup_heure($date); - list($annee, $mois, $jour) = recup_date($date); - return gmdate("Ymd\THis\Z", mktime($heures, $minutes + $addminutes, $secondes, $mois, $jour, $annee)); -} - -// date_iso retourne la date au format "RFC 3339" / "ISO 8601" -// voir http://www.php.net/manual/fr/ref.datetime.php#datetime.constants -// http://doc.spip.org/@date_iso -function date_iso($date_heure) { - list($annee, $mois, $jour) = recup_date($date_heure); - list($heures, $minutes, $secondes) = recup_heure($date_heure); - $time = @mktime($heures, $minutes, $secondes, $mois, $jour, $annee); - return gmdate('Y-m-d\TH:i:s\Z', $time); -} - -// date_822 retourne la date au format "RFC 822" -// utilise pour dans certains feeds RSS -// http://doc.spip.org/@date_822 -function date_822($date_heure) { - list($annee, $mois, $jour) = recup_date($date_heure); - list($heures, $minutes, $secondes) = recup_heure($date_heure); - $time = mktime($heures, $minutes, $secondes, $mois, $jour, $annee); - return date('r', $time); -} - -// http://doc.spip.org/@date_anneemoisjour -function date_anneemoisjour($d) { - if (!$d) $d = date("Y-m-d"); - return substr($d, 0, 4) . substr($d, 5, 2) .substr($d, 8, 2); -} - -// http://doc.spip.org/@date_anneemois -function date_anneemois($d) { - if (!$d) $d = date("Y-m-d"); - return substr($d, 0, 4) . substr($d, 5, 2); -} - -// http://doc.spip.org/@date_debut_semaine -function date_debut_semaine($annee, $mois, $jour) { - $w_day = date("w", mktime(0,0,0,$mois, $jour, $annee)); - if ($w_day == 0) $w_day = 7; // Gaffe: le dimanche est zero - $debut = $jour-$w_day+1; - return date("Ymd", mktime(0,0,0,$mois,$debut,$annee)); -} - -// http://doc.spip.org/@date_fin_semaine -function date_fin_semaine($annee, $mois, $jour) { - $w_day = date("w", mktime(0,0,0,$mois, $jour, $annee)); - if ($w_day == 0) $w_day = 7; // Gaffe: le dimanche est zero - $debut = $jour-$w_day+1; - return date("Ymd", mktime(0,0,0,$mois,$debut+6,$annee)); -} - - -// -// Recuperation de donnees dans le champ extra -// Ce filtre n'a de sens qu'avec la balise #EXTRA -// -// http://doc.spip.org/@extra -function extra($letexte, $champ) { - $champs = unserialize($letexte); - return $champs[$champ]; -} - -// postautobr : transforme les sauts de ligne en _ -// http://doc.spip.org/@post_autobr -function post_autobr($texte, $delim="\n_ ") { - if (!function_exists('echappe_html')) +/** + * Transforme les sauts de ligne simples en sauts forcés avec `_ ` + * + * Ne modifie pas les sauts de paragraphe (2 sauts consécutifs au moins), + * ou les retours à l'intérieur de modèles ou de certaines balises html. + * + * @note + * Cette fonction pouvait être utilisée pour forcer les alinéas, + * (retours à la ligne sans saut de paragraphe), mais ce traitement + * est maintenant automatique. + * Cf. plugin Textwheel et la constante _AUTOBR + * + * @uses echappe_html() + * @uses echappe_retour() + * + * @param string $texte + * @param string $delim + * Ce par quoi sont remplacés les sauts + * @return string + **/ +function post_autobr($texte, $delim = "\n_ ") { + if (!function_exists('echappe_html')) { include_spip('inc/texte_mini'); + } $texte = str_replace("\r\n", "\r", $texte); $texte = str_replace("\r", "\n", $texte); - if (preg_match(",\n+$,", $texte, $fin)) + if (preg_match(",\n+$,", $texte, $fin)) { $texte = substr($texte, 0, -strlen($fin = $fin[0])); - else + } else { $fin = ''; + } $texte = echappe_html($texte, '', true); // echapper les modeles - if (strpos($texte,"<")!==false){ + if (strpos($texte, "<") !== false) { include_spip('inc/lien'); - if (defined('_PREG_MODELE')){ - $preg_modeles = "@"._PREG_MODELE."@imsS"; + if (defined('_PREG_MODELE')) { + $preg_modeles = "@" . _PREG_MODELE . "@imsS"; $texte = echappe_html($texte, '', true, $preg_modeles); } } $debut = ''; $suite = $texte; - while ($t = strpos('-'.$suite, "\n", 1)) { - $debut .= substr($suite, 0, $t-1); + while ($t = strpos('-' . $suite, "\n", 1)) { + $debut .= substr($suite, 0, $t - 1); $suite = substr($suite, $t); $car = substr($suite, 0, 1); - if (($car<>'-') AND ($car<>'_') AND ($car<>"\n") AND ($car<>"|") AND ($car<>"}") - AND !preg_match(',^\s*(\n| *$,iS', $debut)) { + if (($car <> '-') and ($car <> '_') and ($car <> "\n") and ($car <> "|") and ($car <> "}") + and !preg_match(',^\s*(\n| *$,iS', $debut) + ) { $debut .= $delim; - } else + } else { $debut .= "\n"; + } if (preg_match(",^\n+,", $suite, $regs)) { - $debut.=$regs[0]; + $debut .= $regs[0]; $suite = substr($suite, strlen($regs[0])); } } - $texte = $debut.$suite; + $texte = $debut . $suite; $texte = echappe_retour($texte); - return $texte.$fin; + + return $texte . $fin; } +/** + * Expression régulière pour obtenir le contenu des extraits idiomes `<:module:cle:>` + * + * @var string + */ +define('_EXTRAIRE_IDIOME', '@<:(?:([a-z0-9_]+):)?([a-z0-9_]+):>@isS'); + +/** + * Extrait une langue des extraits idiomes (`<:module:cle_de_langue:>`) + * + * Retrouve les balises `<:cle_de_langue:>` d'un texte et remplace son contenu + * par l'extrait correspondant à la langue demandée (si possible), sinon dans la + * langue par défaut du site. + * + * Ne pas mettre de span@lang=fr si on est déjà en fr. + * + * @filtre + * @uses inc_traduire_dist() + * @uses code_echappement() + * @uses echappe_retour() + * + * @param string $letexte + * @param string $lang + * Langue à retrouver (si vide, utilise la langue en cours). + * @param array $options Options { + * @type bool $echappe_span + * True pour échapper les balises span (false par défaut) + * @type string $lang_defaut + * Code de langue : permet de définir la langue utilisée par défaut, + * en cas d'absence de traduction dans la langue demandée. + * Par défaut la langue du site. + * Indiquer 'aucune' pour ne pas retourner de texte si la langue + * exacte n'a pas été trouvée. + * } + * @return string + **/ +function extraire_idiome($letexte, $lang = null, $options = array()) { + static $traduire = false; + if ($letexte + and preg_match_all(_EXTRAIRE_IDIOME, $letexte, $regs, PREG_SET_ORDER) + ) { + if (!$traduire) { + $traduire = charger_fonction('traduire', 'inc'); + include_spip('inc/lang'); + } + if (!$lang) { + $lang = $GLOBALS['spip_lang']; + } + // Compatibilité avec le prototype de fonction précédente qui utilisait un boolean + if (is_bool($options)) { + $options = array('echappe_span' => $options); + } + if (!isset($options['echappe_span'])) { + $options = array_merge($options, array('echappe_span' => false)); + } + + foreach ($regs as $reg) { + $cle = ($reg[1] ? $reg[1] . ':' : '') . $reg[2]; + $desc = $traduire($cle, $lang, true); + $l = $desc->langue; + // si pas de traduction, on laissera l'écriture de l'idiome entier dans le texte. + if (strlen($desc->texte)) { + $trad = code_echappement($desc->texte, 'idiome', false); + if ($l !== $lang) { + $trad = str_replace("'", '"', inserer_attribut($trad, 'lang', $l)); + } + if (lang_dir($l) !== lang_dir($lang)) { + $trad = str_replace("'", '"', inserer_attribut($trad, 'dir', lang_dir($l))); + } + if (!$options['echappe_span']) { + $trad = echappe_retour($trad, 'idiome'); + } + $letexte = str_replace($reg[0], $trad, $letexte); + } + } + } + return $letexte; +} + +/** + * Expression régulière pour obtenir le contenu des extraits polyglottes `` + * + * @var string + */ define('_EXTRAIRE_MULTI', "@(.*?)@sS"); -// Extraire et transformer les blocs multi ; on indique la langue courante -// pour ne pas mettre de span@lang=fr si on est deja en fr -// http://doc.spip.org/@extraire_multi -function extraire_multi($letexte, $lang=null, $echappe_span=false) { - if (preg_match_all(_EXTRAIRE_MULTI, $letexte, $regs, PREG_SET_ORDER)) { - if (!$lang) $lang = $GLOBALS['spip_lang']; +/** + * Extrait une langue des extraits polyglottes (``) + * + * Retrouve les balises `` d'un texte et remplace son contenu + * par l'extrait correspondant à la langue demandée. + * + * Si la langue demandée n'est pas trouvée dans le multi, ni une langue + * approchante (exemple `fr` si on demande `fr_TU`), on retourne l'extrait + * correspondant à la langue par défaut (option 'lang_defaut'), qui est + * par défaut la langue du site. Et si l'extrait n'existe toujours pas + * dans cette langue, ça utilisera la première langue utilisée + * dans la balise ``. + * + * Ne pas mettre de span@lang=fr si on est déjà en fr. + * + * @filtre + * @link http://www.spip.net/5332 + * + * @uses extraire_trads() + * @uses approcher_langue() + * @uses lang_typo() + * @uses code_echappement() + * @uses echappe_retour() + * + * @param string $letexte + * @param string $lang + * Langue à retrouver (si vide, utilise la langue en cours). + * @param array $options Options { + * @type bool $echappe_span + * True pour échapper les balises span (false par défaut) + * @type string $lang_defaut + * Code de langue : permet de définir la langue utilisée par défaut, + * en cas d'absence de traduction dans la langue demandée. + * Par défaut la langue du site. + * Indiquer 'aucune' pour ne pas retourner de texte si la langue + * exacte n'a pas été trouvée. + * } + * @return string + **/ +function extraire_multi($letexte, $lang = null, $options = array()) { + + if ($letexte + and preg_match_all(_EXTRAIRE_MULTI, $letexte, $regs, PREG_SET_ORDER) + ) { + if (!$lang) { + $lang = $GLOBALS['spip_lang']; + } + + // Compatibilité avec le prototype de fonction précédente qui utilisait un boolean + if (is_bool($options)) { + $options = array('echappe_span' => $options, 'lang_defaut' => _LANGUE_PAR_DEFAUT); + } + if (!isset($options['echappe_span'])) { + $options = array_merge($options, array('echappe_span' => false)); + } + if (!isset($options['lang_defaut'])) { + $options = array_merge($options, array('lang_defaut' => _LANGUE_PAR_DEFAUT)); + } + + include_spip('inc/lang'); foreach ($regs as $reg) { // chercher la version de la langue courante $trads = extraire_trads($reg[1]); if ($l = approcher_langue($trads, $lang)) { $trad = $trads[$l]; } else { - include_spip('inc/texte'); - // langue absente, prendre la premiere dispo - // mais typographier le texte selon les regles de celle-ci - // Attention aux blocs multi sur plusieurs lignes - $l = key($trads); - $trad = $trads[$l]; - $typographie = charger_fonction(lang_typo($l), 'typographie'); - $trad = $typographie($trad); - include_spip('inc/texte'); - // Tester si on echappe en span ou en div - // il ne faut pas echapper en div si propre produit un seul paragraphe - $trad_propre = preg_replace(",(^]*>|

$),Uims","",propre($trad)); - $mode = preg_match(',[:space:]],iS', $trad_propre) ? 'div' : 'span'; - $trad = code_echappement($trad, 'multi', false, $mode); - $trad = str_replace("'", '"', inserer_attribut($trad, 'lang', $l)); - if (lang_dir($l) !== lang_dir($lang)) - $trad = str_replace("'", '"', inserer_attribut($trad, 'dir', lang_dir($l))); - if (!$echappe_span) - $trad = echappe_retour($trad, 'multi'); + if ($options['lang_defaut'] == 'aucune') { + $trad = ''; + } else { + // langue absente, prendre le fr ou une langue précisée (meme comportement que inc/traduire.php) + // ou la premiere dispo + // mais typographier le texte selon les regles de celle-ci + // Attention aux blocs multi sur plusieurs lignes + if (!$l = approcher_langue($trads, $options['lang_defaut'])) { + $l = key($trads); + } + $trad = $trads[$l]; + $typographie = charger_fonction(lang_typo($l), 'typographie'); + $trad = $typographie($trad); + // Tester si on echappe en span ou en div + // il ne faut pas echapper en div si propre produit un seul paragraphe + include_spip('inc/texte'); + $trad_propre = preg_replace(",(^]*>|

$),Uims", "", propre($trad)); + $mode = preg_match(',[:space:]],iS', $trad_propre) ? 'div' : 'span'; + $trad = code_echappement($trad, 'multi', false, $mode); + $trad = str_replace("'", '"', inserer_attribut($trad, 'lang', $l)); + if (lang_dir($l) !== lang_dir($lang)) { + $trad = str_replace("'", '"', inserer_attribut($trad, 'dir', lang_dir($l))); + } + if (!$options['echappe_span']) { + $trad = echappe_retour($trad, 'multi'); + } + } } $letexte = str_replace($reg[0], $trad, $letexte); } @@ -1488,16 +1732,27 @@ function extraire_multi($letexte, $lang=null, $echappe_span=false) { return $letexte; } -// convertit le contenu d'une balise multi en un tableau -// http://doc.spip.org/@extraire_trad +/** + * Convertit le contenu d'une balise `` en un tableau + * + * Exemple de blocs. + * - `texte par défaut [fr] en français [en] en anglais` + * - `[fr] en français [en] en anglais` + * + * @param string $bloc + * Le contenu intérieur d'un bloc multi + * @return array [code de langue => texte] + * Peut retourner un code de langue vide, lorsqu'un texte par défaut est indiqué. + **/ function extraire_trads($bloc) { $lang = ''; // ce reg fait planter l'analyse multi s'il y a de l'{italique} dans le champ // while (preg_match("/^(.*?)[{\[]([a-z_]+)[}\]]/siS", $bloc, $regs)) { while (preg_match("/^(.*?)[\[]([a-z_]+)[\]]/siS", $bloc, $regs)) { $texte = trim($regs[1]); - if ($texte OR $lang) + if ($texte or $lang) { $trads[$lang] = $texte; + } $bloc = substr($bloc, strlen($regs[0])); $lang = $regs[2]; } @@ -1506,31 +1761,70 @@ function extraire_trads($bloc) { return $trads; } -// Calculer l'initiale d'un nom -function initiale($nom){ - return spip_substr(trim(strtoupper(extraire_multi($nom))),0,1); + +/** + * Calculer l'initiale d'un nom + * + * @param string $nom + * @return string L'initiale en majuscule + */ +function filtre_initiale($nom) { + return spip_substr(trim(strtoupper(extraire_multi($nom))), 0, 1); } -// -// Ce filtre retourne la donnee si c'est la premiere fois qu'il la voit ; -// possibilite de gerer differentes "familles" de donnees |unique{famille} -# |unique{famille,1} affiche le nombre d'elements affiches (preferer toutefois #TOTAL_UNIQUE) -# ameliorations possibles : -# 1) si la donnee est grosse, mettre son md5 comme cle -# 2) purger $mem quand on change de squelette (sinon bug inclusions) -// -// http://www.spip.net/@unique -// http://doc.spip.org/@unique -function unique($donnee, $famille='', $cpt = false) { + +/** + * Retourne la donnée si c'est la première fois qu'il la voit + * + * Il est possible de gérer différentes "familles" de données avec + * le second paramètre. + * + * @filtre + * @link http://www.spip.net/4320 + * @example + * ``` + * [(#ID_SECTEUR|unique)] + * [(#ID_SECTEUR|unique{tete})] n'a pas d'incidence sur + * [(#ID_SECTEUR|unique{pied})] + * [(#ID_SECTEUR|unique{pied,1})] affiche le nombre d'éléments. + * Préférer totefois #TOTAL_UNIQUE{pied} + * ``` + * + * @todo + * Ameliorations possibles : + * + * 1) si la donnée est grosse, mettre son md5 comme clé + * 2) purger $mem quand on change de squelette (sinon bug inclusions) + * + * @param string $donnee + * Donnée que l'on souhaite unique + * @param string $famille + * Famille de stockage (1 unique donnée par famille) + * + * - _spip_raz_ : (interne) Vide la pile de mémoire et la retourne + * - _spip_set_ : (interne) Affecte la pile de mémoire avec la donnée + * @param bool $cpt + * True pour obtenir le nombre d'éléments différents stockés + * @return string|int|array|null|void + * + * - string : Donnée si c'est la première fois qu'elle est vue + * - void : si la donnée a déjà été vue + * - int : si l'on demande le nombre d'éléments + * - array (interne) : si on dépile + * - null (interne) : si on empile + **/ +function unique($donnee, $famille = '', $cpt = false) { static $mem = array(); // permettre de vider la pile et de la restaurer // pour le calcul de introduction... - if ($famille=='_spip_raz_'){ + if ($famille == '_spip_raz_') { $tmp = $mem; $mem = array(); + return $tmp; - } elseif ($famille=='_spip_set_'){ + } elseif ($famille == '_spip_set_') { $mem = $donnee; + return; } // eviter une notice @@ -1549,33 +1843,66 @@ function unique($donnee, $famille='', $cpt = false) { } } -// -// Filtre |alterner -// -// Exemple [(#COMPTEUR_BOUCLE|alterner{'bleu','vert','rouge'})] -// -// http://doc.spip.org/@alterner + +/** + * Filtre qui alterne des valeurs en fonction d'un compteur + * + * Affiche à tour de rôle et dans l'ordre, un des arguments transmis + * à chaque incrément du compteur. + * + * S'il n'y a qu'un seul argument, et que c'est un tableau, + * l'alternance se fait sur les valeurs du tableau. + * + * Souvent appliqué à l'intérieur d'une boucle, avec le compteur `#COMPTEUR_BOUCLE` + * + * @example + * - `[(#COMPTEUR_BOUCLE|alterner{bleu,vert,rouge})]` + * - `[(#COMPTEUR_BOUCLE|alterner{#LISTE{bleu,vert,rouge}})]` + * + * @filtre + * @link http://www.spip.net/4145 + * + * @param int $i + * Le compteur + * @return mixed + * Une des valeurs en fonction du compteur. + **/ function alterner($i) { // recuperer les arguments (attention fonctions un peu space) $num = func_num_args(); $args = func_get_args(); - if($num == 2 && is_array($args[1])) { - $args = $args[1]; - array_unshift($args,''); - $num = count($args); - } + if ($num == 2 && is_array($args[1])) { + $args = $args[1]; + array_unshift($args, ''); + $num = count($args); + } // renvoyer le i-ieme argument, modulo le nombre d'arguments - return $args[(intval($i)-1)%($num-1)+1]; + return $args[(intval($i) - 1) % ($num - 1) + 1]; } -// recuperer un attribut d'une balise html -// ($complet demande de retourner $r) -// la regexp est mortelle : cf. tests/filtres/extraire_attribut.php -// Si on a passe un tableau de balises, renvoyer un tableau de resultats -// (dans ce cas l'option $complet n'est pas disponible) -// http://doc.spip.org/@extraire_attribut + +/** + * Récupérer un attribut d'une balise HTML + * + * la regexp est mortelle : cf. `tests/unit/filtres/extraire_attribut.php` + * Si on a passé un tableau de balises, renvoyer un tableau de résultats + * (dans ce cas l'option `$complet` n'est pas disponible) + * + * @param string|array $balise + * Texte ou liste de textes dont on veut extraire des balises + * @param string $attribut + * Nom de l'attribut désiré + * @param bool $complet + * True pour retourner un tableau avec + * - le texte de la balise + * - l'ensemble des résultats de la regexp ($r) + * @return string|array + * - Texte de l'attribut retourné, ou tableau des texte d'attributs + * (si 1er argument tableau) + * - Tableau complet (si 2e argument) + **/ function extraire_attribut($balise, $attribut, $complet = false) { if (is_array($balise)) { array_walk($balise, @@ -1583,120 +1910,240 @@ function extraire_attribut($balise, $attribut, $complet = false) { '$a = extraire_attribut($a,$t);' ), $attribut); + return $balise; } if (preg_match( - ',(^.*?<(?:(?>\s*)(?>[\w:.-]+)(?>(?:=(?:"[^"]*"|\'[^\']*\'|[^\'"]\S*))?))*?)(\s+' - .$attribut - .'(?:=\s*("[^"]*"|\'[^\']*\'|[^\'"]\S*))?)()([^>]*>.*),isS', + ',(^.*?<(?:(?>\s*)(?>[\w:.-]+)(?>(?:=(?:"[^"]*"|\'[^\']*\'|[^\'"]\S*))?))*?)(\s+' + . $attribut + . '(?:=\s*("[^"]*"|\'[^\']*\'|[^\'"]\S*))?)()((?:[\s/][^>]*)?>.*),isS', - $balise, $r)) { - if ($r[3][0] == '"' || $r[3][0] == "'") { + $balise, $r)) { + if (isset($r[3][0]) and ($r[3][0] == '"' || $r[3][0] == "'")) { $r[4] = substr($r[3], 1, -1); $r[3] = $r[3][0]; - } elseif ($r[3]!=='') { - $r[4] = $r[3]; + } elseif ($r[3] !== '') { + $r[4] = $r[3]; $r[3] = ''; } else { - $r[4] = trim($r[2]); + $r[4] = trim($r[2]); } $att = $r[4]; - if (strpos($att,"&#")!==false) - $att = str_replace(array("'","'",""","""), array("'","'",'"','"'), $att); + if (strpos($att, "&#") !== false) { + $att = str_replace(array("'", "'", """, """), array("'", "'", '"', '"'), $att); + } $att = filtrer_entites($att); + } else { + $att = null; } - else - $att = NULL; - if ($complet) + if ($complet) { return array($att, $r); - else + } else { return $att; + } } /** - * modifier (ou inserer) un attribut html dans une balise + * Insérer (ou modifier) un attribut html dans une balise + * + * @example + * - `[(#LOGO_ARTICLE|inserer_attribut{class, logo article})]` + * - `[(#LOGO_ARTICLE|inserer_attribut{alt, #TTTRE|attribut_html|couper{60}})]` + * - `[(#FICHIER|image_reduire{40}|inserer_attribut{data-description, #DESCRIPTIF})]` + * Laissera les balises HTML de la valeur (ici `#DESCRIPTIF`) si on n'applique pas le + * filtre `attribut_html` dessus. * - * http://doc.spip.org/@inserer_attribut + * @filtre + * @link http://www.spip.net/4294 + * @uses attribut_html() + * @uses extraire_attribut() * * @param string $balise + * Code html de la balise (ou contenant une balise) * @param string $attribut + * Nom de l'attribut html à modifier * @param string $val + * Valeur de l'attribut à appliquer * @param bool $proteger + * Prépare la valeur en tant qu'attribut de balise (mais conserve les balises html). * @param bool $vider + * True pour vider l'attribut. Une chaîne vide pour `$val` fera pareil. * @return string - */ -function inserer_attribut($balise, $attribut, $val, $proteger=true, $vider=false) { + * Code html modifié + **/ +function inserer_attribut($balise, $attribut, $val, $proteger = true, $vider = false) { // preparer l'attribut // supprimer les   etc mais pas les balises html // qui ont un sens dans un attribut value d'un input - if ($proteger) $val = attribut_html($val,false); + if ($proteger) { + $val = attribut_html($val, false); + } // echapper les ' pour eviter tout bug $val = str_replace("'", "'", $val); - if ($vider AND strlen($val)==0) + if ($vider and strlen($val) == 0) { $insert = ''; - else + } else { $insert = " $attribut='$val'"; + } list($old, $r) = extraire_attribut($balise, $attribut, true); - if ($old !== NULL) { + if ($old !== null) { // Remplacer l'ancien attribut du meme nom - $balise = $r[1].$insert.$r[5]; - } - else { + $balise = $r[1] . $insert . $r[5]; + } else { // preferer une balise " />" (comme ) - if (preg_match(',/>,', $balise)) - $balise = preg_replace(",\s?/>,S", $insert." />", $balise, 1); - // sinon une balise ... - else - $balise = preg_replace(",\s?>,S", $insert.">", $balise, 1); + if (preg_match(',/>,', $balise)) { + $balise = preg_replace(",\s?/>,S", $insert . " />", $balise, 1); + } // sinon une balise ... + else { + $balise = preg_replace(",\s?>,S", $insert . ">", $balise, 1); + } } return $balise; } -// http://doc.spip.org/@vider_attribut -function vider_attribut ($balise, $attribut) { +/** + * Supprime un attribut HTML + * + * @example `[(#LOGO_ARTICLE|vider_attribut{class})]` + * + * @filtre + * @link http://www.spip.net/4142 + * @uses inserer_attribut() + * @see extraire_attribut() + * + * @param string $balise Code HTML de l'élément + * @param string $attribut Nom de l'attribut à enlever + * @return string Code HTML sans l'attribut + **/ +function vider_attribut($balise, $attribut) { return inserer_attribut($balise, $attribut, '', false, true); } /** - * Un filtre pour determiner le nom du satut des inscrits + * Un filtre pour déterminer le nom du statut des inscrits * * @param void|int $id * @param string $mode * @return string */ -function tester_config($id, $mode='') { +function tester_config($id, $mode = '') { include_spip('action/inscrire_auteur'); + return tester_statut_inscription($mode, $id); } // // Quelques fonctions de calcul arithmetique // -// http://doc.spip.org/@plus -function plus($a,$b) { - return $a+$b; -} -// http://doc.spip.org/@moins -function moins($a,$b) { - return $a-$b; +function floatstr($a) { return str_replace(',','.',(string)floatval($a)); } +function strize($f, $a, $b) { return floatstr($f(floatstr($a),floatstr($b))); } + +/** + * Additionne 2 nombres + * + * @filtre + * @link http://www.spip.net/4307 + * @see moins() + * @example + * ``` + * [(#VAL{28}|plus{14})] + * ``` + * + * @param int $a + * @param int $b + * @return int $a+$b + **/ +function plus($a, $b) { + return $a + $b; +} +function strplus($a, $b) {return strize('plus', $a, $b);} +/** + * Soustrait 2 nombres + * + * @filtre + * @link http://www.spip.net/4302 + * @see plus() + * @example + * ``` + * [(#VAL{28}|moins{14})] + * ``` + * + * @param int $a + * @param int $b + * @return int $a-$b + **/ +function moins($a, $b) { + return $a - $b; } -// http://doc.spip.org/@mult -function mult($a,$b) { - return $a*$b; +function strmoins($a, $b) {return strize('moins', $a, $b);} + +/** + * Multiplie 2 nombres + * + * @filtre + * @link http://www.spip.net/4304 + * @see div() + * @see modulo() + * @example + * ``` + * [(#VAL{28}|mult{14})] + * ``` + * + * @param int $a + * @param int $b + * @return int $a*$b + **/ +function mult($a, $b) { + return $a * $b; } -// http://doc.spip.org/@div -function div($a,$b) { - return $b?$a/$b:0; +function strmult($a, $b) {return strize('mult', $a, $b);} + +/** + * Divise 2 nombres + * + * @filtre + * @link http://www.spip.net/4279 + * @see mult() + * @see modulo() + * @example + * ``` + * [(#VAL{28}|div{14})] + * ``` + * + * @param int $a + * @param int $b + * @return int $a/$b (ou 0 si $b est nul) + **/ +function div($a, $b) { + return $b ? $a / $b : 0; } -// http://doc.spip.org/@modulo -function modulo($nb, $mod, $add=0) { - return ($mod?$nb%$mod:0)+$add; +function strdiv($a, $b) {return strize('div', $a, $b);} + +/** + * Retourne le modulo 2 nombres + * + * @filtre + * @link http://www.spip.net/4301 + * @see mult() + * @see div() + * @example + * ``` + * [(#VAL{28}|modulo{14})] + * ``` + * + * @param int $nb + * @param int $mod + * @param int $add + * @return int ($nb % $mod) + $add + **/ +function modulo($nb, $mod, $add = 0) { + return ($mod ? $nb % $mod : 0) + $add; } @@ -1709,36 +2156,48 @@ function modulo($nb, $mod, $add=0) { * @return bool * - false si pas conforme, * - true sinon -**/ + **/ function nom_acceptable($nom) { if (!is_string($nom)) { return false; } - if (!defined('_TAGS_NOM_AUTEUR')) define('_TAGS_NOM_AUTEUR',''); + if (!defined('_TAGS_NOM_AUTEUR')) { + define('_TAGS_NOM_AUTEUR', ''); + } $tags_acceptes = array_unique(explode(',', 'multi,' . _TAGS_NOM_AUTEUR)); - foreach($tags_acceptes as $tag) { + foreach ($tags_acceptes as $tag) { if (strlen($tag)) { - $remp1[] = '<'.trim($tag).'>'; - $remp1[] = ''; - $remp2[] = '\x60'.trim($tag).'\x61'; - $remp2[] = '\x60/'.trim($tag).'\x61'; + $remp1[] = '<' . trim($tag) . '>'; + $remp1[] = ''; + $remp2[] = '\x60' . trim($tag) . '\x61'; + $remp2[] = '\x60/' . trim($tag) . '\x61'; } - } + } $v_nom = str_replace($remp2, $remp1, supprimer_tags(str_replace($remp1, $remp2, $nom))); + return str_replace('<', '<', $v_nom) == $nom; } -// Verifier la conformite d'une ou plusieurs adresses email -// retourne false ou la normalisation de la derniere adresse donnee -// http://doc.spip.org/@email_valide + +/** + * Vérifier la conformité d'une ou plusieurs adresses email (suivant RFC 822) + * + * @param string $adresses + * Adresse ou liste d'adresse + * @return bool|string + * - false si pas conforme, + * - la normalisation de la dernière adresse donnée sinon + **/ function email_valide($adresses) { // eviter d'injecter n'importe quoi dans preg_match - if (!is_string($adresses)) + if (!is_string($adresses)) { return false; + } // Si c'est un spammeur autant arreter tout de suite if (preg_match(",[\n\r].*(MIME|multipart|Content-),i", $adresses)) { spip_log("Tentative d'injection de mail : $adresses"); + return false; } @@ -1747,174 +2206,365 @@ function email_valide($adresses) { // "Marie Toto " $adresse = trim(preg_replace(",^[^<>\"]*<([^<>\"]+)>$,i", "\\1", $v)); // RFC 822 - if (!preg_match('#^[^()<>@,;:\\"/[:space:]]+(@([-_0-9a-z]+\.)*[-_0-9a-z]+)$#i', $adresse)) + if (!preg_match('#^[^()<>@,;:\\"/[:space:]]+(@([-_0-9a-z]+\.)*[-_0-9a-z]+)$#i', $adresse)) { return false; + } } + return $adresse; } -// http://doc.spip.org/@afficher_enclosures +/** + * Permet d'afficher un symbole à côté des liens pointant vers les + * documents attachés d'un article (liens ayant `rel=enclosure`). + * + * @filtre + * @link http://www.spip.net/4134 + * + * @param string $tags Texte + * @return string Texte + **/ function afficher_enclosures($tags) { $s = array(); foreach (extraire_balises($tags, 'a') as $tag) { if (extraire_attribut($tag, 'rel') == 'enclosure' - AND $t = extraire_attribut($tag, 'href')) { - $s[] = preg_replace(',>[^<]+,S', + and $t = extraire_attribut($tag, 'href') + ) { + $s[] = preg_replace(',>[^<]+,S', '>' - .http_img_pack('attachment-16.png', $t, - 'title="'.attribut_html($t).'"') - .'', $tag); + . http_img_pack('attachment-16.png', $t, + 'title="' . attribut_html($t) . '"') + . '', $tag); } } + return join(' ', $s); } -// http://doc.spip.org/@afficher_tags -function afficher_tags($tags, $rels='tag,directory') { + +/** + * Filtre des liens HTML `` selon la valeur de leur attribut `rel` + * et ne retourne que ceux là. + * + * @filtre + * @link http://www.spip.net/4187 + * + * @param string $tags Texte + * @param string $rels Attribut `rel` à capturer (ou plusieurs séparés par des virgules) + * @return string Liens trouvés + **/ +function afficher_tags($tags, $rels = 'tag, directory') { $s = array(); foreach (extraire_balises($tags, 'a') as $tag) { $rel = extraire_attribut($tag, 'rel'); - if (strstr(",$rels,", ",$rel,")) + if (strstr(",$rels,", ",$rel,")) { $s[] = $tag; + } } + return join(', ', $s); } -// Passe un -// au format microformat fichier -// attention length="zz" devient title="zz", pour rester conforme -// http://doc.spip.org/@enclosure2microformat + +/** + * Convertir les médias fournis par un flux RSS (podcasts) + * en liens conformes aux microformats + * + * Passe un `` + * au format microformat `fichier`. + * + * Peut recevoir un `` + * @return string Tag HTML `` avec microformat. + **/ function enclosure2microformat($e) { - if (!$url = filtrer_entites(extraire_attribut($e, 'url'))) + if (!$url = filtrer_entites(extraire_attribut($e, 'url'))) { $url = filtrer_entites(extraire_attribut($e, 'href')); + } $type = extraire_attribut($e, 'type'); if (!$length = extraire_attribut($e, 'length')) { # '.$fichier.''; + . ($url ? ' href="' . spip_htmlspecialchars($url) . '"' : '') + . ($type ? ' type="' . spip_htmlspecialchars($type) . '"' : '') + . ($length ? ' title="' . spip_htmlspecialchars($length) . '"' : '') + . '>' . $fichier . ''; } -// La fonction inverse -// http://doc.spip.org/@microformat2enclosure + +/** + * Convertir les liens conformes aux microformats en médias pour flux RSS, + * par exemple pour les podcasts + * + * Passe un texte ayant des liens avec microformat + * `fichier` + * au format RSS ``. + * + * @filtre + * @see enclosure2microformat() Pour l'inverse + * + * @param string $tags Texte HTML ayant des tag `` avec microformat + * @return string Tags RSS ``. + **/ function microformat2enclosure($tags) { $enclosures = array(); - foreach (extraire_balises($tags, 'a') as $e) - if (extraire_attribut($e, 'rel') == 'enclosure') { - $url = filtrer_entites(extraire_attribut($e, 'href')); - $type = extraire_attribut($e, 'type'); - if (!$length = intval(extraire_attribut($e, 'title'))) - $length = intval(extraire_attribut($e, 'length')); # vieux data - $fichier = basename($url); - $enclosures[] = ''; + foreach (extraire_balises($tags, 'a') as $e) { + if (extraire_attribut($e, 'rel') == 'enclosure') { + $url = filtrer_entites(extraire_attribut($e, 'href')); + $type = extraire_attribut($e, 'type'); + if (!$length = intval(extraire_attribut($e, 'title'))) { + $length = intval(extraire_attribut($e, 'length')); + } # vieux data + $fichier = basename($url); + $enclosures[] = ''; + } } + return join("\n", $enclosures); } -// Creer les elements ATOM a partir des tags -// http://doc.spip.org/@tags2dcsubject + + +/** + * Créer les éléments ATOM `` à partir des tags + * + * Convertit les liens avec attribut `rel="tag"` + * en balise `` pour les flux RSS au format Atom. + * + * @filtre + * + * @param string $tags Texte + * @return string Tags RSS Atom ``. + **/ function tags2dcsubject($tags) { $subjects = ''; foreach (extraire_balises($tags, 'a') as $e) { if (extraire_attribut($e, rel) == 'tag') { $subjects .= '' . texte_backend(textebrut($e)) - . ''."\n"; + . '' . "\n"; } } + return $subjects; } -// retourne la premiere balise du type demande -// ex: [(#DESCRIPTIF|extraire_balise{img})] -// Si on a passe un tableau de textes, renvoyer un tableau de resultats -// http://doc.spip.org/@extraire_balise -function extraire_balise($texte, $tag='a') { +/** + * Retourne la premiere balise html du type demandé + * + * Retourne le contenu d'une balise jusqu'à la première fermeture rencontrée + * du même type. + * Si on a passe un tableau de textes, retourne un tableau de resultats. + * + * @example `[(#DESCRIPTIF|extraire_balise{img})]` + * + * @filtre + * @link http://www.spip.net/4289 + * @see extraire_balises() + * @note + * Attention : les résultats peuvent être incohérents sur des balises imbricables, + * tel que demander à extraire `div` dans le texte `
un
mot
absent
`, + * ce qui retournerait `
un
mot
` donc. + * + * @param string|array $texte + * Texte(s) dont on souhaite extraire une balise html + * @param string $tag + * Nom de la balise html à extraire + * @return void|string|array + * - Code html de la balise, sinon rien + * - Tableau de résultats, si tableau en entrée. + **/ +function extraire_balise($texte, $tag = 'a') { if (is_array($texte)) { - array_walk($texte, + array_walk( + $texte, create_function('&$a,$key,$t', '$a = extraire_balise($a,$t);'), - $tag); + $tag + ); + return $texte; } if (preg_match( - ",<$tag\b[^>]*(/>|>.*]*>|>),UimsS", - $texte, $regs)) + ",<$tag\b[^>]*(/>|>.*]*>|>),UimsS", + $texte, $regs)) { return $regs[0]; + } } -// extraire toutes les balises du type demande, sous forme de tableau -// Si on a passe un tableau de textes, renvoyer un tableau de resultats -// http://doc.spip.org/@extraire_balises -function extraire_balises($texte, $tag='a') { +/** + * Extrait toutes les balises html du type demandé + * + * Retourne dans un tableau le contenu de chaque balise jusqu'à la première + * fermeture rencontrée du même type. + * Si on a passe un tableau de textes, retourne un tableau de resultats. + * + * @example `[(#TEXTE|extraire_balises{img}|implode{" - "})]` + * + * @filtre + * @link http://www.spip.net/5618 + * @see extraire_balise() + * @note + * Attention : les résultats peuvent être incohérents sur des balises imbricables, + * tel que demander à extraire `div` dans un texte. + * + * @param string|array $texte + * Texte(s) dont on souhaite extraire une balise html + * @param string $tag + * Nom de la balise html à extraire + * @return array + * - Liste des codes html des occurrences de la balise, sinon tableau vide + * - Tableau de résultats, si tableau en entrée. + **/ +function extraire_balises($texte, $tag = 'a') { if (is_array($texte)) { - array_walk($texte, + array_walk( + $texte, create_function('&$a,$key,$t', '$a = extraire_balises($a,$t);'), - $tag); + $tag + ); + return $texte; } if (preg_match_all( - ",<${tag}\b[^>]*(/>|>.*]*>|>),UimsS", - $texte, $regs, PREG_PATTERN_ORDER)) + ",<${tag}\b[^>]*(/>|>.*]*>|>),UimsS", + $texte, $regs, PREG_PATTERN_ORDER)) { return $regs[0]; - else + } else { return array(); + } } -// comme in_array mais renvoie son 3e arg si le 2er arg n'est pas un tableau -// prend ' ' comme representant de vrai et '' de faux +/** + * Indique si le premier argument est contenu dans le second + * + * Cette fonction est proche de `in_array()` en PHP avec comme principale + * différence qu'elle ne crée pas d'erreur si le second argument n'est pas + * un tableau (dans ce cas elle tentera de le désérialiser, et sinon retournera + * la valeur par défaut transmise). + * + * @example `[(#VAL{deux}|in_any{#LISTE{un,deux,trois}}|oui) ... ]` + * + * @filtre + * @see filtre_find() Assez proche, avec les arguments valeur et tableau inversés. + * + * @param string $val + * Valeur à chercher dans le tableau + * @param array|string $vals + * Tableau des valeurs. S'il ce n'est pas un tableau qui est transmis, + * la fonction tente de la désérialiser. + * @param string $def + * Valeur par défaut retournée si `$vals` n'est pas un tableau. + * @return string + * - ' ' si la valeur cherchée est dans le tableau + * - '' si la valeur n'est pas dans le tableau + * - `$def` si on n'a pas transmis de tableau + **/ +function in_any($val, $vals, $def = '') { + if (!is_array($vals) and $v = unserialize($vals)) { + $vals = $v; + } -// http://doc.spip.org/@in_any -function in_any($val, $vals, $def='') { - if (!is_array($vals) AND $v=unserialize($vals)) $vals = $v; - return (!is_array($vals) ? $def : (in_array($val, $vals) ? ' ' : '')); + return (!is_array($vals) ? $def : (in_array($val, $vals) ? ' ' : '')); } -// valeur_numerique("3*2") => 6 -// n'accepte que les *, + et - (a ameliorer si on l'utilise vraiment) -// http://doc.spip.org/@valeur_numerique + +/** + * Retourne le résultat d'une expression mathématique simple + * + * N'accepte que les *, + et - (à ameliorer si on l'utilise vraiment). + * + * @filtre + * @example + * ``` + * valeur_numerique("3*2") retourne 6 + * ``` + * + * @param string $expr + * Expression mathématique `nombre operateur nombre` comme `3*2` + * @return int + * Résultat du calcul + **/ function valeur_numerique($expr) { $a = 0; - if (preg_match(',^[0-9]+(\s*[+*-]\s*[0-9]+)*$,S', trim($expr))) + if (preg_match(',^[0-9]+(\s*[+*-]\s*[0-9]+)*$,S', trim($expr))) { eval("\$a = $expr;"); + } + return intval($a); } -// http://doc.spip.org/@regledetrois -function regledetrois($a,$b,$c) -{ - return round($a*$b/$c); +/** + * Retourne un calcul de règle de trois + * + * @filtre + * @example + * ``` + * [(#VAL{6}|regledetrois{4,3})] retourne 8 + * ``` + * + * @param int $a + * @param int $b + * @param int $c + * @return int + * Retourne `$a*$b/$c` + **/ +function regledetrois($a, $b, $c) { + return round($a * $b / $c); } -// Fournit la suite de Input-Hidden correspondant aux parametres de -// l'URL donnee en argument, compatible avec les types_urls depuis [14447]. -// cf. tests/filtres/form_hidden.html -// http://doc.spip.org/@form_hidden + +/** + * Crée des tags HTML input hidden pour chaque paramètre et valeur d'une URL + * + * Fournit la suite de Input-Hidden correspondant aux paramètres de + * l'URL donnée en argument, compatible avec les types_urls + * + * @filtre + * @link http://www.spip.net/4286 + * @see balise_ACTION_FORMULAIRE() + * Également pour transmettre les actions à un formulaire + * @example + * ``` + * [(#ENV{action}|form_hidden)] dans un formulaire + * ``` + * + * @param string $action URL + * @return string Suite de champs input hidden + **/ function form_hidden($action) { $contexte = array(); include_spip('inc/urls'); if ($p = urls_decoder_url($action, '') - AND reset($p)) { + and reset($p) + ) { $fond = array_shift($p); - if ($fond!='404'){ + if ($fond != '404') { $contexte = array_shift($p); $contexte['page'] = $fond; - $action = preg_replace('/([?]'.preg_quote($fond).'[^&=]*[0-9]+)(&|$)/', '?&', $action); + $action = preg_replace('/([?]' . preg_quote($fond) . '[^&=]*[0-9]+)(&|$)/', '?&', $action); } } // defaire ce qu'a injecte urls_decoder_url : a revoir en modifiant la signature de urls_decoder_url - if (defined('_DEFINIR_CONTEXTE_TYPE') AND _DEFINIR_CONTEXTE_TYPE) + if (defined('_DEFINIR_CONTEXTE_TYPE') and _DEFINIR_CONTEXTE_TYPE) { unset($contexte['type']); - if (defined('_DEFINIR_CONTEXTE_TYPE_PAGE') AND _DEFINIR_CONTEXTE_TYPE_PAGE) + } + if (defined('_DEFINIR_CONTEXTE_TYPE_PAGE') and _DEFINIR_CONTEXTE_TYPE_PAGE) { unset($contexte['type-page']); + } // on va remplir un tableau de valeurs en prenant bien soin de ne pas // ecraser les elements de la forme mots[]=1&mots[]=2 @@ -1922,305 +2572,496 @@ function form_hidden($action) { // d'abord avec celles de l'url if (false !== ($p = strpos($action, '?'))) { - foreach(preg_split('/&(amp;)?/S',substr($action,$p+1)) as $c){ - list($var,$val) = explode('=', $c, 2); + foreach (preg_split('/&(amp;)?/S', substr($action, $p + 1)) as $c) { + $c = explode('=', $c, 2); + $var = array_shift($c); + $val = array_shift($c); if ($var) { - $val = rawurldecode($val); - $var = rawurldecode($var); // decoder les [] eventuels - if (preg_match(',\[\]$,S', $var)) + $val = rawurldecode($val); + $var = rawurldecode($var); // decoder les [] eventuels + if (preg_match(',\[\]$,S', $var)) { $values[] = array($var, $val); - else if (!isset($values[$var])) - $values[$var] = array($var, $val); + } else { + if (!isset($values[$var])) { + $values[$var] = array($var, $val); + } + } } } } // ensuite avec celles du contexte, sans doublonner ! - foreach($contexte as $var=>$val) - if (preg_match(',\[\]$,S', $var)) + foreach ($contexte as $var => $val) { + if (preg_match(',\[\]$,S', $var)) { $values[] = array($var, $val); - else if (!isset($values[$var])) - $values[$var] = array($var, $val); + } else { + if (!isset($values[$var])) { + $values[$var] = array($var, $val); + } + } + } // puis on rassemble le tout $hidden = array(); - foreach($values as $value) { - list($var,$val) = $value; + foreach ($values as $value) { + list($var, $val) = $value; $hidden[] = '"; + : ' value="' . entites_html($val) . '"' + ) + . ' type="hidden"' . "\n/>"; } + return join("", $hidden); } -// http://doc.spip.org/@filtre_bornes_pagination_dist +/** + * Calcule les bornes d'une pagination + * + * @filtre + * + * @param int $courante + * Page courante + * @param int $nombre + * Nombre de pages + * @param int $max + * Nombre d'éléments par page + * @return int[] + * Liste (première page, dernière page). + **/ function filtre_bornes_pagination_dist($courante, $nombre, $max = 10) { - if($max<=0 OR $max>=$nombre) + if ($max <= 0 or $max >= $nombre) { return array(1, $nombre); + } + + $premiere = max(1, $courante - floor(($max - 1) / 2)); + $derniere = min($nombre, $premiere + $max - 2); + $premiere = $derniere == $nombre ? $derniere - $max + 1 : $premiere; - $premiere = max(1, $courante-floor(($max-1)/2)); - $derniere = min($nombre, $premiere+$max-2); - $premiere = $derniere == $nombre ? $derniere-$max+1 : $premiere; return array($premiere, $derniere); } -// Ces trois fonctions permettent de simuler les filtres |reset et |end -// pour extraire la premiere ou la derniere valeur d'un tableau ; utile -// pour la pagination (mais peut-etre a refaire plus simplement) -// http://doc.spip.org/@filtre_valeur_tableau -function filtre_valeur_tableau($array, $index) { - if (!is_array($array) - OR !isset($array[$index])) - return null; - return $array[$index]; -} -// http://doc.spip.org/@filtre_reset +/** + * Retourne la première valeur d'un tableau + * + * Plus précisément déplace le pointeur du tableau sur la première valeur et la retourne. + * + * @example `[(#LISTE{un,deux,trois}|reset)]` retourne 'un' + * + * @filtre + * @link http://php.net/manual/fr/function.reset.php + * @see filtre_end() + * + * @param array $array + * @return mixed|null|false + * - null si $array n'est pas un tableau, + * - false si le tableau est vide + * - la première valeur du tableau sinon. + **/ function filtre_reset($array) { return !is_array($array) ? null : reset($array); } -// http://doc.spip.org/@filtre_end + +/** + * Retourne la dernière valeur d'un tableau + * + * Plus précisément déplace le pointeur du tableau sur la dernière valeur et la retourne. + * + * @example `[(#LISTE{un,deux,trois}|end)]` retourne 'trois' + * + * @filtre + * @link http://php.net/manual/fr/function.end.php + * @see filtre_reset() + * + * @param array $array + * @return mixed|null|false + * - null si $array n'est pas un tableau, + * - false si le tableau est vide + * - la dernière valeur du tableau sinon. + **/ function filtre_end($array) { return !is_array($array) ? null : end($array); } -// http://doc.spip.org/@filtre_push +/** + * Empile une valeur à la fin d'un tableau + * + * @example `[(#LISTE{un,deux,trois}|push{quatre}|print)]` + * + * @filtre + * @link http://www.spip.net/4571 + * @link http://php.net/manual/fr/function.array-push.php + * + * @param array $array + * @param mixed $val + * @return array|string + * - '' si $array n'est pas un tableau ou si echec. + * - le tableau complété de la valeur sinon. + * + **/ function filtre_push($array, $val) { - if($array == '' OR !array_push($array, $val)) return ''; + if (!is_array($array) or !array_push($array, $val)) { + return ''; + } + return $array; } -// http://doc.spip.org/@filtre_find +/** + * Indique si une valeur est contenue dans un tableau + * + * @example `[(#LISTE{un,deux,trois}|find{quatre}|oui) ... ]` + * + * @filtre + * @link http://www.spip.net/4575 + * @see in_any() Assez proche, avec les paramètres tableau et valeur inversés. + * + * @param array $array + * @param mixed $val + * @return bool + * - `false` si `$array` n'est pas un tableau + * - `true` si la valeur existe dans le tableau, `false` sinon. + **/ function filtre_find($array, $val) { - return (is_array($array) AND in_array($val, $array)); + return (is_array($array) and in_array($val, $array)); } -// -// fonction standard de calcul de la balise #PAGINATION -// on peut la surcharger en definissant filtre_pagination dans mes_fonctions -// - -// http://doc.spip.org/@filtre_pagination_dist -function filtre_pagination_dist($total, $nom, $position, $pas, $liste = true, $modele='', $connect='', $env=array()) { +/** + * Filtre calculant une pagination, utilisé par la balise `#PAGINATION` + * + * Le filtre cherche le modèle `pagination.html` par défaut, mais peut + * chercher un modèle de pagination particulier avec l'argument `$modele`. + * S'il `$modele='prive'`, le filtre cherchera le modèle `pagination_prive.html`. + * + * @filtre + * @see balise_PAGINATION_dist() + * + * @param int $total + * Nombre total d'éléments + * @param string $nom + * Nom identifiant la pagination + * @param int $position + * Page à afficher (tel que la 3è page) + * @param int $pas + * Nombre d'éléments par page + * @param bool $liste + * - True pour afficher toute la liste des éléments, + * - False pour n'afficher que l'ancre + * @param string $modele + * Nom spécifique du modèle de pagination + * @param string $connect + * Nom du connecteur à la base de données + * @param array $env + * Environnement à transmettre au modèle + * @return string + * Code HTML de la pagination + **/ +function filtre_pagination_dist( + $total, + $nom, + $position, + $pas, + $liste = true, + $modele = '', + $connect = '', + $env = array() +) { static $ancres = array(); - if ($pas<1) return ''; - $ancre = 'pagination'.$nom; // #pagination_articles - $debut = 'debut'.$nom; // 'debut_articles' + if ($pas < 1) { + return ''; + } + $ancre = 'pagination' . $nom; // #pagination_articles + $debut = 'debut' . $nom; // 'debut_articles' // n'afficher l'ancre qu'une fois - if (!isset($ancres[$ancre])) - $bloc_ancre = $ancres[$ancre] = "
"; - else $bloc_ancre = ''; + if (!isset($ancres[$ancre])) { + $bloc_ancre = $ancres[$ancre] = ""; + } else { + $bloc_ancre = ''; + } // liste = false : on ne veut que l'ancre - if (!$liste) + if (!$liste) { return $ancres[$ancre]; + } $pagination = array( 'debut' => $debut, - 'url' => parametre_url(self(),'fragment',''), // nettoyer l'id ahah eventuel + 'url' => parametre_url(self(), 'fragment', ''), // nettoyer l'id ahah eventuel 'total' => $total, 'position' => intval($position), 'pas' => $pas, - 'nombre_pages' => floor(($total-1)/$pas)+1, - 'page_courante' => floor(intval($position)/$pas)+1, + 'nombre_pages' => floor(($total - 1) / $pas) + 1, + 'page_courante' => floor(intval($position) / $pas) + 1, 'ancre' => $ancre, 'bloc_ancre' => $bloc_ancre ); - if (is_array($env)) - $pagination = array_merge($env,$pagination); + if (is_array($env)) { + $pagination = array_merge($env, $pagination); + } // Pas de pagination - if ($pagination['nombre_pages']<=1) + if ($pagination['nombre_pages'] <= 1) { return ''; + } - if ($modele) $modele = '_'.$modele; + if ($modele) { + $modele = '_' . $modele; + } - return recuperer_fond("modeles/pagination$modele", $pagination, array('trim'=>true), $connect); + return recuperer_fond("modeles/pagination$modele", $pagination, array('trim' => true), $connect); } -// passer les url relatives a la css d'origine en url absolues -// http://doc.spip.org/@urls_absolues_css + +/** + * Passer les url relatives à la css d'origine en url absolues + * + * @uses suivre_lien() + * + * @param string $contenu + * Contenu du fichier CSS + * @param string $source + * Chemin du fichier CSS + * @return string + * Contenu avec urls en absolus + **/ function urls_absolues_css($contenu, $source) { - $path = suivre_lien(url_absolue($source),'./'); + $path = suivre_lien(url_absolue($source), './'); return preg_replace_callback( - ",url\s*\(\s*['\"]?([^'\"/][^:]*)['\"]?\s*\),Uims", + ",url\s*\(\s*['\"]?([^'\"/#\s][^:]*)['\"]?\s*\),Uims", create_function('$x', - 'return "url(\"".suivre_lien("'.$path.'",$x[1])."\")";' + 'return "url(\'".suivre_lien(\'' . $path . '\',$x[1])."\')";' ), $contenu); } -// recuperere le chemin d'une css existante et : -// 1. regarde si une css inversee droite-gauche existe dans le meme repertoire -// 2. sinon la cree (ou la recree) dans _DIR_VAR/cache_css/ -// SI on lui donne a manger une feuille nommee _rtl.css il va faire l'inverse -// http://doc.spip.org/@direction_css -function direction_css ($css, $voulue='') { - if (!preg_match(',(_rtl)?\.css$,i', $css, $r)) return $css; + +/** + * Inverse le code CSS (left <--> right) d'une feuille de style CSS + * + * Récupère le chemin d'une CSS existante et : + * + * 1. regarde si une CSS inversée droite-gauche existe dans le meme répertoire + * 2. sinon la crée (ou la recrée) dans `_DIR_VAR/cache_css/` + * + * Si on lui donne à manger une feuille nommée `*_rtl.css` il va faire l'inverse. + * + * @filtre + * @example + * ``` + * [] + * ``` + * @param string $css + * Chemin vers le fichier CSS + * @param string $voulue + * Permet de forcer le sens voulu (en indiquant `ltr`, `rtl` ou un + * code de langue). En absence, prend le sens de la langue en cours. + * + * @return string + * Chemin du fichier CSS inversé + **/ +function direction_css($css, $voulue = '') { + if (!preg_match(',(_rtl)?\.css$,i', $css, $r)) { + return $css; + } // si on a precise le sens voulu en argument, le prendre en compte if ($voulue = strtolower($voulue)) { - if ($voulue != 'rtl' AND $voulue != 'ltr') + if ($voulue != 'rtl' and $voulue != 'ltr') { $voulue = lang_dir($voulue); + } + } else { + $voulue = lang_dir(); } - else - $voulue = lang_dir(); $r = count($r) > 1; $right = $r ? 'left' : 'right'; // 'right' de la css lue en entree $dir = $r ? 'rtl' : 'ltr'; $ndir = $r ? 'ltr' : 'rtl'; - if ($voulue == $dir) + if ($voulue == $dir) { return $css; + } if ( // url absolue - preg_match(",^http:,i",$css) + preg_match(",^http:,i", $css) // ou qui contient un ? - OR (($p=strpos($css,'?'))!==FALSE)) { + or (($p = strpos($css, '?')) !== false) + ) { $distant = true; $cssf = parse_url($css); - $cssf = $cssf['path'].($cssf['query']?"?".$cssf['query']:""); + $cssf = $cssf['path'] . ($cssf['query'] ? "?" . $cssf['query'] : ""); $cssf = preg_replace(',[?:&=],', "_", $cssf); - } - else { + } else { $distant = false; $cssf = $css; // 1. regarder d'abord si un fichier avec la bonne direction n'est pas aussi //propose (rien a faire dans ce cas) - $f = preg_replace(',(_rtl)?\.css$,i', '_'.$ndir.'.css', $css); - if (@file_exists($f)) + $f = preg_replace(',(_rtl)?\.css$,i', '_' . $ndir . '.css', $css); + if (@file_exists($f)) { return $f; + } } // 2. - $dir_var = sous_repertoire (_DIR_VAR, 'cache-css'); + $dir_var = sous_repertoire(_DIR_VAR, 'cache-css'); $f = $dir_var . preg_replace(',.*/(.*?)(_rtl)?\.css,', '\1', $cssf) - . '.' . substr(md5($cssf), 0,4) . '_' . $ndir . '.css'; + . '.' . substr(md5($cssf), 0, 4) . '_' . $ndir . '.css'; // la css peut etre distante (url absolue !) - if ($distant){ + if ($distant) { include_spip('inc/distant'); $contenu = recuperer_page($css); - if (!$contenu) return $css; - } - else { + if (!$contenu) { + return $css; + } + } else { if ((@filemtime($f) > @filemtime($css)) - AND (_VAR_MODE != 'recalcul')) + and (_VAR_MODE != 'recalcul') + ) { return $f; - if (!lire_fichier($css, $contenu)) + } + if (!lire_fichier($css, $contenu)) { return $css; + } } $contenu = str_replace( array('right', 'left', '@@@@L E F T@@@@'), array('@@@@L E F T@@@@', 'right', 'left'), $contenu); - + // reperer les @import auxquels il faut propager le direction_css - preg_match_all(",\@import\s*url\s*\(\s*['\"]?([^'\"/][^:]*)['\"]?\s*\),Uims",$contenu,$regs); - $src = array();$src_direction_css = array();$src_faux_abs=array(); + preg_match_all(",\@import\s*url\s*\(\s*['\"]?([^'\"/][^:]*)['\"]?\s*\),Uims", $contenu, $regs); + $src = array(); + $src_direction_css = array(); + $src_faux_abs = array(); $d = dirname($css); - foreach($regs[1] as $k=>$import_css){ - $css_direction = direction_css("$d/$import_css",$voulue); + foreach ($regs[1] as $k => $import_css) { + $css_direction = direction_css("$d/$import_css", $voulue); // si la css_direction est dans le meme path que la css d'origine, on tronque le path, elle sera passee en absolue - if (substr($css_direction,0,strlen($d)+1)=="$d/") $css_direction = substr($css_direction,strlen($d)+1); - // si la css_direction commence par $dir_var on la fait passer pour une absolue - elseif (substr($css_direction,0,strlen($dir_var))==$dir_var) { - $css_direction = substr($css_direction,strlen($dir_var)); - $src_faux_abs["/@@@@@@/".$css_direction] = $css_direction; - $css_direction = "/@@@@@@/".$css_direction; + if (substr($css_direction, 0, strlen($d) + 1) == "$d/") { + $css_direction = substr($css_direction, strlen($d) + 1); + } // si la css_direction commence par $dir_var on la fait passer pour une absolue + elseif (substr($css_direction, 0, strlen($dir_var)) == $dir_var) { + $css_direction = substr($css_direction, strlen($dir_var)); + $src_faux_abs["/@@@@@@/" . $css_direction] = $css_direction; + $css_direction = "/@@@@@@/" . $css_direction; } $src[] = $regs[0][$k]; - $src_direction_css[] = str_replace($import_css,$css_direction,$regs[0][$k]); + $src_direction_css[] = str_replace($import_css, $css_direction, $regs[0][$k]); } - $contenu = str_replace($src,$src_direction_css,$contenu); + $contenu = str_replace($src, $src_direction_css, $contenu); $contenu = urls_absolues_css($contenu, $css); // virer les fausses url absolues que l'on a mis dans les import - if (count($src_faux_abs)) - $contenu = str_replace(array_keys($src_faux_abs),$src_faux_abs,$contenu); + if (count($src_faux_abs)) { + $contenu = str_replace(array_keys($src_faux_abs), $src_faux_abs, $contenu); + } - if (!ecrire_fichier($f, $contenu)) + if (!ecrire_fichier($f, $contenu)) { return $css; + } return $f; } -// recuperere le chemin d'une css existante et : -// cree (ou recree) dans _DIR_VAR/cache_css/ une css dont les url relatives sont passees en url absolues -// http://doc.spip.org/@url_absolue_css -function url_absolue_css ($css) { - if (!preg_match(',\.css$,i', $css, $r)) return $css; + +/** + * Transforme les urls relatives d'un fichier CSS en absolues + * + * Récupère le chemin d'une css existante et crée (ou recrée) dans `_DIR_VAR/cache_css/` + * une css dont les url relatives sont passées en url absolues + * + * Le calcul n'est pas refait si le fichier cache existe déjà et que + * la source n'a pas été modifiée depuis. + * + * @uses recuperer_page() si l'URL source n'est pas sur le même site + * @uses urls_absolues_css() + * + * @param string $css + * Chemin ou URL du fichier CSS source + * @return string + * - Chemin du fichier CSS transformé (si source lisible et mise en cache réussie) + * - Chemin ou URL du fichier CSS source sinon. + **/ +function url_absolue_css($css) { + if (!preg_match(',\.css$,i', $css, $r)) { + return $css; + } $url_absolue_css = url_absolue($css); - $f = basename($css,'.css'); - $f = sous_repertoire (_DIR_VAR, 'cache-css') - . preg_replace(",(.*?)(_rtl|_ltr)?$,","\\1-urlabs-" . substr(md5("$css-urlabs"), 0,4) . "\\2",$f) + $f = basename($css, '.css'); + $f = sous_repertoire(_DIR_VAR, 'cache-css') + . preg_replace(",(.*?)(_rtl|_ltr)?$,", "\\1-urlabs-" . substr(md5("$css-urlabs"), 0, 4) . "\\2", $f) . '.css'; - if ((@filemtime($f) > @filemtime($css)) - AND (_VAR_MODE != 'recalcul')) + if ((@filemtime($f) > @filemtime($css)) and (_VAR_MODE != 'recalcul')) { return $f; + } - if ($url_absolue_css==$css){ - if (strncmp($GLOBALS['meta']['adresse_site'],$css,$l=strlen($GLOBALS['meta']['adresse_site']))!=0 - OR !lire_fichier(_DIR_RACINE . substr($css,$l), $contenu)){ - include_spip('inc/distant'); - if (!$contenu = recuperer_page($css)) - return $css; + if ($url_absolue_css == $css) { + if (strncmp($GLOBALS['meta']['adresse_site'], $css, $l = strlen($GLOBALS['meta']['adresse_site'])) != 0 + or !lire_fichier(_DIR_RACINE . substr($css, $l), $contenu) + ) { + include_spip('inc/distant'); + if (!$contenu = recuperer_page($css)) { + return $css; + } } - } - elseif (!lire_fichier($css, $contenu)) + } elseif (!lire_fichier($css, $contenu)) { return $css; + } // passer les url relatives a la css d'origine en url absolues $contenu = urls_absolues_css($contenu, $css); // ecrire la css - if (!ecrire_fichier($f, $contenu)) + if (!ecrire_fichier($f, $contenu)) { return $css; + } return $f; } - /** - * Le filtre table_valeur - * permet de recuperer la valeur d'une cle donnee + * Récupère la valeur d'une clé donnée * dans un tableau (ou un objet). - * + * + * @filtre + * @link http://www.spip.net/4572 + * @example + * ``` + * [(#VALEUR|table_valeur{cle/sous/element})] + * ``` + * * @param mixed $table - * Tableau ou objet - * (ou chaine serialisee de tableau, ce qui permet d'enchainer le filtre) - * + * Tableau ou objet PHP + * (ou chaîne serialisée de tableau, ce qui permet d'enchaîner le filtre) * @param string $cle - * Cle du tableau (ou parametre public de l'objet) - * Cette cle peut contenir des caracteres / pour selectionner - * des sous elements dans le tableau, tel que "sous/element/ici" - * pour obtenir la valeur de $tableau['sous']['element']['ici'] - * + * Clé du tableau (ou paramètre public de l'objet) + * Cette clé peut contenir des caractères / pour sélectionner + * des sous éléments dans le tableau, tel que `sous/element/ici` + * pour obtenir la valeur de `$tableau['sous']['element']['ici']` * @param mixed $defaut - * Valeur par defaut retournee si la cle demandee n'existe pas - * + * Valeur par defaut retournée si la clé demandée n'existe pas * @param bool $conserver_null * Permet de forcer la fonction à renvoyer la valeur null d'un index * et non pas $defaut comme cela est fait naturellement par la fonction * isset. On utilise alors array_key_exists() à la place de isset(). - * - * @return mixed Valeur trouvee ou valeur par defaut. -**/ + * + * @return mixed + * Valeur trouvée ou valeur par défaut. + **/ function table_valeur($table, $cle, $defaut = '', $conserver_null = false) { foreach (explode('/', $cle) as $k) { @@ -2242,60 +3083,127 @@ function table_valeur($table, $cle, $defaut = '', $conserver_null = false) { return $table; } -// filtre match pour faire des tests avec expression reguliere -// [(#TEXTE|match{^ceci$,Uims})] -// retourne le fragment de chaine qui "matche" -// il est possible de passer en 3eme argument optionnel le numero de parenthese capturante -// accepte egalement la syntaxe #TRUC|match{truc(...)$,1} ou le modificateur n'est pas passe en second argument -// http://doc.spip.org/@match -function match($texte, $expression, $modif="UimsS",$capte=0) { - if (intval($modif) AND $capte==0){ +/** + * Retrouve un motif dans un texte à partir d'une expression régulière + * + * S'appuie sur la fonction `preg_match()` en PHP + * + * @example + * - `[(#TITRE|match{toto})]` + * - `[(#TEXTE|match{^ceci$,Uims})]` + * - `[(#TEXTE|match{truc(...)$, UimsS, 1})]` Capture de la parenthèse indiquée + * - `[(#TEXTE|match{truc(...)$, 1})]` Équivalent, sans indiquer les modificateurs + * + * @filtre + * @link http://www.spip.net/4299 + * @link http://php.net/manual/fr/function.preg-match.php Pour des infos sur `preg_match()` + * + * @param string $texte + * Texte dans lequel chercher + * @param string|int $expression + * Expression régulière de recherche, sans le délimiteur + * @param string $modif + * - string : Modificateurs de l'expression régulière + * - int : Numéro de parenthèse capturante + * @param int $capte + * Numéro de parenthèse capturante + * @return bool|string + * - false : l'expression n'a pas été trouvée + * - true : expression trouvée, mais pas la parenthèse capturante + * - string : expression trouvée. + **/ +function match($texte, $expression, $modif = "UimsS", $capte = 0) { + if (intval($modif) and $capte == 0) { $capte = $modif; $modif = "UimsS"; } - $expression=str_replace("\/","/",$expression); - $expression=str_replace("/","\/",$expression); + $expression = str_replace("\/", "/", $expression); + $expression = str_replace("/", "\/", $expression); - if (preg_match('/' . $expression . '/' . $modif,$texte, $r)) { - if (isset($r[$capte])) + if (preg_match('/' . $expression . '/' . $modif, $texte, $r)) { + if (isset($r[$capte])) { return $r[$capte]; - else + } else { return true; + } } + return false; } -// filtre replace pour faire des operations avec expression reguliere -// [(#TEXTE|replace{^ceci$,cela,UimsS})] -// http://doc.spip.org/@replace -function replace($texte, $expression, $replace='', $modif="UimsS") { - $expression=str_replace("\/","/", $expression); - $expression=str_replace("/","\/",$expression); + +/** + * Remplacement de texte à base d'expression régulière + * + * @filtre + * @link http://www.spip.net/4309 + * @see match() + * @example + * ``` + * [(#TEXTE|replace{^ceci$,cela,UimsS})] + * ``` + * + * @param string $texte + * Texte + * @param string $expression + * Expression régulière + * @param string $replace + * Texte de substitution des éléments trouvés + * @param string $modif + * Modificateurs pour l'expression régulière. + * @return string + * Texte + **/ +function replace($texte, $expression, $replace = '', $modif = "UimsS") { + $expression = str_replace("\/", "/", $expression); + $expression = str_replace("/", "\/", $expression); + return preg_replace('/' . $expression . '/' . $modif, $replace, $texte); } -// cherche les documents numerotes dans un texte traite par propre() -// et affecte les doublons['documents'] -// http://doc.spip.org/@traiter_doublons_documents -// http://doc.spip.org/@traiter_doublons_documents +/** + * Cherche les documents numerotés dans un texte traite par `propre()` + * + * Affecte la liste des doublons['documents'] + * + * @param array $doublons + * Liste des doublons + * @param string $letexte + * Le texte + * @return string + * Le texte + **/ function traiter_doublons_documents(&$doublons, $letexte) { // Verifier dans le texte & les notes (pas beau, helas) - $t = $letexte.$GLOBALS['les_notes']; + $t = $letexte . $GLOBALS['les_notes']; if (strstr($t, 'spip_document_') // evite le preg_match_all si inutile - AND preg_match_all( - ',<[^>]+\sclass=["\']spip_document_([0-9]+)[\s"\'],imsS', - $t, $matches, PREG_PATTERN_ORDER)) + and preg_match_all( + ',<[^>]+\sclass=["\']spip_document_([0-9]+)[\s"\'],imsS', + $t, $matches, PREG_PATTERN_ORDER) + ) { + if (!isset($doublons['documents'])) { + $doublons['documents'] = ""; + } $doublons['documents'] .= "," . join(',', $matches[1]); + } return $letexte; } -// filtre vide qui ne renvoie rien -// http://doc.spip.org/@vide -function vide($texte){ +/** + * Filtre vide qui ne renvoie rien + * + * @example + * `[(#CALCUL|vide)]` n'affichera pas le résultat du calcul + * @filtre + * + * @param mixed $texte + * @return string Chaîne vide + **/ +function vide($texte) { return ""; } @@ -2303,66 +3211,149 @@ function vide($texte){ // Filtres pour le modele/emb (embed document) // -// A partir d'un #ENV, retourne des -// http://doc.spip.org/@env_to_params -function env_to_params ($texte, $ignore_params=array()) { - $ignore_params = array_merge ( +/** + * Écrit des balises HTML `` à partir d'un tableau de données tel que `#ENV` + * + * Permet d'écrire les balises `` à indiquer dans un `` + * en prenant toutes les valeurs du tableau transmis. + * + * Certaines clés spécifiques à SPIP et aux modèles embed sont omises : + * id, lang, id_document, date, date_redac, align, fond, recurs, emb, dir_racine + * + * @example `[(#ENV*|env_to_params)]` + * + * @filtre + * @link http://www.spip.net/4005 + * + * @param array|string $env + * Tableau cle => valeur des paramètres à écrire, ou chaine sérialisée de ce tableau + * @param array $ignore_params + * Permet de compléter les clés ignorées du tableau. + * @return string + * Code HTML résultant + **/ +function env_to_params($env, $ignore_params = array()) { + $ignore_params = array_merge( array('id', 'lang', 'id_document', 'date', 'date_redac', 'align', 'fond', '', 'recurs', 'emb', 'dir_racine'), - $ignore_params); - $tableau = unserialize($texte); + $ignore_params + ); + if (!is_array($env)) { + $env = unserialize($env); + } $texte = ""; - foreach ($tableau as $i => $j) - if (is_string($j) AND !in_array($i,$ignore_params)) - $texte .= ""; + if ($env) { + foreach ($env as $i => $j) { + if (is_string($j) and !in_array($i, $ignore_params)) { + $texte .= ""; + } + } + } + return $texte; } -// A partir d'un #ENV, retourne des attributs -// http://doc.spip.org/@env_to_attributs -function env_to_attributs ($texte, $ignore_params=array()) { - $ignore_params = array_merge ( + +/** + * Écrit des attributs HTML à partir d'un tableau de données tel que `#ENV` + * + * Permet d'écrire des attributs d'une balise HTML en utilisant les données du tableau transmis. + * Chaque clé deviendra le nom de l'attribut (et la valeur, sa valeur) + * + * Certaines clés spécifiques à SPIP et aux modèles embed sont omises : + * id, lang, id_document, date, date_redac, align, fond, recurs, emb, dir_racine + * + * @example `` + * @filtre + * + * @param array|string $env + * Tableau cle => valeur des attributs à écrire, ou chaine sérialisée de ce tableau + * @param array $ignore_params + * Permet de compléter les clés ignorées du tableau. + * @return string + * Code HTML résultant + **/ +function env_to_attributs($env, $ignore_params = array()) { + $ignore_params = array_merge( array('id', 'lang', 'id_document', 'date', 'date_redac', 'align', 'fond', '', 'recurs', 'emb', 'dir_racine'), - $ignore_params); - $tableau = unserialize($texte); + $ignore_params + ); + if (!is_array($env)) { + $env = unserialize($env); + } $texte = ""; - foreach ($tableau as $i => $j) - if (is_string($j) AND !in_array($i,$ignore_params)) - $texte .= $i."='".$j."' "; + if ($env) { + foreach ($env as $i => $j) { + if (is_string($j) and !in_array($i, $ignore_params)) { + $texte .= $i . "='" . $j . "' "; + } + } + } + return $texte; } -// Concatener des chaines -// #TEXTE|concat{texte1,texte2,...} -// http://doc.spip.org/@concat -function concat(){ + +/** + * Concatène des chaînes + * + * @filtre + * @link http://www.spip.net/4150 + * @example + * ``` + * #TEXTE|concat{texte1,texte2,...} + * ``` + * + * @return string Chaînes concaténés + **/ +function concat() { $args = func_get_args(); + return join('', $args); } -// http://doc.spip.org/@charge_scripts -// http://doc.spip.org/@charge_scripts +/** + * Retourne le contenu d'un ou plusieurs fichiers + * + * Les chemins sont cherchés dans le path de SPIP + * + * @see balise_INCLURE_dist() La balise `#INCLURE` peut appeler cette fonction + * + * @param array|string $files + * - array : Liste de fichiers + * - string : fichier ou fichiers séparés par `|` + * @param bool $script + * - si true, considère que c'est un fichier js à chercher `javascript/` + * @return string + * Contenu du ou des fichiers, concaténé + **/ function charge_scripts($files, $script = true) { $flux = ""; - foreach(is_array($files)?$files:explode("|",$files) as $file) { - if (!is_string($file)) continue; - if ($script) - $file = preg_match(",^\w+$,",$file) ? "javascript/$file.js" : ''; - if ($file) $path = find_in_path($file); - if ($path) $flux .= spip_file_get_contents($path); + foreach (is_array($files) ? $files : explode("|", $files) as $file) { + if (!is_string($file)) { + continue; + } + if ($script) { + $file = preg_match(",^\w+$,", $file) ? "javascript/$file.js" : ''; + } + if ($file) { + $path = find_in_path($file); + if ($path) { + $flux .= spip_file_get_contents($path); + } + } } + return $flux; } - /** - * produit une balise img avec un champ alt d'office si vide - * attention le htmlentities et la traduction doivent etre appliques avant. + * Produit une balise img avec un champ alt d'office si vide * - * http://doc.spip.org/@http_img_pack + * Attention le htmlentities et la traduction doivent être appliqués avant. * - * @param $img - * @param $alt + * @param string $img + * @param string $alt * @param string $atts * @param string $title * @param array $options @@ -2371,136 +3362,222 @@ function charge_scripts($files, $script = true) { * sous forme -xx.png (pour les icones essentiellement) (oui par defaut) * @return string */ -function http_img_pack($img, $alt, $atts='', $title='', $options = array()) { - if (!isset($options['chemin_image']) OR $options['chemin_image']==true) +function http_img_pack($img, $alt, $atts = '', $title = '', $options = array()) { + if (!isset($options['chemin_image']) or $options['chemin_image'] == true) { $img = chemin_image($img); - if (stripos($atts, 'width')===false){ + } + if (stripos($atts, 'width') === false) { // utiliser directement l'info de taille presente dans le nom - if ((!isset($options['utiliser_suffixe_size']) OR $options['utiliser_suffixe_size']==true) - AND preg_match(',-([0-9]+)[.](png|gif)$,',$img,$regs)){ + if ((!isset($options['utiliser_suffixe_size']) or $options['utiliser_suffixe_size'] == true) + and preg_match(',-([0-9]+)[.](png|gif)$,', $img, $regs) + ) { $largeur = $hauteur = intval($regs[1]); - } - else{ + } else { $taille = taille_image($img); - list($hauteur,$largeur) = $taille; - if (!$hauteur OR !$largeur) + list($hauteur, $largeur) = $taille; + if (!$hauteur or !$largeur) { return ""; + } } - $atts.=" width='".$largeur."' height='".$hauteur."'"; + $atts .= " width='" . $largeur . "' height='" . $hauteur . "'"; } - return "" . attribut_html($alt ? $alt : $title) . ""; + + return "" . attribut_html($alt ? $alt : $title) . ""; } /** - * generer une directive style='background:url()' a partir d'un fichier image - * - * http://doc.spip.org/@http_style_background + * Générer une directive `style='background:url()'` à partir d'un fichier image * * @param string $img * @param string $att * @return string */ -function http_style_background($img, $att=''){ - return " style='background".($att?"":"-image").": url(\"".chemin_image($img)."\")" . ($att ? (' ' . $att) : '') . ";'"; +function http_style_background($img, $att = '') { + return " style='background" . ($att ? "" : "-image") . ": url(\"" . chemin_image($img) . "\")" . ($att ? (' ' . $att) : '') . ";'"; } /** - * une fonction pour generer une balise img a partir d'un nom de fichier + * Générer une balise HTML `img` à partir d'un nom de fichier + * + * @uses http_img_pack() * * @param string $img * @param string $alt * @param string $class * @return string + * Code HTML de la balise IMG */ -function filtre_balise_img_dist($img,$alt="",$class=""){ - return http_img_pack($img, $alt, $class?" class='".attribut_html($class)."'":'', '', array('chemin_image'=>false,'utiliser_suffixe_size'=>false)); +function filtre_balise_img_dist($img, $alt = "", $class = "") { + return http_img_pack($img, $alt, $class ? " class='" . attribut_html($class) . "'" : '', '', + array('chemin_image' => false, 'utiliser_suffixe_size' => false)); } -//[(#ENV*|unserialize|foreach)] -// http://doc.spip.org/@filtre_foreach_dist -function filtre_foreach_dist($balise_deserializee, $modele = 'foreach') { +/** + * Affiche chaque valeur d'un tableau associatif en utilisant un modèle + * + * @example + * - `[(#ENV*|unserialize|foreach)]` + * - `[(#ARRAY{a,un,b,deux}|foreach)]` + * + * @filtre + * @link http://www.spip.net/4248 + * + * @param array $tableau + * Tableau de données à afficher + * @param string $modele + * Nom du modèle à utiliser + * @return string + * Code HTML résultant + **/ +function filtre_foreach_dist($tableau, $modele = 'foreach') { $texte = ''; - if(is_array($balise_deserializee)) - foreach($balise_deserializee as $k => $v) { - $res = recuperer_fond('modeles/'.$modele, + if (is_array($tableau)) { + foreach ($tableau as $k => $v) { + $res = recuperer_fond('modeles/' . $modele, array_merge(array('cle' => $k), (is_array($v) ? $v : array('valeur' => $v))) ); $texte .= $res; } + } + return $texte; } -// renvoie la liste des plugins actifs du site -// si le premier parametre est un prefix de cette liste, renvoie vrai, faux sinon -// la valeur du second parametre si celui-ci renvoie a une information connue -// cf liste_plugin_actifs() pour connaitre les informations affichables -// appelee par la balise #PLUGIN -// http://doc.spip.org/@filtre_info_plugin_dist -function filtre_info_plugin_dist($plugin, $type_info) { + +/** + * Obtient des informations sur les plugins actifs + * + * @filtre + * @uses liste_plugin_actifs() pour connaître les informations affichables + * + * @param string $plugin + * Préfixe du plugin ou chaîne vide + * @param string $type_info + * Type d'info demandée + * @param bool $reload + * true (à éviter) pour forcer le recalcul du cache des informations des plugins. + * @return array|string|bool + * + * - Liste sérialisée des préfixes de plugins actifs (si $plugin = '') + * - Suivant $type_info, avec $plugin un préfixe + * - est_actif : renvoie true s'il est actif, false sinon + * - x : retourne l'information x du plugin si présente (et plugin actif) + * - tout : retourne toutes les informations du plugin actif + **/ +function filtre_info_plugin_dist($plugin, $type_info, $reload = false) { include_spip('inc/plugin'); $plugin = strtoupper($plugin); $plugins_actifs = liste_plugin_actifs(); - if (!$plugin) + if (!$plugin) { return serialize(array_keys($plugins_actifs)); - elseif (empty($plugins_actifs[$plugin])) + } elseif (empty($plugins_actifs[$plugin]) and !$reload) { return ''; - elseif ($type_info == 'est_actif') + } elseif (($type_info == 'est_actif') and !$reload) { return $plugins_actifs[$plugin] ? 1 : 0; - elseif (isset($plugins_actifs[$plugin][$type_info])) + } elseif (isset($plugins_actifs[$plugin][$type_info]) and !$reload) { return $plugins_actifs[$plugin][$type_info]; - else { - $get_infos = charger_fonction('get_infos','plugins'); + } else { + $get_infos = charger_fonction('get_infos', 'plugins'); // On prend en compte les extensions - if (!is_dir($plugins_actifs[$plugin]['dir_type'])) + if (!is_dir($plugins_actifs[$plugin]['dir_type'])) { $dir_plugins = constant($plugins_actifs[$plugin]['dir_type']); - else + } else { $dir_plugins = $plugins_actifs[$plugin]['dir_type']; - if (!$infos = $get_infos($plugins_actifs[$plugin]['dir'], false, $dir_plugins)) + } + if (!$infos = $get_infos($plugins_actifs[$plugin]['dir'], $reload, $dir_plugins)) { return ''; - if ($type_info == 'tout') + } + if ($type_info == 'tout') { return $infos; - else + } elseif ($type_info == 'est_actif') { + return $infos ? 1 : 0; + } else { return strval($infos[$type_info]); + } } } -// http://doc.spip.org/@puce_changement_statut -function puce_changement_statut($id_objet, $statut, $id_rubrique, $type, $ajax=false){ - $puce_statut = charger_fonction('puce_statut','inc'); +/** + * Affiche la puce statut d'un objet, avec un menu rapide pour changer + * de statut si possibilité de l'avoir + * + * @see inc_puce_statut_dist() + * + * @filtre + * + * @param int $id_objet + * Identifiant de l'objet + * @param string $statut + * Statut actuel de l'objet + * @param int $id_rubrique + * Identifiant du parent + * @param string $type + * Type d'objet + * @param bool $ajax + * Indique s'il ne faut renvoyer que le coeur du menu car on est + * dans une requete ajax suite à un post de changement rapide + * @return string + * Code HTML de l'image de puce de statut à insérer (et du menu de changement si présent) + */ +function puce_changement_statut($id_objet, $statut, $id_rubrique, $type, $ajax = false) { + $puce_statut = charger_fonction('puce_statut', 'inc'); + return $puce_statut($id_objet, $statut, $id_rubrique, $type, $ajax); } + /** - * [(#STATUT|puce_statut{article})] affiche une puce passive - * [(#STATUT|puce_statut{article,#ID_ARTICLE,#ID_RUBRIQUE})] affiche une puce avec changement rapide + * Affiche la puce statut d'un objet, avec un menu rapide pour changer + * de statut si possibilité de l'avoir + * + * Utilisable sur tout objet qui a declaré ses statuts + * + * @example + * [(#STATUT|puce_statut{article})] affiche une puce passive + * [(#STATUT|puce_statut{article,#ID_ARTICLE,#ID_RUBRIQUE})] affiche une puce avec changement rapide + * + * @see inc_puce_statut_dist() + * + * @filtre * - * utilisable sur tout objet qui a declare * @param string $statut + * Statut actuel de l'objet * @param string $objet + * Type d'objet * @param int $id_objet + * Identifiant de l'objet * @param int $id_parent + * Identifiant du parent * @return string + * Code HTML de l'image de puce de statut à insérer (et du menu de changement si présent) */ -function filtre_puce_statut_dist($statut,$objet,$id_objet=0,$id_parent=0){ +function filtre_puce_statut_dist($statut, $objet, $id_objet = 0, $id_parent = 0) { static $puce_statut = null; - if (!$puce_statut) - $puce_statut = charger_fonction('puce_statut','inc'); - return $puce_statut($id_objet, $statut, $id_parent, $objet, false, objet_info($objet,'editable')?_ACTIVER_PUCE_RAPIDE:false); + if (!$puce_statut) { + $puce_statut = charger_fonction('puce_statut', 'inc'); + } + + return $puce_statut($id_objet, $statut, $id_parent, $objet, false, + objet_info($objet, 'editable') ? _ACTIVER_PUCE_RAPIDE : false); } /** - * Encoder un contexte pour l'ajax, le signer avec une cle, le crypter - * avec le secret du site, le gziper si possible... - * l'entree peut etre serialisee (le #ENV** des fonds ajax et ajax_stat) + * Encoder un contexte pour l'ajax * - * http://doc.spip.org/@encoder_contexte_ajax + * Encoder le contexte, le signer avec une clé, le crypter + * avec le secret du site, le gziper si possible. + * + * L'entrée peut-être sérialisée (le `#ENV**` des fonds ajax et ajax_stat) + * + * @see decoder_contexte_ajax() + * @uses calculer_cle_action() * * @param string|array $c * contexte, peut etre un tableau serialize @@ -2511,10 +3588,12 @@ function filtre_puce_statut_dist($statut,$objet,$id_objet=0,$id_parent=0){ * @param string $ajaxid * ajaxid pour cibler le bloc et forcer sa mise a jour * @return string + * hash du contexte */ -function encoder_contexte_ajax($c,$form='', $emboite=NULL, $ajaxid='') { +function encoder_contexte_ajax($c, $form = '', $emboite = null, $ajaxid = '') { if (is_string($c) - AND !is_null(@unserialize($c))) { + and @unserialize($c) !== false + ) { $c = unserialize($c); } @@ -2522,14 +3601,17 @@ function encoder_contexte_ajax($c,$form='', $emboite=NULL, $ajaxid='') { // pour que la pagination ajax ne soit pas plantee // si on charge la page &debut_x=1 : car alors en cliquant sur l'item 0, // le debut_x=0 n'existe pas, et on resterait sur 1 - foreach ($c as $k => $v) { - if (strpos($k,'debut_') === 0) { - unset($c[$k]); + if (is_array($c)) { + foreach ($c as $k => $v) { + if (strpos($k, 'debut_') === 0) { + unset($c[$k]); + } } } - - if (!function_exists('calculer_cle_action')) + + if (!function_exists('calculer_cle_action')) { include_spip("inc/securiser_action"); + } $c = serialize($c); $cle = calculer_cle_action($form . $c); @@ -2539,13 +3621,13 @@ function encoder_contexte_ajax($c,$form='', $emboite=NULL, $ajaxid='') { // par defaut, sauf si cette configuration a ete forcee // OU que la longueur de l''argument generee est plus long // que ce que telere Suhosin. - $cache_contextes_ajax = (defined('_CACHE_CONTEXTES_AJAX') AND _CACHE_CONTEXTES_AJAX); + $cache_contextes_ajax = (defined('_CACHE_CONTEXTES_AJAX') and _CACHE_CONTEXTES_AJAX); if (!$cache_contextes_ajax) { $env = $c; if (function_exists('gzdeflate') && function_exists('gzinflate')) { $env = gzdeflate($env); - // http://core.spip.org/issues/2667 | https://bugs.php.net/bug.php?id=61287 - if (substr(phpversion(),0,5) == '5.4.0' AND !@gzinflate($env)) { + // http://core.spip.net/issues/2667 | https://bugs.php.net/bug.php?id=61287 + if ((PHP_VERSION_ID == 50400) and !@gzinflate($env)) { $cache_contextes_ajax = true; spip_log("Contextes AJAX forces en fichiers ! Erreur PHP 5.4.0", _LOG_AVERTISSEMENT); } @@ -2554,7 +3636,8 @@ function encoder_contexte_ajax($c,$form='', $emboite=NULL, $ajaxid='') { $env = base64_encode($env); // tester Suhosin et la valeur maximale des variables en GET... if ($max_len = @ini_get('suhosin.get.max_value_length') - and $max_len < ($len = strlen($env))) { + and $max_len < ($len = strlen($env)) + ) { $cache_contextes_ajax = true; spip_log("Contextes AJAX forces en fichiers !" . " Cela arrive lorsque la valeur du contexte" @@ -2564,43 +3647,65 @@ function encoder_contexte_ajax($c,$form='', $emboite=NULL, $ajaxid='') { . " pour accepter au moins 1024 caracteres.", _LOG_AVERTISSEMENT); } } - + if ($cache_contextes_ajax) { $dir = sous_repertoire(_DIR_CACHE, 'contextes'); // stocker les contextes sur disque et ne passer qu'un hash dans l'url $md5 = md5($c); - ecrire_fichier("$dir/c$md5",$c); + ecrire_fichier("$dir/c$md5", $c); $env = $md5; - } - - if ($emboite === NULL) return $env; - if (!trim($emboite)) return ""; + } + + if ($emboite === null) { + return $env; + } + if (!trim($emboite)) { + return ""; + } // toujours encoder l'url source dans le bloc ajax $r = self(); - $r = ' data-origin="'.$r.'"'; + $r = ' data-origin="' . $r . '"'; $class = 'ajaxbloc'; if ($ajaxid and is_string($ajaxid)) { // ajaxid est normalement conforme a un nom de classe css // on ne verifie pas la conformite, mais on passe entites_html par dessus par precaution $class .= ' ajax-id-' . entites_html($ajaxid); } - return "
\n$emboite
\n"; + + return "
\n$emboite
\n"; } -// la procedure inverse de encoder_contexte_ajax() -// http://doc.spip.org/@decoder_contexte_ajax -function decoder_contexte_ajax($c,$form='') { - if (!function_exists('calculer_cle_action')) +/** + * Décoder un hash de contexte pour l'ajax + * + * Précude inverse de `encoder_contexte_ajax()` + * + * @see encoder_contexte_ajax() + * @uses calculer_cle_action() + * + * @param string $c + * hash du contexte + * @param string $form + * nom du formulaire eventuel + * @return array|string|bool + * - array|string : contexte d'environnement, possiblement sérialisé + * - false : erreur de décodage + */ +function decoder_contexte_ajax($c, $form = '') { + if (!function_exists('calculer_cle_action')) { include_spip("inc/securiser_action"); - if (( (defined('_CACHE_CONTEXTES_AJAX') AND _CACHE_CONTEXTES_AJAX) OR strlen($c)==32) - AND $dir = sous_repertoire(_DIR_CACHE, 'contextes') - AND lire_fichier("$dir/c$c",$contexte)) { - $c = $contexte; + } + if (((defined('_CACHE_CONTEXTES_AJAX') and _CACHE_CONTEXTES_AJAX) or strlen($c) == 32) + and $dir = sous_repertoire(_DIR_CACHE, 'contextes') + and lire_fichier("$dir/c$c", $contexte) + ) { + $c = $contexte; } else { $c = @base64_decode($c); $c = _xor($c); - if (function_exists('gzdeflate') && function_exists('gzinflate')) + if (function_exists('gzdeflate') && function_exists('gzinflate')) { $c = @gzinflate($c); + } } // extraire la signature en debut de contexte @@ -2619,60 +3724,107 @@ function decoder_contexte_ajax($c,$form='') { return false; } -// encrypter/decrypter un message -// http://www.php.net/manual/fr/language.operators.bitwise.php#81358 -// http://doc.spip.org/@_xor -function _xor($message, $key=null){ + +/** + * Encrypte ou décrypte un message + * + * @link http://www.php.net/manual/fr/language.operators.bitwise.php#81358 + * + * @param string $message + * Message à encrypter ou décrypter + * @param null|string $key + * Clé de cryptage / décryptage. + * Une clé sera calculée si non transmise + * @return string + * Message décrypté ou encrypté + **/ +function _xor($message, $key = null) { if (is_null($key)) { - if (!function_exists('calculer_cle_action')) + if (!function_exists('calculer_cle_action')) { include_spip("inc/securiser_action"); + } $key = pack("H*", calculer_cle_action('_xor')); } $keylen = strlen($key); $messagelen = strlen($message); - for($i=0; $i<$messagelen; $i++) - $message[$i] = ~($message[$i]^$key[$i%$keylen]); + for ($i = 0; $i < $messagelen; $i++) { + $message[$i] = ~($message[$i] ^ $key[$i % $keylen]); + } return $message; } -// Les vrai fonctions sont dans le plugin forum, mais on evite ici une erreur du compilateur -// en absence du plugin -function url_reponse_forum($texte){return $texte;} -function url_rss_forum($texte){return $texte;} +/** + * Retourne une URL de réponse de forum (aucune action ici) + * + * @see filtre_url_reponse_forum() du plugin forum (prioritaire) + * @note + * La vraie fonction est dans le plugin forum, + * mais on évite ici une erreur du compilateur en absence du plugin + * @param string $texte + * @return string + */ +function url_reponse_forum($texte) { return $texte; } + +/** + * retourne une URL de suivi rss d'un forum (aucune action ici) + * + * @see filtre_url_rss_forum() du plugin forum (prioritaire) + * @note + * La vraie fonction est dans le plugin forum, + * mais on évite ici une erreur du compilateur en absence du plugin + * @param string $texte + * @return string + */ +function url_rss_forum($texte) { return $texte; } /** - * une fonction pour generer des menus avec liens - * ou un non clicable lorsque l'item est selectionne + * Génère des menus avec liens ou `` non clicable lorsque + * l'item est sélectionné + * + * @filtre + * @link http://www.spip.net/4004 + * @example + * ``` + * [(#URL_RUBRIQUE|lien_ou_expose{#TITRE, #ENV{test}|=={en_cours}})] + * ``` * * @param string $url + * URL du lien * @param string $libelle - * le texte du lien + * Texte du lien * @param bool $on - * etat expose (genere un strong) ou non (genere un lien) + * État exposé (génère un strong) ou non (génère un lien) * @param string $class + * Classes CSS ajoutées au lien * @param string $title + * Title ajouté au lien * @param string $rel + * Attribut `rel` ajouté au lien * @param string $evt - * complement a la balise a pour gerer un evenement javascript, de la forme " onclick='...'" + * Complement à la balise `a` pour gérer un événement javascript, + * de la forme ` onclick='...'` * @return string + * Code HTML */ -function lien_ou_expose($url,$libelle=NULL,$on=false,$class="",$title="",$rel="", $evt=''){ +function lien_ou_expose($url, $libelle = null, $on = false, $class = "", $title = "", $rel = "", $evt = '') { if ($on) { $bal = "strong"; $att = "class='on'"; } else { $bal = 'a'; $att = "href='$url'" - .($title?" title='".attribut_html($title)."'":'') - .($class?" class='".attribut_html($class)."'":'') - .($rel?" rel='".attribut_html($rel)."'":'') - .$evt; + . ($title ? " title='" . attribut_html($title) . "'" : '') + . ($class ? " class='" . attribut_html($class) . "'" : '') + . ($rel ? " rel='" . attribut_html($rel) . "'" : '') + . $evt; } - if ($libelle === NULL) + if ($libelle === null) { $libelle = $url; + } + return "<$bal $att>$libelle"; } @@ -2683,24 +3835,31 @@ function lien_ou_expose($url,$libelle=NULL,$on=false,$class="",$title="",$rel="" * "module:chaine" * * @param int $nb : le nombre - * @param string $chaine_un : l'item de langue si $nb vaut un - * @param string $chaine_plusieurs : l'item de lanque si $nb > 1 + * @param string $chaine_un : l'item de langue si $nb vaut un + * @param string $chaine_plusieurs : l'item de lanque si $nb > 1 * @param string $var : La variable à remplacer par $nb dans l'item de langue (facultatif, défaut "nb") * @param array $vars : Les autres variables nécessaires aux chaines de langues (facultatif) * @return string : la chaine de langue finale en utilisant la fonction _T() */ -function singulier_ou_pluriel($nb,$chaine_un,$chaine_plusieurs,$var='nb',$vars=array()){ - if (!$nb=intval($nb)) return ""; - if (!is_array($vars)) return ""; +function singulier_ou_pluriel($nb, $chaine_un, $chaine_plusieurs, $var = 'nb', $vars = array()) { + if (!$nb = intval($nb)) { + return ""; + } + if (!is_array($vars)) { + return ""; + } $vars[$var] = $nb; - if ($nb>1) return _T($chaine_plusieurs, $vars); - else return _T($chaine_un,$vars); + if ($nb > 1) { + return _T($chaine_plusieurs, $vars); + } else { + return _T($chaine_un, $vars); + } } /** * Fonction de base pour une icone dans un squelette - * structure html : texte + * structure html : `texte` * * @param string $type * 'lien' ou 'bouton' @@ -2716,122 +3875,294 @@ function singulier_ou_pluriel($nb,$chaine_un,$chaine_plusieurs,$var='nb',$vars=a * classe supplementaire (horizontale, verticale, ajax ...) * @param string $javascript * "onclick='...'" par exemple - * @return string + * @return string */ -function prepare_icone_base($type, $lien, $texte, $fond, $fonction="", $class="",$javascript=""){ - if (in_array($fonction,array("del","supprimer.gif"))) +function prepare_icone_base($type, $lien, $texte, $fond, $fonction = "", $class = "", $javascript = "") { + if (in_array($fonction, array("del", "supprimer.gif"))) { $class .= ' danger'; - elseif ($fonction == "rien.gif") + } elseif ($fonction == "rien.gif") { $fonction = ""; - elseif ($fonction == "delsafe") + } elseif ($fonction == "delsafe") { $fonction = "del"; + } // remappage des icone : article-24.png+new => article-new-24.png - if ($icone_renommer = charger_fonction('icone_renommer','inc',true)) - list($fond,$fonction) = $icone_renommer($fond,$fonction); + if ($icone_renommer = charger_fonction('icone_renommer', 'inc', true)) { + list($fond, $fonction) = $icone_renommer($fond, $fonction); + } // ajouter le type d'objet dans la class de l'icone - $class .= " " . substr(basename($fond),0,-4); + $class .= " " . substr(basename($fond), 0, -4); $alt = attribut_html($texte); $title = " title=\"$alt\""; // est-ce pertinent de doubler le alt par un title ? $ajax = ""; - if (strpos($class,"ajax")!==false) { - $ajax="ajax"; - if (strpos($class,"preload")!==false) - $ajax.=" preload"; - if (strpos($class,"nocache")!==false) - $ajax.=" nocache"; - $ajax=" class='$ajax'"; + if (strpos($class, "ajax") !== false) { + $ajax = "ajax"; + if (strpos($class, "preload") !== false) { + $ajax .= " preload"; + } + if (strpos($class, "nocache") !== false) { + $ajax .= " nocache"; + } + $ajax = " class='$ajax'"; } $size = 24; - if (preg_match("/-([0-9]{1,3})[.](gif|png)$/i",$fond,$match)) + if (preg_match("/-([0-9]{1,3})[.](gif|png)$/i", $fond, $match)) { $size = $match[1]; + } - if ($fonction){ + if ($fonction) { // 2 images pour composer l'icone : le fond (article) en background, // la fonction (new) en image $icone = http_img_pack($fonction, $alt, "width='$size' height='$size'\n" . - http_style_background($fond)); - } - else { + http_style_background($fond)); + } else { $icone = http_img_pack($fond, $alt, "width='$size' height='$size'"); } - if ($type=='lien') + if ($type == 'lien') { return "" . "" . $icone . "$texte" . "\n"; - - else - return bouton_action("$icone$texte",$lien,"icone s$size $class",$javascript,$alt); + } else { + return bouton_action("$icone$texte", $lien, "icone s$size $class", $javascript, $alt); + } } -function icone_base($lien, $texte, $fond, $fonction="", $class="",$javascript=""){ +/** + * Crée un lien ayant une icone + * + * @uses prepare_icone_base() + * + * @param string $lien + * URL du lien + * @param string $texte + * Texte du lien + * @param string $fond + * Objet avec ou sans son extension et sa taille (article, article-24, article-24.png) + * @param string $fonction + * Fonction du lien (`edit`, `new`, `del`) + * @param string $class + * Classe CSS, tel que `left`, `right` pour définir un alignement + * @param string $javascript + * Javascript ajouté sur le lien + * @return string + * Code HTML du lien + **/ +function icone_base($lien, $texte, $fond, $fonction = "", $class = "", $javascript = "") { return prepare_icone_base('lien', $lien, $texte, $fond, $fonction, $class, $javascript); } -function filtre_icone_verticale_dist($lien, $texte, $fond, $fonction="", $class="",$javascript=""){ - return icone_base($lien,$texte,$fond,$fonction,"verticale $class",$javascript); + +/** + * Crée un lien précédé d'une icone au dessus du texte + * + * @uses icone_base() + * @see icone_verticale() Pour un usage dans un code PHP. + * + * @filtre + * @example + * ``` + * [(#AUTORISER{voir,groupemots,#ID_GROUPE}) + * [(#URL_ECRIRE{groupe_mots,id_groupe=#ID_GROUPE} + * |icone_verticale{<:mots:icone_voir_groupe_mots:>,groupe_mots-24.png,'',left})] + * ] + * ``` + * + * @param string $lien + * URL du lien + * @param string $texte + * Texte du lien + * @param string $fond + * Objet avec ou sans son extension et sa taille (article, article-24, article-24.png) + * @param string $fonction + * Fonction du lien (`edit`, `new`, `del`) + * @param string $class + * Classe CSS à ajouter, tel que `left`, `right`, `center` pour définir un alignement. + * Il peut y en avoir plusieurs : `left ajax` + * @param string $javascript + * Javascript ajouté sur le lien + * @return string + * Code HTML du lien + **/ +function filtre_icone_verticale_dist($lien, $texte, $fond, $fonction = "", $class = "", $javascript = "") { + return icone_base($lien, $texte, $fond, $fonction, "verticale $class", $javascript); } -function filtre_icone_horizontale_dist($lien, $texte, $fond, $fonction="", $class="",$javascript=""){ - return icone_base($lien,$texte,$fond,$fonction,"horizontale $class",$javascript); + +/** + * Crée un lien précédé d'une icone horizontale + * + * @uses icone_base() + * @see icone_horizontale() Pour un usage dans un code PHP. + * + * @filtre + * @example + * En tant que filtre dans un squelettes : + * ``` + * [(#URL_ECRIRE{sites}|icone_horizontale{<:sites:icone_voir_sites_references:>,site-24.png})] + * + * [(#AUTORISER{supprimer,groupemots,#ID_GROUPE}|oui) + * [(#URL_ACTION_AUTEUR{supprimer_groupe_mots,#ID_GROUPE,#URL_ECRIRE{mots}} + * |icone_horizontale{<:mots:icone_supprimer_groupe_mots:>,groupe_mots,del})] + * ] + * ``` + * + * En tant que filtre dans un code php : + * ``` + * $icone_horizontale=chercher_filtre('icone_horizontale'); + * $icone = $icone_horizontale(generer_url_ecrire("stats_visites","id_article=$id_article"), + * _T('statistiques:icone_evolution_visites', array('visites' => $visites)), + * "statistique-24.png"); + * ``` + * + * @param string $lien + * URL du lien + * @param string $texte + * Texte du lien + * @param string $fond + * Objet avec ou sans son extension et sa taille (article, article-24, article-24.png) + * @param string $fonction + * Fonction du lien (`edit`, `new`, `del`) + * @param string $class + * Classe CSS à ajouter + * @param string $javascript + * Javascript ajouté sur le lien + * @return string + * Code HTML du lien + **/ +function filtre_icone_horizontale_dist($lien, $texte, $fond, $fonction = "", $class = "", $javascript = "") { + return icone_base($lien, $texte, $fond, $fonction, "horizontale $class", $javascript); } -function filtre_bouton_action_horizontal_dist($lien, $texte, $fond, $fonction="", $class="",$confirm=""){ +/** + * Crée un bouton d'action intégrant une icone horizontale + * + * @uses prepare_icone_base() + * + * @filtre + * @example + * ``` + * [(#URL_ACTION_AUTEUR{supprimer_mot, #ID_MOT, #URL_ECRIRE{groupe_mots,id_groupe=#ID_GROUPE}} + * |bouton_action_horizontal{<:mots:info_supprimer_mot:>,mot-24.png,del})] + * ``` + * + * @param string $lien + * URL de l'action + * @param string $texte + * Texte du bouton + * @param string $fond + * Objet avec ou sans son extension et sa taille (article, article-24, article-24.png) + * @param string $fonction + * Fonction du bouton (`edit`, `new`, `del`) + * @param string $class + * Classe CSS à ajouter + * @param string $confirm + * Message de confirmation à ajouter en javascript sur le bouton + * @return string + * Code HTML du lien + **/ +function filtre_bouton_action_horizontal_dist($lien, $texte, $fond, $fonction = "", $class = "", $confirm = "") { return prepare_icone_base('bouton', $lien, $texte, $fond, $fonction, "horizontale $class", $confirm); } -/* - * Filtre icone pour compatibilite - * mappe sur icone_base + +/** + * Filtre `icone` pour compatibilité mappé sur `icone_base` + * + * @uses icone_base() + * @see filtre_icone_verticale_dist() + * + * @filtre + * @deprecated Utiliser le filtre `icone_verticale` + * + * @param string $lien + * URL du lien + * @param string $texte + * Texte du lien + * @param string $fond + * Nom de l'image utilisée + * @param string $align + * Classe CSS d'alignement (`left`, `right`, `center`) + * @param string $fonction + * Fonction du lien (`edit`, `new`, `del`) + * @param string $class + * Classe CSS à ajouter + * @param string $javascript + * Javascript ajouté sur le lien + * @return string + * Code HTML du lien */ -function filtre_icone_dist($lien, $texte, $fond, $align="", $fonction="", $class="",$javascript=""){ - return icone_base($lien,$texte,$fond,$fonction,"verticale $align $class",$javascript); +function filtre_icone_dist($lien, $texte, $fond, $align = "", $fonction = "", $class = "", $javascript = "") { + return icone_base($lien, $texte, $fond, $fonction, "verticale $align $class", $javascript); } /** - * filtre explode pour les squelettes permettant d'ecrire - * #GET{truc}|explode{-} + * Explose un texte en tableau suivant un séparateur * - * @param strong $a - * @param string $b - * @return array + * @note + * Inverse l'écriture de la fonction PHP de même nom + * pour que le filtre soit plus pratique dans les squelettes + * + * @filtre + * @example + * ``` + * [(#GET{truc}|explode{-})] + * ``` + * + * @param string $a Texte + * @param string $b Séparateur + * @return array Liste des éléments */ -function filtre_explode_dist($a,$b){return explode($b,$a);} +function filtre_explode_dist($a, $b) { return explode($b, $a); } /** - * filtre implode pour les squelettes permettant d'ecrire - * #GET{truc}|implode{-} + * Implose un tableau en chaine en liant avec un séparateur * - * @param array $a - * @param string $b - * @return string + * @note + * Inverse l'écriture de la fonction PHP de même nom + * pour que le filtre soit plus pratique dans les squelettes + * + * @filtre + * @example + * ``` + * [(#GET{truc}|implode{-})] + * ``` + * + * @param array $a Tableau + * @param string $b Séparateur + * @return string Texte */ -function filtre_implode_dist($a,$b){return is_array($a)?implode($b,$a):$a;} +function filtre_implode_dist($a, $b) { return is_array($a) ? implode($b, $a) : $a; } /** - * Produire les styles prives qui associent item de menu avec icone en background - * @return string + * Produire les styles privés qui associent item de menu avec icone en background + * + * @return string Code CSS */ -function bando_images_background(){ +function bando_images_background() { include_spip('inc/bandeau'); // recuperer tous les boutons et leurs images - $boutons = definir_barre_boutons(definir_barre_contexte(),true,false); + $boutons = definir_barre_boutons(definir_barre_contexte(), true, false); $res = ""; - foreach($boutons as $page => $detail){ - if ($detail->icone AND strlen(trim($detail->icone))) - $res .="\n.navigation_avec_icones #bando1_$page {background-image:url(".$detail->icone.");}"; - $selecteur = (in_array($page,array('outils_rapides','outils_collaboratifs'))?"":".navigation_avec_icones "); - if (is_array($detail->sousmenu)) - foreach($detail->sousmenu as $souspage=>$sousdetail) - if ($sousdetail->icone AND strlen(trim($sousdetail->icone))) - $res .="\n$selecteur.bando2_$souspage {background-image:url(".$sousdetail->icone.");}"; + foreach ($boutons as $page => $detail) { + if ($detail->icone and strlen(trim($detail->icone))) { + $res .= "\n.navigation_avec_icones #bando1_$page {background-image:url(" . $detail->icone . ");}"; + } + $selecteur = (in_array($page, array('outils_rapides', 'outils_collaboratifs')) ? "" : ".navigation_avec_icones "); + if (is_array($detail->sousmenu)) { + foreach ($detail->sousmenu as $souspage => $sousdetail) { + if ($sousdetail->icone and strlen(trim($sousdetail->icone))) { + $res .= "\n$selecteur.bando2_$souspage {background-image:url(" . $sousdetail->icone . ");}"; + } + } + } } + return $res; } @@ -2850,65 +4181,72 @@ function bando_images_background(){ * et avant execution de l'action. Si la callback renvoie false, elle annule le declenchement de l'action * @return string */ -function bouton_action($libelle, $url, $class="", $confirm="", $title="", $callback=""){ +function bouton_action($libelle, $url, $class = "", $confirm = "", $title = "", $callback = "") { if ($confirm) { $confirm = "confirm(\"" . attribut_html($confirm) . "\")"; - if ($callback) - $callback = "$confirm?($callback):false"; - else - $callback = $confirm; + if ($callback) { + $callback = "$confirm?($callback):false"; + } else { + $callback = $confirm; + } } - $onclick = $callback?" onclick='return ".addcslashes($callback,"'")."'":""; + $onclick = $callback ? " onclick='return " . addcslashes($callback, "'") . "'" : ""; $title = $title ? " title='$title'" : ""; - return "
".form_hidden($url) - ."
"; + + return "
" . form_hidden($url) + . "
"; } /** * Proteger les champs passes dans l'url et utiliser dans {tri ...} * preserver l'espace pour interpreter ensuite num xxx et multi xxx + * * @param string $t * @return string */ -function tri_protege_champ($t){ - return preg_replace(',[^\s\w.+],','',$t); +function tri_protege_champ($t) { + return preg_replace(',[^\s\w.+],', '', $t); } /** * Interpreter les multi xxx et num xxx utilise comme tri * pour la clause order * 'multi xxx' devient simplement 'multi' qui est calcule dans le select + * * @param string $t * @param array $from * @return string */ -function tri_champ_order($t, $from=null){ - if(strncmp($t,'multi ',6)==0){ +function tri_champ_order($t, $from = null) { + if (strncmp($t, 'multi ', 6) == 0) { return "multi"; } $champ = $t; - if (strncmp($t,'num ',4)==0) - $champ = substr($t,4); + if (strncmp($t, 'num ', 4) == 0) { + $champ = substr($t, 4); + } // enlever les autres espaces non evacues par tri_protege_champ - $champ = preg_replace(',\s,','',$champ); + $champ = preg_replace(',\s,', '', $champ); - if (is_array($from)){ - $trouver_table = charger_fonction('trouver_table','base'); - foreach($from as $idt=>$table_sql){ + if (is_array($from)) { + $trouver_table = charger_fonction('trouver_table', 'base'); + foreach ($from as $idt => $table_sql) { if ($desc = $trouver_table($table_sql) - AND isset($desc['field'][$champ])){ + and isset($desc['field'][$champ]) + ) { $champ = "$idt.$champ"; break; } } } - if (strncmp($t,'num ',4)==0) + if (strncmp($t, 'num ', 4) == 0) { return "0+$champ"; - else + } else { return $champ; + } } /** @@ -2921,16 +4259,18 @@ function tri_champ_order($t, $from=null){ * @param string $t * @return string */ -function tri_champ_select($t){ - if(strncmp($t,'multi ',6)==0){ - $t = substr($t,6); - $t = preg_replace(',\s,','',$t); - $t = sql_multi($t,$GLOBALS['spip_lang']); +function tri_champ_select($t) { + if (strncmp($t, 'multi ', 6) == 0) { + $t = substr($t, 6); + $t = preg_replace(',\s,', '', $t); + $t = sql_multi($t, $GLOBALS['spip_lang']); + return $t; } - if(trim($t)=='hasard'){ + if (trim($t) == 'hasard') { return 'rand() AS hasard'; } + return "''"; } @@ -2952,98 +4292,182 @@ function tri_champ_select($t){ * @param string $etoile * @return string */ -function generer_info_entite($id_objet, $type_objet, $info, $etoile=""){ - global $table_des_traitements; - static $trouver_table=null; +function generer_info_entite($id_objet, $type_objet, $info, $etoile = "") { + static $trouver_table = null; static $objets; // On verifie qu'on a tout ce qu'il faut $id_objet = intval($id_objet); - if (!($id_objet and $type_objet and $info)) + if (!($id_objet and $type_objet and $info)) { return ''; + } // si on a deja note que l'objet n'existe pas, ne pas aller plus loin - if (isset($objets[$type_objet]) AND $objets[$type_objet]===false) + if (isset($objets[$type_objet]) and $objets[$type_objet] === false) { return ''; + } // Si on demande l'url, on retourne direct la fonction - if ($info == 'url') + if ($info == 'url') { return generer_url_entite($id_objet, $type_objet); + } // Sinon on va tout chercher dans la table et on garde en memoire $demande_titre = ($info == 'titre'); // On ne fait la requete que si on a pas deja l'objet ou si on demande le titre mais qu'on ne l'a pas encore if (!isset($objets[$type_objet][$id_objet]) - OR - ($demande_titre AND !isset($objets[$type_objet][$id_objet]['titre'])) - ){ - if (!$trouver_table) - $trouver_table = charger_fonction('trouver_table','base'); + or + ($demande_titre and !isset($objets[$type_objet][$id_objet]['titre'])) + ) { + if (!$trouver_table) { + $trouver_table = charger_fonction('trouver_table', 'base'); + } $desc = $trouver_table(table_objet_sql($type_objet)); - if (!$desc) + if (!$desc) { return $objets[$type_objet] = false; + } // Si on demande le titre, on le gere en interne $champ_titre = ""; - if ($demande_titre){ + if ($demande_titre) { // si pas de titre declare mais champ titre, il sera peuple par le select * - $champ_titre = (!empty($desc['titre'])) ? ', ' . $desc['titre']:''; + $champ_titre = (!empty($desc['titre'])) ? ', ' . $desc['titre'] : ''; } include_spip('base/abstract_sql'); include_spip('base/connect_sql'); $objets[$type_objet][$id_objet] = sql_fetsel( - '*'.$champ_titre, + '*' . $champ_titre, $desc['table_sql'], - id_table_objet($type_objet).' = '.intval($id_objet) + id_table_objet($type_objet) . ' = ' . intval($id_objet) ); } // Si la fonction generer_TRUC_TYPE existe, on l'utilise pour formater $info_generee - if ($generer = charger_fonction("generer_${info}_${type_objet}", '', true)) + if ($generer = charger_fonction("generer_${info}_${type_objet}", '', true)) { $info_generee = $generer($id_objet, $objets[$type_objet][$id_objet]); - // Si la fonction generer_TRUC_entite existe, on l'utilise pour formater $info_generee - else if ($generer = charger_fonction("generer_${info}_entite", '', true)) - $info_generee = $generer($id_objet, $type_objet, $objets[$type_objet][$id_objet]); - // Sinon on prend directement le champ SQL tel quel - else - $info_generee = (isset($objets[$type_objet][$id_objet][$info])?$objets[$type_objet][$id_objet][$info]:''); - - // On va ensuite chercher les traitements automatiques a faire - $champ = strtoupper($info); - $traitement = isset($table_des_traitements[$champ]) ? $table_des_traitements[$champ] : false; - $table_sql = table_objet_sql($type_objet); - - if (!$etoile - AND is_array($traitement) - AND (isset($traitement[$table_sql]) OR isset($traitement[0]))){ - include_spip('inc/texte'); - $traitement = $traitement[isset($traitement[$table_sql]) ? $table_sql : 0]; - $traitement = str_replace('%s', "'".texte_script($info_generee)."'", $traitement); - // FIXME: $connect et $Pile[0] font souvent partie des traitements. - // on les definit pour eviter des notices, mais ce fonctionnement est a ameliorer ! - $connect = ""; $Pile = array(0 => array('id_objet'=>$id_objet,'objet'=>$type_objet)); - eval("\$info_generee = $traitement;"); + } // Si la fonction generer_TRUC_entite existe, on l'utilise pour formater $info_generee + else { + if ($generer = charger_fonction("generer_${info}_entite", '', true)) { + $info_generee = $generer($id_objet, $type_objet, $objets[$type_objet][$id_objet]); + } // Sinon on prend directement le champ SQL tel quel + else { + $info_generee = (isset($objets[$type_objet][$id_objet][$info]) ? $objets[$type_objet][$id_objet][$info] : ''); + } + } + + // On va ensuite appliquer les traitements automatiques si besoin + if (!$etoile) { + // FIXME: on fournit un ENV minimum avec id et type et connect='' + // mais ce fonctionnement est a ameliorer ! + $info_generee = appliquer_traitement_champ($info_generee, $info, table_objet($type_objet), + array('id_objet' => $id_objet, 'objet' => $type_objet, '')); } return $info_generee; } /** - * Wrap un texte avec des balises - * wrap('mot','') => 'mot' + * Appliquer a un champ SQL le traitement qui est configure pour la balise homonyme dans les squelettes + * + * @param string $texte + * @param string $champ + * @param string $table_objet + * @param array $env + * @param string $connect + * @return string + */ +function appliquer_traitement_champ($texte, $champ, $table_objet = '', $env = array(), $connect = '') { + if (!$champ) { + return $texte; + } + + // On charge toujours les filtres de texte car la majorité des traitements les utilisent + // et il ne faut pas partir du principe que c'est déjà chargé (form ajax, etc) + include_spip('inc/texte'); + + $champ = strtoupper($champ); + $traitements = isset($GLOBALS['table_des_traitements'][$champ]) ? $GLOBALS['table_des_traitements'][$champ] : false; + if (!$traitements or !is_array($traitements)) { + return $texte; + } + + $traitement = ''; + if ($table_objet and (!isset($traitements[0]) or count($traitements) > 1)) { + // necessaire pour prendre en charge les vieux appels avec un table_objet_sql en 3e arg + $table_objet = table_objet($table_objet); + if (isset($traitements[$table_objet])) { + $traitement = $traitements[$table_objet]; + } + } + if (!$traitement and isset($traitements[0])) { + $traitement = $traitements[0]; + } + // (sinon prendre le premier de la liste par defaut ?) + + if (!$traitement) { + return $texte; + } + + $traitement = str_replace('%s', "'" . texte_script($texte) . "'", $traitement); + + // Fournir $connect et $Pile[0] au traitement si besoin + $Pile = array(0 => $env); + eval("\$texte = $traitement;"); + + return $texte; +} + + +/** + * Generer un lien (titre clicable vers url) vers un objet + * + * @param int $id_objet + * @param $objet + * @param int $longueur + * @param null|string $connect + * @return string + */ +function generer_lien_entite($id_objet, $objet, $longueur = 80, $connect = null) { + include_spip('inc/liens'); + $titre = traiter_raccourci_titre($id_objet, $objet, $connect); + // lorsque l'objet n'est plus declare (plugin desactive par exemple) + // le raccourcis n'est plus valide + $titre = isset($titre['titre']) ? typo($titre['titre']) : ''; + // on essaye avec generer_info_entite ? + if (!strlen($titre) and !$connect) { + $titre = generer_info_entite($id_objet, $objet, 'titre'); + } + if (!strlen($titre)) { + $titre = _T('info_sans_titre'); + } + $url = generer_url_entite($id_objet, $objet, '', '', $connect); + + return "" . couper($titre, $longueur) . ""; +} + + +/** + * Englobe (Wrap) un texte avec des balises + * + * @example `wrap('mot','')` donne `mot'` + * + * @filtre + * @uses extraire_balises() + * * @param string $texte * @param string $wrap * @return string */ -function wrap($texte,$wrap) { +function wrap($texte, $wrap) { $balises = extraire_balises($wrap); - if (preg_match_all(",<([a-z]\w*)\b[^>]*>,UimsS",$wrap, $regs, PREG_PATTERN_ORDER)) { + if (preg_match_all(",<([a-z]\w*)\b[^>]*>,UimsS", $wrap, $regs, PREG_PATTERN_ORDER)) { $texte = $wrap . $texte; $regs = array_reverse($regs[1]); - $wrap = ""; + $wrap = ""; $texte = $texte . $wrap; } + return $texte; } @@ -3063,35 +4487,39 @@ function wrap($texte,$wrap) { * @param int $indent * @return array|mixed|string */ -function filtre_print_dist($u, $join="
", $indent=0) { - if (is_string($u)){ +function filtre_print_dist($u, $join = "
", $indent = 0) { + if (is_string($u)) { $u = typo($u); + return $u; } // caster $u en array si besoin - if (is_object($u)) - $u = (array) $u; + if (is_object($u)) { + $u = (array)$u; + } - if (is_array($u)){ + if (is_array($u)) { $out = ""; // toutes les cles sont numeriques ? // et aucun enfant n'est un tableau // liste simple separee par des virgules - $numeric_keys = array_map('is_numeric',array_keys($u)); - $array_values = array_map('is_array',$u); - $object_values = array_map('is_object',$u); - if (array_sum($numeric_keys)==count($numeric_keys) - AND !array_sum($array_values) - AND !array_sum($object_values)){ + $numeric_keys = array_map('is_numeric', array_keys($u)); + $array_values = array_map('is_array', $u); + $object_values = array_map('is_object', $u); + if (array_sum($numeric_keys) == count($numeric_keys) + and !array_sum($array_values) + and !array_sum($object_values) + ) { return join(", ", array_map('filtre_print_dist', $u)); } // sinon on passe a la ligne et on indente - $i_str = str_pad("",$indent," "); - foreach($u as $k => $v){ - $out .= $join . $i_str . "$k: " . filtre_print_dist($v,$join,$indent+2); + $i_str = str_pad("", $indent, " "); + foreach ($u as $k => $v) { + $out .= $join . $i_str . "$k: " . filtre_print_dist($v, $join, $indent + 2); } + return $out; } @@ -3108,24 +4536,30 @@ function filtre_print_dist($u, $join="
", $indent=0) { * @param string $info * @return string */ -function objet_info($objet,$info){ +function objet_info($objet, $info) { $table = table_objet_sql($objet); $infos = lister_tables_objets_sql($table); - return (isset($infos[$info])?$infos[$info]:''); + + return (isset($infos[$info]) ? $infos[$info] : ''); } /** * Filtre pour afficher 'Aucun truc' ou '1 truc' ou 'N trucs' - * avec la bonne chaine de langue en fonction de l'objet utilise - * @param $nb - * @param $objet + * avec la bonne chaîne de langue en fonction de l'objet utilisé + * + * @param int $nb + * Nombre d'éléments + * @param string $objet + * Objet * @return mixed|string + * Texte traduit du comptage, tel que '3 articles' */ -function objet_afficher_nb($nb, $objet){ - if (!$nb) - return _T(objet_info($objet,'info_aucun_objet')); - else - return _T(objet_info($objet,$nb==1?'info_1_objet':'info_nb_objets'),array('nb'=>$nb)); +function objet_afficher_nb($nb, $objet) { + if (!$nb) { + return _T(objet_info($objet, 'info_aucun_objet')); + } else { + return _T(objet_info($objet, $nb == 1 ? 'info_1_objet' : 'info_nb_objets'), array('nb' => $nb)); + } } /** @@ -3135,41 +4569,74 @@ function objet_afficher_nb($nb, $objet){ * @param int $taille * @return string */ -function objet_icone($objet,$taille=24){ - $icone = objet_info($objet,'icone_objet')."-".$taille.".png"; +function objet_icone($objet, $taille = 24) { + $icone = objet_info($objet, 'icone_objet') . "-" . $taille . ".png"; $icone = chemin_image($icone); $balise_img = charger_filtre('balise_img'); - return $icone?$balise_img($icone,_T(objet_info($objet,'texte_objet'))):''; + + return $icone ? $balise_img($icone, _T(objet_info($objet, 'texte_objet'))) : ''; +} + +/** + * Renvoyer une traduction d'une chaine de langue contextuelle à un objet si elle existe, + * la traduction de la chaine generique + * + * Ex : [(#ENV{objet}|objet_label{trad_reference})] + * va chercher si une chaine objet:trad_reference existe et renvoyer sa trad le cas echeant + * sinon renvoie la trad de la chaine trad_reference + * Si la chaine fournie contient un prefixe il est remplacé par celui de l'objet pour chercher la chaine contextuelle + * + * Les arguments $args et $options sont ceux de la fonction _T + * + * @param string $objet + * @param string $chaine + * @param array $args + * @param array $options + * @return string + */ +function objet_T($objet, $chaine, $args = array(), $options = array()){ + $chaine = explode(':',$chaine); + if ($t = _T($objet . ':' . end($chaine), $args, array_merge($options, array('force'=>false)))) { + return $t; + } + $chaine = implode(':',$chaine); + return _T($chaine, $args, $options); } /** * Fonction de secours pour inserer le head_css de facon conditionnelle - * + * * Appelée en filtre sur le squelette qui contient #INSERT_HEAD, * elle vérifie l'absence éventuelle de #INSERT_HEAD_CSS et y suplée si besoin * pour assurer la compat avec les squelettes qui n'utilisent pas. - * + * * @param string $flux Code HTML * @return string Code HTML */ -function insert_head_css_conditionnel($flux){ - if (strpos($flux,'')===false - AND $p=strpos($flux,'')){ +function insert_head_css_conditionnel($flux) { + if (strpos($flux, '') === false + and $p = strpos($flux, '') + ) { // plutot avant le premier js externe (jquery) pour etre non bloquant - if ($p1 = stripos($flux,',is','',$t)); - return (!$style ? '' : "\n") . $t; + $t = safehtml(preg_replace(',,is', '', $t)); + + return (!$style ? '' : "\n') . $t; } -// http://doc.spip.org/@filtre_audio_x_pn_realaudio -function filtre_audio_x_pn_realaudio($id) -{ - return " +/** + * Filtre d'incrustation d'un document RealAudio + * + * Retourne les paramètres `` nécessaires à la balise `` + * + * @filtre + * @param string $id + * @return string Code HTML des balises `` + **/ +function filtre_audio_x_pn_realaudio($id) { + return " "; } -?> diff --git a/www/ecrire/inc/filtres_mini.php b/www/ecrire/inc/filtres_mini.php index c65a2da7..c935e564 100644 --- a/www/ecrire/inc/filtres_mini.php +++ b/www/ecrire/inc/filtres_mini.php @@ -3,54 +3,82 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ +/** + * Filtres d'URL et de liens + * + * @package SPIP\Core\Filtres\Liens + **/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -// -// Filtres d'URLs -// -// Nettoyer une URL contenant des ../ -// -// resolve_url('/.././/truc/chose/machin/./.././.././hopla/..'); -// inspire (de loin) par PEAR:NetURL:resolvePath -// -// http://doc.spip.org/@resolve_path +/** + * Nettoyer une URL contenant des `../` + * + * Inspiré (de loin) par PEAR:NetURL:resolvePath + * + * @example + * ``` + * resolve_path('/.././/truc/chose/machin/./.././.././hopla/..'); + * ``` + * + * @param string $url URL + * @return string URL nettoyée + **/ function resolve_path($url) { list($url, $query) = array_pad(explode('?', $url, 2), 2, null); - while (preg_match(',/\.?/,', $url, $regs) # supprime // et /./ - OR preg_match(',/[^/]*/\.\./,S', $url, $regs) # supprime /toto/../ - OR preg_match(',^/\.\./,S', $url, $regs)) # supprime les /../ du haut + while (preg_match(',/\.?/,', $url, $regs) # supprime // et /./ + or preg_match(',/[^/]*/\.\./,S', $url, $regs) # supprime /toto/../ + or preg_match(',^/\.\./,S', $url, $regs) # supprime les /../ du haut + ) { $url = str_replace($regs[0], '/', $url); + } - if ($query) - $url .= '?'.$query; + if ($query) { + $url .= '?' . $query; + } - return '/'.preg_replace(',^/,S', '', $url); + return '/' . preg_replace(',^/,S', '', $url); } -// -// Suivre un lien depuis une adresse donnee -> nouvelle adresse -// -// suivre_lien('http://rezo.net/sous/dir/../ect/ory/fi.html..s#toto', -// 'a/../../titi.coco.html/tata#titi'); -// http://doc.spip.org/@suivre_lien + +/** + * Suivre un lien depuis une URL donnée vers une nouvelle URL + * + * @uses resolve_path() + * @example + * ``` + * suivre_lien( + * 'http://rezo.net/sous/dir/../ect/ory/fi.html..s#toto', + * 'a/../../titi.coco.html/tata#titi'); + * ``` + * + * @param string $url URL de base + * @param string $lien Lien ajouté à l'URL + * @return string URL complète. + **/ function suivre_lien($url, $lien) { - if (preg_match(',^(mailto|javascript|data):,iS', $lien)) + if (preg_match(',^(mailto|javascript|data|tel|callto|file|ftp):,iS', $lien)) { return $lien; - if (preg_match(';^((?:[a-z]{3,7}:)?//.*?)(/.*)?$;iS', $lien, $r)) - return $r[1].resolve_path($r[2]); + } + if (preg_match(';^((?:[a-z]{3,7}:)?//.*?)(/.*)?$;iS', $lien, $r)) { + $r = array_pad($r, 3, null); + + return $r[1] . resolve_path($r[2]); + } # L'url site spip est un lien absolu aussi - if ($lien == $GLOBALS['meta']['adresse_site']){ + if (isset($GLOBALS['meta']['adresse_site']) and $lien == $GLOBALS['meta']['adresse_site']) { return $lien; } @@ -60,59 +88,90 @@ function suivre_lien($url, $lien) { $debut = $regs[1]; $dir = !strlen($regs[2]) ? '/' : $regs[2]; $mot = $regs[3]; - $get = isset($regs[4])?$regs[4]:""; - $hash = isset($regs[5])?$regs[5]:""; + $get = isset($regs[4]) ? $regs[4] : ''; + $hash = isset($regs[5]) ? $regs[5] : ''; } - switch (substr($lien,0,1)) { + switch (substr($lien, 0, 1)) { case '/': return $debut . resolve_path($lien); case '#': - return $debut . resolve_path($dir.$mot.$get.$lien); + return $debut . resolve_path($dir . $mot . $get . $lien); case '': - return $debut . resolve_path($dir.$mot.$get.$hash); + return $debut . resolve_path($dir . $mot . $get . $hash); default: - return $debut . resolve_path($dir.$lien); + return $debut . resolve_path($dir . $lien); } } -// un filtre pour transformer les URLs relatives en URLs absolues ; -// ne s'applique qu'aux #URL_XXXX -// http://doc.spip.org/@url_absolue -function url_absolue($url, $base='') { - if (strlen($url = trim($url)) == 0) + +/** + * Transforme une URL relative en URL absolue + * + * S'applique sur une balise SPIP d'URL. + * + * @filtre + * @link http://www.spip.net/4127 + * @uses suivre_lien() + * @example + * ``` + * [(#URL_ARTICLE|url_absolue)] + * [(#CHEMIN{css/theme.css}|url_absolue)] + * ``` + * + * @param string $url URL + * @param string $base URL de base de destination (par défaut ce sera l'URL de notre site) + * @return string Texte ou URL (en absolus) + **/ +function url_absolue($url, $base = '') { + if (strlen($url = trim($url)) == 0) { return ''; - if (!$base) + } + if (!$base) { $base = url_de_base() . (_DIR_RACINE ? _DIR_RESTREINT_ABS : ''); + } + return suivre_lien($base, $url); } /** * Supprimer le protocole d'une url absolue * pour le rendre implicite (URL commencant par "//") + * * @param string $url_absolue * @return string */ -function protocole_implicite($url_absolue){ - return preg_replace(";^[a-z]{3,7}://;i","//",$url_absolue); +function protocole_implicite($url_absolue) { + return preg_replace(';^[a-z]{3,7}://;i', '//', $url_absolue); } -// un filtre pour transformer les URLs relatives en URLs absolues ; -// ne s'applique qu'aux textes contenant des liens -// http://doc.spip.org/@liens_absolus -function liens_absolus($texte, $base='') { - if (preg_match_all(',(<(a|link|image|img|script)\s[^<>]*(href|src)=[^<>]*>),imsS', - $texte, $liens, PREG_SET_ORDER)) { +/** + * Transforme les URLs relatives en URLs absolues + * + * Ne s'applique qu'aux textes contenant des liens + * + * @filtre + * @uses url_absolue() + * @link http://www.spip.net/4126 + * + * @param string $texte Texte + * @param string $base URL de base de destination (par défaut ce sera l'URL de notre site) + * @return string Texte avec des URLs absolues + **/ +function liens_absolus($texte, $base = '') { + if (preg_match_all(',(<(a|link|image|img|script)\s[^<>]*(href|src)=[^<>]*>),imsS', $texte, $liens, PREG_SET_ORDER)) { if (!function_exists('extraire_attribut')) { include_spip('inc/filtres'); } foreach ($liens as $lien) { - foreach(array('href', 'src') as $attr) { + foreach (array('href', 'src') as $attr) { $href = extraire_attribut($lien[0], $attr); - if (strlen($href)>0) { - $abs = url_absolue($href, $base); - if ($href != $abs and !preg_match('/^#/',$href)) { - $texte_lien = inserer_attribut($lien[0], $attr, $abs); - $texte = str_replace($lien[0],$texte_lien,$texte); + if (strlen($href) > 0) { + if (!preg_match(';^((?:[a-z]{3,7}:)?//);iS', $href)) { + $abs = url_absolue($href, $base); + if (rtrim($href, '/') !== rtrim($abs, '/') and !preg_match('/^#/', $href)) { + $texte_lien = inserer_attribut($lien[0], $attr, $abs); + $texte = str_replace($lien[0], $texte_lien, $texte); + } } } } @@ -122,60 +181,62 @@ function liens_absolus($texte, $base='') { return $texte; } -// -// Ce filtre public va traiter les URL ou les -// -// http://doc.spip.org/@abs_url -function abs_url($texte, $base='') { - if ($GLOBALS['mode_abs_url'] == 'url') + +/** + * Transforme une URL ou des liens en URL ou liens absolus + * + * @filtre + * @link http://www.spip.net/4128 + * @global mode_abs_url Pour connaître le mode (url ou texte) + * + * @param string $texte Texte ou URL + * @param string $base URL de base de destination (par défaut ce sera l'URL de notre site) + * @return string Texte ou URL (en absolus) + **/ +function abs_url($texte, $base = '') { + if ($GLOBALS['mode_abs_url'] == 'url') { return url_absolue($texte, $base); - else + } else { return liens_absolus($texte, $base); + } } /** -* htmlspecialchars wrapper (PHP >= 5.4 compat issue) -* -* @param string $string -* @param int $flags -* @param string $encoding -* @param bool $double_encode -* @return string -*/ -function spip_htmlspecialchars($string, $flags=null, $encoding='ISO-8859-1', $double_encode = true){ + * htmlspecialchars wrapper (PHP >= 5.4 compat issue) + * + * @param string $string + * @param int $flags + * @param string $encoding + * @param bool $double_encode + * @return string + */ +function spip_htmlspecialchars($string, $flags = null, $encoding = 'ISO-8859-1', $double_encode = true) { if (is_null($flags)) { - if (!defined('PHP_VERSION_ID') OR PHP_VERSION_ID < 50400) - $flags = ENT_COMPAT; - else - $flags = ENT_COMPAT|ENT_HTML401; + $flags = ENT_COMPAT; + if (defined('ENT_HTML401')) { + $flags |= ENT_HTML401; + } } - if (!defined('PHP_VERSION_ID') OR PHP_VERSION_ID < 50203) - return htmlspecialchars($string,$flags,$encoding); - else - return htmlspecialchars($string,$flags,$encoding,$double_encode); + return htmlspecialchars($string, $flags, $encoding, $double_encode); } /** -* htmlentities wrapper (PHP >= 5.4 compat issue) -* -* @param string $string -* @param int $flags -* @param string $encoding -* @param bool $double_encode -* @return string -*/ -function spip_htmlentities($string,$flags=null,$encoding = 'ISO-8859-1',$double_encode = true){ + * htmlentities wrapper (PHP >= 5.4 compat issue) + * + * @param string $string + * @param int $flags + * @param string $encoding + * @param bool $double_encode + * @return string + */ +function spip_htmlentities($string, $flags = null, $encoding = 'ISO-8859-1', $double_encode = true) { if (is_null($flags)) { - if (!defined('PHP_VERSION_ID') OR PHP_VERSION_ID < 50400) - $flags = ENT_COMPAT; - else - $flags = ENT_COMPAT|ENT_HTML401; + $flags = ENT_COMPAT; + if (defined('ENT_HTML401')) { + $flags |= ENT_HTML401; + } } - if (!defined('PHP_VERSION_ID') OR PHP_VERSION_ID < 50203) - return htmlentities($string,$flags,$encoding); - else - return htmlentities($string,$flags,$encoding,$double_encode); + return htmlentities($string, $flags, $encoding, $double_encode); } -?> diff --git a/www/ecrire/inc/filtres_selecteur_generique.php b/www/ecrire/inc/filtres_selecteur_generique.php new file mode 100644 index 00000000..d560606c --- /dev/null +++ b/www/ecrire/inc/filtres_selecteur_generique.php @@ -0,0 +1,233 @@ + $chemin) { + $objets_selectionner[] = preg_replace('/^hierarchie-([\w]+)[.]html$/', '$1', $fichier); + } + + // S'il y a une whitelist on ne garde que ce qui est dedans + if (!empty($whitelist)) { + $whitelist = array_map('table_objet', $whitelist); + $objets_selectionner = array_intersect($objets_selectionner, $whitelist); + } + // On supprime ce qui est dans la blacklist + $blacklist = array_map('table_objet', $blacklist); + // On enlève toujours la racine + $blacklist[] = 'racine'; + $objets_selectionner = array_diff($objets_selectionner, $blacklist); + + // Ensuite on cherche ce qu'on doit afficher : au moins ceux qu'on peut sélectionner + $objets_afficher = $objets_selectionner; + + // Il faut alors chercher d'éventuels parents obligatoires en plus : + // lister-trucs-bidules.html => on doit afficher des "trucs" pour trouver des "bidules" + if (!$liste_parents) { + $liste_parents = find_all_in_path('formulaires/selecteur/', 'lister-[\w]+-[\w]+[.]html$'); + } + foreach ($liste_parents as $fichier => $chemin) { + preg_match('/^lister-([\w]+)-([\w]+)[.]html$/', $fichier, $captures); + $parent = $captures[1]; + $type = $captures[2]; + // Si le type fait partie de ce qu'on doit afficher alors on ajoute aussi le parent à l'affichage + if (in_array($type, $objets_afficher)) { + $objets_afficher[] = $parent; + } + } + + $objets = array( + 'selectionner' => array_unique($objets_selectionner), + 'afficher' => array_unique($objets_afficher), + ); + + return $objets; +} + +/** + * Extrait des informations d'un tableau d'entrées `array("rubrique|9", "article|8", ...)` + * ou une chaine brute `rubrique|9,article|8,...` + * + * Peut retourner un tableau de couples (objet => id_objet) ou la liste + * des identifiants d'un objet précis si `$type` est fourni. + * + * @example + * `picker_selected(array('article|1', 'article|2', 'rubrique|5'))` + * retourne `array('article' => 1, 'article' => 2, 'rubrique' => 5)` + * @example + * `picker_selected(array('article|1', 'article|2', 'rubrique|5'), 'article')` + * retourne `array(1, 2)` + * + * @filtre + * + * @param array|string $selected + * Liste des entrées : tableau ou chaine séparée par des virgules + * @param string $type + * Type de valeur à recuperer tel que `rubrique`, `article` + * @return array + * liste des couples (objets => id_objet) ou liste des identifiants d'un type d'objet. + **/ +function picker_selected($selected, $type = '') { + $select = array(); + $type = preg_replace(',\W,', '', $type); + + if ($selected and !is_array($selected)) { + $selected = explode(',', $selected); + } + + if (is_array($selected)) { + foreach ($selected as $value) { + // Si c'est le bon format déjà + if (preg_match('/^([\w]+)[|]([0-9]+)$/', $value, $captures)) { + $objet = $captures[1]; + $id_objet = intval($captures[2]); + + // Si on cherche un type et que c'est le bon, on renvoit un tableau que d'identifiants + if (is_string($type) and $type == $objet and ($id_objet or in_array($objet, array('racine', 'rubrique')))) { + $select[] = $id_objet; + } elseif (!$type and ($id_objet or in_array($objet, array('racine', 'rubrique')))) { + $select[] = array('objet' => $objet, 'id_objet' => $id_objet); + } + } + } + } + + return $select; +} + +/** + * Récupère des informations sur un objet pour pouvoir l'ajouter aux éléments sélectionnés + * + * @uses typer_raccourci() + * + * @param string $ref + * Référence de l'objet à chercher, de la forme "type|id", par exemple "rubrique|123". + * @param mixed $rubriques_ou_objets + * Soit un booléen (pouvant être une chaîne vide aussi) indiquant que les rubriques sont sélectionnables + * soit un tableau complet des objets sélectionnables. + * @param bool $articles + * Booléen indiquant si les articles sont sélectionnables + */ +function picker_identifie_id_rapide($ref, $rubriques_ou_objets = false, $articles = false) { + include_spip('inc/json'); + include_spip('inc/lien'); + + // On construit un tableau des objets sélectionnables suivant les paramètres + $objets = array(); + if ($rubriques_ou_objets and is_array($rubriques_ou_objets)) { + $objets = $rubriques_ou_objets; + } else { + if ($rubriques_ou_objets) { + $objets[] = 'rubriques'; + } + if ($articles) { + $objets[] = 'articles'; + } + } + + // Si la référence ne correspond à rien, c'est fini + if (!($match = typer_raccourci($ref))) { + return json_export(false); + } + // Sinon on récupère les infos utiles + @list($type, , $id, , , , ) = $match; + + // On regarde si le type trouvé fait partie des objets sélectionnables + if (!in_array(table_objet($type), $objets)) { + return json_export(false); + } + + // Maintenant que tout est bon, on cherche les informations sur cet objet + include_spip('inc/filtres'); + if (!$titre = generer_info_entite($id, $type, 'titre')) { + return json_export(false); + } + + // On simplifie le texte + $titre = attribut_html($titre); + + return json_export(array('type' => $type, 'id' => "$type|$id", 'titre' => $titre)); +} + +/** + * Déterminer si une rubrique a des enfants à afficher ou non + * + * On test d'abord si la rubrique a des sous rubriques, et sinon on regarde + * les autres types sélectionnables, puis on regarde si la rubrique contient + * certains de ces objets + * + * @note + * Pour optimiser, la fonction calcule sa valeur sur toute la fratrie d'un coup, + * puisqu'elle est appellée N fois pour toutes les rubriques d'un même niveau + * + * @param int $id_rubrique + * Identifiant de la rubrique + * @param array $types + * Liste de type d'objets. Si l'un de ces objet est présent dans la rubrique, + * alors cette rubrique est à afficher + * @return string + * Comme le filtre `oui` : espace (` `) si rubrique à afficher, chaîne vide sinon. + */ +function test_enfants_rubrique($id_rubrique, $types = array()) { + static $has_child = array(); + + if (!isset($has_child[$id_rubrique])) { + $types = (is_array($types) ? array_filter($types) : array()); + + // recuperer tous les freres et soeurs de la rubrique visee + $id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); + $fratrie = sql_allfetsel('id_rubrique', 'spip_rubriques', 'id_parent=' . intval($id_parent)); + $fratrie = array_map('reset', $fratrie); + $has = sql_allfetsel('DISTINCT id_parent', 'spip_rubriques', sql_in('id_parent', $fratrie)); + $has = array_map('reset', $has); + $fratrie = array_diff($fratrie, $has); + + while (count($fratrie) and is_array($types) and count($types)) { + $type = array_shift($types); + $h = sql_allfetsel('DISTINCT id_rubrique', table_objet_sql($type), sql_in('id_rubrique', $fratrie)); + $h = array_map('reset', $h); + $has = array_merge($has, $h); + $fratrie = array_diff($fratrie, $h); + } + + if (count($has)) { + $has_child = $has_child + array_combine($has, array_pad(array(), count($has), true)); + } + if (count($fratrie)) { + $has_child = $has_child + array_combine($fratrie, array_pad(array(), count($fratrie), false)); + } + } + + return $has_child[$id_rubrique] ? ' ' : ''; +} diff --git a/www/ecrire/inc/flock.php b/www/ecrire/inc/flock.php index 6a962010..4a8209c0 100644 --- a/www/ecrire/inc/flock.php +++ b/www/ecrire/inc/flock.php @@ -3,87 +3,164 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ +/** + * Gestion de recherche et d'écriture de répertoire ou fichiers + * + * @package SPIP\Core\Flock + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + -if (!defined('_ECRIRE_INC_VERSION')) return; -// ajouter define('_CREER_DIR_PLAT', true); dans mes_options pour restaurer -// le fonctionnement des faux repertoires en .plat +/** + * Autoriser la création de faux répertoires ? + * + * Ajouter `define('_CREER_DIR_PLAT', true);` dans mes_options pour restaurer + * le fonctionnement des faux répertoires en `.plat` + */ define('_CREER_DIR_PLAT', false); -if (!defined('_TEST_FILE_EXISTS')) define('_TEST_FILE_EXISTS', preg_match(',(online|free)[.]fr$,', isset($_ENV["HTTP_HOST"]) ? $_ENV["HTTP_HOST"] : "")); +if (!defined('_TEST_FILE_EXISTS')) { + /** Permettre d'éviter des tests file_exists sur certains hébergeurs */ + define('_TEST_FILE_EXISTS', preg_match(',(online|free)[.]fr$,', isset($_ENV["HTTP_HOST"]) ? $_ENV["HTTP_HOST"] : "")); +} #define('_SPIP_LOCK_MODE',0); // ne pas utiliser de lock (deconseille) #define('_SPIP_LOCK_MODE',1); // utiliser le flock php #define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip -if (_SPIP_LOCK_MODE==2) +if (_SPIP_LOCK_MODE == 2) { include_spip('inc/nfslock'); +} $GLOBALS['liste_verrous'] = array(); -// http://doc.spip.org/@spip_fopen_lock -function spip_fopen_lock($fichier,$mode,$verrou){ - if (_SPIP_LOCK_MODE==1){ - if ($fl = @fopen($fichier,$mode)) + +/** + * Ouvre un fichier et le vérrouille + * + * @link http://php.net/manual/fr/function.flock.php pour le type de verrou. + * @see _SPIP_LOCK_MODE + * @see spip_fclose_unlock() + * @uses spip_nfslock() si _SPIP_LOCK_MODE = 2. + * + * @param string $fichier + * Chemin du fichier + * @param string $mode + * Mode d'ouverture du fichier (r,w,...) + * @param string $verrou + * Type de verrou (avec _SPIP_LOCK_MODE = 1) + * @return Resource + * Ressource sur le fichier ouvert, sinon false. + **/ +function spip_fopen_lock($fichier, $mode, $verrou) { + if (_SPIP_LOCK_MODE == 1) { + if ($fl = @fopen($fichier, $mode)) { // verrou @flock($fl, $verrou); + } + return $fl; - } - elseif(_SPIP_LOCK_MODE==2) { - if (($verrou = spip_nfslock($fichier)) && ($fl = @fopen($fichier,$mode))){ - $GLOBALS['liste_verrous'][$fl] = array($fichier,$verrou); + } elseif (_SPIP_LOCK_MODE == 2) { + if (($verrou = spip_nfslock($fichier)) && ($fl = @fopen($fichier, $mode))) { + $GLOBALS['liste_verrous'][$fl] = array($fichier, $verrou); + return $fl; + } else { + return false; } - else return false; } - return @fopen($fichier,$mode); + + return @fopen($fichier, $mode); } -// http://doc.spip.org/@spip_fclose_unlock -function spip_fclose_unlock($handle){ - if (_SPIP_LOCK_MODE==1){ + +/** + * Dévérrouille et ferme un fichier + * + * @see _SPIP_LOCK_MODE + * @see spip_fopen_lock() + * + * @param string $handle + * Chemin du fichier + * @return bool + * true si succès, false sinon. + **/ +function spip_fclose_unlock($handle) { + if (_SPIP_LOCK_MODE == 1) { @flock($handle, LOCK_UN); - } - elseif(_SPIP_LOCK_MODE==2) { - spip_nfsunlock(reset($GLOBALS['liste_verrous'][$handle]),end($GLOBALS['liste_verrous'][$handle])); + } elseif (_SPIP_LOCK_MODE == 2) { + spip_nfsunlock(reset($GLOBALS['liste_verrous'][$handle]), end($GLOBALS['liste_verrous'][$handle])); unset($GLOBALS['liste_verrous'][$handle]); } + return @fclose($handle); } -// http://doc.spip.org/@spip_file_get_contents -function spip_file_get_contents ($fichier) { +/** + * Retourne le contenu d'un fichier, même si celui ci est compréssé + * avec une extension en `.gz` + * + * @param string $fichier + * Chemin du fichier + * @return string + * Contenu du fichier + **/ +function spip_file_get_contents($fichier) { if (substr($fichier, -3) != '.gz') { - if (function_exists('file_get_contents') - AND ( - // quand on est sous window on ne sait pas si file_get_contents marche + if (function_exists('file_get_contents')) { + // quand on est sous windows on ne sait pas si file_get_contents marche // on essaye : si ca retourne du contenu alors c'est bon // sinon on fait un file() pour avoir le coeur net - ($contenu = @file_get_contents ($fichier)) - OR _OS_SERVEUR != 'windows') - ) - return $contenu; - else + $contenu = @file_get_contents($fichier); + if (!$contenu and _OS_SERVEUR == 'windows') { + $contenu = @file($fichier); + } + } else { $contenu = @file($fichier); - } else - $contenu = @gzfile($fichier); - return is_array($contenu)?join('', $contenu):(string)$contenu; + } + } else { + $contenu = @gzfile($fichier); + } + + return is_array($contenu) ? join('', $contenu) : (string)$contenu; } -// options = array( -// 'phpcheck' => 'oui' # verifier qu'on a bien du php -// dezippe automatiquement les fichiers .gz -// http://doc.spip.org/@lire_fichier -function lire_fichier ($fichier, &$contenu, $options=false) { + +/** + * Lit un fichier et place son contenu dans le paramètre transmis. + * + * Décompresse automatiquement les fichiers `.gz` + * + * @uses spip_fopen_lock() + * @uses spip_file_get_contents() + * @uses spip_fclose_unlock() + * + * @param string $fichier + * Chemin du fichier + * @param string $contenu + * Le contenu du fichier sera placé dans cette variable + * @param array $options + * Options tel que : + * + * - 'phpcheck' => 'oui' : vérifie qu'on a bien du php + * @return bool + * true si l'opération a réussie, false sinon. + **/ +function lire_fichier($fichier, &$contenu, $options = array()) { $contenu = ''; // inutile car si le fichier n'existe pas, le lock va renvoyer false juste apres // economisons donc les acces disque, sauf chez free qui rale pour un rien - if (_TEST_FILE_EXISTS AND !@file_exists($fichier)) + if (_TEST_FILE_EXISTS and !@file_exists($fichier)) { return false; + } #spip_timer('lire_fichier'); @@ -96,8 +173,9 @@ function lire_fichier ($fichier, &$contenu, $options=false) { // on ne verifie que si la tentative de lecture a echoue // pour discriminer un contenu vide d'un fichier absent // et eviter un acces disque - if (!$contenu AND !@file_exists($fichier)) { + if (!$contenu and !@file_exists($fichier)) { spip_fclose_unlock($fl); + return false; } @@ -106,45 +184,68 @@ function lire_fichier ($fichier, &$contenu, $options=false) { // Verifications $ok = true; - if ($options['phpcheck'] == 'oui') + if (isset($options['phpcheck']) and $options['phpcheck'] == 'oui') { $ok &= (preg_match(",[?]>\n?$,", $contenu)); + } #spip_log("$fread $fichier ".spip_timer('lire_fichier')); - if (!$ok) + if (!$ok) { spip_log("echec lecture $fichier"); + } return $ok; } + return false; } -// -// Ecrire un fichier de maniere un peu sure -// -// zippe les fichiers .gz -// http://doc.spip.org/@ecrire_fichier -function ecrire_fichier ($fichier, $contenu, $ignorer_echec = false, $truncate=true) { + +/** + * Écrit un fichier de manière un peu sûre + * + * Cette écriture s’exécute de façon sécurisée en posant un verrou sur + * le fichier avant sa modification. Les fichiers .gz sont compressés. + * + * @uses raler_fichier() Si le fichier n'a pu peut être écrit + * @see lire_fichier() + * @see supprimer_fichier() + * + * @param string $fichier + * Chemin du fichier + * @param string $contenu + * Contenu à écrire + * @param bool $ignorer_echec + * - true pour ne pas raler en cas d'erreur + * - false affichera un message si on est webmestre + * @param bool $truncate + * Écriture avec troncation ? + * @return bool + * - true si l’écriture s’est déroulée sans problème. + **/ +function ecrire_fichier($fichier, $contenu, $ignorer_echec = false, $truncate = true) { #spip_timer('ecrire_fichier'); // verrouiller le fichier destination - if ($fp = spip_fopen_lock($fichier, 'a',LOCK_EX)) { - // ecrire les donnees, compressees le cas echeant - // (on ouvre un nouveau pointeur sur le fichier, ce qui a l'avantage - // de le recreer si le locker qui nous precede l'avait supprime...) - if (substr($fichier, -3) == '.gz') + if ($fp = spip_fopen_lock($fichier, 'a', LOCK_EX)) { + // ecrire les donnees, compressees le cas echeant + // (on ouvre un nouveau pointeur sur le fichier, ce qui a l'avantage + // de le recreer si le locker qui nous precede l'avait supprime...) + if (substr($fichier, -3) == '.gz') { $contenu = gzencode($contenu); + } // si c'est une ecriture avec troncation , on fait plutot une ecriture complete a cote suivie unlink+rename // pour etre sur d'avoir une operation atomique // y compris en NFS : http://www.ietf.org/rfc/rfc1094.txt // sauf sous wintruc ou ca ne marche pas $ok = false; - if ($truncate AND _OS_SERVEUR != 'windows'){ - if (!function_exists('creer_uniqid')) + if ($truncate and _OS_SERVEUR != 'windows') { + if (!function_exists('creer_uniqid')) { include_spip('inc/acces'); + } $id = creer_uniqid(); // on ouvre un pointeur sur un fichier temporaire en ecriture +raz - if ($fp2 = spip_fopen_lock("$fichier.$id", 'w',LOCK_EX)) { + if ($fp2 = spip_fopen_lock("$fichier.$id", 'w', LOCK_EX)) { $s = @fputs($fp2, $contenu, $a = strlen($contenu)); $ok = ($s == $a); spip_fclose_unlock($fp2); @@ -155,23 +256,26 @@ function ecrire_fichier ($fichier, $contenu, $ignorer_echec = false, $truncate=t // le rename aussitot, atomique quand on est pas sous windows // au pire on arrive en second en cas de concourance, et le rename echoue // --> on a la version de l'autre process qui doit etre identique - @rename("$fichier.$id",$fichier); + @rename("$fichier.$id", $fichier); // precaution en cas d'echec du rename - if (!_TEST_FILE_EXISTS OR @file_exists("$fichier.$id")) + if (!_TEST_FILE_EXISTS or @file_exists("$fichier.$id")) { @unlink("$fichier.$id"); - if ($ok) + } + if ($ok) { $ok = file_exists($fichier); - } - else - // echec mais penser a fermer .. + } + } else // echec mais penser a fermer .. + { spip_fclose_unlock($fp); + } } // sinon ou si methode precedente a echoueee // on se rabat sur la methode ancienne - if (!$ok){ + if (!$ok) { // ici on est en ajout ou sous windows, cas desespere - if ($truncate) - @ftruncate($fp,0); + if ($truncate) { + @ftruncate($fp, 0); + } $s = @fputs($fp, $contenu, $a = strlen($contenu)); $ok = ($s == $a); @@ -181,54 +285,87 @@ function ecrire_fichier ($fichier, $contenu, $ignorer_echec = false, $truncate=t // liberer le verrou et fermer le fichier @chmod($fichier, _SPIP_CHMOD & 0666); if ($ok) { - if (strpos($fichier,".php")!==false){ + if (strpos($fichier, ".php") !== false) { spip_clear_opcode_cache(realpath($fichier)); } + return $ok; } } - if (!$ignorer_echec){ + if (!$ignorer_echec) { include_spip('inc/autoriser'); - if (autoriser('chargerftp')) + if (autoriser('chargerftp')) { raler_fichier($fichier); + } spip_unlink($fichier); } - spip_log("Ecriture fichier $fichier impossible",_LOG_INFO_IMPORTANTE); + spip_log("Ecriture fichier $fichier impossible", _LOG_INFO_IMPORTANTE); + return false; } /** - * Ecrire un contenu dans un fichier encapsule en php pour en empecher l'acces en l'absence - * de htaccess + * Écrire un contenu dans un fichier encapsulé en PHP pour en empêcher l'accès en l'absence + * de fichier htaccess + * + * @uses ecrire_fichier() + * * @param string $fichier - * @param $contenu - * @param $ecrire_quand_meme - * @param $truncate + * Chemin du fichier + * @param string $contenu + * Contenu à écrire + * @param bool $ecrire_quand_meme + * - true pour ne pas raler en cas d'erreur + * - false affichera un message si on est webmestre + * @param bool $truncate + * Écriture avec troncation ? */ -function ecrire_fichier_securise ($fichier, $contenu, $ecrire_quand_meme = false, $truncate=true) { - if (substr($fichier,-4) !== '.php') - spip_log('Erreur de programmation: '.$fichier.' doit finir par .php'); - $contenu = "<"."?php die ('Acces interdit'); ?".">\n" . $contenu; +function ecrire_fichier_securise($fichier, $contenu, $ecrire_quand_meme = false, $truncate = true) { + if (substr($fichier, -4) !== '.php') { + spip_log('Erreur de programmation: ' . $fichier . ' doit finir par .php'); + } + $contenu = "<" . "?php die ('Acces interdit'); ?" . ">\n" . $contenu; + return ecrire_fichier($fichier, $contenu, $ecrire_quand_meme, $truncate); } /** - * Lire un fichier encapsule en php - * @param $fichier - * @param $contenu - * @param $options + * Lire un fichier encapsulé en PHP + * + * @uses lire_fichier() + * + * @param string $fichier + * Chemin du fichier + * @param string $contenu + * Le contenu du fichier sera placé dans cette variable + * @param array $options + * Options tel que : + * + * - 'phpcheck' => 'oui' : vérifie qu'on a bien du php + * @return bool + * true si l'opération a réussie, false sinon. */ -function lire_fichier_securise ($fichier, &$contenu, $options=false) { - if ($res = lire_fichier($fichier,$contenu,$options)){ - $contenu = substr($contenu,strlen("<"."?php die ('Acces interdit'); ?".">\n")); +function lire_fichier_securise($fichier, &$contenu, $options = array()) { + if ($res = lire_fichier($fichier, $contenu, $options)) { + $contenu = substr($contenu, strlen("<" . "?php die ('Acces interdit'); ?" . ">\n")); } + return $res; } -// http://doc.spip.org/@raler_fichier -function raler_fichier($fichier) -{ +/** + * Affiche un message d’erreur bloquant, indiquant qu’il n’est pas possible de créer + * le fichier à cause des droits sur le répertoire parent au fichier. + * + * Arrête le script PHP par un exit; + * + * @uses minipres() Pour afficher le message + * + * @param string $fichier + * Chemin du fichier + **/ +function raler_fichier($fichier) { include_spip('inc/minipres'); $dir = dirname($fichier); http_status(401); @@ -240,72 +377,79 @@ function raler_fichier($fichier) . _T('texte_inc_meta_2') . " " . _T('texte_inc_meta_3', - array('repertoire' => joli_repertoire($dir))) + array('repertoire' => joli_repertoire($dir))) . "\n"); exit; } -// -// Retourne Vrai si son premier argument a ete cree il y a moins de N secondes -// -// http://doc.spip.org/@jeune_fichier -function jeune_fichier($fichier, $n) -{ - if (!file_exists($fichier)) return false; - if (!$c = @filemtime($fichier)) return false; - return (time()-$n <= $c); +/** + * Teste si un fichier est récent (moins de n secondes) + * + * @param string $fichier + * Chemin du fichier + * @param int $n + * Âge testé, en secondes + * @return bool + * - true si récent, false sinon + */ +function jeune_fichier($fichier, $n) { + if (!file_exists($fichier)) { + return false; + } + if (!$c = @filemtime($fichier)) { + return false; + } + + return (time() - $n <= $c); } -// -// Supprimer le fichier de maniere sympa (flock) -// -// http://doc.spip.org/@supprimer_fichier -function supprimer_fichier($fichier, $lock=true) { - if (!@file_exists($fichier)) +/** + * Supprimer un fichier de manière sympa (flock) + * + * @param string $fichier + * Chemin du fichier + * @param bool $lock + * true pour utiliser un verrou + * @return bool|void + * - true si le fichier n'existe pas + * - false si on n'arrive pas poser le verrou + * - void sinon + */ +function supprimer_fichier($fichier, $lock = true) { + if (!@file_exists($fichier)) { return true; + } if ($lock) { // verrouiller le fichier destination - if (!$fp = spip_fopen_lock($fichier, 'a', LOCK_EX)) + if (!$fp = spip_fopen_lock($fichier, 'a', LOCK_EX)) { return false; - + } + // liberer le verrou spip_fclose_unlock($fp); } - + // supprimer return @unlink($fichier); } -// Supprimer brutalement, si le fichier existe -// http://doc.spip.org/@spip_unlink +/** + * Supprimer brutalement un fichier, s'il existe + * + * @param string $f + * Chemin du fichier + */ function spip_unlink($f) { - if (!is_dir($f)) - supprimer_fichier($f,false); - else { + if (!is_dir($f)) { + supprimer_fichier($f, false); + } else { @unlink("$f/.ok"); @rmdir($f); } } -/** - * clearstatcache adapte a la version PHP - * @param bool $clear_realpath_cache - * @param null $filename - */ -function spip_clearstatcache($clear_realpath_cache = false, $filename=null){ - if (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 50300) { - // Below PHP 5.3, clearstatcache does not accept any function parameters. - return clearstatcache(); - } - else { - return clearstatcache($clear_realpath_cache, $filename); - } - -} - - /** * Invalidates a PHP file from any active opcode caches. * @@ -317,73 +461,109 @@ function spip_clearstatcache($clear_realpath_cache = false, $filename=null){ * The absolute path of the PHP file to invalidate. */ function spip_clear_opcode_cache($filepath) { - spip_clearstatcache(TRUE, $filepath); - - // Zend OPcache - if (function_exists('opcache_invalidate')) { - opcache_invalidate($filepath, TRUE); - } - // APC. - if (function_exists('apc_delete_file')) { - // apc_delete_file() throws a PHP warning in case the specified file was - // not compiled yet. - // @see http://php.net/apc-delete-file - @apc_delete_file($filepath); - } + clearstatcache(true, $filepath); + + // Zend OPcache + if (function_exists('opcache_invalidate')) { + opcache_invalidate($filepath, true); + } + // APC. + if (function_exists('apc_delete_file')) { + // apc_delete_file() throws a PHP warning in case the specified file was + // not compiled yet. + // @see http://php.net/apc-delete-file + @apc_delete_file($filepath); + } } /** - * si opcache est actif et en mode validate_timestamps - * le timestamp ne sera checke qu'apres revalidate_freq s - * il faut donc attendre ce temps la pour etre sur qu'on va bien beneficier de la recompilation - * NB c'est une config foireuse deconseillee de opcode cache mais malheureusement utilisee par Octave - * cf http://stackoverflow.com/questions/25649416/when-exactly-does-php-5-5-opcache-check-file-timestamp-based-on-revalidate-freq - * et http://wiki.mikejung.biz/PHP_OPcache - * + * Attendre l'invalidation de l'opcache + * + * Si opcache est actif et en mode `validate_timestamps`, + * le timestamp du fichier ne sera vérifié qu'après une durée + * en secondes fixée par `revalidate_freq`. + * + * Il faut donc attendre ce temps là pour être sûr qu'on va bien + * bénéficier de la recompilation du fichier par l'opcache. + * * Ne fait rien en dehors de ce cas + * + * @note + * C'est une config foireuse déconseillée de opcode cache mais + * malheureusement utilisée par Octave. + * @link http://stackoverflow.com/questions/25649416/when-exactly-does-php-5-5-opcache-check-file-timestamp-based-on-revalidate-freq + * @link http://wiki.mikejung.biz/PHP_OPcache * */ -function spip_attend_invalidation_opcode_cache(){ +function spip_attend_invalidation_opcode_cache() { if (function_exists('opcache_get_configuration') - AND @ini_get('opcache.enable') - AND @ini_get('opcache.validate_timestamps') - AND $duree = @ini_get('opcache.revalidate_freq') ) { - sleep($duree+1); + and @ini_get('opcache.enable') + and @ini_get('opcache.validate_timestamps') + and $duree = @ini_get('opcache.revalidate_freq') + ) { + sleep($duree + 1); } } + /** * Suppression complete d'un repertoire. * - * http://www.php.net/manual/en/function.rmdir.php#92050 + * @link http://www.php.net/manual/en/function.rmdir.php#92050 * * @param string $dir Chemin du repertoire * @return bool Suppression reussie. */ function supprimer_repertoire($dir) { - if (!file_exists($dir)) return true; - if (!is_dir($dir) || is_link($dir)) return @unlink($dir); - + if (!file_exists($dir)) { + return true; + } + if (!is_dir($dir) || is_link($dir)) { + return @unlink($dir); + } + foreach (scandir($dir) as $item) { - if ($item == '.' || $item == '..') continue; + if ($item == '.' || $item == '..') { + continue; + } if (!supprimer_repertoire($dir . "/" . $item)) { @chmod($dir . "/" . $item, 0777); - if (!supprimer_repertoire($dir . "/" . $item)) return false; + if (!supprimer_repertoire($dir . "/" . $item)) { + return false; + } }; } - + return @rmdir($dir); } - -// -// Retourne $base/${subdir}/ si le sous-repertoire peut etre cree, -// $base/${subdir}_ sinon ; $nobase signale qu'on ne veut pas de $base/ -// On peut aussi ne donner qu'un seul argument, -// subdir valant alors ce qui suit le dernier / dans $base -// -// http://doc.spip.org/@sous_repertoire -function sous_repertoire($base, $subdir='', $nobase = false, $tantpis=false) { + +/** + * Crée un sous répertoire + * + * Retourne `$base/${subdir}/` si le sous-repertoire peut être crée, + * `$base/${subdir}_` sinon. + * + * @example + * ``` + * sous_repertoire(_DIR_CACHE, 'demo'); + * sous_repertoire(_DIR_CACHE . '/demo'); + * ``` + * + * @param string $base + * - Chemin du répertoire parent (avec $subdir) + * - sinon chemin du répertoire à créer + * @param string $subdir + * - Nom du sous répertoire à créer, + * - non transmis, `$subdir` vaut alors ce qui suit le dernier `/` dans `$base` + * @param bool $nobase + * true pour ne pas avoir le chemin du parent `$base/` dans le retour + * @param bool $tantpis + * true pour ne pas raler en cas de non création du répertoire + * @return string + * Chemin du répertoire créé. + **/ +function sous_repertoire($base, $subdir = '', $nobase = false, $tantpis = false) { static $dirs = array(); $base = str_replace("//", "/", $base); @@ -393,100 +573,133 @@ function sous_repertoire($base, $subdir='', $nobase = false, $tantpis=false) { if (!strlen($subdir)) { $n = strrpos($base, "/"); - if ($n === false) return $nobase ? '' : ($base .'/'); - $subdir = substr($base, $n+1); - $base = substr($base, 0, $n+1); + if ($n === false) { + return $nobase ? '' : ($base . '/'); + } + $subdir = substr($base, $n + 1); + $base = substr($base, 0, $n + 1); } else { $base .= '/'; $subdir = str_replace("/", "", $subdir); } $baseaff = $nobase ? '' : $base; - if (isset($dirs[$base.$subdir])) - return $baseaff.$dirs[$base.$subdir]; + if (isset($dirs[$base . $subdir])) { + return $baseaff . $dirs[$base . $subdir]; + } - if (_CREER_DIR_PLAT AND @file_exists("$base${subdir}.plat")) - return $baseaff.($dirs[$base.$subdir] = "${subdir}_"); + if (_CREER_DIR_PLAT and @file_exists("$base${subdir}.plat")) { + return $baseaff . ($dirs[$base . $subdir] = "${subdir}_"); + } - $path = $base.$subdir; # $path = 'IMG/distant/pdf' ou 'IMG/distant_pdf' + $path = $base . $subdir; # $path = 'IMG/distant/pdf' ou 'IMG/distant_pdf' - if (file_exists("$path/.ok")) - return $baseaff.($dirs[$base.$subdir] = "$subdir/"); + if (file_exists("$path/.ok")) { + return $baseaff . ($dirs[$base . $subdir] = "$subdir/"); + } @mkdir($path, _SPIP_CHMOD); @chmod($path, _SPIP_CHMOD); if (is_dir($path) && is_writable($path)) { - @touch ("$path/.ok"); + @touch("$path/.ok"); spip_log("creation $base$subdir/"); - return $baseaff.($dirs[$base.$subdir] = "$subdir/"); + + return $baseaff . ($dirs[$base . $subdir] = "$subdir/"); } // en cas d'echec c'est peut etre tout simplement que le disque est plein : // l'inode du fichier dir_test existe, mais impossible d'y mettre du contenu // => sauf besoin express (define dans mes_options), ne pas creer le .plat if (_CREER_DIR_PLAT - AND $f = @fopen("$base${subdir}.plat", "w")) + and $f = @fopen("$base${subdir}.plat", "w") + ) { fclose($f); - else { + } else { spip_log("echec creation $base${subdir}"); - if ($tantpis) return ''; - if (!_DIR_RESTREINT) - $base = preg_replace(',^' . _DIR_RACINE .',', '',$base); + if ($tantpis) { + return ''; + } + if (!_DIR_RESTREINT) { + $base = preg_replace(',^' . _DIR_RACINE . ',', '', $base); + } $base .= $subdir; raler_fichier($base . '/.plat'); } spip_log("faux sous-repertoire $base${subdir}"); - return $baseaff.($dirs[$base.$subdir] = "${subdir}_"); + + return $baseaff . ($dirs[$base . $subdir] = "${subdir}_"); } -// -// Cette fonction parcourt recursivement le repertoire $dir, et renvoie les -// fichiers dont le chemin verifie le pattern (preg) donne en argument. -// En cas d'echec retourne un array() vide -// -// Usage: array preg_files('ecrire/data/', '[.]lock$'); -// -// Attention, afin de conserver la compatibilite avec les repertoires '.plat' -// si $dir = 'rep/sous_rep_' au lieu de 'rep/sous_rep/' on scanne 'rep/' et on -// applique un pattern '^rep/sous_rep_' -// si $recurs vaut false, la fonction ne descend pas dans les sus repertoires -// -// http://doc.spip.org/@preg_files -function preg_files($dir, $pattern=-1 /* AUTO */, $maxfiles = 10000, $recurs=array()) { + +/** + * Parcourt récursivement le repertoire `$dir`, et renvoie les + * fichiers dont le chemin vérifie le pattern (preg) donné en argument. + * + * En cas d'echec retourne un `array()` vide + * + * @example + * ``` + * $x = preg_files('ecrire/data/', '[.]lock$'); + * // $x array() + * ``` + * + * @note + * Attention, afin de conserver la compatibilite avec les repertoires '.plat' + * si `$dir = 'rep/sous_rep_'` au lieu de `rep/sous_rep/` on scanne `rep/` et on + * applique un pattern `^rep/sous_rep_` + * + * @param string $dir + * Répertoire à parcourir + * @param int|string $pattern + * Expression régulière pour trouver des fichiers, tel que `[.]lock$` + * @param int $maxfiles + * Nombre de fichiers maximums retournés + * @param array $recurs + * false pour ne pas descendre dans les sous répertoires + * @return array + * Chemins des fichiers trouvés. + **/ +function preg_files($dir, $pattern = -1 /* AUTO */, $maxfiles = 10000, $recurs = array()) { $nbfiles = 0; - if ($pattern == -1) + if ($pattern == -1) { $pattern = "^$dir"; + } $fichiers = array(); // revenir au repertoire racine si on a recu dossier/truc // pour regarder dossier/truc/ ne pas oublier le / final $dir = preg_replace(',/[^/]*$,', '', $dir); - if ($dir == '') $dir = '.'; + if ($dir == '') { + $dir = '.'; + } - if (@is_dir($dir) AND is_readable($dir) AND $d = @opendir($dir)) { - while (($f = readdir($d)) !== false && ($nbfiles<$maxfiles)) { + if (@is_dir($dir) and is_readable($dir) and $d = opendir($dir)) { + while (($f = readdir($d)) !== false && ($nbfiles < $maxfiles)) { if ($f[0] != '.' # ignorer . .. .svn etc - AND $f != 'CVS' - AND $f != 'remove.txt' - AND is_readable($f = "$dir/$f")) { + and $f != 'CVS' + and $f != 'remove.txt' + and is_readable($f = "$dir/$f") + ) { if (is_file($f)) { - if (preg_match(";$pattern;iS", $f)) - { + if (preg_match(";$pattern;iS", $f)) { $fichiers[] = $f; $nbfiles++; } - } - else if (is_dir($f) AND is_array($recurs)){ - $rp = @realpath($f); - if (!is_string($rp) OR !strlen($rp)) $rp=$f; # realpath n'est peut etre pas autorise - if (!isset($recurs[$rp])) { - $recurs[$rp] = true; - $beginning = $fichiers; - $end = preg_files("$f/", $pattern, - $maxfiles-$nbfiles, $recurs); - $fichiers = array_merge((array)$beginning, (array)$end); - $nbfiles = count($fichiers); + } else { + if (is_dir($f) and is_array($recurs)) { + $rp = @realpath($f); + if (!is_string($rp) or !strlen($rp)) { + $rp = $f; + } # realpath n'est peut etre pas autorise + if (!isset($recurs[$rp])) { + $recurs[$rp] = true; + $beginning = $fichiers; + $end = preg_files("$f/", $pattern, + $maxfiles - $nbfiles, $recurs); + $fichiers = array_merge((array)$beginning, (array)$end); + $nbfiles = count($fichiers); + } } } } @@ -494,7 +707,6 @@ function preg_files($dir, $pattern=-1 /* AUTO */, $maxfiles = 10000, $recurs=arr closedir($d); } sort($fichiers); + return $fichiers; } - -?> diff --git a/www/ecrire/inc/genie.php b/www/ecrire/inc/genie.php index 4ba26080..3a72e8c5 100644 --- a/www/ecrire/inc/genie.php +++ b/www/ecrire/inc/genie.php @@ -3,70 +3,96 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; - -// -------------------------- -// Gestion des taches de fond -// -------------------------- - -// Deux difficultes: -// - la plupart des hebergeurs ne fournissent pas le Cron d'Unix -// - les scripts usuels standard sont limites a 30 secondes - -// Solution: -// Toute connexion a SPIP s'acheve par un appel a la fonction cron() -// qui appelle la fonction surchargeable genie dans inc/ -// Sa definition standard ci-dessous prend dans une liste de taches -// la plus prioritaire, leurs dates etant donnees par leur fichier-verrou. -// Une fonction executant une tache doit retourner un nombre: -// - nul, si la tache n'a pas a etre effecutee -// - positif, si la tache a ete effectuee -// - negatif, si la tache doit etre poursuivie ou recommencee -// Elle recoit en argument la date de la derniere execution de la tache. - -// On peut appeler cette fonction avec d'autres taches (pour etendre Spip) -// specifiee par des fonctions respectant le protocole ci-dessus -// On peut modifier la frequence de chaque tache et leur ordre d'analyse -// en modifiant les variables ci-dessous. - -//---------- - -// Les taches sont dans un tableau ('nom de la tache' => periodicite) -// Cette fonction execute la tache la plus urgente -// (celle dont la date de derniere execution + la periodicite est minimale) -// La date de la derniere intervention est donnee par un fichier homonyme, -// de suffixe ".lock", modifie a chaque intervention et des le debut -// de celle-ci afin qu'un processus concurrent ne la demarre pas aussi. -// Les taches les plus longues sont tronconnees, ce qui impose d'antidater -// le fichier de verrouillage (avec la valeur absolue du code de retour). -// La fonction executant la tache est un homonyme de prefixe "genie_". -// Le fichier homonyme du repertoire "genie/" est automatiquement lu -// et il est suppose definir cette fonction. - -// http://doc.spip.org/@inc_genie_dist +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +/** + * Gestion des tâches de fond + * + * Deux difficultés : + * - la plupart des hebergeurs ne fournissent pas le Cron d'Unix + * - les scripts usuels standard sont limites à 30 secondes + * + * Solution + * -------- + * Toute connexion à SPIP s'achève par un appel (asynchrone si possible) + * à la fonction `cron()` qui appelle la fonction surchargeable `inc_genie_dist()` + * + * Sa définition standard ci-dessous prend dans une liste de tâches + * la plus prioritaire. + * + * Une fonction exécutant une tâche doit retourner un nombre : + * - nul, si la tache n'a pas à être effecutée + * - positif, si la tache a été effectuée + * - négatif, si la tache doit être poursuivie ou recommencée + * + * Elle recoit en argument la date de la dernière exécution de la tâche. + * + * On peut appeler cette fonction avec d'autres tâches (pour étendre SPIP) + * spécifiée par des fonctions respectant le protocole ci-dessus. + * + * On peut ajouter des tâches périodiques ou modifier la fréquence + * de chaque tâche et leur priorité en utilisant le pipeline + * `taches_generales_cron`. + * + * On peut également directement en déclarer avec la balise `genie` d'un paquet.xml + * de plugin, tel que `` + * + * @package SPIP\Core\Genie + **/ + + +/** + * Prévoit l'exécution de la tâche cron la plus urgente + * + * Les tâches sont dans un tableau `'nom de la tâche' => périodicité` + * + * Cette fonction exécute la tache la plus urgente, c'est à dire + * celle dont la date de dernière exécution + la périodicité est minimale. + * + * La date de la prochaîne exécution de chaque tâche est indiquée dans la + * table SQL `spip_jobs` + * + * La fonction exécutant la tâche est (généralement) un homonyme de préfixe "genie_". + * Le fichier homonyme du repertoire "genie/" est automatiquement lu + * et il est supposé définir cette fonction. + * + * @uses queue_add_job() Lorsqu'une tâche est à forcer + * @uses queue_schedule() + * @see taches_generales() Liste des tâches déclarées + * + * @param array $taches + * Tâches dont on force maintenant l'exécution le plus tôt possible. + * Sinon, prendra la tâche la plus prioritaire. + * @return + **/ function inc_genie_dist($taches = array()) { include_spip('inc/queue'); - if (_request('exec')=='job_queue') + if (_request('exec') == 'job_queue') { return false; + } $force_jobs = array(); // l'ancienne facon de lancer une tache cron immediatement // etait de la passer en parametre a ing_genie_dist // on reroute en ajoutant simplement le job a la queue, ASAP - foreach($taches as $function=>$period) - $force_jobs[] = queue_add_job($function, _T('tache_cron_asap', array('function'=>$function)), array(time()-abs($period)), "genie/"); - + foreach ($taches as $function => $period) { + $force_jobs[] = queue_add_job($function, _T('tache_cron_asap', array('function' => $function)), + array(time() - abs($period)), "genie/"); + } + // et on passe la main a la gestion de la queue ! // en forcant eventuellement les jobs ajoute a l'instant - return queue_schedule(count($force_jobs)?$force_jobs:null); + return queue_schedule(count($force_jobs) ? $force_jobs : null); } // @@ -77,74 +103,87 @@ function inc_genie_dist($taches = array()) { // les serveurs Http n'accordant en general pas plus de 30 secondes // a leur sous-processus // -// http://doc.spip.org/@taches_generales +// http://code.spip.net/@taches_generales function taches_generales($taches_generales = array()) { // verifier que toutes les taches cron sont planifiees // c'est une tache cron ! - $taches_generales['queue_watch'] = 3600*24; + $taches_generales['queue_watch'] = 3600 * 24; // MAJ des rubriques publiques (cas de la publication post-datee) // est fait au coup par coup a present // $taches_generales['rubriques'] = 3600; // Optimisation de la base - $taches_generales['optimiser'] = 3600*48; + $taches_generales['optimiser'] = 3600 * 48; // cache (chaque 10 minutes => 1/16eme du repertoire cache, // soit toutes les 2h40 sur le meme rep) $taches_generales['invalideur'] = 600; // nouveautes - if ($GLOBALS['meta']['adresse_neuf'] AND $GLOBALS['meta']['jours_neuf'] - AND ($GLOBALS['meta']['quoi_de_neuf'] == 'oui')) - $taches_generales['mail']= 3600 * 24 * $GLOBALS['meta']['jours_neuf']; + if (isset($GLOBALS['meta']['adresse_neuf']) and $GLOBALS['meta']['adresse_neuf'] + and $GLOBALS['meta']['jours_neuf'] + and ($GLOBALS['meta']['quoi_de_neuf'] == 'oui') + ) { + $taches_generales['mail'] = 3600 * 24 * $GLOBALS['meta']['jours_neuf']; + } // maintenance (ajax, verifications diverses) $taches_generales['maintenance'] = 3600 * 2; // verifier si une mise a jour de spip est disponible (2 fois par semaine suffit largement) - $taches_generales['mise_a_jour'] = 3*24*3600; + $taches_generales['mise_a_jour'] = 3 * 24 * 3600; - return pipeline('taches_generales_cron',$taches_generales); + return pipeline('taches_generales_cron', $taches_generales); } // Pas de fichier a part pour une fonction aussi petite: // - elle peut retirer les fichiers perimes // - elle fait appliquer le quota // En cas de quota sur le CACHE/, nettoyer les fichiers les plus vieux -// http://doc.spip.org/@genie_invalideur_dist +// http://code.spip.net/@genie_invalideur_dist function genie_invalideur_dist($t) { include_spip('inc/invalideur'); $encore = appliquer_quota_cache(); // si le cache est trop gonfle, redemander la main pour poursuivre - if ($encore) + if ($encore) { return (0 - $t); + } + return 1; } /** - * Une tache periodique pour surveiller les taches crons et les relancer si besoin - * quand ce cron s'execute, il n'est plus dans la queue, donc il se replanifie - * lui meme, avec last=time() + * Une tâche périodique pour surveiller les tâches crons et les relancer si besoin + * + * Quand ce cron s'execute, il n'est plus dans la queue, donc il se replanifie + * lui même, avec last=time() * avec une dose d'aleatoire pour ne pas planifier toutes les taches au meme moment * + * @uses taches_generales() + * @uses queue_genie_replan_job() + * * @return int */ -function genie_queue_watch_dist(){ +function genie_queue_watch_dist() { static $deja_la = false; - if ($deja_la) return; // re-entrance si l'insertion des jobs echoue (pas de table spip_jobs a l'upgrade par exemple) + if ($deja_la) { + return; + } // re-entrance si l'insertion des jobs echoue (pas de table spip_jobs a l'upgrade par exemple) $deja_la = true; $taches = taches_generales(); - $programmees = sql_allfetsel('fonction','spip_jobs',sql_in('fonction',array_keys($taches))); - $programmees = array_map('reset',$programmees); - foreach($taches as $tache=>$periode){ - if (!in_array($tache,$programmees)) - queue_genie_replan_job($tache,$periode,time()-round(rand(1,$periode)),0); + $programmees = sql_allfetsel('fonction', 'spip_jobs', sql_in('fonction', array_keys($taches))); + $programmees = array_map('reset', $programmees); + foreach ($taches as $tache => $periode) { + if (!in_array($tache, $programmees)) { + queue_genie_replan_job($tache, $periode, time() - round(rand(1, $periode)), 0); + } } $deja_la = false; + return 1; } @@ -165,24 +204,26 @@ function genie_queue_watch_dist(){ * priorite * @return void */ -function queue_genie_replan_job($function,$period,$last=0,$time=null, $priority=0){ +function queue_genie_replan_job($function, $period, $last = 0, $time = null, $priority = 0) { static $done = array(); - if (isset($done[$function])) return; + if (isset($done[$function])) { + return; + } $done[$function] = true; - if (is_null($time)){ - $time=time(); - if ($last) - $time = max($last+$period,$time); + if (is_null($time)) { + $time = time(); + if ($last) { + $time = max($last + $period, $time); + } + } + if (!$last) { + $last = $time - $period; } - if (!$last) - $last = $time-$period; - spip_log("replan_job $function $period $last $time $priority",'queue'); + spip_log("replan_job $function $period $last $time $priority", 'queue'); include_spip('inc/queue'); // on replanifie un job cron // uniquement si il n'y en a pas deja un avec le meme nom // independament de l'argument - queue_add_job($function, _T('tache_cron_secondes', array('function'=>$function, 'nb'=>$period)), array($last), "genie/", 'function_only', $time, $priority); + queue_add_job($function, _T('tache_cron_secondes', array('function' => $function, 'nb' => $period)), array($last), + "genie/", 'function_only', $time, $priority); } - - -?> diff --git a/www/ecrire/inc/headers.php b/www/ecrire/inc/headers.php index ca8a4f5d..8b18633b 100644 --- a/www/ecrire/inc/headers.php +++ b/www/ecrire/inc/headers.php @@ -3,136 +3,188 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ +/** + * Gestion des headers et redirections + * + * @package SPIP\Core\Headers + **/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -// envoyer le navigateur sur une nouvelle adresse -// en evitant les attaques par la redirection (souvent indique par 1 $_GET) -// http://doc.spip.org/@redirige_par_entete -function redirige_par_entete($url, $equiv='', $status = 302) { - if (!in_array($status,array(301,302))) +/** + * Envoyer le navigateur sur une nouvelle adresse + * + * Le tout en évitant les attaques par la redirection (souvent indique par un `$_GET`) + * + * @example + * ``` + * $redirect = parametre_url(urldecode(_request('redirect')),'id_article=' . $id_article); + * include_spip('inc/headers'); + * redirige_par_entete($redirect); + * ``` + * + * @param string $url URL de redirection + * @param string $equiv ? + * @param int $status Code de redirection (301 ou 302) + **/ +function redirige_par_entete($url, $equiv = '', $status = 302) { + if (!in_array($status, array(301, 302))) { $status = 302; + } $url = trim(strtr($url, "\n\r", " ")); - # en theorie on devrait faire ca tout le temps, mais quand la chaine - # commence par ? c'est imperatif, sinon l'url finale n'est pas la bonne - if ($url[0]=='?') - $url = url_de_base().$url; - if ($url[0]=='#') - $url = self('&').$url; - # si profondeur non nulle et url relative, il faut la passer en absolue - if ($GLOBALS['profondeur_url']>(_DIR_RESTREINT?1:2) - AND !preg_match(",^(\w+:)?//,",$url)){ + # si l'url de redirection est relative, on la passe en absolue + if (!preg_match(",^(\w+:)?//,", $url)) { include_spip("inc/filtres_mini"); $url = url_absolue($url); } - if ($x = _request('transformer_xml')) + if ($x = _request('transformer_xml')) { $url = parametre_url($url, 'transformer_xml', $x, '&'); + } - if (defined('_AJAX') AND _AJAX) + if (defined('_AJAX') and _AJAX) { $url = parametre_url($url, 'var_ajax_redir', 1, '&'); - + } + // ne pas laisser passer n'importe quoi dans l'url - $url = str_replace(array('<','"'),array('<','"'),$url); + $url = str_replace(array('<', '"'), array('<', '"'), $url); // interdire les url inline avec des pseudo-protocoles : if ( - (preg_match(",data:,i",$url) AND preg_match("/base64\s*,/i",$url)) - OR preg_match(",(javascript|mailto):,i",$url) - ) - $url ="./"; + (preg_match(",data:,i", $url) and preg_match("/base64\s*,/i", $url)) + or preg_match(",(javascript|mailto):,i", $url) + ) { + $url = "./"; + } // Il n'y a que sous Apache que setcookie puis redirection fonctionne - include_spip('inc/cookie'); - if ((!$equiv AND !spip_cookie_envoye()) OR ((strncmp("Apache", $_SERVER['SERVER_SOFTWARE'],6)==0) OR defined('_SERVER_APACHE'))) { + include_spip('inc/cookie'); + if ((!$equiv and !spip_cookie_envoye()) or ((strncmp("Apache", $_SERVER['SERVER_SOFTWARE'], + 6) == 0) or defined('_SERVER_APACHE')) + ) { @header("Location: " . $url); - $equiv=""; + $equiv = ""; } else { @header("Refresh: 0; url=" . $url); + if (isset($GLOBALS['meta']['charset'])) { + @header("Content-Type: text/html; charset=" . $GLOBALS['meta']['charset']); + } $equiv = ""; } include_spip('inc/lang'); - if ($status!=302) + if ($status != 302) { http_status($status); - echo '',"\n", - html_lang_attributes(),' + } + echo '', "\n", + html_lang_attributes(), ' ', - $equiv,' -HTTP '.$status.' + $equiv, ' +HTTP ' . $status . ' +' . ((isset($GLOBALS['meta']['charset'])) ? '' : '') . ' -

HTTP '.$status.'

+

HTTP ' . $status . '

', - _T('navigateur_pas_redirige'), - ''; + quote_amp($url), + '">', + _T('navigateur_pas_redirige'), + ''; spip_log("redirige $status: $url"); exit; } -// http://doc.spip.org/@redirige_formulaire -function redirige_formulaire($url, $equiv = '', $format='message') { +// http://code.spip.net/@redirige_formulaire +function redirige_formulaire($url, $equiv = '', $format = 'message') { if (!_AJAX - AND !headers_sent() - AND !_request('var_ajax')) { - redirige_par_entete(str_replace('&','&',$url), $equiv); - } - // si c'est une ancre, fixer simplement le window.location.hash - elseif($format=='ajaxform' AND preg_match(',^#[0-9a-z\-_]+$,i',$url)) { + and !headers_sent() + and !_request('var_ajax') + ) { + redirige_par_entete(str_replace('&', '&', $url), $equiv); + } // si c'est une ancre, fixer simplement le window.location.hash + elseif ($format == 'ajaxform' and preg_match(',^#[0-9a-z\-_]+$,i', $url)) { return array( - // on renvoie un lien masque qui sera traite par ajaxCallback.js - "anchor", - // et rien dans le message ok - ''); - } - else { + // on renvoie un lien masque qui sera traite par ajaxCallback.js + "anchor", + // et rien dans le message ok + '' + ); + } else { // ne pas laisser passer n'importe quoi dans l'url - $url = str_replace(array('<','"'),array('<','"'),$url); + $url = str_replace(array('<', '"'), array('<', '"'), $url); $url = strtr($url, "\n\r", " "); # en theorie on devrait faire ca tout le temps, mais quand la chaine # commence par ? c'est imperatif, sinon l'url finale n'est pas la bonne - if ($url[0]=='?') - $url = url_de_base().$url; - $url = str_replace('&','&',$url); + if ($url[0] == '?') { + $url = url_de_base() . $url; + } + $url = str_replace('&', '&', $url); spip_log("redirige formulaire ajax: $url"); include_spip('inc/filtres'); - if ($format=='ajaxform') + if ($format == 'ajaxform') { return array( - // on renvoie un lien masque qui sera traite par ajaxCallback.js - ''._T('navigateur_pas_redirige').'', - // et un message au cas ou - '
'._T('navigateur_pas_redirige').'' + // on renvoie un lien masque qui sera traite par ajaxCallback.js + '' . _T('navigateur_pas_redirige') . '', + // et un message au cas ou + '
' . _T('navigateur_pas_redirige') . '' ); - else // format message texte, tout en js inline + } else // format message texte, tout en js inline + { return - // ie poste les formulaires dans une iframe, il faut donc rediriger son parent - "" - . http_img_pack('searching.gif','') - . '
' - . ''._T('navigateur_pas_redirige').''; + // ie poste les formulaires dans une iframe, il faut donc rediriger son parent + "" + . http_img_pack('searching.gif', '') + . '
' + . '' . _T('navigateur_pas_redirige') . ''; + } } } -// http://doc.spip.org/@redirige_url_ecrire -function redirige_url_ecrire($script='', $args='', $equiv='') { +/** + * Effectue une redirection par header PHP vers un script de l’interface privée + * + * @uses redirige_par_entete() Qui tue le script PHP. + * @example + * ``` + * include_spip('inc/headers'); + * redirige_url_ecrire('rubriques','id_rubrique=' . $id_rubrique); + * ``` + * + * @param string $script + * Nom de la page privée (exec) + * @param string $args + * Arguments à transmettre. Exemple `etape=1&autre=oui` + * @param string $equiv + * @return void + **/ +function redirige_url_ecrire($script = '', $args = '', $equiv = '') { return redirige_par_entete(generer_url_ecrire($script, $args, true), $equiv); } -// http://doc.spip.org/@http_status +/** + * Renvoie au client le header HTTP avec le message correspondant au code indiqué. + * + * Ainsi `http_status(301)` enverra le message `301 Moved Permanently`. + * + * @link http://php.net/manual/fr/function.header.php Fonction header() de PHP utilisée ici + * + * @param int $status + * Code d'erreur + **/ function http_status($status) { - global $REDIRECT_STATUS, $flag_sapi_name; + static $status_string = array( 200 => '200 OK', 204 => '204 No Content', @@ -145,20 +197,26 @@ function http_status($status) { 503 => '503 Service Unavailable' ); - if ($REDIRECT_STATUS && $REDIRECT_STATUS == $status) return; + if (!empty($GLOBALS['REDIRECT_STATUS']) && $GLOBALS['REDIRECT_STATUS'] == $status) { + return; + } - $php_cgi = ($flag_sapi_name AND preg_match(",cgi,i", @php_sapi_name())); - if ($php_cgi) - header("Status: ".$status_string[$status]); - else - header("HTTP/1.0 ".$status_string[$status]); + $php_cgi = ($GLOBALS['flag_sapi_name'] and preg_match(",cgi,i", @php_sapi_name())); + if ($php_cgi) { + header("Status: " . $status_string[$status]); + } else { + header("HTTP/1.0 " . $status_string[$status]); + } } // Retourne ce qui va bien pour que le navigateur ne mette pas la page en cache -// http://doc.spip.org/@http_no_cache +// http://code.spip.net/@http_no_cache function http_no_cache() { - if (headers_sent()) - { spip_log("http_no_cache arrive trop tard"); return;} + if (headers_sent()) { + spip_log("http_no_cache arrive trop tard"); + + return; + } $charset = empty($GLOBALS['meta']['charset']) ? 'utf-8' : $GLOBALS['meta']['charset']; // selon http://developer.apple.com/internet/safari/faq.html#anchor5 @@ -169,9 +227,7 @@ function http_no_cache() { header("Content-Type: text/html; charset=$charset"); header("Expires: 0"); - header("Last-Modified: " .gmdate("D, d M Y H:i:s"). " GMT"); + header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); } - -?> diff --git a/www/ecrire/inc/icone_renommer.php b/www/ecrire/inc/icone_renommer.php index 97a873a2..df61bd17 100644 --- a/www/ecrire/inc/icone_renommer.php +++ b/www/ecrire/inc/icone_renommer.php @@ -3,39 +3,41 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/boutons'); include_spip('base/objets'); -function inc_icone_renommer_dist($fond,$fonction){ +function inc_icone_renommer_dist($fond, $fonction) { $size = 24; - if (preg_match("/(?:-([0-9]{1,3}))?([.](gif|png))?$/i",$fond,$match) - AND ((isset($match[0]) AND $match[0]) OR (isset($match[1]) AND $match[1]))) { - if (isset($match[1]) AND $match[1]) { + if (preg_match("/(?:-([0-9]{1,3}))?([.](gif|png))?$/i", $fond, $match) + and ((isset($match[0]) and $match[0]) or (isset($match[1]) and $match[1])) + ) { + if (isset($match[1]) and $match[1]) { $size = $match[1]; } - $type = substr($fond,0,-strlen($match[0])); - if (!isset($match[2]) OR !$match[2]) { + $type = substr($fond, 0, -strlen($match[0])); + if (!isset($match[2]) or !$match[2]) { $fond .= ".png"; } - } - else { + } else { $type = $fond; $fond .= ".png"; } $rtl = false; - if (preg_match(',[-_]rtl$,i',$type,$match)){ + if (preg_match(',[-_]rtl$,i', $type, $match)) { $rtl = true; - $type = substr($type,0,-strlen($match[0])); + $type = substr($type, 0, -strlen($match[0])); } // objet_type garde invariant tout ce qui ne commence par par id_, spip_ @@ -44,41 +46,42 @@ function inc_icone_renommer_dist($fond,$fonction){ $dir = "images/"; $f = "$type-$size.png"; - if ($icone = find_in_theme($dir.$f)){ + if ($icone = find_in_theme($dir . $f)) { $dir = dirname($icone); $fond = $icone; if ($rtl - AND $fr = "$type-rtl-$size.png" - AND file_exists($dir.'/'.$fr)) + and $fr = "$type-rtl-$size.png" + and file_exists($dir . '/' . $fr) + ) { $type = "$type-rtl"; + } $action = $fonction; - if ($action=="supprimer.gif"){ + if ($action == "supprimer.gif") { $action = "del"; - } - elseif ($action=="creer.gif"){ + } elseif ($action == "creer.gif") { $action = "new"; - } - elseif ($action=="edit.gif"){ + } elseif ($action == "edit.gif") { $action = "edit"; } - if (!in_array($action,array('del','new','edit'))) + if (!in_array($action, array('del', 'new', 'edit'))) { $action = ""; - if ($action){ + } + if ($action) { if ($fa = "$type-$action-$size.png" - AND file_exists($dir.'/'.$fa)){ - $fond = $dir .'/'. $fa; + and file_exists($dir . '/' . $fa) + ) { + $fond = $dir . '/' . $fa; $fonction = ""; - } - else { + } else { $fonction = "$action-$size.png"; } } + // c'est bon ! - return array($fond,$fonction); + return array($fond, $fonction); } - return array($fond,$fonction); + return array($fond, $fonction); } -?> diff --git a/www/ecrire/inc/iconifier.php b/www/ecrire/inc/iconifier.php index 618d2b7c..0fe4da64 100644 --- a/www/ecrire/inc/iconifier.php +++ b/www/ecrire/inc/iconifier.php @@ -3,23 +3,42 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion du formulaire iconifier pour ajouter des logos + * + * @package SPIP\Core\Logos + */ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/actions'); -// http://doc.spip.org/@inc_iconifier_dist -function inc_iconifier_dist($objet, $id, $script, $visible=false, $flag_modif=true) { +/** + * Retourne le formulaire de gestion de logo sur les objets. + * + * @param string $objet + * @param integer $id + * @param string $script + * @param bool $visible + * @param bool $flag_modif + * + * @return string|array + * - Contenu du squelette calculé + * - ou tableau d'information sur le squelette. + */ +function inc_iconifier_dist($objet, $id, $script, $visible = false, $flag_modif = true) { // compat avec anciens appels $objet = objet_type($objet); - - return recuperer_fond('prive/objets/editer/logo',array('objet'=>$objet,'id_objet'=>$id,'editable'=>$flag_modif)); -} -?> + return recuperer_fond('prive/objets/editer/logo', + array('objet' => $objet, 'id_objet' => $id, 'editable' => $flag_modif)); +} diff --git a/www/ecrire/inc/importer_csv.php b/www/ecrire/inc/importer_csv.php new file mode 100644 index 00000000..72b3911c --- /dev/null +++ b/www/ecrire/inc/importer_csv.php @@ -0,0 +1,115 @@ + $heading) { + if ($header_type[$heading] == "array") { + if (!isset($row[$heading])) { + $row[$heading] = array(); + } + if (isset($data[$key]) and strlen($data[$key])) { + $row[$heading][] = $data[$key]; + } + } else { + $row[$heading] = (isset($data[$key])) ? $data[$key] : ''; + } + } + $return[] = $row; + } else { + $return[] = $data; + } + } + } + + return $return; +} diff --git a/www/ecrire/inc/informer.php b/www/ecrire/inc/informer.php index 6521780f..edd52870 100644 --- a/www/ecrire/inc/informer.php +++ b/www/ecrire/inc/informer.php @@ -3,69 +3,74 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} # Les information d'une rubrique selectionnee dans le mini navigateur -// http://doc.spip.org/@inc_informer_dist -function inc_informer_dist($id, $col, $exclus, $rac, $type, $do='aff') -{ +// http://code.spip.net/@inc_informer_dist +function inc_informer_dist($id, $col, $exclus, $rac, $type, $do = 'aff') { include_spip('inc/texte'); + $titre = $descriptif = ''; if ($type == "rubrique") { - $row = sql_fetsel("titre, descriptif", "spip_rubriques", "id_rubrique = $id"); + $row = sql_fetsel("titre, descriptif", "spip_rubriques", "id_rubrique = " . intval($id)); if ($row) { $titre = typo($row["titre"]); $descriptif = propre($row["descriptif"]); } else { $titre = _T('info_racine_site'); } - } else - $titre = ''; + } $res = ''; - if ($type == "rubrique" AND $GLOBALS['spip_display'] != 1 AND isset($GLOBALS['meta']['image_process'])) - if ($GLOBALS['meta']['image_process'] != "non") { - $chercher_logo = charger_fonction('chercher_logo', 'inc'); - if ($res = $chercher_logo($id, 'id_rubrique', 'on')) { - list($fid, $dir, $nom, $format) = $res; - include_spip('inc/filtres_images_mini'); - $res = image_reduire("", 100, 48); - if ($res) - $res = "
$res
"; + if ($type == "rubrique" and $GLOBALS['spip_display'] != 1 and isset($GLOBALS['meta']['image_process'])) { + if ($GLOBALS['meta']['image_process'] != "non") { + $chercher_logo = charger_fonction('chercher_logo', 'inc'); + if ($res = $chercher_logo($id, 'id_rubrique', 'on')) { + list($fid, $dir, $nom, $format) = $res; + include_spip('inc/filtres_images_mini'); + $res = image_reduire("", 100, 48); + if ($res) { + $res = "
$res
"; + } + } } } - $rac = spip_htmlentities($rac); + $rac = spip_htmlentities($rac, ENT_QUOTES); + $do = spip_htmlentities($do, ENT_QUOTES); + $id = intval($id); # ce lien provoque la selection (directe) de la rubrique cliquee # et l'affichage de son titre dans le bandeau $titre = strtr(str_replace("'", "’", - str_replace('"', """, textebrut($titre))), - "\n\r", " "); + str_replace('"', """, textebrut($titre))), + "\n\r", " "); $js_func = $do . '_selection_titre'; + return "
" - . "" - . "" + . "" . "
" . "
" . (!$res ? '' : $res) - . "

".safehtml($titre)."

" - . (!$descriptif ? '' : "
".safehtml($descriptif)."
") - . "
" + . "

" . safehtml($titre) . "

" + . (!$descriptif ? '' : "
" . safehtml($descriptif) . "
") + . "
" . "" - . "
" - . "
"; + . "
" + . ""; } -?> diff --git a/www/ecrire/inc/install.php b/www/ecrire/inc/install.php index 9ff5e623..ffc24584 100644 --- a/www/ecrire/inc/install.php +++ b/www/ecrire/inc/install.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -13,10 +13,12 @@ /** * Gestion de l'installation de SPIP * - * @package SPIP\Installation -**/ + * @package SPIP\Core\Installation + **/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** @@ -27,23 +29,24 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * est chargé. * * @example + * ``` * install_fichier_connexion(_FILE_CONNECT_TMP, $contenu); - * + * ``` + * * @todo * Renommer cette fonction qui peut servir à d'autres utilisations ? - * + * * @param string $nom * Chemin du fichier à créer * @param string $texte * Code source du fichier (sans l'ouverture/fermeture PHP) * @return void -**/ -function install_fichier_connexion($nom, $texte) -{ - $texte = "<"."?php\n" - . "if (!defined(\"_ECRIRE_INC_VERSION\")) return;\n" - . $texte - . "?".">"; + **/ +function install_fichier_connexion($nom, $texte) { + $texte = "<" . "?php\n" + . "if (!defined(\"_ECRIRE_INC_VERSION\")) return;\n" + . $texte + . "?" . ">"; ecrire_fichier($nom, $texte); } @@ -59,65 +62,69 @@ function install_fichier_connexion($nom, $texte) * @internal * Attention etape_ldap4 suppose qu'il n'y aura qu'un seul appel de fonction * dans le fichier produit. - * - * @param string $adr Adresse de la base de données {@example 'localhost'} - * @param string $port Numéro de port - * @param string $login Login de connexion - * @param string $pass Mot de passe de connexion - * @param string $base Nom de la base de données - * @param string $type Moteur SQL {@example 'sqlite3', 'mysql'} - * @param string $pref Préfixe des tables {@example 'spip'} - * @param string $ldap ? + * + * @param string $adr Adresse de la base de données {@example 'localhost'} + * @param string $port Numéro de port + * @param string $login Login de connexion + * @param string $pass Mot de passe de connexion + * @param string $base Nom de la base de données + * @param string $type Moteur SQL {@example 'sqlite3', 'mysql'} + * @param string $pref Préfixe des tables {@example 'spip'} + * @param string $ldap Type d'authentification (cas si 'ldap') + * @param string $charset Charset de la connexion SQL * @return string * Texte du fichier de connexion - * -**/ -function install_connexion($adr, $port, $login, $pass, $base, $type, $pref, $ldap='') -{ - $adr = addcslashes($adr,"'\\"); - $port = addcslashes($port,"'\\"); - $login = addcslashes($login,"'\\"); - $pass = addcslashes($pass,"'\\"); - $base = addcslashes($base,"'\\"); - $type = addcslashes($type,"'\\"); - $pref = addcslashes($pref,"'\\"); - $ldap = addcslashes($ldap,"'\\"); - return "\$GLOBALS['spip_connect_version'] = 0.7;\n" + * + **/ +function install_connexion($adr, $port, $login, $pass, $base, $type, $pref, $ldap = '', $charset = '') { + $adr = addcslashes($adr, "'\\"); + $port = addcslashes($port, "'\\"); + $login = addcslashes($login, "'\\"); + $pass = addcslashes($pass, "'\\"); + $base = addcslashes($base, "'\\"); + $type = addcslashes($type, "'\\"); + $pref = addcslashes($pref, "'\\"); + $ldap = addcslashes($ldap, "'\\"); + $charset = addcslashes($charset, "'\\"); + + return "\$GLOBALS['spip_connect_version'] = 0.8;\n" . "spip_connect_db(" . "'$adr','$port','$login','$pass','$base'" - . ",'$type', '$pref','$ldap');\n"; + . ",'$type', '$pref','$ldap','$charset');\n"; } /** * Analyse un fichier de connexion à une base de données - * - * Le fichier contient normalement le resultat de la fonction install_connexion(). - * L'analyse tient également compte des syntaxes des versions precedentes. - * - * @param $string $file + * + * Le fichier contient normalement le résultat de la fonction install_connexion(). + * L'analyse tient également compte des syntaxes des versions précédentes. + * + * @param string $file * Chemin du fichier de connexion à analyser * @return array * Tableau des informations sur la connexion -**/ -function analyse_fichier_connection($file) -{ + **/ +function analyse_fichier_connection($file) { $s = @join('', file($file)); if (preg_match("#mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)#", $s, $regs)) { array_shift($regs); + return $regs; } else { $ar = '\s*\'([^\']*)\''; $r = '\s*,' . $ar; - $r = "#spip_connect_db[(]$ar$r$r$r$r(?:$r(?:$r(?:$r)?)?)?#"; + $r = "#spip_connect_db[(]$ar$r$r$r$r(?:$r(?:$r(?:$r(?:$r)?)?)?)?#"; if (preg_match($r, $s, $regs)) { - $regs[2] = $regs[1] . (!$regs[2] ? '' : ":$port_db;"); + $regs[2] = $regs[1] . (!$regs[2] ? '' : ":" . $regs[2] . ";"); array_shift($regs); array_shift($regs); + return $regs; } } spip_log("$file n'est pas un fichier de connexion"); + return array(); } @@ -125,80 +132,79 @@ function analyse_fichier_connection($file) * Liste les connecteurs aux bases SQL disponibles * * Dans le code SPIP ces connecteurs sont souvent appelés $connect ou $serveur - * + * * @example * $bases = bases_referencees(_FILE_CONNECT_TMP); - * - * @param $string $exclu + * + * @param string $exclu * Exclure un connecteur particulier (nom du fichier) * @return array * Liste des noms de connecteurs -**/ -function bases_referencees($exclu='') -{ + **/ +function bases_referencees($exclu = '') { $tables = array(); - foreach(preg_files(_DIR_CONNECT, '.php$') as $f) { - if ($f != $exclu AND analyse_fichier_connection($f)) - $tables[]= basename($f, '.php'); + foreach (preg_files(_DIR_CONNECT, '.php$') as $f) { + if ($f != $exclu and analyse_fichier_connection($f)) { + $tables[] = basename($f, '.php'); + } } + return $tables; } -function install_mode_appel($server_db, $tout=true) -{ +function install_mode_appel($server_db, $tout = true) { return ($server_db != 'mysql') ? '' - : (($tout ? test_rappel_nom_base_mysql($server_db) : '') - . test_sql_mode_mysql($server_db) ); + : (($tout ? test_rappel_nom_base_mysql($server_db) : '') + . test_sql_mode_mysql($server_db)); } // // Verifier que l'hebergement est compatible SPIP ... ou l'inverse :-) // (sert a l'etape 1 de l'installation) -// http://doc.spip.org/@tester_compatibilite_hebergement +// http://code.spip.net/@tester_compatibilite_hebergement function tester_compatibilite_hebergement() { $err = array(); $p = phpversion(); - if (preg_match(',^([0-9]+)\.([0-9]+)\.([0-9]+),', $p, $regs)) { - $php = array($regs[1], $regs[2], $regs[3]); - $m = '5.1.0'; - $min = explode('.', $m); - if ($php[0]<$min[0] - OR ($php[0]==$min[0] AND $php[1]<$min[1]) - OR ($php[0]==$min[0] AND $php[1]==$min[1] AND $php[2]<$min[2])) - $err[] = _T('install_php_version', array('version' => $p, 'minimum' => $m)); + if (version_compare($p, _PHP_MIN, '<')) { + $err[] = _T('install_php_version', array('version' => $p, 'minimum' => _PHP_MIN)); } // Si on n'a pas la bonne version de PHP, c'est la fin - if ($err) - die("
" - . "

"._T('avis_attention').'

'._T('install_echec_annonce')."

    " - . "
  • {$err[0]}
  • \n
"); + if ($err) { + die("
" + . "

" . _T('avis_attention') . '

' . _T('install_echec_annonce') . "

    " + . "
  • {$err[0]}
  • \n
"); + } // Il faut une base de donnees tout de meme ... $serveurs = install_select_serveur(); - if (!$serveurs) + if (!$serveurs) { $err[] = _T('install_extension_php_obligatoire') - . " MYSQL" - . "| PostgreSQL" - . "| SQLite"; + . " MYSQL" + . "| PostgreSQL" + . "| SQLite"; + } // et il faut preg - if (!function_exists('preg_match_all')) + if (!function_exists('preg_match_all')) { $err[] = _T('install_extension_php_obligatoire') - . " PCRE"; + . " PCRE"; + } // et surtout pas ce mbstring.overload - if ($a = @ini_get('mbstring.func_overload')) + if ($a = @ini_get('mbstring.func_overload')) { $err[] = _T('install_extension_mbstring') - . "mbstring.func_overload=$a - mb_string.
"; + . "mbstring.func_overload=$a - mb_string.
"; + } if ($err) { - echo "
" - ."

"._T('avis_attention').'

'._T('install_echec_annonce')."

    "; - foreach($err as $e) - echo "
  • $e
  • \n"; + echo "
    " + . "

    " . _T('avis_attention') . '

    ' . _T('install_echec_annonce') . "

      "; + foreach ($err as $e) { + echo "
    • $e
    • \n"; + } # a priori ici on pourrait die(), mais il faut laisser la possibilite # de forcer malgre tout (pour tester, ou si bug de detection) @@ -207,55 +213,57 @@ function tester_compatibilite_hebergement() { } -// Une fonction pour faciliter la recherche du login (superflu ?) -// http://doc.spip.org/@login_hebergeur +/** + * Faciliter la recherche du login d'installation en fonction de certains hébergeurs connus + * + * @note superflu ?? + */ function login_hebergeur() { - global $HTTP_X_HOST, $REQUEST_URI, $SERVER_NAME, $HTTP_HOST; - $base_hebergeur = 'localhost'; # par defaut - // Lycos (ex-Multimachin) - if ($HTTP_X_HOST == 'membres.lycos.fr') { - preg_match(',^/([^/]*),', $REQUEST_URI, $regs); - $login_hebergeur = $regs[1]; - } - // Altern - else if (preg_match(',altern\.com$,', $SERVER_NAME)) { - preg_match(',([^.]*\.[^.]*)$,', $HTTP_HOST, $regs); - $login_hebergeur = preg_replace('[^\w\d]', '_', $regs[1]); - } // Free - else if (preg_match(',(.*)\.free\.fr$,', $SERVER_NAME, $regs)) { + if (preg_match(',(.*)\.free\.fr$,', $_SERVER['SERVER_NAME'], $regs)) { $base_hebergeur = 'sql.free.fr'; $login_hebergeur = $regs[1]; - } else $login_hebergeur = ''; + } else { + $login_hebergeur = ''; + } return array($base_hebergeur, $login_hebergeur); } -// http://doc.spip.org/@info_etape -function info_etape($titre, $complement = ''){ - return "

      ".$titre."

      \n" . - ($complement ? "".$complement."\n":''); +// http://code.spip.net/@info_etape +function info_etape($titre, $complement = '') { + return "

      " . $titre . "

      \n" . + ($complement ? "" . $complement . "\n" : ''); } -// http://doc.spip.org/@bouton_suivant +/** + * Retourne le code HTML d'un bouton `suivant>>` pour les phases d'installation + * + * @param string $code Texte du bouton + * @return string Code HTML du bouton + **/ function bouton_suivant($code = '') { - if($code=='') $code = _T('bouton_suivant'); + if ($code == '') { + $code = _T('bouton_suivant'); + } static $suivant = 0; - $id = 'suivant'.(($suivant>0)?strval($suivant):''); - $suivant +=1; - return "\n

      >\" />

      \n"; + $id = 'suivant' . (($suivant > 0) ? strval($suivant) : ''); + $suivant += 1; + + return "\n

      >\" />

      \n"; } -// http://doc.spip.org/@info_progression_etape -function info_progression_etape($en_cours,$phase,$dir, $erreur = false){ +// http://code.spip.net/@info_progression_etape +function info_progression_etape($en_cours, $phase, $dir, $erreur = false) { //$en_cours = _request('etape')?_request('etape'):""; - $liste = find_all_in_path($dir,$phase.'(([0-9])+|fin)[.]php$'); - $debut = 1; $etat = "ok"; + $liste = find_all_in_path($dir, $phase . '(([0-9])+|fin)[.]php$'); + $debut = 1; + $etat = "ok"; $last = count($liste); // $texte_etat = array('ok'=>'OK','encours'=>_T('en_cours'),'todo'=>_T('todo')); @@ -274,260 +282,279 @@ function info_progression_etape($en_cours,$phase,$dir, $erreur = false){ $aff_etapes = "
        "; - foreach($liste as $etape=>$fichier){ + foreach ($liste as $etape => $fichier) { if ($debut < $last) { - if ($debut == $en_cours && $erreur) $class = "on erreur"; - else if ($debut == $en_cours) $class = "on"; - else if ($debut > $en_cours) $class = "prochains"; - else $class = "valides"; + if ($debut == $en_cours && $erreur) { + $class = "on erreur"; + } else { + if ($debut == $en_cours) { + $class = "on"; + } else { + if ($debut > $en_cours) { + $class = "prochains"; + } else { + $class = "valides"; + } + } + } $aff_etapes .= "
      • "; - $aff_etapes .= ($debut == $en_cours)?"":''; - $aff_etapes .= ""._T('etape')." $debut : "; + $aff_etapes .= ($debut == $en_cours) ? "" : ''; + $aff_etapes .= "" . _T('etape') . " $debut : "; $aff_etapes .= $intitule_etat["$phase"][$debut]; - $aff_etapes .= ($debut == $en_cours)?"":''; + $aff_etapes .= ($debut == $en_cours) ? "" : ''; $aff_etapes .= "
      • "; } $debut++; } $aff_etapes .= "
      "; $aff_etapes .= "
      \n"; + return $aff_etapes; } -// http://doc.spip.org/@fieldset -function fieldset($legend, $champs = array(), $apres='', $avant='') { +// http://code.spip.net/@fieldset +function fieldset($legend, $champs = array(), $apres = '', $avant = '') { return "
      \n" . - $avant . - ($legend ? "".$legend."\n" : '') . - fieldset_champs($champs) . - $apres . - "
      \n"; + $avant . + ($legend ? "" . $legend . "\n" : '') . + fieldset_champs($champs) . + $apres . + "\n"; } -function fieldset_champs($champs = array()) - { +function fieldset_champs($champs = array()) { $fieldset = ''; foreach ($champs as $nom => $contenu) { $type = isset($contenu['hidden']) ? 'hidden' : (preg_match(',^pass,', $nom) ? 'password' : 'text'); $class = isset($contenu['hidden']) ? '' : "class='formo' size='40' "; - if(isset($contenu['alternatives'])) { - $fieldset .= $contenu['label'] ."\n"; - foreach($contenu['alternatives'] as $valeur => $label) { - $fieldset .= "\n"; - $fieldset .= "\n"; + if (isset($contenu['alternatives'])) { + $fieldset .= $contenu['label'] . "\n"; + foreach ($contenu['alternatives'] as $valeur => $label) { + $fieldset .= "\n"; + $fieldset .= "\n"; } $fieldset .= "
      \n"; - } - else { - $fieldset .= "\n"; - $fieldset .= "\n"; + } else { + $fieldset .= "\n"; + $fieldset .= "\n"; } } + return $fieldset; } -function install_select_serveur() -{ +function install_select_serveur() { $options = array(); $dir = _DIR_RESTREINT . 'req/'; - $d = @opendir($dir); - if (!$d) return array(); - while ($f = readdir($d)) { + $d = opendir($dir); + if (!$d) { + return array(); + } + while (($f = readdir($d)) !== false) { if ((preg_match('/^(.*)[.]php$/', $f, $s)) - AND is_readable($f = $dir . $f)) { + and is_readable($f = $dir . $f) + ) { require_once($f); $s = $s[1]; $v = 'spip_versions_' . $s; - if (function_exists($v) AND $v()) { - $titre = _T("install_select_type_$s"); - // proposer sqlite3 par defaut si dispo - $selected = ($s=='sqlite3'?" selected='selected'":""); - $options[$s] = ""; - } else spip_log("$s: portage indisponible"); + if (function_exists($v) and $v()) { + $titre = _T("install_select_type_$s"); + // proposer mysql par defaut si dispo + $checked = ($s == 'mysql' ? " checked='checked'" : ""); + $options[$s] = "
    • " + . "
    • "; + } else { + spip_log("$s: portage indisponible"); + } } } sort($options); + return $options; } -// http://doc.spip.org/@install_connexion_form -function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape, $jquery=true) -{ +// http://code.spip.net/@install_connexion_form +function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape, $jquery = true) { $server_db = (is_string($predef[0])) ? $predef[0] : ''; return generer_form_ecrire('install', ( - "\n" - . $hidden - . (_request('echec')? - ("

      "._T('avis_connexion_echec_1'). - "

      "._T('avis_connexion_echec_2')."

      "._T('avis_connexion_echec_3')."

      ") - :"") - - . ($jquery?http_script('', 'jquery.js'):'') - . http_script(' - $(document).ready(function() { + "\n" + . $hidden + . (_request('echec') ? + ("

      " . _T('avis_connexion_echec_1') . + "

      " . _T('avis_connexion_echec_2') . "

      " . _T('avis_connexion_echec_3') . "

      ") + : "") + + . ($jquery ? http_script('', 'jquery.js') : '') + . http_script(' + jQuery(function($) { $("input[type=hidden][name=server_db]").each(function(){ if ($(this).attr("value").match("sqlite*")){ $("#install_adresse_base_hebergeur,#install_login_base_hebergeur,#install_pass_base_hebergeur").hide(); } }); - if ($("#sql_serveur_db").length) { - if ($("#sql_serveur_db").attr("value").match("sqlite*")) + if ($("input[name=server_db][checked]").attr("value").match("sqlite*")) + $("#install_adresse_base_hebergeur,#install_login_base_hebergeur,#install_pass_base_hebergeur").hide(); + else + $("#install_adresse_base_hebergeur,#install_login_base_hebergeur,#install_pass_base_hebergeur").show(); + $("input[name=server_db]").each(function(){ + $(this).on("change",function(){ + if ($(this).prop("checked") && $(this).attr("value").match("sqlite*")) { $("#install_adresse_base_hebergeur,#install_login_base_hebergeur,#install_pass_base_hebergeur").hide(); - else - $("#install_adresse_base_hebergeur,#install_login_base_hebergeur,#install_pass_base_hebergeur").show(); - $("#sql_serveur_db").change(function(){ - if ($(this).find("option:selected").attr("value").match("sqlite*")) - $("#install_adresse_base_hebergeur,#install_login_base_hebergeur,#install_pass_base_hebergeur").hide(); - else + } + if ($(this).prop("checked") && !$(this).attr("value").match("sqlite*")) { $("#install_adresse_base_hebergeur,#install_login_base_hebergeur,#install_pass_base_hebergeur").show(); + } }); - } + }); });') - . ($server_db - ? '' + . ($server_db + ? '' . (($predef[0]) - ?('

      '._T('install_serveur_hebergeur').'

      ') - :'') - : ('
      ' - ._T('install_select_type_db') - . "" - .'' - . "\n
      ") - ) - . '
      ' - . '

      '. _T('texte_connexion_mysql').'

      ' - . ($predef[1] - ? '

      '._T('install_adresse_base_hebergeur').'

      ' - : fieldset(_T('entree_base_donnee_1'), - array( - 'adresse_db' => array( - 'label' => $db[1], - 'valeur' => $db[0] - ), + ? ('

      ' . _T('install_serveur_hebergeur') . '

      ') + : '') + : ('
      ' + . _T('install_select_type_db') + . "" + . '

      ' + . _T('install_types_db_connus') + // Passer l'avertissement SQLIte en commentaire, on pourra facilement le supprimer par la suite sans changer les traductions. + // . "
      (". _T('install_types_db_connus_avertissement') .')' + . '

      ' + . "\n
      \n
        \n" + . join("\n", install_select_serveur()) + . "\n
      \n
      ") ) - ) - ) - . '
      ' - - . '
      ' - . ($predef[2] - ? '

      '._T('install_login_base_hebergeur').'

      ' - : fieldset(_T('entree_login_connexion_1'), - array( - 'login_db' => array( - 'label' => $login[1], - 'valeur' => $login[0] - ), + . '
      ' + . '

      ' . _T('texte_connexion_mysql') . '

      ' + . ($predef[1] + ? '

      ' . _T('install_adresse_base_hebergeur') . '

      ' + : fieldset(_T('entree_base_donnee_1'), + array( + 'adresse_db' => array( + 'label' => $db[1], + 'valeur' => $db[0] + ), + ) + ) ) - ) - ) - . '
      ' - - . '
      ' - . ($predef[3] - ? '

      '._T('install_pass_base_hebergeur').'

      ' - : fieldset(_T('entree_mot_passe_1'), - array( - 'pass_db' => array( - 'label' => $pass[1], - 'valeur' => $pass[0] - ), + . '
      ' + + . '
      ' + . ($predef[2] + ? '

      ' . _T('install_login_base_hebergeur') . '

      ' + : fieldset(_T('entree_login_connexion_1'), + array( + 'login_db' => array( + 'label' => $login[1], + 'valeur' => $login[0] + ), + ) + ) ) - ) - ) - . '
      ' + . '
      ' + + . '
      ' + . ($predef[3] + ? '

      ' . _T('install_pass_base_hebergeur') . '

      ' + : fieldset(_T('entree_mot_passe_1'), + array( + 'pass_db' => array( + 'label' => $pass[1], + 'valeur' => $pass[0] + ), + ) + ) + ) + . '
      ' - . bouton_suivant())); + . bouton_suivant())); } // 4 valeurs qu'on reconduit d'un script a l'autre // sauf s'ils sont predefinis. -// http://doc.spip.org/@predef_ou_cache -function predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db) -{ +// http://code.spip.net/@predef_ou_cache +function predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db) { return ((defined('_INSTALL_HOST_DB')) ? '' - : "\n" + : "\n" ) . ((defined('_INSTALL_USER_DB')) ? '' - : "\n" + : "\n" ) . ((defined('_INSTALL_PASS_DB')) ? '' - : "\n" + : "\n" ) . ((defined('_INSTALL_SERVER_DB')) ? '' - : "\n" - ); + : "\n" + ); } // presentation des bases existantes -// http://doc.spip.org/@install_etape_liste_bases -function install_etape_liste_bases($server_db, $login_db, $disabled=array()) -{ +// http://code.spip.net/@install_etape_liste_bases +function install_etape_liste_bases($server_db, $login_db, $disabled = array()) { $bases = $checked = array(); $noms = sql_listdbs($server_db); - if (!$noms) return ''; + if (!$noms) { + return ''; + } - foreach ($noms as $nom){ + foreach ($noms as $nom) { $id = spip_htmlspecialchars($nom); $dis = in_array($nom, $disabled) ? " disabled='disabled'" : ''; $base = " name=\"choix_db\" value=\"" - . $nom - . '"' - . $dis - . " type='radio' id='$id'"; + . $nom + . '"' + . $dis + . " type='radio' id='$id'"; $label = ""; + . ($dis ? "$nom" : $nom) + . ""; - if (!$checked AND !$dis AND - (($nom == $login_db) OR - ($GLOBALS['table_prefix'] == $nom))) { + if (!$checked and !$dis and + (($nom == $login_db) or + ($GLOBALS['table_prefix'] == $nom)) + ) { $checked = "\n$label"; } else { - $bases[]= "\n$label"; + $bases[] = "\n$label"; } } - if (!$bases && !$checked) return false; + if (!$bases && !$checked) { + return false; + } - if ($checked) {array_unshift($bases, $checked); $checked = true;} + if ($checked) { + array_unshift($bases, $checked); + $checked = true; + } return array($checked, $bases); } -function install_propager($hidden) -{ +function install_propager($hidden) { $res = ''; - foreach($hidden as $k) { + foreach ($hidden as $k) { $v = spip_htmlentities(_request($k)); $res .= ""; } + return $res; } -?> diff --git a/www/ecrire/inc/invalideur.php b/www/ecrire/inc/invalideur.php index 80536ba3..fb9d0f58 100644 --- a/www/ecrire/inc/invalideur.php +++ b/www/ecrire/inc/invalideur.php @@ -3,98 +3,166 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ +/** + * Gestion du cache et des invalidations de cache + * + * @package SPIP\Core\Cache + **/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('base/serial'); -# estime la taille moyenne d'un fichier cache, pour ne pas les regarder (10ko) -define('_TAILLE_MOYENNE_FICHIER_CACHE', 1024 * 10); -# si un fichier n'a pas servi (fileatime) depuis plus d'une heure, on se sent -# en droit de l'eliminer -define('_AGE_CACHE_ATIME', 3600); +/** Estime la taille moyenne d'un fichier cache, pour ne pas les regarder (10ko) */ +if (!defined('_TAILLE_MOYENNE_FICHIER_CACHE')) { + define('_TAILLE_MOYENNE_FICHIER_CACHE', 1024 * 10); +} +/** + * Si un fichier n'a pas été servi (fileatime) depuis plus d'une heure, on se sent + * en droit de l'éliminer + */ +if (!defined('_AGE_CACHE_ATIME')) { + define('_AGE_CACHE_ATIME', 3600); +} -// Donne le nombre de fichiers dans un repertoire (plat, pour aller vite) -// false si erreur -// http://doc.spip.org/@nombre_de_fichiers_repertoire -function nombre_de_fichiers_repertoire($dir,$nb_estim_taille = 20) { +/** + * Calcul le nombre de fichiers à la racine d'un répertoire ainsi qu'une + * approximation de la taille du répertoire + * + * On ne calcule que la racine pour pour aller vite. + * + * @param string $dir Chemin du répertoire + * @param string $nb_estim_taille Nombre de fichiers maximum pour estimer la taille + * @return bool|array + * + * - false si le répertoire ne peut pas être ouvert + * - array(nombre de fichiers, approximation de la taille en octet) sinon + **/ +function nombre_de_fichiers_repertoire($dir, $nb_estim_taille = 20) { $taille = 0; // mesurer la taille de N fichiers au hasard dans le repertoire $nb = $nb_estim_taille; - if (!$h = @opendir($dir)) return false; + if (!$h = opendir($dir)) { + return false; + } $total = 0; - while (($fichier = @readdir($h)) !== false) - if ($fichier[0]!='.' AND !is_dir("$dir/$fichier")){ + while (($fichier = @readdir($h)) !== false) { + if ($fichier[0] != '.' and !is_dir("$dir/$fichier")) { $total++; - if ($nb AND rand(1,10)==1){ + if ($nb and rand(1, 10) == 1) { $taille += filesize("$dir/$fichier"); $nb--; } } + } closedir($h); - return array($total,$taille?$taille/($nb_estim_taille-$nb):_TAILLE_MOYENNE_FICHIER_CACHE); + + return array($total, $taille ? $taille / ($nb_estim_taille - $nb) : _TAILLE_MOYENNE_FICHIER_CACHE); } -// Indique la taille du repertoire cache ; pour de gros volumes, -// impossible d'ouvrir chaque fichier, on y va donc a l'estime -// http://doc.spip.org/@taille_du_cache + +/** + * Évalue approximativement la taille du cache + * + * Pour de gros volumes, impossible d'ouvrir chaque fichier, + * on y va donc à l'estime ! + * + * @return int Taille approximative en octets + **/ function taille_du_cache() { - $total = 0; - $taille = 0; - for ($i=0;$i<16;$i++) { - $l = dechex($i); - $dir = sous_repertoire(_DIR_CACHE, $l); - list($n,$s) = nombre_de_fichiers_repertoire($dir); - $total += $n; - $taille += $s; + # check dirs until we reach > 500 files + $t = 0; + $n = 0; + $time = isset($GLOBALS['meta']['cache_mark']) ? $GLOBALS['meta']['cache_mark'] : 0; + for ($i=0; $i < 256; $i++) { + $dir = _DIR_CACHE.sprintf('%02s', dechex($i)); + if (@is_dir($dir) and is_readable($dir) and $d = opendir($dir)) { + while (($f = readdir($d)) !== false) { + if (preg_match(',^[[0-9a-f]+\.cache$,S', $f) and $a = stat("$dir/$f")) { + $n++; + if ($a['mtime'] >= $time) { + if ($a['blocks'] > 0) { + $t += 512*$a['blocks']; + } else { + $t += $a['size']; + } + } + } + } + } + if ($n > 500) { + return intval(256*$t/(1+$i)); + } } - return $total * $taille / 16; + return $t; } -// Invalider les caches lies a telle condition -// les invalideurs sont de la forme 'objet/id_objet' -// la condition est generalement "id='objet/id_objet'" -// ici on se contente de noter la date de mise a jour dans les metas -// http://doc.spip.org/@suivre_invalideur -function suivre_invalideur($cond, $modif=true) { - if (!$modif) + +/** + * Invalider les caches liés à telle condition + * + * Les invalideurs sont de la forme 'objet/id_objet'. + * La condition est géneralement "id='objet/id_objet'". + * + * Ici on se contente de noter la date de mise à jour dans les metas, + * pour le type d'objet en question (non utilisé cependant) et pour + * tout le site (sur la meta `derniere_modif`) + * + * @global derniere_modif_invalide + * Par défaut à `true`, la meta `derniere_modif` est systématiquement + * calculée dès qu'un invalideur se présente. Cette globale peut + * être mise à `false` (aucun changement sur `derniere_modif`) ou + * sur une liste de type d'objets (changements uniquement lorsqu'une + * modification d'un des objets se présente). + * + * @param string $cond + * Condition d'invalidation + * @param bool $modif + * Inutilisé + **/ +function suivre_invalideur($cond, $modif = true) { + if (!$modif) { return; + } // determiner l'objet modifie : forum, article, etc - if (preg_match(',["\']([a-z_]+)[/"\'],', $cond, $r)) + if (preg_match(',["\']([a-z_]+)[/"\'],', $cond, $r)) { $objet = objet_type($r[1]); + } // stocker la date_modif_$objet (ne sert a rien pour le moment) - if (isset($objet)) - ecrire_meta('derniere_modif_'.$objet, time()); + if (isset($objet)) { + ecrire_meta('derniere_modif_' . $objet, time()); + } // si $derniere_modif_invalide est un array('article', 'rubrique') // n'affecter la meta que si un de ces objets est modifie if (is_array($GLOBALS['derniere_modif_invalide'])) { - if (in_array($objet, $GLOBALS['derniere_modif_invalide'])) + if (in_array($objet, $GLOBALS['derniere_modif_invalide'])) { ecrire_meta('derniere_modif', time()); - } - // sinon, cas standard, toujours affecter la meta - else + } + } // sinon, cas standard, toujours affecter la meta + else { ecrire_meta('derniere_modif', time()); - + } } - /** * Purge un répertoire de ses fichiers * * Utilisée entre autres pour vider le cache depuis l'espace privé * * @uses supprimer_fichier() - * + * * @param string $dir * Chemin du répertoire à purger * @param array $options @@ -107,36 +175,47 @@ function suivre_invalideur($cond, $modif=true) { * - limit : nombre maximum de suppressions * @return int * Nombre de fichiers supprimés -**/ -function purger_repertoire($dir, $options=array()) { - $handle = @opendir($dir); - if (!$handle) return; + **/ +function purger_repertoire($dir, $options = array()) { + if (!is_dir($dir) or !is_readable($dir)) { + return; + } + $handle = opendir($dir); + if (!$handle) { + return; + } $total = 0; while (($fichier = @readdir($handle)) !== false) { // Eviter ".", "..", ".htaccess", ".svn" etc. - if ($fichier[0] == '.') continue; + if ($fichier[0] == '.') { + continue; + } $chemin = "$dir/$fichier"; if (is_file($chemin)) { - if ( (!isset($options['atime']) OR (@fileatime($chemin) < $options['atime'])) - AND (!isset($options['mtime']) OR (@filemtime($chemin) < $options['mtime'])) - ) { + if ((!isset($options['atime']) or (@fileatime($chemin) < $options['atime'])) + and (!isset($options['mtime']) or (@filemtime($chemin) < $options['mtime'])) + ) { supprimer_fichier($chemin); - $total ++; + $total++; + } + } else { + if (is_dir($chemin)) { + $opts = $options; + if (isset($options['limit'])) { + $opts['limit'] = $options['limit'] - $total; + } + $total += purger_repertoire($chemin, $opts); + if (isset($options['subdir']) && $options['subdir']) { + spip_unlink($chemin); + } } - } - else if (is_dir($chemin)){ - $opts = $options; - if (isset($otpions['limit'])) - $otps['limit'] = $otpions['limit'] - $total; - $total += purger_repertoire($chemin, $opts); - if (isset($options['subdir']) && $options['subdir']) - spip_unlink($chemin); } - if (isset($options['limit']) AND $total>=$options['limit']) + if (isset($options['limit']) and $total >= $options['limit']) { break; + } } closedir($handle); @@ -150,48 +229,52 @@ function purger_repertoire($dir, $options=array()) { // et on le ratiboise en supprimant les fichiers qui n'ont pas // ete sollicites dans l'heure qui vient de s'ecouler // -// http://doc.spip.org/@appliquer_quota_cache +// http://code.spip.net/@appliquer_quota_cache function appliquer_quota_cache() { - global $quota_cache; + $encore = false; - $tour_quota_cache = intval(1+$GLOBALS['meta']['tour_quota_cache'])%16; + $tour_quota_cache = intval(1 + $GLOBALS['meta']['tour_quota_cache']) % 16; ecrire_meta('tour_quota_cache', $tour_quota_cache); $l = dechex($tour_quota_cache); $dir = sous_repertoire(_DIR_CACHE, $l); - list($nombre,$taille) = nombre_de_fichiers_repertoire($dir); + list($nombre, $taille) = nombre_de_fichiers_repertoire($dir); $total_cache = $taille * $nombre; spip_log("Taille du CACHE estimee ($l): " - .(intval(16*$total_cache/(1024*1024/10))/10)." Mo","invalideur"); + . (intval(16 * $total_cache / (1024 * 1024 / 10)) / 10) . ' Mo', 'invalideur'); // Nombre max de fichiers a supprimer - if ($quota_cache > 0 - AND $taille > 0) { - $trop = $total_cache - ($quota_cache/16)*1024*1024; + if ($GLOBALS['quota_cache'] > 0 + and $taille > 0 + ) { + $trop = $total_cache - ($GLOBALS['quota_cache'] / 16) * 1024 * 1024; $trop = 3 * intval($trop / $taille); if ($trop > 0) { - $n = purger_repertoire($dir, + $n = purger_repertoire( + $dir, array( 'atime' => time() - _AGE_CACHE_ATIME, 'limit' => $trop, 'subdir' => true // supprimer les vieux sous repertoire de session (avant [15851]) ) ); - spip_log("$dir : $n/$trop caches supprimes [taille moyenne $taille]","invalideur"); - $total_cache = intval(max(0,(16*$total_cache) - $n*$taille)/(1024*1024)*10)/10; - spip_log("cache restant estime : $total_cache Mo, ratio ".$total_cache/$quota_cache,"invalideur"); + spip_log("$dir : $n/$trop caches supprimes [taille moyenne $taille]", 'invalideur'); + $total_cache = intval(max(0, (16 * $total_cache) - $n * $taille) / (1024 * 1024) * 10) / 10; + spip_log("cache restant estime : $total_cache Mo, ratio " . $total_cache / $GLOBALS['quota_cache'], 'invalideur'); // redemander la main pour eviter que le cache ne gonfle trop // mais pas si on ne peut pas purger car les fichiers sont trops recents if ( - $total_cache/$quota_cache>1.5 - AND $n*50>$trop) { + $total_cache / $GLOBALS['quota_cache'] > 1.5 + and $n * 50 > $trop + ) { $encore = true; - spip_log("Il faut encore purger","invalideur"); + spip_log('Il faut encore purger', 'invalideur'); } } } + return $encore; } @@ -201,16 +284,18 @@ function appliquer_quota_cache() { // // Securite : est sur que c'est un cache -// http://doc.spip.org/@retire_cache +// http://code.spip.net/@retire_cache function retire_cache($cache) { if (preg_match( - "|^([0-9a-f]/)?([0-9]+/)?[^.][\-_\%0-9a-z]+--[0-9a-f]+(\.gz)?$|i", - $cache)) { + ',^([0-9a-f]/)?([0-9]+/)?[0-9a-f]+\.cache(\.gz)?$,i', + $cache + )) { // supprimer le fichier (de facon propre) supprimer_fichier(_DIR_CACHE . $cache); - } else + } else { spip_log("Nom de fichier cache incorrect : $cache"); + } } ####################################################################### @@ -223,17 +308,18 @@ function retire_cache($cache) { // Supprimer les caches marques "x" // A priori dans cette version la fonction ne sera pas appelee, car // la meta est toujours false ; mais evitons un bug si elle est appellee -// http://doc.spip.org/@retire_caches +// http://code.spip.net/@retire_caches function retire_caches($chemin = '') { - if (isset($GLOBALS['meta']['invalider_caches'])) - effacer_meta('invalider_caches'); # concurrence + if (isset($GLOBALS['meta']['invalider_caches'])) { + effacer_meta('invalider_caches'); + } # concurrence } // Fonction permettant au compilo de calculer les invalideurs d'une page // (note: si absente, n'est pas appellee) /* -// http://doc.spip.org/@calcul_invalideurs +// http://code.spip.net/@calcul_invalideurs function calcul_invalideurs($corps, $primary, &$boucles, $id_boucle) { return $corps; } @@ -243,23 +329,26 @@ function calcul_invalideurs($corps, $primary, &$boucles, $id_boucle) { // Elle ne touche pas aux fichiers cache eux memes ; elle est // invoquee quand on vide tout le cache en bloc (action/purger) // -// http://doc.spip.org/@supprime_invalideurs -function supprime_invalideurs() { } +// http://code.spip.net/@supprime_invalideurs +function supprime_invalideurs() { +} // Calcul des pages : noter dans la base les liens d'invalidation -// http://doc.spip.org/@maj_invalideurs -function maj_invalideurs ($fichier, &$page) { } +// http://code.spip.net/@maj_invalideurs +function maj_invalideurs($fichier, &$page) { +} + // les invalideurs sont de la forme "objet/id_objet" -// http://doc.spip.org/@insere_invalideur -function insere_invalideur($inval, $fichier) { } +// http://code.spip.net/@insere_invalideur +function insere_invalideur($inval, $fichier) { +} // // Marquer les fichiers caches invalides comme etant a supprimer // -// http://doc.spip.org/@applique_invalideur -function applique_invalideur($depart) { } - -?> +// http://code.spip.net/@applique_invalideur +function applique_invalideur($depart) { +} diff --git a/www/ecrire/inc/journal.php b/www/ecrire/inc/journal.php index 09e70ae4..ff8e888c 100644 --- a/www/ecrire/inc/journal.php +++ b/www/ecrire/inc/journal.php @@ -3,14 +3,16 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /* @@ -22,11 +24,11 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * @param array $opt */ function inc_journal_dist($phrase, $opt = array()) { - if (!strlen($phrase)) + if (!strlen($phrase)) { return; - if ($opt) - $phrase .= " :: ".str_replace("\n", ' ', join(', ',$opt)); + } + if ($opt) { + $phrase .= ' :: ' . str_replace("\n", ' ', join(', ', $opt)); + } spip_log($phrase, 'journal'); } - -?> diff --git a/www/ecrire/inc/json.php b/www/ecrire/inc/json.php index 49cce51a..77837be8 100644 --- a/www/ecrire/inc/json.php +++ b/www/ecrire/inc/json.php @@ -3,40 +3,44 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} // Les fonctions de toggg pour faire du JSON /** * Transform a variable into its javascript equivalent (recursive) + * * @access private * @param mixed the variable * @return string js script | boolean false if error */ -// http://doc.spip.org/@var2js +// http://code.spip.net/@var2js function var2js($var) { $asso = false; switch (true) { - case is_null($var) : + case is_null($var): return 'null'; - case is_string($var) : - return '"' .addcslashes($var, "\"\\\n\r/") . '"'; - case is_bool($var) : + case is_string($var): + return '"' . addcslashes($var, "\"\\\n\r/") . '"'; + case is_bool($var): return $var ? 'true' : 'false'; - case is_scalar($var) : + case is_scalar($var): return (string)$var; - case is_object( $var) : + case is_object($var):// blam $var = get_object_vars($var); $asso = true; - case is_array($var) : + // $var devient un array, on continue + case is_array($var): $keys = array_keys($var); $ikey = count($keys); while (!$asso && $ikey--) { @@ -49,35 +53,37 @@ function var2js($var) { $ret .= $sep . '"' . $key . '":' . var2js($elt); $sep = ','; } - return $ret ."}"; + + return $ret . '}'; } else { $ret = '['; foreach ($var as $elt) { $ret .= $sep . var2js($elt); $sep = ','; } - return $ret ."]"; + + return $ret . ']'; } } + return false; } -if(!function_exists('json_encode')) { - function json_encode($v) { return var2js($v); } +if (!function_exists('json_encode')) { + function json_encode($v) { + return var2js($v); + } } -// http://doc.spip.org/@json_export +// http://code.spip.net/@json_export function json_export($var) { $var = json_encode($var); // flag indiquant qu'on est en iframe et qu'il faut proteger nos // donnees dans un "; - else + if (defined('FILE_UPLOAD')) { + return ''; + } else { return $var; + } } - - - -?> diff --git a/www/ecrire/inc/lang.php b/www/ecrire/inc/lang.php index 208338af..41382cb7 100644 --- a/www/ecrire/inc/lang.php +++ b/www/ecrire/inc/lang.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -11,12 +11,13 @@ \***************************************************************************/ /** - * Gestion des langues et choix de langue + * Gestion des langues et choix de langue * - * @package SPIP\Langue -**/ -if (!defined('_ECRIRE_INC_VERSION')) return; - + * @package SPIP\Core\Langue + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** @@ -27,36 +28,38 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * * Cette fonction définit les globales : * spip_lang, spip_lang_rtl, spip_lang_right, spip_lang_left - * + * * @param string $lang * La langue à utiliser * @return string|bool * string : La langue qui a été utilisée si trouvée * false : aucune langue ne correspondait à la demande -**/ + **/ function changer_langue($lang) { - global $spip_lang_rtl, $spip_lang_right, $spip_lang_left; $liste_langues = ',' . @$GLOBALS['meta']['langues_proposees'] - . ',' . @$GLOBALS['meta']['langues_multilingue'] . ','; + . ',' . @$GLOBALS['meta']['langues_multilingue'] . ','; // Si la langue demandee n'existe pas, on essaie d'autres variantes // Exemple : 'pt-br' => 'pt_br' => 'pt' $lang = str_replace('-', '_', trim($lang)); - if (!$lang) + if (!$lang) { return false; + } - if (strpos($liste_langues,",$lang,")!==false - OR ($lang = preg_replace(',_.*,', '', $lang) - AND strpos($liste_langues,",$lang,")!==false)) { + if (strpos($liste_langues, ",$lang,") !== false + or ($lang = preg_replace(',_.*,', '', $lang) + and strpos($liste_langues, ",$lang,") !== false) + ) { - $spip_lang_rtl = lang_dir($lang, '', '_rtl'); - $spip_lang_right = $spip_lang_rtl ? 'left' : 'right'; - $spip_lang_left = $spip_lang_rtl ? 'right' : 'left'; + $GLOBALS['spip_lang_rtl'] = lang_dir($lang, '', '_rtl'); + $GLOBALS['spip_lang_right'] = $GLOBALS['spip_lang_rtl'] ? 'left' : 'right'; + $GLOBALS['spip_lang_left'] = $GLOBALS['spip_lang_rtl'] ? 'right' : 'left'; return $GLOBALS['spip_lang'] = $lang; - } else + } else { return false; + } } // @@ -68,34 +71,49 @@ function changer_langue($lang) { // ou permettre de choisir une langue "plus proche", // par exemple le francais pour l'espagnol, l'anglais pour l'allemand, etc. -function choisir_traduction ($trads, $lang='') { +function choisir_traduction($trads, $lang = '') { $k = approcher_langue($trads, $lang); + return $k ? $trads[$k] : array_shift($trads); } // retourne son 2e argument si c'est un index du premier // ou un index approchant sinon et si possible, // la langue X etant consideree comme une approche de X_Y -function approcher_langue ($trads, $lang='') { +function approcher_langue($trads, $lang = '') { - if (!$lang) $lang = $GLOBALS['spip_lang']; + if (!$lang) { + $lang = $GLOBALS['spip_lang']; + } if (isset($trads[$lang])) { return $lang; - } - // cas des langues xx_yy + } // cas des langues xx_yy else { $r = explode('_', $lang); - if (isset($trads[$r[0]])) + if (isset($trads[$r[0]])) { return $r[0]; + } } + return ''; } -// http://doc.spip.org/@traduire_nom_langue +/** + * Traduit un code de langue (fr, en, etc...) vers le nom de la langue + * en toute lettres dans cette langue (français, English, etc....). + * + * Si le spip ne connait pas le nom de la langue, il retourne le code + * + * @param string $lang + * Code de langue + * @return string + * Nom de la langue, sinon son code. + **/ function traduire_nom_langue($lang) { include_spip('inc/lang_liste'); include_spip('inc/charsets'); + return html2unicode(isset($GLOBALS['codes_langues'][$lang]) ? $GLOBALS['codes_langues'][$lang] : $lang); } @@ -104,12 +122,12 @@ function traduire_nom_langue($lang) { // // Donne la direction d'ecriture a partir de la langue. Retourne 'gaucher' si -// la langue est arabe, persan, kurde, pachto, ourdou (langues ecrites en +// la langue est arabe, persan, kurde, dari, pachto, ourdou (langues ecrites en // alphabet arabe a priori), hebreu, yiddish (langues ecrites en alphabet // hebreu a priori), 'droitier' sinon. // C'est utilise par #LANG_DIR, #LANG_LEFT, #LANG_RIGHT. -// http://doc.spip.org/@lang_dir -function lang_dir($lang='', $droitier='ltr', $gaucher='rtl') { +// http://code.spip.net/@lang_dir +function lang_dir($lang = '', $droitier = 'ltr', $gaucher = 'rtl') { static $lang_rtl = array('ar', 'fa', 'ku', 'prs', 'ps', 'ur', 'he', 'heb', 'hbo', 'yi'); return in_array(($lang ? $lang : $GLOBALS['spip_lang']), $lang_rtl) ? @@ -121,30 +139,33 @@ function lang_dir($lang='', $droitier='ltr', $gaucher='rtl') { // un texte anglais en interface francaise (ou l'inverse) ; // sinon determiner la typo en fonction de la langue courante -// http://doc.spip.org/@lang_typo -function lang_typo($lang='') { +// http://code.spip.net/@lang_typo +function lang_typo($lang = '') { if (!$lang) { $lang = isset($GLOBALS['lang_objet']) ? $GLOBALS['lang_objet'] : $GLOBALS['spip_lang']; } if ($lang == 'eo' - OR $lang == 'fr' - OR strncmp($lang, 'fr_', 3)==0 - OR $lang == 'cpf') + or $lang == 'fr' + or strncmp($lang, 'fr_', 3) == 0 + or $lang == 'cpf' + ) { return 'fr'; - else + } else { return 'en'; + } } // gestion de la globale $lang_objet pour que les textes soient affiches // avec les memes typo et direction dans l'espace prive que dans le public -// http://doc.spip.org/@changer_typo +// http://code.spip.net/@changer_typo function changer_typo($lang = '') { - if ($lang) + if ($lang) { $GLOBALS['lang_objet'] = $lang; - else + } else { unset($GLOBALS['lang_objet']); + } } // @@ -153,19 +174,22 @@ function changer_typo($lang = '') { // pour var_lang' = langue de l'article, espace public, voir les squelettes // pour 'changer_lang' (langue de l'article, espace prive), c'est en Ajax // -// http://doc.spip.org/@menu_langues -function menu_langues($nom_select, $default='') { +// http://code.spip.net/@menu_langues +function menu_langues($nom_select, $default = '') { include_spip('inc/actions'); $langues = liste_options_langues($nom_select); $ret = ""; - if (!count($langues)) + if (!count($langues)) { return ''; + } - if (!$default) $default = $GLOBALS['spip_lang']; + if (!$default) { + $default = $GLOBALS['spip_lang']; + } foreach ($langues as $l) { $selected = ($l == $default) ? ' selected=\'selected\'' : ''; - $ret .= "\n"; + $ret .= "\n"; } if (!test_espace_prive()) { @@ -177,29 +201,30 @@ function menu_langues($nom_select, $default='') { } $change = ' onchange="this.parentNode.parentNode.submit()"'; - return generer_action_auteur('converser',$base, $cible, + + return generer_action_auteur('converser', $base, $cible, (select_langues($nom_select, $change, $ret) - . ""), - " method='post'"); + . ""), + " method='post'"); } -// http://doc.spip.org/@select_langues -function select_langues($nom_select, $change, $options, $label="") -{ +// http://code.spip.net/@select_langues +function select_langues($nom_select, $change, $options, $label = "") { static $cpt = 0; $id = "menu_langues" . $cpt++; + return - " ". + " " . ""; + . ((!test_espace_prive()) ? + ("class='forml menu_langues'") : + (($nom_select == 'var_lang_ecrire') ? + ("class='lang_ecrire'") : + "class='fondl'")) + . $change + . ">\n" + . $options + . ""; } /** @@ -207,10 +232,11 @@ function select_langues($nom_select, $change, $options, $label="") * * Retourne un tableau de langue utilisables, triées par code de langue, * mais pas le même tableau en fonction du paramètre $nom_select. - * + * * @param string $nom_select * Attribut name du select * Selon son nom, retourne une liste différente : + * * - var_lang ou changer_lang : * liste des langues sélectionnées dans la config multilinguisme * - var_lang_ecrire : @@ -220,17 +246,17 @@ function select_langues($nom_select, $change, $options, $label="") */ function liste_options_langues($nom_select) { - switch($nom_select) { + switch ($nom_select) { # #MENU_LANG case 'var_lang': - # menu de changement de la langue d'un article - # les langues selectionnees dans la configuration "multilinguisme" + # menu de changement de la langue d'un article + # les langues selectionnees dans la configuration "multilinguisme" case 'changer_lang': $langues = explode(',', $GLOBALS['meta']['langues_multilingue']); break; - # menu de l'interface (privee, installation et panneau de login) - # les langues presentes sous forme de fichiers de langue - # on force la relecture du repertoire des langues pour etre synchrone. + # menu de l'interface (privee, installation et panneau de login) + # les langues presentes sous forme de fichiers de langue + # on force la relecture du repertoire des langues pour etre synchrone. case 'var_lang_ecrire': default: $GLOBALS['meta']['langues_proposees'] = ''; @@ -242,43 +268,49 @@ function liste_options_langues($nom_select) { # + langues_multilingues ; mais, ne sert pas # $langues = explode(',', $GLOBALS['all_langs']); } - if (count($langues) <= 1) return array(); + if (count($langues) <= 1) { + return array(); + } sort($langues); + return $langues; } - /** * Redirige sur la bonne langue lorsque l'option forcer_lang est active - * + * * Cette fonction est appelee depuis ecrire/public.php si on a installé * la variable de personnalisation $forcer_lang ; elle renvoie le brouteur * si necessaire vers l'URL xxxx?lang=ll * * @return void -**/ + **/ function verifier_lang_url() { - global $spip_lang; // quelle langue est demandee ? - $lang_demandee = (test_espace_prive()?$GLOBALS['spip_lang']:$GLOBALS['meta']['langue_site']); - if (isset($_COOKIE['spip_lang_ecrire'])) + $lang_demandee = (test_espace_prive() ? $GLOBALS['spip_lang'] : $GLOBALS['meta']['langue_site']); + if (isset($_COOKIE['spip_lang_ecrire'])) { $lang_demandee = $_COOKIE['spip_lang_ecrire']; - if (!test_espace_prive() AND isset($_COOKIE['spip_lang'])) + } + if (!test_espace_prive() and isset($_COOKIE['spip_lang'])) { $lang_demandee = $_COOKIE['spip_lang']; - if (isset($_GET['lang'])) + } + if (isset($_GET['lang'])) { $lang_demandee = $_GET['lang']; + } // Renvoyer si besoin (et si la langue demandee existe) - if ($spip_lang != $lang_demandee - AND changer_langue($lang_demandee) - AND $lang_demandee != @$_GET['lang']) { - $destination = parametre_url(self(),'lang', $lang_demandee, '&'); + if ($GLOBALS['spip_lang'] != $lang_demandee + and changer_langue($lang_demandee) + and $lang_demandee != @$_GET['lang'] + ) { + $destination = parametre_url(self(), 'lang', $lang_demandee, '&'); // ici on a besoin des var_truc foreach ($_GET as $var => $val) { - if (!strncmp('var_', $var, 4)) + if (!strncmp('var_', $var, 4)) { $destination = parametre_url($destination, $var, $val, '&'); + } } include_spip('inc/headers'); redirige_par_entete($destination); @@ -287,7 +319,7 @@ function verifier_lang_url() { // Subtilite : si la langue demandee par cookie est la bonne // alors on fait comme si $lang etait passee dans l'URL // (pour criteres {lang}). - $GLOBALS['lang'] = $_GET['lang'] = $spip_lang; + $GLOBALS['lang'] = $_GET['lang'] = $GLOBALS['spip_lang']; } @@ -301,51 +333,59 @@ function verifier_lang_url() { * * @return string * La langue sélectionnée -**/ + **/ function utiliser_langue_site() { // s'il existe une langue du site (en gros tout le temps en théorie) if (isset($GLOBALS['meta']['langue_site']) - // et si spip_langue est pas encore définie (ce que va faire changer_langue()) - // ou qu'elle n'est pas identique à la langue du site - AND (!isset($GLOBALS['spip_lang']) - OR $GLOBALS['spip_lang']!=$GLOBALS['meta']['langue_site'])) - { + // et si spip_langue est pas encore définie (ce que va faire changer_langue()) + // ou qu'elle n'est pas identique à la langue du site + and (!isset($GLOBALS['spip_lang']) + or $GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site']) + ) { return changer_langue($GLOBALS['meta']['langue_site']);//@:install } // en theorie là, la globale est définie, sinon c'est un problème. if (!isset($GLOBALS['spip_lang'])) { spip_log("La globale spip_lang est indéfinie dans utiliser_langue_site() !", _LOG_ERREUR); } + return $GLOBALS['spip_lang']; } /** - * Initialise la langue pour un visiteur du site + * Initialise la langue pour un visiteur du site * * La langue est choisie dans cet ordre : * - Dans le cookie 'spip_lang' ou 'spip_lang_ecrire' s'il existe (selon l'espace public ou privé). * - Sinon dans la session du visiteur. * - Sinon dans une des langues définie en préférence du navigateur * - Sinon la langue du site - * + * * @return string * La langue utilisée -**/ + **/ function utiliser_langue_visiteur() { - $l = (!test_espace_prive() ? 'spip_lang' : 'spip_lang_ecrire'); - if (isset($_COOKIE[$l])) - if (changer_langue($l = $_COOKIE[$l])) + $l = (!test_espace_prive() ? 'spip_lang' : 'spip_lang_ecrire'); + if (isset($_COOKIE[$l])) { + if (changer_langue($l = $_COOKIE[$l])) { return $l; + } + } - if (isset($GLOBALS['visiteur_session']['lang'])) - if (changer_langue($l = $GLOBALS['visiteur_session']['lang'])) + if (isset($GLOBALS['visiteur_session']['lang'])) { + if (changer_langue($l = $GLOBALS['visiteur_session']['lang'])) { return $l; + } + } - foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $s) { - if (preg_match('#^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$#i', trim($s), $r)) { - if (changer_langue($l=strtolower($r[1]))) - return $l; + if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { + foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $s) { + if (preg_match('#^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$#i', trim($s), $r)) { + if (changer_langue($l = strtolower($r[1]))) { + return $l; + } + } } } @@ -354,32 +394,14 @@ function utiliser_langue_visiteur() { /** - * Retourne le répertoire contenant le module de langue indiqué - * - * Note : pourrait en donner une liste... compliqué - * - * @param string $module - * Nom du module de lang - * @param string $lang - * Langue du module de langue - * @return string - * Adresse du répertoire contenant le module - * Retourne ecrire/lang/ s'il rien ne semble correspondre. -**/ -function repertoire_lang($module='spip', $lang='fr') { - # valeur forcee (par ex.sur spip.net), old style, a faire disparaitre - if (defined('_DIR_LANG')) - return _DIR_LANG; - - # regarder s'il existe une v.f. qq part - if ($f = find_in_path($module.'_'.$lang . '.php', 'lang/')) - return dirname($f).'/'; - - # sinon, je ne sais trop pas quoi dire... - return _DIR_RESTREINT . 'lang/'; + * Verifier qu'une chaine suceptible d'etre un nom de langue a le bon format + * @param string $chaine + * @return int + */ +function match_langue($chaine) { + return preg_match('/^[a-z]{2,3}(_[a-z]{2,3}){0,2}$/', $chaine); } - /** * Initialisation des listes de langues * @@ -389,10 +411,10 @@ function repertoire_lang($module='spip', $lang='fr') { * * Lorsque ces métas n'existent pas encore (c'est à dire à l'installation), * elles sont calculées en obtenant la liste des langues - * dans les fichiers de lang - * + * dans les fichiers de lang + * * @return void -**/ + **/ function init_langues() { // liste des langues dans les meta, sauf a l'install @@ -400,27 +422,29 @@ function init_langues() { $tout = array(); if (!$all_langs) { - if ($d = @opendir(repertoire_lang())) { - while (($f = readdir($d)) !== false) { - if (preg_match(',^spip_([a-z_]+)\.php[3]?$,', $f, $regs)) + // trouver tous les modules lang/spip_xx.php + $modules = find_all_in_path("lang/", "/spip_([a-z_]+)\.php$"); + foreach ($modules as $name => $path) { + if (preg_match(',^spip_([a-z_]+)\.php$,', $name, $regs)) { + if (match_langue($regs[1])) { $tout[] = $regs[1]; + } } - closedir($d); - sort($tout); - $tout = join(',', $tout); - // Si les langues n'ont pas change, ne rien faire - if ($tout != $all_langs) { - $GLOBALS['meta']['langues_proposees'] = $tout; - include_spip('inc/meta'); - ecrire_meta('langues_proposees', $tout); - } else $tout = ''; + } + sort($tout); + $tout = join(',', $tout); + // Si les langues n'ont pas change, ne rien faire + if ($tout != $all_langs) { + $GLOBALS['meta']['langues_proposees'] = $tout; + include_spip('inc/meta'); + ecrire_meta('langues_proposees', $tout); } } if (!isset($GLOBALS['meta']['langue_site'])) { // Initialisation : le francais si dispo, sinon la premiere langue trouvee $GLOBALS['meta']['langue_site'] = $tout = - (!$all_langs OR (strpos(','._LANGUE_PAR_DEFAUT.',',",$all_langs,")!==false)) - ? _LANGUE_PAR_DEFAUT : substr($all_langs,0,strpos($all_langs,',')); + (!$all_langs or (strpos(',' . _LANGUE_PAR_DEFAUT . ',', ",$all_langs,") !== false)) + ? _LANGUE_PAR_DEFAUT : substr($all_langs, 0, strpos($all_langs, ',')); ecrire_meta('langue_site', $tout); } } @@ -434,15 +458,29 @@ function init_langues() { * * @return string * Code html de la balise -**/ -function html_lang_attributes() -{ + **/ +function html_lang_attributes() { $lang = $GLOBALS['spip_lang']; $dir = ($GLOBALS['spip_lang_rtl'] ? 'rtl' : 'ltr'); - return "\n" ; + + return "\n"; } + +/** + * Calcul de la direction du texte et la mise en page selon la langue + * + * En hébreu le ? ne doit pas être inversé. + * + * @param string $spip_lang + * @param string $spip_lang_rtl + * @return string + */ +function aide_lang_dir($spip_lang, $spip_lang_rtl) { + return ($spip_lang <> 'he') ? $spip_lang_rtl : ''; +} + + // initialise les globales (liste des langue, langue du site, spip_lang...) init_langues(); utiliser_langue_site(); -?> diff --git a/www/ecrire/inc/lang_liste.php b/www/ecrire/inc/lang_liste.php index 6bd2e71d..dd404794 100644 --- a/www/ecrire/inc/lang_liste.php +++ b/www/ecrire/inc/lang_liste.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -11,7 +11,6 @@ \***************************************************************************/ - /* Ce fichier contient les codes de langue de base de SPIP. La plupart sont des codes ISO 639-1, dont vous pouvez lire @@ -19,7 +18,9 @@ http://www.loc.gov/standards/iso639-2/langcodes.html */ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS['codes_langues'] = array( 'aa' => "Afar", @@ -50,7 +51,7 @@ $GLOBALS['codes_langues'] = array( 'cpf_dom' => "Kreyòl", 'cpf_hat' => "Kreyòl (Peyi Dayiti)", 'cs' => "čeština", - 'cy' => "Cymraeg", # welsh, gallois + 'cy' => "Cymraeg", # welsh, gallois 'da' => "dansk", 'de' => "Deutsch", 'dz' => "Bhutani", @@ -108,7 +109,7 @@ $GLOBALS['codes_langues'] = array( 'km' => "ភាសាខ្មែរ",// Khmer 'kn' => "Kannada", 'ko' => "한국어", - 'kok' => "कोंकणी", // Konkani + 'kok' => "कोंकणी", 'ks' => "Kashmiri", 'ku' => "کوردی", 'ky' => "Kirghiz", @@ -175,8 +176,8 @@ $GLOBALS['codes_langues'] = array( 'sh_latn' => 'srpskohrvastski', 'sh_cyrl' => 'Српскохрватски', 'si' => "Sinhalese", - 'sk' => "slovenčina", // (Slovakia) - 'sl' => "slovenščina", // (Slovenia) + 'sk' => "slovenčina", // (Slovakia) + 'sl' => "slovenščina", // (Slovenia) 'sm' => "Samoan", 'sn' => "Shona", 'so' => "Somali", @@ -220,5 +221,3 @@ $GLOBALS['codes_langues'] = array( 'zu' => "Zulu" ); - -?> diff --git a/www/ecrire/inc/layer.php b/www/ecrire/inc/layer.php index 9a2d5fc9..005857fc 100644 --- a/www/ecrire/inc/layer.php +++ b/www/ecrire/inc/layer.php @@ -3,21 +3,34 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +/** + * Affiche un cadre complet muni d’un bouton pour le déplier. + * + * @param string $icone Chemin vers l’icone que prendra le cadre + * @param string $titre Titre du cadre + * @param bool $deplie true ou false, défini si le cadre est déplié au chargement de la page (true) ou pas (false) + * @param string $contenu Contenu du cadre + * @param string $ids id que prendra la partie pliée ou dépliée + * @param string $style_cadre classe CSS que prendra le cadre + * @return string Code HTML du cadre dépliable + **/ +function cadre_depliable($icone, $titre, $deplie, $contenu, $ids = '', $style_cadre = 'r') { + $bouton = bouton_block_depliable($titre, $deplie, $ids); -// http://doc.spip.org/@cadre_depliable -function cadre_depliable($icone,$titre,$deplie,$contenu,$ids='',$style_cadre='r'){ - $bouton = bouton_block_depliable($titre,$deplie,$ids); - return - debut_cadre($style_cadre,$icone,'',$bouton, '', '', false) - . debut_block_depliable($deplie,$ids) + return + debut_cadre($style_cadre, $icone, '', $bouton, '', '', false) + . debut_block_depliable($deplie, $ids) . "
      \n" . $contenu . "
      \n" @@ -25,112 +38,126 @@ function cadre_depliable($icone,$titre,$deplie,$contenu,$ids='',$style_cadre='r' . fin_cadre(); } -// http://doc.spip.org/@block_parfois_visible -function block_parfois_visible($nom, $invite, $masque, $style='', $visible=false){ +// http://code.spip.net/@block_parfois_visible +function block_parfois_visible($nom, $invite, $masque, $style = '', $visible = false) { return "\n" - . bouton_block_depliable($invite,$visible,$nom) - . debut_block_depliable($visible,$nom) + . bouton_block_depliable($invite, $visible, $nom) + . debut_block_depliable($visible, $nom) . $masque . fin_block(); } -// http://doc.spip.org/@debut_block_depliable -function debut_block_depliable($deplie,$id=""){ - $class=' blocdeplie'; +// http://code.spip.net/@debut_block_depliable +function debut_block_depliable($deplie, $id = "") { + $class = ' blocdeplie'; // si on n'accepte pas js, ne pas fermer - if (!$deplie) - $class=" blocreplie"; - return "
      "; + if (!$deplie) { + $class = " blocreplie"; + } + + return "
      "; } -// http://doc.spip.org/@fin_block + +// http://code.spip.net/@fin_block function fin_block() { return "
      \n
      "; } + // $texte : texte du bouton // $deplie : true (deplie) ou false (plie) ou -1 (inactif) ou 'incertain' pour que le bouton s'auto init au chargement de la page // $ids : id des div lies au bouton (facultatif, par defaut c'est le div.bloc_depliable qui suit) -// http://doc.spip.org/@bouton_block_depliable -function bouton_block_depliable($texte,$deplie,$ids=""){ - $bouton_id = 'b'.substr(md5($texte.microtime()),0,8); - - $class = ($deplie===true)?" deplie":(($deplie==-1)?" impliable":" replie"); - if (strlen($ids)){ - $cible = explode(',',$ids); - $cible = '#'.implode(",#",$cible); - } - else{ +// http://code.spip.net/@bouton_block_depliable +function bouton_block_depliable($texte, $deplie, $ids = "") { + $bouton_id = 'b' . substr(md5($texte . microtime()), 0, 8); + + $class = ($deplie === true) ? " deplie" : (($deplie == -1) ? " impliable" : " replie"); + if (strlen($ids)) { + $cible = explode(',', $ids); + $cible = '#' . implode(",#", $cible); + } else { $cible = "#$bouton_id + div.bloc_depliable"; } - $b = (strpos($texte,"" - // une ancre pour rendre accessible au clavier le depliage du sous bloc - . "" - . "$texte" - . http_script( ($deplie==='incertain') - ? "jQuery(document).ready(function(){if (jQuery('$cible').is(':visible')) $('#$bouton_id').addClass('deplie').removeClass('replie');});" - : ''); + . ($bouton_id ? "id='$bouton_id' " : "") + . "class='titrem$class'" + . (($deplie === -1) + ? "" + : " onmouseover=\"jQuery(this).depliant('$cible');\"" + ) + . ">" + // une ancre pour rendre accessible au clavier le depliage du sous bloc + . "" + . "$texte" + . http_script(($deplie === 'incertain') + ? "jQuery(function($){if ($('$cible').is(':visible')) { $('#$bouton_id').addClass('deplie').removeClass('replie'); }});" + : ''); } // // Tests sur le nom du butineur // -// http://doc.spip.org/@verif_butineur +// http://code.spip.net/@verif_butineur function verif_butineur() { - global $browser_name, $browser_version; - global $browser_description, $browser_rev, $browser_barre; preg_match(",^([A-Za-z]+)/([0-9]+\.[0-9]+) (.*)$,", $_SERVER['HTTP_USER_AGENT'], $match); - $browser_name = $match[1]; - $browser_version = $match[2]; - $browser_description = $match[3]; + $GLOBALS['browser_name'] = $match[1]; + $GLOBALS['browser_version'] = $match[2]; + $GLOBALS['browser_description'] = $match[3]; $GLOBALS['browser_layer'] = ' '; // compat avec vieux scripts qui testent la valeur - $browser_barre = ''; + $GLOBALS['browser_barre'] = ''; - if (!preg_match(",opera,i", $browser_description)&&preg_match(",opera,i", $browser_name)) { - $browser_name = "Opera"; - $browser_version = $match[2]; - $browser_barre = ($browser_version >= 8.5); - } - else if (preg_match(",opera,i", $browser_description)) { - preg_match(",Opera ([^\ ]*),i", $browser_description, $match); - $browser_name = "Opera"; - $browser_version = $match[1]; - $browser_barre = ($browser_version >= 8.5); - } - else if (preg_match(",msie,i", $browser_description)) { - preg_match(",MSIE ([^;]*),i", $browser_description, $match); - $browser_name = "MSIE"; - $browser_version = $match[1]; - $browser_barre = ($browser_version >= 5.5); - } - else if (preg_match(",KHTML,i", $browser_description) && - preg_match(",Safari/([^;]*),", $browser_description, $match)) { - $browser_name = "Safari"; - $browser_version = $match[1]; - $browser_barre = ($browser_version >= 5.0); - } - else if (preg_match(",mozilla,i", $browser_name) AND $browser_version >= 5) { - // Numero de version pour Mozilla "authentique" - if (preg_match(",rv:([0-9]+\.[0-9]+),", $browser_description, $match)) - $browser_rev = doubleval($match[1]); - // Autres Gecko => equivalents 1.4 par defaut (Galeon, etc.) - else if (strpos($browser_description, "Gecko") and !strpos($browser_description, "KHTML")) - $browser_rev = 1.4; - // Machins quelconques => equivalents 1.0 par defaut (Konqueror, etc.) - else $browser_rev = 1.0; - $browser_barre = $browser_rev >= 1.3; + if (!preg_match(",opera,i", $GLOBALS['browser_description']) && preg_match(",opera,i", $GLOBALS['browser_name'])) { + $GLOBALS['browser_name'] = "Opera"; + $GLOBALS['browser_version'] = $match[2]; + $GLOBALS['browser_barre'] = ($GLOBALS['browser_version'] >= 8.5); + } else { + if (preg_match(",opera,i", $GLOBALS['browser_description'])) { + preg_match(",Opera ([^\ ]*),i", $GLOBALS['browser_description'], $match); + $GLOBALS['browser_name'] = "Opera"; + $GLOBALS['browser_version'] = $match[1]; + $GLOBALS['browser_barre'] = ($GLOBALS['browser_version'] >= 8.5); + } else { + if (preg_match(",msie,i", $GLOBALS['browser_description'])) { + preg_match(",MSIE ([^;]*),i", $GLOBALS['browser_description'], $match); + $GLOBALS['browser_name'] = "MSIE"; + $GLOBALS['browser_version'] = $match[1]; + $GLOBALS['browser_barre'] = ($GLOBALS['browser_version'] >= 5.5); + } else { + if (preg_match(",KHTML,i", $GLOBALS['browser_description']) && + preg_match(",Safari/([^;]*),", $GLOBALS['browser_description'], $match) + ) { + $GLOBALS['browser_name'] = "Safari"; + $GLOBALS['browser_version'] = $match[1]; + $GLOBALS['browser_barre'] = ($GLOBALS['browser_version'] >= 5.0); + } else { + if (preg_match(",mozilla,i", $GLOBALS['browser_name']) and $GLOBALS['browser_version'] >= 5) { + // Numero de version pour Mozilla "authentique" + if (preg_match(",rv:([0-9]+\.[0-9]+),", $GLOBALS['browser_description'], $match)) { + $GLOBALS['browser_rev'] = doubleval($match[1]); + } // Autres Gecko => equivalents 1.4 par defaut (Galeon, etc.) + else { + if (strpos($GLOBALS['browser_description'], "Gecko") and !strpos($GLOBALS['browser_description'], + "KHTML") + ) { + $GLOBALS['browser_rev'] = 1.4; + } // Machins quelconques => equivalents 1.0 par defaut (Konqueror, etc.) + else { + $GLOBALS['browser_rev'] = 1.0; + } + } + $GLOBALS['browser_barre'] = $GLOBALS['browser_rev'] >= 1.3; + } + } + } + } } - if (!$browser_name) $browser_name = "Mozilla"; + if (!$GLOBALS['browser_name']) { + $GLOBALS['browser_name'] = "Mozilla"; + } } verif_butineur(); -?> diff --git a/www/ecrire/inc/lien.php b/www/ecrire/inc/lien.php index 55fc18b0..32c37bf9 100644 --- a/www/ecrire/inc/lien.php +++ b/www/ecrire/inc/lien.php @@ -3,14 +3,16 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('base/abstract_sql'); @@ -20,8 +22,16 @@ include_spip('base/abstract_sql'); // et en plus on veut pouvoir les passer en pipeline // -function inc_lien_dist($lien, $texte='', $class='', $title='', $hlang='', $rel='', $connect='', $env=array()) { - +function inc_lien_dist( + $lien, + $texte = '', + $class = '', + $title = '', + $hlang = '', + $rel = '', + $connect = '', + $env = array() +) { return $lien; } @@ -31,58 +41,51 @@ function inc_lien_dist($lien, $texte='', $class='', $title='', $hlang='', $rel=' // sinon les crochets ne peuvent plus servir qu'a ce type de raccourci define('_RACCOURCI_LIEN', "/\[([^][]*?([[]\w*[]][^][]*)*)->(>?)([^]]*)\]/msS"); -// http://doc.spip.org/@expanser_liens -function expanser_liens($t, $connect='', $env=array()){ +// http://code.spip.net/@expanser_liens +function expanser_liens($t, $connect = '', $env = array()) { $t = pipeline('pre_liens', $t); // on passe a traiter_modeles la liste des liens reperes pour lui permettre // de remettre le texte d'origine dans les parametres du modele $t = traiter_modeles($t, false, false, $connect); + return $t; } // Meme analyse mais pour eliminer les liens // et ne laisser que leur titre, a expliciter si ce n'est fait -// http://doc.spip.org/@nettoyer_raccourcis_typo -function nettoyer_raccourcis_typo($texte, $connect='') -{ - - +// http://code.spip.net/@nettoyer_raccourcis_typo +function nettoyer_raccourcis_typo($texte, $connect = '') { return $texte; } - - // Repere dans la partie texte d'un raccourci [texte->...] // la langue et la bulle eventuelles -// http://doc.spip.org/@traiter_raccourci_lien_atts +// http://code.spip.net/@traiter_raccourci_lien_atts function traiter_raccourci_lien_atts($texte) { - $bulle=''; - $hlang=''; + $bulle = ''; + $hlang = ''; + return array(trim($texte), $bulle, $hlang); } - define('_RACCOURCI_CHAPO', '/^(\W*)(\W*)(\w*\d+([?#].*)?)$/'); /** - * Fonction pour les champs virtuels de redirection qui peut etre: - * 3. une URL std - * - * renvoie l'url reelle de redirection si le $url=true, - * l'url brute contenue dans le chapo sinon - * - * http://doc.spip.org/@chapo_redirige + * Retourne la valeur d'un champ de redirection (articles virtuels) + * + * @note + * Pas d'action dans le noyau SPIP directement. + * Se réferer inc/lien du plugin Textwheel. * * @param string $virtuel * @param bool $url * @return string */ -function virtuel_redirige($virtuel, $url=false){ +function virtuel_redirige($virtuel, $url = false) { return $virtuel; } - // Cherche un lien du type [->raccourci 123] // associe a une fonction generer_url_raccourci() definie explicitement // ou implicitement par le jeu de type_urls courant. @@ -92,19 +95,20 @@ function virtuel_redirige($virtuel, $url=false){ // 'titre': seulement T ci-dessus (i.e. le TITRE ci-dessus ou dans table SQL) // 'url': seulement U (i.e. generer_url_RACCOURCI) -// http://doc.spip.org/@calculer_url -function calculer_url ($ref, $texte='', $pour='url', $connect='', $echappe_typo = true) { +// http://code.spip.net/@calculer_url +function calculer_url($ref, $texte = '', $pour = 'url', $connect = '', $echappe_typo = true) { $r = traiter_lien_implicite($ref, $texte, $pour, $connect, $echappe_typo); + return $r ? $r : traiter_lien_explicite($ref, $texte, $pour, $connect, $echappe_typo); } define('_EXTRAIRE_LIEN', ',^\s*(?:' . _PROTOCOLES_STD . '):?/?/?\s*$,iS'); -// http://doc.spip.org/@traiter_lien_explicite -function traiter_lien_explicite ($ref, $texte='', $pour='url', $connect='', $echappe_typo = true) -{ - if (preg_match(_EXTRAIRE_LIEN, $ref)) - return ($pour != 'tout') ? '' : array('','','',''); +// http://code.spip.net/@traiter_lien_explicite +function traiter_lien_explicite($ref, $texte = '', $pour = 'url', $connect = '', $echappe_typo = true) { + if (preg_match(_EXTRAIRE_LIEN, $ref)) { + return ($pour != 'tout') ? '' : array('', '', '', ''); + } $lien = entites_html(trim($ref)); @@ -114,65 +118,91 @@ function traiter_lien_explicite ($ref, $texte='', $pour='url', $connect='', $ech // evite l'affichage de trops longues urls. $lien_court = charger_fonction('lien_court', 'inc'); $texte = $lien_court($texte); - if ($echappe_typo){ - $texte = "".quote_amp($texte).""; + if ($echappe_typo) { + $texte = "" . quote_amp($texte) . ""; } } // petites corrections d'URL - if (preg_match('/^www\.[^@]+$/S',$lien)) - $lien = "http://".$lien; - else if (strpos($lien, "@") && email_valide($lien)) { - if (!$texte) $texte = $lien; - $lien = "mailto:".$lien; + if (preg_match('/^www\.[^@]+$/S', $lien)) { + $lien = "http://" . $lien; + } else { + if (strpos($lien, "@") && email_valide($lien)) { + if (!$texte) { + $texte = $lien; + } + $lien = "mailto:" . $lien; + } } - - if ($pour == 'url') return $lien; - if ($pour == 'titre') return $texte; + if ($pour == 'url') { + return $lien; + } + + if ($pour == 'titre') { + return $texte; + } return array('url' => $lien, 'titre' => $texte); } -function liens_implicite_glose_dist($texte,$id,$type,$args,$ancre,$connect=''){ - if (function_exists($f = 'glossaire_' . $ancre)) +function liens_implicite_glose_dist($texte, $id, $type, $args, $ancre, $connect = '') { + if (function_exists($f = 'glossaire_' . $ancre)) { $url = $f($texte, $id); - else + } else { $url = glossaire_std($texte); + } + return $url; } -// http://doc.spip.org/@traiter_lien_implicite -function traiter_lien_implicite ($ref, $texte='', $pour='url', $connect='') -{ - if (!($match = typer_raccourci($ref))) return false; - @list($type,,$id,,$args,,$ancre) = $match; -# attention dans le cas des sites le lien doit pointer non pas sur -# la page locale du site, mais directement sur le site lui-meme - if ($f = charger_fonction("implicite_$type","liens",true)) - $url = $f($texte,$id,$type,$args,$ancre,$connect); - if (!$url) - $url = generer_url_entite($id,$type,$args,$ancre,$connect ? $connect : NULL); - if (!$url) return false; +// http://code.spip.net/@traiter_lien_implicite +function traiter_lien_implicite($ref, $texte = '', $pour = 'url', $connect = '') { + if (!($match = typer_raccourci($ref))) { + return false; + } + @list($type, , $id, , $args, , $ancre) = $match; + // attention dans le cas des sites le lien doit pointer non pas sur + // la page locale du site, mais directement sur le site lui-meme + if ($f = charger_fonction("implicite_$type", "liens", true)) { + $url = $f($texte, $id, $type, $args, $ancre, $connect); + } + if (!$url) { + $url = generer_url_entite($id, $type, $args, $ancre, $connect ? $connect : null); + } + if (!$url) { + return false; + } if (is_array($url)) { - @list($type,$id) = $url; - $url = generer_url_entite($id,$type,$args,$ancre,$connect ? $connect : NULL); + @list($type, $id) = $url; + $url = generer_url_entite($id, $type, $args, $ancre, $connect ? $connect : null); + } + if ($pour === 'url') { + return $url; } - if ($pour === 'url') return $url; $r = traiter_raccourci_titre($id, $type, $connect); - if ($r) $r['class'] = ($type == 'site')?'spip_out':'spip_in'; - if ($texte = trim($texte)) $r['titre'] = $texte; - if (!@$r['titre']) $r['titre'] = _T($type) . " $id"; - if ($pour=='titre') return $r['titre']; + if ($r) { + $r['class'] = ($type == 'site') ? 'spip_out' : 'spip_in'; + } + if ($texte = trim($texte)) { + $r['titre'] = $texte; + } + if (!@$r['titre']) { + $r['titre'] = _T($type) . " $id"; + } + if ($pour == 'titre') { + return $r['titre']; + } $r['url'] = $url; // dans le cas d'un lien vers un doc, ajouter le type='mime/type' if ($type == 'document' - AND $mime = sql_getfetsel('mime_type', 'spip_types_documents', - "extension IN (".sql_get_select("extension","spip_documents","id_document=".sql_quote($id)).")", - '','','','',$connect) - ) + and $mime = sql_getfetsel('mime_type', 'spip_types_documents', + "extension IN (" . sql_get_select("extension", "spip_documents", "id_document=" . sql_quote($id)) . ")", + '', '', '', '', $connect) + ) { $r['mime'] = $mime; + } return $r; } @@ -181,35 +211,75 @@ function traiter_lien_implicite ($ref, $texte='', $pour='url', $connect='') define('_RACCOURCI_URL', '/^\s*(\w*?)\s*(\d+)(\?(.*?))?(#([^\s]*))?\s*$/S'); -// http://doc.spip.org/@typer_raccourci -function typer_raccourci ($lien) { - if (!preg_match(_RACCOURCI_URL, $lien, $match)) return array(); +// http://code.spip.net/@typer_raccourci +function typer_raccourci($lien) { + if (!preg_match(_RACCOURCI_URL, $lien, $match)) { + return array(); + } $f = $match[1]; // valeur par defaut et alias historiques - if (!$f) $f = 'article'; - else if ($f == 'art') $f = 'article'; - else if ($f == 'br') $f = 'breve'; - else if ($f == 'rub') $f = 'rubrique'; - else if ($f == 'aut') $f = 'auteur'; - else if ($f == 'doc' OR $f == 'im' OR $f == 'img' OR $f == 'image' OR $f == 'emb') - $f = 'document'; - else if (preg_match('/^br..?ve$/S', $f)) $f = 'breve'; # accents :( + if (!$f) { + $f = 'article'; + } else { + if ($f == 'art') { + $f = 'article'; + } else { + if ($f == 'br') { + $f = 'breve'; + } else { + if ($f == 'rub') { + $f = 'rubrique'; + } else { + if ($f == 'aut') { + $f = 'auteur'; + } else { + if ($f == 'doc' or $f == 'im' or $f == 'img' or $f == 'image' or $f == 'emb') { + $f = 'document'; + } else { + if (preg_match('/^br..?ve$/S', $f)) { + $f = 'breve'; + } + } + } + } + } + } + } # accents :( $match[0] = $f; + return $match; } -// Retourne le champ textuel associe a une cle primaire, et sa langue -function traiter_raccourci_titre($id, $type, $connect=NULL) -{ +/** + * Retourne le titre et la langue d'un objet éditorial + * + * @param int $id Identifiant de l'objet + * @param string $type Type d'objet + * @param string|null $connect Connecteur SQL utilisé + * @return array { + * @var string $titre Titre si présent, sinon '' + * @var string $lang Langue si présente, sinon '' + * } + **/ +function traiter_raccourci_titre($id, $type, $connect = null) { $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table(table_objet($type)); - if (!($desc AND $s = $desc['titre'])) return array(); + if (!($desc and $s = $desc['titre'])) { + return array(); + } $_id = $desc['key']['PRIMARY KEY']; - $r = sql_fetsel($s, $desc['table'], "$_id=$id", '','','','',$connect); - if (!$r) return array(); + $r = sql_fetsel($s, $desc['table'], "$_id=$id", '', '', '', '', $connect); + if (!$r) { + return array(); + } $r['titre'] = supprimer_numero($r['titre']); - if (!$r['titre']) $r['titre'] = $r['surnom']; - if (!isset($r['lang'])) $r['lang'] = ''; + if (!$r['titre'] and !empty($r['surnom'])) { + $r['titre'] = $r['surnom']; + } + if (!isset($r['lang'])) { + $r['lang'] = ''; + } + return $r; } @@ -219,45 +289,48 @@ function traiter_raccourci_titre($id, $type, $connect=NULL) // Le nom du modele doit faire au moins trois caracteres (evite

      ) // Si $doublons==true, on repere les documents sans calculer les modeles // mais on renvoie les params (pour l'indexation par le moteur de recherche) -// http://doc.spip.org/@traiter_modeles +// http://code.spip.net/@traiter_modeles -define('_RACCOURCI_MODELE', - '(<([a-z_-]{3,})' # ]*>|[^>])*?)?' # |arguments (y compris des tags <...>) - .'\s*/?'.'>)' # fin du modele > - .'\s*(<\/a>)?' # eventuel - ); +define('_RACCOURCI_MODELE', + '(<([a-z_-]{3,})' # ]*>|[^>])*?)?' # |arguments (y compris des tags <...>) + . '\s*/?' . '>)' # fin du modele > + . '\s*(<\/a>)?' # eventuel +); -define('_RACCOURCI_MODELE_DEBUT', '@^' . _RACCOURCI_MODELE .'@isS'); +define('_RACCOURCI_MODELE_DEBUT', '@^' . _RACCOURCI_MODELE . '@isS'); -// http://doc.spip.org/@traiter_modeles -function traiter_modeles($texte, $doublons=false, $echap='', $connect='', $liens = null, $env = array()) { +// http://code.spip.net/@traiter_modeles +function traiter_modeles($texte, $doublons = false, $echap = '', $connect = '', $liens = null, $env = array()) { // preserver la compatibilite : true = recherche des documents - if ($doublons===true) - $doublons = array('documents'=>array('doc','emb','img')); + if ($doublons === true) { + $doublons = array('documents' => array('doc', 'emb', 'img')); + } // detecter les modeles (rapide) - if (strpos($texte,"<")!==false AND - preg_match_all('/<[a-z_-]{3,}\s*[0-9|]+/iS', $texte, $matches, PREG_SET_ORDER)) { + if (strpos($texte, "<") !== false and + preg_match_all('/<[a-z_-]{3,}\s*[0-9|]+/iS', $texte, $matches, PREG_SET_ORDER) + ) { include_spip('public/assembler'); - $wrap_embed_html = charger_fonction("wrap_embed_html","inc",true); + $wrap_embed_html = charger_fonction("wrap_embed_html", "inc", true); foreach ($matches as $match) { // Recuperer l'appel complet (y compris un eventuel lien) - $a = strpos($texte,$match[0]); + $a = strpos($texte, $match[0]); preg_match(_RACCOURCI_MODELE_DEBUT, - substr($texte, $a), $regs); - $regs[]=""; // s'assurer qu'il y a toujours un 5e arg, eventuellement vide - list(,$mod, $type, $id, $params, $fin) = $regs; - if ($fin AND - preg_match('/]*>\s*$/i', - substr($texte, 0, $a), $r)) { + substr($texte, $a), $regs); + $regs[] = ""; // s'assurer qu'il y a toujours un 5e arg, eventuellement vide + list(, $mod, $type, $id, $params, $fin) = $regs; + if ($fin and + preg_match('/]*>\s*$/i', + substr($texte, 0, $a), $r) + ) { $lien = array( - 'href' => extraire_attribut($r[0],'href'), - 'class' => extraire_attribut($r[0],'class'), - 'mime' => extraire_attribut($r[0],'type'), - 'title' => extraire_attribut($r[0],'title'), - 'hreflang' => extraire_attribut($r[0],'hreflang') + 'href' => extraire_attribut($r[0], 'href'), + 'class' => extraire_attribut($r[0], 'class'), + 'mime' => extraire_attribut($r[0], 'type'), + 'title' => extraire_attribut($r[0], 'title'), + 'hreflang' => extraire_attribut($r[0], 'hreflang') ); $n = strlen($r[0]); $a -= $n; @@ -269,55 +342,60 @@ function traiter_modeles($texte, $doublons=false, $echap='', $connect='', $liens // calculer le modele # hack indexation - if ($doublons) - $texte .= preg_replace(',[|][^|=]*,s',' ',$params); - # version normale + if ($doublons) { + $texte .= preg_replace(',[|][^|=]*,s', ' ', $params); + } # version normale else { // si un tableau de liens a ete passe, reinjecter le contenu d'origine // dans les parametres, plutot que les liens echappes - if (!is_null($liens)) + if (!is_null($liens)) { $params = str_replace($liens[0], $liens[1], $params); + } $modele = inclure_modele($type, $id, $params, $lien, $connect, $env); // en cas d'echec, // si l'objet demande a une url, // creer un petit encadre vers elle if ($modele === false) { - if (!$lien) + if (!$lien) { $lien = traiter_lien_implicite("$type$id", '', 'tout', $connect); - if ($lien) + } + if ($lien) { $modele = '' - .sinon($lien['titre'], _T('ecrire:info_sans_titre')) - .""; - else { + . $lien['url'] + . '" class="spip_modele' + . '">' + . sinon($lien['titre'], _T('ecrire:info_sans_titre')) + . ""; + } else { $modele = ""; if (test_espace_prive()) { - $modele = entites_html(substr($texte,$a,$cherche)); - if (!is_null($liens)) - $modele = "
      ".str_replace($liens[0], $liens[1], $modele)."
      "; + $modele = entites_html(substr($texte, $a, $cherche)); + if (!is_null($liens)) { + $modele = "
      " . str_replace($liens[0], $liens[1], $modele) . "
      "; + } } } } // le remplacer dans le texte if ($modele !== false) { $modele = protege_js_modeles($modele); - if ($wrap_embed_html){ - $modele = $wrap_embed_html($mod,$modele); + if ($wrap_embed_html) { + $modele = $wrap_embed_html($mod, $modele); } $rempl = code_echappement($modele, $echap); $texte = substr($texte, 0, $a) . $rempl - . substr($texte, $a+$cherche); + . substr($texte, $a + $cherche); } } // hack pour tout l'espace prive - if (((!_DIR_RESTREINT) OR ($doublons)) AND ($id)){ - foreach($doublons?$doublons:array('documents'=>array('doc','emb','img')) as $quoi=>$modeles) - if (in_array($type,$modeles)) + if (((!_DIR_RESTREINT) or ($doublons)) and ($id)) { + foreach ($doublons ? $doublons : array('documents' => array('doc', 'emb', 'img')) as $quoi => $modeles) { + if (in_array($type, $modeles)) { $GLOBALS["doublons_{$quoi}_inclus"][] = $id; + } + } } } } @@ -328,22 +406,17 @@ function traiter_modeles($texte, $doublons=false, $echap='', $connect='', $liens // // Raccourcis ancre [#ancre<-] // -// http://doc.spip.org/@traiter_raccourci_ancre -function traiter_raccourci_ancre($letexte) -{ +// http://code.spip.net/@traiter_raccourci_ancre +function traiter_raccourci_ancre($letexte) { return $letexte; } -// http://doc.spip.org/@traiter_raccourci_glossaire -function traiter_raccourci_glossaire($texte) -{ +// http://code.spip.net/@traiter_raccourci_glossaire +function traiter_raccourci_glossaire($texte) { return $texte; } -// http://doc.spip.org/@glossaire_std -function glossaire_std($terme) -{ - return $terme; +// http://code.spip.net/@glossaire_std +function glossaire_std($terme) { + return $terme; } - -?> diff --git a/www/ecrire/inc/lien_court.php b/www/ecrire/inc/lien_court.php index e15d98a8..f15fe6d0 100644 --- a/www/ecrire/inc/lien_court.php +++ b/www/ecrire/inc/lien_court.php @@ -3,14 +3,16 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /* * Cette fonction prend une URL et la raccourcit si elle est trop longue @@ -23,11 +25,9 @@ function inc_lien_court($url) { $long_url = defined('_MAX_LONG_URL') ? _MAX_LONG_URL : 40; $coupe_url = defined('_MAX_COUPE_URL') ? _MAX_COUPE_URL : 35; - if (strlen($url)>$long_url) { - $url = substr($url,0,$coupe_url).'...'; + if (strlen($url) > $long_url) { + $url = substr($url, 0, $coupe_url) . '...'; } return $url; } - -?> \ No newline at end of file diff --git a/www/ecrire/inc/lister_objets.php b/www/ecrire/inc/lister_objets.php index 2eec5190..678e9676 100644 --- a/www/ecrire/inc/lister_objets.php +++ b/www/ecrire/inc/lister_objets.php @@ -3,51 +3,65 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion de listes d'objets + * + * @package SPIP\Core\Listes + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** - * affichage des liste d'objets - * surcharge pour aiguiller vers la mise en skel + * Affichage des liste d'objets + * + * Surcharge pour aiguiller vers la mise en squelettes des listes + * + * @deprecated Créer ou utiliser un squelette dans `prive/objets/liste/` + * pour la table en question et l'appeler avec une inclusion. * * @param string $vue - * @param string $titre - * @param array $requete - * @param string $formater + * Nom de l'objet + * @param array $contexte + * Contexte du squelette * @param bool $force + * Si `true` le titre est affiché même s'il n'y a aucun élément dans la liste. * @return string + * Code HTML de la liste */ -function inc_lister_objets_dist($vue, $contexte=array(), $force=false){ +function inc_lister_objets_dist($vue, $contexte = array(), $force = false) { $res = ""; // debug - if (!is_array($contexte)) + if (!is_array($contexte)) { return _L('$contexte doit etre un tableau dans inc/lister_objets'); + } $fond = "prive/objets/liste/$vue"; - if (!find_in_path($fond."."._EXTENSION_SQUELETTES)) { + if (!find_in_path($fond . "." . _EXTENSION_SQUELETTES)) { // traiter les cas particuliers include_spip('base/connect_sql'); $vue = table_objet($vue); $fond = "prive/objets/liste/$vue"; - if (!find_in_path($fond."."._EXTENSION_SQUELETTES)) + if (!find_in_path($fond . "." . _EXTENSION_SQUELETTES)) { return _L("vue $vue introuvable pour lister les objets"); + } } - - - $contexte['sinon']=($force ? $contexte['titre']:''); - $res = recuperer_fond($fond,$contexte,array('ajax'=>true)); - if (_request('var_liste')) + + $contexte['sinon'] = ($force ? $contexte['titre'] : ''); + + $res = recuperer_fond($fond, $contexte, array('ajax' => true)); + if (_request('var_liste')) { echo var_export($contexte, true); - + } + return $res; } - -?> diff --git a/www/ecrire/inc/log.php b/www/ecrire/inc/log.php index 07f9e783..34c4ca22 100644 --- a/www/ecrire/inc/log.php +++ b/www/ecrire/inc/log.php @@ -3,83 +3,100 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function inc_log_dist($message, $logname=NULL, $logdir=NULL, $logsuf=NULL) { +function inc_log_dist($message, $logname = null, $logdir = null, $logsuf = null) { static $test_repertoire = array(); static $compteur = array(); - static $debugverb = ""; // pour ne pas le recalculer au reappel - global $nombre_de_logs, $taille_des_logs; + static $debugverb = ''; // pour ne pas le recalculer au reappel - if (is_null($logname) OR !is_string($logname)) + if (is_null($logname) or !is_string($logname)) { $logname = defined('_FILE_LOG') ? _FILE_LOG : 'spip'; - if (!isset($compteur[$logname])) $compteur[$logname] = 0; + } + if (!isset($compteur[$logname])) { + $compteur[$logname] = 0; + } if ($logname != 'maj' - AND defined('_MAX_LOG') - AND ( - $compteur[$logname]++ > _MAX_LOG - OR !$nombre_de_logs - OR !$taille_des_logs - )) + and defined('_MAX_LOG') + and ( + $compteur[$logname]++ > _MAX_LOG + or !$GLOBALS['nombre_de_logs'] + or !$GLOBALS['taille_des_logs'] + ) + ) { return; + } - $logfile = ($logdir===NULL ? _DIR_LOG : $logdir) - . ($logname) - . ($logsuf===NULL ? _FILE_LOG_SUFFIX : $logsuf); + $logfile = ($logdir === null ? _DIR_LOG : $logdir) + . ($logname) + . ($logsuf === null ? _FILE_LOG_SUFFIX : $logsuf); if (!isset($test_repertoire[$d = dirname($logfile)])) { $test_repertoire[$d] = false; // eviter une recursivite en cas d'erreur de sous_repertoire - $test_repertoire[$d] = (@is_dir($d)?true:(function_exists('sous_repertoire')?sous_repertoire($d, '', false, true):false)); + $test_repertoire[$d] = (@is_dir($d) ? true : (function_exists('sous_repertoire') ? sous_repertoire( + $d, + '', + false, + true + ) : false)); } // si spip_log() dans mes_options, ou repertoire log/ non present, poser dans tmp/ - if (!defined('_DIR_LOG') OR !$test_repertoire[$d]) - $logfile = _DIR_RACINE._NOM_TEMPORAIRES_INACCESSIBLES.$logname.'.log'; + if (!defined('_DIR_LOG') or !$test_repertoire[$d]) { + $logfile = _DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES . $logname . '.log'; + } $rotate = 0; - $pid = '(pid '.@getmypid().')'; + $pid = '(pid ' . @getmypid() . ')'; // accepter spip_log( Array ) - if (!is_string($message)) $message = var_export($message, true); + if (!is_string($message)) { + $message = var_export($message, true); + } - if (!$debugverb AND defined('_LOG_FILELINE') AND _LOG_FILELINE){ + if (!$debugverb and defined('_LOG_FILELINE') and _LOG_FILELINE) { $debug = debug_backtrace(); $l = $debug[1]['line']; $fi = $debug[1]['file']; - if (strncmp($fi,_ROOT_RACINE,strlen(_ROOT_RACINE))==0) - $fi = substr($fi,strlen(_ROOT_RACINE)); + if (strncmp($fi, _ROOT_RACINE, strlen(_ROOT_RACINE)) == 0) { + $fi = substr($fi, strlen(_ROOT_RACINE)); + } $fu = isset($debug[2]['function']) ? $debug[2]['function'] : ''; - $debugverb = "$fi:L$l:$fu"."():"; + $debugverb = "$fi:L$l:$fu" . '():'; } - $m = date("Y-m-d H:i:s").' '.$GLOBALS['ip'].' '.$pid.' ' - //distinguer les logs prives et publics dans les grep + $m = date('Y-m-d H:i:s') . ' ' . (isset($GLOBALS['ip']) ? $GLOBALS['ip'] : '') . ' ' . $pid . ' ' + //distinguer les logs prives et publics dans les grep . $debugverb - . (test_espace_prive()?':Pri:':':Pub:') - .preg_replace("/\n*$/", "\n", $message); + . (test_espace_prive() ? ':Pri:' : ':Pub:') + . preg_replace("/\n*$/", "\n", $message); if (@is_readable($logfile) - AND (!$s = @filesize($logfile) OR $s > $taille_des_logs * 1024)) { - $rotate = $nombre_de_logs; + and (!$s = @filesize($logfile) or $s > $GLOBALS['taille_des_logs'] * 1024) + ) { + $rotate = $GLOBALS['nombre_de_logs']; $m .= "[-- rotate --]\n"; } - $f = @fopen($logfile, "ab"); + $f = @fopen($logfile, 'ab'); if ($f) { - fputs($f, (defined('_LOG_BRUT') AND _LOG_BRUT) ? $m : str_replace('<','<',$m)); + fputs($f, (defined('_LOG_BRUT') and _LOG_BRUT) ? $m : str_replace('<', '<', $m)); fclose($f); } if ($rotate-- > 0 - AND function_exists('spip_unlink')) { + and function_exists('spip_unlink') + ) { spip_unlink($logfile . '.' . $rotate); while ($rotate--) { @rename($logfile . ($rotate ? '.' . $rotate : ''), $logfile . '.' . ($rotate + 1)); @@ -88,9 +105,9 @@ function inc_log_dist($message, $logname=NULL, $logdir=NULL, $logsuf=NULL) { // Dupliquer les erreurs specifiques dans le log general if ($logname !== _FILE_LOG - AND defined('_FILE_LOG')) - inc_log_dist($logname=='maj' ? 'cf maj.log' : $message); - $debugverb = ""; + and defined('_FILE_LOG') + ) { + inc_log_dist($logname == 'maj' ? 'cf maj.log' : $message); + } + $debugverb = ''; } - -?> diff --git a/www/ecrire/inc/mail.php b/www/ecrire/inc/mail.php index c2f717c6..bc8d9739 100644 --- a/www/ecrire/inc/mail.php +++ b/www/ecrire/inc/mail.php @@ -3,28 +3,36 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -## -## Module de compatibilite ascendante : desormais inc/envoyer_mail -## +/** + * Module de compatibilite ascendante : desormais inc/envoyer_mail + * + * @deprecated Utiliser inc/envoyer_mail + * @package SPIP\Core\Mail + */ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} if (!function_exists('envoyer_mail')) { define('_FUNCTION_ENVOYER_MAIL', charger_fonction('envoyer_mail', 'inc')); -// http://doc.spip.org/@envoyer_mail + /** + * Envoie un mail. + * + * @uses inc_envoyer_mail_dist() + * @deprecated Utiliser inc_envoyer_mail_dist() via charger_fonction() + **/ function envoyer_mail() { $args = func_get_args(); - if (_FUNCTION_ENVOYER_MAIL) + if (_FUNCTION_ENVOYER_MAIL) { return call_user_func_array(_FUNCTION_ENVOYER_MAIL, $args); + } } } - - -?> diff --git a/www/ecrire/inc/math.php b/www/ecrire/inc/math.php index 1143c9ab..fcc0b442 100644 --- a/www/ecrire/inc/math.php +++ b/www/ecrire/inc/math.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -12,16 +12,18 @@ // -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} // // Gestion du raccourci ... en client-serveur // -// http://doc.spip.org/@image_math +// http://code.spip.net/@image_math function produire_image_math($tex) { - global $traiter_math; - switch ($traiter_math) { + + switch ($GLOBALS['traiter_math']) { // Attention: mathml desactiv'e pour l'instant case 'mathml': $ext = '.xhtml'; @@ -36,17 +38,18 @@ function produire_image_math($tex) { } // Regarder dans le repertoire local des images TeX et blocs MathML - if (!@is_dir($dir_tex = _DIR_VAR.'cache-TeX/')) - @mkdir ($dir_tex, _SPIP_CHMOD); - $fichier = $dir_tex .md5(trim($tex)).$ext; - + if (!@is_dir($dir_tex = _DIR_VAR . 'cache-TeX/')) { + @mkdir($dir_tex, _SPIP_CHMOD); + } + $fichier = $dir_tex . md5(trim($tex)) . $ext; + if (!@file_exists($fichier)) { // Aller chercher l'image sur le serveur if ($server) { - spip_log($url = $server.'?'.rawurlencode($tex)); + spip_log($url = $server . '?' . rawurlencode($tex)); include_spip('inc/distant'); - recuperer_page($url,$fichier); + recuperer_page($url, $fichier); } } @@ -56,61 +59,95 @@ function produire_image_math($tex) { if (@file_exists($fichier)) { // MathML - if ($traiter_math == 'mathml') { - return join(file("$fichier"),""); - } - - // TeX + if ($GLOBALS['traiter_math'] == 'mathml') { + return join(file("$fichier"), ""); + } // TeX else { - list(,,,$size) = @getimagesize($fichier); - $alt = "alt=\"$tex\" title=\"$tex\""; + list(, , , $size) = @getimagesize($fichier); + $alt = "alt=\"$tex\" title=\"$tex\""; + return ""; } - } - else // pas de fichier + } else // pas de fichier + { return "$tex"; + } } -// Fonction appelee par propre() s'il repere un mode -// http://doc.spip.org/@traiter_math -function traiter_math($letexte, $source='') { +/** + * Active la recherche et l'affichage d'expressions mathématiques dans le texte + * transmis, dans tous les textes à l'intérieur d'une balise ``. + * + * Encadrer un texte de balises ` ... ` active la recherche + * d'expressions mathématiques écrites entre caractères `$` au sein de ce texte : + * + * - `$$expression$$` traitera l'expression comme un paragraphe centré (p) + * - `$expression$` traitera l'expression comme un texte en ligne (span) + * + * Un serveur distant calculera une image à partir de l'expression mathématique + * donnée. Cette image est mise en cache localement (local/cache-Tex) + * + * @note + * Si cette fonction est appelée depuis `propre()` alors un échappement + * des caractères `&` en `&` a été réalisé, qu'il faut redéfaire + * dans les expressions mathématiques trouvées (utiliser l'option + * `$defaire_amp` à true pour cela). + * + * @link http://www.spip.net/3016 + * @uses produire_image_math() + * @uses code_echappement() + * + * @param string $letexte + * @param string $source + * @param bool $defaire_amp + * true pour passer les `&` en `&` dans les expressions mathématiques. + * @return string + */ +function traiter_math($letexte, $source = '', $defaire_amp = false) { $texte_a_voir = $letexte; while (($debut = strpos($texte_a_voir, "")) !== false) { - if (!$fin = strpos($texte_a_voir,"")) + if (!$fin = strpos($texte_a_voir, "")) { $fin = strlen($texte_a_voir); + } $texte_debut = substr($texte_a_voir, 0, $debut); $texte_milieu = substr($texte_a_voir, - $debut+strlen(""), $fin-$debut-strlen("")); + $debut + strlen(""), $fin - $debut - strlen("")); $texte_fin = substr($texte_a_voir, - $fin+strlen(""), strlen($texte_a_voir)); + $fin + strlen(""), strlen($texte_a_voir)); // Les doubles $$x^2$$ en mode 'div' - while((preg_match(",[$][$]([^$]+)[$][$],",$texte_milieu, $regs))) { - $echap = "\n

      ".produire_image_math($regs[1])."

      \n"; + while ((preg_match(",[$][$]([^$]+)[$][$],", $texte_milieu, $regs))) { + $expression = $regs[1]; + if ($defaire_amp) { + $expression = str_replace('&', '&', $expression); + } + $echap = "\n

      " . produire_image_math($expression) . "

      \n"; $pos = strpos($texte_milieu, $regs[0]); - $texte_milieu = substr($texte_milieu,0,$pos) + $texte_milieu = substr($texte_milieu, 0, $pos) . code_echappement($echap, $source) - . substr($texte_milieu,$pos+strlen($regs[0])); + . substr($texte_milieu, $pos + strlen($regs[0])); } // Les simples $x^2$ en mode 'span' - while((preg_match(",[$]([^$]+)[$],",$texte_milieu, $regs))) { - $echap = produire_image_math($regs[1]); + while ((preg_match(",[$]([^$]+)[$],", $texte_milieu, $regs))) { + $expression = $regs[1]; + if ($defaire_amp) { + $expression = str_replace('&', '&', $expression); + } + $echap = produire_image_math($expression); $pos = strpos($texte_milieu, $regs[0]); - $texte_milieu = substr($texte_milieu,0,$pos) + $texte_milieu = substr($texte_milieu, 0, $pos) . code_echappement($echap, $source) - . substr($texte_milieu,$pos+strlen($regs[0])); + . substr($texte_milieu, $pos + strlen($regs[0])); } - $texte_a_voir = $texte_debut.$texte_milieu.$texte_fin; + $texte_a_voir = $texte_debut . $texte_milieu . $texte_fin; } return $texte_a_voir; } - -?> diff --git a/www/ecrire/inc/meta.php b/www/ecrire/inc/meta.php index b50f00f6..e8e736c7 100644 --- a/www/ecrire/inc/meta.php +++ b/www/ecrire/inc/meta.php @@ -3,94 +3,127 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des meta de configuration + * + * @package SPIP\Core\Configuration + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} // Les parametres generaux du site sont dans une table SQL; // Recopie dans le tableau PHP global meta, car on en a souvent besoin // duree maximale du cache. Le double pour l'antidater -define('_META_CACHE_TIME', 1<<24); +define('_META_CACHE_TIME', 1 << 24); -// http://doc.spip.org/@inc_meta_dist -function inc_meta_dist($table='meta') -{ +// http://code.spip.net/@inc_meta_dist +function inc_meta_dist($table = 'meta') { // Lire les meta, en cache si present, valide et lisible // en cas d'install ne pas faire confiance au meta_cache eventuel $cache = cache_meta($table); - if ((_request('exec')!=='install' OR !test_espace_prive()) - AND $new = jeune_fichier($cache, _META_CACHE_TIME) - AND lire_fichier_securise($cache, $meta) - AND $meta = @unserialize($meta)) + if ((_request('exec') !== 'install' or !test_espace_prive()) + and $new = jeune_fichier($cache, _META_CACHE_TIME) + and lire_fichier_securise($cache, $meta) + and $meta = @unserialize($meta) + ) { $GLOBALS[$table] = $meta; + } - if (isset($GLOBALS[$table]['touch']) - AND ($GLOBALS[$table]['touch'] _RENOUVELLE_ALEA + $GLOBALS['meta']['alea_ephemere_date'])) { + and $GLOBALS[$table] + and (time() > _RENOUVELLE_ALEA + (isset($GLOBALS['meta']['alea_ephemere_date']) ? $GLOBALS['meta']['alea_ephemere_date'] : 0)) + ) { // si on n'a pas l'acces en ecriture sur le cache, // ne pas renouveller l'alea sinon le cache devient faux if (supprimer_fichier($cache)) { include_spip('inc/acces'); renouvelle_alea(); - $new = false; - } else spip_log("impossible d'ecrire dans " . $cache); + $new = false; + } else { + spip_log("impossible d'ecrire dans " . $cache); + } } // et refaire le cache si on a du lire en base - if (!$new) touch_meta(false, $table); + if (!$new) { + touch_meta(false, $table); + } } // fonctions aussi appelees a l'install ==> spip_query en premiere requete // pour eviter l'erreur fatale (serveur non encore configure) -// http://doc.spip.org/@lire_metas -function lire_metas($table='meta') { +// http://code.spip.net/@lire_metas +function lire_metas($table = 'meta') { if ($result = spip_query("SELECT nom,valeur FROM spip_$table")) { include_spip('base/abstract_sql'); $GLOBALS[$table] = array(); - while ($row = sql_fetch($result)) + while ($row = sql_fetch($result)) { $GLOBALS[$table][$row['nom']] = $row['valeur']; - sql_free($result); + } + sql_free($result); - if (!$GLOBALS[$table]['charset'] - OR $GLOBALS[$table]['charset']=='_DEFAULT_CHARSET' // hum, correction d'un bug ayant abime quelques install - ) - ecrire_meta('charset', _DEFAULT_CHARSET, NULL, $table); + if (!isset($GLOBALS[$table]['charset']) + or !$GLOBALS[$table]['charset'] + or $GLOBALS[$table]['charset'] == '_DEFAULT_CHARSET' // hum, correction d'un bug ayant abime quelques install + ) { + ecrire_meta('charset', _DEFAULT_CHARSET, null, $table); + } // noter cette table de configuration dans les meta de SPIP - if ($table!=='meta') { - $liste = unserialize($GLOBALS['meta']['tables_config']); - if (!$liste) + if ($table !== 'meta') { + $liste = array(); + if (isset($GLOBALS['meta']['tables_config'])) { + $liste = unserialize($GLOBALS['meta']['tables_config']); + } + if (!$liste) { $liste = array(); + } if (!in_array($table, $liste)) { $liste[] = $table; ecrire_meta('tables_config', serialize($liste)); } } } - return $GLOBALS[$table]; + + return isset($GLOBALS[$table]) ? $GLOBALS[$table] : null; } -// Mettre en cache la liste des meta, sauf les valeurs sensibles -// pour qu'elles ne soient pas visibiles dans un fichier.souvent en 777 -// http://doc.spip.org/@touch_meta -function touch_meta($antidate= false, $table='meta'){ + +/** + * Mettre en cache la liste des meta, sauf les valeurs sensibles + * pour qu'elles ne soient pas visibiles dans un fichier (souvent en 777) + * + * @param bool|int $antidate + * Date de modification du fichier à appliquer si indiqué (timestamp) + * @param string $table + * Table SQL d'enregistrement des meta. + **/ +function touch_meta($antidate = false, $table = 'meta') { $file = cache_meta($table); - if (!$antidate OR !@touch($file, $antidate)) { + if (!$antidate or !@touch($file, $antidate)) { $r = $GLOBALS[$table]; unset($r['alea_ephemere']); unset($r['alea_ephemere_ancien']); @@ -98,70 +131,128 @@ function touch_meta($antidate= false, $table='meta'){ // mais le sortir deu cache meta implique une requete sql des qu'on a un form dynamique // meme si son squelette est en cache //unset($r['secret_du_site']); - if ($antidate) $r['touch']= $antidate; + if ($antidate) { + $r['touch'] = $antidate; + } ecrire_fichier_securise($file, serialize($r)); } } -// http://doc.spip.org/@effacer_meta -function effacer_meta($nom, $table='meta') { +/** + * Supprime une meta + * + * @see ecrire_config() + * @see effacer_config() + * @see lire_config() + * + * @param string $nom + * Nom de la meta + * @param string $table + * Table SQL d'enregistrement de la meta. + **/ +function effacer_meta($nom, $table = 'meta') { // section critique sur le cache: // l'invalider avant et apres la MAJ de la BD // c'est un peu moins bien qu'un vrai verrou mais ca suffira // et utiliser une statique pour eviter des acces disques a repetition static $touch = array(); - $antidate = time() - (_META_CACHE_TIME<<4); - if (!isset($touch[$table])) {touch_meta($antidate, $table);} - sql_delete('spip_' . $table, "nom='$nom'"); + $antidate = time() - (_META_CACHE_TIME << 4); + if (!isset($touch[$table])) { + touch_meta($antidate, $table); + } + sql_delete('spip_' . $table, "nom='$nom'", '', 'continue'); unset($GLOBALS[$table][$nom]); - if (!isset($touch[$table])) {touch_meta($antidate, $table); $touch[$table] = false;} + if (!isset($touch[$table])) { + touch_meta($antidate, $table); + $touch[$table] = false; + } } -// http://doc.spip.org/@ecrire_meta -function ecrire_meta($nom, $valeur, $importable = NULL, $table='meta') { +/** + * Met à jour ou crée une meta avec la clé et la valeur indiquée + * + * @see ecrire_config() + * @see effacer_config() + * @see lire_config() + * + * @param string $nom + * Nom de la meta + * @param string $valeur + * Valeur à enregistrer + * @param bool|null $importable + * Cette meta s'importe-elle avec une restauration de sauvegarde ? + * @param string $table + * Table SQL d'enregistrement de la meta. + **/ +function ecrire_meta($nom, $valeur, $importable = null, $table = 'meta') { static $touch = array(); - if (!$nom) return; + if (!$nom) { + return; + } include_spip('base/abstract_sql'); - $res = sql_select("*",'spip_' . $table,"nom=" . sql_quote($nom),'','','','','','continue'); + $res = sql_select("*", 'spip_' . $table, "nom=" . sql_quote($nom), '', '', '', '', '', 'continue'); // table pas encore installee, travailler en php seulement if (!$res) { $GLOBALS[$table][$nom] = $valeur; + return; } $row = sql_fetch($res); - sql_free($res); + sql_free($res); // ne pas invalider le cache si affectation a l'identique // (tant pis si impt aurait du changer) - if ($row AND $valeur == $row['valeur'] AND $GLOBALS[$table][$nom] == $valeur) return; + if ($row and $valeur == $row['valeur'] + and isset($GLOBALS[$table][$nom]) + and $GLOBALS[$table][$nom] == $valeur + ) { + return; + } $GLOBALS[$table][$nom] = $valeur; // cf effacer pour comprendre le double touch - $antidate = time() - (_META_CACHE_TIME<<1); - if (!isset($touch[$table])) {touch_meta($antidate, $table);} - $r = array('nom' => $nom, 'valeur' => $valeur); + $antidate = time() - (_META_CACHE_TIME << 1); + if (!isset($touch[$table])) { + touch_meta($antidate, $table); + } + $r = array('nom' => sql_quote($nom, '', 'text'), 'valeur' => sql_quote($valeur, '', 'text')); // Gaffe aux tables sans impt (vieilles versions de SPIP notamment) - if ($importable AND isset($row['impt'])) $r['impt'] = $importable; + // ici on utilise pas sql_updateq et sql_insertq pour ne pas provoquer trop tot + // de lecture des descriptions des tables + if ($importable and isset($row['impt'])) { + $r['impt'] = sql_quote($importable, '', 'text'); + } if ($row) { - sql_updateq('spip_' . $table, $r,"nom=" . sql_quote($nom)); + sql_update('spip_' . $table, $r, "nom=" . sql_quote($nom)); } else { - sql_insertq('spip_' . $table, $r); + sql_insert('spip_' . $table, "(" . join(',', array_keys($r)) . ")", "(" . join(',', array_values($r)) . ")"); + } + if (!isset($touch[$table])) { + touch_meta($antidate, $table); + $touch[$table] = false; } - if (!isset($touch[$table])) {touch_meta($antidate, $table); $touch[$table] = false;} } -function cache_meta($table='meta') -{ - return ($table=='meta') ? _FILE_META : (_DIR_CACHE . $table . '.php'); +/** + * Retourne le nom du fichier cache d'une table SQL de meta + * + * @param string $table + * Table SQL d'enregistrement des meta. + * @return string + * Nom du fichier cache + **/ +function cache_meta($table = 'meta') { + return ($table == 'meta') ? _FILE_META : (_DIR_CACHE . $table . '.php'); } /** - * Une fonction pour installer une table de configuration supplementaire + * Installer une table de configuration supplementaire + * * @param string $table */ function installer_table_meta($table) { - $trouver_table = charger_fonction('trouver_table','base'); + $trouver_table = charger_fonction('trouver_table', 'base'); if (!$trouver_table("spip_$table")) { include_spip('base/auxiliaires'); include_spip('base/create'); @@ -172,21 +263,23 @@ function installer_table_meta($table) { } /** - * Une fonction pour supprimer une table de configuration supplementaire - * si $force=true, on ne verifie pas qu'elle est bien vide - * + * Supprimer une table de configuration supplémentaire + * + * Si $force=true, on ne verifie pas qu'elle est bien vide + * * @param string $table * @param bool $force */ -function supprimer_table_meta($table, $force=false) { - if ($table=='meta') return; // interdit ! +function supprimer_table_meta($table, $force = false) { + if ($table == 'meta') { + return; + } // interdit ! - if ($force OR !sql_countsel("spip_$table")) { + if ($force or !sql_countsel("spip_$table")) { unset($GLOBALS[$table]); sql_drop_table("spip_$table"); // vider le cache des tables - $trouver_table = charger_fonction('trouver_table','base'); + $trouver_table = charger_fonction('trouver_table', 'base'); $trouver_table(''); } } -?> diff --git a/www/ecrire/inc/minipres.php b/www/ecrire/inc/minipres.php index 63249d5b..29ac1130 100644 --- a/www/ecrire/inc/minipres.php +++ b/www/ecrire/inc/minipres.php @@ -3,147 +3,214 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Présentation des pages d'installation et d'erreurs + * + * @package SPIP\Core\Minipres + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/headers'); include_spip('inc/texte'); //inclue inc/lang et inc/filtres -// -// Presentation des pages d'installation et d'erreurs -// /** - * http://doc.spip.org/@install_debut_html + * Retourne le début d'une page HTML minimale (de type installation ou erreur) + * + * Le contenu de CSS minimales (reset.css, clear.css, minipres.css) est inséré + * dans une balise script inline (compactée si possible) + * + * @uses utiliser_langue_visiteur() + * @uses http_no_cache() + * @uses html_lang_attributes() + * @uses compacte() si le plugin compresseur est présent + * @uses url_absolue_css() * * @param string $titre + * Titre. `AUTO`, indique que l'on est dans le processus d'installation de SPIP * @param string $onLoad + * Attributs pour la balise `` * @param bool $all_inline - * inliner les css et js dans la page (limiter le nombre de hits) + * Inliner les css et js dans la page (limiter le nombre de hits) * @return string + * Code HTML */ function install_debut_html($titre = 'AUTO', $onLoad = '', $all_inline = false) { - global $spip_lang_right,$spip_lang_left; - + utiliser_langue_visiteur(); http_no_cache(); - if ($titre=='AUTO') - $titre=_T('info_installation_systeme_publication'); + if ($titre == 'AUTO') { + $titre = _T('info_installation_systeme_publication'); + } # le charset est en utf-8, pour recuperer le nom comme il faut # lors de l'installation - if (!headers_sent()) + if (!headers_sent()) { header('Content-Type: text/html; charset=utf-8'); + } $css = ""; - $files = array('reset.css','clear.css','minipres.css'); - if ($all_inline){ + $files = array('reset.css', 'clear.css', 'minipres.css'); + if ($all_inline) { // inliner les CSS (optimisation de la page minipres qui passe en un seul hit a la demande) - foreach ($files as $name){ + foreach ($files as $name) { $file = direction_css(find_in_theme($name)); - if (function_exists("compacte")) + if (function_exists("compacte")) { $file = compacte($file); - else + } else { $file = url_absolue_css($file); // precaution - lire_fichier($file,$c); + } + lire_fichier($file, $c); $css .= $c; } - $css = ""; - } - else{ - foreach ($files as $name){ + $css = ""; + } else { + foreach ($files as $name) { $file = direction_css(find_in_theme($name)); $css .= "\n"; } } // au cas ou minipres() est appele avant spip_initialisation_suite() - if (!defined('_DOCTYPE_ECRIRE')) define('_DOCTYPE_ECRIRE', ''); - return _DOCTYPE_ECRIRE. - html_lang_attributes(). - "\n". - "". - textebrut($titre). - "\n". - "\n". - $css . -" - + if (!defined('_DOCTYPE_ECRIRE')) { + define('_DOCTYPE_ECRIRE', ''); + } + + return _DOCTYPE_ECRIRE . + html_lang_attributes() . + "\n" . + "" . + textebrut($titre) . + "\n" . + "\n" . + $css . + " +
      -

      ". - $titre . - "

      +

      " . + $titre . + "

      \n"; } -// http://doc.spip.org/@install_fin_html +/** + * Retourne la fin d'une page HTML minimale (de type installation ou erreur) + * + * @return string Code HTML + */ function install_fin_html() { return "\n\t
      \n\t
      \n\n"; } /** - * http://doc.spip.org/@minipres + * Retourne une page HTML contenant, dans une présentation minimale, + * le contenu transmis dans `$titre` et `$corps`. + * + * Appelée pour afficher un message d’erreur (l’utilisateur n’a pas + * accès à cette page par exemple). + * + * Lorsqu’aucun argument n’est transmis, un header 403 est renvoyé, + * ainsi qu’un message indiquant une interdiction d’accès. + * + * @example + * ``` + * include_spip('inc/minipres'); + * if (!autoriser('configurer')) { + * echo minipres(); + * exit; + * } + * ``` + * @uses install_debut_html() + * @uses install_fin_html() * * @param string $titre - * titre de la page + * Titre de la page * @param string $corps - * corps de la page - * @param string $onload - * attribut onload de - * @param bool $all_inline - * inliner les css et js dans la page (limiter le nombre de hits) + * Corps de la page + * @param array $options + * string onload : Attribut onload de `` + * bool all_inline : Inliner les css et js dans la page (limiter le nombre de hits) + * int status : status de la page * @return string + * HTML de la page */ -function minipres($titre='', $corps="", $onload='', $all_inline = false) -{ - if (!defined('_AJAX')) define('_AJAX', false); // par securite +function minipres($titre = '', $corps = "", $options = array()) { + + // compat signature old + // minipres($titre='', $corps="", $onload='', $all_inline = false) + $args = func_get_args(); + if (isset($args[2]) and is_string($args[2])) { + $options = array('onload' => $args[2]); + } + if (isset($args[3])) { + $options['all_inline'] = $args[3]; + } + + $options = array_merge(array( + 'onload' => '', + 'all_inline' => false, + ), $options); + + if (!defined('_AJAX')) { + define('_AJAX', false); + } // par securite if (!$titre) { - if (!_AJAX) - http_status(403); + if (!isset($options['status'])) { + $options['status'] = 403; + } if (!$titre = _request('action') - AND !$titre = _request('exec') - AND !$titre = _request('page')) + and !$titre = _request('exec') + and !$titre = _request('page') + ) { $titre = '?'; + } $titre = spip_htmlspecialchars($titre); $titre = ($titre == 'install') - ? _T('avis_espace_interdit') - : $titre . ' : '. _T('info_acces_interdit'); + ? _T('avis_espace_interdit') + : $titre . ' : ' . _T('info_acces_interdit'); $statut = isset($GLOBALS['visiteur_session']['statut']) ? $GLOBALS['visiteur_session']['statut'] : ''; - $nom = isset($GLOBALS['visiteur_session']['nom']) ? $GLOBALS['visiteur_session']['nom'] : ''; + $nom = isset($GLOBALS['visiteur_session']['nom']) ? $GLOBALS['visiteur_session']['nom'] : ''; if ($statut != '0minirezo') { $titre = _T('info_acces_interdit'); } - $corps = generer_form_ecrire('accueil', '','', - $statut ? _T('public:accueil_site') : _T('public:lien_connecter') + $corps = generer_form_ecrire('accueil', '', '', + $statut ? _T('public:accueil_site') : _T('public:lien_connecter') ); spip_log($nom . " $titre " . $_SERVER['REQUEST_URI']); } - if (!_AJAX) - return install_debut_html($titre, $onload, $all_inline) + if (!_AJAX) { + if (isset($options['status'])) { + http_status($options['status']); + } + + return install_debut_html($titre, $options['onload'], $options['all_inline']) . $corps . install_fin_html(); - else { + } else { include_spip('inc/headers'); include_spip('inc/actions'); - $url = self('&',true); - foreach ($_POST as $v => $c) + $url = self('&', true); + foreach ($_POST as $v => $c) { $url = parametre_url($url, $v, $c, '&'); - ajax_retour("
      ".$titre . redirige_formulaire($url)."
      ",false); + } + ajax_retour("
      " . $titre . redirige_formulaire($url) . "
      ", false); } } -?> diff --git a/www/ecrire/inc/modifier.php b/www/ecrire/inc/modifier.php index 872a4779..94c8a71e 100644 --- a/www/ecrire/inc/modifier.php +++ b/www/ecrire/inc/modifier.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -13,14 +13,16 @@ /** * Fonctions d'aides pour les fonctions d'objets de modification de contenus * - * @package SPIP\Objets\Modifications -**/ + * @package SPIP\Core\Objets\Modifications + **/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Collecte des champs postés - * + * * Fonction générique pour la collecte des posts * dans action/editer_xxx * @@ -34,36 +36,36 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * @param bool $tous * true : Recupère tous les champs de white_list meme ceux n'ayant pas ete postés * @return array - * Tableau des champs et valeurs collectées + * Tableau des champs et valeurs collectées */ -function collecter_requests($white_list, $black_list, $set=null, $tous=false){ +function collecter_requests($white_list, $black_list = array(), $set = null, $tous = false) { $c = $set; - if (!$c){ + if (!$c) { $c = array(); - foreach($white_list as $champ) { + foreach ($white_list as $champ) { // on ne collecte que les champs reellement envoyes par defaut. // le cas d'un envoi de valeur NULL peut du coup poser probleme. $val = _request($champ); - if ($tous OR $val !== NULL) { + if ($tous or $val !== null) { $c[$champ] = $val; } } // on ajoute toujours la lang en saisie possible // meme si pas prevu au depart pour l'objet concerne - if ($l = _request('changer_lang')){ + if ($l = _request('changer_lang')) { $c['lang'] = $l; } } - foreach($black_list as $champ) { + foreach ($black_list as $champ) { unset($c[$champ]); } - + return $c; } /** * Modifie le contenu d'un objet - * + * * Fonction generique pour l'API de modification de contenu, qui se * charge entre autres choses d'appeler les pipelines pre_edition * et post_edition @@ -94,23 +96,25 @@ function collecter_requests($white_list, $black_list, $set=null, $tous=false){ * - chaîne vide : Vide si tout s'est bien passé * - chaîne : Texte d'un message d'erreur */ -function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur='') { +function objet_modifier_champs($objet, $id_objet, $options, $c = null, $serveur = '') { if (!$id_objet = intval($id_objet)) { spip_log('Erreur $id_objet non defini', 'warn'); + return _T('erreur_technique_enregistrement_impossible'); } include_spip('inc/filtres'); - $table_objet = table_objet($objet,$serveur); - $spip_table_objet = table_objet_sql($objet,$serveur); - $id_table_objet = id_table_objet($objet,$serveur); + $table_objet = table_objet($objet, $serveur); + $spip_table_objet = table_objet_sql($objet, $serveur); + $id_table_objet = id_table_objet($objet, $serveur); $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($spip_table_objet, $serveur); // Appels incomplets (sans $c) if (!is_array($c)) { - spip_log('erreur appel objet_modifier_champs('.$objet.'), manque $c'); + spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c'); + return _T('erreur_technique_enregistrement_impossible'); } @@ -125,9 +129,9 @@ function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur='' unset($c['id_secteur']); // Gerer les champs non vides - if (isset($options['nonvide']) AND is_array($options['nonvide'])) { + if (isset($options['nonvide']) and is_array($options['nonvide'])) { foreach ($options['nonvide'] as $champ => $sinon) { - if ($c[$champ] === '') { + if (isset($c[$champ]) and $c[$champ] === '') { $c[$champ] = $sinon; } } @@ -138,9 +142,11 @@ function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur='' // TODO: ici aussi on peut valider les contenus // en fonction du type $champs = array(); - foreach($desc['field'] as $champ => $ignore) - if (isset($c[$champ])) + foreach ($desc['field'] as $champ => $ignore) { + if (isset($c[$champ])) { $champs[$champ] = $c[$champ]; + } + } // Nettoyer les valeurs $champs = array_map('corriger_caracteres', $champs); @@ -152,7 +158,7 @@ function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur='' 'table' => $spip_table_objet, // compatibilite 'table_objet' => $table_objet, 'spip_table_objet' => $spip_table_objet, - 'type' =>$objet, + 'type' => $objet, 'id_objet' => $id_objet, 'champs' => isset($options['champs']) ? $options['champs'] : array(), // [doc] c'est quoi ? 'serveur' => $serveur, @@ -162,35 +168,38 @@ function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur='' ) ); - if (!$champs) return false; + if (!$champs) { + return false; + } // marquer le fait que l'objet est travaille par toto a telle date if ($GLOBALS['meta']['articles_modif'] != 'non') { include_spip('inc/drapeau_edition'); - signale_edition ($id_objet, $GLOBALS['visiteur_session'], $objet); + signale_edition($id_objet, $GLOBALS['visiteur_session'], $objet); } // Verifier si les mises a jour sont pertinentes, datees, en conflit etc include_spip('inc/editer'); - if (!isset($options['data']) OR is_null($options['data'])){ + if (!isset($options['data']) or is_null($options['data'])){ $options['data'] = &$_POST; } $conflits = controler_md5($champs, $options['data'], $objet, $id_objet, $serveur); // cas hypothetique : normalement inc/editer verifie en amont le conflit edition // et gere l'interface // ici on ne renvoie donc qu'un messsage d'erreur, au cas ou on y arrive quand meme - if ($conflits) + if ($conflits) { return _T('titre_conflit_edition'); + } if ($champs) { // cas particulier de la langue : passer par instituer_langue_objet - if (isset($champs['lang'])){ - if ($changer_lang=$champs['lang']){ + if (isset($champs['lang'])) { + if ($changer_lang = $champs['lang']) { $id_rubrique = 0; - if ($desc['field']['id_rubrique']){ - $parent = ($objet=='rubrique')?'id_parent':'id_rubrique'; - $id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=".intval($id_objet)); + if (isset($desc['field']['id_rubrique'])) { + $parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique'; + $id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . intval($id_objet)); } $instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action'); $champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur); @@ -204,42 +213,59 @@ function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur='' // la modif peut avoir lieu // faut-il ajouter date_modif ? - if (isset($options['date_modif']) AND $options['date_modif'] - AND !isset($champs[$options['date_modif']])) + if (isset($options['date_modif']) and $options['date_modif'] + and !isset($champs[$options['date_modif']]) + ) { $champs[$options['date_modif']] = date('Y-m-d H:i:s'); + } // allez on commit la modif - sql_updateq($spip_table_objet, $champs, "$id_table_objet=".intval($id_objet), $serveur); + sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . intval($id_objet), $serveur); // on verifie si elle est bien passee - $moof = sql_fetsel(array_keys($champs), $spip_table_objet, "$id_table_objet=".intval($id_objet), array(), array(), '', array(), $serveur); + $moof = sql_fetsel(array_keys($champs), $spip_table_objet, "$id_table_objet=" . intval($id_objet), array(), array(), + '', array(), $serveur); // si difference entre les champs, reperer les champs mal enregistres if ($moof != $champs) { $liste = array(); - foreach($moof as $k=>$v) + foreach ($moof as $k => $v) { if ($v !== $champs[$k] // ne pas alerter si le champ est numerique est que les valeurs sont equivalentes - AND (!is_numeric($v) OR intval($v)!=intval($champs[$k])) - ) { + and (!is_numeric($v) or intval($v) != intval($champs[$k])) + ) { $liste[] = $k; $conflits[$k]['post'] = $champs[$k]; $conflits[$k]['save'] = $v; + + // cas specifique MySQL+emoji : si l'un est la + // conversion utf8_noplanes de l'autre alors c'est OK + if (defined('_MYSQL_NOPLANES') && _MYSQL_NOPLANES) { + include_spip('inc/charsets'); + if ($v == utf8_noplanes($champs[$k])) { + array_pop($liste); + } + } } + } // si un champ n'a pas ete correctement enregistre, loger et retourner une erreur // c'est un cas exceptionnel - if (count($liste)){ - spip_log("Erreur enregistrement en base $objet/$id_objet champs :".var_export($conflits,true),'modifier.'._LOG_CRITIQUE); - return _T('erreur_technique_enregistrement_champs',array('champs'=>"'".implode("','",$liste)."'")); + if (count($liste)) { + spip_log("Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true), + 'modifier.' . _LOG_CRITIQUE); + + return _T('erreur_technique_enregistrement_champs', + array('champs' => "'" . implode("','", $liste) . "'")); } } // Invalider les caches if (isset($options['invalideur']) and $options['invalideur']) { include_spip('inc/invalideur'); - if (is_array($options['invalideur'])) - array_map('suivre_invalideur',$options['invalideur']); - else + if (is_array($options['invalideur'])) { + array_map('suivre_invalideur', $options['invalideur']); + } else { suivre_invalideur($options['invalideur']); + } } // Notifications, gestion des revisions... @@ -250,7 +276,7 @@ function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur='' 'table' => $spip_table_objet, 'table_objet' => $table_objet, 'spip_table_objet' => $spip_table_objet, - 'type' =>$objet, + 'type' => $objet, 'id_objet' => $id_objet, 'champs' => isset($options['champs']) ? $options['champs'] : array(), // [doc] kesako ? 'serveur' => $serveur, @@ -264,8 +290,9 @@ function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur='' // journaliser l'affaire // message a affiner :-) include_spip('inc/filtres_mini'); - $qui = ((isset($GLOBALS['visiteur_session']['nom']) AND $GLOBALS['visiteur_session']['nom'])?$GLOBALS['visiteur_session']['nom']:$GLOBALS['ip']); - journal(_L($qui.' a édité l’'.$objet.' '.$id_objet.' ('.join('+',array_diff(array_keys($champs), array('date_modif'))).')'), array( + $qui = isset($GLOBALS['visiteur_session']['nom']) and $GLOBALS['visiteur_session']['nom'] ? $GLOBALS['visiteur_session']['nom'] : $GLOBALS['ip']; + journal(_L($qui . ' a édité l’' . $objet . ' ' . $id_objet . ' (' . join('+', + array_diff(array_keys($champs), array('date_modif'))) . ')'), array( 'faire' => 'modifier', 'quoi' => $objet, 'id' => $id_objet @@ -276,7 +303,7 @@ function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur='' /** * Modifie un contenu - * + * * Dépreciée : * Fonction générique pour l'API de modification de contenu * @@ -295,20 +322,21 @@ function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur='' * true si quelque chose est modifié correctement * false sinon (erreur ou aucun champ modifié) */ -function modifier_contenu($type, $id, $options, $c=null, $serveur='') { +function modifier_contenu($type, $id, $options, $c = null, $serveur = '') { $res = objet_modifier_champs($type, $id, $options, $c, $serveur); - return ($res===''?true:false); + + return ($res === '' ? true : false); } /** * Crée une modification d'un objet - * + * * Wrapper pour remplacer tous les obsoletes revision_xxx * * @deprecated * Utiliser objet_modifier(); - * @see objet_modifier(); - * + * @uses objet_modifier() + * * @param string $objet * Nom de l'objet * @param int $id_objet @@ -317,11 +345,9 @@ function modifier_contenu($type, $id, $options, $c=null, $serveur='') { * Couples des champs/valeurs modifiées * @return mixed|string */ -function revision_objet($objet,$id_objet,$c=null){ +function revision_objet($objet, $id_objet, $c = null) { $objet = objet_type($objet); // securite include_spip('action/editer_objet'); - return objet_modifier($objet,$id_objet,$c); -} - -?> + return objet_modifier($objet, $id_objet, $c); +} diff --git a/www/ecrire/inc/nfslock.php b/www/ecrire/inc/nfslock.php index 0b6de6ad..0389d24f 100644 --- a/www/ecrire/inc/nfslock.php +++ b/www/ecrire/inc/nfslock.php @@ -1,11 +1,21 @@ - * rewritten by: Alexis Rosen - * rewritten by: Cedric Morin for php&SPIP + * @package SPIP\Core\NFS + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +include_spip('inc/acces'); +define('_DEFAULT_LOCKTIME', 60); +define('_NAME_LOCK', 'spip_nfs_lock'); + +/** + * Crée un verrou pour NFS * * (Excerpts from Chuck's notes: * this becomes complex, due to our dear friend, the NFS mounted mail spool. @@ -43,9 +53,9 @@ * * args: path = path to directory of lock file (/net/u/1/a/alexis/.mailspool) * namelock = file name of lock file (alexis.lock) - * max_age = age of lockfile, in seconds, after which the lock is stale. - * stale locks are always broken. Defaults to DEFAULT_LOCKTIME - * if zero. Panix mail locks go stale at 300 seconds, the default. + * max_age = age of lockfile, in seconds, after which the lock is stale. + * stale locks are always broken. Defaults to DEFAULT_LOCKTIME + * if zero. Panix mail locks go stale at 300 seconds, the default. * notify = 1 if we should tell stdout that we're sleeping on a lock * * Returns the time that the lock was created on the other system. This is @@ -82,36 +92,38 @@ * * Change comments drastically. * + * @author Chuck Cranor (original author) + * @author Alexis Rosen (rewritter) + * @author Cedric Morin (rewritter for php&SPIP) + * + * @param string $fichier Chemin du fichier + * @param int $max_age Age maximum du verrou + * @return int|bool Timestamp du verrou, false si erreur */ +function spip_nfslock($fichier, $max_age = 0) { + $tries = 0; -if (!defined('_ECRIRE_INC_VERSION')) return; - -include_spip('inc/acces'); -define('_DEFAULT_LOCKTIME',60); -define('_NAME_LOCK','spip_nfs_lock'); + if (!$max_age) { + $max_age = _DEFAULT_LOCKTIME; + } + $lock_file = _DIR_TMP . _NAME_LOCK . '-' . substr(md5($fichier), 0, 8); -// http://doc.spip.org/@spip_nfslock -function spip_nfslock($fichier,$max_age=0) { - $tries = 0; - - if (!$max_age) $max_age = _DEFAULT_LOCKTIME; - $lock_file = _DIR_TMP . _NAME_LOCK . "-" . substr(md5($fichier),0,8); - /* * 1. create a tmp file with a psuedo random file name. we also make * tpath which is a buffer to store the full pathname of the tmp file. */ $id = creer_uniqid(); - $tpath = _DIR_TMP."slock.$id"; + $tpath = _DIR_TMP . "slock.$id"; $tmpfd = @fopen($tpath, 'w'); // hum, le 'x' necessite php4,3,2 ... - if (!$tmpfd) { /* open failed */ + if (!$tmpfd) { /* open failed */ @fclose($tmpfd); spip_unlink($tpath); + return false; //NFSL_SYSF } - + /* * 2. make fullpath, a buffer for the full pathname of the lock file. * then start looping trying to lock it @@ -126,11 +138,13 @@ function spip_nfslock($fichier,$max_age=0) { if (link($tpath, $lock_file) == 1) { spip_unlink($tpath); /* got it! */ @fclose($tmpfd); - if (($our_tmp = lstat($lock_file))==false) { /* stat failed... shouldn't happen */ + if (($our_tmp = lstat($lock_file)) == false) { /* stat failed... shouldn't happen */ spip_unlink($lock_file); + return false; // (NFSL_SYSF); } - return($our_tmp['ctime']); + + return ($our_tmp['ctime']); } /* @@ -141,11 +155,12 @@ function spip_nfslock($fichier,$max_age=0) { */ $old_stat = lstat($lock_file); - if (@fputs($tmpfd, "zz", 2)!=2 || !$our_tmp=fstat($tmpfd)) - break; /* something bogus is going on */ + if (@fputs($tmpfd, 'zz', 2) != 2 || !$our_tmp = fstat($tmpfd)) { + break; + } /* something bogus is going on */ - if ($old_stat!=false && (($old_stat['ctime'] + $max_age) < $our_tmp['ctime'])) { + if ($old_stat != false && (($old_stat['ctime'] + $max_age) < $our_tmp['ctime'])) { spip_unlink($lock_file); /* break the stale lock */ $tries++; /* It is CRITICAL that we sleep after breaking @@ -153,7 +168,7 @@ function spip_nfslock($fichier,$max_age=0) { * another process and unlink it's newly- * created file. */ - sleep(1+rand(0,4)); + sleep(1 + rand(0, 4)); continue; } @@ -161,9 +176,9 @@ function spip_nfslock($fichier,$max_age=0) { * 5. try again */ - $tries++; - sleep(1+rand(0,4)); - } + $tries++; + sleep(1 + rand(0, 4)); + } /* * 6. give up, failure. @@ -171,14 +186,12 @@ function spip_nfslock($fichier,$max_age=0) { spip_unlink($tpath); @fclose($tmpfd); + return false; //(NFSL_LOCKED); } -/* - * function: nfsunlock - * author: Alexis Rosen - * - * Unlock an nfslock()ed file. +/** + * Unlock an nfslock()ed file * * This can get tricky because the lock may have expired (perhaps even * during a process that should be "atomic"). We have to make sure we don't @@ -189,9 +202,9 @@ function spip_nfslock($fichier,$max_age=0) { * args: path = path to directory of lock file (/net/u/1/a/alexis/.mailspool) * namelock = file name of lock file (alexis.lock) * max_age = age of lockfile, in seconds, after which the lock is stale. - * stale locks are always broken. Defaults to DEFAULT_LOCKTIME - * if zero. Panix mail locks go stale at 300 seconds, the default. - * birth = time the lock was created (as returned by nfslock()). + * stale locks are always broken. Defaults to DEFAULT_LOCKTIME + * if zero. Panix mail locks go stale at 300 seconds, the default. + * birth = time the lock was created (as returned by nfslock()). * * Returns NFSL_OK if successful, NFSL_LOST if the lock has been lost * legitimately (because more than max_age has passed since the lock was @@ -208,37 +221,47 @@ function spip_nfslock($fichier,$max_age=0) { * In practice, a return code of NFSL_LOST or NFSL_STOLEN will virtually never * happen unless someone is violating the locking protocol. * + * @author Alexis Rosen + * @see spip_nfslock() + * + * @param string $fichier Chemin du fichier + * @param bool $birth Timestamp de l'heure de création du verrou + * @param int $max_age Age maximum du verrou + * @param bool $test Mode de test + * return bool true si déverrouillé, false sinon */ - -// http://doc.spip.org/@spip_nfsunlock -function spip_nfsunlock($fichier, $birth, $max_age=0, $test = false) { +function spip_nfsunlock($fichier, $birth, $max_age = 0, $test = false) { $id = creer_uniqid(); - if (!$max_age) $max_age = _DEFAULT_LOCKTIME; + if (!$max_age) { + $max_age = _DEFAULT_LOCKTIME; + } /* * 1. Build a temp file and stat that to get an idea of what the server * thinks the current time is (our_tmp.st_ctime).. */ - $tpath = _DIR_TMP."stime.$id"; - $tmpfd = @fopen($tpath,'w'); - if ((!$tmpfd) - OR (@fputs($tmpfd, "zz", 2) != 2) - OR !($our_tmp = fstat($tmpfd))) { + $tpath = _DIR_TMP . "stime.$id"; + $tmpfd = @fopen($tpath, 'w'); + if ((!$tmpfd) + or (@fputs($tmpfd, 'zz', 2) != 2) + or !($our_tmp = fstat($tmpfd)) + ) { /* The open failed, or we can't write the file, or we can't stat it */ @fclose($tmpfd); spip_unlink($tpath); + return false; //(NFSL_SYSF); } - @fclose($tmpfd); /* We don't need this once we have our_tmp.st_ctime. */ + @fclose($tmpfd); /* We don't need this once we have our_tmp.st_ctime. */ spip_unlink($tpath); /* * 2. make fullpath, a buffer for the full pathname of the lock file */ - $lock_file = _DIR_TMP . _NAME_LOCK . "-" . substr(md5($fichier),0,8); + $lock_file = _DIR_TMP . _NAME_LOCK . '-' . substr(md5($fichier), 0, 8); /* * 3. If the ctime hasn't been modified, unlink the file and return. If the @@ -247,16 +270,21 @@ function spip_nfsunlock($fichier, $birth, $max_age=0, $test = false) { * tries to relock the file. */ - if ( ($old_stat=@lstat($lock_file)) /* stat succeeds so file is there */ - && ($old_stat['ctime'] == $birth)) { /* hasn't been modified since birth */ - if (!$test) - spip_unlink($lock_file); /* so the lock is ours to remove */ - if ($our_tmp['ctime'] >= $birth + $max_age){ /* the lock has expired */ - if (!$test) return false; //(NFSL_LOST); - sleep(1+(random(0,4))); /* so sleep a bit */ - } + if (($old_stat = @lstat($lock_file)) /* stat succeeds so file is there */ + && ($old_stat['ctime'] == $birth) + ) { /* hasn't been modified since birth */ + if (!$test) { + spip_unlink($lock_file); + } /* so the lock is ours to remove */ + if ($our_tmp['ctime'] >= $birth + $max_age) { /* the lock has expired */ + if (!$test) { + return false; + } //(NFSL_LOST); + sleep(1 + (random(0, 4))); /* so sleep a bit */ + } + return true;//(NFSL_OK); /* success */ - } + } /* * 4. Either ctime has been modified, or the entire lock file is missing. @@ -265,21 +293,17 @@ function spip_nfsunlock($fichier, $birth, $max_age=0, $test = false) { * someone else has grabbed the file, so return NFSL_LOST. */ - if ($our_tmp['ctime'] < $birth + $max_age) /* lock was stolen */ - return false; //(NFSL_STOLEN); + if ($our_tmp['ctime'] < $birth + $max_age) { /* lock was stolen */ + return false; + } //(NFSL_STOLEN); return false; //(NFSL_LOST); /* The lock must have expired first. */ } -/* - * function: nfslock_test - * author: Alexis Rosen - * +/** * Test a lock to see if it's still valid. * - * See the comments in nfsunlock() about lost and stolen locks. - * * Args, return codes, and behavior are identical to nfsunlock except * that nfslock_test doesn't remove the lock. NFSL_OK means the lock is * good, NFLS_LOST and NFSL_STOLEN means it's bad, and NFSL_SYSF means @@ -287,11 +311,15 @@ function spip_nfsunlock($fichier, $birth, $max_age=0, $test = false) { * * The source for this routine is almost identical to nfsunlock(), but it's * coded separately to make things as clear as possible. + * + * @author Alexis Rosen + * @see spip_nfsunlock() about lost and stolen locks. + * + * @param string $fichier Chemin du fichier + * @param bool $birth Timestamp de l'heure de création du verrou + * @param int $max_age Age maximum du verrou + * return bool true si déverrouillé, false sinon */ - -// http://doc.spip.org/@spip_nfslock_test -function spip_nfslock_test($fichier, $birth, $max_age=0) { +function spip_nfslock_test($fichier, $birth, $max_age = 0) { return spip_nfsunlock($fichier, $birth, $max_age, true); } - -?> diff --git a/www/ecrire/inc/notifications.php b/www/ecrire/inc/notifications.php index 785aed3e..0012f462 100644 --- a/www/ecrire/inc/notifications.php +++ b/www/ecrire/inc/notifications.php @@ -3,98 +3,110 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des notifications + * + * @package SPIP\Core\Notifications + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * La fonction de notification de base, qui dispatche le travail - * http://doc.spip.org/@inc_notifications_dist * + * @api * @param string $quoi - * evenement de notification + * Événement de notification * @param int $id - * id de l'objet en relation avec l'evenement + * id de l'objet en relation avec l'événement * @param array $options - * options de notification, interpretees en fonction de la notification + * Options de notification, interprétées en fonction de la notification */ -function inc_notifications_dist($quoi, $id=0, $options=array()) { +function inc_notifications_dist($quoi, $id = 0, $options = array()) { // charger les fichiers qui veulent ajouter des definitions // ou faire des trucs aussi dans le pipeline, ca fait deux api pour le prix d'une ... - pipeline('notifications',array('args'=>array('quoi'=>$quoi,'id'=>$id,'options'=>$options))); + pipeline('notifications', array('args' => array('quoi' => $quoi, 'id' => $id, 'options' => $options))); - if ($notification = charger_fonction($quoi,'notifications',true)) { + if ($notification = charger_fonction($quoi, 'notifications', true)) { spip_log("$notification($quoi,$id" - .($options?",".serialize($options):"") - .")",'notifications'); + . ($options ? "," . serialize($options) : "") + . ")", 'notifications'); $notification($quoi, $id, $options); } } /** - * Nettoyage des emails avant un envoi - * on passe par reference pour la perf + * Néttoyage des emails avant un envoi * - * les emails liste par $eclure seront exclus de la liste + * On passe par référence pour la perf + * + * les emails liste par $exclure seront exclus de la liste * * @param array $emails * @param array $exclure */ -function notifications_nettoyer_emails(&$emails, $exclure = array()){ +function notifications_nettoyer_emails(&$emails, $exclure = array()) { // filtrer et unifier - include_spip('inc/filtres'); - $emails = array_unique(array_filter(array_map('email_valide',array_map('trim', $emails)))); - if ($exclure AND count($exclure)){ + $emails = array_unique(array_filter(array_map('email_valide', array_map('trim', $emails)))); + if ($exclure and count($exclure)) { // nettoyer les exclusions d'abord notifications_nettoyer_emails($exclure); // faire un diff - $emails = array_diff($emails,$exclure); + $emails = array_diff($emails, $exclure); } } /** * Envoyer un email de notification - * Le sujet peut etre vide, dans ce cas il reprendra la premiere ligne non vide du texte * - * @param array/string $emails + * Le sujet peut être vide, dans ce cas il reprendra la première ligne non vide du texte + * + * @param array|string $emails * @param string $texte * @param string $sujet * @param string $from * @param string $headers */ -function notifications_envoyer_mails($emails, $texte, $sujet="", $from = "", $headers = ""){ +function notifications_envoyer_mails($emails, $texte, $sujet = "", $from = "", $headers = "") { // rien a faire si pas de texte ! - if (!strlen($texte)) + if (!strlen($texte)) { return; + } // si on ne specifie qu'un email, le mettre dans un tableau - if (!is_array($emails)) - $emails = explode(',',$emails); + if (!is_array($emails)) { + $emails = explode(',', $emails); + } notifications_nettoyer_emails($emails); // tester si le mail est deja en html - if (strpos($texte,"<")!==false // eviter les tests suivants si possible - AND $ttrim = trim($texte) - AND substr($ttrim,0,1)=="<" - AND substr($ttrim,-1,1)==">" - AND stripos($ttrim,"")!==false){ - - if(!strlen($sujet)){ + if (strpos($texte, "<") !== false // eviter les tests suivants si possible + and $ttrim = trim($texte) + and substr($ttrim, 0, 1) == "<" + and substr($ttrim, -1, 1) == ">" + and stripos($ttrim, "") !== false + ) { + + if (!strlen($sujet)) { // dans ce cas on ruse un peu : extraire le sujet du title - if (preg_match(",(.*),Uims",$texte,$m)) + if (preg_match(",(.*),Uims", $texte, $m)) { $sujet = $m[1]; - else { + } else { // fallback, on prend le body si on le trouve - if (preg_match(",]*>(.*),Uims",$texte,$m)) + if (preg_match(",]*>(.*),Uims", $texte, $m)) { $ttrim = $m[1]; + } // et on extrait la premiere ligne de vrai texte... // nettoyer le html et les retours chariots @@ -102,47 +114,50 @@ function notifications_envoyer_mails($emails, $texte, $sujet="", $from = "", $he $ttrim = str_replace("\r\n", "\r", $ttrim); $ttrim = str_replace("\r", "\n", $ttrim); // decouper - $ttrim = explode("\n",trim($ttrim)); + $ttrim = explode("\n", trim($ttrim)); // extraire la premiere ligne de texte brut $sujet = array_shift($ttrim); } } // si besoin on ajoute le content-type dans les headers - if (stripos($headers,"Content-Type")===false) + if (stripos($headers, "Content-Type") === false) { $headers .= "Content-Type: text/html\n"; + } } // si le sujet est vide, extraire la premiere ligne du corps // du mail qui est donc du texte - if (!strlen($sujet)){ + if (!strlen($sujet)) { // nettoyer un peu les retours chariots $texte = str_replace("\r\n", "\r", $texte); $texte = str_replace("\r", "\n", $texte); // decouper - $texte = explode("\n",trim($texte)); + $texte = explode("\n", trim($texte)); // extraire la premiere ligne $sujet = array_shift($texte); - $texte = trim(implode("\n",$texte)); + $texte = trim(implode("\n", $texte)); } - $envoyer_mail = charger_fonction('envoyer_mail','inc'); - foreach($emails as $email){ + $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); + foreach ($emails as $email) { // passer dans un pipeline qui permet un ajout eventuel // (url de suivi des notifications par exemple) - $envoi = pipeline('notifications_envoyer_mails',array('email'=>$email,'sujet'=>$sujet,'texte'=>$texte)); + $envoi = pipeline('notifications_envoyer_mails', array('email' => $email, 'sujet' => $sujet, 'texte' => $texte)); $email = $envoi['email']; - job_queue_add('envoyer_mail', ">$email : ".$envoi['sujet'], array($email, $envoi['sujet'], $envoi['texte'], $from, $headers), 'inc/'); + job_queue_add('envoyer_mail', ">$email : " . $envoi['sujet'], + array($email, $envoi['sujet'], $envoi['texte'], $from, $headers), 'inc/'); } } /** - * Notifier un evenement sur un objet - * recupere le fond designe dans $modele, - * prend la premiere ligne comme sujet - * et l'interprete pour envoyer l'email + * Notifier un événement sur un objet + * + * Récupère le fond désigné dans $modele, + * prend la première ligne comme sujet + * et l'interprète pour envoyer l'email * * @param int $id_objet * @param string $type_objet @@ -150,29 +165,35 @@ function notifications_envoyer_mails($emails, $texte, $sujet="", $from = "", $he * @return string */ function email_notification_objet($id_objet, $type_objet, $modele) { - $envoyer_mail = charger_fonction('envoyer_mail','inc'); // pour nettoyer_titre_email + $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); // pour nettoyer_titre_email $id_type = id_table_objet($type_objet); - return recuperer_fond($modele,array($id_type=>$id_objet,"id"=>$id_objet)); + + return recuperer_fond($modele, array($id_type => $id_objet, "id" => $id_objet)); } /** - * Notifier un evenement sur un article - * recupere le fond designe dans $modele, - * prend la premiere ligne comme sujet - * et l'interprete pour envoyer l'email + * Notifier un événement sur un article + * + * Récupère le fond désigné dans $modele, + * prend la première ligne comme sujet + * et l'interprète pour envoyer l'email * * @param int $id_article * @param string $modele * @return string */ function email_notification_article($id_article, $modele) { - $envoyer_mail = charger_fonction('envoyer_mail','inc'); // pour nettoyer_titre_email + $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); // pour nettoyer_titre_email - return recuperer_fond($modele,array('id_article'=>$id_article)); + return recuperer_fond($modele, array('id_article' => $id_article)); } -// Compatibilite, ne plus utiliser -// http://doc.spip.org/@notifier_publication_article +/** + * Notifier la publication d'un article + * + * @deprecated Ne plus utiliser + * @param int $id_article + **/ function notifier_publication_article($id_article) { if ($GLOBALS['meta']["suivi_edito"] == "oui") { $adresse_suivi = $GLOBALS['meta']["adresse_suivi"]; @@ -181,8 +202,12 @@ function notifier_publication_article($id_article) { } } -// Compatibilite, ne plus utiliser -// http://doc.spip.org/@notifier_proposition_article +/** + * Notifier la proposition d'un article + * + * @deprecated Ne plus utiliser + * @param int $id_article + **/ function notifier_proposition_article($id_article) { if ($GLOBALS['meta']["suivi_edito"] == "oui") { $adresse_suivi = $GLOBALS['meta']["adresse_suivi"]; @@ -190,5 +215,3 @@ function notifier_proposition_article($id_article) { notifications_envoyer_mails($adresse_suivi, $texte); } } - -?> diff --git a/www/ecrire/inc/pclzip.php b/www/ecrire/inc/pclzip.php deleted file mode 100644 index 449d3f3c..00000000 --- a/www/ecrire/inc/pclzip.php +++ /dev/null @@ -1,5702 +0,0 @@ -zipname = $p_zipname; - $this->zip_fd = 0; - $this->magic_quotes_status = -1; - - // ----- Return - return; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : - // create($p_filelist, $p_add_dir="", $p_remove_dir="") - // create($p_filelist, $p_option, $p_option_value, ...) - // Description : - // This method supports two different synopsis. The first one is historical. - // This method creates a Zip Archive. The Zip file is created in the - // filesystem. The files and directories indicated in $p_filelist - // are added in the archive. See the parameters description for the - // supported format of $p_filelist. - // When a directory is in the list, the directory and its content is added - // in the archive. - // In this synopsis, the function takes an optional variable list of - // options. See bellow the supported options. - // Parameters : - // $p_filelist : An array containing file or directory names, or - // a string containing one filename or one directory name, or - // a string containing a list of filenames and/or directory - // names separated by spaces. - // $p_add_dir : A path to add before the real path of the archived file, - // in order to have it memorized in the archive. - // $p_remove_dir : A path to remove from the real path of the file to archive, - // in order to have a shorter path memorized in the archive. - // When $p_add_dir and $p_remove_dir are set, $p_remove_dir - // is removed first, before $p_add_dir is added. - // Options : - // PCLZIP_OPT_ADD_PATH : - // PCLZIP_OPT_REMOVE_PATH : - // PCLZIP_OPT_REMOVE_ALL_PATH : - // PCLZIP_OPT_COMMENT : - // PCLZIP_CB_PRE_ADD : - // PCLZIP_CB_POST_ADD : - // Return Values : - // 0 on failure, - // The list of the added files, with a status of the add action. - // (see PclZip::listContent() for list entry format) - // -------------------------------------------------------------------------------- - function create($p_filelist) - { - $v_result=1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Set default values - $v_options = array(); - $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; - - // ----- Look for variable options arguments - $v_size = func_num_args(); - - // ----- Look for arguments - if ($v_size > 1) { - // ----- Get the arguments - $v_arg_list = func_get_args(); - - // ----- Remove from the options list the first argument - array_shift($v_arg_list); - $v_size--; - - // ----- Look for first arg - if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { - - // ----- Parse the options - $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, - array (PCLZIP_OPT_REMOVE_PATH => 'optional', - PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', - PCLZIP_OPT_ADD_PATH => 'optional', - PCLZIP_CB_PRE_ADD => 'optional', - PCLZIP_CB_POST_ADD => 'optional', - PCLZIP_OPT_NO_COMPRESSION => 'optional', - PCLZIP_OPT_COMMENT => 'optional', - PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', - PCLZIP_OPT_TEMP_FILE_ON => 'optional', - PCLZIP_OPT_TEMP_FILE_OFF => 'optional' - //, PCLZIP_OPT_CRYPT => 'optional' - )); - if ($v_result != 1) { - return 0; - } - } - - // ----- Look for 2 args - // Here we need to support the first historic synopsis of the - // method. - else { - - // ----- Get the first argument - $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0]; - - // ----- Look for the optional second argument - if ($v_size == 2) { - $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; - } - else if ($v_size > 2) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, - "Invalid number / type of arguments"); - return 0; - } - } - } - - // ----- Look for default option values - $this->privOptionDefaultThreshold($v_options); - - // ----- Init - $v_string_list = array(); - $v_att_list = array(); - $v_filedescr_list = array(); - $p_result_list = array(); - - // ----- Look if the $p_filelist is really an array - if (is_array($p_filelist)) { - - // ----- Look if the first element is also an array - // This will mean that this is a file description entry - if (isset($p_filelist[0]) && is_array($p_filelist[0])) { - $v_att_list = $p_filelist; - } - - // ----- The list is a list of string names - else { - $v_string_list = $p_filelist; - } - } - - // ----- Look if the $p_filelist is a string - else if (is_string($p_filelist)) { - // ----- Create a list from the string - $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); - } - - // ----- Invalid variable type for $p_filelist - else { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist"); - return 0; - } - - // ----- Reformat the string list - if (sizeof($v_string_list) != 0) { - foreach ($v_string_list as $v_string) { - if ($v_string != '') { - $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; - } - else { - } - } - } - - // ----- For each file in the list check the attributes - $v_supported_attributes - = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' - ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' - ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' - ,PCLZIP_ATT_FILE_MTIME => 'optional' - ,PCLZIP_ATT_FILE_CONTENT => 'optional' - ,PCLZIP_ATT_FILE_COMMENT => 'optional' - ); - foreach ($v_att_list as $v_entry) { - $v_result = $this->privFileDescrParseAtt($v_entry, - $v_filedescr_list[], - $v_options, - $v_supported_attributes); - if ($v_result != 1) { - return 0; - } - } - - // ----- Expand the filelist (expand directories) - $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); - if ($v_result != 1) { - return 0; - } - - // ----- Call the create fct - $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options); - if ($v_result != 1) { - return 0; - } - - // ----- Return - return $p_result_list; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : - // add($p_filelist, $p_add_dir="", $p_remove_dir="") - // add($p_filelist, $p_option, $p_option_value, ...) - // Description : - // This method supports two synopsis. The first one is historical. - // This methods add the list of files in an existing archive. - // If a file with the same name already exists, it is added at the end of the - // archive, the first one is still present. - // If the archive does not exist, it is created. - // Parameters : - // $p_filelist : An array containing file or directory names, or - // a string containing one filename or one directory name, or - // a string containing a list of filenames and/or directory - // names separated by spaces. - // $p_add_dir : A path to add before the real path of the archived file, - // in order to have it memorized in the archive. - // $p_remove_dir : A path to remove from the real path of the file to archive, - // in order to have a shorter path memorized in the archive. - // When $p_add_dir and $p_remove_dir are set, $p_remove_dir - // is removed first, before $p_add_dir is added. - // Options : - // PCLZIP_OPT_ADD_PATH : - // PCLZIP_OPT_REMOVE_PATH : - // PCLZIP_OPT_REMOVE_ALL_PATH : - // PCLZIP_OPT_COMMENT : - // PCLZIP_OPT_ADD_COMMENT : - // PCLZIP_OPT_PREPEND_COMMENT : - // PCLZIP_CB_PRE_ADD : - // PCLZIP_CB_POST_ADD : - // Return Values : - // 0 on failure, - // The list of the added files, with a status of the add action. - // (see PclZip::listContent() for list entry format) - // -------------------------------------------------------------------------------- - function add($p_filelist) - { - $v_result=1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Set default values - $v_options = array(); - $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; - - // ----- Look for variable options arguments - $v_size = func_num_args(); - - // ----- Look for arguments - if ($v_size > 1) { - // ----- Get the arguments - $v_arg_list = func_get_args(); - - // ----- Remove form the options list the first argument - array_shift($v_arg_list); - $v_size--; - - // ----- Look for first arg - if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { - - // ----- Parse the options - $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, - array (PCLZIP_OPT_REMOVE_PATH => 'optional', - PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', - PCLZIP_OPT_ADD_PATH => 'optional', - PCLZIP_CB_PRE_ADD => 'optional', - PCLZIP_CB_POST_ADD => 'optional', - PCLZIP_OPT_NO_COMPRESSION => 'optional', - PCLZIP_OPT_COMMENT => 'optional', - PCLZIP_OPT_ADD_COMMENT => 'optional', - PCLZIP_OPT_PREPEND_COMMENT => 'optional', - PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', - PCLZIP_OPT_TEMP_FILE_ON => 'optional', - PCLZIP_OPT_TEMP_FILE_OFF => 'optional' - //, PCLZIP_OPT_CRYPT => 'optional' - )); - if ($v_result != 1) { - return 0; - } - } - - // ----- Look for 2 args - // Here we need to support the first historic synopsis of the - // method. - else { - - // ----- Get the first argument - $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0]; - - // ----- Look for the optional second argument - if ($v_size == 2) { - $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; - } - else if ($v_size > 2) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); - - // ----- Return - return 0; - } - } - } - - // ----- Look for default option values - $this->privOptionDefaultThreshold($v_options); - - // ----- Init - $v_string_list = array(); - $v_att_list = array(); - $v_filedescr_list = array(); - $p_result_list = array(); - - // ----- Look if the $p_filelist is really an array - if (is_array($p_filelist)) { - - // ----- Look if the first element is also an array - // This will mean that this is a file description entry - if (isset($p_filelist[0]) && is_array($p_filelist[0])) { - $v_att_list = $p_filelist; - } - - // ----- The list is a list of string names - else { - $v_string_list = $p_filelist; - } - } - - // ----- Look if the $p_filelist is a string - else if (is_string($p_filelist)) { - // ----- Create a list from the string - $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); - } - - // ----- Invalid variable type for $p_filelist - else { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist"); - return 0; - } - - // ----- Reformat the string list - if (sizeof($v_string_list) != 0) { - foreach ($v_string_list as $v_string) { - $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; - } - } - - // ----- For each file in the list check the attributes - $v_supported_attributes - = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' - ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' - ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' - ,PCLZIP_ATT_FILE_MTIME => 'optional' - ,PCLZIP_ATT_FILE_CONTENT => 'optional' - ,PCLZIP_ATT_FILE_COMMENT => 'optional' - ); - foreach ($v_att_list as $v_entry) { - $v_result = $this->privFileDescrParseAtt($v_entry, - $v_filedescr_list[], - $v_options, - $v_supported_attributes); - if ($v_result != 1) { - return 0; - } - } - - // ----- Expand the filelist (expand directories) - $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); - if ($v_result != 1) { - return 0; - } - - // ----- Call the create fct - $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options); - if ($v_result != 1) { - return 0; - } - - // ----- Return - return $p_result_list; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : listContent() - // Description : - // This public method, gives the list of the files and directories, with their - // properties. - // The properties of each entries in the list are (used also in other functions) : - // filename : Name of the file. For a create or add action it is the filename - // given by the user. For an extract function it is the filename - // of the extracted file. - // stored_filename : Name of the file / directory stored in the archive. - // size : Size of the stored file. - // compressed_size : Size of the file's data compressed in the archive - // (without the headers overhead) - // mtime : Last known modification date of the file (UNIX timestamp) - // comment : Comment associated with the file - // folder : true | false - // index : index of the file in the archive - // status : status of the action (depending of the action) : - // Values are : - // ok : OK ! - // filtered : the file / dir is not extracted (filtered by user) - // already_a_directory : the file can not be extracted because a - // directory with the same name already exists - // write_protected : the file can not be extracted because a file - // with the same name already exists and is - // write protected - // newer_exist : the file was not extracted because a newer file exists - // path_creation_fail : the file is not extracted because the folder - // does not exist and can not be created - // write_error : the file was not extracted because there was a - // error while writing the file - // read_error : the file was not extracted because there was a error - // while reading the file - // invalid_header : the file was not extracted because of an archive - // format error (bad file header) - // Note that each time a method can continue operating when there - // is an action error on a file, the error is only logged in the file status. - // Return Values : - // 0 on an unrecoverable failure, - // The list of the files in the archive. - // -------------------------------------------------------------------------------- - function listContent() - { - $v_result=1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - return(0); - } - - // ----- Call the extracting fct - $p_list = array(); - if (($v_result = $this->privList($p_list)) != 1) - { - unset($p_list); - return(0); - } - - // ----- Return - return $p_list; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : - // extract($p_path="./", $p_remove_path="") - // extract([$p_option, $p_option_value, ...]) - // Description : - // This method supports two synopsis. The first one is historical. - // This method extract all the files / directories from the archive to the - // folder indicated in $p_path. - // If you want to ignore the 'root' part of path of the memorized files - // you can indicate this in the optional $p_remove_path parameter. - // By default, if a newer file with the same name already exists, the - // file is not extracted. - // - // If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions - // are used, the path indicated in PCLZIP_OPT_ADD_PATH is append - // at the end of the path value of PCLZIP_OPT_PATH. - // Parameters : - // $p_path : Path where the files and directories are to be extracted - // $p_remove_path : First part ('root' part) of the memorized path - // (if any similar) to remove while extracting. - // Options : - // PCLZIP_OPT_PATH : - // PCLZIP_OPT_ADD_PATH : - // PCLZIP_OPT_REMOVE_PATH : - // PCLZIP_OPT_REMOVE_ALL_PATH : - // PCLZIP_CB_PRE_EXTRACT : - // PCLZIP_CB_POST_EXTRACT : - // Return Values : - // 0 or a negative value on failure, - // The list of the extracted files, with a status of the action. - // (see PclZip::listContent() for list entry format) - // -------------------------------------------------------------------------------- - function extract() - { - $v_result=1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - return(0); - } - - // ----- Set default values - $v_options = array(); -// $v_path = "./"; - $v_path = ''; - $v_remove_path = ""; - $v_remove_all_path = false; - - // ----- Look for variable options arguments - $v_size = func_num_args(); - - // ----- Default values for option - $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; - - // ----- Look for arguments - if ($v_size > 0) { - // ----- Get the arguments - $v_arg_list = func_get_args(); - - // ----- Look for first arg - if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { - - // ----- Parse the options - $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, - array (PCLZIP_OPT_PATH => 'optional', - PCLZIP_OPT_REMOVE_PATH => 'optional', - PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', - PCLZIP_OPT_ADD_PATH => 'optional', - PCLZIP_CB_PRE_EXTRACT => 'optional', - PCLZIP_CB_POST_EXTRACT => 'optional', - PCLZIP_OPT_SET_CHMOD => 'optional', - PCLZIP_OPT_BY_NAME => 'optional', - PCLZIP_OPT_BY_EREG => 'optional', - PCLZIP_OPT_BY_PREG => 'optional', - PCLZIP_OPT_BY_INDEX => 'optional', - PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', - PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional', - PCLZIP_OPT_REPLACE_NEWER => 'optional' - ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' - ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', - PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', - PCLZIP_OPT_TEMP_FILE_ON => 'optional', - PCLZIP_OPT_TEMP_FILE_OFF => 'optional' - )); - if ($v_result != 1) { - return 0; - } - - // ----- Set the arguments - if (isset($v_options[PCLZIP_OPT_PATH])) { - $v_path = $v_options[PCLZIP_OPT_PATH]; - } - if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { - $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; - } - if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { - $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; - } - if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { - // ----- Check for '/' in last path char - if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { - $v_path .= '/'; - } - $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; - } - } - - // ----- Look for 2 args - // Here we need to support the first historic synopsis of the - // method. - else { - - // ----- Get the first argument - $v_path = $v_arg_list[0]; - - // ----- Look for the optional second argument - if ($v_size == 2) { - $v_remove_path = $v_arg_list[1]; - } - else if ($v_size > 2) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); - - // ----- Return - return 0; - } - } - } - - // ----- Look for default option values - $this->privOptionDefaultThreshold($v_options); - - // ----- Trace - - // ----- Call the extracting fct - $p_list = array(); - $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, - $v_remove_all_path, $v_options); - if ($v_result < 1) { - unset($p_list); - return(0); - } - - // ----- Return - return $p_list; - } - // -------------------------------------------------------------------------------- - - - // -------------------------------------------------------------------------------- - // Function : - // extractByIndex($p_index, $p_path="./", $p_remove_path="") - // extractByIndex($p_index, [$p_option, $p_option_value, ...]) - // Description : - // This method supports two synopsis. The first one is historical. - // This method is doing a partial extract of the archive. - // The extracted files or folders are identified by their index in the - // archive (from 0 to n). - // Note that if the index identify a folder, only the folder entry is - // extracted, not all the files included in the archive. - // Parameters : - // $p_index : A single index (integer) or a string of indexes of files to - // extract. The form of the string is "0,4-6,8-12" with only numbers - // and '-' for range or ',' to separate ranges. No spaces or ';' - // are allowed. - // $p_path : Path where the files and directories are to be extracted - // $p_remove_path : First part ('root' part) of the memorized path - // (if any similar) to remove while extracting. - // Options : - // PCLZIP_OPT_PATH : - // PCLZIP_OPT_ADD_PATH : - // PCLZIP_OPT_REMOVE_PATH : - // PCLZIP_OPT_REMOVE_ALL_PATH : - // PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and - // not as files. - // The resulting content is in a new field 'content' in the file - // structure. - // This option must be used alone (any other options are ignored). - // PCLZIP_CB_PRE_EXTRACT : - // PCLZIP_CB_POST_EXTRACT : - // Return Values : - // 0 on failure, - // The list of the extracted files, with a status of the action. - // (see PclZip::listContent() for list entry format) - // -------------------------------------------------------------------------------- - //function extractByIndex($p_index, options...) - function extractByIndex($p_index) - { - $v_result=1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - return(0); - } - - // ----- Set default values - $v_options = array(); -// $v_path = "./"; - $v_path = ''; - $v_remove_path = ""; - $v_remove_all_path = false; - - // ----- Look for variable options arguments - $v_size = func_num_args(); - - // ----- Default values for option - $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; - - // ----- Look for arguments - if ($v_size > 1) { - // ----- Get the arguments - $v_arg_list = func_get_args(); - - // ----- Remove form the options list the first argument - array_shift($v_arg_list); - $v_size--; - - // ----- Look for first arg - if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { - - // ----- Parse the options - $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, - array (PCLZIP_OPT_PATH => 'optional', - PCLZIP_OPT_REMOVE_PATH => 'optional', - PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', - PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', - PCLZIP_OPT_ADD_PATH => 'optional', - PCLZIP_CB_PRE_EXTRACT => 'optional', - PCLZIP_CB_POST_EXTRACT => 'optional', - PCLZIP_OPT_SET_CHMOD => 'optional', - PCLZIP_OPT_REPLACE_NEWER => 'optional' - ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' - ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', - PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', - PCLZIP_OPT_TEMP_FILE_ON => 'optional', - PCLZIP_OPT_TEMP_FILE_OFF => 'optional' - )); - if ($v_result != 1) { - return 0; - } - - // ----- Set the arguments - if (isset($v_options[PCLZIP_OPT_PATH])) { - $v_path = $v_options[PCLZIP_OPT_PATH]; - } - if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { - $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; - } - if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { - $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; - } - if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { - // ----- Check for '/' in last path char - if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { - $v_path .= '/'; - } - $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; - } - if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) { - $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; - } - else { - } - } - - // ----- Look for 2 args - // Here we need to support the first historic synopsis of the - // method. - else { - - // ----- Get the first argument - $v_path = $v_arg_list[0]; - - // ----- Look for the optional second argument - if ($v_size == 2) { - $v_remove_path = $v_arg_list[1]; - } - else if ($v_size > 2) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); - - // ----- Return - return 0; - } - } - } - - // ----- Trace - - // ----- Trick - // Here I want to reuse extractByRule(), so I need to parse the $p_index - // with privParseOptions() - $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index); - $v_options_trick = array(); - $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick, - array (PCLZIP_OPT_BY_INDEX => 'optional' )); - if ($v_result != 1) { - return 0; - } - $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX]; - - // ----- Look for default option values - $this->privOptionDefaultThreshold($v_options); - - // ----- Call the extracting fct - if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) { - return(0); - } - - // ----- Return - return $p_list; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : - // delete([$p_option, $p_option_value, ...]) - // Description : - // This method removes files from the archive. - // If no parameters are given, then all the archive is emptied. - // Parameters : - // None or optional arguments. - // Options : - // PCLZIP_OPT_BY_INDEX : - // PCLZIP_OPT_BY_NAME : - // PCLZIP_OPT_BY_EREG : - // PCLZIP_OPT_BY_PREG : - // Return Values : - // 0 on failure, - // The list of the files which are still present in the archive. - // (see PclZip::listContent() for list entry format) - // -------------------------------------------------------------------------------- - function delete() - { - $v_result=1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - return(0); - } - - // ----- Set default values - $v_options = array(); - - // ----- Look for variable options arguments - $v_size = func_num_args(); - - // ----- Look for arguments - if ($v_size > 0) { - // ----- Get the arguments - $v_arg_list = func_get_args(); - - // ----- Parse the options - $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, - array (PCLZIP_OPT_BY_NAME => 'optional', - PCLZIP_OPT_BY_EREG => 'optional', - PCLZIP_OPT_BY_PREG => 'optional', - PCLZIP_OPT_BY_INDEX => 'optional' )); - if ($v_result != 1) { - return 0; - } - } - - // ----- Magic quotes trick - $this->privDisableMagicQuotes(); - - // ----- Call the delete fct - $v_list = array(); - if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) { - $this->privSwapBackMagicQuotes(); - unset($v_list); - return(0); - } - - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); - - // ----- Return - return $v_list; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : deleteByIndex() - // Description : - // ***** Deprecated ***** - // delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered. - // -------------------------------------------------------------------------------- - function deleteByIndex($p_index) - { - - $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index); - - // ----- Return - return $p_list; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : properties() - // Description : - // This method gives the properties of the archive. - // The properties are : - // nb : Number of files in the archive - // comment : Comment associated with the archive file - // status : not_exist, ok - // Parameters : - // None - // Return Values : - // 0 on failure, - // An array with the archive properties. - // -------------------------------------------------------------------------------- - function properties() - { - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Magic quotes trick - $this->privDisableMagicQuotes(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - $this->privSwapBackMagicQuotes(); - return(0); - } - - // ----- Default properties - $v_prop = array(); - $v_prop['comment'] = ''; - $v_prop['nb'] = 0; - $v_prop['status'] = 'not_exist'; - - // ----- Look if file exists - if (@is_file($this->zipname)) - { - // ----- Open the zip file - if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) - { - $this->privSwapBackMagicQuotes(); - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); - - // ----- Return - return 0; - } - - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) - { - $this->privSwapBackMagicQuotes(); - return 0; - } - - // ----- Close the zip file - $this->privCloseFd(); - - // ----- Set the user attributes - $v_prop['comment'] = $v_central_dir['comment']; - $v_prop['nb'] = $v_central_dir['entries']; - $v_prop['status'] = 'ok'; - } - - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); - - // ----- Return - return $v_prop; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : duplicate() - // Description : - // This method creates an archive by copying the content of an other one. If - // the archive already exist, it is replaced by the new one without any warning. - // Parameters : - // $p_archive : The filename of a valid archive, or - // a valid PclZip object. - // Return Values : - // 1 on success. - // 0 or a negative value on error (error code). - // -------------------------------------------------------------------------------- - function duplicate($p_archive) - { - $v_result = 1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Look if the $p_archive is a PclZip object - if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip')) - { - - // ----- Duplicate the archive - $v_result = $this->privDuplicate($p_archive->zipname); - } - - // ----- Look if the $p_archive is a string (so a filename) - else if (is_string($p_archive)) - { - - // ----- Check that $p_archive is a valid zip file - // TBC : Should also check the archive format - if (!is_file($p_archive)) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'"); - $v_result = PCLZIP_ERR_MISSING_FILE; - } - else { - // ----- Duplicate the archive - $v_result = $this->privDuplicate($p_archive); - } - } - - // ----- Invalid variable - else - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); - $v_result = PCLZIP_ERR_INVALID_PARAMETER; - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : merge() - // Description : - // This method merge the $p_archive_to_add archive at the end of the current - // one ($this). - // If the archive ($this) does not exist, the merge becomes a duplicate. - // If the $p_archive_to_add archive does not exist, the merge is a success. - // Parameters : - // $p_archive_to_add : It can be directly the filename of a valid zip archive, - // or a PclZip object archive. - // Return Values : - // 1 on success, - // 0 or negative values on error (see below). - // -------------------------------------------------------------------------------- - function merge($p_archive_to_add) - { - $v_result = 1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - return(0); - } - - // ----- Look if the $p_archive_to_add is a PclZip object - if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip')) - { - - // ----- Merge the archive - $v_result = $this->privMerge($p_archive_to_add); - } - - // ----- Look if the $p_archive_to_add is a string (so a filename) - else if (is_string($p_archive_to_add)) - { - - // ----- Create a temporary archive - $v_object_archive = new PclZip($p_archive_to_add); - - // ----- Merge the archive - $v_result = $this->privMerge($v_object_archive); - } - - // ----- Invalid variable - else - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); - $v_result = PCLZIP_ERR_INVALID_PARAMETER; - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - - - // -------------------------------------------------------------------------------- - // Function : errorCode() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function errorCode() - { - if (PCLZIP_ERROR_EXTERNAL == 1) { - return(PclErrorCode()); - } - else { - return($this->error_code); - } - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : errorName() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function errorName($p_with_code=false) - { - $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR', - PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL', - PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL', - PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER', - PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE', - PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG', - PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP', - PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE', - PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL', - PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION', - PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT', - PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL', - PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL', - PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM', - PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', - PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE', - PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE', - PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', - PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION' - ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE' - ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION' - ); - - if (isset($v_name[$this->error_code])) { - $v_value = $v_name[$this->error_code]; - } - else { - $v_value = 'NoName'; - } - - if ($p_with_code) { - return($v_value.' ('.$this->error_code.')'); - } - else { - return($v_value); - } - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : errorInfo() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function errorInfo($p_full=false) - { - if (PCLZIP_ERROR_EXTERNAL == 1) { - return(PclErrorString()); - } - else { - if ($p_full) { - return($this->errorName(true)." : ".$this->error_string); - } - else { - return($this->error_string." [code ".$this->error_code."]"); - } - } - } - // -------------------------------------------------------------------------------- - - -// -------------------------------------------------------------------------------- -// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS ***** -// ***** ***** -// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY ***** -// -------------------------------------------------------------------------------- - - - - // -------------------------------------------------------------------------------- - // Function : privCheckFormat() - // Description : - // This method check that the archive exists and is a valid zip archive. - // Several level of check exists. (futur) - // Parameters : - // $p_level : Level of check. Default 0. - // 0 : Check the first bytes (magic codes) (default value)) - // 1 : 0 + Check the central directory (futur) - // 2 : 1 + Check each file header (futur) - // Return Values : - // true on success, - // false on error, the error code is set. - // -------------------------------------------------------------------------------- - function privCheckFormat($p_level=0) - { - $v_result = true; - - // ----- Reset the file system cache - clearstatcache(); - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Look if the file exits - if (!is_file($this->zipname)) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'"); - return(false); - } - - // ----- Check that the file is readeable - if (!is_readable($this->zipname)) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'"); - return(false); - } - - // ----- Check the magic code - // TBC - - // ----- Check the central header - // TBC - - // ----- Check each file header - // TBC - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privParseOptions() - // Description : - // This internal methods reads the variable list of arguments ($p_options_list, - // $p_size) and generate an array with the options and values ($v_result_list). - // $v_requested_options contains the options that can be present and those that - // must be present. - // $v_requested_options is an array, with the option value as key, and 'optional', - // or 'mandatory' as value. - // Parameters : - // See above. - // Return Values : - // 1 on success. - // 0 on failure. - // -------------------------------------------------------------------------------- - function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false) - { - $v_result=1; - - // ----- Read the options - $i=0; - while ($i<$p_size) { - - // ----- Check if the option is supported - if (!isset($v_requested_options[$p_options_list[$i]])) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Look for next option - switch ($p_options_list[$i]) { - // ----- Look for options that request a path value - case PCLZIP_OPT_PATH : - case PCLZIP_OPT_REMOVE_PATH : - case PCLZIP_OPT_ADD_PATH : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Get the value - $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); - $i++; - break; - - case PCLZIP_OPT_TEMP_FILE_THRESHOLD : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - return PclZip::errorCode(); - } - - // ----- Check for incompatible options - if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); - return PclZip::errorCode(); - } - - // ----- Check the value - $v_value = $p_options_list[$i+1]; - if ((!is_integer($v_value)) || ($v_value<0)) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - return PclZip::errorCode(); - } - - // ----- Get the value (and convert it in bytes) - $v_result_list[$p_options_list[$i]] = $v_value*1048576; - $i++; - break; - - case PCLZIP_OPT_TEMP_FILE_ON : - // ----- Check for incompatible options - if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); - return PclZip::errorCode(); - } - - $v_result_list[$p_options_list[$i]] = true; - break; - - case PCLZIP_OPT_TEMP_FILE_OFF : - // ----- Check for incompatible options - if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'"); - return PclZip::errorCode(); - } - // ----- Check for incompatible options - if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'"); - return PclZip::errorCode(); - } - - $v_result_list[$p_options_list[$i]] = true; - break; - - case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Get the value - if ( is_string($p_options_list[$i+1]) - && ($p_options_list[$i+1] != '')) { - $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); - $i++; - } - else { - } - break; - - // ----- Look for options that request an array of string for value - case PCLZIP_OPT_BY_NAME : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Get the value - if (is_string($p_options_list[$i+1])) { - $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1]; - } - else if (is_array($p_options_list[$i+1])) { - $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; - } - else { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - - // ----- Return - return PclZip::errorCode(); - } - $i++; - break; - - // ----- Look for options that request an EREG or PREG expression - case PCLZIP_OPT_BY_EREG : - // ereg() is deprecated starting with PHP 5.3. Move PCLZIP_OPT_BY_EREG - // to PCLZIP_OPT_BY_PREG - $p_options_list[$i] = PCLZIP_OPT_BY_PREG; - case PCLZIP_OPT_BY_PREG : - //case PCLZIP_OPT_CRYPT : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Get the value - if (is_string($p_options_list[$i+1])) { - $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; - } - else { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - - // ----- Return - return PclZip::errorCode(); - } - $i++; - break; - - // ----- Look for options that takes a string - case PCLZIP_OPT_COMMENT : - case PCLZIP_OPT_ADD_COMMENT : - case PCLZIP_OPT_PREPEND_COMMENT : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, - "Missing parameter value for option '" - .PclZipUtilOptionText($p_options_list[$i]) - ."'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Get the value - if (is_string($p_options_list[$i+1])) { - $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; - } - else { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, - "Wrong parameter value for option '" - .PclZipUtilOptionText($p_options_list[$i]) - ."'"); - - // ----- Return - return PclZip::errorCode(); - } - $i++; - break; - - // ----- Look for options that request an array of index - case PCLZIP_OPT_BY_INDEX : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Get the value - $v_work_list = array(); - if (is_string($p_options_list[$i+1])) { - - // ----- Remove spaces - $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', ''); - - // ----- Parse items - $v_work_list = explode(",", $p_options_list[$i+1]); - } - else if (is_integer($p_options_list[$i+1])) { - $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1]; - } - else if (is_array($p_options_list[$i+1])) { - $v_work_list = $p_options_list[$i+1]; - } - else { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Reduce the index list - // each index item in the list must be a couple with a start and - // an end value : [0,3], [5-5], [8-10], ... - // ----- Check the format of each item - $v_sort_flag=false; - $v_sort_value=0; - for ($j=0; $j= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Get the value - $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; - $i++; - break; - - // ----- Look for options that request a call-back - case PCLZIP_CB_PRE_EXTRACT : - case PCLZIP_CB_POST_EXTRACT : - case PCLZIP_CB_PRE_ADD : - case PCLZIP_CB_POST_ADD : - /* for futur use - case PCLZIP_CB_PRE_DELETE : - case PCLZIP_CB_POST_DELETE : - case PCLZIP_CB_PRE_LIST : - case PCLZIP_CB_POST_LIST : - */ - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Get the value - $v_function_name = $p_options_list[$i+1]; - - // ----- Check that the value is a valid existing function - if (!function_exists($v_function_name)) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Set the attribute - $v_result_list[$p_options_list[$i]] = $v_function_name; - $i++; - break; - - default : - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, - "Unknown parameter '" - .$p_options_list[$i]."'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Next options - $i++; - } - - // ----- Look for mandatory options - if ($v_requested_options !== false) { - for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { - // ----- Look for mandatory option - if ($v_requested_options[$key] == 'mandatory') { - // ----- Look if present - if (!isset($v_result_list[$key])) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); - - // ----- Return - return PclZip::errorCode(); - } - } - } - } - - // ----- Look for default values - if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { - - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privOptionDefaultThreshold() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privOptionDefaultThreshold(&$p_options) - { - $v_result=1; - - if (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) - || isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) { - return $v_result; - } - - // ----- Get 'memory_limit' configuration value - $v_memory_limit = ini_get('memory_limit'); - $v_memory_limit = trim($v_memory_limit); - $last = strtolower(substr($v_memory_limit, -1)); - - if($last == 'g') - //$v_memory_limit = $v_memory_limit*1024*1024*1024; - $v_memory_limit = $v_memory_limit*1073741824; - if($last == 'm') - //$v_memory_limit = $v_memory_limit*1024*1024; - $v_memory_limit = $v_memory_limit*1048576; - if($last == 'k') - $v_memory_limit = $v_memory_limit*1024; - - $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit*PCLZIP_TEMPORARY_FILE_RATIO); - - - // ----- Sanity check : No threshold if value lower than 1M - if ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] < 1048576) { - unset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privFileDescrParseAtt() - // Description : - // Parameters : - // Return Values : - // 1 on success. - // 0 on failure. - // -------------------------------------------------------------------------------- - function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false) - { - $v_result=1; - - // ----- For each file in the list check the attributes - foreach ($p_file_list as $v_key => $v_value) { - - // ----- Check if the option is supported - if (!isset($v_requested_options[$v_key])) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Look for attribute - switch ($v_key) { - case PCLZIP_ATT_FILE_NAME : - if (!is_string($v_value)) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } - - $p_filedescr['filename'] = PclZipUtilPathReduction($v_value); - - if ($p_filedescr['filename'] == '') { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } - - break; - - case PCLZIP_ATT_FILE_NEW_SHORT_NAME : - if (!is_string($v_value)) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } - - $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value); - - if ($p_filedescr['new_short_name'] == '') { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } - break; - - case PCLZIP_ATT_FILE_NEW_FULL_NAME : - if (!is_string($v_value)) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } - - $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value); - - if ($p_filedescr['new_full_name'] == '') { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } - break; - - // ----- Look for options that takes a string - case PCLZIP_ATT_FILE_COMMENT : - if (!is_string($v_value)) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } - - $p_filedescr['comment'] = $v_value; - break; - - case PCLZIP_ATT_FILE_MTIME : - if (!is_integer($v_value)) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". Integer expected for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } - - $p_filedescr['mtime'] = $v_value; - break; - - case PCLZIP_ATT_FILE_CONTENT : - $p_filedescr['content'] = $v_value; - break; - - default : - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, - "Unknown parameter '".$v_key."'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Look for mandatory options - if ($v_requested_options !== false) { - for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { - // ----- Look for mandatory option - if ($v_requested_options[$key] == 'mandatory') { - // ----- Look if present - if (!isset($p_file_list[$key])) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); - return PclZip::errorCode(); - } - } - } - } - - // end foreach - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privFileDescrExpand() - // Description : - // This method look for each item of the list to see if its a file, a folder - // or a string to be added as file. For any other type of files (link, other) - // just ignore the item. - // Then prepare the information that will be stored for that file. - // When its a folder, expand the folder with all the files that are in that - // folder (recursively). - // Parameters : - // Return Values : - // 1 on success. - // 0 on failure. - // -------------------------------------------------------------------------------- - function privFileDescrExpand(&$p_filedescr_list, &$p_options) - { - $v_result=1; - - // ----- Create a result list - $v_result_list = array(); - - // ----- Look each entry - for ($i=0; $iprivCalculateStoredFilename($v_descr, $p_options); - - // ----- Add the descriptor in result list - $v_result_list[sizeof($v_result_list)] = $v_descr; - - // ----- Look for folder - if ($v_descr['type'] == 'folder') { - // ----- List of items in folder - $v_dirlist_descr = array(); - $v_dirlist_nb = 0; - if ($v_folder_handler = @opendir($v_descr['filename'])) { - while (($v_item_handler = @readdir($v_folder_handler)) !== false) { - - // ----- Skip '.' and '..' - if (($v_item_handler == '.') || ($v_item_handler == '..')) { - continue; - } - - // ----- Compose the full filename - $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler; - - // ----- Look for different stored filename - // Because the name of the folder was changed, the name of the - // files/sub-folders also change - if (($v_descr['stored_filename'] != $v_descr['filename']) - && (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) { - if ($v_descr['stored_filename'] != '') { - $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler; - } - else { - $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_item_handler; - } - } - - $v_dirlist_nb++; - } - - @closedir($v_folder_handler); - } - else { - // TBC : unable to open folder in read mode - } - - // ----- Expand each element of the list - if ($v_dirlist_nb != 0) { - // ----- Expand - if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) { - return $v_result; - } - - // ----- Concat the resulting list - $v_result_list = array_merge($v_result_list, $v_dirlist_descr); - } - else { - } - - // ----- Free local array - unset($v_dirlist_descr); - } - } - - // ----- Get the result list - $p_filedescr_list = $v_result_list; - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privCreate() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privCreate($p_filedescr_list, &$p_result_list, &$p_options) - { - $v_result=1; - $v_list_detail = array(); - - // ----- Magic quotes trick - $this->privDisableMagicQuotes(); - - // ----- Open the file in write mode - if (($v_result = $this->privOpenFd('wb')) != 1) - { - // ----- Return - return $v_result; - } - - // ----- Add the list of files - $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options); - - // ----- Close - $this->privCloseFd(); - - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privAdd() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privAdd($p_filedescr_list, &$p_result_list, &$p_options) - { - $v_result=1; - $v_list_detail = array(); - - // ----- Look if the archive exists or is empty - if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0)) - { - - // ----- Do a create - $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options); - - // ----- Return - return $v_result; - } - // ----- Magic quotes trick - $this->privDisableMagicQuotes(); - - // ----- Open the zip file - if (($v_result=$this->privOpenFd('rb')) != 1) - { - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); - - // ----- Return - return $v_result; - } - - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) - { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - return $v_result; - } - - // ----- Go to beginning of File - @rewind($this->zip_fd); - - // ----- Creates a temporay file - $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; - - // ----- Open the temporary file in write mode - if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) - { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Copy the files from the archive to the temporary file - // TBC : Here I should better append the file and go back to erase the central dir - $v_size = $v_central_dir['offset']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = fread($this->zip_fd, $v_read_size); - @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } - - // ----- Swap the file descriptor - // Here is a trick : I swap the temporary fd with the zip fd, in order to use - // the following methods on the temporary fil and not the real archive - $v_swap = $this->zip_fd; - $this->zip_fd = $v_zip_temp_fd; - $v_zip_temp_fd = $v_swap; - - // ----- Add the files - $v_header_list = array(); - if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) - { - fclose($v_zip_temp_fd); - $this->privCloseFd(); - @unlink($v_zip_temp_name); - $this->privSwapBackMagicQuotes(); - - // ----- Return - return $v_result; - } - - // ----- Store the offset of the central dir - $v_offset = @ftell($this->zip_fd); - - // ----- Copy the block of file headers from the old archive - $v_size = $v_central_dir['size']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($v_zip_temp_fd, $v_read_size); - @fwrite($this->zip_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } - - // ----- Create the Central Dir files header - for ($i=0, $v_count=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { - fclose($v_zip_temp_fd); - $this->privCloseFd(); - @unlink($v_zip_temp_name); - $this->privSwapBackMagicQuotes(); - - // ----- Return - return $v_result; - } - $v_count++; - } - - // ----- Transform the header to a 'usable' info - $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); - } - - // ----- Zip file comment - $v_comment = $v_central_dir['comment']; - if (isset($p_options[PCLZIP_OPT_COMMENT])) { - $v_comment = $p_options[PCLZIP_OPT_COMMENT]; - } - if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) { - $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT]; - } - if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) { - $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment; - } - - // ----- Calculate the size of the central header - $v_size = @ftell($this->zip_fd)-$v_offset; - - // ----- Create the central dir footer - if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1) - { - // ----- Reset the file list - unset($v_header_list); - $this->privSwapBackMagicQuotes(); - - // ----- Return - return $v_result; - } - - // ----- Swap back the file descriptor - $v_swap = $this->zip_fd; - $this->zip_fd = $v_zip_temp_fd; - $v_zip_temp_fd = $v_swap; - - // ----- Close - $this->privCloseFd(); - - // ----- Close the temporary file - @fclose($v_zip_temp_fd); - - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); - - // ----- Delete the zip file - // TBC : I should test the result ... - @unlink($this->zipname); - - // ----- Rename the temporary file - // TBC : I should test the result ... - //@rename($v_zip_temp_name, $this->zipname); - PclZipUtilRename($v_zip_temp_name, $this->zipname); - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privOpenFd() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function privOpenFd($p_mode) - { - $v_result=1; - - // ----- Look if already open - if ($this->zip_fd != 0) - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Open the zip file - if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0) - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privCloseFd() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function privCloseFd() - { - $v_result=1; - - if ($this->zip_fd != 0) - @fclose($this->zip_fd); - $this->zip_fd = 0; - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privAddList() - // Description : - // $p_add_dir and $p_remove_dir will give the ability to memorize a path which is - // different from the real path of the file. This is usefull if you want to have PclTar - // running in any directory, and memorize relative path from an other directory. - // Parameters : - // $p_list : An array containing the file or directory names to add in the tar - // $p_result_list : list of added files with their properties (specially the status field) - // $p_add_dir : Path to add in the filename path archived - // $p_remove_dir : Path to remove in the filename path archived - // Return Values : - // -------------------------------------------------------------------------------- -// function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options) - function privAddList($p_filedescr_list, &$p_result_list, &$p_options) - { - $v_result=1; - - // ----- Add the files - $v_header_list = array(); - if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) - { - // ----- Return - return $v_result; - } - - // ----- Store the offset of the central dir - $v_offset = @ftell($this->zip_fd); - - // ----- Create the Central Dir files header - for ($i=0,$v_count=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { - // ----- Return - return $v_result; - } - $v_count++; - } - - // ----- Transform the header to a 'usable' info - $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); - } - - // ----- Zip file comment - $v_comment = ''; - if (isset($p_options[PCLZIP_OPT_COMMENT])) { - $v_comment = $p_options[PCLZIP_OPT_COMMENT]; - } - - // ----- Calculate the size of the central header - $v_size = @ftell($this->zip_fd)-$v_offset; - - // ----- Create the central dir footer - if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1) - { - // ----- Reset the file list - unset($v_header_list); - - // ----- Return - return $v_result; - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privAddFileList() - // Description : - // Parameters : - // $p_filedescr_list : An array containing the file description - // or directory names to add in the zip - // $p_result_list : list of added files with their properties (specially the status field) - // Return Values : - // -------------------------------------------------------------------------------- - function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options) - { - $v_result=1; - $v_header = array(); - - // ----- Recuperate the current number of elt in list - $v_nb = sizeof($p_result_list); - - // ----- Loop on the files - for ($j=0; ($jprivAddFile($p_filedescr_list[$j], $v_header, - $p_options); - if ($v_result != 1) { - return $v_result; - } - - // ----- Store the file infos - $p_result_list[$v_nb++] = $v_header; - } - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privAddFile() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privAddFile($p_filedescr, &$p_header, &$p_options) - { - $v_result=1; - - // ----- Working variable - $p_filename = $p_filedescr['filename']; - - // TBC : Already done in the fileAtt check ... ? - if ($p_filename == "") { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Look for a stored different filename - /* TBC : Removed - if (isset($p_filedescr['stored_filename'])) { - $v_stored_filename = $p_filedescr['stored_filename']; - } - else { - $v_stored_filename = $p_filedescr['stored_filename']; - } - */ - - // ----- Set the file properties - clearstatcache(); - $p_header['version'] = 20; - $p_header['version_extracted'] = 10; - $p_header['flag'] = 0; - $p_header['compression'] = 0; - $p_header['crc'] = 0; - $p_header['compressed_size'] = 0; - $p_header['filename_len'] = strlen($p_filename); - $p_header['extra_len'] = 0; - $p_header['disk'] = 0; - $p_header['internal'] = 0; - $p_header['offset'] = 0; - $p_header['filename'] = $p_filename; -// TBC : Removed $p_header['stored_filename'] = $v_stored_filename; - $p_header['stored_filename'] = $p_filedescr['stored_filename']; - $p_header['extra'] = ''; - $p_header['status'] = 'ok'; - $p_header['index'] = -1; - - // ----- Look for regular file - if ($p_filedescr['type']=='file') { - $p_header['external'] = 0x00000000; - $p_header['size'] = filesize($p_filename); - } - - // ----- Look for regular folder - else if ($p_filedescr['type']=='folder') { - $p_header['external'] = 0x00000010; - $p_header['mtime'] = filemtime($p_filename); - $p_header['size'] = filesize($p_filename); - } - - // ----- Look for virtual file - else if ($p_filedescr['type'] == 'virtual_file') { - $p_header['external'] = 0x00000000; - $p_header['size'] = strlen($p_filedescr['content']); - } - - - // ----- Look for filetime - if (isset($p_filedescr['mtime'])) { - $p_header['mtime'] = $p_filedescr['mtime']; - } - else if ($p_filedescr['type'] == 'virtual_file') { - $p_header['mtime'] = time(); - } - else { - $p_header['mtime'] = filemtime($p_filename); - } - - // ------ Look for file comment - if (isset($p_filedescr['comment'])) { - $p_header['comment_len'] = strlen($p_filedescr['comment']); - $p_header['comment'] = $p_filedescr['comment']; - } - else { - $p_header['comment_len'] = 0; - $p_header['comment'] = ''; - } - - // ----- Look for pre-add callback - if (isset($p_options[PCLZIP_CB_PRE_ADD])) { - - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_header, $v_local_header); - - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_PRE_ADD](PCLZIP_CB_PRE_ADD, $v_local_header); - if ($v_result == 0) { - // ----- Change the file status - $p_header['status'] = "skipped"; - $v_result = 1; - } - - // ----- Update the informations - // Only some fields can be modified - if ($p_header['stored_filename'] != $v_local_header['stored_filename']) { - $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']); - } - } - - // ----- Look for empty stored filename - if ($p_header['stored_filename'] == "") { - $p_header['status'] = "filtered"; - } - - // ----- Check the path length - if (strlen($p_header['stored_filename']) > 0xFF) { - $p_header['status'] = 'filename_too_long'; - } - - // ----- Look if no error, or file not skipped - if ($p_header['status'] == 'ok') { - - // ----- Look for a file - if ($p_filedescr['type'] == 'file') { - // ----- Look for using temporary file to zip - if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) - && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) - || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) - && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_header['size'])) ) ) { - $v_result = $this->privAddFileUsingTempFile($p_filedescr, $p_header, $p_options); - if ($v_result < PCLZIP_ERR_NO_ERROR) { - return $v_result; - } - } - - // ----- Use "in memory" zip algo - else { - - // ----- Open the source file - if (($v_file = @fopen($p_filename, "rb")) == 0) { - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); - return PclZip::errorCode(); - } - - // ----- Read the file content - $v_content = @fread($v_file, $p_header['size']); - - // ----- Close the file - @fclose($v_file); - - // ----- Calculate the CRC - $p_header['crc'] = @crc32($v_content); - - // ----- Look for no compression - if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { - // ----- Set header parameters - $p_header['compressed_size'] = $p_header['size']; - $p_header['compression'] = 0; - } - - // ----- Look for normal compression - else { - // ----- Compress the content - $v_content = @gzdeflate($v_content); - - // ----- Set header parameters - $p_header['compressed_size'] = strlen($v_content); - $p_header['compression'] = 8; - } - - // ----- Call the header generation - if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { - @fclose($v_file); - return $v_result; - } - - // ----- Write the compressed (or not) content - @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); - - } - - } - - // ----- Look for a virtual file (a file from string) - else if ($p_filedescr['type'] == 'virtual_file') { - - $v_content = $p_filedescr['content']; - - // ----- Calculate the CRC - $p_header['crc'] = @crc32($v_content); - - // ----- Look for no compression - if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { - // ----- Set header parameters - $p_header['compressed_size'] = $p_header['size']; - $p_header['compression'] = 0; - } - - // ----- Look for normal compression - else { - // ----- Compress the content - $v_content = @gzdeflate($v_content); - - // ----- Set header parameters - $p_header['compressed_size'] = strlen($v_content); - $p_header['compression'] = 8; - } - - // ----- Call the header generation - if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { - @fclose($v_file); - return $v_result; - } - - // ----- Write the compressed (or not) content - @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); - } - - // ----- Look for a directory - else if ($p_filedescr['type'] == 'folder') { - // ----- Look for directory last '/' - if (@substr($p_header['stored_filename'], -1) != '/') { - $p_header['stored_filename'] .= '/'; - } - - // ----- Set the file properties - $p_header['size'] = 0; - //$p_header['external'] = 0x41FF0010; // Value for a folder : to be checked - $p_header['external'] = 0x00000010; // Value for a folder : to be checked - - // ----- Call the header generation - if (($v_result = $this->privWriteFileHeader($p_header)) != 1) - { - return $v_result; - } - } - } - - // ----- Look for post-add callback - if (isset($p_options[PCLZIP_CB_POST_ADD])) { - - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_header, $v_local_header); - - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_POST_ADD](PCLZIP_CB_POST_ADD, $v_local_header); - if ($v_result == 0) { - // ----- Ignored - $v_result = 1; - } - - // ----- Update the informations - // Nothing can be modified - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privAddFileUsingTempFile() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privAddFileUsingTempFile($p_filedescr, &$p_header, &$p_options) - { - $v_result=PCLZIP_ERR_NO_ERROR; - - // ----- Working variable - $p_filename = $p_filedescr['filename']; - - - // ----- Open the source file - if (($v_file = @fopen($p_filename, "rb")) == 0) { - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); - return PclZip::errorCode(); - } - - // ----- Creates a compressed temporary file - $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; - if (($v_file_compressed = @gzopen($v_gzip_temp_name, "wb")) == 0) { - fclose($v_file); - PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); - return PclZip::errorCode(); - } - - // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks - $v_size = filesize($p_filename); - while ($v_size != 0) { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($v_file, $v_read_size); - //$v_binary_data = pack('a'.$v_read_size, $v_buffer); - @gzputs($v_file_compressed, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } - - // ----- Close the file - @fclose($v_file); - @gzclose($v_file_compressed); - - // ----- Check the minimum file size - if (filesize($v_gzip_temp_name) < 18) { - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes'); - return PclZip::errorCode(); - } - - // ----- Extract the compressed attributes - if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) { - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); - return PclZip::errorCode(); - } - - // ----- Read the gzip file header - $v_binary_data = @fread($v_file_compressed, 10); - $v_data_header = unpack('a1id1/a1id2/a1cm/a1flag/Vmtime/a1xfl/a1os', $v_binary_data); - - // ----- Check some parameters - $v_data_header['os'] = bin2hex($v_data_header['os']); - - // ----- Read the gzip file footer - @fseek($v_file_compressed, filesize($v_gzip_temp_name)-8); - $v_binary_data = @fread($v_file_compressed, 8); - $v_data_footer = unpack('Vcrc/Vcompressed_size', $v_binary_data); - - // ----- Set the attributes - $p_header['compression'] = ord($v_data_header['cm']); - //$p_header['mtime'] = $v_data_header['mtime']; - $p_header['crc'] = $v_data_footer['crc']; - $p_header['compressed_size'] = filesize($v_gzip_temp_name)-18; - - // ----- Close the file - @fclose($v_file_compressed); - - // ----- Call the header generation - if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { - return $v_result; - } - - // ----- Add the compressed data - if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) - { - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); - return PclZip::errorCode(); - } - - // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks - fseek($v_file_compressed, 10); - $v_size = $p_header['compressed_size']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($v_file_compressed, $v_read_size); - //$v_binary_data = pack('a'.$v_read_size, $v_buffer); - @fwrite($this->zip_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } - - // ----- Close the file - @fclose($v_file_compressed); - - // ----- Unlink the temporary file - @unlink($v_gzip_temp_name); - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privCalculateStoredFilename() - // Description : - // Based on file descriptor properties and global options, this method - // calculate the filename that will be stored in the archive. - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privCalculateStoredFilename(&$p_filedescr, &$p_options) - { - $v_result=1; - - // ----- Working variables - $p_filename = $p_filedescr['filename']; - if (isset($p_options[PCLZIP_OPT_ADD_PATH])) { - $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH]; - } - else { - $p_add_dir = ''; - } - if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) { - $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH]; - } - else { - $p_remove_dir = ''; - } - if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { - $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH]; - } - else { - $p_remove_all_dir = 0; - } - - - // ----- Look for full name change - if (isset($p_filedescr['new_full_name'])) { - // ----- Remove drive letter if any - $v_stored_filename = PclZipUtilTranslateWinPath($p_filedescr['new_full_name']); - } - - // ----- Look for path and/or short name change - else { - - // ----- Look for short name change - // Its when we cahnge just the filename but not the path - if (isset($p_filedescr['new_short_name'])) { - $v_path_info = pathinfo($p_filename); - $v_dir = ''; - if ($v_path_info['dirname'] != '') { - $v_dir = $v_path_info['dirname'].'/'; - } - $v_stored_filename = $v_dir.$p_filedescr['new_short_name']; - } - else { - // ----- Calculate the stored filename - $v_stored_filename = $p_filename; - } - - // ----- Look for all path to remove - if ($p_remove_all_dir) { - $v_stored_filename = basename($p_filename); - } - // ----- Look for partial path remove - else if ($p_remove_dir != "") { - if (substr($p_remove_dir, -1) != '/') - $p_remove_dir .= "/"; - - if ( (substr($p_filename, 0, 2) == "./") - || (substr($p_remove_dir, 0, 2) == "./")) { - - if ( (substr($p_filename, 0, 2) == "./") - && (substr($p_remove_dir, 0, 2) != "./")) { - $p_remove_dir = "./".$p_remove_dir; - } - if ( (substr($p_filename, 0, 2) != "./") - && (substr($p_remove_dir, 0, 2) == "./")) { - $p_remove_dir = substr($p_remove_dir, 2); - } - } - - $v_compare = PclZipUtilPathInclusion($p_remove_dir, - $v_stored_filename); - if ($v_compare > 0) { - if ($v_compare == 2) { - $v_stored_filename = ""; - } - else { - $v_stored_filename = substr($v_stored_filename, - strlen($p_remove_dir)); - } - } - } - - // ----- Remove drive letter if any - $v_stored_filename = PclZipUtilTranslateWinPath($v_stored_filename); - - // ----- Look for path to add - if ($p_add_dir != "") { - if (substr($p_add_dir, -1) == "/") - $v_stored_filename = $p_add_dir.$v_stored_filename; - else - $v_stored_filename = $p_add_dir."/".$v_stored_filename; - } - } - - // ----- Filename (reduce the path of stored name) - $v_stored_filename = PclZipUtilPathReduction($v_stored_filename); - $p_filedescr['stored_filename'] = $v_stored_filename; - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privWriteFileHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privWriteFileHeader(&$p_header) - { - $v_result=1; - - // ----- Store the offset position of the file - $p_header['offset'] = ftell($this->zip_fd); - - // ----- Transform UNIX mtime to DOS format mdate/mtime - $v_date = getdate($p_header['mtime']); - $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; - $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; - - // ----- Packed data - $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50, - $p_header['version_extracted'], $p_header['flag'], - $p_header['compression'], $v_mtime, $v_mdate, - $p_header['crc'], $p_header['compressed_size'], - $p_header['size'], - strlen($p_header['stored_filename']), - $p_header['extra_len']); - - // ----- Write the first 148 bytes of the header in the archive - fputs($this->zip_fd, $v_binary_data, 30); - - // ----- Write the variable fields - if (strlen($p_header['stored_filename']) != 0) - { - fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); - } - if ($p_header['extra_len'] != 0) - { - fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privWriteCentralFileHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privWriteCentralFileHeader(&$p_header) - { - $v_result=1; - - // TBC - //for(reset($p_header); $key = key($p_header); next($p_header)) { - //} - - // ----- Transform UNIX mtime to DOS format mdate/mtime - $v_date = getdate($p_header['mtime']); - $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; - $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; - - - // ----- Packed data - $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50, - $p_header['version'], $p_header['version_extracted'], - $p_header['flag'], $p_header['compression'], - $v_mtime, $v_mdate, $p_header['crc'], - $p_header['compressed_size'], $p_header['size'], - strlen($p_header['stored_filename']), - $p_header['extra_len'], $p_header['comment_len'], - $p_header['disk'], $p_header['internal'], - $p_header['external'], $p_header['offset']); - - // ----- Write the 42 bytes of the header in the zip file - fputs($this->zip_fd, $v_binary_data, 46); - - // ----- Write the variable fields - if (strlen($p_header['stored_filename']) != 0) - { - fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); - } - if ($p_header['extra_len'] != 0) - { - fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); - } - if ($p_header['comment_len'] != 0) - { - fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privWriteCentralHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment) - { - $v_result=1; - - // ----- Packed data - $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries, - $p_nb_entries, $p_size, - $p_offset, strlen($p_comment)); - - // ----- Write the 22 bytes of the header in the zip file - fputs($this->zip_fd, $v_binary_data, 22); - - // ----- Write the variable fields - if (strlen($p_comment) != 0) - { - fputs($this->zip_fd, $p_comment, strlen($p_comment)); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privList() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privList(&$p_list) - { - $v_result=1; - - // ----- Magic quotes trick - $this->privDisableMagicQuotes(); - - // ----- Open the zip file - if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) - { - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) - { - $this->privSwapBackMagicQuotes(); - return $v_result; - } - - // ----- Go to beginning of Central Dir - @rewind($this->zip_fd); - if (@fseek($this->zip_fd, $v_central_dir['offset'])) - { - $this->privSwapBackMagicQuotes(); - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read each entry - for ($i=0; $i<$v_central_dir['entries']; $i++) - { - // ----- Read the file header - if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) - { - $this->privSwapBackMagicQuotes(); - return $v_result; - } - $v_header['index'] = $i; - - // ----- Get the only interesting attributes - $this->privConvertHeader2FileInfo($v_header, $p_list[$i]); - unset($v_header); - } - - // ----- Close the zip file - $this->privCloseFd(); - - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privConvertHeader2FileInfo() - // Description : - // This function takes the file informations from the central directory - // entries and extract the interesting parameters that will be given back. - // The resulting file infos are set in the array $p_info - // $p_info['filename'] : Filename with full path. Given by user (add), - // extracted in the filesystem (extract). - // $p_info['stored_filename'] : Stored filename in the archive. - // $p_info['size'] = Size of the file. - // $p_info['compressed_size'] = Compressed size of the file. - // $p_info['mtime'] = Last modification date of the file. - // $p_info['comment'] = Comment associated with the file. - // $p_info['folder'] = true/false : indicates if the entry is a folder or not. - // $p_info['status'] = status of the action on the file. - // $p_info['crc'] = CRC of the file content. - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privConvertHeader2FileInfo($p_header, &$p_info) - { - $v_result=1; - - // ----- Get the interesting attributes - $v_temp_path = PclZipUtilPathReduction($p_header['filename']); - $p_info['filename'] = $v_temp_path; - $v_temp_path = PclZipUtilPathReduction($p_header['stored_filename']); - $p_info['stored_filename'] = $v_temp_path; - $p_info['size'] = $p_header['size']; - $p_info['compressed_size'] = $p_header['compressed_size']; - $p_info['mtime'] = $p_header['mtime']; - $p_info['comment'] = $p_header['comment']; - $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010); - $p_info['index'] = $p_header['index']; - $p_info['status'] = $p_header['status']; - $p_info['crc'] = $p_header['crc']; - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privExtractByRule() - // Description : - // Extract a file or directory depending of rules (by index, by name, ...) - // Parameters : - // $p_file_list : An array where will be placed the properties of each - // extracted file - // $p_path : Path to add while writing the extracted files - // $p_remove_path : Path to remove (from the file memorized path) while writing the - // extracted files. If the path does not match the file path, - // the file is extracted with its memorized path. - // $p_remove_path does not apply to 'list' mode. - // $p_path and $p_remove_path are commulative. - // Return Values : - // 1 on success,0 or less on error (see error code list) - // -------------------------------------------------------------------------------- - function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) - { - $v_result=1; - - // ----- Magic quotes trick - $this->privDisableMagicQuotes(); - - // ----- Check the path - if ( ($p_path == "") - || ( (substr($p_path, 0, 1) != "/") - && (substr($p_path, 0, 3) != "../") - && (substr($p_path,1,2)!=":/"))) - $p_path = "./".$p_path; - - // ----- Reduce the path last (and duplicated) '/' - if (($p_path != "./") && ($p_path != "/")) - { - // ----- Look for the path end '/' - while (substr($p_path, -1) == "/") - { - $p_path = substr($p_path, 0, strlen($p_path)-1); - } - } - - // ----- Look for path to remove format (should end by /) - if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) - { - $p_remove_path .= '/'; - } - $p_remove_path_size = strlen($p_remove_path); - - // ----- Open the zip file - if (($v_result = $this->privOpenFd('rb')) != 1) - { - $this->privSwapBackMagicQuotes(); - return $v_result; - } - - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) - { - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - - return $v_result; - } - - // ----- Start at beginning of Central Dir - $v_pos_entry = $v_central_dir['offset']; - - // ----- Read each entry - $j_start = 0; - for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) - { - - // ----- Read next Central dir entry - @rewind($this->zip_fd); - if (@fseek($this->zip_fd, $v_pos_entry)) - { - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read the file header - $v_header = array(); - if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) - { - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - - return $v_result; - } - - // ----- Store the index - $v_header['index'] = $i; - - // ----- Store the file position - $v_pos_entry = ftell($this->zip_fd); - - // ----- Look for the specific extract rules - $v_extract = false; - - // ----- Look for extract by name rule - if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) - && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { - - // ----- Look if the filename is in the list - for ($j=0; ($j strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) - && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { - $v_extract = true; - } - } - // ----- Look for a filename - elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { - $v_extract = true; - } - } - } - - // ----- Look for extract by ereg rule - // ereg() is deprecated with PHP 5.3 - /* - else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) - && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { - - if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) { - $v_extract = true; - } - } - */ - - // ----- Look for extract by preg rule - else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) - && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { - - if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) { - $v_extract = true; - } - } - - // ----- Look for extract by index rule - else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) - && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { - - // ----- Look if the index is in the list - for ($j=$j_start; ($j=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { - $v_extract = true; - } - if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { - $j_start = $j+1; - } - - if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { - break; - } - } - } - - // ----- Look for no rule, which means extract all the archive - else { - $v_extract = true; - } - - // ----- Check compression method - if ( ($v_extract) - && ( ($v_header['compression'] != 8) - && ($v_header['compression'] != 0))) { - $v_header['status'] = 'unsupported_compression'; - - // ----- Look for PCLZIP_OPT_STOP_ON_ERROR - if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) - && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { - - $this->privSwapBackMagicQuotes(); - - PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION, - "Filename '".$v_header['stored_filename']."' is " - ."compressed by an unsupported compression " - ."method (".$v_header['compression'].") "); - - return PclZip::errorCode(); - } - } - - // ----- Check encrypted files - if (($v_extract) && (($v_header['flag'] & 1) == 1)) { - $v_header['status'] = 'unsupported_encryption'; - - // ----- Look for PCLZIP_OPT_STOP_ON_ERROR - if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) - && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { - - $this->privSwapBackMagicQuotes(); - - PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, - "Unsupported encryption for " - ." filename '".$v_header['stored_filename'] - ."'"); - - return PclZip::errorCode(); - } - } - - // ----- Look for real extraction - if (($v_extract) && ($v_header['status'] != 'ok')) { - $v_result = $this->privConvertHeader2FileInfo($v_header, - $p_file_list[$v_nb_extracted++]); - if ($v_result != 1) { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - return $v_result; - } - - $v_extract = false; - } - - // ----- Look for real extraction - if ($v_extract) - { - - // ----- Go to the file position - @rewind($this->zip_fd); - if (@fseek($this->zip_fd, $v_header['offset'])) - { - // ----- Close the zip file - $this->privCloseFd(); - - $this->privSwapBackMagicQuotes(); - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Look for extraction as string - if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) { - - $v_string = ''; - - // ----- Extracting the file - $v_result1 = $this->privExtractFileAsString($v_header, $v_string, $p_options); - if ($v_result1 < 1) { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - return $v_result1; - } - - // ----- Get the only interesting attributes - if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1) - { - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - - return $v_result; - } - - // ----- Set the file content - $p_file_list[$v_nb_extracted]['content'] = $v_string; - - // ----- Next extracted file - $v_nb_extracted++; - - // ----- Look for user callback abort - if ($v_result1 == 2) { - break; - } - } - // ----- Look for extraction in standard output - elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) - && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) { - // ----- Extracting the file in standard output - $v_result1 = $this->privExtractFileInOutput($v_header, $p_options); - if ($v_result1 < 1) { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - return $v_result1; - } - - // ----- Get the only interesting attributes - if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - return $v_result; - } - - // ----- Look for user callback abort - if ($v_result1 == 2) { - break; - } - } - // ----- Look for normal extraction - else { - // ----- Extracting the file - $v_result1 = $this->privExtractFile($v_header, - $p_path, $p_remove_path, - $p_remove_all_path, - $p_options); - if ($v_result1 < 1) { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - return $v_result1; - } - - // ----- Get the only interesting attributes - if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) - { - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - - return $v_result; - } - - // ----- Look for user callback abort - if ($v_result1 == 2) { - break; - } - } - } - } - - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privExtractFile() - // Description : - // Parameters : - // Return Values : - // - // 1 : ... ? - // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback - // -------------------------------------------------------------------------------- - function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) - { - $v_result=1; - - // ----- Read the file header - if (($v_result = $this->privReadFileHeader($v_header)) != 1) - { - // ----- Return - return $v_result; - } - - - // ----- Check that the file header is coherent with $p_entry info - if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { - // TBC - } - - // ----- Look for all path to remove - if ($p_remove_all_path == true) { - // ----- Look for folder entry that not need to be extracted - if (($p_entry['external']&0x00000010)==0x00000010) { - - $p_entry['status'] = "filtered"; - - return $v_result; - } - - // ----- Get the basename of the path - $p_entry['filename'] = basename($p_entry['filename']); - } - - // ----- Look for path to remove - else if ($p_remove_path != "") - { - if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2) - { - - // ----- Change the file status - $p_entry['status'] = "filtered"; - - // ----- Return - return $v_result; - } - - $p_remove_path_size = strlen($p_remove_path); - if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path) - { - - // ----- Remove the path - $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size); - - } - } - - // ----- Add the path - if ($p_path != '') { - $p_entry['filename'] = $p_path."/".$p_entry['filename']; - } - - // ----- Check a base_dir_restriction - if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) { - $v_inclusion - = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION], - $p_entry['filename']); - if ($v_inclusion == 0) { - - PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION, - "Filename '".$p_entry['filename']."' is " - ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION"); - - return PclZip::errorCode(); - } - } - - // ----- Look for pre-extract callback - if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { - - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_entry, $v_local_header); - - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); - if ($v_result == 0) { - // ----- Change the file status - $p_entry['status'] = "skipped"; - $v_result = 1; - } - - // ----- Look for abort result - if ($v_result == 2) { - // ----- This status is internal and will be changed in 'skipped' - $p_entry['status'] = "aborted"; - $v_result = PCLZIP_ERR_USER_ABORTED; - } - - // ----- Update the informations - // Only some fields can be modified - $p_entry['filename'] = $v_local_header['filename']; - } - - - // ----- Look if extraction should be done - if ($p_entry['status'] == 'ok') { - - // ----- Look for specific actions while the file exist - if (file_exists($p_entry['filename'])) - { - - // ----- Look if file is a directory - if (is_dir($p_entry['filename'])) - { - - // ----- Change the file status - $p_entry['status'] = "already_a_directory"; - - // ----- Look for PCLZIP_OPT_STOP_ON_ERROR - // For historical reason first PclZip implementation does not stop - // when this kind of error occurs. - if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) - && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { - - PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY, - "Filename '".$p_entry['filename']."' is " - ."already used by an existing directory"); - - return PclZip::errorCode(); - } - } - // ----- Look if file is write protected - else if (!is_writeable($p_entry['filename'])) - { - - // ----- Change the file status - $p_entry['status'] = "write_protected"; - - // ----- Look for PCLZIP_OPT_STOP_ON_ERROR - // For historical reason first PclZip implementation does not stop - // when this kind of error occurs. - if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) - && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { - - PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, - "Filename '".$p_entry['filename']."' exists " - ."and is write protected"); - - return PclZip::errorCode(); - } - } - - // ----- Look if the extracted file is older - else if (filemtime($p_entry['filename']) > $p_entry['mtime']) - { - // ----- Change the file status - if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER])) - && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) { - } - else { - $p_entry['status'] = "newer_exist"; - - // ----- Look for PCLZIP_OPT_STOP_ON_ERROR - // For historical reason first PclZip implementation does not stop - // when this kind of error occurs. - if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) - && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { - - PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, - "Newer version of '".$p_entry['filename']."' exists " - ."and option PCLZIP_OPT_REPLACE_NEWER is not selected"); - - return PclZip::errorCode(); - } - } - } - else { - } - } - - // ----- Check the directory availability and create it if necessary - else { - if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/')) - $v_dir_to_check = $p_entry['filename']; - else if (!strstr($p_entry['filename'], "/")) - $v_dir_to_check = ""; - else - $v_dir_to_check = dirname($p_entry['filename']); - - if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) { - - // ----- Change the file status - $p_entry['status'] = "path_creation_fail"; - - // ----- Return - //return $v_result; - $v_result = 1; - } - } - } - - // ----- Look if extraction should be done - if ($p_entry['status'] == 'ok') { - - // ----- Do the extraction (if not a folder) - if (!(($p_entry['external']&0x00000010)==0x00000010)) - { - // ----- Look for not compressed file - if ($p_entry['compression'] == 0) { - - // ----- Opening destination file - if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) - { - - // ----- Change the file status - $p_entry['status'] = "write_error"; - - // ----- Return - return $v_result; - } - - - // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks - $v_size = $p_entry['compressed_size']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($this->zip_fd, $v_read_size); - /* Try to speed up the code - $v_binary_data = pack('a'.$v_read_size, $v_buffer); - @fwrite($v_dest_file, $v_binary_data, $v_read_size); - */ - @fwrite($v_dest_file, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } - - // ----- Closing the destination file - fclose($v_dest_file); - - // ----- Change the file mtime - touch($p_entry['filename'], $p_entry['mtime']); - - - } - else { - // ----- TBC - // Need to be finished - if (($p_entry['flag'] & 1) == 1) { - PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, 'File \''.$p_entry['filename'].'\' is encrypted. Encrypted files are not supported.'); - return PclZip::errorCode(); - } - - - // ----- Look for using temporary file to unzip - if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) - && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) - || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) - && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_entry['size'])) ) ) { - $v_result = $this->privExtractFileUsingTempFile($p_entry, $p_options); - if ($v_result < PCLZIP_ERR_NO_ERROR) { - return $v_result; - } - } - - // ----- Look for extract in memory - else { - - - // ----- Read the compressed file in a buffer (one shot) - $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); - - // ----- Decompress the file - $v_file_content = @gzinflate($v_buffer); - unset($v_buffer); - if ($v_file_content === FALSE) { - - // ----- Change the file status - // TBC - $p_entry['status'] = "error"; - - return $v_result; - } - - // ----- Opening destination file - if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { - - // ----- Change the file status - $p_entry['status'] = "write_error"; - - return $v_result; - } - - // ----- Write the uncompressed data - @fwrite($v_dest_file, $v_file_content, $p_entry['size']); - unset($v_file_content); - - // ----- Closing the destination file - @fclose($v_dest_file); - - } - - // ----- Change the file mtime - @touch($p_entry['filename'], $p_entry['mtime']); - } - - // ----- Look for chmod option - if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) { - - // ----- Change the mode of the file - @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]); - } - - } - } - - // ----- Change abort status - if ($p_entry['status'] == "aborted") { - $p_entry['status'] = "skipped"; - } - - // ----- Look for post-extract callback - elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { - - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_entry, $v_local_header); - - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); - - // ----- Look for abort result - if ($v_result == 2) { - $v_result = PCLZIP_ERR_USER_ABORTED; - } - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privExtractFileUsingTempFile() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privExtractFileUsingTempFile(&$p_entry, &$p_options) - { - $v_result=1; - - // ----- Creates a temporary file - $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; - if (($v_dest_file = @fopen($v_gzip_temp_name, "wb")) == 0) { - fclose($v_file); - PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); - return PclZip::errorCode(); - } - - - // ----- Write gz file format header - $v_binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($p_entry['compression']), Chr(0x00), time(), Chr(0x00), Chr(3)); - @fwrite($v_dest_file, $v_binary_data, 10); - - // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks - $v_size = $p_entry['compressed_size']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($this->zip_fd, $v_read_size); - //$v_binary_data = pack('a'.$v_read_size, $v_buffer); - @fwrite($v_dest_file, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } - - // ----- Write gz file format footer - $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']); - @fwrite($v_dest_file, $v_binary_data, 8); - - // ----- Close the temporary file - @fclose($v_dest_file); - - // ----- Opening destination file - if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { - $p_entry['status'] = "write_error"; - return $v_result; - } - - // ----- Open the temporary gz file - if (($v_src_file = @gzopen($v_gzip_temp_name, 'rb')) == 0) { - @fclose($v_dest_file); - $p_entry['status'] = "read_error"; - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); - return PclZip::errorCode(); - } - - - // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks - $v_size = $p_entry['size']; - while ($v_size != 0) { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @gzread($v_src_file, $v_read_size); - //$v_binary_data = pack('a'.$v_read_size, $v_buffer); - @fwrite($v_dest_file, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } - @fclose($v_dest_file); - @gzclose($v_src_file); - - // ----- Delete the temporary file - @unlink($v_gzip_temp_name); - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privExtractFileInOutput() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privExtractFileInOutput(&$p_entry, &$p_options) - { - $v_result=1; - - // ----- Read the file header - if (($v_result = $this->privReadFileHeader($v_header)) != 1) { - return $v_result; - } - - - // ----- Check that the file header is coherent with $p_entry info - if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { - // TBC - } - - // ----- Look for pre-extract callback - if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { - - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_entry, $v_local_header); - - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); - if ($v_result == 0) { - // ----- Change the file status - $p_entry['status'] = "skipped"; - $v_result = 1; - } - - // ----- Look for abort result - if ($v_result == 2) { - // ----- This status is internal and will be changed in 'skipped' - $p_entry['status'] = "aborted"; - $v_result = PCLZIP_ERR_USER_ABORTED; - } - - // ----- Update the informations - // Only some fields can be modified - $p_entry['filename'] = $v_local_header['filename']; - } - - // ----- Trace - - // ----- Look if extraction should be done - if ($p_entry['status'] == 'ok') { - - // ----- Do the extraction (if not a folder) - if (!(($p_entry['external']&0x00000010)==0x00000010)) { - // ----- Look for not compressed file - if ($p_entry['compressed_size'] == $p_entry['size']) { - - // ----- Read the file in a buffer (one shot) - $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); - - // ----- Send the file to the output - echo $v_buffer; - unset($v_buffer); - } - else { - - // ----- Read the compressed file in a buffer (one shot) - $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); - - // ----- Decompress the file - $v_file_content = gzinflate($v_buffer); - unset($v_buffer); - - // ----- Send the file to the output - echo $v_file_content; - unset($v_file_content); - } - } - } - - // ----- Change abort status - if ($p_entry['status'] == "aborted") { - $p_entry['status'] = "skipped"; - } - - // ----- Look for post-extract callback - elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { - - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_entry, $v_local_header); - - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); - - // ----- Look for abort result - if ($v_result == 2) { - $v_result = PCLZIP_ERR_USER_ABORTED; - } - } - - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privExtractFileAsString() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privExtractFileAsString(&$p_entry, &$p_string, &$p_options) - { - $v_result=1; - - // ----- Read the file header - $v_header = array(); - if (($v_result = $this->privReadFileHeader($v_header)) != 1) - { - // ----- Return - return $v_result; - } - - - // ----- Check that the file header is coherent with $p_entry info - if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { - // TBC - } - - // ----- Look for pre-extract callback - if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { - - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_entry, $v_local_header); - - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); - if ($v_result == 0) { - // ----- Change the file status - $p_entry['status'] = "skipped"; - $v_result = 1; - } - - // ----- Look for abort result - if ($v_result == 2) { - // ----- This status is internal and will be changed in 'skipped' - $p_entry['status'] = "aborted"; - $v_result = PCLZIP_ERR_USER_ABORTED; - } - - // ----- Update the informations - // Only some fields can be modified - $p_entry['filename'] = $v_local_header['filename']; - } - - - // ----- Look if extraction should be done - if ($p_entry['status'] == 'ok') { - - // ----- Do the extraction (if not a folder) - if (!(($p_entry['external']&0x00000010)==0x00000010)) { - // ----- Look for not compressed file - // if ($p_entry['compressed_size'] == $p_entry['size']) - if ($p_entry['compression'] == 0) { - - // ----- Reading the file - $p_string = @fread($this->zip_fd, $p_entry['compressed_size']); - } - else { - - // ----- Reading the file - $v_data = @fread($this->zip_fd, $p_entry['compressed_size']); - - // ----- Decompress the file - if (($p_string = @gzinflate($v_data)) === FALSE) { - // TBC - } - } - - // ----- Trace - } - else { - // TBC : error : can not extract a folder in a string - } - - } - - // ----- Change abort status - if ($p_entry['status'] == "aborted") { - $p_entry['status'] = "skipped"; - } - - // ----- Look for post-extract callback - elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { - - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_entry, $v_local_header); - - // ----- Swap the content to header - $v_local_header['content'] = $p_string; - $p_string = ''; - - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); - - // ----- Swap back the content to header - $p_string = $v_local_header['content']; - unset($v_local_header['content']); - - // ----- Look for abort result - if ($v_result == 2) { - $v_result = PCLZIP_ERR_USER_ABORTED; - } - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privReadFileHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privReadFileHeader(&$p_header) - { - $v_result=1; - - // ----- Read the 4 bytes signature - $v_binary_data = @fread($this->zip_fd, 4); - $v_data = unpack('Vid', $v_binary_data); - - // ----- Check signature - if ($v_data['id'] != 0x04034b50) - { - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read the first 42 bytes of the header - $v_binary_data = fread($this->zip_fd, 26); - - // ----- Look for invalid block size - if (strlen($v_binary_data) != 26) - { - $p_header['filename'] = ""; - $p_header['status'] = "invalid_header"; - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Extract the values - $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data); - - // ----- Get filename - $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']); - - // ----- Get extra_fields - if ($v_data['extra_len'] != 0) { - $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']); - } - else { - $p_header['extra'] = ''; - } - - // ----- Extract properties - $p_header['version_extracted'] = $v_data['version']; - $p_header['compression'] = $v_data['compression']; - $p_header['size'] = $v_data['size']; - $p_header['compressed_size'] = $v_data['compressed_size']; - $p_header['crc'] = $v_data['crc']; - $p_header['flag'] = $v_data['flag']; - $p_header['filename_len'] = $v_data['filename_len']; - - // ----- Recuperate date in UNIX format - $p_header['mdate'] = $v_data['mdate']; - $p_header['mtime'] = $v_data['mtime']; - if ($p_header['mdate'] && $p_header['mtime']) - { - // ----- Extract time - $v_hour = ($p_header['mtime'] & 0xF800) >> 11; - $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; - $v_seconde = ($p_header['mtime'] & 0x001F)*2; - - // ----- Extract date - $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; - $v_month = ($p_header['mdate'] & 0x01E0) >> 5; - $v_day = $p_header['mdate'] & 0x001F; - - // ----- Get UNIX date format - $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); - - } - else - { - $p_header['mtime'] = time(); - } - - // TBC - //for(reset($v_data); $key = key($v_data); next($v_data)) { - //} - - // ----- Set the stored filename - $p_header['stored_filename'] = $p_header['filename']; - - // ----- Set the status field - $p_header['status'] = "ok"; - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privReadCentralFileHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privReadCentralFileHeader(&$p_header) - { - $v_result=1; - - // ----- Read the 4 bytes signature - $v_binary_data = @fread($this->zip_fd, 4); - $v_data = unpack('Vid', $v_binary_data); - - // ----- Check signature - if ($v_data['id'] != 0x02014b50) - { - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read the first 42 bytes of the header - $v_binary_data = fread($this->zip_fd, 42); - - // ----- Look for invalid block size - if (strlen($v_binary_data) != 42) - { - $p_header['filename'] = ""; - $p_header['status'] = "invalid_header"; - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Extract the values - $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data); - - // ----- Get filename - if ($p_header['filename_len'] != 0) - $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']); - else - $p_header['filename'] = ''; - - // ----- Get extra - if ($p_header['extra_len'] != 0) - $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']); - else - $p_header['extra'] = ''; - - // ----- Get comment - if ($p_header['comment_len'] != 0) - $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']); - else - $p_header['comment'] = ''; - - // ----- Extract properties - - // ----- Recuperate date in UNIX format - //if ($p_header['mdate'] && $p_header['mtime']) - // TBC : bug : this was ignoring time with 0/0/0 - if (1) - { - // ----- Extract time - $v_hour = ($p_header['mtime'] & 0xF800) >> 11; - $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; - $v_seconde = ($p_header['mtime'] & 0x001F)*2; - - // ----- Extract date - $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; - $v_month = ($p_header['mdate'] & 0x01E0) >> 5; - $v_day = $p_header['mdate'] & 0x001F; - - // ----- Get UNIX date format - $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); - - } - else - { - $p_header['mtime'] = time(); - } - - // ----- Set the stored filename - $p_header['stored_filename'] = $p_header['filename']; - - // ----- Set default status to ok - $p_header['status'] = 'ok'; - - // ----- Look if it is a directory - if (substr($p_header['filename'], -1) == '/') { - //$p_header['external'] = 0x41FF0010; - $p_header['external'] = 0x00000010; - } - - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privCheckFileHeaders() - // Description : - // Parameters : - // Return Values : - // 1 on success, - // 0 on error; - // -------------------------------------------------------------------------------- - function privCheckFileHeaders(&$p_local_header, &$p_central_header) - { - $v_result=1; - - // ----- Check the static values - // TBC - if ($p_local_header['filename'] != $p_central_header['filename']) { - } - if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) { - } - if ($p_local_header['flag'] != $p_central_header['flag']) { - } - if ($p_local_header['compression'] != $p_central_header['compression']) { - } - if ($p_local_header['mtime'] != $p_central_header['mtime']) { - } - if ($p_local_header['filename_len'] != $p_central_header['filename_len']) { - } - - // ----- Look for flag bit 3 - if (($p_local_header['flag'] & 8) == 8) { - $p_local_header['size'] = $p_central_header['size']; - $p_local_header['compressed_size'] = $p_central_header['compressed_size']; - $p_local_header['crc'] = $p_central_header['crc']; - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privReadEndCentralDir() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privReadEndCentralDir(&$p_central_dir) - { - $v_result=1; - - // ----- Go to the end of the zip file - $v_size = filesize($this->zipname); - @fseek($this->zip_fd, $v_size); - if (@ftell($this->zip_fd) != $v_size) - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\''); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- First try : look if this is an archive with no commentaries (most of the time) - // in this case the end of central dir is at 22 bytes of the file end - $v_found = 0; - if ($v_size > 26) { - @fseek($this->zip_fd, $v_size-22); - if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22)) - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read for bytes - $v_binary_data = @fread($this->zip_fd, 4); - $v_data = @unpack('Vid', $v_binary_data); - - // ----- Check signature - if ($v_data['id'] == 0x06054b50) { - $v_found = 1; - } - - $v_pos = ftell($this->zip_fd); - } - - // ----- Go back to the maximum possible size of the Central Dir End Record - if (!$v_found) { - $v_maximum_size = 65557; // 0xFFFF + 22; - if ($v_maximum_size > $v_size) - $v_maximum_size = $v_size; - @fseek($this->zip_fd, $v_size-$v_maximum_size); - if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size)) - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read byte per byte in order to find the signature - $v_pos = ftell($this->zip_fd); - $v_bytes = 0x00000000; - while ($v_pos < $v_size) - { - // ----- Read a byte - $v_byte = @fread($this->zip_fd, 1); - - // ----- Add the byte - //$v_bytes = ($v_bytes << 8) | Ord($v_byte); - // Note we mask the old value down such that once shifted we can never end up with more than a 32bit number - // Otherwise on systems where we have 64bit integers the check below for the magic number will fail. - $v_bytes = ( ($v_bytes & 0xFFFFFF) << 8) | Ord($v_byte); - - // ----- Compare the bytes - if ($v_bytes == 0x504b0506) - { - $v_pos++; - break; - } - - $v_pos++; - } - - // ----- Look if not found end of central dir - if ($v_pos == $v_size) - { - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature"); - - // ----- Return - return PclZip::errorCode(); - } - } - - // ----- Read the first 18 bytes of the header - $v_binary_data = fread($this->zip_fd, 18); - - // ----- Look for invalid block size - if (strlen($v_binary_data) != 18) - { - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data)); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Extract the values - $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data); - - // ----- Check the global size - if (($v_pos + $v_data['comment_size'] + 18) != $v_size) { - - // ----- Removed in release 2.2 see readme file - // The check of the file size is a little too strict. - // Some bugs where found when a zip is encrypted/decrypted with 'crypt'. - // While decrypted, zip has training 0 bytes - if (0) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, - 'The central dir is not at the end of the archive.' - .' Some trailing bytes exists after the archive.'); - - // ----- Return - return PclZip::errorCode(); - } - } - - // ----- Get comment - if ($v_data['comment_size'] != 0) { - $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']); - } - else - $p_central_dir['comment'] = ''; - - $p_central_dir['entries'] = $v_data['entries']; - $p_central_dir['disk_entries'] = $v_data['disk_entries']; - $p_central_dir['offset'] = $v_data['offset']; - $p_central_dir['size'] = $v_data['size']; - $p_central_dir['disk'] = $v_data['disk']; - $p_central_dir['disk_start'] = $v_data['disk_start']; - - // TBC - //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) { - //} - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privDeleteByRule() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privDeleteByRule(&$p_result_list, &$p_options) - { - $v_result=1; - $v_list_detail = array(); - - // ----- Open the zip file - if (($v_result=$this->privOpenFd('rb')) != 1) - { - // ----- Return - return $v_result; - } - - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) - { - $this->privCloseFd(); - return $v_result; - } - - // ----- Go to beginning of File - @rewind($this->zip_fd); - - // ----- Scan all the files - // ----- Start at beginning of Central Dir - $v_pos_entry = $v_central_dir['offset']; - @rewind($this->zip_fd); - if (@fseek($this->zip_fd, $v_pos_entry)) - { - // ----- Close the zip file - $this->privCloseFd(); - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read each entry - $v_header_list = array(); - $j_start = 0; - for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) - { - - // ----- Read the file header - $v_header_list[$v_nb_extracted] = array(); - if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1) - { - // ----- Close the zip file - $this->privCloseFd(); - - return $v_result; - } - - - // ----- Store the index - $v_header_list[$v_nb_extracted]['index'] = $i; - - // ----- Look for the specific extract rules - $v_found = false; - - // ----- Look for extract by name rule - if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) - && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { - - // ----- Look if the filename is in the list - for ($j=0; ($j strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) - && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { - $v_found = true; - } - elseif ( (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */ - && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) { - $v_found = true; - } - } - // ----- Look for a filename - elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { - $v_found = true; - } - } - } - - // ----- Look for extract by ereg rule - // ereg() is deprecated with PHP 5.3 - /* - else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) - && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { - - if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { - $v_found = true; - } - } - */ - - // ----- Look for extract by preg rule - else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) - && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { - - if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { - $v_found = true; - } - } - - // ----- Look for extract by index rule - else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) - && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { - - // ----- Look if the index is in the list - for ($j=$j_start; ($j=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { - $v_found = true; - } - if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { - $j_start = $j+1; - } - - if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { - break; - } - } - } - else { - $v_found = true; - } - - // ----- Look for deletion - if ($v_found) - { - unset($v_header_list[$v_nb_extracted]); - } - else - { - $v_nb_extracted++; - } - } - - // ----- Look if something need to be deleted - if ($v_nb_extracted > 0) { - - // ----- Creates a temporay file - $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; - - // ----- Creates a temporary zip archive - $v_temp_zip = new PclZip($v_zip_temp_name); - - // ----- Open the temporary zip file in write mode - if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) { - $this->privCloseFd(); - - // ----- Return - return $v_result; - } - - // ----- Look which file need to be kept - for ($i=0; $izip_fd); - if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) { - // ----- Close the zip file - $this->privCloseFd(); - $v_temp_zip->privCloseFd(); - @unlink($v_zip_temp_name); - - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Read the file header - $v_local_header = array(); - if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) { - // ----- Close the zip file - $this->privCloseFd(); - $v_temp_zip->privCloseFd(); - @unlink($v_zip_temp_name); - - // ----- Return - return $v_result; - } - - // ----- Check that local file header is same as central file header - if ($this->privCheckFileHeaders($v_local_header, - $v_header_list[$i]) != 1) { - // TBC - } - unset($v_local_header); - - // ----- Write the file header - if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) { - // ----- Close the zip file - $this->privCloseFd(); - $v_temp_zip->privCloseFd(); - @unlink($v_zip_temp_name); - - // ----- Return - return $v_result; - } - - // ----- Read/write the data block - if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) { - // ----- Close the zip file - $this->privCloseFd(); - $v_temp_zip->privCloseFd(); - @unlink($v_zip_temp_name); - - // ----- Return - return $v_result; - } - } - - // ----- Store the offset of the central dir - $v_offset = @ftell($v_temp_zip->zip_fd); - - // ----- Re-Create the Central Dir files header - for ($i=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { - $v_temp_zip->privCloseFd(); - $this->privCloseFd(); - @unlink($v_zip_temp_name); - - // ----- Return - return $v_result; - } - - // ----- Transform the header to a 'usable' info - $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); - } - - - // ----- Zip file comment - $v_comment = ''; - if (isset($p_options[PCLZIP_OPT_COMMENT])) { - $v_comment = $p_options[PCLZIP_OPT_COMMENT]; - } - - // ----- Calculate the size of the central header - $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset; - - // ----- Create the central dir footer - if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) { - // ----- Reset the file list - unset($v_header_list); - $v_temp_zip->privCloseFd(); - $this->privCloseFd(); - @unlink($v_zip_temp_name); - - // ----- Return - return $v_result; - } - - // ----- Close - $v_temp_zip->privCloseFd(); - $this->privCloseFd(); - - // ----- Delete the zip file - // TBC : I should test the result ... - @unlink($this->zipname); - - // ----- Rename the temporary file - // TBC : I should test the result ... - //@rename($v_zip_temp_name, $this->zipname); - PclZipUtilRename($v_zip_temp_name, $this->zipname); - - // ----- Destroy the temporary archive - unset($v_temp_zip); - } - - // ----- Remove every files : reset the file - else if ($v_central_dir['entries'] != 0) { - $this->privCloseFd(); - - if (($v_result = $this->privOpenFd('wb')) != 1) { - return $v_result; - } - - if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) { - return $v_result; - } - - $this->privCloseFd(); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privDirCheck() - // Description : - // Check if a directory exists, if not it creates it and all the parents directory - // which may be useful. - // Parameters : - // $p_dir : Directory path to check. - // Return Values : - // 1 : OK - // -1 : Unable to create directory - // -------------------------------------------------------------------------------- - function privDirCheck($p_dir, $p_is_dir=false) - { - $v_result = 1; - - - // ----- Remove the final '/' - if (($p_is_dir) && (substr($p_dir, -1)=='/')) - { - $p_dir = substr($p_dir, 0, strlen($p_dir)-1); - } - - // ----- Check the directory availability - if ((is_dir($p_dir)) || ($p_dir == "")) - { - return 1; - } - - // ----- Extract parent directory - $p_parent_dir = dirname($p_dir); - - // ----- Just a check - if ($p_parent_dir != $p_dir) - { - // ----- Look for parent directory - if ($p_parent_dir != "") - { - if (($v_result = $this->privDirCheck($p_parent_dir)) != 1) - { - return $v_result; - } - } - } - - // ----- Create the directory - if (!@mkdir($p_dir, 0777)) - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privMerge() - // Description : - // If $p_archive_to_add does not exist, the function exit with a success result. - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privMerge(&$p_archive_to_add) - { - $v_result=1; - - // ----- Look if the archive_to_add exists - if (!is_file($p_archive_to_add->zipname)) - { - - // ----- Nothing to merge, so merge is a success - $v_result = 1; - - // ----- Return - return $v_result; - } - - // ----- Look if the archive exists - if (!is_file($this->zipname)) - { - - // ----- Do a duplicate - $v_result = $this->privDuplicate($p_archive_to_add->zipname); - - // ----- Return - return $v_result; - } - - // ----- Open the zip file - if (($v_result=$this->privOpenFd('rb')) != 1) - { - // ----- Return - return $v_result; - } - - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) - { - $this->privCloseFd(); - return $v_result; - } - - // ----- Go to beginning of File - @rewind($this->zip_fd); - - // ----- Open the archive_to_add file - if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1) - { - $this->privCloseFd(); - - // ----- Return - return $v_result; - } - - // ----- Read the central directory informations - $v_central_dir_to_add = array(); - if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1) - { - $this->privCloseFd(); - $p_archive_to_add->privCloseFd(); - - return $v_result; - } - - // ----- Go to beginning of File - @rewind($p_archive_to_add->zip_fd); - - // ----- Creates a temporay file - $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; - - // ----- Open the temporary file in write mode - if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) - { - $this->privCloseFd(); - $p_archive_to_add->privCloseFd(); - - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Copy the files from the archive to the temporary file - // TBC : Here I should better append the file and go back to erase the central dir - $v_size = $v_central_dir['offset']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = fread($this->zip_fd, $v_read_size); - @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } - - // ----- Copy the files from the archive_to_add into the temporary file - $v_size = $v_central_dir_to_add['offset']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size); - @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } - - // ----- Store the offset of the central dir - $v_offset = @ftell($v_zip_temp_fd); - - // ----- Copy the block of file headers from the old archive - $v_size = $v_central_dir['size']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($this->zip_fd, $v_read_size); - @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } - - // ----- Copy the block of file headers from the archive_to_add - $v_size = $v_central_dir_to_add['size']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size); - @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } - - // ----- Merge the file comments - $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment']; - - // ----- Calculate the size of the (new) central header - $v_size = @ftell($v_zip_temp_fd)-$v_offset; - - // ----- Swap the file descriptor - // Here is a trick : I swap the temporary fd with the zip fd, in order to use - // the following methods on the temporary fil and not the real archive fd - $v_swap = $this->zip_fd; - $this->zip_fd = $v_zip_temp_fd; - $v_zip_temp_fd = $v_swap; - - // ----- Create the central dir footer - if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1) - { - $this->privCloseFd(); - $p_archive_to_add->privCloseFd(); - @fclose($v_zip_temp_fd); - $this->zip_fd = null; - - // ----- Reset the file list - unset($v_header_list); - - // ----- Return - return $v_result; - } - - // ----- Swap back the file descriptor - $v_swap = $this->zip_fd; - $this->zip_fd = $v_zip_temp_fd; - $v_zip_temp_fd = $v_swap; - - // ----- Close - $this->privCloseFd(); - $p_archive_to_add->privCloseFd(); - - // ----- Close the temporary file - @fclose($v_zip_temp_fd); - - // ----- Delete the zip file - // TBC : I should test the result ... - @unlink($this->zipname); - - // ----- Rename the temporary file - // TBC : I should test the result ... - //@rename($v_zip_temp_name, $this->zipname); - PclZipUtilRename($v_zip_temp_name, $this->zipname); - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privDuplicate() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privDuplicate($p_archive_filename) - { - $v_result=1; - - // ----- Look if the $p_archive_filename exists - if (!is_file($p_archive_filename)) - { - - // ----- Nothing to duplicate, so duplicate is a success. - $v_result = 1; - - // ----- Return - return $v_result; - } - - // ----- Open the zip file - if (($v_result=$this->privOpenFd('wb')) != 1) - { - // ----- Return - return $v_result; - } - - // ----- Open the temporary file in write mode - if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0) - { - $this->privCloseFd(); - - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode'); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Copy the files from the archive to the temporary file - // TBC : Here I should better append the file and go back to erase the central dir - $v_size = filesize($p_archive_filename); - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = fread($v_zip_temp_fd, $v_read_size); - @fwrite($this->zip_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } - - // ----- Close - $this->privCloseFd(); - - // ----- Close the temporary file - @fclose($v_zip_temp_fd); - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privErrorLog() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function privErrorLog($p_error_code=0, $p_error_string='') - { - if (PCLZIP_ERROR_EXTERNAL == 1) { - PclError($p_error_code, $p_error_string); - } - else { - $this->error_code = $p_error_code; - $this->error_string = $p_error_string; - } - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privErrorReset() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function privErrorReset() - { - if (PCLZIP_ERROR_EXTERNAL == 1) { - PclErrorReset(); - } - else { - $this->error_code = 0; - $this->error_string = ''; - } - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privDisableMagicQuotes() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privDisableMagicQuotes() - { - $v_result=1; - - // ----- Look if function exists - if ( (!function_exists("get_magic_quotes_runtime")) - || (!function_exists("set_magic_quotes_runtime"))) { - return $v_result; - } - - // ----- Look if already done - if ($this->magic_quotes_status != -1) { - return $v_result; - } - - // ----- Get and memorize the magic_quote value - $this->magic_quotes_status = @get_magic_quotes_runtime(); - - // ----- Disable magic_quotes - if ($this->magic_quotes_status == 1) { - @set_magic_quotes_runtime(0); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privSwapBackMagicQuotes() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privSwapBackMagicQuotes() - { - $v_result=1; - - // ----- Look if function exists - if ( (!function_exists("get_magic_quotes_runtime")) - || (!function_exists("set_magic_quotes_runtime"))) { - return $v_result; - } - - // ----- Look if something to do - if ($this->magic_quotes_status != -1) { - return $v_result; - } - - // ----- Swap back magic_quotes - if ($this->magic_quotes_status == 1) { - @set_magic_quotes_runtime($this->magic_quotes_status); - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - } - // End of class - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : PclZipUtilPathReduction() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function PclZipUtilPathReduction($p_dir) - { - $v_result = ""; - - // ----- Look for not empty path - if ($p_dir != "") { - // ----- Explode path by directory names - $v_list = explode("/", $p_dir); - - // ----- Study directories from last to first - $v_skip = 0; - for ($i=sizeof($v_list)-1; $i>=0; $i--) { - // ----- Look for current path - if ($v_list[$i] == ".") { - // ----- Ignore this directory - // Should be the first $i=0, but no check is done - } - else if ($v_list[$i] == "..") { - $v_skip++; - } - else if ($v_list[$i] == "") { - // ----- First '/' i.e. root slash - if ($i == 0) { - $v_result = "/".$v_result; - if ($v_skip > 0) { - // ----- It is an invalid path, so the path is not modified - // TBC - $v_result = $p_dir; - $v_skip = 0; - } - } - // ----- Last '/' i.e. indicates a directory - else if ($i == (sizeof($v_list)-1)) { - $v_result = $v_list[$i]; - } - // ----- Double '/' inside the path - else { - // ----- Ignore only the double '//' in path, - // but not the first and last '/' - } - } - else { - // ----- Look for item to skip - if ($v_skip > 0) { - $v_skip--; - } - else { - $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:""); - } - } - } - - // ----- Look for skip - if ($v_skip > 0) { - while ($v_skip > 0) { - $v_result = '../'.$v_result; - $v_skip--; - } - } - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : PclZipUtilPathInclusion() - // Description : - // This function indicates if the path $p_path is under the $p_dir tree. Or, - // said in an other way, if the file or sub-dir $p_path is inside the dir - // $p_dir. - // The function indicates also if the path is exactly the same as the dir. - // This function supports path with duplicated '/' like '//', but does not - // support '.' or '..' statements. - // Parameters : - // Return Values : - // 0 if $p_path is not inside directory $p_dir - // 1 if $p_path is inside directory $p_dir - // 2 if $p_path is exactly the same as $p_dir - // -------------------------------------------------------------------------------- - function PclZipUtilPathInclusion($p_dir, $p_path) - { - $v_result = 1; - - // ----- Look for path beginning by ./ - if ( ($p_dir == '.') - || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) { - $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1); - } - if ( ($p_path == '.') - || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) { - $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1); - } - - // ----- Explode dir and path by directory separator - $v_list_dir = explode("/", $p_dir); - $v_list_dir_size = sizeof($v_list_dir); - $v_list_path = explode("/", $p_path); - $v_list_path_size = sizeof($v_list_path); - - // ----- Study directories paths - $i = 0; - $j = 0; - while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) { - - // ----- Look for empty dir (path reduction) - if ($v_list_dir[$i] == '') { - $i++; - continue; - } - if ($v_list_path[$j] == '') { - $j++; - continue; - } - - // ----- Compare the items - if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) { - $v_result = 0; - } - - // ----- Next items - $i++; - $j++; - } - - // ----- Look if everything seems to be the same - if ($v_result) { - // ----- Skip all the empty items - while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++; - while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++; - - if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) { - // ----- There are exactly the same - $v_result = 2; - } - else if ($i < $v_list_dir_size) { - // ----- The path is shorter than the dir - $v_result = 0; - } - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : PclZipUtilCopyBlock() - // Description : - // Parameters : - // $p_mode : read/write compression mode - // 0 : src & dest normal - // 1 : src gzip, dest normal - // 2 : src normal, dest gzip - // 3 : src & dest gzip - // Return Values : - // -------------------------------------------------------------------------------- - function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0) - { - $v_result = 1; - - if ($p_mode==0) - { - while ($p_size != 0) - { - $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($p_src, $v_read_size); - @fwrite($p_dest, $v_buffer, $v_read_size); - $p_size -= $v_read_size; - } - } - else if ($p_mode==1) - { - while ($p_size != 0) - { - $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @gzread($p_src, $v_read_size); - @fwrite($p_dest, $v_buffer, $v_read_size); - $p_size -= $v_read_size; - } - } - else if ($p_mode==2) - { - while ($p_size != 0) - { - $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($p_src, $v_read_size); - @gzwrite($p_dest, $v_buffer, $v_read_size); - $p_size -= $v_read_size; - } - } - else if ($p_mode==3) - { - while ($p_size != 0) - { - $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @gzread($p_src, $v_read_size); - @gzwrite($p_dest, $v_buffer, $v_read_size); - $p_size -= $v_read_size; - } - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : PclZipUtilRename() - // Description : - // This function tries to do a simple rename() function. If it fails, it - // tries to copy the $p_src file in a new $p_dest file and then unlink the - // first one. - // Parameters : - // $p_src : Old filename - // $p_dest : New filename - // Return Values : - // 1 on success, 0 on failure. - // -------------------------------------------------------------------------------- - function PclZipUtilRename($p_src, $p_dest) - { - $v_result = 1; - - // ----- Try to rename the files - if (!@rename($p_src, $p_dest)) { - - // ----- Try to copy & unlink the src - if (!@copy($p_src, $p_dest)) { - $v_result = 0; - } - else if (!@unlink($p_src)) { - $v_result = 0; - } - } - - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : PclZipUtilOptionText() - // Description : - // Translate option value in text. Mainly for debug purpose. - // Parameters : - // $p_option : the option value. - // Return Values : - // The option text value. - // -------------------------------------------------------------------------------- - function PclZipUtilOptionText($p_option) - { - - $v_list = get_defined_constants(); - for (reset($v_list); $v_key = key($v_list); next($v_list)) { - $v_prefix = substr($v_key, 0, 10); - if (( ($v_prefix == 'PCLZIP_OPT') - || ($v_prefix == 'PCLZIP_CB_') - || ($v_prefix == 'PCLZIP_ATT')) - && ($v_list[$v_key] == $p_option)) { - return $v_key; - } - } - - $v_result = 'Unknown'; - - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : PclZipUtilTranslateWinPath() - // Description : - // Translate windows path by replacing '\' by '/' and optionally removing - // drive letter. - // Parameters : - // $p_path : path to translate. - // $p_remove_disk_letter : true | false - // Return Values : - // The path translated. - // -------------------------------------------------------------------------------- - function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true) - { - if (stristr(php_uname(), 'windows')) { - // ----- Look for potential disk letter - if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { - $p_path = substr($p_path, $v_position+1); - } - // ----- Change potential windows directory separator - if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) { - $p_path = strtr($p_path, '\\', '/'); - } - } - return $p_path; - } - // -------------------------------------------------------------------------------- - - -?> diff --git a/www/ecrire/inc/pipelines.php b/www/ecrire/inc/pipelines.php index 1b3a83a5..97852304 100644 --- a/www/ecrire/inc/pipelines.php +++ b/www/ecrire/inc/pipelines.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -13,12 +13,14 @@ /** * Fonctions déclarées dans des pipelines (espace public) * - * @package SPIP\Pipelines -**/ -if (!defined('_ECRIRE_INC_VERSION')) return; -if (test_espace_prive()) + * @package SPIP\Core\Pipelines + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} +if (test_espace_prive()) { include_spip('inc/pipelines_ecrire'); - +} /** @@ -29,34 +31,41 @@ if (test_espace_prive()) * des js chargée peut être complété par le pipeline 'jquery_plugins' * * Cette fonction est appelée par le pipeline insert_head - * + * * @internal - * Ne pas vérifier ici qu'on ne doublonne pas #INSERT_HEAD + * Ne pas vérifier ici qu'on ne doublonne pas `#INSERT_HEAD` * car cela empêche un double appel (multi calcul en cache cool, * ou erreur de l'espace privé) * * @see f_jQuery_prive() - * @link http://doc.spip.org/@f_jQuery - * - * @param string $texte Contenu qui sera inséré dans le head HTML + * @pipeline insert_head + * @pipeline_appel jquery_plugins + * + * @param string $texte Contenu qui sera inséré dans le head HTML * @return string Contenu qui sera inséré dans le head HTML -**/ -function f_jQuery ($texte) { + **/ +function f_jQuery($texte) { $x = ''; $jquery_plugins = pipeline('jquery_plugins', array( - 'javascript/jquery.js', - 'javascript/jquery.form.js', - 'javascript/jquery.autosave.js', - 'javascript/jquery.placeholder-label.js', - 'javascript/ajaxCallback.js', - 'javascript/jquery.cookie.js' + 'javascript/jquery.js', + 'javascript/jquery-migrate-3.0.1.js', + 'javascript/jquery.form.js', + 'javascript/jquery.autosave.js', + 'javascript/jquery.placeholder-label.js', + 'javascript/ajaxCallback.js', + 'javascript/js.cookie.js', + 'javascript/jquery.cookie.js' )); - foreach (array_unique($jquery_plugins) as $script) - if ($script = find_in_path($script)) + foreach (array_unique($jquery_plugins) as $script) { + if ($script = find_in_path(supprimer_timestamp($script))) { + $script = timestamp($script); $x .= "\n\n"; + } + } + + $texte = $x . $texte; - $texte = $x.$texte; return $texte; } @@ -69,19 +78,26 @@ function f_jQuery ($texte) { * définie à true) dans un texte HTML * * Cette fonction est appelée par le pipeline affichage_final - * - * @param string $texte Contenu de la page envoyée au navigateur + * + * @pipeline affichage_final + * + * @param string $texte Contenu de la page envoyée au navigateur * @return string Contenu de la page envoyée au navigateur -**/ -function f_surligne ($texte) { - if (!$GLOBALS['html']) return $texte; + **/ +function f_surligne($texte) { + if (!$GLOBALS['html']) { + return $texte; + } $rech = _request('var_recherche'); if (!$rech - AND (!defined('_SURLIGNE_RECHERCHE_REFERERS') - OR !_SURLIGNE_RECHERCHE_REFERERS - OR !isset($_SERVER['HTTP_REFERER']))) + and (!defined('_SURLIGNE_RECHERCHE_REFERERS') + or !_SURLIGNE_RECHERCHE_REFERERS + or !isset($_SERVER['HTTP_REFERER'])) + ) { return $texte; + } include_spip('inc/surligne'); + if (isset($_SERVER['HTTP_REFERER'])) { $_SERVER['HTTP_REFERER'] = preg_replace(',[^\w\,/#&;-]+,', ' ', $_SERVER['HTTP_REFERER']); } @@ -99,30 +115,35 @@ function f_surligne ($texte) { * définie à true. * * Cette fonction est appelée par le pipeline affichage_final - * - * @param string $texte Contenu de la page envoyée au navigateur + * + * @pipeline affichage_final + * + * @param string $texte Contenu de la page envoyée au navigateur * @return string Contenu de la page envoyée au navigateur **/ -function f_tidy ($texte) { +function f_tidy($texte) { /** * Indentation à faire ? * * - true : actif. * - false par défaut. */ - global $xhtml; - if ($xhtml # tidy demande - AND $GLOBALS['html'] # verifie que la page avait l'entete text/html - AND strlen($texte) - AND !headers_sent()) { + if ($GLOBALS['xhtml'] # tidy demande + and $GLOBALS['html'] # verifie que la page avait l'entete text/html + and strlen($texte) + and !headers_sent() + ) { # Compatibilite ascendante - if (!is_string($xhtml)) $xhtml ='tidy'; + if (!is_string($GLOBALS['xhtml'])) { + $GLOBALS['xhtml'] = 'tidy'; + } - if (!$f = charger_fonction($xhtml, 'inc', true)) { + if (!$f = charger_fonction($GLOBALS['xhtml'], 'inc', true)) { spip_log("tidy absent, l'indenteur SPIP le remplace"); $f = charger_fonction('sax', 'xml'); } + return $f($texte); } @@ -131,27 +152,31 @@ function f_tidy ($texte) { /** - * Offre #INSERT_HEAD sur tous les squelettes (bourrin) + * Offre `#INSERT_HEAD` sur tous les squelettes (bourrin) * * À activer dans mes_options via : - * $GLOBALS['spip_pipeline']['affichage_final'] .= '|f_insert_head'; + * `$GLOBALS['spip_pipeline']['affichage_final'] .= '|f_insert_head';` * * Ajoute le contenu du pipeline insert head dans la page HTML * si cela n'a pas été fait. * - * @param string $texte Contenu de la page envoyée au navigateur + * @pipeline_appel insert_head + * + * @param string $texte Contenu de la page envoyée au navigateur * @return string Contenu de la page envoyée au navigateur -**/ + **/ function f_insert_head($texte) { - if (!$GLOBALS['html']) return $texte; + if (!$GLOBALS['html']) { + return $texte; + } include_spip('public/admin'); // pour strripos ($pos = stripos($texte, '')) - || ($pos = stripos($texte, '')) - || ($pos = 0); + || ($pos = stripos($texte, '')) + || ($pos = 0); - if (false === strpos(substr($texte, 0,$pos), '')) { - $insert = "\n".pipeline('insert_head','')."\n"; + if (false === strpos(substr($texte, 0, $pos), '')) { + $insert = "\n" . pipeline('insert_head', '') . "\n"; $texte = substr_replace($texte, $insert, $pos, 0); } @@ -161,32 +186,37 @@ function f_insert_head($texte) { /** * Insérer au besoin les boutons admins - * + * * Cette fonction est appelée par le pipeline affichage_final * - * @param string $texte Contenu de la page envoyée au navigateur + * @pipeline affichage_final + * @uses affiche_boutons_admin() + * + * @param string $texte Contenu de la page envoyée au navigateur * @return string Contenu de la page envoyée au navigateur -**/ -function f_admin ($texte) { - if (defined('_VAR_PREVIEW') AND _VAR_PREVIEW AND $GLOBALS['html']) { + **/ +function f_admin($texte) { + if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and $GLOBALS['html']) { include_spip('inc/filtres'); // pour http_img_pack $x = "
      " - . _T('previsualisation') - . "
      "; - if (!$pos = stripos($texte, '')) + . http_style_background('preview-32.png') + . ">" + . _T('previsualisation') + . "

      "; + if (!$pos = stripos($texte, '')) { $pos = strlen($texte); + } $texte = substr_replace($texte, $x, $pos, 0); } - if (isset($GLOBALS['affiche_boutons_admin']) AND $GLOBALS['affiche_boutons_admin']) { + if (isset($GLOBALS['affiche_boutons_admin']) and $GLOBALS['affiche_boutons_admin']) { include_spip('public/admin'); $texte = affiche_boutons_admin($texte); } - if (_request('var_mode')=='noajax'){ - $texte = preg_replace(',(class=[\'"][^\'"]*)ajax([^\'"]*[\'"]),Uims',"\\1\\2",$texte); + if (_request('var_mode') == 'noajax') { + $texte = preg_replace(',(class=[\'"][^\'"]*)ajax([^\'"]*[\'"]),Uims', "\\1\\2", $texte); } + return $texte; } @@ -195,33 +225,39 @@ function f_admin ($texte) { * * Appelle f_afficher_blocs_ecrire() sur les inclusions dans l'espace privé. * Ne change rien dans l'espace public. - * - * Cette fonction est appelée par le pipeline recuperer_fond * - * @see f_afficher_blocs_ecrire() - * - * @param array $flux Description et contenu de l'inclusion + * Cette fonction est appelée par le pipeline recuperer_fond + * + * @uses f_afficher_blocs_ecrire() + * @pipeline recuperer_fond + * + * @param array $flux Description et contenu de l'inclusion * @return array $flux Description et contenu de l'inclusion -**/ + **/ function f_recuperer_fond($flux) { - if (!test_espace_prive()) return $flux; + if (!test_espace_prive()) { + return $flux; + } + return f_afficher_blocs_ecrire($flux); } /** * Gérer le lancement du cron si des tâches sont en attente - * - * Cette fonction est appelée par le pipeline affichage_final * - * @param string $texte Contenu de la page envoyée au navigateur + * @pipeline affichage_final + * @uses queue_sleep_time_to_next_job() + * @uses queue_affichage_cron() + * + * @param string $texte Contenu de la page envoyée au navigateur * @return string Contenu de la page envoyée au navigateur */ -function f_queue(&$texte){ - +function f_queue($texte) { // eviter une inclusion si rien a faire - if (_request('action')=='cron' - OR queue_sleep_time_to_next_job()>0 - OR defined('_DEBUG_BLOCK_QUEUE')){ + if (_request('action') == 'cron' + or queue_sleep_time_to_next_job() > 0 + or defined('_DEBUG_BLOCK_QUEUE') + ) { return $texte; } @@ -230,16 +266,16 @@ function f_queue(&$texte){ // si rien a afficher // ou si on est pas dans une page html, on ne sait rien faire de mieux - if (!$code OR !$GLOBALS['html']) + if (!$code or !isset($GLOBALS['html']) or !$GLOBALS['html']) { return $texte; + } // inserer avant le fermant si on peut, a la fin de la page sinon - if (($p=strpos($texte,''))!==FALSE) - $texte = substr($texte,0,$p).$code.substr($texte,$p); - else + if (($p = strpos($texte, '')) !== false) { + $texte = substr($texte, 0, $p) . $code . substr($texte, $p); + } else { $texte .= $code; + } return $texte; } - -?> diff --git a/www/ecrire/inc/pipelines_ecrire.php b/www/ecrire/inc/pipelines_ecrire.php index faa68647..c0750b78 100644 --- a/www/ecrire/inc/pipelines_ecrire.php +++ b/www/ecrire/inc/pipelines_ecrire.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -13,9 +13,11 @@ /** * Fonctions déclarées dans des pipelines (espace privé) * - * @package SPIP\Pipelines -**/ -if (!defined('_ECRIRE_INC_VERSION')) return; + * @package SPIP\Core\Pipelines + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** @@ -28,145 +30,170 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * Cette fonction est appelée par le pipeline header_prive * * @see f_jQuery() - * @link http://doc.spip.org/@f_jQuery - * - * @param string $texte Contenu qui sera inséré dans le head HTML + * @link http://code.spip.net/@f_jQuery + * + * @param string $texte Contenu qui sera inséré dans le head HTML * @return string Contenu complété des scripts javascripts, dont jQuery -**/ -function f_jQuery_prive ($texte) { + **/ +function f_jQuery_prive($texte) { $x = ''; $jquery_plugins = pipeline('jquery_plugins', array( 'prive/javascript/jquery.js', + 'prive/javascript/jquery-migrate-3.0.1.js', 'prive/javascript/jquery.form.js', 'prive/javascript/jquery.autosave.js', 'prive/javascript/jquery.placeholder-label.js', 'prive/javascript/ajaxCallback.js', - 'prive/javascript/jquery.colors.js', + 'prive/javascript/js.cookie.js', 'prive/javascript/jquery.cookie.js', 'prive/javascript/spip_barre.js', )); - foreach (array_unique($jquery_plugins) as $script) - if ($script = find_in_path($script)) + foreach (array_unique($jquery_plugins) as $script) { + if ($script = find_in_path(supprimer_timestamp($script))) { + $script = timestamp($script); $x .= "\n\n"; - // inserer avant le premier script externe ou a la fin - if (preg_match(",<]*src=,",$texte,$match) - AND $p = strpos($texte,$match[0])){ - $texte = substr_replace($texte,$x,$p,0); + } } - else + // inserer avant le premier script externe ou a la fin + if (preg_match(",<]*src=,", $texte, $match) + and $p = strpos($texte, $match[0]) + ) { + $texte = substr_replace($texte, $x, $p, 0); + } else { $texte .= $x; + } + return $texte; } /** * Ajout automatique du title dans les pages du privé en squelette - * + * * Appellé dans le pipeline affichage_final_prive * * @param string $texte * @return string */ -function affichage_final_prive_title_auto($texte){ - if (strpos($texte,'')===false - AND - (preg_match(",<h1[^>]*>(.+)</h1>,Uims", $texte, $match) - OR preg_match(",<h[23][^>]*>(.+)</h[23]>,Uims", $texte, $match)) - AND $match = textebrut(trim($match[1])) - AND ($p = strpos($texte,'<head>'))!==FALSE) { - if (!$nom_site_spip = textebrut(typo($GLOBALS['meta']["nom_site"]))) - $nom_site_spip= _T('info_mon_site_spip'); +function affichage_final_prive_title_auto($texte) { + if (strpos($texte, '<title>') === false + and + (preg_match(",<h1[^>]*>(.+)</h1>,Uims", $texte, $match) + or preg_match(",<h[23][^>]*>(.+)</h[23]>,Uims", $texte, $match)) + and $match = textebrut(trim($match[1])) + and ($p = strpos($texte, '<head>')) !== false + ) { + if (!$nom_site_spip = textebrut(typo($GLOBALS['meta']["nom_site"]))) { + $nom_site_spip = _T('info_mon_site_spip'); + } $titre = "<title>[" . $nom_site_spip - . "] ". $match - .""; + . "] " . $match + . ""; - $texte = substr_replace($texte, $titre, $p+6,0); + $texte = substr_replace($texte, $titre, $p + 6, 0); } + return $texte; } // Fonction standard pour le pipeline 'boite_infos' -// http://doc.spip.org/@f_boite_infos +// http://code.spip.net/@f_boite_infos function f_boite_infos($flux) { $args = $flux['args']; $type = $args['type']; unset($args['row']); - if (!trouver_fond($type,"prive/objets/infos/")) + if (!trouver_fond($type, "prive/objets/infos/")) { $type = 'objet'; - $flux['data'] .= recuperer_fond("prive/objets/infos/$type",$args); + } + $args['espace_prive'] = 1; + $flux['data'] .= recuperer_fond("prive/objets/infos/$type", $args); + return $flux; } /** - * pipeline recuperer_fond + * Utilisation du pipeline recuperer_fond dans le prive + * * Branchement automatise de affiche_gauche, affiche_droite, affiche_milieu * pour assurer la compat avec les versions precedentes des exec en php * Branche de affiche_objet - * + * * Les pipelines ne recevront plus exactement le meme contenu en entree, * mais la compat multi vertions pourra etre assuree * par une insertion au bon endroit quand le contenu de depart n'est pas vide - * - * @param array $flux - * @return array + * + * @param array $flux Données du pipeline + * @return array Données du pipeline */ function f_afficher_blocs_ecrire($flux) { - static $o=array(); - if (is_string($fond=$flux['args']['fond'])) { + static $o = array(); + if (is_string($fond = $flux['args']['fond'])) { $exec = isset($flux['args']['contexte']['exec']) ? $flux['args']['contexte']['exec'] : _request('exec'); - if (!isset($o[$exec])){ + if (!isset($o[$exec])) { $o[$exec] = trouver_objet_exec($exec); } // cas particulier - if ($exec=="infos_perso"){ + if ($exec == "infos_perso") { $flux['args']['contexte']['id_auteur'] = $GLOBALS['visiteur_session']['id_auteur']; } - $typepage = (isset($flux['args']['contexte']['type-page'])?$flux['args']['contexte']['type-page']:$exec); - if ($fond == "prive/squelettes/navigation/$typepage"){ - $flux['data']['texte'] = pipeline('affiche_gauche',array('args'=>$flux['args']['contexte'],'data'=>$flux['data']['texte'])); - } - elseif ($fond=="prive/squelettes/extra/$typepage") { + $typepage = (isset($flux['args']['contexte']['type-page']) ? $flux['args']['contexte']['type-page'] : $exec); + if ($fond == "prive/squelettes/navigation/$typepage") { + $flux['data']['texte'] = pipeline('affiche_gauche', + array('args' => $flux['args']['contexte'], 'data' => $flux['data']['texte'])); + } elseif ($fond == "prive/squelettes/extra/$typepage") { include_spip('inc/presentation_mini'); - $flux['data']['texte'] = pipeline('affiche_droite',array('args'=>$flux['args']['contexte'],'data'=>$flux['data']['texte'])).liste_objets_bloques($exec,$flux['args']['contexte']); - } - elseif ($fond=="prive/squelettes/hierarchie/$typepage" AND $o[$exec]) { + $flux['data']['texte'] = pipeline('affiche_droite', + array('args' => $flux['args']['contexte'], 'data' => $flux['data']['texte'])) . liste_objets_bloques($exec, + $flux['args']['contexte']); + } elseif ($fond == "prive/squelettes/hierarchie/$typepage" and $o[$exec]) { // id non defini sur les formulaire de nouveaux objets $id = isset($flux['args']['contexte'][$o[$exec]['id_table_objet']]) ? intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]) : 0; - $flux['data']['texte'] = pipeline('affiche_hierarchie',array('args'=>array('objet'=>$o[$exec]['type'],'id_objet'=>$id),'data'=>$flux['data']['texte'])); - } - elseif ($fond=="prive/squelettes/contenu/$typepage"){ - if (!strpos($flux['data']['texte'],"")) - $flux['data']['texte'] = preg_replace(',
      \\0",$flux['data']['texte']); + $flux['data']['texte'] = pipeline('affiche_hierarchie', + array('args' => array('objet' => $o[$exec]['type'], 'id_objet' => $id), 'data' => $flux['data']['texte'])); + } elseif ($fond == "prive/squelettes/contenu/$typepage") { + if (!strpos($flux['data']['texte'], "")) { + $flux['data']['texte'] = preg_replace(',
      \\0", + $flux['data']['texte']); + } if ($o[$exec] - AND $objet = $o[$exec]['type'] - AND $o[$exec]['edition'] == false - AND $id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']])){ + and $objet = $o[$exec]['type'] + and $o[$exec]['edition'] == false + and isset($flux['args']['contexte'][$o[$exec]['id_table_objet']]) + and $id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]) + ) { // inserer le formulaire de traduction - $flux['data']['texte'] = str_replace("",recuperer_fond('prive/objets/editer/traductions',array('objet'=>$objet,'id_objet'=>$id))."",$flux['data']['texte']); - $flux['data']['texte'] = pipeline('afficher_fiche_objet',array( - 'args'=>array( - 'contexte'=>$flux['args']['contexte'], - 'type'=>$objet, - 'id'=>$id), - 'data'=>$flux['data']['texte'])); + $flux['data']['texte'] = str_replace("", recuperer_fond('prive/objets/editer/traductions', + array('objet' => $objet, 'id_objet' => $id, 'espace_prive' => 1)) . "", $flux['data']['texte']); + $flux['data']['texte'] = pipeline('afficher_fiche_objet', array( + 'args' => array( + 'contexte' => $flux['args']['contexte'], + 'type' => $objet, + 'id' => $id + ), + 'data' => $flux['data']['texte'] + )); } - $flux['data']['texte'] = pipeline('affiche_milieu',array('args'=>$flux['args']['contexte'],'data'=>$flux['data']['texte'])); - } - elseif ($fond=="prive/squelettes/inclure/pied"){ - $flux['data']['texte'] = pipeline('affiche_pied',array('args'=>$flux['args']['contexte'],'data'=>$flux['data']['texte'])); - } - elseif (strncmp($fond,"prive/objets/contenu/",21)==0 - AND $objet=basename($fond) - AND $objet==substr($fond,21) - AND isset($o[$objet]) - AND $o[$objet]) { - $id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]); - $flux['data']['texte'] = pipeline('afficher_contenu_objet',array('args'=>array('type'=>$objet,'id_objet'=>$id,'contexte'=>$flux['args']['contexte']),'data'=>$flux['data']['texte'])); + $flux['data']['texte'] = pipeline('affiche_milieu', + array('args' => $flux['args']['contexte'], 'data' => $flux['data']['texte'])); + } elseif ($fond == "prive/squelettes/inclure/pied") { + $flux['data']['texte'] = pipeline('affiche_pied', + array('args' => $flux['args']['contexte'], 'data' => $flux['data']['texte'])); + } elseif (strncmp($fond, "prive/objets/contenu/", 21) == 0 + and $objet = basename($fond) + and $objet == substr($fond, 21) + and isset($o[$objet]) + and $o[$objet] + ) { + $id = intval($flux['args']['contexte'][$o[$exec]['id_table_objet']]); + $flux['data']['texte'] = pipeline('afficher_contenu_objet', array( + 'args' => array('type' => $objet, 'id_objet' => $id, 'contexte' => $flux['args']['contexte']), + 'data' => $flux['data']['texte'] + )); } } @@ -175,27 +202,31 @@ function f_afficher_blocs_ecrire($flux) { /** * Afficher les taches en attente liees a un objet + * + * @pipeline affiche_milieu * @param string $flux * @return string */ -function f_queue_affiche_milieu($flux){ +function f_queue_affiche_milieu($flux) { $args = $flux['args']; $res = ""; - foreach($args as $key=>$arg){ - if (preg_match(",^id_,",$key) AND is_numeric($arg) AND $arg=intval($arg)){ + foreach ($args as $key => $arg) { + if (preg_match(",^id_,", $key) and is_numeric($arg) and $arg = intval($arg)) { $objet = preg_replace(',^id_,', '', $key); - $res .= recuperer_fond('modeles/object_jobs_list',array('id_objet'=>$arg,'objet'=>$objet),array('ajax'=>true)); + $res .= recuperer_fond('modeles/object_jobs_list', array('id_objet' => $arg, 'objet' => $objet, 'espace_prive' => 1), + array('ajax' => true)); } } - if ($res) + if ($res) { $flux['data'] = $res . $flux['data']; + } return $flux; } /** - * Trouver l'objet qui correspond - * a l'exec de l'espace prive passe en argument + * Trouver l'objet qui correspond à l'exec de l'espace privé passé en argument + * * renvoie false si pas d'objet en cours, ou un tableau associatif * contenant les informations table_objet_sql,table,type,id_table_objet,edition * @@ -203,26 +234,40 @@ function f_queue_affiche_milieu($flux){ * nom de la page testee * @return array|bool */ -function trouver_objet_exec($exec){ - static $objet_exec=array(); - if (!$exec) return false; +function trouver_objet_exec($exec) { + static $objet_exec = array(); + if (!$exec) { + return false; + } // cas particulier - if ($exec=="infos_perso"){ + if ($exec == "infos_perso") { $exec = "auteur"; - set_request('id_auteur',$GLOBALS['visiteur_session']['id_auteur']); + set_request('id_auteur', $GLOBALS['visiteur_session']['id_auteur']); } - if (!isset($objet_exec[$exec])){ - $objet_exec[$exec]=false; + if (!isset($objet_exec[$exec])) { + $objet_exec[$exec] = false; $infos = lister_tables_objets_sql(); - foreach($infos as $t=>$info){ - if ($exec==$info['url_edit'] AND $info['editable']){ - return $objet_exec[$exec] = array('edition'=>$exec==$info['url_voir']?'':true,'table_objet_sql'=>$t,'table'=>$info['table_objet'],'type'=>$info['type'],'id_table_objet'=>id_table_objet($info['type'])); + foreach ($infos as $t => $info) { + if ($exec == $info['url_edit'] and $info['editable']) { + return $objet_exec[$exec] = array( + 'edition' => $exec == $info['url_voir'] ? '' : true, + 'table_objet_sql' => $t, + 'table' => $info['table_objet'], + 'type' => $info['type'], + 'id_table_objet' => id_table_objet($info['type']) + ); } - if ($exec==$info['url_voir']){ - return $objet_exec[$exec] = array('edition'=>false,'table_objet_sql'=>$t,'table'=>$info['table_objet'],'type'=>$info['type'],'id_table_objet'=>id_table_objet($info['type'])); + if ($exec == $info['url_voir']) { + return $objet_exec[$exec] = array( + 'edition' => false, + 'table_objet_sql' => $t, + 'table' => $info['table_objet'], + 'type' => $info['type'], + 'id_table_objet' => id_table_objet($info['type']) + ); } } } + return $objet_exec[$exec]; } -?> diff --git a/www/ecrire/inc/plonger.php b/www/ecrire/inc/plonger.php index e766f367..1ccc0bdf 100644 --- a/www/ecrire/inc/plonger.php +++ b/www/ecrire/inc/plonger.php @@ -3,23 +3,26 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/texte'); -// http://doc.spip.org/@inc_plonger_dist -function inc_plonger_dist($id_rubrique, $idom="", $list=array(), $col = 1, $exclu=0, $do='aff') { - global $spip_lang_left; - - if ($list) $id_rubrique = $list[$col-1]; - +// http://code.spip.net/@inc_plonger_dist +function inc_plonger_dist($id_rubrique, $idom = "", $list = array(), $col = 1, $exclu = 0, $do = 'aff') { + + if ($list) { + $id_rubrique = $list[$col - 1]; + } + $ret = ''; # recherche les filles et petites-filles de la rubrique donnee @@ -30,29 +33,30 @@ function inc_plonger_dist($id_rubrique, $idom="", $list=array(), $col = 1, $excl $rub = array(); $res = sql_select("rub1.id_rubrique, rub1.titre, rub1.id_parent, rub1.lang, rub1.langue_choisie, rub2.id_rubrique AS id_enfant", - "spip_rubriques AS rub1 LEFT JOIN spip_rubriques AS rub2 ON (rub1.id_rubrique = rub2.id_parent)", - "rub1.id_parent = ".sql_quote($id_rubrique)." - AND rub1.id_rubrique!=".sql_quote($exclu)." - AND (rub2.id_rubrique IS NULL OR rub2.id_rubrique!=".sql_quote($exclu).")", "", "0+rub1.titre,rub1.titre"); + "spip_rubriques AS rub1 LEFT JOIN spip_rubriques AS rub2 ON (rub1.id_rubrique = rub2.id_parent)", + "rub1.id_parent = " . sql_quote($id_rubrique) . " + AND rub1.id_rubrique!=" . sql_quote($exclu) . " + AND (rub2.id_rubrique IS NULL OR rub2.id_rubrique!=" . sql_quote($exclu) . ")", "", "0+rub1.titre,rub1.titre"); while ($row = sql_fetch($res)) { - if (autoriser('voir','rubrique',$row['id_rubrique'])){ + if (autoriser('voir', 'rubrique', $row['id_rubrique'])) { $rub[$row['id_rubrique']]['enfants'] = $row['id_enfant']; if ($row['id_parent'] == $id_rubrique) { $t = trim(typo(supprimer_numero($row['titre']))); - if ($row['langue_choisie'] != 'oui') + if ($row['langue_choisie'] != 'oui') { $t .= ' [' . $row['lang'] . ']'; - $ordre[$row['id_rubrique']] = $t; + . traduire_nom_langue($row['lang']) + . '">[' . $row['lang'] . ']'; + } + $ordre[$row['id_rubrique']] = $t; } } } $next = isset($list[$col]) ? $list[$col] : 0; if ($ordre) { - $rec = generer_url_ecrire('plonger',"rac=$idom&exclus=$exclu&do=$do&col=".($col+1)); + $rec = generer_url_ecrire('plonger', "rac=$idom&exclus=$exclu&do=$do&col=" . ($col + 1)); $info = generer_url_ecrire('informer', "type=rubrique&rac=$idom&do=$do&id="); - $args = "'$idom',this,$col,'$spip_lang_left','$info',event"; + $args = "'$idom',this,$col,'" . $GLOBALS['spip_lang_left'] . "','$info',event"; while (list($id, $titrebrut) = each($ordre)) { $titre = supprimer_numero($titrebrut); @@ -60,51 +64,53 @@ function inc_plonger_dist($id_rubrique, $idom="", $list=array(), $col = 1, $excl $classe1 = $id_rubrique ? 'petite-rubrique' : "petit-secteur"; if (isset($rub[$id]["enfants"])) { $classe2 = " class='rub-ouverte'"; - $url = "\nhref='$rec&id=$id'" ; - } else { $url = $classe2 = '' ; } + $url = "\nhref='$rec&id=$id'"; + } else { + $classe2 = $url = ''; + $url = "\nhref='javascript:void(0)'"; + } $js_func = $do . '_selection_titre'; $click = "\nonclick=\"changerhighlight(this.parentNode.parentNode.parentNode);\nreturn " - . (!is_array($list) ? ' false' - : "aff_selection_provisoire($id,$args)") + . (!is_array($list) ? ' false' + : "aff_selection_provisoire($id,$args)") # ce lien provoque la selection (directe) de la rubrique cliquee # et l'affichage de son titre dans le bandeau - . "\"\nondblclick=\"" - . "$js_func(this." - . "firstChild.nodeValue," - . $id - . ",'selection_rubrique','id_parent');" - . "\nreturn aff_selection_provisoire($id,$args);" - . "\""; + . "\"\nondblclick=\"" + . "$js_func(this." + . "firstChild.nodeValue," + . $id + . ",'selection_rubrique','id_parent');" + . "\nreturn aff_selection_provisoire($id,$args);" + . "\""; $ret .= "
      " - . $titre - . "
      "; + . (($id == $next) ? "item on" : "item") + . "'>
      " + . $titre + . "
    "; } } - $idom2 = $idom . "_col_".($col+1); - $left = ($col*150); + $idom2 = $idom . "_col_" . ($col + 1); + $left = ($col * 150); - return http_img_pack("searching.gif", "*", "style='visibility: hidden; position: absolute; $spip_lang_left: " - . ($left-30) - . "px; top: 2px; z-index: 2;' id='img_$idom2'") - . "
    " + return http_img_pack("searching.gif", "*", + "style='visibility: hidden; position: absolute; " . $GLOBALS['spip_lang_left'] . ": " + . ($left - 30) + . "px; top: 2px; z-index: 2;' id='img_$idom2'") + . "
    " . $ret . "\n
    \n
    " . ($next - ? inc_plonger_dist($id_rubrique, $idom, $list, $col+1, $exclu) - : "") + ? inc_plonger_dist($id_rubrique, $idom, $list, $col + 1, $exclu) + : "") . "\n
    "; } - -?> diff --git a/www/ecrire/inc/plugin.php b/www/ecrire/inc/plugin.php index 442b0a5e..bd9968cf 100644 --- a/www/ecrire/inc/plugin.php +++ b/www/ecrire/inc/plugin.php @@ -3,162 +3,249 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion de l'activation des plugins + * + * @package SPIP\Core\Plugins + **/ -// l'adresse du repertoire de telechargement et de decompactage des plugins -define('_DIR_PLUGINS_AUTO', _DIR_PLUGINS.'auto/'); +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +/** l'adresse du repertoire de telechargement et de decompactage des plugins */ +define('_DIR_PLUGINS_AUTO', _DIR_PLUGINS . 'auto/'); #include_spip('inc/texte'); // ????? Appelle public/parametrer trop tot avant la reconstruction du chemin des plugins. include_spip('plugins/installer'); -// lecture des sous repertoire plugin existants -// $dir_plugins pour forcer un repertoire (ex: _DIR_PLUGINS_DIST) -// _DIR_PLUGINS_SUPPL pour aller en chercher ailleurs -// (chemins relatifs a la racine du site, separes par des ":") -// http://doc.spip.org/@liste_plugin_files -function liste_plugin_files($dir_plugins = null){ - static $plugin_files=array(); - if (is_null($dir_plugins)) +/** + * Retourne la description de chaque plugin présent dans un répertoire + * + * Lecture des sous repertoire plugin existants + * + * @example + * - `liste_plugin_files()` + * - `liste_plugin_files(_DIR_PLUGINS_DIST)` + * - `liste_plugin_files(_DIR_PLUGINS_SUPPL)` + * + * @uses fast_find_plugin_dirs() + * @uses plugins_get_infos_dist() + * + * @param string|null $dir_plugins + * - string : Chemin (relatif à la racine du site) du répertoire à analyser. + * - null : utilise le chemin `_DIR_PLUGINS`. + * @return array +**/ +function liste_plugin_files($dir_plugins = null) { + static $plugin_files = array(); + if (is_null($dir_plugins)) { $dir_plugins = _DIR_PLUGINS; + } if (!isset($plugin_files[$dir_plugins]) - OR count($plugin_files[$dir_plugins]) == 0){ + or count($plugin_files[$dir_plugins]) == 0 + ) { $plugin_files[$dir_plugins] = array(); foreach (fast_find_plugin_dirs($dir_plugins) as $plugin) { - $plugin_files[$dir_plugins][] = substr($plugin,strlen($dir_plugins)); + $plugin_files[$dir_plugins][] = substr($plugin, strlen($dir_plugins)); } - + sort($plugin_files[$dir_plugins]); // et on lit le XML de tous les plugins pour le mettre en cache // et en profiter pour nettoyer ceux qui n'existent plus du cache - $get_infos = charger_fonction('get_infos','plugins'); - $get_infos($plugin_files[$dir_plugins],false,$dir_plugins,true); + $get_infos = charger_fonction('get_infos', 'plugins'); + $get_infos($plugin_files[$dir_plugins], false, $dir_plugins, true); } + return $plugin_files[$dir_plugins]; } -function fast_find_plugin_dirs($dir, $max_prof=100) { +/** + * Recherche rapide des répertoires de plugins contenus dans un répertoire + * + * @uses is_plugin_dir() + * + * @param string $dir + * Chemin du répertoire dont on souhaite retourner les sous répertoires + * @param int $max_prof + * Profondeur maximale des sous répertoires + * @return array + * Liste complète des répeertoires +**/ +function fast_find_plugin_dirs($dir, $max_prof = 100) { $fichiers = array(); // revenir au repertoire racine si on a recu dossier/truc // pour regarder dossier/truc/ ne pas oublier le / final $dir = preg_replace(',/[^/]*$,', '', $dir); - if ($dir == '') $dir = '.'; + if ($dir == '') { + $dir = '.'; + } - if (!is_dir($dir)) + if (!is_dir($dir)) { return $fichiers; - if (is_plugin_dir($dir,'')) { + } + if (is_plugin_dir($dir, '')) { $fichiers[] = $dir; + return $fichiers; } - if ($max_prof<=0) + if ($max_prof <= 0) { return $fichiers; + } $subdirs = array(); - if (@is_dir($dir) AND is_readable($dir) AND $d = @opendir($dir)) { + if (@is_dir($dir) and is_readable($dir) and $d = opendir($dir)) { while (($f = readdir($d)) !== false) { if ($f[0] != '.' # ignorer . .. .svn etc - AND $f != 'CVS' - AND is_dir($f = "$dir/$f")) + and $f != 'CVS' + and is_dir($f = "$dir/$f") + ) { $subdirs[] = $f; + } } closedir($d); } - foreach($subdirs as $d){ - $fichiers = array_merge($fichiers,fast_find_plugin_dirs("$d/",$max_prof-1)); + foreach ($subdirs as $d) { + $fichiers = array_merge($fichiers, fast_find_plugin_dirs("$d/", $max_prof - 1)); } + return $fichiers; } -function is_plugin_dir($dir,$dir_plugins = null){ - if (is_array($dir)){ - foreach($dir as $k=>$d){ - if (!is_plugin_dir($d,$dir_plugins)) +/** + * Indique si un répertoire (ou plusieurs) est la racine d'un plugin SPIP + * + * Vérifie le ou les chemins relatifs transmis pour vérifier qu'ils contiennent + * un `plugin.xml` ou un `paquet.xml`. Les chemins valides sont retournés. + * + * @param string|string[] $dir + * Chemin (relatif à `$dir_plugins`), ou liste de chemins à tester + * @param string|null $dir_plugins + * - string : Chemin de répertoire (relatif à la `_DIR_RACINE`), départ des chemin(s) à tester + * - null (par défaut) : utilise le chemin `_DIR_PLUGINS` + * @return string|string[] + * - string : Le chemin accepté (c'était un plugin) + * - '' : ce n'était pas un chemin valide + * - array : Ensemble des chemins acceptés (si `$dir` était array) +**/ +function is_plugin_dir($dir, $dir_plugins = null) { + + if (is_array($dir)) { + foreach ($dir as $k => $d) { + if (!is_plugin_dir($d, $dir_plugins)) { unset($dir[$k]); + } } + return $dir; } - if (is_null($dir_plugins)) + if (is_null($dir_plugins)) { $dir_plugins = _DIR_PLUGINS; - $search = array("$dir_plugins$dir/plugin.xml","$dir_plugins$dir/paquet.xml"); - - foreach($search as $s){ - if (file_exists($s)){ + } + $search = array("$dir_plugins$dir/plugin.xml", "$dir_plugins$dir/paquet.xml"); + + foreach ($search as $s) { + if (file_exists($s)) { return $dir; } } + return ''; } -// Regexp d'extraction des informations d'un intervalle de compatibilité +/** Regexp d'extraction des informations d'un intervalle de compatibilité */ define('_EXTRAIRE_INTERVALLE', ',^[\[\(\]]([0-9.a-zRC\s\-]*)[;]([0-9.a-zRC\s\-\*]*)[\]\)\[]$,'); /** * Teste si le numéro de version d'un plugin est dans un intervalle donné. * * Cette fonction peut être volontairement trompée (phase de développement) : - * voir commentaire infra sur l'utilisation de la constante _DEV_PLUGINS + * voir commentaire infra sur l'utilisation de la constante _DEV_VERSION_SPIP_COMPAT * + * @uses spip_version_compare() + * * @param string $intervalle - * Un intervalle entre 2 versions. ex: [2.0.0-dev;2.1.*] + * Un intervalle entre 2 versions. ex: [2.0.0-dev;2.1.*] * @param string $version - * Un numéro de version. ex: 3.1.99] + * Un numéro de version. ex: 3.1.99] * @param string $avec_quoi - * Ce avec quoi est testée la compatibilité. par défaut ('') - * avec un plugin (cas des 'necessite'), parfois ('spip') - * avec SPIP. + * Ce avec quoi est testée la compatibilité. par défaut ('') + * avec un plugin (cas des 'necessite'), parfois ('spip') + * avec SPIP. * @return bool - * True si dans l'intervalle, false sinon. -**/ + * True si dans l'intervalle, false sinon. + **/ function plugin_version_compatible($intervalle, $version, $avec_quoi = '') { - if (!strlen($intervalle)) return true; - if (!preg_match(_EXTRAIRE_INTERVALLE,$intervalle,$regs)) return false; + if (!strlen($intervalle)) { + return true; + } + if (!preg_match(_EXTRAIRE_INTERVALLE, $intervalle, $regs)) { + return false; + } // Extraction des bornes et traitement de * pour la borne sup : // -- on autorise uniquement les ecritures 3.0.*, 3.* $minimum = $regs[1]; $maximum = $regs[2]; - // si une borne de compatibilité supérieure a été définie (dans - // mes_options.php, sous la forme : define('_DEV_PLUGINS', '3.1.99'); + // si une version SPIP de compatibilité a été définie (dans + // mes_options.php, sous la forme : define('_DEV_VERSION_SPIP_COMPAT', '3.1.0'); // on l'utilise (phase de dev, de test...) mais *que* en cas de comparaison // avec la version de SPIP (ne nuit donc pas aux tests de necessite // entre plugins) - if (defined('_DEV_PLUGINS') && $avec_quoi == 'spip') { - $maximum = _DEV_PLUGINS.']'; + if (defined('_DEV_VERSION_SPIP_COMPAT') and $avec_quoi == 'spip' and $version !== _DEV_VERSION_SPIP_COMPAT) { + if (plugin_version_compatible($intervalle, _DEV_VERSION_SPIP_COMPAT, $avec_quoi)) { + return true; + } + // si pas de compatibilite avec _DEV_VERSION_SPIP_COMPAT, on essaye quand meme avec la vrai version + // cas du plugin qui n'est compatible qu'avec cette nouvelle version } - $minimum_inc = $intervalle{0}=="["; - $maximum_inc = substr($intervalle,-1)=="]"; + $minimum_inc = $intervalle{0} == "["; + $maximum_inc = substr($intervalle, -1) == "]"; - if (strlen($minimum)){ - if ($minimum_inc AND spip_version_compare($version,$minimum,'<')) return false; - if (!$minimum_inc AND spip_version_compare($version,$minimum,'<=')) return false; + if (strlen($minimum)) { + if ($minimum_inc and spip_version_compare($version, $minimum, '<')) { + return false; + } + if (!$minimum_inc and spip_version_compare($version, $minimum, '<=')) { + return false; + } } - if (strlen($maximum)){ - if ($maximum_inc AND spip_version_compare($version,$maximum,'>')) return false; - if (!$maximum_inc AND spip_version_compare($version,$maximum,'>=')) return false; + if (strlen($maximum)) { + if ($maximum_inc and spip_version_compare($version, $maximum, '>')) { + return false; + } + if (!$maximum_inc and spip_version_compare($version, $maximum, '>=')) { + return false; + } } + return true; } - /** - * Construire la liste des infos strictement necessaires aux plugins a activer - * afin de les memoriser dans une meta pas trop grosse - * http://code.spip.net/@liste_plugin_valides + * Construire la liste des infos strictement necessaires aux plugins à activer + * afin de les mémoriser dans une meta pas trop grosse * + * @uses liste_plugin_files() + * @uses plugins_get_infos_dist() + * @uses plugin_valide_resume() + * @uses plugin_fixer_procure() + * * @param array $liste_plug * @param bool $force * @return array */ -function liste_plugin_valides($liste_plug, $force = false){ +function liste_plugin_valides($liste_plug, $force = false) { $liste_ext = liste_plugin_files(_DIR_PLUGINS_DIST); $get_infos = charger_fonction('get_infos', 'plugins'); $infos = array( @@ -172,32 +259,36 @@ function liste_plugin_valides($liste_plug, $force = false){ $infos['_DIR_RESTREINT'][''] = $get_infos('./', $force, _DIR_RESTREINT); $infos['_DIR_RESTREINT']['SPIP']['version'] = $GLOBALS['spip_version_branche']; $infos['_DIR_RESTREINT']['SPIP']['chemin'] = array(); - $liste_non_classee = array('SPIP' => array( - 'nom' => 'SPIP', - 'etat' => 'stable', - 'version' => $GLOBALS['spip_version_branche'], - 'dir_type' => '_DIR_RESTREINT', - 'dir' => '', - ) + $liste_non_classee = array( + 'SPIP' => array( + 'nom' => 'SPIP', + 'etat' => 'stable', + 'version' => $GLOBALS['spip_version_branche'], + 'dir_type' => '_DIR_RESTREINT', + 'dir' => '', + ) ); - foreach ($liste_ext as $plug){ - if (isset($infos['_DIR_PLUGINS_DIST'][$plug])) + foreach ($liste_ext as $plug) { + if (isset($infos['_DIR_PLUGINS_DIST'][$plug])) { plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_DIST'); + } } - foreach ($liste_plug as $plug){ - if (isset($infos['_DIR_PLUGINS'][$plug])) + foreach ($liste_plug as $plug) { + if (isset($infos['_DIR_PLUGINS'][$plug])) { plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS'); + } } - - if (defined('_DIR_PLUGINS_SUPPL') and _DIR_PLUGINS_SUPPL){ + + if (defined('_DIR_PLUGINS_SUPPL') and _DIR_PLUGINS_SUPPL) { $infos['_DIR_PLUGINS_SUPPL'] = $get_infos($liste_plug, false, _DIR_PLUGINS_SUPPL); - foreach ($liste_plug as $plug){ - if (isset($infos['_DIR_PLUGINS_SUPPL'][$plug])) + foreach ($liste_plug as $plug) { + if (isset($infos['_DIR_PLUGINS_SUPPL'][$plug])) { plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_SUPPL'); + } } } - + plugin_fixer_procure($liste_non_classee, $infos); return array($infos, $liste_non_classee); @@ -208,21 +299,26 @@ function liste_plugin_valides($liste_plug, $force = false){ * et dans leur plus recente version compatible * avec la version presente de SPIP * + * @uses plugin_version_compatible() + * @uses spip_version_compare() + * * @param array $liste * @param string $plug * @param array $infos * @param string $dir_type */ -function plugin_valide_resume(&$liste, $plug, $infos, $dir_type){ +function plugin_valide_resume(&$liste, $plug, $infos, $dir_type) { $i = $infos[$dir_type][$plug]; - if (isset($i['erreur']) AND $i['erreur']) + if (isset($i['erreur']) and $i['erreur']) { return; - if (!plugin_version_compatible($i['compatibilite'], $GLOBALS['spip_version_branche'], 'spip')) + } + if (!plugin_version_compatible($i['compatibilite'], $GLOBALS['spip_version_branche'], 'spip')) { return; + } $p = strtoupper($i['prefix']); - if (!isset($liste[$p]) - OR spip_version_compare($i['version'], $liste[$p]['version'], '>') - ){ + if (!isset($liste[$p]) + or spip_version_compare($i['version'], $liste[$p]['version'], '>') + ) { $liste[$p] = array( 'nom' => $i['nom'], 'etat' => $i['etat'], @@ -234,24 +330,28 @@ function plugin_valide_resume(&$liste, $plug, $infos, $dir_type){ } /** - * Completer la liste des plugins avec les eventuels procure + * Compléter la liste des plugins avec les éventuels procure * - * les sont consideres comme des plugins proposes, - * mais surchargeables (on peut activer un plugin qui procure ca pour l'ameliorer, - * donc avec le meme prefixe, qui sera pris en compte si il a une version plus grande) + * les balises `` sont considerées comme des plugins proposés, + * mais surchargeables (on peut activer un plugin qui procure ça pour l'améliorer, + * donc avec le même prefixe, qui sera pris en compte si il a une version plus grande) * + * @uses spip_version_compare() + * * @param array $liste * @param array $infos */ -function plugin_fixer_procure(&$liste, &$infos){ - foreach($liste as $p=>$resume){ +function plugin_fixer_procure(&$liste, &$infos) { + foreach ($liste as $p => $resume) { $i = $infos[$resume['dir_type']][$resume['dir']]; - if (isset($i['procure']) AND $i['procure']){ - foreach($i['procure'] as $procure){ + if (isset($i['procure']) and $i['procure']) { + foreach ($i['procure'] as $procure) { $p = strtoupper($procure['nom']); $dir = $resume['dir']; - if ($dir) $dir .= "/"; - $dir .= "procure:".$procure['nom']; + if ($dir) { + $dir .= "/"; + } + $dir .= "procure:" . $procure['nom']; $procure['etat'] = '?'; $procure['dir_type'] = $resume['dir_type']; @@ -260,8 +360,8 @@ function plugin_fixer_procure(&$liste, &$infos){ // si ce plugin n'est pas deja procure, ou dans une version plus ancienne // on ajoute cette version a la liste if (!isset($liste[$p]) - OR spip_version_compare($procure['version'], $liste[$p]['version'], '>') - ){ + or spip_version_compare($procure['version'], $liste[$p]['version'], '>') + ) { $liste[$p] = $procure; // on fournit une information minimale pour ne pas perturber la compilation @@ -285,24 +385,28 @@ function plugin_fixer_procure(&$liste, &$infos){ } /** - * extrait les chemins d'une liste de plugin - * selectionne au passage ceux qui sont dans $dir_plugins uniquement - * si valeur non vide + * Extrait les chemins d'une liste de plugin * + * Sélectionne au passage ceux qui sont dans `$dir_plugins` uniquement + * si valeur non vide + * * @param array $liste * @param string $dir_plugins * @return array */ -function liste_chemin_plugin($liste, $dir_plugins=_DIR_PLUGINS){ - foreach ($liste as $prefix=>$infos) { +function liste_chemin_plugin($liste, $dir_plugins = _DIR_PLUGINS) { + foreach ($liste as $prefix => $infos) { if (!$dir_plugins - OR ( + or ( defined($infos['dir_type']) - AND constant($infos['dir_type'])==$dir_plugins)) + and constant($infos['dir_type']) == $dir_plugins) + ) { $liste[$prefix] = $infos['dir']; - else + } else { unset($liste[$prefix]); + } } + return $liste; } @@ -310,231 +414,416 @@ function liste_chemin_plugin($liste, $dir_plugins=_DIR_PLUGINS){ * Liste les chemins vers les plugins actifs du dossier fourni en argument * a partir d'une liste d'elelements construits par plugin_valide_resume * + * @uses liste_plugin_actifs() + * @uses liste_chemin_plugin() + * + * @param string $dir_plugins + * Chemin du répertoire de plugins * @return array */ -// http://doc.spip.org/@liste_chemin_plugin_actifs -function liste_chemin_plugin_actifs($dir_plugins=_DIR_PLUGINS){ +function liste_chemin_plugin_actifs($dir_plugins = _DIR_PLUGINS) { include_spip('plugins/installer'); + return liste_chemin_plugin(liste_plugin_actifs(), $dir_plugins); } -// Pour tester utilise, il faut connaitre tous les plugins -// qui seront forcement pas la a la fin, -// car absent de la liste des plugins actifs. -// Il faut donc construire une liste ordonnee -// Cette fonction detecte des dependances circulaires, -// avec un doute sur un "utilise" qu'on peut ignorer. -// Mais ne pas inserer silencieusement et risquer un bug sournois latent - -function plugin_trier($infos, $liste_non_classee) -{ +/** + * Trier les plugins en vériant leur dépendances (qui doivent être présentes) + * + * Pour tester "utilise", il faut connaître tous les plugins + * qui seront forcément absents à la fin, + * car absent de la liste des plugins actifs. + * + * Il faut donc construire une liste ordonnée. + * + * Cette fonction détecte des dépendances circulaires, + * avec un doute sur un "utilise" qu'on peut ignorer. + * Mais ne pas insérer silencieusement et risquer un bug sournois latent + * + * @uses plugin_version_compatible() + * + * @param array $infos + * Répertoire (plugins, plugins-dist, ...) => Couples (prefixes => infos completes) des plugins qu'ils contiennent + * @param array $liste_non_classee + * Couples (prefixe => description) des plugins qu'on souhaite utiliser + * @return array + * Tableau de 3 éléments : + * - $liste : couples (prefixes => description) des plugins valides + * - $ordre : couples (prefixes => infos completes) des plugins triés + * (les plugins nécessités avant les plugins qui les utilisent) + * - $liste_non_classee : couples (prefixes => description) des plugins + * qui n'ont pas satisfait leurs dépendances +**/ +function plugin_trier($infos, $liste_non_classee) { $toute_la_liste = $liste_non_classee; $liste = $ordre = array(); $count = 0; - while ($c=count($liste_non_classee) AND $c!=$count){ // tant qu'il reste des plugins a classer, et qu'on ne stagne pas - #echo "tour::";var_dump($liste_non_classee); + + while ($c = count($liste_non_classee) and $c != $count) { // tant qu'il reste des plugins a classer, et qu'on ne stagne pas + #echo "tour::";var_dump($liste_non_classee); $count = $c; - foreach($liste_non_classee as $p=>$resume) { + foreach ($liste_non_classee as $p => $resume) { $plug = $resume['dir']; $dir_type = $resume['dir_type']; $info1 = $infos[$dir_type][$plug]; // si des plugins sont necessaires, // on ne peut inserer qu'apres eux - foreach($info1['necessite'] as $need){ - $nom = strtoupper($need['nom']); - $compat = isset($need['compatibilite']) ? $need['compatibilite'] : ''; - if (!isset($liste[$nom]) OR !plugin_version_compatible($compat,$liste[$nom]['version'])) { - $info1 = false; - break; - } + foreach ($info1['necessite'] as $need) { + $nom = strtoupper($need['nom']); + $compat = isset($need['compatibilite']) ? $need['compatibilite'] : ''; + if (!isset($liste[$nom]) or !plugin_version_compatible($compat, $liste[$nom]['version'])) { + $info1 = false; + break; + } + } + if (!$info1) { + continue; } - if (!$info1) continue; // idem si des plugins sont utiles, // sauf si ils sont de toute facon absents de la liste - foreach($info1['utilise'] as $need){ - $nom = strtoupper($need['nom']); - $compat = isset($need['compatibilite']) ? $need['compatibilite'] : ''; - if (isset($toute_la_liste[$nom])) { - if (!isset($liste[$nom]) OR - !plugin_version_compatible($compat, $liste[$nom]['version'])) { - $info1 = false; - break; - } - } + foreach ($info1['utilise'] as $need) { + $nom = strtoupper($need['nom']); + $compat = isset($need['compatibilite']) ? $need['compatibilite'] : ''; + if (isset($toute_la_liste[$nom])) { + if (!isset($liste[$nom]) or + !plugin_version_compatible($compat, $liste[$nom]['version']) + ) { + $info1 = false; + break; + } + } } if ($info1) { - $ordre[$p] = $info1; - $liste[$p] = $liste_non_classee[$p]; - unset($liste_non_classee[$p]); + $ordre[$p] = $info1; + $liste[$p] = $liste_non_classee[$p]; + unset($liste_non_classee[$p]); } } } + return array($liste, $ordre, $liste_non_classee); } -// Collecte les erreurs dans la meta - -function plugins_erreurs($liste_non_classee, $liste, $infos, $msg=array()) -{ +/** + * Collecte les erreurs de dépendances des plugins dans la meta `plugin_erreur_activation` + * + * @uses plugin_necessite() + * @uses plugin_controler_lib() + * + * @param array $liste_non_classee + * Couples (prefixe => description) des plugins en erreur + * @param array $liste + * Couples (prefixe => description) des plugins qu'on souhaite utiliser + * @param array $infos + * Répertoire (plugins, plugins-dist, ...) => Couples (prefixes => infos completes) des plugins qu'ils contiennent +**/ +function plugins_erreurs($liste_non_classee, $liste, $infos, $msg = array()) { static $erreurs = array(); - foreach($liste_non_classee as $p=>$resume){ + + if (!is_array($liste)) { + $liste = array(); + } + + // les plugins en erreur ne sont pas actifs ; ils ne doivent pas être dans la liste + $liste = array_diff_key($liste, $liste_non_classee); + + foreach ($liste_non_classee as $p => $resume) { $dir_type = $resume['dir_type']; $plug = $resume['dir']; $k = $infos[$dir_type][$plug]; + $plug = constant($dir_type) . $plug; if (!isset($msg[$p])) { - if (!$msg[$p] = plugin_necessite($k['necessite'], $liste)) - $msg[$p] = plugin_necessite($k['utilise'], $liste); + if (!$msg[$p] = plugin_necessite($k['necessite'], $liste, 'necessite')) { + $msg[$p] = plugin_necessite($k['utilise'], $liste, 'utilise'); + } } else { - foreach($msg[$p] as $c => $l) - $msg[$p][$c] = plugin_controler_lib($l['nom'], $l['lien']); + foreach ($msg[$p] as $c => $l) { + $msg[$p][$c] = plugin_controler_lib($l['nom'], $l['lien']); + } } $erreurs[$plug] = $msg[$p]; } - ecrire_meta('plugin_erreur_activation', serialize($erreurs)); + + ecrire_meta('plugin_erreur_activation', serialize($erreurs)); } -function plugin_donne_erreurs($raw=false, $raz=true) { - if (!isset($GLOBALS['meta']['plugin_erreur_activation'])) return $raw?array():''; +/** + * Retourne les erreurs d'activation des plugins, au format html ou brut + * + * @param bool $raw + * - true : pour obtenir le tableau brut des erreurs + * - false : Code HTML + * @param bool $raz + * - true pour effacer la meta qui stocke les erreurs. + * @return string|array + * - Liste des erreurs ou code HTML des erreurs +**/ +function plugin_donne_erreurs($raw = false, $raz = true) { + if (!isset($GLOBALS['meta']['plugin_erreur_activation'])) { + return $raw ? array() : ''; + } $list = @unserialize($GLOBALS['meta']['plugin_erreur_activation']); // Compat ancienne version - if (!$list) - $list = $raw?array():$GLOBALS['meta']['plugin_erreur_activation']; - elseif(!$raw) { - foreach($list as $plug => $msg) - $list[$plug] = "
  • " . _T('plugin_impossible_activer', array('plugin' => $plug)) - . "
    • " . implode("
    • ", $msg) . "
  • "; - $list ="
      " . join("\n", $list) . "
    "; - } - if ($raz) + if (!$list) { + $list = $raw ? array() : $GLOBALS['meta']['plugin_erreur_activation']; + } elseif (!$raw) { + foreach ($list as $plug => $msg) { + $list[$plug] = "
  • " . _T('plugin_impossible_activer', array('plugin' => $plug)) + . "
    • " . implode("
    • ", $msg) . "
  • "; + } + $list = "
      " . join("\n", $list) . "
    "; + } + if ($raz) { effacer_meta('plugin_erreur_activation'); + } + return $list; } /** - * Teste des dependances - * Et verifie que chaque dependance est presente - * dans la liste de plugins donnee + * Teste des dépendances + * + * Et vérifie que chaque dépendance est présente + * dans la liste de plugins donnée * + * @uses plugin_controler_necessite() + * * @param array $n - * Tableau de dependances dont on souhaite verifier leur presence + * Tableau de dépendances dont on souhaite vérifier leur présence * @param array $liste - * Tableau des plugins presents + * Tableau des plugins présents * @return array - * Tableau des messages d'erreurs recus. Il sera vide si tout va bien. - * -**/ -function plugin_necessite($n, $liste) { + * Tableau des messages d'erreurs reçus. Il sera vide si tout va bien. + * + **/ +function plugin_necessite($n, $liste, $balise = 'necessite') { $msg = array(); - foreach($n as $need){ + foreach ($n as $need) { $id = strtoupper($need['nom']); - if ($r = plugin_controler_necessite($liste, $id, $need['compatibilite'])) { + $r = plugin_controler_necessite( + $liste, + $id, + isset($need['compatibilite']) ? $need['compatibilite'] : '', + $balise + ); + if ($r) { $msg[] = $r; } } + return $msg; } /** - * Verifie qu'une dependance (plugin) est bien presente. + * Vérifie qu'une dépendance (plugin) est bien présente. * + * @uses plugin_version_compatible() + * @uses plugin_message_incompatibilite() + * * @param $liste - * Liste de description des plugins + * Liste de description des plugins * @param $nom - * Le plugin donc on cherche la presence - * @param $version - * L'éventuelle intervalle de compatibilité de la dependance. ex: [1.1.0;] + * Le plugin donc on cherche la presence + * @param $intervalle + * L'éventuelle intervalle de compatibilité de la dépendance. ex: [1.1.0;] + * @param $balise + * Permet de définir si on teste un utilise ou un nécessite * @return string. - * Vide si ok, - * Message d'erreur lorsque la dependance est absente. -**/ -function plugin_controler_necessite($liste, $nom, $version) -{ - if (isset($liste[$nom]) AND plugin_version_compatible($version,$liste[$nom]['version'])) { + * Vide si ok, + * Message d'erreur lorsque la dépendance est absente. + **/ +function plugin_controler_necessite($liste, $nom, $intervalle, $balise) { + if (isset($liste[$nom]) and plugin_version_compatible($intervalle, $liste[$nom]['version'])) { return ''; } - // retrouver le minimum - if (preg_match(_EXTRAIRE_INTERVALLE, $version, $regs)) { + + return plugin_message_incompatibilite( + $intervalle, + (isset($liste[$nom]) ? $liste[$nom]['version'] : ""), + $nom, + $balise + ); +} + +/** + * @param string $intervalle + * L'éventuelle intervalle de compatibilité de la dépendance. ex: [1.1.0;] + * @param string $version + * La version en cours active pour le plugin demandé (ou php ou extension php demandée) + * @param string $nom + * Le plugin (ou php ou extension php) qui est absent + * @param string $balise + * Le type de balise utilisé (necessite ou utilise) + * @return string + * Le message d'erreur. + */ +function plugin_message_incompatibilite($intervalle, $version, $nom, $balise) { + + // prendre en compte les erreurs de dépendances à PHP + // ou à une extension PHP avec des messages d'erreurs dédiés. + $type = 'plugin'; + if ($nom === 'PHP') { + $type = 'php'; + } elseif (strncmp($nom, 'PHP:', 4) === 0) { + $type = 'extension_php'; + list(,$nom) = explode(':', $nom, 2); + } + + if (preg_match(_EXTRAIRE_INTERVALLE, $intervalle, $regs)) { $minimum = $regs[1]; - if ($minimum) { - return _T('plugin_necessite_plugin', array( - 'plugin' => $nom, - 'version' => $minimum)); + $maximum = $regs[2]; + + $minimum_inclus = $intervalle{0} == "["; + $maximum_inclus = substr($intervalle, -1) == "]"; + + if (strlen($minimum)) { + if ($minimum_inclus and spip_version_compare($version, $minimum, '<')) { + return _T("plugin_${balise}_${type}", array( + 'plugin' => $nom, + 'version' => ' ≥ ' . $minimum + )); + } + if (!$minimum_inclus and spip_version_compare($version, $minimum, '<=')) { + return _T("plugin_${balise}_${type}", array( + 'plugin' => $nom, + 'version' => ' > ' . $minimum + )); + } + } + + if (strlen($maximum)) { + if ($maximum_inclus and spip_version_compare($version, $maximum, '>')) { + return _T("plugin_${balise}_${type}", array( + 'plugin' => $nom, + 'version' => ' ≤ ' . $maximum + )); + } + if (!$maximum_inclus and spip_version_compare($version, $maximum, '>=')) { + return _T("plugin_${balise}_plugin", array( + 'plugin' => $nom, + 'version' => ' < ' . $maximum + )); + } } } - return _T('plugin_necessite_plugin_sans_version', array('plugin' => $nom)); + + // note : il ne peut pas y avoir d'erreur sur + // - un 'utilise' sans version. + // - un 'php' sans version. + return _T("plugin_necessite_${type}_sans_version", array('plugin' => $nom)); } -function plugin_controler_lib($lib, $url) -{ + +function plugin_controler_lib($lib, $url) { /* Feature sortie du core, voir STP * if ($url) { include_spip('inc/charger_plugin'); $url = '
    ' . bouton_telechargement_plugin($url, 'lib'); }*/ - return _T('plugin_necessite_lib', array('lib'=>$lib)) . " $url"; + return _T('plugin_necessite_lib', array('lib' => $lib)) . " $url"; } -// Pour compatibilite et lisibilite du code -function actualise_plugins_actifs($pipe_recherche = false){ + +/** + * Calcule la liste des plugins actifs et recompile les fichiers caches + * qui leurs sont relatifs + * + * @uses ecrire_plugin_actifs() + * + * @param bool $pipe_recherche ? + * @return bool + * true si il y a eu des modifications sur la liste des plugins actifs, false sinon + **/ +function actualise_plugins_actifs($pipe_recherche = false) { return ecrire_plugin_actifs('', $pipe_recherche, 'force'); } -// mise a jour du meta en fonction de l'etat du repertoire -// Les ecrire_meta() doivent en principe aussi initialiser la valeur a vide -// si elle n'existe pas -// risque de pb en php5 a cause du typage ou de null (verifier dans la doc php) -// @return true/false si il y a du nouveau -// http://doc.spip.org/@ecrire_plugin_actifs -function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz') { + +/** + * Calcule ou modifie la liste des plugins actifs et recompile les fichiers caches + * qui leurs sont relatifs + * + * @note + * Les ecrire_meta() doivent en principe aussi initialiser la valeur a vide + * si elle n'existe pas risque de pb en php5 a cause du typage ou de null + * (verifier dans la doc php) + * + * @param string|string[] $plugin + * Plugin ou plugins concernés (leur chemin depuis le répertoire plugins) + * @param bool $pipe_recherche + * ? + * @param string $operation + * - raz : recalcule tout + * - ajoute : ajoute le plugin indiqué à la liste des plugins actifs + * - enleve : enleve le plugin indiqué de la liste des plugins actifs + * - force : ? + * @return bool + * true si il y a eu des modifications sur la liste des plugins actifs, false sinon + **/ +function ecrire_plugin_actifs($plugin, $pipe_recherche = false, $operation = 'raz') { // creer le repertoire cache/ si necessaire ! (installation notamment) - sous_repertoire(_DIR_CACHE, '', false,true); - - if (!spip_connect()) return false; - if ($operation!='raz') { + $cache = sous_repertoire(_DIR_CACHE, '', false, true); + + // Si on n'a ni cache accessible, ni connexion SQL, on ne peut pas faire grand chose encore. + if (!$cache and !spip_connect()) { + return false; + } + + if ($operation != 'raz') { $plugin_valides = liste_chemin_plugin_actifs(); $plugin_valides = is_plugin_dir($plugin_valides); - if(defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL){ + if (defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) { $plugin_valides_supp = liste_chemin_plugin_actifs(_DIR_PLUGINS_SUPPL); - $plugin_valides_supp = is_plugin_dir($plugin_valides_supp,_DIR_PLUGINS_SUPPL); - $plugin_valides = array_merge($plugin_valides,$plugin_valides_supp); + $plugin_valides_supp = is_plugin_dir($plugin_valides_supp, _DIR_PLUGINS_SUPPL); + $plugin_valides = array_merge($plugin_valides, $plugin_valides_supp); } // si des plugins sont en attentes (coches mais impossible a activer) // on les reinjecte ici if (isset($GLOBALS['meta']['plugin_attente']) - AND $a = unserialize($GLOBALS['meta']['plugin_attente'])) - $plugin_valides = $plugin_valides + liste_chemin_plugin($a); - - if ($operation=='ajoute') - $plugin = array_merge($plugin_valides,$plugin); - elseif ($operation=='enleve') - $plugin = array_diff($plugin_valides,$plugin); - else $plugin = $plugin_valides; + and $a = unserialize($GLOBALS['meta']['plugin_attente']) + ) { + $plugin_valides = $plugin_valides + liste_chemin_plugin($a); + } + + if ($operation == 'ajoute') { + $plugin = array_merge($plugin_valides, $plugin); + } elseif ($operation == 'enleve') { + $plugin = array_diff($plugin_valides, $plugin); + } else { + $plugin = $plugin_valides; + } } - $actifs_avant = $GLOBALS['meta']['plugin']; + $actifs_avant = isset($GLOBALS['meta']['plugin']) ? $GLOBALS['meta']['plugin'] : ''; // si une fonction de gestion de dependances existe, l'appeler ici - if ($ajouter_dependances = charger_fonction("ajouter_dependances","plugins",true)){ + if ($ajouter_dependances = charger_fonction("ajouter_dependances", "plugins", true)) { $plugin = $ajouter_dependances($plugin); } // recharger le xml des plugins a activer - // on forcer le reload ici, meme si le fichier xml n'a pas change + // on force le reload ici, meme si le fichier xml n'a pas change // pour ne pas rater l'ajout ou la suppression d'un fichier fonctions/options/administrations // pourra etre evite quand on ne supportera plus les plugin.xml // en deplacant la detection de ces fichiers dans la compilation ci dessous - list($infos,$liste) = liste_plugin_valides($plugin,true); + list($infos, $liste) = liste_plugin_valides($plugin, true); // trouver l'ordre d'activation - list($plugin_valides,$ordre,$reste) = plugin_trier($infos, $liste); - if ($reste) plugins_erreurs($reste, $liste, $infos); + list($plugin_valides, $ordre, $reste) = plugin_trier($infos, $liste); + if ($reste) { + plugins_erreurs($reste, $liste, $infos); + } + // Ignorer les plugins necessitant une lib absente // et preparer la meta d'entete Http $err = $msg = $header = array(); - foreach($plugin_valides as $p => $resume) { - $header[]= $p.($resume['version']?"(".$resume['version'].")":""); - if ($resume['dir']){ - foreach($infos[$resume['dir_type']][$resume['dir']]['lib'] as $l) { + foreach ($plugin_valides as $p => $resume) { + // Les headers ne doivent pas indiquer les versions des extensions PHP, ni la version PHP + if (0 !== strpos($p, 'PHP:') and $p !== 'PHP') { + $header[] = $p . ($resume['version'] ? "(" . $resume['version'] . ")" : ""); + } + if ($resume['dir']) { + foreach ($infos[$resume['dir_type']][$resume['dir']]['lib'] as $l) { if (!find_in_path($l['nom'], 'lib/')) { $err[$p] = $resume; $msg[$p][] = $l; @@ -543,30 +832,37 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz') { } } } - if ($err) plugins_erreurs($err, '', $infos, $msg); + if ($err) { + plugins_erreurs($err, '', $infos, $msg); + } - if (isset($GLOBALS['meta']['message_crash_plugins'])) + if (isset($GLOBALS['meta']['message_crash_plugins'])) { effacer_meta('message_crash_plugins'); - ecrire_meta('plugin',serialize($plugin_valides)); - $liste = array_diff_key($liste,$plugin_valides); - ecrire_meta('plugin_attente',serialize($liste)); - $header = strtolower(implode(",",$header)); - ecrire_meta('plugin_header',substr($header,0,900)); - if (!isset($GLOBALS['spip_header_silencieux']) OR !$GLOBALS['spip_header_silencieux']) - ecrire_fichier(_DIR_VAR."config.txt", (defined('_HEADER_COMPOSED_BY') ? _HEADER_COMPOSED_BY:"Composed-By: SPIP") . ' '. $GLOBALS['spip_version_affichee'] . " @ www.spip.net + " . $header); - else - @unlink(_DIR_VAR."config.txt"); + } + ecrire_meta('plugin', serialize($plugin_valides)); + $liste = array_diff_key($liste, $plugin_valides); + ecrire_meta('plugin_attente', serialize($liste)); + $header = strtolower(implode(",", $header)); + ecrire_meta('plugin_header', substr($header, 0, 900)); + if (!isset($GLOBALS['spip_header_silencieux']) or !$GLOBALS['spip_header_silencieux']) { + ecrire_fichier(_DIR_VAR . "config.txt", + (defined('_HEADER_COMPOSED_BY') ? _HEADER_COMPOSED_BY : "Composed-By: SPIP") . ' ' . $GLOBALS['spip_version_affichee'] . " @ www.spip.net + " . $header); + } else { + @unlink(_DIR_VAR . "config.txt"); + } // generer charger_plugins_chemin.php plugins_precompile_chemin($plugin_valides, $ordre); // generer les fichiers - // charger_plugins_options.php - // charger_plugins_fonctions.php - // et retourner les fichiers a verifier + // - charger_plugins_options.php + // - charger_plugins_fonctions.php plugins_precompile_xxxtions($plugin_valides, $ordre); + // charger les chemins des plugins et les fichiers d'options + // (qui peuvent déclarer / utiliser des pipelines, ajouter d'autres chemins) + plugins_amorcer_plugins_actifs(); // mise a jour de la matrice des pipelines - pipeline_matrice_precompile($plugin_valides, $ordre, $pipe_recherche); + $prepend_code = pipeline_matrice_precompile($plugin_valides, $ordre, $pipe_recherche); // generer le fichier _CACHE_PIPELINE - pipeline_precompile(); + pipeline_precompile($prepend_code); // attendre eventuellement l'invalidation du cache opcode spip_attend_invalidation_opcode_cache(); @@ -580,89 +876,129 @@ function ecrire_plugin_actifs($plugin,$pipe_recherche=false,$operation='raz') { return ($GLOBALS['meta']['plugin'] != $actifs_avant); } -function plugins_precompile_chemin($plugin_valides, $ordre) -{ +/** + * Écrit le fichier de déclaration des chemins (path) des plugins actifs + * + * Le fichier créé, une fois exécuté permet à SPIP de rechercher + * des fichiers dans les répertoires des plugins concernés. + * + * @see _chemin() Utilisé pour déclarer les chemins. + * @uses plugin_version_compatible() + * @uses ecrire_fichier_php() + * + * @param array $plugin_valides + * Couples (prefixe => description) des plugins qui seront actifs + * @param array $ordre + * Couples (prefixe => infos complètes) des plugins qui seront actifs, dans l'ordre de leurs dépendances +**/ +function plugins_precompile_chemin($plugin_valides, $ordre) { $chemins = array(); $contenu = ""; - foreach($ordre as $p => $info){ + foreach ($ordre as $p => $info) { // $ordre peur contenir des plugins en attente et non valides pour ce hit - if (isset($plugin_valides[$p])){ + if (isset($plugin_valides[$p])) { $dir_type = $plugin_valides[$p]['dir_type']; $plug = $plugin_valides[$p]['dir']; // definir le plugin, donc le path avant l'include du fichier options // permet de faire des include_spip pour attraper un inc_ du plugin - $dir = $dir_type.".'" . $plug ."/'"; - - $prefix = strtoupper(preg_replace(',\W,','_',$info['prefix'])); - if ($prefix!=="SPIP"){ + $dir = $dir_type . ".'" . $plug . "/'"; + + $prefix = strtoupper(preg_replace(',\W,', '_', $info['prefix'])); + if ($prefix !== "SPIP") { $contenu .= "define('_DIR_PLUGIN_$prefix',$dir);\n"; - foreach($info['chemin'] as $chemin){ - if (!isset($chemin['version']) OR plugin_version_compatible($chemin['version'],$GLOBALS['spip_version_branche'],'spip')){ + foreach ($info['chemin'] as $chemin) { + if (!isset($chemin['version']) or plugin_version_compatible($chemin['version'], + $GLOBALS['spip_version_branche'], 'spip') + ) { $dir = $chemin['path']; - if (strlen($dir) AND $dir{0}=="/") $dir = substr($dir,1); - if (strlen($dir) AND $dir=="./") $dir = ''; - if (strlen($dir)) $dir = rtrim($dir,'/').'/'; - if (!isset($chemin['type']) OR $chemin['type']=='public') - $chemins['public'][]="_DIR_PLUGIN_$prefix".(strlen($dir)?".'$dir'":""); - if (!isset($chemin['type']) OR $chemin['type']=='prive') - $chemins['prive'][]="_DIR_PLUGIN_$prefix".(strlen($dir)?".'$dir'":""); + if (strlen($dir) and $dir{0} == "/") { + $dir = substr($dir, 1); + } + if (strlen($dir) and $dir == "./") { + $dir = ''; + } + if (strlen($dir)) { + $dir = rtrim($dir, '/') . '/'; + } + if (!isset($chemin['type']) or $chemin['type'] == 'public') { + $chemins['public'][] = "_DIR_PLUGIN_$prefix" . (strlen($dir) ? ".'$dir'" : ""); + } + if (!isset($chemin['type']) or $chemin['type'] == 'prive') { + $chemins['prive'][] = "_DIR_PLUGIN_$prefix" . (strlen($dir) ? ".'$dir'" : ""); + } } } } } } - if (count($chemins)){ - $contenu .= "if (_DIR_RESTREINT) _chemin(implode(':',array(".implode(',',array_reverse($chemins['public'])).")));\n" - . "else _chemin(implode(':',array(".implode(',',array_reverse($chemins['prive'])).")));\n"; + if (count($chemins)) { + $contenu .= "if (_DIR_RESTREINT) _chemin(implode(':',array(" . implode(',', + array_reverse($chemins['public'])) . ")));\n" + . "else _chemin(implode(':',array(" . implode(',', array_reverse($chemins['prive'])) . ")));\n"; } ecrire_fichier_php(_CACHE_PLUGINS_PATH, $contenu); } -function plugins_precompile_xxxtions($plugin_valides, $ordre) -{ - $contenu = array('options' => '', 'fonctions' =>''); +/** + * Écrit les fichiers de chargement des fichiers d'options et de fonctions des plugins + * + * Les onglets et menus déclarés dans le fichier paquet.xml des plugins sont également + * ajoutés au fichier de fonctions créé. + * + * @uses plugin_ongletbouton() + * @uses ecrire_fichier_php() + * + * @param array $plugin_valides + * Couples (prefixe => description) des plugins qui seront actifs + * @param array $ordre + * Couples (prefixe => infos complètes) des plugins qui seront actifs, dans l'ordre de leurs dépendances +**/ +function plugins_precompile_xxxtions($plugin_valides, $ordre) { + $contenu = array('options' => '', 'fonctions' => ''); $boutons = array(); $onglets = array(); $sign = ""; - foreach($ordre as $p => $info){ + foreach ($ordre as $p => $info) { // $ordre peur contenir des plugins en attente et non valides pour ce hit - if (isset($plugin_valides[$p])){ + if (isset($plugin_valides[$p])) { $dir_type = $plugin_valides[$p]['dir_type']; $plug = $plugin_valides[$p]['dir']; $dir = constant($dir_type); - $root_dir_type = str_replace('_DIR_','_ROOT_',$dir_type); - if ($info['menu']) - $boutons = array_merge($boutons,$info['menu']); - if ($info['onglet']) - $onglets = array_merge($onglets,$info['onglet']); - foreach($contenu as $charge => $v){ + $root_dir_type = str_replace('_DIR_', '_ROOT_', $dir_type); + if ($info['menu']) { + $boutons = array_merge($boutons, $info['menu']); + } + if ($info['onglet']) { + $onglets = array_merge($onglets, $info['onglet']); + } + foreach ($contenu as $charge => $v) { // si pas declare/detecte a la lecture du paquet.xml, // detecer a nouveau ici puisque son ajout ne provoque pas une modif du paquet.xml // donc ni sa relecture, ni sa detection if (!isset($info[$charge]) - AND $dir // exclure le cas du plugin "SPIP" - AND strpos($dir,":")===false // exclure le cas des procure: - AND file_exists("$dir$plug/paquet.xml") // uniquement pour les paquet.xml - ){ - if (is_readable("$dir$plug/".($file=$info['prefix']."_".$charge.".php"))){ + and $dir // exclure le cas du plugin "SPIP" + and strpos($dir, ":") === false // exclure le cas des procure: + and file_exists("$dir$plug/paquet.xml") // uniquement pour les paquet.xml + ) { + if (is_readable("$dir$plug/" . ($file = $info['prefix'] . "_" . $charge . ".php"))) { $info[$charge] = array($file); } } - if (isset($info[$charge])){ + if (isset($info[$charge])) { $files = $info[$charge]; - foreach($files as $k=>$file){ + foreach ($files as $k => $file) { // on genere un if file_exists devant chaque include // pour pouvoir garder le meme niveau d'erreur general $file = trim($file); if (!is_readable("$dir$plug/$file") // uniquement pour les paquet.xml - AND file_exists("$dir$plug/paquet.xml")){ + and file_exists("$dir$plug/paquet.xml") + ) { unset($info[$charge][$k]); - } - else { + } else { $_file = $root_dir_type . ".'$plug/$file'"; $contenu[$charge] .= "include_once_check($_file);\n"; } @@ -673,173 +1009,356 @@ function plugins_precompile_xxxtions($plugin_valides, $ordre) } } - $contenu['options'] = "define('_PLUGINS_HASH','".md5($sign)."');\n" . $contenu['options']; + $contenu['options'] = "define('_PLUGINS_HASH','" . md5($sign) . "');\n" . $contenu['options']; $contenu['fonctions'] .= plugin_ongletbouton("boutons_plugins", $boutons) - . plugin_ongletbouton("onglets_plugins", $onglets); + . plugin_ongletbouton("onglets_plugins", $onglets); ecrire_fichier_php(_CACHE_PLUGINS_OPT, $contenu['options']); ecrire_fichier_php(_CACHE_PLUGINS_FCT, $contenu['fonctions']); } -function plugin_ongletbouton($nom, $val) -{ - if (!$val) $val = array(); - define("_UPDATED_$nom",$val = serialize($val)); - define("_UPDATED_md5_$nom",$md5=md5($val)); - $val = "unserialize('".str_replace("'","\'",$val)."')"; +/** + * Compile les entrées d'un menu et retourne le code php d'exécution + * + * Génère et retourne un code php (pour enregistrement dans un fichier de cache) + * permettant d'obtenir la liste des entrées de menus, ou des onglets + * de l'espace privé. + * + * Définit également une constante (_UPDATED_$nom et _UPDATED_md5_$nom), + * signalant une modification de ces menus + * + * @param string $nom Nom du type de menu + * Exemple: boutons_plugins, onglets_plugins + * @param array $val Liste des entrées de ce menu + * @return string Code php + */ +function plugin_ongletbouton($nom, $val) { + if (!$val) { + $val = array(); + } + + $val = serialize($val); + $md5 = md5($val); + + if (!defined("_UPDATED_$nom")) { + define("_UPDATED_$nom", $val); + define("_UPDATED_md5_$nom", $md5); + } + $val = "unserialize('" . str_replace("'", "\'", $val) . "')"; + return "if (!function_exists('$nom')) {\n" - ."function $nom(){return defined('_UPDATED_$nom')?unserialize(_UPDATED_$nom):$val;}\n" - ."function md5_$nom(){return defined('_UPDATED_md5_$nom')?_UPDATED_md5_$nom:'".$md5."';}\n" - ."}\n"; + . "function $nom(){return defined('_UPDATED_$nom')?unserialize(_UPDATED_$nom):$val;}\n" + . "function md5_$nom(){return defined('_UPDATED_md5_$nom')?_UPDATED_md5_$nom:'" . $md5 . "';}\n" + . "}\n"; +} + +/** + * Chargement des plugins actifs dans le path de SPIP + * et exécution de fichiers d'options des plugins + * + * Les fichiers d'options peuvent déclarer des pipelines ou de + * nouveaux chemins. + * + * La connaissance chemins peut être nécessaire pour la construction + * du fichier d'exécution des pipelines. +**/ +function plugins_amorcer_plugins_actifs() { + + if (@is_readable(_CACHE_PLUGINS_PATH)) { + include_once(_CACHE_PLUGINS_PATH); + } + + if (@is_readable(_CACHE_PLUGINS_OPT)) { + include_once(_CACHE_PLUGINS_OPT); + } else { + spip_log("pipelines desactives: impossible de produire " . _CACHE_PLUGINS_OPT); + } } -// creer le fichier CACHE_PLUGIN_VERIF a partir de -// $GLOBALS['spip_pipeline'] -// $GLOBALS['spip_matrice'] +/** + * Crée la liste des filtres à traverser pour chaque pipeline + * + * Complète la globale `spip_pipeline` des fonctions que doit traverser un pipeline, + * et la globale `spip_matrice` des fichiers à charger qui contiennent ces fonctions. + * + * Retourne aussi pour certaines balises présentes dans les paquet.xml (script, style, genie), + * un code PHP à insérer au début de la chaîne du ou des pipelines associés à cette balise + * (insert_head, insert_head_css, taches_generales_cron, ...). Ce sont des écritures + * raccourcies pour des usages fréquents de ces pipelines. + * + * @param array $plugin_valides + * Couples (prefixe => description) des plugins qui seront actifs + * @param array $ordre + * Couples (prefixe => infos complètes) des plugins qui seront actifs, dans l'ordre de leurs dépendances + * @param string $pipe_recherche + * @return array + * Couples (nom du pipeline => Code PHP à insérer au début du pipeline) +**/ +function pipeline_matrice_precompile($plugin_valides, $ordre, $pipe_recherche) { + static $liste_pipe_manquants = array(); + if (($pipe_recherche) && (!in_array($pipe_recherche, $liste_pipe_manquants))) { + $liste_pipe_manquants[] = $pipe_recherche; + } -function pipeline_matrice_precompile($plugin_valides, $ordre, $pipe_recherche) -{ - static $liste_pipe_manquants=array(); - if (($pipe_recherche)&&(!in_array($pipe_recherche,$liste_pipe_manquants))) - $liste_pipe_manquants[]=$pipe_recherche; + $prepend_code = array(); - foreach($ordre as $p => $info){ + foreach ($ordre as $p => $info) { // $ordre peur contenir des plugins en attente et non valides pour ce hit - if (isset($plugin_valides[$p])){ + if (isset($plugin_valides[$p])) { $dir_type = $plugin_valides[$p]['dir_type']; - $root_dir_type = str_replace('_DIR_','_ROOT_',$dir_type); + $root_dir_type = str_replace('_DIR_', '_ROOT_', $dir_type); $plug = $plugin_valides[$p]['dir']; - $prefix = (($info['prefix']=="spip")?"":$info['prefix']."_"); - if (isset($info['pipeline']) AND is_array($info['pipeline'])){ - foreach($info['pipeline'] as $pipe){ + $prefix = (($info['prefix'] == "spip") ? "" : $info['prefix'] . "_"); + if (isset($info['pipeline']) and is_array($info['pipeline'])) { + foreach ($info['pipeline'] as $pipe) { $nom = $pipe['nom']; - if (isset($pipe['action'])) - $action = $pipe['action']; - else - $action = $nom; + if (isset($pipe['action'])) { + $action = $pipe['action']; + } else { + $action = $nom; + } $nomlower = strtolower($nom); - if ($nomlower!=$nom - AND isset($GLOBALS['spip_pipeline'][$nom]) - AND !isset($GLOBALS['spip_pipeline'][$nomlower])){ + if ($nomlower != $nom + and isset($GLOBALS['spip_pipeline'][$nom]) + and !isset($GLOBALS['spip_pipeline'][$nomlower]) + ) { $GLOBALS['spip_pipeline'][$nomlower] = $GLOBALS['spip_pipeline'][$nom]; unset($GLOBALS['spip_pipeline'][$nom]); } $nom = $nomlower; // une action vide est une declaration qui ne doit pas etre compilee ! if (!isset($GLOBALS['spip_pipeline'][$nom])) // creer le pipeline eventuel - $GLOBALS['spip_pipeline'][$nom]=""; - if ($action){ - if (strpos($GLOBALS['spip_pipeline'][$nom],"|$prefix$action")===FALSE) - $GLOBALS['spip_pipeline'][$nom] = preg_replace(",(\|\||$),","|$prefix$action\\1",$GLOBALS['spip_pipeline'][$nom],1); - if (isset($pipe['inclure'])){ + { + $GLOBALS['spip_pipeline'][$nom] = ""; + } + if ($action) { + if (strpos($GLOBALS['spip_pipeline'][$nom], "|$prefix$action") === false) { + $GLOBALS['spip_pipeline'][$nom] = preg_replace(",(\|\||$),", "|$prefix$action\\1", + $GLOBALS['spip_pipeline'][$nom], 1); + } + if (isset($pipe['inclure'])) { $GLOBALS['spip_matrice']["$prefix$action"] = - "$root_dir_type:$plug/".$pipe['inclure']; + "$root_dir_type:$plug/" . $pipe['inclure']; } } } } + if (isset($info['genie']) and count($info['genie'])) { + if (!isset($prepend_code['taches_generales_cron'])) { + $prepend_code['taches_generales_cron'] = ""; + } + foreach ($info['genie'] as $genie) { + $nom = $prefix . $genie['nom']; + $periode = max(60, intval($genie['periode'])); + if (charger_fonction($nom, "genie", true)) { + $prepend_code['taches_generales_cron'] .= "\$val['$nom'] = $periode;\n"; + } else { + spip_log("Fonction genie_$nom introuvable", _LOG_ERREUR); + } + } + } + if (isset($info['style']) and count($info['style'])) { + if (!isset($prepend_code['insert_head_css'])) { + $prepend_code['insert_head_css'] = ""; + } + if (!isset($prepend_code['header_prive_css'])) { + $prepend_code['header_prive_css'] = ""; + } + foreach ($info['style'] as $style) { + if (isset($style['path']) and $style['path']) { + $code = "if (\$f=timestamp(direction_css(find_in_path('" . addslashes($style['path']) . "')))) "; + } else { + $code = "if (\$f='" . addslashes($style['url']) . "') "; + } + $code .= "\$val .= '';\n"; + if ($script['type'] != 'prive') { + $prepend_code['insert_head'] .= $code; + } + if ($script['type'] != 'public') { + $prepend_code['header_prive'] .= $code; + } + } + } } } - - // on charge les fichiers d'options qui peuvent completer - // la globale spip_pipeline egalement - if (@is_readable(_CACHE_PLUGINS_PATH)) - include_once(_CACHE_PLUGINS_PATH); // securite : a priori n'a pu etre fait plus tot - if (@is_readable(_CACHE_PLUGINS_OPT)) { - include_once(_CACHE_PLUGINS_OPT); - } else { - spip_log("pipelines desactives: impossible de produire " . _CACHE_PLUGINS_OPT); - } - + + $prepend_code['insert_head'] = + "include_once_check(_DIR_RESTREINT . 'inc/pipelines.php');\n" + . "\$val = minipipe('f_jQuery', \$val);\n" + . $prepend_code['insert_head']; + $prepend_code['header_prive'] = + "include_once_check(_DIR_RESTREINT . 'inc/pipelines_ecrire.php');\n" + . "\$val = minipipe('f_jQuery_prive', \$val);\n" + . $prepend_code['header_prive']; + // on ajoute les pipe qui ont ete recenses manquants - foreach($liste_pipe_manquants as $add_pipe) - if (!isset($GLOBALS['spip_pipeline'][$add_pipe])) - $GLOBALS['spip_pipeline'][$add_pipe]= ''; + foreach ($liste_pipe_manquants as $add_pipe) { + if (!isset($GLOBALS['spip_pipeline'][$add_pipe])) { + $GLOBALS['spip_pipeline'][$add_pipe] = ''; + } + } + + return $prepend_code; } -// precompilation des pipelines -// http://doc.spip.org/@pipeline_precompile -function pipeline_precompile(){ - global $spip_pipeline, $spip_matrice; +/** + * Précompilation des pipelines + * + * Crée le fichier d'exécution des pipelines + * dont le chemin est défini par `_CACHE_PIPELINES` + * + * La liste des pipelines est définie par la globale `spip_pipeline` + * qui a été remplie soit avec les fichiers d'options, soit avec + * des descriptions de plugins (plugin.xml ou paquet.xml) dont celui de SPIP lui-même. + * + * Les fichiers à charger pour accéder aux fonctions qui doivent traverser + * un pipeline se trouve dans la globale `spip_matrice`. + * + * @see pipeline_matrice_precompile() + * + * @uses ecrire_fichier_php() + * @uses clear_path_cache() + * + * @param array $prepend_code + * Code PHP à insérer avant le passage dans la chaîne des fonctions d'un pipeline + * Couples 'Nom du pipeline' => Code PHP à insérer +**/ +function pipeline_precompile($prepend_code = array()) { $content = ""; - foreach($spip_pipeline as $action=>$pipeline){ + foreach ($GLOBALS['spip_pipeline'] as $action => $pipeline) { $s_inc = ""; $s_call = ""; - $pipe = array_filter(explode('|',$pipeline)); + $pipe = array_filter(explode('|', $pipeline)); // Eclater le pipeline en filtres et appliquer chaque filtre foreach ($pipe as $fonc) { $fonc = trim($fonc); - $s_call .= '$val = minipipe(\''.$fonc.'\', $val);'."\n"; - if (isset($spip_matrice[$fonc])){ - $file = $spip_matrice[$fonc]; + $s_call .= '$val = minipipe(\'' . $fonc . '\', $val);' . "\n"; + if (isset($GLOBALS['spip_matrice'][$fonc])) { + $file = $GLOBALS['spip_matrice'][$fonc]; $file = "'$file'"; // si un _DIR_XXX: est dans la chaine, on extrait la constante - if (preg_match(",(_(DIR|ROOT)_[A-Z_]+):,Ums",$file,$regs)){ + if (preg_match(",(_(DIR|ROOT)_[A-Z_]+):,Ums", $file, $regs)) { $dir = $regs[1]; - $root_dir = str_replace('_DIR_','_ROOT_',$dir); - if (defined($root_dir)) + $root_dir = str_replace('_DIR_', '_ROOT_', $dir); + if (defined($root_dir)) { $dir = $root_dir; - $file = str_replace($regs[0],"'.".$dir.".'",$file); - $file = str_replace("''.","",$file); + } + $file = str_replace($regs[0], "'." . $dir . ".'", $file); + $file = str_replace("''.", "", $file); $file = str_replace(constant($dir), '', $file); } $s_inc .= "include_once_check($file);\n"; } } - if (strlen($s_inc)) + if (strlen($s_inc)) { $s_inc = "static \$inc=null;\nif (!\$inc){\n$s_inc\$inc=true;\n}\n"; + } $content .= "// Pipeline $action \n" - . "function execute_pipeline_$action(&\$val){\n" - . $s_inc - . $s_call - . "return \$val;\n}\n"; + . "function execute_pipeline_$action(&\$val){\n" + . $s_inc + . ((isset($prepend_code[$action]) and strlen($prepend_code[$action])) ? trim($prepend_code[$action]) . "\n" : '') + . $s_call + . "return \$val;\n}\n"; } ecrire_fichier_php(_CACHE_PIPELINES, $content); clear_path_cache(); } -// http://doc.spip.org/@plugin_est_installe -function plugin_est_installe($plug_path){ - $plugin_installes = isset($GLOBALS['meta']['plugin_installes'])?unserialize($GLOBALS['meta']['plugin_installes']):array(); - if (!$plugin_installes) return false; - return in_array($plug_path,$plugin_installes); +/** + * Indique si un chemin de plugin fait parti des plugins activés sur le site + * + * @param string $plug_path + * Chemin du plugin + * @return bool + * true si le plugin est actif, false sinon +**/ +function plugin_est_installe($plug_path) { + $plugin_installes = isset($GLOBALS['meta']['plugin_installes']) ? unserialize($GLOBALS['meta']['plugin_installes']) : array(); + if (!$plugin_installes) { + return false; + } + + return in_array($plug_path, $plugin_installes); } -function plugin_installes_meta() -{ +/** + * Parcours les plugins activés et appelle leurs fonctions d'installation si elles existent. + * + * Elle ajoute ensuite les plugins qui ont été installés dans la valeur "plugin_installes" + * de la table meta. Cette meta ne contient que les noms des plugins qui ont une version_base. + * + * @uses plugins_installer_dist() + **/ +function plugin_installes_meta() { $installer_plugins = charger_fonction('installer', 'plugins'); $meta_plug_installes = array(); - foreach (unserialize($GLOBALS['meta']['plugin']) as $prefix=>$resume) { - if ($plug = $resume['dir']){ + foreach (unserialize($GLOBALS['meta']['plugin']) as $prefix => $resume) { + if ($plug = $resume['dir']) { $infos = $installer_plugins($plug, 'install', $resume['dir_type']); - if ($infos){ - if (!is_array($infos) OR $infos['install_test'][0]) + if ($infos) { + if (!is_array($infos) or $infos['install_test'][0]) { $meta_plug_installes[] = $plug; - if (is_array($infos)){ + } + if (is_array($infos)) { list($ok, $trace) = $infos['install_test']; include_spip('inc/filtres_boites'); - echo "
    " - .boite_ouvrir(_T('plugin_titre_installation', array('plugin' => typo($infos['nom']))), ($ok ? 'success' : 'error')) - .$trace - ."
    " - .($ok ? ((isset($infos['upgrade']) && $infos['upgrade']) ? _T("plugin_info_upgrade_ok") : _T("plugin_info_install_ok")) : _T("avis_operation_echec")) - ."
    " - .boite_fermer() - ."
    "; + echo "
    " + . boite_ouvrir(_T('plugin_titre_installation', array('plugin' => typo($infos['nom']))), + ($ok ? 'success' : 'error')) + . $trace + . "
    " + . ($ok ? ((isset($infos['upgrade']) && $infos['upgrade']) ? _T("plugin_info_upgrade_ok") : _T("plugin_info_install_ok")) : _T("avis_operation_echec")) + . "
    " + . boite_fermer() + . "
    "; } } } } - ecrire_meta('plugin_installes',serialize($meta_plug_installes),'non'); + ecrire_meta('plugin_installes', serialize($meta_plug_installes), 'non'); } -function ecrire_fichier_php($nom, $contenu, $comment='') -{ - ecrire_fichier($nom, - '<'.'?php' . "\n" . $comment ."\nif (defined('_ECRIRE_INC_VERSION')) {\n". $contenu . "}\n?".'>'); +/** + * Écrit un fichier PHP + * + * @param string $nom + * Chemin du fichier + * @param string $contenu + * Contenu du fichier (sans les balises ouvrantes et fermantes de PHP) + * @param string $comment + * Commentaire : code écrit en tout début de fichier, après la balise PHP ouvrante +**/ +function ecrire_fichier_php($nom, $contenu, $comment = '') { + ecrire_fichier($nom, + '<' . '?php' . "\n" . $comment . "\nif (defined('_ECRIRE_INC_VERSION')) {\n" . $contenu . "}\n?" . '>'); } - diff --git a/www/ecrire/inc/precharger_article.php b/www/ecrire/inc/precharger_article.php index 9169b7ae..6efec9db 100644 --- a/www/ecrire/inc/precharger_article.php +++ b/www/ecrire/inc/precharger_article.php @@ -3,38 +3,62 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Préchargement les formulaires d'édition d'article, notament pour les traductions + * + * @package SPIP\Core\Objets + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/precharger_objet'); -// Recupere les donnees d'un article pour composer un formulaire d'edition -// id_article = numero d'article existant -// id_rubrique = ou veut-on l'installer (pas obligatoire) -// lier_trad = l'associer a l'article numero $lier_trad -// new=oui = article a creer si on valide le formulaire -// http://doc.spip.org/@inc_article_select_dist -function inc_precharger_article_dist($id_article, $id_rubrique=0, $lier_trad=0) { +/** + * Retourne les valeurs à charger pour un formulaire d'édition d'un article + * + * Lors d'une création, certains champs peuvent être préremplis + * (c'est le cas des traductions) + * + * @param string|int $id_article + * Identifiant de l'article, ou "new" pour une création + * @param int $id_rubrique + * Identifiant éventuel de la rubrique parente + * @param int $lier_trad + * Identifiant éventuel de la traduction de référence + * @return array + * Couples clés / valeurs des champs du formulaire à charger. + **/ +function inc_precharger_article_dist($id_article, $id_rubrique = 0, $lier_trad = 0) { return precharger_objet('article', $id_article, $id_rubrique, $lier_trad, 'titre'); } -// -// Si un article est demande en creation (new=oui) avec un lien de trad, -// on initialise les donnees de maniere specifique -// -// (fonction facultative si pas de changement dans les traitements) -function inc_precharger_traduction_article_dist($id_article, $id_rubrique=0, $lier_trad=0) { +/** + * Récupère les valeurs d'une traduction de référence pour la création + * d'un article (préremplissage du formulaire). + * + * @note + * Fonction facultative si pas de changement dans les traitements + * + * @param string|int $id_article + * Identifiant de l'article, ou "new" pour une création + * @param int $id_rubrique + * Identifiant éventuel de la rubrique parente + * @param int $lier_trad + * Identifiant éventuel de la traduction de référence + * @return array + * Couples clés / valeurs des champs du formulaire à charger + **/ +function inc_precharger_traduction_article_dist($id_article, $id_rubrique = 0, $lier_trad = 0) { return precharger_traduction_objet('article', $id_article, $id_rubrique, $lier_trad, 'titre'); } - - - -?> diff --git a/www/ecrire/inc/precharger_objet.php b/www/ecrire/inc/precharger_objet.php index 5852f4f7..8686b594 100644 --- a/www/ecrire/inc/precharger_objet.php +++ b/www/ecrire/inc/precharger_objet.php @@ -3,41 +3,55 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Préchargement les formulaires d'édition d'objets, notament pour les traductions + * + * @package SPIP\Core\Objets + **/ -include_spip('inc/autoriser'); // necessaire si appel de l'espace public +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} +include_spip('inc/autoriser'); // necessaire si appel de l'espace public /** - * Retourne les valeurs a charger pour un formulaire d'edition d'un objet - * Lors d'une creation, certains champs peuvent être preremplis (c'est le cas des traductions) + * Retourne les valeurs à charger pour un formulaire d'édition d'un objet * - * @param string $type Type d'objet (article,breve...) - * @param string|int $id_objet, Identifiant de l'objet, ou "new" pour une creation - * @param int $id_rubrique, identifiant eventuel de la rubrique parente - * @param int $lier_trad, identifiant eventuel de la traduction de reference - * @param string $champ_titre, nom de la colonne SQL de l'objet donnant le titre : - * pas ideal ? on devrait pouvoir le savoir - * dans la declaration de l'objet - * @return array couples cles / valeurs des champs du formulaire à charger. -**/ -function precharger_objet($type, $id_objet, $id_rubrique=0, $lier_trad=0, $champ_titre = 'titre') { - global $connect_id_rubrique, $spip_lang; - + * Lors d'une création, certains champs peuvent être préremplis + * (c'est le cas des traductions) + * + * @param string $type + * Type d'objet (article, breve...) + * @param string|int $id_objet + * Identifiant de l'objet, ou "new" pour une création + * @param int $id_rubrique + * Identifiant éventuel de la rubrique parente + * @param int $lier_trad + * Identifiant éventuel de la traduction de référence + * @param string $champ_titre + * Nom de la colonne SQL de l'objet donnant le titre : pas vraiment idéal ! + * On devrait pouvoir le savoir dans la déclaration de l'objet + * @return array + * Couples clés / valeurs des champs du formulaire à charger. + **/ +function precharger_objet($type, $id_objet, $id_rubrique = 0, $lier_trad = 0, $champ_titre = 'titre') { + $table = table_objet_sql($type); $_id_objet = id_table_objet($table); // si l'objet existe deja, on retourne simplement ses valeurs - if (is_numeric($id_objet)) + if (is_numeric($id_objet)) { return sql_fetsel("*", $table, "$_id_objet=$id_objet"); + } // ici, on demande une creation. // on prerempli certains elements : les champs si traduction, @@ -45,15 +59,16 @@ function precharger_objet($type, $id_objet, $id_rubrique=0, $lier_trad=0, $champ $desc = lister_tables_objets_sql($table); # il faudrait calculer $champ_titre ici $is_rubrique = isset($desc['field']['id_rubrique']); - $is_secteur = isset($desc['field']['id_secteur']); + $is_secteur = isset($desc['field']['id_secteur']); // si demande de traduction // on recupere les valeurs de la traduction - if ($lier_trad){ - if ($select = charger_fonction("precharger_traduction_" . $type,'inc',true)) + if ($lier_trad) { + if ($select = charger_fonction("precharger_traduction_" . $type, 'inc', true)) { $row = $select($id_objet, $id_rubrique, $lier_trad); - else + } else { $row = precharger_traduction_objet($type, $id_objet, $id_rubrique, $lier_trad, $champ_titre); + } } else { $row[$champ_titre] = ''; if ($is_rubrique) { @@ -68,22 +83,22 @@ function precharger_objet($type, $id_objet, $id_rubrique=0, $lier_trad=0, $champ // admin restreint ==> sa premiere rubrique // autre ==> la derniere rubrique cree if (!$row['id_rubrique']) { - if ($connect_id_rubrique) - $row['id_rubrique'] = $id_rubrique = current($connect_id_rubrique); - else { + if ($GLOBALS['connect_id_rubrique']) { + $row['id_rubrique'] = $id_rubrique = current($GLOBALS['connect_id_rubrique']); + } else { $row_rub = sql_fetsel("id_rubrique", "spip_rubriques", "", "", "id_rubrique DESC", 1); $row['id_rubrique'] = $id_rubrique = $row_rub['id_rubrique']; } - if (!autoriser('creerarticledans','rubrique',$row['id_rubrique'] )){ + if (!autoriser('creerarticledans', 'rubrique', $row['id_rubrique'])) { // manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises $res = sql_select("id_rubrique", "spip_rubriques", "id_parent=0"); - while (!autoriser('creerarticledans','rubrique',$row['id_rubrique'] ) && $row_rub = sql_fetch($res)){ + while (!autoriser('creerarticledans', 'rubrique', $row['id_rubrique']) && $row_rub = sql_fetch($res)) { $row['id_rubrique'] = $row_rub['id_rubrique']; } } } } - + // recuperer le secteur, pour affecter les bons champs extras if ($id_rubrique and $is_secteur) { if (!$row['id_secteur']) { @@ -97,25 +112,31 @@ function precharger_objet($type, $id_objet, $id_rubrique=0, $lier_trad=0, $champ /** - * Recupere les valeurs d'une traduction de reference pour la creation - * d'un objet (preremplissage du formulaire). + * Récupère les valeurs d'une traduction de référence pour la création + * d'un objet (préremplissage du formulaire). * - * @param string $type Type d'objet (article,breve...) - * @param string|int $id_objet, Identifiant de l'objet, ou "new" pour une creation - * @param int $id_rubrique, identifiant eventuel de la rubrique parente - * @param int $lier_trad, identifiant eventuel de la traduction de reference - * @param string $champ_titre, nom de la colonne SQL de l'objet donnant le titre - * - * @return array couples cles / valeurs des champs du formulaire à charger -**/ -function precharger_traduction_objet($type, $id_objet, $id_rubrique=0, $lier_trad=0, $champ_titre = 'titre') { + * @param string $type + * Type d'objet (article, breve...) + * @param string|int $id_objet + * Identifiant de l'objet, ou "new" pour une création + * @param int $id_rubrique + * Identifiant éventuel de la rubrique parente + * @param int $lier_trad + * Identifiant éventuel de la traduction de référence + * @param string $champ_titre + * Nom de la colonne SQL de l'objet donnant le titre + * @return array + * Couples clés / valeurs des champs du formulaire à charger + **/ +function precharger_traduction_objet($type, $id_objet, $id_rubrique = 0, $lier_trad = 0, $champ_titre = 'titre') { $table = table_objet_sql($type); $_id_objet = id_table_objet($table); // Recuperer les donnees de l'objet original $row = sql_fetsel("*", $table, "$_id_objet=$lier_trad"); if ($row) { - $row[$champ_titre] = filtrer_entites(_T('info_nouvelle_traduction')).' '.$row[$champ_titre]; + include_spip('inc/filtres'); + $row[$champ_titre] = filtrer_entites(objet_T($type, 'info_nouvelle_traduction')) . ' ' . $row[$champ_titre]; } else { $row = array(); } @@ -123,28 +144,29 @@ function precharger_traduction_objet($type, $id_objet, $id_rubrique=0, $lier_tra // on met l'objet dans une rubrique si l'objet le peut $desc = lister_tables_objets_sql($table); $is_rubrique = isset($desc['field']['id_rubrique']); - + if ($is_rubrique) { if ($id_rubrique) { $row['id_rubrique'] = $id_rubrique; + return $row; } $id_rubrique = $row['id_rubrique']; - + // Regler la langue, si possible, sur celle du redacteur // Cela implique souvent de choisir une rubrique ou un secteur if (in_array($GLOBALS['spip_lang'], - explode(',', $GLOBALS['meta']['langues_multilingue']))) { + explode(',', $GLOBALS['meta']['langues_multilingue']))) { // Si le menu de langues est autorise sur l'objet, // on peut changer la langue quelle que soit la rubrique // donc on reste dans la meme rubrique - if (in_array($table, explode(',',$GLOBALS['meta']['multi_objets']))) { + if (in_array($table, explode(',', $GLOBALS['meta']['multi_objets']))) { $row['id_rubrique'] = $row['id_rubrique']; # explicite :-) - // Sinon, chercher la rubrique la plus adaptee pour - // accueillir l'objet dans la langue du traducteur + // Sinon, chercher la rubrique la plus adaptee pour + // accueillir l'objet dans la langue du traducteur } elseif ($is_rubrique and $GLOBALS['meta']['multi_rubriques'] == 'oui') { if ($GLOBALS['meta']['multi_secteurs'] == 'oui') { $id_parent = 0; @@ -153,16 +175,15 @@ function precharger_traduction_objet($type, $id_objet, $id_rubrique=0, $lier_tra $row_rub = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=$id_rubrique"); $id_parent = $row_rub['id_parent']; } - - $row_rub = sql_fetsel("id_rubrique", "spip_rubriques", "lang='".$GLOBALS['spip_lang']."' AND id_parent=$id_parent"); - if ($row_rub) - $row['id_rubrique'] = $row_rub['id_rubrique']; + + $row_rub = sql_fetsel("id_rubrique", "spip_rubriques", + "lang='" . $GLOBALS['spip_lang'] . "' AND id_parent=$id_parent"); + if ($row_rub) { + $row['id_rubrique'] = $row_rub['id_rubrique']; + } } } } + return $row; } - - - -?> diff --git a/www/ecrire/inc/prepare_recherche.php b/www/ecrire/inc/prepare_recherche.php index 15702932..680c3819 100644 --- a/www/ecrire/inc/prepare_recherche.php +++ b/www/ecrire/inc/prepare_recherche.php @@ -3,26 +3,34 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ +/** + * Gestion des préparatifs de recherches + * + * @package SPIP\Core\Recherche + **/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/rechercher'); -if (!defined('_DELAI_CACHE_resultats')) define('_DELAI_CACHE_resultats', 600); +if (!defined('_DELAI_CACHE_resultats')) { + define('_DELAI_CACHE_resultats', 600); +} /** - * Preparer les listes id_article IN (...) pour les parties WHERE - * et points = des requetes du moteur de recherche - * http://doc.spip.org/@inc_prepare_recherche_dist - * - * Le parametre $serveur est utilise pour savoir sur quelle base on cherche - * mais l'index des resultats est toujours stock� sur le serveur principal + * Préparer les listes `id_article IN (...)` pour les parties WHERE + * et calcul des `points` pour la partie SELECT des requêtes du moteur de recherche + * + * Le paramètre $serveur est utilisé pour savoir sur quelle base on cherche + * mais l'index des résultats est toujours stocké sur le serveur principal * car on ne sait pas si la base distante dispose d'une table spip_resultats * ni meme si on aurait le droit d'ecrire dedans * @@ -40,31 +48,46 @@ if (!defined('_DELAI_CACHE_resultats')) define('_DELAI_CACHE_resultats', 600); * cle primaire de la table de recherche * @return array */ -function inc_prepare_recherche_dist($recherche, $table='articles', $cond=false, $serveur='', $modificateurs = array(), $primary='') { +function inc_prepare_recherche_dist( + $recherche, + $table = 'articles', + $cond = false, + $serveur = '', + $modificateurs = array(), + $primary = '' +) { static $cache = array(); - $delai_fraicheur = min(_DELAI_CACHE_resultats,time()-$GLOBALS['meta']['derniere_modif']); + $delai_fraicheur = min(_DELAI_CACHE_resultats, + time() - (isset($GLOBALS['meta']['derniere_modif']) ? $GLOBALS['meta']['derniere_modif'] : 0)); // si recherche n'est pas dans le contexte, on va prendre en globals // ca permet de faire des inclure simple. - if (!isset($recherche) AND isset($GLOBALS['recherche'])) + if (!isset($recherche) and isset($GLOBALS['recherche'])) { $recherche = $GLOBALS['recherche']; + } // traiter le cas {recherche?} - if ($cond AND !strlen($recherche)) - return array("0 as points" /* as points */, /* where */ ''); - - + if ($cond and !strlen($recherche)) { + return array( + "0 as points" /* as points */, /* where */ + '' + ); + } + + $rechercher = false; - if (!isset($cache[$serveur][$table][$recherche])){ - $hash_serv = ($serveur?substr(md5($serveur),0,16):''); - $hash = substr(md5($recherche . $table),0,16); - $where = "(resultats.recherche='$hash' AND resultats.table_objet=".sql_quote($table)." AND resultats.serveur='$hash_serv')"; - $row = sql_fetsel('UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(resultats.maj) AS fraicheur','spip_resultats AS resultats',$where,'','fraicheur DESC','0,1'); + if (!isset($cache[$serveur][$table][$recherche])) { + $hash_serv = ($serveur ? substr(md5($serveur), 0, 16) : ''); + $hash = substr(md5($recherche . $table), 0, 16); + $where = "(resultats.recherche='$hash' AND resultats.table_objet=" . sql_quote($table) . " AND resultats.serveur='$hash_serv')"; + $row = sql_fetsel('UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(resultats.maj) AS fraicheur', 'spip_resultats AS resultats', + $where, '', 'fraicheur DESC', '0,1'); if (!$row - OR ($row['fraicheur']>$delai_fraicheur) - OR (defined('_VAR_MODE') AND _VAR_MODE=='recalcul')){ - $rechercher = true; + or ($row['fraicheur'] > $delai_fraicheur) + or (defined('_VAR_MODE') and _VAR_MODE == 'recalcul') + ) { + $rechercher = true; } } @@ -78,27 +101,34 @@ function inc_prepare_recherche_dist($recherche, $table='articles', $cond=false, 'score' => true, 'toutvoir' => true, 'jointures' => true - ), + ), $serveur); // pas de résultat, pas de point $points = isset($points[$x]) ? $points[$x] : array(); // permettre aux plugins de modifier le resultat - $points = pipeline('prepare_recherche',array( - 'args'=>array('type'=>$x,'recherche'=>$recherche,'serveur'=>$serveur,'modificateurs'=>$modificateurs), - 'data'=>$points + $points = pipeline('prepare_recherche', array( + 'args' => array( + 'type' => $x, + 'recherche' => $recherche, + 'serveur' => $serveur, + 'modificateurs' => $modificateurs + ), + 'data' => $points )); // supprimer les anciens resultats de cette recherche // et les resultats trop vieux avec une marge // pas de AS resultats dans un delete (mysql) - $whered = str_replace(array("resultats.recherche","resultats.table_objet","resultats.serveur"),array("recherche","table_objet","serveur"),$where); - sql_delete('spip_resultats', 'NOT(' .sql_date_proche('maj', (0-($delai_fraicheur+100)), " SECOND") . ") OR ($whered)"); + $whered = str_replace(array("resultats.recherche", "resultats.table_objet", "resultats.serveur"), + array("recherche", "table_objet", "serveur"), $where); + sql_delete('spip_resultats', + 'NOT(' . sql_date_proche('maj', (0 - ($delai_fraicheur + 100)), " SECOND") . ") OR ($whered)"); // inserer les resultats dans la table de cache des resultats - if (count($points)){ + if (count($points)) { $tab_couples = array(); - foreach ($points as $id => $p){ + foreach ($points as $id => $p) { $tab_couples[] = array( 'recherche' => $hash, 'id' => $id, @@ -107,16 +137,17 @@ function inc_prepare_recherche_dist($recherche, $table='articles', $cond=false, 'serveur' => $hash_serv, ); } - sql_insertq_multi('spip_resultats',$tab_couples,array()); + sql_insertq_multi('spip_resultats', $tab_couples, array()); } } - if (!isset($cache[$serveur][$table][$recherche])){ - if (!$serveur) - $cache[$serveur][$table][$recherche] = array("resultats.points AS points",$where); - else { - if (sql_countsel('spip_resultats as resultats',$where)) - $rows = sql_allfetsel('resultats.id,resultats.points','spip_resultats as resultats',$where); + if (!isset($cache[$serveur][$table][$recherche])) { + if (!$serveur) { + $cache[$serveur][$table][$recherche] = array("resultats.points AS points", $where); + } else { + if (sql_countsel('spip_resultats as resultats', $where)) { + $rows = sql_allfetsel('resultats.id,resultats.points', 'spip_resultats as resultats', $where); + } $cache[$serveur][$table][$recherche] = generer_select_where_explicites($table, $primary, $rows, $serveur); } } @@ -136,25 +167,23 @@ function inc_prepare_recherche_dist($recherche, $table='articles', $cond=false, * @param string $serveur * @return array */ -function generer_select_where_explicites($table, $primary, $rows, $serveur){ +function generer_select_where_explicites($table, $primary, $rows, $serveur) { # calculer le {id_article IN()} et le {... as points} - if (!count($rows)){ + if (!count($rows)) { return array("''", "0=1"); - } - else { + } else { $listes_ids = array(); $select = '0'; - foreach ($rows as $r) + foreach ($rows as $r) { $listes_ids[$r['points']][] = $r['id']; + } - foreach ($listes_ids as $p => $ids) - $select .= "+$p*(". - sql_in("$table.$primary", $ids,'',$serveur) - .") "; + foreach ($listes_ids as $p => $ids) { + $select .= "+$p*(" . + sql_in("$table.$primary", $ids, '', $serveur) + . ") "; + } - return array("$select AS points ",calcul_mysql_in("$table.$primary",array_map('reset',$rows),'',$serveur)); + return array("$select AS points ", sql_in("$table.$primary", array_map('reset', $rows), '', $serveur)); } } - - -?> diff --git a/www/ecrire/inc/preselectionner_parent_nouvel_objet.php b/www/ecrire/inc/preselectionner_parent_nouvel_objet.php index 8043b5a4..ce2c4a64 100644 --- a/www/ecrire/inc/preselectionner_parent_nouvel_objet.php +++ b/www/ecrire/inc/preselectionner_parent_nouvel_objet.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -11,9 +11,12 @@ \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; -if (!defined('_AUTO_SELECTION_RUBRIQUE')) - define('_AUTO_SELECTION_RUBRIQUE',false); +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} +if (!defined('_AUTO_SELECTION_RUBRIQUE')) { + define('_AUTO_SELECTION_RUBRIQUE', false); +} /** @@ -25,33 +28,36 @@ if (!defined('_AUTO_SELECTION_RUBRIQUE')) * @param array $row * @return string */ -function inc_preselectionner_parent_nouvel_objet_dist($objet, $row){ - if (!_AUTO_SELECTION_RUBRIQUE) +function inc_preselectionner_parent_nouvel_objet_dist($objet, $row) { + if (!_AUTO_SELECTION_RUBRIQUE) { return ''; + } - if (!isset($row['id_rubrique'])) + if (!isset($row['id_rubrique'])) { return ''; + } $id_rubrique = ''; - if ($GLOBALS['connect_id_rubrique']){ + if ($GLOBALS['connect_id_rubrique']) { // si admin restreint : sa rubrique $id_rubrique = $GLOBALS['connect_id_rubrique'][0]; - } - else { + } else { // sinon la derniere rubrique cree $row_rub = sql_fetsel("id_rubrique", "spip_rubriques", "", "", "id_rubrique DESC", "0,1"); $id_rubrique = $row_rub['id_rubrique']; } // si le choix ne convient pas, on cherche dans un secteur - if (!autoriser('creer'.$objet.'dans','rubrique',$id_rubrique)){ + if (!autoriser('creer' . $objet . 'dans', 'rubrique', $id_rubrique)) { $id_rubrique = ''; // manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises $res = sql_select("id_rubrique", "spip_rubriques", "id_parent=0"); - while (!$id_rubrique AND $row_rub = sql_fetch($res)){ - if (autoriser('creer'.$objet.'dans','rubrique',$row_rub['id_rubrique'])) + while (!$id_rubrique and $row_rub = sql_fetch($res)) { + if (autoriser('creer' . $objet . 'dans', 'rubrique', $row_rub['id_rubrique'])) { $id_rubrique = $row_rub['id_rubrique']; + } } } + return $id_rubrique; -} \ No newline at end of file +} diff --git a/www/ecrire/inc/presentation.php b/www/ecrire/inc/presentation.php index 74f74fd5..4d6d74e6 100644 --- a/www/ecrire/inc/presentation.php +++ b/www/ecrire/inc/presentation.php @@ -3,14 +3,21 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Fonctions pour l'affichage privé des pages exec PHP + * + * @package SPIP\Core\Presentation + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/presentation_mini'); include_spip('inc/layer'); @@ -22,122 +29,237 @@ include_spip('inc/puce_statut'); include_spip('inc/filtres_ecrire'); include_spip('inc/filtres_boites'); -// http://doc.spip.org/@debut_cadre -function debut_cadre($style, $icone = "", $fonction = "", $titre = "", $id="", $class="", $padding=true) { - $style_mapping=array('r'=>'simple','e'=>'raccourcis','couleur'=>'basic highlight','couleur-foncee'=>'basic highlight','trait-couleur'=>'important','alerte'=>'notice','info'=>'info','sous_rub'=>'simple sous-rub'); - $style_titre_mapping=array('couleur'=>'topper','trait-couleur'=>'section'); - $c = isset($style_mapping[$style])?$style_mapping[$style]:'simple'; - $class = $c . ($class?" $class":""); - if (!$padding) - $class .= ($class?" ":"")."no-padding"; +// http://code.spip.net/@debut_cadre +function debut_cadre($style, $icone = "", $fonction = "", $titre = "", $id = "", $class = "", $padding = true) { + $style_mapping = array( + 'r' => 'simple', + 'e' => 'raccourcis', + 'couleur' => 'basic highlight', + 'couleur-foncee' => 'basic highlight', + 'trait-couleur' => 'important', + 'alerte' => 'notice', + 'info' => 'info', + 'sous_rub' => 'simple sous-rub' + ); + $style_titre_mapping = array('couleur' => 'topper', 'trait-couleur' => 'section'); + $c = isset($style_mapping[$style]) ? $style_mapping[$style] : 'simple'; + $class = $c . ($class ? " $class" : ""); + if (!$padding) { + $class .= ($class ? " " : "") . "no-padding"; + } //($id?"id='$id' ":"") if (strlen($icone) > 1) { - if ($icone_renommer = charger_fonction('icone_renommer','inc',true)) - list($fond,$fonction) = $icone_renommer($icone,$fonction); + if ($icone_renommer = charger_fonction('icone_renommer', 'inc', true)) { + list($fond, $fonction) = $icone_renommer($icone, $fonction); + } $size = 24; - if (preg_match("/-([0-9]{1,3})[.](gif|png)$/i",$fond,$match)) + if (preg_match("/-([0-9]{1,3})[.](gif|png)$/i", $fond, $match)) { $size = $match[1]; - if ($fonction){ + } + if ($fonction) { // 2 images pour composer l'icone : le fond (article) en background, // la fonction (new) en image $icone = http_img_pack($fonction, "", "class='cadre-icone' width='$size' height='$size'\n" . - http_style_background($fond, "no-repeat center center")); - } - else { + http_style_background($fond, "no-repeat center center")); + } else { $icone = http_img_pack($fond, "", "class='cadre-icone' width='$size' height='$size'"); } $titre = $icone . $titre; } - return boite_ouvrir($titre, $class,isset($style_titre_mapping[$style])?$style_titre_mapping[$style]:'',$id); + + return boite_ouvrir($titre, $class, isset($style_titre_mapping[$style]) ? $style_titre_mapping[$style] : '', $id); +} + +// http://code.spip.net/@fin_cadre +function fin_cadre() { return boite_fermer(); } + + +function debut_cadre_relief( + $icone = '', + $dummy = '', + $fonction = '', + $titre = '', + $id = "", + $class = "" +) { + return debut_cadre('r', $icone, $fonction, $titre, $id, $class); +} + +function fin_cadre_relief() { return fin_cadre('r'); } + +function debut_cadre_enfonce( + $icone = '', + $dummy = '', + $fonction = '', + $titre = '', + $id = "", + $class = "" +) { + return debut_cadre('e', $icone, $fonction, $titre, $id, $class); +} + +function fin_cadre_enfonce() { return fin_cadre('e'); } + +function debut_cadre_sous_rub( + $icone = '', + $dummy = '', + $fonction = '', + $titre = '', + $id = "", + $class = "" +) { + return debut_cadre('sous_rub', $icone, $fonction, $titre, $id, $class); +} + +function fin_cadre_sous_rub() { return fin_cadre('sous_rub'); } + +function debut_cadre_couleur( + $icone = '', + $dummy = '', + $fonction = '', + $titre = '', + $id = "", + $class = "" +) { + return debut_cadre('couleur', $icone, $fonction, $titre, $id, $class); } -// http://doc.spip.org/@fin_cadre -function fin_cadre() {return boite_fermer();} - - -function debut_cadre_relief($icone='', $dummy='', $fonction='', $titre = '', $id="", $class=""){return debut_cadre('r', $icone, $fonction, $titre, $id, $class);} -function fin_cadre_relief(){return fin_cadre('r');} -function debut_cadre_enfonce($icone='', $dummy='', $fonction='', $titre = '', $id="", $class=""){return debut_cadre('e', $icone, $fonction, $titre, $id, $class);} -function fin_cadre_enfonce(){return fin_cadre('e');} -function debut_cadre_sous_rub($icone='', $dummy='', $fonction='', $titre = '', $id="", $class=""){return debut_cadre('sous_rub', $icone, $fonction, $titre, $id, $class);} -function fin_cadre_sous_rub(){return fin_cadre('sous_rub');} -function debut_cadre_couleur($icone='', $dummy='', $fonction='', $titre='', $id="", $class=""){return debut_cadre('couleur', $icone, $fonction, $titre, $id, $class);} -function fin_cadre_couleur(){return fin_cadre('couleur');} -function debut_cadre_couleur_foncee($icone='', $dummy='', $fonction='', $titre='', $id="", $class=""){return debut_cadre('couleur-foncee', $icone, $fonction, $titre, $id, $class);} -function fin_cadre_couleur_foncee(){return fin_cadre('couleur-foncee');} -function debut_cadre_trait_couleur($icone='', $dummy='', $fonction='', $titre='', $id="", $class=""){return debut_cadre('trait-couleur', $icone, $fonction, $titre, $id, $class);} -function fin_cadre_trait_couleur(){return fin_cadre('trait-couleur');} -function debut_boite_alerte() {return debut_cadre('alerte', '', '', '', '', '');} -function fin_boite_alerte() {return fin_cadre('alerte');} -function debut_boite_info() {return debut_cadre('info', '', '', '', '', '');} -function fin_boite_info() {return fin_cadre('info');} - -// http://doc.spip.org/@gros_titre -function gros_titre($titre, $ze_logo=''){return "

    " . $ze_logo.' ' . typo($titre)."

    \n";} +function fin_cadre_couleur() { return fin_cadre('couleur'); } + +function debut_cadre_trait_couleur( + $icone = '', + $dummy = '', + $fonction = '', + $titre = '', + $id = "", + $class = "" +) { + return debut_cadre('trait-couleur', $icone, $fonction, $titre, $id, $class); +} + +function fin_cadre_trait_couleur() { return fin_cadre('trait-couleur'); } + +function debut_boite_alerte() { return debut_cadre('alerte', '', '', '', '', ''); } + +function fin_boite_alerte() { return fin_cadre('alerte'); } + +function debut_boite_info() { return debut_cadre('info', '', '', '', '', ''); } + +function fin_boite_info() { return fin_cadre('info'); } + +/** + * Affiche le titre d’une page de l’interface privée. Utilisée par la plupart des fichiers `exec/xx.php`. + * + * @param string $titre Le titre en question + * @param string $ze_logo Une image de logo + * @return string Code PHP. + **/ +function gros_titre( + $titre, + $ze_logo = '' +) { + return "

    " . $ze_logo . ' ' . typo($titre) . "

    \n"; +} // La boite des raccourcis // Se place a droite si l'ecran est en mode panoramique. -// http://doc.spip.org/@bloc_des_raccourcis +// http://code.spip.net/@bloc_des_raccourcis function bloc_des_raccourcis($bloc) { return creer_colonne_droite() - . boite_ouvrir(_T('titre_cadre_raccourcis'),'raccourcis') . $bloc . boite_fermer(); + . boite_ouvrir(_T('titre_cadre_raccourcis'), 'raccourcis') . $bloc . boite_fermer(); } -// Compatibilite -// http://doc.spip.org/@afficher_plus -function afficher_plus($lien) {include_spip('inc/filtres_ecrire');afficher_plus_info($lien);} - - - // // Fonctions d'affichage // -// http://doc.spip.org/@afficher_objets -function afficher_objets($type, $titre_table,$requete,$formater='',$force=false){ - $afficher_objets = charger_fonction('afficher_objets','inc'); - return $afficher_objets($type, $titre_table,$requete,$formater,$force); -} - // Fonctions onglets -// http://doc.spip.org/@debut_onglet +// http://code.spip.net/@debut_onglet // @param string $sous_classe prend la valeur second pour definir les onglet de deuxieme niveau -function debut_onglet($classe="barre_onglet"){return "
      \n";} -// http://doc.spip.org/@fin_onglet -function fin_onglet(){return "
    \n";} -// http://doc.spip.org/@onglet -function onglet($texte, $lien, $onglet_ref, $onglet, $icone=""){ +function debut_onglet($classe = "barre_onglet") { return "
      \n"; } + +// http://code.spip.net/@fin_onglet +function fin_onglet() { return "
    \n"; } + +// http://code.spip.net/@onglet +function onglet($texte, $lien, $onglet_ref, $onglet, $icone = "") { return "
  • " - . ($icone?http_img_pack($icone, '', " class='cadre-icone'"):'') - . lien_ou_expose($lien,$texte,$onglet == $onglet_ref) - . "
  • "; + . ($icone ? http_img_pack($icone, '', " class='cadre-icone'") : '') + . lien_ou_expose($lien, $texte, $onglet == $onglet_ref) + . ""; } -// http://doc.spip.org/@icone_inline -function icone_verticale($texte, $lien, $fond, $fonction="", $align="", $javascript=""){ +/** + * Crée un lien précédé d'une icone au dessus du texte + * + * @uses icone_base() + * @see filtre_icone_verticale_dist() Pour l'usage en tant que filtre + * + * @example + * ``` + * $icone = icone_verticale(_T('sites:info_sites_referencer'), + * generer_url_ecrire('site_edit', "id_rubrique=$id_rubrique"), + * "site-24.png", "new", 'right') + * ``` + * + * @param string $texte + * Texte du lien + * @param string $lien + * URL du lien + * @param string $fond + * Objet avec ou sans son extension et sa taille (article, article-24, article-24.png) + * @param string $fonction + * Fonction du lien (`edit`, `new`, `del`) + * @param string $align + * Classe CSS, tel que `left`, `right` pour définir un alignement + * @param string $javascript + * Javascript ajouté sur le lien + * @return string + * Code HTML du lien + **/ +function icone_verticale($texte, $lien, $fond, $fonction = "", $align = "", $javascript = "") { // cas d'ajax_action_auteur: faut defaire le boulot // (il faudrait fusionner avec le cas $javascript) - if (preg_match(",^]*)>(.*)$,i",$lien,$r)) { - list($x,$lien,$atts,$texte)= $r; + if (preg_match(",^]*)>(.*)$,i", $lien, $r)) { + list($x, $lien, $atts, $texte) = $r; $javascript .= $atts; } - return icone_base($lien, $texte, $fond, $fonction,"verticale $align",$javascript); + return icone_base($lien, $texte, $fond, $fonction, "verticale $align", $javascript); } -// http://doc.spip.org/@icone_horizontale -function icone_horizontale($texte, $lien, $fond, $fonction="", $dummy="", $javascript="") { +/** + * Crée un lien précédé d'une icone horizontale + * + * @uses icone_base() + * @see filtre_icone_horizontale_dist() Pour l'usage en tant que filtre + * + * @param string $texte + * Texte du lien + * @param string $lien + * URL du lien + * @param string $fond + * Objet avec ou sans son extension et sa taille (article, article-24, article-24.png) + * @param string $fonction + * Fonction du lien (`edit`, `new`, `del`) + * @param string $dummy + * Inutilisé + * @param string $javascript + * Javascript ajouté sur le lien + * @return string + * Code HTML du lien + **/ +function icone_horizontale($texte, $lien, $fond, $fonction = "", $dummy = "", $javascript = "") { $retour = ''; // cas d'ajax_action_auteur: faut defaire le boulot // (il faudrait fusionner avec le cas $javascript) - if (preg_match(",^]*)>(.*)$,i",$lien,$r)) { - list($x,$lien,$atts,$texte)= $r; + if (preg_match(",^]*)>(.*)$,i", $lien, $r)) { + list($x, $lien, $atts, $texte) = $r; $javascript .= $atts; } - $retour = icone_base($lien, $texte, $fond, $fonction,"horizontale",$javascript); + $retour = icone_base($lien, $texte, $fond, $fonction, "horizontale", $javascript); + return $retour; } - -?> \ No newline at end of file diff --git a/www/ecrire/inc/presentation_mini.php b/www/ecrire/inc/presentation_mini.php index 2bfaef99..51caa4e4 100644 --- a/www/ecrire/inc/presentation_mini.php +++ b/www/ecrire/inc/presentation_mini.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -14,200 +14,281 @@ * Fonctions d'affichage pour l'espace privé (hors squelettes) * * @package SPIP\Core\Affichage -**/ -if (!defined('_ECRIRE_INC_VERSION')) return; + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Affiche un code html (echo) et log l'affichage car cet echo est anormal ! - * + * * Signale une fonction qui devrait retourner un contenu mais effectue * un echo à la place pour compatibilité ascendante * * @deprecated * Utiliser des squelettes pour l'affichage ! - * + * * @param string $f * Nom de la fonction * @param string $ret * Code HTML à afficher * @return void -**/ + **/ function echo_log($f, $ret) { - spip_log("Page " . self() . " function $f: echo ".substr($ret,0,50)."...",'echo'); - echo - (_SIGNALER_ECHOS?"#Echo par $f#" :"") - . $ret; + spip_log("Page " . self() . " function $f: echo " . substr($ret, 0, 50) . "...", 'echo'); + echo(_SIGNALER_ECHOS ? "#Echo par $f#" : "") . $ret; } /** * Retourne le code HTML d'un début de cadre pour le centre de page (haut de page) + * * @return string Code HTML */ -function debut_grand_cadre(){ return "\n
    \n";} +function debut_grand_cadre() { return "\n
    \n"; } /** * Retourne le code HTML d'une fin de cadre pour le centre de page (haut de page) + * * @return string Code HTML */ -function fin_grand_cadre(){ return "\n
    ";} +function fin_grand_cadre() { return "\n
    "; } // Debut de la colonne de gauche // div navigation fermee par creer_colonne_droite qui ouvre // div extra lui-meme ferme par debut_droite qui ouvre // div contenu lui-meme ferme par fin_gauche() ainsi que // div conteneur -// http://doc.spip.org/@debut_gauche + /** * Retourne le code HTML du début de la colonne gauche + * * @return string Code HTML */ -function debut_gauche() { return "
    \n

    "; } /** * Retourne le code HTML du changement de colonne (passer de la gauche à la droite) + * * @return string Code HTML */ -function creer_colonne_droite(){ +function creer_colonne_droite() { static $deja_colonne_droite; - if ($GLOBALS['spip_ecran']!='large' OR $deja_colonne_droite) return ''; + if ($GLOBALS['spip_ecran'] != 'large' or $deja_colonne_droite) { + return ''; + } $deja_colonne_droite = true; + return "\n
    " - . "\n
    "; + . creer_colonne_droite() + . "
    " + . "\n
    "; } -// http://doc.spip.org/@liste_articles_bloques -function liste_objets_bloques($exec,$contexte=array(),$auteur=null){ +/** + * Retourne la liste des objets édités récemment (si les drapeaux d'édition sont actifs) + * + * Si notre page est une page d'édition d'un objet, on déclare au passage l'auteur + * comme éditant l'objet + * + * @uses signale_edition() + * @uses liste_drapeau_edition() + * + * @param string $exec + * Nom de la page exec en cours + * @param array $contexte + * Contexte de la page + * @param array|null $auteur + * Session de l'auteur. Sera prise sur l'auteur connecté si non indiquée. + * @return string + * Code HTML + **/ +function liste_objets_bloques($exec, $contexte = array(), $auteur = null) { $res = ''; if ($GLOBALS['meta']["articles_modif"] != "non") { include_spip('inc/drapeau_edition'); - if (is_null($auteur)) + if (is_null($auteur)) { $auteur = $GLOBALS['visiteur_session']; - if ($en_cours=trouver_objet_exec($exec) - AND $en_cours['edition'] - AND $type = $en_cours['type'] - AND ($id = $contexte[$en_cours['id_table_objet']] OR $id = _request($en_cours['id_table_objet']))) { + } + if ($en_cours = trouver_objet_exec($exec) + and $en_cours['edition'] + and $type = $en_cours['type'] + and ((isset($contexte[$en_cours['id_table_objet']]) and $id = $contexte[$en_cours['id_table_objet']]) + or $id = _request($en_cours['id_table_objet'])) + ) { // marquer le fait que l'objet est ouvert en edition par toto // a telle date ; une alerte sera donnee aux autres redacteurs - signale_edition ($id, $auteur, $type); + signale_edition($id, $auteur, $type); } $objets_ouverts = liste_drapeau_edition($auteur['id_auteur']); if (count($objets_ouverts)) { - $res .= recuperer_fond('prive/objets/liste/objets-en-edition',array(),array('ajax'=>true)); + $res .= recuperer_fond('prive/objets/liste/objets-en-edition', array(), array('ajax' => true)); } } + return $res; } -// Fin de page de l'interface privee. -// Elle comporte une image invisible declenchant une tache de fond -// http://doc.spip.org/@fin_page -function fin_page(){ + +/** + * Retourne le code HTML de fin de page de l'interface privée. + * + * Elle génère au passage un appel pour déclencher les tâches cron + * + * @see f_queue() Pour l'appel au cron + * + * @return string Code HTML + **/ +function fin_page() { include_spip('inc/pipelines'); // avec &var_profile=1 on a le tableau de mesures SQL $debug = ((_request('exec') !== 'valider_xml') - AND ((_request('var_mode') == 'debug') - OR (isset($GLOBALS['tableau_des_temps']) AND $GLOBALS['tableau_des_temps']) - AND isset($_COOKIE['spip_admin']))); + and ((_request('var_mode') == 'debug') + or (isset($GLOBALS['tableau_des_temps']) and $GLOBALS['tableau_des_temps']) + and isset($_COOKIE['spip_admin']))); $t = '
    ' - . recuperer_fond('prive/squelettes/inclure/pied') - . "
    " - . "
" // cf. div#page et div.largeur ouvertes dans conmmencer_page() - . ($debug?erreur_squelette():'') - . "\n"; + . recuperer_fond('prive/squelettes/inclure/pied') + . "" + . "" // cf. div#page et div.largeur ouvertes dans conmmencer_page() + . ($debug ? erreur_squelette() : '') + . "\n"; + return f_queue($t); } -function html_tests_js(){ - if (_SPIP_AJAX AND !defined('_TESTER_NOSCRIPT')) { - // pour le pied de page (deja defini si on est validation XML) +/** + * Retourne des tests javascript à exécuter + * + * - Teste que javascript est actif : si non, un hit sur exec=test_ajax est généré + * - Rejoue la session si demandé (par verifier_session() si l'ip a changé) + * + * @see exec_test_ajax_dist() + * @see verifier_session() + * + * @return string Code HTML + **/ +function html_tests_js() { + if (_SPIP_AJAX and !defined('_TESTER_NOSCRIPT')) { + // pour le pied de page (deja defini si on est validation XML) define('_TESTER_NOSCRIPT', "\n"); + . generer_url_ecrire('test_ajax', 'js=-1') + . "' width='1' height='1' alt='' />\n"); } - return - (defined('_SESSION_REJOUER') ? _SESSION_REJOUER : '') - . (defined('_TESTER_NOSCRIPT') ? _TESTER_NOSCRIPT : ''); + + $rejouer = ''; + if (defined('_SESSION_REJOUER')) { + $rejouer = (_SESSION_REJOUER === true) ? rejouer_session() : _SESSION_REJOUER; + } + + return $rejouer . (defined('_TESTER_NOSCRIPT') ? _TESTER_NOSCRIPT : ''); } -function info_maj_spip(){ +/** + * Retourne la liste des mises à jour de SPIP possibles + * + * @return string Texte présentant la liste des mises à jour existantes + **/ +function info_maj_spip() { - $maj = $GLOBALS['meta']['info_maj_spip']; - if (!$maj) + $maj = isset($GLOBALS['meta']['info_maj_spip']) ? $GLOBALS['meta']['info_maj_spip'] : null; + if (!$maj) { return ""; + } - $maj = explode('|',$maj); + $maj = explode('|', $maj); // c'est une ancienne notif, on a fait la maj depuis ! - if ($GLOBALS['spip_version_branche']!==reset($maj)) + if ($GLOBALS['spip_version_branche'] !== reset($maj)) { return ""; + } - if (!autoriser('webmestre')) + if (!autoriser('webmestre')) { return ""; + } array_shift($maj); - $maj = implode('|',$maj); + $maj = implode('|', $maj); return "$maj
"; } -// http://doc.spip.org/@info_copyright +/** + * Retourne les informations de copyright (version de SPIP, de l'écran de sécurité) + * pour le pied de page de l'espace privé + * + * @return string Code HTML + **/ function info_copyright() { - global $spip_version_affichee, $spip_lang; - $version = $spip_version_affichee; + $version = $GLOBALS['spip_version_affichee']; // // Mention, le cas echeant, de la revision SVN courante // if ($svn_revision = version_svn_courante(_DIR_RACINE)) { - $version .= ' ' . (($svn_revision < 0) ? 'SVN ':'') - . "[" - . abs($svn_revision) . "]"; + $version .= ' ' . (($svn_revision < 0) ? 'SVN ' : '') + . "[" + . abs($svn_revision) . "]"; } // et la version de l'ecran de securite $secu = defined('_ECRAN_SECURITE') - ? "
"._T('ecran_securite',array('version'=>_ECRAN_SECURITE)) + ? "
" . _T('ecran_securite', array('version' => _ECRAN_SECURITE)) : ''; return _T('info_copyright', - array('spip' => "SPIP $version ", - 'lien_gpl' => - "" . _T('info_copyright_gpl')."")) - . $secu; + array( + 'spip' => "SPIP $version ", + 'lien_gpl' => + "" . _T('info_copyright_gpl') . "" + )) + . $secu; } -// http://doc.spip.org/@formulaire_recherche -function formulaire_recherche($page, $complement=""){ +/** + * Retourne un formulaire de recherche pour l'espace privé + * + * Préférez l'usage en squelettes via la balise `#FORMULAIRE_RECHERCHE_ECRIRE`. + * + * @see formulaires_recherche_ecrire_charger_dist() + * + * @param string $page Nom de la page exec + * @param string $complement Code HTML supplémentaire + * @return string Code HTML + **/ +function formulaire_recherche($page, $complement = "") { $recherche = _request('recherche'); $recherche_aff = entites_html($recherche); if (!strlen($recherche)) { $recherche_aff = _T('info_rechercher'); $onfocus = " onfocus=\"this.value='';\""; - } else $onfocus = ''; + } else { + $onfocus = ''; + } - $form = ''; - $form .= ""; - return "
".generer_form_ecrire($page, $form . $complement, " method='get'")."
"; -} + $form = ''; + $form .= ""; -?> + return "
" . generer_form_ecrire($page, $form . $complement, " method='get'") . "
"; +} diff --git a/www/ecrire/inc/presenter_enfants.php b/www/ecrire/inc/presenter_enfants.php index 91df554c..b8991a81 100644 --- a/www/ecrire/inc/presenter_enfants.php +++ b/www/ecrire/inc/presenter_enfants.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -11,26 +11,28 @@ \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/autoriser'); include_spip('inc/presentation'); /** * Crée l'affichage des listes de rubriques dans le privé - * + * * @param int $collection * L'identifiant numérique de la rubrique à lister * @param int $debut - * Le numéro de la pagination si paginé (> 500) + * Le numéro de la pagination si paginé (> 500) * @param int $limite - * Le pas de pagination si paginé (> 500) + * Le pas de pagination si paginé (> 500) * @return array $res - * Un tableau des sous rubriques + * Un tableau des sous rubriques */ -function enfant_rub($collection,$debut=0,$limite=500){ - $voir_logo = (isset($GLOBALS['meta']['image_process']) AND $GLOBALS['meta']['image_process'] != "non"); - $logo = ""; +function enfant_rub($collection, $debut = 0, $limite = 500) { + $voir_logo = (isset($GLOBALS['meta']['image_process']) and $GLOBALS['meta']['image_process'] != 'non'); + $logo = ''; if ($voir_logo) { $chercher_logo = charger_fonction('chercher_logo', 'inc'); @@ -38,48 +40,64 @@ function enfant_rub($collection,$debut=0,$limite=500){ } $res = array(); - - $result = sql_select("id_rubrique, id_parent, titre, descriptif, lang ", "spip_rubriques", "id_parent=$collection",'', '0+titre,titre',"$debut,$limite"); - while($row=sql_fetch($result)){ - $id_rubrique=$row['id_rubrique']; - $id_parent=$row['id_parent']; - $titre=generer_info_entite($id_rubrique,'rubrique','titre'); // pour etre sur de passer par tous les traitements - if ('' !== ($rang = recuperer_numero($row['titre']))) - $rang = "$rang. "; - if (autoriser('voir','rubrique',$id_rubrique)){ + $result = sql_select( + 'id_rubrique, id_parent, titre, descriptif, lang', + 'spip_rubriques', + 'id_parent='.intval($collection), + '', + '0+titre,titre', + "$debut,$limite" + ); + while ($row = sql_fetch($result)) { + $id_rubrique = $row['id_rubrique']; + $id_parent = $row['id_parent']; + // pour etre sur de passer par tous les traitements + $titre = generer_info_entite($id_rubrique, 'rubrique', 'titre'); + if ('' !== ($rang = recuperer_numero($row['titre']))) { + $rang = "$rang. "; + } + if (autoriser('voir', 'rubrique', $id_rubrique)) { $les_sous_enfants = sous_enfant_rub($id_rubrique); changer_typo($row['lang']); $lang_dir = lang_dir($row['lang']); - $descriptif=propre($row['descriptif']); + $descriptif = propre($row['descriptif']); if ($voir_logo) { if ($logo = $chercher_logo($id_rubrique, 'id_rubrique', 'on')) { list($fid, $dir, $nom, $format) = $logo; $logo = image_reduire("", 48, 36); - if ($logo) - $logo = inserer_attribut($logo,'class','logo'); + if ($logo) { + $logo = inserer_attribut($logo, 'class', 'logo'); + } } } - $lib_bouton = (!acces_restreint_rubrique($id_rubrique) ? "" : - http_img_pack('auteur-0minirezo-16.png', '', " width='16' height='16'", _T('image_administrer_rubrique'))) . - " ". + $lib_bouton = (!acces_restreint_rubrique($id_rubrique) ? '' : + http_img_pack( + 'auteur-0minirezo-16.png', + '', + " width='16' height='16'", + _T('image_administrer_rubrique') + )) . + " " . $rang . $titre . - ""; + ''; $titre = (is_string($logo) ? $logo : '') . - bouton_block_depliable($lib_bouton,$les_sous_enfants ?false:-1,"enfants$id_rubrique"); + bouton_block_depliable($lib_bouton, $les_sous_enfants ? false : -1, "enfants$id_rubrique"); $res[] = - debut_cadre_sous_rub(($id_parent ? "rubrique-24.png" : "secteur-24.png"), true, "", $titre) . - (!$descriptif ? '' : "\n
$descriptif
") . - $les_sous_enfants . - fin_cadre_sous_rub(true); + debut_cadre_sous_rub(($id_parent ? 'rubrique-24.png' : 'secteur-24.png'), true, '', $titre) . + (!$descriptif ? '' : "\n
$descriptif
") . + $les_sous_enfants . + fin_cadre_sous_rub(true); } } @@ -90,105 +108,124 @@ function enfant_rub($collection,$debut=0,$limite=500){ /** * Affiche les enfants d'une sous rubrique dans un bloc dépliable * (Utilisé dans les pages du privé) - * + * * @param int $collection2 - * L'identifiant numérique de la rubrique parente + * L'identifiant numérique de la rubrique parente * @return string - * Le contenu du bloc dépliable + * Le contenu du bloc dépliable */ -function sous_enfant_rub($collection2){ - $nb = sql_countsel('spip_rubriques',"id_parent=$collection2"); - +function sous_enfant_rub($collection2) { + $nb = sql_countsel('spip_rubriques', 'id_parent='.intval($collection2)); + $retour = ''; $pagination = ''; $debut = 0; $limite = 500; - + /** * On ne va afficher que 500 résultats max * Si > 500 on affiche une pagination */ - if($nb > $limite){ - $debut = _request('debut_rubrique'.$collection2) ? _request('debut_rubrique'.$collection2) : $debut; + if ($nb > $limite) { + $debut = _request('debut_rubrique' . $collection2) ? _request('debut_rubrique' . $collection2) : $debut; $pagination = chercher_filtre('pagination'); - $pagination = '

'.$pagination($nb, '_rubrique'.$collection2, $debut, $limite, true, 'prive').'

'; + $pagination = '

' . $pagination($nb, '_rubrique' . $collection2, $debut, $limite, true, + 'prive') . '

'; $limite = $debut + $limite; } - - $result = sql_select("id_rubrique, id_parent, titre, lang", "spip_rubriques", "id_parent=$collection2",'', '0+titre,titre',"$debut,$limite"); - - while($row=sql_fetch($result)){ - $id_rubrique2=$row['id_rubrique']; - $id_parent2=$row['id_parent']; - $titre2=generer_info_entite($id_rubrique2,'rubrique','titre'); // pour etre sur de passer par tous les traitements - if ('' !== ($rang2 = recuperer_numero($row['titre']))) + + $result = sql_select( + 'id_rubrique, id_parent, titre, lang', + 'spip_rubriques', + 'id_parent='.intval($collection2), + '', + '0+titre,titre', + "$debut,$limite" + ); + + while ($row = sql_fetch($result)) { + $id_rubrique2 = $row['id_rubrique']; + $titre2 = generer_info_entite( + $id_rubrique2, + 'rubrique', + 'titre' + ); // pour etre sur de passer par tous les traitements + if ('' !== ($rang2 = recuperer_numero($row['titre']))) { $rang2 = "$rang2. "; + } changer_typo($row['lang']); $lang_dir = lang_dir($row['lang']); - if (autoriser('voir','rubrique',$id_rubrique2)) - $retour.="\n
  • ".$rang2.$titre2."
  • \n"; + if (autoriser('voir', 'rubrique', $id_rubrique2)) { + $retour .= "\n
  • " . $rang2 . $titre2 . "
  • \n"; + } } - - $retour = $pagination.$retour.$pagination; - - if (!$retour) return ''; - - return debut_block_depliable($debut > 0 ? true : false,"enfants$collection2") - ."\n
      \n" + + $retour = $pagination . $retour . $pagination; + + if (!$retour) { + return ''; + } + + return debut_block_depliable($debut > 0 ? true : false, "enfants$collection2") + . "\n
        \n" . $retour - . "
      \n".fin_block()."\n\n"; + . "
    \n" . fin_block() . "\n\n"; } /** * Affiche la liste des rubriques enfants d'une rubrique * (Utilisé dans les pages du privé notamment ?exec=rubriques) - * + * * Si plus de 500 rubriques enfants, on pagine par 500 les résultats - * + * * @param int $id_rubrique - * L'identifiant numérique de la rubrique parente (0 par défaut, la racine) + * L'identifiant numérique de la rubrique parente (0 par défaut, la racine) * @return string $res - * Le contenu textuel affiché, la liste des sous rubriques + * Le contenu textuel affiché, la liste des sous rubriques */ -function afficher_enfant_rub($id_rubrique=0) { +function afficher_enfant_rub($id_rubrique = 0) { $pagination = ''; $debut = 0; $limite = 500; - $nb = sql_countsel('spip_rubriques',"id_parent=$id_rubrique"); - - if($nb > $limite){ - $debut = _request('debut_rubrique'.$collection2) ? _request('debut_rubrique'.$collection2) : $debut; + $nb = sql_countsel('spip_rubriques', 'id_parent='.intval($id_rubrique)); + + if ($nb > $limite) { + $debut = _request('debut_rubrique' . $id_rubrique) ? _request('debut_rubrique' . $id_rubrique) : $debut; $pagination = chercher_filtre('pagination'); - $pagination = '

    '.$pagination($nb, '_rubrique'.$collection2, $debut, $limite, true, 'prive').'

    '; + $pagination = '

    ' . + $pagination($nb, '_rubrique' . $id_rubrique, $debut, $limite, true, 'prive') . + '

    '; } - $les_enfants = enfant_rub($id_rubrique,$debut,$limite); + $les_enfants = enfant_rub($id_rubrique, $debut, $limite); - if (!$n = count($les_enfants)) return ""; - - if ($n==1) { - $les_enfants=reset($les_enfants); - $les_enfants2=""; + if (!$n = count($les_enfants)) { + return ''; } - else{ - $n = ceil($n/2); - $les_enfants2 = implode('',array_slice($les_enfants,$n)); - $les_enfants = implode('',array_slice($les_enfants,0,$n)); + + if ($n == 1) { + $les_enfants = reset($les_enfants); + $les_enfants2 = ''; + } else { + $n = ceil($n / 2); + $les_enfants2 = implode('', array_slice($les_enfants, $n)); + $les_enfants = implode('', array_slice($les_enfants, 0, $n)); } - + $res = - $pagination - . "
    " - . $les_enfants - . "
    " - . "
    " - . $les_enfants2 - . "
    " - . $pagination; + $pagination + . "
    " + . $les_enfants + . '
    ' + . "
    " + . $les_enfants2 + . '
    ' + . $pagination; return $res; } - -?> diff --git a/www/ecrire/inc/puce_statut.php b/www/ecrire/inc/puce_statut.php index 23758675..cfe7df82 100644 --- a/www/ecrire/inc/puce_statut.php +++ b/www/ecrire/inc/puce_statut.php @@ -3,82 +3,127 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; -if (!defined('_ACTIVER_PUCE_RAPIDE')) +/** + * Gestion des puces de statut sur les objets + * ainsi que des puces de changement rapide de statut. + * + * @package SPIP\Core\PuceStatut + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +if (!defined('_ACTIVER_PUCE_RAPIDE')) { + /** + * Activer le changement rapide de statut sur les listes d'objets ? + * + * Peut ralentir un site sur des listes très longues. + * + * @var bool + **/ define('_ACTIVER_PUCE_RAPIDE', true); +} /** * Afficher la puce statut d'un objet * + * Utilise une fonction spécifique pour un type d'objet si elle existe, tel que + * puce_statut_$type_dist(), sinon tente avec puce_statut_changement_rapide(). * - * http://doc.spip.org/@inc_puce_statut_dist + * @see puce_statut_changement_rapide() * * @param int $id_objet + * Identifiant de l'objet * @param string $statut + * Statut actuel de l'objet * @param int $id_parent + * Identifiant du parent * @param string $type + * Type d'objet * @param bool $ajax - * indique qu'il ne faut renvoyer que le coeur du menu car on est dans la requete ajax post changement rapide + * Indique s'il ne faut renvoyer que le coeur du menu car on est + * dans une requete ajax suite à un post de changement rapide * @param bool $menu_rapide + * Indique si l'on peut changer le statut, ou si on l'affiche simplement * @return string + * Code HTML de l'image de puce de statut à insérer (et du menu de changement si présent) */ -function inc_puce_statut_dist($id_objet, $statut, $id_parent, $type, $ajax=false, $menu_rapide=_ACTIVER_PUCE_RAPIDE) { +function inc_puce_statut_dist( + $id_objet, + $statut, + $id_parent, + $type, + $ajax = false, + $menu_rapide = _ACTIVER_PUCE_RAPIDE +) { static $f_puce_statut = array(); $type = objet_type($type); // cas prioritaire : fonction perso, qui permet aussi de gerer les cas historiques - if (!isset($f_puce_statut[$type]) OR is_null($f_puce_statut[$type])) - $f_puce_statut[$type] = charger_fonction($type,'puce_statut',true); - if ($f_puce_statut[$type]) + if (!isset($f_puce_statut[$type]) or is_null($f_puce_statut[$type])) { + $f_puce_statut[$type] = charger_fonction($type, 'puce_statut', true); + } + if ($f_puce_statut[$type]) { return $f_puce_statut[$type]($id_objet, $statut, $id_parent, $type, $ajax, $menu_rapide); + } // si statut_image trouve quelque chose (et '' est quelque chose) // composer une puce, avec si possible changement rapide - elseif(!is_null($puce=puce_statut_changement_rapide($id_objet,$statut,$id_parent,$type,$ajax,$menu_rapide))){ + elseif (!is_null($puce = puce_statut_changement_rapide($id_objet, $statut, $id_parent, $type, $ajax, $menu_rapide))) { return $puce; + } // sinon fausse puce avec le type de l'image + else { + return http_img_pack("$type-16.png", ''); } - - // sinon fausse puce avec le type de l'image - else - return http_img_pack("$type-16.png",''); } /** - * Recuperer l'image correspondant au statut, telle que declaree dans - * declarer_tables_objets_sql - * sous la forme - * array('imagepardefaut.png','statut1'=>'imagestatut1.png','statut2'=>imagestatut2.png' ...) - * mettre une chaine vide pour ne pas avoir d'image pour un statut particulier + * Récuperer l'image correspondant au statut pour un objet éditorial indiqué * - * si rien de declare et que le statut est dans les cas connus (prepa, prop, publie, refuse, poubelle) - * renvoyer l'image par defaut + * Retrouve l'image correspondant au statut, telle que declarée dans + * `declarer_tables_objets_sql` sous la forme : + * + * ``` + * array( + * 'imagepardefaut.png', + * 'statut1' => 'imagestatut1.png', + * 'statut2' => 'imagestatut2.png', + * ... + * ) + * ``` + * + * Mettre une chaine vide pour ne pas avoir d'image pour un statut particulier. + * + * Si rien n'est declaré et que le statut est dans un des cas connus habituels + * (prepa, prop, publie, refuse, poubelle), alors on renvoie l'image par défaut pour ce statut * * @param string $objet * @param string $statut - * @return string - * null si pas capable de determiner l'image + * @return string|null + * null si pas capable de déterminer l'image */ -function statut_image($objet,$statut){ +function statut_image($objet, $statut) { $src = null; $table = table_objet_sql($objet); $desc = lister_tables_objets_sql($table); - if (isset($desc['statut_images'])){ + if (isset($desc['statut_images'])) { // si une declaration statut_images // mais rien pour le statut demande, ne rien afficher $src = ''; - if (isset($desc['statut_images'][$statut])) + if (isset($desc['statut_images'][$statut])) { $src = $desc['statut_images'][$statut]; - // sinon image par defaut ? - elseif (isset($desc['statut_images'][0])) + } // sinon image par defaut ? + elseif (isset($desc['statut_images'][0])) { $src = $desc['statut_images'][0]; - } - else { + } + } else { switch ($statut) { case 'prepa': $src = 'puce-preparer-8.png'; @@ -98,37 +143,48 @@ function statut_image($objet,$statut){ break; } } + return $src; } /** - * Recuperer le titre correspondant au statut, tel que declaree dans - * declarer_tables_objets_sql - * sous la forme - * array('titre par defaut','statut1'=>'titre statut 1','statut2'=>'titre statut 2' ...) - * mettre une chaine vide pour ne pas avoir de titre pour un statut particulier + * Récupérer le titre correspondant au statut pour un objet éditorial indiqué * - * si rien de declare et que le statut est dans les cas connus (prepa, prop, publie, refuse, poubelle) - * renvoyer le texte par defaut + * Retrouve le titre correspondant au statut, tel qu'il a été declaré dans + * `declarer_tables_objets_sql` sous la forme : + * + * ``` + * array( + * 'titre par defaut', + * 'statut1' => 'titre statut 1', + * 'statut2' => 'titre statut 2', + * ... + * ) + * ``` + * + * Mettre une chaine vide pour ne pas avoir de titre pour un statut particulier. + * + * Si rien n'est declaré et que le statut est dans un des cas connus habituels + * (prepa, prop, publie, refuse, poubelle), alors on renvoie le texte par défaut pour ce statut * * @param string $objet * @param string $statut * @return string */ -function statut_titre($objet,$statut){ +function statut_titre($objet, $statut) { $titre = ''; $table = table_objet_sql($objet); $desc = lister_tables_objets_sql($table); - if (isset($desc['statut_titres'])){ + if (isset($desc['statut_titres'])) { // si une declaration statut_titres // mais rien pour le statut demande, ne rien afficher - if (isset($desc['statut_titres'][$statut])) + if (isset($desc['statut_titres'][$statut])) { $titre = $desc['statut_titres'][$statut]; - // sinon image par defaut ? - elseif (isset($desc['statut_titres'][0])) + } // sinon image par defaut ? + elseif (isset($desc['statut_titres'][0])) { $titre = $desc['statut_titres'][0]; - } - else { + } + } else { switch ($statut) { case 'prepa': $titre = 'texte_statut_en_cours_redaction'; @@ -148,7 +204,8 @@ function statut_titre($objet,$statut){ break; } } - return $titre?_T($titre):''; + + return $titre ? _T($titre) : ''; } @@ -167,17 +224,17 @@ function statut_titre($objet,$statut){ * @param string $statut * @return string */ -function statut_texte_instituer($objet,$statut){ +function statut_texte_instituer($objet, $statut) { $texte = ''; $table = table_objet_sql($objet); $desc = lister_tables_objets_sql($table); - if (isset($desc['statut_textes_instituer'])){ + if (isset($desc['statut_textes_instituer'])) { // si une declaration statut_titres // mais rien pour le statut demande, ne rien afficher - if (isset($desc['statut_textes_instituer'][$statut])) + if (isset($desc['statut_textes_instituer'][$statut])) { $texte = $desc['statut_textes_instituer'][$statut]; - } - else { + } + } else { switch ($statut) { case 'prepa': $texte = 'texte_statut_en_cours_redaction'; @@ -197,7 +254,8 @@ function statut_texte_instituer($objet,$statut){ break; } } - return $texte?_T($texte):''; + + return $texte ? _T($texte) : ''; } @@ -208,8 +266,6 @@ function statut_texte_instituer($objet,$statut){ * Hack de compatibilite: les appels directs ont un $type != 'auteur' * si l'auteur ne peut pas se connecter * - * http://doc.spip.org/@puce_statut_auteur_dist - * * @param int $id * @param string $statut * @param int $id_parent @@ -218,12 +274,16 @@ function statut_texte_instituer($objet,$statut){ * @param bool $menu_rapide * @return string */ -function puce_statut_auteur_dist($id, $statut, $id_parent, $type, $ajax='', $menu_rapide=_ACTIVER_PUCE_RAPIDE) { - $img = statut_image('auteur',$statut); - if (!$img) return ''; - $alt = statut_titre('auteur',$statut); +function puce_statut_auteur_dist($id, $statut, $id_parent, $type, $ajax = '', $menu_rapide = _ACTIVER_PUCE_RAPIDE) { + $img = statut_image('auteur', $statut); + if (!$img) { + return ''; + } + $alt = statut_titre('auteur', $statut); + + $fond = ''; + $titre = ''; - $fond = ''; $titre = ''; /* if ($type != 'auteur') { $img2 = chemin_image('del-16.png'); @@ -233,105 +293,144 @@ function puce_statut_auteur_dist($id, $statut, $id_parent, $type, $ajax='', $men else { } */ + return http_img_pack($img, $alt, $fond, $alt); } -// http://doc.spip.org/@puce_statut_rubrique_dist -function puce_statut_rubrique_dist($id, $statut, $id_rubrique, $type, $ajax='',$menu_rapide=_ACTIVER_PUCE_RAPIDE) { +function puce_statut_rubrique_dist($id, $statut, $id_rubrique, $type, $ajax = '', $menu_rapide = _ACTIVER_PUCE_RAPIDE) { return http_img_pack('rubrique-16.png', ''); } -// http://doc.spip.org/@puce_statut_article_dist -function puce_statut_changement_rapide($id, $statut, $id_rubrique, $type='article', $ajax = false, $menu_rapide=_ACTIVER_PUCE_RAPIDE) { +/** + * Retourne le contenu d'une puce avec changement de statut possible + * si on en a l'autorisation, sinon simplement l'image de la puce + * + * @param int $id + * Identifiant de l'objet + * @param string $statut + * Statut actuel de l'objet + * @param int $id_rubrique + * Identifiant du parent, une rubrique + * @param string $type + * Type d'objet + * @param bool $ajax + * Indique s'il ne faut renvoyer que le coeur du menu car on est + * dans une requete ajax suite à un post de changement rapide + * @param bool $menu_rapide + * Indique si l'on peut changer le statut, ou si on l'affiche simplement + * @return string + * Code HTML de l'image de puce de statut à insérer (et du menu de changement si présent) + **/ +function puce_statut_changement_rapide( + $id, + $statut, + $id_rubrique, + $type = 'article', + $ajax = false, + $menu_rapide = _ACTIVER_PUCE_RAPIDE +) { $src = statut_image($type, $statut); - if (!$src) + if (!$src) { return $src; + } if (!$id - OR !_SPIP_AJAX - OR !$menu_rapide) { - $ajax_node =''; - } - else + or !_SPIP_AJAX + or !$menu_rapide + ) { + $ajax_node = ''; + } else { $ajax_node = " class='imgstatut$type$id'"; + } $t = statut_titre($type, $statut); - $inser_puce = http_img_pack($src,$t,$ajax_node,$t); + $inser_puce = http_img_pack($src, $t, $ajax_node, $t); - if (!$ajax_node) + if (!$ajax_node) { return $inser_puce; + } $table = table_objet_sql($type); $desc = lister_tables_objets_sql($table); - if (!isset($desc['statut_textes_instituer'])) + if (!isset($desc['statut_textes_instituer'])) { return $inser_puce; - - include_spip('inc/autoriser'); + } + + if (!function_exists('autoriser')) { + include_spip('inc/autoriser'); + } + // cas ou l'on a un parent connu (devrait disparaitre au profit du second cas plus generique) - if ($id_rubrique){ - if (!autoriser('publierdans', 'rubrique', $id_rubrique)) + if ($id_rubrique) { + if (!autoriser('publierdans', 'rubrique', $id_rubrique)) { return $inser_puce; - } - // si pas d'id_rubrique fourni, tester directement instituer type avec le statut publie + } + } // si pas d'id_rubrique fourni, tester directement instituer type avec le statut publie else { - if (!autoriser('instituer', $type, $id, null, array('statut'=>'publie'))) + if (!autoriser('instituer', $type, $id, null, array('statut' => 'publie'))) { return $inser_puce; + } } $coord = array_flip(array_keys($desc['statut_textes_instituer'])); - if (!isset($coord[$statut])) + if (!isset($coord[$statut])) { return $inser_puce; + } - $unit = 8/*widh de img*/+4/*padding*/; + $unit = 8/*widh de img*/ + 4/*padding*/ + ; $margin = 4; /* marge a gauche + droite */ - $zero = 1 /*border*/ + $margin/2 + 2 /*padding*/; - $clip = $zero+ ($unit*$coord[$statut]); + $zero = 1 /*border*/ + $margin / 2 + 2 /*padding*/ + ; + $clip = $zero + ($unit * $coord[$statut]); - if ($ajax){ - $width = $unit*count($desc['statut_textes_instituer'])+$margin; + if ($ajax) { + $width = $unit * count($desc['statut_textes_instituer']) + $margin; $out = "" - . $inser_puce - . "" - . ""; - $i=0; - foreach($desc['statut_textes_instituer'] as $s=>$t){ - $out .= afficher_script_statut($id, $type, -$zero-$i++*$unit, statut_image($type,$s), $s, _T($t)); + . $inser_puce + . "" + . ""; + $i = 0; + foreach ($desc['statut_textes_instituer'] as $s => $t) { + $out .= afficher_script_statut($id, $type, -$zero - $i++ * $unit, statut_image($type, $s), $s, _T($t)); } $out .= ""; + return $out; - } - else { + } else { $nom = "puce_statut_"; - $action = generer_url_ecrire('puce_statut',"",true); - $action = "if (!this.puce_loaded) { this.puce_loaded = true; prepare_selec_statut(this, '$nom', '$type', '$id', '$action'); }"; - $over = " onmouseover=\"$action\""; + $action = generer_url_ecrire('puce_statut', "", true); + $action = "if (!this.puce_loaded) { this.puce_loaded = true; prepare_selec_statut(this, '$nom', '$type', '$id', '$action'); }"; + $over = " onmouseover=\"$action\""; $lang_dir = lang_dir(lang_typo()); - return "" + + return "" . $inser_puce . ''; } } -// http://doc.spip.org/@afficher_script_statut -function afficher_script_statut($id, $type, $n, $img, $statut, $titre, $act='') { - $h = generer_action_auteur("instituer_objet","$type-$id-$statut"); + +function afficher_script_statut($id, $type, $n, $img, $statut, $titre, $act = '') { + $h = generer_action_auteur("instituer_objet", "$type-$id-$statut"); $h = "selec_statut('$id', '$type', $n, jQuery('img',this).attr('src'), '$h');return false;"; $t = supprimer_tags($titre); - return "".http_img_pack($img,$t).""; + + return "" . http_img_pack($img, $t) . ""; } // compat // La couleur du statut -// http://doc.spip.org/@puce_statut -function puce_statut($statut, $atts='') { - $src = statut_image('article',$statut); - if (!$src) return ''; - return http_img_pack($src, statut_titre('article',$statut), $atts); -} +function puce_statut($statut, $atts = '') { + $src = statut_image('article', $statut); + if (!$src) { + return ''; + } -?> + return http_img_pack($src, statut_titre('article', $statut), $atts); +} diff --git a/www/ecrire/inc/queue.php b/www/ecrire/inc/queue.php index 9df13404..c08348e3 100644 --- a/www/ecrire/inc/queue.php +++ b/www/ecrire/inc/queue.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -13,19 +13,21 @@ /** * Gestion des queues de travaux * - * @package SPIP\Queue -**/ -if (!defined("_ECRIRE_INC_VERSION")) return; + * @package SPIP\Core\Queue + **/ +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} -define('_JQ_SCHEDULED',1); -define('_JQ_PENDING',0); +define('_JQ_SCHEDULED', 1); +define('_JQ_PENDING', 0); #define('_JQ_MAX_JOBS_EXECUTE',200); // pour personaliser le nombre de jobs traitables a chaque hit #define('_JQ_MAX_JOBS_TIME_TO_EXECUTE',15); // pour personaliser le temps d'excution dispo a chaque hit #define('_JQ_NB_JOBS_OVERFLOW',10000); // nombre de jobs a partir duquel on force le traitement en fin de hit pour purger /** * Ajouter une tâche à la file - * + * * Les tâches sont ensuites exécutées par date programmée croissant/priorité décroissante * * @param $function @@ -39,65 +41,77 @@ define('_JQ_PENDING',0); * @param $no_duplicate * If TRUE, do not add the job to the queue if one with the same function and * arguments already exists. - * If 'function_only' test of existence is only on function name (for cron job) + * If 'function_only' test of existence is only on function name (for cron job) * @param $time - * time for starting the job. If 0, job will start as soon as possible + * time for starting the job. If 0, job will start as soon as possible * @param $priority - * -10 (low priority) to +10 (high priority), 0 is the default + * -10 (low priority) to +10 (high priority), 0 is the default * @return int - * id of job + * id of job */ -function queue_add_job($function, $description, $arguments = array(), $file = '', $no_duplicate = false, $time=0, $priority=0){ +function queue_add_job( + $function, + $description, + $arguments = array(), + $file = '', + $no_duplicate = false, + $time = 0, + $priority = 0 +) { include_spip('base/abstract_sql'); // cas pourri de ecrire/action/editer_site avec l'option reload=oui - if (defined('_GENIE_SYNDIC_NOW')) + if (defined('_GENIE_SYNDIC_NOW')) { $arguments['id_syndic'] = _GENIE_SYNDIC_NOW; + } // serialiser les arguments $arguments = serialize($arguments); $md5args = md5($arguments); // si pas de date programee, des que possible - $duplicate_where = 'status='.intval(_JQ_SCHEDULED).' AND '; - if (!$time){ + $duplicate_where = 'status=' . intval(_JQ_SCHEDULED) . ' AND '; + if (!$time) { $time = time(); $duplicate_where = ""; // ne pas dupliquer si deja le meme job en cours d'execution } - $date = date('Y-m-d H:i:s',$time); + $date = date('Y-m-d H:i:s', $time); $set_job = array( - 'fonction'=>$function, - 'descriptif'=>$description, - 'args'=>$arguments, - 'md5args'=>$md5args, - 'inclure'=>$file, - 'priorite'=>max(-10,min(10,intval($priority))), - 'date'=>$date, - 'status'=>_JQ_SCHEDULED, + 'fonction' => $function, + 'descriptif' => $description, + 'args' => $arguments, + 'md5args' => $md5args, + 'inclure' => $file, + 'priorite' => max(-10, min(10, intval($priority))), + 'date' => $date, + 'status' => _JQ_SCHEDULED, ); // si option ne pas dupliquer, regarder si la fonction existe deja // avec les memes args et file if ( - $no_duplicate - AND - $id_job = sql_getfetsel('id_job','spip_jobs', - $duplicate_where = - $duplicate_where . 'fonction='.sql_quote($function) - .(($no_duplicate==='function_only')?'': - ' AND md5args='.sql_quote($md5args).' AND inclure='.sql_quote($file))) - ) + $no_duplicate + and + $id_job = sql_getfetsel('id_job', 'spip_jobs', + $duplicate_where = + $duplicate_where . 'fonction=' . sql_quote($function) + . (($no_duplicate === 'function_only') ? '' : + ' AND md5args=' . sql_quote($md5args) . ' AND inclure=' . sql_quote($file))) + ) { return $id_job; + } - $id_job = sql_insertq('spip_jobs',$set_job); + $id_job = sql_insertq('spip_jobs', $set_job); // en cas de concurrence, deux process peuvent arriver jusqu'ici en parallele // avec le meme job unique a inserer. Dans ce cas, celui qui a eu l'id le plus grand // doit s'effacer if ( - $no_duplicate - AND - $id_prev = sql_getfetsel('id_job','spip_jobs',"id_job<".intval($id_job)." AND $duplicate_where")){ - sql_delete('spip_jobs','id_job='.intval($id_job)); + $no_duplicate + and + $id_prev = sql_getfetsel('id_job', 'spip_jobs', "id_job<" . intval($id_job) . " AND $duplicate_where") + ) { + sql_delete('spip_jobs', 'id_job=' . intval($id_job)); + return $id_prev; } @@ -107,21 +121,22 @@ function queue_add_job($function, $description, $arguments = array(), $file = '' // une option de debug pour verifier que les arguments en base sont bons // ie cas d'un char non acceptables sur certains type de champs // qui coupe la valeur - if (defined('_JQ_INSERT_CHECK_ARGS') AND $id_job) { - $args = sql_getfetsel('args', 'spip_jobs', 'id_job='.intval($id_job)); - if ($args!==$arguments) { - spip_log('arguments job errones / longueur '.strlen($args)." vs ".strlen($arguments).' / valeur : '.var_export($arguments,true),'queue'); + if (defined('_JQ_INSERT_CHECK_ARGS') and $id_job) { + $args = sql_getfetsel('args', 'spip_jobs', 'id_job=' . intval($id_job)); + if ($args !== $arguments) { + spip_log('arguments job errones / longueur ' . strlen($args) . " vs " . strlen($arguments) . ' / valeur : ' . var_export($arguments, + true), 'queue'); } } - if ($id_job){ + if ($id_job) { queue_update_next_job_time($time); } // si la mise en file d'attente du job echoue, // il ne faut pas perdre l'execution de la fonction // on la lance immediatement, c'est un fallback // sauf en cas d'upgrade necessaire (table spip_jobs inexistante) - elseif($GLOBALS['meta']['version_installee']==$GLOBALS['spip_version_base']) { + elseif ($GLOBALS['meta']['version_installee'] == $GLOBALS['spip_version_base']) { $set_job['id_job'] = 0; queue_start_job($set_job); } @@ -130,39 +145,42 @@ function queue_add_job($function, $description, $arguments = array(), $file = '' } /** - * Purger la file de tâche et reprgrammer les tâches périodiques - * + * Purger la file de tâche et reprogrammer les tâches périodiques + * * @return void */ -function queue_purger(){ +function queue_purger() { include_spip('base/abstract_sql'); sql_delete('spip_jobs'); - sql_delete("spip_jobs_liens","id_job NOT IN (".sql_get_select("id_job","spip_jobs").")"); - include_spip('inc/genie'); - genie_queue_watch_dist(); + sql_delete("spip_jobs_liens", "id_job NOT IN (" . sql_get_select("id_job", "spip_jobs") . ")"); + include_spip('inc/genie'); + genie_queue_watch_dist(); } /** * Retirer une tache de la file d'attente + * * @param int $id_job * id de la tache a retirer * @return bool */ -function queue_remove_job($id_job){ +function queue_remove_job($id_job) { include_spip('base/abstract_sql'); - if ($row = sql_fetsel('fonction,inclure,date','spip_jobs','id_job='.intval($id_job)) - AND $res = sql_delete('spip_jobs','id_job='.intval($id_job))){ + if ($row = sql_fetsel('fonction,inclure,date', 'spip_jobs', 'id_job=' . intval($id_job)) + and $res = sql_delete('spip_jobs', 'id_job=' . intval($id_job)) + ) { queue_unlink_job($id_job); // est-ce une tache cron qu'il faut relancer ? - if ($periode = queue_is_cron_job($row['fonction'],$row['inclure'])){ + if ($periode = queue_is_cron_job($row['fonction'], $row['inclure'])) { // relancer avec les nouveaux arguments de temps include_spip('inc/genie'); // relancer avec la periode prevue - queue_genie_replan_job($row['fonction'],$periode,strtotime($row['date'])); + queue_genie_replan_job($row['fonction'], $periode, strtotime($row['date'])); } queue_update_next_job_time(); } + return $res; } @@ -170,23 +188,23 @@ function queue_remove_job($id_job){ * Associer une tache avec un objet * * @param int $id_job - * id of job to link + * id de la tache a lier * @param array $objets - * can be a simple array('objet'=>'article','id_objet'=>23) - * or an array of simple array to link multiples objet in one time + * peut être un simple tableau array('objet'=>'article','id_objet'=>23) + * ou un tableau composé de tableaux simples pour lieur plusieurs objets en une fois */ -function queue_link_job($id_job,$objets){ +function queue_link_job($id_job, $objets) { include_spip('base/abstract_sql'); - if (is_array($objets) AND count($objets)){ - if (is_array(reset($objets))){ - foreach($objets as $k=>$o){ + if (is_array($objets) and count($objets)) { + if (is_array(reset($objets))) { + foreach ($objets as $k => $o) { $objets[$k]['id_job'] = $id_job; } - sql_insertq_multi('spip_jobs_liens',$objets); + sql_insertq_multi('spip_jobs_liens', $objets); + } else { + sql_insertq('spip_jobs_liens', array_merge(array('id_job' => $id_job), $objets)); } - else - sql_insertq('spip_jobs_liens',array_merge(array('id_job'=>$id_job),$objets)); } } @@ -194,137 +212,180 @@ function queue_link_job($id_job,$objets){ * Dissocier une tache d'un objet * * @param int $id_job - * id of job to unlink ibject with + * id de la tache à dissocier * @return int/bool - * result of sql_delete + * resultat du sql_delete */ -function queue_unlink_job($id_job){ - return sql_delete("spip_jobs_liens","id_job=".intval($id_job)); +function queue_unlink_job($id_job) { + return sql_delete("spip_jobs_liens", "id_job=" . intval($id_job)); } /** * Lancer une tache decrite par sa ligne SQL + * * @param array $row - * describe the job, with field of table spip_jobs + * describe the job, with field of table spip_jobs * @return mixed - * return the result of job + * return the result of job */ -function queue_start_job($row){ +function queue_start_job($row) { // deserialiser les arguments $args = unserialize($row['args']); - if ($args===false){ - spip_log('arguments job errones '.var_export($row,true),'queue'); + if ($args === false) { + spip_log('arguments job errones ' . var_export($row, true), 'queue'); $args = array(); } $fonction = $row['fonction']; - if (strlen($inclure = trim($row['inclure']))){ - if (substr($inclure,-1)=='/'){ // c'est un chemin pour charger_fonction - $f = charger_fonction($fonction,rtrim($inclure,'/'),false); - if ($f) + if (strlen($inclure = trim($row['inclure']))) { + if (substr($inclure, -1) == '/') { // c'est un chemin pour charger_fonction + $f = charger_fonction($fonction, rtrim($inclure, '/'), false); + if ($f) { $fonction = $f; - } - else + } + } else { include_spip($inclure); + } } - if (!function_exists($fonction)){ - spip_log("fonction $fonction ($inclure) inexistante ".var_export($row,true),'queue'); + if (!function_exists($fonction)) { + spip_log("fonction $fonction ($inclure) inexistante " . var_export($row, true), 'queue'); + return false; } - spip_log("queue [".$row['id_job']."]: $fonction() start", 'queue'); + spip_log("queue [" . $row['id_job'] . "]: $fonction() start", 'queue'); switch (count($args)) { - case 0: $res = $fonction(); break; - case 1: $res = $fonction($args[0]); break; - case 2: $res = $fonction($args[0],$args[1]); break; - case 3: $res = $fonction($args[0],$args[1], $args[2]); break; - case 4: $res = $fonction($args[0],$args[1], $args[2], $args[3]); break; - case 5: $res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4]); break; - case 6: $res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5]); break; - case 7: $res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5], $args[6]); break; - case 8: $res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7]); break; - case 9: $res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7], $args[8]); break; - case 10:$res = $fonction($args[0],$args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7], $args[8], $args[9]); break; + case 0: + $res = $fonction(); + break; + case 1: + $res = $fonction($args[0]); + break; + case 2: + $res = $fonction($args[0], $args[1]); + break; + case 3: + $res = $fonction($args[0], $args[1], $args[2]); + break; + case 4: + $res = $fonction($args[0], $args[1], $args[2], $args[3]); + break; + case 5: + $res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4]); + break; + case 6: + $res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4], $args[5]); + break; + case 7: + $res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6]); + break; + case 8: + $res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7]); + break; + case 9: + $res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7], $args[8]); + break; + case 10: + $res = $fonction($args[0], $args[1], $args[2], $args[3], $args[4], $args[5], $args[6], $args[7], $args[8], + $args[9]); + break; default: # plus lent mais completement generique $res = call_user_func_array($fonction, $args); } - spip_log("queue [".$row['id_job']."]: $fonction() end", 'queue'); + spip_log("queue [" . $row['id_job'] . "]: $fonction() end", 'queue'); + return $res; } /** - * Scheduler : - * Prend une par une les taches en attente - * et les lance, dans la limite d'un temps disponible total - * et d'un nombre maxi de taches + * Exécute les prochaînes tâches cron et replanifie les suivantes * - * La date de la prochaine tache a executer est mise a jour - * apres chaque chaque tache finie - * afin de relancer le scheduler uniquement quand c'est necessaire + * Prend une par une les tâches en attente et les lance, dans la limite + * d'un temps disponible total et d'un nombre maxi de tâches + * + * La date de la prochaine tâche à exécuter est mise à jour + * après chaque chaque tâche finie afin de relancer le scheduler uniquement + * quand c'est nécessaire + * + * @uses queue_sleep_time_to_next_job() + * @uses queue_error_handler() Pour capturer les erreurs en fin de hit + * @uses queue_start_job() + * @uses queue_close_job() + * @uses queue_update_next_job_time() * * @param array $force_jobs - * list of id_job to execute when provided - * @return null|false + * list of id_job to execute when provided + * @return null|bool + * - null : pas de tâche à réaliser maintenant + * - false : pas de connexion SQL + * - true : une planification a été faite. */ -function queue_schedule($force_jobs = null){ +function queue_schedule($force_jobs = null) { $time = time(); if (defined('_DEBUG_BLOCK_QUEUE')) { - spip_log("_DEBUG_BLOCK_QUEUE : schedule stop",'jq'._LOG_DEBUG); + spip_log("_DEBUG_BLOCK_QUEUE : schedule stop", 'jq' . _LOG_DEBUG); + return; } // rien a faire si le prochain job est encore dans le futur - if (queue_sleep_time_to_next_job()>0 AND (!$force_jobs OR !count($force_jobs))){ - spip_log("queue_sleep_time_to_next_job",'jq'._LOG_DEBUG); + if (queue_sleep_time_to_next_job() > 0 and (!$force_jobs or !count($force_jobs))) { + spip_log("queue_sleep_time_to_next_job", 'jq' . _LOG_DEBUG); + return; } include_spip('base/abstract_sql'); // on ne peut rien faire si pas de connexion SQL - if (!spip_connect()) return false; + if (!spip_connect()) { + return false; + } - if (!defined('_JQ_MAX_JOBS_TIME_TO_EXECUTE')){ - $max_time = ini_get('max_execution_time')/2; + if (!defined('_JQ_MAX_JOBS_TIME_TO_EXECUTE')) { + $max_time = ini_get('max_execution_time') / 2; // valeur conservatrice si on a pas reussi a lire le max_execution_time - if (!$max_time) $max_time=5; - define('_JQ_MAX_JOBS_TIME_TO_EXECUTE',min($max_time,15)); // une valeur maxi en temps. + if (!$max_time) { + $max_time = 5; + } + define('_JQ_MAX_JOBS_TIME_TO_EXECUTE', min($max_time, 15)); // une valeur maxi en temps. } $end_time = $time + _JQ_MAX_JOBS_TIME_TO_EXECUTE; - spip_log("JQ schedule $time / $end_time",'jq'._LOG_DEBUG); + spip_log("JQ schedule $time / $end_time", 'jq' . _LOG_DEBUG); - if (!defined('_JQ_MAX_JOBS_EXECUTE')) - define('_JQ_MAX_JOBS_EXECUTE',200); - $nbj=0; + if (!defined('_JQ_MAX_JOBS_EXECUTE')) { + define('_JQ_MAX_JOBS_EXECUTE', 200); + } + $nbj = 0; // attraper les jobs // dont la date est passee (echus en attente), - // par odre : + // par ordre : // - de priorite // - de date // lorsqu'un job cron n'a pas fini, sa priorite est descendue // pour qu'il ne bloque pas les autres jobs en attente - if (is_array($force_jobs) AND count($force_jobs)) - $cond = "status=".intval(_JQ_SCHEDULED)." AND ".sql_in("id_job", $force_jobs); - else { - $now = date('Y-m-d H:i:s',$time); - $cond = "status=".intval(_JQ_SCHEDULED)." AND date<=".sql_quote($now); + if (is_array($force_jobs) and count($force_jobs)) { + $cond = "status=" . intval(_JQ_SCHEDULED) . " AND " . sql_in("id_job", $force_jobs); + } else { + $now = date('Y-m-d H:i:s', $time); + $cond = "status=" . intval(_JQ_SCHEDULED) . " AND date<=" . sql_quote($now); } register_shutdown_function('queue_error_handler'); // recuperer les erreurs auant que possible - $res = sql_allfetsel('*','spip_jobs',$cond,'','priorite DESC,date','0,'.(_JQ_MAX_JOBS_EXECUTE+1)); + $res = sql_allfetsel('*', 'spip_jobs', $cond, '', 'priorite DESC,date', '0,' . (_JQ_MAX_JOBS_EXECUTE + 1)); do { - if ($row = array_shift($res)){ + if ($row = array_shift($res)) { $nbj++; // il faut un verrou, a base de sql_delete - if (sql_delete('spip_jobs',"id_job=".intval($row['id_job'])." AND status=".intval(_JQ_SCHEDULED))){ + if (sql_delete('spip_jobs', "id_job=" . intval($row['id_job']) . " AND status=" . intval(_JQ_SCHEDULED))) { #spip_log("JQ schedule job ".$nbj." OK",'jq'); // on reinsert dans la base aussitot avec un status=_JQ_PENDING $row['status'] = _JQ_PENDING; - $row['date'] = date('Y-m-d H:i:s',$time); + $row['date'] = date('Y-m-d H:i:s', $time); sql_insertq('spip_jobs', $row); // on a la main sur le job : @@ -335,53 +396,60 @@ function queue_schedule($force_jobs = null){ queue_close_job($row, $time, $result); } } - spip_log("JQ schedule job end time ".$time,'jq'._LOG_DEBUG); - } while ($nbj<_JQ_MAX_JOBS_EXECUTE AND $row AND $time<$end_time); - spip_log("JQ schedule end time ".time(),'jq'._LOG_DEBUG); + spip_log("JQ schedule job end time " . $time, 'jq' . _LOG_DEBUG); + } while ($nbj < _JQ_MAX_JOBS_EXECUTE and $row and $time < $end_time); + spip_log("JQ schedule end time " . time(), 'jq' . _LOG_DEBUG); - if ($row = array_shift($res)){ + if ($row = array_shift($res)) { queue_update_next_job_time(0); // on sait qu'il y a encore des jobs a lancer ASAP - spip_log("JQ encore !",'jq'._LOG_DEBUG); - } - else + spip_log("JQ encore !", 'jq' . _LOG_DEBUG); + } else { queue_update_next_job_time(); + } return true; } /** - * Terminer un job au status _JQ_PENDING : + * Terminer un job au status _JQ_PENDING + * * - le reprogrammer si c'est un cron * - supprimer ses liens * - le detruire en dernier * + * @uses queue_is_cron_job() + * @uses queue_genie_replan_job() + * * @param array $row * @param int $time * @param int $result */ -function queue_close_job(&$row,$time,$result=0){ +function queue_close_job(&$row, $time, $result = 0) { // est-ce une tache cron qu'il faut relancer ? - if ($periode = queue_is_cron_job($row['fonction'],$row['inclure'])){ + if ($periode = queue_is_cron_job($row['fonction'], $row['inclure'])) { // relancer avec les nouveaux arguments de temps include_spip('inc/genie'); - if ($result<0) - // relancer tout de suite, mais en baissant la priorite - queue_genie_replan_job($row['fonction'],$periode,0-$result,null,$row['priorite']-1); - else - // relancer avec la periode prevue - queue_genie_replan_job($row['fonction'],$periode,$time); + if ($result < 0) // relancer tout de suite, mais en baissant la priorite + { + queue_genie_replan_job($row['fonction'], $periode, 0 - $result, null, $row['priorite'] - 1); + } else // relancer avec la periode prevue + { + queue_genie_replan_job($row['fonction'], $periode, $time); + } } // purger ses liens eventuels avec des objets - sql_delete("spip_jobs_liens","id_job=".intval($row['id_job'])); + sql_delete("spip_jobs_liens", "id_job=" . intval($row['id_job'])); // supprimer le job fini - sql_delete('spip_jobs','id_job='.intval($row['id_job'])); + sql_delete('spip_jobs', 'id_job=' . intval($row['id_job'])); } /** - * Recuperer des erreurs auant que possible + * Récuperer des erreurs autant que possible * en terminant la gestion de la queue + * + * @uses queue_update_next_job_time() */ -function queue_error_handler(){ +function queue_error_handler() { // se remettre dans le bon dossier, car Apache le change parfois (toujours?) chdir(_ROOT_CWD); @@ -390,22 +458,29 @@ function queue_error_handler(){ /** - * Tester si une tache etait une tache periodique a reprogrammer + * Tester si une tâche était une tâche périodique à reprogrammer * - * @param $function - * @param $inclure - * @return + * @uses taches_generales() + * + * @param string $function + * Nom de la fonction de tâche + * @param string $inclure + * Nom de l'inclusion contenant la fonction + * @return bool|int + * Périodicité de la tâche en secondes, si tâche périodique, sinon false. */ -function queue_is_cron_job($function,$inclure){ +function queue_is_cron_job($function, $inclure) { static $taches = null; - if (strncmp($inclure,'genie/',6)==0){ - if (is_null($taches)){ + if (strncmp($inclure, 'genie/', 6) == 0) { + if (is_null($taches)) { include_spip('inc/genie'); $taches = taches_generales(); } - if (isset($taches[$function])) + if (isset($taches[$function])) { return $taches[$function]; + } } + return false; } @@ -417,15 +492,17 @@ function queue_is_cron_job($function,$inclure){ * ou cas $next_time=0 car l'on sait qu'il faut revenir ASAP) * * @param int $next_time - * temps de la tache ajoutee ou 0 pour ASAP + * temps de la tache ajoutee ou 0 pour ASAP */ -function queue_update_next_job_time($next_time=null){ +function queue_update_next_job_time($next_time = null) { static $nb_jobs_scheduled = null; static $deja_la = false; // prendre le min des $next_time que l'on voit passer ici, en cas de reentrance static $next = null; // queue_close_job peut etre reentrant ici - if ($deja_la) return; + if ($deja_la) { + return; + } $deja_la = true; include_spip('base/abstract_sql'); @@ -433,32 +510,38 @@ function queue_update_next_job_time($next_time=null){ // traiter les jobs morts au combat (_JQ_PENDING depuis plus de 180s) // pour cause de timeout ou autre erreur fatale - $res = sql_allfetsel("*","spip_jobs","status=".intval(_JQ_PENDING)." AND date<".sql_quote(date('Y-m-d H:i:s',$time-180))); + $res = sql_allfetsel("*", "spip_jobs", + "status=" . intval(_JQ_PENDING) . " AND date<" . sql_quote(date('Y-m-d H:i:s', $time - 180))); if (is_array($res)) { - foreach ($res as $row) - queue_close_job($row,$time); + foreach ($res as $row) { + queue_close_job($row, $time); + } } // chercher la date du prochain job si pas connu - if (is_null($next) OR is_null(queue_sleep_time_to_next_job())){ - $date = sql_getfetsel('date','spip_jobs',"status=".intval(_JQ_SCHEDULED),'','date','0,1'); + if (is_null($next) or is_null(queue_sleep_time_to_next_job())) { + $date = sql_getfetsel('date', 'spip_jobs', "status=" . intval(_JQ_SCHEDULED), '', 'date', '0,1'); $next = strtotime($date); } - if (!is_null($next_time)){ - if (is_null($next) OR $next>$next_time) + if (!is_null($next_time)) { + if (is_null($next) or $next > $next_time) { $next = $next_time; + } } - if ($next){ - if (is_null($nb_jobs_scheduled)) - $nb_jobs_scheduled = sql_countsel('spip_jobs',"status=".intval(_JQ_SCHEDULED)." AND date<".sql_quote(date('Y-m-d H:i:s',$time))); - elseif ($next<=$time) - $nb_jobs_scheduled++; - // si trop de jobs en attente, on force la purge en fin de hit - // pour assurer le coup - if ($nb_jobs_scheduled>defined('_JQ_NB_JOBS_OVERFLOW')?_JQ_NB_JOBS_OVERFLOW:10000) - define('_DIRECT_CRON_FORCE',true); + if ($next) { + if (is_null($nb_jobs_scheduled)) { + $nb_jobs_scheduled = sql_countsel('spip_jobs', + "status=" . intval(_JQ_SCHEDULED) . " AND date<" . sql_quote(date('Y-m-d H:i:s', $time))); + } elseif ($next <= $time) { + $nb_jobs_scheduled++; + } + // si trop de jobs en attente, on force la purge en fin de hit + // pour assurer le coup + if ($nb_jobs_scheduled > (defined('_JQ_NB_JOBS_OVERFLOW') ? _JQ_NB_JOBS_OVERFLOW : 10000)) { + define('_DIRECT_CRON_FORCE', true); } + } queue_set_next_job_time($next); $deja_la = false; @@ -467,6 +550,7 @@ function queue_update_next_job_time($next_time=null){ /** * Mettre a jour la date de prochain job + * * @param int $next */ function queue_set_next_job_time($next) { @@ -477,16 +561,15 @@ function queue_set_next_job_time($next) { // toujours relire la valeur pour comparer, pour tenir compte des maj concourrantes // et ne mettre a jour que si il y a un interet a le faire // permet ausis d'initialiser le nom de fichier a coup sur - $curr_next = $_SERVER['REQUEST_TIME'] + max(0,queue_sleep_time_to_next_job(true)); + $curr_next = $_SERVER['REQUEST_TIME'] + max(0, queue_sleep_time_to_next_job(true)); if ( - ($curr_next<=$time AND $next>$time) // le prochain job est dans le futur mais pas la date planifiee actuelle - OR $curr_next>$next // le prochain job est plus tot que la date planifiee actuelle - ) { - if (include_spip('inc/memoization') AND defined('_MEMOIZE_MEMORY') AND _MEMOIZE_MEMORY) { - cache_set(_JQ_NEXT_JOB_TIME_FILENAME,intval($next)); - } - else { - ecrire_fichier(_JQ_NEXT_JOB_TIME_FILENAME,intval($next)); + ($curr_next <= $time and $next > $time) // le prochain job est dans le futur mais pas la date planifiee actuelle + or $curr_next > $next // le prochain job est plus tot que la date planifiee actuelle + ) { + if (function_exists("cache_set") and defined('_MEMOIZE_MEMORY') and _MEMOIZE_MEMORY) { + cache_set(_JQ_NEXT_JOB_TIME_FILENAME, intval($next)); + } else { + ecrire_fichier(_JQ_NEXT_JOB_TIME_FILENAME, intval($next)); } queue_sleep_time_to_next_job($next); } @@ -496,43 +579,52 @@ function queue_set_next_job_time($next) { /** * Déclenche le cron en asynchrone ou retourne le code HTML pour le déclencher - * + * * Retourne le HTML à ajouter à la page pour declencher le cron * ou rien si on a réussi à le lancer en asynchrone. - * + * + * Un verrou (cron.lock) empêche l'exécution du cron plus d'une fois par seconde. + * + * @uses queue_sleep_time_to_next_job() + * @see action_cron() L'URL appelée pour déclencher le cron + * * @return string */ -function queue_affichage_cron(){ +function queue_affichage_cron() { $texte = ""; $time_to_next = queue_sleep_time_to_next_job(); // rien a faire si le prochain job est encore dans le futur - if ($time_to_next>0 OR defined('_DEBUG_BLOCK_QUEUE')) + if ($time_to_next > 0 or defined('_DEBUG_BLOCK_QUEUE')) { return $texte; + } // ne pas relancer si on vient de lancer dans la meme seconde par un hit concurent - if (file_exists($lock=_DIR_TMP."cron.lock") AND !(@filemtime($lock)<$_SERVER['REQUEST_TIME'])) + if (file_exists($lock = _DIR_TMP . "cron.lock") and !(@filemtime($lock) < $_SERVER['REQUEST_TIME'])) { return $texte; + } + @touch($lock); // il y a des taches en attentes // si depuis plus de 5min, on essaye de lancer le cron par tous les moyens pour rattraper le coup // on est sans doute sur un site qui n'autorise pas http sortant ou avec peu de trafic $urgent = false; - if ($time_to_next<-300) + if ($time_to_next < -300) { $urgent = true; + } - $url_cron = generer_url_action('cron','',false,true); + $url_cron = generer_url_action('cron', '', false, true); - if (!defined('_HTML_BG_CRON_FORCE') OR !_HTML_BG_CRON_FORCE){ + if (!defined('_HTML_BG_CRON_FORCE') or !_HTML_BG_CRON_FORCE) { // methode la plus rapide : // Si fsockopen est possible, on lance le cron via un socket en asynchrone // si fsockopen echoue (disponibilite serveur, firewall) on essaye pas cURL // car on a toutes les chances d'echouer pareil mais sans moyen de le savoir // on passe direct a la methode background-image - if(function_exists('fsockopen')){ - $parts=parse_url($url_cron); + if (function_exists('fsockopen')) { + $parts = parse_url($url_cron); switch ($parts['scheme']) { case 'https': @@ -544,36 +636,36 @@ function queue_affichage_cron(){ $scheme = ''; $port = 80; } - - $fp = @fsockopen($scheme.$parts['host'], - isset($parts['port'])?$parts['port']:$port, - $errno, $errstr, 1); + $fp = @fsockopen($scheme . $parts['host'], + isset($parts['port']) ? $parts['port'] : $port, + $errno, $errstr, 1); if ($fp) { $timeout = 200; // ms - stream_set_timeout($fp,0,$timeout * 1000); - $query = $parts['path'].($parts['query']?"?".$parts['query']:""); - $out = "GET ".$query." HTTP/1.1\r\n"; - $out.= "Host: ".$parts['host']."\r\n"; - $out.= "Connection: Close\r\n\r\n"; + stream_set_timeout($fp, 0, $timeout * 1000); + $query = $parts['path'] . ($parts['query'] ? "?" . $parts['query'] : ""); + $out = "GET " . $query . " HTTP/1.1\r\n"; + $out .= "Host: " . $parts['host'] . "\r\n"; + $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); spip_timer('read'); $t = 0; // on lit la reponse si possible pour fermer proprement la connexion // avec un timeout total de 200ms pour ne pas se bloquer - while (!feof($fp) AND $t<$timeout) { + while (!feof($fp) and $t < $timeout) { @fgets($fp, 1024); - $t += spip_timer('read',true); + $t += spip_timer('read', true); spip_timer('read'); } fclose($fp); - if (!$urgent) + if (!$urgent) { return $texte; + } } } // si fsockopen n'est pas dispo on essaye cURL : // lancer le cron par un cURL asynchrone si cURL est present - elseif (function_exists("curl_init")){ + elseif (function_exists("curl_init")) { //setting the curl parameters. $ch = curl_init($url_cron); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); @@ -585,20 +677,23 @@ function queue_affichage_cron(){ curl_exec($ch); // fermer curl_close($ch); - if (!$urgent) + if (!$urgent) { return $texte; + } } } // si deja force, on retourne sans rien - if (defined('_DIRECT_CRON_FORCE')) + if (defined('_DIRECT_CRON_FORCE')) { return $texte; + } // si c'est un bot // inutile de faire un appel par image background, // on force un appel direct en fin de hit - if ((defined('_IS_BOT') AND _IS_BOT)){ - define('_DIRECT_CRON_FORCE',true); + if ((defined('_IS_BOT') and _IS_BOT)) { + define('_DIRECT_CRON_FORCE', true); + return $texte; } @@ -609,4 +704,3 @@ function queue_affichage_cron(){ return $texte; } -?> diff --git a/www/ecrire/inc/recherche_to_array.php b/www/ecrire/inc/recherche_to_array.php index 3b26c3c0..9e37e63b 100644 --- a/www/ecrire/inc/recherche_to_array.php +++ b/www/ecrire/inc/recherche_to_array.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -11,7 +11,9 @@ \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} // methodes sql @@ -20,11 +22,11 @@ function inc_recherche_to_array_dist($recherche, $options = array()) { // options par defaut $options = array_merge( array( - 'score' => true, - 'champs' => false, - 'toutvoir' => false, - 'matches' => false, - 'jointures' => false + 'score' => true, + 'champs' => false, + 'toutvoir' => false, + 'matches' => false, + 'jointures' => false ), $options ); @@ -33,19 +35,19 @@ function inc_recherche_to_array_dist($recherche, $options = array()) { include_spip('inc/autoriser'); $requete = array( - "SELECT"=>array(), - "FROM"=>array(), - "WHERE"=>array(), - "GROUPBY"=>array(), - "ORDERBY"=>array(), - "LIMIT"=>"", - "HAVING"=>array() + "SELECT" => array(), + "FROM" => array(), + "WHERE" => array(), + "GROUPBY" => array(), + "ORDERBY" => array(), + "LIMIT" => "", + "HAVING" => array() ); $table = sinon($options['table'], 'article'); - if ($options['champs']) + if ($options['champs']) { $champs = $options['champs']; - else { + } else { $l = liste_des_champs(); $champs = $l['article']; } @@ -61,42 +63,46 @@ function inc_recherche_to_array_dist($recherche, $options = array()) { // c'est un pis-aller : ca a peu de chance de marcher, mais mieux quand meme que en conservant la ',' // (aka ca marche au moins dans certains cas comme avec spip_formulaires_reponses_champs) - if (strpos($_id_table,",")!==false){ - $_id_table = explode(',',$_id_table); + if (strpos($_id_table, ",") !== false) { + $_id_table = explode(',', $_id_table); $_id_table = reset($_id_table); } - $requete['SELECT'][] = "t.".$_id_table; + $requete['SELECT'][] = "t." . $_id_table; $a = array(); // Recherche fulltext foreach ($champs as $champ => $poids) { - if (is_array($champ)){ + if (is_array($champ)) { spip_log("requetes imbriquees interdites"); } else { - if (strpos($champ,".")===FALSE) + if (strpos($champ, ".") === false) { $champ = "t.$champ"; + } $requete['SELECT'][] = $champ; - $a[] = $champ.' '.$methode.' '.$q; + $a[] = $champ . ' ' . $methode . ' ' . $q; } } - if ($a) $requete['WHERE'][] = join(" OR ", $a); - $requete['FROM'][] = table_objet_sql($table).' AS t'; + if ($a) { + $requete['WHERE'][] = join(" OR ", $a); + } + $requete['FROM'][] = table_objet_sql($table) . ' AS t'; $results = array(); $s = sql_select( $requete['SELECT'], $requete['FROM'], $requete['WHERE'], - implode(" ",$requete['GROUPBY']), + implode(" ", $requete['GROUPBY']), $requete['ORDERBY'], $requete['LIMIT'], $requete['HAVING'], $serveur ); - while ($t = sql_fetch($s,$serveur) - AND (!isset($t['score']) OR $t['score']>0)) { + while ($t = sql_fetch($s, $serveur) + and (!isset($t['score']) or $t['score'] > 0)) { $id = intval($t[$_id_table]); if ($options['toutvoir'] - OR autoriser('voir', $table, $id)) { + or autoriser('voir', $table, $id) + ) { // indiquer les champs concernes $champs_vus = array(); $score = 0; @@ -104,41 +110,50 @@ function inc_recherche_to_array_dist($recherche, $options = array()) { $vu = false; foreach ($champs as $champ => $poids) { - $champ = explode('.',$champ); + $champ = explode('.', $champ); $champ = end($champ); // translitteration_rapide uniquement si on est deja en utf-8 - $value = ($GLOBALS['meta']['charset']=='utf-8' ? translitteration_rapide($t[$champ]) : translitteration($t[$champ])); + $value = ($GLOBALS['meta']['charset'] == 'utf-8' ? translitteration_rapide($t[$champ]) : translitteration($t[$champ])); if ($n = ($options['score'] || $options['matches']) - ? preg_match_all($preg, $value, $regs, PREG_SET_ORDER) - : preg_match($preg, $value) + ? preg_match_all($preg, $value, $regs, PREG_SET_ORDER) + : preg_match($preg, $value) ) { $vu = true; - if ($options['champs']) + if ($options['champs']) { $champs_vus[$champ] = $t[$champ]; - if ($options['score']) + } + if ($options['score']) { $score += $n * $poids; - if ($options['matches']) + } + if ($options['matches']) { $matches[$champ] = $regs; + } if (!$options['champs'] - AND !$options['score'] - AND !$options['matches']) + and !$options['score'] + and !$options['matches'] + ) { break; + } } } if ($vu) { - if (!isset($results)) + if (!isset($results)) { $results = array(); + } $results[$id] = array(); - if ($champs_vus) + if ($champs_vus) { $results[$id]['champs'] = $champs_vus; - if ($score) + } + if ($score) { $results[$id]['score'] = $score; - if ($matches) + } + if ($matches) { $results[$id]['matches'] = $matches; + } } } } @@ -148,76 +163,85 @@ function inc_recherche_to_array_dist($recherche, $options = array()) { // ici on est un peu naze : pas capables de reconstruire une jointure complexe // on ne sait passer que par table de laison en 1 coup if (isset($jointures[$table]) - AND $joints = recherche_en_base( + and $joints = recherche_en_base( $recherche, $jointures[$table], array_merge($options, array('jointures' => false)) ) ) { include_spip('action/editer_liens'); - $trouver_table = charger_fonction('trouver_table','base'); + $trouver_table = charger_fonction('trouver_table', 'base'); $cle_depart = id_table_objet($table); - $table_depart = table_objet($table,$serveur); - $desc_depart = $trouver_table($table_depart,$serveur); + $table_depart = table_objet($table, $serveur); + $desc_depart = $trouver_table($table_depart, $serveur); $depart_associable = objet_associable($table); foreach ($joints as $table_liee => $ids_trouves) { // on peut definir une fonction de recherche jointe pour regler les cas particuliers if ( - !( - $rechercher_joints = charger_fonction("rechercher_joints_${table}_${table_liee}","inc",true) - or $rechercher_joints = charger_fonction("rechercher_joints_objet_${table_liee}","inc",true) - or $rechercher_joints = charger_fonction("rechercher_joints_${table}_objet_lie","inc",true) - ) - ){ - $cle_arrivee = id_table_objet($table_liee); - $table_arrivee = table_objet($table_liee,$serveur); - $desc_arrivee = $trouver_table($table_arrivee,$serveur); + !( + $rechercher_joints = charger_fonction("rechercher_joints_${table}_${table_liee}", "inc", true) + or $rechercher_joints = charger_fonction("rechercher_joints_objet_${table_liee}", "inc", true) + or $rechercher_joints = charger_fonction("rechercher_joints_${table}_objet_lie", "inc", true) + ) + ) { + $cle_arrivee = id_table_objet($table_liee); + $table_arrivee = table_objet($table_liee, $serveur); + $desc_arrivee = $trouver_table($table_arrivee, $serveur); // cas simple : $cle_depart dans la table_liee - if (isset($desc_arrivee['field'][$cle_depart])){ - $s = sql_select("$cle_depart, $cle_arrivee", $desc_arrivee['table_sql'], sql_in($cle_arrivee, array_keys($ids_trouves)), '','','','',$serveur); - } - // cas simple : $cle_arrivee dans la table - elseif (isset($desc_depart['field'][$cle_arrivee])){ - $s = sql_select("$cle_depart, $cle_arrivee", $desc_depart['table_sql'], sql_in($cle_arrivee, array_keys($ids_trouves)), '','','','',$serveur); + if (isset($desc_arrivee['field'][$cle_depart])) { + $s = sql_select("$cle_depart, $cle_arrivee", $desc_arrivee['table_sql'], + sql_in($cle_arrivee, array_keys($ids_trouves)), '', '', '', '', $serveur); + } // cas simple : $cle_arrivee dans la table + elseif (isset($desc_depart['field'][$cle_arrivee])) { + $s = sql_select("$cle_depart, $cle_arrivee", $desc_depart['table_sql'], + sql_in($cle_arrivee, array_keys($ids_trouves)), '', '', '', '', $serveur); } // sinon cherchons une table de liaison // cas recherche principale article, objet lie document : passer par spip_documents_liens - elseif ($l = objet_associable($table_liee)){ + elseif ($l = objet_associable($table_liee)) { list($primary, $table_liens) = $l; - $s = sql_select("id_objet as $cle_depart, $primary as $cle_arrivee", $table_liens, array("objet='$table'",sql_in($primary, array_keys($ids_trouves))), '','','','',$serveur); - } - // cas recherche principale auteur, objet lie article: passer par spip_auteurs_liens - elseif ($l = $depart_associable){ + $s = sql_select("id_objet as $cle_depart, $primary as $cle_arrivee", $table_liens, + array("objet='$table'", sql_in($primary, array_keys($ids_trouves))), '', '', '', '', $serveur); + } // cas recherche principale auteur, objet lie article: passer par spip_auteurs_liens + elseif ($l = $depart_associable) { list($primary, $table_liens) = $l; - $s = sql_select("$primary as $cle_depart, id_objet as $cle_arrivee", $table_liens, array("objet='$table_liee'",sql_in('id_objet', array_keys($ids_trouves))), '','','','',$serveur); - } - // cas table de liaison generique spip_xxx_yyy - elseif($t=$trouver_table($table_arrivee."_".$table_depart,$serveur) - OR $t=$trouver_table($table_depart."_".$table_arrivee,$serveur)){ - $s = sql_select("$cle_depart,$cle_arrivee", $t["table_sql"], sql_in($cle_arrivee, array_keys($ids_trouves)), '','','','',$serveur); + $s = sql_select("$primary as $cle_depart, id_objet as $cle_arrivee", $table_liens, + array("objet='$table_liee'", sql_in('id_objet', array_keys($ids_trouves))), '', '', '', '', $serveur); + } // cas table de liaison generique spip_xxx_yyy + elseif ($t = $trouver_table($table_arrivee . "_" . $table_depart, $serveur) + or $t = $trouver_table($table_depart . "_" . $table_arrivee, $serveur) + ) { + $s = sql_select("$cle_depart,$cle_arrivee", $t["table_sql"], sql_in($cle_arrivee, array_keys($ids_trouves)), + '', '', '', '', $serveur); } + } else { + list($cle_depart, $cle_arrivee, $s) = $rechercher_joints($table, $table_liee, array_keys($ids_trouves), + $serveur); } - else - list($cle_depart,$cle_arrivee,$s) = $rechercher_joints($table,$table_liee,array_keys($ids_trouves), $serveur); - while ($t = is_array($s)?array_shift($s):sql_fetch($s)) { + while ($t = is_array($s) ? array_shift($s) : sql_fetch($s)) { $id = $t[$cle_depart]; $joint = $ids_trouves[$t[$cle_arrivee]]; - if (!isset($results)) + if (!isset($results)) { $results = array(); - if (!isset($results[$id])) + } + if (!isset($results[$id])) { $results[$id] = array(); + } if (isset($joint['score']) and $joint['score']) { + if (!isset($results[$id]['score'])) { + $results[$id]['score'] = 0; + } $results[$id]['score'] += $joint['score']; } if (isset($joint['champs']) and $joint['champs']) { - foreach($joint['champs'] as $c => $val) { - $results[$id]['champs'][$table_liee.'.'.$c] = $val; + foreach ($joint['champs'] as $c => $val) { + $results[$id]['champs'][$table_liee . '.' . $c] = $val; } } if (isset($joint['matches']) and $joint['matches']) { - foreach($joint['matches'] as $c => $val) { - $results[$id]['matches'][$table_liee.'.'.$c] = $val; + foreach ($joint['matches'] as $c => $val) { + $results[$id]['matches'][$table_liee . '.' . $c] = $val; } } } @@ -226,6 +250,3 @@ function inc_recherche_to_array_dist($recherche, $options = array()) { return $results; } - - -?> diff --git a/www/ecrire/inc/rechercher.php b/www/ecrire/inc/rechercher.php index f5ecc4b9..0cf04520 100644 --- a/www/ecrire/inc/rechercher.php +++ b/www/ecrire/inc/rechercher.php @@ -3,57 +3,75 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ +/** + * Gestion des recherches + * + * @package SPIP\Core\Recherche + **/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -// Donne la liste des champs/tables ou l'on sait chercher/remplacer -// avec un poids pour le score -// http://doc.spip.org/@liste_des_champs +/** + * Donne la liste des champs/tables où l'on sait chercher / remplacer + * avec un poids pour le score + * + * Utilise l'information `rechercher_champs` sur la déclaration + * des objets éditoriaux. + * + * @pipeline_appel rechercher_liste_des_champs + * @uses lister_tables_objets_sql() + * + * @return array Couples (type d'objet => Couples (champ => score)) + */ function liste_des_champs() { - static $liste=null; + static $liste = null; if (is_null($liste)) { $liste = array(); // recuperer les tables_objets_sql declarees include_spip('base/objets'); $tables_objets = lister_tables_objets_sql(); - foreach($tables_objets as $t=>$infos){ - if ($infos['rechercher_champs']){ + foreach ($tables_objets as $t => $infos) { + if ($infos['rechercher_champs']) { $liste[$infos['type']] = $infos['rechercher_champs']; } } // puis passer dans le pipeline $liste = pipeline('rechercher_liste_des_champs', $liste); } + return $liste; } // Recherche des auteurs et mots-cles associes // en ne regardant que le titre ou le nom -// http://doc.spip.org/@liste_des_jointures +// http://code.spip.net/@liste_des_jointures function liste_des_jointures() { - static $liste=null; + static $liste = null; if (is_null($liste)) { $liste = array(); // recuperer les tables_objets_sql declarees include_spip('base/objets'); $tables_objets = lister_tables_objets_sql(); - foreach($tables_objets as $t=>$infos){ - if ($infos['rechercher_jointures']){ + foreach ($tables_objets as $t => $infos) { + if ($infos['rechercher_jointures']) { $liste[$infos['type']] = $infos['rechercher_jointures']; } } // puis passer dans le pipeline $liste = pipeline('rechercher_liste_des_jointures', $liste); } + return $liste; } @@ -62,12 +80,14 @@ function expression_recherche($recherche, $options) { // (meme si utilisee dans plusieurs boucles) static $expression = array(); $key = serialize(array($recherche, $options['preg_flags'])); - if (isset($expression[$key])) + if (isset($expression[$key])) { return $expression[$key]; + } $u = $GLOBALS['meta']['pcre_u']; - if ($u AND strpos($options['preg_flags'],$u)===false) + if ($u and strpos($options['preg_flags'], $u) === false) { $options['preg_flags'] .= $u; + } include_spip('inc/charsets'); $recherche = trim($recherche); @@ -75,70 +95,90 @@ function expression_recherche($recherche, $options) { if (substr($recherche, 0, 1) == '/' and substr($recherche, -1, 1) == '/' and strlen($recherche) > 2) { // c'est une preg $recherche_trans = translitteration($recherche); - $preg = $recherche_trans.$options['preg_flags']; + $preg = $recherche_trans . $options['preg_flags']; $is_preg = true; - } - else{ - // s'il y a plusieurs mots il faut les chercher tous : oblige REGEXP + } else { + // s'il y a plusieurs mots il faut les chercher tous : oblige REGEXP, // sauf ceux de moins de 4 lettres (on supprime ainsi 'le', 'les', 'un', // 'une', 'des' ...) - if (preg_match(",\s+,".$u, $recherche)){ + + // attention : plusieurs mots entre guillemets sont a rechercher tels quels + $recherche_trans = $recherche_mod = $recherche; + + // les expressions entre " " sont un mot a chercher tel quel + // -> on remplace les espaces par un \x1 et on enleve les guillemets + if (preg_match(',["][^"]+["],Uims', $recherche_mod, $matches)) { + foreach ($matches as $match) { + $word = preg_replace(",\s+,Uims", "\x1", $match); + $word = trim($word, '"'); + $recherche_mod = str_replace($match, $word, $recherche_mod); + } + } + + if (preg_match(",\s+," . $u, $recherche_mod)) { $is_preg = true; + $recherche_inter = '|'; - $recherche_mots = explode(' ', $recherche); + $recherche_mots = explode(' ', $recherche_mod); $min_long = defined('_RECHERCHE_MIN_CAR') ? _RECHERCHE_MIN_CAR : 4; foreach ($recherche_mots as $mot) { if (strlen($mot) >= $min_long) { - $recherche_inter .= $mot.' '; + // echapper les caracteres de regexp qui sont eventuellement dans la recherche + $recherche_inter .= preg_quote($mot) . ' '; } } + $recherche_inter = str_replace("\x1", '\s', $recherche_inter); + // mais on cherche quand même l'expression complète, même si elle // comporte des mots de moins de quatre lettres - $recherche = rtrim($recherche.preg_replace(',\s+,'.$u, '|', $recherche_inter), '|'); + $recherche = rtrim(preg_quote($recherche) . preg_replace(',\s+,' . $u, '|', $recherche_inter), '|'); $recherche_trans = translitteration($recherche); } - $preg = '/'.str_replace('/', '\\/', $recherche_trans).'/' . $options['preg_flags']; + $preg = '/' . str_replace('/', '\\/', $recherche_trans) . '/' . $options['preg_flags']; } // Si la chaine est inactive, on va utiliser LIKE pour aller plus vite // ou si l'expression reguliere est invalide if (!$is_preg - OR (@preg_match($preg,'')===FALSE) ) { + or (@preg_match($preg, '') === false) + ) { $methode = 'LIKE'; $u = $GLOBALS['meta']['pcre_u']; + + // echapper les % et _ + $q = str_replace(array('%', '_'), array('\%', '\_'), trim($recherche)); + // eviter les parentheses et autres caractères qui interferent avec pcre par la suite (dans le preg_match_all) s'il y a des reponses - $recherche = str_replace( - array('(',')','?','[', ']', '+', '*', '/'), - array('\(','\)','[?]', '\[', '\]', '\+', '\*', '\/'), - $recherche); + $recherche = preg_quote($recherche, '/'); $recherche_trans = translitteration($recherche); $recherche_mod = $recherche_trans; - // echapper les % et _ - $q = str_replace(array('%','_'), array('\%', '\_'), trim($recherche)); // les expressions entre " " sont un mot a chercher tel quel // -> on remplace les espaces par un _ et on enleve les guillemets - if (preg_match(',["][^"]+["],Uims',$q,$matches)){ - foreach($matches as $match){ - // corriger le like dans le $q - $word = preg_replace(",\s+,Uims","_",$match); - $word = trim($word,'"'); - $q = str_replace($match,$word,$q); - // corriger la regexp - $word = preg_replace(",\s+,Uims","[\s]",$match); - $word = trim($word,'"'); - $recherche_mod = str_replace($match,$word,$recherche_mod); + // corriger le like dans le $q + if (preg_match(',["][^"]+["],Uims', $q, $matches)) { + foreach ($matches as $match) { + $word = preg_replace(",\s+,Uims", "_", $match); + $word = trim($word, '"'); + $q = str_replace($match, $word, $q); + } + } + // corriger la regexp + if (preg_match(',["][^"]+["],Uims', $recherche_mod, $matches)) { + foreach ($matches as $match) { + $word = preg_replace(",\s+,Uims", "[\s]", $match); + $word = trim($word, '"'); + $recherche_mod = str_replace($match, $word, $recherche_mod); } } $q = sql_quote( "%" - . preg_replace(",\s+,".$u, "%", $q) + . preg_replace(",\s+," . $u, "%", $q) . "%" ); - $preg = '/'.preg_replace(",\s+,".$u, ".+", trim($recherche_mod)).'/' . $options['preg_flags']; - + $preg = '/' . preg_replace(",\s+," . $u, ".+", trim($recherche_mod)) . '/' . $options['preg_flags']; } else { $methode = 'REGEXP'; $q = sql_quote(trim($recherche, '/')); @@ -147,12 +187,13 @@ function expression_recherche($recherche, $options) { // tous les caracteres transliterables de $q sont remplaces par un joker // permet de matcher en SQL meme si on est sensible aux accents (SQLite) $q_t = $q; - for($i = 0;$i false, 'jointures' => false, 'serveur' => $serveur - ), + ), $options ); @@ -225,11 +288,12 @@ function recherche_en_base($recherche='', $tables=NULL, $options=array(), $serve // id1 = { 'score' => x, attrs => { } }, // id2 = { 'score' => x, attrs => { } }, // } - include_spip('inc/memoization'); + foreach ($tables as $table => $champs) { # lock via memoization, si dispo - if (function_exists('cache_lock')) - cache_lock($lock = 'recherche '.$table.' '.$recherche); + if (function_exists('cache_lock')) { + cache_lock($lock = 'recherche ' . $table . ' ' . $recherche); + } spip_timer('rech'); @@ -242,10 +306,12 @@ function recherche_en_base($recherche='', $tables=NULL, $options=array(), $serve ##var_dump($results[$table]); - spip_log("recherche $table ($recherche) : ".count($results[$table])." resultats ".spip_timer('rech'),'recherche'); + spip_log("recherche $table ($recherche) : " . count($results[$table]) . " resultats " . spip_timer('rech'), + 'recherche'); - if (isset($lock)) + if (isset($lock)) { cache_unlock($lock); + } } return $results; @@ -253,48 +319,52 @@ function recherche_en_base($recherche='', $tables=NULL, $options=array(), $serve // Effectue une recherche sur toutes les tables de la base de donnees -// http://doc.spip.org/@remplace_en_base -function remplace_en_base($recherche='', $remplace=NULL, $tables=NULL, $options=array()) { +// http://code.spip.net/@remplace_en_base +function remplace_en_base($recherche = '', $remplace = null, $tables = null, $options = array()) { include_spip('inc/modifier'); // options par defaut $options = array_merge(array( 'preg_flags' => 'UimsS', 'toutmodifier' => false - ), + ), $options ); $options['champs'] = true; - if (!is_array($tables)) + if (!is_array($tables)) { $tables = liste_des_champs(); + } $results = recherche_en_base($recherche, $tables, $options); - $preg = '/'.str_replace('/', '\\/', $recherche).'/' . $options['preg_flags']; + $preg = '/' . str_replace('/', '\\/', $recherche) . '/' . $options['preg_flags']; foreach ($results as $table => $r) { $_id_table = id_table_objet($table); foreach ($r as $id => $x) { if ($options['toutmodifier'] - OR autoriser('modifier', $table, $id)) { + or autoriser('modifier', $table, $id) + ) { $modifs = array(); foreach ($x['champs'] as $key => $val) { - if ($key == $_id_table) next; + if ($key == $_id_table) { + next; + } $repl = preg_replace($preg, $remplace, $val); - if ($repl <> $val) + if ($repl <> $val) { $modifs[$key] = $repl; + } } - if ($modifs) + if ($modifs) { objet_modifier_champs($table, $id, array( 'champs' => array_keys($modifs), ), $modifs); + } } } } } - -?> diff --git a/www/ecrire/inc/roles.php b/www/ecrire/inc/roles.php new file mode 100644 index 00000000..e96f721d --- /dev/null +++ b/www/ecrire/inc/roles.php @@ -0,0 +1,376 @@ + $titres, + 'roles' => $application, + 'colonne' => $colonne + ); +} + +/** + * Retrouve la colonne de liaison d'un rôle si définie entre 2 objets + * + * @param string $objet + * Objet source qui possède la table de liaison + * @param string $objet_destination + * Objet sur quoi on veut lier + * @return string + * Nom de la colonne, sinon vide + **/ +function roles_colonne($objet, $objet_destination) { + if ($roles = roles_presents($objet, $objet_destination)) { + return $roles['colonne']; + } + + return ''; +} + + +/** + * Extrait le rôle et la colonne de role d'un tableau de qualification + * + * Calcule également une condition where pour ce rôle. + * + * Pour un objet pouvant recevoir des roles sur sa liaison avec un autre objet, + * on retrouve le rôle en question dans le tableau de qualification. + * Si le rôle n'est pas défini dedans, on prend le rôle par défaut + * déclaré. + * + * @param string $objet Objet source de la liaison + * @param string $objet_destination Objet de destination de la liaison + * @param array $qualif tableau de qualifications array(champ => valeur) + * @return array + * Liste (role, colonne, (array)condition) si role possible + * Liste ('', '', array()) sinon. + **/ +function roles_trouver_dans_qualif($objet, $objet_destination, $qualif = array()) { + // si des rôles sont possibles, on les utilise + $role = $colonne_role = ''; # role défini + // condition du where par defaut + $cond = array(); + if ($roles = roles_presents($objet, $objet_destination)) { + $colonne_role = $roles['colonne']; + // qu'il n'est pas défini + if (!isset($qualif[$colonne_role]) + or !($role = $qualif[$colonne_role]) + ) { + $role = $roles['roles']['defaut']; + } + // where + $cond = array("$colonne_role=" . sql_quote($role)); + } + + return array($role, $colonne_role, $cond); +} + +/** + * Gérer l'ajout dans la condition where du rôle + * + * On ajoute la condition uniquement si la liaison entre les 2 objets a une colonne de rôle ! + * + * @param string $objet_source Objet source (qui possède la table de liens) + * @param string $objet Objet de destination + * @param array $cond + * Tableau de conditions where + * qui peut avoir un index spécial 'role' définissant le role à appliquer + * ou valant '*' pour tous les roles. + * @param bool $tous_si_absent + * true pour ne pas appliquer une condition sur le rôle s'il n'est pas indiqué + * dans la liste des conditions entrantes. Autrement dit, on n'applique + * pas de rôle par défaut si aucun n'est défini. + * @return array + * Liste (Tableau de conditions where complété du role, Colonne du role, role utilisé) + **/ +function roles_creer_condition_role($objet_source, $objet, $cond, $tous_si_absent = false) { + // role par défaut, colonne + list($role_defaut, $colonne_role) = roles_trouver_dans_qualif($objet_source, $objet); + + // chercher d'eventuels rôles transmis + $role = (isset($cond['role']) ? $cond['role'] : ($tous_si_absent ? '*' : $role_defaut)); + unset($cond['role']); // cette condition est particuliere... + + if ($colonne_role) { + // on ajoute la condition du role aux autres conditions. + if ($role != '*') { + $cond[] = "$colonne_role=" . sql_quote($role); + } + } + + return array($cond, $colonne_role, $role); +} + +/** + * Liste des identifiants dont on ne peut ajouter de rôle + * + * Lister les id objet_source associés à l'objet id_objet + * via la table de lien objet_lien, et détermine dans cette liste + * lesquels ont les rôles complets, c'est à dire qu'on ne peut leur + * affecteur d'autres rôles parmi ceux qui existe pour cette liaison. + * + * @see lister_objets_lies() + * + * @param string $objet_source Objet dont on veut récupérer la liste des identifiants + * @param string $objet Objet sur lequel est liée la source + * @param int $id_objet Identifiant d'objet sur lequel est liée la source + * @param string $objet_lien Objet dont on utilise la table de liaison + * (c'est forcément soit $objet_source, soit $objet) + * @return array Liste des identifiants + */ +function roles_complets($objet_source, $objet, $id_objet, $objet_lien) { + + $presents = roles_presents_liaisons($objet_source, $objet, $id_objet, $objet_lien); + // pas de roles sur ces objets => la liste par defaut, comme sans role + if ($presents === false) { + return lister_objets_lies($objet_source, $objet, $id_objet, $objet_lien); + } + + // types de roles possibles + $roles_possibles = $presents['roles']['roles']['choix']; + // couples id / roles + $ids = $presents['ids']; + + // pour chaque groupe, on fait le diff entre tous les roles possibles + // et les roles attribués à l'élément : s'il en reste, c'est que l'élément + // n'est pas complet + $complets = array(); + foreach ($ids as $id => $roles_presents) { + if (!array_diff($roles_possibles, $roles_presents)) { + $complets[] = $id; + } + } + + return $complets; +} + + +/** + * Liste les roles attribués entre 2 objets/id_objet sur une table de liaison donnée + * + * @param string $id_objet_source Identifiant de l'objet qu'on lie + * @param string $objet_source Objet qu'on lie + * @param string $objet Objet sur lequel est liée la source + * @param int $id_objet Identifiant d'objet sur lequel est liée la source + * @param string $objet_lien Objet dont on utilise la table de liaison + * (c'est forcément soit $objet_source, soit $objet) + * @return array Liste des roles + */ +function roles_presents_sur_id($id_objet_source, $objet_source, $objet, $id_objet, $objet_lien) { + + $presents = roles_presents_liaisons($objet_source, $objet, $id_objet, $objet_lien); + // pas de roles sur ces objets => la liste par defaut, comme sans role + if ($presents === false) { + return array(); + } + + if (!isset($presents['ids'][$id_objet_source])) { + return array(); + } + + return $presents['ids'][$id_objet_source]; +} + + +/** + * Lister des rôles présents sur une liaion, pour un objet sur un autre, + * classés par identifiant de l'objet + * + * Lister les id objet_source associés à l'objet id_objet + * via la table de lien objet_lien, et groupe cette liste + * par identifiant (la clé) et ses roles attribués (tableau de valeur) + * + * On retourne cette liste dans l'index 'ids' et la description des roles + * pour la liaison dans l'index 'roles' pour éviter le le faire recalculer + * aux fonctions utilisant celle ci. + * + * @param string $objet_source Objet dont on veut récupérer la liste des identifiants + * @param string $objet Objet sur lequel est liée la source + * @param int $id_objet Identifiant d'objet sur lequel est liée la source + * @param string $objet_lien Objet dont on utilise la table de liaison + * (c'est forcément soit $objet_source, soit $objet) + * @return array|bool + * - Tableau d'index + * - roles : tableau de description des roles, + * - ids : tableau des identifiants / roles. + * - False si pas de role déclarés + */ +function roles_presents_liaisons($objet_source, $objet, $id_objet, $objet_lien) { + static $done = array(); + + // stocker le résultat + $hash = "$objet_source-$objet-$id_objet-$objet_lien"; + if (isset($done[$hash])) { + return $done[$hash]; + } + + // pas de roles sur ces objets, on sort + $roles = roles_presents($objet_lien, ($objet_lien == $objet) ? $objet_source : $objet); + if (!$roles) { + return $done[$hash] = false; + } + + // inspiré de lister_objets_lies() + if ($objet_lien == $objet) { + $res = objet_trouver_liens(array($objet => $id_objet), array($objet_source => '*')); + } else { + $res = objet_trouver_liens(array($objet_source => '*'), array($objet => $id_objet)); + } + + // types de roles possibles + $roles_possibles = $roles['roles']['choix']; + // colonne du role + $colonne = $roles['colonne']; + + // on recupere par id, et role existant + $ids = array(); + while ($row = array_shift($res)) { + $id = $row[$objet_source]; + if (!isset($ids[$id])) { + $ids[$id] = array(); + } + // tableau des roles présents + $ids[$id][] = $row[$colonne]; + } + + return $done[$hash] = array( + 'roles' => $roles, + 'ids' => $ids + ); +} + + +/** + * Lister des rôles connus en base pour une liaion, pour un objet source + * + * On retourne cette liste dans le datalist de saisie libre role. + * + * @param string $objet_source Objet dont on veut récupérer la liste des identifiants + * @param string $objet Objet sur lequel est liée la source + * @param string $objet_lien Objet dont on utilise la table de liaison + * (c'est forcément soit $objet_source, soit $objet) + * @return array|bool + * - Tableau de roles : tableau de description des roles, + * - false si pas de role déclarés + */ +function roles_connus_en_base($objet_source, $objet, $objet_lien) { + static $done = array(); + + // stocker le résultat + $hash = "$objet_source-$objet-$objet_lien"; + if (isset($done[$hash])) { + return $done[$hash]; + } + + if (!$lien = objet_associable($objet_lien)) { + return $done[$hash] = false; + } + + // pas de roles sur ces objets, on sort + $roles = roles_presents($objet_lien, ($objet_lien == $objet) ? $objet_source : $objet); + if (!$roles) { + return $done[$hash] = false; + } + + list($primary, $l) = $lien; + $colone_role = $roles['colonne']; + + $all = sql_allfetsel( + "DISTINCT $colone_role", + $l, + 'objet=' . sql_quote(($objet_source == $objet_lien) ? $objet : $objet_source) + ); + $done[$hash] = array_map('reset', $all); + + return $done[$hash]; +} diff --git a/www/ecrire/inc/rubriques.php b/www/ecrire/inc/rubriques.php index e1ccdaa7..e3cf0c5a 100644 --- a/www/ecrire/inc/rubriques.php +++ b/www/ecrire/inc/rubriques.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -13,26 +13,32 @@ /** * Fichier gérant l'actualisation et le suivi des rubriques, et de leurs branches * - * @package SPIP\Rubriques + * @package SPIP\Core\Rubriques */ - -if (!defined('_ECRIRE_INC_VERSION')) return; + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Recalcule les statuts d'une rubrique - * + * * Fonction à appeler lorsque le statut d'un objet change dans une rubrique * ou que la rubrique est deplacée. - * + * * Si le statut passe a "publie", la rubrique et ses parents y passent aussi * et les langues utilisees sont recalculées. * Conséquences symétriques s'il est depublié. - * + * * S'il est deplacé alors qu'il était publiée, double conséquence. - * + * * Tout cela devrait passer en SQL, sous forme de Cascade SQL. * + * @uses depublier_branche_rubrique_if() + * @uses calculer_prochain_postdate() + * @uses publier_branche_rubrique() + * * @param int $id_rubrique * Identifiant de la rubrique * @param array $modifs @@ -46,35 +52,36 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * true pour recalculer aussi la date du prochain article post-daté * @return bool * true si le statut change effectivement -**/ -function calculer_rubriques_if ($id_rubrique, $modifs, $statut_ancien='', $postdate = false) -{ + **/ +function calculer_rubriques_if($id_rubrique, $modifs, $statut_ancien = '', $postdate = false) { $neuf = false; if ($statut_ancien == 'publie') { if (isset($modifs['statut']) - OR isset($modifs['id_rubrique']) - OR ($postdate AND strtotime($postdate)>time())) + or isset($modifs['id_rubrique']) + or ($postdate and strtotime($postdate) > time()) + ) { $neuf |= depublier_branche_rubrique_if($id_rubrique); + } // ne publier que si c'est pas un postdate, ou si la date n'est pas dans le futur - if ($postdate){ + if ($postdate) { calculer_prochain_postdate(true); - $neuf |= (strtotime($postdate)<=time()); // par securite - } - elseif (isset($modifs['id_rubrique'])) + $neuf |= (strtotime($postdate) <= time()); // par securite + } elseif (isset($modifs['id_rubrique'])) { $neuf |= publier_branche_rubrique($modifs['id_rubrique']); - } - elseif ($modifs['statut']=='publie'){ - if ($postdate){ - calculer_prochain_postdate(true); - $neuf |= (strtotime($postdate)<=time()); // par securite } - else + } elseif (isset($modifs['statut']) and $modifs['statut'] == 'publie') { + if ($postdate) { + calculer_prochain_postdate(true); + $neuf |= (strtotime($postdate) <= time()); // par securite + } else { $neuf |= publier_branche_rubrique($id_rubrique); + } } - if ($neuf) - // Sauver la date de la derniere mise a jour (pour menu_rubriques) - ecrire_meta("date_calcul_rubriques", date("U")); + if ($neuf) // Sauver la date de la derniere mise a jour (pour menu_rubriques) + { + ecrire_meta("date_calcul_rubriques", date("U")); + } $langues = calculer_langues_utilisees(); ecrire_meta('langues_utilisees', $langues); @@ -83,26 +90,28 @@ function calculer_rubriques_if ($id_rubrique, $modifs, $statut_ancien='', $postd /** * Publie une rubrique et sa hiérarchie de rubriques - * + * * Fonction à appeler lorsqu'on dépublie ou supprime quelque chose - * dans une rubrique. + * dans une rubrique. * * @todo Le nom de la fonction est trompeur, vu que la fonction remonte dans la hierarchie ! - * + * * @param int $id_rubrique * Identifiant de la rubrique * @return bool * true si le statut change effectivement */ -function publier_branche_rubrique($id_rubrique) -{ +function publier_branche_rubrique($id_rubrique) { $id_pred = $id_rubrique; while (true) { - sql_updateq('spip_rubriques', array('statut'=>'publie', 'date'=>date('Y-m-d H:i:s')), "id_rubrique=$id_rubrique"); - $id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', "R.id_rubrique=$id_rubrique"); - if (!$id_parent) break; + sql_updateq('spip_rubriques', array('statut' => 'publie', 'date' => date('Y-m-d H:i:s')), + "id_rubrique=" . intval($id_rubrique)); + $id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', "R.id_rubrique=" . intval($id_rubrique)); + if (!$id_parent) { + break; + } $id_rubrique = $id_parent; - } + } # spip_log(" publier_branche_rubrique($id_rubrique $id_pred"); return $id_pred != $id_rubrique; @@ -110,28 +119,30 @@ function publier_branche_rubrique($id_rubrique) /** * Dépublie si nécessaire des éléments d'une hiérarchie de rubriques - * + * * Fonction à appeler lorsqu'on dépublie ou supprime quelque chose - * dans une rubrique. + * dans une rubrique. * + * @uses depublier_rubrique_if() * @todo Le nom de la fonction est trompeur, vu que la fonction remonte dans la hierarchie ! - * + * * @param int $id_rubrique * Identifiant de la rubrique * @return bool * true si le statut change effectivement */ -function depublier_branche_rubrique_if($id_rubrique){ +function depublier_branche_rubrique_if($id_rubrique) { $date = date('Y-m-d H:i:s'); // figer la date # spip_log("depublier_branche_rubrique($id_rubrique ?"); $id_pred = $id_rubrique; while ($id_pred) { - if (!depublier_rubrique_if($id_pred,$date)) + if (!depublier_rubrique_if($id_pred, $date)) { return $id_pred != $id_rubrique; + } // passer au parent si on a depublie - $r = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=$id_pred"); + $r = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=" . intval($id_pred)); $id_pred = $r['id_parent']; } @@ -140,7 +151,9 @@ function depublier_branche_rubrique_if($id_rubrique){ /** * Dépublier une rubrique si aucun contenu publié connu n'est trouvé dedans - * + * + * @pipeline_appel objet_compte_enfants + * * @param int $id_rubrique * Identifiant de la rubrique à tester * @param string|null $date @@ -149,29 +162,32 @@ function depublier_branche_rubrique_if($id_rubrique){ * @return bool * true si la rubrique a été dépubliée */ -function depublier_rubrique_if($id_rubrique,$date=null){ +function depublier_rubrique_if($id_rubrique, $date = null) { if (is_null($date)) { $date = date('Y-m-d H:i:s'); } $postdates = ($GLOBALS['meta']["post_dates"] == "non") ? - " AND date <= ".sql_quote($date) : ''; + " AND date <= " . sql_quote($date) : ''; - if (!$id_rubrique=intval($id_rubrique)) + if (!$id_rubrique = intval($id_rubrique)) { return false; + } // verifier qu'elle existe et est bien publiee - $r = sql_fetsel('id_rubrique,statut','spip_rubriques',"id_rubrique=$id_rubrique"); - if (!$r OR $r['statut']!=='publie') + $r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', "id_rubrique=" . intval($id_rubrique)); + if (!$r or $r['statut'] !== 'publie') { return false; + } // On met le nombre de chaque type d'enfants dans un tableau // Le type de l'objet est au pluriel $compte = array( - 'articles' => sql_countsel("spip_articles", "id_rubrique=$id_rubrique AND statut='publie'$postdates"), - 'rubriques' => sql_countsel("spip_rubriques", "id_parent=$id_rubrique AND statut='publie'"), - 'documents' => sql_countsel("spip_documents_liens", "id_objet=$id_rubrique AND objet='rubrique'") + 'articles' => sql_countsel("spip_articles", + "id_rubrique=" . intval($id_rubrique) . " AND statut='publie'$postdates"), + 'rubriques' => sql_countsel("spip_rubriques", "id_parent=" . intval($id_rubrique) . " AND statut='publie'"), + 'documents' => sql_countsel("spip_documents_liens", "id_objet=" . intval($id_rubrique) . " AND objet='rubrique'") ); - + // On passe le tableau des comptes dans un pipeline pour que les plugins puissent ajouter (ou retirer) des enfants $compte = pipeline('objet_compte_enfants', array( @@ -184,13 +200,16 @@ function depublier_rubrique_if($id_rubrique,$date=null){ 'data' => $compte ) ); - + // S'il y a au moins un enfant de n'importe quoi, on ne dépublie pas - foreach($compte as $objet => $n) - if ($n) + foreach ($compte as $objet => $n) { + if ($n) { return false; + } + } + + sql_updateq("spip_rubriques", array("statut" => 'prepa'), "id_rubrique=" . intval($id_rubrique)); - sql_updateq("spip_rubriques", array("statut" => '0'), "id_rubrique=$id_rubrique"); # spip_log("depublier_rubrique $id_pred"); return true; } @@ -201,14 +220,18 @@ function depublier_rubrique_if($id_rubrique,$date=null){ * * Recalcule le statut des rubriques, les langues héritées et la date * du prochain article post-daté - * + * * Cette fonction est appelée après importation: elle calcule les meta-donnes * resultantes et remet de la coherence au cas où la base importée en manquait - * + * * Cette fonction doit etre invoquée sans processus concurrent potentiel. - * + * + * @uses calculer_rubriques_publiees() + * @uses calculer_langues_utilisees() + * @uses calculer_prochain_postdate() + * * @return void -**/ + **/ function calculer_rubriques() { calculer_rubriques_publiees(); @@ -227,19 +250,20 @@ function calculer_rubriques() { /** - * - * Recalcule l'ensemble des donnees associees a l'arborescence des rubriques - * + * Recalcule l'ensemble des données associées à l'arborescence des rubriques + * * Attention, faute de SQL transactionnel on travaille sur * des champs temporaires afin de ne pas casser la base * pendant la demi seconde de recalculs - * + * + * @pipeline_appel calculer_rubriques + * * @return void -**/ + **/ function calculer_rubriques_publiees() { // Mettre les compteurs a zero - sql_updateq('spip_rubriques', array('date_tmp' => '0000-00-00 00:00:00', 'statut_tmp' => 'prive')); + sql_updateq('spip_rubriques', array('date_tmp' => '0000-00-00 00:00:00', 'statut_tmp' => 'prepa')); // // Publier et dater les rubriques qui ont un article publie @@ -247,11 +271,16 @@ function calculer_rubriques_publiees() { // Afficher les articles post-dates ? $postdates = ($GLOBALS['meta']["post_dates"] == "non") ? - "AND A.date <= ".sql_quote(date('Y-m-d H:i:s')) : ''; + "AND A.date <= " . sql_quote(date('Y-m-d H:i:s')) : ''; - $r = sql_select("R.id_rubrique AS id, max(A.date) AS date_h", "spip_rubriques AS R, spip_articles AS A", "R.id_rubrique = A.id_rubrique AND A.statut='publie' $postdates ", "R.id_rubrique"); - while ($row = sql_fetch($r)) - sql_updateq("spip_rubriques", array("statut_tmp" => 'publie', "date_tmp" => $row['date_h']), "id_rubrique=".$row['id']); + $r = sql_select( + "R.id_rubrique AS id, max(A.date) AS date_h", + "spip_rubriques AS R JOIN spip_articles AS A ON R.id_rubrique = A.id_rubrique", + "A.date>R.date_tmp AND A.statut='publie' $postdates ", "R.id_rubrique"); + while ($row = sql_fetch($r)) { + sql_updateq("spip_rubriques", array("statut_tmp" => 'publie', "date_tmp" => $row['date_h']), + "id_rubrique=" . intval($row['id'])); + } // point d'entree pour permettre a des plugins de gerer le statut // autrement (par ex: toute rubrique est publiee des sa creation) @@ -259,21 +288,25 @@ function calculer_rubriques_publiees() { // c'est statut_tmp/date_tmp qu'il doit modifier // [C'est un trigger... a renommer en trig_calculer_rubriques ?] pipeline('calculer_rubriques', null); - + // Les rubriques qui ont une rubrique fille plus recente // on tourne tant que les donnees remontent vers la racine. do { $continuer = false; - $r = sql_select("R.id_rubrique AS id, max(A.date_tmp) AS date_h", "spip_rubriques AS R, spip_rubriques AS A", "R.id_rubrique = A.id_parent AND (R.date_tmp < A.date_tmp OR R.statut_tmp<>'publie') AND A.statut_tmp='publie' ", "R.id_rubrique"); + $r = sql_select( + "R.id_rubrique AS id, max(SR.date_tmp) AS date_h", + "spip_rubriques AS R JOIN spip_rubriques AS SR ON R.id_rubrique = SR.id_parent", + "(SR.date_tmp>R.date_tmp OR R.statut_tmp<>'publie') AND SR.statut_tmp='publie' ", "R.id_rubrique"); while ($row = sql_fetch($r)) { - sql_updateq('spip_rubriques', array('statut_tmp'=>'publie', 'date_tmp'=>$row['date_h']),"id_rubrique=".$row['id']); + sql_updateq('spip_rubriques', array('statut_tmp' => 'publie', 'date_tmp' => $row['date_h']), + "id_rubrique=" . intval($row['id'])); $continuer = true; } } while ($continuer); // Enregistrement des modifs - sql_update('spip_rubriques', array('date'=>'date_tmp', 'statut'=>'statut_tmp')); + sql_update('spip_rubriques', array('date' => 'date_tmp', 'statut' => 'statut_tmp')); } /** @@ -282,17 +315,18 @@ function calculer_rubriques_publiees() { * Cherche les rubriques ayant des id_secteur ou profondeurs ne correspondant pas * avec leur parent, et les met à jour. De même avec les articles et leur id_secteur * On procede en iterant la profondeur de 1 en 1 pour ne pas risquer une boucle infinie sur reference circulaire - * + * + * @pipeline_appel trig_propager_les_secteurs + * * @return void -**/ -function propager_les_secteurs() -{ + **/ +function propager_les_secteurs() { // Profondeur 0 // Toutes les rubriques racines sont de profondeur 0 // et fixer les id_secteur des rubriques racines - sql_update('spip_rubriques', array('id_secteur'=>'id_rubrique','profondeur'=>0), "id_parent=0"); + sql_update('spip_rubriques', array('id_secteur' => 'id_rubrique', 'profondeur' => 0), "id_parent=0"); // Toute rubrique non racine est de profondeur >0 - sql_updateq('spip_rubriques', array('profondeur'=>1), "id_parent<>0 AND profondeur=0"); + sql_updateq('spip_rubriques', array('profondeur' => 1), "id_parent<>0 AND profondeur=0"); // securite : pas plus d'iteration que de rubriques dans la base $maxiter = sql_countsel("spip_rubriques"); @@ -314,66 +348,72 @@ function propager_les_secteurs() // - cela nous protege de la boucle infinie en cas de reference circulaire dans les rubriques $maxiter2 = $maxiter; while ($maxiter2-- - AND $rows = sql_allfetsel( - "A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur", - "spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique", - "R.profondeur=".intval($prof)." AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)", - "","R.id_secteur","0,100")){ + and $rows = sql_allfetsel( + "A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur", + "spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique", + "R.profondeur=" . intval($prof) . " AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)", + "", "R.id_secteur", "0,100")) { $id_secteur = null; $ids = array(); while ($row = array_shift($rows)) { - if ($row['id_secteur']!==$id_secteur){ - if (count($ids)) - sql_updateq("spip_rubriques", array("id_secteur" => $id_secteur,'profondeur' => $prof+1), sql_in('id_rubrique',$ids)); + if ($row['id_secteur'] !== $id_secteur) { + if (count($ids)) { + sql_updateq("spip_rubriques", array("id_secteur" => $id_secteur, 'profondeur' => $prof + 1), + sql_in('id_rubrique', $ids)); + } $id_secteur = $row['id_secteur']; $ids = array(); } $ids[] = $row['id']; } - if (count($ids)) - sql_updateq("spip_rubriques", array("id_secteur" => $id_secteur,'profondeur' => $prof+1), sql_in('id_rubrique',$ids)); + if (count($ids)) { + sql_updateq("spip_rubriques", array("id_secteur" => $id_secteur, 'profondeur' => $prof + 1), + sql_in('id_rubrique', $ids)); + } } // Toutes les rubriques de profondeur $prof+1 qui n'ont pas un parent de profondeur $prof sont decalees $maxiter2 = $maxiter; while ($maxiter2-- - AND $rows = sql_allfetsel( - "id_rubrique as id", - "spip_rubriques", - "profondeur=".intval($prof+1)." AND id_parent NOT IN (".sql_get_select("zzz.id_rubrique","spip_rubriques AS zzz","zzz.profondeur=".intval($prof)).")",'','','0,100')){ - $rows = array_map('reset',$rows); - sql_updateq("spip_rubriques", array('profondeur' => $prof+2), sql_in("id_rubrique",$rows)); + and $rows = sql_allfetsel( + "id_rubrique as id", + "spip_rubriques", + "profondeur=" . intval($prof + 1) . " AND id_parent NOT IN (" . sql_get_select("zzz.id_rubrique", + "spip_rubriques AS zzz", "zzz.profondeur=" . intval($prof)) . ")", '', '', '0,100')) { + $rows = array_map('reset', $rows); + sql_updateq("spip_rubriques", array('profondeur' => $prof + 2), sql_in("id_rubrique", $rows)); } // ici on a fini de valider $prof+1, toutes les rubriques de prondeur 0 a $prof+1 sont OK // si pas de rubrique a profondeur $prof+1 pas la peine de continuer // si il reste des rubriques non vues, c'est une branche morte ou reference circulaire (base foireuse) // on arrete les frais - if (sql_countsel("spip_rubriques","profondeur=".intval($prof+1))){ + if (sql_countsel("spip_rubriques", "profondeur=" . intval($prof + 1))) { $prof++; $continuer = true; } - } - while ($continuer AND $maxiter--); + } while ($continuer and $maxiter--); // loger si la table des rubriques semble foireuse // et mettre un id_secteur=0 sur ces rubriques pour eviter toute selection par les boucles - if (sql_countsel("spip_rubriques","profondeur>".intval($prof+1))){ - spip_log("Les rubriques de profondeur>".($prof+1)." semblent suspectes (branches morte ou reference circulaire dans les parents)",_LOG_CRITIQUE); - sql_update("spip_rubriques",array('id_secteur'=>0),"profondeur>".intval($prof+1)); + if (sql_countsel("spip_rubriques", "profondeur>" . intval($prof + 1))) { + spip_log("Les rubriques de profondeur>" . ($prof + 1) . " semblent suspectes (branches morte ou reference circulaire dans les parents)", + _LOG_CRITIQUE); + sql_update("spip_rubriques", array('id_secteur' => 0), "profondeur>" . intval($prof + 1)); } // reparer les articles - $r = sql_select("A.id_article AS id, R.id_secteur AS secteur", "spip_articles AS A, spip_rubriques AS R", "A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur"); + $r = sql_select("A.id_article AS id, R.id_secteur AS secteur", "spip_articles AS A, spip_rubriques AS R", + "A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur"); while ($row = sql_fetch($r)) { - sql_update("spip_articles", array("id_secteur" => $row['secteur']), "id_article=".$row['id']); + sql_update("spip_articles", array("id_secteur" => $row['secteur']), "id_article=" . intval($row['id'])); } // avertir les plugins qui peuvent faire leur mises a jour egalement - pipeline('trig_propager_les_secteurs',''); + pipeline('trig_propager_les_secteurs', ''); } @@ -383,17 +423,19 @@ function propager_les_secteurs() * Cherche les langues incorrectes de sous rubriques, qui doivent hériter * de la rubrique parente lorsque langue_choisie est différent de oui, * et les corrige. - * + * * @return bool * true si un changement a eu lieu -**/ + **/ function calculer_langues_rubriques_etape() { - $s = sql_select("A.id_rubrique AS id_rubrique, R.lang AS lang", "spip_rubriques AS A, spip_rubriques AS R", "A.id_parent = R.id_rubrique AND A.langue_choisie != 'oui' AND R.lang<>'' AND R.lang<>A.lang"); + $s = sql_select("A.id_rubrique AS id_rubrique, R.lang AS lang", "spip_rubriques AS A, spip_rubriques AS R", + "A.id_parent = R.id_rubrique AND A.langue_choisie != 'oui' AND R.lang<>'' AND R.lang<>A.lang"); $t = false; while ($row = sql_fetch($s)) { $id_rubrique = $row['id_rubrique']; - $t = sql_updateq('spip_rubriques', array('lang' => $row['lang'], 'langue_choisie'=>'non'), "id_rubrique=$id_rubrique"); + $t = sql_updateq('spip_rubriques', array('lang' => $row['lang'], 'langue_choisie' => 'non'), + "id_rubrique=" . intval($id_rubrique)); } return $t; @@ -404,24 +446,32 @@ function calculer_langues_rubriques_etape() { * * Redéfinit la langue du site sur les rubriques sans langue spécifiée * (langue_choisie différent de 'oui') - * + * * Redéfinit les langues des articles sans langue spécifiée * (langue_choisie différent de 'oui') en les rebasant sur la langue * de la rubrique parente lorsque ce n'est pas le cas. * - * @return void -**/ + * @uses calculer_langues_rubriques_etape() + * @pipeline_appel trig_calculer_langues_rubriques + * + * @return void + **/ function calculer_langues_rubriques() { // rubriques (recursivite) - sql_updateq("spip_rubriques", array("lang" => $GLOBALS['meta']['langue_site'], "langue_choisie" => 'non'), "id_parent=0 AND langue_choisie != 'oui'"); - while (calculer_langues_rubriques_etape()); + sql_updateq("spip_rubriques", array("lang" => $GLOBALS['meta']['langue_site'], "langue_choisie" => 'non'), + "id_parent=0 AND langue_choisie != 'oui'"); + while (calculer_langues_rubriques_etape()) { + ; + } // articles - $s = sql_select("A.id_article AS id_article, R.lang AS lang", "spip_articles AS A, spip_rubriques AS R", "A.id_rubrique = R.id_rubrique AND A.langue_choisie != 'oui' AND (length(A.lang)=0 OR length(R.lang)>0) AND R.lang<>A.lang"); + $s = sql_select("A.id_article AS id_article, R.lang AS lang", "spip_articles AS A, spip_rubriques AS R", + "A.id_rubrique = R.id_rubrique AND A.langue_choisie != 'oui' AND (length(A.lang)=0 OR length(R.lang)>0) AND R.lang<>A.lang"); while ($row = sql_fetch($s)) { $id_article = $row['id_article']; - sql_updateq('spip_articles', array("lang"=> $row['lang'], 'langue_choisie'=>'non'), "id_article=$id_article"); + sql_updateq('spip_articles', array("lang" => $row['lang'], 'langue_choisie' => 'non'), + "id_article=" . intval($id_article)); } if ($GLOBALS['meta']['multi_rubriques'] == 'oui') { @@ -429,42 +479,44 @@ function calculer_langues_rubriques() { $langues = calculer_langues_utilisees(); ecrire_meta('langues_utilisees', $langues); } - + // avertir les plugins qui peuvent faire leur mises a jour egalement - pipeline('trig_calculer_langues_rubriques',''); + pipeline('trig_calculer_langues_rubriques', ''); } /** - * Calcule la liste des langues reellement utilisees dans le site public + * Calcule la liste des langues réellement utilisées dans le site public * * La recherche de langue est effectuée en recréant une boucle pour chaque * objet éditorial gérant des langues de sorte que les éléments non publiés * ne sont pas pris en compte. - * + * * @param string $serveur * Nom du connecteur à la base de données * @return string * Liste des langues utilisées séparées par des virgules -**/ -function calculer_langues_utilisees ($serveur='') { + **/ +function calculer_langues_utilisees($serveur = '') { include_spip('public/interfaces'); include_spip('public/compiler'); include_spip('public/composer'); + include_spip('public/phraser_html'); $langues = array(); $langues[$GLOBALS['meta']['langue_site']] = 1; include_spip('base/objets'); $tables = lister_tables_objets_sql(); - $trouver_table = charger_fonction('trouver_table','base'); + $trouver_table = charger_fonction('trouver_table', 'base'); - foreach(array_keys($tables) as $t){ - $desc = $trouver_table($t,$serveur); + foreach (array_keys($tables) as $t) { + $desc = $trouver_table($t, $serveur); // c'est une table avec des langues if ($desc['exist'] - AND isset($desc['field']['lang']) - AND isset($desc['field']['langue_choisie'])){ + and isset($desc['field']['lang']) + and isset($desc['field']['langue_choisie']) + ) { $boucle = new Boucle(); $boucle->show = $desc; @@ -474,48 +526,71 @@ function calculer_langues_utilisees ($serveur='') { $boucle->sql_serveur = $serveur; $boucle->select[] = "DISTINCT lang"; $boucle->from[$desc['table_objet']] = $t; + $boucle->separateur[] = ','; + $boucle->return = '$Pile[$SP][\'lang\']'; + $boucle->iterateur = 'sql'; + + $boucle->descr['nom'] = 'objet_test_si_publie'; // eviter notice php + $boucle->descr['sourcefile'] = 'internal'; + $boucle = pipeline('pre_boucle', $boucle); - + if (isset($desc['statut']) - AND $desc['statut']){ - instituer_boucle($boucle, false); - $res = calculer_select($boucle->select,$boucle->from,$boucle->from_type,$boucle->where,$boucle->join,$boucle->group,$boucle->order,$boucle->limit,$boucle->having,$desc['table_objet'],$desc['table_objet'],$serveur); - } - else - $res = sql_select(implode(',',$boucle->select),$boucle->from); - while ($row = sql_fetch($res)) { - $langues[$row['lang']] = 1; + and $desc['statut'] + ) { + $boucles = array( + 'calculer_langues_utilisees' => $boucle, + ); + // generer un nom de fonction "anonyme" unique + do { + $functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . rand(); + } while (function_exists($functionname)); + $code = calculer_boucle('calculer_langues_utilisees', $boucles); + $code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code; + $code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();'; + $res = ''; + eval($code); + $res = explode(',', $res); + foreach ($res as $lang) { + $langues[$lang] = 1; + } + } else { + $res = sql_select(implode(',', $boucle->select), $boucle->from); + while ($row = sql_fetch($res)) { + $langues[$row['lang']] = 1; + } } } } $langues = array_filter(array_keys($langues)); sort($langues); - $langues = join(',',$langues); + $langues = join(',', $langues); spip_log("langues utilisees: $langues"); + return $langues; } /** * Calcule une branche de rubriques - * + * * Dépréciée, pour compatibilité * * @deprecated * @see calcul_branche_in() - * + * * @param string|int|array $generation * @return string */ -function calcul_branche ($generation) {return calcul_branche_in($generation);} +function calcul_branche($generation) { return calcul_branche_in($generation); } /** * Calcul d'une branche de rubrique - * + * * Liste des id_rubrique contenues dans une rubrique donnée * * @see inc_calcul_branche_in_dist() - * + * * @param string|int|array $id * Identifiant de la, ou des rubriques noeuds * @return string @@ -523,13 +598,14 @@ function calcul_branche ($generation) {return calcul_branche_in($generation);} * incluant les rubriques noeuds et toutes leurs descendances */ function calcul_branche_in($id) { - $calcul_branche_in = charger_fonction('calcul_branche_in','inc'); + $calcul_branche_in = charger_fonction('calcul_branche_in', 'inc'); + return $calcul_branche_in($id); } /** * Calcul d'une hiérarchie - * + * * Liste des id_rubrique contenant une rubrique donnée * * @see inc_calcul_hierarchie_in_dist() @@ -541,20 +617,23 @@ function calcul_branche_in($id) { * Liste des identifiants séparés par des virgules, * incluant les rubriques transmises et toutes leurs parentées */ -function calcul_hierarchie_in($id, $tout=true) { - $calcul_hierarchie_in = charger_fonction('calcul_hierarchie_in','inc'); +function calcul_hierarchie_in($id, $tout = true) { + $calcul_hierarchie_in = charger_fonction('calcul_hierarchie_in', 'inc'); + return $calcul_hierarchie_in($id, $tout); } /** * Calcul d'une branche de rubriques - * + * * Liste des id_rubrique contenues dans une rubrique donnée * pour le critere {branche} - * + * * Fonction surchargeable pour optimisation * + * @see inc_calcul_hierarchie_in_dist() pour la hierarchie + * * @param string|int|array $id * Identifiant de la, ou des rubriques noeuds * @return string @@ -565,10 +644,13 @@ function inc_calcul_branche_in_dist($id) { static $b = array(); // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN - if (!is_array($id)) $id = explode(',',$id); + if (!is_array($id)) { + $id = explode(',', $id); + } $id = join(',', array_map('intval', $id)); - if (isset($b[$id])) + if (isset($b[$id])) { return $b[$id]; + } // Notre branche commence par la rubrique de depart $branche = $r = $id; @@ -576,29 +658,33 @@ function inc_calcul_branche_in_dist($id) { // On ajoute une generation (les filles de la generation precedente) // jusqu'a epuisement, en se protegeant des references circulaires $maxiter = 10000; - while ($maxiter-- AND $filles = sql_allfetsel( - 'id_rubrique', - 'spip_rubriques', - sql_in('id_parent', $r) ." AND ". sql_in('id_rubrique', $r, 'NOT') - )) { + while ($maxiter-- and $filles = sql_allfetsel( + 'id_rubrique', + 'spip_rubriques', + sql_in('id_parent', $r) . " AND " . sql_in('id_rubrique', $r, 'NOT') + )) { $r = join(',', array_map('reset', $filles)); $branche .= ',' . $r; } # securite pour ne pas plomber la conso memoire sur les sites prolifiques - if (strlen($branche)<10000) + if (strlen($branche) < 10000) { $b[$id] = $branche; + } + return $branche; } /** * Calcul d'une hiérarchie - * + * * Liste des id_rubrique contenant une rubrique donnée, * contrairement à la fonction calcul_branche_in() qui calcule les * rubriques contenues * + * @see inc_calcul_branche_in_dist() pour la descendence + * * @param string|int|array $id * Identifiant de la, ou des rubriques dont on veut obtenir les hierarchies * @param bool $tout @@ -607,11 +693,13 @@ function inc_calcul_branche_in_dist($id) { * Liste des identifiants séparés par des virgules, * incluant les rubriques transmises et toutes leurs parentées */ -function inc_calcul_hierarchie_in_dist($id, $tout=true) { +function inc_calcul_hierarchie_in_dist($id, $tout = true) { static $b = array(); // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN - if (!is_array($id)) $id = explode(',',$id); + if (!is_array($id)) { + $id = explode(',', $id); + } $id = join(',', array_map('intval', $id)); if (isset($b[$id])) { @@ -625,17 +713,17 @@ function inc_calcul_hierarchie_in_dist($id, $tout=true) { // jusqu'a epuisement, en se protegeant des references circulaires $ids_nouveaux_parents = $id; $maxiter = 10000; - while ($maxiter-- AND $parents = sql_allfetsel( + while ($maxiter-- and $parents = sql_allfetsel( 'id_parent', 'spip_rubriques', - sql_in('id_rubrique', $ids_nouveaux_parents) ." AND ". sql_in('id_parent',$hier,'NOT') - )) { + sql_in('id_rubrique', $ids_nouveaux_parents) . " AND " . sql_in('id_parent', $hier, 'NOT') + )) { $ids_nouveaux_parents = join(',', array_map('reset', $parents)); - $hier = $ids_nouveaux_parents.(strlen($hier)?','.$hier:''); + $hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : ''); } # securite pour ne pas plomber la conso memoire sur les sites prolifiques - if (strlen($hier)<10000) { + if (strlen($hier) < 10000) { $b[$id] = $hier; } @@ -646,42 +734,47 @@ function inc_calcul_hierarchie_in_dist($id, $tout=true) { } - /** - * Calcule la date du prochain article post-daté + * Calcule la date du prochain article post-daté * * Appelée lorsqu'un (ou plusieurs) article post-daté arrive à terme * ou est redaté - * + * + * @uses publier_branche_rubrique() + * @pipeline_appel trig_calculer_prochain_postdate + * * @param bool $check * true pour affecter le statut des rubriques concernées. * @return void -**/ -function calculer_prochain_postdate($check= false) { + **/ +function calculer_prochain_postdate($check = false) { include_spip('base/abstract_sql'); if ($check) { $postdates = ($GLOBALS['meta']["post_dates"] == "non") ? - "AND A.date <= ".sql_quote(date('Y-m-d H:i:s')) : ''; + "AND A.date <= " . sql_quote(date('Y-m-d H:i:s')) : ''; $r = sql_select("DISTINCT A.id_rubrique AS id", - "spip_articles AS A LEFT JOIN spip_rubriques AS R ON A.id_rubrique=R.id_rubrique", "R.statut != 'publie' AND A.statut='publie'$postdates"); - while ($row = sql_fetch($r)) + "spip_articles AS A LEFT JOIN spip_rubriques AS R ON A.id_rubrique=R.id_rubrique", + "R.statut != 'publie' AND A.statut='publie'$postdates"); + while ($row = sql_fetch($r)) { publier_branche_rubrique($row['id']); + } - pipeline('trig_calculer_prochain_postdate',''); + pipeline('trig_calculer_prochain_postdate', ''); } - $t = sql_fetsel("date", "spip_articles", "statut='publie' AND date > ".sql_quote(date('Y-m-d H:i:s')), "", "date", "1"); - + $t = sql_fetsel("date", "spip_articles", "statut='publie' AND date > " . sql_quote(date('Y-m-d H:i:s')), "", "date", + "1"); + if ($t) { - $t = $t['date']; + $t = $t['date']; if (!isset($GLOBALS['meta']['date_prochain_postdate']) - OR $t<>$GLOBALS['meta']['date_prochain_postdate']){ + or $t <> $GLOBALS['meta']['date_prochain_postdate'] + ) { ecrire_meta('date_prochain_postdate', strtotime($t)); ecrire_meta('derniere_modif', time()); } - } - else { + } else { effacer_meta('date_prochain_postdate'); ecrire_meta('derniere_modif', time()); } @@ -691,12 +784,12 @@ function calculer_prochain_postdate($check= false) { /** * Crée une arborescence de rubrique - * + * * creer_rubrique_nommee('truc/machin/chose') va créer * une rubrique truc, une sous-rubrique machin, et une sous-sous-rubrique * chose, sans créer de rubrique si elle existe déjà * à partir de $id_parent (par défaut, à partir de la racine) - * + * * NB: cette fonction est très pratique, mais pas utilisée dans le core * pour rester légère elle n'appelle pas calculer_rubriques() * @@ -709,29 +802,30 @@ function calculer_prochain_postdate($check= false) { * @return int * Identifiant de la rubrique la plus profonde. */ -function creer_rubrique_nommee($titre, $id_parent=0, $serveur='') { +function creer_rubrique_nommee($titre, $id_parent = 0, $serveur = '') { // eclater l'arborescence demandee // echapper les et autres balises fermantes html - $titre = preg_replace(",]*)>,ims","<@\\1>",$titre); + $titre = preg_replace(",]*)>,ims", "<@\\1>", $titre); $arbo = explode('/', preg_replace(',^/,', '', $titre)); include_spip('base/abstract_sql'); foreach ($arbo as $titre) { // retablir les et autres balises fermantes html - $titre = preg_replace(",<@([a-z][^>]*)>,ims","",$titre); - $r = sql_getfetsel("id_rubrique", "spip_rubriques", "titre = ".sql_quote($titre)." AND id_parent=".intval($id_parent), - $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur); - if ($r !== NULL) { + $titre = preg_replace(",<@([a-z][^>]*)>,ims", "", $titre); + $r = sql_getfetsel("id_rubrique", "spip_rubriques", + "titre = " . sql_quote($titre) . " AND id_parent=" . intval($id_parent), + $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur); + if ($r !== null) { $id_parent = $r; } else { $id_rubrique = sql_insertq('spip_rubriques', array( - 'titre' => $titre, - 'id_parent' => $id_parent, - 'statut' => 'prive') - ,$desc=array(), $serveur); + 'titre' => $titre, + 'id_parent' => $id_parent, + 'statut' => 'prepa' + ), $desc = array(), $serveur); if ($id_parent > 0) { $data = sql_fetsel("id_secteur,lang", "spip_rubriques", "id_rubrique=$id_parent", - $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur); + $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur); $id_secteur = $data['id_secteur']; $lang = $data['lang']; } else { @@ -739,7 +833,8 @@ function creer_rubrique_nommee($titre, $id_parent=0, $serveur='') { $lang = $GLOBALS['meta']['langue_site']; } - sql_updateq('spip_rubriques', array('id_secteur'=>$id_secteur, "lang"=>$lang), "id_rubrique=$id_rubrique", $desc='', $serveur); + sql_updateq('spip_rubriques', array('id_secteur' => $id_secteur, "lang" => $lang), + "id_rubrique=" . intval($id_rubrique), $desc = '', $serveur); // pour la recursion $id_parent = $id_rubrique; @@ -748,5 +843,3 @@ function creer_rubrique_nommee($titre, $id_parent=0, $serveur='') { return intval($id_parent); } - -?> diff --git a/www/ecrire/inc/securiser_action.php b/www/ecrire/inc/securiser_action.php index 1968538e..91eabf1d 100644 --- a/www/ecrire/inc/securiser_action.php +++ b/www/ecrire/inc/securiser_action.php @@ -3,45 +3,62 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des actions sécurisées + * + * @package SPIP\Core\Actions + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** - * interface d'appel: - * - au moins un argument: retourne une URL ou un formulaire securises - * - sans argument: verifie la securite et retourne _request('arg'), ou exit. + * Génère ou vérifie une action sécurisée * - * http://doc.spip.org/@inc_securiser_action_dist + * Interface d'appel: + * + * - au moins un argument: retourne une URL ou un formulaire securisés + * - sans argument : vérifie la sécurité et retourne `_request('arg')`, ou exit. + * + * @uses securiser_action_auteur() Pour produire l'URL ou le formulaire + * @example + * Tester une action reçue et obtenir son argument : + * ``` + * $securiser_action = charger_fonction('securiser_action'); + * $arg = $securiser_action(); + * ``` * * @param string $action * @param string $arg * @param string $redirect * @param bool|int|string $mode - * -1 : renvoyer action, arg et hash sous forme de array() - * true ou false : renvoyer une url, avec & (false) ou & (true) - * string : renvoyer un formulaire + * - -1 : renvoyer action, arg et hash sous forme de array() + * - true ou false : renvoyer une url, avec & (false) ou & (true) + * - string : renvoyer un formulaire * @param string|int $att * id_auteur pour lequel generer l'action en mode url ou array() * atributs du formulaire en mode formulaire * @param bool $public * @return array|string */ -function inc_securiser_action_dist($action='', $arg='', $redirect="", $mode=false, $att='', $public=false) -{ - if ($action) +function inc_securiser_action_dist($action = '', $arg = '', $redirect = "", $mode = false, $att = '', $public = false) { + if ($action) { return securiser_action_auteur($action, $arg, $redirect, $mode, $att, $public); - else { + } else { $arg = _request('arg'); $hash = _request('hash'); - $action = _request('action')?_request('action'):_request('formulaire_action'); - if ($a = verifier_action_auteur("$action-$arg", $hash)) + $action = _request('action') ? _request('action') : _request('formulaire_action'); + if ($a = verifier_action_auteur("$action-$arg", $hash)) { return $arg; + } include_spip('inc/minipres'); echo minipres(); exit; @@ -49,41 +66,53 @@ function inc_securiser_action_dist($action='', $arg='', $redirect="", $mode=fals } /** - * Attention: PHP applique urldecode sur $_GET mais pas sur $_POST - * cf http://fr.php.net/urldecode#48481 - * http://doc.spip.org/@securiser_action_auteur + * Retourne une URL ou un formulaire sécurisés + * + * @note + * Attention: PHP applique urldecode sur $_GET mais pas sur $_POST + * cf http://fr.php.net/urldecode#48481 + * http://code.spip.net/@securiser_action_auteur + * + * @uses calculer_action_auteur() + * @uses generer_form_action() * * @param string $action * @param string $arg * @param string $redirect * @param bool|int|string $mode - * -1 : renvoyer action, arg et hash sous forme de array() - * true ou false : renvoyer une url, avec & (false) ou & (true) - * string : renvoyer un formulaire + * - -1 : renvoyer action, arg et hash sous forme de array() + * - true ou false : renvoyer une url, avec & (false) ou & (true) + * - string : renvoyer un formulaire * @param string|int $att - * id_auteur pour lequel generer l'action en mode url ou array() - * atributs du formulaire en mode formulaire + * - id_auteur pour lequel générer l'action en mode URL ou array() + * - atributs du formulaire en mode formulaire * @param bool $public * @return array|string + * - string URL, si $mode = true ou false, + * - string code HTML du formulaire, si $mode texte, + * - array Tableau (action=>x, arg=>x, hash=>x) si $mode=-1. */ -function securiser_action_auteur($action, $arg, $redirect="", $mode=false, $att='', $public=false) { +function securiser_action_auteur($action, $arg, $redirect = "", $mode = false, $att = '', $public = false) { // mode URL ou array - if (!is_string($mode)){ - $hash = calculer_action_auteur("$action-$arg",is_numeric($att)?$att:null); + if (!is_string($mode)) { + $hash = calculer_action_auteur("$action-$arg", is_numeric($att) ? $att : null); $r = rawurlencode($redirect); - if ($mode===-1) - return array('action'=>$action,'arg'=>$arg,'hash'=>$hash); - else - return generer_url_action($action, "arg=$arg&hash=$hash" . (!$r ? '' : "&redirect=$r"), $mode, $public); + if ($mode === -1) { + return array('action' => $action, 'arg' => $arg, 'hash' => $hash); + } else { + return generer_url_action($action, "arg=" . rawurlencode($arg) . "&hash=$hash" . (!$r ? '' : "&redirect=$r"), + $mode, $public); + } } // mode formulaire $hash = calculer_action_auteur("$action-$arg"); $att .= " style='margin: 0px; border: 0px'"; - if ($redirect) - $redirect = "\n\t\t"; + if ($redirect) { + $redirect = "\n\t\t"; + } $mode .= $redirect . " "; @@ -94,46 +123,50 @@ function securiser_action_auteur($action, $arg, $redirect="", $mode=false, $att= /** * Caracteriser un auteur : l'auteur loge si $id_auteur=null * - * http://doc.spip.org/@caracteriser_auteur - * * @param int|null $id_auteur * @return array */ -function caracteriser_auteur($id_auteur=null) { +function caracteriser_auteur($id_auteur = null) { static $caracterisation = array(); - if (is_null($id_auteur) AND !isset($GLOBALS['visiteur_session']['id_auteur'])) { - // si l'auteur courant n'est pas connu alors qu'il peut demander une action - // c'est une connexion par php_auth ou 1 instal, on se rabat sur le cookie. - // S'il n'avait pas le droit de realiser cette action, le hash sera faux. + if (is_null($id_auteur) and !isset($GLOBALS['visiteur_session']['id_auteur'])) { + // si l'auteur courant n'est pas connu alors qu'il peut demander une action + // c'est une connexion par php_auth ou 1 instal, on se rabat sur le cookie. + // S'il n'avait pas le droit de realiser cette action, le hash sera faux. if (isset($_COOKIE['spip_session']) - AND (preg_match('/^(\d+)/',$_COOKIE['spip_session'],$r))) { - return array($r[1], ''); - // Necessaire aux forums anonymes. - // Pour le reste, ca echouera. - } else return array('0',''); + and (preg_match('/^(\d+)/', $_COOKIE['spip_session'], $r)) + ) { + return array($r[1], ''); + // Necessaire aux forums anonymes. + // Pour le reste, ca echouera. + } else { + return array('0', ''); + } } // Eviter l'acces SQL si le pass est connu de PHP - if (is_null($id_auteur)){ - $id_auteur = isset($GLOBALS['visiteur_session']['id_auteur'])?$GLOBALS['visiteur_session']['id_auteur']:0; - if (isset($GLOBALS['visiteur_session']['pass']) AND $GLOBALS['visiteur_session']['pass']) + if (is_null($id_auteur)) { + $id_auteur = isset($GLOBALS['visiteur_session']['id_auteur']) ? $GLOBALS['visiteur_session']['id_auteur'] : 0; + if (isset($GLOBALS['visiteur_session']['pass']) and $GLOBALS['visiteur_session']['pass']) { return $caracterisation[$id_auteur] = array($id_auteur, $GLOBALS['visiteur_session']['pass']); + } } - if (isset($caracterisation[$id_auteur])) return $caracterisation[$id_auteur]; + if (isset($caracterisation[$id_auteur])) { + return $caracterisation[$id_auteur]; + } if ($id_auteur) { include_spip('base/abstract_sql'); $t = sql_fetsel("id_auteur, pass", "spip_auteurs", "id_auteur=$id_auteur"); - if ($t) + if ($t) { return $caracterisation[$id_auteur] = array($t['id_auteur'], $t['pass']); + } include_spip('inc/minipres'); echo minipres(); exit; - } - // Visiteur anonyme, pour ls forums par exemple + } // Visiteur anonyme, pour ls forums par exemple else { - return array('0',''); + return array('0', ''); } } @@ -142,8 +175,6 @@ function caracteriser_auteur($id_auteur=null) { * utilisee pour generer des urls personelles pour executer une action qui modifie la base * et verifier la legitimite de l'appel a l'action * - * http://doc.spip.org/@_action_auteur - * * @param string $action * @param int $id_auteur * @param string $pass @@ -152,11 +183,11 @@ function caracteriser_auteur($id_auteur=null) { */ function _action_auteur($action, $id_auteur, $pass, $alea) { static $sha = array(); - if (!isset($sha[$id_auteur.$pass.$alea])){ - if (!isset($GLOBALS['meta'][$alea]) AND _request('exec')!=='install') { - include_spip('base/abstract_sql'); - $GLOBALS['meta'][$alea] = sql_getfetsel('valeur', 'spip_meta', "nom=" . sql_quote($alea)); - if (!($GLOBALS['meta'][$alea])) { + if (!isset($sha[$id_auteur . $pass . $alea])) { + if (!isset($GLOBALS['meta'][$alea]) and _request('exec') !== 'install') { + include_spip('inc/acces'); + charger_aleas(); + if (empty($GLOBALS['meta'][$alea])) { include_spip('inc/minipres'); echo minipres(); spip_log("$alea indisponible"); @@ -164,24 +195,25 @@ function _action_auteur($action, $id_auteur, $pass, $alea) { } } include_spip('auth/sha256.inc'); - $sha[$id_auteur.$pass.$alea] = _nano_sha256($id_auteur.$pass.@$GLOBALS['meta'][$alea]); + $sha[$id_auteur . $pass . $alea] = _nano_sha256($id_auteur . $pass . @$GLOBALS['meta'][$alea]); + } + if (function_exists('sha1')) { + return sha1($action . $sha[$id_auteur . $pass . $alea]); + } else { + return md5($action . $sha[$id_auteur . $pass . $alea]); } - if (function_exists('sha1')) - return sha1($action.$sha[$id_auteur.$pass.$alea]); - else - return md5($action.$sha[$id_auteur.$pass.$alea]); } /** * Calculer le hash qui signe une action pour un auteur - * http://doc.spip.org/@calculer_action_auteur * * @param string $action * @param int|null $id_auteur * @return string */ -function calculer_action_auteur($action, $id_auteur=null) { +function calculer_action_auteur($action, $id_auteur = null) { list($id_auteur, $pass) = caracteriser_auteur($id_auteur); + return _action_auteur($action, $id_auteur, $pass, 'alea_ephemere'); } @@ -189,7 +221,6 @@ function calculer_action_auteur($action, $id_auteur=null) { /** * Verifier le hash de signature d'une action * toujours exclusivement pour l'auteur en cours - * http://doc.spip.org/@verifier_action_auteur * * @param $action * @param $hash @@ -197,10 +228,13 @@ function calculer_action_auteur($action, $id_auteur=null) { */ function verifier_action_auteur($action, $hash) { list($id_auteur, $pass) = caracteriser_auteur(); - if ($hash == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere')) + if ($hash == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere')) { return true; - if ($hash == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere_ancien')) + } + if ($hash == _action_auteur($action, $id_auteur, $pass, 'alea_ephemere_ancien')) { return true; + } + return false; } @@ -214,42 +248,42 @@ function verifier_action_auteur($action, $hash) { * Le secret du site doit rester aussi secret que possible, et est eternel * On ne doit pas l'exporter * - * http://doc.spip.org/@secret_du_site - * * @return string */ function secret_du_site() { - if (!isset($GLOBALS['meta']['secret_du_site'])){ + if (!isset($GLOBALS['meta']['secret_du_site'])) { include_spip('base/abstract_sql'); $GLOBALS['meta']['secret_du_site'] = sql_getfetsel('valeur', 'spip_meta', "nom='secret_du_site'"); } if (!isset($GLOBALS['meta']['secret_du_site']) - OR (strlen($GLOBALS['meta']['secret_du_site'])<64)) { + or (strlen($GLOBALS['meta']['secret_du_site']) < 64) + ) { include_spip('inc/acces'); include_spip('auth/sha256.inc'); - ecrire_meta('secret_du_site', _nano_sha256($_SERVER["DOCUMENT_ROOT"] . $_SERVER["SERVER_SIGNATURE"] . creer_uniqid()), 'non'); + ecrire_meta('secret_du_site', + _nano_sha256($_SERVER["DOCUMENT_ROOT"] . $_SERVER["SERVER_SIGNATURE"] . creer_uniqid()), 'non'); lire_metas(); // au cas ou ecrire_meta() ne fonctionne pas } + return $GLOBALS['meta']['secret_du_site']; } /** * Calculer une signature valable pour une action et pour le site - * http://doc.spip.org/@calculer_cle_action * * @param string $action * @return string */ function calculer_cle_action($action) { - if (function_exists('sha1')) + if (function_exists('sha1')) { return sha1($action . secret_du_site()); - else + } else { return md5($action . secret_du_site()); + } } /** * Verifier la cle de signature d'une action valable pour le site - * http://doc.spip.org/@verifier_cle_action * * @param string $action * @param string $cle @@ -259,4 +293,90 @@ function verifier_cle_action($action, $cle) { return ($cle == calculer_cle_action($action)); } -?> + +/** + * Calculer le token de prévisu + * + * Il permettra de transmettre une URL publique d’un élément non encore publié, + * pour qu’une personne tierce le relise. Valable quelques temps. + * + * @see verifier_token_previsu() + * @param string $url Url à autoriser en prévisu + * @param int|null id_auteur qui génère le token de prévisu. Null utilisera auteur courant. + * @param string $alea Nom de l’alea à utiliser + * @return string Token, de la forme "{id}*{hash}" + */ +function calculer_token_previsu($url, $id_auteur = null, $alea = 'alea_ephemere') { + if (is_null($id_auteur)) { + if (!empty($GLOBALS['visiteur_session']['id_auteur'])) { + $id_auteur = $GLOBALS['visiteur_session']['id_auteur']; + } + } + if (!$id_auteur = intval($id_auteur)) { + return ""; + } + // On nettoie l’URL de tous les var_. + $url = nettoyer_uri_var($url); + + $token = _action_auteur('previsualiser-' . $url, $id_auteur, null, $alea); + return "$id_auteur-$token"; +} + + +/** + * Vérifie un token de prévisu + * + * Découpe le token pour avoir l’id_auteur, + * Retrouve à partir de l’url un objet/id_objet en cours de parcours + * Recrée un token pour l’auteur et l’objet trouvé et le compare au token. + * + * @see calculer_token_previsu() + * @param string $token Token, de la forme '{id}*{hash}' + * @return false|array + * - `False` si echec, + * + Tableau (id auteur, type d’objet, id_objet) sinon. + */ +function verifier_token_previsu($token) { + // retrouver auteur / hash + $e = explode('-', $token, 2); + if (count($e) == 2 and is_numeric(reset($e))) { + $id_auteur = intval(reset($e)); + } else { + return false; + } + + // calculer le type et id de l’url actuelle + include_spip('inc/urls'); + include_spip('inc/filtres_mini'); + $url = url_absolue(self()); + + // verifier le token + $_token = calculer_token_previsu($url, $id_auteur, 'alea_ephemere'); + if (!$_token or $token !== $_token) { + $_token = calculer_token_previsu($url, $id_auteur, 'alea_ephemere_ancien'); + if (!$_token or $token !== $_token) { + return false; + } + } + + return array( + 'id_auteur' => $id_auteur, + ); +} + +/** + * Décrire un token de prévisu en session + * @uses verifier_token_previsu() + * @return bool|array + */ +function decrire_token_previsu() { + static $desc = null; + if (is_null($desc)) { + if ($token = _request('var_previewtoken')) { + $desc = verifier_token_previsu($token); + } else { + $desc = false; + } + } + return $desc; +} \ No newline at end of file diff --git a/www/ecrire/inc/selectionner.php b/www/ecrire/inc/selectionner.php index f2ddb6f0..b94c537d 100644 --- a/www/ecrire/inc/selectionner.php +++ b/www/ecrire/inc/selectionner.php @@ -3,25 +3,54 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion le l'affichage du sélecteur de rubrique AJAX + * + * @package SPIP\Core\Rubriques + **/ -include_spip('inc/filtres'); +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -// -// Affiche un mini-navigateur ajax positionne sur la rubrique $sel -// +include_spip('inc/filtres'); -// http://doc.spip.org/@inc_selectionner_dist -function inc_selectionner_dist ($sel, $idom="", $exclus=0, $aff_racine=false, $recur=true, $do='aff') { - if ($recur) $recur = mini_hier($sel); else $sel = 0; +/** + * Affiche un mini-navigateur ajax positionné sur une rubrique + * + * @uses mini_hier() + * @uses construire_selectionner_hierarchie() + * @uses inc_plonger_dist() + * + * @see exec_rechercher_dist() + * + * @param int $sel + * Identifiant de la rubrique + * @param string $idom + * Identifiant dans le dom de l'élément + * @param int $exclus + * @param bool $aff_racine + * @param bool $recur + * @param string $do + * Type d'action + * @return string + * Code HTML + **/ +function inc_selectionner_dist($sel, $idom = "", $exclus = 0, $aff_racine = false, $recur = true, $do = 'aff') { + + if ($recur) { + $recur = mini_hier($sel); + } else { + $sel = 0; + } if ($aff_racine) { $info = generer_url_ecrire('informer', "type=rubrique&rac=$idom&do=$do&id="); @@ -30,97 +59,116 @@ function inc_selectionner_dist ($sel, $idom="", $exclus=0, $aff_racine=false, $r $onClick = "jQuery(this).parent().addClass('on');jQuery('#choix_parent_principal .on').removeClass('on'); aff_selection(0, '$idom3', '$info', event);return false;"; $ondbClick = strtr(str_replace("'", "’", - str_replace('"', """, - textebrut(_T('info_racine_site')))), - "\n\r", " "); + str_replace('"', """, + textebrut(_T('info_racine_site')))), + "\n\r", " "); $js_func = $do . '_selection_titre'; $ondbClick = "$js_func('$ondbClick',0,'selection_rubrique','id_parent');"; $aff_racine = ""; + . "\">" + . _T("info_racine_site") + . ""; } - $url_init = generer_url_ecrire('plonger',"rac=$idom&exclus=$exclus&id=0&col=1&do=$do"); + $url_init = generer_url_ecrire('plonger', "rac=$idom&exclus=$exclus&id=0&col=1&do=$do"); $plonger = charger_fonction('plonger', 'inc'); $plonger_r = $plonger($sel, $idom, $recur, 1, $exclus, $do); // url completee par la fonction JS onkeypress_rechercher $url = generer_url_ecrire('rechercher', "exclus=$exclus&rac=$idom&do=$do&type="); + return construire_selectionner_hierarchie($idom, $plonger_r, $aff_racine, $url, 'id_parent', $url_init); } -// http://doc.spip.org/@construire_selectionner_hierarchie -function construire_selectionner_hierarchie($idom, $liste, $racine, $url, $name, $url_init='') -{ - global $spip_lang_right; +/** + * Construit le sélectionneur de hierarchie + * + * @param string $idom + * Identifiant dans le dom de l'élément + * @param string $liste + * @param int $racine + * @param string $url + * @param string $name + * @param string $url_init + * @return string + * Code HTML + **/ +function construire_selectionner_hierarchie($idom, $liste, $racine, $url, $name, $url_init = '') { $idom1 = $idom . "_champ_recherche"; $idom2 = $idom . "_principal"; $idom3 = $idom . "_selection"; $idom4 = $idom . "_col_1"; $idom5 = 'img_' . $idom4; - $idom6 = $idom."_fonc"; + $idom6 = $idom . "_fonc"; return "
    " . "" . "
    " - . http_img_pack("searching.gif", "*", "style='visibility: hidden;float:$spip_lang_right' id='$idom5'") + . http_img_pack("searching.gif", "*", + "style='visibility: hidden;float:" . $GLOBALS['spip_lang_right'] . "' id='$idom5'") . "" - . "" . "\n
    " - . ($racine?"
    $racine
    ":"") + . ($racine ? "
    $racine
    " : "") . "
    " . $liste . "
    \n
    \n"; } -// http://doc.spip.org/@mini_hier -function mini_hier ($id_rubrique) { - +/** + * Récupère les identifiants de hierarchie d'une rubrique + * + * @param int $id_rubrique + * @return array + * Liste de tous les id_parent de la rubrique + **/ +function mini_hier($id_rubrique) { + $liste = $id_rubrique; $id_rubrique = intval($id_rubrique); - while ($id_rubrique = sql_getfetsel("id_parent", "spip_rubriques", "id_rubrique = " . $id_rubrique)) + while ($id_rubrique = sql_getfetsel("id_parent", "spip_rubriques", "id_rubrique = " . $id_rubrique)) { $liste = $id_rubrique . ",$liste"; - return explode(',',"0,$liste"); -} + } -?> + return explode(',', "0,$liste"); +} diff --git a/www/ecrire/inc/session.php b/www/ecrire/inc/session.php index f19d06a1..3f806c0a 100644 --- a/www/ecrire/inc/session.php +++ b/www/ecrire/inc/session.php @@ -3,43 +3,52 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; - -/* +/** * Gestion de l'authentification par sessions - * a utiliser pour valider l'acces (bloquant) - * ou pour reconnaitre un utilisateur (non bloquant) + * à utiliser pour valider l'accès (bloquant) + * ou pour reconnaître un utilisateur (non bloquant) * + * @package SPIP\Core\Session */ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + + $GLOBALS['visiteur_session'] = array(); # globale decrivant l'auteur /** * 3 actions sur les sessions, selon le type de l'argument: + * * - numerique: efface toutes les sessions de l'auteur (retour quelconque) * - tableau: cree une session pour l'auteur decrit et retourne l'identifiant * - bool: predicat de validite de la session indiquee par le cookie * - * http://doc.spip.org/@inc_session_dist + * @uses supprimer_sessions() + * @uses ajouter_session() + * @uses verifier_session() * * @param int|array|bool $auteur * @return bool|null|void */ -function inc_session_dist($auteur=false) -{ - if (is_numeric($auteur)) +function inc_session_dist($auteur = false) { + if (is_numeric($auteur)) { return supprimer_sessions($auteur, $auteur > 0); - else if (is_array($auteur)) - return ajouter_session($auteur); - else - return verifier_session($auteur); + } else { + if (is_array($auteur)) { + return ajouter_session($auteur); + } else { + return verifier_session($auteur); + } + } } @@ -51,44 +60,37 @@ function inc_session_dist($auteur=false) * creees il y a plus de 4*_RENOUVELLE_ALEA * Tenir compte de l'ancien format ou les noms commencaient par "session_" * et du meme coup des repertoires plats + * * Attention : id_auteur peut etre negatif (cas des auteurs temporaires pendant le dump) * - * http://doc.spip.org/@supprimer_sessions + * @uses verifier_session() + * @uses fichier_session() + * @uses spip_session() * * @param int $id_auteur - * Identifiant d'auteur dont on veut supprimer les sessions + * Identifiant d'auteur dont on veut supprimer les sessions * @param bool $toutes - * Supprimer aussi les vieilles sessions des autres auteurs ? + * Supprimer aussi les vieilles sessions des autres auteurs ? * @param bool $actives - * false pour ne pas supprimer les sessions valides de $id_auteur. - * false revient donc a uniquement supprimer les vieilles sessions ! + * false pour ne pas supprimer les sessions valides de $id_auteur. + * false revient donc a uniquement supprimer les vieilles sessions ! */ -function supprimer_sessions($id_auteur, $toutes=true, $actives=true) { - - $nb_files = 0; - $nb_max_files = (defined('_MAX_NB_SESSIONS_OUVERTES')?_MAX_NB_SESSIONS_OUVERTES:1000); - spip_log("supprimer sessions auteur $id_auteur"); - if ($toutes OR $id_auteur!==$GLOBALS['visiteur_session']['id_auteur']) { - if ($dir = opendir(_DIR_SESSIONS)){ - $t = $_SERVER['REQUEST_TIME'] - (4*_RENOUVELLE_ALEA); // 48h par defaut - $t_short = $_SERVER['REQUEST_TIME'] - max(_RENOUVELLE_ALEA/4,3*3600); // 3h par defaut - while(($f = readdir($dir)) !== false) { - $nb_files++; - if (preg_match(",^[^\d-]*(-?\d+)_\w{32}\.php[3]?$,", $f, $regs)){ +function supprimer_sessions($id_auteur, $toutes = true, $actives = true) { + + spip_log("supprimer sessions auteur $id_auteur", "session"); + if ($toutes or $id_auteur !== $GLOBALS['visiteur_session']['id_auteur']) { + if ($dir = opendir(_DIR_SESSIONS)) { + $t = time() - (4 * _RENOUVELLE_ALEA); + while (($f = readdir($dir)) !== false) { + if (preg_match(",^[^\d-]*(-?\d+)_\w{32}\.php[3]?$,", $f, $regs)) { $f = _DIR_SESSIONS . $f; - if (($actives AND $regs[1] == $id_auteur) OR ($t > filemtime($f))){ - spip_unlink($f); - } - // si il y a trop de sessions ouvertes, on purge les sessions anonymes de plus de 3H - // cd http://core.spip.org/issues/3276 - elseif($nb_files>$nb_max_files AND !intval($regs[1]) AND ($t_short > filemtime($f))){ + if (($actives and $regs[1] == $id_auteur) or ($t > filemtime($f))) { spip_unlink($f); } } } } - } - else { + } else { verifier_session(); spip_unlink(fichier_session('alea_ephemere', true)); } @@ -98,11 +100,17 @@ function supprimer_sessions($id_auteur, $toutes=true, $actives=true) { } /** - * Ajoute une session pour l'auteur decrit par un tableau issu d'un SELECT-SQL + * Ajoute une session pour l'auteur décrit par un tableau issu d'un SELECT-SQL * - * http://doc.spip.org/@ajouter_session + * @uses spip_php_session_start() Lorsque session anonyme + * @uses hash_env() + * @uses preparer_ecriture_session() + * @uses fichier_session() + * @uses ecrire_fichier_session() * * @param array $auteur + * Description de la session de l'auteur. Peut contenir (par exemple) + * les clés : id_auteur, nom, login, email, statut, lang, ... * @return bool|string */ function ajouter_session($auteur) { @@ -111,123 +119,197 @@ function ajouter_session($auteur) { // Attention un visiteur peut avoir une session et un id=0, // => ne pas melanger les sessions des differents visiteurs - $id_auteur = intval($auteur['id_auteur']); + $id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0; // Si ce n'est pas un inscrit (les inscrits ont toujours des choses en session) // on va vérifier s'il y a vraiment des choses à écrire - if (!$id_auteur){ + if (!$id_auteur) { // On supprime les données de base pour voir le contenu réel de la session $auteur_verif = $auteur; - if (isset($auteur_verif['id_auteur'])) unset($auteur_verif['id_auteur']); - if (isset($auteur_verif['hash_env'])) unset($auteur_verif['hash_env']); - if (isset($auteur_verif['ip_change'])) unset($auteur_verif['ip_change']); - if (isset($auteur_verif['date_session'])) unset($auteur_verif['date_session']); - + if (isset($auteur_verif['id_auteur'])) { + unset($auteur_verif['id_auteur']); + } + if (isset($auteur_verif['hash_env'])) { + unset($auteur_verif['hash_env']); + } + if (isset($auteur_verif['ip_change'])) { + unset($auteur_verif['ip_change']); + } + if (isset($auteur_verif['date_session'])) { + unset($auteur_verif['date_session']); + } + // Les variables vraiment nulle ne sont pas à prendre en compte non plus - foreach($auteur_verif as $variable=>$valeur){ - if ($valeur === null){ + foreach ($auteur_verif as $variable => $valeur) { + if ($valeur === null) { unset($auteur_verif[$variable]); } } - // Si après ça la session est vide et qu'on a pas de cookie session, on arrete - if (!$auteur_verif AND !isset($_COOKIE['spip_session'])){ + + // Si après ça la session est vide alors on supprime l'éventuel fichier et on arrête là + if (!$auteur_verif) { + if (isset($_COOKIE['spip_session']) and isset($_SESSION[$_COOKIE['spip_session']])) { + unset($_SESSION[$_COOKIE['spip_session']]); + } + if (isset($_COOKIE['spip_session'])) { + unset($_COOKIE['spip_session']); + } + return false; } } if (!isset($_COOKIE['spip_session']) - OR !preg_match(',^'.$id_auteur.'_,', $_COOKIE['spip_session'])){ - $_COOKIE['spip_session'] = $id_auteur.'_'.md5(uniqid(rand(),true)); - } - - $fichier_session = fichier_session('alea_ephemere'); - - // Si la session est vide alors on supprime l'éventuel fichier et on arrête là - if (!$id_auteur AND !$auteur_verif){ - if (@file_exists($fichier_session)) spip_unlink($fichier_session); - // unset le COOKIE de session - // car il est pris en compte dans spip_session() qui va croire a tort qu'on est pas un visiteur anonyme - unset($_COOKIE['spip_session']); - return false; + or !preg_match(',^' . $id_auteur . '_,', $_COOKIE['spip_session']) + ) { + $_COOKIE['spip_session'] = $id_auteur . '_' . md5(uniqid(rand(), true)); } // Maintenant on sait qu'on a des choses à écrire // On s'assure d'avoir au moins ces valeurs $auteur['id_auteur'] = $id_auteur; - if (!isset($auteur['hash_env'])) $auteur['hash_env'] = hash_env(); - if (!isset($auteur['ip_change'])) $auteur['ip_change'] = false; + if (!isset($auteur['hash_env'])) { + $auteur['hash_env'] = hash_env(); + } + if (!isset($auteur['ip_change'])) { + $auteur['ip_change'] = false; + } - if (!isset($auteur['date_session'])) $auteur['date_session'] = time(); - if (is_string($auteur['prefs'])) + if (!isset($auteur['date_session'])) { + $auteur['date_session'] = time(); + } + if (isset($auteur['prefs']) and is_string($auteur['prefs'])) { $auteur['prefs'] = unserialize($auteur['prefs']); + } - if (!ecrire_fichier_session($fichier_session, $auteur)) { - spip_log('Echec ecriture fichier session '.$fichier_session,_LOG_HS); - include_spip('inc/minipres'); - echo minipres(); - exit; + $fichier_session = ""; + + // les sessions anonymes sont stockees dans $_SESSION + if (!$id_auteur) { + spip_php_session_start(); + $_SESSION[$_COOKIE['spip_session']] = preparer_ecriture_session($auteur); } else { - include_spip('inc/cookie'); - $duree = _RENOUVELLE_ALEA * - (!isset($auteur['cookie']) - ? 2 : (is_numeric($auteur['cookie']) - ? $auteur['cookie'] : 20)); - spip_setcookie( - 'spip_session', - $_COOKIE['spip_session'], - time() + $duree - ); - spip_log("ajoute session $fichier_session cookie $duree"); - - # on en profite pour purger les vieilles sessions abandonnees - supprimer_sessions(0, true, false); - - return $_COOKIE['spip_session']; + $fichier_session = fichier_session('alea_ephemere'); + if (!ecrire_fichier_session($fichier_session, $auteur)) { + spip_log('Echec ecriture fichier session ' . $fichier_session, "session" . _LOG_HS); + include_spip('inc/minipres'); + echo minipres(); + exit; + } + // verifier et limiter le nombre maxi de sessions + // https://core.spip.net/issues/3807 + lister_sessions_auteur($id_auteur); + } + + // poser le cookie de session SPIP + include_spip('inc/cookie'); + $duree = definir_duree_cookie_session($auteur); + spip_setcookie( 'spip_session', $_COOKIE['spip_session'], time() + $duree); + spip_log("ajoute session $fichier_session cookie $duree", "session"); + + // Si on est admin, poser le cookie de correspondance + if (!function_exists('autoriser')) { + include_spip('inc/autoriser'); } + if (autoriser('ecrire','','',$auteur) and _DUREE_COOKIE_ADMIN) { + spip_setcookie('spip_admin', '@' . $auteur['login'], time() + max(_DUREE_COOKIE_ADMIN, $duree)); + } // sinon le supprimer ... + else { + spip_setcookie('spip_admin', '', 1); + } + + # on en profite pour purger les vieilles sessions anonymes abandonnees + # supprimer_sessions(0, true, false); + + return $_COOKIE['spip_session']; } +/** + * Calcule le temps de validité en seconde du cookie de session + * + * Applique un coefficient multiplicateur à la durée de renouvellement de l'alea + * (noté ensuite `dR`, valant 12h par défaut) pour déterminer la durée du cookie. + * + * - `2 * dR`, par défaut + * - `20 * dR` si le visiteur a indiqué vouloir rester connecté quelques jours + * sur le formulaire de login (la clé `cookie` vaut alors `oui`) + * - `c * dR`, un coeficient défini manuellement si la clé `cookie` est numérique + * + * @param array $auteur + * Description de l'auteur + * @return int + * Durée en secondes +**/ +function definir_duree_cookie_session($auteur) { + $coef = 2; + if (isset($auteur['cookie'])) { + if (is_numeric($auteur['cookie'])) { + $coef = $auteur['cookie']; + } else { + $coef = 20; + } + } + return (int)(_RENOUVELLE_ALEA * $coef); +} /** - * Verifie si le cookie spip_session indique une session valide. + * Vérifie si le cookie spip_session indique une session valide + * * Si oui, la decrit dans le tableau $visiteur_session et retourne id_auteur * La rejoue si IP change puis accepte le changement si $change=true * * Retourne false en cas d'echec, l'id_auteur de la session si defini, null sinon * - * http://doc.spip.org/@verifier_session + * @uses spip_php_session_start() Si session anonyme + * @uses fichier_session() + * @uses ajouter_session() + * @uses hash_env() * * @param bool $change * @return bool|int|null */ -function verifier_session($change=false) { +function verifier_session($change = false) { // si pas de cookie, c'est fichu - - if (!isset($_COOKIE['spip_session'])) + if (!isset($_COOKIE['spip_session'])) { return false; + } - // Tester avec alea courant - $fichier_session = fichier_session('alea_ephemere', true); + $fichier_session = ""; - if ($fichier_session AND @file_exists($fichier_session)) { - include($fichier_session); + // est-ce une session anonyme ? + if (!intval($_COOKIE['spip_session'])) { + spip_php_session_start(); + if (!isset($_SESSION[$_COOKIE['spip_session']]) or !is_array($_SESSION[$_COOKIE['spip_session']])) { + return false; + } + $GLOBALS['visiteur_session'] = $_SESSION[$_COOKIE['spip_session']]; } else { - // Sinon, tester avec alea precedent - $fichier_session = fichier_session('alea_ephemere_ancien', true); - if (!$fichier_session OR !@file_exists($fichier_session)) return false; - - // Renouveler la session avec l'alea courant - include($fichier_session); - spip_log('renouvelle session '.$GLOBALS['visiteur_session']['id_auteur']); - spip_unlink($fichier_session); - ajouter_session($GLOBALS['visiteur_session']); + // Tester avec alea courant + $fichier_session = fichier_session('alea_ephemere', true); + if ($fichier_session and @file_exists($fichier_session)) { + include($fichier_session); + } else { + // Sinon, tester avec alea precedent + $fichier_session = fichier_session('alea_ephemere_ancien', true); + if (!$fichier_session or !@file_exists($fichier_session)) { + return false; + } + + // Renouveler la session avec l'alea courant + include($fichier_session); + spip_log('renouvelle session ' . $GLOBALS['visiteur_session']['id_auteur'], "session"); + spip_unlink($fichier_session); + ajouter_session($GLOBALS['visiteur_session']); + } } // Compatibilite ascendante : auteur_session est visiteur_session si // c'est un auteur SPIP authentifie (tandis qu'un visiteur_session peut // n'etre qu'identifie, sans aucune authentification). - if ($GLOBALS['visiteur_session']['id_auteur']) + if (isset($GLOBALS['visiteur_session']['id_auteur']) and $GLOBALS['visiteur_session']['id_auteur']) { $GLOBALS['auteur_session'] = &$GLOBALS['visiteur_session']; + } // Si l'adresse IP change, inc/presentation mettra une balise image @@ -237,26 +319,34 @@ function verifier_session($change=false) { // sa victime, mais se ferait deconnecter par elle. if (hash_env() != $GLOBALS['visiteur_session']['hash_env']) { if (!$GLOBALS['visiteur_session']['ip_change']) { - define('_SESSION_REJOUER',rejouer_session()); + define('_SESSION_REJOUER', true); $GLOBALS['visiteur_session']['ip_change'] = true; ajouter_session($GLOBALS['visiteur_session']); - } else if ($change) { - spip_log("session non rejouee, vol de cookie ?"); + } else { + if ($change) { + spip_log("session non rejouee, vol de cookie ?", "session"); + } + } + } else { + if ($change) { + spip_log("rejoue session $fichier_session " . $_COOKIE['spip_session'], "session"); + if ($fichier_session) { + spip_unlink($fichier_session); + } + $GLOBALS['visiteur_session']['ip_change'] = false; + unset($_COOKIE['spip_session']); + ajouter_session($GLOBALS['visiteur_session']); } - } else if ($change) { - spip_log("rejoue session $fichier_session ".$_COOKIE['spip_session']); - spip_unlink($fichier_session); - $GLOBALS['visiteur_session']['ip_change'] = false; - unset($_COOKIE['spip_session']); - ajouter_session($GLOBALS['visiteur_session']); } // Si la session a ete initiee il y a trop longtemps, elle est annulee if (isset($GLOBALS['visiteur_session']) - AND defined('_AGE_SESSION_MAX') - AND _AGE_SESSION_MAX > 0 - AND time() - @$GLOBALS['visiteur_session']['date_session'] > _AGE_SESSION_MAX) { + and defined('_AGE_SESSION_MAX') + and _AGE_SESSION_MAX > 0 + and time() - @$GLOBALS['visiteur_session']['date_session'] > _AGE_SESSION_MAX + ) { unset($GLOBALS['visiteur_session']); + return false; } @@ -268,10 +358,13 @@ function verifier_session($change=false) { /** * Lire une valeur dans la session SPIP * - * http://doc.spip.org/@session_get + * @api + * @example `$login = session_get('login');` * * @param string $nom - * @return mixed + * Clé dont on souhaite la valeur + * @return mixed|null + * Valeur, si trouvée, `null` sinon. */ function session_get($nom) { return isset($GLOBALS['visiteur_session'][$nom]) ? $GLOBALS['visiteur_session'][$nom] : null; @@ -279,42 +372,103 @@ function session_get($nom) { /** - * Ajouter une donnee dans la session SPIP - * http://doc.spip.org/@session_set + * Ajouter une donnée dans la session SPIP + * + * @api + * @uses ajouter_session() + * @uses terminer_actualiser_sessions() Ajoute la fonction en fin de hit. * * @param string $nom * @param null $val - * @return void + * @return void|array */ -function session_set($nom, $val=null) { - - if (is_null($val)){ +function session_set($nom, $val = null) { + static $remove = array(); + static $actualiser_sessions = false; + if ($nom === false) { + return $remove; + } + if (is_null($val)) { // rien a faire - if (!isset($GLOBALS['visiteur_session'][$nom])) return; + if (!isset($GLOBALS['visiteur_session'][$nom])) { + return; + } unset($GLOBALS['visiteur_session'][$nom]); - } - else { + $remove[] = $nom; + } else { // On ajoute la valeur dans la globale $GLOBALS['visiteur_session'][$nom] = $val; + if ($remove) { + $remove = array_diff($remove, array($nom)); + } + } + if (!$actualiser_sessions) { + // il faut creer la session si on en a pas, la premiere fois + ajouter_session($GLOBALS['visiteur_session']); + // in register la fonction qui mettra a jour toutes les sessions en fin de hit + register_shutdown_function('terminer_actualiser_sessions'); + $actualiser_sessions = true; } +} - ajouter_session($GLOBALS['visiteur_session']); - actualiser_sessions($GLOBALS['visiteur_session']); +/** + * En fin de hit, synchroniser toutes les sessions + * + * @uses actualiser_sessions() + */ +function terminer_actualiser_sessions() { + // se remettre dans le dossier de travail au cas ou Apache a change + chdir(_ROOT_CWD); + // recuperer les variables a effacer + $remove = session_set(false); + // mettre a jour toutes les sessions + actualiser_sessions($GLOBALS['visiteur_session'], $remove); } + /** - * Mettre a jour les sessions existantes pour un auteur + * Mettre à jour les sessions existantes pour un auteur + * * Quand on modifie une fiche auteur on appelle cette fonction qui va - * mettre a jour les fichiers de session de l'auteur en question. - * (auteurs identifies seulement) + * mettre à jour les fichiers de session de l'auteur en question. + * (auteurs identifiés seulement) + * + * Ne concerne que les sessions des auteurs loges (id_auteur connu) * - * http://doc.spip.org/@actualiser_sessions + * @uses ajouter_session() + * @uses fichier_session() + * @uses preg_files() + * @uses preparer_ecriture_session() + * @uses ecrire_fichier_session() * * @param array $auteur + * @param array $supprimer_cles + * Liste des clés à supprimer des tableaux de sessions */ -function actualiser_sessions($auteur) { - if (!$id_auteur = intval($auteur['id_auteur'])) +function actualiser_sessions($auteur, $supprimer_cles = array()) { + + $id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0; + $id_auteur_courant = isset($GLOBALS['visiteur_session']['id_auteur']) ? intval($GLOBALS['visiteur_session']['id_auteur']) : 0; + + // si l'auteur est celui de la session courante, verifier/creer la session si besoin + $fichier_session_courante = ""; + if ($id_auteur == $id_auteur_courant) { + $auteur = array_merge($GLOBALS['visiteur_session'], $auteur); + ajouter_session($auteur); + if ($id_auteur) { + $fichier_session_courante = fichier_session('alea_ephemere'); + } + } + + // si session anonyme on ne fait rien d'autre ici : les sessions anonymes sont non partagees + if (!$id_auteur) { return; + } + + // les préférences sont désérialisées, toujours. + if (isset($auteur['prefs']) and is_string($auteur['prefs'])) { + $auteur['prefs'] = unserialize($auteur['prefs']); + } // memoriser l'auteur courant (celui qui modifie la fiche) $sauve = $GLOBALS['visiteur_session']; @@ -322,37 +476,116 @@ function actualiser_sessions($auteur) { // .. mettre a jour les sessions de l'auteur cible // attention au $ final pour ne pas risquer d'embarquer un .php.jeton temporaire // cree par une ecriture concurente d'une session (fichier atomique temporaire) - $sessions = preg_files(_DIR_SESSIONS, '/'.$id_auteur.'_.*\.php$'); - foreach($sessions as $session) { + $sessions = lister_sessions_auteur($id_auteur); + + // 1ere passe : lire et fusionner les sessions + foreach ($sessions as $session) { $GLOBALS['visiteur_session'] = array(); // a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence) - if (@file_exists($session)){ + if ($session !== $fichier_session_courante + and @file_exists($session) + ) { include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible $auteur = array_merge($GLOBALS['visiteur_session'], $auteur); - ecrire_fichier_session($session, $auteur); } } - // restaurer l'auteur courant - $GLOBALS['visiteur_session'] = $sauve; + // supprimer les eventuelles cles dont on ne veut plus + foreach ($supprimer_cles as $cle) { + unset($auteur[$cle]); + } + + $auteur_session = preparer_ecriture_session($auteur); + + // seconde passe : ecrire les sessions qui ne sont pas a jour + foreach ($sessions as $session) { + $GLOBALS['visiteur_session'] = array(); + // a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence) + if (@file_exists($session)) { + include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible + + // est-ce que cette session est a mettre a jour ? + if ($auteur_session != $GLOBALS['visiteur_session']) { + ecrire_fichier_session($session, $auteur); + } + } + } + + if ($id_auteur == $id_auteur_courant) { + $GLOBALS['visiteur_session'] = $auteur; + $GLOBALS['auteur_session'] = &$GLOBALS['visiteur_session']; + } else { + // restaurer l'auteur courant + $GLOBALS['visiteur_session'] = $sauve; + } - // si c'est le meme, rafraichir les valeurs - if (isset($sauve['id_auteur']) and $auteur['id_auteur'] == $sauve['id_auteur']) - verifier_session(); } /** - * Ecrire le fichier d'une session + * lister les sessions et en verifier le nombre maxi + * en supprimant les plus anciennes si besoin + * https://core.spip.net/issues/3807 * - * http://doc.spip.org/@ecrire_fichier_session + * @param int $id_auteur + * @param int $nb_max + * @return array + */ +function lister_sessions_auteur($id_auteur, $nb_max = null) { + + if (is_null($nb_max)) { + if (!defined('_NB_SESSIONS_MAX')) { + define('_NB_SESSIONS_MAX', 100); + } + $nb_max = _NB_SESSIONS_MAX; + } + + // liste des sessions + $sessions = preg_files(_DIR_SESSIONS, '/' . $id_auteur . '_.*\.php$'); + + // si on en a plus que la limite, supprimer les plus vieilles + // si ce ne sont pas des sessions anonymes car elles sont alors chacune differentes + if ($id_auteur + and count($sessions) > $nb_max) { + + // limiter le nombre de sessions ouvertes par un auteur + // filemtime sur les sessions + $sessions = array_flip($sessions); + + // 1ere passe : lire les filemtime + foreach ($sessions as $session => $z) { + if ($d = @filemtime($session) + ) { + $sessions[$session] = $d; + } else { + $sessions[$session] = 0; + } + } + + // les plus anciennes en premier + asort($sessions); + + $sessions = array_keys($sessions); + while (count($sessions) > $nb_max) { + $session = array_shift($sessions); + @unlink($session); + } + } + + return $sessions; +} + + +/** + * Préparer le tableau de session avant écriture * - * @param string $fichier + * Nettoyage de quelques variables sensibles, et appel d'un pipeline + * + * @pipeline preparer_fichier_session * @param array $auteur - * @return bool + * @return array */ -function ecrire_fichier_session($fichier, $auteur) { - +function preparer_ecriture_session($auteur) { $row = $auteur; // ne pas enregistrer ces elements de securite @@ -363,21 +596,36 @@ function ecrire_fichier_session($fichier, $auteur) { unset($auteur['alea_actuel']); unset($auteur['alea_futur']); - $auteur = pipeline('preparer_fichier_session',array('args'=>array('row'=>$row),'data'=>$auteur)); + $auteur = pipeline('preparer_fichier_session', array('args' => array('row' => $row), 'data' => $auteur)); // ne pas enregistrer les valeurs vraiment nulle dans le fichier - foreach($auteur as $variable=>$valeur){ - if ($valeur === null){ + foreach ($auteur as $variable => $valeur) { + if ($valeur === null) { unset($auteur[$variable]); } } - + + return $auteur; +} + +/** + * Ecrire le fichier d'une session + * + * @param string $fichier + * @param array $auteur + * @return bool + */ +function ecrire_fichier_session($fichier, $auteur) { + + $auteur = preparer_ecriture_session($auteur); + // enregistrer les autres donnees du visiteur - $texte = "<"."?php\n"; - foreach ($auteur as $var => $val) - $texte .= '$GLOBALS[\'visiteur_session\'][\''.$var.'\'] = ' - . var_export($val,true).";\n"; - $texte .= "?".">\n"; + $texte = "<" . "?php\n"; + foreach ($auteur as $var => $val) { + $texte .= '$GLOBALS[\'visiteur_session\'][\'' . $var . '\'] = ' + . var_export($val, true) . ";\n"; + } + $texte .= "?" . ">\n"; return ecrire_fichier($fichier, $texte); } @@ -386,63 +634,93 @@ function ecrire_fichier_session($fichier, $auteur) { /** * Calculer le nom du fichier session * - * http://doc.spip.org/@fichier_session - * * @param string $alea * @param bool $tantpis * @return string */ -function fichier_session($alea, $tantpis=false) { +function fichier_session($alea, $tantpis = false) { - if (!isset($GLOBALS['meta'][$alea])) { - include_spip('base/abstract_sql'); - $GLOBALS['meta'][$alea] = sql_getfetsel('valeur', 'spip_meta', "nom=" . sql_quote($alea), '','', '', '', '', 'continue'); - } + include_spip('inc/acces'); + charger_aleas(); - if (!$GLOBALS['meta'][$alea]) { + if (empty($GLOBALS['meta'][$alea])) { if (!$tantpis) { - spip_log("fichier session ($tantpis): $alea indisponible"); + spip_log("fichier session ($tantpis): $alea indisponible", "session"); include_spip('inc/minipres'); echo minipres(); } + return ''; // echec mais $tanpis - } - else { - $repertoire = sous_repertoire(_DIR_SESSIONS,'',false,$tantpis); + } else { + $repertoire = sous_repertoire(_DIR_SESSIONS, '', false, $tantpis); $c = $_COOKIE['spip_session']; - return $repertoire . intval($c) .'_' . md5($c.' '.$GLOBALS['meta'][$alea]). '.php'; + + return $repertoire . intval($c) . '_' . md5($c . ' ' . $GLOBALS['meta'][$alea]) . '.php'; } } /** - * Code a inserer par inc/presentation pour rejouer la session - * Voir action/cookie qui sera appele. - * Pourquoi insere-t-on le src par js et non directement en statique dans le HTML ? - * Historiquement, insere par une balise + "; // on l'insere juste avant , sinon tout en bas - if (is_null($l = strpos($page, ''))) + if (is_null($l = strpos($page, ''))) { $l = strlen($page); + } $page = substr_replace($page, $script, $l, 0); break; } + } + return $page; } - -?> diff --git a/www/ecrire/inc/texte.php b/www/ecrire/inc/texte.php index c64532eb..b7fcda55 100644 --- a/www/ecrire/inc/texte.php +++ b/www/ecrire/inc/texte.php @@ -3,14 +3,22 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des textes et raccourcis SPIP + * + * @package SPIP\Core\Texte + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/texte_mini'); include_spip('inc/lien'); @@ -20,31 +28,53 @@ include_spip('inc/lien'); * */ -// Raccourcis dependant du sens de la langue -function definir_raccourcis_alineas(){ - return array('',''); +/** + * Raccourcis dépendant du sens de la langue + * + * @return array Tablea ('','') + */ +function definir_raccourcis_alineas() { + return array('', ''); } -// -// Tableaux -// -// http://doc.spip.org/@traiter_tableau +/** + * Traitement des raccourcis de tableaux + * + * Ne fait rien ici. Voir plugin Textwheel. + * + * @param string $bloc + * @return string + */ function traiter_tableau($bloc) { return $bloc; } -// -// Traitement des listes (merci a Michael Parienti) -// -// http://doc.spip.org/@traiter_listes -function traiter_listes ($texte) { +/** + * Traitement des listes + * + * Ne fais rien. Voir Plugin Textwheel. + * (merci a Michael Parienti) + * + * @param string $texte + * @return string + */ +function traiter_listes($texte) { return $texte; } -// Nettoie un texte, traite les raccourcis autre qu'URL, la typo, etc. -// http://doc.spip.org/@traiter_raccourcis +/** + * Nettoie un texte, traite les raccourcis autre qu'URL, la typo, etc. + * + * Ne fais rien ici. Voir plugin Textwheel. + * + * @pipeline_appel pre_propre + * @pipeline_appel post_propre + * + * @param string $letexte + * @return string + */ function traiter_raccourcis($letexte) { // Appeler les fonctions de pre_traitement @@ -63,63 +93,87 @@ function traiter_raccourcis($letexte) { * Fonctions utilisees en dehors de inc/texte */ -// afficher joliment les $noscript" - : ''; + return ($src or $script or $noscript) + ? "$noscript" + : ''; } -// Transforme n'importe quel champ en une chaine utilisable -// en PHP ou Javascript en toute securite -// < ? php $x = '[(#TEXTE|texte_script)]'; ? > -// http://doc.spip.org/@texte_script + +/** + * Sécurise du texte à écrire dans du PHP ou du Javascript. + * + * Transforme n'importe quel texte en une chaîne utilisable + * en PHP ou Javascript en toute sécurité, à l'intérieur d'apostrophes + * simples (`'` uniquement ; pas `"`) + * + * Utile particulièrement en filtre dans un squelettes + * pour écrire un contenu dans une variable JS ou PHP. + * + * Échappe les apostrophes (') du contenu transmis. + * + * @link http://www.spip.net/4281 + * @example + * PHP dans un squelette + * ``` + * $x = '[(#TEXTE|texte_script)]'; + * ``` + * + * JS dans un squelette (transmettre une chaîne de langue) + * ``` + * $x = '<:afficher_calendrier|texte_script:>'; + * ``` + * + * @filtre + * @param string $texte + * Texte à échapper + * @return string + * Texte échappé + **/ function texte_script($texte) { return str_replace('\'', '\\\'', str_replace('\\', '\\\\', $texte)); } -// Chaque appel a cette fonction ajoute un repertoire en tete du chemin courant (path) -// si un repertoire lui est passe en parametre -// retourne le chemin courant sinon, sous forme de array. -// Si l'argument est de la forme dir1:dir2:dir3, ces 3 chemins sont places en tete -// du path, dans cet ordre. -// Exception: si un $dossier_squelette est defini, il reste en tete, pour raison historique -// http://doc.spip.org/@_chemin -function _chemin($dir_path=NULL){ - static $path_base = NULL; - static $path_full = NULL; - if ($path_base==NULL){ + +/** + * Gestion des chemins (ou path) de recherche de fichiers par SPIP + * + * Empile de nouveaux chemins (à la suite de ceux déjà présents, mais avant + * le répertoire `squelettes` ou les dossiers squelettes), si un répertoire + * (ou liste de répertoires séparés par `:`) lui est passé en paramètre. + * + * Ainsi, si l'argument est de la forme `dir1:dir2:dir3`, ces 3 chemins sont placés + * en tête du path, dans cet ordre (hormis `squelettes` & la globale + * `$dossier_squelette` si définie qui resteront devant) + * + * Retourne dans tous les cas la liste des chemins. + * + * @note + * Cette fonction est appelée à plusieurs endroits et crée une liste + * de chemins finale à peu près de la sorte : + * + * - dossiers squelettes (si globale précisée) + * - squelettes/ + * - plugins (en fonction de leurs dépendances) : ceux qui dépendent + * d'un plugin sont devant eux (ils peuvent surcharger leurs fichiers) + * - racine du site + * - squelettes-dist/ + * - prive/ + * - ecrire/ + * + * @param string $dir_path + * - Répertoire(s) à empiler au path + * - '' provoque un recalcul des chemins. + * @return array + * Liste des chemins, par ordre de priorité. + **/ +function _chemin($dir_path = null) { + static $path_base = null; + static $path_full = null; + if ($path_base == null) { // Chemin standard depuis l'espace public $path = defined('_SPIP_PATH') ? _SPIP_PATH : - _DIR_RACINE.':'. - _DIR_RACINE.'squelettes-dist/:'. - _DIR_RACINE.'prive/:'. + _DIR_RACINE . ':' . + _DIR_RACINE . 'squelettes-dist/:' . + _DIR_RACINE . 'prive/:' . _DIR_RESTREINT; // Ajouter squelettes/ - if (@is_dir(_DIR_RACINE.'squelettes')) - $path = _DIR_RACINE.'squelettes/:' . $path; + if (@is_dir(_DIR_RACINE . 'squelettes')) { + $path = _DIR_RACINE . 'squelettes/:' . $path; + } foreach (explode(':', $path) as $dir) { - if (strlen($dir) AND substr($dir,-1) != '/') + if (strlen($dir) and substr($dir, -1) != '/') { $dir .= "/"; + } $path_base[] = $dir; } $path_full = $path_base; // Et le(s) dossier(s) des squelettes nommes - if (strlen($GLOBALS['dossier_squelettes'])) - foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) + if (strlen($GLOBALS['dossier_squelettes'])) { + foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) { array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/'); + } + } $GLOBALS['path_sig'] = md5(serialize($path_full)); } - if ($dir_path===NULL) return $path_full; + if ($dir_path === null) { + return $path_full; + } - if (strlen($dir_path)){ + if (strlen($dir_path)) { $tete = ""; - if (reset($path_base)==_DIR_RACINE.'squelettes/') + if (reset($path_base) == _DIR_RACINE . 'squelettes/') { $tete = array_shift($path_base); - $dirs = array_reverse(explode(':',$dir_path)); - foreach($dirs as $dir_path){ - #if ($dir_path{0}!='/') - # $dir_path = $dir_path; - if (substr($dir_path,-1) != '/') - $dir_path .= "/"; - if (!in_array($dir_path,$path_base)) - array_unshift($path_base,$dir_path); - } - if (strlen($tete)) - array_unshift($path_base,$tete); + } + $dirs = array_reverse(explode(':', $dir_path)); + foreach ($dirs as $dir_path) { + #if ($dir_path{0}!='/') + # $dir_path = $dir_path; + if (substr($dir_path, -1) != '/') { + $dir_path .= "/"; + } + if (!in_array($dir_path, $path_base)) { + array_unshift($path_base, $dir_path); + } + } + if (strlen($tete)) { + array_unshift($path_base, $tete); + } } $path_full = $path_base; // Et le(s) dossier(s) des squelettes nommes - if (strlen($GLOBALS['dossier_squelettes'])) - foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) - array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/'); + if (strlen($GLOBALS['dossier_squelettes'])) { + foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) { + array_unshift($path_full, ((isset($d[0]) and $d[0] == '/') ? '' : _DIR_RACINE) . $d . '/'); + } + } $GLOBALS['path_sig'] = md5(serialize($path_full)); + return $path_full; } -// http://doc.spip.org/@creer_chemin +/** + * Retourne la liste des chemins connus de SPIP, dans l'ordre de priorité + * + * Recalcule la liste si le nom ou liste de dossier squelettes a changé. + * + * @uses _chemin() + * + * @return array Liste de chemins + **/ function creer_chemin() { $path_a = _chemin(); static $c = ''; @@ -877,16 +1344,18 @@ function creer_chemin() { $c = $GLOBALS['dossier_squelettes']; $path_a = _chemin(''); // forcer un recalcul du chemin } + return $path_a; } -function lister_themes_prives(){ +function lister_themes_prives() { static $themes = null; - if (is_null($themes)){ + if (is_null($themes)) { // si pas encore definie - if (!defined('_SPIP_THEME_PRIVE')) + if (!defined('_SPIP_THEME_PRIVE')) { define('_SPIP_THEME_PRIVE', 'spip'); + } $themes = array(_SPIP_THEME_PRIVE); // lors d'une installation neuve, prefs n'est pas definie. if (isset($GLOBALS['visiteur_session']['prefs'])) { @@ -894,52 +1363,80 @@ function lister_themes_prives(){ } else { $prefs = array(); } - if (is_string($prefs)) + if (is_string($prefs)) { $prefs = unserialize($GLOBALS['visiteur_session']['prefs']); + } if ( - ((isset($prefs['theme']) AND $theme = $prefs['theme']) - OR (isset($GLOBALS['theme_prive_defaut']) AND $theme = $GLOBALS['theme_prive_defaut'])) - AND $theme != _SPIP_THEME_PRIVE) - array_unshift($themes,$theme); // placer le theme choisi en tete + ((isset($prefs['theme']) and $theme = $prefs['theme']) + or (isset($GLOBALS['theme_prive_defaut']) and $theme = $GLOBALS['theme_prive_defaut'])) + and $theme != _SPIP_THEME_PRIVE + ) { + array_unshift($themes, $theme); + } // placer le theme choisi en tete } + return $themes; } -function find_in_theme($file, $subdir='', $include=false){ - static $themefiles=array(); - if (isset($themefiles["$subdir$file"])) return $themefiles["$subdir$file"]; +function find_in_theme($file, $subdir = '', $include = false) { + static $themefiles = array(); + if (isset($themefiles["$subdir$file"])) { + return $themefiles["$subdir$file"]; + } $themes = lister_themes_prives(); - foreach($themes as $theme){ - if ($f = find_in_path($file,"prive/themes/$theme/$subdir",$include)) + foreach ($themes as $theme) { + if ($f = find_in_path($file, "prive/themes/$theme/$subdir", $include)) { return $themefiles["$subdir$file"] = $f; + } } - spip_log("$file introuvable dans le theme prive ".reset($themes),'theme'); + spip_log("$file introuvable dans le theme prive " . reset($themes), 'theme'); + return $themefiles["$subdir$file"] = ""; } -// Cherche une image dans les dossiers images -// gere le renommage des icones de facon temporaire (le temps de la migration) -// definis par _NOM_IMG_PACK et _DIR_IMG_PACK -// peut se trouver dans un dossier plugin, donc on passe par un find_in_path si elle n'est pas -// dans _DIR_IMG_PACK -// http://doc.spip.org/@chemin_image -function chemin_image($icone){ + +/** + * Cherche une image dans les dossiers d'images + * + * Cherche en priorité dans les thèmes d'image (prive/themes/X/images) + * et si la fonction n'en trouve pas, gère le renommage des icones (ex: 'supprimer' => 'del') + * de facon temporaire le temps de la migration, et cherche de nouveau. + * + * Si l'image n'est toujours pas trouvée, on la cherche dans les chemins, + * dans le répertoire défini par la constante `_NOM_IMG_PACK` + * + * @see find_in_theme() + * @see inc_icone_renommer_dist() + * + * @param string $icone + * Nom de l'icone cherchée + * @return string + * Chemin complet de l'icone depuis la racine si l'icone est trouée, + * sinon chaîne vide. + **/ +function chemin_image($icone) { static $icone_renommer; // gerer le cas d'un double appel en evitant de refaire le travail inutilement - if (strpos($icone,"/")!==false AND file_exists($icone)) return $icone; - + if (strpos($icone, "/") !== false and file_exists($icone)) { + return $icone; + } + // si c'est un nom d'image complet (article-24.png) essayer de le renvoyer direct - if (preg_match(',[.](png|gif|jpg)$,',$icone) AND $f = find_in_theme("images/$icone")) + if (preg_match(',[.](png|gif|jpg)$,', $icone) and $f = find_in_theme("images/$icone")) { return $f; + } // sinon passer par le module de renommage - if (is_null($icone_renommer)) - $icone_renommer = charger_fonction('icone_renommer','inc',true); - if ($icone_renommer){ - list($icone,$fonction) = $icone_renommer($icone,""); - if (file_exists($icone)) + if (is_null($icone_renommer)) { + $icone_renommer = charger_fonction('icone_renommer', 'inc', true); + } + if ($icone_renommer) { + list($icone, $fonction) = $icone_renommer($icone, ""); + if (file_exists($icone)) { return $icone; + } } - return find_in_path ($icone, _NOM_IMG_PACK); + + return find_in_path($icone, _NOM_IMG_PACK); } // @@ -949,81 +1446,118 @@ function chemin_image($icone){ $GLOBALS['path_sig'] = ''; $GLOBALS['path_files'] = null; -// http://doc.spip.org/@find_in_path -function find_in_path ($file, $dirname='', $include=false) { - static $dirs=array(); +/** + * Recherche un fichier dans les chemins de SPIP (squelettes, plugins, core) + * + * Retournera le premier fichier trouvé (ayant la plus haute priorité donc), + * suivant l'ordre des chemins connus de SPIP. + * + * @api + * @see charger_fonction() + * @uses creer_chemin() Pour la liste des chemins. + * @example + * ``` + * $f = find_in_path('css/perso.css'); + * $f = find_in_path('perso.css', 'css'); + * ``` + * + * @param string $file + * Fichier recherché + * @param string $dirname + * Répertoire éventuel de recherche (est aussi extrait automatiquement de $file) + * @param bool|string $include + * - false : ne fait rien de plus + * - true : inclut le fichier (include_once) + * - 'require' : idem, mais tue le script avec une erreur si le fichier n'est pas trouvé. + * @return string|bool + * - string : chemin du fichier trouvé + * - false : fichier introuvable + **/ +function find_in_path($file, $dirname = '', $include = false) { + static $dirs = array(); static $inc = array(); # cf http://trac.rezo.net/trac/spip/changeset/14743 static $c = ''; // on calcule le chemin si le dossier skel a change - if ($c != $GLOBALS['dossier_squelettes']){ + if ($c != $GLOBALS['dossier_squelettes']) { // assurer le non plantage lors de la montee de version : $c = $GLOBALS['dossier_squelettes']; creer_chemin(); // forcer un recalcul du chemin et la mise a jour de path_sig } if (isset($GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file])) { - if (!$GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]) + if (!$GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]) { return false; - if ($include AND !isset($inc[$dirname][$file])) { + } + if ($include and !isset($inc[$dirname][$file])) { include_once _ROOT_CWD . $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]; $inc[$dirname][$file] = $inc[''][$dirname . $file] = true; } + return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]; } - $a = strrpos($file,'/'); + $a = strrpos($file, '/'); if ($a !== false) { $dirname .= substr($file, 0, ++$a); $file = substr($file, $a); } - foreach(creer_chemin() as $dir) { - if (!isset($dirs[$a = $dir . $dirname])) - $dirs[$a] = (is_dir(_ROOT_CWD . $a) || !$a) ; + foreach (creer_chemin() as $dir) { + if (!isset($dirs[$a = $dir . $dirname])) { + $dirs[$a] = (is_dir(_ROOT_CWD . $a) || !$a); + } if ($dirs[$a]) { if (file_exists(_ROOT_CWD . ($a .= $file))) { - if ($include AND !isset($inc[$dirname][$file])) { + if ($include and !isset($inc[$dirname][$file])) { include_once _ROOT_CWD . $a; $inc[$dirname][$file] = $inc[''][$dirname . $file] = true; } - if (!defined('_SAUVER_CHEMIN')){ + if (!defined('_SAUVER_CHEMIN')) { // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher - if (is_null($GLOBALS['path_files'])) return $a; + if (is_null($GLOBALS['path_files'])) { + return $a; + } define('_SAUVER_CHEMIN', true); } + return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a; } } } - if ($include){ + if ($include) { spip_log("include_spip $dirname$file non trouve"); - if ($include==='required'){ + if ($include === 'required') { echo '
    ',
     			"Erreur Fatale
    "; - if (function_exists('debug_print_backtrace')) + if (function_exists('debug_print_backtrace')) { echo debug_print_backtrace(); + } echo '
    '; die("Erreur interne: ne peut inclure $dirname$file"); } } - if (!defined('_SAUVER_CHEMIN')){ + if (!defined('_SAUVER_CHEMIN')) { // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher - if (is_null($GLOBALS['path_files'])) return false; + if (is_null($GLOBALS['path_files'])) { + return false; + } define('_SAUVER_CHEMIN', true); } + return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false; } -function clear_path_cache(){ +function clear_path_cache() { $GLOBALS['path_files'] = array(); spip_unlink(_CACHE_CHEMIN); } -function load_path_cache(){ + +function load_path_cache() { // charger le path des plugins - if (@is_readable(_CACHE_PLUGINS_PATH)){ + if (@is_readable(_CACHE_PLUGINS_PATH)) { include_once(_CACHE_PLUGINS_PATH); } $GLOBALS['path_files'] = array(); @@ -1036,76 +1570,91 @@ function load_path_cache(){ // on blinde par un second test au moment de la lecture de la session // !isset($_COOKIE[$GLOBALS['cookie_prefix'].'_admin']) // et en ignorant ce cache en cas de recalcul explicite - !_request('var_mode') - ){ + !_request('var_mode') + ) { // on essaye de lire directement sans verrou pour aller plus vite - if ($contenu = spip_file_get_contents(_CACHE_CHEMIN)){ + if ($contenu = spip_file_get_contents(_CACHE_CHEMIN)) { // mais si semble corrompu on relit avec un verrou - if (!$GLOBALS['path_files']=unserialize($contenu)){ - lire_fichier(_CACHE_CHEMIN,$contenu); - if (!$GLOBALS['path_files']=unserialize($contenu)) + if (!$GLOBALS['path_files'] = unserialize($contenu)) { + lire_fichier(_CACHE_CHEMIN, $contenu); + if (!$GLOBALS['path_files'] = unserialize($contenu)) { $GLOBALS['path_files'] = array(); + } } } } } -function save_path_cache(){ +function save_path_cache() { if (defined('_SAUVER_CHEMIN') - AND _SAUVER_CHEMIN) - ecrire_fichier(_CACHE_CHEMIN,serialize($GLOBALS['path_files'])); + and _SAUVER_CHEMIN + ) { + ecrire_fichier(_CACHE_CHEMIN, serialize($GLOBALS['path_files'])); + } } /** - * Trouve tous les fichiers du path correspondants a un pattern - * pour un nom de fichier donne, ne retourne que le premier qui sera trouve - * par un find_in_path + * Trouve tous les fichiers du path correspondants à un pattern + * + * Pour un nom de fichier donné, ne retourne que le premier qui sera trouvé + * par un `find_in_path()` + * + * @api + * @uses creer_chemin() + * @uses preg_files() * * @param string $dir * @param string $pattern * @param bool $recurs * @return array */ -// http://doc.spip.org/@find_all_in_path -function find_all_in_path($dir,$pattern, $recurs=false){ - $liste_fichiers=array(); +function find_all_in_path($dir, $pattern, $recurs = false) { + $liste_fichiers = array(); $maxfiles = 10000; + // cas borderline si dans mes_options on appelle redirige_par_entete qui utilise _T et charge un fichier de langue + // on a pas encore inclus flock.php + if (!function_exists('preg_files')) { + include_once _ROOT_RESTREINT . 'inc/flock.php'; + } + // Parcourir le chemin foreach (creer_chemin() as $d) { - $f = $d.$dir; - if (@is_dir($f)){ - $liste = preg_files($f,$pattern,$maxfiles-count($liste_fichiers),$recurs===true?array():$recurs); - foreach($liste as $chemin){ + $f = $d . $dir; + if (@is_dir($f)) { + $liste = preg_files($f, $pattern, $maxfiles - count($liste_fichiers), $recurs === true ? array() : $recurs); + foreach ($liste as $chemin) { $nom = basename($chemin); // ne prendre que les fichiers pas deja trouves // car find_in_path prend le premier qu'il trouve, // les autres sont donc masques - if (!isset($liste_fichiers[$nom])) + if (!isset($liste_fichiers[$nom])) { $liste_fichiers[$nom] = $chemin; + } } } } + return $liste_fichiers; } -// predicat sur les scripts de ecrire qui n'authentifient pas par cookie +/** + * Prédicat sur les scripts de ecrire qui n'authentifient pas par cookie + * @param string $nom + * @return bool + */ +function autoriser_sans_cookie($nom) { + static $autsanscookie = array('install', 'base_repair'); + $nom = preg_replace('/.php[3]?$/', '', basename($nom)); -// http://doc.spip.org/@autoriser_sans_cookie -function autoriser_sans_cookie($nom) -{ - static $autsanscookie = array('install', 'base_repair'); - $nom = preg_replace('/.php[3]?$/', '', basename($nom)); - return in_array($nom, $autsanscookie); + return in_array($nom, $autsanscookie); } /** - * Fonction codant et decodant les URLS des objets SQL mis en page par SPIP - * - * http://doc.spip.org/@generer_url_entite - * + * Fonction codant et décodant les URLs des objets SQL mis en page par SPIP * + * @api * @param string $id * numero de la cle primaire si nombre, URL a decoder si pas numerique * @param string $entite @@ -1124,113 +1673,155 @@ function autoriser_sans_cookie($nom) * array : derogatoire, la fonction d'url retourne (objet,id_objet) utilises par nettoyer_raccourcis_typo() pour generer un lien titre * (cas des raccourcis personalises [->spip20] : il faut implementer une fonction generer_url_spip et une fonction generer_url_ecrire_spip) */ -function generer_url_entite($id='', $entite='', $args='', $ancre='', $public=NULL, $type=NULL) -{ - if ($public === NULL) $public = !test_espace_prive(); +function generer_url_entite($id = '', $entite = '', $args = '', $ancre = '', $public = null, $type = null) { + if ($public === null) { + $public = !test_espace_prive(); + } $entite = objet_type($entite); // cas particulier d'appels sur objet/id_objet... if (!$public) { - if (!$entite) return ''; - if (!function_exists('generer_url_ecrire_objet')) + if (!$entite) { + return ''; + } + if (!function_exists('generer_url_ecrire_objet')) { include_spip('inc/urls'); - $res = generer_url_ecrire_objet($entite,$id, $args, $ancre, false); + } + $res = generer_url_ecrire_objet($entite, $id, $args, $ancre, false); } else { - if ($type === NULL) { - $type = ($GLOBALS['type_urls'] === 'page' - AND $GLOBALS['meta']['type_urls']) - ? $GLOBALS['meta']['type_urls'] - : $GLOBALS['type_urls']; // pour SPIP <2 + if ($type === null) { + $type = (isset($GLOBALS['type_urls'])) + ? $GLOBALS['type_urls'] // pour surcharge via fichier d'options + : ((isset($GLOBALS['meta']['type_urls'])) // sinon la config url_etendues + ? ($GLOBALS['meta']['type_urls']) : "page"); // sinon type "page" par défaut } $f = charger_fonction($type, 'urls', true); // se rabattre sur les urls page si les urls perso non dispo - if (!$f) $f = charger_fonction('page', 'urls', true); + if (!$f) { + $f = charger_fonction('page', 'urls', true); + } // si $entite='', on veut la fonction de passage URL ==> id // sinon on veut effectuer le passage id ==> URL - if (!$entite) return $f; + if (!$entite) { + return $f; + } // mais d'abord il faut tester le cas des urls sur une // base distante if (is_string($public) - AND $g = charger_fonction('connect', 'urls', true)) + and $g = charger_fonction('connect', 'urls', true) + ) { $f = $g; + } $res = $f(intval($id), $entite, $args, $ancre, $public); } - if ($res) return $res; + if ($res) { + return $res; + } // Sinon c'est un raccourci ou compat SPIP < 2 if (!function_exists($f = 'generer_url_' . $entite)) { - if (!function_exists($f .= '_dist')) $f = ''; + if (!function_exists($f .= '_dist')) { + $f = ''; + } } if ($f) { $url = $f($id, $args, $ancre); - if (strlen($args)) + if (strlen($args)) { $url .= strstr($url, '?') - ? '&'.$args - : '?'.$args; + ? '&' . $args + : '?' . $args; + } + return $url; } // On a ete gentil mais la .... spip_log("generer_url_entite: entite $entite ($f) inconnue $type $public"); + return ''; } -function generer_url_ecrire_entite_edit($id, $entite, $args='', $ancre=''){ - $exec = objet_info($entite,'url_edit'); - $url = generer_url_ecrire($exec,$args); - if (intval($id)) - $url = parametre_url($url,id_table_objet($entite),$id); - else - $url = parametre_url($url,'new','oui'); - if ($ancre) - $url = ancre_url($url,$ancre); +function generer_url_ecrire_entite_edit($id, $entite, $args = '', $ancre = '') { + $exec = objet_info($entite, 'url_edit'); + $url = generer_url_ecrire($exec, $args); + if (intval($id)) { + $url = parametre_url($url, id_table_objet($entite), $id); + } else { + $url = parametre_url($url, 'new', 'oui'); + } + if ($ancre) { + $url = ancre_url($url, $ancre); + } + return $url; } -// http://doc.spip.org/@urls_connect_dist -function urls_connect_dist($i, &$entite, $args='', $ancre='', $public=null) { +// http://code.spip.net/@urls_connect_dist +function urls_connect_dist($i, &$entite, $args = '', $ancre = '', $public = null) { include_spip('base/connect_sql'); - $id_type = id_table_objet($entite,$public); + $id_type = id_table_objet($entite, $public); + return _DIR_RACINE . get_spip_script('./') - . "?"._SPIP_PAGE."=$entite&$id_type=$i&connect=$public" - . (!$args ? '' : "&$args") - . (!$ancre ? '' : "#$ancre"); + . "?" . _SPIP_PAGE . "=$entite&$id_type=$i&connect=$public" + . (!$args ? '' : "&$args") + . (!$ancre ? '' : "#$ancre"); } -// Transformer les caracteres utf8 d'une URL (farsi par ex) selon la RFC 1738 +/** + * Transformer les caractères utf8 d'une URL (farsi par exemple) selon la RFC 1738 + * + * @param string $url + * @return string + */ function urlencode_1738($url) { - if (preg_match(',[^\x00-\x7E],sS', $url)){ + if (preg_match(',[^\x00-\x7E],sS', $url)) { $uri = ''; - for ($i=0; $i < strlen($url); $i++) { - if (ord($a = $url[$i]) > 127) + for ($i = 0; $i < strlen($url); $i++) { + if (ord($a = $url[$i]) > 127) { $a = rawurlencode($a); + } $uri .= $a; } $url = $uri; } + return quote_amp($url); } -// http://doc.spip.org/@generer_url_entite_absolue -function generer_url_entite_absolue($id='', $entite='', $args='', $ancre='', $connect=NULL) -{ - if (!$connect) $connect = true; +// http://code.spip.net/@generer_url_entite_absolue +function generer_url_entite_absolue($id = '', $entite = '', $args = '', $ancre = '', $connect = null) { + if (!$connect) { + $connect = true; + } $h = generer_url_entite($id, $entite, $args, $ancre, $connect); if (!preg_match(',^\w+:,', $h)) { include_spip('inc/filtres_mini'); $h = url_absolue($h); } - return $h; + + return $h; } -// Sur certains serveurs, la valeur 'Off' tient lieu de false dans certaines -// variables d'environnement comme $_SERVER[HTTPS] ou ini_get(register_globals) -// http://doc.spip.org/@test_valeur_serveur + +/** + * Tester qu'une variable d'environnement est active + * + * Sur certains serveurs, la valeur 'Off' tient lieu de false dans certaines + * variables d'environnement comme $_SERVER[HTTPS] ou ini_get(register_globals) + * + * @param string|bool $truc + * La valeur de la variable d'environnement + * @return bool + * true si la valeur est considérée active ; false sinon. + **/ function test_valeur_serveur($truc) { - if (!$truc) return false; + if (!$truc) { + return false; + } + return (strtolower($truc) !== 'off'); } @@ -1238,41 +1829,59 @@ function test_valeur_serveur($truc) { // Fonctions de fabrication des URL des scripts de Spip // /** - * L'URL de base du site, en priorité sans se fier a meta(adresse_site) qui - * peut etre fausse (sites a plusieurs noms d'hotes, deplacements, erreurs). + * Calcule l'url de base du site + * + * Calcule l'URL de base du site, en priorité sans se fier à la méta (adresse_site) qui + * peut être fausse (sites avec plusieurs noms d’hôtes, déplacements, erreurs). * En dernier recours, lorsqu'on ne trouve rien, on utilise adresse_site comme fallback. - * Note : la globale $profondeur_url doit etre initialisee de maniere a - * indiquer le nombre de sous-repertoires de l'url courante par rapport a la - * racine de SPIP : par exemple, sur ecrire/ elle vaut 1, sur sedna/ 1, et a - * la racine 0. Sur url/perso/ elle vaut 2 - * http://doc.spip.org/@url_de_base + * + * @note + * La globale `$profondeur_url` doit être initialisée de manière à + * indiquer le nombre de sous-répertoires de l'url courante par rapport à la + * racine de SPIP : par exemple, sur ecrire/ elle vaut 1, sur sedna/ 1, et à + * la racine 0. Sur url/perso/ elle vaut 2 * * @param int|boo|array $profondeur - * si non renseignee : retourne l'url pour la profondeur $GLOBALS['profondeur_url'] - * si int : indique que l'on veut l'url pour la prondeur indiquee - * si bool : retourne le tableau static complet - * si array : reinitialise le tableau static complet avec la valeur fournie + * - si non renseignée : retourne l'url pour la profondeur $GLOBALS['profondeur_url'] + * - si int : indique que l'on veut l'url pour la profondeur indiquée + * - si bool : retourne le tableau static complet + * - si array : réinitialise le tableau static complet avec la valeur fournie * @return string|array */ -function url_de_base($profondeur=null) { +function url_de_base($profondeur = null) { static $url = array(); - if (is_array($profondeur)) return $url = $profondeur; - if ($profondeur===false) return $url; + if (is_array($profondeur)) { + return $url = $profondeur; + } + if ($profondeur === false) { + return $url; + } - if (is_null($profondeur)) $profondeur = $GLOBALS['profondeur_url']; + if (is_null($profondeur)) { + $profondeur = $GLOBALS['profondeur_url']; + } - if (isset($url[$profondeur])) + if (isset($url[$profondeur])) { return $url[$profondeur]; + } + + $http = 'http'; + + if ( + isset($_SERVER["SCRIPT_URI"]) + and substr($_SERVER["SCRIPT_URI"], 0, 5) == 'https' + ) { + $http = 'https'; + } elseif ( + isset($_SERVER['HTTPS']) + and test_valeur_serveur($_SERVER['HTTPS']) + ) { + $http = 'https'; + } - $http = ( - (isset($_SERVER["SCRIPT_URI"]) AND - substr($_SERVER["SCRIPT_URI"],0,5) == 'https') - OR (isset($_SERVER['HTTPS']) AND - test_valeur_serveur($_SERVER['HTTPS'])) - ) ? 'https' : 'http'; // note : HTTP_HOST contient le :port si necessaire - $host = $_SERVER['HTTP_HOST']; + $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : null; // si on n'a pas trouvé d'hôte du tout, en dernier recours on utilise adresse_site comme fallback if (is_null($host) and isset($GLOBALS['meta']['adresse_site'])) { $host = $GLOBALS['meta']['adresse_site']; @@ -1282,38 +1891,54 @@ function url_de_base($profondeur=null) { } } if (isset($_SERVER['SERVER_PORT']) - AND $port=$_SERVER['SERVER_PORT'] - AND strpos($host,":")==false){ - if ($http=="http" AND $port!=80) $host.=":$port"; - if ($http=="https" AND $port!=443) $host.=":$port"; + and $port = $_SERVER['SERVER_PORT'] + and strpos($host, ":") == false + ) { + if (!defined('_PORT_HTTP_STANDARD')) { + define('_PORT_HTTP_STANDARD', '80'); + } + if (!defined('_PORT_HTTPS_STANDARD')) { + define('_PORT_HTTPS_STANDARD', '443'); + } + if ($http == "http" and !in_array($port, explode(',', _PORT_HTTP_STANDARD))) { + $host .= ":$port"; + } + if ($http == "https" and !in_array($port, explode(',', _PORT_HTTPS_STANDARD))) { + $host .= ":$port"; + } } - if (!$GLOBALS['REQUEST_URI']){ + + if (!$GLOBALS['REQUEST_URI']) { if (isset($_SERVER['REQUEST_URI'])) { $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI']; } else { - $GLOBALS['REQUEST_URI'] = $_SERVER['PHP_SELF']; - if ($_SERVER['QUERY_STRING'] - AND !strpos($_SERVER['REQUEST_URI'], '?')) - $GLOBALS['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING']; + $GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : ''; + if (!empty($_SERVER['QUERY_STRING']) + and !strpos($_SERVER['REQUEST_URI'], '?') + ) { + $GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; + } } } - $url[$profondeur] = url_de_($http,$host,$GLOBALS['REQUEST_URI'],$profondeur); + $url[$profondeur] = url_de_($http, $host, $GLOBALS['REQUEST_URI'], $profondeur); return $url[$profondeur]; } + /** * fonction testable de construction d'une url appelee par url_de_base() + * * @param string $http * @param string $host * @param string $request * @param int $prof * @return string */ -function url_de_($http,$host,$request,$prof=0){ - $prof = max($prof,0); +function url_de_($http, $host, $request, $prof = 0) { + $prof = max($prof, 0); - $myself = ltrim($request,'/'); + $myself = ltrim($request, '/'); # supprimer la chaine de GET list($myself) = explode('?', $myself); // vieux mode HTTP qui envoie après le nom de la methode l'URL compléte @@ -1326,9 +1951,10 @@ function url_de_($http,$host,$request,$prof=0){ array_shift($myself); $myself = implode('/',$myself); } - $url = join('/', array_slice(explode('/', $myself), 0, -1-$prof)).'/'; + $url = join('/', array_slice(explode('/', $myself), 0, -1 - $prof)) . '/'; + + $url = $http . '://' . rtrim($host, '/') . '/' . ltrim($url, '/'); - $url = $http.'://'.rtrim($host,'/').'/'.ltrim($url,'/'); return $url; } @@ -1341,26 +1967,72 @@ function url_de_($http,$host,$request,$prof=0){ // Attention, X?y=z et "X/?y=z" sont completement differents! // http://httpd.apache.org/docs/2.0/mod/mod_dir.html -// http://doc.spip.org/@generer_url_ecrire -function generer_url_ecrire($script='', $args="", $no_entities=false, $rel=false) { - if (!$rel) +/** + * Crée une URL vers un script de l'espace privé + * + * @example + * ``` + * generer_url_ecrire('admin_plugin') + * ``` + * + * @param string $script + * Nom de la page privée (xx dans exec=xx) + * @param string $args + * Arguments à transmettre, tel que `arg1=yy&arg2=zz` + * @param bool $no_entities + * Si false : transforme les `&` en `&` + * @param bool|string $rel + * URL relative ? + * + * - false : l’URL sera complète et contiendra l’URL du site + * - true : l’URL sera relavive. + * - string : on transmet l'url à la fonction + * @return string URL + **/ +function generer_url_ecrire($script = '', $args = "", $no_entities = false, $rel = false) { + if (!$rel) { $rel = url_de_base() . _DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT; - else if (!is_string($rel)) - $rel = _DIR_RESTREINT ? _DIR_RESTREINT : - ('./' . _SPIP_ECRIRE_SCRIPT); + } else { + if (!is_string($rel)) { + $rel = _DIR_RESTREINT ? _DIR_RESTREINT : + ('./' . _SPIP_ECRIRE_SCRIPT); + } + } - @list($script, $ancre) = explode('#', $script); - if ($script AND ($script<>'accueil' OR $rel)) + list($script, $ancre) = array_pad(explode('#', $script), 2, null); + if ($script and ($script <> 'accueil' or $rel)) { $args = "?exec=$script" . (!$args ? '' : "&$args"); - elseif ($args) - $args ="?$args"; - if ($ancre) $args .= "#$ancre"; + } elseif ($args) { + $args = "?$args"; + } + if ($ancre) { + $args .= "#$ancre"; + } + return $rel . ($no_entities ? $args : str_replace('&', '&', $args)); } -// http://doc.spip.org/@generer_url_retour -function generer_url_retour($script, $args="") -{ +/** + * Permet d'ajouter lien vers une page privée à un paramètre d'url (déprécié) + * + * ``` + * // deprecié + * $h = generer_url_ecrire('article', "id_article=$id_article&redirect=" . generer_url_retour('articles')); + * // utiliser + * $h = generer_url_ecrire('article'); + * $h = parametre_url($h, 'id_article', $id_article); + * $h = parametre_url($h, 'redirect', generer_url_ecrire('articles')); + * ``` + * + * @deprecated Utiliser parametre_url() et generer_url_ecrire() + * @see parametre_url() + * @see generer_url_ecrire() + * + * @param string $script + * @param string $args + * @return string + */ +function generer_url_retour($script, $args = "") { return rawurlencode(generer_url_ecrire($script, $args, true, true)); } @@ -1368,46 +2040,88 @@ function generer_url_retour($script, $args="") // Adresse des scripts publics (a passer dans inc-urls...) // -// Detecter le fichier de base, a la racine, comme etant spip.php ou '' -// dans le cas de '', un $default = './' peut servir (comme dans urls/page.php) -// http://doc.spip.org/@get_spip_script -function get_spip_script($default='') { + +/** + * Retourne le nom du fichier d'exécution de SPIP + * + * @see _SPIP_SCRIPT + * @note + * Detecter le fichier de base, a la racine, comme etant spip.php ou '' + * dans le cas de '', un $default = './' peut servir (comme dans urls/page.php) + * + * @param string $default + * Script par défaut + * @return string + * Nom du fichier (constante _SPIP_SCRIPT), sinon nom par défaut + **/ +function get_spip_script($default = '') { # cas define('_SPIP_SCRIPT', ''); - if (_SPIP_SCRIPT) + if (_SPIP_SCRIPT) { return _SPIP_SCRIPT; - else + } else { return $default; + } } -// http://doc.spip.org/@generer_url_public -function generer_url_public($script='', $args="", $no_entities=false, $rel=true, $action='') { +/** + * Crée une URL vers une page publique de SPIP + * + * @example + * ``` + * generer_url_public("rubrique","id_rubrique=$id_rubrique") + * ``` + * + * @param string $script + * Nom de la page + * @param string|array $args + * Arguments à transmettre a l'URL, + * soit sous la forme d'un string tel que `arg1=yy&arg2=zz` + * soit sous la forme d'un array tel que array( `arg1` => `yy`, `arg2` => `zz` ) + * @param bool $no_entities + * Si false : transforme les `&` en `&` + * @param bool $rel + * URL relative ? + * + * - false : l’URL sera complète et contiendra l’URL du site + * - true : l’URL sera relavive. + * @param string $action + * - Fichier d'exécution public (spip.php par défaut) + * @return string URL + **/ +function generer_url_public($script = '', $args = "", $no_entities = false, $rel = true, $action = '') { // si le script est une action (spip_pass, spip_inscription), // standardiser vers la nouvelle API - if (!$action) $action = get_spip_script(); - if ($script) + if (!$action) { + $action = get_spip_script(); + } + if ($script) { $action = parametre_url($action, _SPIP_PAGE, $script, '&'); + } if ($args) { if (is_array($args)) { $r = ''; - foreach($args as $k => $v) $r .= '&' . $k . '=' . $v; - $args = substr($r,1); + foreach ($args as $k => $v) { + $r .= '&' . $k . '=' . $v; + } + $args = substr($r, 1); } $action .= (strpos($action, '?') !== false ? '&' : '?') . $args; } - if (!$no_entities) + if (!$no_entities) { $action = quote_amp($action); + } // ne pas generer une url avec /./?page= en cas d'url absolue et de _SPIP_SCRIPT vide - return ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(),'/') . preg_replace(",^/[.]/,","/","/$action")); + return ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(), '/') . preg_replace(",^/[.]/,", "/", "/$action")); } -// http://doc.spip.org/@generer_url_prive -function generer_url_prive($script, $args="", $no_entities=false) { +// http://code.spip.net/@generer_url_prive +function generer_url_prive($script, $args = "", $no_entities = false) { - return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS . 'prive.php'); + return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS . 'prive.php'); } // Pour les formulaires en methode POST, @@ -1415,9 +2129,22 @@ function generer_url_prive($script, $args="", $no_entities=false) { // 1) on peut ainsi memoriser le signet comme si c'etait un GET // 2) ca suit http://en.wikipedia.org/wiki/Representational_State_Transfer -// http://doc.spip.org/@generer_form_ecrire -function generer_form_ecrire($script, $corps, $atts='', $submit='') { - global $spip_lang_right; +/** + * Retourne un formulaire (POST par défaut) vers un script exec + * de l’interface privée + * + * @param string $script + * Nom de la page exec + * @param string $corps + * Contenu du formulaire + * @param string $atts + * Si présent, remplace les arguments par défaut (method=post) par ceux indiqués + * @param string $submit + * Si indiqué, un bouton de soumission est créé avec texte sa valeur. + * @return string + * Code HTML du formulaire + **/ +function generer_form_ecrire($script, $corps, $atts = '', $submit = '') { $script1 = explode('&', $script); $script1 = reset($script1); @@ -1426,21 +2153,20 @@ function generer_form_ecrire($script, $corps, $atts='', $submit='') { . ($script ? generer_url_ecrire($script) : '') . "' " . ($atts ? $atts : " method='post'") - . ">
    \n" + . ">
    \n" . "" . $corps . (!$submit ? '' : - ("
    ")) + ("
    ")) . "
    \n"; } /** - * Generer un formulaire pour lancer une action vers $script + * Générer un formulaire pour lancer une action vers $script * * Attention, JS/Ajax n'aime pas le melange de param GET/POST * On n'applique pas la recommandation ci-dessus pour les scripts publics * qui ne sont pas destines a etre mis en signets - * http://doc.spip.org/@generer_form_action * * @param string $script * @param string $corps @@ -1448,176 +2174,287 @@ function generer_form_ecrire($script, $corps, $atts='', $submit='') { * @param bool $public * @return string */ -function generer_form_action($script, $corps, $atts='', $public=false) { +function generer_form_action($script, $corps, $atts = '', $public = false) { // si l'on est dans l'espace prive, on garde dans l'url // l'exec a l'origine de l'action, qui permet de savoir si il est necessaire // ou non de proceder a l'authentification (cas typique de l'install par exemple) - $h = (_DIR_RACINE AND !$public) - ? generer_url_ecrire(_request('exec')) - : generer_url_public(); + $h = (_DIR_RACINE and !$public) + ? generer_url_ecrire(_request('exec')) + : generer_url_public(); return "\n
    \n" . - "
    " . - "\n" . - $corps . - "
    "; -} - -// http://doc.spip.org/@generer_url_action -function generer_url_action($script, $args="", $no_entities=false , $public = false) { + $h . + "'" . + $atts . + ">\n" . + "
    " . + "\n" . + $corps . + "
    "; +} + +/** + * Créer une URL + * + * @param string $script + * Nom du script à exécuter + * @param string $args + * Arguments à transmettre a l'URL sous la forme `arg1=yy&arg2=zz` + * @param bool $no_entities + * Si false : transforme les & en & + * @param boolean $public + * URL relative ? false : l’URL sera complète et contiendra l’URL du site. + * true : l’URL sera relative. + * @return string + * URL + */ +function generer_url_action($script, $args = "", $no_entities = false, $public = false) { // si l'on est dans l'espace prive, on garde dans l'url // l'exec a l'origine de l'action, qui permet de savoir si il est necessaire // ou non de proceder a l'authentification (cas typique de l'install par exemple) - $url = (_DIR_RACINE AND !$public) - ? generer_url_ecrire(_request('exec')) - : generer_url_public('','',false,false); - $url = parametre_url($url,'action',$script); - if ($args) $url .= quote_amp('&'.$args); + $url = (_DIR_RACINE and !$public) + ? generer_url_ecrire(_request('exec')) + : generer_url_public('', '', false, false); + $url = parametre_url($url, 'action', $script); + if ($args) { + $url .= quote_amp('&' . $args); + } + + if ($no_entities) { + $url = str_replace('&', '&', $url); + } - if ($no_entities) $url = str_replace('&','&',$url); return $url; } /** - * Fonction d'initialisation groupee pour compatibilite ascendante + * Fonction d'initialisation groupée pour compatibilité ascendante * - * @param string $pi - * @param string $pa - * @param string $ti - * @param string $ta + * @param string $pi Répertoire permanent inaccessible + * @param string $pa Répertoire permanent accessible + * @param string $ti Répertoire temporaire inaccessible + * @param string $ta Répertoire temporaire accessible */ -function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) { - spip_initialisation_core($pi,$pa,$ti,$ta); +function spip_initialisation($pi = null, $pa = null, $ti = null, $ta = null) { + spip_initialisation_core($pi, $pa, $ti, $ta); spip_initialisation_suite(); } /** - * Fonction d'initialisation, appellee dans inc_version ou mes_options - * Elle definit les repertoires et fichiers non partageables - * et indique dans $test_dirs ceux devant etre accessibles en ecriture - * mais ne touche pas a cette variable si elle est deja definie - * afin que mes_options.php puisse en specifier d'autres. - * Elle definit ensuite les noms des fichiers et les droits. - * Puis simule un register_global=on securise. + * Fonction d'initialisation, appellée dans inc_version ou mes_options * - * @param string $pi - * @param string $pa - * @param string $ti - * @param string $ta + * Elle définit les répertoires et fichiers non partageables + * et indique dans $test_dirs ceux devant être accessibles en écriture + * mais ne touche pas à cette variable si elle est déjà définie + * afin que mes_options.php puisse en spécifier d'autres. + * + * Elle définit ensuite les noms des fichiers et les droits. + * Puis simule un register_global=on sécurisé. + * + * @param string $pi Répertoire permanent inaccessible + * @param string $pa Répertoire permanent accessible + * @param string $ti Répertoire temporaire inaccessible + * @param string $ta Répertoire temporaire accessible */ -function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) { +function spip_initialisation_core($pi = null, $pa = null, $ti = null, $ta = null) { static $too_late = 0; - if ($too_late++) return; - + if ($too_late++) { + return; + } + // Declaration des repertoires // le nom du repertoire plugins/ activables/desactivables - if (!defined('_DIR_PLUGINS')) define('_DIR_PLUGINS', _DIR_RACINE . "plugins/"); + if (!defined('_DIR_PLUGINS')) { + define('_DIR_PLUGINS', _DIR_RACINE . "plugins/"); + } // le nom du repertoire des extensions/ permanentes du core, toujours actives - if (!defined('_DIR_PLUGINS_DIST')) define('_DIR_PLUGINS_DIST', _DIR_RACINE . "plugins-dist/"); + if (!defined('_DIR_PLUGINS_DIST')) { + define('_DIR_PLUGINS_DIST', _DIR_RACINE . "plugins-dist/"); + } // le nom du repertoire des librairies - if (!defined('_DIR_LIB')) define('_DIR_LIB', _DIR_RACINE . "lib/"); - - if (!defined('_DIR_IMG')) define('_DIR_IMG', $pa); - if (!defined('_DIR_LOGOS')) define('_DIR_LOGOS', $pa); - if (!defined('_DIR_IMG_ICONES')) define('_DIR_IMG_ICONES', _DIR_LOGOS . "icones/"); + if (!defined('_DIR_LIB')) { + define('_DIR_LIB', _DIR_RACINE . "lib/"); + } + + if (!defined('_DIR_IMG')) { + define('_DIR_IMG', $pa); + } + if (!defined('_DIR_LOGOS')) { + define('_DIR_LOGOS', $pa); + } + if (!defined('_DIR_IMG_ICONES')) { + define('_DIR_IMG_ICONES', _DIR_LOGOS . "icones/"); + } - if (!defined('_DIR_DUMP')) define('_DIR_DUMP', $ti . "dump/"); - if (!defined('_DIR_SESSIONS')) define('_DIR_SESSIONS', $ti . "sessions/"); - if (!defined('_DIR_TRANSFERT')) define('_DIR_TRANSFERT', $ti . "upload/"); - if (!defined('_DIR_CACHE')) define('_DIR_CACHE', $ti . "cache/"); - if (!defined('_DIR_CACHE_XML')) define('_DIR_CACHE_XML', _DIR_CACHE . "xml/"); - if (!defined('_DIR_SKELS')) define('_DIR_SKELS', _DIR_CACHE . "skel/"); - if (!defined('_DIR_AIDE')) define('_DIR_AIDE', _DIR_CACHE . "aide/"); - if (!defined('_DIR_TMP')) define('_DIR_TMP', $ti); + if (!defined('_DIR_DUMP')) { + define('_DIR_DUMP', $ti . "dump/"); + } + if (!defined('_DIR_SESSIONS')) { + define('_DIR_SESSIONS', $ti . "sessions/"); + } + if (!defined('_DIR_TRANSFERT')) { + define('_DIR_TRANSFERT', $ti . "upload/"); + } + if (!defined('_DIR_CACHE')) { + define('_DIR_CACHE', $ti . "cache/"); + } + if (!defined('_DIR_CACHE_XML')) { + define('_DIR_CACHE_XML', _DIR_CACHE . "xml/"); + } + if (!defined('_DIR_SKELS')) { + define('_DIR_SKELS', _DIR_CACHE . "skel/"); + } + if (!defined('_DIR_AIDE')) { + define('_DIR_AIDE', _DIR_CACHE . "aide/"); + } + if (!defined('_DIR_TMP')) { + define('_DIR_TMP', $ti); + } - if (!defined('_DIR_VAR')) define('_DIR_VAR', $ta); + if (!defined('_DIR_VAR')) { + define('_DIR_VAR', $ta); + } - if (!defined('_DIR_ETC')) define('_DIR_ETC', $pi); - if (!defined('_DIR_CONNECT')) define('_DIR_CONNECT', $pi); - if (!defined('_DIR_CHMOD')) define('_DIR_CHMOD', $pi); + if (!defined('_DIR_ETC')) { + define('_DIR_ETC', $pi); + } + if (!defined('_DIR_CONNECT')) { + define('_DIR_CONNECT', $pi); + } + if (!defined('_DIR_CHMOD')) { + define('_DIR_CHMOD', $pi); + } if (!isset($GLOBALS['test_dirs'])) - // Pas $pi car il est bon de le mettre hors ecriture apres intstall - // il sera rajoute automatiquement si besoin a l'etape 2 de l'install - $GLOBALS['test_dirs'] = array($pa, $ti, $ta); + // Pas $pi car il est bon de le mettre hors ecriture apres intstall + // il sera rajoute automatiquement si besoin a l'etape 2 de l'install + { + $GLOBALS['test_dirs'] = array($pa, $ti, $ta); + } // Declaration des fichiers - if (!defined('_CACHE_PLUGINS_PATH')) define('_CACHE_PLUGINS_PATH', _DIR_CACHE . "charger_plugins_chemins.php"); - if (!defined('_CACHE_PLUGINS_OPT')) define('_CACHE_PLUGINS_OPT', _DIR_CACHE . "charger_plugins_options.php"); - if (!defined('_CACHE_PLUGINS_FCT')) define('_CACHE_PLUGINS_FCT', _DIR_CACHE . "charger_plugins_fonctions.php"); - if (!defined('_CACHE_PIPELINES')) define('_CACHE_PIPELINES', _DIR_CACHE."charger_pipelines.php"); - if (!defined('_CACHE_CHEMIN')) define('_CACHE_CHEMIN', _DIR_CACHE."chemin.txt"); + if (!defined('_CACHE_PLUGINS_PATH')) { + define('_CACHE_PLUGINS_PATH', _DIR_CACHE . "charger_plugins_chemins.php"); + } + if (!defined('_CACHE_PLUGINS_OPT')) { + define('_CACHE_PLUGINS_OPT', _DIR_CACHE . "charger_plugins_options.php"); + } + if (!defined('_CACHE_PLUGINS_FCT')) { + define('_CACHE_PLUGINS_FCT', _DIR_CACHE . "charger_plugins_fonctions.php"); + } + if (!defined('_CACHE_PIPELINES')) { + define('_CACHE_PIPELINES', _DIR_CACHE . "charger_pipelines.php"); + } + if (!defined('_CACHE_CHEMIN')) { + define('_CACHE_CHEMIN', _DIR_CACHE . "chemin.txt"); + } # attention .php obligatoire pour ecrire_fichier_securise - if (!defined('_FILE_META')) define('_FILE_META', $ti . 'meta_cache.php'); - if (!defined('_DIR_LOG')) define('_DIR_LOG', _DIR_TMP . 'log/'); - if (!defined('_FILE_LOG')) define('_FILE_LOG', 'spip'); - if (!defined('_FILE_LOG_SUFFIX')) define('_FILE_LOG_SUFFIX', '.log'); + if (!defined('_FILE_META')) { + define('_FILE_META', $ti . 'meta_cache.php'); + } + if (!defined('_DIR_LOG')) { + define('_DIR_LOG', _DIR_TMP . 'log/'); + } + if (!defined('_FILE_LOG')) { + define('_FILE_LOG', 'spip'); + } + if (!defined('_FILE_LOG_SUFFIX')) { + define('_FILE_LOG_SUFFIX', '.log'); + } // Le fichier de connexion a la base de donnees // tient compte des anciennes versions (inc_connect...) - if (!defined('_FILE_CONNECT_INS')) define('_FILE_CONNECT_INS', 'connect'); - if (!defined('_FILE_CONNECT')) define('_FILE_CONNECT', + if (!defined('_FILE_CONNECT_INS')) { + define('_FILE_CONNECT_INS', 'connect'); + } + if (!defined('_FILE_CONNECT')) { + define('_FILE_CONNECT', (@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f - : (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f - : false))); + : (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f + : false))); + } // Le fichier de reglages des droits - if (!defined('_FILE_CHMOD_INS')) define('_FILE_CHMOD_INS', 'chmod'); - if (!defined('_FILE_CHMOD')) define('_FILE_CHMOD', + if (!defined('_FILE_CHMOD_INS')) { + define('_FILE_CHMOD_INS', 'chmod'); + } + if (!defined('_FILE_CHMOD')) { + define('_FILE_CHMOD', (@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f - : false)); + : false)); + } - if (!defined('_FILE_LDAP')) define('_FILE_LDAP', 'ldap.php'); + if (!defined('_FILE_LDAP')) { + define('_FILE_LDAP', 'ldap.php'); + } - if (!defined('_FILE_TMP_SUFFIX')) define('_FILE_TMP_SUFFIX', '.tmp.php'); - if (!defined('_FILE_CONNECT_TMP')) define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX); - if (!defined('_FILE_CHMOD_TMP')) define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX); + if (!defined('_FILE_TMP_SUFFIX')) { + define('_FILE_TMP_SUFFIX', '.tmp.php'); + } + if (!defined('_FILE_CONNECT_TMP')) { + define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX); + } + if (!defined('_FILE_CHMOD_TMP')) { + define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX); + } // Definition des droits d'acces en ecriture - if (!defined('_SPIP_CHMOD') AND _FILE_CHMOD) + if (!defined('_SPIP_CHMOD') and _FILE_CHMOD) { include_once _FILE_CHMOD; + } // Se mefier des fichiers mal remplis! - if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', 0777); + if (!defined('_SPIP_CHMOD')) { + define('_SPIP_CHMOD', 0777); + } - // Le charset par defaut lors de l'installation - if (!defined('_DEFAULT_CHARSET')) define('_DEFAULT_CHARSET', 'utf-8'); - if (!defined('_ROOT_PLUGINS')) define('_ROOT_PLUGINS', _ROOT_RACINE . "plugins/"); - if (!defined('_ROOT_PLUGINS_DIST')) define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . "plugins-dist/"); - if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE,'',_DIR_PLUGINS_SUPPL)); + if (!defined('_DEFAULT_CHARSET')) { + /** Le charset par défaut lors de l'installation */ + define('_DEFAULT_CHARSET', 'utf-8'); + } + if (!defined('_ROOT_PLUGINS')) { + define('_ROOT_PLUGINS', _ROOT_RACINE . "plugins/"); + } + if (!defined('_ROOT_PLUGINS_DIST')) { + define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . "plugins-dist/"); + } + if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) { + define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE, '', _DIR_PLUGINS_SUPPL)); + } // La taille des Log - if (!defined('_MAX_LOG')) define('_MAX_LOG', 100); + if (!defined('_MAX_LOG')) { + define('_MAX_LOG', 100); + } // Sommes-nous dans l'empire du Mal ? // (ou sous le signe du Pingouin, ascendant GNU ?) - if (strpos($_SERVER['SERVER_SOFTWARE'], '(Win') !== false){ - if (!defined('_OS_SERVEUR')) define('_OS_SERVEUR', 'windows'); - if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',1); // utiliser le flock php - } - else { - if (!defined('_OS_SERVEUR')) define('_OS_SERVEUR', ''); - if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',1); // utiliser le flock php + if (isset($_SERVER['SERVER_SOFTWARE']) and strpos($_SERVER['SERVER_SOFTWARE'], '(Win') !== false) { + if (!defined('_OS_SERVEUR')) { + define('_OS_SERVEUR', 'windows'); + } + if (!defined('_SPIP_LOCK_MODE')) { + define('_SPIP_LOCK_MODE', 1); + } // utiliser le flock php + } else { + if (!defined('_OS_SERVEUR')) { + define('_OS_SERVEUR', ''); + } + if (!defined('_SPIP_LOCK_MODE')) { + define('_SPIP_LOCK_MODE', 1); + } // utiliser le flock php #if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite } // Langue par defaut - if (!defined('_LANGUE_PAR_DEFAUT')) define('_LANGUE_PAR_DEFAUT','fr'); - - // PHP_VERSION_ID dispo depuis PHP 5.2.7 - if (!defined('PHP_VERSION_ID')) { - $version = explode('.',PHP_VERSION); - define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2])); + if (!defined('_LANGUE_PAR_DEFAUT')) { + define('_LANGUE_PAR_DEFAUT', 'fr'); } // @@ -1637,27 +2474,27 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) { // // Ne pas se faire manger par un bug php qui accepte ?GLOBALS[truc]=toto - if (isset($_REQUEST['GLOBALS'])) die(); + if (isset($_REQUEST['GLOBALS'])) { + die(); + } // nettoyer les magic quotes \' et les caracteres nuls %00 spip_desinfecte($_GET); spip_desinfecte($_POST); spip_desinfecte($_COOKIE); spip_desinfecte($_REQUEST); - // Par ailleurs on ne veut pas de magic_quotes au cours de l'execution - if (PHP_VERSION_ID<50300) { - @set_magic_quotes_runtime(0); - } - // Si les variables sont passees en global par le serveur, // il faut faire quelques verifications de base + // Todo: test à supprimer lorsque version PHP minimum >= 5.4. $avertir_register_globals = false; if (test_valeur_serveur(@ini_get('register_globals'))) { // ne pas desinfecter les globales en profondeur car elle contient aussi les // precedentes, qui seraient desinfectees 2 fois. - spip_desinfecte($GLOBALS,false); - if (include_spip('inc/php3')) + spip_desinfecte($GLOBALS, false); + // plugin grenier + if (include_spip('inc/php3')) { spip_register_globals(true); + } $avertir_register_globals = true; } @@ -1684,14 +2521,21 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) { if (isset($_SERVER['REQUEST_URI'])) { $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI']; } else { - $GLOBALS['REQUEST_URI'] = $_SERVER['PHP_SELF']; - if ($_SERVER['QUERY_STRING'] - AND !strpos($_SERVER['REQUEST_URI'], '?')) - $GLOBALS['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING']; + $GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : ''; + if (!empty($_SERVER['QUERY_STRING']) + and !strpos($_SERVER['REQUEST_URI'], '?') + ) { + $GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; + } } // Duree de validite de l'alea pour les cookies et ce qui s'ensuit. - if (!defined('_RENOUVELLE_ALEA')) define('_RENOUVELLE_ALEA', 12 * 3600); + if (!defined('_RENOUVELLE_ALEA')) { + define('_RENOUVELLE_ALEA', 12 * 3600); + } + if (!defined('_DUREE_COOKIE_ADMIN')) { + define('_DUREE_COOKIE_ADMIN', 14 * 24 * 3600); + } // charger les meta si possible et renouveller l'alea au besoin // charge aussi effacer_meta et ecrire_meta @@ -1699,16 +2543,18 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) { $inc_meta(); // on a pas pu le faire plus tot - if ($avertir_register_globals) - avertir_auteurs("register_globals",_L("Problème de sécurité : register_globals=on; dans php.ini à corriger.")); + if ($avertir_register_globals) { + avertir_auteurs("register_globals", + _L("Problème de sécurité : register_globals=on; dans php.ini à corriger.")); + } // nombre de repertoires depuis la racine // on compare a l'adresse de spip.php : $_SERVER["SCRIPT_NAME"] // ou a defaut celle donnee en meta ; (mais si celle-ci est fausse // le calcul est faux) - if (!_DIR_RESTREINT) + if (!_DIR_RESTREINT) { $GLOBALS['profondeur_url'] = 1; - else { + } else { $uri = isset($_SERVER['REQUEST_URI']) ? explode('?', $_SERVER['REQUEST_URI']) : ''; $uri_ref = $_SERVER["SCRIPT_NAME"]; if (!$uri_ref @@ -1716,29 +2562,32 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) { // si jamais c'est de la mutu avec sous rep, on est perdu si on se fie // a spip.php qui est a la racine du spip, et vue qu'on sait pas se reperer // s'en remettre a l'adresse du site. alea jacta est. - OR $ti!==_NOM_TEMPORAIRES_INACCESSIBLES){ + or $ti !== _NOM_TEMPORAIRES_INACCESSIBLES + ) { if (isset($GLOBALS['meta']['adresse_site'])) { $uri_ref = parse_url($GLOBALS['meta']['adresse_site']); - $uri_ref = $uri_ref['path'].'/'; + $uri_ref = $uri_ref['path'] . '/'; + } else { + $uri_ref = ""; } - else - $uri_ref = ""; } - if (!$uri OR !$uri_ref) + if (!$uri or !$uri_ref) { $GLOBALS['profondeur_url'] = 0; - else { + } else { $GLOBALS['profondeur_url'] = max(0, substr_count($uri[0], '/') - - substr_count($uri_ref,'/')); + - substr_count($uri_ref, '/')); } } // s'il y a un cookie ou PHP_AUTH, initialiser visiteur_session if (_FILE_CONNECT) { - if (verifier_visiteur()=='0minirezo' + if (verifier_visiteur() == '0minirezo' // si c'est un admin sans cookie admin, il faut ignorer le cache chemin ! - AND !isset($_COOKIE['spip_admin'])) + and !isset($_COOKIE['spip_admin']) + ) { clear_path_cache(); + } } } @@ -1750,201 +2599,327 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) { */ function spip_initialisation_suite() { static $too_late = 0; - if ($too_late++) return; + if ($too_late++) { + return; + } // taille mini des login - if (!defined('_LOGIN_TROP_COURT')) define('_LOGIN_TROP_COURT', 4); + if (!defined('_LOGIN_TROP_COURT')) { + define('_LOGIN_TROP_COURT', 4); + } - // la taille maxi des logos (0 : pas de limite) - if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko - if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels - if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels + // la taille maxi des logos (0 : pas de limite) (pas de define par defaut, ce n'est pas utile) + #if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko + #if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels + #if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels - if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko + // la taille maxi des images (0 : pas de limite) (pas de define par defaut, ce n'est pas utile) + #if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko + #if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko + #if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels + #if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels - if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko - if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels - if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels - if (!defined('_PASS_LONGUEUR_MINI')) define('_PASS_LONGUEUR_MINI',6); + if (!defined('_PASS_LONGUEUR_MINI')) { + define('_PASS_LONGUEUR_MINI', 6); + } // Qualite des images calculees automatiquement. C'est un nombre entre 0 et 100, meme pour imagick (on ramene a 0..1 par la suite) - if (!defined('_IMG_QUALITE')) define('_IMG_QUALITE', 85); # valeur par defaut - if (!defined('_IMG_GD_QUALITE')) define('_IMG_GD_QUALITE', _IMG_QUALITE); # surcharge pour la lib GD - if (!defined('_IMG_CONVERT_QUALITE')) define('_IMG_CONVERT_QUALITE', _IMG_QUALITE); # surcharge pour imagick en ligne de commande + if (!defined('_IMG_QUALITE')) { + define('_IMG_QUALITE', 85); + } # valeur par defaut + if (!defined('_IMG_GD_QUALITE')) { + define('_IMG_GD_QUALITE', _IMG_QUALITE); + } # surcharge pour la lib GD + if (!defined('_IMG_CONVERT_QUALITE')) { + define('_IMG_CONVERT_QUALITE', _IMG_QUALITE); + } # surcharge pour imagick en ligne de commande // Historiquement la valeur pour imagick semble differente. Si ca n'est pas necessaire, il serait preferable de garder _IMG_QUALITE - if (!defined('_IMG_IMAGICK_QUALITE')) define('_IMG_IMAGICK_QUALITE', 75); # surcharge pour imagick en PHP + if (!defined('_IMG_IMAGICK_QUALITE')) { + define('_IMG_IMAGICK_QUALITE', 75); + } # surcharge pour imagick en PHP - if (!defined('_COPIE_LOCALE_MAX_SIZE')) define('_COPIE_LOCALE_MAX_SIZE',16777216); // poids en octet + if (!defined('_COPIE_LOCALE_MAX_SIZE')) { + define('_COPIE_LOCALE_MAX_SIZE', 33554432); + } // poids en octet // qq chaines standard - if (!defined('_ACCESS_FILE_NAME')) define('_ACCESS_FILE_NAME', '.htaccess'); - if (!defined('_AUTH_USER_FILE')) define('_AUTH_USER_FILE', '.htpasswd'); - if (!defined('_SPIP_DUMP')) define('_SPIP_DUMP', 'dump@nom_site@@stamp@.xml'); - if (!defined('_CACHE_RUBRIQUES')) define('_CACHE_RUBRIQUES', _DIR_TMP.'menu-rubriques-cache.txt'); - if (!defined('_CACHE_RUBRIQUES_MAX')) define('_CACHE_RUBRIQUES_MAX', 500); - - if (!defined('_EXTENSION_SQUELETTES')) define('_EXTENSION_SQUELETTES', 'html'); - - if (!defined('_DOCTYPE_ECRIRE')) define('_DOCTYPE_ECRIRE', - // "\n"); - //"\n"); - //"\n"); - // "\n"); + if (!defined('_ACCESS_FILE_NAME')) { + define('_ACCESS_FILE_NAME', '.htaccess'); + } + if (!defined('_AUTH_USER_FILE')) { + define('_AUTH_USER_FILE', '.htpasswd'); + } + if (!defined('_SPIP_DUMP')) { + define('_SPIP_DUMP', 'dump@nom_site@@stamp@.xml'); + } + if (!defined('_CACHE_RUBRIQUES')) { + /** Fichier cache pour le navigateur de rubrique du bandeau */ + define('_CACHE_RUBRIQUES', _DIR_TMP . 'menu-rubriques-cache.txt'); + } + if (!defined('_CACHE_RUBRIQUES_MAX')) { + /** Nombre maxi de rubriques enfants affichées pour chaque rubrique du navigateur de rubrique du bandeau */ + define('_CACHE_RUBRIQUES_MAX', 500); + } + + if (!defined('_EXTENSION_SQUELETTES')) { + define('_EXTENSION_SQUELETTES', 'html'); + } + + if (!defined('_DOCTYPE_ECRIRE')) { + define('_DOCTYPE_ECRIRE', + // "\n"); + //"\n"); + //"\n"); + // "\n"); "\n"); - if (!defined('_DOCTYPE_AIDE')) define('_DOCTYPE_AIDE', - ""); + } + if (!defined('_DOCTYPE_AIDE')) { + define('_DOCTYPE_AIDE', + ""); + } - // L'adresse de base du site ; on peut mettre '' si la racine est geree par - // le script de l'espace public, alias index.php - if (!defined('_SPIP_SCRIPT')) define('_SPIP_SCRIPT', 'spip.php'); - // argument page, personalisable en cas de conflit avec un autre script - if (!defined('_SPIP_PAGE')) define('_SPIP_PAGE', 'page'); + /** L'adresse de base du site ; on peut mettre '' si la racine est gerée par + * le script de l'espace public, alias index.php */ + if (!defined('_SPIP_SCRIPT')) { + define('_SPIP_SCRIPT', 'spip.php'); + } + /** Argument page, personalisable en cas de conflit avec un autre script */ + if (!defined('_SPIP_PAGE')) { + define('_SPIP_PAGE', 'page'); + } // le script de l'espace prive // Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes: // les anciens IIS n'acceptent pas les POST sur ecrire/ (#419) - // meme pb sur thttpd cf. http://forum.spip.org/fr_184153.html - - if (!defined('_SPIP_ECRIRE_SCRIPT')) define('_SPIP_ECRIRE_SCRIPT', // true ? #decommenter ici et commenter la - preg_match(',IIS|thttpd,',$_SERVER['SERVER_SOFTWARE']) ? - 'index.php' : ''); + // meme pb sur thttpd cf. http://forum.spip.net/fr_184153.html + if (!defined('_SPIP_ECRIRE_SCRIPT')) { + define('_SPIP_ECRIRE_SCRIPT', (empty($_SERVER['SERVER_SOFTWARE']) ? '' : + preg_match(',IIS|thttpd,', $_SERVER['SERVER_SOFTWARE']) ? + 'index.php' : '')); + } - if (!defined('_SPIP_AJAX')) + if (!defined('_SPIP_AJAX')) { define('_SPIP_AJAX', ((!isset($_COOKIE['spip_accepte_ajax'])) ? 1 - : (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0))); + : (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0))); + } // La requete est-elle en ajax ? - if (!defined('_AJAX')) define('_AJAX', - (isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery - OR @$_REQUEST['var_ajax_redir'] # redirection 302 apres ajax jQuery - OR @$_REQUEST['var_ajaxcharset'] # compat ascendante pour plugins - OR @$_REQUEST['var_ajax'] # forms ajax & inclure ajax de spip - ) - AND !@$_REQUEST['var_noajax'] # horrible exception, car c'est pas parce que la requete est ajax jquery qu'il faut tuer tous les formulaires ajax qu'elle contient - ); + if (!defined('_AJAX')) { + define('_AJAX', + (isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery + or !empty($_REQUEST['var_ajax_redir']) # redirection 302 apres ajax jQuery + or !empty($_REQUEST['var_ajaxcharset']) # compat ascendante pour plugins + or !empty($_REQUEST['var_ajax']) # forms ajax & inclure ajax de spip + ) + and empty($_REQUEST['var_noajax']) # horrible exception, car c'est pas parce que la requete est ajax jquery qu'il faut tuer tous les formulaires ajax qu'elle contient + ); + } # nombre de pixels maxi pour calcul de la vignette avec gd # au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation # les configurations limitees en memoire ont un seuil plutot vers 1MPixel - if (!defined('_IMG_GD_MAX_PIXELS')) define('_IMG_GD_MAX_PIXELS', - (isset($GLOBALS['meta']['max_taille_vignettes'])&&$GLOBALS['meta']['max_taille_vignettes']<5500000) - ? $GLOBALS['meta']['max_taille_vignettes'] - : 0); + if (!defined('_IMG_GD_MAX_PIXELS')) { + define('_IMG_GD_MAX_PIXELS', + (isset($GLOBALS['meta']['max_taille_vignettes']) and $GLOBALS['meta']['max_taille_vignettes']) + ? $GLOBALS['meta']['max_taille_vignettes'] + : 0); + } - if (!defined('_MEMORY_LIMIT_MIN')) define('_MEMORY_LIMIT_MIN',10); // en Mo + if (!defined('_MEMORY_LIMIT_MIN')) { + define('_MEMORY_LIMIT_MIN', 16); + } // en Mo // si on est dans l'espace prive et si le besoin est superieur a 8Mo (qui est vraiment le standard) // on verifie que la memoire est suffisante pour le compactage css+js pour eviter la page blanche // il y aura d'autres problemes et l'utilisateur n'ira pas tres loin, mais ce sera plus comprehensible qu'une page blanche - if (test_espace_prive() AND _MEMORY_LIMIT_MIN>8){ + if (test_espace_prive() and _MEMORY_LIMIT_MIN > 8) { if ($memory = trim(ini_get('memory_limit')) and $memory != -1) { - $unit = strtolower(substr($memory,strlen($memory/1),1)); - switch($unit) { + $unit = strtolower(substr($memory, -1)); + $memory = substr($memory, 0, -1); + switch ($unit) { // Le modifieur 'G' est disponible depuis PHP 5.1.0 - case 'g': $memory *= 1024; - case 'm': $memory *= 1024; - case 'k': $memory *= 1024; + case 'g': + $memory *= 1024; + case 'm': + $memory *= 1024; + case 'k': + $memory *= 1024; } - if ($memory<_MEMORY_LIMIT_MIN*1024*1024){ - ini_set('memory_limit',$m=_MEMORY_LIMIT_MIN.'M'); - if (trim(ini_get('memory_limit'))!=$m){ - if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) define('_INTERDIRE_COMPACTE_HEAD_ECRIRE',true); // evite une page blanche car on ne saura pas calculer la css dans ce hit + if ($memory < _MEMORY_LIMIT_MIN * 1024 * 1024) { + @ini_set('memory_limit', $m = _MEMORY_LIMIT_MIN . 'M'); + if (trim(ini_get('memory_limit')) != $m) { + if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) { + define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true); + } // evite une page blanche car on ne saura pas calculer la css dans ce hit } } - } - else - if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) define('_INTERDIRE_COMPACTE_HEAD_ECRIRE',true); // evite une page blanche car on ne saura pas calculer la css dans ce hit + } else { + if (!defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')) { + define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true); + } + } // evite une page blanche car on ne saura pas calculer la css dans ce hit } // Protocoles a normaliser dans les chaines de langues - if (!defined('_PROTOCOLES_STD')) + if (!defined('_PROTOCOLES_STD')) { define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal'); + } init_var_mode(); } -// Reperer les variables d'URL qui conditionnent la perennite du cache, des urls -// ou d'autres petit caches (trouver_table, css et js compactes ...) -// http://doc.spip.org/@init_var_mode -function init_var_mode(){ +/** + * Repérer les variables d'URL spéciales `var_mode` qui conditionnent + * la validité du cache ou certains affichages spéciaux. + * + * Le paramètre d'URL `var_mode` permet de + * modifier la pérennité du cache, recalculer des urls + * ou d'autres petit caches (trouver_table, css et js compactes ...), + * d'afficher un écran de débug ou des traductions non réalisées. + * + * En fonction de ces paramètres dans l'URL appelante, on définit + * da constante `_VAR_MODE` qui servira ensuite à SPIP. + * + * Le paramètre `var_mode` accepte ces valeurs : + * + * - `calcul` : force un calcul du cache de la page (sans forcément recompiler les squelettes) + * - `recalcul` : force un calcul du cache de la page en recompilant au préabable les squelettes + * - `inclure` : modifie l'affichage en ajoutant visuellement le nom de toutes les inclusions qu'elle contient + * - `debug` : modifie l'affichage activant le mode "debug" + * - `preview` : modifie l'affichage en ajoutant aux boucles les éléments prévisualisables + * - `traduction` : modifie l'affichage en affichant des informations sur les chaînes de langues utilisées + * - `urls` : permet de recalculer les URLs des objets appelés dans la page par les balises `#URL_xx` + * - `images` : permet de recalculer les filtres d'images utilisés dans la page + * + * En dehors des modes `calcul` et `recalcul`, une autorisation 'previsualiser' ou 'debug' est testée. + * + * @note + * Il éxiste également le paramètre `var_profile` qui modifie l'affichage pour incruster + * le nombre de requêtes SQL utilisées dans la page, qui peut se compléter avec le paramètre + * ` var_mode` (calcul ou recalcul). + */ +function init_var_mode() { static $done = false; if (!$done) { if (isset($_GET['var_mode'])) { + $var_mode = explode(',', $_GET['var_mode']); // tout le monde peut calcul/recalcul - if ($_GET['var_mode'] == 'calcul' - OR $_GET['var_mode'] == 'recalcul') { - if (!defined('_VAR_MODE')) define('_VAR_MODE',$_GET['var_mode']); + if (!defined('_VAR_MODE')) { + if (in_array('recalcul', $var_mode)) { + define('_VAR_MODE', 'recalcul'); + } elseif (in_array('calcul', $var_mode)) { + define('_VAR_MODE', 'calcul'); + } + $var_mode = array_diff($var_mode, array('calcul', 'recalcul')); } - // preview, debug, blocs, urls et images necessitent une autorisation - else if (in_array($_GET['var_mode'],array('preview','debug','inclure','urls','images','traduction'))) { + if ($var_mode) { include_spip('inc/autoriser'); + // autoriser preview si preview seulement, et sinon autoriser debug if (autoriser( ($_GET['var_mode'] == 'preview') ? 'previsualiser' : 'debug' )) { - switch($_GET['var_mode']){ - case 'traduction': - // forcer le calcul pour passer dans traduire - if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul'); - // et ne pas enregistrer de cache pour ne pas trainer les surlignages sur d'autres pages - if (!defined('_VAR_NOCACHE')) define('_VAR_NOCACHE',true); - break; - case 'preview': - // basculer sur les criteres de preview dans les boucles - if (!defined('_VAR_PREVIEW')) define('_VAR_PREVIEW',true); - // forcer le calcul - if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul'); - // et ne pas enregistrer de cache - if (!defined('_VAR_NOCACHE')) define('_VAR_NOCACHE',true); - break; - case 'inclure': - // forcer le compilo et ignorer les caches existants - if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul'); - if (!defined('_VAR_INCLURE')) define('_VAR_INCLURE',true); - // et ne pas enregistrer de cache - if (!defined('_VAR_NOCACHE')) define('_VAR_NOCACHE',true); - break; - case 'urls': - // forcer le compilo et ignorer les caches existants - if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul'); - if (!defined('_VAR_URLS')) define('_VAR_URLS',true); - break; - case 'images': - // forcer le compilo et ignorer les caches existants - if (!defined('_VAR_MODE')) define('_VAR_MODE','calcul'); - // indiquer qu'on doit recalculer les images - if (!defined('_VAR_IMAGES')) define('_VAR_IMAGES',true); - break; - case 'debug': - if (!defined('_VAR_MODE')) define('_VAR_MODE','debug'); - // et ne pas enregistrer de cache - if (!defined('_VAR_NOCACHE')) define('_VAR_NOCACHE',true); - break; - default : - if (!defined('_VAR_MODE')) define('_VAR_MODE',$_GET['var_mode']); - break; + if (in_array('traduction', $var_mode)) { + // forcer le calcul pour passer dans traduire + if (!defined('_VAR_MODE')) { + define('_VAR_MODE', 'calcul'); + } + // et ne pas enregistrer de cache pour ne pas trainer les surlignages sur d'autres pages + if (!defined('_VAR_NOCACHE')) { + define('_VAR_NOCACHE', true); + } + $var_mode = array_diff($var_mode, array('traduction')); } - if (isset($GLOBALS['visiteur_session']['nom'])) - spip_log($GLOBALS['visiteur_session']['nom'] - . " "._VAR_MODE); - } - // pas autorise ? + if (in_array('preview', $var_mode)) { + // basculer sur les criteres de preview dans les boucles + if (!defined('_VAR_PREVIEW')) { + define('_VAR_PREVIEW', true); + } + // forcer le calcul + if (!defined('_VAR_MODE')) { + define('_VAR_MODE', 'calcul'); + } + // et ne pas enregistrer de cache + if (!defined('_VAR_NOCACHE')) { + define('_VAR_NOCACHE', true); + } + $var_mode = array_diff($var_mode, array('preview')); + } + if (in_array('inclure', $var_mode)) { + // forcer le compilo et ignorer les caches existants + if (!defined('_VAR_MODE')) { + define('_VAR_MODE', 'calcul'); + } + if (!defined('_VAR_INCLURE')) { + define('_VAR_INCLURE', true); + } + // et ne pas enregistrer de cache + if (!defined('_VAR_NOCACHE')) { + define('_VAR_NOCACHE', true); + } + $var_mode = array_diff($var_mode, array('inclure')); + } + if (in_array('urls', $var_mode)) { + // forcer le compilo et ignorer les caches existants + if (!defined('_VAR_MODE')) { + define('_VAR_MODE', 'calcul'); + } + if (!defined('_VAR_URLS')) { + define('_VAR_URLS', true); + } + $var_mode = array_diff($var_mode, array('urls')); + } + if (in_array('images', $var_mode)) { + // forcer le compilo et ignorer les caches existants + if (!defined('_VAR_MODE')) { + define('_VAR_MODE', 'calcul'); + } + // indiquer qu'on doit recalculer les images + if (!defined('_VAR_IMAGES')) { + define('_VAR_IMAGES', true); + } + $var_mode = array_diff($var_mode, array('images')); + } + if (in_array('debug', $var_mode)) { + if (!defined('_VAR_MODE')) { + define('_VAR_MODE', 'debug'); + } + // et ne pas enregistrer de cache + if (!defined('_VAR_NOCACHE')) { + define('_VAR_NOCACHE', true); + } + $var_mode = array_diff($var_mode, array('debug')); + } + if (count($var_mode) and !defined('_VAR_MODE')) { + define('_VAR_MODE', reset($var_mode)); + } + if (isset($GLOBALS['visiteur_session']['nom'])) { + spip_log($GLOBALS['visiteur_session']['nom'] + . " " . _VAR_MODE); + } + } // pas autorise ? else { // si on n'est pas connecte on se redirige if (!$GLOBALS['visiteur_session']) { include_spip('inc/headers'); redirige_par_entete(generer_url_public('login', - 'url='.rawurlencode( - parametre_url(self(), 'var_mode', $_GET['var_mode'], '&') - ), true)); + 'url=' . rawurlencode( + parametre_url(self(), 'var_mode', $_GET['var_mode'], '&') + ), true)); } // sinon tant pis } } - if (!defined('_VAR_MODE')) define('_VAR_MODE',false); + } + if (!defined('_VAR_MODE')) { + /** + * Indique le mode de calcul ou d'affichage de la page. + * @see init_var_mode() + */ + define('_VAR_MODE', false); } $done = true; } @@ -1953,37 +2928,41 @@ function init_var_mode(){ // Annuler les magic quotes \' sur GET POST COOKIE et GLOBALS ; // supprimer aussi les eventuels caracteres nuls %00, qui peuvent tromper // la commande is_readable('chemin/vers/fichier/interdit%00truc_normal') -// http://doc.spip.org/@spip_desinfecte -function spip_desinfecte(&$t,$deep = true) { +// http://code.spip.net/@spip_desinfecte +function spip_desinfecte(&$t, $deep = true) { static $magic_quotes; - if (!isset($magic_quotes)) + if (!isset($magic_quotes)) { $magic_quotes = @get_magic_quotes_gpc(); + } foreach ($t as $key => $val) { if (is_string($t[$key])) { - if ($magic_quotes) + if ($magic_quotes) { $t[$key] = stripslashes($t[$key]); + } $t[$key] = str_replace(chr(0), '-', $t[$key]); + } // traiter aussi les "texte_plus" de article_edit + else { + if ($deep and is_array($t[$key]) and $key !== 'GLOBALS') { + spip_desinfecte($t[$key], $deep); + } } - // traiter aussi les "texte_plus" de article_edit - else if ($deep AND is_array($t[$key]) AND $key!=='GLOBALS') - spip_desinfecte($t[$key],$deep); } } // retourne le statut du visiteur s'il s'annonce -// http://doc.spip.org/@verifier_visiteur +// http://code.spip.net/@verifier_visiteur function verifier_visiteur() { // Rq: pour que cette fonction marche depuis mes_options // il faut forcer l'init si ce n'est fait // mais on risque de perturber des plugins en initialisant trop tot // certaines constantes @spip_initialisation_core( - (_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES), - (_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES), - (_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES), - (_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES) + (_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES), + (_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES), + (_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES), + (_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES) ); // Demarrer une session NON AUTHENTIFIEE si on donne son nom @@ -1991,7 +2970,7 @@ function verifier_visiteur() { // Attention on separe bien session_nom et nom, pour eviter // les melanges entre donnees SQL et variables plus aleatoires $variables_session = array('session_nom', 'session_email'); - foreach($variables_session as $var) { + foreach ($variables_session as $var) { if (_request($var) !== null) { $init = true; break; @@ -2002,28 +2981,33 @@ function verifier_visiteur() { $session = charger_fonction('session', 'inc'); $session(); include_spip('inc/texte'); - foreach($variables_session as $var) - if (($a = _request($var)) !== null) + foreach ($variables_session as $var) { + if (($a = _request($var)) !== null) { $GLOBALS['visiteur_session'][$var] = safehtml($a); - if (!isset($GLOBALS['visiteur_session']['id_auteur'])) + } + } + if (!isset($GLOBALS['visiteur_session']['id_auteur'])) { $GLOBALS['visiteur_session']['id_auteur'] = 0; + } $session($GLOBALS['visiteur_session']); + return 0; } - $h = (isset($_SERVER['PHP_AUTH_USER']) AND !$GLOBALS['ignore_auth_http']); - if ($h OR isset($_COOKIE['spip_session']) OR isset($_COOKIE[$GLOBALS['cookie_prefix'].'_session'])) { + $h = (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http']); + if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'] . '_session'])) { $session = charger_fonction('session', 'inc'); if ($session()) { return $GLOBALS['visiteur_session']['statut']; } - if ($h AND isset($_SERVER['PHP_AUTH_PW'])) { + if ($h and isset($_SERVER['PHP_AUTH_PW'])) { include_spip('inc/auth'); $h = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']); } if ($h) { $GLOBALS['visiteur_session'] = $h; + return $GLOBALS['visiteur_session']['statut']; } } @@ -2035,199 +3019,255 @@ function verifier_visiteur() { return false; } -// selectionne la langue donnee en argument et memorise la courante -// ou restaure l'ancienne si appel sans argument -// On pourrait economiser l'empilement en cas de non changemnt -// et lui faire retourner False pour prevenir l'appelant -// Le noyau de Spip sait le faire, mais pour assurer la compatibilite -// cette fonction retourne toujours non False -// http://doc.spip.org/@lang_select -function lang_select ($lang=NULL) { +/** + * Sélectionne la langue donnée en argument et mémorise la courante + * + * Restaure l'ancienne langue si appellée sans argument. + * + * @note + * On pourrait économiser l'empilement en cas de non changemnt + * et lui faire retourner `False` pour prevenir l'appelant + * Le noyau de Spip sait le faire, mais pour assurer la compatibilité + * cette fonction retourne toujours non `False` + * + * @uses changer_langue() + * @param null|string $lang + * - string : Langue à appliquer, + * - null : Pour restituer la dernière langue mémorisée. + * @return string + * - string Langue utilisée. + **/ +function lang_select($lang = null) { static $pile_langues = array(); - if (!function_exists('changer_langue')) + if (!function_exists('changer_langue')) { include_spip('inc/lang'); - if ($lang === NULL) + } + if ($lang === null) { $lang = array_pop($pile_langues); - else { + } else { array_push($pile_langues, $GLOBALS['spip_lang']); } - if (isset($GLOBALS['spip_lang']) AND $lang == $GLOBALS['spip_lang']) + if (isset($GLOBALS['spip_lang']) and $lang == $GLOBALS['spip_lang']) { return $lang; + } changer_langue($lang); + return $lang; } - -// Renvoie une chaine qui decrit la session courante pour savoir si on peut -// utiliser un cache enregistre pour cette session. -// Par convention cette chaine ne doit pas contenir de caracteres [^0-9A-Za-z] -// Attention on ne peut *pas* inferer id_auteur a partir de la session, qui -// est une chaine arbitraire -// Cette chaine est courte (8 cars) pour pouvoir etre utilisee dans un nom -// de fichier cache -// http://doc.spip.org/@spip_session +/** + * Renvoie une chaîne qui identifie la session courante + * + * Permet de savoir si on peut utiliser un cache enregistré pour cette session. + * Cette chaîne est courte (8 cars) pour pouvoir être utilisée dans un nom + * de fichier cache. + * + * @pipeline_appel definir_session + * + * @param bool $force + * @return string + * Identifiant de la session + **/ function spip_session($force = false) { static $session; - if ($force OR !isset($session)) { + if ($force or !isset($session)) { $s = pipeline('definir_session', $GLOBALS['visiteur_session'] - ? serialize($GLOBALS['visiteur_session']) + ? serialize($GLOBALS['visiteur_session']) . '_' . @$_COOKIE['spip_session'] - : '' + : '' ); $session = $s ? substr(md5($s), 0, 8) : ''; } + #spip_log('session: '.$session); return $session; } /** - * Aide, aussi depuis l'espace prive a present. + * Retourne un lien vers une aide + * + * Aide, aussi depuis l'espace privé à présent. * Surchargeable mais pas d'erreur fatale si indisponible. - * + * * @param string $aide - * Cle d'identification de l'aide desiree + * Cle d'identification de l'aide desiree * @param bool $distante - * Generer une url locale (par defaut) - * ou une url distante [directement sur spip.net] - * @return Lien sur une icone d'aide -**/ -// http://doc.spip.org/@aide -function aide($aide='', $distante = false) { - $aider = charger_fonction('aider', 'inc', true); - return $aider ? $aider($aide, '', array(), $distante) : ''; -} - -// normalement il faudrait creer exec/info.php, mais pour mettre juste ca: -// http://doc.spip.org/@exec_info_dist + * Generer une url locale (par defaut) + * ou une url distante [directement sur spip.net] + * @return + * Lien sur une icone d'aide + **/ +function aider($aide = '', $distante = false) { + $aider = charger_fonction('aide', 'inc', true); + + return $aider ? $aider($aide, '', array(), $distante) : ''; +} + +/** + * Page `exec=info` : retourne le contenu de la fonction php `phpinfo()` + * + * Si l’utiliseur est un webmestre. + */ function exec_info_dist() { - global $connect_statut; - if ($connect_statut == '0minirezo') + + include_spip('inc/autoriser'); + if (autoriser('webmestre')) { phpinfo(); - else - echo "pas admin"; + } else { + include_spip('inc/filtres'); + sinon_interdire_acces(); + } } /** * Génère une erreur de squelette * * Génère une erreur de squelette qui sera bien visible par un - * administrateur authentifié lors d'une visite de la page en erreur + * administrateur authentifié lors d'une visite de la page en erreur * * @param bool|string|array $message - * - Message d'erreur (string|array) - * - false pour retourner le texte des messages d'erreurs - * - vide pour afficher les messages d'erreurs + * - Message d'erreur (string|array) + * - false pour retourner le texte des messages d'erreurs + * - vide pour afficher les messages d'erreurs * @param string|array|object $lieu - * Lieu d'origine de l'erreur + * Lieu d'origine de l'erreur * @return null|string - * Rien dans la plupart des cas - * - string si $message à false. -**/ -function erreur_squelette($message='', $lieu='') { + * - Rien dans la plupart des cas + * - string si $message à false. + **/ +function erreur_squelette($message = '', $lieu = '') { $debusquer = charger_fonction('debusquer', 'public'); if (is_array($lieu)) { include_spip('public/compiler'); $lieu = reconstruire_contexte_compil($lieu); } + return $debusquer($message, $lieu); } /** * Calcule un squelette avec un contexte et retourne son contenu - * + * * La fonction de base de SPIP : un squelette + un contexte => une page. * $fond peut etre un nom de squelette, ou une liste de squelette au format array. * Dans ce dernier cas, les squelettes sont tous evalues et mis bout a bout * $options permet de selectionner les options suivantes : - * trim => true (valeur par defaut) permet de ne rien renvoyer si le fond ne produit que des espaces ; - * raw => true permet de recuperer la strucure $page complete avec entetes et invalideurs + * + * - trim => true (valeur par defaut) permet de ne rien renvoyer si le fond ne produit que des espaces ; + * - raw => true permet de recuperer la strucure $page complete avec entetes et invalideurs * pour chaque $fond fourni. * * @api - * @param string/array $fond - * Le ou les squelettes à utiliser, sans l'extension, {@example prive/liste/auteurs} - * Le fichier sera retrouvé dans la liste des chemins connus de SPIP (squelettes, plugins, spip) + * @param string /array $fond + * - Le ou les squelettes à utiliser, sans l'extension, {@example prive/liste/auteurs} + * - Le fichier sera retrouvé dans la liste des chemins connus de SPIP (squelettes, plugins, spip) * @param array $contexte - * Informations de contexte envoyées au squelette, {@example array('id_rubrique' => 8)} - * La langue est transmise automatiquement (sauf option étoile). + * - Informations de contexte envoyées au squelette, {@example array('id_rubrique' => 8)} + * - La langue est transmise automatiquement (sauf option étoile). * @param array $options - * Options complémentaires : - * - trim : applique un trim sur le résultat (true par défaut) - * - raw : retourne un tableau d'information sur le squelette (false par défaut) - * - etoile : ne pas transmettre la langue au contexte automatiquement (false par défaut), - * équivalent de INCLURE* - * - ajax : gere les liens internes du squelette en ajax (équivalent du paramètre {ajax}) + * Options complémentaires : + * + * - trim : applique un trim sur le résultat (true par défaut) + * - raw : retourne un tableau d'information sur le squelette (false par défaut) + * - etoile : ne pas transmettre la langue au contexte automatiquement (false par défaut), + * équivalent de INCLURE* + * - ajax : gere les liens internes du squelette en ajax (équivalent du paramètre {ajax}) * @param string $connect - * Non du connecteur de bdd a utiliser + * Non du connecteur de bdd a utiliser * @return string|array - * Contenu du squelette calculé - * ou tableau d'information sur le squelette. + * - Contenu du squelette calculé + * - ou tableau d'information sur le squelette. */ -function recuperer_fond($fond, $contexte=array(), $options = array(), $connect='') { - if (!function_exists('evaluer_fond')) +function recuperer_fond($fond, $contexte = array(), $options = array(), $connect = '') { + if (!function_exists('evaluer_fond')) { include_spip('public/assembler'); + } // assurer la compat avec l'ancienne syntaxe // (trim etait le 3eme argument, par defaut a true) - if (!is_array($options)) $options = array('trim'=>$options); - if (!isset($options['trim'])) $options['trim']=true; + if (!is_array($options)) { + $options = array('trim' => $options); + } + if (!isset($options['trim'])) { + $options['trim'] = true; + } - if (isset($contexte['connect'])){ - $connect = ($connect ? $connect : $contexte['connect']); + if (isset($contexte['connect'])) { + $connect = $contexte['connect']; unset($contexte['connect']); } $texte = ""; $pages = array(); $lang_select = ''; - if (!isset($options['etoile']) OR !$options['etoile']){ + if (!isset($options['etoile']) or !$options['etoile']) { // Si on a inclus sans fixer le critere de lang, on prend la langue courante - if (!isset($contexte['lang'])) + if (!isset($contexte['lang'])) { $contexte['lang'] = $GLOBALS['spip_lang']; + } if ($contexte['lang'] != $GLOBALS['meta']['langue_site']) { $lang_select = lang_select($contexte['lang']); } } - @$GLOBALS['_INC_PUBLIC']++; + if (!isset($GLOBALS['_INC_PUBLIC'])) { + $GLOBALS['_INC_PUBLIC'] = 0; + } + + $GLOBALS['_INC_PUBLIC']++; - foreach(is_array($fond) ? $fond : array($fond) as $f){ + + foreach (is_array($fond) ? $fond : array($fond) as $f) { $page = evaluer_fond($f, $contexte, $connect); if ($page === '') { - $c = isset($options['compil']) ? $options['compil'] :''; - $a = array('fichier'=>$fond); + $c = isset($options['compil']) ? $options['compil'] : ''; + $a = array('fichier' => $fond); $erreur = _T('info_erreur_squelette2', $a); // squelette introuvable erreur_squelette($erreur, $c); // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4 $page = array('texte' => '', 'erreur' => $erreur); } - $page = pipeline('recuperer_fond',array( - 'args'=>array('fond'=>$f,'contexte'=>$contexte,'options'=>$options,'connect'=>$connect), - 'data'=>$page + $page = pipeline('recuperer_fond', array( + 'args' => array('fond' => $f, 'contexte' => $contexte, 'options' => $options, 'connect' => $connect), + 'data' => $page )); - if (isset($options['ajax']) AND $options['ajax']){ - if (!function_exists('encoder_contexte_ajax')) + if (isset($options['ajax']) and $options['ajax']) { + if (!function_exists('encoder_contexte_ajax')) { include_spip('inc/filtres'); - $page['texte'] = encoder_contexte_ajax(array_merge($contexte,array('fond'=>$f)),'',$page['texte'], $options['ajax']); + } + $page['texte'] = encoder_contexte_ajax( + array_merge( + $contexte, + array('fond' => $f), + ($connect ? array('connect' => $connect) : array()) + ), + '', + $page['texte'], + $options['ajax'] + ); } - if (isset($options['raw']) AND $options['raw']) + if (isset($options['raw']) and $options['raw']) { $pages[] = $page; - else + } else { $texte .= $options['trim'] ? rtrim($page['texte']) : $page['texte']; + } } $GLOBALS['_INC_PUBLIC']--; - if ($lang_select) lang_select(); - if (isset($options['raw']) AND $options['raw']) - return is_array($fond)?$pages:reset($pages); - else + if ($lang_select) { + lang_select(); + } + if (isset($options['raw']) and $options['raw']) { + return is_array($fond) ? $pages : reset($pages); + } else { return $options['trim'] ? ltrim($texte) : $texte; + } } /** @@ -2237,7 +3277,7 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect=' * @return string */ function trouve_modele($nom) { - return trouver_fond($nom,'modeles/'); + return trouver_fond($nom, 'modeles/'); } /** @@ -2252,55 +3292,95 @@ function trouve_modele($nom) { * @param bool $pathinfo * @return array|string */ -function trouver_fond($nom, $dir='', $pathinfo = false) { - $f = find_in_path($nom.'.'. _EXTENSION_SQUELETTES, $dir?rtrim($dir,'/').'/':''); - if (!$pathinfo) return $f; +function trouver_fond($nom, $dir = '', $pathinfo = false) { + $f = find_in_path($nom . '.' . _EXTENSION_SQUELETTES, $dir ? rtrim($dir, '/') . '/' : ''); + if (!$pathinfo) { + return $f; + } // renvoyer un tableau detaille si $pathinfo==true $p = pathinfo($f); - if (!isset($p['extension']) OR !$p['extension']) { + if (!isset($p['extension']) or !$p['extension']) { $p['extension'] = _EXTENSION_SQUELETTES; } - if (!isset($p['extension']) OR !$p['filename']) { - $p['filename'] = ($p['basename']?substr($p['basename'],0,-strlen($p['extension'])-1):''); + if (!isset($p['extension']) or !$p['filename']) { + $p['filename'] = ($p['basename'] ? substr($p['basename'], 0, -strlen($p['extension']) - 1) : ''); } - $p['fond'] = ($f?substr($f,0,-strlen($p['extension'])-1):''); + $p['fond'] = ($f ? substr($f, 0, -strlen($p['extension']) - 1) : ''); + return $p; } -function tester_url_ecrire($nom){ - static $exec=array(); - if (isset($exec[$nom])) return $exec[$nom]; +/** + * Teste, pour un nom de page de l'espace privé, s'il est possible + * de générer son contenu. + * + * Dans ce cas, on retourne la fonction d'exécution correspondante à utiliser + * (du répertoire `ecrire/exec`). Deux cas particuliers et prioritaires : + * `fond` ou `fond_monobloc` sont retournés si des squelettes existent. + * + * - `fond` : pour des squelettes de `prive/squelettes/contenu` + * ou pour des objets éditoriaux dont les suqelettes seront échaffaudés + * - `fond_monobloc` (compatibilité avec SPIP 2.1) : pour des squelettes de `prive/exec` + * + * @param string $nom + * Nom de la page + * @return string + * Nom de l'exec, sinon chaîne vide. + **/ +function tester_url_ecrire($nom) { + static $exec = array(); + if (isset($exec[$nom])) { + return $exec[$nom]; + } // tester si c'est une page en squelette - if (trouver_fond($nom, 'prive/squelettes/contenu/')) + if (trouver_fond($nom, 'prive/squelettes/contenu/')) { return $exec[$nom] = 'fond'; - // compat skels orthogonaux version precedente - elseif (trouver_fond($nom, 'prive/exec/')) + } // compat skels orthogonaux version precedente + elseif (trouver_fond($nom, 'prive/exec/')) { return $exec[$nom] = 'fond_monobloc'; - // echafaudage d'un fond ! - elseif(include_spip('public/styliser_par_z') AND z_echafaudable($nom)) + } // echafaudage d'un fond ! + elseif (include_spip('public/styliser_par_z') and z_echafaudable($nom)) { return $exec[$nom] = 'fond'; + } // attention, il ne faut pas inclure l'exec ici // car sinon #URL_ECRIRE provoque des inclusions // et des define intrusifs potentiels - return $exec[$nom] = ((find_in_path("{$nom}.php",'exec/') OR charger_fonction($nom,'exec',true))?$nom:''); + return $exec[$nom] = ((find_in_path("{$nom}.php", 'exec/') or charger_fonction($nom, 'exec', true)) ? $nom : ''); } -// Charger dynamiquement une extension php -// http://doc.spip.org/@charger_php_extension + +/** + * Tente de charger dynamiquement une extension PHP + * + * @example + * ``` + * $ok = charger_php_extension('sqlite'); + * ``` + * @uses inc_charger_php_extension_dist() Si la librairie n'est pas déjà charchée + * + * @param string $module Nom du module à charger + * @return bool true si le module est chargé + **/ function charger_php_extension($module) { if (extension_loaded($module)) { return true; } else { - $charger_php_extension = charger_fonction('charger_php_extension','inc'); + $charger_php_extension = charger_fonction('charger_php_extension', 'inc'); + return $charger_php_extension($module); } } -// Renvoie TRUE si et seulement si la configuration autorise -// le code HTML5 sur le site public + +/** + * Indique si le code HTML5 est permis sur le site public + * + * @return bool + * true si et seulement si la configuration autorise le code HTML5 sur le site public + **/ function html5_permis() { - return (isset($GLOBALS['meta']['version_html_max']) - AND ('html5' == $GLOBALS['meta']['version_html_max'])); + return (isset($GLOBALS['meta']['version_html_max']) + and ('html5' == $GLOBALS['meta']['version_html_max'])); } /* @@ -2308,27 +3388,55 @@ function html5_permis() { * desormais depreciees ; plutot que d'obliger tout le monde a charger * vieilles_defs, on va assumer l'histoire de ces 3 fonctions ubiquitaires */ -// Fonction depreciee -// http://doc.spip.org/@lire_meta + +/** + * lire_meta : fonction dépréciée + * + * @deprecated Utiliser `$GLOBALS['meta'][$nom]` ou `lire_config('nom')` + * @see lire_config() + * @param string $nom Clé de meta à lire + * @return mixed Valeur de la meta. + **/ function lire_meta($nom) { - return $GLOBALS['meta'][$nom]; + return isset($GLOBALS['meta'][$nom]) ? $GLOBALS['meta'][$nom] : null; } -// Fonction depreciee -// http://doc.spip.org/@ecrire_metas -function ecrire_metas() {} -// Fonction depreciee, cf. http://doc.spip.org/@sql_fetch -// http://doc.spip.org/@spip_fetch_array -function spip_fetch_array($r, $t=NULL) { +/** + * ecrire_metas : fonction dépréciée + * + * @deprecated + **/ +function ecrire_metas() { } + +/** + * Retourne une ligne d'un résultat de requête mysql (déprécié) + * + * @see sql_fetch() + * @deprecated Utiliser sql_fetch() + * @param Ressource $r Ressource mysql + * @param int|null $t Type de retour + * @return array|void|bool Tableau de la ligne SQL + **/ +function spip_fetch_array($r, $t = null) { if (!isset($t)) { - if ($r) return sql_fetch($r); + if ($r) { + return sql_fetch($r); + } } else { - if ($t=='SPIP_NUM') $t = MYSQL_NUM; - if ($t=='SPIP_BOTH') $t = MYSQL_BOTH; - if ($t=='SPIP_ASSOC') $t = MYSQL_ASSOC; + if ($t == 'SPIP_NUM') { + $t = MYSQLI_NUM; + } + if ($t == 'SPIP_BOTH') { + $t = MYSQLI_BOTH; + } + if ($t == 'SPIP_ASSOC') { + $t = MYSQLI_ASSOC; + } spip_log("appel deprecie de spip_fetch_array(..., $t)", 'vieilles_defs'); - if ($r) return mysql_fetch_array($r, $t); + if ($r) { + return mysqli_fetch_array($r, $t); + } } } @@ -2342,15 +3450,129 @@ function spip_fetch_array($r, $t=NULL) { * @param string $message * @param string $statut */ -function avertir_auteurs($nom,$message, $statut=''){ +function avertir_auteurs($nom, $message, $statut = '') { $alertes = $GLOBALS['meta']['message_alertes_auteurs']; if (!$alertes - OR !is_array($alertes = unserialize($alertes))) + or !is_array($alertes = unserialize($alertes)) + ) { $alertes = array(); + } - if (!isset($alertes[$statut])) + if (!isset($alertes[$statut])) { $alertes[$statut] = array(); + } $alertes[$statut][$nom] = $message; - ecrire_meta("message_alertes_auteurs",serialize($alertes)); -} -?> + ecrire_meta("message_alertes_auteurs", serialize($alertes)); +} + +if (PHP_VERSION_ID < 50500) { + if (!function_exists('array_column')) { + /** + * Returns the values from a single column of the input array, identified by + * the $columnKey. + * + * Optionally, you may provide an $indexKey to index the values in the returned + * array by the values from the $indexKey column in the input array. + * + * @link http://php.net/manual/fr/function.array-column.php + * @link https://github.com/ramsey/array_column/blob/master/src/array_column.php + * @copyright Copyright (c) Ben Ramsey (http://benramsey.com) + * @license http://opensource.org/licenses/MIT MIT + * + * @param array $input A multi-dimensional array (record set) from which to pull + * a column of values. + * @param mixed $columnKey The column of values to return. This value may be the + * integer key of the column you wish to retrieve, or it + * may be the string key name for an associative array. + * @param mixed $indexKey (Optional.) The column to use as the index/keys for + * the returned array. This value may be the integer key + * of the column, or it may be the string key name. + * @return array + */ + function array_column($input = null, $columnKey = null, $indexKey = null) + { + // Using func_get_args() in order to check for proper number of + // parameters and trigger errors exactly as the built-in array_column() + // does in PHP 5.5. + $argc = func_num_args(); + $params = func_get_args(); + + if ($argc < 2) { + trigger_error("array_column() expects at least 2 parameters, {$argc} given", E_USER_WARNING); + return null; + } + + if (!is_array($params[0])) { + trigger_error( + 'array_column() expects parameter 1 to be array, ' . gettype($params[0]) . ' given', + E_USER_WARNING + ); + return null; + } + + if (!is_int($params[1]) + && !is_float($params[1]) + && !is_string($params[1]) + && $params[1] !== null + && !(is_object($params[1]) && method_exists($params[1], '__toString')) + ) { + trigger_error('array_column(): The column key should be either a string or an integer', E_USER_WARNING); + return false; + } + + if (isset($params[2]) + && !is_int($params[2]) + && !is_float($params[2]) + && !is_string($params[2]) + && !(is_object($params[2]) && method_exists($params[2], '__toString')) + ) { + trigger_error('array_column(): The index key should be either a string or an integer', E_USER_WARNING); + return false; + } + + $paramsInput = $params[0]; + $paramsColumnKey = ($params[1] !== null) ? (string) $params[1] : null; + + $paramsIndexKey = null; + if (isset($params[2])) { + if (is_float($params[2]) || is_int($params[2])) { + $paramsIndexKey = (int) $params[2]; + } else { + $paramsIndexKey = (string) $params[2]; + } + } + + $resultArray = array(); + + foreach ($paramsInput as $row) { + $key = $value = null; + $keySet = $valueSet = false; + + if ($paramsIndexKey !== null && array_key_exists($paramsIndexKey, $row)) { + $keySet = true; + $key = (string) $row[$paramsIndexKey]; + } + + if ($paramsColumnKey === null) { + $valueSet = true; + $value = $row; + } elseif (is_array($row) && array_key_exists($paramsColumnKey, $row)) { + $valueSet = true; + $value = $row[$paramsColumnKey]; + } + + if ($valueSet) { + if ($keySet) { + $resultArray[$key] = $value; + } else { + $resultArray[] = $value; + } + } + + } + + return $resultArray; + } + + } +} \ No newline at end of file diff --git a/www/ecrire/inc/xml.php b/www/ecrire/inc/xml.php index 3a40fb1e..d6280ebd 100644 --- a/www/ecrire/inc/xml.php +++ b/www/ecrire/inc/xml.php @@ -3,174 +3,267 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Outils pour lecture de XML + * + * @package SPIP\Core\XML + **/ -// http://doc.spip.org/@spip_xml_load -function spip_xml_load($fichier, $strict=true, $clean=true, $taille_max = 1048576, $datas='', $profondeur = -1){ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + + +/** + * Lit un fichier xml donné et renvoie son arbre. + * + * @example + * ``` + * include_spip('inc/xml'); + * $arbre = spip_xml_load(_DIR_PLUGINS . "$plug/plugin.xml"); + * ``` + * + * @uses spip_xml_parse() + * + * @param string $fichier + * Chemin local ou URL distante du fichier XML + * @param bool $strict + * true pour râler si une balise n'est pas correctement fermée, false sinon. + * @param bool $clean ? + * @param int $taille_max + * Taille maximale si fichier distant + * @param string|array $datas + * Données à envoyer pour récupérer le fichier distant + * @param int $profondeur ? + * @return array|bool + * - array : l'arbre XML, + * - false si l'arbre xml ne peut être créé ou est vide + **/ +function spip_xml_load($fichier, $strict = true, $clean = true, $taille_max = 1048576, $datas = '', $profondeur = -1) { $contenu = ""; - if (preg_match(",^(http|ftp)://,",$fichier)){ + if (tester_url_absolue($fichier)) { include_spip('inc/distant'); - $contenu = recuperer_page($fichier,false,false,$taille_max, $datas); + $contenu = recuperer_page($fichier, false, false, $taille_max, $datas); + } else { + lire_fichier($fichier, $contenu); } - else lire_fichier ($fichier, $contenu); $arbre = array(); - if ($contenu) + if ($contenu) { $arbre = spip_xml_parse($contenu, $strict, $clean, $profondeur); - - return count($arbre)?$arbre:false; + } + + return count($arbre) ? $arbre : false; +} + +if (!defined('_SPIP_XML_TAG_SPLIT')) { + define('_SPIP_XML_TAG_SPLIT', "{<([^:>][^>]*?)>}sS"); } -if (!defined('_SPIP_XML_TAG_SPLIT')) define('_SPIP_XML_TAG_SPLIT', "{<([^:>][^>]*?)>}sS"); -// http://doc.spip.org/@spip_xml_parse -function spip_xml_parse(&$texte, $strict=true, $clean=true, $profondeur = -1){ +/** + * Parse une chaine XML donnée et retourne un tableau. + * + * @see spip_xml_aplatit() pour l'inverse + * + * @param string $texte + * Texte XML + * @param bool $strict + * true pour râler si une balise n'est pas correctement fermée, false sinon. + * @param bool $clean ? + * @param int $profondeur ? + * @return array|bool + * - array : l'arbre XML, + * - false si l'arbre xml ne peut être créé ou est vide + **/ +function spip_xml_parse(&$texte, $strict = true, $clean = true, $profondeur = -1) { $out = array(); - // enlever les commentaires - $charset = 'AUTO'; - if ($clean===true){ - if (preg_match(",<\?xml\s(.*?)encoding=['\"]?(.*?)['\"]?(\s(.*))?\?>,im",$texte,$regs)) - $charset = $regs[2]; - $texte = preg_replace(',,is','',$texte); - $texte = preg_replace(',<\?(.*?)\?>,is','',$texte); + // enlever les commentaires + $charset = 'AUTO'; + if ($clean === true) { + if (preg_match(",<\?xml\s(.*?)encoding=['\"]?(.*?)['\"]?(\s(.*))?\?>,im", $texte, $regs)) { + $charset = $regs[2]; + } + $texte = preg_replace(',,is', '', $texte); + $texte = preg_replace(',<\?(.*?)\?>,is', '', $texte); include_spip('inc/charsets'); $clean = $charset; //$texte = importer_charset($texte,$charset); - } - if (is_string($clean)) $charset = $clean; - $txt = $texte; + } + if (is_string($clean)) { + $charset = $clean; + } + $txt = $texte; // tant qu'il y a des tags - $chars = preg_split(_SPIP_XML_TAG_SPLIT,$txt,2,PREG_SPLIT_DELIM_CAPTURE); - while(count($chars)>=2){ + $chars = preg_split(_SPIP_XML_TAG_SPLIT, $txt, 2, PREG_SPLIT_DELIM_CAPTURE); + while (count($chars) >= 2) { // tag ouvrant //$chars = preg_split("{<([^>]*?)>}s",$txt,2,PREG_SPLIT_DELIM_CAPTURE); - + // $before doit etre vide ou des espaces uniquements! $before = trim($chars[0]); - if (strlen($before)>0) - return importer_charset($texte,$charset);//$texte; // before non vide, donc on est dans du texte - + if (strlen($before) > 0) { + return importer_charset($texte, $charset); + }//$texte; // before non vide, donc on est dans du texte + $tag = rtrim($chars[1]); $txt = $chars[2]; - - if (strncmp($tag,'![CDATA[',8)==0) return importer_charset($texte,$charset);//$texte; - if(substr($tag,-1)=='/'){ // self closing tag - $tag = rtrim(substr($tag,0,strlen($tag)-1)); - $out[$tag][]=""; - } - else{ - $closing_tag = preg_split(",\s|\t|\n|\r,",trim($tag)); - $closing_tag=reset($closing_tag); + + if (strncmp($tag, '![CDATA[', 8) == 0) { + return importer_charset($texte, $charset); + }//$texte; + if (substr($tag, -1) == '/') { // self closing tag + $tag = rtrim(substr($tag, 0, strlen($tag) - 1)); + $out[$tag][] = ""; + } else { + $closing_tag = preg_split(",\s|\t|\n|\r,", trim($tag)); + $closing_tag = reset($closing_tag); // tag fermant $ncclos = strlen(""); - $p = strpos($txt,""); - if ($p!==FALSE AND (strpos($txt,"<")<$p)){ - $nclose =0; $nopen = 0; + $p = strpos($txt, ""); + if ($p !== false and (strpos($txt, "<") < $p)) { + $nclose = 0; + $nopen = 0; $d = 0; while ( - $p!==FALSE - AND ($morceau = substr($txt,$d,$p-$d)) - AND (($nopen+=preg_match_all("{<".preg_quote($closing_tag)."(\s*>|\s[^>]*[^/>]>)}is",$morceau,$matches,PREG_SET_ORDER))>$nclose) - ){ + $p !== false + and ($morceau = substr($txt, $d, $p - $d)) + and (($nopen += preg_match_all("{<" . preg_quote($closing_tag) . "(\s*>|\s[^>]*[^/>]>)}is", $morceau, + $matches, PREG_SET_ORDER)) > $nclose) + ) { $nclose++; - $d=$p+$ncclos; - $p = strpos($txt,"",$d); + $d = $p + $ncclos; + $p = strpos($txt, "", $d); } } - if ($p===FALSE){ - if ($strict){ - $out[$tag][]="erreur : tag fermant $tag manquant::$txt"; + if ($p === false) { + if ($strict) { + $out[$tag][] = "erreur : tag fermant $tag manquant::$txt"; + return $out; - } - else return importer_charset($texte,$charset);//$texte // un tag qui constitue du texte a reporter dans $before + } else { + return importer_charset($texte, $charset); + }//$texte // un tag qui constitue du texte a reporter dans $before + } + $content = substr($txt, 0, $p); + $txt = substr($txt, $p + $ncclos); + if ($profondeur == 0 or strpos($content, "<") === false) // eviter une recursion si pas utile + { + $out[$tag][] = importer_charset($content, $charset); + }//$content; + else { + $out[$tag][] = spip_xml_parse($content, $strict, $clean, $profondeur - 1); } - $content = substr($txt,0,$p); - $txt = substr($txt,$p+$ncclos); - if ($profondeur==0 OR strpos($content,"<")===FALSE) // eviter une recursion si pas utile - $out[$tag][] = importer_charset($content,$charset);//$content; - else - $out[$tag][]=spip_xml_parse($content, $strict, $clean, $profondeur-1); } - $chars = preg_split(_SPIP_XML_TAG_SPLIT,$txt,2,PREG_SPLIT_DELIM_CAPTURE); + $chars = preg_split(_SPIP_XML_TAG_SPLIT, $txt, 2, PREG_SPLIT_DELIM_CAPTURE); } - if (count($out)&&(strlen(trim($txt))==0)) + if (count($out) && (strlen(trim($txt)) == 0)) { return $out; - else - return importer_charset($texte,$charset);//$texte; + } else { + return importer_charset($texte, $charset); + }//$texte; } -// http://doc.spip.org/@spip_xml_aplatit -function spip_xml_aplatit($arbre,$separateur = " "){ +// http://code.spip.net/@spip_xml_aplatit +function spip_xml_aplatit($arbre, $separateur = " ") { $s = ""; - if (is_array($arbre)) - foreach($arbre as $tag=>$feuille){ - if (is_array($feuille)){ - if ($tag!==intval($tag)){ + if (is_array($arbre)) { + foreach ($arbre as $tag => $feuille) { + if (is_array($feuille)) { + if ($tag !== intval($tag)) { $f = spip_xml_aplatit($feuille, $separateur); if (strlen($f)) { - $tagf = explode(" ",$tag); + $tagf = explode(" ", $tag); $tagf = $tagf[0]; - $s.="<$tag>$f"; + $s .= "<$tag>$f"; + } else { + $s .= "<$tag />"; } - else $s.="<$tag />"; + } else { + $s .= spip_xml_aplatit($feuille); } - else - $s.=spip_xml_aplatit($feuille); $s .= $separateur; + } else { + $s .= "$feuille$separateur"; } - else - $s.="$feuille$separateur"; } + } + return strlen($separateur) ? substr($s, 0, -strlen($separateur)) : $s; } -// http://doc.spip.org/@spip_xml_tagname -function spip_xml_tagname($tag){ - if (preg_match(',^([a-z][\w:]*),i',$tag,$reg)) +// http://code.spip.net/@spip_xml_tagname +function spip_xml_tagname($tag) { + if (preg_match(',^([a-z][\w:]*),i', $tag, $reg)) { return $reg[1]; + } + return ""; } -// http://doc.spip.org/@spip_xml_decompose_tag -function spip_xml_decompose_tag($tag){ + +// http://code.spip.net/@spip_xml_decompose_tag +function spip_xml_decompose_tag($tag) { $tagname = spip_xml_tagname($tag); $liste = array(); - $p=strpos($tag,' '); - $tag = substr($tag,$p); - $p=strpos($tag,'='); - while($p!==false){ - $attr = trim(substr($tag,0,$p)); - $tag = ltrim(substr($tag,$p+1)); + $p = strpos($tag, ' '); + $tag = substr($tag, $p); + $p = strpos($tag, '='); + while ($p !== false) { + $attr = trim(substr($tag, 0, $p)); + $tag = ltrim(substr($tag, $p + 1)); $quote = $tag{0}; - $p=strpos($tag,$quote,1); - $cont = substr($tag,1,$p-1); + $p = strpos($tag, $quote, 1); + $cont = substr($tag, 1, $p - 1); $liste[$attr] = $cont; - $tag = substr($tag,$p+1); - $p=strpos($tag,'='); + $tag = substr($tag, $p + 1); + $p = strpos($tag, '='); } - return array($tagname,$liste); + + return array($tagname, $liste); } -// http://doc.spip.org/@spip_xml_match_nodes -function spip_xml_match_nodes($regexp,&$arbre,&$matches,$init=true){ - if ($init) +/** + * Recherche dans un arbre XML généré par `spip_xml_parse()` (ou une branche de cet arbre) + * les clés de l'arbre qui valident la regexp donnée. + * + * Les branches qui valident la regexp sont retournées dans le tableau `$matches`. + * + * @see spip_xml_parse() + * @see spip_xml_decompose_tag() + * + * @param string $regexp + * Expression régulière + * @param array $arbre + * Arbre XML + * @param array $matches + * Branches de l'arbre validant la rexgep + * @param bool $init ? + * @return bool + * false si aucun élément ne valide l'expression régulière, true sinon. + **/ +function spip_xml_match_nodes($regexp, &$arbre, &$matches, $init = true) { + if ($init) { $matches = array(); - if(is_array($arbre) && count($arbre)) - foreach(array_keys($arbre) as $tag){ - if (preg_match($regexp,$tag)) + } + if (is_array($arbre) && count($arbre)) { + foreach (array_keys($arbre) as $tag) { + if (preg_match($regexp, $tag)) { $matches[$tag] = &$arbre[$tag]; - if (is_array($arbre[$tag])) - foreach(array_keys($arbre[$tag]) as $occurences) - spip_xml_match_nodes($regexp,$arbre[$tag][$occurences],$matches,false); + } + if (is_array($arbre[$tag])) { + foreach (array_keys($arbre[$tag]) as $occurences) { + spip_xml_match_nodes($regexp, $arbre[$tag][$occurences], $matches, false); + } + } } + } + return (count($matches)); } - - -?> diff --git a/www/ecrire/inc_version.php b/www/ecrire/inc_version.php index 713bdf10..f2286add 100644 --- a/www/ecrire/inc_version.php +++ b/www/ecrire/inc_version.php @@ -3,93 +3,141 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -# -if (defined('_ECRIRE_INC_VERSION')) return; +/** + * Initialisation de SPIP + * + * @package SPIP\Core\Chargement + **/ + +if (defined('_ECRIRE_INC_VERSION')) { + return; +} + +/** + * Indique que SPIP est chargé + * + * Cela permet des tests de sécurités pour les fichiers PHP + * de SPIP et des plugins qui peuvent vérifier que SPIP est chargé + * et donc que les fichiers ne sont pas appelés en dehors de l'usage de SPIP + */ define('_ECRIRE_INC_VERSION', "1"); # masquer les eventuelles erreurs sur les premiers define error_reporting(E_ALL ^ E_NOTICE); -# version PHP minimum exigee (cf. inc/utils) -define ('_PHP_MIN', '5.1.0'); +/** version PHP minimum exigee (cf. inc/utils) */ +define('_PHP_MIN', '5.4.0'); + +if (!defined('_DIR_RESTREINT_ABS')) { + /** le nom du repertoire ecrire/ */ + define('_DIR_RESTREINT_ABS', 'ecrire/'); +} -# le nom du repertoire ecrire/ -if (!defined('_DIR_RESTREINT_ABS')) define('_DIR_RESTREINT_ABS', 'ecrire/'); -# sommes-nous dans ecrire/ ? +/** Chemin relatif pour aller dans ecrire + * vide si on est dans ecrire, 'ecrire/' sinon */ define('_DIR_RESTREINT', - (!is_dir(_DIR_RESTREINT_ABS) ? "" : _DIR_RESTREINT_ABS)); -# ou inversement ? +(!is_dir(_DIR_RESTREINT_ABS) ? "" : _DIR_RESTREINT_ABS)); + +/** Chemin relatif pour aller à la racine */ define('_DIR_RACINE', _DIR_RESTREINT ? '' : '../'); -# chemins absolus -define('_ROOT_RACINE', dirname(dirname(__FILE__)).'/'); -define('_ROOT_CWD', getcwd().'/'); +/** chemin absolu vers la racine */ +define('_ROOT_RACINE', dirname(dirname(__FILE__)) . '/'); +/** chemin absolu vers le repertoire de travail */ +define('_ROOT_CWD', getcwd() . '/'); +/** chemin absolu vers ecrire */ define('_ROOT_RESTREINT', _ROOT_CWD . _DIR_RESTREINT); // Icones -# nom du dossier images -if (!defined('_NOM_IMG_PACK')) define('_NOM_IMG_PACK', 'images/'); -# le chemin http (relatif) vers les images standard +if (!defined('_NOM_IMG_PACK')) { + /** Nom du dossier images */ + define('_NOM_IMG_PACK', 'images/'); +} +/** le chemin http (relatif) vers les images standard */ define('_DIR_IMG_PACK', (_DIR_RACINE . 'prive/' . _NOM_IMG_PACK)); -# le chemin php (absolu) vers les images standard (pour hebergement centralise) +/** le chemin php (absolu) vers les images standard (pour hebergement centralise) */ define('_ROOT_IMG_PACK', dirname(dirname(__FILE__)) . '/prive/' . _NOM_IMG_PACK); -# le nom du repertoire des bibliotheques JavaScript -if (!defined('_JAVASCRIPT')) define('_JAVASCRIPT', 'javascript/'); // utilisable avec #CHEMIN et find_in_path +if (!defined('_JAVASCRIPT')) { + /** Nom du repertoire des bibliotheques JavaScript */ + define('_JAVASCRIPT', 'javascript/'); +} // utilisable avec #CHEMIN et find_in_path +/** le nom du repertoire des bibliotheques JavaScript du prive */ define('_DIR_JAVASCRIPT', (_DIR_RACINE . 'prive/' . _JAVASCRIPT)); # Le nom des 4 repertoires modifiables par les scripts lances par httpd # Par defaut ces 4 noms seront suffixes par _DIR_RACINE (cf plus bas) # mais on peut les mettre ailleurs et changer completement les noms -# le nom du repertoire des fichiers Temporaires Inaccessibles par http:// -if (!defined('_NOM_TEMPORAIRES_INACCESSIBLES')) define('_NOM_TEMPORAIRES_INACCESSIBLES', "tmp/"); -# le nom du repertoire des fichiers Temporaires Accessibles par http:// -if (!defined('_NOM_TEMPORAIRES_ACCESSIBLES')) define('_NOM_TEMPORAIRES_ACCESSIBLES', "local/"); -# le nom du repertoire des fichiers Permanents Inaccessibles par http:// -if (!defined('_NOM_PERMANENTS_INACCESSIBLES')) define('_NOM_PERMANENTS_INACCESSIBLES', "config/"); -# le nom du repertoire des fichiers Permanents Accessibles par http:// -if (!defined('_NOM_PERMANENTS_ACCESSIBLES')) define('_NOM_PERMANENTS_ACCESSIBLES', "IMG/"); +if (!defined('_NOM_TEMPORAIRES_INACCESSIBLES')) { + /** Nom du repertoire des fichiers Temporaires Inaccessibles par http:// */ + define('_NOM_TEMPORAIRES_INACCESSIBLES', "tmp/"); +} +if (!defined('_NOM_TEMPORAIRES_ACCESSIBLES')) { + /** Nom du repertoire des fichiers Temporaires Accessibles par http:// */ + define('_NOM_TEMPORAIRES_ACCESSIBLES', "local/"); +} +if (!defined('_NOM_PERMANENTS_INACCESSIBLES')) { + /** Nom du repertoire des fichiers Permanents Inaccessibles par http:// */ + define('_NOM_PERMANENTS_INACCESSIBLES', "config/"); +} +if (!defined('_NOM_PERMANENTS_ACCESSIBLES')) { + /** Nom du repertoire des fichiers Permanents Accessibles par http:// */ + define('_NOM_PERMANENTS_ACCESSIBLES', "IMG/"); +} -// Le nom du fichier de personnalisation -if (!defined('_NOM_CONFIG')) define('_NOM_CONFIG', 'mes_options'); +/** Le nom du fichier de personnalisation */ +if (!defined('_NOM_CONFIG')) { + define('_NOM_CONFIG', 'mes_options'); +} // Son emplacement absolu si on le trouve if (@file_exists($f = _ROOT_RACINE . _NOM_PERMANENTS_INACCESSIBLES . _NOM_CONFIG . '.php') -OR (@file_exists($f = _ROOT_RESTREINT . _NOM_CONFIG . '.php'))) { + or (@file_exists($f = _ROOT_RESTREINT . _NOM_CONFIG . '.php')) +) { + /** Emplacement absolu du fichier d'option */ define('_FILE_OPTIONS', $f); -} else define('_FILE_OPTIONS', ''); - -// les modules par defaut pour la traduction. -// Constante utilisee par le compilateur et le decompilateur -// sa valeur etant traitee par inc_traduire_dist +} else { + define('_FILE_OPTIONS', ''); +} -if (!defined('MODULES_IDIOMES')) define('MODULES_IDIOMES', 'public|spip|ecrire'); +if (!defined('MODULES_IDIOMES')) { + /** + * Modules par défaut pour la traduction. + * + * Constante utilisée par le compilateur et le décompilateur + * sa valeur etant traitée par inc_traduire_dist + */ + define('MODULES_IDIOMES', 'public|spip|ecrire'); +} // *** Fin des define *** // // Inclure l'ecran de securite if (!defined('_ECRAN_SECURITE') -AND @file_exists($f = _ROOT_RACINE . _NOM_PERMANENTS_INACCESSIBLES . 'ecran_securite.php')) + and @file_exists($f = _ROOT_RACINE . _NOM_PERMANENTS_INACCESSIBLES . 'ecran_securite.php') +) { include $f; +} + /* * Détecteur de robot d'indexation */ -if (!defined('_IS_BOT')){ +if (!defined('_IS_BOT')) { define('_IS_BOT', isset($_SERVER['HTTP_USER_AGENT']) - AND preg_match( + and preg_match( // mots generiques ',bot|slurp|crawler|spider|webvac|yandex|' // MSIE 6.0 est un botnet 99,9% du temps, on traite donc ce USER_AGENT comme un bot @@ -119,7 +167,7 @@ defined('_LOG_ALERTE_ROUGE') || define('_LOG_ALERTE_ROUGE', 1); defined('_LOG_CRITIQUE') || define('_LOG_CRITIQUE', 2); defined('_LOG_ERREUR') || define('_LOG_ERREUR', 3); defined('_LOG_AVERTISSEMENT') || define('_LOG_AVERTISSEMENT', 4); -defined('_LOG_INFO_IMPORTANTE') || define ('_LOG_INFO_IMPORTANTE', 5); +defined('_LOG_INFO_IMPORTANTE') || define('_LOG_INFO_IMPORTANTE', 5); defined('_LOG_INFO') || define('_LOG_INFO', 6); defined('_LOG_DEBUG') || define('_LOG_DEBUG', 7); @@ -144,13 +192,12 @@ $dossier_squelettes = ""; $filtrer_javascript = 0; // PS: dans les forums, petitions, flux syndiques... c'est *toujours* securise -// Type d'URLs -// 'page': spip.php?article123 [c'est la valeur par defaut pour SPIP 2.0] -// 'html': article123.html -// 'propres': Titre-de-l-article -// 'propres2' : Titre-de-l-article.html (base sur 'propres') -// 'arbo' : /article/Titre -$type_urls = 'page'; // 'page' => surcharge possible par configuration +// Type d'URLs +// inc/utils.php sélectionne le type 'page' (spip.php?article123) en l'absence +// d'autre configuration stockée en $GLOBALS['meta']['type_urls] +// Pour les autres types: voir urls_etendues +// $type_urls n'a plus de valeur par défaut en 3.1 mais permet de forcer une +// configuration d'urls dans les fichiers d'options. #la premiere date dans le menu deroulant de date de publication # null: automatiquement (affiche les 8 dernieres annees) @@ -159,12 +206,53 @@ $type_urls = 'page'; // 'page' => surcharge possible par configuration $debut_date_publication = null; - +// +// Prendre en compte les entetes HTTP_X_FORWARDED_XX +// +if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) and $_SERVER['HTTP_X_FORWARDED_PROTO']==='https'){ + if (empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { + $_SERVER['HTTP_X_FORWARDED_HOST'] = $_SERVER['HTTP_HOST']; + } + if (empty($_SERVER['HTTP_X_FORWARDED_PORT'])) { + $_SERVER['HTTP_X_FORWARDED_PORT'] = 443; + } +} +if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])){ + if (isset($_SERVER['HTTP_X_FORWARDED_PORT']) and is_numeric($_SERVER['HTTP_X_FORWARDED_PORT'])){ + $_SERVER['SERVER_PORT'] = $_SERVER['HTTP_X_FORWARDED_PORT']; + if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) and $_SERVER['HTTP_X_FORWARDED_PROTO']==='https'){ + $_SERVER['HTTPS'] = 'on'; + if (isset($_SERVER['REQUEST_SCHEME'])) { + $_SERVER['REQUEST_SCHEME'] = 'https'; + } + } + } + $host = $_SERVER['HTTP_X_FORWARDED_HOST']; + if (strpos($host,',')!==false){ + $h = explode(',',$host); + $host = trim(reset($h)); + } + // securite sur le contenu de l'entete + $host = strtr($host, "<>?\"\{\}\$'` \r\n", '____________'); + $_SERVER['HTTP_HOST'] = $host; +} // // On note le numero IP du client dans la variable $ip // -if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; -if (isset($_SERVER['REMOTE_ADDR'])) $ip = $_SERVER['REMOTE_ADDR']; +if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { + $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; + if (strpos($ip,',')!==false){ + $ip = explode(',',$ip); + $ip = reset($ip); + } + // ecraser $_SERVER['REMOTE_ADDR'] si elle est en localhost + if (isset($_SERVER['REMOTE_ADDR']) AND $_SERVER['REMOTE_ADDR']==='127.0.0.1'){ + $_SERVER['REMOTE_ADDR'] = $ip; + } +} +if (isset($_SERVER['REMOTE_ADDR'])) { + $ip = $_SERVER['REMOTE_ADDR']; +} // Pour renforcer la privacy, decommentez la ligne ci-dessous (ou recopiez-la // dans le fichier config/mes_options) : SPIP ne pourra alors conserver aucun @@ -173,12 +261,11 @@ if (isset($_SERVER['REMOTE_ADDR'])) $ip = $_SERVER['REMOTE_ADDR']; # $ip = substr(md5($ip),0,16); -// faut-il faire des connexions completes rappelant le nom du serveur et/ou de -// la base MySQL ? (utile si vos squelettes appellent d'autres bases MySQL) +// faut-il faire des connexions Mysql rappelant le nom de la base MySQL ? +// (utile si vos squelettes appellent d'autres bases MySQL) // (A desactiver en cas de soucis de connexion chez certains hebergeurs) // Note: un test a l'installation peut aussi avoir desactive // $mysql_rappel_nom_base directement dans le fichier inc_connect -$mysql_rappel_connexion = true; $mysql_rappel_nom_base = true; // faut-il afficher en rouge les chaines non traduites ? @@ -201,11 +288,10 @@ $quota_cache = 10; // // Serveurs externes // -# aide en ligne -$home_server = 'http://www.spip.net'; -$help_server = array($home_server . '/aide'); +# Serveur de documentation officielle +$home_server = 'https://www.spip.net'; # glossaire pour raccourci [?X]. Aussi: [?X#G] et definir glossaire_G -$url_glossaire_externe = "http://@lang@.wikipedia.org/wiki/%s"; +$url_glossaire_externe = "https://@lang@.wikipedia.org/wiki/%s"; # TeX $tex_server = 'http://math.spip.org/tex.php'; @@ -219,17 +305,7 @@ $traiter_math = 'tex'; $xhtml = false; $xml_indent = false; -// Vignettes de previsulation des referers -// dans les statistiques -// 2 de trouves, possibilite de switcher -// - Alexa, equivalent Thumbshots, avec vignettes beaucoup plus grandes mais avertissement si pas de preview -// Pour Alexa, penser a indiquer l'url du site dans l'id. -// Dans Alexa, si on supprimer size=small, alors vignettes tres grandes -// - apercite.fr : on conserve exactement la même expression pour insérer l'url du site -$source_vignettes = "http://www.apercite.fr/api/apercite/120x90/oui/oui/http://"; -// $source_vignettes = "http://pthumbnails.alexa.com/image_server.cgi?id=www.monsite.net&size=small&url=http://"; - -$formats_logos = array ('gif', 'jpg', 'png'); +$formats_logos = array('gif', 'jpg', 'png'); // Controler les dates des item dans les flux RSS ? $controler_dates_rss = true; @@ -242,11 +318,11 @@ $controler_dates_rss = true; # ils seront compiles par la suite # note: un pipeline non reference se compile aussi, mais uniquement # lorsqu'il est rencontre -// http://doc.spip.org/@Tuto-Se-servir-des-points-d-entree +// http://programmer.spip.net/-Les-pipelines- $spip_pipeline = array(); # la matrice standard (fichiers definissant les fonctions a inclure) -$spip_matrice = array (); +$spip_matrice = array(); # les plugins a activer $plugins = array(); // voir le contenu du repertoire /plugins/ # les surcharges de include_spip() @@ -266,7 +342,7 @@ $tables_jointures = array(); // Liste des statuts. $liste_des_statuts = array( "info_administrateurs" => '0minirezo', - "info_redacteurs" =>'1comite', + "info_redacteurs" => '1comite', "info_visiteurs" => '6forum', "texte_statut_poubelle" => '5poubelle' ); @@ -281,8 +357,8 @@ $liste_des_etats = array( // liste des methodes d'authentifications $liste_des_authentifications = array( - 'spip'=>'spip', - 'ldap'=>'ldap' + 'spip' => 'spip', + 'ldap' => 'ldap' ); // Experimental : pour supprimer systematiquement l'affichage des numeros @@ -296,12 +372,15 @@ $liste_des_authentifications = array( // pour specifier les versions de SPIP necessaires // il faut s'en tenir a un nombre de decimales fixe // ex : 2.0.0, 2.0.0-dev, 2.0.0-beta, 2.0.0-beta2 -$spip_version_branche = "3.0.26"; +$spip_version_branche = "3.2.0"; +// cette version dev accepte tous les plugins compatible avec la version ci-dessous +// a supprimer en phase beta/rc/release +#define('_DEV_VERSION_SPIP_COMPAT',"3.1.3"); // version des signatures de fonctions PHP // (= numero SVN de leur derniere modif cassant la compatibilite et/ou necessitant un recalcul des squelettes) -$spip_version_code = 17873; +$spip_version_code = 22653; // version de la base SQL (= numero SVN de sa derniere modif) -$spip_version_base = 19268; +$spip_version_base = 23375; // version de l'interface a la base $spip_sql_version = 1; @@ -312,7 +391,7 @@ $spip_sql_version = 1; $spip_version_affichee = "$spip_version_branche"; // ** Securite ** -$visiteur_session = $auteur_session = $connect_statut = $connect_toutes_rubriques = $hash_recherche = $hash_recherche_strict = $ldap_present =''; +$visiteur_session = $auteur_session = $connect_statut = $connect_toutes_rubriques = $hash_recherche = $hash_recherche_strict = $ldap_present = ''; $meta = $connect_id_rubrique = array(); // *** Fin des globales *** // @@ -325,11 +404,18 @@ require_once _ROOT_RESTREINT . 'base/connect_sql.php'; // Definition personnelles eventuelles -if (_FILE_OPTIONS) {include_once _FILE_OPTIONS;} +if (_FILE_OPTIONS) { + include_once _FILE_OPTIONS; +} -// Masquer les warning -if (!defined('E_DEPRECATED')) define('E_DEPRECATED', 8192); // compatibilite PHP 5.3 -if (!defined('SPIP_ERREUR_REPORT')) define('SPIP_ERREUR_REPORT', E_ALL ^ E_NOTICE ^ E_DEPRECATED); +if (!defined('E_DEPRECATED')) { + /** Compatibilite PHP 5.3 */ + define('E_DEPRECATED', 8192); +} +if (!defined('SPIP_ERREUR_REPORT')) { + /** Masquer les warning */ + define('SPIP_ERREUR_REPORT', E_ALL ^ E_NOTICE ^ E_DEPRECATED); +} error_reporting(SPIP_ERREUR_REPORT); // Initialisations critiques non surchargeables par les plugins @@ -341,10 +427,10 @@ error_reporting(SPIP_ERREUR_REPORT); // ===> on execute en neutralisant les messages d'erreur spip_initialisation_core( - (_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES), - (_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES), - (_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES), - (_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES) + (_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES), + (_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES), + (_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES), + (_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES) ); @@ -353,7 +439,7 @@ spip_initialisation_core( // qui ne sera pas execute car _ECRIRE_INC_VERSION est defini // donc il faut avoir tout fini ici avant de charger les plugins -if (@is_readable(_CACHE_PLUGINS_OPT) AND @is_readable(_CACHE_PLUGINS_PATH)){ +if (@is_readable(_CACHE_PLUGINS_OPT) and @is_readable(_CACHE_PLUGINS_PATH)) { // chargement optimise precompile include_once(_CACHE_PLUGINS_OPT); } else { @@ -363,53 +449,77 @@ if (@is_readable(_CACHE_PLUGINS_OPT) AND @is_readable(_CACHE_PLUGINS_PATH)){ // de chargement des plugins et des pipelines actualise_plugins_actifs(); } + // Initialisations non critiques surchargeables par les plugins spip_initialisation_suite(); -// niveau maxi d'enregistrement des logs -defined('_LOG_FILTRE_GRAVITE') || define('_LOG_FILTRE_GRAVITE', _LOG_INFO_IMPORTANTE); +if (!defined('_LOG_FILTRE_GRAVITE')) { + /** niveau maxi d'enregistrement des logs */ + define('_LOG_FILTRE_GRAVITE', _LOG_INFO_IMPORTANTE); +} -if (!defined('_OUTILS_DEVELOPPEURS')) - define('_OUTILS_DEVELOPPEURS',false); +if (!defined('_OUTILS_DEVELOPPEURS')) { + /** Activer des outils pour développeurs ? */ + define('_OUTILS_DEVELOPPEURS', false); +} // charger systematiquement inc/autoriser dans l'espace restreint -if (test_espace_prive()) +if (test_espace_prive()) { include_spip('inc/autoriser'); +} // // Installer Spip si pas installe... sauf si justement on est en train // if (!(_FILE_CONNECT -OR autoriser_sans_cookie(_request('exec')) -OR _request('action') == 'cookie' -OR _request('action') == 'converser' -OR _request('action') == 'test_dirs')) { + or autoriser_sans_cookie(_request('exec')) + or _request('action') == 'cookie' + or _request('action') == 'converser' + or _request('action') == 'test_dirs') +) { // Si on peut installer, on lance illico if (test_espace_prive()) { include_spip('inc/headers'); redirige_url_ecrire("install"); } else { - // Si on est dans le site public, dire que qq s'en occupe + // Si on est dans le site public, dire que qq s'en occupe include_spip('inc/minipres'); utiliser_langue_visiteur(); - echo minipres(_T('info_travaux_titre'), "

    "._T('info_travaux_texte')."

    "); + echo minipres(_T('info_travaux_titre'), "

    " . _T('info_travaux_texte') . "

    "); exit; } // autrement c'est une install ad hoc (spikini...), on sait pas faire } +// memoriser un tri sessionne eventuel +if (isset($_REQUEST['var_memotri']) + and $t = $_REQUEST['var_memotri'] + and (strncmp($t, 'trisession', 10) == 0 or strncmp($t, 'senssession', 11) == 0) +) { + if (!function_exists('session_set')) { + include_spip('inc/session'); + } + session_set($t, _request($t)); +} -// Vanter notre art de la composition typographique -// La globale $spip_header_silencieux permet de rendre le header minimal pour raisons de securite -if (!defined('_HEADER_COMPOSED_BY')) define('_HEADER_COMPOSED_BY', "Composed-By: SPIP"); +/** + * Header "Composed-By" + * + * Vanter notre art de la composition typographique + * La globale $spip_header_silencieux permet de rendre le header minimal pour raisons de securite + */ +if (!defined('_HEADER_COMPOSED_BY')) { + define('_HEADER_COMPOSED_BY', "Composed-By: SPIP"); +} if (!headers_sent()) { header("Vary: Cookie, Accept-Encoding"); - if (!isset($GLOBALS['spip_header_silencieux']) OR !$GLOBALS['spip_header_silencieux']) - header(_HEADER_COMPOSED_BY . " $spip_version_affichee @ www.spip.net" . (isset($GLOBALS['meta']['plugin_header'])?(" + ".$GLOBALS['meta']['plugin_header']):"")); - else // header minimal + if (!isset($GLOBALS['spip_header_silencieux']) or !$GLOBALS['spip_header_silencieux']) { + header(_HEADER_COMPOSED_BY . " $spip_version_affichee @ www.spip.net" . (isset($GLOBALS['meta']['plugin_header']) ? (" + " . $GLOBALS['meta']['plugin_header']) : "")); + } else // header minimal + { header(_HEADER_COMPOSED_BY . " @ www.spip.net"); + } } -spip_log($_SERVER['REQUEST_METHOD'].' '.self() . ' - '._FILE_CONNECT,_LOG_DEBUG); - -?> +$methode = (isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : ((php_sapi_name() == 'cli') ? 'cli' : '')); +spip_log($methode . ' ' . self() . ' - ' . _FILE_CONNECT, _LOG_DEBUG); diff --git a/www/ecrire/index.php b/www/ecrire/index.php index d3c650a4..08c50684 100644 --- a/www/ecrire/index.php +++ b/www/ecrire/index.php @@ -3,20 +3,31 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ +/** + * Fichier d'exécution de l'interface privée + * + * @package SPIP\Core\Chargement + **/ + +/** Drapeau indiquant que l'on est dans l'espace privé */ define('_ESPACE_PRIVE', true); -if (!defined('_ECRIRE_INC_VERSION')) include 'inc_version.php'; +if (!defined('_ECRIRE_INC_VERSION')) { + include 'inc_version.php'; +} // Verification anti magic_quotes_sybase, pour qui addslashes("'") = "''" // On prefere la faire ici plutot que dans inc_version, c'est moins souvent et // si le reglage est modifie sur un site en prod, ca fait moins mal -if (addslashes("'") !== "\\'") die('SPIP incompatible magic_quotes_sybase'); +if (addslashes("'") !== "\\'") { + die('SPIP incompatible magic_quotes_sybase'); +} include_spip('inc/cookie'); @@ -25,24 +36,26 @@ include_spip('inc/cookie'); // $exec = (string)_request('exec'); -$reinstall = (!is_null(_request('reinstall')))?_request('reinstall'):($exec=='install'?'oui':NULL); +$reinstall = (!is_null(_request('reinstall'))) ? _request('reinstall') : ($exec == 'install' ? 'oui' : null); // // Les scripts d'insallation n'authentifient pas, forcement, // alors il faut blinder les variables d'URL // if (autoriser_sans_cookie($exec)) { - if (!isset($reinstall)) $reinstall = 'non'; + if (!isset($reinstall)) { + $reinstall = 'non'; + } set_request('transformer_xml'); $var_auth = true; } else { // Authentification, redefinissable $auth = charger_fonction('auth', 'inc'); $var_auth = $auth(); - if ($var_auth) { + if ($var_auth) { echo auth_echec($var_auth); exit; } - } +} // initialiser a la langue par defaut include_spip('inc/lang'); @@ -51,19 +64,21 @@ utiliser_langue_visiteur(); $forcer_lang = true; -if (_request('action') OR _request('var_ajax') OR _request('formulaire_action')){ +if (_request('action') or _request('var_ajax') or _request('formulaire_action')) { // Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires include_spip('public/aiguiller'); if ( // cas des appels actions ?action=xxx traiter_appels_actions() - OR + or // cas des hits ajax sur les inclusions ajax traiter_appels_inclusions_ajax() - OR - // cas des formulaires charger/verifier/traiter - traiter_formulaires_dynamiques()) - exit; // le hit est fini ! + or + // cas des formulaires charger/verifier/traiter + traiter_formulaires_dynamiques() + ) { + exit; + } // le hit est fini ! } // securiser les redirect du back-office if (_request('redirect')) { @@ -79,11 +94,13 @@ if (_request('redirect')) { // // Controle de la version, sauf si on est deja en train de s'en occuper -if (!$reinstall=='oui' -AND !_AJAX -AND isset($GLOBALS['meta']['version_installee']) -AND ($GLOBALS['spip_version_base'] != (str_replace(',','.',$GLOBALS['meta']['version_installee'])))) +if (!$reinstall == 'oui' + and !_AJAX + and isset($GLOBALS['meta']['version_installee']) + and ($GLOBALS['spip_version_base'] != (str_replace(',', '.', $GLOBALS['meta']['version_installee']))) +) { $exec = 'demande_mise_a_jour'; +} // Quand une action d'administration est en cours (meta "admin"), // refuser les connexions non-admin ou Ajax pour laisser la base intacte. @@ -92,24 +109,26 @@ AND ($GLOBALS['spip_version_base'] != (str_replace(',','.',$GLOBALS['meta']['ver // sinon c'est qu'elle a ete interrompue et il faut la reprendre elseif (isset($GLOBALS['meta']["admin"])) { - if (preg_match('/^(.*)_(\d+)_/', $GLOBALS['meta']["admin"], $l)) - list(,$var_f,$n) = $l; - if (_AJAX - OR !( + if (preg_match('/^(.*)_(\d+)_/', $GLOBALS['meta']["admin"], $l)) { + list(, $var_f, $n) = $l; + } + if (_AJAX + or !( isset($_COOKIE['spip_admin']) - OR (isset($GLOBALS['visiteur_session']) AND $GLOBALS['visiteur_session']['statut']=='0minirezo') - ) - ) { + or (isset($GLOBALS['visiteur_session']) and $GLOBALS['visiteur_session']['statut'] == '0minirezo') + ) + ) { spip_log("Quand la meta admin vaut " . - $GLOBALS['meta']["admin"] . - " seul un admin peut se connecter et sans AJAX." . - " En cas de probleme, detruire cette meta."); + $GLOBALS['meta']["admin"] . + " seul un admin peut se connecter et sans AJAX." . + " En cas de probleme, detruire cette meta."); die(_T('info_travaux_texte')); } if ($n) { - list(,$var_f,$n) = $l; - if (tester_url_ecrire("base_$var_f")) + list(, $var_f, $n) = $l; + if (tester_url_ecrire("base_$var_f")) { $var_f = "base_$var_f"; + } if ($var_f != $exec) { spip_log("Le script $var_f lance par auteur$n se substitue a l'exec $exec"); $exec = $var_f; @@ -134,10 +153,11 @@ $GLOBALS['spip_ecran'] = isset($_COOKIE['spip_ecran']) ? $_COOKIE['spip_ecran'] // (elle a ete changee dans une autre session, et on retombe sur un vieux cookie) // on appelle directement la fonction, car un appel d'action peut conduire a une boucle infinie // si le cookie n'est pas pose correctement dans l'action -if (!$var_auth AND isset($_COOKIE['spip_lang_ecrire']) - AND $_COOKIE['spip_lang_ecrire'] <> $GLOBALS['visiteur_session']['lang']) { - include_spip('action/converser'); - action_converser_post($GLOBALS['visiteur_session']['lang'],true); +if (!$var_auth and isset($_COOKIE['spip_lang_ecrire']) + and $_COOKIE['spip_lang_ecrire'] <> $GLOBALS['visiteur_session']['lang'] +) { + include_spip('action/converser'); + action_converser_post($GLOBALS['visiteur_session']['lang'], true); } @@ -148,14 +168,11 @@ if ($var_f = _request('transformer_xml')) { $exec = $var_f; } if ($var_f = tester_url_ecrire($exec)) { - $var_f = charger_fonction ($var_f); + $var_f = charger_fonction($var_f); $var_f(); // at last -} -else { +} else { // Rien de connu: rerouter vers exec=404 au lieu d'echouer // ce qui permet de laisser la main a un plugin $var_f = charger_fonction('404'); $var_f($exec); } - -?> diff --git a/www/ecrire/install/etape_.php b/www/ecrire/install/etape_.php index 3a0320e2..1371df52 100644 --- a/www/ecrire/install/etape_.php +++ b/www/ecrire/install/etape_.php @@ -3,31 +3,42 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; -// http://doc.spip.org/@install_etape__dist -function install_etape__dist() -{ +/** + * Affichage de l'écran d'installation (étape 0 : écran d'accueil) + * + * @package SPIP\Core\Installation + */ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +/** + * Affiche l'étape 0 d'installation : écran d'accueil. + * + * @uses info_copyright() + **/ +function install_etape__dist() { utiliser_langue_visiteur(); $menu_langues = menu_langues('var_lang_ecrire'); if (!$menu_langues) { - redirige_url_ecrire('install', "etape=chmod"); + redirige_url_ecrire('install', 'etape=chmod'); } else { include_spip('inc/presentation'); // pour info_copyright - $res = "
    SPIP\n" . - "

    " .info_copyright() ."

    \n" . - "

    " ._T('install_select_langue') ."

    " . - "
    " .$menu_langues ."
    \n" . + $res = "
    \n" . + "

    " . info_copyright() . "

    \n" . + '

    ' . _T('install_select_langue') . '

    ' . + '
    ' . $menu_langues . "
    \n" . generer_form_ecrire('install', "" . bouton_suivant()); echo minipres('AUTO', $res); } } -?> diff --git a/www/ecrire/install/etape_1.php b/www/ecrire/install/etape_1.php index d1fd2d02..a3da3ec4 100644 --- a/www/ecrire/install/etape_1.php +++ b/www/ecrire/install/etape_1.php @@ -3,18 +3,38 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Affichage de l'écran d'installation (étape 1 : tests des répertoires + * et hébergement, et demande d'identifiants de connexion à la BDD) + * + * @package SPIP\Core\Installation + */ -// http://doc.spip.org/@install_etape_1_dist -function install_etape_1_dist() -{ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +/** + * Affichage de l'étape 1 d'installation : tests des répertoires + * et hébergement ; demande d'identifiants de connexion à la BDD + * + * Teste que l'hébergement est compatible, que les répertoires qui doivent + * être accessibles en écriture le sont effectivement, auquel cas demande les identifiants + * de connexion à une base de données + * + * @uses tester_compatibilite_hebergement() + * @uses analyse_fichier_connection() + * @uses login_hebergeur() + * + */ +function install_etape_1_dist() { echo install_debut_html(); // stopper en cas de grosse incompatibilite de l'hebergement @@ -22,32 +42,34 @@ function install_etape_1_dist() // Recuperer les anciennes donnees pour plus de facilite (si presentes) $s = !@is_readable(_FILE_CONNECT_TMP) ? '' - : analyse_fichier_connection(_FILE_CONNECT_TMP); + : analyse_fichier_connection(_FILE_CONNECT_TMP); list($adresse_db, $login_db) = $s ? $s : login_hebergeur(); - $chmod = (isset($_GET['chmod']) AND preg_match(',^[0-9]+$,', $_GET['chmod']))? sprintf('%04o', $_GET['chmod']):'0777'; + $chmod = (isset($_GET['chmod']) and preg_match(',^[0-9]+$,', $_GET['chmod'])) ? + sprintf('%04o', $_GET['chmod']) : '0777'; - if(@is_readable(_FILE_CHMOD_TMP)){ + if (@is_readable(_FILE_CHMOD_TMP)) { $s = @join('', @file(_FILE_CHMOD_TMP)); - if(preg_match("#define\('_SPIP_CHMOD', (.*)\)#", $s, $regs)) { - $chmod = $regs[1]; + if (preg_match("#define\('_SPIP_CHMOD', (.*)\)#", $s, $regs)) { + $chmod = $regs[1]; } } - - + $db = array($adresse_db, _T('entree_base_donnee_2')); $login = array($login_db, _T('entree_login_connexion_2')); - $pass = array($pass_db, _T('entree_mot_passe_2')); + $pass = array('', _T('entree_mot_passe_2')); - $predef = array(defined('_INSTALL_SERVER_DB') ? _INSTALL_SERVER_DB:'', - defined('_INSTALL_HOST_DB'), - defined('_INSTALL_USER_DB'), - defined('_INSTALL_PASS_DB')); + $predef = array( + defined('_INSTALL_SERVER_DB') ? _INSTALL_SERVER_DB : '', + defined('_INSTALL_HOST_DB'), + defined('_INSTALL_USER_DB'), + defined('_INSTALL_PASS_DB') + ); - echo info_progression_etape(1,'etape_','install/'); + echo info_progression_etape(1, 'etape_', 'install/'); // ces deux chaines de langues doivent etre reecrites # echo info_etape(_T('info_connexion_mysql'), _T('texte_connexion_mysql').aide ("install1", true)); @@ -55,6 +77,3 @@ function install_etape_1_dist() echo install_connexion_form($db, $login, $pass, $predef, "\n", 2); echo install_fin_html(); } - - -?> diff --git a/www/ecrire/install/etape_2.php b/www/ecrire/install/etape_2.php index c14092e6..308cae8d 100644 --- a/www/ecrire/install/etape_2.php +++ b/www/ecrire/install/etape_2.php @@ -3,24 +3,31 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('base/abstract_sql'); -// http://doc.spip.org/@install_etape_2_dist -function install_etape_2_dist() -{ +// http://code.spip.net/@install_etape_2_dist +function install_etape_2_dist() { $adresse_db = defined('_INSTALL_HOST_DB') ? _INSTALL_HOST_DB : _request('adresse_db'); + if (preg_match(',(.*):(.*),', $adresse_db, $r)) { + list(, $adresse_db, $port) = $r; + } else { + $port = ''; + } + $login_db = defined('_INSTALL_USER_DB') ? _INSTALL_USER_DB : _request('login_db'); @@ -33,17 +40,17 @@ function install_etape_2_dist() ? _INSTALL_SERVER_DB : _request('server_db'); - $name_db = defined('_INSTALL_NAME_DB') + $name_db = defined('_INSTALL_NAME_DB') ? _INSTALL_NAME_DB : ''; $chmod = _request('chmod'); - $link = spip_connect_db($adresse_db, 0, $login_db, $pass_db, $name_db, $server_db); + $link = spip_connect_db($adresse_db, $port, $login_db, $pass_db, $name_db, $server_db); $GLOBALS['connexions'][$server_db] = $link; $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']] - = $GLOBALS['spip_' . $server_db .'_functions_' . $GLOBALS['spip_sql_version']]; + = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']]; echo install_debut_html(); @@ -60,117 +67,113 @@ function install_etape_2_dist() //echo join(', ', $GLOBALS['connexions'][$server_db]); //echo "\n-->\n"; - if (($db_connect=="0") && $link) { - echo "
    "._T('info_connexion_ok')."
    "; - echo info_progression_etape(2,'etape_','install/'); - - echo info_etape(_T('menu_aide_installation_choix_base').aide ("install2", true)); + if (($db_connect == '0') && $link) { + echo "
    " . _T('info_connexion_ok') . '
    '; + echo info_progression_etape(2, 'etape_', 'install/'); + echo info_etape(_T('menu_aide_installation_choix_base') . aider('install2', true)); - - spip_connect_db($adresse_db, 0, $login_db, $pass_db, '',$server_db); - - echo "\n", '' ; + echo "\n", ''; list($checked, $res) = install_etape_2_bases($login_db, $server_db); $hidden = (defined('_SPIP_CHMOD') - ? '' - : ("\n")) - . predef_ou_cache($adresse_db,$login_db,$pass_db, $server_db); + ? '' + : ("\n")) + . predef_ou_cache($adresse_db . ($port ? ':' . $port : ''), $login_db, $pass_db, $server_db); echo install_etape_2_form($hidden, $checked, $res, 3); - } else { - echo info_progression_etape(1,'etape_','install/',true); + } else { + echo info_progression_etape(1, 'etape_', 'install/', true); echo "
    "; echo info_etape(_T('info_connexion_base')); - echo "

    " . _T('avis_connexion_echec_1') . "

    "; - echo "

    "._T('avis_connexion_echec_2')."

    "; + echo '

    ' . _T('avis_connexion_echec_1') . '

    '; + echo '

    ' . _T('avis_connexion_echec_2') . '

    '; echo "

    ", - _T('avis_connexion_echec_3'), - "

    "; + _T('avis_connexion_echec_3'), + '

    '; } - + echo install_fin_html(); } -// Liste les bases accessibles, +// Liste les bases accessibles, // avec une heuristique pour preselectionner la plus probable -// http://doc.spip.org/@install_etape_2_bases -function install_etape_2_bases($login_db, $server_db) -{ - $res = install_etape_liste_bases($server_db, $login_db); +// http://code.spip.net/@install_etape_2_bases +function install_etape_2_bases($login_db, $server_db) { + $res = install_etape_liste_bases($server_db, $login_db); if ($res) { list($checked, $bases) = $res; - return array($checked, - "" - . "
      \n
    • " - . join("
    • \n
    • ",$bases) - . "
    • \n

    " - . _T('info_ou') - . " " - ); + + return array( + $checked, + "' + . "

      \n
    • " + . join("
    • \n
    • ", $bases) + . "
    • \n

    " + . _T('info_ou') + . ' ' + ); } - $res = ""._T('avis_lecture_noms_bases_1')." - "._T('avis_lecture_noms_bases_2')."

    "; + $res = '' . _T('avis_lecture_noms_bases_1') . ' + ' . _T('avis_lecture_noms_bases_2') . '

    '; + $checked = false; if ($login_db) { // Si un login comporte un point, le nom de la base est plus // probablement le login sans le point -- testons pour savoir - $test_base = $login_db; - $ok = sql_selectdb($test_base, $server_db); - $test_base2 = str_replace('.', '_', $test_base); - if (sql_selectdb($test_base2, $server_db)) { - $test_base = $test_base2; - $ok = true; - } - - if ($ok) { - $res .= _T('avis_lecture_noms_bases_3') - . "

      " - . "
    • " - . "
    • \n" - . "
    " - . "

    "._T('info_ou')." "; - $checked = true; - } + $test_base = $login_db; + $ok = sql_selectdb($test_base, $server_db); + $test_base2 = str_replace('.', '_', $test_base); + if (sql_selectdb($test_base2, $server_db)) { + $test_base = $test_base2; + $ok = true; + } + + if ($ok) { + $res .= _T('avis_lecture_noms_bases_3') + . '

      ' + . '
    • " + . "
    • \n" + . '
    ' + . '

    ' . _T('info_ou') . ' '; + $checked = true; + } } return array($checked, $res); } -// http://doc.spip.org/@install_etape_2_form -function install_etape_2_form($hidden, $checked, $res, $etape) - { +// http://code.spip.net/@install_etape_2_form +function install_etape_2_form($hidden, $checked, $res, $etape) { return generer_form_ecrire('install', ( - "\n" - . $hidden - . (defined('_INSTALL_NAME_DB') - ? '

    '._T('install_nom_base_hebergeur'). ' '._INSTALL_NAME_DB.''.'

    ' - : "\n
    "._T('texte_choix_base_1')."\n" - . $res - . "\n\n

    \n

    " - . "\n

    \n" - ) - - . ((defined('_INSTALL_TABLE_PREFIX') - OR $GLOBALS['table_prefix'] != 'spip') - ? '

    '._T('install_table_prefix_hebergeur').' '.$GLOBALS['table_prefix'].''.'

    ' - : "
    "._T('texte_choix_table_prefix')."\n" - . "

    " - . "\n

    " - ) - - . bouton_suivant())); + "\n" + . $hidden + . (defined('_INSTALL_NAME_DB') + ? '

    ' . _T('install_nom_base_hebergeur') . ' ' . _INSTALL_NAME_DB . '' . '

    ' + : "\n
    " . _T('texte_choix_base_1') . "\n" + . $res + . "\n\n

    \n

    " + . "\n

    \n" + ) + + . ((defined('_INSTALL_TABLE_PREFIX') + or $GLOBALS['table_prefix'] != 'spip') + ? '

    ' . _T('install_table_prefix_hebergeur') . ' ' . $GLOBALS['table_prefix'] . '' . '

    ' + : '
    ' . _T('texte_choix_table_prefix') . "\n" + . "

    ' + . "\n

    " + ) + + . bouton_suivant())); } -?> diff --git a/www/ecrire/install/etape_3.php b/www/ecrire/install/etape_3.php index 947c1bce..a115cfd4 100644 --- a/www/ecrire/install/etape_3.php +++ b/www/ecrire/install/etape_3.php @@ -3,21 +3,22 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/headers'); include_spip('base/abstract_sql'); -// http://doc.spip.org/@install_bases -function install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db){ - global $spip_version_base; +// http://code.spip.net/@install_bases +function install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db) { // Prefix des tables : // contrairement a ce qui est dit dans le message (trop strict mais c'est @@ -26,30 +27,43 @@ function install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, // a partir de ce qui est envoye a l'installation if (!defined('_INSTALL_TABLE_PREFIX')) { $table_prefix = ($GLOBALS['table_prefix'] != 'spip') - ? $GLOBALS['table_prefix'] - : trim(preg_replace(',[^a-z0-9],','',strtolower(_request('tprefix')))); + ? $GLOBALS['table_prefix'] + : trim(preg_replace(',[^a-z0-9],', '', strtolower(_request('tprefix')))); // S'il est vide on remet spip - if (!$table_prefix) + if (!$table_prefix) { $table_prefix = 'spip'; + } } else { $table_prefix = _INSTALL_TABLE_PREFIX; } + if (preg_match(',(.*):(.*),', $adresse_db, $r)) { + list(, $adresse_db, $port) = $r; + } else { + $port = ''; + } + $GLOBALS['connexions'][$server_db] - = spip_connect_db($adresse_db, 0, $login_db, $pass_db, '', $server_db); + = spip_connect_db($adresse_db, $port, $login_db, $pass_db, '', $server_db); $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']] - = $GLOBALS['spip_' . $server_db .'_functions_' . $GLOBALS['spip_sql_version']]; + = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']]; $fquery = sql_serveur('query', $server_db); - if ($choix_db == "new_spip") { + if ($choix_db == 'new_spip') { $re = ',^[a-z_][a-z_0-9-]*$,i'; - if (preg_match($re, $sel_db)) - sql_create_base($sel_db, $server_db); - else { - $re = "Le nom de la base doit correspondre a $re"; - spip_log($re); - return "

    "._T("avis_connexion_erreur_nom_base")."

    "; + if (preg_match($re, $sel_db)) { + $ok = sql_create_base($sel_db, $server_db); + if (!$ok) { + $re = "Impossible de creer la base $re"; + spip_log($re); + return '

    ' . _T('avis_connexion_erreur_creer_base') . "

    "; + } + } else { + $re = "Le nom de la base doit correspondre a $re"; + spip_log($re); + + return '

    ' . _T('avis_connexion_erreur_nom_base') . "

    "; } } @@ -57,35 +71,36 @@ function install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, // un sql_mode install_mode_appel($server_db, false); $GLOBALS['connexions'][$server_db] - = spip_connect_db($adresse_db, $sel_db, $login_db, $pass_db, $sel_db, $server_db); + = spip_connect_db($adresse_db, $port, $login_db, $pass_db, $sel_db, $server_db); $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']] - = $GLOBALS['spip_' . $server_db .'_functions_' . $GLOBALS['spip_sql_version']]; + = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']]; // Completer le tableau decrivant la connexion $GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix; $GLOBALS['connexions'][$server_db]['db'] = $sel_db; - $old = sql_showbase($table_prefix . "_meta", $server_db); - if ($old) $old = sql_fetch($old, $server_db); + $old = sql_showbase($table_prefix . '_meta', $server_db); + if ($old) { + $old = sql_fetch($old, $server_db); + } if (!$old) { - // Si possible, demander au serveur d'envoyer les textes // dans le codage std de SPIP, $charset = sql_get_charset(_DEFAULT_CHARSET, $server_db); if ($charset) { sql_set_charset($charset['charset'], $server_db); - $GLOBALS['meta']['charset_sql_base'] = + $GLOBALS['meta']['charset_sql_base'] = $charset['charset']; - $GLOBALS['meta']['charset_collation_sql_base'] = + $GLOBALS['meta']['charset_collation_sql_base'] = $charset['collation']; - $GLOBALS['meta']['charset_sql_connexion'] = + $GLOBALS['meta']['charset_sql_connexion'] = $charset['charset']; $charsetbase = $charset['charset']; } else { - spip_log(_DEFAULT_CHARSET . " inconnu du serveur SQL"); + spip_log(_DEFAULT_CHARSET . ' inconnu du serveur SQL'); $charsetbase = 'standard'; } spip_log("Creation des tables. Codage $charsetbase"); @@ -93,9 +108,11 @@ function install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, // memoriser avec quel charset on l'a creee if ($charset) { - $t = array('nom' => 'charset_sql_base', - 'valeur' => $charset['charset'], - 'impt' => 'non'); + $t = array( + 'nom' => 'charset_sql_base', + 'valeur' => $charset['charset'], + 'impt' => 'non' + ); @sql_insertq('spip_meta', $t, '', $server_db); $t['nom'] = 'charset_collation_sql_base'; $t['valeur'] = $charset['collation']; @@ -104,219 +121,262 @@ function install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $t['valeur'] = $charset['charset']; @sql_insertq('spip_meta', $t, '', $server_db); } - $t = array('nom' => 'version_installee', - 'valeur' => $spip_version_base, - 'impt' => 'non'); + $t = array( + 'nom' => 'version_installee', + 'valeur' => $GLOBALS['spip_version_base'], + 'impt' => 'non' + ); @sql_insertq('spip_meta', $t, '', $server_db); $t['nom'] = 'nouvelle_install'; $t['valeur'] = 1; @sql_insertq('spip_meta', $t, '', $server_db); // positionner la langue par defaut du site si un cookie de lang a ete mis - if (isset($_COOKIE['spip_lang_ecrire'])){ - @sql_insertq('spip_meta', array('nom'=>'langue_site','valeur'=>$_COOKIE['spip_lang_ecrire']), '', $server_db); + if (isset($_COOKIE['spip_lang_ecrire'])) { + @sql_insertq( + 'spip_meta', + array('nom' => 'langue_site', 'valeur' => $_COOKIE['spip_lang_ecrire']), + '', + $server_db + ); } } else { + // pour recreer les tables disparues au besoin + spip_log('Table des Meta deja la. Verification des autres.'); + creer_base($server_db); + $fupdateq = sql_serveur('updateq', $server_db); + + $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='version_installee'", $server_db); + + if ($r) { + $r = sql_fetch($r, $server_db); + } + $version_installee = !$r ? 0 : (double)$r['valeur']; + if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) { + $fupdateq( + 'spip_meta', + array('valeur' => $GLOBALS['spip_version_base'], 'impt' => 'non'), + "nom='version_installee'", + '', + $server_db + ); + spip_log('nouvelle version installee: ' . $GLOBALS['spip_version_base']); + } + // eliminer la derniere operation d'admin mal terminee + // notamment la mise a jour + @$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR nom='admin'", $server_db); + } - // pour recreer les tables disparues au besoin - spip_log("Table des Meta deja la. Verification des autres."); - creer_base($server_db); - $fupdateq = sql_serveur('updateq', $server_db); - - $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='version_installee'", $server_db); - - if ($r) $r = sql_fetch($r, $server_db); - $version_installee = !$r ? 0 : (double) $r['valeur']; - if (!$version_installee OR ($spip_version_base < $version_installee)) { - $fupdateq('spip_meta', array('valeur'=>$spip_version_base, 'impt'=>'non'), "nom='version_installee'",'', $server_db); - spip_log("nouvelle version installee: $spip_version_base"); - } - // eliminer la derniere operation d'admin mal terminee - // notamment la mise a jour - @$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR nom='admin'", $server_db); + // recuperer le charset de la connexion dans les meta + $charset = ''; + $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='charset_sql_connexion'", $server_db); + if ($r) { + $r = sql_fetch($r, $server_db); + } + if ($r) { + $charset = $r['valeur']; } $ligne_rappel = install_mode_appel($server_db); - $result_ok = @$fquery("SELECT COUNT(*) FROM spip_meta", $server_db); - if (!$result_ok) return ""; + $result_ok = @$fquery('SELECT COUNT(*) FROM spip_meta', $server_db); + if (!$result_ok) { + return ""; + } if ($chmod_db) { - install_fichier_connexion(_FILE_CHMOD_TMP, "if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', ". sprintf('0%3o',$chmod_db).");\n"); + install_fichier_connexion( + _FILE_CHMOD_TMP, + "if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', " . sprintf('0%3o', $chmod_db) . ");\n" + ); } - if (preg_match(',(.*):(.*),', $adresse_db, $r)) - list(,$adresse_db, $port) = $r; - else $port = ''; - // si ce fichier existe a cette etape c'est qu'il provient // d'une installation qui ne l'a pas cree correctement. // Le supprimer pour que _FILE_CONNECT_TMP prime. - if (_FILE_CONNECT AND file_exists(_FILE_CONNECT)) + if (_FILE_CONNECT and file_exists(_FILE_CONNECT)) { spip_unlink(_FILE_CONNECT); + } + + install_fichier_connexion( + _FILE_CONNECT_TMP, + $ligne_rappel + . install_connexion( + $adresse_db, + $port, + $login_db, + $pass_db, + $sel_db, + $server_db, + $table_prefix, + '', + $charset + ) + ); - install_fichier_connexion(_FILE_CONNECT_TMP, - $ligne_rappel - . install_connexion($adresse_db, - $port, - $login_db, - $pass_db, - $sel_db, - $server_db, - $table_prefix)); return ''; } -// http://doc.spip.org/@install_propose_ldap -function install_propose_ldap() -{ +// http://code.spip.net/@install_propose_ldap +function install_propose_ldap() { return generer_form_ecrire('install', ( - fieldset(_T('info_authentification_externe'), - array( - 'etape' => array( - 'label' => _T('texte_annuaire_ldap_1'), - 'valeur' => 'ldap1', - 'hidden' => true - )), - bouton_suivant(_T('bouton_acces_ldap')) - ))); + fieldset( + _T('info_authentification_externe'), + array( + 'etape' => array( + 'label' => _T('texte_annuaire_ldap_1'), + 'valeur' => 'ldap1', + 'hidden' => true + ) + ), + bouton_suivant(_T('bouton_acces_ldap')) + ))); } -// http://doc.spip.org/@install_premier_auteur -function install_premier_auteur($email, $login, $nom, $pass, $hidden, $auteur_obligatoire) -{ - return info_progression_etape(3,'etape_','install/') . - info_etape(_T('info_informations_personnelles'), - - ""._T('texte_informations_personnelles_1')."" . - aide ("install5", true) . - "

    " . - ($auteur_obligatoire? - '' - : - _T('texte_informations_personnelles_2') . " " . _T('info_laisser_champs_vides') - )) +// http://code.spip.net/@install_premier_auteur +function install_premier_auteur($email, $login, $nom, $pass, $hidden, $auteur_obligatoire) { + return info_progression_etape(3, 'etape_', 'install/') . + info_etape( + _T('info_informations_personnelles'), + '' . _T('texte_informations_personnelles_1') . '' . + aider('install5', true) . + '

    ' . + ($auteur_obligatoire ? + '' + : + _T('texte_informations_personnelles_2') . ' ' . _T('info_laisser_champs_vides') + ) + ) . generer_form_ecrire('install', ( - "\n" - . $hidden - . fieldset(_T('info_identification_publique'), - array( - 'nom' => array( - 'label' => ""._T('entree_signature')."
    \n"._T('entree_nom_pseudo_1')."\n", - 'valeur' => $nom, - 'required' => $auteur_obligatoire, - ), - 'email' => array( - 'label' => ""._T('entree_adresse_email')."\n", - 'valeur' => $email, - ) - ) - ) - - . fieldset(_T('entree_identifiants_connexion'), - array( - 'login' => array( - 'label' => ""._T('entree_login')."
    \n"._T('info_login_trop_court_car_pluriel', array('nb' => _LOGIN_TROP_COURT))."\n", - 'valeur' => $login, - 'required' => $auteur_obligatoire, - ), - 'pass' => array( - 'label' => ""._T('entree_mot_passe')."
    \n"._T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI))."\n", - 'valeur' => $pass, - 'required' => $auteur_obligatoire, - ), - 'pass_verif' => array( - 'label' => ""._T('info_confirmer_passe')."
    \n", - 'valeur' => $pass, - 'required' => $auteur_obligatoire, - ) - ) - ) - . bouton_suivant())); + "\n" + . $hidden + . fieldset( + _T('info_identification_publique'), + array( + 'nom' => array( + 'label' => '' . _T('entree_signature') . "
    \n" . _T('entree_nom_pseudo_1') . "\n", + 'valeur' => $nom, + 'required' => $auteur_obligatoire, + ), + 'email' => array( + 'label' => '' . _T('entree_adresse_email') . "\n", + 'valeur' => $email, + ) + ) + ) + + . fieldset( + _T('entree_identifiants_connexion'), + array( + 'login' => array( + 'label' => '' . _T('entree_login') . "
    \n" . _T( + 'info_login_trop_court_car_pluriel', + array('nb' => _LOGIN_TROP_COURT) + ) . "\n", + 'valeur' => $login, + 'required' => $auteur_obligatoire, + ), + 'pass' => array( + 'label' => '' . _T('entree_mot_passe') . "
    \n" . _T( + 'info_passe_trop_court_car_pluriel', + array('nb' => _PASS_LONGUEUR_MINI) + ) . "\n", + 'valeur' => $pass, + 'required' => $auteur_obligatoire, + ), + 'pass_verif' => array( + 'label' => '' . _T('info_confirmer_passe') . "
    \n", + 'valeur' => $pass, + 'required' => $auteur_obligatoire, + ) + ) + ) + . bouton_suivant())); } -// http://doc.spip.org/@install_etape_3_dist -function install_etape_3_dist() -{ +// http://code.spip.net/@install_etape_3_dist +function install_etape_3_dist() { $ldap_present = _request('ldap_present'); if (!$ldap_present) { $adresse_db = defined('_INSTALL_HOST_DB') - ? _INSTALL_HOST_DB - : _request('adresse_db'); + ? _INSTALL_HOST_DB + : _request('adresse_db'); $login_db = defined('_INSTALL_USER_DB') - ? _INSTALL_USER_DB - : _request('login_db'); + ? _INSTALL_USER_DB + : _request('login_db'); $pass_db = defined('_INSTALL_PASS_DB') - ? _INSTALL_PASS_DB - : _request('pass_db'); + ? _INSTALL_PASS_DB + : _request('pass_db'); $server_db = defined('_INSTALL_SERVER_DB') - ? _INSTALL_SERVER_DB - : _request('server_db'); + ? _INSTALL_SERVER_DB + : _request('server_db'); $chmod_db = defined('_SPIP_CHMOD') - ? _SPIP_CHMOD - : _request('chmod'); + ? _SPIP_CHMOD + : _request('chmod'); $choix_db = defined('_INSTALL_NAME_DB') - ? _INSTALL_NAME_DB - : _request('choix_db'); + ? _INSTALL_NAME_DB + : _request('choix_db'); - $sel_db = ($choix_db == "new_spip") - ? _request('table_new') : $choix_db; + $sel_db = ($choix_db == 'new_spip') + ? _request('table_new') : $choix_db; - $res = install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db); + $res = install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db); if ($res) { - $res = info_progression_etape(2,'etape_','install/', true) - . "

    "._T('avis_operation_echec')."

    " - . $res - . "

    "._T('texte_operation_echec')."

    " - . "
    "; + $res = info_progression_etape(2, 'etape_', 'install/', true) + . "

    " . _T('avis_operation_echec') . '

    ' + . $res + . '

    ' . _T('texte_operation_echec') . '

    ' + . '
    '; } - - } else { + } else { $res = ''; list($adresse_db, $login_db, $pass_db, $sel_db, $server_db) = analyse_fichier_connection(_FILE_CONNECT_TMP); $GLOBALS['connexions'][$server_db] = spip_connect_db($adresse_db, $sel_db, $login_db, $pass_db, $sel_db, $server_db); } if (!$res) { - if (file_exists(_FILE_CONNECT_TMP)) + if (file_exists(_FILE_CONNECT_TMP)) { include(_FILE_CONNECT_TMP); - else + } else { redirige_url_ecrire('install'); - - if (file_exists(_FILE_CHMOD_TMP)) + } + + if (file_exists(_FILE_CHMOD_TMP)) { include(_FILE_CHMOD_TMP); - else + } else { redirige_url_ecrire('install'); + } $hidden = predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db) - . (defined('_INSTALL_NAME_DB') ? '' - : "\n"); - - $auteur_obligatoire = ($ldap_present?0:!sql_countsel('spip_auteurs','','','',$server_db)); - - $res = "
    " - . _T('info_base_installee') - . "
    " - . install_premier_auteur(_request('email'), - _request('login'), - _request('nom'), - _request('pass'), - $hidden, $auteur_obligatoire) - . (($ldap_present OR !function_exists('ldap_connect')) - ? '' : install_propose_ldap()); + . (defined('_INSTALL_NAME_DB') ? '' + : "\n"); + + $auteur_obligatoire = ($ldap_present ? 0 : !sql_countsel('spip_auteurs', '', '', '', $server_db)); + + $res = "
    " + . _T('info_base_installee') + . '
    ' + . install_premier_auteur( + _request('email'), + _request('login'), + _request('nom'), + _request('pass'), + $hidden, + $auteur_obligatoire + ) + . (($ldap_present or !function_exists('ldap_connect')) + ? '' : install_propose_ldap()); } echo install_debut_html(); echo $res; echo install_fin_html(); } - -?> diff --git a/www/ecrire/install/etape_3b.php b/www/ecrire/install/etape_3b.php index 08b983c2..beefecef 100644 --- a/www/ecrire/install/etape_3b.php +++ b/www/ecrire/install/etape_3b.php @@ -3,62 +3,69 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/headers'); -function install_etape_3b_dist() -{ +function install_etape_3b_dist() { $login = _request('login'); $email = _request('email'); $nom = _request('nom'); $pass = _request('pass'); $pass_verif = _request('pass_verif'); - $server_db = defined('_INSTALL_SERVER_DB') ? - _INSTALL_SERVER_DB + $server_db = defined('_INSTALL_SERVER_DB') + ? _INSTALL_SERVER_DB : _request('server_db'); - if (!defined('_PASS_LONGUEUR_MINI')) define('_PASS_LONGUEUR_MINI', 6); - if (!defined('_LOGIN_TROP_COURT')) define('_LOGIN_TROP_COURT', 4); - - if($login) { - $echec = ($pass!=$pass_verif) ? - _T('info_passes_identiques') - : ((strlen($pass)<_PASS_LONGUEUR_MINI) ? - _T('info_passe_trop_court_car_pluriel', array('nb'=>_PASS_LONGUEUR_MINI)) - : ((strlen($login)<_LOGIN_TROP_COURT) ? - _T('info_login_trop_court') - : '')); + if (!defined('_PASS_LONGUEUR_MINI')) { + define('_PASS_LONGUEUR_MINI', 6); + } + if (!defined('_LOGIN_TROP_COURT')) { + define('_LOGIN_TROP_COURT', 4); + } + if ($login) { + $echec = ($pass != $pass_verif) ? + _T('info_passes_identiques') + : ((strlen($pass) < _PASS_LONGUEUR_MINI) ? + _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI)) + : ((strlen($login) < _LOGIN_TROP_COURT) ? + _T('info_login_trop_court') + : '')); include_spip('inc/filtres'); - if (!$echec AND $email AND !email_valide($email)) + if (!$echec and $email and !email_valide($email)) { $echec = _T('form_email_non_valide'); + } if ($echec) { echo minipres( - 'AUTO', - info_progression_etape(3,'etape_','install/', true). - "

    $echec

    \n". - "

    "._T('avis_connexion_echec_2')."

    ". - "
    " + 'AUTO', + info_progression_etape(3, 'etape_', 'install/', true) . + "

    $echec

    \n" . + '

    ' . _T('avis_connexion_echec_2') . '

    ' . + '
    ' ); exit; } } - if (@file_exists(_FILE_CHMOD_TMP)) + if (@file_exists(_FILE_CHMOD_TMP)) { include(_FILE_CHMOD_TMP); - else + } else { redirige_url_ecrire('install'); + } - if (!@file_exists(_FILE_CONNECT_TMP)) + if (!@file_exists(_FILE_CONNECT_TMP)) { redirige_url_ecrire('install'); + } # maintenant on connait le vrai charset du site s'il est deja configure # sinon par defaut lire_meta reglera _DEFAULT_CHARSET @@ -79,18 +86,27 @@ function install_etape_3b_dist() $htpass = generer_htpass($pass); $alea_actuel = creer_uniqid(); $alea_futur = creer_uniqid(); - $shapass = _nano_sha256($alea_actuel.$pass); + $shapass = _nano_sha256($alea_actuel . $pass); // prelablement, creer le champ webmestre si il n'existe pas (install neuve // sur une vieille base - $t = sql_showtable("spip_auteurs", true); - if (!isset($t['field']['webmestre'])) + $t = sql_showtable('spip_auteurs', true); + if (!isset($t['field']['webmestre'])) { @sql_alter("TABLE spip_auteurs ADD webmestre varchar(3) DEFAULT 'non' NOT NULL"); - - $id_auteur = sql_getfetsel("id_auteur", "spip_auteurs", "login=" . sql_quote($login)); - if ($id_auteur !== NULL) { - sql_updateq('spip_auteurs', array("nom"=> $nom, 'email'=> $email, 'login'=>$login, 'pass'=>$shapass, 'alea_actuel'=>$alea_actuel, 'alea_futur'=> $alea_futur, 'htpass'=>$htpass, 'statut'=>'0minirezo'), "id_auteur=$id_auteur"); } - else { + + $id_auteur = sql_getfetsel('id_auteur', 'spip_auteurs', 'login=' . sql_quote($login)); + if ($id_auteur !== null) { + sql_updateq('spip_auteurs', array( + 'nom' => $nom, + 'email' => $email, + 'login' => $login, + 'pass' => $shapass, + 'alea_actuel' => $alea_actuel, + 'alea_futur' => $alea_futur, + 'htpass' => $htpass, + 'statut' => '0minirezo' + ), "id_auteur=$id_auteur"); + } else { $id_auteur = sql_insertq('spip_auteurs', array( 'nom' => $nom, 'email' => $email, @@ -99,22 +115,26 @@ function install_etape_3b_dist() 'htpass' => $htpass, 'alea_actuel' => $alea_actuel, 'alea_futur' => $alea_futur, - 'statut' =>'0minirezo')); + 'statut' => '0minirezo' + )); } // le passer webmestre separrement du reste, au cas ou l'alter n'aurait pas fonctionne @sql_updateq('spip_auteurs', array('webmestre' => 'oui'), "id_auteur=$id_auteur"); // inserer email comme email webmaster principal // (sauf s'il est vide: cas de la re-installation) - if ($email) + if ($email) { ecrire_meta('email_webmaster', $email); + } // Connecter directement celui qui vient de (re)donner son login // mais sans cookie d'admin ni connexion longue include_spip('inc/auth'); if (!$auteur = auth_identifier_login($login, $pass) - OR !auth_loger($auteur, true)) + or !auth_loger($auteur, true) + ) { spip_log("login automatique impossible $auth_spip $session" . count($row)); + } } // installer les metas @@ -129,8 +149,5 @@ function install_etape_3b_dist() include_spip('inc/distant'); - redirige_par_entete(parametre_url(self(),'etape','4','&')); - + redirige_par_entete(parametre_url(self(), 'etape', '4', '&')); } - -?> diff --git a/www/ecrire/install/etape_4.php b/www/ecrire/install/etape_4.php index abc89ab9..6ea7134a 100644 --- a/www/ecrire/install/etape_4.php +++ b/www/ecrire/install/etape_4.php @@ -3,48 +3,61 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/headers'); -// http://doc.spip.org/@install_etape_4_dist -function install_etape_4_dist() -{ +// http://code.spip.net/@install_etape_4_dist +function install_etape_4_dist() { // creer le repertoire cache, qui sert partout ! - if(!@file_exists(_DIR_CACHE)) { - $rep = preg_replace(','._DIR_TMP.',', '', _DIR_CACHE); - $rep = sous_repertoire(_DIR_TMP, $rep, true,true); + if (!@file_exists(_DIR_CACHE)) { + $rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE); + $rep = sous_repertoire(_DIR_TMP, $rep, true, true); } echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"'); - echo info_progression_etape(4,'etape_','install/'); + echo info_progression_etape(4, 'etape_', 'install/'); echo "
    " . _T('info_derniere_etape') - . "

    " + . '

    ' . _T('info_utilisation_spip') - . "

    "; + . '

    '; - echo "

    " - ._T('plugin_info_plugins_dist_1', array('plugins_dist' => "".joli_repertoire(_DIR_PLUGINS_DIST)."")) - ."

    "; + echo '

    ' + . _T( + 'plugin_info_plugins_dist_1', + array('plugins_dist' => '' . joli_repertoire(_DIR_PLUGINS_DIST) . '') + ) + . '

    '; // installer les extensions include_spip('inc/plugin'); - $afficher = charger_fonction("afficher_liste",'plugins'); - echo $afficher(self(), liste_plugin_files(_DIR_PLUGINS_DIST),array(), array(), _DIR_PLUGINS_DIST,'afficher_nom_plugin'); - - plugin_installes_meta(); + $afficher = charger_fonction('afficher_liste', 'plugins'); + echo $afficher(self(), liste_plugin_files(_DIR_PLUGINS_DIST), array(), array(), _DIR_PLUGINS_DIST, + 'afficher_nom_plugin'); + + // si la base de SPIP est up, on peut installer les plugins, sinon on passe cette etape + // car les plugins supposent que la base de SPIP est dans son etat normal (mise a jour) + // au premier passage dans l'espace prive on aura une demande d'upgrade qui se poursuit sur la page plugin + // et procede alors a l'installation + if (!isset($GLOBALS['meta']['version_installee']) + or ($GLOBALS['spip_version_base'] == (str_replace(',', '.', $GLOBALS['meta']['version_installee']))) + ) { + plugin_installes_meta(); + } // mettre a jour si necessaire l'adresse du site // securite si on arrive plus a se loger @@ -52,10 +65,9 @@ function install_etape_4_dist() appliquer_adresse_site(''); // aller a la derniere etape qui clos l'install et redirige - $suite = "\n" - . bouton_suivant(_T('login_espace_prive')); + $suite = "\n" + . bouton_suivant(_T('login_espace_prive')); - echo generer_form_ecrire('install', $suite); echo install_fin_html(); + echo generer_form_ecrire('install', $suite); + echo install_fin_html(); } - -?> diff --git a/www/ecrire/install/etape_chmod.php b/www/ecrire/install/etape_chmod.php index 9d07b3eb..83bc25cd 100644 --- a/www/ecrire/install/etape_chmod.php +++ b/www/ecrire/install/etape_chmod.php @@ -3,17 +3,21 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -if (defined('_TEST_DIRS')) return; -define('_TEST_DIRS', "1"); +if (defined('_TEST_DIRS')) { + return; +} +define('_TEST_DIRS', '1'); include_spip('inc/minipres'); utiliser_langue_visiteur(); @@ -21,10 +25,10 @@ utiliser_langue_visiteur(); // // Tente d'ecrire // -// http://doc.spip.org/@test_ecrire +// http://code.spip.net/@test_ecrire function test_ecrire($my_dir) { static $chmod = 0; - + $ok = false; $script = @file_exists('spip_loader.php') ? 'spip_loader.php' : $_SERVER['PHP_SELF']; $self = basename($script); @@ -36,16 +40,19 @@ function test_ecrire($my_dir) { // Comparer l'appartenance d'un fichier cree par PHP // avec celle du script et du repertoire courant - if(!$chmod) { + if (!$chmod) { @rmdir('test'); spip_unlink('test'); // effacer au cas ou @touch('test'); - if ($uid > 0 && $uid == $uid2 && @fileowner('test') == $uid) + if ($uid > 0 && $uid == $uid2 && @fileowner('test') == $uid) { $chmod = 0700; - else if ($gid > 0 && $gid == $gid2 && @filegroup('test') == $gid) - $chmod = 0770; - else - $chmod = 0777; + } else { + if ($gid > 0 && $gid == $gid2 && @filegroup('test') == $gid) { + $chmod = 0770; + } else { + $chmod = 0777; + } + } // Appliquer de plus les droits d'acces du script if ($perms > 0) { $perms = ($perms & 0777) | (($perms & 0444) >> 2); @@ -63,76 +70,86 @@ function test_ecrire($my_dir) { // rajouter celui passe dans l'url ou celui du source (a l'installation) // -// http://doc.spip.org/@install_etape_chmod_dist -function install_etape_chmod_dist() -{ - global $test_dirs; - $test_dir = _request('test_dir'); +// http://code.spip.net/@install_etape_chmod_dist +function install_etape_chmod_dist() { + + $test_dir = _request('test_dir'); $chmod = 0; if ($test_dir) { - if (substr($test_dir,-1)!=='/') $test_dir .= '/'; - if (!in_array($test_dir, $test_dirs)) $test_dirs[] = _DIR_RACINE . $test_dir; + if (substr($test_dir, -1) !== '/') { + $test_dir .= '/'; + } + if (!in_array($test_dir, $GLOBALS['test_dirs'])) { + $GLOBALS['test_dirs'][] = _DIR_RACINE . $test_dir; + } } else { if (!_FILE_CONNECT) { - $test_dirs[] = _DIR_CONNECT; - $test_dirs[] = _DIR_CHMOD; + $GLOBALS['test_dirs'][] = _DIR_CONNECT; + $GLOBALS['test_dirs'][] = _DIR_CHMOD; } } $bad_dirs = array(); - $absent_dirs = array();; + $absent_dirs = array(); - while (list(, $my_dir) = each($test_dirs)) { + while (list(, $my_dir) = each($GLOBALS['test_dirs'])) { $test = test_ecrire($my_dir); if (!$test) { - $m = preg_replace(',^' . _DIR_RACINE . ',', '',$my_dir); + $m = preg_replace(',^' . _DIR_RACINE . ',', '', $my_dir); if (@file_exists($my_dir)) { - $bad_dirs["
  • ".$m."
  • "] = 1; - } else - $absent_dirs["
  • ".$m."
  • "] = 1; - } else $chmod = max($chmod, $test); + $bad_dirs['
  • ' . $m . '
  • '] = 1; + } else { + $absent_dirs['
  • ' . $m . '
  • '] = 1; + } + } else { + $chmod = max($chmod, $test); + } } - if ($bad_dirs OR $absent_dirs) { - - if (!_FILE_CONNECT) { - $titre = _T('dirs_preliminaire'); - $continuer = ' '._T('dirs_commencer') . '.'; - } else - $titre = _T('dirs_probleme_droits'); - + if ($bad_dirs or $absent_dirs) { + if (!_FILE_CONNECT) { + $titre = _T('dirs_preliminaire'); + $continuer = ' ' . _T('dirs_commencer') . '.'; + } else { + $titre = _T('dirs_probleme_droits'); + } - $res = "
    ". menu_langues('var_lang_ecrire')."
    \n"; - if ($bad_dirs) { - $res .= - _T('dirs_repertoires_suivants', - array('bad_dirs' => join("\n", array_keys($bad_dirs)))) . - "". _T('login_recharger')."."; - } + $res = "
    " . menu_langues('var_lang_ecrire') . "
    \n"; - if ($absent_dirs) { - $res .= - _T('dirs_repertoires_absents', - array('bad_dirs' => join("\n", array_keys($absent_dirs)))) . - "". _T('login_recharger')."."; - } - $res = "

    " . $continuer . $res . aide ("install0", true) . "

    "; + if ($bad_dirs) { + $res .= + _T( + 'dirs_repertoires_suivants', + array('bad_dirs' => join("\n", array_keys($bad_dirs))) + ) . + '' . _T('login_recharger') . '.'; + } - $t = _T('login_recharger'); - $t = (!$test_dir ? "" : - "") - . "" - . "
    "; + if ($absent_dirs) { + $res .= + _T( + 'dirs_repertoires_absents', + array('bad_dirs' => join("\n", array_keys($absent_dirs))) + ) . + '' . _T('login_recharger') . '.'; + } + $res = '

    ' . $continuer . $res . aider('install0', true) . '

    '; - echo minipres($titre, $res . generer_form_ecrire('install', $t)); + $t = _T('login_recharger'); + $t = (!$test_dir ? '' : + "") + . "" + . "
    "; + echo minipres($titre, $res . generer_form_ecrire('install', $t)); } else { - $deja = (_FILE_CONNECT AND analyse_fichier_connection(_FILE_CONNECT)); - if (!$deja) - redirige_url_ecrire("install", "etape=1&chmod=".$chmod); - else redirige_url_ecrire(); + $deja = (_FILE_CONNECT and analyse_fichier_connection(_FILE_CONNECT)); + if (!$deja) { + redirige_url_ecrire('install', 'etape=1&chmod=' . $chmod); + } else { + redirige_url_ecrire(); + } } } -?> diff --git a/www/ecrire/install/etape_fin.php b/www/ecrire/install/etape_fin.php index 471ac7ff..be4cf05f 100644 --- a/www/ecrire/install/etape_fin.php +++ b/www/ecrire/install/etape_fin.php @@ -3,47 +3,50 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/headers'); include_spip('inc/acces'); // Mise en place des fichiers de configuration si ce n'est fait -// http://doc.spip.org/@install_etape_fin_dist -function install_etape_fin_dist() -{ +// http://code.spip.net/@install_etape_fin_dist +function install_etape_fin_dist() { ecrire_acces(); - $f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CHMOD_TMP); + $f = str_replace(_FILE_TMP_SUFFIX, '.php', _FILE_CHMOD_TMP); if (file_exists(_FILE_CHMOD_TMP)) { if (!@rename(_FILE_CHMOD_TMP, $f)) { - if (@copy(_FILE_CHMOD_TMP, $f)) + if (@copy(_FILE_CHMOD_TMP, $f)) { spip_unlink(_FILE_CHMOD_TMP); + } } } - $f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CONNECT_TMP); + $f = str_replace(_FILE_TMP_SUFFIX, '.php', _FILE_CONNECT_TMP); if (file_exists(_FILE_CONNECT_TMP)) { spip_log("renomme $f"); if (!@rename(_FILE_CONNECT_TMP, $f)) { - if (@copy(_FILE_CONNECT_TMP, $f)) + if (@copy(_FILE_CONNECT_TMP, $f)) { @spip_unlink(_FILE_CONNECT_TMP); + } } } // creer le repertoire cache, qui sert partout ! // deja fait en etape 4 en principe, on garde au cas ou - if(!@file_exists(_DIR_CACHE)) { - $rep = preg_replace(','._DIR_TMP.',', '', _DIR_CACHE); - $rep = sous_repertoire(_DIR_TMP, $rep, true,true); + if (!@file_exists(_DIR_CACHE)) { + $rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE); + $rep = sous_repertoire(_DIR_TMP, $rep, true, true); } // Verifier la securite des htaccess @@ -51,25 +54,31 @@ function install_etape_fin_dist() $msg = install_verifier_htaccess(); if ($msg) { $cible = _T('public:accueil_site'); - $cible = generer_form_ecrire('accueil', '','', $cible); + $cible = generer_form_ecrire('accueil', '', '', $cible); echo minipres('AUTO', $msg . $cible); - // ok, deboucher dans l'espace prive - } else redirige_url_ecrire('accueil'); + // ok, deboucher dans l'espace prive + } else { + redirige_url_ecrire('accueil'); + } } -function install_verifier_htaccess() -{ +function install_verifier_htaccess() { if (verifier_htaccess(_DIR_TMP, true) - AND verifier_htaccess(_DIR_CONNECT, true)) + and verifier_htaccess(_DIR_CONNECT, true) + ) { return ''; + } $titre = _T('htaccess_inoperant'); - $averti = _T('htaccess_a_simuler', - array('htaccess' => '' . _ACCESS_FILE_NAME . '', - 'constantes' => '_DIR_TMP & _DIR_CONNECT', - 'document_root' => '' . $_SERVER['DOCUMENT_ROOT'] . '')); + $averti = _T( + 'htaccess_a_simuler', + array( + 'htaccess' => '' . _ACCESS_FILE_NAME . '', + 'constantes' => '_DIR_TMP & _DIR_CONNECT', + 'document_root' => '' . $_SERVER['DOCUMENT_ROOT'] . '' + ) + ); return "

    $titre

    $averti

    "; } -?> diff --git a/www/ecrire/install/etape_ldap1.php b/www/ecrire/install/etape_ldap1.php index 8e8a1a4f..deb14800 100644 --- a/www/ecrire/install/etape_ldap1.php +++ b/www/ecrire/install/etape_ldap1.php @@ -3,21 +3,22 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -// http://doc.spip.org/@install_etape_ldap1_dist -function install_etape_ldap1_dist() -{ +// http://code.spip.net/@install_etape_ldap1_dist +function install_etape_ldap1_dist() { $adresse_ldap = defined('_INSTALL_HOST_LDAP') ? _INSTALL_HOST_LDAP - : 'localhost'; + : 'localhost'; $port_ldap = defined('_INSTALL_PORT_LDAP') ? _INSTALL_PORT_LDAP @@ -29,7 +30,7 @@ function install_etape_ldap1_dist() $protocole_ldap = defined('_INSTALL_PROTOCOLE_LDAP') ? _INSTALL_PROTOCOLE_LDAP - : 3 ; // on essaie 2 en cas d'echec + : 3; // on essaie 2 en cas d'echec $login_ldap = defined('_INSTALL_USER_LDAP') ? _INSTALL_USER_LDAP @@ -41,57 +42,59 @@ function install_etape_ldap1_dist() echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"'); - echo info_etape(_T('titre_connexion_ldap'),info_progression_etape(1,'etape_ldap','install/'), _T('entree_informations_connexion_ldap')); + echo info_etape( + _T('titre_connexion_ldap'), + info_progression_etape(1, 'etape_ldap', 'install/'), + _T('entree_informations_connexion_ldap') + ); echo generer_form_ecrire('install', ( - "\n" - - . fieldset(_T('entree_adresse_annuaire'), - array( - 'adresse_ldap' => array( - 'label' => _T('texte_adresse_annuaire_1'), - 'valeur' => $adresse_ldap - ), - 'port_ldap' => array( - 'label' => _T('entree_port_annuaire').'
    '._T('texte_port_annuaire'), - 'valeur' => $port_ldap - ), - 'tls_ldap' => array( - 'label' => ''._T('tls_ldap').'', - 'valeur' => $tls_ldap, - 'alternatives' => array( - 'non' => _T('item_non'), - 'oui' => _T('item_oui') - ) - ), - 'protocole_ldap' => array( - 'label' => _T('protocole_ldap'), - 'valeur' => $protocole_ldap, - 'alternatives' => array( - '3' => '3', - '2' => '2' + "\n" + . fieldset( + _T('entree_adresse_annuaire'), + array( + 'adresse_ldap' => array( + 'label' => _T('texte_adresse_annuaire_1'), + 'valeur' => $adresse_ldap + ), + 'port_ldap' => array( + 'label' => _T('entree_port_annuaire') . '
    ' . _T('texte_port_annuaire'), + 'valeur' => $port_ldap + ), + 'tls_ldap' => array( + 'label' => '' . _T('tls_ldap') . '', + 'valeur' => $tls_ldap, + 'alternatives' => array( + 'non' => _T('item_non'), + 'oui' => _T('item_oui') + ) + ), + 'protocole_ldap' => array( + 'label' => _T('protocole_ldap'), + 'valeur' => $protocole_ldap, + 'alternatives' => array( + '3' => '3', + '2' => '2' + ) ) ) ) - ) - . "\n

    "._T('texte_acces_ldap_anonyme_1').'

    ' - . fieldset(_T('connexion_ldap'), - array( - 'login_ldap' => array( - 'label' => _T('texte_login_ldap_1'), - 'valeur' => $login_ldap - ), - 'pass_ldap' => array( - 'label' => _T('entree_passe_ldap'), - 'valeur' => $pass_ldap + . "\n

    " . _T('texte_acces_ldap_anonyme_1') . '

    ' + . fieldset( + _T('connexion_ldap'), + array( + 'login_ldap' => array( + 'label' => _T('texte_login_ldap_1'), + 'valeur' => $login_ldap + ), + 'pass_ldap' => array( + 'label' => _T('entree_passe_ldap'), + 'valeur' => $pass_ldap + ) ) ) - ) - - . bouton_suivant())); + . bouton_suivant())); echo install_fin_html(); } - -?> diff --git a/www/ecrire/install/etape_ldap2.php b/www/ecrire/install/etape_ldap2.php index 4359030b..be28c195 100644 --- a/www/ecrire/install/etape_ldap2.php +++ b/www/ecrire/install/etape_ldap2.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -11,41 +11,43 @@ \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -// http://doc.spip.org/@install_etape_ldap2_dist -function install_etape_ldap2_dist() -{ +// http://code.spip.net/@install_etape_ldap2_dist +function install_etape_ldap2_dist() { echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"'); - $adresse_ldap = _request('adresse_ldap'); + $adresse_ldap = _request('adresse_ldap'); $port_ldap = _request('port_ldap'); - $tls_ldap = _request('tls_ldap'); + $tls_ldap = _request('tls_ldap'); - $protocole_ldap = _request('protocole_ldap'); + $protocole_ldap = _request('protocole_ldap'); - $login_ldap = _request('login_ldap'); + $login_ldap = _request('login_ldap'); - $pass_ldap = _request('pass_ldap'); + $pass_ldap = _request('pass_ldap'); $port_ldap = intval($port_ldap); $tls = false; if ($tls_ldap == 'oui') { - if ($port_ldap==636) { - $adresse_ldap = "ldaps://$adresse_ldap"; - - } else $tls = true; + if ($port_ldap == 636) { + $adresse_ldap = "ldaps://$adresse_ldap"; + } else { + $tls = true; + } } $ldap_link = ldap_connect($adresse_ldap, $port_ldap); $erreur = "ldap_connect($adresse_ldap, $port_ldap)"; if ($ldap_link) { - if ( !ldap_set_option($ldap_link, LDAP_OPT_PROTOCOL_VERSION, $protocole_ldap) ) { - $protocole_ldap = 2 ; + if (!ldap_set_option($ldap_link, LDAP_OPT_PROTOCOL_VERSION, $protocole_ldap)) { + $protocole_ldap = 2; ldap_set_option($ldap_link, LDAP_OPT_PROTOCOL_VERSION, $protocole_ldap); } if ($tls === true) { @@ -61,27 +63,26 @@ function install_etape_ldap2_dist() } if ($ldap_link) { - echo info_etape(_T('titre_connexion_ldap'),info_progression_etape(2,'etape_ldap','install/')), _T('info_connexion_ldap_ok'); + echo info_etape( + _T('titre_connexion_ldap'), + info_progression_etape(2, 'etape_ldap', 'install/') + ), _T('info_connexion_ldap_ok'); echo generer_form_ecrire('install', ( - "\n" - . "\n" - . "\n" - . "\n" - . "\n" - . "\n" - . "\n" - . bouton_suivant())); - } - else { - echo info_etape(_T('titre_connexion_ldap')), info_progression_etape(1,'etape_ldap','install/', true), - "

    "._T('avis_connexion_ldap_echec_1')."

    ", - "

    "._T('avis_connexion_ldap_echec_2'). - "
    \n"._T('avis_connexion_ldap_echec_3') . - '

    '. $erreur. ' ?

    ' - ; + "\n" + . "\n" + . "\n" + . "\n" + . "\n" + . "\n" + . "\n" + . bouton_suivant())); + } else { + echo info_etape(_T('titre_connexion_ldap')), info_progression_etape(1, 'etape_ldap', 'install/', true), + "

    " . _T('avis_connexion_ldap_echec_1') . '

    ', + '

    ' . _T('avis_connexion_ldap_echec_2') . + "
    \n" . _T('avis_connexion_ldap_echec_3') . + '

    ' . $erreur . ' ?

    '; } echo install_fin_html(); } - -?> diff --git a/www/ecrire/install/etape_ldap3.php b/www/ecrire/install/etape_ldap3.php index 768f0076..e6623679 100644 --- a/www/ecrire/install/etape_ldap3.php +++ b/www/ecrire/install/etape_ldap3.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -11,11 +11,12 @@ \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -// http://doc.spip.org/@install_etape_ldap3_dist -function install_etape_ldap3_dist() -{ +// http://code.spip.net/@install_etape_ldap3_dist +function install_etape_ldap3_dist() { $adresse_ldap = _request('adresse_ldap'); $login_ldap = _request('login_ldap'); $pass_ldap = _request('pass_ldap'); @@ -23,63 +24,64 @@ function install_etape_ldap3_dist() $base_ldap_text = defined('_INSTALL_BASE_LDAP') ? _INSTALL_BASE_LDAP - : "ou=users, dc=mon-domaine, dc=com"; + : 'ou=users, dc=mon-domaine, dc=com'; echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"'); - echo info_etape(_T('info_chemin_acces_1'),info_progression_etape(3,'etape_ldap','install/')),_T('info_chemin_acces_2'); + echo info_etape( + _T('info_chemin_acces_1'), + info_progression_etape(3, 'etape_ldap', 'install/') + ), + _T('info_chemin_acces_2'); $ldap_link = @ldap_connect("$adresse_ldap", "$port_ldap"); if ($ldap_link) { @ldap_bind($ldap_link, "$login_ldap", "$pass_ldap"); - $result = @ldap_read($ldap_link, "", "objectclass=*", array("namingContexts")); + $result = @ldap_read($ldap_link, '', 'objectclass=*', array('namingContexts')); $info = @ldap_get_entries($ldap_link, $result); @ldap_close($ldap_link); } - + $checked = false; $res = ''; - if (is_array($info) AND $info["count"] > 0) { - $res .= "

    "._T('info_selection_chemin_acces')."

    "; - $res .= "
      "; + if (is_array($info) and $info['count'] > 0) { + $res .= '

      ' . _T('info_selection_chemin_acces') . '

      '; + $res .= '
        '; $n = 0; - for ($i = 0; $i < $info["count"]; $i++) { - $names = $info[$i]["namingcontexts"]; + for ($i = 0; $i < $info['count']; $i++) { + $names = $info[$i]['namingcontexts']; if (is_array($names)) { - for ($j = 0; $j < $names["count"]; $j++) { + for ($j = 0; $j < $names['count']; $j++) { $n++; - $res .= "
      • \n"; + $res .= ' />'; + $res .= "\n"; } } } - $res .= "
      "; - $res .= _T('info_ou')." "; + $res .= '
    '; + $res .= _T('info_ou') . ' '; } $res .= "
    \n"._T('entree_chemin_acces')." " - . "\n
    " - . "" - . "\n
    " - . "\n" - . install_propager(array('adresse_ldap','port_ldap','login_ldap','pass_ldap','protocole_ldap','tls_ldap')) - . bouton_suivant(); + $res .= ' />' + . "\n ' + . "\n
    " + . "" + . "\n
    " + . "\n" + . install_propager(array('adresse_ldap', 'port_ldap', 'login_ldap', 'pass_ldap', 'protocole_ldap', 'tls_ldap')) + . bouton_suivant(); echo generer_form_ecrire('install', $res); echo install_fin_html(); } - - -?> diff --git a/www/ecrire/install/etape_ldap4.php b/www/ecrire/install/etape_ldap4.php index 1265e033..be16f6da 100644 --- a/www/ecrire/install/etape_ldap4.php +++ b/www/ecrire/install/etape_ldap4.php @@ -3,27 +3,30 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('auth/ldap'); -// http://doc.spip.org/@install_etape_ldap4_dist -function install_etape_ldap4_dist() -{ +// http://code.spip.net/@install_etape_ldap4_dist +function install_etape_ldap4_dist() { $adresse_ldap = _request('adresse_ldap'); $login_ldap = _request('login_ldap'); $pass_ldap = _request('pass_ldap'); $port_ldap = _request('port_ldap'); $base_ldap = _request('base_ldap'); $base_ldap_text = _request('base_ldap_text'); - if (!$base_ldap) $base_ldap = $base_ldap_text; + if (!$base_ldap) { + $base_ldap = $base_ldap_text; + } echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"'); @@ -31,71 +34,75 @@ function install_etape_ldap4_dist() @ldap_bind($ldap_link, $login_ldap, $pass_ldap); // Essayer de verifier le chemin fourni - $r = @ldap_compare($ldap_link, $base_ldap, "objectClass", ""); + $r = @ldap_compare($ldap_link, $base_ldap, 'objectClass', ''); $fail = (ldap_errno($ldap_link) == 32); if ($fail) { echo info_etape(_T('info_chemin_acces_annuaire')), - info_progression_etape(3,'etape_ldap','install/', true), - "

    "._T('avis_operation_echec')."

    "._T('avis_chemin_invalide_1'), - " (".spip_htmlspecialchars($base_ldap).") "._T('avis_chemin_invalide_2')."

    "; - } - else { + info_progression_etape(3, 'etape_ldap', 'install/', true), + "

    " . _T('avis_operation_echec') . '

    ' . _T('avis_chemin_invalide_1'), + ' (' . spip_htmlspecialchars($base_ldap) . ') ' . _T('avis_chemin_invalide_2') . '

    '; + } else { info_etape(_T('info_reglage_ldap')); - echo info_progression_etape(4,'etape_ldap','install/'); + echo info_progression_etape(4, 'etape_ldap', 'install/'); $statuts = liste_statuts_ldap(); $statut_ldap = defined('_INSTALL_STATUT_LDAP') - ? _INSTALL_STATUT_LDAP - : $GLOBALS['liste_des_statuts']['info_redacteurs']; - - - $res = install_propager(array('adresse_ldap','port_ldap','login_ldap','pass_ldap','protocole_ldap','tls_ldap')) - . "" - . "" - . fieldset(_T('info_statut_utilisateurs_1'), - array( - 'statut_ldap' => array( - 'label' => _T('info_statut_utilisateurs_2').'
    ', - 'valeur' => $statut_ldap, - 'alternatives' => $statuts + ? _INSTALL_STATUT_LDAP + : $GLOBALS['liste_des_statuts']['info_redacteurs']; + + + $res = install_propager(array('adresse_ldap', 'port_ldap', 'login_ldap', 'pass_ldap', 'protocole_ldap', 'tls_ldap')) + . "" + . "" + . fieldset( + _T('info_statut_utilisateurs_1'), + array( + 'statut_ldap' => array( + 'label' => _T('info_statut_utilisateurs_2') . '
    ', + 'valeur' => $statut_ldap, + 'alternatives' => $statuts ) ) - ) - . install_ldap_correspondances() - . bouton_suivant(); + ) + . install_ldap_correspondances() + . bouton_suivant(); - echo generer_form_ecrire('install', $res); + echo generer_form_ecrire('install', $res); } echo install_fin_html(); } -// http://doc.spip.org/@liste_statuts_ldap +// http://code.spip.net/@liste_statuts_ldap function liste_statuts_ldap() { - $recom = array("info_administrateurs" => ("" ._T('info_administrateur_1')." "._T('info_administrateur_2')."
    "), - "info_redacteurs" => (""._T('info_redacteur_1')." "._T('info_redacteur_2')."
    "), - "info_visiteurs" => (""._T('info_visiteur_1')." "._T('info_visiteur_2')."
    ")); - + $recom = array( + 'info_administrateurs' => ('' . _T('info_administrateur_1') . ' ' . _T('info_administrateur_2') . '
    '), + 'info_redacteurs' => ('' . _T('info_redacteur_1') . ' ' . _T('info_redacteur_2') . '
    '), + 'info_visiteurs' => ('' . _T('info_visiteur_1') . ' ' . _T('info_visiteur_2') . '
    ') + ); + $res = array(); - foreach($GLOBALS['liste_des_statuts'] as $k => $v) { - if (isset($recom[$k])) $res[$v] = $recom[$k]; + foreach ($GLOBALS['liste_des_statuts'] as $k => $v) { + if (isset($recom[$k])) { + $res[$v] = $recom[$k]; + } } + return $res; } -function install_ldap_correspondances() -{ +function install_ldap_correspondances() { $champs = array(); - foreach (is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : array() as $champ => $v ) { - $nom = 'ldap_' . $champ; - $val = is_array($v) ? join(',', $v) : strval($v); - $champs[$nom]= array( - 'label' => _T('ldap_correspondance', array('champ' => "$champ")).'
    ', - 'valeur' => $val - ); + foreach (is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : array() as $champ => $v) { + $nom = 'ldap_' . $champ; + $val = is_array($v) ? join(',', $v) : strval($v); + $champs[$nom] = array( + 'label' => _T('ldap_correspondance', array('champ' => "$champ")) . '
    ', + 'valeur' => $val + ); } - return !$champs ? '' : fieldset(_T('ldap_correspondance_1'), $champs, '', _T('ldap_correspondance_2') . '

    '); + return !$champs ? + '' : fieldset(_T('ldap_correspondance_1'), $champs, '', _T('ldap_correspondance_2') . '

    '); } -?> diff --git a/www/ecrire/install/etape_ldap5.php b/www/ecrire/install/etape_ldap5.php index 433069ee..59708a43 100644 --- a/www/ecrire/install/etape_ldap5.php +++ b/www/ecrire/install/etape_ldap5.php @@ -3,84 +3,93 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/headers'); include_spip('auth/ldap'); -// http://doc.spip.org/@install_etape_ldap5_dist -function install_etape_ldap5_dist() -{ +// http://code.spip.net/@install_etape_ldap5_dist +function install_etape_ldap5_dist() { etape_ldap5_save(); etape_ldap5_suite(); } -function etape_ldap5_save() -{ - if (!@file_exists(_FILE_CONNECT_TMP)) +function etape_ldap5_save() { + if (!@file_exists(_FILE_CONNECT_TMP)) { redirige_url_ecrire('install'); + } ecrire_meta('ldap_statut_import', _request('statut_ldap')); lire_fichier(_FILE_CONNECT_TMP, $conn); if ($p = strpos($conn, "'');")) { - ecrire_fichier(_FILE_CONNECT_TMP, - substr($conn, 0, $p+1) - . _FILE_LDAP - . substr($conn, $p+1)); + ecrire_fichier( + _FILE_CONNECT_TMP, + substr($conn, 0, $p + 1) + . _FILE_LDAP + . substr($conn, $p + 1) + ); } - $adresse_ldap = addcslashes(_request('adresse_ldap'),"'\\"); - $login_ldap = addcslashes(_request('login_ldap'),"'\\"); - $pass_ldap = addcslashes(_request('pass_ldap'),"'\\"); - $port_ldap = addcslashes(_request('port_ldap'),"'\\"); - $tls_ldap = addcslashes(_request('tls_ldap'),"'\\"); - $protocole_ldap = addcslashes(_request('protocole_ldap'),"'\\"); - $base_ldap = addcslashes(_request('base_ldap'),"'\\"); - $base_ldap_text = addcslashes(_request('base_ldap_text'),"'\\"); + $adresse_ldap = addcslashes(_request('adresse_ldap'), "'\\"); + $login_ldap = addcslashes(_request('login_ldap'), "'\\"); + $pass_ldap = addcslashes(_request('pass_ldap'), "'\\"); + $port_ldap = addcslashes(_request('port_ldap'), "'\\"); + $tls_ldap = addcslashes(_request('tls_ldap'), "'\\"); + $protocole_ldap = addcslashes(_request('protocole_ldap'), "'\\"); + $base_ldap = addcslashes(_request('base_ldap'), "'\\"); + $base_ldap_text = addcslashes(_request('base_ldap_text'), "'\\"); $conn = "\$GLOBALS['ldap_base'] = '$base_ldap';\n" . "\$GLOBALS['ldap_link'] = @ldap_connect('$adresse_ldap','$port_ldap');\n" . "@ldap_set_option(\$GLOBALS['ldap_link'],LDAP_OPT_PROTOCOL_VERSION,'$protocole_ldap');\n" . (($tls_ldap != 'oui') ? '' : - "@ldap_start_tls(\$GLOBALS['ldap_link']);\n") + "@ldap_start_tls(\$GLOBALS['ldap_link']);\n") . "@ldap_bind(\$GLOBALS['ldap_link'],'$login_ldap','$pass_ldap');\n"; $champs = is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : array(); $res = ''; - foreach ($champs as $champ => $v ) { + foreach ($champs as $champ => $v) { $nom = 'ldap_' . $champ; $val = trim(_request($nom)); if (preg_match('/^\w*$/', $val)) { - if ($val) $val = _q($val); - } else $val = "array(" . _q(preg_split('/\W+/', $val)) . ')';; - if ($val) $res .= "'$champ' => " . $val . ","; + if ($val) { + $val = _q($val); + } + } else { + $val = 'array(' . _q(preg_split('/\W+/', $val)) . ')'; + }; + if ($val) { + $res .= "'$champ' => " . $val . ','; + } } $conn .= "\$GLOBALS['ldap_champs'] = array($res);\n"; - + install_fichier_connexion(_DIR_CONNECT . _FILE_LDAP, $conn); } -function etape_ldap5_suite() -{ +function etape_ldap5_suite() { echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"'); - echo info_etape(_T('info_ldap_ok'), info_progression_etape(5,'etape_ldap','install/'), _T('info_terminer_installation')); + echo info_etape( + _T('info_ldap_ok'), + info_progression_etape(5, 'etape_ldap', 'install/'), + _T('info_terminer_installation') + ); echo generer_form_ecrire('install', ( "" . - "" + "" . bouton_suivant())); echo install_fin_html(); } - - -?> diff --git a/www/ecrire/iterateur/condition.php b/www/ecrire/iterateur/condition.php index 29acc552..7b7f74f5 100644 --- a/www/ecrire/iterateur/condition.php +++ b/www/ecrire/iterateur/condition.php @@ -3,33 +3,58 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ +/** + * Gestion de l'itérateur CONDITION + * + * @package SPIP\Core\Iterateur\CONDITION + **/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('iterateur/data'); -// -// creer une boucle sur un iterateur CONDITION -// annonce au compilo les "champs" disponibles -// + +/** + * Créer une boucle sur un itérateur CONDITION + * + * Annonce au compilateur les "champs" disponibles, + * c'est à dire aucun. Une boucle CONDITION n'a pas de données ! + * + * @param Boucle $b + * Description de la boucle + * @return Boucle + * Description de la boucle complétée des champs + */ function iterateur_CONDITION_dist($b) { $b->iterateur = 'CONDITION'; # designe la classe d'iterateur $b->show = array( 'field' => array() ); + return $b; } - +/** + * Iterateur CONDITION pour itérer sur des données + * + * La boucle condition n'a toujours qu'un seul élément. + */ class IterateurCONDITION extends IterateurData { + /** + * Obtenir les données de la boucle CONDITION + * + * @param array $command + **/ protected function select($command) { - $this->tableau = array(0=>1); + $this->tableau = array(0 => 1); } } diff --git a/www/ecrire/iterateur/data.php b/www/ecrire/iterateur/data.php index 2af35bcc..96e39631 100644 --- a/www/ecrire/iterateur/data.php +++ b/www/ecrire/iterateur/data.php @@ -3,24 +3,43 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion de l'itérateur DATA + * + * @package SPIP\Core\Iterateur\DATA + **/ -if (!defined('_DATA_SOURCE_MAX_SIZE')) define('_DATA_SOURCE_MAX_SIZE',2*1048576); +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +if (!defined('_DATA_SOURCE_MAX_SIZE')) { + define('_DATA_SOURCE_MAX_SIZE', 2 * 1048576); +} /** - * creer une boucle sur un iterateur DATA - * annonce au compilo les "champs" disponibles + * Créer une boucle sur un itérateur DATA + * + * Annonce au compilateur les "champs" disponibles, c'est à dire + * 'cle', 'valeur' et '*' (tout nom possible). + * + * On ne peut effectivement pas connaître à la compilation la structure + * des données qui seront obtenues. On indique donc au compilateur que + * toute balise utilisée dans la boucle est possiblement un champ + * des données reçues. * - * @param $b - * @return + * @param Boucle $b + * Description de la boucle + * @return Boucle + * Description de la boucle complétée des champs */ function iterateur_DATA_dist($b) { $b->iterateur = 'DATA'; # designe la classe d'iterateur @@ -32,16 +51,20 @@ function iterateur_DATA_dist($b) { ) ); $b->select[] = '.valeur'; + return $b; } /** - * IterateurDATA pour iterer sur des donnees + * Itérateur DATA + * + * Pour itérer sur des données quelconques (transformables en tableau) */ class IterateurDATA implements Iterator { /** * tableau de donnees + * * @var array */ protected $tableau = array(); @@ -49,6 +72,7 @@ class IterateurDATA implements Iterator { /** * Conditions de filtrage * ie criteres de selection + * * @var array */ protected $filtre = array(); @@ -56,28 +80,30 @@ class IterateurDATA implements Iterator { /** * Cle courante + * * @var null */ protected $cle = null; /** * Valeur courante + * * @var null */ protected $valeur = null; /** - * Erreur presente ? + * Erreur presente ? * * @var bool - **/ + **/ public $err = false; /** - * Calcul du total des elements + * Calcul du total des elements * * @var int|null - **/ + **/ public $total = null; /** @@ -86,8 +112,8 @@ class IterateurDATA implements Iterator { * @param $command * @param array $info */ - public function __construct($command, $info=array()) { - $this->type='DATA'; + public function __construct($command, $info = array()) { + $this->type = 'DATA'; $this->command = $command; $this->info = $info; @@ -96,6 +122,7 @@ class IterateurDATA implements Iterator { /** * Revenir au depart + * * @return void */ public function rewind() { @@ -104,7 +131,8 @@ class IterateurDATA implements Iterator { } /** - * Declarer les criteres exceptions + * Déclarer les critères exceptions + * * @return array */ public function exception_des_criteres() { @@ -112,32 +140,43 @@ class IterateurDATA implements Iterator { } /** - * Recuperer depuis le cache si possible - * @param $cle - * @return + * Récupérer depuis le cache si possible + * + * @param string $cle + * @return mixed */ protected function cache_get($cle) { - if (!$cle) return; + if (!$cle) { + return; + } # utiliser memoization si dispo - include_spip('inc/memoization'); - if (!function_exists('cache_get')) return; + if (!function_exists('cache_get')) { + return; + } + return cache_get($cle); } /** * Stocker en cache si possible - * @param $cle - * @param $ttl - * @return + * + * @param string $cle + * @param int $ttl + * @param null|mixed $valeur + * @return bool */ protected function cache_set($cle, $ttl, $valeur = null) { - if (!$cle) return; + if (!$cle) { + return; + } if (is_null($valeur)) { $valeur = $this->tableau; } # utiliser memoization si dispo - include_spip('inc/memoization'); - if (!function_exists('cache_set')) return; + if (!function_exists('cache_set')) { + return; + } + return cache_set($cle, array( 'data' => $valeur, @@ -145,15 +184,15 @@ class IterateurDATA implements Iterator { 'ttl' => $ttl ), 3600 + $ttl); - # conserver le cache 1h de plus que la validite demandee, - # pour le cas ou le serveur distant ne reponde plus + # conserver le cache 1h de plus que la validite demandee, + # pour le cas ou le serveur distant ne reponde plus } /** - * Aller chercher les donnees de la boucle DATA + * Aller chercher les données de la boucle DATA * * @throws Exception - * @param $command + * @param array $command * @return void */ protected function select($command) { @@ -171,10 +210,11 @@ class IterateurDATA implements Iterator { // cherchons differents moyens de creer le tableau de donnees // les commandes connues pour l'iterateur DATA // sont : {tableau #ARRAY} ; {cle=...} ; {valeur=...} - + // {source format, [URL], [arg2]...} if (isset($this->command['source']) - AND isset($this->command['sourcemode'])) { + and isset($this->command['sourcemode']) + ) { $this->select_source(); } @@ -189,14 +229,15 @@ class IterateurDATA implements Iterator { // Si a ce stade on n'a pas de table, il y a un bug if (!is_array($this->tableau)) { $this->err = true; - spip_log("erreur datasource ".var_export($command,true)); + spip_log("erreur datasource " . var_export($command, true)); } // {datapath query.results} // extraire le chemin "query.results" du tableau de donnees if (!$this->err - AND isset($this->command['datapath']) - AND is_array($this->command['datapath'])) { + and isset($this->command['datapath']) + and is_array($this->command['datapath']) + ) { $this->select_datapath(); } @@ -226,91 +267,116 @@ class IterateurDATA implements Iterator { # l'objet en cache ; cf plugins/icalendar # perf : pas de fonction table_to_array ! (table est deja un array) if (isset($this->command['sourcemode']) - AND !in_array($this->command['sourcemode'],array('table', 'array', 'tableau'))) + and !in_array($this->command['sourcemode'], array('table', 'array', 'tableau')) + ) { charger_fonction($this->command['sourcemode'] . '_to_array', 'inc', true); + } # le premier argument peut etre un array, une URL etc. $src = $this->command['source'][0]; # avons-nous un cache dispo ? $cle = null; - if (is_string($src)) - $cle = 'datasource_'.md5($this->command['sourcemode'].':'.var_export($this->command['source'],true)); + if (is_string($src)) { + $cle = 'datasource_' . md5($this->command['sourcemode'] . ':' . var_export($this->command['source'], true)); + } $cache = $this->cache_get($cle); - if (isset($this->command['datacache'])) + if (isset($this->command['datacache'])) { $ttl = intval($this->command['datacache']); + } if ($cache - AND ($cache['time'] + (isset($ttl) ? $ttl : $cache['ttl']) - > time()) - AND !(_request('var_mode') === 'recalcul' - AND include_spip('inc/autoriser') - AND autoriser('recalcul') - )) { + and ($cache['time'] + (isset($ttl) ? $ttl : $cache['ttl']) + > time()) + and !(_request('var_mode') === 'recalcul' + and include_spip('inc/autoriser') + and autoriser('recalcul') + ) + ) { $this->tableau = $cache['data']; - } - else try { - # dommage que ca ne soit pas une option de yql_to_array... - if ($this->command['sourcemode'] == 'yql') - if (!isset($ttl)) $ttl = 3600; - - if (isset($this->command['sourcemode']) - AND in_array($this->command['sourcemode'], - array('table', 'array', 'tableau')) - ) { - if (is_array($a = $src) - OR (is_string($a) - AND $a = str_replace('"', '"', $a) # fragile! - AND is_array($a = @unserialize($a))) - ) - $this->tableau = $a; - } - else { - if (preg_match(',^https?://,', $src)) { - include_spip('inc/distant'); - $u = recuperer_page($src, false, false, _DATA_SOURCE_MAX_SIZE); - if (!$u) - throw new Exception("404"); - if (!isset($ttl)) $ttl = 24*3600; - } else if (@is_dir($src)) { - $u = $src; - if (!isset($ttl)) $ttl = 10; - } else if (@is_readable($src) && @is_file($src)) { - $u = spip_file_get_contents($src); - if (!isset($ttl)) $ttl = 10; - } else { - $u = $src; - if (!isset($ttl)) $ttl = 10; + } else { + try { + # dommage que ca ne soit pas une option de yql_to_array... + if ($this->command['sourcemode'] == 'yql') { + if (!isset($ttl)) { + $ttl = 3600; + } } - if (!$this->err - AND $g = charger_fonction($this->command['sourcemode'] . '_to_array', 'inc', true)) { - $args = $this->command['source']; - $args[0] = $u; - if (is_array($a = call_user_func_array($g,$args))) { + + if (isset($this->command['sourcemode']) + and in_array($this->command['sourcemode'], + array('table', 'array', 'tableau')) + ) { + if (is_array($a = $src) + or (is_string($a) + and $a = str_replace('"', '"', $a) # fragile! + and is_array($a = @unserialize($a))) + ) { $this->tableau = $a; } + } else { + if (tester_url_absolue($src)) { + include_spip('inc/distant'); + $u = recuperer_page($src, false, false, _DATA_SOURCE_MAX_SIZE); + if (!$u) { + throw new Exception("404"); + } + if (!isset($ttl)) { + $ttl = 24 * 3600; + } + } else { + if (@is_dir($src)) { + $u = $src; + if (!isset($ttl)) { + $ttl = 10; + } + } else { + if (@is_readable($src) && @is_file($src)) { + $u = spip_file_get_contents($src); + if (!isset($ttl)) { + $ttl = 10; + } + } else { + $u = $src; + if (!isset($ttl)) { + $ttl = 10; + } + } + } + } + if (!$this->err + and $g = charger_fonction($this->command['sourcemode'] . '_to_array', 'inc', true) + ) { + $args = $this->command['source']; + $args[0] = $u; + if (is_array($a = call_user_func_array($g, $args))) { + $this->tableau = $a; + } + } } - } - if (!is_array($this->tableau)) - $this->err = true; + if (!is_array($this->tableau)) { + $this->err = true; + } - if (!$this->err AND isset($ttl) and $ttl>0) - $this->cache_set($cle, $ttl); + if (!$this->err and isset($ttl) and $ttl > 0) { + $this->cache_set($cle, $ttl); + } - } - catch (Exception $e) { - $e = $e->getMessage(); - $err = sprintf("[%s, %s] $e", - $src, - $this->command['sourcemode']); - erreur_squelette(array($err, array())); - $this->err = true; + } catch (Exception $e) { + $e = $e->getMessage(); + $err = sprintf("[%s, %s] $e", + $src, + $this->command['sourcemode']); + erreur_squelette(array($err, array())); + $this->err = true; + } } # en cas d'erreur, utiliser le cache si encore dispo if ($this->err - AND $cache) { + and $cache + ) { $this->tableau = $cache['data']; $this->err = false; } @@ -318,10 +384,13 @@ class IterateurDATA implements Iterator { /** - * Retourne un tableau donne depuis un critere liste - * Critere {liste X1, X2, X3} - * - **/ + * Retourne un tableau donne depuis un critère liste + * + * Critère `{liste X1, X2, X3}` + * + * @see critere_DATA_liste_dist() + * + **/ protected function select_liste() { # s'il n'y a qu'une valeur dans la liste, sans doute une #BALISE if (!isset($this->command['liste'][1])) { @@ -338,7 +407,7 @@ class IterateurDATA implements Iterator { * Retourne un tableau donne depuis un critere liste * Critere {enum Xmin, Xmax} * - **/ + **/ protected function select_enum() { # s'il n'y a qu'une valeur dans la liste, sans doute une #BALISE if (!isset($this->command['enum'][1])) { @@ -348,10 +417,12 @@ class IterateurDATA implements Iterator { $this->command['enum'] = $this->command['enum'][0]; } } - if (count($this->command['enum'])>=3) - $enum = range(array_shift($this->command['enum']),array_shift($this->command['enum']),array_shift($this->command['enum'])); - else - $enum = range(array_shift($this->command['enum']),array_shift($this->command['enum'])); + if (count($this->command['enum']) >= 3) { + $enum = range(array_shift($this->command['enum']), array_shift($this->command['enum']), + array_shift($this->command['enum'])); + } else { + $enum = range(array_shift($this->command['enum']), array_shift($this->command['enum'])); + } $this->tableau = $enum; } @@ -359,11 +430,11 @@ class IterateurDATA implements Iterator { /** * extraire le chemin "query.results" du tableau de donnees * {datapath query.results} - * - **/ + * + **/ protected function select_datapath() { - list(,$base) = each($this->command['datapath']); - if (strlen($base = ltrim(trim($base),"/"))) { + list(, $base) = each($this->command['datapath']); + if (strlen($base = ltrim(trim($base), "/"))) { $this->tableau = table_valeur($this->tableau, $base); if (!is_array($this->tableau)) { $this->tableau = array(); @@ -376,49 +447,54 @@ class IterateurDATA implements Iterator { /** * Ordonner les resultats * {par x} - * - **/ + * + **/ protected function select_orderby() { $sortfunc = ''; $aleas = 0; - foreach($this->command['orderby'] as $tri) { + foreach ($this->command['orderby'] as $tri) { // virer le / initial pour les criteres de la forme {par /xx} if (preg_match(',^\.?([/\w]+)( DESC)?$,iS', ltrim($tri, '/'), $r)) { + $r = array_pad($r, 3, null); + // tri par cle - if ($r[1] == 'cle'){ - if (isset($r[2]) and $r[2]) + if ($r[1] == 'cle') { + if (isset($r[2]) and $r[2]) { krsort($this->tableau); - else + } else { ksort($this->tableau); - } - # {par hasard} - else if ($r[1] == 'alea') { - $k = array_keys($this->tableau); - shuffle($k); - $v = array(); - foreach($k as $cle) - $v[$cle] = $this->tableau[$cle]; - $this->tableau = $v; - } + } + } # {par hasard} else { - # {par valeur} - if ($r[1] == 'valeur') - $tv = '%s'; - # {par valeur/xx/yy} ?? - else - $tv = 'table_valeur(%s, '.var_export($r[1],true).')'; - $sortfunc .= ' - $a = '.sprintf($tv,'$aa').'; - $b = '.sprintf($tv,'$bb').'; + if ($r[1] == 'alea') { + $k = array_keys($this->tableau); + shuffle($k); + $v = array(); + foreach ($k as $cle) { + $v[$cle] = $this->tableau[$cle]; + } + $this->tableau = $v; + } else { + # {par valeur} + if ($r[1] == 'valeur') { + $tv = '%s'; + } # {par valeur/xx/yy} ?? + else { + $tv = 'table_valeur(%s, ' . var_export($r[1], true) . ')'; + } + $sortfunc .= ' + $a = ' . sprintf($tv, '$aa') . '; + $b = ' . sprintf($tv, '$bb') . '; if ($a <> $b) - return ($a ' . ((isset($r[2]) and $r[2]) ? '>' : '<').' $b) ? -1 : 1;'; + return ($a ' . ((isset($r[2]) and $r[2]) ? '>' : '<') . ' $b) ? -1 : 1;'; + } } } } if ($sortfunc) { uasort($this->tableau, create_function('$aa,$bb', - $sortfunc.' + $sortfunc . ' return 0;' )); } @@ -428,33 +504,36 @@ class IterateurDATA implements Iterator { /** * Grouper les resultats * {fusion /x/y/z} - * - **/ + * + **/ protected function select_groupby() { // virer le / initial pour les criteres de la forme {fusion /xx} if (strlen($fusion = ltrim($this->command['groupby'][0], '/'))) { $vu = array(); - foreach($this->tableau as $k => $v) { + foreach ($this->tableau as $k => $v) { $val = table_valeur($v, $fusion); - if (isset($vu[$val])) + if (isset($vu[$val])) { unset($this->tableau[$k]); - else + } else { $vu[$val] = true; + } } } } - - + + /** * L'iterateur est-il encore valide ? + * * @return bool */ - public function valid(){ + public function valid() { return !is_null($this->cle); } /** * Retourner la valeur + * * @return null */ public function current() { @@ -463,6 +542,7 @@ class IterateurDATA implements Iterator { /** * Retourner la cle + * * @return null */ public function key() { @@ -471,21 +551,26 @@ class IterateurDATA implements Iterator { /** * Passer a la valeur suivante + * * @return void */ - public function next(){ - if ($this->valid()) + public function next() { + if ($this->valid()) { list($this->cle, $this->valeur) = each($this->tableau); + } } /** * Compter le nombre total de resultats + * * @return int */ public function count() { - if (is_null($this->total)) + if (is_null($this->total)) { $this->total = count($this->tableau); - return $this->total; + } + + return $this->total; } } @@ -505,15 +590,18 @@ function inc_file_to_array_dist($u) { /** * plugins -> tableau + * * @return unknown */ function inc_plugins_to_array_dist() { include_spip('inc/plugin'); + return liste_chemin_plugin_actifs(); } /** * xml -> tableau + * * @param string $u * @return array */ @@ -525,130 +613,167 @@ function inc_xml_to_array_dist($u) { * * object -> tableau * - * @param object $object The object to convert + * @param object $object The object to convert * @return array * */ -function inc_object_to_array( $object ) { - if( !is_object( $object ) && !is_array( $object ) ) { - return $object; - } - if( is_object( $object ) ) { - $object = get_object_vars( $object ); - } - return array_map( 'inc_object_to_array', $object ); +function inc_object_to_array($object) { + if (!is_object($object) && !is_array($object)) { + return $object; + } + if (is_object($object)) { + $object = get_object_vars($object); + } + + return array_map('inc_object_to_array', $object); } /** * yql -> tableau + * * @throws Exception * @param string $u * @return array|bool */ function inc_yql_to_array_dist($u) { define('_YQL_ENDPOINT', 'http://query.yahooapis.com/v1/public/yql?&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&q='); - $v = recuperer_page($url = _YQL_ENDPOINT.urlencode($u).'&format=json'); - $w = json_decode($v); - if (!$w) { + $v = recuperer_url($url = _YQL_ENDPOINT . urlencode($u) . '&format=json'); + if (!$v['page'] + or !$w = json_decode($v['page'], true) + ) { throw new Exception('YQL: réponse vide ou mal formée'); - return false; } + if (isset($w['error'])) { + throw new Exception($w['error']['description']); + } + return inc_object_to_array($w); } /** * sql -> tableau + * * @param string $u * @return array|bool */ function inc_sql_to_array_dist($u) { # sortir le connecteur de $u preg_match(',^(?:(\w+):)?(.*)$,S', $u, $v); - $serveur = (string) $v[1]; + $serveur = (string)$v[1]; $req = trim($v[2]); if ($s = sql_query($req, $serveur)) { $r = array(); - while ($t = sql_fetch($s)) + while ($t = sql_fetch($s)) { $r[] = $t; + } + return $r; } + return false; } /** * json -> tableau + * * @param string $u * @return array|bool */ function inc_json_to_array_dist($u) { if (is_array($json = json_decode($u)) - OR is_object($json)) - return (array) $json; + or is_object($json) + ) { + return (array)$json; + } } /** * csv -> tableau + * * @param string $u * @return array|bool */ function inc_csv_to_array_dist($u) { include_spip('inc/csv'); - list($entete,$csv) = analyse_csv($u); - array_unshift($csv,$entete); + list($entete, $csv) = analyse_csv($u); + array_unshift($csv, $entete); include_spip('inc/charsets'); + $i = 1; foreach ($entete as $k => $v) { + if (trim($v) == "") { + $v = "col" . $i; + } // reperer des eventuelles cases vides + if (is_numeric($v) and $v < 0) { + $v = "__" . $v; + } // ne pas risquer d'ecraser une cle numerique + if (is_numeric($v)) { + $v = "_" . $v; + } // ne pas risquer d'ecraser une cle numerique $v = strtolower(preg_replace(',\W+,', '_', translitteration($v))); - foreach ($csv as &$item) + foreach ($csv as &$item) { $item[$v] = &$item[$k]; + } + $i++; } + return $csv; } /** * RSS -> tableau + * * @param string $u * @return array|bool */ function inc_rss_to_array_dist($u) { include_spip('inc/syndic'); - if (is_array($rss = analyser_backend($u))) + if (is_array($rss = analyser_backend($u))) { $tableau = $rss; + } + return $tableau; } /** * atom, alias de rss -> tableau + * * @param string $u * @return array|bool */ function inc_atom_to_array_dist($u) { $g = charger_fonction('rss_to_array', 'inc'); + return $g($u); } /** * glob -> tableau * lister des fichiers selon un masque, pour la syntaxe cf php.net/glob + * * @param string $u * @return array|bool */ function inc_glob_to_array_dist($u) { - return (array) glob($u, + $a = glob($u, GLOB_MARK | GLOB_NOSORT | GLOB_BRACE ); + + return $a ? $a : array(); } /** * YAML -> tableau + * * @param string $u * @return bool|array * @throws Exception */ -function inc_yaml_to_array_dist($u){ +function inc_yaml_to_array_dist($u) { include_spip('inc/yaml-mini'); - if (!function_exists("yaml_decode")){ + if (!function_exists("yaml_decode")) { throw new Exception('YAML: impossible de trouver la fonction yaml_decode'); + return false; } @@ -660,19 +785,21 @@ function inc_yaml_to_array_dist($u){ * pregfiles -> tableau * lister des fichiers a partir d'un dossier de base et selon une regexp. * pour la syntaxe cf la fonction spip preg_files + * * @param string $dir * @param string $regexp * @param int $limit * @return array|bool */ -function inc_pregfiles_to_array_dist($dir, $regexp=-1, $limit=10000) { - return (array) preg_files($dir, $regexp, $limit); +function inc_pregfiles_to_array_dist($dir, $regexp = -1, $limit = 10000) { + return (array)preg_files($dir, $regexp, $limit); } /** * ls -> tableau * ls : lister des fichiers selon un masque glob * et renvoyer aussi leurs donnees php.net/stat + * * @param string $u * @return array|bool */ @@ -680,41 +807,47 @@ function inc_ls_to_array_dist($u) { $glob = charger_fonction('glob_to_array', 'inc'); $a = $glob($u); foreach ($a as &$v) { - $b = (array) @stat($v); - foreach ($b as $k => $ignore) - if (is_numeric($k)) unset($b[$k]); + $b = (array)@stat($v); + foreach ($b as $k => $ignore) { + if (is_numeric($k)) { + unset($b[$k]); + } + } $b['file'] = basename($v); $v = array_merge( pathinfo($v), $b ); } + return $a; } /** * Object -> tableau + * * @param Object $object * @return array|bool */ -function XMLObjectToArray($object){ +function XMLObjectToArray($object) { $xml_array = array(); - for( $object->rewind(); $object->valid(); $object->next() ) { - if(array_key_exists($key = $object->key(), $xml_array)){ - $key .= '-'.uniqid(); + for ($object->rewind(); $object->valid(); $object->next()) { + if (array_key_exists($key = $object->key(), $xml_array)) { + $key .= '-' . uniqid(); } $vars = get_object_vars($object->current()); - if (isset($vars['@attributes'])) - foreach($vars['@attributes'] as $k => $v) - $xml_array[$key][$k] = $v; - if($object->hasChildren()){ + if (isset($vars['@attributes'])) { + foreach ($vars['@attributes'] as $k => $v) { + $xml_array[$key][$k] = $v; + } + } + if ($object->hasChildren()) { $xml_array[$key][] = XMLObjectToArray( $object->current()); - } - else{ + } else { $xml_array[$key][] = strval($object->current()); } } + return $xml_array; } -?> diff --git a/www/ecrire/iterateur/php.php b/www/ecrire/iterateur/php.php index 0afa9912..5d533fd7 100644 --- a/www/ecrire/iterateur/php.php +++ b/www/ecrire/iterateur/php.php @@ -4,19 +4,38 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion de l'itérateur PHP + * + * @package SPIP\Core\Iterateur\PHP + **/ -// -// creer une boucle sur un iterateur -// annonce au compilo les "champs" disponibles -// + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + + +/** + * Créer une boucle sur un itérateur PHP + * + * Annonce au compilateur les "champs" disponibles, c'est à dire + * 'cle', 'valeur' et toutes les méthodes de l'itérateur désigné. + * + * @param Boucle $b + * Description de la boucle + * @param string $iteratorName + * Nom de l'itérateur à utiliser + * @return Boucle + * Description de la boucle complétée des champs + */ function iterateur_php_dist($b, $iteratorName) { $b->iterateur = $iteratorName; # designe la classe d'iterateur $b->show = array( @@ -26,15 +45,14 @@ function iterateur_php_dist($b, $iteratorName) { ) ); foreach (get_class_methods($iteratorName) as $method) { - $b->show['field'][ strtolower($method) ] = 'METHOD'; + $b->show['field'][strtolower($method)] = 'METHOD'; } + /* foreach (get_class_vars($iteratorName) as $property) { $b->show['field'][ strtolower($property) ] = 'PROPERTY'; } */ + return $b; } - - -?> diff --git a/www/ecrire/iterateur/pour.php b/www/ecrire/iterateur/pour.php index 98ce7152..a5280463 100644 --- a/www/ecrire/iterateur/pour.php +++ b/www/ecrire/iterateur/pour.php @@ -3,23 +3,37 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ +/** + * Gestion de l'itérateur POUR + * + * @package SPIP\Core\Iterateur\POUR + **/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('iterateur/data'); -// -// creer une boucle sur un iterateur POUR -// annonce au compilo les "champs" disponibles -// +/** + * Créer une boucle sur un itérateur POUR + * + * Annonce au compilateur les "champs" disponibles, + * c'est à dire 'cle' et 'valeur'. + * + * @param Boucle $b + * Description de la boucle + * @return Boucle + * Description de la boucle complétée des champs + */ function iterateur_POUR_dist($b) { $b->iterateur = 'DATA'; # designe la classe d'iterateur $b->show = array( @@ -28,6 +42,6 @@ function iterateur_POUR_dist($b) { 'valeur' => 'STRING', ) ); + return $b; } - diff --git a/www/ecrire/iterateur/sql.php b/www/ecrire/iterateur/sql.php index 2a1c37e1..622f88b0 100644 --- a/www/ecrire/iterateur/sql.php +++ b/www/ecrire/iterateur/sql.php @@ -3,29 +3,41 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion de l'itérateur SQL + * + * @package SPIP\Core\Iterateur\SQL + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** - * Iterateur SQL + * Itérateur SQL + * + * Permet d'itérer sur des données en base de données */ class IterateurSQL implements Iterator { /** * ressource sql + * * @var resource|bool */ protected $sqlresult = false; /** * row sql courante + * * @var array|null */ protected $row = null; @@ -33,27 +45,29 @@ class IterateurSQL implements Iterator { protected $firstseek = false; /** - * Erreur presente ? + * Erreur presente ? * * @var bool - **/ + **/ public $err = false; /** - * Calcul du total des elements + * Calcul du total des elements * * @var int|null - **/ + **/ public $total = null; /** * selectionner les donnees, ie faire la requete SQL + * * @return void */ protected function select() { $this->row = null; $v = &$this->command; - $this->sqlresult = calculer_select($v['select'], $v['from'], $v['type'], $v['where'], $v['join'], $v['groupby'], $v['orderby'], $v['limit'], $v['having'], $v['table'], $v['id'], $v['connect'], $this->info); + $this->sqlresult = calculer_select($v['select'], $v['from'], $v['type'], $v['where'], $v['join'], $v['groupby'], + $v['orderby'], $v['limit'], $v['having'], $v['table'], $v['id'], $v['connect'], $this->info); $this->err = !$this->sqlresult; $this->firstseek = false; $this->pos = -1; @@ -66,8 +80,8 @@ class IterateurSQL implements Iterator { * array command: les commandes d'initialisation * array info: les infos sur le squelette */ - public function __construct($command, $info=array()) { - $this->type='SQL'; + public function __construct($command, $info = array()) { + $this->type = 'SQL'; $this->command = $command; $this->info = $info; $this->select(); @@ -75,6 +89,7 @@ class IterateurSQL implements Iterator { /** * Rembobiner + * * @return bool */ public function rewind() { @@ -85,18 +100,23 @@ class IterateurSQL implements Iterator { /** * Verifier l'etat de l'iterateur + * * @return bool */ public function valid() { - if ($this->err) + if ($this->err) { return false; - if (!$this->firstseek) + } + if (!$this->firstseek) { $this->next(); + } + return is_array($this->row); } /** * Valeurs sur la position courante + * * @return array */ public function current() { @@ -106,19 +126,20 @@ class IterateurSQL implements Iterator { public function key() { return $this->pos; } - + /** * Sauter a une position absolue + * * @param int $n * @param null|string $continue * @return bool */ - public function seek($n=0, $continue=null) { + public function seek($n = 0, $continue = null) { if (!sql_seek($this->sqlresult, $n, $this->command['connect'], $continue)) { // SQLite ne sait pas seek(), il faut relancer la query // si la position courante est apres la position visee // il faut relancer la requete - if ($this->pos>$n){ + if ($this->pos > $n) { $this->free(); $this->select(); $this->valid(); @@ -128,46 +149,56 @@ class IterateurSQL implements Iterator { return false; } $this->row = sql_fetch($this->sqlresult, $this->command['connect']); - $this->pos = min($n,$this->count()); + $this->pos = min($n, $this->count()); + return true; } /** * Avancer d'un cran + * * @return void */ - public function next(){ + public function next() { $this->row = sql_fetch($this->sqlresult, $this->command['connect']); - $this->pos ++; + $this->pos++; $this->firstseek |= true; } /** * Avancer et retourner les donnees pour le nouvel element + * * @return array|bool|null */ - public function fetch(){ + public function fetch() { if ($this->valid()) { $r = $this->current(); $this->next(); - } else + } else { $r = false; + } + return $r; } /** * liberer les ressources + * * @return bool */ - public function free(){ - if (!$this->sqlresult) return true; + public function free() { + if (!$this->sqlresult) { + return true; + } $a = sql_free($this->sqlresult, $this->command['connect']); - $this->sqlresult = null; - return $a; + $this->sqlresult = null; + + return $a; } - + /** * Compter le nombre de resultats + * * @return int */ public function count() { @@ -180,12 +211,12 @@ class IterateurSQL implements Iterator { $this->valid(); $s = $this->current(); $this->total = $s['count(*)']; - } else + } else { $this->total = sql_count($this->sqlresult, $this->command['connect']); + } } } + return $this->total; } } - -?> diff --git a/www/ecrire/lang/ecrire.xml b/www/ecrire/lang/ecrire.xml index 94aa0c1d..18d0591f 100644 --- a/www/ecrire/lang/ecrire.xml +++ b/www/ecrire/lang/ecrire.xml @@ -1,170 +1,273 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/www/ecrire/lang/ecrire_ar.php b/www/ecrire/lang/ecrire_ar.php index 962f7e89..6f1f5e2d 100644 --- a/www/ecrire/lang/ecrire_ar.php +++ b/www/ecrire/lang/ecrire_ar.php @@ -1,9 +1,11 @@ 'فشل الاتصال بقاعدة البيانات.', 'avis_connexion_echec_2' => 'عد الى الصفحة السابقة وتأكد من صحة المعلومات التي أدخلتها.', 'avis_connexion_echec_3' => 'ملاحظة في العديد من اجهزة الخدمة، عليك بطلب تفعيل الدخول الى قاعدة البيانات قبل التمكن من استخدامها. اذا لم تتمكن من الاتصال بالقاعدة، تأكد من انك نفذت هذه الخطوة.', + 'avis_connexion_erreur_creer_base' => 'لم يتم إنشاء قاعدة البيانات', 'avis_connexion_erreur_nom_base' => 'لا يجب ان يحتوي اسم القاعدة الا احرف وأرقام', 'avis_connexion_ldap_echec_1' => 'الاتصال بخادم LDAP فشل.', 'avis_connexion_ldap_echec_2' => 'عد الى الصفحة السابقة وتأكد من صحة المعلومات التي أدخلتها.', 'avis_connexion_ldap_echec_3' => 'وإلا، لا تستخدم دعم LDAP لجلب المستخدمين.', 'avis_deplacement_rubrique' => 'تحذير! يحتوي هذا القسم على @contient_breves@ خبر@scb@: إذا قمت بنقله، الرجاء تأشير هذا الخيار لتأكيد طلبك.', - 'avis_destinataire_obligatoire' => 'يجب تحديد مرسل اليه قبل بعث الرسالة.', 'avis_erreur_connexion_mysql' => 'خطأ اتصالي SQL', - 'avis_erreur_version_archive' => 'تحذير! الملف @archive@ يعود الى -إصدار من SPIP مختلف عن ذلك الذي قمت - بتثبيته. إنك ستواجه مشاكل -كبيرة: خطر إتلاف قاعدة البيانات، -أعطاب مختلفة في أداء الموقع، الخ. لا -تصدّق على طلب الجلب.

    لمزيد -من المعلومات، الرجاء مراجعة - دليل SPIP. ', - 'avis_espace_interdit' => 'مجال ممنوع

    SPIP مثبت مسبقاً.
    ', + 'avis_espace_interdit' => 'مجال ممنوع
    SPIP مثبت مسبقاً.
    ', 'avis_lecture_noms_bases_1' => 'لم يتمكن المثبت من قراءة أسماء قواعد البيانات المثبتة.', 'avis_lecture_noms_bases_2' => 'إما لا توجد قاعدة بيانات متوافرة أو تم ايقاف وظيفة عرض قواعد البيانات لأسباب أمنية (هكذا الحال لدى العديد من المضيفين).', 'avis_lecture_noms_bases_3' => 'إذا كانت الحال الثانية صحيحة، قد يكون هناك قاعدة بيانات تحمل إسم معرّف الدخول لديك يمكن استخدامها:', - 'avis_non_acces_message' => 'لا تملك إمتياز الدخول الى هذه الرسالة.', 'avis_non_acces_page' => 'لا تملك إمتياز الدخول الى هذه الصفحة.', 'avis_operation_echec' => 'العملية فشلت.', 'avis_operation_impossible' => 'عملية غير ممكنة', - 'avis_probleme_archive' => 'خطأ في قراءة الملف @archive@', 'avis_suppression_base' => 'تحذير، حذف البيانات لا يمكن التراجع عنه', - 'avis_version_mysql' => 'إصدار SQL لديك (@version_mysql@) لا يسمح بالإصلاح الآلي لجداول القاعدة. ', // B 'bouton_acces_ldap' => 'إضافة الوصول الى LDAP', 'bouton_ajouter' => 'إضافة', - 'bouton_ajouter_participant' => 'إضافة مشترك:', - 'bouton_annonce' => 'إعلان', 'bouton_annuler' => 'الغاء', 'bouton_cache_activer' => 'إعادة تشغيل الذاكرة المخبأة', 'bouton_cache_desactiver' => 'إيقاف الذاكرة المخبأة مؤقتاً', - 'bouton_checkbox_envoi_message' => 'إمكان إرسال مشاركة', - 'bouton_checkbox_indiquer_site' => 'يجب إدخال إسم موقع', - 'bouton_checkbox_signature_unique_email' => 'توقيع واحد فقط لكل عنوان بريد الكتروني', - 'bouton_checkbox_signature_unique_site' => 'توقيع واحد فقط لكل موقع', 'bouton_demande_publication' => 'طلب نشر هذا المقال', 'bouton_desactive_tout' => 'تعطيل الكل', 'bouton_desinstaller' => 'إزالة التثبيت', - 'bouton_effacer_index' => 'حذف الفهارس', 'bouton_effacer_tout' => 'حذف الكل', - 'bouton_envoi_message_02' => 'بعث برسالة', 'bouton_envoyer_message' => 'صيغة نهائية : إرسال', 'bouton_fermer' => 'إغلاق', 'bouton_mettre_a_jour_base' => 'تحديث قاعدة البيانات', 'bouton_modifier' => 'تغيير', - 'bouton_pense_bete' => 'مذكرة للاستخدام الشخصي', - 'bouton_radio_activer_messagerie' => 'تفعيل المراسلة الداخلية', - 'bouton_radio_activer_messagerie_interne' => 'تفعيل المراسلة الداخلية', - 'bouton_radio_activer_petition' => 'تفعيل العريضة', 'bouton_radio_afficher' => 'إظهار', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'الظهور في قائمة المحررين المتصلين', - 'bouton_radio_desactiver_messagerie' => 'ايقاف المراسلة', 'bouton_radio_envoi_annonces_adresse' => 'إرسال الإعلانات الى العنوان:', 'bouton_radio_envoi_liste_nouveautes' => 'إرسال قائمة بالأخبار', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'عدم الظهور في قائمة المحررين', 'bouton_radio_non_envoi_annonces_editoriales' => 'عدم إرسال أي إعلان تحرير', - 'bouton_radio_pas_petition' => 'بدون عرائض', - 'bouton_radio_petition_activee' => 'تم تفعيل العريضة', - 'bouton_radio_supprimer_petition' => 'حذف العريضة', 'bouton_redirection' => 'إعادة توجيه', + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'إعادة التأصيل الى القيم القياسية', 'bouton_relancer_installation' => 'إعادة إطلاق عملية التثبيت', + 'bouton_reset_password' => 'إنشاء كلمة سر جديدة وإرسالها بالبريد الإلكتروني', 'bouton_suivant' => 'التالي', 'bouton_tenter_recuperation' => 'محاولة إصلاح', 'bouton_test_proxy' => 'اختبار الجهاز الوكيل', 'bouton_vider_cache' => 'تفريغ ذاكرة كاش', - 'bouton_voir_message' => 'معاينة المشاركة قبل التصديق عليها', // C - 'cache_mode_compresse' => 'تم حفظ ملفات الذاكرة المخبأة بتنسيق مضغوط.', - 'cache_mode_non_compresse' => 'تم حفظ ملفات الذاكرة المخبأة بتنسيق غير مضغوط.', 'cache_modifiable_webmestre' => 'يتم تعديل هذه القيمة من قبل مسؤول الموقع.', 'calendrier_synchro' => 'اذا كنت تستخدم برنامج ادارة مواعيد يتوافق مع iCal، يمكنك ان تطابقه مع نشاط هذا الموقع التحريري.', 'config_activer_champs' => 'تفعيل الحقول التالية', @@ -105,19 +79,17 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_info_base_sup' => 'اذا كان لديك قواعد بيانات اخرى لاستفسارها عبر SPIP، بواسطة خادم SQL الخاص به او بواسطة خادم اخر، تتيح لك الاستمارة ادناه بالإعلان عن تلك القواعد. اذا تركت حقولاً فارغة سيتم استخدام معرّفات الاتصال بقاعدة البيانات الأساسية.', 'config_info_base_sup_disponibles' => 'قواعد اضافية يمكن استفسارها:', 'config_info_enregistree' => 'تم حفظ الإعداد الجديد', - 'config_info_logos' => 'اي عنصر من الموقع يمكن ان يملك شعار مثل «شعار الحوم» ', - 'config_info_logos_utiliser' => 'استخدام الشعارات', - 'config_info_logos_utiliser_non' => 'عدم استخدام الشعارات', - 'config_info_logos_utiliser_survol' => 'استخدام شعارات الحوم', - 'config_info_logos_utiliser_survol_non' => 'عدم استخدام شعارات الحوم', + 'config_info_logos' => 'اي عنصر من الموقع يمكن ان يملك رمزاً مثل «رمز الحوم» ', + 'config_info_logos_utiliser' => 'استخدام الرموز', + 'config_info_logos_utiliser_non' => 'عدم استخدام الرموز', + 'config_info_logos_utiliser_survol' => 'استخدام رموز الحوم', + 'config_info_logos_utiliser_survol_non' => 'عدم استخدام رموز الحوم', 'config_info_redirection' => 'بتفعيل هذا الخيار، يمكنك انشاء مقالات افتراضية تشكل مرجعاً بيسطاً لمقالات منشورة في مواقع اخرى او خارج SPIP.', 'config_redirection' => 'مقالات افتراضية', 'config_titre_base_sup' => 'الاعلان عن قاعدة اضافية', 'config_titre_base_sup_choix' => 'اختيار قاعدة اضافية', 'connexion_ldap' => 'اتصال:', - 'copier_en_local' => 'نسخ محلياً', 'creer_et_associer_un_auteur' => 'إنشاء مؤلف وربطه', - 'creer_et_associer_une_rubrique' => 'إنشاء قسم وربطه', // D 'date_mot_heures' => 'ساعات', @@ -149,7 +121,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'معرّف دخولك', 'entree_login_connexion_1' => 'معرّف الاتصال', 'entree_login_connexion_2' => '(أحياناً يتطابق مع معرّف دخول بروتوكول FTP وأحياناً أخرى يترك فارغاً)', - 'entree_login_ldap' => 'معرّف الدخول الأولي الى LDAP', 'entree_mot_passe' => 'كلمة سرك', 'entree_mot_passe_1' => 'كلمة سر الاتصال', 'entree_mot_passe_2' => '(أحياناً يتطابق مع كلمة سر بروتوكول FTPوأحياناً أخرى يترك فارغاً)', @@ -167,7 +138,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_url' => 'عنوان موقعك', 'entree_url_2' => 'عنوان الموقع', 'erreur_connect_deja_existant' => 'يوجد حالياً جهاز خدمة بهذا الاسم', + 'erreur_contenu_suspect' => 'تركيبة النص غير سليمة ', + 'erreur_email_deja_existant' => 'هذا العنوان الالكتروني مسجل مسبقاً', 'erreur_nom_connect_incorrect' => 'هذا الاسم لجهاز الخدمة غير مسموح به', + 'erreur_plugin_attribut_balise_manquant' => 'الخاصية @attribut@ غير موجودة في علامة @balise@.', 'erreur_plugin_desinstalation_echouee' => 'فشل الغاء تثبيت الملحق. ولكن يمكنك ايقافه.', 'erreur_plugin_fichier_absent' => 'ملف غير موجود', 'erreur_plugin_fichier_def_absent' => 'ملف اعداد غير موجود', @@ -206,16 +180,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_configuration' => 'إعداد', 'icone_creer_auteur' => 'إضافة مؤلف جديد وإشراكه في هذا المقال', 'icone_creer_mot_cle' => 'إنشاء مفتاح جديد وربطه بهذا المقال', - 'icone_creer_mot_cle_rubrique' => 'إنشاء مفتاح جديد وربطه بهذا القسم', - 'icone_creer_mot_cle_site' => 'إنشاء مفتاح جديد وربطه بهذا الموقع', 'icone_creer_rubrique_2' => 'إنشاء قسم جديد', + 'icone_developpement' => 'تطوير', 'icone_edition' => 'تحرير', - 'icone_envoyer_message' => 'إبعث بهذه الرسالة', 'icone_ma_langue' => 'لغتي', 'icone_mes_infos' => 'بياناتي', 'icone_mes_preferences' => 'تفضيلاتي', 'icone_modifier_article' => 'تعديل هذا المقال', - 'icone_modifier_message' => 'تعديل هذه الرسالة', 'icone_modifier_rubrique' => 'تعديل هذا القسم', 'icone_publication' => 'نشر', 'icone_relancer_signataire' => 'تذكير الموقع', @@ -228,22 +199,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_supprimer_signature' => 'حذف هذا التوقيع', 'icone_valider_signature' => 'التصديق على هذا التوقيع', 'image_administrer_rubrique' => 'يمكنك إدارة هذا القسم', - 'impossible_modifier_login_auteur' => 'لا يمكن تغيير المعرّف.', - 'impossible_modifier_pass_auteur' => 'لا يمكن تغيير كلمة السر.', 'info_1_article' => 'مقال واحد', - 'info_1_article_syndique' => 'مقال مرخص واحد', 'info_1_auteur' => 'مؤلف واحد', 'info_1_message' => 'رسالة واحدة', 'info_1_mot_cle' => 'مفتاح واحد', 'info_1_rubrique' => 'قسم واحد', - 'info_1_site' => 'موقع واحد', 'info_1_visiteur' => 'زائر واحد', 'info_activer_cookie' => 'يمكنك تفعيل كعكة إدارية، تتيح لك التنقل بسهولة بين الموقع العمومي والمجال الخاص.', + 'info_activer_menu_developpement' => 'عرض قائمة التطوير', 'info_admin_etre_webmestre' => 'إعطائي حقوق المشرف', - 'info_admin_gere_rubriques' => 'هذا المدير يتمتع بحق إدارة الأقسام التالية:', - 'info_admin_gere_toutes_rubriques' => 'هذا المدير يتمتع بحق إدارة كل الأقسام.', - 'info_admin_gere_toutes_rubriques_2' => 'أدير كل الأقسام', 'info_admin_je_suis_webmestre' => 'أنا مشرف', 'info_admin_statuer_webmestre' => 'اعطاء حقوق مسؤول الموقع لهذا المدير', 'info_admin_webmestre' => 'هذا المدير هو مسؤول الموقع', @@ -255,18 +220,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrateurs' => 'مدراء', 'info_administrer_rubrique' => 'يمكنك إدارة هذا القسم', 'info_adresse' => 'الى العنوان:', + 'info_adresse_desinscription' => 'عنوان حذف التسجيل :', 'info_adresse_url' => 'عنوان الموقع العمومي', 'info_afficher_par_nb' => 'عرض حسب', - 'info_afficher_visites' => 'إظهار الزيارات لـ:', 'info_aide_en_ligne' => 'تعليمات SPIP الفورية', 'info_ajout_image' => 'عندما تضيف صوراً على شكل مستندات مربوطة بمقال ما، يمكن لـ SPIP ان ينشئ آلياً مصغرات عن الصور المدرجة. ويتيح ذلك مثلاً، إنشاء معرض صور او محفظة.', - 'info_ajout_participant' => 'تمت إضافة المشارك التالي :', 'info_ajouter_rubrique' => 'إضافة قسم آخر الى الإدارة:', 'info_annonce_nouveautes' => 'إعلان عن آخر الأخبار', - 'info_anterieur' => 'السابق', 'info_article' => 'مقال', 'info_article_2' => 'مقال', 'info_article_a_paraitre' => 'المقالات المؤجلة التي تنتظر النشر', @@ -276,17 +239,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_miens' => 'مقالاتي', 'info_articles_tous' => 'كل المقالات', 'info_articles_trouves' => 'المقالات التي عثر عليها', - 'info_articles_trouves_dans_texte' => 'المقالات التي عثر عليها (في المادة)', 'info_attente_validation' => 'مقالاتك المنتظرة التصديق', 'info_aucun_article' => 'لا مقال', - 'info_aucun_article_syndique' => 'لا مقال مرخص', 'info_aucun_auteur' => 'لا مؤلف', - 'info_aucun_message' => 'لا رسالة', + 'info_aucun_message' => 'لا توجد رسائل', 'info_aucun_rubrique' => 'لا أقسام', - 'info_aucun_site' => 'لا موقع', - 'info_aucun_visiteur' => 'لا زائر', 'info_aujourdhui' => 'اليوم:', - 'info_auteur_message' => 'المرسِل:', + 'info_auteur_gere_rubriques' => 'هذا المؤلف يدير الأقسام التالية:', + 'info_auteur_gere_toutes_rubriques' => 'هذا المؤلف يدير كل الأقسام', + 'info_auteur_gere_toutes_rubriques_2' => 'أدير كل الأقسام', 'info_auteurs' => 'المؤلفون', 'info_auteurs_par_tri' => 'المؤلفون@partri@', 'info_auteurs_trouves' => 'المؤلفون الذين عثر عليهم', @@ -306,8 +267,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_2' => 'من أصل @liste@ مقال', 'info_code_acces' => 'لا تنسى بيانات الدخول الخاصة بك!', 'info_compatibilite_html' => 'مقاييس HTML التي يجب اتباعها', - 'info_compresseur_gzip' => 'ننصح بالتأكد أولاً ما اذا كان المضيف يضغط بشكل منتظم ملفات php. للتأكد، يمكنك مثلاًاستخدام الخدمة التالية: @testgzip@', - 'info_compresseur_texte' => 'اذا كان خادم موقعك لا يضغت صفحات html آلياً قبل ارسالها الى الزوار، يمكنك محاولة فرض هذا الضغط لتخفيض وزن الصفحات المرسلة. تحذير: هذا الامر قد يؤدي الى ابطاء بعض اجهزة الخدمة بشكل ملحوظ.', 'info_config_suivi' => 'اذا كان هذا العنوان يدل الى قائمة بريدية، يمكنك ادخال العنوان حيث يقوم المشاركون في الموفع بتسجيل انفسهم، ادناه. ويمكن لهذا العنوان ان يكون عنوان URL (مثلاً صفحة التسجيل في القائمة عبر النسيج) او عنوان بريدي يحمل موضوعاً محدداً (مثلاً: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'يمكنك الاشتراك في القائمة البريدية في هذا الموقع. ستحصل عندها آلياً في رسالة الكترونية على اعلانات حول المقالات والاخبار المقترحة للنشر. ', 'info_confirmer_passe' => 'تأكيد كلمة السر الجديدة:', @@ -331,8 +290,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'تاريخ النشر السابق:', 'info_date_referencement' => 'تاريخ تبويب هذا الموقع:', 'info_derniere_etape' => 'إنتهى!', - 'info_derniers_articles_publies' => 'أحدث مقالاتك المنشورة', - 'info_desactiver_messagerie_personnelle' => 'يمكنك تفعيل مراسلتك الخاصة أو ايقافها في هذا الموقع.', 'info_descriptif' => 'الوصف:', 'info_desinstaller_plugin' => 'يحذف البيانات ويعطل الملحقات', 'info_discussion_cours' => 'النقاشات النشطة', @@ -340,7 +297,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_email_envoi' => 'العنوان الالكتروني للارسال (اختياري)', 'info_email_envoi_txt' => 'ادخل هنا العنوان المطلوب استخدامه لبعث الرسائل (والا، سيتم استخدام عنوان المرسل اليه كعنوان ارسال):', 'info_email_webmestre' => 'عنوان بريد المشرف على الموقع', - 'info_entrer_code_alphabet' => 'إدخال رمز طقم الحروف المطلوب استخدامه:', 'info_envoi_email_automatique' => 'إرسال البريد الآلي', 'info_envoyer_maintenant' => 'إرسال الآن', 'info_etape_suivante' => 'إنتقل الى الخطوة التالية', @@ -354,7 +310,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( طلبات النشر وتصديق المقالات.', 'info_fichiers_authent' => 'ملف التحقق «.htpasswd»', 'info_forums_abo_invites' => 'يحتوي موقعك على منتديات بالاشتراك. يشترك الزوار اذاً من الموقع العمومي.', - 'info_gauche_admin_effacer' => 'لا يحق إلا لمسؤولي الموقع الوصول الى هذه الصفحة.

    إنها توفر الوصول الى وظائف متنوعة للصيانة التقنية. وتتطلب بعض هذه الوظائف عملية تحقق محددة تحتاج الى الوصول الى الموقع عبر بروتوكول FTP .

    ', 'info_gauche_admin_tech' => 'لا يحق إلا لمسؤولي الموقع الوصول الى هذه الصفحة.

    إنها توفر الوصول الى وظائف متنوعة للصيانة التقنية. وتتطلب بعض هذه الوظائف عملية تحقق محددة تحتاج الى الدخول الى الموقع عبر بروتوكول FTP .

    ', @@ -366,27 +321,21 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_gauche_auteurs_exterieurs' => 'المؤلفون الخارجيون، الذين لا يتمتعون بحق الدخول الى الموقع، معرّفون برمز أزرق؛ اما المؤلفون المحذوفون فبرمز رمادي.', 'info_gauche_messagerie' => 'تتيح المراسلة تبادل الرسائل بين المحررين والحفاظ على المذكرات (لاستخدامك الشخصي) وعرض الإعلانات في الصفحة الرئيسية للمجال الخاص (إذا كنت مديراً).', - 'info_gauche_numero_auteur' => 'المؤلف رقم', 'info_gauche_statistiques_referers' => 'تعرض هذه الصفحة قائمة مواقع المصدر، أي المواقع التي تحتوي على وصلات تقود الى موقعك، fبين البارحة واليوم فقط: فيتم تأصيل هذه القائمة كل 24 ساعة.', 'info_gauche_visiteurs_enregistres' => 'ستجد هنا الزوار المسجلين في مجال الموقع العام (المنتديات بالاشتراك).', 'info_generation_miniatures_images' => 'إنشاء مصغرات الصور', - 'info_gerer_trad' => 'ادارة وصلات الترجمة', 'info_gerer_trad_objets' => '@objets@: إدارة روابط الترجمة', - 'info_hebergeur_desactiver_envoi_email' => 'بعض خدام المواقع يوقفون إرسال البريد الآلي + 'info_hebergeur_desactiver_envoi_email' => 'بعض خدام المواقع يوقفون إرسال البريد الآلي في أجهزتهم. في هذه الحال، لا يمكن تفعيل -وظائف SPIP التالية.', +وظائف SPIP التالية.', 'info_hier' => 'البارحة:', - 'info_historique_activer' => 'تفعيل متابعة التعديلات', - 'info_historique_affiche' => 'عرض هدا الاصدار', - 'info_historique_comparaison' => 'مقارنة', - 'info_historique_desactiver' => 'ايقاف متابعة التعديلات', - 'info_historique_texte' => 'تتيح متابعة التعديلات الحفاظ على وصف تاريخي لكل التعديلات التي دخلت على مادة المقال وعرض الفوارق بين الاصدارات المتتالية.', 'info_identification_publique' => 'هويتك العمومية...', 'info_image_process' => 'الرجاء اختيار افضل طريقة لإنشاء المصغرات بالنقر على الصورة المناسبة.', 'info_image_process2' => 'اذا لم تظهر اية صورة يكون جهاز الخدمة الذي يستضيف موقعك غير معدّ لاستخدام هذه الأدوات. اذا رغبت في استخدام هذه الوظائف، اتصل بالمسؤول التقني واطلب تثبيت أحد الملحقين «GD» او «Imagick».', 'info_images_auto' => 'يتم حساب هذه الصور آلياً', 'info_informations_personnelles' => 'المعلومات الشخصية', + 'info_inscription' => 'التسجيل في', 'info_inscription_automatique' => 'تسجيل آلي للمحررين الجدد', 'info_jeu_caractere' => 'طقم حروف الموقع', 'info_jours' => 'يوم', @@ -399,11 +348,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_login_existant' => 'هذا المعرّف موجود سابقاً.', 'info_login_trop_court' => 'معرّف الدخول قصيز جداً.', 'info_login_trop_court_car_pluriel' => 'يجب ان يحتوي المعرّف @nb@ حرفاً على الأقل.', - 'info_logos' => 'الشعارات', + 'info_logos' => 'الرموز', 'info_maximum' => 'الحد الأقصى:', 'info_meme_rubrique' => 'في القسم نفسه', - 'info_message' => 'رسالة من', - 'info_message_efface' => 'المشاركة حذفت', 'info_message_en_redaction' => 'رسالتك قيد التحرير', 'info_message_technique' => 'رسالة تقنية:', 'info_messagerie_interne' => 'المراسلة الداخلية', @@ -418,30 +365,23 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'تعديل القسم:', 'info_modifier_titre' => 'تغيير: @titre@', 'info_mon_site_spip' => 'موقع SPIP', - 'info_mot_sans_groupe' => '(مفاتيح لا تنتمي الى مجموعة...)', - 'info_moteur_recherche' => 'محرك البحث المدمج', 'info_moyenne' => 'المتوسط:', - 'info_multi_articles' => 'تفعيل قائمة اللغات في المقالات؟', 'info_multi_cet_article' => 'لغة هذا المقال:', 'info_multi_langues_choisies' => 'الرجاء تحديد ادناه اللغات التي ستكون متوافرة لمحرري موقعك. لا يمكن ايقاف اللغات المستخدمة حالياً في موقعك (والظاهرة في اول القائمة).', 'info_multi_objets' => '@objets@: تفعيل قائمة اللغات', - 'info_multi_rubriques' => 'تفعيل قائمة اللغات في الاقسام؟', 'info_multi_secteurs' => '... للأقسام الموجودة في اصل الموقع فقط ', 'info_nb_articles' => '@nb@ مقال', - 'info_nb_articles_syndiques' => '@nb@ مقال مرخص', 'info_nb_auteurs' => '@nb@ مؤلف', 'info_nb_messages' => '@nb@ رسالة', 'info_nb_mots_cles' => '@nb@ مفتاح', 'info_nb_rubriques' => '@nb@ قسم', - 'info_nb_sites' => '@nb@ موقع', 'info_nb_visiteurs' => '@nb@ زائر', 'info_nom' => 'الإسم', 'info_nom_destinataire' => 'إسم المرسل اليه', 'info_nom_pas_conforme' => 'علامات html غير مسموح بها', 'info_nom_site' => 'إسم موقعك', 'info_nombre_articles' => '@nb_articles@ مقال،', - 'info_nombre_partcipants' => 'مشاركون في النقاش:', 'info_nombre_rubriques' => '@nb_rubriques@ قسم،', 'info_nombre_sites' => '@nb_sites@ موقع،', 'info_non_deplacer' => 'عدم التحريك...', @@ -450,19 +390,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_envoi_liste_nouveautes' => 'عدم إرسال قائمة بآخر الأخبار', 'info_non_modifiable' => 'لا يمكن تغييره', 'info_non_suppression_mot_cle' => 'كلا لا أريد حذف هذا المفتاح.', - 'info_note_numero' => 'علامة @numero@', 'info_notes' => 'حواشي', - 'info_nouveaux_message' => 'رسائل جديدة', 'info_nouvel_article' => 'مقال جديد', 'info_nouvelle_traduction' => 'ترجمة جديدة:', 'info_numero_article' => 'المقال رقم:', 'info_obligatoire_02' => '(إجباري)', 'info_option_accepter_visiteurs' => 'قبول تسجيل الزوار من الموقع العمومي', - 'info_option_faire_suivre' => 'تمرير مشاركات المنتديات الى مؤلفي المقالات', 'info_option_ne_pas_accepter_visiteurs' => 'رفض تسجيل الزوار من الموقع العمومي', 'info_options_avancees' => 'الخيارات المتطورة', - 'info_ortho_activer' => 'تفعيل مدقق الاملاء', - 'info_ortho_desactiver' => 'تعطيل مدقق الاملاء', 'info_ou' => 'أو...', 'info_page_interdite' => 'صفحة محظورة', 'info_par_nom' => 'حسب الاسم', @@ -470,22 +405,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_par_statut' => 'حسب الوضع', 'info_par_tri' => '’(حسب @tri@)’', 'info_passe_trop_court' => 'كلمة السر قصيرة جداً.', - 'info_passe_trop_court_car_pluriel' => 'يجب ان تحتوي كلمة السر @nb@ حرفاً على الأقل.', + 'info_passe_trop_court_car_pluriel' => 'يجب ان تحتوي كلمة السر @nb@ حروف على الأقل.', 'info_passes_identiques' => 'كلمتا السر ليستا متطابقتان.', - 'info_pense_bete_ancien' => 'مذكراتك القديمة', 'info_plus_cinq_car' => 'أكثر من خمسة حروف', 'info_plus_cinq_car_2' => '(أكثر من خمسة حروف)', 'info_plus_trois_car' => '(أكثر من ثلاثة حروف)', 'info_popularite' => 'الشعبية: @popularite@؛ الزيارات: @visites@', - 'info_popularite_4' => 'الشعبية: @popularite@؛ الزيارات: @visites@', 'info_post_scriptum' => 'الملحق', 'info_post_scriptum_2' => 'الملحق:', 'info_pour' => 'لـ', - 'info_preview_admin' => 'لا يحق الا للمدراء الاطلاع على عرض مسبق للموقع', - 'info_preview_comite' => ' يحق لجميع المحررين الاطلاع على عرض مسبق للموقع', - 'info_preview_desactive' => 'تم تعطيل العرض المسبق', - 'info_preview_texte' => 'من الممكن عرض الموقع مسبقاً كما لو ان كل المقالات والاخبار (التي تتمتع بوضعية «مقترح» على الاقل) منشورة. هل تتاح هذه الوظيفة للمدراء فقط او لجميع المحررين او تُعطل؟', - 'info_principaux_correspondants' => 'مراسلوك الأساسيون', + 'info_preview_texte' => 'من الممكن تفعيل العرض المسبق للعناصر التحريرية التي تتمتع على الاقل بوضعية «مقترح»، إضافة الى العناصر «قيد التحرير» العائدة للمؤلف المتصل. هل تتاح هذه الوظيفة للمدراء فقط او لجميع المحررين او تُعطل؟', 'info_procedez_par_etape' => 'الرجاء إتباع الخطوة خطوة ', 'info_procedure_maj_version' => 'يجب تنفيذ عملية الترقية لتكييف قاعدة البيانات مع إصدار SPIP الجديد.', @@ -503,14 +432,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( خدام المواقع يعطلون إرسال البريد الآلي في أجهزتهم: في هذه الحال، لا يمكن تفعيل التسجيل الآلي.', - 'info_question_utilisation_moteur_recherche' => 'هل ترغب في استخدام محرك البحث المدمج في SPIP؟ -(ايقافه يسرّع أداء النظام)', - 'info_question_vignettes_referer_non' => 'عدم عرض مصغرات عن مواقع مصدر الزيارات', 'info_qui_edite' => '@nom_auteur_modif@ عمل على هذا المحتوى منذ @date_diff@ دقيقة ', 'info_racine_site' => 'أصل الموقع', 'info_recharger_page' => 'الرجاء إعادة تحميل الصفحة بعد لحظات.', - 'info_recherche_auteur_a_affiner' => 'تم العثور على عدد كبير جداً من النتائج لـ "@cherche_auteur@" ، الرجاء زيادة دقة البحث.', - 'info_recherche_auteur_ok' => 'تم العثور على عدة محررين لـ "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'لا توجد نتائج لـ «@cherche_auteur@».', 'info_recommencer' => 'الرجاء إعادة المحاولة.', 'info_redacteur_1' => 'محرر', @@ -519,6 +443,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_redaction_en_cours' => 'قيد التحرير', 'info_redirection' => 'إعادة توجيه', 'info_redirection_activee' => 'تم تفعيل إعادة التحويل.', + 'info_redirection_boucle' => 'محاولة إعادة توجيه مقال الى ذاته.', 'info_redirection_desactivee' => 'تم حذف إعادة التحويل.', 'info_refuses' => 'مقالاتك المرفوضة', 'info_reglage_ldap' => 'خيارات: ضبط جلب LDAP ', @@ -529,7 +454,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'الأقسام', 'info_rubriques_02' => 'الأقسام', 'info_rubriques_trouvees' => 'الأقسام التي عثر عليها', - 'info_rubriques_trouvees_dans_texte' => 'الأقسام التي عثر عليها (في المادة)', 'info_sans_titre' => 'بدون عنوان', 'info_selection_chemin_acces' => 'حدد أدناه مسار الدخول في الدليل:', 'info_signatures' => 'التوقيعات', @@ -542,14 +466,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_sites_lies_mot' => 'المواقع المبوبة المرتبطة بهذا المفتاح', 'info_sites_proxy' => 'إستخدام جهاز وكيل', 'info_sites_trouves' => 'المواقع التي عثر عليها', - 'info_sites_trouves_dans_texte' => 'المواقع التي عثر عليها (في المادة)', 'info_sous_titre' => 'العنوان الفرعي:', 'info_statut_administrateur' => 'مدير', 'info_statut_auteur' => 'وضع هذا المؤلف:', 'info_statut_auteur_2' => 'أنا', 'info_statut_auteur_a_confirmer' => 'التسجيل المطلوب التأكد منه', 'info_statut_auteur_autre' => 'وضعية اخرى:', - 'info_statut_efface' => 'محذوف', 'info_statut_redacteur' => 'محرر', 'info_statut_utilisateurs_1' => 'الوضع الافتراضي للمستخدمين المجلوبين', 'info_statut_utilisateurs_2' => 'قم باختيار الوضع المخصص للأشخاص الموجودين في دليل LDAP عندما سيتصلون للمرة الأولى. لاحقاً، يمكنك تغيير هذه القيمة لكل مؤلف على حدى.', @@ -572,7 +494,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_presents' => 'كل المقالات المنشورة في هذا القسم', 'info_tous_articles_refuses' => 'كل المقالات المرفوضة', 'info_tous_les' => 'كل:', - 'info_tous_redacteurs' => 'إعلانات لجميع المحررين', 'info_tout_site' => 'الموقع بالكامل', 'info_tout_site2' => 'لم يُترجم المقال الى هذه اللغة.', 'info_tout_site3' => 'تمت ترجمة المقال الى هذه اللغة لكن طرأت تعديلات على المقال المرجع في ما بعد. يجب تحديث الترجمة.', @@ -589,7 +510,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_une_rubrique_02' => 'قسم واحد', 'info_url' => 'عنوان URL:', 'info_url_proxy' => 'عنوان URL للجهاز الوكيل', - 'info_url_site' => 'عنوان الموقع:', + 'info_url_proxy_pas_conforme' => 'عنوان الجهاز الوكيل غير صالح.', 'info_url_site_pas_conforme' => 'عنوان URL غير صالح.', 'info_url_test_proxy' => 'عنوان URL للاختبار', 'info_urlref' => 'وصلة هايبرتكست:', @@ -601,7 +522,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_visiteurs_02' => 'زوار الموقع العمومي', 'info_webmestre_forces' => 'المشرفون محددون حالياً في @file_options@.', 'install_adresse_base_hebergeur' => 'عنوان قاعدة البيانات التي خصصها لك المضيف', - 'install_base_ok' => 'تم التعرف على القاعدة @base@', 'install_connect_ok' => 'تم فعلاً تعريف قاعدة البيانات باسم جهاز الخدمة @connect@.', 'install_echec_annonce' => 'الارجح ان التثبيت سيفشل او يؤدي الى موقع غير سليم...', 'install_extension_mbstring' => 'لا يعمل SPIP مع:', @@ -614,7 +534,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'install_select_langue' => 'إختر لغة ثم انقر على الزر« التالي» للبدء بعملية التثبيت.', 'install_select_type_db' => 'تحديد نوع قاعدة البيانات:', 'install_select_type_mysql' => 'MySQL', - 'install_select_type_mysqli' => 'MySQLi', 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', @@ -631,8 +550,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_activer_messages_avertissement' => 'تفعيل رسائل التحذير', 'item_administrateur_2' => 'مدير', 'item_afficher_calendrier' => 'إظهار في الروزنامة', - 'item_autoriser_documents_joints' => 'السماح بربط المستندات بالمقالات', - 'item_autoriser_documents_joints_rubriques' => 'إجازة المستندات في الأقسام', 'item_autoriser_syndication_integrale' => 'نشر كامل المقالات في ملفات الترخيص', 'item_choix_administrateurs' => 'المدراء', 'item_choix_generation_miniature' => 'إنشاء مصغرات عن الصور آلياً.', @@ -640,7 +557,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_choix_redacteurs' => 'المحررون', 'item_choix_visiteurs' => 'زوار الموقع العمومي', 'item_creer_fichiers_authent' => 'إنشاء ملفات .htpasswd', - 'item_limiter_recherche' => 'إقتصار البحث على المعلومات الموجودة في موقعك', 'item_login' => ' المعرّف', 'item_messagerie_agenda' => 'تفعيل المراسلة والمفكرة', 'item_mots_cles_association_articles' => 'المقالات', @@ -650,22 +566,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_non_accepter_inscriptions' => 'عدم السماح بالتسجيل', 'item_non_activer_messages_avertissement' => 'تعطيل رسائل التحذير', 'item_non_afficher_calendrier' => 'عدم إظهار في الروزنامة', - 'item_non_autoriser_documents_joints' => 'عدم السماح بربط المستندات بالمقالات', - 'item_non_autoriser_documents_joints_rubriques' => 'عدم إجازة المستندات في الأقسام', 'item_non_autoriser_syndication_integrale' => 'الاكتفاء بنشر ملخص', - 'item_non_compresseur' => 'تعطيل الصغط', 'item_non_creer_fichiers_authent' => 'عدم إنشاء هذه الملفات', - 'item_non_gerer_statistiques' => 'عدم إدارة الإحصاءات', - 'item_non_limiter_recherche' => 'توسيع البحث ليشمل محتوى المواقع المبوبة', 'item_non_messagerie_agenda' => 'تعطيل المراسلة والمفكرة', 'item_non_publier_articles' => 'عدم نشر المقالات قبل تاريخها.', - 'item_non_utiliser_moteur_recherche' => 'عدم إستخدام محرك البحث', 'item_nouvel_auteur' => 'مؤلف جديد', 'item_nouvelle_rubrique' => 'قسم جديد', 'item_oui' => 'نعم', 'item_publier_articles' => 'نشر المقالات مهما كان تاريخها.', 'item_reponse_article' => 'الرد على المقال', - 'item_utiliser_moteur_recherche' => 'إستخدام محرك البحث', 'item_version_html_max_html4' => 'حصر الموقع العمومي بلغة HTML4 ', 'item_version_html_max_html5' => 'السماح بلغة HTML5', 'item_visiteur' => 'زائر', @@ -686,19 +595,19 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ldap_correspondance' => 'استلام من الحقل @champ@', 'ldap_correspondance_1' => 'استلام حقول LDAP', 'ldap_correspondance_2' => 'لكل من حقول SPIP التالية، حدد اسم حقل LDAP المناسب. يمكن ترك حقل فارغ، استخدام المسافات او الفواصل لتجربة عدة حقول LDAP.', - 'lien_ajout_destinataire' => 'إضافة المرسل اليه هذا', 'lien_ajouter_auteur' => 'إضافة هذا المؤلف', - 'lien_ajouter_participant' => 'إضافة مشارك', 'lien_ajouter_une_rubrique' => 'إضافة هذا القسم', 'lien_email' => 'البريد الالكتروني', 'lien_nom_site' => 'إسم الموقع:', + 'lien_rapide_contenu' => 'الذهاب الى المحتوى', + 'lien_rapide_navigation' => 'الذهاب اى التصفح', + 'lien_rapide_recherche' => 'الذهاب الى البحث', 'lien_retirer_auteur' => 'حذف المؤلف', 'lien_retirer_rubrique' => 'سحب القسم', 'lien_retirer_tous_auteurs' => 'إزالة جميع المؤلفين', 'lien_retirer_toutes_rubriques' => 'سحب كل الأقسام', - 'lien_retrait_particpant' => 'سحب هذا المشارك', 'lien_site' => 'الموقع', - 'lien_supprimer_rubrique' => 'حذف هذا القسم', + 'lien_tout_decocher' => 'إزالة تحديد الكل', 'lien_tout_deplier' => 'بسط الكل', 'lien_tout_replier' => 'طي الكل', 'lien_tout_supprimer' => 'حذف الكل', @@ -706,12 +615,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'lien_trier_nombre_articles' => 'فرز حسب عدد المقالات', 'lien_trier_statut' => 'فرز حسب الوضع', 'lien_voir_en_ligne' => 'عرض مباشر:', - 'logo_article' => 'شعار المقال', - 'logo_auteur' => 'شعار المؤلف', - 'logo_rubrique' => 'شعار القسم', - 'logo_site' => 'شارة هذا الموقع', - 'logo_standard_rubrique' => 'شعار الأقسام القياسي', - 'logo_survol' => 'شعار الحوم', + 'logo_article' => 'رمز المقال', + 'logo_auteur' => 'رمز المؤلف', + 'logo_rubrique' => 'رمز القسم', + 'logo_site' => 'رمز هذا الموقع', + 'logo_standard_rubrique' => 'رمز الأقسام القياسي', + 'logo_survol' => 'رمز الحوم', // M 'menu_aide_installation_choix_base' => 'إختيار قاعدة البيانات', @@ -723,13 +632,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mois_non_connu' => 'غير معروف', // N - 'nouvelle_version_spip' => 'الإصدار @version@ من SPIP متوافر الآن', + 'nouvelle_version_spip' => 'ترقية SPIP رقم @version@ متوافرة الآن', + 'nouvelle_version_spip_majeure' => 'إصدار جديد من رقم @version@ من SPIP متوافر الآن', // O 'onglet_contenu' => 'المحتوى', 'onglet_declarer_une_autre_base' => 'الاعلان عن قاعدة اخرى', 'onglet_discuter' => 'النقاش', - 'onglet_documents' => 'المستندات', 'onglet_interactivite' => 'التفاعلية', 'onglet_proprietes' => 'الخصائص', 'onglet_repartition_actuelle' => 'حالياً', @@ -738,6 +647,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // P 'page_pas_proxy' => 'لا يجب ان تمر هذه الصفحة عبر جهاز بروكسي', 'pas_de_proxy_pour' => 'لدى الضرورة، حدد الاجهزة او النطاقات التي لا يجب ان ينطبق عليها الوكيل (مثلاً: @exemple@) ', + 'phpinfo' => 'إعدادات PHP', 'plugin_charge_paquet' => 'تحميل رزمة @name@', 'plugin_charger' => 'تحميل', 'plugin_erreur_charger' => 'خطأ: لا يمكن تحميل @zip@', @@ -772,8 +682,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'plugin_info_telecharger' => 'للتحميل من @url@ والتثبيت في @rep@', 'plugin_info_upgrade_ok' => 'نجحت الترقية', 'plugin_librairies_installees' => 'المكتبات المثبتة', + 'plugin_necessite_extension_php' => 'يتطلب ملحق PHP @plugin@ إصدار @version@.', + 'plugin_necessite_extension_php_sans_version' => 'يتطلب ملحق PHP @plugin@', 'plugin_necessite_lib' => 'هذا الملحق يتطلب المكتبة @lib@', - 'plugin_necessite_plugin' => 'يتطلب الملحق @plugin@ بالاصدار @version@ على الاقل.', + 'plugin_necessite_php' => 'يتطلب @plugin@ إصدار @version@.', + 'plugin_necessite_plugin' => 'يتطلب الملحق @plugin@ بالاصدار @version@.', 'plugin_necessite_plugin_sans_version' => 'يتطلب الملحق @plugin@', 'plugin_necessite_spip' => 'يتطلب SPIP باصدار @version@ على الاقل.', 'plugin_source' => 'المصدر:', @@ -781,6 +694,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'plugin_titre_automatique_ajouter' => 'إضافة ملحقات', 'plugin_titre_installation' => 'تثبيت الملحق @plugin@', 'plugin_titre_modifier' => 'ملحقاتي', + 'plugin_utilise_extension_php' => 'يستخدم ملحق PHP @plugin@ إصدار @version@.', + 'plugin_utilise_php' => 'يستخدم @plugin@ إصدار @version@.', + 'plugin_utilise_plugin' => 'يستخدم الملحق @plugin@ بالاصدار @version@.', 'plugin_zip_active' => 'تابع للتفعيل', 'plugin_zip_adresse' => 'ادخل ادناه عنوان ملف zip لملحق مطلوب تحميله او عنوان لائحة ملاحق.', 'plugin_zip_adresse_champ' => 'عنوان الملحق او اللائحة ', @@ -817,6 +733,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // R 'repertoire_plugins' => 'دليل:', + 'required' => '(إجباري)', // S 'sans_heure' => 'بدون توقيت الساعات', @@ -846,18 +763,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_article_virtuel_reference' => 'مقال إفتراضي: مقال مبوّب في موقع SPIP لديك، لكنه موجه الى عنوان آخر. لإلغاء التوجيه، قم بحذف العنوان أعلاه.', 'texte_aucun_resultat_auteur' => 'لا توجد نتائج لـ "@cherche_auteur@"', 'texte_auteur_messagerie' => 'يمكن لهذا الموقع رصد قائمة المحررين المتصلين بشكل دائم مما يتيح لك تبادل الرسائل في الوقت الحقيقي. يمكنك التقرير بعدم الظهور في هذه القائمة (وبالتالي تكون «مخفياً» بالنسبة للمستخدمين الآخرين).', - 'texte_auteur_messagerie_1' => 'يتيح لك هذا الموقع تبادل الرسائل وإنشاء منتديات نقاش خاصة بين المشتركين في الموقع. يمكنك أخذ قرار عدم المشاركة في هذا التبادل.', 'texte_auteurs' => 'المؤلفون', 'texte_choix_base_1' => 'حدد قاعدة بياناتك:', 'texte_choix_base_2' => 'يحتوي خادم SQL على عدة قواعد بيانات.', 'texte_choix_base_3' => 'حدد أدناه القاعدة التي خصصها مضيفك لك:', 'texte_choix_table_prefix' => 'بادئة الجداول:', - 'texte_commande_vider_tables_indexation' => 'إستخدم هذا الأمر لتفريغ جداول الفهرسة التي يستعملها -محرك البحث المدمج في SPIP. ويتيح لك ذلك -توفير بعض المساحة على القرص الثابت.', 'texte_compatibilite_html' => 'يمكنك الطلب من SPIP إنتاج علامات متوافقة مع مقياس HTML4 في الموقع العمومي او السماح له باستخدام إمكانات مقياس HTML5 الأحدث.', 'texte_compatibilite_html_attention' => 'لا يشكل تفعيل خيار HTML5 أية مخاطرة، ولكن اذا اخترت التفعيل يجب ان تبدأ صفحات موقعك بالعبارة التالية لكي تكون صالحة: .', - 'texte_compresse_ou_non' => '(يمكن ضغط هذا أم لا)', 'texte_compte_element' => 'عنصر@count@', 'texte_compte_elements' => 'عنصر@count@', 'texte_conflit_edition_correction' => 'الرجاء التدقيق ادناه في الفوارق بين إصداري النص. يمكنك ايضاً تسخ تعديلاتك ثم البدء من جديد.', @@ -876,10 +788,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_date_publication_anterieure_nonaffichee' => 'إخفاء تاريخ النشر السابق.', 'texte_date_publication_article' => 'تاريخ النشر:', 'texte_date_publication_objet' => 'تاريخ النشر:', - 'texte_descriptif_petition' => 'وصف العريضة', + 'texte_definir_comme_traduction_rubrique' => 'هذا القسم هو ترجمة للقسم رقم:', 'texte_descriptif_rapide' => 'وصف مقتضب', 'texte_effacer_base' => 'حذف قاعدة بيانات SPIP', - 'texte_effacer_donnees_indexation' => 'حذف بيانات الفهرسة', 'texte_effacer_statistiques' => 'حذف الاحصاءات', 'texte_en_cours_validation' => 'المقالات والأخبار التالية معروضة للنشر.', 'texte_enrichir_mise_a_jour' => 'يمكنك استخدام «إختصارات الكتابة» لتحسين مظهر مادتك.', @@ -895,30 +806,19 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_informations_personnelles_2' => '(ملاحظة: هذه إعادة تثبيت، اذا كان دخولك لا يزال يعمل، يمكنك', 'texte_introductif_article' => '(نص تقديمي للمقال)', 'texte_jeu_caractere' => 'يستحسن استخدام الطقم الحروف الشامل (utf-8): يسمح هذا الطقم بعرض نصوص بجميع اللغات ولا يتسبب بمشاكل توافق مع برامج التصفح الحديثة.', - 'texte_jeu_caractere_2' => 'تحذير: هذا الإعداد لن يحول النصوص المخزنة مسبقاً في قاعدة البيانات.', 'texte_jeu_caractere_3' => 'موقعك يستخدم حالياً طقم الحروف:', 'texte_jeu_caractere_4' => 'اذا كان ذلك لا يتناسب مع واقع بياناتك (من جراء استرجاع نسخة احتياطية من القاعدة مثلاً) او اذا كنت تباشر في اطلاق هذا الموقع وترغب في استخدام طقم حروف آخر، الرجاء تحديد هذا الطقم هنا:', - 'texte_jeu_caractere_conversion' => 'ملاحظة: قد ترغب في تحويل مجمل نصوص موقعك نهائياً (المقالات والأخبار والمنتديات الخ.) الى طقم utf-8 وذلك بالذهاب الى صفحة التحويل الى utf-8> ', - 'texte_lien_hypertexte' => '(اذا كانت مشاركتك تعيد الى مقال منشور على النسيج، او الى صفحة توفر المزيد من المعلومات، الرجاء إدخال إسم الصفحة وعنوانها هنا).', 'texte_login_ldap_1' => ')أتركه فارغاً للدخول المغفل أو قم بإدخال المسار الكامل، مثلاً «uid=salim, ou=users, dc=mon-domaine, dc=com»).', 'texte_login_precaution' => 'تحذير! هذا هو المعرّف الذي تتصل من خلاله الآن. إستخدم هذه الاستمارة بحذر...', - 'texte_message_edit' => 'تحذيز: يمكن لجميع مدراء الموقع تعديل هذه الرسالة التي تظهر كذلك على جميع المحررين. إستخدم الإعلانات لعرض أحداث هامة تطرأ على الموقع فقط.', 'texte_messagerie_agenda' => 'يتيح نظام مراسلة لمحرري الموقع التواصل بين بعضهم مباشرة في المجال الخاص. وهو مرتبط بالمفكرة.', 'texte_mise_a_niveau_base_1' => 'لقد قمت بتحديث ملفات SPIP. يجب الآن تحديث قاعدة بيانات الموقع.', 'texte_modifier_article' => 'تعديل المقال:', - 'texte_moteur_recherche_active' => 'محرك البحث نشط. استخدم هذا الامر -اذا رغبت في تنفيذ فهرسة سريعة (بعد استرجاع -نسخة احتياطية مثلاً). تجدر الملاحظة انه ستتم إعادة فهرسة -المستندات المعدلة بالطريقة العادية (من داخل واجهة SPIP ) -آلياً: بالتالي، فهذا الامر لا ينفع الا في حالات استثنائية.', - 'texte_moteur_recherche_non_active' => 'محرك البحث غير نشط.', 'texte_multilinguisme' => 'اذا احتجت الى إدارة عناصر متعددة اللغات وبتصفح معقّد، يمكنك إضافة قائمة اختيار اللغة في هذه العناصر تتماشى مع تنظيم موقعك.', 'texte_multilinguisme_trad' => 'يمكنك ايضاً تفعيل نظام لإدارة الروابط بين الترجمات المختلفة لبعض العناصر.', 'texte_non_compresse' => 'غير مضغوط (خادمك لا يدعم هذه الوظيفة)', - 'texte_nouveau_message' => 'رسالة جديدة', 'texte_nouvelle_version_spip_1' => 'لقد قمت بتثبيت إصدار جديد من SPIP.', 'texte_nouvelle_version_spip_2' => 'هذا الإصدار الجديد يتطلب تحديثاً أكثر عمقاً من المعتاد. إذا كنت مسؤولاً عن هذا الموقع، الرجاء حذف الملف @connect@ وإعادة تنفيذ عملية التثبيت من أجل تحديث بيانات الاتصال بالقاعدة.

    ( ملاحظة: إذا نسيت بيانات الاتصال، أنظر في الملف @connect@ قبل حذفه...)

    ', 'texte_operation_echec' => 'عد الى الصفحة السابقة وحدد قاعدة بيانات أخرى أو قم بإنشاء قاعدة جديدة. تأكد من المعلومات التي حصلت عليها من مضيفك', @@ -935,7 +835,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_recalcul_page' => 'إذا كنت ترغب في تحديث صفحة واحدة، الأحرى بك تنفيذ هذه العملية من الموقع العمومي باستخدام زر «تحديث» الصفحة. ', - 'texte_recapitiule_liste_documents' => 'تلخص هذه الصفحة قائمة المستندات التي وضعتها في الأقسام. لتغيير معلومات كل مستند، إتبع الوصلة الى صفحة القسم المناسب.', 'texte_recuperer_base' => 'إصلاح قاعدة البيانات', 'texte_reference_mais_redirige' => 'مقال مبوّب في موقع SPIP لديك، لكنه موجه الى عنوان آخر.', 'texte_requetes_echouent' => 'عندما يفشل بعض إستفسارات SQL @@ -963,7 +862,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( قمت بإدخال تعديلات مهمة على الرسوم أو التصميم في الموقع. ', 'texte_sur_titre' => 'العنوان المدخل', 'texte_table_ok' => ': هذا الجدول صالح.', - 'texte_tables_indexation_vides' => 'جداول فهرسة المحرك فارغة.', 'texte_tentative_recuperation' => 'محاولة إصلاح', 'texte_tenter_reparation' => 'محاولة إصلاح قاعدة البيانات', 'texte_test_proxy' => 'لتجربة الجهاز الوكيل، قم بإدخال عنوان موقع @@ -978,31 +876,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( هذا الخيار متوقف افتراضياً لتجنب عرض رسائل تحذير مفاجئة.', - 'texte_trop_resultats_auteurs' => 'تم العثور على عدد كبير جداً من النتائج لـ "@cherche_auteur@"، الرجاء زيادة دقة البحث.', - 'texte_unpack' => 'تحميل الإصدار الأخير', - 'texte_utilisation_moteur_syndiques' => 'عندما تستخدم محرك البحث المدمج -في SPIP، يمكنك تنفيذ عمليات بحث في المواقع -والمقالات المرخصة بطريقتين -مختلفتين.
    - الطريقة -الابسط هي اقتصار البحث على -عناوين المقالات ووصفها.
    - -اما الطريقة الثانية، وهي الاكثر فعالية، فتتيح -لـSPIP البحث ايضاً في مادة -المواقع المبوبة. فإذا قمت -بتبويب موقع، سينفذ SPIP -البحث في مادة الموقع نفسه.', - 'texte_utilisation_moteur_syndiques_2' => '
    وتفرض هذه الطريقة على SPIP زيارة - المواقع المبوبة بانتظام، - مما قد يتسبب بانخفاض أداء - موقعك.', 'texte_vide' => 'فارغ', 'texte_vider_cache' => 'تفريغ الذاكرة المخبأة', - 'titre_admin_effacer' => 'صيانة تقنية', 'titre_admin_tech' => 'صيانة تقنية', 'titre_admin_vider' => 'صيانة تقنية', 'titre_ajouter_un_auteur' => 'إضافة مؤلف', 'titre_ajouter_un_mot' => 'إضافة مفتاح', - 'titre_ajouter_une_rubrique' => 'إضافة قسم', 'titre_cadre_afficher_article' => 'إظهار المقالات', 'titre_cadre_afficher_traductions' => 'عرض وضع الترجمات للغات التالية:', 'titre_cadre_ajouter_auteur' => 'إضافة مؤلف:', @@ -1017,6 +896,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_config_langage' => 'إعداد اللغة', 'titre_configuration' => 'إعداد الموقع', 'titre_configurer_preferences' => 'إعداد التفضيلات', + 'titre_configurer_preferences_menus' => 'إعداد تفضيلات القوائم', 'titre_conflit_edition' => 'تضارب لدى التحرير', 'titre_connexion_ldap' => 'خيارات: إتصالLDAP ', 'titre_groupe_mots' => 'مجموعة مفاتيح:', @@ -1029,54 +909,28 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_naviguer_dans_le_site' => 'تصفح الموقع...', 'titre_nouvelle_rubrique' => 'قسم جديد', 'titre_numero_rubrique' => 'قسم رقم:', - 'titre_page_admin_effacer' => 'صيانة تقنية: حذف قاعدة البيانات', 'titre_page_articles_edit' => 'تعديل: @titre@', 'titre_page_articles_page' => 'المقالات', 'titre_page_articles_tous' => 'الموقع بالكامل', - 'titre_page_auteurs' => 'الزوار', 'titre_page_calendrier' => 'روزنامة @nom_mois@ @annee@', 'titre_page_config_contenu' => 'إعداد الموقع', - 'titre_page_config_fonctions' => 'إعداد الموقع', - 'titre_page_configuration' => 'إعداد الموقع', - 'titre_page_controle_petition' => 'متابعة العرائض', 'titre_page_delete_all' => 'حذف تام ونهائي', - 'titre_page_documents_liste' => 'مستندات الأقسام', - 'titre_page_index' => 'مجالك الخاص', - 'titre_page_message_edit' => 'كتابة رسالة', - 'titre_page_messagerie' => 'مراسلاتك', 'titre_page_recherche' => 'نتائج البحث @recherche@', 'titre_page_statistiques_referers' => 'الاحصاءات (الوصلات الآتية)', - 'titre_page_statistiques_signatures_jour' => 'عدد التوقيعات في اليوم', - 'titre_page_statistiques_signatures_mois' => 'عدد التوقيعات في الشهر', 'titre_page_upgrade' => 'ترقية SPIP', + 'titre_preference_menus_favoris' => 'قائمة المفضلات', 'titre_publication_articles_post_dates' => 'نشر المقالات المؤجلة', - 'titre_referencer_site' => 'تبويب الموقع:', - 'titre_rendez_vous' => 'مواعيد:', 'titre_reparation' => 'إصلاح', 'titre_suivi_petition' => 'متابعة العرائض', 'tls_ldap' => 'أمان طبقة النقل:', - 'trad_article_inexistant' => 'لا يوجد اي مقال يحمل هذا الرقم.', 'trad_article_traduction' => 'كل اصدارات هذا المقال:', - 'trad_deja_traduit' => 'خطأ: لا يمكن ربط هذا المقال بالرقم المطلوب.', 'trad_delier' => 'ايقاف الربط هذا بهذه الترجمات', 'trad_lier' => 'هذا المقال هو ترجمة للمقال رقم:', 'trad_new' => 'كتابة ترجمة جديدة', // U - 'upload_info_mode_document' => 'وضع هذه الصورة في صالة العرض', - 'upload_info_mode_image' => 'سحب هذه الصورة من صالة العرض', - 'utf8_convert_attendez' => 'انتظر للحظات قليلة ثم أعد تحميل هذه الصفحة.', - 'utf8_convert_avertissement' => 'أنت تستعد لتحويل محتوى قاعدة بياناتك (مقالات وأخبار الخ.) من طقم حروف @orig@ الى طقم حروف @charset@.', - 'utf8_convert_backup' => 'لا تنسى إنشاء نسخة احتياطية كاملة من موقعك اولاً. يجب ان تتأكد ايضاً من ان صفحاتك النموذجية وملفات لغاتك تتوافق مع @charset@. ', - 'utf8_convert_erreur_deja' => 'موقعك يخضع اصلاً لطقم @charset@، فلا لزوم لتحويله... ', 'utf8_convert_erreur_orig' => 'خطأ: طقم الحروف @charset@ غير مدعوم.', - 'utf8_convert_termine' => 'انتهى!', - 'utf8_convert_timeout' => 'مهم: في حال حصل تخط للوقت ( timeout) في جهاز الخدمة، الرجاء تكرار اعادة تحميل الصفحة حتى تظهر عبارة «إنتهى».', - 'utf8_convert_verifier' => 'عليك الآن بتفريغ الذاكرة المخبأة والتأكد من ان كل شيء سليم في صفحات الموقع العمومي. في حال حدوث مشاكل، لديك نسخة احتياطية من البيانات (بتنسيق SQL) في الدليل @rep@.', - 'utf8_convertir_votre_site' => 'تحويل موقعك الى utf-8', // V 'version' => 'الإصدار:' ); - -?> diff --git a/www/ecrire/lang/ecrire_ast.php b/www/ecrire/lang/ecrire_ast.php index 66b4f749..13df0d2a 100644 --- a/www/ecrire/lang/ecrire_ast.php +++ b/www/ecrire/lang/ecrire_ast.php @@ -1,9 +1,11 @@ 'Torna a la páxina anterior, y revisa la información qu’escribisti n’ella.', 'avis_connexion_ldap_echec_3' => 'D’otru mou, nun uses el sofitu de LDAP pa importar usuarios.', 'avis_deplacement_rubrique' => '¡Atención! Esta estaya contién @contient_breves@ breve@scb@: si la mueves, ties que marcar esti cuadru de confirmación.', - 'avis_destinataire_obligatoire' => 'Ties qu’indicar un destinatariu enantes d’unviar esti mensaxe.', 'avis_erreur_connexion_mysql' => 'Fallu de conexón SQL', - 'avis_erreur_version_archive' => '¡Atención! El ficheru @archive@ pertenez - otra versión de SPIP distinta de la que ta - instalada. Tas delantre de dificultaes - abondo: peligru de destruir la base de datos, - fallos variaos nel funcionamientu del sitiu, etc. - Nun valides esta demanda d’importación.

    Pa - mayor información, llee - la documentación de SPIP.

    ', - 'avis_espace_interdit' => 'Espaciu torgáu
    SPIP ya ta instalao.
    ', + 'avis_espace_interdit' => 'Espaciu torgáu
    SPIP ya ta instalao.
    ', 'avis_lecture_noms_bases_1' => 'El programa d’instalación nun fue a lleer los nomes de les bases de datos instaláes.', 'avis_lecture_noms_bases_2' => 'Puede ser que denguna base nun te disponible, o que la función que permite llistar les bases te desactivada por cuenta de razones de seguridá (lo que ye’l casu n’abondos agospiamientos web).', 'avis_lecture_noms_bases_3' => 'Nel segundu casu, ye probable qu’esista una base que col mesmu nome qu’el to login:', - 'avis_non_acces_message' => 'Nun tienes accesu a esti mensaxe.', 'avis_non_acces_page' => 'Nun tienes accesu a esta páxina.', 'avis_operation_echec' => 'Falló la operación.', 'avis_operation_impossible' => 'Operación imposible', - 'avis_probleme_archive' => 'Problema de llectura del archivu @archive@', 'avis_suppression_base' => 'ATENCIÓN, el desaniciu de los datos nun ye reversible', - 'avis_version_mysql' => 'El to sirvidor SQL (@version_mysql@) nun permite la igua automática de les tables de la base.', // B 'bouton_acces_ldap' => 'Añader l’accesu a LDAP', 'bouton_ajouter' => 'Amestar', - 'bouton_ajouter_participant' => 'AÑADER UN PARTICIPANTE:', - 'bouton_annonce' => 'ANUNCIU', 'bouton_annuler' => 'Anular', - 'bouton_checkbox_envoi_message' => 'posibilidá d’unviar un mensaxe', - 'bouton_checkbox_indiquer_site' => 'poner obligatoriamente un sitiu Web', - 'bouton_checkbox_signature_unique_email' => 'una sola firma por corréu electrónicu', - 'bouton_checkbox_signature_unique_site' => 'una sola firma por sitiu Web', 'bouton_demande_publication' => 'Pedir l’espublizamientu d’esti artículu', 'bouton_desactive_tout' => 'Desactivalo too', 'bouton_desinstaller' => 'Desasitiar', - 'bouton_effacer_index' => 'Desaniciar los índices', 'bouton_effacer_tout' => 'Desaniciar TOO', - 'bouton_envoi_message_02' => 'UNVIAR UN MENSAXE', 'bouton_envoyer_message' => 'Mensaxe definitivu: unviar', 'bouton_fermer' => 'Zarrar', 'bouton_modifier' => 'Camudar', - 'bouton_pense_bete' => 'RECORDATORIU PERSONAL', - 'bouton_radio_activer_messagerie' => 'Activar la mensaxeria interna', - 'bouton_radio_activer_messagerie_interne' => 'Activar la mensaxería interna', - 'bouton_radio_activer_petition' => 'Activar la solicitú', 'bouton_radio_afficher' => 'Amosar', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Apaecer na llista de redactores coneutaos', - 'bouton_radio_desactiver_messagerie' => 'Desactivar la mensaxería', 'bouton_radio_envoi_annonces_adresse' => 'Unviar los anuncios a la direición:', 'bouton_radio_envoi_liste_nouveautes' => 'Unviar la llista de novedáes', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Nun apaecer na llista de redactores', 'bouton_radio_non_envoi_annonces_editoriales' => 'Nun mandar anuncios editoriales', - 'bouton_radio_pas_petition' => 'Ensin solicitú', - 'bouton_radio_petition_activee' => 'Solicitú activada', - 'bouton_radio_supprimer_petition' => 'Desaniciar la solicitú', 'bouton_redirection' => 'REDIREICIÓN', 'bouton_relancer_installation' => 'Rellanzar l’instalación', 'bouton_suivant' => 'Siguiente', 'bouton_tenter_recuperation' => 'Tentar una reparación', 'bouton_test_proxy' => 'Comprobar el proxy', 'bouton_vider_cache' => 'Vaciar la caché', - 'bouton_voir_message' => 'Ver esti mensaxe enantes de validalu', // C - 'cache_mode_compresse' => 'Los archivos de la caché grábense en mou comprimíu.', - 'cache_mode_non_compresse' => 'Los archivos de la caché grábense en mou nun comprimíu.', 'cache_modifiable_webmestre' => 'Esti parámetru puede modificase pol webmaster del sitiu.', 'calendrier_synchro' => 'Si uses un programa d’axenda compatible iCal, puedes sincronizalu cola información d’esti sitiu.', 'config_activer_champs' => 'Activar los campos siguientes', @@ -109,7 +80,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_titre_base_sup' => 'Declaración d’una base suplementaria', 'config_titre_base_sup_choix' => 'Escueye una base suplementaria', 'connexion_ldap' => 'Conexón:', - 'copier_en_local' => 'Copiar en llocal', // D 'date_mot_heures' => 'hores', @@ -136,7 +106,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'El to login', 'entree_login_connexion_1' => 'El nome de conexón', 'entree_login_connexion_2' => '(Correspuende seique al to nome d’accesu al FTP; seique en blancu)', - 'entree_login_ldap' => 'Nome inicial LDAP', 'entree_mot_passe' => 'La to contraseña', 'entree_mot_passe_1' => 'La contraseña pa la conexón', 'entree_mot_passe_2' => '(Correspuende seique a la to contraseña pal FTP; seique en blancu)', @@ -168,7 +137,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'Pa más información tocante a toes estes técniques, pues consultar la documentación de SPIP.', 'ical_info_calendrier' => 'Tienes dos axendes a la to disposición. La primera ye el plan del sitiu que anuncia tolos artículos espublizaos. La segunda contién los anuncios editoriales y también los tos caberos mensaxes privaos: esta ye una axenda privada gracies a una clave personal, que pues modificar en tou momentu anovando la to contraseña.', 'ical_methode_http' => 'Descarga', - 'ical_methode_webcal' => 'Sincronización (webcal://)', + 'ical_methode_webcal' => 'Sincronización (webcal://)', # MODIF 'ical_texte_js' => 'Una llinia de javascript va permitite amosar de mou bien fácil, en cualquier otru sitiu tuyu, los artículos recientes espublizaos nesti sitiu.', 'ical_texte_prive' => 'Esta axenda, de usu esclusivamente personal, te informa de l’actividá editorial privada d’esti sitiu (xeres y conceyos personales, artículos y breves propuestos...).', 'ical_texte_public' => 'Esta axenda te permite siguir l’actividá pública d’esti sitiu (artículos y breves espublizáos).', @@ -188,16 +157,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_configuration' => 'Configuración', 'icone_creer_auteur' => 'Crear un nuevu autor y asocialu con esti artículu', 'icone_creer_mot_cle' => 'Crear una nueva pallabra-clave y amestala con esti artículu', - 'icone_creer_mot_cle_rubrique' => 'Crear una nueva pallabra-clave y enllazala con esta estaya', - 'icone_creer_mot_cle_site' => 'Crear una nueva pallabra-clave y enllazala con esti sitiu', 'icone_creer_rubrique_2' => 'Facer una estaya nueva', 'icone_edition' => 'Edición', - 'icone_envoyer_message' => 'Unviar esti mensaxe', 'icone_ma_langue' => 'La mio llingua', 'icone_mes_infos' => 'La mio información', 'icone_mes_preferences' => 'Les mios preferencies', 'icone_modifier_article' => 'Iguar esti artículu', - 'icone_modifier_message' => 'Iguar esti mensaxe', 'icone_modifier_rubrique' => 'Iguar esta estaya', 'icone_publication' => 'Publicación', 'icone_relancer_signataire' => 'Rellanzar el roblador', @@ -211,18 +176,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'Validar esta robla', 'image_administrer_rubrique' => 'Puedes alministrar esta estaya', 'info_1_article' => '1 artículu', - 'info_1_article_syndique' => '1 artículu sindicáu', 'info_1_auteur' => '1 autor', 'info_1_message' => '1 mensaxe', 'info_1_mot_cle' => '1 pallabra-clave', 'info_1_rubrique' => '1 seición', - 'info_1_site' => '1 sitiu web', 'info_1_visiteur' => '1 visitante', 'info_activer_cookie' => 'Puedes activar una cookie de correspondencia, que va permitite que pases fácilmente del sitiu públicu al sitiu privau.', 'info_admin_etre_webmestre' => 'Conseñame permisos de webmaster', - 'info_admin_gere_rubriques' => 'Esti alministrador xestiona les estayes siguientes:', - 'info_admin_gere_toutes_rubriques' => 'Esti alministrador xestiona toles estayes.', # MODIF 'info_admin_je_suis_webmestre' => 'Yá soi webmaster', 'info_admin_statuer_webmestre' => 'Da-y a esti alministrador permisos de webmaster', 'info_admin_webmestre' => 'Esti alministrador ye webmaster', @@ -235,16 +196,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'Puedes alministrar esta estaya', 'info_adresse' => 'a les señes:', 'info_adresse_url' => 'Direición (URL) del sitiu públicu', - 'info_afficher_visites' => 'Amosar les visites pa:', 'info_aide_en_ligne' => 'Aida en llinia de SPIP', 'info_ajout_image' => 'Cuando amestes imáxenes como documentos axuntaos a un artículu, SPIP puede crear por tí, automáticamente, viñetes (miniatures) de les imáxenes inxertaes. Esto permite por exemplu crear automáticamente una galería o un álbum.', - 'info_ajout_participant' => 'Amestose el siguiente participante:', 'info_ajouter_rubrique' => 'Amestar otra estaya pa alministrar:', 'info_annonce_nouveautes' => 'Anunciu de les novedáes', - 'info_anterieur' => 'anterior', 'info_article' => 'artículu', 'info_article_2' => 'artículos', 'info_article_a_paraitre' => 'Los artículos que apaecerán en feches futures', @@ -252,17 +210,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_2' => 'Artículos', 'info_articles_auteur' => 'Los artículos d’esti autor', 'info_articles_trouves' => 'Artículos alcontraos', - 'info_articles_trouves_dans_texte' => 'Artículos alcontraos (nel testu)', 'info_attente_validation' => 'Los tos artículos esperando validación', 'info_aucun_article' => 'Dengún artículu', - 'info_aucun_article_syndique' => 'Dengún artículu sindicáu', 'info_aucun_auteur' => 'Dengún autor', 'info_aucun_message' => 'Dengún mensaxe', 'info_aucun_rubrique' => 'Denguna seición', # MODIF - 'info_aucun_site' => 'Dengún sitiu', - 'info_aucun_visiteur' => 'Dengún visitante', 'info_aujourdhui' => 'güei:', - 'info_auteur_message' => 'AUTOR DEL MENSAXE:', + 'info_auteur_gere_toutes_rubriques_2' => 'Je gère toutes les rubriques', # MODIF 'info_auteurs' => 'Los autores', 'info_auteurs_par_tri' => 'Autores@partri@', 'info_auteurs_trouves' => 'Autores alcontráos', @@ -280,8 +234,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_2' => 'u en @liste@', 'info_code_acces' => '¡Nun escaezas los tos códigos d’accesu!', 'info_compatibilite_html' => 'Norma HTML a siguir', - 'info_compresseur_gzip' => 'Nota: Recomiéndase verificar de mano si l’agospiador ya comprime automáticamente los scripts php ; pa esto, puedes utilizar por exemplu el serviciu siguiente: @testgzip@', # MODIF - 'info_compresseur_texte' => 'Si el to sirvidor nun comprime automáticamente les páxines html par unviales a los internautes, puedes tentar de forzar esta compresión pa amenorgar el pesu de les páxines descargáes. Atención: esto puede ralentizar enforma dellos sirvidores.', 'info_config_suivi' => 'Si estes señes corresponden a una llista de corréu, pues indicar embaxo les señes nes que pueden apuntase los participantes nel sitiu. Estes señes puen ser una URL (por exemplu la páxina d’inscripción a la llista na Rede), o unes señes d’email con un asuntu específicu (por exemplu: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Puedes soscribite a la llista de corréu d’esti sitiu. D’esti mou recibirás per corréu electrónicu los anuncios d’artículos y de breves propuestos pa espublizar.', 'info_confirmer_passe' => 'Confirmar esta nueva contraseña:', @@ -305,8 +257,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Fecha de redaición anterior:', 'info_date_referencement' => 'FECHA DE REFERENCIACIÓN D’ESTI SITIU:', 'info_derniere_etape' => '¡Ya finamos!', - 'info_derniers_articles_publies' => 'Los caberos artículos espublizaos en llinia', - 'info_desactiver_messagerie_personnelle' => 'Pues activar o desactivar la mensaxería personal nesti sitiu.', 'info_descriptif' => 'Descripción:', 'info_desinstaller_plugin' => 'desanicia los datos y desactiva el plugin', 'info_discussion_cours' => 'Discutinios en cursu', @@ -314,7 +264,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_email_envoi' => 'Señes d’email d’unvíu (opcional)', 'info_email_envoi_txt' => 'Indica equí les señes a utilizar pa unviar los emails (por omisión, usense les señes del destinatariu como señes d’unvíu):', 'info_email_webmestre' => 'Señes d’email del webmaster (opcional)', # MODIF - 'info_entrer_code_alphabet' => 'Enxerta’l códigu de l’alfabetu a utilizar:', 'info_envoi_email_automatique' => 'Unvíu d’e-mails automáticu', 'info_envoyer_maintenant' => 'Unviar agora', 'info_etape_suivante' => 'Pasar a la etapa siguiente', @@ -328,7 +277,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( publicación y les validaciones d’artículos.', 'info_fichiers_authent' => 'Archivos d’autentificación «.htpasswd»', 'info_forums_abo_invites' => 'Esti sitiu tien foros pa abonaos; poro a los visiteurs se-yos encamienta que se rexistren nel sitiu públicu.', - 'info_gauche_admin_effacer' => 'Esta páxina namái ye accesible pa los responsables del sitiu.

    Equí ta l’accesu a les diferentes funciones de mantenimientu téunicu. Delles llancen un procesu d’identificación específicu, pal que fai falta tener accesu per FTP al sirvidor del sitiu Web.

    ', 'info_gauche_admin_tech' => 'Esta páxina namái ye accesible pa los responsables del sitiu.

    Equí ta l’accesu a les diferentes funciones de mantenimientu téunicu. Delles llancen un procesu d’identificación específicu, pal que fai falta tener accesu per FTP al sirvidor del sitiu Web.

    ', @@ -340,21 +288,14 @@ fai falta tener accesu per FTP al sirvidor del sitiu Web.

    ', 'info_gauche_auteurs_exterieurs' => 'Los autores esternos, ensin accesu al sitiu, vienen indicaos con un iconu azul; los autores esborráos con un calderu de basoria.', # MODIF 'info_gauche_messagerie' => 'La mensaxería permite mandase mensaxes ente redactores, conservar recordatorioss (pa usu personal) o amosar anuncies na páxina principal de l’espaciu priváu (si yes alministrador).', - 'info_gauche_numero_auteur' => 'AUTOR NÚMBERU', 'info_gauche_statistiques_referers' => 'Esta páxina presenta la llista de los referers, que son sitios que contienen enllaces que apunten pa esti mesmu sitiu, namái d’ayeri y de güei; esta llista ponse a cero cada 24 hores.', 'info_gauche_visiteurs_enregistres' => 'Equí alcontrarás los visitantes rexistraes nel espaciu públicu del sitiu (foros pa abonaos).', 'info_generation_miniatures_images' => 'Xeneración d’imaxes amenorgáes', - 'info_gerer_trad' => '¿Xestionar los enllaces de traducción?', 'info_hebergeur_desactiver_envoi_email' => 'Dellos agospiamientos encaboxen l’unvíu automáticu de correos dende los sos sirvidores. Nesti casu, les siguientes carauterístiques de SPIP nun funcionarán.', 'info_hier' => 'ayeri:', - 'info_historique_activer' => 'Activar el siguimientu de les revisiones', - 'info_historique_affiche' => 'Amosar esta versión', - 'info_historique_comparaison' => 'comparanza', - 'info_historique_desactiver' => 'Desactivar el siguimientu de les revisiones', - 'info_historique_texte' => 'El siguimientu de les revisiones permite conservar un históricu de toles modificaciones amestaes al conteníu d’un artículu, y amosar les diferencies ente les versiones sucesives.', 'info_identification_publique' => 'La to identidá pública...', 'info_image_process' => 'Has d’escoyer el meyor métodu de fabricación de les viñetes calcando enriba de la imaxe correspondiente.', 'info_image_process2' => 'N.B. Si nun apaez imaxe dala, el sirvidor que agospia el to sitiu nun ta configuráu pa mandase d’estes ferramientes. Si quiés utilizar estes funciones, contauta col responsable téunicu y pide-y les estensiones «GD» o «Imagick».', # MODIF @@ -373,8 +314,6 @@ fai falta tener accesu per FTP al sirvidor del sitiu Web.

    ', 'info_logos' => 'Los logos', 'info_maximum' => 'másimu:', 'info_meme_rubrique' => 'Na mesma estaya', - 'info_message' => 'Mensaxe de', - 'info_message_efface' => 'MENSAXE DESANICIÁU', 'info_message_en_redaction' => 'Los tos mensaxes en cursu de redacción', 'info_message_technique' => 'Mensaxe téunicu:', 'info_messagerie_interne' => 'Mensaxería interna', @@ -388,28 +327,21 @@ fai falta tener accesu per FTP al sirvidor del sitiu Web.

    ', 'info_modifier_rubrique' => 'Modificar la estaya:', 'info_modifier_titre' => 'Modificar: @titre@', 'info_mon_site_spip' => 'El mio sitiu SPIP', - 'info_mot_sans_groupe' => '(Pallabres ensin grupu...)', - 'info_moteur_recherche' => 'Motor de gueta integráu', 'info_moyenne' => 'media:', - 'info_multi_articles' => '¿Activar el menú de llingües pa los artículos?', 'info_multi_cet_article' => 'Llingua d’esti artículu:', 'info_multi_langues_choisies' => 'Seleiciona de siguío les llingües disponibles pa los redactores del sitiu Web. Les llingües que ya tan usándose nel sitiu (amosaes en primer llugar) nun puen desactivase.', - 'info_multi_rubriques' => '¿Activar el menú de llingües pa les estayes?', 'info_multi_secteurs' => '... ¿sólamente pa les estayes allugáes na raiz?', 'info_nb_articles' => '@nb@ artículos', - 'info_nb_articles_syndiques' => '@nb@ artículos sindicaos', 'info_nb_auteurs' => '@nb@ autores', 'info_nb_messages' => '@nb@ mensaxes', 'info_nb_mots_cles' => '@nb@ pallabres-clave', 'info_nb_rubriques' => '@nb@ seiciones', - 'info_nb_sites' => '@nb@ sitios', 'info_nb_visiteurs' => '@nb@ visitantes', 'info_nom' => 'Nome', 'info_nom_destinataire' => 'Nome del destinatariu', 'info_nom_site' => 'Nome del to sitiu', 'info_nombre_articles' => '@nb_articles@ artículos,', - 'info_nombre_partcipants' => 'PARTICIPANTES NEL DISCUTINIU:', 'info_nombre_rubriques' => '@nb_rubriques@ estayes,', 'info_nombre_sites' => '@nb_sites@ sitios web,', 'info_non_deplacer' => 'Nun desplazar...', @@ -418,19 +350,14 @@ fai falta tener accesu per FTP al sirvidor del sitiu Web.

    ', 'info_non_envoi_liste_nouveautes' => 'Nun mandar la llista de les novedáes', 'info_non_modifiable' => 'nun pue camudase', 'info_non_suppression_mot_cle' => 'nun quiero desaniciar esta pallabra-clave.', - 'info_note_numero' => 'Nota @numero@', 'info_notes' => 'Notes', - 'info_nouveaux_message' => 'Mensaxes nuevos', 'info_nouvel_article' => 'Artículu nuevu', 'info_nouvelle_traduction' => 'Traducción nueva:', 'info_numero_article' => 'ARTÍCULU NÚMBERU:', 'info_obligatoire_02' => '[Obligatorio]', # MODIF 'info_option_accepter_visiteurs' => 'Aceptar la inscripción de visitantes del sitiu públicu', - 'info_option_faire_suivre' => 'Unvia-yos copia de los mensaxes de los foros a los autores de los artículos', 'info_option_ne_pas_accepter_visiteurs' => 'Refugar la inscripción de los visitantes', 'info_options_avancees' => 'OPCIONES AVANZÁES', - 'info_ortho_activer' => 'Activar el correutor ortográficu', - 'info_ortho_desactiver' => 'Desactivar el correutor ortográficu', 'info_ou' => 'o...', 'info_page_interdite' => 'Páxina torgada', 'info_par_nom' => 'pol nome', @@ -439,20 +366,14 @@ fai falta tener accesu per FTP al sirvidor del sitiu Web.

    ', 'info_par_tri' => '’(por @tri@)’', 'info_passe_trop_court' => 'La contraseña ye mui curtia.', 'info_passes_identiques' => 'Les dos contraseñes nun concasen.', - 'info_pense_bete_ancien' => 'Recordatorios antiguos', 'info_plus_cinq_car' => 'más de 5 carauteres', 'info_plus_cinq_car_2' => '(Más de 5 carauteres)', 'info_plus_trois_car' => '(Más de 3 carauteres)', 'info_popularite' => 'popularidá: @popularite@; visites: @visites@', - 'info_popularite_4' => 'popularidá: @popularite@; visites : @visites@', 'info_post_scriptum' => 'Post Scríptum', 'info_post_scriptum_2' => 'Post Scríptum:', 'info_pour' => 'pa', - 'info_preview_admin' => 'Namái los alministradores puen previsualizar el sitiu', - 'info_preview_comite' => 'Tolos redactores puen previsualizar el sitiu', - 'info_preview_desactive' => 'La previsualización ta desactivada dafechu', - 'info_preview_texte' => 'Ye posible previsualizar el sitiu como si tolos artículos y les breves (que tengan polo menos l’estatutu «propuestu») tuvieren espublizaos. ¿Esta posibilidá tien que tar abierta pa los alministradores namái, pa tolos redactores, o pa naide?', - 'info_principaux_correspondants' => 'Principales intercambéos de mensaxes', + 'info_preview_texte' => 'Ye posible previsualizar el sitiu como si tolos artículos y les breves (que tengan polo menos l’estatutu «propuestu») tuvieren espublizaos. ¿Esta posibilidá tien que tar abierta pa los alministradores namái, pa tolos redactores, o pa naide?', # MODIF 'info_procedez_par_etape' => 'sigue pasu ente pasu', 'info_procedure_maj_version' => 'hai que llanzar el procesu d’actualización a la fin d’adautar la base de datos a la nueva versión de SPIP.', @@ -470,14 +391,8 @@ fai falta tener accesu per FTP al sirvidor del sitiu Web.

    ', agospiadores desactiven l’unvíu d’e-mails dende los sos sirvidores: nesti casu, la inscripción automática ye imposible.
    ', # MODIF - 'info_question_utilisation_moteur_recherche' => '¿Quies utilizar el motor de restolar integráu con SPIP? - (desactivalu acelera el funcionamientu del sistema.)', - 'info_question_vignettes_referer_non' => 'Nun amosar les captures de los sitios d’orixe de les visites', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Raiz del sitiu', 'info_recharger_page' => 'Ties que recargar esta páxina nunos instantes.', - 'info_recherche_auteur_a_affiner' => 'Hai resultaos asgaya pa "@cherche_auteur@", apurre más criterios a la gueta.', - 'info_recherche_auteur_ok' => 'Atopáronse dellos autores pa "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Nun hai resultaos pa «@cherche_auteur@».', 'info_recommencer' => 'Vuelve a entamar', 'info_redacteur_1' => 'Redactor', @@ -494,7 +409,6 @@ fai falta tener accesu per FTP al sirvidor del sitiu Web.

    ', 'info_rubriques' => 'Estayes', 'info_rubriques_02' => 'estayes', 'info_rubriques_trouvees' => 'Estayes alcontráes', - 'info_rubriques_trouvees_dans_texte' => 'Estayes alcontráes (nel testu)', 'info_sans_titre' => 'Ensin títulu', 'info_selection_chemin_acces' => 'Seleiciona de siguío el camín d’accesu a la guía:', 'info_signatures' => 'robles', @@ -507,13 +421,11 @@ fai falta tener accesu per FTP al sirvidor del sitiu Web.

    ', 'info_sites_lies_mot' => 'Los sitios referenciaos enllazaos con esta pallabra-clave', 'info_sites_proxy' => 'Utilizar un proxy', 'info_sites_trouves' => 'Sitios alcontraos', - 'info_sites_trouves_dans_texte' => 'Sitios alcontraos (nel testu)', 'info_sous_titre' => 'Subtítulu:', 'info_statut_administrateur' => 'Alministrador', 'info_statut_auteur' => 'Estatutu d’esti autor:', 'info_statut_auteur_a_confirmer' => 'Inscripción por confirmar', 'info_statut_auteur_autre' => 'Otru estatutu:', - 'info_statut_efface' => 'Esborráu', 'info_statut_redacteur' => 'Redactor', 'info_statut_utilisateurs_1' => 'Estatutu por omisión de los usuarios importaos', 'info_statut_utilisateurs_2' => 'Escueye l’estatutu que se-yos da a les persones presentes na guía LDAP cuando se conecten la primera vegada. Lluéu podrás camudar esti valor pa caún de los autores casu per casu.', @@ -536,7 +448,6 @@ fai falta tener accesu per FTP al sirvidor del sitiu Web.

    ', 'info_tous_articles_presents' => 'Tolos artículos espublizaos nesta estaya', 'info_tous_articles_refuses' => 'Tolos artículos refugaos', 'info_tous_les' => 'tolos:', - 'info_tous_redacteurs' => 'Anuncios pa tolos redactores', 'info_tout_site' => 'Tou el sitiu', 'info_tout_site2' => 'L’artículu nun ta traducíu a esta llingua.', 'info_tout_site3' => 'L’artículu ta traducíu a esta llingua, pero después amestáronse modificaciones a l’artículu de referencia. La traducción tien que ponese al día.', @@ -552,7 +463,6 @@ con una color que indica el estáu:', 'info_une_rubrique_02' => '1 estaya', 'info_url' => 'URL:', 'info_url_proxy' => 'URL del proxy', - 'info_url_site' => 'URL del sitiu:', 'info_url_test_proxy' => 'URL de pruebes', 'info_urlref' => 'Enllace d’hipertestu:', 'info_utilisation_spip' => 'Agora puedes entamar a utilizar el sistema d’espublizamientu asistíu...', @@ -563,7 +473,6 @@ con una color que indica el estáu:', 'info_visiteurs_02' => 'Visitantes del sitiu públicu', 'info_webmestre_forces' => 'Los webmasters anguaño tan conseñaos en @file_options@.', 'install_adresse_base_hebergeur' => 'Direición de la base datos asitiada pol agospiador web', - 'install_base_ok' => 'Reconocióse la base @base@', 'install_echec_annonce' => 'La instalación probablemente va fallar, o va producir un sitiu que nun funcione...', 'install_extension_mbstring' => 'SPIP nun funciona con:', 'install_extension_php_obligatoire' => 'SPIP esixe la estensión php:', @@ -589,8 +498,6 @@ con una color que indica el estáu:', 'item_activer_messages_avertissement' => 'Activar los mensaxes d’avisu', 'item_administrateur_2' => 'alministrador', 'item_afficher_calendrier' => 'Amosar na axenda', - 'item_autoriser_documents_joints' => 'Autorizar los documentos axuntos nos artículos', - 'item_autoriser_documents_joints_rubriques' => 'Autorizar los documentos nes estayes', 'item_autoriser_syndication_integrale' => 'Difundir los artículos completos en los archivos de sindicación', 'item_choix_administrateurs' => 'los alministradores', 'item_choix_generation_miniature' => 'Xenerar automáticamente les imáxenes amenorgáes.', @@ -598,7 +505,6 @@ con una color que indica el estáu:', 'item_choix_redacteurs' => 'los redactores', 'item_choix_visiteurs' => 'los visitantes del sitiu públicu', 'item_creer_fichiers_authent' => 'Crear los archivos .htpasswd', - 'item_limiter_recherche' => 'Llendar la gueta a les informaciones conteníes nesti sitiu', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Activar la mensaxería y l’axenda', 'item_mots_cles_association_articles' => 'a los artículos', @@ -608,22 +514,15 @@ con una color que indica el estáu:', 'item_non_accepter_inscriptions' => 'Nun aceutar les inscripciones', 'item_non_activer_messages_avertissement' => 'Ensin mensaxes d’avisu', 'item_non_afficher_calendrier' => 'Nun amosar nel calendariu', - 'item_non_autoriser_documents_joints' => 'Nun autorizar los documentos nos artículos', - 'item_non_autoriser_documents_joints_rubriques' => 'Nun autorizar los documentos nes estayes', 'item_non_autoriser_syndication_integrale' => 'Nun esparder más que un resume', - 'item_non_compresseur' => 'Desactivar la compresión', 'item_non_creer_fichiers_authent' => 'Nun crear estos archivos', - 'item_non_gerer_statistiques' => 'Nun xestionar les estadístiques', - 'item_non_limiter_recherche' => 'Estender la gueta al conteníu de los sitios referenciaos', 'item_non_messagerie_agenda' => 'Desactivar la mensaxeria y l’axenda', 'item_non_publier_articles' => 'Nun espublizar los artículos enantes de la fecha d’espublizamientu conseñada.', - 'item_non_utiliser_moteur_recherche' => 'Nun utilizar el motor', 'item_nouvel_auteur' => 'Autor nuevu', 'item_nouvelle_rubrique' => 'Estaya nueva', 'item_oui' => 'Sí', 'item_publier_articles' => 'Espublizar los artículos, cualquiera que sea la fecha d’espublizamientu.', 'item_reponse_article' => 'Respuesta a l’artículu', - 'item_utiliser_moteur_recherche' => 'Utilizar el motor de gueta', 'item_version_html_max_html4' => 'Llendar a HTML4 nel sitiu públicu', 'item_version_html_max_html5' => 'Permitir el HTML5', 'item_visiteur' => 'visitante', @@ -637,22 +536,18 @@ con una color que indica el estáu:', 'label_bando_outils_masquer' => 'Anubrir les ferramientes', 'label_choix_langue' => 'Escueye la to llingua', 'label_slogan_site' => 'Eslogan del sitiu', - 'label_taille_ecran' => 'Tamañu de la pantalla', + 'label_taille_ecran' => 'Tamañu de la pantalla', # MODIF 'label_texte_et_icones_navigation' => 'Menú de navegación', 'label_texte_et_icones_page' => 'Presentación na páxina', 'ldap_correspondance' => 'herencia del campu @champ@', 'ldap_correspondance_1' => 'Herencia de campos LDAP', 'ldap_correspondance_2' => 'Pa caún de los campos SPIP siguientes, conseñar el nome del campu LDAP correspondiente. Dexar balero pa nun llenalu, separtar con espacios o comes pa tentar dellos campos LDAP.', - 'lien_ajout_destinataire' => 'Amestar esti destinatariu', 'lien_ajouter_auteur' => 'Amestar esti autor', - 'lien_ajouter_participant' => 'Amestar un participante', 'lien_email' => 'email', 'lien_nom_site' => 'NOME DEL SITIU:', 'lien_retirer_auteur' => 'Retirar l’autor', 'lien_retirer_tous_auteurs' => 'Retirar tolos autores', - 'lien_retrait_particpant' => 'retirar esti participante', 'lien_site' => 'sitiu', - 'lien_supprimer_rubrique' => 'desaniciar esta estaya', 'lien_tout_deplier' => 'Desplegalo too', 'lien_tout_replier' => 'Replegalo too', 'lien_tout_supprimer' => 'Desanicialo too', @@ -677,13 +572,12 @@ con una color que indica el estáu:', 'mois_non_connu' => 'desconocíu', // N - 'nouvelle_version_spip' => 'Ta disponible la versión @version@ de SPIP', + 'nouvelle_version_spip' => 'Ta disponible la versión @version@ de SPIP', # MODIF // O 'onglet_contenu' => 'Conteníu', 'onglet_declarer_une_autre_base' => 'Declarar otra base', 'onglet_discuter' => 'Discutiniu', - 'onglet_documents' => 'Documentos', 'onglet_interactivite' => 'Interactividá', 'onglet_proprietes' => 'Propiedáes', 'onglet_repartition_actuelle' => 'actualmente', @@ -721,7 +615,7 @@ con una color que indica el estáu:', 'plugin_info_telecharger' => 'a descargar de @url@ y a instalar en @rep@', 'plugin_librairies_installees' => 'Llibreríes instaláes', 'plugin_necessite_lib' => 'Esti plugin necesita la llibrería @lib@', - 'plugin_necessite_plugin' => 'Necesita el plugin @plugin@ en versión @version@ mínimo.', + 'plugin_necessite_plugin' => 'Necesita el plugin @plugin@ en versión @version@ mínimo.', # MODIF 'plugin_necessite_spip' => 'Necesita SPIP en versión @version@ mínimo.', 'plugin_source' => 'fonte: ', 'plugin_titre_automatique' => 'Instalación automática', @@ -752,6 +646,7 @@ con una color que indica el estáu:', // R 'repertoire_plugins' => 'Direutoriu:', + 'required' => '[Obligatorio]', # MODIF // S 'sans_heure' => 'ensin hora', @@ -777,18 +672,13 @@ reinstalación de SPIP pa crear una nueva base igual que un primer accesu d’al 'texte_article_virtuel_reference' => 'Artículu virtual: artículu referenciau nel sitiu SPIP, magar que redirixe a otra URL. Pa desaniciar la redireición, esborra la URL d’enriba.', 'texte_aucun_resultat_auteur' => 'Nun hai resultaos pa "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Esti sitiu pue amosate de mou permanente la llista de redactores coneutaos, lo que te permite intercambiar mensaxes en direutu. Pues decidir nun apaecer nesa llista (ser «invisible» pa los demás usuarios).', - 'texte_auteur_messagerie_1' => 'Esti sitiu permite l’intercambiu de mensaxes y la constitución de foros de discutiniu privaos ente los participantes del sitiu. Pue decidir nun participar nos intercambios.', 'texte_auteurs' => 'LOS AUTORES', 'texte_choix_base_1' => 'Escueye la base de datos:', 'texte_choix_base_2' => 'El sirvidor SQL contién delles bases de datos.', 'texte_choix_base_3' => 'Seleiciona de siguío la que te conseñaren nel agospiamientu:', 'texte_choix_table_prefix' => 'Prefixu de les tables:', - 'texte_commande_vider_tables_indexation' => 'Utiliza esta orde a la fin de vaciar les tables d’indexación utilizáes - pol motor de guetar integráu con SPIP. Esto va permitite - ganar espaciu nel discu.', 'texte_compatibilite_html' => 'Puedes pidi-y a SPIP que produza, nel sitiu públicu, códigu compatible cola norma HTML4, o permiti-y utilizar les posibilidaes más modernes del HTML5.', 'texte_compatibilite_html_attention' => 'Nun hai dengún peligru por activar la opción HTML5, pero si lo faes, les páxines del to sitiu tendrán d’entamar cola cita darréu pa ser válidos: <!DOCTYPE html>.', - 'texte_compresse_ou_non' => '(esti pue tar comprimíu o non)', 'texte_compte_element' => '@count@ elementu', 'texte_compte_elements' => '@count@ elementos', 'texte_conflit_edition_correction' => 'Compreba embaxo les diferencies ente les dos versiones del testu; también pues copiar los tos cambéos y, de siguío, volver a entamar', @@ -805,10 +695,8 @@ reinstalación de SPIP pa crear una nueva base igual que un primer accesu d’al 'texte_date_publication_anterieure' => 'Fecha de redaición anterior:', 'texte_date_publication_anterieure_nonaffichee' => 'Nun amosar fecha de redaición anterior.', 'texte_date_publication_article' => 'FECHA D’ESPUBLIZAMIENTU EN LLINIA:', - 'texte_descriptif_petition' => 'Descripción de la solicitú', 'texte_descriptif_rapide' => 'Descripción rápida', 'texte_effacer_base' => 'Desaniciar la base de datos SPIP', - 'texte_effacer_donnees_indexation' => 'Desaniciar los datos d’indexación', 'texte_effacer_statistiques' => 'Desaniciar les estadístiques', 'texte_en_cours_validation' => 'Los artículos y breves d’embaxo tan propuestos pa espublizase.', # MODIF 'texte_enrichir_mise_a_jour' => 'Pues arriquecer la paxinación del testu utilizando los «atayos tipográficos».', @@ -824,30 +712,19 @@ reinstalación de SPIP pa crear una nueva base igual que un primer accesu d’al 'texte_informations_personnelles_2' => '(Nota: si esto ye una reinstalación, y el to accesu siempre funciona, pues', # MODIF 'texte_introductif_article' => '(Testu d’introducción de l’artículu.)', 'texte_jeu_caractere' => 'Encamiéntase emplegar, pal to sitiu, l’alfabetu universal (utf-8): esti permite amosar los testos en toes les llingües, y ya nun da problemes de compatibilidá colos ñavegadores modernos.', - 'texte_jeu_caractere_2' => 'Atención: esti axuste nun provoca la conversión de los testos que ya tean grabaos na base de datos.', 'texte_jeu_caractere_3' => 'Esti sitiu ta instaláu actualmente col xuegu de carauteres:', 'texte_jeu_caractere_4' => 'Si esto nun concasa cola realidá de los datos (siguir, por exemplu, tres d’una restauración de la base de datos), o si tas arrancando esti sitiu y quies entamar con otru xuegu de carauteres, conseña esti darréu:', - 'texte_jeu_caractere_conversion' => 'Nota: pues querer convertir d’una vez por toes el conxuntu de testos d’esti sitiu (artículos, breves, foros, etc.) a l’alfabetu utf-8, entrando na páxina de conversión a l’utf-8.', - 'texte_lien_hypertexte' => '(Si el to mensaxe refierse a un artículu espublizáu na Web, o a una páxina que ufre más información, indica de siguío el títulu de la páxina y les señes URL.)', 'texte_login_ldap_1' => '(Dexar vacío pa un accesu anónimu, o conseñar el camín ensembre, por exemplu «uid=dupont, ou=users, dc=mio-dominiu, dc=com ».)', 'texte_login_precaution' => '¡Atención! Esti ye l’usuariu col que tas coneutau actualmente. Utiliza esti formulariu con procuru...', - 'texte_message_edit' => 'Atención: esti mensaxe pue camudase por tolos alministradores del sitiu, y ye visible pa tolos redactores. Nun uses les anuncies más que pa amosar les actividáes importantes pa la vida del sitiu.', 'texte_messagerie_agenda' => 'Una mensaxería permite-yos a los redactores del sitiu comunicase direutamente ente ellos nel espaciu privau del sitiu. La mensaxería va asociada con una axenda.', 'texte_mise_a_niveau_base_1' => 'Tas acabante de poner al día los archivos de SPIP. Agora fai falta actualizar la base de datos del sitiu.', 'texte_modifier_article' => 'Iguar l’artículu:', - 'texte_moteur_recherche_active' => 'El motor de restolar ta activáu. Utiliza esta orde - si quies entamar una reindexación rápida (tres la restauración d’una - copia de seguridá por exemplu). Atalanta que los documentos modificaos - de mou normal (dende la interfaz SPIP) reindexense automáticamente: - esta orde, poro, nun ye afayadiza sinon de mou esceicional.', - 'texte_moteur_recherche_non_active' => 'El motor de restolar nun ta activáu.', 'texte_multilinguisme' => 'Si quiés xuestionar artículos en delles llingües, con una ñavegación complexa, pues amestar un menú de seleición de llingua nos articulos y/o nes estayes, al aldu de la organización del sitiu.', # MODIF 'texte_multilinguisme_trad' => 'Igualmente pues activar un sistema de xestión de enllaces ente les distintes traducciones d’un artículu.', # MODIF 'texte_non_compresse' => 'non comprimíu (el to sirvidor nun soporta esta carauterística)', - 'texte_nouveau_message' => 'Mensaxe nuevu', 'texte_nouvelle_version_spip_1' => 'Vienes d’instalar una versión nueva de SPIP.', 'texte_nouvelle_version_spip_2' => 'Esta nueva versión necesita una actualización más completa que la de vezu. Si yes el webmaster del sitiu, tienes de desaniciar el ficheru @connect@ y siguir cola instalación p’anovar los parámetros de conexón cola base de datos.

    (NB.: si escaecisti los tos parámetros de conexón, echa-y una güeyada al ficheru @connect@ enantes de desanicialu...)

    ', 'texte_operation_echec' => 'Torna a la páxina precedente, seleiciona otra base o crea una nueva. Compreba la información ufrida pol to agospiamientu web.', @@ -863,7 +740,6 @@ reinstalación de SPIP pa crear una nueva base igual que un primer accesu d’al 'texte_rappel_selection_champs' => '[Nun escaezas seleicionar correutamente esti campu.]', 'texte_recalcul_page' => 'Si quies recalcular una sola páxina, pasa meyor pel espaciu públicu y calca nel botón «recalcular».', - 'texte_recapitiule_liste_documents' => 'Esta páxina recapitula la llista de documentos que tienes allugáos nes estayes. Pa iguar la información de caún de los documentos, sigui l’enllaz a la páxina de la so estaya.', 'texte_recuperer_base' => 'Iguar la base de datos', 'texte_reference_mais_redirige' => 'artículu referenciáu nel to sitiu SPIP, pero redirixíu a otra URL.', 'texte_requetes_echouent' => 'Cuando ciertes consultes SQL fallen @@ -892,7 +768,6 @@ na caché de SPIP. Esto permite por exemplu forzar un recálculu de toes les pá vienes de facer cambéos importantes nel grafismu o na estructura del sitiu.', 'texte_sur_titre' => 'Antetítulu', 'texte_table_ok' => ': esta tabla ta bién.', - 'texte_tables_indexation_vides' => 'Les tables d’indexación del motor tan vacíes.', 'texte_tentative_recuperation' => 'Intentu d’igua', 'texte_tenter_reparation' => 'Tentar una reparación de la base de datos', 'texte_test_proxy' => 'Pa facer una preba d’esti proxy, conseña equí les señes d’un sitiu Web @@ -907,26 +782,8 @@ vienes de facer cambéos importantes nel grafismu o na estructura del sitiu.', Esta opción ta desactivada por omisión pa evitar l’apaición de mensaxes d’avisu intempestivos.', - 'texte_trop_resultats_auteurs' => 'Abondos resultaos pa "@cherche_auteur@" ; has d’afinar la gueta.', - 'texte_unpack' => 'descarga de la versión cabera', - 'texte_utilisation_moteur_syndiques' => 'Cuando uses el motor de restolar integráu en - SPIP, puedes facer les guetes nos sitios webs y - nos artículos sindicaos de dos maneres - diferentes.
    - La más - cenciella consiste en restolar namái ente los - títulos y descriciones de los artículos.
    - - Un segundu métodu, muncho más potente, permíte-y - a SPIP restolar ente’l testu de los llugares - referenciaos. Si referencies - un sitiu web, SPIP va restolar tamién ente’l - testu d’esi sitiu web.', - 'texte_utilisation_moteur_syndiques_2' => 'Esti métodu obliga a que SPIP visite - regularmente los sitios referenciaos, - lo que pue provocar una lixera lentitú del propiu - sitiu.', 'texte_vide' => 'vacíu', 'texte_vider_cache' => 'Vaciar la caché', - 'titre_admin_effacer' => 'Mantenimientu técnicu', 'titre_admin_tech' => 'Mantenimientu técnicu', 'titre_admin_vider' => 'Mantenimientu técnicu', 'titre_ajouter_un_auteur' => 'Amestar un autor', @@ -956,54 +813,27 @@ vienes de facer cambéos importantes nel grafismu o na estructura del sitiu.', 'titre_naviguer_dans_le_site' => 'Ñavegar pol sitiu Web...', 'titre_nouvelle_rubrique' => 'Estaya nueva', 'titre_numero_rubrique' => 'ESTAYA NÚMBERU:', - 'titre_page_admin_effacer' => 'Mantenimientu téunicu: esborrar la base', 'titre_page_articles_edit' => 'Camudar: @titre@', 'titre_page_articles_page' => 'Los artículos', 'titre_page_articles_tous' => 'Tou el sitiu', - 'titre_page_auteurs' => 'Visitantes', 'titre_page_calendrier' => 'Axenda de @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Configuración del sitiu', - 'titre_page_config_fonctions' => 'Configuración del sitiu', - 'titre_page_configuration' => 'Configuración del sitiu', - 'titre_page_controle_petition' => 'Siguimientu de les solicitudes', 'titre_page_delete_all' => 'desaniciu total e irreversible', - 'titre_page_documents_liste' => 'Los documentos de les estayes', - 'titre_page_index' => 'El to espaciu priváu', - 'titre_page_message_edit' => 'Redactar un mensaxe', - 'titre_page_messagerie' => 'La to mensaxería', 'titre_page_recherche' => 'Resultaos de la gueta @recherche@', 'titre_page_statistiques_referers' => 'Estadístiques (enllaces entrantes)', - 'titre_page_statistiques_signatures_jour' => 'Númberu de robles por día', - 'titre_page_statistiques_signatures_mois' => 'Númberu de robles por mes', 'titre_page_upgrade' => 'Actualización de SPIP', 'titre_publication_articles_post_dates' => 'Publicación d’artículos con fecha posterior', - 'titre_referencer_site' => 'Referenciar el sitiu:', - 'titre_rendez_vous' => 'CITES:', 'titre_reparation' => 'Igua', 'titre_suivi_petition' => 'Siguimientu de les solicitudes', 'tls_ldap' => 'Transport Layer Security (TLS):', - 'trad_article_inexistant' => 'Nun hay dengún artículu con esi númberu.', 'trad_article_traduction' => 'Toles versiones d’esti artículu:', - 'trad_deja_traduit' => 'Fallu: nun ye posible rellacionar esti artículu col númberu pidíu. ', 'trad_delier' => 'Ya nun enllazar esti artículu coles sos traduciones ', # MODIF 'trad_lier' => 'Esti artículu ye una tradución del artículu númberu:', 'trad_new' => 'Escribir una nueva torna d’esti artículu', # MODIF // U - 'upload_info_mode_document' => 'Dexar esta imaxe nel maletu', - 'upload_info_mode_image' => 'Desaniciar esta imaxe del maletu', - 'utf8_convert_attendez' => 'Espera dellos instantes y recarga esta páxina.', - 'utf8_convert_avertissement' => 'Dispóneste a convertir el conteníu de la to base de datos (artículos, breves, etc) del xuegu de carauteres @orig@ al xuegu de carauteres @charset@.', - 'utf8_convert_backup' => 'Nun escaezas de facer enantes una copia de seguridá completa del to sitiu. También tendríes que verificar si les cadarmes y archivos de llingües son compatibles con @charset@.', - 'utf8_convert_erreur_deja' => 'Esti sitiu ya ta en @charset@, ye inútil facer la conversión...', 'utf8_convert_erreur_orig' => 'Error: el xuegu de carautéres @charset@ nun ta soportáu.', - 'utf8_convert_termine' => '¡Terminose!', - 'utf8_convert_timeout' => 'Importante: en casu de timeout del sirvidor, tendrás que recargar la páxina mientres que nun apaeza «terminao».', - 'utf8_convert_verifier' => 'Agora tienes que vaciar la caché, y verificar que too se vea bien nes páxines públiques del sitiu. En casu de problemes graves, fízose una copia de seguridá de los datos (en formatu SQL) nel direutoriu @rep@.', - 'utf8_convertir_votre_site' => 'Convertir esti sitiu a utf-8', // V 'version' => 'Versión:' ); - -?> diff --git a/www/ecrire/lang/ecrire_ay.php b/www/ecrire/lang/ecrire_ay.php index 5825aad9..2659fe54 100644 --- a/www/ecrire/lang/ecrire_ay.php +++ b/www/ecrire/lang/ecrire_ay.php @@ -1,9 +1,11 @@ 'Nayrir laphi uñnaqar kutt’am ukatsti jikit yatiyawinak qhanstayam.', 'avis_connexion_ldap_echec_3' => 'Mayakipawjam, askichir ukax jan apnaqamti LDAP apnaqirinak apayaniñataki.', 'avis_deplacement_rubrique' => '¡AMUYAM! Aka t’aqan utjiwa @contient_breves@ breve@scb@. Janitix yäqtaxa, iyaw sat casilla uk naktayam.', - 'avis_destinataire_obligatoire' => 'Mä yatiyaw qatuqir uñachayam janir aka yatiyaw apaykasa.', 'avis_erreur_connexion_mysql' => 'Chinuw pantjata MySQL', - 'avis_espace_interdit' => 'Ch’usawx jark’ata
    SPIP ukax uchantataxiwa
    ', + 'avis_espace_interdit' => 'Ch’usawx jark’ata
    SPIP ukax uchantataxiwa
    ', 'avis_lecture_noms_bases_1' => 'Uchantat pirwa yatiyawinakatxa uchantir prugramaxa janiw liykiti.', 'avis_lecture_noms_bases_3' => 'Payir lurawinxa, inas mä pirwa apnaqiri sutimampi apnaqasispa:', - 'avis_non_acces_message' => 'Aka yatiyawirux janiw mantañaniktati.', 'avis_non_acces_page' => 'Aka laphi uñnaqarux janiw mantañaniktati.', 'avis_operation_echec' => 'Lurawix janiw walt’kiti.', 'avis_operation_impossible' => 'Lurawix janipuni', - 'avis_probleme_archive' => 'Q’ipitxa jan wali liyt’añataki @archive@', 'avis_suppression_base' => '¡AMUYAM, apaqat yatiyawinakax janiw askichaskaspati!', - 'avis_version_mysql' => 'Uñjatamaxa MySQL (@version_mysql@) uyu uyunakat pirwanxa janiw justup askichaw munkiti.', // B 'bouton_acces_ldap' => 'Mä mantaw yapaña LDAP', 'bouton_ajouter' => 'Yapaña', - 'bouton_ajouter_participant' => 'MÄ ARSUSIR YAPAÑA:', - 'bouton_annonce' => 'YATIYAWI', 'bouton_annuler' => 'Jiwt’ayaña', - 'bouton_checkbox_envoi_message' => 'Inas mä yatiyaw apayaña', - 'bouton_checkbox_indiquer_site' => 'Mä Web qamawi uñachayapunima', - 'bouton_checkbox_signature_unique_email' => 'aruskipayirit mä iyawsaki', - 'bouton_checkbox_signature_unique_site' => 'Web qamawit mä iyawsaki', 'bouton_demande_publication' => 'Aka qillqat yatiyañ mayiña', 'bouton_desactive_tout' => 'Taqpach jiwt’ayaña', - 'bouton_effacer_index' => 'Utjirinaka chhaqhayaña', 'bouton_effacer_tout' => '¡Taqpach chhaqhayaña!', - 'bouton_envoi_message_02' => 'MÄ YATIYAWI', 'bouton_envoyer_message' => 'Qhananchat yatiyaw: apayaña', 'bouton_modifier' => 'Mayjachaña', - 'bouton_pense_bete' => 'SAPA MAYNIT AMTAYIRI', - 'bouton_radio_activer_messagerie' => 'Manqhat yatiyawiri naktayaña', - 'bouton_radio_activer_messagerie_interne' => 'Manqhat yatiyawiri naktayaña', - 'bouton_radio_activer_petition' => 'Mayiwix naktayaña', 'bouton_radio_afficher' => 'Uñachayaña', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Chint’at tanta qillqirinakan uñstaña', - 'bouton_radio_desactiver_messagerie' => 'yatiyawir jiwt’aña', 'bouton_radio_envoi_annonces_adresse' => 'Yatiyawinak utjawir apayaña:', 'bouton_radio_envoi_liste_nouveautes' => 'Machaq tanta yatiyawinak apayaña', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Tanta qillqirinakan jan uñstaña', 'bouton_radio_non_envoi_annonces_editoriales' => 'Yatiyawinak qhanstat jan apayaña', - 'bouton_radio_pas_petition' => 'Jan mayiyawimpi', - 'bouton_radio_petition_activee' => 'Mayiyaw naktata', - 'bouton_radio_supprimer_petition' => 'Mayiwi apaqaña', 'bouton_redirection' => 'Irpxatawi', 'bouton_relancer_installation' => 'Mayamp uchantaw yatiyaña', 'bouton_suivant' => 'Jutiri', 'bouton_tenter_recuperation' => 'Askichañ yant’aña', 'bouton_test_proxy' => 'proxy uk yant’aña', 'bouton_vider_cache' => 'caché uk ch’usachaña', - 'bouton_voir_message' => 'Janir apbbaykasinxa yatiyaw uñjaña -', // C - 'cache_mode_compresse' => 'Cache ukat q’ipinakaxa jitthapit ukham imasi.', - 'cache_mode_non_compresse' => 'Cache ukat q’ipinakaxa jan jitthapit imasi.', 'cache_modifiable_webmestre' => 'Aka amuykipawix mayxt’ataspaw webmistress qamawit ukata.', // D @@ -105,7 +83,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_liens_sites' => 'Chinu jach’a sawu (aytata, qamaw tumpañataki, ...)', 'entree_login' => 'Sutichatama', 'entree_login_connexion_1' => 'Chinu uñacht’ayirima', - 'entree_login_ldap' => 'Login LDAP qalltawi', 'entree_mot_passe' => 'Imt’awima', 'entree_mot_passe_1' => 'Chinu imt’awima', 'entree_mot_passe_2' => '(Awisax FTP imt’atamar ukankiwa ukatsti awisax ch’usak jayti)', @@ -133,7 +110,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'Aka taqpach lurawinakxat juk’amp yatxatañatakix, yatxatañatakix jan pächasimti illqanakawi.', # MODIF 'ical_info_calendrier' => 'Pä pachachimpuw utjtam. Mayirix qamawit mä laphi uñnaqawa kunanti taqpach yatiyat qillqatank yatiyi: jumakiw uñjtax uka mä suti imt’awi ukata, ukatxa mayjt’ayasmaw kuna pachtix munktax ukja imt’awim mayjt’ayasa.', 'ical_methode_http' => 'Apaqaña', - 'ical_methode_webcal' => 'Kikipawi (webcal://)', + 'ical_methode_webcal' => 'Kikipawi (webcal://)', # MODIF 'ical_texte_js' => 'Javascript mä siqix ukhamakiw uñachayatam, kawkirs jumankir qamawina, jichhaki yatiyat qillqatanak aka qamawina ', 'ical_texte_prive' => 'Aka sapa maynit pacha chimpuxa, aka qamawit jark’ata lurawinak yatiytam (lurawinaka ukatsti sapa maynit aytatanaka, qillqatanaka ukatsti jisk’aptat amtanaka...)', 'ical_texte_public' => 'Aka pacha chimpux uñchukiytam qamawit lurawinaka (qillqatanak ukatsti jisk’aptatanak yatiyata).', @@ -149,9 +126,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_calendrier' => 'Pachachimpu', 'icone_creer_auteur' => 'Mä machaq qillqiri uñstayaña ukatsti aka qillqatar mayacht’aña', 'icone_creer_rubrique_2' => 'Mä machaq t’aqa uñstayaña', - 'icone_envoyer_message' => 'Yatiyawi apayaña', 'icone_modifier_article' => 'Aka qillqata mayjt’ayaña', - 'icone_modifier_message' => 'Aka yatiyawi mayjt’ayaña', 'icone_modifier_rubrique' => 'Aka t’aqa mayjt’ayaña', 'icone_retour' => 'Kutiña', 'icone_retour_article' => 'Qillqatar kutiña', @@ -161,10 +136,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'Aka iyaws iyaw saña', 'image_administrer_rubrique' => 'Aka t’aqa apnaqasmawa', 'info_1_article' => '1 qillqata', - 'info_1_site' => '1 qamawi -', - 'info_admin_gere_rubriques' => 'Jutir t’aqanakxa aka jaqiw apnaqi:', - 'info_admin_gere_toutes_rubriques' => 'Aka apnaqiriw apnaqi taqpacha apnaqi.', # MODIF 'info_administrateur' => 'Apnaqiri', 'info_administrateur_1' => 'Apnaqiri', 'info_administrateur_2' => 'Qamawita (amuyump luram)', @@ -173,12 +144,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'Aka t’aqxa apnaqasmawa', 'info_adresse' => 'utjawiru:', 'info_adresse_url' => 'Utjawi (URL) jach’a qamaw utata', - 'info_afficher_visites' => 'Tumpirinak uñachayaña ukataki:', 'info_aide_en_ligne' => 'SPIP naktatat yanapa', - 'info_ajout_participant' => 'Jutir arst’iri yäqatawa:', 'info_ajouter_rubrique' => 'Apnaqañatakix yaqha t’aqa yapaña', 'info_annonce_nouveautes' => 'Machaq yatiyawinaka yatiyaña', - 'info_anterieur' => 'nayriri', 'info_article' => 'qillqata ', 'info_article_2' => 'qillqatanaka', @@ -187,10 +155,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_2' => 'Qillqatanaka', 'info_articles_auteur' => 'Aka qillqirit qillqatanaka', 'info_articles_trouves' => 'Qillqatanak jikita', - 'info_articles_trouves_dans_texte' => 'Jikit qillqatanak (sawutana)', 'info_attente_validation' => 'Qillqatanakax iyaw sañataki suyaski', 'info_aujourdhui' => 'jichhüru:', - 'info_auteur_message' => 'YATIYAW QILLQIRI:', + 'info_auteur_gere_toutes_rubriques_2' => 'Je gère toutes les rubriques', # MODIF 'info_auteurs' => 'Qillqirinaka', 'info_auteurs_par_tri' => 'Qillqirinaka@partri@', 'info_auteurs_trouves' => 'Qillqirinaka jikita', @@ -222,14 +189,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Nayrt’ir uru aka qillqawita', 'info_date_referencement' => 'APXASIW URU AKA QAMAWITA:', 'info_derniere_etape' => 'Qhipa sarawi: ¡tukuytanwa!', - 'info_derniers_articles_publies' => 'Qhipa yatiyat qillqatanakama', - 'info_desactiver_messagerie_personnelle' => 'Aka qamawinxa juman yatiyawirima naktayasmaw jiwt’ayarakismaw', 'info_descriptif' => 'Uñt’ayawi:', 'info_discussion_cours' => 'Amuyt’awinakax lurasiskiw', 'info_ecrire_article' => 'Janir qillqatanak qillqasinxa, mä t’aqa uñstayañamawa.', 'info_email_envoi' => 'Apaw aruskipayirit utjawipa (ajlliñatakiwa)', 'info_email_webmestre' => 'Aruskipayirit utjawipa webmaster ukata (ajlliñatakiwa)', # MODIF - 'info_entrer_code_alphabet' => 'Qillqa chimputampi lurkatax uk uchantam', 'info_envoi_email_automatique' => 'Aruskipayirinakat justup apayawi', 'info_envoyer_maintenant' => 'Jichhaki apayaña', 'info_etape_suivante' => 'Arkir sarawir sarantaña', @@ -239,20 +203,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_facilite_suivi_activite' => 'Qillqa lurawit uñch’ukiw jasachañatakix, SPIP ukax aruskipayirit apayaspa, mä tanta qillqirinakar ukhama yatiyatawinakataki yatiyawinaka ukatak mayiwinaka, ukhamarak qillqatanakat iyaw sawi.', 'info_fichiers_authent' => 'Chiqpach sirit q’ipinaka «.htpasswd» ', 'info_forums_abo_invites' => 'Qamawimax aruskipañawinakaniw qullqimp qillqatanakatakikiwa; Aka jach’a uta qamawinxa tumpirinakaru qillqayasiñataki jawthapiyi.', - 'info_gauche_admin_effacer' => 'Aka Web qamawix qamawit apnaqirinakatakikiwa.

    Mantayiwa kunayman uñjawinakar askichañataki. Yaqhipanakax

    ', # MODIF 'info_gauche_auteurs' => 'Akanxa taqpach qamawit qillqirinakaw uñsti. Kunjamaskis ukxa jisk’a saltan kulurapampiw uñacht’ayi (apnaqiri = ch’uxña, qillqiri = q’illu).', 'info_gauche_auteurs_exterieurs' => 'Anqajankir qillqirinakax, qamawir jan mantañaniwa, mä laram jisk’a saltampiw uñacht’ayataski; mä wayaqamp chhaqayatakis.', # MODIF 'info_gauche_messagerie' => 'Yatiyawirix yatiyasiwa, amtayirinak uñstyaña yatiyaw tantaru kuns apaniñapataki jan ukjax yatiyawinak yatiyaña ( apnaqir qutu ukar mayachatakis ukjax) ', - 'info_gauche_numero_auteur' => 'JAKHU QILLQIRINAKA', 'info_gauche_statistiques_referers' => 'Aka Web qamawix tantanak uñicht’ayi <i>referers</i>, qamawinakan chinunak utjkis ukhamarak juman qamawimar apapxi, masurutakiki ukhamarak jichhurutakiki; aka tantaxa sapa pä tunka urasanaka ch’usaru uskuña.', 'info_gauche_visiteurs_enregistres' => 'Akanxa jach’a qamaw utan qillqatanakakiw jikxatasi (aruskipañawinak qillqayasiyampi)', - 'info_gerer_trad' => '¿Jaqukiptaw chinunak apnaqaña?', - 'info_historique_activer' => 'Uñakipawinakat uñch’ukiwi naktaña', - 'info_historique_affiche' => 'Aka uñjat uñachayaña', - 'info_historique_comparaison' => 'kikipawi', - 'info_historique_desactiver' => 'Uñakipawinakat uñch’ukiwi jiwt’ayaña', 'info_identification_publique' => 'Uñacht’ayawima...' ); - -?> diff --git a/www/ecrire/lang/ecrire_bg.php b/www/ecrire/lang/ecrire_bg.php index 6f3b08c1..594d9fea 100644 --- a/www/ecrire/lang/ecrire_bg.php +++ b/www/ecrire/lang/ecrire_bg.php @@ -1,9 +1,11 @@ 'Моля, върнете се на предишната страница, за за проверите подадената информация.', 'avis_connexion_ldap_echec_3' => 'Без използване на LDAP-поддръжка за вписване на потребители.', 'avis_deplacement_rubrique' => 'Предупреждение! Рубриката съдържа @contient_breves@ новина@scb@: ако желаете да я преместите, отметнете в полето за потвърждение. ', - 'avis_destinataire_obligatoire' => 'Трябва да укажете получател, преди да изпратите съобщението.', 'avis_erreur_connexion_mysql' => 'Грешка при свързване с SQL', - 'avis_erreur_version_archive' => 'Внимание! Файлът @archive@ отговаря на - различна версия на СПИП от тази, която имате - инсталирана. Това води до големи проблеми: - има риск от разрушаване на базата данни, от - нарушаване функциите на сайта и т.н. Не изпращайте - тази заявка за вписване.

    За повече - информация се обръщайте към - документацията на СПИП.', # MODIF - 'avis_espace_interdit' => 'Забранена област

    СПИП е вече инсталиран.', + 'avis_espace_interdit' => 'Забранена област

    СПИП е вече инсталиран.', # MODIF 'avis_lecture_noms_bases_1' => 'Инсталаторът не може да прочете имената на инсталираните бази данни.', 'avis_lecture_noms_bases_2' => 'Или не съществува база данни, или свойството, позволяващо преглед на базите данни е забранено поради съображения за сигурност (какъвто е случаят с много доставчици).', 'avis_lecture_noms_bases_3' => 'Ако втората възможност се окаже вярна, тогава е възможно да се използва базата данни, указана след Вашето влизане в системата.', - 'avis_non_acces_message' => 'Забранен достъп до съобщението.', 'avis_non_acces_page' => 'Забранен достъп до тази страница.', 'avis_operation_echec' => 'Операцията пропадна.', - 'avis_probleme_archive' => 'Грешка при четене на файла @archive@', 'avis_suppression_base' => 'ПРЕДУПРЕЖДЕНИЕ: изтриването на данните е необратимо', - 'avis_version_mysql' => 'С Вашата SQL версия: (@version_mysql@) е невъзможно да се осъществи автоматична поправка в таблиците с бази данни.', // B 'bouton_acces_ldap' => 'Добавяне достъп до LDAP >>', 'bouton_ajouter' => 'Добавяне', - 'bouton_ajouter_participant' => 'ДОБАВЯНЕ НА УЧАСТНИК:', - 'bouton_annonce' => 'СЪОБЩЕНИЕ', - 'bouton_checkbox_envoi_message' => 'възможност за изпращане на съобщение', - 'bouton_checkbox_indiquer_site' => 'Моля, впишете името на Интернет сайт', - 'bouton_checkbox_signature_unique_email' => 'позволен е само един запис на електронен адрес', - 'bouton_checkbox_signature_unique_site' => 'позволен е само един запис на Интернет сайт', 'bouton_demande_publication' => 'Заявка за публикуване на статията', 'bouton_desactive_tout' => 'Деактивирайте всички', - 'bouton_effacer_index' => 'Изтриване на индекси', 'bouton_effacer_tout' => 'Изтриване на ВСИЧКО', - 'bouton_envoi_message_02' => 'ИЗПРАЩАНЕ НА СЪОБЩЕНИЕ', 'bouton_envoyer_message' => 'Последно съобщение: изпращане', 'bouton_modifier' => 'Промяна', - 'bouton_pense_bete' => 'ЛИЧНА БЕЛЕЖКА', - 'bouton_radio_activer_messagerie' => 'Позволяване на система за вътрешни съобщения', - 'bouton_radio_activer_messagerie_interne' => 'Позволяване на система за вътрешни съобщения', - 'bouton_radio_activer_petition' => 'Активиране на молбата', 'bouton_radio_afficher' => 'Показване', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Добяване към списъка на текущо свързаните редактори', - 'bouton_radio_desactiver_messagerie' => 'Без система за съобщения', 'bouton_radio_envoi_annonces_adresse' => 'Изпращане на съобщения до следния адрес:', 'bouton_radio_envoi_liste_nouveautes' => 'Изпращане на списък с новини', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Изключване от списъка на текущо свързаните редактори', 'bouton_radio_non_envoi_annonces_editoriales' => 'Отказ от изпращане на редакторски съобщения', - 'bouton_radio_pas_petition' => 'Без молба', - 'bouton_radio_petition_activee' => 'Молбата е активирана', - 'bouton_radio_supprimer_petition' => 'Изтриване на молбата', 'bouton_redirection' => 'ПРЕНАСОЧВАНЕ', 'bouton_relancer_installation' => 'Подновяване на инсталацията', 'bouton_suivant' => 'По-нататък', 'bouton_tenter_recuperation' => 'Опит за възстановяване', 'bouton_test_proxy' => 'Тестване на прокси', 'bouton_vider_cache' => 'Изпразване на кеш-паметта', - 'bouton_voir_message' => 'Преглед на съобщението преди одобряване за публикуване', // C - 'cache_mode_compresse' => 'Кеш-файловете са запазени в компресиран вид.', - 'cache_mode_non_compresse' => 'Кеш-файловете са записани в некомпресиран вид.', 'cache_modifiable_webmestre' => 'Параметърът може да бъде променен от уеб-администратора. ', 'calendrier_synchro' => 'Ако инсталирате приложение за дневник, съвместимо с iCal, ще можете да го синхронизирате с информацията от сайта.', @@ -111,7 +82,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Вход', 'entree_login_connexion_1' => 'Потребителско име за свързване', 'entree_login_connexion_2' => '(Понякога съвпада с Вашето потребителско име към FTP достъпа, понякога се оставя празно)', - 'entree_login_ldap' => 'Начален вход за LDAP', 'entree_mot_passe' => 'Парола', 'entree_mot_passe_1' => 'Парола за свързване', 'entree_mot_passe_2' => '(Понякога съвпада с паролата Ви за FTP-достъп, понякога се оставя празно)', @@ -138,7 +108,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'За повече информация, отидете на Документация за СПИП.', # MODIF 'ical_info_calendrier' => 'Имате на разположение два календара. Първият е карта на сайта, указваща всички публикувани статии. Вторият съдържа обявления за редакторите, както и най-новите лични съобщения до Вас. Този календар се показва само на Вас, благодарение на личнен ключ, който можете да променяте по всяко време чрез смяна на паролата.', 'ical_methode_http' => 'Сваляне', - 'ical_methode_webcal' => 'Синхронизация (webcal://)', + 'ical_methode_webcal' => 'Синхронизация (webcal://)', # MODIF 'ical_texte_js' => 'Един ред на скрипт Java позволява на всяка страница от сайта лесно да се показват най-новите публикувани статии.', 'ical_texte_prive' => 'Календарът е строго личен. Той уведомява за вътрешните редакторски дейности на сайта (напр. задачи, лични срещи, изпратени статии и новини и др.)', 'ical_texte_public' => 'Календарът Ви дава възможност да следите публичните дейности на сайта (напр. публикувани статии и новини).', @@ -155,9 +125,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_creer_auteur' => 'Създаване на автор и свързване със статията', 'icone_creer_mot_cle' => 'Създаване на ключова дума и свързване със статията', 'icone_creer_rubrique_2' => 'Създаване на рубрика', - 'icone_envoyer_message' => 'Изпращане на съобщението', 'icone_modifier_article' => 'Промяна на статията', - 'icone_modifier_message' => 'Промяна на съобщението', 'icone_modifier_rubrique' => 'Промяна на рубриката', 'icone_retour' => 'Обратно', 'icone_retour_article' => 'Обратно към статията', @@ -167,11 +135,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'Одобряване на записа', 'image_administrer_rubrique' => 'Управление на рубриката', 'info_1_article' => '1 статия', - 'info_1_site' => '1 сайт', 'info_activer_cookie' => 'Възможност за активиране на cookie администриране, което позволява улеснено превключване между публичния сайт и личната зона.', - 'info_admin_gere_rubriques' => 'Този администратор управлява следните рубрики:', - 'info_admin_gere_toutes_rubriques' => 'Този администратор управлява всички рубрики.', # MODIF 'info_administrateur' => 'Администратор', 'info_administrateur_1' => 'Администратор', 'info_administrateur_2' => 'на сайта (внимавайте)', @@ -181,16 +146,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'Вие можете да управлявате рубриката', 'info_adresse' => 'към адрес:', 'info_adresse_url' => 'Публичен URL на сайта ', - 'info_afficher_visites' => 'Показване на посещения за:', 'info_aide_en_ligne' => 'Помощник', 'info_ajout_image' => 'Когато се добавят изображения под формата на приложени документи към статия, СПИП автоматично създава умалени образи (винетки) на поместените изображения. Това позволява, например да се създаде автоматично галерия от изображения.', - 'info_ajout_participant' => 'Добавен е следният участник:', 'info_ajouter_rubrique' => 'Добавяне на друга рубрика за управление:', 'info_annonce_nouveautes' => 'Най-новите съобщения', - 'info_anterieur' => 'предварителен', 'info_article' => 'статия', 'info_article_2' => 'статии', 'info_article_a_paraitre' => 'Статии за одобрение със стара дата ', @@ -198,10 +160,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_2' => 'Статии', 'info_articles_auteur' => 'Статиите на автора', 'info_articles_trouves' => 'Намерени статии', - 'info_articles_trouves_dans_texte' => 'Намерени статии (в текста)', 'info_attente_validation' => 'Вашите статии, очакващи одобрение за публикуване', 'info_aujourdhui' => 'днес:', - 'info_auteur_message' => 'ИЗПРАЩАЧ:', + 'info_auteur_gere_toutes_rubriques_2' => 'Je gère toutes les rubriques', # MODIF 'info_auteurs' => 'Автори', 'info_auteurs_par_tri' => 'Автори@partri@', 'info_auteurs_trouves' => 'Намерени автори', @@ -234,15 +195,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Дата на предишно публикуване:', 'info_date_referencement' => 'ДАТА НА СВЪРЗВАНЕ НА САЙТА:', 'info_derniere_etape' => 'Последна стъпка: Приключено!', - 'info_derniers_articles_publies' => 'Вашите най-нови публикувани статии', - 'info_desactiver_messagerie_personnelle' => 'От тази страница можете да включите/ изключите системата за изпращане на лични съобщения.', 'info_descriptif' => 'Описание:', 'info_discussion_cours' => 'Дискусии в ход', 'info_ecrire_article' => 'Преди да започнете за пишете статии, трябва да създадете поне една рубрика.', 'info_email_envoi' => 'Електронен адрес на изпращача (по желание)', 'info_email_envoi_txt' => 'Впишете електронния адрес на изпращача, който използвате (по подразбиране, адресът на получателя ще се използва за адрес на изпращача):', 'info_email_webmestre' => 'Електронен адрес на уеб-администратора (незадължителен)', # MODIF - 'info_entrer_code_alphabet' => 'Въвеждане на кода на азбуката, която ще бъде използвана:', 'info_envoi_email_automatique' => 'Автоматично изпращане на съобщение', 'info_envoyer_maintenant' => 'Изпращане', 'info_etape_suivante' => 'Преминете към следващата стъпка', @@ -256,7 +214,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( ', 'info_fichiers_authent' => 'Файл за удостоверяване автентичността: „.htpasswd“', 'info_forums_abo_invites' => 'Сайтът Ви съдържа форуми посредством предварителен абонамент; посетителите могат да се регистират за тях през публичния сайт.', - 'info_gauche_admin_effacer' => 'Само администратори имат достъп до тази страница.

    Тя осигурява достъп до различни технически задачи за поддръжка. Някои от тях позволяват специфичен процес на идентификация и изискват FTP достъп до сайта.', # MODIF 'info_gauche_admin_tech' => 'Само администратори имат достъп до тази страница.

    Тя осигурява достъп до различни технически задачи за поддръжка. Някои от тях позволяват специфичен процес на идентификация и изискват FTP достъп до сайта.', # MODIF @@ -267,21 +224,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( Статусът на всеки от тях е обозначен с цвета на неговата икона (редактор - жълта; администратор - зелена).', 'info_gauche_auteurs_exterieurs' => 'Външни автори, без достъп до сайта, са обозначени със синя икона; изтритите автори - с кошче за боклук.', # MODIF 'info_gauche_messagerie' => 'Изпращането на съобщения позволява да се обменя информация между редакторите, да се съхраняват бележки (за лично ползване) или да се публикуват обяви в началната страница на личната зона (ако сте администратор).', - 'info_gauche_numero_auteur' => 'НОМЕР НА АВТОРА:', 'info_gauche_statistiques_referers' => 'Тази страница показва списък с препратки към сайтове: т.е. сайтовете, съдържащи връзка към Вашия сайт, само за вчера и днес: този списък се акуализира на всеки 24 часа.', 'info_gauche_visiteurs_enregistres' => 'Тук ще намерите посетителите, регистрирани в публичната зона на сайта (форумите са с предварително записване).', 'info_generation_miniatures_images' => 'Генерирана на умалени образи на изображенията', - 'info_gerer_trad' => 'Управление на връзките с преводи?', 'info_hebergeur_desactiver_envoi_email' => 'Някои доставчици не позволяват изпращането на автоматични съобщения от техните сървъри. В този случай, следните свойства на СПИП не работят:', 'info_hier' => 'вчера:', - 'info_historique_activer' => 'Активиране проследяването на преработките', - 'info_historique_affiche' => 'Показване на версията', - 'info_historique_comparaison' => 'сравнение', - 'info_historique_desactiver' => 'Дезактивиране проследяването на преработките', - 'info_historique_texte' => 'Проследяването на корекциите позволява да се прави справка на всички промени, направени на статията и да показва различията между последващите версии.', 'info_identification_publique' => 'Публична самоличност...', 'info_image_process' => 'Изберете най-удобният начин да създавате миниатюри, чрез натискане въру съответната картинка.', 'info_image_process2' => 'N.B. Ако не можете да видите никакво изображение, следователно сървърът Ви не е конфигуриран да използва такива инструменти. Ако искате да ползвате това свойство, трябва да се свържете с доставчика си и да поискате да ви инсталират разширения от типа "GD" или "Imagick"', # MODIF @@ -299,8 +249,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_login_trop_court' => 'Потребителското име е твърде кратко.', 'info_maximum' => 'максимум:', 'info_meme_rubrique' => 'В същата рубрика', - 'info_message' => 'Съобщение от', - 'info_message_efface' => 'СЪОБЩЕНИЕТО Е ИЗТРИТО', 'info_message_en_redaction' => 'Съобщения в процес на обработка', 'info_message_technique' => 'Техническо съобщение:', 'info_messagerie_interne' => 'Система за вътрешни съобщения', @@ -313,20 +261,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'Промяна на настройките на рубриката:', 'info_modifier_titre' => 'Промяна: @titre@', 'info_mon_site_spip' => 'Моят сайт под СПИП', - 'info_mot_sans_groupe' => '(Ключови думи извън групите...)', - 'info_moteur_recherche' => 'Интегрирана търсачка', 'info_moyenne' => 'средно:', - 'info_multi_articles' => 'Да се активира ли езиково меню за статиите?', 'info_multi_cet_article' => 'Език на статията:', 'info_multi_langues_choisies' => 'Изберете по-долу езиците, които желаете да са активни за редакторите на сайта. Езиците, които вече са използвани в сайта (в началото на списъка) не могат да бъдат деактивирани.', - 'info_multi_rubriques' => 'Да се активира ли езиковото меню за рубриките?', 'info_multi_secteurs' => ' ... само за рубрики, намиращи се в схемата?', 'info_nom' => 'Име', 'info_nom_destinataire' => 'Име на получателя', 'info_nom_site' => 'Име на сайта Ви', 'info_nombre_articles' => '@nb_articles@ статии,', - 'info_nombre_partcipants' => 'УЧАСТНИЦИ В ДИСКУСИЯТА:', 'info_nombre_rubriques' => '@nb_rubriques@ рубрики,', 'info_nombre_sites' => '@nb_sites@ сайтове,', 'info_non_deplacer' => 'Не правете нищо...', @@ -336,36 +279,26 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_modifiable' => 'промяната е невъзможна', 'info_non_suppression_mot_cle' => 'Отказ от изтриване на ключовата дума.', 'info_notes' => 'Бележки под линия', - 'info_nouveaux_message' => 'Нови съобщения', 'info_nouvel_article' => 'Нова статия', 'info_nouvelle_traduction' => 'Нов превод:', 'info_numero_article' => 'НОМЕР НА СТАТИЯТА:', 'info_obligatoire_02' => '[Задължително]', # MODIF 'info_option_accepter_visiteurs' => 'Позволяване регистрацията на посетители от публичния сайт', - 'info_option_faire_suivre' => 'Препраща съобщения от форума към автора на статията', 'info_option_ne_pas_accepter_visiteurs' => 'Отказ за регистрация на посетител', 'info_options_avancees' => 'ПОДРОБНИ ОПЦИИ', - 'info_ortho_activer' => 'Активиране на програмата за проверка на правописа.', - 'info_ortho_desactiver' => 'Деактивиране на програмата за проверка на правописа.', 'info_ou' => 'или ...', 'info_page_interdite' => 'Забранена страница', 'info_par_nombre_article' => '(по номер на статията)', 'info_passe_trop_court' => 'Паролата не е достатъчно дълга.', 'info_passes_identiques' => 'Двете пароли не съвадат.', - 'info_pense_bete_ancien' => 'Вашите стари бележки', # MODIF 'info_plus_cinq_car' => 'повече от 5 знака', 'info_plus_cinq_car_2' => '(повече от 5 знака)', 'info_plus_trois_car' => '(повече от 3 знака)', 'info_popularite' => 'популярност: @popularite@; посещения: @visites@', - 'info_popularite_4' => 'популярност: @popularite@; поесещения: @visites@', 'info_post_scriptum' => 'Постскриптум', 'info_post_scriptum_2' => 'Постскриптум:', 'info_pour' => 'за', - 'info_preview_admin' => 'Достъп до предварителния преглед имат само администраторите', - 'info_preview_comite' => 'Всички автори имат достъп до предварителния преглед', - 'info_preview_desactive' => 'Изключване на функцията "предварителен достъп"', - 'info_preview_texte' => 'Възможно е да се прави предварителен преглед на сайта все едно, че всички статии и новини (които имат статус "изпратени") са вече публикувани. Да бъде ли даден достъп към тази функция на администраторите само, да бъде ли възможна за всички автори на сайта или да бъде изключена напълно?', - 'info_principaux_correspondants' => 'Вашите основни кореспонденти', + 'info_preview_texte' => 'Възможно е да се прави предварителен преглед на сайта все едно, че всички статии и новини (които имат статус "изпратени") са вече публикувани. Да бъде ли даден достъп към тази функция на администраторите само, да бъде ли възможна за всички автори на сайта или да бъде изключена напълно?', # MODIF 'info_procedez_par_etape' => 'моля, продължете напред стъпка по стъпка', 'info_procedure_maj_version' => 'процедурата по обновяване трябва да се стартира, за да може базата данни да се адаптира към новата версия на СПИП.', @@ -382,13 +315,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( доставчици спират съобщения, изпратени до техни сървъри: в този случай автоматичната регистрация не би могла да се осъществи.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Желаете ли да използвате търсещата машина под СПИП? - (при отказване действието й увеличавате скоростта на действие на системата.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Схема на сайта', 'info_recharger_page' => 'Моля, презаредете страницата след малко.', - 'info_recherche_auteur_a_affiner' => 'Твърде много намерени резултати за „@cherche_auteur@“; моля, прецизирайте търсенето си.', - 'info_recherche_auteur_ok' => 'Бяха намерени няколко редактора за „@cherche_auteur@“:', 'info_recherche_auteur_zero' => 'Няма намерени резултати за „@cherche_auteur@“.', 'info_recommencer' => 'Моля, опитайте отново.', 'info_redacteur_1' => 'Редактор', @@ -405,7 +334,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'Рубрики', 'info_rubriques_02' => 'рубрики', 'info_rubriques_trouvees' => 'Намерени рубрики', - 'info_rubriques_trouvees_dans_texte' => 'Намерени рубрики (в текста)', 'info_sans_titre' => 'Без заглавие', 'info_selection_chemin_acces' => 'Изберете по-долу път за достъп в директорията:', 'info_signatures' => 'подписи', @@ -418,13 +346,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_sites_lies_mot' => 'Свързани сайтове, асоциирани с ключовата дума', 'info_sites_proxy' => 'Използване на прокси', 'info_sites_trouves' => 'Намерени сайтове', - 'info_sites_trouves_dans_texte' => 'Намерени сайтове (в текста)', 'info_sous_titre' => 'Подзаглавие:', 'info_statut_administrateur' => 'Администратор', 'info_statut_auteur' => 'Статус на автора:', # MODIF 'info_statut_auteur_a_confirmer' => 'Регистрация, предстояща за потвърждение', 'info_statut_auteur_autre' => 'Друг статус:', - 'info_statut_efface' => 'Изтрит', 'info_statut_redacteur' => 'Редактор', 'info_statut_utilisateurs_1' => 'Статус "по подразбиране" на вписаните потребители', 'info_statut_utilisateurs_2' => 'Изберете статус за хората, вписани в LDAP-директорията при свързването им за първи път. По-късно ще можете да променяте тази характеристика за всеки автор по отделно.', @@ -444,7 +370,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_en_redaction' => 'Всички статии в процес на обработка', 'info_tous_articles_presents' => 'Всички статии в рубриката', 'info_tous_les' => 'всички:', - 'info_tous_redacteurs' => 'Съобщения към всички редактори', 'info_tout_site' => 'Целият сайт', 'info_tout_site2' => 'Статията не е преведена на дадения език.', 'info_tout_site3' => 'Статията е преведена на дадения език, но след това са направени промени в основната статия. Преводът изисква актуализация.', @@ -458,7 +383,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_une_rubrique' => 'рубрика,', 'info_une_rubrique_02' => '1 рубрика', 'info_url' => 'URL:', - 'info_url_site' => 'URL на сайта:', 'info_urlref' => 'Препратка в хипертекст:', 'info_utilisation_spip' => 'СПИП вече е готов за използване.', 'info_visites_par_mois' => 'Месечен дисплей:', @@ -475,8 +399,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_activer_messages_avertissement' => 'Активиране на предупредителни съобщения', 'item_administrateur_2' => 'администратор', 'item_afficher_calendrier' => 'Показване в календара', - 'item_autoriser_documents_joints' => 'Одобряване на документи, прикрепени към статии', - 'item_autoriser_documents_joints_rubriques' => 'Одобряване на документи в рубриките', 'item_autoriser_syndication_integrale' => 'Включване на цели статии във файловете за обединяване', 'item_choix_administrateurs' => 'администратори', 'item_choix_generation_miniature' => 'Автоматично генериране на умалени образи.', @@ -484,7 +406,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_choix_redacteurs' => 'редактори', 'item_choix_visiteurs' => 'посетители на публичния сайт', 'item_creer_fichiers_authent' => 'Създаване на файлове от типа .htpasswd', - 'item_limiter_recherche' => 'Ограничаване търсенето на информация, съдържаща се само във Вашия сайт', 'item_login' => 'Потребителско име', 'item_mots_cles_association_articles' => 'статиите', 'item_mots_cles_association_rubriques' => 'рубриките', @@ -493,35 +414,25 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_non_accepter_inscriptions' => 'Забрана на регистрации', 'item_non_activer_messages_avertissement' => 'Без предупредителни съобщения', 'item_non_afficher_calendrier' => 'Без показване в календара', - 'item_non_autoriser_documents_joints' => 'Забрана за одобряване на документи в статии', - 'item_non_autoriser_documents_joints_rubriques' => 'Забрана за одобряване на документи в рубриките', 'item_non_autoriser_syndication_integrale' => 'Изпращане на резюме', 'item_non_creer_fichiers_authent' => 'Забрана за създаване на файловете', - 'item_non_gerer_statistiques' => 'Без управление на статистиката', - 'item_non_limiter_recherche' => 'Разширяване на търсенето в текстове от свързаните сайтове', 'item_non_publier_articles' => 'Забраняване публикуването на статии преди техните дати на публикуване.', - 'item_non_utiliser_moteur_recherche' => 'Без търсачка', 'item_nouvel_auteur' => 'Нов автор', 'item_nouvelle_rubrique' => 'Нова рубрика', 'item_oui' => 'Да', 'item_publier_articles' => 'Публикуване на статиите независимо от техните дати на публикуване.', 'item_reponse_article' => 'Отговор на статията', - 'item_utiliser_moteur_recherche' => 'Използване на търсачката', 'item_visiteur' => 'посетител', // J 'jour_non_connu_nc' => 'непознат', // L - 'lien_ajout_destinataire' => 'Добавяне на получателя', 'lien_ajouter_auteur' => 'Добавяне на автора', - 'lien_ajouter_participant' => 'Добавяне на участник', 'lien_email' => 'Електронен адрес', 'lien_nom_site' => 'ИМЕ НА САЙТА:', 'lien_retirer_auteur' => 'Премахване на автор', - 'lien_retrait_particpant' => 'премахване на участника', 'lien_site' => 'сайт', - 'lien_supprimer_rubrique' => 'изтриване на рубриката', 'lien_tout_deplier' => 'Разширяване на всички', 'lien_tout_replier' => 'Разтваряне на всички', 'lien_trier_nom' => 'Подреждане по име', @@ -556,6 +467,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // R 'repertoire_plugins' => 'Директория:', + 'required' => '[Задължително]', # MODIF // S 'statut_admin_restreint' => '(ограничен администратор)', # MODIF @@ -580,15 +492,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_article_virtuel_reference' => 'Виртуална статия: свързана статия на Вашия СПИП сайт, която се пренасочва към друг URL адрес. За да премахнете пренасочването, изтрийте горепосочения URL.', 'texte_aucun_resultat_auteur' => 'Няма намерен разултат за „@cherche_auteur@“.', 'texte_auteur_messagerie' => 'Сайт може продължително да следи списъка от свързани редактори, което позволява изпращането та съобщения в реално време (ако съобщението е забранено по-горе, тогава целият списък от редактори е забранен). Вие можете да решите да не се появявате в този списък (т.е. да сте „невидим“ за останалите потребители).', - 'texte_auteur_messagerie_1' => 'Този сайт позволява обмен на съобщения и стартиране на форуми за лична дискусия сред участниците на сайта. Вие сами можете да избирате да не участвате в този диалог.', 'texte_auteurs' => 'АВТОРИТЕ', 'texte_choix_base_1' => 'Изберете база данни:', 'texte_choix_base_2' => 'Сървърът SQL съдържа няколко бази данни.', 'texte_choix_base_3' => 'Изберете по-долу това, което доставчикът Ви e разрешил:', - 'texte_commande_vider_tables_indexation' => 'Използвайте тази команда, за да изпразните таблиците с индекси - използвани от търсачката на СПИП. Това ще Ви позволи - да спестите малко място на диска.', - 'texte_compresse_ou_non' => '(може да бъде или да не бъде компресиран)', 'texte_compte_element' => '@count@ елемент', 'texte_compte_elements' => '@count@ елементи', 'texte_connexion_mysql' => 'Погледнете информацията, предоставена от доставчика Ви: ако доставчикът ви поддържа SQL, трябва да са дадени кодовете за връзка със сървъра SQL.', # MODIF @@ -604,10 +511,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_date_publication_anterieure' => 'Дата на предишно публикуване:', 'texte_date_publication_anterieure_nonaffichee' => 'Скриване датата на предишно публикуване.', 'texte_date_publication_article' => 'ДАТА НА ПУБЛИКУВАНЕ В ИНТЕРНЕТ:', - 'texte_descriptif_petition' => 'Описание на молбите', 'texte_descriptif_rapide' => 'Кратко описание', 'texte_effacer_base' => 'Изтриване на базата данни СПИП', - 'texte_effacer_donnees_indexation' => 'Изтриване на данни с индекси', 'texte_en_cours_validation' => 'Изпратени са следните статии със заявка за публикуване. Не се колебайте да дадете мнението си за тях във форума, който е прикрепен към тях. ', # MODIF 'texte_enrichir_mise_a_jour' => 'Можете да обогатите външния вид на текста като използвате «Типографски кратки команди».', 'texte_fichier_authent' => 'Да създаде ли СПИП специални .htpasswd @@ -622,29 +527,18 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_informations_personnelles_2' => '(Забележка: ако това е преинсталация и достъпът Ви все още е активен, можете', # MODIF 'texte_introductif_article' => '(Въведение към статията.)', 'texte_jeu_caractere' => 'Препоръчваме да използвате на сайта универсална кодировка на знаците от азбуката (utf-8), за да може да се показва под формата на текст на всякакъв език. Никой от настоящите Интернет - навигатори нямат проблеми с нея. ', - 'texte_jeu_caractere_2' => 'N.B. Тази настройка няма да промени текста, който е вече запазен в базата от данни. ', 'texte_jeu_caractere_3' => 'Настоящата кодировка на сайта е:', 'texte_jeu_caractere_4' => 'Ако това не отговаря на ситуацията, която имате с данните си (например след възстановяване на базата от данни от архива) или ако правите настройка на сайта си в момента и желаете да използвате различна кодировка на символите, моля да обозначите кодировката тук:', - 'texte_jeu_caractere_conversion' => 'Забележка: Можете да да промените всичките текстове на сайта (статии, новини, форуми и др.) в кодировка на символите utf-8. За целта, преминете към: страница за преобразуване в UTF-8.', - 'texte_lien_hypertexte' => '(Ако съобщението се отнася до статия, публикувана в Интернет или до страница с повече информация, въведете заглавието на страницата и нейния уеб-адрес.)', 'texte_login_ldap_1' => '(Оставете празно поле за потребител за анонимен достъп или попълнете пълния път за достъп, например «uid=smith, ou=users, dc=my-domain, dc=com».)', 'texte_login_precaution' => 'Внимание! Това е потребителското име, с което в момента сте се свързали. Предпазливо използвайте формата ...', - 'texte_message_edit' => 'Внимание: това съобщение може да бъде променяно от всички администратори на сайта. То се чете от редакторите. Използвайте съобщенията само за подчертаване на важни за съществуването на сайта събития. ', 'texte_mise_a_niveau_base_1' => 'СПИП файловете са актуализирани. Сега остава да обновите базата данни на сайта.', 'texte_modifier_article' => 'Промяна на статията:', - 'texte_moteur_recherche_active' => 'Търсачката е активирана. използвайте тази команда, - ако желаете да направите бързо преиндексиране (например след - възстановяване на архив). Забележете, че документите, коите са променени - по стандартен начин (от интерфейса на СПИП) са индексирани - отново автоматично: следователно тази команда върши работа само в изключителни обстоятелства.', - 'texte_moteur_recherche_non_active' => 'Търсачката не е активирана.', 'texte_multilinguisme' => 'Ако желаете да боравите със статии на няколко езика с усложнена навигация, можете да добавите меню "избор на език" към статиите и/или към рубриките, в зависимост от организацията на сайта Ви.', # MODIF 'texte_multilinguisme_trad' => 'Също така, можете да активирате система за управление на препратките към различните преводи на статията.', # MODIF 'texte_non_compresse' => 'uncompressed (сървърът ви не поддрържа това свойство)', - 'texte_nouveau_message' => 'Ново съобщение', 'texte_nouvelle_version_spip_1' => 'Току-що инсталирахте нова версия на СПИП.', 'texte_nouvelle_version_spip_2' => 'Тази нова версия налага по-сериозна от обикновената актуализация. Ако сте администратор на сайта, изтрийте файла inc_connect.php3 от директория ecrire и стартирайте отново инсталацията, с цел да актуализирате параметрите на базата данни за връзка.

    (NB: ако сте забравили параметрите на базата данни за връзка, погледнете следния файл inc_connect.php3 преди да го изтриете).', # MODIF 'texte_operation_echec' => 'Върнете се на предишната страница, за да изберете друга база или да създадете нова. Потвърдете информацията, изпратена от Вашия доставчик. ', @@ -664,7 +558,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_rappel_selection_champs' => '[Не забравяйте да изберете правилното поле.]', 'texte_recalcul_page' => 'Ако желаете да презаредите само една страница, по-добре направете това от публичната зона, като използвате « бутона "Презареждане" ».', - 'texte_recapitiule_liste_documents' => 'Тази страница обобщава списъка с документи, намиращи се из секциите. За да промените информацията в даден документ, преминете чрез препратката към страницата на неговата рубрика.', 'texte_recuperer_base' => 'Поправка на базата данни', 'texte_reference_mais_redirige' => 'свързана статия на Вашия СПИП сайт, но пренасочена към друг URL адрес.', 'texte_requetes_echouent' => 'Когато някои SQL справки @@ -697,7 +590,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( случаи, когато са направени важни изменения в графиките или структурата на сайта.', 'texte_sur_titre' => 'Челно заглавие', 'texte_table_ok' => ' : тази таблица е добра.', - 'texte_tables_indexation_vides' => 'Таблиците с индекси на търсачката са празни.', 'texte_tentative_recuperation' => 'Опит за поправка', 'texte_tenter_reparation' => 'Опит за поправка на базата данни', 'texte_test_proxy' => 'За да изпробвате дали работи проксито, впишете на това място @@ -712,13 +604,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( Тази операция е изключена по начало, с цел да не се показват излишни предупредителни съобщения.', - 'texte_trop_resultats_auteurs' => 'Твърде много намерени резултати за „@cherche_auteur@“; моля, прецизирайте търсенето.', - 'texte_unpack' => 'Изтегляне на най-новата версия', - 'texte_utilisation_moteur_syndiques' => 'При използване на търсачката, внедрена в СПИП, можете да търсите сайтове и статии, обединени по два начина.
    - По-лесният е да търсите само в заглавията и описанията на статиите.
    - Вторият начин, който е много по-ефективен, позволява на СПИП да търси в текста на свързаните сайтове. Ако свържете сайт към Вашия, СПИП ще търси в текста на съответния сайт.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Този метод кара СПИП често да посещава свързаните сайтове, които биха могли да предизвикат понижаване на представянето на собствения Ви сайт.', 'texte_vide' => 'празно', 'texte_vider_cache' => 'Изпразване на кеш-паметта', - 'titre_admin_effacer' => 'Техническа поддръжка', 'titre_admin_tech' => 'Техническа поддръжка', 'titre_admin_vider' => 'Техническа поддръжка', 'titre_cadre_afficher_article' => 'Показване на статиите:', @@ -738,49 +625,26 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_naviguer_dans_le_site' => 'Търсене на сайта', 'titre_nouvelle_rubrique' => 'Нова рубрика', 'titre_numero_rubrique' => 'НОМЕР НА РУБРИКАТА:', - 'titre_page_admin_effacer' => 'Техническа поддръжка: изтриване на базата данни', 'titre_page_articles_edit' => 'Промяна: @titre@', 'titre_page_articles_page' => 'Статии', 'titre_page_articles_tous' => 'Целият сайт', - 'titre_page_auteurs' => 'Посетители', 'titre_page_calendrier' => 'Календар @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Конфигуриране на сайта', - 'titre_page_config_fonctions' => 'Конфигуриране на сайта', - 'titre_page_configuration' => 'Конфигуриране на сайта', - 'titre_page_controle_petition' => 'Допълнения на молбите', 'titre_page_delete_all' => 'пълно и безвъзвратно изтриване', - 'titre_page_documents_liste' => 'Рубрика "документи"', - 'titre_page_index' => 'Лична зона', - 'titre_page_message_edit' => 'Писане на съобщение', - 'titre_page_messagerie' => 'Вашите съобщения', 'titre_page_recherche' => 'Резултати от търсенето @recherche@', 'titre_page_statistiques_referers' => 'Статистика (входящи препратки)', 'titre_page_upgrade' => 'Актуализация на СПИП', 'titre_publication_articles_post_dates' => 'Публикуване на статии с отминала дата', - 'titre_referencer_site' => 'Свързване на сайта:', - 'titre_rendez_vous' => 'СРЕЩИ:', 'titre_reparation' => 'Поправка', 'titre_suivi_petition' => 'Допълнения на молбите', - 'trad_article_inexistant' => 'Не съществува статия с такъв номер', 'trad_article_traduction' => 'Всички версии на статията:', - 'trad_deja_traduit' => 'Статията е вече преведена', 'trad_delier' => 'Отказ от свързване на статията с нейните преводи', # MODIF 'trad_lier' => 'Статията е превод на статия номер ', 'trad_new' => 'Писане на нов превод на статията', # MODIF // U - 'utf8_convert_attendez' => 'Почакайте няколко секунди и след това презаредете страницата.', - 'utf8_convert_avertissement' => 'В процес сте да промените съдържанието на базата Ви от данни (статии, новини и др.) от езикова кодировка @orig@ към @charset@.', - 'utf8_convert_backup' => 'Не забравяйте първо да направите пълен архив на сайта. Проверете също, дали шаблоните и езиковите файлове са съвместими с @charset@. ', - 'utf8_convert_erreur_deja' => 'Сайтът е вече в @charset@, няма смисъл да го преобразувате.', 'utf8_convert_erreur_orig' => 'Грешка: кодировката на символите @charset@ не се поддържа.', - 'utf8_convert_termine' => 'Готово!', - 'utf8_convert_timeout' => 'Важно: в случай на timeout на сървъра, презаредете страницата и изчакайте докато тя укаже "готово".', - 'utf8_convert_verifier' => 'Сега трябва да изпразните кеш-паметта на сайта и след това да проверите дали всичко е наред на публичните страници. Ако срещнете сериозен проблем, можете да откриете архив на оригиналната база от данни (във формат SQL) в директорията @rep@.', - 'utf8_convertir_votre_site' => 'Превключете сайта си на utf-8', // V 'version' => 'Версия:' ); - -?> diff --git a/www/ecrire/lang/ecrire_br.php b/www/ecrire/lang/ecrire_br.php index 7cb193ca..ee382ee8 100644 --- a/www/ecrire/lang/ecrire_br.php +++ b/www/ecrire/lang/ecrire_br.php @@ -1,9 +1,11 @@ 'C’hwitet eo ar c’hevreañ ouzh an diaz-titouroù.', 'avis_connexion_echec_2' => 'Deuit en dro d’ar bajenn a-raok, ha gwiriit an titouroù lakaet ganeoc’h.', 'avis_connexion_echec_3' => 'N.B. War meur a servijer eo ret deoc’h goulenn bezañ aotreet da dizhout an diaz-titouroù a-raok gallout implijout anezhañ. Ma n’hallit ket kevreañ, gwiriit ha graet hoc’h eus ar goulenn-se.', + 'avis_connexion_erreur_creer_base' => 'N’eo ket bet posubl krouiñ an diaz roadoù.', 'avis_connexion_erreur_nom_base' => 'Ne vo nemet lizherennoù, sifroù ha barennigoù en anv ar bon', 'avis_connexion_ldap_echec_1' => 'C’hwitet eo krevreañ ouzh ar servijer LDAP.', 'avis_connexion_ldap_echec_2' => 'Deuit en-dro d’ar bajenn a-raok, ha gwiriit an titouroù lakaet ganeoc’h.', 'avis_connexion_ldap_echec_3' => 'Bep eil tro, n’implijit ket ar skor LDAP evit enporzhiañ implijourien.', 'avis_deplacement_rubrique' => 'Diwallit ! Er rubrikenn-mañ ez eus @contient_breves@ berrskrid@scb@ : askit al logell amañ dindan ma tibabit dilec’hiañ anezhi.', - 'avis_destinataire_obligatoire' => 'Un degemerour a rankit disklêriañ a-benn gellout kas ar gemennadenn-mañ.', 'avis_erreur_connexion_mysql' => 'Fazi kevreañ SQL', - 'avis_erreur_version_archive' => 'Diwallit! Klotañ a ra ar restr @archive@ -gant ur stumm all eus SPIP disheñvel eus an hini staliet ganeoc’h. -Emaoc’h o vont da zegouezhout dirak diaezamantoù bras : -riskl da zistrujañ ho tiaz titouroù, drougplegoù a bep seurt el lec’hienn, hag all. -Arabat aotren an enporzhiadenn-mañ.

    Evit muioc’h a ditouroù, sellit ouzh dielloù SPIP.', - 'avis_espace_interdit' => 'Lec’h difennet

    Staliet eo SPIP dija.
    ', + 'avis_espace_interdit' => 'Lec’h difennet
    Staliet eo SPIP dija.
    ', 'avis_lecture_noms_bases_1' => 'N’eo ket bet ar programm staliañ evit lenn anvioù an diazoù titouroù staliet.', 'avis_lecture_noms_bases_2' => 'Pe n’eus diaz ebet da gaout, pe n’eo ket aotreet listennañ an diazoù evit abegoù surentez (ar pezh a c’hoarvez gant meur a herberc’hier).', 'avis_lecture_noms_bases_3' => 'En eil degouezh, ez eus da grediñ e c’hallit implijout un diaz dezhañ hoc’h anv kevreañ :', - 'avis_non_acces_message' => 'N’oc’h ket aotreet da dapout ar gemennadenn-mañ.', 'avis_non_acces_page' => 'N’oc’h ket aotreet da dizhout ar bajenn-mañ.', 'avis_operation_echec' => 'C’hwitet eo an oberiadenn.', 'avis_operation_impossible' => 'Oberiadenn dibosupl', - 'avis_probleme_archive' => 'Kudenn evit lenn ar restr @archive@', 'avis_suppression_base' => 'DIWALLIT, ne vo ket tu da adtapout an titouroù diverket', - 'avis_version_mysql' => 'Ne aotre ket ho servijer SQL (@version_mysql@) taolennoù an diaz d’en em dresañ drezo o-unan.', // B 'bouton_acces_ldap' => 'Ouzhpennañ ar mont tre ouzh LDAP', 'bouton_ajouter' => 'Ouzhpennañ', - 'bouton_ajouter_participant' => 'OUZHPENNAÑ UR PERZHIAD :', - 'bouton_annonce' => 'KEMENN', 'bouton_annuler' => 'Nullañ', - 'bouton_checkbox_envoi_message' => 'galloud da gas ur gemennadenn', - 'bouton_checkbox_indiquer_site' => 'merkañ ul lec’hienn web dre ret', - 'bouton_checkbox_signature_unique_email' => 'ur sinadur hepken dre chomlec’h postel ', - 'bouton_checkbox_signature_unique_site' => 'ur sinadur hepken dre lec’hienn Web', + 'bouton_cache_activer' => ' Adweredekaat ar grubuilh', + 'bouton_cache_desactiver' => 'Diwerekaat ar grubuilh', 'bouton_demande_publication' => 'Goulenn ma vo embannet ar pennad-mañ', 'bouton_desactive_tout' => 'Dizenaouiñ pep tra', 'bouton_desinstaller' => 'Distaliañ', - 'bouton_effacer_index' => 'Diverkañ ar menegerioù', 'bouton_effacer_tout' => 'Diverkañ PEP TRA', - 'bouton_envoi_message_02' => 'KAS UR GEMENNADENN', 'bouton_envoyer_message' => 'Kemennadenn ziwezhañ : kas', 'bouton_fermer' => 'Serriñ', 'bouton_mettre_a_jour_base' => 'Hizivaat ar bon stlennadoù', 'bouton_modifier' => 'Kemmañ', - 'bouton_pense_bete' => 'NOTENNIG EÑVORIÑ PERSONEL', - 'bouton_radio_activer_messagerie' => 'Gweredekaat ar postelerezh diabarzh', - 'bouton_radio_activer_messagerie_interne' => 'Gweredekaat ar postelerezh diabarzh', - 'bouton_radio_activer_petition' => 'Enaouiñ ar sinadeg', 'bouton_radio_afficher' => 'Diskouez', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Dont war wel war roll ar skridaozerien kevreet', - 'bouton_radio_desactiver_messagerie' => 'Diweredekaat ar postelerezh', 'bouton_radio_envoi_annonces_adresse' => 'Kas ar c’hemennoù d’ar chomlec’h-mañ :', 'bouton_radio_envoi_liste_nouveautes' => 'Kas listenn an nevezenti', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Na zont war wel e roll ar skridaozerien kevreet', 'bouton_radio_non_envoi_annonces_editoriales' => 'Arabat kas kemennoù embann', - 'bouton_radio_pas_petition' => 'Sinadeg ebet', - 'bouton_radio_petition_activee' => 'Sinadeg war-enaou', - 'bouton_radio_supprimer_petition' => 'Dilemel ar sinadeg', 'bouton_redirection' => 'ADHEÑCHAÑ', 'bouton_relancer_installation' => 'Adlañsañ ar staliadur', 'bouton_suivant' => 'War-lerc’h', 'bouton_tenter_recuperation' => 'Klask dresañ', 'bouton_test_proxy' => 'Amprouiñ ar proksi', 'bouton_vider_cache' => 'Goullonderiñ ar grubuilh', - 'bouton_voir_message' => 'Gwelet ar gemennadenn-mañ a-raok kadarnaat anezhi', // C - 'cache_mode_compresse' => 'Er mod gwasket emañ enrollet restroù ar grubuilh.', - 'cache_mode_non_compresse' => 'Enrollet eo restroù ar grubuilh er mod anwasket.', 'cache_modifiable_webmestre' => 'Gant webmestr al lec’hienn e c’hell an arventenn-mañ bezañ kemmet.', 'calendrier_synchro' => 'Mard implijit ur meziant deiziataer kenglotus gant iCal e c’hellit e adsinkronelaat ouzh titouroù al lec’hienn-mañ.', 'config_activer_champs' => 'Gweredekaat ar maeziennoù da-heul', @@ -109,9 +86,7 @@ Arabat aotren an enporzhiadenn-mañ.

    Evit muioc’h a ditouroù, sellit ouzh < 'config_titre_base_sup' => 'Disklêriañ un diaz ouzhpenn', 'config_titre_base_sup_choix' => 'Diuzit un diaz ouzhpenn', 'connexion_ldap' => 'Kevreañ :', - 'copier_en_local' => 'Eilañ en diabarzh', 'creer_et_associer_un_auteur' => 'Krouiñ ha strollata un aozer', - 'creer_et_associer_une_rubrique' => 'Sevel ha strollata ur rubrikenn', // D 'date_mot_heures' => 'eur', @@ -142,7 +117,6 @@ Arabat aotren an enporzhiadenn-mañ.

    Evit muioc’h a ditouroù, sellit ouzh < 'entree_login' => 'Ho ker kevreañ', 'entree_login_connexion_1' => 'Ar ger kevreañ', 'entree_login_connexion_2' => '(A-wechoù e klot gant ger kevreañ ar moned FTP, gwechoù all emañ da vezañ lezet goullo)', - 'entree_login_ldap' => 'Ger kevreañ LDAP orin', 'entree_mot_passe' => 'Ho ker-tremen', 'entree_mot_passe_1' => 'Ar ger-tremen kevreañ', 'entree_mot_passe_2' => '(A-wechoù e klot gant ar ger-tremen a implijit evit an FTP, gwechoù all emañ da vezañ lezet goullo)', @@ -160,7 +134,9 @@ Arabat aotren an enporzhiadenn-mañ.

    Evit muioc’h a ditouroù, sellit ouzh < 'entree_url' => 'Chomlec’h (URL) ho lec’hienn', 'entree_url_2' => 'Chomlec’h (URL) al lec’hienn', 'erreur_connect_deja_existant' => 'An anv-se zo hini un dafariad-all', + 'erreur_email_deja_existant' => 'Enrollet eo bet c’hoazh ar postel-se.', 'erreur_nom_connect_incorrect' => 'Difenn zo war an anv dafariad-se ', + 'erreur_plugin_attribut_balise_manquant' => 'Doareenn @doareenn@ a vank er balizenn @balizenn@.', 'erreur_plugin_desinstalation_echouee' => 'C’hwitet eo dizesezañ an askouez plugin. E ziweredekaat a c’hallit koulskoude.', 'erreur_plugin_fichier_absent' => 'Restr ezvezant', 'erreur_plugin_fichier_def_absent' => 'Restr termeniñ ezvezant', @@ -199,16 +175,13 @@ Arabat aotren an enporzhiadenn-mañ.

    Evit muioc’h a ditouroù, sellit ouzh < 'icone_configuration' => 'Kefluniad', 'icone_creer_auteur' => 'Krouiñ ur skridaozer nevez, hag e stagañ ouzh ar pennad-mañ', 'icone_creer_mot_cle' => 'Krouiñ ur ger-stur nevez hag e liammañ ouzh ar pennad-mañ', - 'icone_creer_mot_cle_rubrique' => 'Krouiñ ur ger-alc’hwez nevez a vo liammet ouzh ar rubrikenn-mañ.', - 'icone_creer_mot_cle_site' => 'Krouiñ ur ger-alc’hwez nevez a vo liammet ouzh al lec’hienn-mañ', 'icone_creer_rubrique_2' => 'Krouiñ ur rubrikenn nevez', + 'icone_developpement' => 'Diorenniñ', 'icone_edition' => 'Embannadur', - 'icone_envoyer_message' => 'Kas ar gemennadenn-mañ', 'icone_ma_langue' => 'Va yezh', 'icone_mes_infos' => 'Va stlennadoù', 'icone_mes_preferences' => 'Va dibaboù', 'icone_modifier_article' => 'Kemmañ ar pennad-mañ', - 'icone_modifier_message' => 'Kemmañ ar gemennadenn-mañ', 'icone_modifier_rubrique' => 'Kemmañ ar rubrikenn-mañ', 'icone_publication' => 'Embann', 'icone_relancer_signataire' => 'Adlañsañ ar siner', @@ -221,21 +194,15 @@ Arabat aotren an enporzhiadenn-mañ.

    Evit muioc’h a ditouroù, sellit ouzh < 'icone_supprimer_signature' => 'Diverkañ ar sinadur-mañ', 'icone_valider_signature' => 'Aprouiñ ar sinadur-mañ', 'image_administrer_rubrique' => 'Gallout a rit merañ ar rubrikenn-mañ', - 'impossible_modifier_login_auteur' => ' Login digemm', - 'impossible_modifier_pass_auteur' => 'Ger-tremen digemm.', 'info_1_article' => '1 pennad', - 'info_1_article_syndique' => '1 pennad-skrid sindikadet', 'info_1_auteur' => '1 aozer', 'info_1_message' => '1 kemennad', 'info_1_mot_cle' => '1 ger-alc’hwez', 'info_1_rubrique' => '1 rubrikenn', - 'info_1_site' => '1 lec’hienn', 'info_1_visiteur' => '1 gweladenner', 'info_activer_cookie' => 'Gallout a rit implijout un toupin heuliañ, ar pezh a dalvezo deoc’h da dremen en un doare aes eus al lec’hienn brevez d’an hini foran.', + 'info_activer_menu_developpement' => 'Diskouez al roll Diorrenniñ', 'info_admin_etre_webmestre' => 'Reiñ din gwirioù ur mestr-gwiad ', - 'info_admin_gere_rubriques' => 'Ar rubrikennoù da-heul a vez meret gant ar merour-mañ :', - 'info_admin_gere_toutes_rubriques' => 'An holl rubrikennoù zo meret gant ar merour-mañ.', - 'info_admin_gere_toutes_rubriques_2' => 'Merañ a ran pep rubrikenn', 'info_admin_je_suis_webmestre' => 'mestr-gwiad ez on', 'info_admin_statuer_webmestre' => 'Reiñ gwirioù ur mestr-gwiad d’an amaezhier-mañ', 'info_admin_webmestre' => 'An amaezhier-mañ zomestr-gwiad', @@ -247,18 +214,16 @@ Arabat aotren an enporzhiadenn-mañ.

    Evit muioc’h a ditouroù, sellit ouzh < 'info_administrateurs' => 'Merourien', 'info_administrer_rubrique' => 'Gallout a rit merañ ar rubrikenn-mañ', 'info_adresse' => 'er chomlec’h :', + 'info_adresse_desinscription' => 'Postel evit en em zisenskrivañ : ', 'info_adresse_url' => 'Chomlec’h (URL) al lec’hienn foran', 'info_afficher_par_nb' => 'Diskouez dre', - 'info_afficher_visites' => 'Diskouez ar gweladennoù evit :', 'info_aide_en_ligne' => 'Skoazell enlinenn SPIP', 'info_ajout_image' => 'Pa ouzhpennit skeudennoù evel restroù stag ouzh ur pennad e c’hell SPIP krouiñ ent emgefre evidoc’h skeudennoùigoù (bihanaet) eus ar skeudennoù enframmet. Evel-se e c’heller krouiñ, da skouer, ur skeudennaoueg pe ur portofolio.', - 'info_ajout_participant' => 'Ouzhpennet eo bet ar perzhiad-mañ :', 'info_ajouter_rubrique' => 'Ouzhpennañ ur rubrikenn all da vezañ meret :', 'info_annonce_nouveautes' => 'Kemenn an nevezenti', - 'info_anterieur' => 'a-raok', 'info_article' => 'pennad', 'info_article_2' => 'pennad', 'info_article_a_paraitre' => 'Ar pennadoù goude-deiziataet da zont', @@ -268,17 +233,14 @@ ar skeudennoù enframmet. Evel-se e c’heller krouiñ, da skouer, 'info_articles_miens' => 'Va fennadoù-skrid', 'info_articles_tous' => 'An holl bennadoù-skrid', 'info_articles_trouves' => 'Pennadoù kavet', - 'info_articles_trouves_dans_texte' => 'Pennadoù kavet (en destenn)', 'info_attente_validation' => 'Ho pennadoù a chom da vezañ aprouet', 'info_aucun_article' => 'Pennad-skrid ebet', - 'info_aucun_article_syndique' => 'Pennad-skrid amaezhiet ebet', 'info_aucun_auteur' => 'Aozer ebet', 'info_aucun_message' => 'kemennad ebet', 'info_aucun_rubrique' => 'Rubrikenn ebet', - 'info_aucun_site' => 'lec’hienn ebet', - 'info_aucun_visiteur' => 'Gweladenner ebet', 'info_aujourdhui' => 'hiziv :', - 'info_auteur_message' => 'SKRIDAOZER AR GEMENNADENN :', + 'info_auteur_gere_toutes_rubriques' => 'An aozer-mañ a ra war-dro an holl rubrikennoù', + 'info_auteur_gere_toutes_rubriques_2' => 'Merañ a ran pep rubrikenn', # MODIF 'info_auteurs' => 'Ar skridaozerien', 'info_auteurs_par_tri' => 'Skridaozerien@partri@', 'info_auteurs_trouves' => 'Skridaozerien kavet', @@ -287,6 +249,7 @@ ar skeudennoù enframmet. Evel-se e c’heller krouiñ, da skouer, 'info_barre_outils' => 'gant e varrenn ostilhoù ?', 'info_base_installee' => 'Staliet eo framm ho tiaz-titouroù.', 'info_bio' => 'Buhezskrid', + 'info_cache_desactive' => 'Diwerekaet eo bet ar grubuilh evit ur pennad.', 'info_chapeau' => 'Tog', 'info_chapeau_2' => 'Tog :', 'info_chemin_acces_1' => 'Dibarzhioù : hent moned er rollad tud', @@ -297,8 +260,6 @@ ar skeudennoù enframmet. Evel-se e c’heller krouiñ, da skouer, 'info_classement_2' => 'vet war @liste@', 'info_code_acces' => 'N’ankouait ket ho kodoù moned !', 'info_compatibilite_html' => 'Reolad HTML da heuliañ', - 'info_compresseur_gzip' => 'N. B. : Aliet eo gwiriañ mat en a-raok ha gwasket e vez dija en a-raok ar restroù php ent emgefre gant an herberc’hier pe get. Evit se e c’hallit implijout : @testgzip@', - 'info_compresseur_texte' => 'Ma ne vez ket gwasket ent emgefre ar pajennoù HTML gant ho servijer evit o c’has d’al lennerien e c’hellit klask gwaskañ dre ret evit bihanaat ment ar pajennoù pellgarget. Diwallit : gallout a ra kement-se gorrekaat servijerioù zo.', 'info_config_suivi' => 'Ma’z eo ar chomlec’h-mañ hini ur roll-skignañ e c’hellit skrivañ amañ ar chomlec’h evit en em enrollañ. Gallout a ra ar chomlec’h-se bezañ un URL (hini ar bajenn Web m’en em enroller warni), pe ur postel diwar-benn un danvez bennak (da skouer : @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Gallout a rit en em enrollañ war roll-skignañ al lec’hienn-mañ. Degaset e vo deoc’h kemennoù dre bostel pa vo kinniget pennadoù pe berrskridoù nevez neuze.', 'info_confirmer_passe' => 'Gwiriañ ar ger-tremen :', @@ -322,8 +283,6 @@ ar skeudennoù enframmet. Evel-se e c’heller krouiñ, da skouer, 'info_date_publication_anterieure' => 'Deiziad skridaozañ kent :', 'info_date_referencement' => 'DEIZIAD MENEGERIÑ AL LEC’HIENN-MAÑ :', 'info_derniere_etape' => 'Echuet eo !', - 'info_derniers_articles_publies' => 'Ar pennadoù diwezhañ bet embannet ganeoc’h', - 'info_desactiver_messagerie_personnelle' => 'Gallout a rit gweredekaat pe diweredekaat ho postelerezh personel war al lec’hienn-mañ.', 'info_descriptif' => 'Deskrivadur :', 'info_desinstaller_plugin' => 'diverkañ a ra ar roadoù, ha diweredekaat a ra an adveziant', 'info_discussion_cours' => 'Kaozeadennoù digor', @@ -331,7 +290,6 @@ ar skeudennoù enframmet. Evel-se e c’heller krouiñ, da skouer, 'info_email_envoi' => 'Postel kas (diret)', 'info_email_envoi_txt' => 'Skrivit amañ chomlec’h kas ar postelioù (ma ne skrivit netra e vo implijet chomlec’h an degemererien) :', 'info_email_webmestre' => 'Postel ar webmestr (diret)', - 'info_entrer_code_alphabet' => 'Merkit kod al lizherenneg da implijout :', 'info_envoi_email_automatique' => 'Kas postelioù emgefre', 'info_envoyer_maintenant' => 'Kas bremañ', 'info_etape_suivante' => 'Tremen d’al lankad war-lerc’h', @@ -344,7 +302,6 @@ ar skeudennoù enframmet. Evel-se e c’heller krouiñ, da skouer, ar goulennoù embann ha kadarnaat ar pennadoù.', 'info_fichiers_authent' => 'Restroù gwiriekaat « .htpasswd »', 'info_forums_abo_invites' => 'Foromoù dre goumanant zo war ho lec’hienn ; pedet e vez ar weladennerien d’en em enrollañ war lodenn foran al lec’hienn neuze.', - 'info_gauche_admin_effacer' => 'N’eus nemet an dud e-karg eus al lec’hienn a c’hall mont war ar bajenn-mañ.

    Warni e reer al labourioù-kempenn. Evit traoù zo ez eus ezhomm eus un argerzh testeniekaat dibar, a c’houlenn kaout ur moned FTP ouzh al lec’hienn.

    ', 'info_gauche_admin_tech' => 'N’eus nemet an dud e-karg eus al lec’hienn a c’hall mont war ar bajenn-mañ.

    Warni e reer al labourioù kempenn. Evit traoù zo ez eus ezhomm eus un argerzh testeniekaat dibar a c’houlenn kaout ur moned FTP ouzh al lec’hienn.

    ', 'info_gauche_admin_vider' => 'N’eus nemet an dud e-karg a c’hall mont war ar bajenn-mañ.

    Warni e reer al labourioù kempenn. Evit traoù zo ez eus ezhomm eus un argerzh testeniekaat dibar a c’houlenn kaout ur moned FTP ouzh al lec’hienn.

    ', 'info_gauche_auteurs' => 'Amañ e kavot an holl dud a skriv war al lec’hienn. @@ -352,24 +309,18 @@ ar skeudennoù enframmet. Evel-se e c’heller krouiñ, da skouer, 'info_gauche_auteurs_exterieurs' => 'E glaz emañ diskouezet ar skridaozerien diavaez, hep moned ouzh al lec’hienn ; Gant ur pod-lastez eo aroueziet ar re bet diverket.', 'info_gauche_messagerie' => 'Dre ar postelerezh e c’hellit eskemm kemennadennoù gant skridaozerien all, derc’hel notennigoù-eñvor, pe, ma’z oc’h merour, skignañ kemennoù war bajenn degemer al lodenn brevez.', - 'info_gauche_numero_auteur' => 'SKRIDAOZER NIVERENN', 'info_gauche_statistiques_referers' => 'War ar bajenn-mañ emañ roll ar referers, da lavaret eo al lec’hiennoù enno liammoù a gas davet ho lec’hienn deoc’h, evit dec’h hag hiziv hepken. Riñset e vez ar roll-mañ bemdez.', 'info_gauche_visiteurs_enregistres' => 'Amañ emañ ar weladennerien enrollet evit gallout kemer perzh e foromoù dre goumanant lodenn foran al lec’hienn.', 'info_generation_miniatures_images' => 'Krouiñ skeudennoùigoù', - 'info_gerer_trad' => 'Merañ al liammoù treiñ ?', 'info_gerer_trad_objets' => '@objets@ : merañ liammoù an troidigezh', 'info_hebergeur_desactiver_envoi_email' => 'Herberc’herien zo a nac’h ma vefe kaset postelioù emgedre adal o servijerioù. En deoguezh-se, ne’z aio ket ar servijoù-se en-dro.', 'info_hier' => 'dec’h :', - 'info_historique_activer' => 'Heuliañ an adweladennoù', - 'info_historique_affiche' => 'Diskouez ar stumm-mañ', - 'info_historique_comparaison' => 'keñveriañ', - 'info_historique_desactiver' => 'Chom hep heuliañ an adweladennoù', - 'info_historique_texte' => 'En ur heuliañ an adweladennoù e c’heller rollaén an holl gemmoù bet degaset d’ar pennad, ha gwelet an diforc’hioù etre an stummoù disheñvel.', 'info_identification_publique' => 'Hoc’h anv foran...', 'info_image_process' => 'Diuzit an hentenn wellañ da sevel skeudennoùigoù o klikañ war ar skeudenn a zere.', 'info_image_process2' => 'Evezh. Ma ne weler skeudenn ebet e talvez n’eo ket bet kefluniet an dafariad a ro bod deoc’h evit ober gant seurt binvioù. Mar fell deoc’h implijout ar servijoù-se, kit e darempred gant an dud e-karg, ha goulennit war-lerc’h an astennoù «GD» pe «Imagick».', 'info_images_auto' => 'Skeudennoù jedet ent emgefre', 'info_informations_personnelles' => 'Titouroù personel', + 'info_inscription' => 'enskrivadur el linenn', 'info_inscription_automatique' => 'Enskrivadur emgefreek ar skridaozerien nevez.', 'info_jeu_caractere' => 'Strobad arouezennoù al lec’hienn', 'info_jours' => 'deiz', @@ -385,8 +336,6 @@ ar skeudennoù enframmet. Evel-se e c’heller krouiñ, da skouer, 'info_logos' => 'Al logoioù', 'info_maximum' => 'd’ar muiañ :', 'info_meme_rubrique' => 'En hevelep rubrikenn', - 'info_message' => 'Kemennadenn eus ar', - 'info_message_efface' => 'KEMENNADENN BET DIVERKET', 'info_message_en_redaction' => 'Ar c’hemennadennoù emaoc’h o skrivañ', 'info_message_technique' => 'Kemennadenn deknikel :', 'info_messagerie_interne' => 'Postelerezh diabarzh', @@ -398,29 +347,23 @@ Riskloù zo e vefe distrujet ho tiaz titouroù pe ne’z afe ket en-dro ken.
    'Kemmañ ar rubrikenn :', 'info_modifier_titre' => 'Kemmañ : @titre@', 'info_mon_site_spip' => 'Ma lec’hienn SPIP', - 'info_mot_sans_groupe' => '(Gerioù distrollad...)', - 'info_moteur_recherche' => 'Lusker enklask diabarzh', 'info_moyenne' => 'Keidenn :', - 'info_multi_articles' => 'Ober gant lañser ar yezhoù war ar pennadoù ?', 'info_multi_cet_article' => 'Yezh ar pennad-mañ :', 'info_multi_langues_choisies' => 'Dibabit amañ dindan ar yezhoù a c’hell skridaozerien ho lec’hienn skrivañ enno. Ar yezhoù bet implijet betek-henn (diskouezet da gentañ) n’hallont ket bezañ lamet kuit.', 'info_multi_objets' => '@objets@ : gweredekaat lañser ar yezh', - 'info_multi_rubriques' => 'Ober gant ar lañser yezhoù war ar rubrikennoù ?', 'info_multi_secteurs' => '...evit rubrikennoù ar wrizienn hepken ?', 'info_nb_articles' => '@nb@ pennadoù-skrid', - 'info_nb_articles_syndiques' => '@nb@ pennadoù-skrid amaezhiet', 'info_nb_auteurs' => '@nb@ aozerion', 'info_nb_messages' => '@nb@ kemennadoù', 'info_nb_mots_cles' => '@nb@ gerioù-alc’hwez', 'info_nb_rubriques' => '@nb@ rubrikennoù', - 'info_nb_sites' => '@nb@ lec’hiennoù', 'info_nb_visiteurs' => '@nb@ gweladennerion', 'info_nom' => 'Anv', 'info_nom_destinataire' => 'Anv an degemerer', + 'info_nom_pas_conforme' => 'n’eo ket aotreet an tagoù html ', 'info_nom_site' => 'Anv ho lec’hienn', 'info_nombre_articles' => '@nb_articles@ pennad,', - 'info_nombre_partcipants' => 'PERZHIDI ER GAOZ :', 'info_nombre_rubriques' => '@nb_rubriques@ rubrikenn,', 'info_nombre_sites' => '@nb_sites@ lec’hienn,', 'info_non_deplacer' => 'Na zilec’hiañ...', @@ -429,19 +372,14 @@ Riskloù zo e vefe distrujet ho tiaz titouroù pe ne’z afe ket en-dro ken.
    'Chom hep kas roll an nevezenti', 'info_non_modifiable' => 'n’hall ket bezañ kemmet', 'info_non_suppression_mot_cle' => 'ne fell ket din diverkañ ar ger-stur-mañ.', - 'info_note_numero' => 'Notenn @numero@', 'info_notes' => 'Notennoù', - 'info_nouveaux_message' => 'Kemennadennoù nevez', 'info_nouvel_article' => 'Pennad nevez', 'info_nouvelle_traduction' => 'Troidigezh nevez :', 'info_numero_article' => 'PENNAD NIVERENN :', 'info_obligatoire_02' => '[Rekis]', 'info_option_accepter_visiteurs' => 'Aotren enrolladennoù gweladennerien al lec’hienn foran', - 'info_option_faire_suivre' => 'Lakaat skridaozerien ar pennadoù da heuliañ evezhiadennoù ar forom', 'info_option_ne_pas_accepter_visiteurs' => 'Nac’hañ enrolladennoù ar weladennerien', 'info_options_avancees' => 'DIBARZHIOÙ PISHOC’H', - 'info_ortho_activer' => 'Ober gant an difazier reizhskrivañ', - 'info_ortho_desactiver' => 'Na implijout an difazier', 'info_ou' => 'pe...', 'info_page_interdite' => 'Pajenn difennet', 'info_par_nom' => 'dre anv', @@ -451,20 +389,14 @@ Riskloù zo e vefe distrujet ho tiaz titouroù pe ne’z afe ket en-dro ken.
    'Ger-tremen re verr.', 'info_passe_trop_court_car_pluriel' => 'Lakait d’’ar vihanañ @nb@ arouezenn er ger-tremen.', 'info_passes_identiques' => 'Ne glot ket an daou c’her-tremen.', - 'info_pense_bete_ancien' => 'Ho notennoùigoù-eñvor kozh', 'info_plus_cinq_car' => 'ouzhpenn pemp arouezenn', 'info_plus_cinq_car_2' => '(Ouzhpenn 5 arouezenn)', 'info_plus_trois_car' => '(Ouzhpenn 3 arouezenn)', 'info_popularite' => 'brud; : @popularite@ ; gweladennoù : @visites@', - 'info_popularite_4' => 'brud; : @popularite@ ; gweladennoù : @visites@', 'info_post_scriptum' => 'Goude-skrid', 'info_post_scriptum_2' => 'Goude-skrid :', 'info_pour' => 'evit', - 'info_preview_admin' => 'N’eus nemet ar verourien a c’hall rakwelet al lec’hienn', - 'info_preview_comite' => 'Gallout a ra an holl skridaozerien rakwelet al lec’hienn', - 'info_preview_desactive' => 'Diweredekaet-mik eo ar rakweled', - 'info_preview_texte' => 'Posupl eo rakwelet penaos e vefe al lec’hienn ma vefe embannet an holl bennadoù hag an holl verrskridoù (dezho ar statud « kinniget » d’an nebeutañ). Daoust ha dleout a rafe an holl skridaozerien gallout en ober, ar verourien hepken, pe den ebet ?', - 'info_principaux_correspondants' => 'Ho kenskriverien bennañ', + 'info_preview_texte' => 'Posupl eo rakwelet penaos e vefe al lec’hienn ma vefe embannet an holl bennadoù hag an holl verrskridoù (dezho ar statud « kinniget » d’an nebeutañ). Daoust ha dleout a rafe an holl skridaozerien gallout en ober, ar verourien hepken, pe den ebet ?', # MODIF 'info_procedez_par_etape' => 'kit war-raok pazenn-ha-pazenn', 'info_procedure_maj_version' => 'rankout a ra al labour hizivaat bezañ lañset a-benn azasaat an diaz titouroù ouzh stumm nevez SPIP.', @@ -480,14 +412,9 @@ Riskloù zo e vefe distrujet ho tiaz titouroù pe ne’z afe ket en-dro ken.
    ', - 'info_question_utilisation_moteur_recherche' => 'Ha c’hoant hoc’h eus da ober gant lusker enklask diabarzh SPIP ? - (diweredekaat anezhañ a laka ar reizhiad da vont buanoc’h.)', - 'info_question_vignettes_referer_non' => 'Chom hep diskouez skeudennoùigoù lec’hiennoù orin ar weladennerien', 'info_qui_edite' => '@nom_auteur_modif@ en deus labouret war an danvez-se @date_diff@ minutes zo', 'info_racine_site' => 'Gwrizienn al lec’hienn', 'info_recharger_page' => 'Adkargit ar-bajenn-mañ a-raok pell, mar plij.', - 'info_recherche_auteur_a_affiner' => 'Re a zisoc’hoù zo evit "@cherche_auteur@" ; resisait hoc’h enklask mar plij.', - 'info_recherche_auteur_ok' => 'Meur a skridaozer zo bet kavet evit "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'N’eus bet kavet disoc’h ebet evit « @cherche_auteur@ ».', 'info_recommencer' => 'Klaskit en-dro mar plij.', 'info_redacteur_1' => 'Skridaozer', @@ -496,6 +423,7 @@ Riskloù zo e vefe distrujet ho tiaz titouroù pe ne’z afe ket en-dro ken.
    'O VEZAÑ SKRIDAOZET', 'info_redirection' => 'Adheñchañ', 'info_redirection_activee' => 'War adwerediñ', + 'info_redirection_boucle' => 'Emaoc’h o klask adkas ur pennad-skrid warnañ e-unan.', 'info_redirection_desactivee' => 'Torret eo bet an adwerediñ.', 'info_refuses' => 'Ho pennadoù bet nac’het', 'info_reglage_ldap' => 'Dibarzhioù : Reizhañ an enporzhiañ LDAP', @@ -506,7 +434,6 @@ Riskloù zo e vefe distrujet ho tiaz titouroù pe ne’z afe ket en-dro ken.
    'Rubrikennoù', 'info_rubriques_02' => 'rubrikennoù', 'info_rubriques_trouvees' => 'Rubrikennoù bet kavet', - 'info_rubriques_trouvees_dans_texte' => 'Rubrikennoù bet kavet (en destenn)', 'info_sans_titre' => 'Titl ebet', 'info_selection_chemin_acces' => 'Diuzit amañ dindan an hent evit tizhout ar rollad tud :', 'info_signatures' => 'sinadurioù', @@ -519,14 +446,12 @@ Riskloù zo e vefe distrujet ho tiaz titouroù pe ne’z afe ket en-dro ken.
    'Al lec’hiennoù menegeret liammet ouzh ar ger-stur-mañ', 'info_sites_proxy' => 'Implijout ur proksi', 'info_sites_trouves' => 'Lec’hiennoù bet kavet', - 'info_sites_trouves_dans_texte' => 'Lec’hiennoù bet kavet (en destenn)', 'info_sous_titre' => 'Istitl :', 'info_statut_administrateur' => 'Merour', 'info_statut_auteur' => 'Statud ar skridaozer-mañ :', 'info_statut_auteur_2' => 'Me a zo', 'info_statut_auteur_a_confirmer' => 'Enskrivadur da gadarnaat', 'info_statut_auteur_autre' => 'Statud all :', - 'info_statut_efface' => 'Diverket', 'info_statut_redacteur' => 'Skridaozer', 'info_statut_utilisateurs_1' => 'Staelad dre ziouer an implijerion enporzhiet', 'info_statut_utilisateurs_2' => 'Dibabit ar statud da reiñ da dud ar rollad tud LDAP pa gevreont evit ar wech kentañ. Gallout a reoo da c’houde kemmañ ar statud-se unan evit pep aozer unan hag unan.', @@ -549,7 +474,6 @@ Riskloù zo e vefe distrujet ho tiaz titouroù pe ne’z afe ket en-dro ken.
    'An holl pennadoù bet embannet er rubrikenn-mañ', 'info_tous_articles_refuses' => 'An holl bennadoù distaolet', 'info_tous_les' => 'an holl :', - 'info_tous_redacteurs' => 'Kemenn d’an holl skridaozerien', 'info_tout_site' => 'Al lec’hienn a-bezh', 'info_tout_site2' => 'N’eo ket bet troet ar pennad er yezh-mañ.', 'info_tout_site3' => 'Troet eo bet ar pennad, met abaoe eo bet kemmet ar pennad orin. Ret eo nevesaat an droidigezh.', @@ -566,7 +490,7 @@ diskouezet en ul liv disheñvel, diouzh o stad :', 'info_une_rubrique_02' => '1 rubrikenn', 'info_url' => 'URL :', 'info_url_proxy' => 'URL ar proksi', - 'info_url_site' => 'URL AL LEC’HIENN :', + 'info_url_site_pas_conforme' => 'n’eo ket reizh URL al lec’hien.', 'info_url_test_proxy' => 'URL prouata', 'info_urlref' => 'Liamm gourskrid :', 'info_utilisation_spip' => 'Bremañ e c’hellit kregiñ da implijout ar reizhiad embann ameilet...', @@ -577,7 +501,6 @@ diskouezet en ul liv disheñvel, diouzh o stad :', 'info_visiteurs_02' => 'Gweladenner al lec’hienn foran', 'info_webmestre_forces' => 'termenet eo ar vistri-gwiad bremañ e @file_options@.', 'install_adresse_base_hebergeur' => 'Chomlec’h an diaz titouroù roet gant an herberc’hier', - 'install_base_ok' => 'Anavezet eo bet an diaz @base@', 'install_connect_ok' => 'Disklêriet eo bet ar bon nevez dindan anv an dafariad @connect@.', 'install_echec_annonce' => 'Moarvat e c’hwito ar staliadur pe e kaso d’ul lec’hienn na’z aio ket en-dro...', 'install_extension_mbstring' => 'Ne’z a ket SPIP en-dro gant :', @@ -606,8 +529,6 @@ diskouezet en ul liv disheñvel, diouzh o stad :', 'item_activer_messages_avertissement' => 'Gweredekaat ar c’hemennoù diwall', 'item_administrateur_2' => 'merour', 'item_afficher_calendrier' => 'Diskouez en deiziataer', - 'item_autoriser_documents_joints' => 'Aotren stagañ teulioù ouzh ar pennadoù', - 'item_autoriser_documents_joints_rubriques' => 'Aotren an teulioù er rubrikennoù', 'item_autoriser_syndication_integrale' => 'Skignañ an holl bennadoù er restroù sindikadañ', 'item_choix_administrateurs' => 'ar verourion', 'item_choix_generation_miniature' => 'Krouiñ arlunioù ar skeudennoù en un doare emgefre.', @@ -615,7 +536,6 @@ diskouezet en ul liv disheñvel, diouzh o stad :', 'item_choix_redacteurs' => 'ar skridaozerion', 'item_choix_visiteurs' => 'gweladennerien al lec’hienn foran', 'item_creer_fichiers_authent' => 'Krouiñ ar restroù .htpasswd', - 'item_limiter_recherche' => 'Bevenniñ an enklask da ditouroù al lec’hienn', 'item_login' => 'Kod kevreañ', 'item_messagerie_agenda' => 'Gweredekaat ar postelerezh hag an deiziataer', 'item_mots_cles_association_articles' => 'ouzh ar pennadoù', @@ -625,22 +545,15 @@ diskouezet en ul liv disheñvel, diouzh o stad :', 'item_non_accepter_inscriptions' => 'Chom hep degemer an enskrivadurioù', 'item_non_activer_messages_avertissement' => 'Kemenn diwall ebet', 'item_non_afficher_calendrier' => 'Chom hep diskouez en deiziataer', - 'item_non_autoriser_documents_joints' => 'Nac’hañ stagañ teulioù ouzh ar pennadoù', - 'item_non_autoriser_documents_joints_rubriques' => 'Nac’hañ stagañ teulioù ouzh ar rubrikennoù', 'item_non_autoriser_syndication_integrale' => 'Embann un diverrañ hepken', - 'item_non_compresseur' => 'Diweredekaat ar gwaskañ restroù', 'item_non_creer_fichiers_authent' => 'Arabat krouiñ ar restroù-se', - 'item_non_gerer_statistiques' => 'Na verañ ar stadegoù', - 'item_non_limiter_recherche' => 'Ledanaat an enklask da zanvez al lec’hiennoù menegeret', 'item_non_messagerie_agenda' => 'Diweredekaat ar postelerezh hag an deiziataer', 'item_non_publier_articles' => 'Na embann ar pennadoù a-raok an deiziad embann lakaet.', - 'item_non_utiliser_moteur_recherche' => 'Na implijout al lusker enklask', 'item_nouvel_auteur' => 'Skridaozer nevez', 'item_nouvelle_rubrique' => 'Rubrikenn nevez', 'item_oui' => 'Ya', 'item_publier_articles' => 'Embann ar pennadoù, ne vern an deiziad embann lakaet dezho.', 'item_reponse_article' => 'Respont d’ar pennad', - 'item_utiliser_moteur_recherche' => 'Implijout al lusker enklask', 'item_version_html_max_html4' => 'Dibabit HTML4 war al load internet voutin', 'item_version_html_max_html5' => 'Aotren an HTML5', 'item_visiteur' => 'gweladenner', @@ -655,15 +568,13 @@ diskouezet en ul liv disheñvel, diouzh o stad :', 'label_choix_langue' => 'Dibabit ho yezh', 'label_nom_fichier_connect' => 'Lakait anv an dafariad-mañ', 'label_slogan_site' => 'Lugan al load internet', - 'label_taille_ecran' => 'Ledander ar skramm', + 'label_taille_ecran' => 'Ledander ar skramm', # MODIF 'label_texte_et_icones_navigation' => 'Lañser gwedeiñ', 'label_texte_et_icones_page' => 'Diskouez er bajenn', 'ldap_correspondance' => 'hêrezh ar vaezienn @champ@', 'ldap_correspondance_1' => 'Hêrezh ar maeziennoù LDAP', 'ldap_correspondance_2' => 'Merkañ anv ar vaezienn LDAP evit pep hini eus ar maeziennoù SPIP da-heul. Lezel goullo kuit na vefe leuniet pa dispartiañ dre skejoù evit esaeañ meur a vaezienn LDAP.', - 'lien_ajout_destinataire' => 'Ouzhpennañ an degemerer-mañ', 'lien_ajouter_auteur' => 'Ouzhpennañ ar skridaozer-mañ', - 'lien_ajouter_participant' => 'Ouzhpennañ ur perzhiad', 'lien_ajouter_une_rubrique' => 'Ouzhpennañ ar rubrikenn-mañ', 'lien_email' => 'postel', 'lien_nom_site' => 'ANV AL LEC’HIENN :', @@ -671,9 +582,8 @@ diskouezet en ul liv disheñvel, diouzh o stad :', 'lien_retirer_rubrique' => 'Tennañ kuit ar rubrikenn', 'lien_retirer_tous_auteurs' => 'Tennañ kuit an holl aozerion', 'lien_retirer_toutes_rubriques' => 'Tennañ kuit holl ar rubrikennoù', - 'lien_retrait_particpant' => 'lemel ar perzhiad-mañ', 'lien_site' => 'lec’hienn', - 'lien_supprimer_rubrique' => 'diverkañ ar rubrikenn-mañ', + 'lien_tout_decocher' => 'Diaskañ an holl', 'lien_tout_deplier' => 'Dispakañ pep tra', 'lien_tout_replier' => 'Adpakañ pep tra', 'lien_tout_supprimer' => 'Diverkañ pep tra', @@ -698,13 +608,12 @@ diskouezet en ul liv disheñvel, diouzh o stad :', 'mois_non_connu' => 'dianav', // N - 'nouvelle_version_spip' => 'Prest eo handelv @version@ SPIP ', + 'nouvelle_version_spip' => 'Prest eo handelv @version@ SPIP ', # MODIF // O 'onglet_contenu' => 'Endalc’had', 'onglet_declarer_une_autre_base' => 'Disklêriañ un diaz all', 'onglet_discuter' => 'Flapiñ', - 'onglet_documents' => 'Restroù', 'onglet_interactivite' => 'Etreobererezh', 'onglet_proprietes' => 'Perzhioù', 'onglet_repartition_actuelle' => 'betek-henn', @@ -745,9 +654,10 @@ diskouezet en ul liv disheñvel, diouzh o stad :', 'plugin_info_plugins_dist_1' => 'Karget ha gweredek eo an askouezioù-mañ er c’havlec’h @plugins_dist@.', 'plugin_info_plugins_dist_2' => 'Diweredekaus ez int', 'plugin_info_telecharger' => 'da bellgargañ adal @url@ ha da staliañ e @rep@', + 'plugin_info_upgrade_ok' => 'Hizivaat bet kaset da benn', 'plugin_librairies_installees' => 'Levraouegoù bet staliet', 'plugin_necessite_lib' => 'Ezhomm en deus an adveziant-mañ eus al levraoueg @lib@', - 'plugin_necessite_plugin' => 'Ezhomm en deus eus an adveziant @plugin@ e stumm @version@ d’an nebeutañ.', + 'plugin_necessite_plugin' => 'Ezhomm en deus eus an adveziant @plugin@ e stumm @version@.', 'plugin_necessite_plugin_sans_version' => 'Askouez @plugin@ ret', 'plugin_necessite_spip' => 'Ezhomm zo eus stumm @version@ SPIP da nebeutañ.', 'plugin_source' => 'orin: ', @@ -755,6 +665,7 @@ diskouezet en ul liv disheñvel, diouzh o stad :', 'plugin_titre_automatique_ajouter' => 'Ouzhpennañ adveziantoù', 'plugin_titre_installation' => 'Desezañ an askouez @plugin@', 'plugin_titre_modifier' => 'Va askouezioù plugin', + 'plugin_utilise_plugin' => 'A ra gant ar plugin @plugin@ e doare @doare@', 'plugin_zip_active' => 'Kendalc’hit evit e weredekaat', 'plugin_zip_adresse' => 'merkit amañ a-is chomlec’h restr zip un adveziant da bellgargañ, pe hini ul rollad adveziantoù.', 'plugin_zip_adresse_champ' => 'Chomlec’h an adveziant pe hini ar roll ', @@ -781,7 +692,7 @@ diskouezet en ul liv disheñvel, diouzh o stad :', // Q 'queue_executer_maintenant' => 'Seveniñ bremañ', - 'queue_info_purger' => 'Bez e c’hallit lemel an holl labourioù o c’hortoz, ha nevesaat roll al labourioù mareadek', + 'queue_info_purger' => 'Bez e c’hallit lemel an holl labourioù o c’hortoz, ha nevesaat roll al labourioù mareadek', # MODIF 'queue_nb_jobs_in_queue' => '@nb@ labourioù o c’hortoz', 'queue_next_job_in_nb_sec' => 'Labour-all a-benn @nb@ eilenn', 'queue_no_job_in_queue' => 'Labour ebet o chom a-ispilh', @@ -791,10 +702,12 @@ diskouezet en ul liv disheñvel, diouzh o stad :', // R 'repertoire_plugins' => 'Kavlec’h :', + 'required' => '[Rekis]', // S 'sans_heure' => 'hep eur', - 'statut_admin_restreint' => '(merour strishaet)', # MODIF + 'statut_admin_restreint' => 'merour strishaet', + 'statut_webmestre' => 'mestr-gwiad', // T 'tache_cron_asap' => 'Lodenn labour CRON @function@ (ASAP)', @@ -819,17 +732,13 @@ adstaliañ SPIP hag adkrouiñ un diaz titouroù nevez hag ur moned merour kenta 'texte_article_virtuel_reference' => 'pennad galloudel : pennad menegeret en ho lec’hienn SPIP, met adkaset war-du un URL all. Evit paouez gant an adkas, diverkañ an URL a-us.', 'texte_aucun_resultat_auteur' => 'Disoc’h ebet evit "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Gallout a ra al lec’hienn-mañ diskouez deoc’h roll ar skridaozerien kevreet a-hed an amzer, ar pezh a aotren ac’hanoc’h da eskemm ganto war ar prim. Gallout a rit dibab chom hep dont war wel war ar roll-mañ (« diwelus » oc’h neuze evit an implijerien all).', - 'texte_auteur_messagerie_1' => 'War al lec’hienn-mañ eo posupl kas kemennadennoù pe sevel foromoù prevez, etre an izili. Gallout a rit dibab chom hep kemer perzh en eskemmoù-se.', 'texte_auteurs' => 'AR SKRIDAOZERIEN', 'texte_choix_base_1' => 'Dibabit ho tiaz :', 'texte_choix_base_2' => 'Er servijer SQL ez eus meur a ziaz titouroù.', 'texte_choix_base_3' => 'Diuzit amañ dindan an hini zo bet lakaet deoc’h gant an herberc’hier :', 'texte_choix_table_prefix' => 'Rakger an taolennoù :', - 'texte_commande_vider_tables_indexation' => 'Grit gant an urzhiad-mañ a-benn goullonderiñ an taolennoù menegeriñ implijet - gant lusker enklask diabarzh SPIP. Gounit a reot plas war ho pladenn.', 'texte_compatibilite_html' => 'Bez e c’hallit goulenn digant SPIP lakaat (war al lec’hienn voutin) boneg keverlec’h gant reoladHTML4, pe aotren HTML5 a zo arnevesoc’h.', 'texte_compatibilite_html_attention' => 'Riskl ebet da werediñ an dibab HTML5, met lakait neuze <!DOCTYPE html> e penn pep pajenn ho lec’hienn.', - 'texte_compresse_ou_non' => '(hennezh a c’hell bezañ gwasket pe get)', 'texte_compte_element' => '@count@ elfenn', 'texte_compte_elements' => '@count@ elfenn', 'texte_conflit_edition_correction' => 'Gwiriit amañ dindan an diforc’hioù etre daou stumm an destenn. Gallout a rit ivez eilañ ho kemmoù, hag adkregiñ.', @@ -846,10 +755,8 @@ adstaliañ SPIP hag adkrouiñ un diaz titouroù nevez hag ur moned merour kenta 'texte_date_publication_anterieure_nonaffichee' => 'Na ziskouez an deiziad embann kent.', 'texte_date_publication_article' => 'DEIZIAD EMBANN ENLINENN :', 'texte_date_publication_objet' => 'Deiziad embann enlinenn :', - 'texte_descriptif_petition' => 'Deskrivadur ar sinadeg', 'texte_descriptif_rapide' => 'Berr-ha-berr', 'texte_effacer_base' => 'Diverkañ diaz titouroù SPIP', - 'texte_effacer_donnees_indexation' => 'Diverkañ ar roadoù menegeriñ', 'texte_effacer_statistiques' => 'Diverkañ ar stadegoù', 'texte_en_cours_validation' => 'Kinniget eo ar pennadoù ha berrskridoù amañ dindan d’an embann.', 'texte_enrichir_mise_a_jour' => 'Gallout a rit bravaat pajennaozañ ho testenn en ur implijout « berradennoù tipografek ».', @@ -858,31 +765,22 @@ adstaliañ SPIP hag adkrouiñ un diaz titouroù nevez hag ur moned merour kenta Gant ar restroù-se e c’hallit herzel ouzh ar re n’int ket skridaozer pe merour da vont war bajenoù all zo (programm stadegoù diavaez, da skouer).

    Ma n’hoc’h eus ket ezhomm d’hen ober e c’hellit lezel an traoù evel m’emaint lakaet dre-ziouer - (ne vo ket krouet ar restroù).

    ', # MODIF + (ne vo ket krouet ar restroù).

    ', 'texte_informations_personnelles_1' => 'Bremañ e vo krouet gant ar reizhiad ur moned personel d’al lec’hienn evidoc’h.', 'texte_informations_personnelles_2' => '(Notenn : m’emaoc’h oc’h adstaliañ SPIP hag ez a c’hoazh ho moned kozh en-dro e c’hallit ', 'texte_introductif_article' => '(Testenn digeriñ ar pennad)', 'texte_jeu_caractere' => 'Gant al lizherenneg hollvedel (utf-8) oc’h aliet d’ober : aotren a ra diskwel testennoù en holl yezhoù, ha ne sav kudenn kenglotañ ebet ken gant ar merdeerioù a-vremañ.', - 'texte_jeu_caractere_2' => 'Diwallit : o kemmañ an dra-se, ne vo ket amdroet an testennoù bet enrollet war an diaz titouroù betek-henn.', 'texte_jeu_caractere_3' => 'Gant ar strobad arouezennoù-mañ e ra ho lec’hienn :', 'texte_jeu_caractere_4' => 'Ma ne glot ket gant gwirvoud ho roadennoù (da skouer, m’emaoc’h o paouez assevel un diaz titouroù), pe ma loc’hit gant al lec’hienn-mañ hag hoc’h eus c’hoant d’ober gant ur strobad arouezennoù all, resisait se amañ dindan :', - 'texte_jeu_caractere_conversion' => 'Notenn :Gallout a rit amdreiñ holl destennoù ho lec’hienn (pennadoù, berrskridoù, foromoù, h.a.)ur wech da vat davet al lizherenneg utf-8, maz’it war ar bajenn amdreiñ davet utf-8.', - 'texte_lien_hypertexte' => '(Ma rit meneg en ho kemennadenn eus ur pennad all embannet war ar Genrouedad, pe eus ur bajenn enni muioc’h a ditouroù, merkit aze titl ar bajenn gant hec’h URL.)', 'texte_login_ldap_1' => '(Na skrivit netra evit ur moned dizanv, pe skrivit an hent klok, da skouer « uid=anv, ou=users, dc=ma-zomani, dc=com ».)', 'texte_login_precaution' => 'Diwallit ! Setu ar c’hod kevreañ a dalvez deoc’h da gevreañ evit ar mare. Taolit evezh gant ar furmskrid-mañ...', - 'texte_message_edit' => 'Diwallit :Gallout a ra ar gemennadenn-mañ bezañ kemmet gant holl verourien al lec’hienn, ha gwelet e vo gant an holl skridaozerien. Na implijit ar c’hemennoù NEMET evit rentañ kont eus darvoudoù pouezus e buhez al lec’hienn.', 'texte_messagerie_agenda' => 'Gant ur postelerezh e c’hell ar skridaozerien eskemm an eil gant egile dre lodenn brevez al lec’hienn. Un deiziataer zo stag outañ.', 'texte_mise_a_niveau_base_1' => 'O paouez hizivaat restroù SPIP emaoc’h. Bremañ eo dav ober kemend-all evit an diaz titouroù.', 'texte_modifier_article' => 'Kemmañ ar pennad :', - 'texte_moteur_recherche_active' => 'Gweredekaet eo al lusker enklask. Implijit an urzhiad-mañ evit un advenegeradur prim - (goude assevel ur savete, da skouer). O-unan e vez advenegeret an teulioù kemmet en un doare reizh - (adalek etrefas SPIP) : setu n’eus d’ober gant an urzhiad-mañ nemet e degouezhioù divoutin.', - 'texte_moteur_recherche_non_active' => 'N’eo ket gweredekaet al lusker enklask.', 'texte_multilinguisme' => 'Mar fell deoc’h merañ pennadoù e meur a yezh, dre un doare merdeiñ kemplezh, e c’hallit ouzhpennañ ul lañser dibab yezhoù war ar pennadoù ha/pe war ar rubrikennoù, hervez ar mod m’eo aozet ho load internet.', 'texte_multilinguisme_trad' => 'Gallout a rit gweredekaat ur reizhiad merañ liammoù etre troidigezhioù disheñvel ar pennadoù ivez.', 'texte_non_compresse' => 'ket gwasket (ne vez ket skoret an arc’hwel-se gant ho servijer)', - 'texte_nouveau_message' => 'Kemennadenn nevez', 'texte_nouvelle_version_spip_1' => 'Ur stumm nevez eus SPIP zo bet staliet ganeoc’h.', 'texte_nouvelle_version_spip_2' => 'Evit peurstaliañ anezhañ ez eus ezhomm un hizivadenn glokoc’h eget boaz. Ma’z oc’h webmestr al lec’hienn, diverkit ar restr @connect@ hag adkrogit gant ar staliadur a-benn hizivaat an arventennoù kevreañ ouzh an diaz titouroù.

    (NM. M’hoc’h eus ankouaet ho titouroù kevreañ , taolit ur sell ouzh ar restr @connect@ a-raok he diverkañ...)

    ', 'texte_operation_echec' => 'Distroit d’ar bajenn kent, diuzit un diaz all, pe krouit unan nevez. Gwiriit an titouroù bet roet deoc’h gant an herberc’hier.', @@ -895,7 +793,6 @@ adstaliañ SPIP hag adkrouiñ un diaz titouroù nevez hag ur moned merour kenta 'texte_publication_articles_post_dates' => 'Peseurt emzalc’h a zle SPIP kaout gant ar pennadoù zo bet lakaet dezho un deiziad embann en amzer da zont ?', 'texte_rappel_selection_champs' => '[N’ankouait ket diuzañ mat ar vaezienn-mañ.]', 'texte_recalcul_page' => 'Mar fell deoc’h adjediñ ur bajenn hepken, tremenit kentoc’h dre al lodenn foran hag implijit an nozelenn « adjediñ ».', - 'texte_recapitiule_liste_documents' => 'War ar bajenn-mañ emañ renablet an teulioù hoc’h eus lakaet er rubrikennoù. Evit kemmañ titouroù pep teul, heuilhit al liamm war-du pajenn e rubrikenn.', 'texte_recuperer_base' => 'Ratreañ an diaz titouroù', 'texte_reference_mais_redirige' => 'pennad menegeret en ho lec’hienn SPIP, met adkaset davet un URL all.', 'texte_requetes_echouent' => 'Pa chom sac’het ingal pe hep abeg rekedoù SQL, @@ -916,7 +813,6 @@ adstaliañ SPIP hag adkrouiñ un diaz titouroù nevez hag ur moned merour kenta 'texte_suppression_fichiers' => 'Implijit an urzhiad-se evit diverkañ an holl restroù krubuilhet e SPIP. An dra-se a c’hell servijout evit ma vo adjedet ho holl pajennoù, dre heg, m’hoc’h eus graet kemmoù bras e neuz pe e framm al lec’hienn.', 'texte_sur_titre' => 'Ustitl', 'texte_table_ok' => ': kudenn ebet gant an daolenn-mañ.', - 'texte_tables_indexation_vides' => 'Goullo eo taolennoù menegeriñ al lusker.', 'texte_tentative_recuperation' => 'Taol-esa evit ratreañ', 'texte_tenter_reparation' => 'Klask ratreañ an diaz titouroù', 'texte_test_proxy' => 'Evit amprouiñ ar proksi-mañ, skrivit amañ dindan chomlec’h al lec’hienn a fell deoc’h arnodiñ.', @@ -927,24 +823,12 @@ adstaliañ SPIP hag adkrouiñ un diaz titouroù nevez hag ur moned merour kenta e c’hell ar reizhiad diskouez ar pennadoù bet « digoret » nevez zo a-benn herzel ma vo graet meur a gemm war un dro. Diweredekaet eo an dibarzh-mañ dre ziouer kuit da gaout kemennoù diwall a-hed an amzer.', - 'texte_trop_resultats_auteurs' => 'Re a zisoc’hoù evit "@cherche_auteur@" ; resisait termenoù hoc’h enklask.', - 'texte_unpack' => 'o pellgargañ ar stumm diwezhañ', - 'texte_utilisation_moteur_syndiques' => 'Pa implijit al lusker enklask enframmet - e SPIP e c’hallit sevel enklaskoù war an lec’hiennoù hag - ar pennadoù sindikadet e daou zoare - disheñvel.
    - - Gant an hini eeunañ e vez klasket e titloù ha deskrivadurioù ar pennadoù hepken.
    - - Gant an eil doare, kalz galloudusoc’h, e vo graet an enklask en holl destennoù da gaout war al lec’hiennoù menegeret. - Ma menegerit ul lec’hienn e raio SPIP e enklask e testenn al lec’hienn.', - 'texte_utilisation_moteur_syndiques_2' => 'Gant an doare-se eo rediet SPIP da weladenniñ alies al lec’hiennoù menegeret, ar pezh a c’hell gorrekaat ho lec’hienn-c’hwi un disterañ.', 'texte_vide' => 'goullo', 'texte_vider_cache' => 'Goullonderiñ ar grubuilh', - 'titre_admin_effacer' => 'Trezalc’h teknikel', 'titre_admin_tech' => 'Trezalc’h teknikel', 'titre_admin_vider' => 'Trezalc’h teknikel', 'titre_ajouter_un_auteur' => 'Ouzhpennañ un aozer', 'titre_ajouter_un_mot' => 'Ouzhpennañ ur ger-alc’hwez', - 'titre_ajouter_une_rubrique' => 'Ouzhpennañ ur rubrikenn', 'titre_cadre_afficher_article' => 'Diskouez ar pennadoù', 'titre_cadre_afficher_traductions' => 'Diskouez stad an troidigezhioù evit ar yezhoù-mañ :', 'titre_cadre_ajouter_auteur' => 'OUZHPENNAÑ UR SKRIDAOZER :', @@ -971,54 +855,27 @@ adstaliañ SPIP hag adkrouiñ un diaz titouroù nevez hag ur moned merour kenta 'titre_naviguer_dans_le_site' => 'Merdeiñ el lec’hienn...', 'titre_nouvelle_rubrique' => 'Rubrikenn nevez', 'titre_numero_rubrique' => 'RUBRIKENN NIVERENN :', - 'titre_page_admin_effacer' => 'Trezalc’h teknikel : diverkañ an diaz', 'titre_page_articles_edit' => 'Kemman : @titre@', 'titre_page_articles_page' => 'Ar pennadoù', 'titre_page_articles_tous' => 'Al lec’hienn a-bezh', - 'titre_page_auteurs' => 'Gweladennerien', 'titre_page_calendrier' => 'Deiziataer @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Kefluniañ al lec’hienn', - 'titre_page_config_fonctions' => 'Kefluniañ al lec’hienn', - 'titre_page_configuration' => 'Kefluniañ al lec’hienn', - 'titre_page_controle_petition' => 'Heuliañ ar sinadegoù', 'titre_page_delete_all' => 'diverket e vo pep tra, ne vo ket tu da zont war-gil', - 'titre_page_documents_liste' => 'Teuliadoù ar rubrikennoù', - 'titre_page_index' => 'Ho lodenn brevez', - 'titre_page_message_edit' => 'Skrivañ ur gemennadenn', - 'titre_page_messagerie' => 'Ho postelerezh', 'titre_page_recherche' => 'Disoc’hoù an enklask @recherche@', 'titre_page_statistiques_referers' => 'Stadegoù (liammoù davet al lec’hienn-mañ)', - 'titre_page_statistiques_signatures_jour' => 'Niver a sinadurioù bemdez', - 'titre_page_statistiques_signatures_mois' => 'Niver a sinadurioù bep miz', 'titre_page_upgrade' => 'Hizivaat SPIP', 'titre_publication_articles_post_dates' => 'Embann ar pennadoù deiziataet a-c’houde', - 'titre_referencer_site' => 'Menegeriñ war al lec’hienn :', - 'titre_rendez_vous' => 'EMGAV :', 'titre_reparation' => 'Kempenn', 'titre_suivi_petition' => 'Heuliañ ar sinadegoù', 'tls_ldap' => 'Surentez Treuzdougen a-Wiskadoù :', - 'trad_article_inexistant' => 'N’eus pennad ebet gant an niverenn-mañ.', 'trad_article_traduction' => 'Holl stummoù ar pennad-mañ :', - 'trad_deja_traduit' => 'Fazi : Dibosupl eo liammañ ar pennad-mañ ouzh an niverenn bet goulennet.', 'trad_delier' => 'Paouez da liammañ ar pennad-mañ ouzh an troidigezhioù anezhañ', 'trad_lier' => 'Un droidigezh eo ar pennad-mañ. Setu niverenn ar pennad orin :', 'trad_new' => 'Skrivañ un droidigezh nevez evit ar pennad-mañ', // U - 'upload_info_mode_document' => 'Lakaat ar skeudenn-mañ er portofolio', - 'upload_info_mode_image' => 'Tennañ ar skeudenn-mañ kuit eus ar portofolio', - 'utf8_convert_attendez' => 'Gortozit un tammig, hag adkargit ar bajenn-mañ', - 'utf8_convert_avertissement' => 'Emaoc’h war-nes amdreiñ endalc’had ho tiaz titouroù (pennadoù, berrskridoù, h.a.), eus ar strobad arouezennoù @orig@ d’an hini @charset@.', - 'utf8_convert_backup' => 'N’ankouait ket enrollañ ho lec’hienn penn-da-benn a-raok. Dleout a rafec’h ivez gwiriekaat eo kenglotus ho frammoù gant @charset@.', - 'utf8_convert_erreur_deja' => 'Emañ ho lec’hienn e @charset@ dija, n’eus netra d’ober...', 'utf8_convert_erreur_orig' => 'Fazi : n’eo ket skoret ar strobad arouezennoù @charset@', - 'utf8_convert_termine' => 'Echu eo !', - 'utf8_convert_timeout' => 'Pouezus : ma c’hoarvez un timeout gant ar servijer, adkargit ar bajenn betek ma tiskouezo « echu ».', - 'utf8_convert_verifier' => 'Bremañ e rankit goullonderiñ ar grubuilh ha gwiriañ eo mat pep tra war lodenn foran al lec’hienn. Ma c’hoarvez ur gudenn vras, ez eo bet miret ho roadoù (er stumm SQL) er c’havlec’h @rep@.', - 'utf8_convertir_votre_site' => 'Amdreiñ ho lec’hienn davet uft-8', // V 'version' => 'Stumm :' ); - -?> diff --git a/www/ecrire/lang/ecrire_bs.php b/www/ecrire/lang/ecrire_bs.php index e3d1eddd..86c73f48 100644 --- a/www/ecrire/lang/ecrire_bs.php +++ b/www/ecrire/lang/ecrire_bs.php @@ -1,9 +1,11 @@ 'Vratite se na prethodnu stranicu i provjerite unesene podatke.', 'avis_connexion_ldap_echec_3' => 'Ne koristite podrsku LDAP kao alternativu za importovanje korisnika.', 'avis_deplacement_rubrique' => 'Paznja! Ova rubrika sadrzi @contient_breves@ kratke poruke: Ako je zelite premjestiti, oznacite ovo polje kao potvrdu.', - 'avis_destinataire_obligatoire' => 'Trebate naznaciti primaoca prije nego sto posaljete ovu poruku.', 'avis_erreur_connexion_mysql' => 'Greska u SQL konekciji', # MODIF - 'avis_erreur_version_archive' => 'Paznja! Dokument @archive@ odgovara drugoj verziji SPIP od one koju ste instalirali. Riskirate velike poteskoce: opasnost od unistenja vase baze podataka, razne disfunkcije stranice, itd. Ne potvrdjujte ovaj zahtjev za importovanje! Za vise informacija pogledajte SPIP dokumentaciju.', # MODIF 'avis_espace_interdit' => 'Zabranjen prostor

    SPIP je vec instaliran.

    ', # MODIF 'avis_lecture_noms_bases_1' => 'Instalacijski program nije uspio ucitati imena instaliranih baza podataka.', 'avis_lecture_noms_bases_2' => 'Ili nijedna baza nije na raspolaganju, ili je funkcija, koja dozvoljava izlistavanje baza, dezaktivirana iz sigurnosnih razloga (sto je slucaj kod mnogih racunara).', 'avis_lecture_noms_bases_3' => 'Ako je u pitanju druga alternativa, moguce je da se koristi baza koja nosi isto ime kao vas login:', - 'avis_non_acces_message' => 'Nemate pristup ovoj poruci.', 'avis_non_acces_page' => 'Nemate pristup ovoj strani.', 'avis_operation_echec' => 'Operacija nije uspijela.', - 'avis_probleme_archive' => 'Problem kod citanja dokumenta @archive@', 'avis_suppression_base' => 'PAZNJA, brisanje podataka je nepovratno', - 'avis_version_mysql' => 'Vasa SQL verzija (@version_mysql@) ne dozvoljava automatsko popravljanje (ispravljanje) tabela baze.', # MODIF // B 'bouton_acces_ldap' => 'Dodaj pristup za LDAP >>', # MODIF 'bouton_ajouter' => 'Dodaj', - 'bouton_ajouter_participant' => 'DODAJ UCESNIKA:', - 'bouton_annonce' => 'NAJAVA', - 'bouton_checkbox_envoi_message' => 'mogucnost slanja poruke', - 'bouton_checkbox_indiquer_site' => 'obavezno naznaciti jednu web stranicu', - 'bouton_checkbox_signature_unique_email' => 'samo jedan potpis po e-mail adresi', - 'bouton_checkbox_signature_unique_site' => 'samo jedan potpis po web stranici', 'bouton_demande_publication' => 'Trazi publikaciju ovog clanka', - 'bouton_effacer_index' => 'Izbrisi indekse', 'bouton_effacer_tout' => 'Izbrisi SVE', - 'bouton_envoi_message_02' => 'POSALJI PORUKU', 'bouton_envoyer_message' => 'Definitivna poruka: posalji', 'bouton_modifier' => 'Izmijeni', - 'bouton_pense_bete' => 'LICNA BILJESKA', - 'bouton_radio_activer_messagerie' => 'Aktiviraj interni servis poruka', - 'bouton_radio_activer_messagerie_interne' => 'Aktiviraj interni servis poruka', - 'bouton_radio_activer_petition' => 'Aktiviraj peticiju', 'bouton_radio_afficher' => 'Prikazi', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Prikazi u listi prisutnih urednika', - 'bouton_radio_desactiver_messagerie' => 'Dezaktivirati servis poruka', 'bouton_radio_envoi_annonces_adresse' => 'Posalji najave na adresu:', 'bouton_radio_envoi_liste_nouveautes' => 'Posalji listu novosti', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Ne prikazuj u listi urednika', 'bouton_radio_non_envoi_annonces_editoriales' => 'Ne salji editorijalne najave', - 'bouton_radio_pas_petition' => 'Bez peticije', - 'bouton_radio_petition_activee' => 'Peticija je aktivirana', - 'bouton_radio_supprimer_petition' => 'Izbrisi peticiju', 'bouton_redirection' => 'PREUSMJERI', 'bouton_relancer_installation' => 'Ponovo pokreni instalaciju', 'bouton_suivant' => 'Sljedece', 'bouton_tenter_recuperation' => 'Pokusaj popraviti', 'bouton_test_proxy' => 'Provjeri proxy', 'bouton_vider_cache' => 'Isprazni kes', - 'bouton_voir_message' => 'Pregledaj poruku prije ovjere', // C - 'cache_mode_compresse' => 'Dokumenti kesa su snimljeni u kompresovanoj formi;.', - 'cache_mode_non_compresse' => 'Dokumenti kesa su pisani u nekompresovanoj formi.', 'cache_modifiable_webmestre' => 'Webmaster stranice moze promijeniti ovaj parametar.', 'calendrier_synchro' => 'Ako koristite neki kompaktibilni kalendarski software iCal, mozete ga uskladiti sa informacijama ove stranice.', @@ -100,7 +78,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Vas login', 'entree_login_connexion_1' => 'Login konekcije', 'entree_login_connexion_2' => '(Nekada odgovara vasem loginu za pristup na FTP; nekada je ostavljen prazan)', - 'entree_login_ldap' => 'Inicijalni LDAP login', 'entree_mot_passe' => 'Vasa lozinka', 'entree_mot_passe_1' => 'Lozinka konekcije', 'entree_mot_passe_2' => '(Nekada odgovara vasoj lozinki za pristup na FTP, a nekada je ostavljeno prazno)', @@ -120,7 +97,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'Za sve informacije o ovim metodama, mozete konsultovati SPIP dokumentaciju .', # MODIF 'ical_info_calendrier' => 'Na raspolaganju vam stoje dva kalendara. Jedan je plan stranice koji najavljuje sve publicirane artikle. Drugi sadrzi editorijalne najave, kao sto su vase posljednje privatne poruke: On je rezervisan za vas zahvaljujuci licnom kljucu, koji mozete izmijeniti u svakom momentu, dok mijenjate svoju lozinku.', 'ical_methode_http' => 'Download', - 'ical_methode_webcal' => 'Sinhronizacija (webcal://)', + 'ical_methode_webcal' => 'Sinhronizacija (webcal://)', # MODIF 'ical_texte_js' => 'Jedna linija javascripta vam omogucuje da recentne clanke, objavljene na ovoj web stranici, jako jednostavno objavite na vasoj web stranici.', 'ical_texte_prive' => 'Ovaj kalendar, koji je iskljucivo za licnu upotrebu, obavjestava vas o privatnim editorijalnim aktivnostima na ovoj stranici (zadaci i licni sastanci, clanci i objavljene kratke poruke).', 'ical_texte_rss' => 'Novosti sa ove stranice mozete sindikovati u bilo kojem citacu dokumenata XML/RSS (Rich Site Summary). Takodze, to je format koji dozvoljava SPIP-u da cita novosti objavljene na drugim stranicama, koristeci kompatibilan format za razmjenu (sindikovane stranice).', @@ -135,9 +112,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_creer_auteur' => 'Kreiraj novog autora i asociraj ga s ovim clankom', 'icone_creer_mot_cle' => 'Kreiraj novu kljucnu rijec i povezi je sa ovim clankom', 'icone_creer_rubrique_2' => 'Kreiraj novu rubriku', - 'icone_envoyer_message' => 'Posalji ovu poruku', 'icone_modifier_article' => 'Izmijeni ovaj clanak', - 'icone_modifier_message' => 'Izmijeni ovu poruku', 'icone_modifier_rubrique' => 'Izmijeni ovu rubriku', 'icone_retour' => 'Nazad', 'icone_retour_article' => 'Nazad na clanak', @@ -147,10 +122,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'Ovjeri ovaj potpis', 'image_administrer_rubrique' => 'Mozete biti administrator ove rubrike', 'info_1_article' => '1. clanak', - 'info_1_site' => '1. stranica', 'info_activer_cookie' => 'Mozete aktivirati jedan cookie za administraciu , koji ce vam dozvoliti lak prelaz iz javnog u privati prostor.', - 'info_admin_gere_rubriques' => 'Ovaj administrator uredzuje sljedece rubrike:', - 'info_admin_gere_toutes_rubriques' => 'Ovaj administrator uredzuje sve rubrike.', # MODIF 'info_administrateur' => 'Administrator', 'info_administrateur_1' => 'Administrator', 'info_administrateur_2' => 'stranice (pazljiva upotreba)', @@ -160,13 +132,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'Mozete biti administrator ove rubrike', 'info_adresse' => 'na adresu:', 'info_adresse_url' => 'URL adresa stranice za javnost', - 'info_afficher_visites' => 'Prikazi posjete za:', 'info_aide_en_ligne' => 'Online pomoc za SPIP', 'info_ajout_image' => 'Ako clanku dodajete fotografije u formi dokumenta, SPIP moze kreirati vinjete (minijature) dodanih fotografija. To naprimjer dozvoljava automatsko kreiranje galerije ili portfolija.', - 'info_ajout_participant' => 'Dodan je sljedeci ucesnik:', 'info_ajouter_rubrique' => 'Dodaj drugu rubriku za administraciju:', 'info_annonce_nouveautes' => 'Najava novosti', - 'info_anterieur' => 'nazad', 'info_article' => 'clanak', 'info_article_2' => 'clanci', 'info_article_a_paraitre' => 'Prikazi clanke sa kasnijim datumom', @@ -174,10 +143,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_2' => 'Clanci', 'info_articles_auteur' => 'Clanci ovog autora', 'info_articles_trouves' => 'Pronadjeni clanci', - 'info_articles_trouves_dans_texte' => 'Pronadjeni clanci (u tekstu)', 'info_attente_validation' => 'Vasi clanci koji cekaju ovjeru', 'info_aujourdhui' => 'danas:', - 'info_auteur_message' => 'AUTOR PORUKE:', + 'info_auteur_gere_toutes_rubriques_2' => 'Je gère toutes les rubriques', # MODIF 'info_auteurs' => 'Autori', 'info_auteurs_par_tri' => 'Autori@partri@', 'info_auteurs_trouves' => 'Pronadjeni autori', @@ -193,7 +161,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_1' => 'er iz @liste@', 'info_classement_2' => 'e iz @liste@', 'info_code_acces' => 'Ne zaboravite vas kod za pristup!', - 'info_compresseur_gzip' => 'N. B. : Il est recommandé de vérifier au préalable si l’hébergeur compresse déjà systématiquement les scripts php ; pour cela, vous pouvez par exemple utiliser le service suivant : @testgzip@', # MODIF 'info_config_suivi' => 'Ako ova adresa odgovara mailing listi, ispod mozete naznaciti adresu na koju se ucesnici mogu registrovati. Ta adresa moze biti URL (npr. strana za upisivanje na listu putem web-a), ili e-mail adresa opremljena specificnim subjektom(npr.: @adresse_suivi@?subject=prijava):', 'info_config_suivi_explication' => 'Mozete se prikljuciti mailing-listi ove stranice. Poslije cete u elektronskim putem primiti najave clanaka i kratkih poruka, koje su predlozene za publikaciju', 'info_confirmer_passe' => 'Potvrdi novu lozinku:', @@ -211,15 +178,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Datum proslog objavljivanja:', 'info_date_referencement' => 'DATUM PREPORUKE OVE STRANICE:', 'info_derniere_etape' => 'Posljednja etapa: Zavrseno je!', # MODIF - 'info_derniers_articles_publies' => 'Vasi posljednji objavljeni clanci', - 'info_desactiver_messagerie_personnelle' => 'Mozete aktivirati ili dezaktivirati vas licni servis poruka na ovoj stranici.', 'info_descriptif' => 'Opis:', 'info_discussion_cours' => 'Aktivne diskusije', 'info_ecrire_article' => 'Prije nego mozete pisati clanke, morate kreirati najmanje jednu rubriku.', 'info_email_envoi' => 'E-mail adresa za slanje (fakultativno)', 'info_email_envoi_txt' => 'Ovdje oznacite adresu za slanje e-mailova (po standardu ce adresa primaoca biti koristena kao adresa za slanje):', 'info_email_webmestre' => 'E-mail adresa webmastera (fakultativno)', # MODIF - 'info_entrer_code_alphabet' => 'Unesite kod alfabeta koji ce se koristiti:', 'info_envoi_email_automatique' => 'Automatsko slanje e-mailova', 'info_envoyer_maintenant' => 'Posalji sada', 'info_etape_suivante' => 'Pristupi sljedecoj etapi', @@ -229,24 +193,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_facilite_suivi_activite' => 'U svrhu posmatranja editorijalne aktivnosti stranice, SPIP moze elektronskom postom (npr. mailing listom urednika) proslijedjivati najave zahtijeva za publikaciju i ovjeru clanaka.', 'info_fichiers_authent' => 'Dokument autentifikacije « .htpasswd »', 'info_forums_abo_invites' => 'Vasa stranica obudhvata i forume za clanove; posjetioci se pozivaju na registraciju u javnom prostoru stanice.', - 'info_gauche_admin_effacer' => 'Ova strana je dostupna samo osobama odgovornim za web stranicu.

    Ona daje pristup raznim funkcijama tehnickog odrzavanja. Neke od njih pruzaju mogucnost specificne autentifikacije, koja zahtijeva pristup FTP-u web stranice.

    ', # MODIF 'info_gauche_admin_tech' => 'Ova strana je dostupna samo osobama odgovornim za web stranicu.

    Ona daje pristup raznim funkcijama tehnickog odrzavanja. Neke od njih pruzaju mogucnost specificne autentifikacije, koja zahtijeva pristup FTP-u web stranice.

    ', # MODIF 'info_gauche_admin_vider' => 'Ova strana je dostupna samo osobama odgovornim za web stranicu.

    Ona daje pristup raznim funkcijama tehnickog odrzavanja. Neke od njih pruzaju mogucnost specificne autentifikacije, koja zahtijeva pristup FTP-u web stranice.

    ', # MODIF 'info_gauche_auteurs' => 'Ovdje cete pronaci sve autore ove web stranice. Njihov status je naznacen bojom njihove ikone (administrator = zelena; urednik = zuta).', 'info_gauche_auteurs_exterieurs' => 'Vanjski autori bez pristupa stranici su oznaceni plavom ikonom, a izbrisani autori sa ikonicom korpe za smece.', # MODIF 'info_gauche_messagerie' => 'Servis za slanje poruka vam omogucuje razmjenu poruka medju piscima, cuvanje biljeske (za licnu upotrebu) ili, ako ste administrator, postavljanje najava na pocetnu stranicu u privatnom prostoru.', - 'info_gauche_numero_auteur' => 'BROJ AUTORA', 'info_gauche_statistiques_referers' => 'Ova strana predstavlja listu referenci, sto znaci stranice koje sadrze linkove sa vasom licnom stranicom, ali samo za jucer i danas; ova lista se vraca na nulu svaka 20 sata.', 'info_gauche_visiteurs_enregistres' => 'Ovdje mozete pronaci posjetioce koji su registrovani na javnoj stranici (forumi za clanove).', 'info_generation_miniatures_images' => 'Obradjivanje minijaturnih slika', - 'info_gerer_trad' => 'Zelite li ukljuciti linkove za prevod?', 'info_hebergeur_desactiver_envoi_email' => 'Neki kompjuteri dezaktiviraju automatsko slanje mailova njihovim serverima. U tom slucaju sljedece funkcije SPIP-a nece biti u uptrebi.', 'info_hier' => 'Jucer:', - 'info_historique_activer' => 'Aktivirati pracenje revizija', - 'info_historique_affiche' => 'Prikazati reviziju', - 'info_historique_comparaison' => 'uporedi', - 'info_historique_desactiver' => 'Dezaktivirati pracenje revizija', - 'info_historique_texte' => 'Pracenje revizija omogucuje ocuvanje historije svih izmjena na sadrzaju clanka i prikazivanje razlika verzija koje slijede.', 'info_identification_publique' => 'Vas javni identitet...', 'info_image_process' => 'Izaberite najbolju metodu pravljenja vinjeta tako sto cete kliknuti na odgovarajucu sliku.', 'info_image_process2' => 'N.B. Ako se ne pojavljuje nijedna slika, onda vas server nije konfigurisan za koristenje tih funkcija. Ako zelite koristiti te funkcije, kontaktirajte ososbu odgovornu za tehnicko odrzavanje i pitajte za extenzije «GD» ili «Imagick».', # MODIF @@ -264,8 +220,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_login_trop_court' => 'Ovaj login je prekratak.', 'info_maximum' => 'maksimalno:', 'info_meme_rubrique' => 'U istoj rubrici', - 'info_message' => 'Poruka od', - 'info_message_efface' => 'PORUKA IZBRISANA', 'info_message_en_redaction' => 'Vase poruke u toku uredjivanja', 'info_message_technique' => 'Tehnicka poruka:', 'info_messagerie_interne' => 'Interni servis za poruke', @@ -274,19 +228,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'Izmijeni rubriku:', 'info_modifier_titre' => 'Izmijeni: @titre@', 'info_mon_site_spip' => 'Moja SPIP stranica', - 'info_mot_sans_groupe' => '(Kljucne rijeci bez grupe...)', - 'info_moteur_recherche' => 'integrisani motor za pretragu', 'info_moyenne' => 'prosjek:', - 'info_multi_articles' => 'Aktivirati jezicki meni za clanke?', 'info_multi_cet_article' => 'Jezik ovog clanka:', 'info_multi_langues_choisies' => 'Izaberite jezike koji ce biti na raspolaganju urednicima vase stranice. Jezici koji se vec koriste na vasoj stranici, ne mogu se iskluciti.', - 'info_multi_rubriques' => 'Aktivirati jezicki meni za rubrike?', 'info_multi_secteurs' => '... samo za rubrike koje se nalaze na root-u?', 'info_nom' => 'Ime', 'info_nom_destinataire' => 'Ime primaoca', 'info_nom_site' => 'Ime vase stranice', 'info_nombre_articles' => '@nb_articles@ clanci,', - 'info_nombre_partcipants' => 'UCESNICI DISKUSIJE:', 'info_nombre_rubriques' => '@nb_rubriques@ rubrike,', 'info_nombre_sites' => '@nb_sites@ stranice,', 'info_non_deplacer' => 'Ne premijestati...', @@ -295,48 +244,35 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_modifiable' => 'Ne moze se modifikovati', 'info_non_suppression_mot_cle' => 'Ne zelim izbrisati ovu kljucnu rijec.', 'info_notes' => 'Biljeske', - 'info_nouveaux_message' => 'Nove poruke', 'info_nouvel_article' => 'Novi clanak', 'info_nouvelle_traduction' => 'Novi prevod:', 'info_numero_article' => 'CLANAK BROJ:', 'info_obligatoire_02' => '[Obavezno]', # MODIF 'info_option_accepter_visiteurs' => 'Prihvati upisivanje posjetioca na javnoj stranici', - 'info_option_faire_suivre' => 'Omoguci autorima clanaka pracenje poruka na forumima', 'info_option_ne_pas_accepter_visiteurs' => 'Odbij upisivanje posjetioca', 'info_options_avancees' => 'NAPREDNE OPCIJE', - 'info_ortho_activer' => 'Aktiviraj ortografsku provjeru', - 'info_ortho_desactiver' => 'Dezaktiviraj ortografsku provjeru', 'info_ou' => 'ili...', 'info_page_interdite' => 'Ova strana je zabranjena', 'info_par_nombre_article' => '(po broju clanaka)', # MODIF 'info_passe_trop_court' => 'Prekratka lozinka.', 'info_passes_identiques' => 'Lozinke nisu identicne.', - 'info_pense_bete_ancien' => 'Vase stare biljeske', # MODIF 'info_plus_cinq_car' => 'vise od pet karaktera', 'info_plus_cinq_car_2' => '(Vise od pet karaktera)', 'info_plus_trois_car' => '(Vise od tri karaktera)', 'info_popularite' => 'popularnosti: @popularite@ ; posjete: @visites@', - 'info_popularite_4' => 'popularnost: @popularite@ ; posjete: @visites@', 'info_post_scriptum' => 'Post-Scriptum', 'info_post_scriptum_2' => 'Post-scriptum :', 'info_pour' => 'za', - 'info_preview_admin' => 'Samo administratori mogu stranicu pogledati online', - 'info_preview_comite' => 'Svi urednici mogu stranicu pogledati online', - 'info_preview_desactive' => 'Nije moguce pogledati stranicu online. Ova opcija je dezaktivirana.', - 'info_preview_texte' => 'Moguce je stranicu pogledati online, kao da su svi clanci i kratke poruke objavljene, ukoliko iste imaju « predlozen » status. Da li ova opcija treba biti otvorena samo administratorima, svim urednicima ili nikome?', - 'info_principaux_correspondants' => 'Vasi glavni korespodenti', + 'info_preview_texte' => 'Moguce je stranicu pogledati online, kao da su svi clanci i kratke poruke objavljene, ukoliko iste imaju « predlozen » status. Da li ova opcija treba biti otvorena samo administratorima, svim urednicima ili nikome?', # MODIF 'info_procedez_par_etape' => 'Slijedite etape', 'info_procedure_maj_version' => 'Potrebno je pokrenuti update, da bi se baza podataka prikljucila novoj verziji SPIP-a.', 'info_ps' => 'P.S.:', # MODIF 'info_publier' => 'objavi moje clanke', 'info_question_accepter_visiteurs' => 'Ako obrasci vase stranice ukljucuju upisivanje posjetioca bez pristupa u privatnu stranicu, aktivirajte sljedecu opciju:', 'info_question_inscription_nouveaux_redacteurs' => 'Da li prihvatate upisivanje novih urednika u javnom prostoru stranice? Ako prihvatate, posjetioci ce se moci registrovati putem automatskog formulara, a zatim ce moci pristupiti privatnom prostoru i predlagati svoje clanke.
    Tokom faze upisivanja, korisnici ce primiti automatski e-mail sa kodom za pristup u privatnu stranicu. Neki kompjuteri sprecavaju slanje mailova putem njihovih servera: u tom slucaju ce automatsko upisivanje biti nemoguce.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Zelite li koristiti motor pretrage koji je integrisan u SPIP? (dezaktiviranje ove opcije ubrzava funkcionisanje sistema.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Korjen stranice', 'info_recharger_page' => 'Restartujte ovu stranicu za nekoliko momenata.', - 'info_recherche_auteur_a_affiner' => 'Previse rezultata za "@cherche_auteur@"; redefinisite opcije pretrage.', - 'info_recherche_auteur_ok' => 'Pronadjeno je vise urednika za "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Nema rezultata za « @cherche_auteur@ ».', 'info_recommencer' => 'Pocnite ponovo.', 'info_redacteur_1' => 'Urednik', @@ -353,7 +289,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'Rubrike', 'info_rubriques_02' => 'rubrike', 'info_rubriques_trouvees' => 'Pronadjene rubrike', - 'info_rubriques_trouvees_dans_texte' => 'Pronadjene rubrike (u ovom tekstu)', 'info_sans_titre' => 'Bez naslova', 'info_selection_chemin_acces' => 'Izaberite putanju pristupa direktoriju:', 'info_signatures' => 'potpisi', @@ -366,11 +301,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_sites_lies_mot' => 'Preporucene stranice koje su vezane za ovu kljucnu rijec', 'info_sites_proxy' => 'Koristi proxy', 'info_sites_trouves' => 'Pronadjene stranice', - 'info_sites_trouves_dans_texte' => 'Pronadjene stranice (u tekstu)', 'info_sous_titre' => 'Podnaslov:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Status ovog autora:', # MODIF - 'info_statut_efface' => 'Izbrisano', 'info_statut_redacteur' => 'Urednik', 'info_statut_utilisateurs_1' => 'Standardni status importovanih korisnika', 'info_statut_utilisateurs_2' => 'Izaberita koji status ce imati osobe koje su prisutne u LDAP direktoriju, kada se konektuju prvi put. Kasnije ce te biti u mogucnosti da status svakog autora individualno izmijenite.', @@ -388,7 +321,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_en_redaction' => 'Svi clanci koji su fazi obradjivanja', 'info_tous_articles_presents' => 'Svi objavljeni clanci u ovoj rubrici', 'info_tous_les' => 'svi:', - 'info_tous_redacteurs' => 'Najava svim urednicima', 'info_tout_site' => 'Citava web stranica', 'info_tout_site2' => 'Clanak nije preveden na ovaj jezik.', 'info_tout_site3' => 'Clanak je preveden na ovaj jezik, ali su usvojene izmjene preporucenog clanka. Potrebno je obnoviti prevod.', @@ -402,7 +334,6 @@ Prevodi su (sa bojom koja ukazuje na njihovo stanje) povezani sa originalnim cla 'info_une_rubrique' => 'jedna rubrika,', 'info_une_rubrique_02' => '1 rubrika', 'info_url' => 'URL:', - 'info_url_site' => 'URL WEB STRANICE:', 'info_urlref' => 'Hiperlink:', 'info_utilisation_spip' => 'Mozete poceti sa koristenjem sistema za asistirano objavljivanje...', 'info_visites_par_mois' => 'Prikazi po mjesecu:', @@ -419,15 +350,12 @@ Prevodi su (sa bojom koja ukazuje na njihovo stanje) povezani sa originalnim cla 'item_activer_messages_avertissement' => 'Aktiviraj poruke upozorenja', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Prikazati u kalendaru', - 'item_autoriser_documents_joints' => 'Ododbri dokumente pridruzene clancima', - 'item_autoriser_documents_joints_rubriques' => 'Odobri dokumente u rubrikama', 'item_choix_administrateurs' => 'administratori', 'item_choix_generation_miniature' => 'Automatski uredi minijature slika.', 'item_choix_non_generation_miniature' => 'Ne uredjuj minijature slika.', 'item_choix_redacteurs' => 'urednici', 'item_choix_visiteurs' => 'posjetioci javne stranice', 'item_creer_fichiers_authent' => 'kreiraj dokumente .htpasswd', - 'item_limiter_recherche' => 'Pretragu ograniciti na informacije sa vase stranice', 'item_login' => 'Login', 'item_mots_cles_association_articles' => 'za clanke', 'item_mots_cles_association_rubriques' => 'za rubrike', @@ -436,34 +364,24 @@ Prevodi su (sa bojom koja ukazuje na njihovo stanje) povezani sa originalnim cla 'item_non_accepter_inscriptions' => 'Ne dozvoljavaj upise', 'item_non_activer_messages_avertissement' => 'Bez poruka upozorenja', 'item_non_afficher_calendrier' => 'Ne prikazuj u kalendaru', - 'item_non_autoriser_documents_joints' => 'Ne odobravaj dokumente bez clanaka', - 'item_non_autoriser_documents_joints_rubriques' => 'Ne odobravaj dokumente u rubrikama', 'item_non_creer_fichiers_authent' => 'Ne kreiraj ove dokumente', - 'item_non_gerer_statistiques' => 'Ne uredjuj statistike', - 'item_non_limiter_recherche' => 'Pretragu prosiriti na sadrzaj preporuka', 'item_non_publier_articles' => 'Ne objavljuj clanke poslije datuma odredjenog za publikaciju.', - 'item_non_utiliser_moteur_recherche' => 'Ne koristi motor', 'item_nouvel_auteur' => 'Novi autor', 'item_nouvelle_rubrique' => 'Nova rubrika', 'item_oui' => 'Da', 'item_publier_articles' => 'Objavi clanke bez obzira na datum odredjen za njihovu publikaciju.', 'item_reponse_article' => 'Odgovor na clanak', - 'item_utiliser_moteur_recherche' => 'Koristi motor za pretragu', 'item_visiteur' => 'posjetioc', // J 'jour_non_connu_nc' => 'nepoznato', // L - 'lien_ajout_destinataire' => 'Dodaj ovog primaoca', 'lien_ajouter_auteur' => 'Dodaj ovog autora', - 'lien_ajouter_participant' => 'Dodaj ucesnika', 'lien_email' => 'e-mail', 'lien_nom_site' => 'IME STRANICE:', 'lien_retirer_auteur' => 'Odstrani autora', - 'lien_retrait_particpant' => 'Odstrani ovog ucesnika', 'lien_site' => 'stranica', - 'lien_supprimer_rubrique' => 'Izbrisi ovu rubriku', 'lien_tout_deplier' => 'Sve otvoriti', 'lien_tout_replier' => 'Sve zatvoriti', 'lien_trier_nom' => 'Poredaj po imenu', @@ -498,6 +416,7 @@ Prevodi su (sa bojom koja ukazuje na njihovo stanje) povezani sa originalnim cla // R 'repertoire_plugins' => 'Directorij:', + 'required' => '[Obavezno]', # MODIF // S 'statut_admin_restreint' => '(ograniceni admin)', # MODIF @@ -520,13 +439,10 @@ Prevodi su (sa bojom koja ukazuje na njihovo stanje) povezani sa originalnim cla 'texte_article_virtuel_reference' => 'Virtuelni clanak: clanak je preporucen na vasoj SPIP stranici, ali apreusmjeren na drugi URL. Da bi ste sprijecili preusmjeravanje, izbrisite nize prikazani URL.', 'texte_aucun_resultat_auteur' => 'Nema rezultata za"@cherche_auteur@"', 'texte_auteur_messagerie' => 'Ova stranica vam moze permanentno ukazivati na listu konektovanih urednika, sto vam omogucuje online razmjenu poruka. Mozete odluciti da se ne pojavljujete na ovoj listi (nevidljivi ste za druge korisnike).', - 'texte_auteur_messagerie_1' => 'Ova stranica vam dozvoljava razmjenu poruka i formiranje foruma za diskusiju izmedju ucesnika na stranici. Mozete odluciti da ne ucestvujete u ovim promjenama.', 'texte_auteurs' => 'AUTORI', 'texte_choix_base_1' => 'Izaberite vasu bazu:', 'texte_choix_base_2' => 'SQL server sadrzi vise baza podataka.', # MODIF 'texte_choix_base_3' => 'Izaberite Ispod one koja vam je dodjeljena od vaseg kompjutera:', # MODIF - 'texte_commande_vider_tables_indexation' => 'Koristite ovu komandu da biste ispraznili tabele za indeksiranje, koje koriste motori za pretragu integrisani u SPIP. To ce vam omoguciti da dobijete na prostoru na disku .', - 'texte_compresse_ou_non' => '(Ovo moze biti kompresovano ili ne)', 'texte_compte_element' => '@count@ element', 'texte_compte_elements' => '@count@ elementi', 'texte_connexion_mysql' => 'Provjerite informacije koje ste dobili od vaseg kompjutera: Trebate pronaci da li vas kompjuter podrzava SQL i kodove za konekciju na SQL server.', # MODIF @@ -538,10 +454,8 @@ Prevodi su (sa bojom koja ukazuje na njihovo stanje) povezani sa originalnim cla 'texte_date_publication_anterieure' => 'Datum proslog uredjivanja:', 'texte_date_publication_anterieure_nonaffichee' => 'Ne prikazuj datum proslog uredjivanja.', 'texte_date_publication_article' => 'DATUM OBJAVLJIVANJA:', - 'texte_descriptif_petition' => 'Opis peticije', 'texte_descriptif_rapide' => 'Brzi opis', 'texte_effacer_base' => 'Izbrisati SPIP bazu podataka', - 'texte_effacer_donnees_indexation' => 'Izbrisati podatke indexiranja', 'texte_en_cours_validation' => 'Dole navedeni clanci i kratke poruke su predlozene za publikaciju. Vase misljenje mozete iznijeti u njima prikljucenim forumima.', # MODIF 'texte_enrichir_mise_a_jour' => 'Mozete obogatiti izgled vaseg teksta na stranici, koristeci se « tipogrfskim precicama ».', 'texte_fichier_authent' => 'Treba li SPIP kreirati specijalne dokumente .htpasswd i .htpasswd-admin u repertoaru @dossier@ ?

    Ti dokumenti vam omogucuju zabranu pristupa autorima i administratorima na drugim mjestima vase stranice (npr. eksterni program za statistike).

    Ako od ovoga nemate nikakve koristi, mozete ostaviti standardnu vrijednost za ovu opciju (nema kreacije dokumenata).

    ', # MODIF @@ -549,19 +463,13 @@ Prevodi su (sa bojom koja ukazuje na njihovo stanje) povezani sa originalnim cla 'texte_informations_personnelles_2' => '(Napomena: ako se radi o reinstalaciji i ako vas pristup uvijek funkcionise, mozete', # MODIF 'texte_introductif_article' => '(Uvodni tekst u clanak.)', 'texte_jeu_caractere' => 'Ova opcija je korisna ako vasa stranica treba postavljati tekstove sa alfabetom (ukljucujuci njegove derivate) koji nije romanski (ili « okcidentalni »). U tom slucaju je pozeljno promijeniti standardnu postavku u odgovarajuci set karaktera; u svakum slucaju vam savjetujemo da napravite testove i pronadjete zadovoljavajuce rijesenje. Ako izmlijenite ovaj parametar, ne zaboravite javnu stranicu prilagoditi izmjenama (balise #CHARSET).', - 'texte_jeu_caractere_2' => 'Ova postavka nema retroaktivni efekat. Radi toga, vec uneseni tekstovi mogu radi biti pogresno prikazani uslijed izmjene postavke. U svako slucaju, mozete se bez gubitka vratiti na prethodnu postavku.', - 'texte_lien_hypertexte' => '(Ako se vasa poruka odnosi na clanak objavljen na web-u ili stranicu koja pruza vise informacija, naznacite naziv stranice i njenu URL adresu.)', 'texte_login_ldap_1' => '(Ostaviti prazno za anonimni pristup ili unjeti kompletnu putanju, npr. « uid=dupont, ou=users, dc=mon-domaine, dc=com ».)', 'texte_login_precaution' => 'Paznja! Ovo je login kojim ste trenutno konektovani. Pazljivo se koristite ovim formularom...', - 'texte_message_edit' => 'Paznja: ovu poruku moze imijeniti svaki administrator stranice, a vidljiva je svim urednicima. Koristite se najavama samo da biste najavili vazne dogadjaje zivota stranice.', 'texte_mise_a_niveau_base_1' => 'Upravo ste obnovili SPIP dokumente. Sada je potrebna nadogrdnja baze podataka.', 'texte_modifier_article' => 'Izmijeni clanak:', - 'texte_moteur_recherche_active' => 'Motor za pretragu je aktivan. Koristite se ovom komandom ako zelite pristupiti brze reindeksacije (npr. nakon pohranjivanja). Dokumenti koji su izmijenjeni na normalan nacin (prema SPIP rasoredu) su reindeksovani automatski: dakle, ova komanda je korisna samo u iznimnim slucajevima.', - 'texte_moteur_recherche_non_active' => 'Motor za pretragu nije aktiviran.', 'texte_multilinguisme' => 'Ako zelita obradjivati clanke na vise jezika, sa kompleksnom navigacijom, u organizaciju vase stranice mozete dodati meni za odabir jezika u clancima i/ili rubrikama.', # MODIF 'texte_multilinguisme_trad' => 'Svakako mozete aktivirati sistem sa obradjivanje linkova izmedju razlicitih prevoda clanaka.', # MODIF 'texte_non_compresse' => 'nije kompresovan (vas server ne podrzava ovu funkciju)', - 'texte_nouveau_message' => 'Nova poruka', 'texte_nouvelle_version_spip_1' => 'Instalirali ste novu verziju SPIP-a.', 'texte_nouvelle_version_spip_2' => 'Ovoj verziji je potrebno obnavljanje kompletnije od uobicajenog. Ako ste webmaster stranice, izbrisite dokument inc_connect.php3 iz repertoara ecrire i ponovo otpocnite instalaciju da biste obnovili parametre konekcije sa bazom podataka.

    (Napomena: ako ste zaboravili parametre vase konekcije pogledajte dokument inc_connect.php3 prije nego ga izbrisete...)

    ', # MODIF 'texte_operation_echec' => 'Vratite se na prethodnu stranu, izaberite drugu bazu ili napravite novu. Provjerite podatke koje vam je dao vas kompjuter.', @@ -573,7 +481,6 @@ Prevodi su (sa bojom koja ukazuje na njihovo stanje) povezani sa originalnim cla 'texte_publication_articles_post_dates' => 'Kako se SPIP treba ponasati prema clancima ciji je datum objavljivanja odredjen za buducnost? ', 'texte_rappel_selection_champs' => '[Ne zaboravite ispravno izabrati ovo polje.]', 'texte_recalcul_page' => 'Ako zelite preracunati samo jednu stranu, predjite u javni prostor i koristite « preracunati ».', - 'texte_recapitiule_liste_documents' => 'Ova strana ponavlja spisak dokumenata koje ste postavili u rubrikama. Da biste izmijenili informacije svakog dokumenta, pratite link do strane sa njegovom rubrikom.', 'texte_recuperer_base' => 'Popravi bazu podataka', 'texte_reference_mais_redirige' => 'clanak je preporucen u vasoj SPIP stranici, ali je preusmjeren na drugi URL.', 'texte_requetes_echouent' => 'Ako odredzeni SQL zahtijevi sistematski i bez ociglednog razloga ne uspijevaju, moguce je da je problem u samoj bazi podataka.

    SQL raspolaze mogucnosti popravljanja njegovih tabela, ako su one slucajno ostecene. Ovdje mozete isprobati popravku; u slucaju neuspijeha, sacuvajte kopiju prikaza na monitoru, koja mozda sadrzi naznake problema...

    Ako se problem nastavi, kontaktirajte vas hosting servis.

    ', # MODIF @@ -590,7 +497,6 @@ Prevodi su (sa bojom koja ukazuje na njihovo stanje) povezani sa originalnim cla 'texte_suppression_fichiers' => 'Koristite se ovom komandom da biste sve prisutne dokumente u SPIP kes. To omogucuje npr. izazivanje preracunavanja svih strana, u slucaju da ste izveli vazne izmjene grafizma ili strukture stranice.', 'texte_sur_titre' => 'Nadnaslov', 'texte_table_ok' => ':ova tabela je OK.', - 'texte_tables_indexation_vides' => 'Tabele indeksacije motora su prazne.', 'texte_tentative_recuperation' => 'Pokusaj popravke', 'texte_tenter_reparation' => 'Pokusati popravljanje baze podataka', 'texte_test_proxy' => 'Da bi ste probali ovaj proxy, ovdje naznacite adresu (web stranice) koju zelite testirati.', @@ -598,13 +504,8 @@ Prevodi su (sa bojom koja ukazuje na njihovo stanje) povezani sa originalnim cla 'texte_titre_obligatoire' => 'Naslov [Obavezan]', # MODIF 'texte_travail_article' => '@nom_auteur_modif@ ostaje @date_diff@ minuta za rad na ovom clanku', 'texte_travail_collaboratif' => 'Ako je uobicajeno da vise urednika radi na istom clanku, sistem moze postavljati posljednje « otvarane » clanke, da bi se izbjegle simultane izmjene. Ova opcija je standardno iskljucena, da bi se izbjeglo postavljanje neodgovarajucih poruka upozorenja.', - 'texte_trop_resultats_auteurs' => 'Previse rezultata za pretragu "@cherche_auteur@" ; predefinisite opcije pretrazivanja.', - 'texte_unpack' => 'download posljednje verzije', - 'texte_utilisation_moteur_syndiques' => 'Ako koristitie motor pretrage koji je integrisan u SPIP, mozete na dva razlicita nacina izvesti pretragu na sindikovanim stranicama i clancima.
    Najjednostavnije je pretrazivati samo naslove i opise clanaka.
    Mnogo jaca metoda dozvoljava SPIP-u da trazi unutar tekstova preporucenih sranica. Dakle, ako preporucite neku stranicu, SPIP ce izvrsiti pretragu unutar samog teksta stranice.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Ova metoda obavezuje SPIP da redovno posjecuje preporucene stranice, sto moze izazvati lahko usporavanje vase sopstvene stranice.', 'texte_vide' => 'prazno', 'texte_vider_cache' => 'Isprazniti kes', - 'titre_admin_effacer' => 'Tehnicko odrzavanje', 'titre_admin_tech' => 'Tehnicko odrzavanje', 'titre_admin_vider' => 'Tehnicko odrzavanje', 'titre_cadre_afficher_article' => 'Prikazi clanke', @@ -624,35 +525,20 @@ Prevodi su (sa bojom koja ukazuje na njihovo stanje) povezani sa originalnim cla 'titre_naviguer_dans_le_site' => 'Navigacija stranicom...', 'titre_nouvelle_rubrique' => 'Nova rubrika', 'titre_numero_rubrique' => 'RUBRIKA BROJ:', - 'titre_page_admin_effacer' => 'Tehnicko odrzavanje: brisanje baze', 'titre_page_articles_edit' => 'Izmjeni: @titre@', 'titre_page_articles_page' => 'Clanci', 'titre_page_articles_tous' => 'Cijela stranica', - 'titre_page_auteurs' => 'Posjetioci', 'titre_page_calendrier' => 'Kalendar @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Konfiguracija stranice', - 'titre_page_config_fonctions' => 'Konfiguracija stranice', - 'titre_page_configuration' => 'Konfiguracija stranice', - 'titre_page_controle_petition' => 'Pracenje peticija', 'titre_page_delete_all' => 'cjelokupno i nepovratno otklanjanje', - 'titre_page_documents_liste' => 'Dokumenti rubrike', - 'titre_page_index' => 'Vas privatni prostor', - 'titre_page_message_edit' => 'Napisi poruku', - 'titre_page_messagerie' => 'Vas transfer poruka', 'titre_page_recherche' => 'Rezultati pretrage @recherche@', 'titre_page_statistiques_referers' => 'Statistike (linkovi unosenja)', 'titre_page_upgrade' => 'Postavljanje SPIP-a na aktuelni nivo', 'titre_publication_articles_post_dates' => 'Objavljivanje clanaka sa kasnijim datumom', - 'titre_referencer_site' => 'Preporuciti stranicu:', - 'titre_rendez_vous' => 'SASTANAK:', 'titre_reparation' => 'Popravka', 'titre_suivi_petition' => 'Pracenje peticija', - 'trad_article_inexistant' => 'Ne postoji clanak koji nosi ovaj broj.', 'trad_article_traduction' => 'Sve verzije ovog clanka:', - 'trad_deja_traduit' => 'Ovaj clanak je vec prevod prethodnog clanka.', # MODIF 'trad_delier' => 'Ne vezati vise ovaj clanak za ove prevode', # MODIF 'trad_lier' => 'Ovaj clanak je prevod clanka broj:', 'trad_new' => 'Napisati novi prevod ovog clanka' # MODIF ); - -?> diff --git a/www/ecrire/lang/ecrire_ca.php b/www/ecrire/lang/ecrire_ca.php index 0b48ba5a..f6a3beea 100644 --- a/www/ecrire/lang/ecrire_ca.php +++ b/www/ecrire/lang/ecrire_ca.php @@ -1,9 +1,11 @@ 'Activar el connector', 'affichage' => 'Presentació', 'aide_non_disponible' => 'Aquesta part de l’ajuda en línia no està encara disponible en aquesta llengua.', + 'annuler_recherche' => 'Anul·lar la cerca', 'auteur' => 'Autor:', 'avis_acces_interdit' => 'Accès prohibit', - 'avis_article_modifie' => 'Atenció, @nom_auteur_modif@ ha treballat en aquest article fa @date_diff@ minuts', + 'avis_article_modifie' => 'Atenció, @nom_auteur_modif@ ha treballat a aquest article fa @date_diff@ minuts', 'avis_aucun_resultat' => 'Cap resultat', 'avis_base_inaccessible' => 'Impossible connectar-se a la base de dades @base@.', 'avis_chemin_invalide_1' => 'El camí que heu triat', @@ -21,72 +24,51 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_connexion_echec_1' => 'La connexió a la base de dades ha fracassat.', 'avis_connexion_echec_2' => 'Tornar a la pàgina precedent per verificar les dades que heu ficat.', 'avis_connexion_echec_3' => 'N.B. A molts dels servidors, heu de demanar l’activació del vostre accés a la base de dades abans de poder-la utilitzar. Si no podeu connectar-vos, verifiqueu que heu efectuat aquest pas.', + 'avis_connexion_erreur_creer_base' => 'La base de dades no s’ha pogut crear.', 'avis_connexion_erreur_nom_base' => 'El nom de la base només pot contenir lletres, xifres i guions', 'avis_connexion_ldap_echec_1' => ' La connexió amb el servidor LDAP ha caigut.', 'avis_connexion_ldap_echec_2' => 'Tornar a la pàgina precedent per verificar les dades que heu ficat.', 'avis_connexion_ldap_echec_3' => 'Alternativament, no utilitzeu el support LDAP per a importar els usuaris.', 'avis_deplacement_rubrique' => 'Atenció ! Aquesta secció conté @contient_breves@ breu@scb@ : si la moveu, assenyaleu-ho en aquesta casella de confirmació.', - 'avis_destinataire_obligatoire' => 'Ha d’escriure un destinatari abans d’enviar el missatge.', 'avis_erreur_connexion_mysql' => 'Error de connexió SQL', - 'avis_erreur_version_archive' => 'Alerta! El fitxer @archive@ correspon a una versió d’SPIP diferent a la que teniu instal·lada. Us podeu trobar amb grans dificultats: risc de destrucció de la base de dades, mal funcionament del lloc, etc. No valideu aquesta sol·licitud d’importació.

    Si voleu més informació, consulteu la documentació d’SPIP.

    ', - 'avis_espace_interdit' => 'Zona prohibida
    SPIP ja està instal·lat.
    ', + 'avis_espace_interdit' => 'Zona prohibida
    SPIP ja està instal·lat.
    ', 'avis_lecture_noms_bases_1' => 'El programa d’instal·lació no ha pogut llegir els noms de les bases de dades instal·lades.', 'avis_lecture_noms_bases_2' => 'O bé cap base de dades no està disponible, o bé la funció que permet de llistar les bases ha estat desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatge).', 'avis_lecture_noms_bases_3' => 'En la segona alternativa, és probable que una base que porti el vostre nom d’usuari sigui utilitzable:', - 'avis_non_acces_message' => 'No teniu accés a aquest missatge.', 'avis_non_acces_page' => 'No teniu accés a aquesta pàgina.', 'avis_operation_echec' => 'L’operació ha fracassat.', 'avis_operation_impossible' => 'Operació impossible', - 'avis_probleme_archive' => 'Problema de lectura del fitxer @archive@', 'avis_suppression_base' => 'ATENCIÓ, la supressió de dades és irreversible.', - 'avis_version_mysql' => 'La vostra versió de SQL (@version_mysql@) no permet l’auto reparació de les taules de la base de dades.', // B 'bouton_acces_ldap' => 'Afegir l’accés a LDAP', 'bouton_ajouter' => 'Afegir', - 'bouton_ajouter_participant' => 'AFEGIR UN PARTICIPANT :', - 'bouton_annonce' => 'ANUNCI', 'bouton_annuler' => 'Anul·lar', - 'bouton_checkbox_envoi_message' => 'possibilitat d’enviar un missatge', - 'bouton_checkbox_indiquer_site' => 'indicar obligatòriament un lloc Web', - 'bouton_checkbox_signature_unique_email' => 'una sola signatura per adreça electrònica ', - 'bouton_checkbox_signature_unique_site' => 'una sola signatura per lloc Web', + 'bouton_cache_activer' => 'Reactivar la memòria cau', + 'bouton_cache_desactiver' => 'Desactivar temporalment la memòria cau', 'bouton_demande_publication' => 'Demanar la publicació d’aquest article', 'bouton_desactive_tout' => 'Desactivar-ho tot', 'bouton_desinstaller' => 'desinstal·lar ', - 'bouton_effacer_index' => 'Esborrar els índex', 'bouton_effacer_tout' => 'Esborrar-ho TOT', - 'bouton_envoi_message_02' => 'ENVIAR UN MISSATGE', 'bouton_envoyer_message' => 'Missatge definitiu : enviar', 'bouton_fermer' => 'Tancar', 'bouton_mettre_a_jour_base' => 'Actualització de la base de dades', 'bouton_modifier' => 'Modificar', - 'bouton_pense_bete' => 'RECORDATORI D’ÚS PERSONAL', - 'bouton_radio_activer_messagerie' => 'Activar la missatgeria', - 'bouton_radio_activer_messagerie_interne' => 'Activar la missatgeria interna', - 'bouton_radio_activer_petition' => 'Activar la petició', 'bouton_radio_afficher' => 'Mostrar', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Aparèixer a la llista de redactors connectats', - 'bouton_radio_desactiver_messagerie' => 'Desactivar la missatgeria', 'bouton_radio_envoi_annonces_adresse' => 'Enviar els anuncis a l’adreça:', 'bouton_radio_envoi_liste_nouveautes' => 'Enviar la llista de novetats', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'No aparèixer a la llista de redactors/es ', 'bouton_radio_non_envoi_annonces_editoriales' => 'No enviar anuncis editorials', - 'bouton_radio_pas_petition' => 'Cap petició', - 'bouton_radio_petition_activee' => 'Petició activada', - 'bouton_radio_supprimer_petition' => 'Suprimir la petició', 'bouton_redirection' => 'REDIRECCIÓ', 'bouton_relancer_installation' => 'Tornar a llançar la instal·lació', 'bouton_suivant' => 'Següent', 'bouton_tenter_recuperation' => 'Intentar reparar', 'bouton_test_proxy' => 'Provar el proxy', 'bouton_vider_cache' => 'Buidar la memòria cau', - 'bouton_voir_message' => 'Veure el missatge abans de ser validat ', // C - 'cache_mode_compresse' => 'Els fitxers de la memòria cau són desats en mode comprimit.', - 'cache_mode_non_compresse' => 'Els fitxers de la memòria cau són desats en mode no comprimit.', 'cache_modifiable_webmestre' => 'Aquest paràmetre és modificable pel webmestre del lloc Web.', 'calendrier_synchro' => 'Si utilitzeu un programari d’agenda compatible iCal, el podeu sincronitzar amb les informacions d’aquest lloc.', 'config_activer_champs' => 'Activar els camps següents', @@ -105,7 +87,6 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'config_titre_base_sup' => 'Declaració d’una base suplementària', 'config_titre_base_sup_choix' => 'Escolliu una base suplementària', 'connexion_ldap' => 'Connexió:', - 'copier_en_local' => 'Copiar en local', 'creer_et_associer_un_auteur' => 'Crear i associar un autor', // D @@ -138,7 +119,6 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'entree_login' => 'El vostre nom d’usuari', 'entree_login_connexion_1' => 'El nom d’usuari de connexió', 'entree_login_connexion_2' => '(A vegades correspon al vostre nom d’usuari d’accés a l’FTP; a vegades s’ha de deixar buit)', - 'entree_login_ldap' => 'Nom d’usuari LDAP inicial', 'entree_mot_passe' => 'La contrasenya', 'entree_mot_passe_1' => 'La contrasenya de connexió', 'entree_mot_passe_2' => '(A vegades correspon a la vostra contrasenya FTP; a vegades es deixa buit)', @@ -156,8 +136,10 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'entree_url' => 'L’adreça (URL) del vostre lloc', 'entree_url_2' => 'Adreça (URL) del lloc', 'erreur_connect_deja_existant' => 'Ja existeix un servidor amb aquest nom', + 'erreur_email_deja_existant' => 'Aquesta adreça email està ja registrada.', 'erreur_nom_connect_incorrect' => 'Aquest nom de servidor no està autoritzat', - 'erreur_plugin_desinstalation_echouee' => 'La desinstal·lació del connector ha fracassat. No obstant el podeu desactivar. ', # MODIF + 'erreur_plugin_attribut_balise_manquant' => 'Atribut @attribut@ que manca a l’etiqueta @balise@.', + 'erreur_plugin_desinstalation_echouee' => 'La desinstal·lació del connector ha fracassat. No obstant el podeu desactivar. ', 'erreur_plugin_fichier_absent' => 'Fitxer absent', 'erreur_plugin_fichier_def_absent' => 'Fitxer de definició absent', 'erreur_plugin_nom_fonction_interdit' => 'Nom de funció prohibit', @@ -195,16 +177,13 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'icone_configuration' => 'Configuració', 'icone_creer_auteur' => 'Crear un nou autor i associar-lo a aquest article', 'icone_creer_mot_cle' => 'Crear una nova paraula clau i lligar-la a aquest article', - 'icone_creer_mot_cle_rubrique' => 'Crear una nova paraula clau i lligar-la a aquesta secció', - 'icone_creer_mot_cle_site' => 'Crear una nova paraula clau i lligar-la a aquest lloc Web', 'icone_creer_rubrique_2' => 'Crear una nova secció', + 'icone_developpement' => 'Desenvolupament', 'icone_edition' => 'Edició', - 'icone_envoyer_message' => 'Enviar aquest missatge', 'icone_ma_langue' => 'La meva llengua', 'icone_mes_infos' => 'Les meves informacions', 'icone_mes_preferences' => 'Les meves preferències', 'icone_modifier_article' => 'Modificar aquest article', - 'icone_modifier_message' => 'Modificar aquest missatge', 'icone_modifier_rubrique' => 'Modificar aquesta secció', 'icone_publication' => 'Publicació', 'icone_relancer_signataire' => 'Tornar a iniciar el signant', @@ -217,21 +196,15 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'icone_supprimer_signature' => 'Suprimir aquesta secció', 'icone_valider_signature' => 'Validar aquesta signatura', 'image_administrer_rubrique' => 'Podeu administrar aquesta secció', - 'impossible_modifier_login_auteur' => 'Impossible modificar l’usuari.', - 'impossible_modifier_pass_auteur' => 'Impossible modificar la contrasenya.', 'info_1_article' => '1 article', - 'info_1_article_syndique' => '1 article sindicat', 'info_1_auteur' => '1 autor', 'info_1_message' => '1 missatge', 'info_1_mot_cle' => '1 paraula clau', 'info_1_rubrique' => '1 secció', - 'info_1_site' => '1 lloc', 'info_1_visiteur' => '1 visitant', 'info_activer_cookie' => 'Podeu activar una galeta de correspondència, us permetrà passar fàcilment del lloc públic al lloc privat.', + 'info_activer_menu_developpement' => 'Afegir el menú Desenvolupament', 'info_admin_etre_webmestre' => 'Donar-me els drets d’administrador', - 'info_admin_gere_rubriques' => 'Aquest administrador gestiona les següents seccions:', - 'info_admin_gere_toutes_rubriques' => 'Aquest administrador gestiona totes les seccions', - 'info_admin_gere_toutes_rubriques_2' => 'Gestiono totes les seccions', 'info_admin_je_suis_webmestre' => 'Sóc administrador', 'info_admin_statuer_webmestre' => 'Donar a aquest administrador els drets de webmestre', 'info_admin_webmestre' => 'Aquest administrador és webmestre', @@ -243,15 +216,13 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_administrateurs' => 'Administradors', 'info_administrer_rubrique' => 'Podeu administrar aquesta secció', 'info_adresse' => 'a l’adreça:', + 'info_adresse_desinscription' => 'Adreça de desinscripció:', 'info_adresse_url' => 'Adreça (URL) del lloc públic', 'info_afficher_par_nb' => 'Mostrar per', - 'info_afficher_visites' => 'Mostrar les visites per:', 'info_aide_en_ligne' => 'Ajuda en línia d’SPIP', 'info_ajout_image' => 'Quan afegiu imatges com a documents adjunts en un article, l’SPIP pot crear automàticament imatges en miniatura de les imatges inserides. Això permet, per exemple, la creació automàtica d’una galeria o d’un portafoli.', - 'info_ajout_participant' => 'El següent participant ha estat afegit:', 'info_ajouter_rubrique' => 'Afegir una altra secció per administrar:', 'info_annonce_nouveautes' => 'Avís de les novetats', - 'info_anterieur' => 'anterior', 'info_article' => 'article', 'info_article_2' => 'articles', 'info_article_a_paraitre' => 'Els articles per publicar amb data posterior ', @@ -261,17 +232,14 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_articles_miens' => 'Els meus articles', 'info_articles_tous' => 'Tots els articles', 'info_articles_trouves' => 'Articles trobats', - 'info_articles_trouves_dans_texte' => 'Articles trobats (en el text)', 'info_attente_validation' => 'Els vostres articles en espera de validació', 'info_aucun_article' => 'Cap article', - 'info_aucun_article_syndique' => 'Cap article sindicat', 'info_aucun_auteur' => 'Cap autor', 'info_aucun_message' => 'Cap missatge', 'info_aucun_rubrique' => 'Cap secció', - 'info_aucun_site' => 'Cap lloc', - 'info_aucun_visiteur' => 'Cap visitant', 'info_aujourdhui' => 'avui:', - 'info_auteur_message' => 'AUTOR DEL MISSATGE:', + 'info_auteur_gere_toutes_rubriques' => 'Aquest autor gestiona totes les seccions', + 'info_auteur_gere_toutes_rubriques_2' => 'Gestiono totes les seccions', # MODIF 'info_auteurs' => 'Els autors', 'info_auteurs_par_tri' => 'Autors@partri@', 'info_auteurs_trouves' => 'Autors trobats', @@ -280,6 +248,7 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_barre_outils' => 'amb la seva barra d’eines?', 'info_base_installee' => 'L’estructura de la vostra bases de dades s’ha instal·lat.', 'info_bio' => 'Biografia', + 'info_cache_desactive' => 'La memòria cau està temporalment desactivada.', 'info_chapeau' => 'Encapçalament', 'info_chapeau_2' => 'Encapçalament:', 'info_chemin_acces_1' => 'Opcions: Camí d’accés al directori', @@ -290,8 +259,6 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_classement_2' => 'n a la @liste@', 'info_code_acces' => 'No oblideu els vostres codis d’accés!', 'info_compatibilite_html' => 'Norma HTML a seguir', - 'info_compresseur_gzip' => 'N. B. : Recomanem que verifiqueu prèviament si l’hostatjador ja comprimeix sistemàticament els scripts php ; per això, podeu utilitzar, per exemple, el següent servei: @testgzip@', # MODIF - 'info_compresseur_texte' => 'Si el vostre servidor no comprimeix automàticament les pàgines html per enviar-les als internautes, podeu provar forçar aquesta compressió per disminuir el pes de les pàgines baixades. Atenció: això pot reduir considerablement la velocitat d’alguns servidors. ', 'info_config_suivi' => 'Si aquesta adreça correspon a una llista de correu, podeu indicar més avall l’adreça a la que els participants es poden registrar. Aquesta adreça pot ser una URL (per exemple la pàgina de registre a la llista per la Web), o un correu electrònic amb un assumpte específic: @adresse_suivi@?assumpte=subscriure’s):', 'info_config_suivi_explication' => 'Us podeu subscriure a la llista de correu d’aquest lloc. Si ho feu, rebreu per correu electrònic els anuncis dels articles i de les breus que es proposen per ser publicats.', 'info_confirmer_passe' => 'Confirmar la nova contrasenya:', @@ -301,7 +268,7 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_conflit_edition_votre_version' => 'La vostra versió:', 'info_connexion_base' => 'Intent de connexió a la base de dades', 'info_connexion_base_donnee' => 'Connexió amb la vostra base de dades', - 'info_connexion_ldap_ok' => 'La connexió LDAP ha reeixit.

    Podeu passar a la següent etapa.

    ', # MODIF + 'info_connexion_ldap_ok' => 'La connexió LDAP ha reeixit.

    Podeu passar a la següent etapa.

    ', 'info_connexion_mysql' => 'La vostra connexió SQL', 'info_connexion_ok' => 'La connexió ha reexit.', 'info_contact' => 'Contacte', @@ -315,16 +282,13 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_date_publication_anterieure' => 'Data de redacció anterior:', 'info_date_referencement' => 'DATA DE REFERÈNCIA D’AQUEST LLOC:', 'info_derniere_etape' => 'S’ha acabat!', - 'info_derniers_articles_publies' => 'El més nou dels vostres articles editats', - 'info_desactiver_messagerie_personnelle' => 'Podeu habilitar o inhabilitar la missatgeria personal en aquest lloc.', 'info_descriptif' => 'Descripció:', 'info_desinstaller_plugin' => 'elimina les dades i desactiva el plugin', 'info_discussion_cours' => 'Discussions en curs', 'info_ecrire_article' => 'Abans de poder escriure un article, heu de crear com a mínim una secció.', 'info_email_envoi' => 'L’adreça electrònica del remitent (opcional)', 'info_email_envoi_txt' => 'Introduiu aquí l’adreça a fer servir per enviar els correus electrònics (per defecte, l’adreça del destinatari serà utilitzada com a adreça del remitent):', - 'info_email_webmestre' => 'Adreça electrònica del webmestre (opcional)', # MODIF - 'info_entrer_code_alphabet' => 'Entreu el codi del joc de caràcters a fer servir:', + 'info_email_webmestre' => 'Adreça electrònica del webmestre (opcional)', 'info_envoi_email_automatique' => 'Enviament automàtic de correus electrònics', 'info_envoyer_maintenant' => 'Envia-ho ara', 'info_etape_suivante' => 'Passar a l’etapa següent', @@ -335,33 +299,26 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_facilite_suivi_activite' => 'Per tal de facilitat el seguiment de l’activitat editorial, SPIP pot fer arribar per correu electrònic, per exemple a una llista de correu dels redactors, l’avís de les peticions de publicació i de les validacions dels articles.', 'info_fichiers_authent' => 'Fitxers d’autentificació « .htpasswd »', 'info_forums_abo_invites' => 'El seu lloc Web proporciona fòrums pels abonats; en el lloc públic els visitants són convidats a enregistrar-se.', - 'info_gauche_admin_effacer' => 'Només els responsables del lloc tenen accés a aquesta pàgina.

    Dóna accés a les diferents funcions de manteniment tècnic. Algunes d’aquestes necessiten un procés d’autenticació específic, que exigeix tenir un accés FTP al lloc Web.

    ', 'info_gauche_admin_tech' => 'Només els responsables del lloc tenen accés a aquesta pàgina.

    Dóna accés a les diferents funcions de manteniment tècnic. Algunes d’aquestes necessiten un procés d’autenticació específic que requereix disposar d’un accés FTP al lloc Web.

    ', 'info_gauche_admin_vider' => 'Només els responsables del lloc tenen accés a aquesta pàgina.

    Dóna accés a les diferents funcions de manteniment tècnic. Algunes d’aquestes necessiten un procés d’autenticació específic que requereix disposar d’un accés FTP al lloc Web.

    ', 'info_gauche_auteurs' => 'Aquí hi trobareu tots els autors del lloc. El seu estat s’indica pel color de la seva icona (administrador = verd; redactor = groc).', - 'info_gauche_auteurs_exterieurs' => 'Els autors externs, sense accés al lloc, estan indicats amb una icona blava; - els autors esborrats amb una paperera.', # MODIF + 'info_gauche_auteurs_exterieurs' => 'Els autors externs, sense accés al lloc web, estan indicats amb una icona blava; + els autors esborrats amb una icona grissa.', 'info_gauche_messagerie' => 'La missatgeria us permet intercanviar missatges entre els redactors, conservar recordatoris (pel vostre ús personal) o mostrar avisos a la pàgina inicial de l’espai privat (si sóu administrador).', - 'info_gauche_numero_auteur' => 'AUTOR NÚMERO', 'info_gauche_statistiques_referers' => 'Aquesta pàgina mostra la llista de referidors, és a dir, dels llocs que contenen enllaços cap al vostre propi lloc Web, únicament per ahir i avui; aquesta llista es posa a zero cada 24 hores. ', 'info_gauche_visiteurs_enregistres' => 'Aquí hi trobareu els visitants registrats a l’espai públic del lloc (fòrums per subscripció).', 'info_generation_miniatures_images' => 'Generació de miniatures d’imatges', - 'info_gerer_trad' => 'Gestionar els enllaços de traducció?', 'info_gerer_trad_objets' => '@objets@ : administrar els enllaços de traducció', 'info_hebergeur_desactiver_envoi_email' => 'Alguns proveïdors d’hostatge desactiven l’enviament automàtic de correus electrònics des dels seus servidors. En aquest cas, les següents funcions d’SPIP no funcionen. ', 'info_hier' => 'ahir:', - 'info_historique_activer' => 'Activar el seguiment de les revisions', - 'info_historique_affiche' => 'Mostrar aquesta versió', - 'info_historique_comparaison' => 'comparació', - 'info_historique_desactiver' => 'Desactivar el seguiment de les revisions', - 'info_historique_texte' => 'El seguiment de les revisions permet conservar un històric de totes les modificacions fetes al contingut d’un article, i mostrar les diferències entre les versions successives. ', 'info_identification_publique' => 'La vostra identitat pública...', 'info_image_process' => 'Vulgueu seleccionar el millor mètode de fabricació de vinyetes fent un clic damunt de la imatge corresponent. ', - 'info_image_process2' => 'N.B. Si no apareix cap imatge, aleshores és que el servidor que allotja la vostra web no ha estat configurat per utilitzar aquestes eines. Si desitgeu emprar aquestes funcions, poseu-vos en contacte amb el responsable tècnic i demaneu les extensions «GD» o «Imagick».', # MODIF + 'info_image_process2' => 'N.B. Si no apareix cap imatge, aleshores és que el servidor que allotja el vostre lloc web no ha estat configurat per utilitzar aquestes eines. Si desitgeu emprar aquestes funcions, poseu-vos en contacte amb el responsable tècnic i demaneu les extensions «GD» o «Imagick».', 'info_images_auto' => 'Imatges calculades automàticament', 'info_informations_personnelles' => 'Informacions personals', + 'info_inscription' => 'Inscripció le', 'info_inscription_automatique' => 'Inscripció automàtica dels nous redactors', 'info_jeu_caractere' => 'Joc de caràcters del lloc', 'info_jours' => 'dies', @@ -369,6 +326,7 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_langues' => 'Idiomes del lloc', 'info_ldap_ok' => 'L’autenticació LDAP està instal·lada.', 'info_lien_hypertexte' => 'Enllaç hipertext:', + 'info_liste_nouveautes_envoyee' => 'La lliste de les novetats ha estat enviada', 'info_liste_redacteurs_connectes' => 'Llista de redactors connectats', 'info_login_existant' => 'Aquest nom d’usuari ja existeix.', 'info_login_trop_court' => 'Nom d’usuari massa curt.', @@ -376,8 +334,6 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_logos' => 'Els logotips', 'info_maximum' => 'màxim:', 'info_meme_rubrique' => 'Dins la mateixa secció', - 'info_message' => 'Missatge de', - 'info_message_efface' => 'MISSATGE ESBORRAT', 'info_message_en_redaction' => 'Els vostres missatges en curs de redacció', 'info_message_technique' => 'Missatge tècnic:', 'info_messagerie_interne' => 'Missatgeria interna', @@ -388,29 +344,23 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_modifier_rubrique' => 'Modificar la secció:', 'info_modifier_titre' => 'Modificar : @titre@', 'info_mon_site_spip' => 'El meu lloc SPIP', - 'info_mot_sans_groupe' => '(Paraules sense grup...)', - 'info_moteur_recherche' => 'Motor de cerca integrat', 'info_moyenne' => 'mitjana:', - 'info_multi_articles' => 'Activar el menú d’idioma pels articles?', 'info_multi_cet_article' => 'Idioma d’aquest article:', 'info_multi_langues_choisies' => 'Seleccioneu a continuació els idiomes a disposició dels redactors del vostre lloc. Els idiomes ja utilitzats en el vostre lloc (visualitzats en primer lloc) no es poden desactivar.', 'info_multi_objets' => '@objets@ : activar el menú de llengua', - 'info_multi_rubriques' => 'Activar el menú d’idioma a les seccions?', 'info_multi_secteurs' => '... només per les seccions situades a l’arrel?', 'info_nb_articles' => '@nb@ articles', - 'info_nb_articles_syndiques' => '@nb@ articles sindicats', 'info_nb_auteurs' => '@nb@ autors', 'info_nb_messages' => '@nb@ missatges', 'info_nb_mots_cles' => '@nb@ paraules clau', 'info_nb_rubriques' => '@nb@ seccions', - 'info_nb_sites' => '@nb@ llocs', 'info_nb_visiteurs' => '@nb@ visitants', 'info_nom' => 'Nom', 'info_nom_destinataire' => 'Nom del destinatari', + 'info_nom_pas_conforme' => 'les etiquetes html no estàn permeses', 'info_nom_site' => 'Nom del vostre lloc', 'info_nombre_articles' => '@nb_articles@ articles,', - 'info_nombre_partcipants' => 'PARTICIPANTS A LA DISCUSSIÓ:', 'info_nombre_rubriques' => '@nb_rubriques@ seccions,', 'info_nombre_sites' => '@nb_sites@ llocs,', 'info_non_deplacer' => 'No desplaçar...', @@ -419,19 +369,14 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_non_envoi_liste_nouveautes' => 'No enviar la llista de novetats', 'info_non_modifiable' => 'no pot ser modificat', 'info_non_suppression_mot_cle' => 'no vull suprimir aquesta paraula clau.', - 'info_note_numero' => 'Nota @numero@', 'info_notes' => 'Notes', - 'info_nouveaux_message' => 'Nous missatges', 'info_nouvel_article' => 'Nou article', 'info_nouvelle_traduction' => 'Nova traducció:', 'info_numero_article' => 'ARTICLE NÚMERO:', 'info_obligatoire_02' => '[obligatori]', 'info_option_accepter_visiteurs' => 'Acceptar la inscripció dels visitants del lloc públic', - 'info_option_faire_suivre' => 'Reenviar els missatges del fòrum als autors dels articles', 'info_option_ne_pas_accepter_visiteurs' => 'Refusar la inscripció de visitants', 'info_options_avancees' => 'OPCIONS AVANÇADES', - 'info_ortho_activer' => 'Activar la verificació ortogràfica.', - 'info_ortho_desactiver' => 'Desactivar la verificació ortogràfica', 'info_ou' => 'o...', 'info_page_interdite' => 'Pàgina prohibida', 'info_par_nom' => 'per nom', @@ -441,20 +386,14 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_passe_trop_court' => 'Contrasenya massa curta.', 'info_passe_trop_court_car_pluriel' => 'La contrasenya ha de tenir com a mínim @nb@ caràcters.', 'info_passes_identiques' => 'Les dues contrasenyes no són idèntiques.', - 'info_pense_bete_ancien' => 'Els vostres antics recordatoris', 'info_plus_cinq_car' => 'més de 5 caràcters', 'info_plus_cinq_car_2' => '(Més de 5 caràcters)', 'info_plus_trois_car' => '(Més de 3 caràcters)', 'info_popularite' => 'popularitat: @popularite@ ; visites: @visites@', - 'info_popularite_4' => 'popularitat: @popularite@ ; visites: @visites@', 'info_post_scriptum' => 'Postdata', 'info_post_scriptum_2' => 'Postdata:', 'info_pour' => 'per', - 'info_preview_admin' => 'Només els administradors poden previsualitzar el lloc web', - 'info_preview_comite' => 'Tots els redactors poden previsualitzar el lloc web', - 'info_preview_desactive' => 'La previsualització està totalment desactivada', - 'info_preview_texte' => 'És possible previsualitzar el lloc com si tots els articles i breus (que almenys tinguen l’estat de "proposats") estigueren publicats. Aquesta possibilitat ha d’estar oberta només als administradors, a tots els redactors, o a ningú?', - 'info_principaux_correspondants' => 'Els vostres principals corresponsals', + 'info_preview_texte' => 'És possible previsualitzar el lloc com si tots els articles i breus (que almenys tinguen l’estat de "proposats") estigueren publicats. Aquesta possibilitat ha d’estar oberta només als administradors, a tots els redactors, o a ningú?', # MODIF 'info_procedez_par_etape' => 'procediu pas per pas', 'info_procedure_maj_version' => 'El procés d’actualització s’ha de tornar a arrancar per tal d’adaptar la base de dades a la nova versió d’SPIP.', 'info_proxy_ok' => 'Test del proxy amb èxit.', @@ -462,17 +401,12 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_publier' => 'publicar', 'info_publies' => 'Els vostres articles publicats en línia', 'info_question_accepter_visiteurs' => 'Si a les plantilles (esquelets) del vostre lloc Web es preveu l’enregistrament de visitants sense accés a l’espai privat, vulgueu activar la següent opció:', - 'info_question_inscription_nouveaux_redacteurs' => 'Accepteu les inscripcions de nous redactors a partir del lloc públic? Si ho accepteu, els visitants es podran inscriure - mitjançant un formulari automatitzat i llavors accediran a l’espai privat per proposar els seus propis articles.
    Durant el procés d’inscripció, els usuaris reben un correu electrònic automàtic en el que se’ls dóna els seus codis d’accés al lloc privat. Alguns proveïdors d’hostatge desactiven l’enviament de correus electrònics des dels seus servidors: en aquest - cas, la inscripció automàtica és impossible.
    ', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Voleu fer servir el motor de cerca integrat a l’SPIP? - (inhabilitar-lo accelera el funcionament del sistema.)', - 'info_question_vignettes_referer_non' => 'No mostrar les captures dels llocs d’origen de les visites', - 'info_qui_edite' => '@nom_auteur_modif@ ha treballat en aquest contingut fa @date_diff@ minuts', # MODIF + 'info_question_inscription_nouveaux_redacteurs' => 'Accepteu les inscripcions de nous redactors a partir del lloc web públic? Si ho accepteu, els visitants es podran inscriure + mitjançant un formulari automatitzat i llavors accediran a l’espai privat per proposar els seus propis articles.
    Durant el procés d’inscripció, els usuaris reben un correu electrònic automàtic en el que se’ls dóna els seus codis d’accés a la web privada. Alguns proveïdors d’hostatge desactiven l’enviament de correus electrònics des dels seus servidors: en aquest + cas, la inscripció automàtica és impossible.
    ', + 'info_qui_edite' => '@nom_auteur_modif@ ha treballat en aquest contingut fa @date_diff@ minuts', 'info_racine_site' => 'Arrel del lloc', 'info_recharger_page' => 'Actualitzeu aquesta pàgina en breus instants.', - 'info_recherche_auteur_a_affiner' => 'Massa resultats per "@cherche_auteur@"; afineu la cerca.', - 'info_recherche_auteur_ok' => 'Diversos redactors trobats per "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Cap resultat per « @cherche_auteur@ ».', 'info_recommencer' => 'Torneu-ho a provar.', 'info_redacteur_1' => 'Redactor', @@ -481,6 +415,7 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_redaction_en_cours' => 'En procés de redacció', 'info_redirection' => 'Redireccionament', 'info_redirection_activee' => 'La redirecció està activada.', + 'info_redirection_boucle' => 'Tracta de redirigir l’article sobre ell mateix.', 'info_redirection_desactivee' => 'S’ha suprimit la redirecció.', 'info_refuses' => 'Els vostres articles rebutjats', 'info_reglage_ldap' => 'Opcions: Posta a punt de la importació LDAP', @@ -491,7 +426,6 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_rubriques' => 'Seccions', 'info_rubriques_02' => 'seccions', 'info_rubriques_trouvees' => 'Seccions trobades', - 'info_rubriques_trouvees_dans_texte' => 'Seccions trobades (dins del text)', 'info_sans_titre' => 'Sense títol', 'info_selection_chemin_acces' => 'Seleccioneu a continuació el camí d’accés en el directori:', 'info_signatures' => 'signatures', @@ -504,14 +438,12 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_sites_lies_mot' => 'Els llocs referenciats lligats a aquesta paraula clau', 'info_sites_proxy' => 'Utilitzar un proxy', 'info_sites_trouves' => 'Llocs trobats', - 'info_sites_trouves_dans_texte' => 'Llocs trobats (en el text)', 'info_sous_titre' => 'Subtítol:', 'info_statut_administrateur' => 'Administrador', 'info_statut_auteur' => 'Estatus d’aquest autor:', 'info_statut_auteur_2' => 'Sóc', 'info_statut_auteur_a_confirmer' => 'Inscripció per confirmar', 'info_statut_auteur_autre' => 'Un altre estat:', - 'info_statut_efface' => 'Suprimit', 'info_statut_redacteur' => 'Redactor', 'info_statut_utilisateurs_1' => 'Estat per defecte dels usuaris importats', 'info_statut_utilisateurs_2' => 'Escolliu l’estat atribuït a les persones que hi ha al directori LDAP quan es connecten per primera vegada. Posteriorment podreu podreu modificar aquest valor cas per cas.', @@ -534,7 +466,6 @@ desactivada per raons de seguretat (cosa normal en molts proveïdors d’hostatg 'info_tous_articles_presents' => 'Tots els articles publicats en aquesta secció', 'info_tous_articles_refuses' => 'Tots els articles refusats', 'info_tous_les' => 'tots els:', - 'info_tous_redacteurs' => 'Avisos a tots els redactors', 'info_tout_site' => 'Tot el lloc', 'info_tout_site2' => 'L’article no ha estat traduït a aquesta llengua. ', 'info_tout_site3' => 'L’article ha estat traduït a aquesta llengua, però s’han fet modificacions a l’article de referència. La traducció s’ha de posar al dia.', @@ -551,7 +482,7 @@ amb un color que indica el seu estat:', 'info_une_rubrique_02' => '1 secció', 'info_url' => 'URL:', 'info_url_proxy' => 'URL del proxy', - 'info_url_site' => 'URL DEL LLOC WEB:', + 'info_url_site_pas_conforme' => 'l’URL del lloc web no és vàlida', 'info_url_test_proxy' => 'URL de test', 'info_urlref' => 'Enllaç hipertext:', 'info_utilisation_spip' => 'Podeu començar a utilitzar el sistema de publicació assistida...', @@ -562,7 +493,6 @@ amb un color que indica el seu estat:', 'info_visiteurs_02' => 'Visitants del lloc públic', 'info_webmestre_forces' => 'Els administradors estan definits a @file_options@.', 'install_adresse_base_hebergeur' => 'Adreça de la base de dades donada per l’hostatjador', - 'install_base_ok' => 'La base @base@ ha estat reconeguda', 'install_connect_ok' => 'La nova base de dades ha estat correctament declarada amb el nom del servidor @connect@.', 'install_echec_annonce' => 'La instal·lació probablement fracassarà, o anirà a parar a un lloc no funcional...', 'install_extension_mbstring' => 'SPIP no funciona amb :', @@ -581,8 +511,8 @@ amb un color que indica el seu estat:', 'install_serveur_hebergeur' => 'Servidor de base de dades atribuït per l’hostatjador', 'install_table_prefix_hebergeur' => 'Prefix de taula donat per l’hostatjador:', 'install_tables_base' => 'Taules de la base', - 'install_types_db_connus' => 'SPIP sap utilitzar MySQL (el més difós), PostgreSQL i SQLite.', # MODIF - 'install_types_db_connus_avertissement' => 'Alerta: Diversos plugins només funcionen amb MySQL', # MODIF + 'install_types_db_connus' => 'SPIP sap utilitzar MySQL (el més difós) i SQLite.', + 'install_types_db_connus_avertissement' => 'El suport de PostgreSQL és proposat igualment a títol experimental', 'instituer_erreur_statut_a_change' => 'L’estat ja s’ha modificat', 'instituer_erreur_statut_non_autorise' => 'No podeu escollir aquest estat', 'intem_redacteur' => 'redactor', @@ -591,8 +521,6 @@ amb un color que indica el seu estat:', 'item_activer_messages_avertissement' => 'Activar els missatges d’advertència', 'item_administrateur_2' => 'administrador', 'item_afficher_calendrier' => 'Mostrar en el calendari', - 'item_autoriser_documents_joints' => 'Autoritzar els documents adjunts als articles', - 'item_autoriser_documents_joints_rubriques' => 'Autoritzar els documents en les seccions', 'item_autoriser_syndication_integrale' => 'Difondre la totalitat dels articles als fitxers de sindicació', 'item_choix_administrateurs' => 'els administradors', 'item_choix_generation_miniature' => 'Generar automàticament les miniatures de les imatges.', @@ -600,7 +528,6 @@ amb un color que indica el seu estat:', 'item_choix_redacteurs' => 'els redactors', 'item_choix_visiteurs' => 'els visitants del lloc públic', 'item_creer_fichiers_authent' => 'Crear els fitxers .htpasswd', - 'item_limiter_recherche' => 'Limitar la cerca a les informacions que hi ha en aquest lloc', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Activar la missatgeria i l’agenda', 'item_mots_cles_association_articles' => 'als articles', @@ -610,22 +537,15 @@ amb un color que indica el seu estat:', 'item_non_accepter_inscriptions' => 'No acceptar les inscripcions', 'item_non_activer_messages_avertissement' => 'Sense missatges d’advertència', 'item_non_afficher_calendrier' => 'No mostrar-ho en el calendari', - 'item_non_autoriser_documents_joints' => 'Impedir la inclusió de documents en els articles', - 'item_non_autoriser_documents_joints_rubriques' => 'Impedir la inclusió de documents en les seccions', 'item_non_autoriser_syndication_integrale' => 'Només difondre un resum', - 'item_non_compresseur' => 'Desactivar la compressió', 'item_non_creer_fichiers_authent' => 'No crear aquests fitxers', - 'item_non_gerer_statistiques' => 'No gestionar les estadístiques', - 'item_non_limiter_recherche' => 'Ampliar la cerca als continguts dels llocs referenciats', 'item_non_messagerie_agenda' => 'Desactivar la missatgeria i l’agenda', 'item_non_publier_articles' => 'No publicar els articles abans de la data de publicació fixada.', - 'item_non_utiliser_moteur_recherche' => 'No utilitzar el motor', 'item_nouvel_auteur' => 'Nou autor', 'item_nouvelle_rubrique' => 'Nova secció', 'item_oui' => 'Si', 'item_publier_articles' => 'Publicar els articles sense tenir en compte la data de la seva publicació.', 'item_reponse_article' => 'Resposta a l’article', - 'item_utiliser_moteur_recherche' => 'Utilitzar el motor de cerca', 'item_version_html_max_html4' => 'Limitar l’HTML4 al lloc públic', 'item_version_html_max_html5' => 'Permetre l’HTML5', 'item_visiteur' => 'visitant', @@ -640,22 +560,22 @@ amb un color que indica el seu estat:', 'label_choix_langue' => 'Seleccioneu la vostra llengua', 'label_nom_fichier_connect' => 'Indiqueu el nom utilitzat per aquest servidor', 'label_slogan_site' => 'Eslògan del lloc', - 'label_taille_ecran' => 'Amplada de la pantalla', + 'label_taille_ecran' => 'Amplada de la pantalla', # MODIF 'label_texte_et_icones_navigation' => 'Menú de navegació', 'label_texte_et_icones_page' => 'Visualització a la pàgina', 'ldap_correspondance' => 'herència del camp @champ@', 'ldap_correspondance_1' => 'Herència dels camps LDAP', 'ldap_correspondance_2' => 'Per cadascun dels camps següents d’SPIP, indiqueu el nom del camp LDAP corresponent. Deixeu-lo buit per no omplir-lo, separeu-lo amb espais o comes per assajar diversos camps LDAP.', - 'lien_ajout_destinataire' => 'Afegir aquest destinatari', 'lien_ajouter_auteur' => 'Afegir aquest autor', - 'lien_ajouter_participant' => 'Afegir un participant', + 'lien_ajouter_une_rubrique' => 'Afegir aquesta secció', 'lien_email' => 'correu electrònic', 'lien_nom_site' => 'NOM DEL LLOC:', 'lien_retirer_auteur' => 'Retirar aquest autor', + 'lien_retirer_rubrique' => 'eliminar la secció ', 'lien_retirer_tous_auteurs' => 'Retirar tots els autors', - 'lien_retrait_particpant' => 'retirar aquest participant', + 'lien_retirer_toutes_rubriques' => 'elimina totes les seccions', 'lien_site' => 'lloc', - 'lien_supprimer_rubrique' => 'suprimir aquesta secció', + 'lien_tout_decocher' => 'Desmarcar tot', 'lien_tout_deplier' => 'Obrir-ho tot', 'lien_tout_replier' => 'Tancar-ho tot', 'lien_tout_supprimer' => 'Suprimir-ho tot', @@ -680,13 +600,12 @@ amb un color que indica el seu estat:', 'mois_non_connu' => 'desconegut', // N - 'nouvelle_version_spip' => 'Està disponible la versió @version@ d’SPIP', + 'nouvelle_version_spip' => 'Està disponible la versió @version@ d’SPIP', # MODIF // O 'onglet_contenu' => 'Contingut', 'onglet_declarer_une_autre_base' => 'Declarar una altre base', 'onglet_discuter' => 'Conversar', - 'onglet_documents' => 'Documents', 'onglet_interactivite' => 'Interactivitat', 'onglet_proprietes' => 'Propietats', 'onglet_repartition_actuelle' => 'actualment', @@ -722,19 +641,23 @@ amb un color que indica el seu estat:', 'plugin_info_credit' => 'Crèdits', 'plugin_info_erreur_xml' => 'La declaració d’aquest connector és incorrecta', 'plugin_info_install_ok' => 'Instal·lació correcta', - 'plugin_info_necessite' => 'Necessita:', # MODIF + 'plugin_info_necessite' => 'Necessita:', 'plugin_info_non_compatible_spip' => 'Aquest connector no és compatible amb aquesta versió d’SPIP', - 'plugin_info_plugins_dist_1' => 'Les extensions que hi ha a sota es carreguen i s’activen al directori @plugins_dist@.', # MODIF - 'plugin_info_plugins_dist_2' => 'No es poden desactivar.', # MODIF + 'plugin_info_plugins_dist_1' => 'Les extensions que hi ha a sota es carreguen i s’activen al directori @plugins_dist@.', + 'plugin_info_plugins_dist_2' => 'No es poden desactivar.', 'plugin_info_telecharger' => 'baixar-lo des de @url@ i instal·lar-lo a @rep@', + 'plugin_info_upgrade_ok' => 'L’actualització ha estat exitosa', 'plugin_librairies_installees' => 'Llibreries instal·lades', 'plugin_necessite_lib' => 'Aquest plugin necessita la llibreria @lib@', 'plugin_necessite_plugin' => 'Requereix el plugin @plugin@ com a mínim en la versió @version@.', + 'plugin_necessite_plugin_sans_version' => 'Requereix el plugin @plugin@', 'plugin_necessite_spip' => 'Requereix com a mínim la versió @version@ d’SPIP.', 'plugin_source' => 'font: ', 'plugin_titre_automatique' => 'Instal·lació automàtica', 'plugin_titre_automatique_ajouter' => 'Afegir plugins', 'plugin_titre_installation' => 'Instal·lació del connector @plugin@', + 'plugin_titre_modifier' => 'els meus plugins', + 'plugin_utilise_plugin' => 'Utilitza el plugin @plugin@ a la versió @version@.', 'plugin_zip_active' => 'Continueu per activar-lo', 'plugin_zip_adresse' => 'indiqueu més avall l’adreça d’un fitxer zip de plugin a baixar, o fins i tot l’adreça d’una llista de plugins.', 'plugin_zip_adresse_champ' => 'Adreça del plugin o de la llista ', @@ -746,41 +669,46 @@ amb un color que indica el seu estat:', 'plugins_actif_aucun' => 'No hi ha cap connector activat.', 'plugins_actif_un' => 'Un connector activat.', 'plugins_actifs' => '@count@ plugins actius.', - 'plugins_actifs_liste' => 'Connectors actius', # MODIF + 'plugins_actifs_liste' => ' Actius', 'plugins_compte' => '@count@ plugins', 'plugins_disponible_un' => 'Un connector disponible.', 'plugins_disponibles' => '@count@ plugins disponibles.', 'plugins_erreur' => 'Error en els plugins: @plugins@', 'plugins_liste' => 'Llista dels connectors', - 'plugins_liste_dist' => 'Extensions', # MODIF + 'plugins_liste_dist' => 'Extensions bloquejades', 'plugins_recents' => 'Connectors recents.', + 'plugins_tous_liste' => 'Tots', 'plugins_vue_hierarchie' => 'Jerarquia', 'plugins_vue_liste' => 'Llista', 'protocole_ldap' => 'Versió del protocol:', // Q 'queue_executer_maintenant' => 'Executar ara', + 'queue_info_purger' => 'Vous pouvez supprimer tous les travaux en attente et ré-inialiser la liste avec les travaux périodiques', # MODIF 'queue_nb_jobs_in_queue' => '@nb@ treballs en espera', 'queue_next_job_in_nb_sec' => 'Proper treball en @nb@ s', 'queue_no_job_in_queue' => 'Cap treball en espera', 'queue_one_job_in_queue' => '1 treball en espera', - 'queue_purger_queue' => 'Purgar la llista de treballs', # MODIF + 'queue_purger_queue' => 'Purgar la llista de treballs', 'queue_titre' => 'Llista de treballs', // R 'repertoire_plugins' => 'Directori:', + 'required' => '[obligatori]', // S 'sans_heure' => 'sense hora', - 'statut_admin_restreint' => '(admin restringida)', # MODIF + 'statut_admin_restreint' => '(admin restringida)', + 'statut_webmestre' => 'webmestre', // T - 'tache_cron_asap' => 'Tache CRON @function@ (ASAP)', # MODIF - 'tache_cron_secondes' => 'Tache CRON @function@ (toutes les @nb@ s)', # MODIF + 'tache_cron_asap' => 'Tasca CRON @function@ (ASAP)', + 'tache_cron_secondes' => 'Tasca CRON @function@ (toutes les @nb@ s)', 'taille_cache_image' => 'Les imatges calculades automàticament per SPIP (miniatures dels documents, títols presentats en forma gràfica, función matemàtiques en format TeX...) ocupen en el directori @dir@ un total de @taille@.', 'taille_cache_infinie' => 'Aquest lloc Web no preveu limitar la mida del directori de la memòria cau (cache).', 'taille_cache_maxi' => 'SPIP prova de limitar la mida del directori de la memòria cau (cache) d’aquest lloc a aproximadament @octets@ de dades.', - 'taille_cache_octets' => 'La mida de la memòria cau és actualment de @octets@.', # MODIF + 'taille_cache_moins_de' => 'La mida de la memòria cau és de menys de @octets@.', + 'taille_cache_octets' => 'La mida de la memòria cau és actualment de @octets@.', 'taille_cache_vide' => 'La memòria cau està buida.', 'taille_repertoire_cache' => 'Mida del directori de la memòria cau', 'text_article_propose_publication' => 'Article proposat per ser publicat.', @@ -795,18 +723,13 @@ la qual compren tots els accessos dels redactors i administradors. Despr 'texte_article_virtuel_reference' => ' Article virtual: article referenciat en la web amb SPIP, però redirigit cap un altre URL. Per suprimir la redirecció, esborreu l’URL que apareix dalt.', 'texte_aucun_resultat_auteur' => 'Cap resultat per "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Aquest lloc us pot mostrar permanentment la llista dels redactors que estan connectats, permetent-vos intercanviar missatges en directe. Podeu decidir no aparèixer en aquesta llista (i ser «invisibles» pels altres usuaris).', - 'texte_auteur_messagerie_1' => 'Aquest lloc permet l’intercanvi de missatges i la constitució de fòrums privats entre els participants. Podeu decidir no participar en aquests fòrums.', 'texte_auteurs' => 'ELS AUTORS', 'texte_choix_base_1' => 'Trie la seua base:', 'texte_choix_base_2' => 'El servidor SQL conté diverses bases de dades.', 'texte_choix_base_3' => 'Seleccioneu d’aquí sota quina us ha estat atribuïda pel vostre proveïdor d’hostatge:', 'texte_choix_table_prefix' => 'Prefix de les taules:', - 'texte_commande_vider_tables_indexation' => 'Utiliceu aquesta comanda per buidar les taules d’indexació emprades - pel motor de recerca integrat en SPIP. Això vos permetrà - guanyar espai a disc.', 'texte_compatibilite_html' => 'Podeu demanar a SPIP que produeixi, al lloc públic, codi compatible amb la norma HTML4, o permetre-li utilitzar les possibilitats més modernes de l’HTML5.', 'texte_compatibilite_html_attention' => 'No hi ha cap risc activant la opció HTML5, però si ho feu, les pàgines del vostre lloc, si voleu que siguin vàlides, hauran de començar per la següent menció: <!DOCTYPE html>.', - 'texte_compresse_ou_non' => '(açò pot ser comprimit o no)', 'texte_compte_element' => ' @count@ element', 'texte_compte_elements' => ' @count@ elements', 'texte_conflit_edition_correction' => 'Vulgueu controlar més avall les diferències entre les dues versions del text; podeu també copiar les vostres modificacions, i després començar de nou. ', @@ -818,44 +741,37 @@ la qual compren tots els accessos dels redactors i administradors. Despr 'texte_crash_base' => 'Si la bbdd ha deixat de funcionar correctament, es pot intentar fer una reparació automàtica.', 'texte_creer_rubrique' => 'Abans de poder escriure els articles,
    heu de crear una secció.', 'texte_date_creation_article' => 'DATA DE CREACIÓ DE L’ARTICLE :', + 'texte_date_creation_objet' => 'Data de creació', # on ajoute le ":" 'texte_date_publication_anterieure' => 'Data de redacció anterior:', 'texte_date_publication_anterieure_nonaffichee' => 'No publicar els articles de data de redacció anterior.', 'texte_date_publication_article' => 'DATA DE PUBLICACIÓ EN LÍNIA :', - 'texte_descriptif_petition' => 'Descripció de la petició', + 'texte_date_publication_objet' => 'Data de publicació en línia', 'texte_descriptif_rapide' => 'Descripció ràpida', 'texte_effacer_base' => 'Esborrar la base de dades SPIP', - 'texte_effacer_donnees_indexation' => 'Borrar les dades d’indexació', 'texte_effacer_statistiques' => 'Esborrar les estadístiques', 'texte_en_cours_validation' => 'Els continguts que hi ha aquí a sota estan a l’espera de ser validats. ', 'texte_enrichir_mise_a_jour' => 'Podeu enriquir la compaginació del text emprant "dreceres tipogràfiques".', - 'texte_fichier_authent' => 'SPIP ha de crear els fitxers especials .htpasswd i .htpasswd-admin en el directori @dossier@ ?

    - Aquests fitxers us poden servir per restringir l’accés als autors i als administradors a altres llocs de la vostra Web (programa extern d’estadístiques, per exemple).

    Si no li veieu cap utilitat, podeu deixar aquesta opció en el seu valor per defecte (no crear fitxers).

    ', # MODIF + 'texte_fichier_authent' => 'SPIP ha de crear els fitxers especials + .htpasswd i .htpasswd-admin en el +directori @dossier@ ? +

    Aquests fitxers us poden servir per restringir l’accés als autors i als administradors a altres llocs de la vostra Web (programa extern d’estadístiques, per exemple).

    + Si no li veieu cap utilitat, podeu deixar aquesta opció en el seu valor per defecte (no hi ha creació de fitxers).

    ', 'texte_informations_personnelles_1' => ' El sistema va ara a fer-vos un accés personalitzat al web.', - 'texte_informations_personnelles_2' => ' (Nota: si es tracta d’una reinstal.lació mantenint el vostre accés pot', # MODIF + 'texte_informations_personnelles_2' => ' (Nota: si es tracta d’una reinstal.lació, si el vostre accés funciona encara vostès poden', 'texte_introductif_article' => ' (Texte introductiu de l’article.)', 'texte_jeu_caractere' => 'És aconsellable utilitzar, al vostre lloc Web, l’alfabet universal (utf-8) : aquest permet la presentació de texts en totes les llengües, i no posa problemes de compatibilitat amb els navegadors moderns.', - 'texte_jeu_caractere_2' => 'Alerta: aquesta modificació no suposa la conversió dels textos ja registrats a la base de dades.', 'texte_jeu_caractere_3' => 'Actualment el vostre lloc Web està configurat amb el joc de caràcters:', 'texte_jeu_caractere_4' => 'Si això no correspon a la realitat de les vostres dades (com a conseqüència, per exemple, d’una restauració de la base de dades), o si inicieu aquest lloc Web i desitgeu inicialitzar amb un altre joc de caràcters, vulgueu indicar-lo aquí:', - 'texte_jeu_caractere_conversion' => 'Nota: podeu decidir convertir de cop tot el conjunt de textos del vostre lloc Web (articles, breus, fòrums, etc.) cap a l’alfabet utf-8, tornant a la pàgina de conversió cap a l’utf-8.', - 'texte_lien_hypertexte' => '(Si el vostre missatge se refereix a un article publicat sobre el Web, o a una pàgina donant més informacions, si us plau indiqueu a continuació el nom de la pàgina i la seua adreça URL.)', 'texte_login_ldap_1' => '(Deixar buit per un accés anònim, o ficar l’ordre sencera, per exemple " uid=Ferrer, ou=users, dc=el-meu-domini, dc=com".)', 'texte_login_precaution' => 'Atenció! Aquest és el login o nom d’usuari amb el qual esteu connectats actualment. Useu aquest formulari amb precaució...', - 'texte_message_edit' => 'Atenció: aquest missatge pot ser modificat per tots els administradors del lloc, i és invisible per a tots els redactors. No feu servir els anuncis per a res que no siga realment important pel manteniment del site.', 'texte_messagerie_agenda' => 'Una missatgeria permet als redactors del lloc comunicar-se entre ells directament a l’espai privat del lloc Web. Està associada a una agenda. ', 'texte_mise_a_niveau_base_1' => 'S’han actualitzat els fitxers d’SPIP. Cal ara actualitzar la base de dades del lloc.', 'texte_modifier_article' => 'Modificar l’article:', - 'texte_moteur_recherche_active' => 'El motor de cerca està activat. Utilitzeu aquesta comanda - si desitgeu fer una reindexació ràpida (després de la restauració - d’una còpia de seguretat, per exemple). Heu d’adonar-vos que els documents modificats de forma normal(des de la interfície d’SPIP) són automàticament -reindexats: aquesta comanda no és útil només que de manera excepcional.', - 'texte_moteur_recherche_non_active' => 'El motor de recerca no està activat.', - 'texte_multilinguisme' => 'Si es desitja es pot generar els articles es diversos idiomes, amb una navegació complexa, es pot també afegir un menú per seleccionar l’idioma dels articles i/o de les seccions, en funció de l’organització del lloc web.', # MODIF - 'texte_multilinguisme_trad' => 'Es pot igualment activar un sistema de gestió d’enllaços entre les diferents traduccions d’un article.', # MODIF + 'texte_multilinguisme' => 'Si es desitja es pot generar els articles es diversos idiomes, amb una navegació complexa, es pot també afegir un menú per seleccionar l’idioma dels articles i/o de les seccions, en funció de l’organització del lloc web.', + 'texte_multilinguisme_trad' => 'Es pot igualment activar un sistema de gestió d’enllaços entre les diferents traduccions de certs objectes.', 'texte_non_compresse' => ' no comprimit (el servidor no suporta aquesta funcionalitat)', - 'texte_nouveau_message' => 'Missatge nou', 'texte_nouvelle_version_spip_1' => 'Heu instal.lat una nova versió d’SPIP.', 'texte_nouvelle_version_spip_2' => 'Aquesta nova versió necessita una actualització més complerta que la normal. Si sou el webmestre del lloc, esborreu el fitxer @connect@ i repreneu la instal·lació per tal d’actualitzar els paràmetres de connexió a la base de dades.

    (NB.: si heu oblidat els vostres paràmetres de connexió, doneu un cop d’ull al fitxer @connect@ abans de suprimir-lo...)

    ', 'texte_operation_echec' => 'Torneu a la pàgina anterior, seleccioneu una altra base o creeu-ne una de nova. Verifiqueu les dades donades pel vostre proveïdor d’hostatge.', @@ -868,7 +784,6 @@ reindexats: aquesta comanda no és útil només que de manera excepcional.', 'texte_publication_articles_post_dates' => 'Que ha de fer SPIP quan els articles tinguin una data de publicació posterior a l’actual?', 'texte_rappel_selection_champs' => ' [No oblide pas seleccionar correctament aquest camp.]', 'texte_recalcul_page' => 'Si es vol recarregar una sola pàgina, cal passar abans per l’espai públic i premer el botó "recarregar".', - 'texte_recapitiule_liste_documents' => 'Aquesta pàgina recull un llistat de documents que hi ha a cada secció de la seua web. Per modificar la informació de cada document premer el enllaç cap a la pàgina de la seua secció.', 'texte_recuperer_base' => 'Reparar la base de dades', 'texte_reference_mais_redirige' => 'article referenciat a la web SPIP, pero redirigit cap a un altre URL.', 'texte_requetes_echouent' => 'Quan algunes peticions SQL fracassen sistemàticament i sense cap raó aparent, és possible que sigui per culpa de la pròpia base de dades.

    @@ -889,7 +804,6 @@ a la caché d’SPIP. Això permet per exemple forçar un recàlcul de totes les fet modificacions importants gràficament o estructurals del lloc web.', 'texte_sur_titre' => 'Sobretítol', 'texte_table_ok' => ': aquesta taula està OK.', - 'texte_tables_indexation_vides' => 'Les taules d’indexació del motor estan buides.', 'texte_tentative_recuperation' => 'Intent de reparació', 'texte_tenter_reparation' => 'Intentar una reparació de la base de dades', 'texte_test_proxy' => 'Per fer una prova d’aquest proxy, indicar ací l’adreça del lloc Web @@ -899,15 +813,8 @@ que es vol testar.', 'texte_travail_article' => '@nom_auteur_modif@ ha treballat amb aquest article fa @date_diff@ minuts', 'texte_travail_collaboratif' => 'Si és freqüent que diversos redactors treballin en un mateix article, el sistema pot mostrar els articles "oberts" recentment per tal d’evitar les modificacions simultànies. Aquesta opció està desactivada per defecte amb la finalitat d’evitar mostrar missatges d’advertència intempestius.', - 'texte_trop_resultats_auteurs' => 'Massa resultats "@cherche_auteur@" ; si us plau, faça una recerca més acurada.', - 'texte_unpack' => 'descàrrega de la darrera versió', - 'texte_utilisation_moteur_syndiques' => 'Quan utilitzeu el motor de cerca integrat a SPIP, podeu efectuar les cerques als llocs i als articles sindicats de dues maneres diferents.
    - La més simple consisteix en buscar únicament a dins dels títols i les descripcions dels articles.
    - Un segon mètode, molt més potent, permet a SPIP buscar també a dins dels texts dels llocs referenciats. Si referencieu un lloc Web, SPIP efectuarà llavors la cerca a dins del text d’aquest lloc.', - 'texte_utilisation_moteur_syndiques_2' => 'Aquest metode obliga SPIP a visitar -regularment les webs referenciades, -el que pot provocar un lleuger alentiment de la vostra pròpia web.', 'texte_vide' => 'buit', 'texte_vider_cache' => 'buidar la memòria cau', - 'titre_admin_effacer' => 'Manteniment tècnic', 'titre_admin_tech' => 'Manteniment tècnic', 'titre_admin_vider' => 'Manteniment tècnic', 'titre_ajouter_un_auteur' => 'Afegir un autor', @@ -938,54 +845,27 @@ el que pot provocar un lleuger alentiment de la vostra pròpia web.', 'titre_naviguer_dans_le_site' => 'Navegar dins el web...', 'titre_nouvelle_rubrique' => 'Nova secció', 'titre_numero_rubrique' => 'SECCIÓ NÚMERO:', - 'titre_page_admin_effacer' => 'Manteniment tècnic: esborrar la base', 'titre_page_articles_edit' => 'Modificar: @titre@', 'titre_page_articles_page' => 'Els articles', 'titre_page_articles_tous' => 'Tota la web', - 'titre_page_auteurs' => 'Visitants', 'titre_page_calendrier' => 'Calendari @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Configuració del lloc', - 'titre_page_config_fonctions' => 'Configuració del lloc', - 'titre_page_configuration' => 'Configuració del lloc', - 'titre_page_controle_petition' => 'Control de peticions', 'titre_page_delete_all' => 'supresió total i irreversible', - 'titre_page_documents_liste' => 'Els documents de les seccions', - 'titre_page_index' => 'El vostre espai privat', - 'titre_page_message_edit' => 'Enviar un misstge', - 'titre_page_messagerie' => 'La vostra missatgeria', 'titre_page_recherche' => ' Resultats de la recerca @recherche@', 'titre_page_statistiques_referers' => 'Estadistiques (vincles entrants)', - 'titre_page_statistiques_signatures_jour' => 'Nombre de signatures per dia', - 'titre_page_statistiques_signatures_mois' => 'Nombre de signatures per mes', 'titre_page_upgrade' => 'Actualitzar SPIP', 'titre_publication_articles_post_dates' => 'Publicació dels articles datats posteriorment', - 'titre_referencer_site' => 'Referenciar el lloc Web:', - 'titre_rendez_vous' => 'CITA:', 'titre_reparation' => ' Reparació', 'titre_suivi_petition' => 'Seguiment de les peticions', 'tls_ldap' => 'Transport Layer Security:', - 'trad_article_inexistant' => 'No existeix cap article que porte aquest número.', 'trad_article_traduction' => 'Totes les versions d’aquest article:', - 'trad_deja_traduit' => 'Error: impossible enllaçar aquest article amb el número demanat.', 'trad_delier' => 'No enllaçar amb aquestes traduccions', 'trad_lier' => 'Aquest article és una traducció de l’article número:', 'trad_new' => 'Escriure una nova traducció', // U - 'upload_info_mode_document' => 'Deixar aquesta imatge a dins del portafoli ', - 'upload_info_mode_image' => 'Treure aquesta imatge del portafoli', - 'utf8_convert_attendez' => 'Espereu-vos uns instants i recarregueu aquesta pàgina. ', - 'utf8_convert_avertissement' => 'Us prepareu per convertir el contingut de la vostra base de dades (articles, breus, etc) del joc de caràcter @orig@ cap al joc de caràcters @charset@.', - 'utf8_convert_backup' => 'No oblideu fer abans una còpia de seguretat sencera del vostre lloc Web. Haureu també de verificar que les vostre plantilles i fitxers de llengua són compatibles @charset@.', - 'utf8_convert_erreur_deja' => 'El vostre lloc Web ja està en @charset@, és inútil convertir-lo...', 'utf8_convert_erreur_orig' => 'Error: no es permet l’ús del joc de caràcters @charset@.', - 'utf8_convert_termine' => 'S’ha acabat!', - 'utf8_convert_timeout' => 'Important: en cas de temps excedit del servidor, volgueu recarregar la pàgina fins que indiqui «acabat».', - 'utf8_convert_verifier' => 'Ara heu de buidar la memòria cau, i verificar que tot és correcte a les pàgines publicades del vostre lloc Web. En cas que tingueu problemes, s’ha fet una còpia de seguretat de les vostres dades (en format SQL) dins del directori @rep@.', - 'utf8_convertir_votre_site' => 'Convertir el vostre lloc Web a utf-8', // V 'version' => 'Versió:' ); - -?> diff --git a/www/ecrire/lang/ecrire_co.php b/www/ecrire/lang/ecrire_co.php index b913f583..9d8ba454 100644 --- a/www/ecrire/lang/ecrire_co.php +++ b/www/ecrire/lang/ecrire_co.php @@ -1,9 +1,11 @@ 'Turnate à a pàgina di nanzu è verificate l’infurmazioni date. ', 'avis_connexion_ldap_echec_3' => 'O sinnò, ùn aduprate micca u supportu LDAP per impurtà utilizatori.', 'avis_deplacement_rubrique' => 'Attenti ! Sta rùbbrica cuntene @contient_breves@ dispacciu/i : Sè vo a spiazzate, spuntate puru sta casella da cunfirmà.', - 'avis_destinataire_obligatoire' => 'Duvite rinsignà un destinatariu prima di mandà stu messagiu.', 'avis_erreur_connexion_mysql' => 'Errore di cunnessione SQL', - 'avis_erreur_version_archive' => 'Attenti ! u schedariu @archive@ currisponde - à una versione di SPIP sferente da quella stallata. Puderanu accade grossi prublemi : - rìsicu di distruzzione di a vostra basa, gattivi funziunamenti vari di u situ, ecc. - Ùn cunfirmate micca sta dumanda d’impurtazione ! -

    Per sapè ne di più, andate à vede - a ducumentazione di SPIP.

    ', - 'avis_espace_interdit' => 'Spaziu interdettu
    Hè digià stallatu SPIP.
    ', + 'avis_espace_interdit' => 'Spaziu interdettu
    Hè digià stallatu SPIP.
    ', 'avis_lecture_noms_bases_1' => 'U prugrammu di stallazione ùn hà pussutu leghje i nomi di e base stallate nant’à u servore.', 'avis_lecture_noms_bases_2' => 'Sia ùn hè dispunìbule nisuna basa di dati, sia a funzione chì permette d’accede à e base hè stata disattivata per ragioni di sicurezza (stu casu hè abbastanza spartu).', 'avis_lecture_noms_bases_3' => 'In u secondu casu, pò accade chì una basa di dati sia aduprèvule cù u vostru nome di login :', - 'avis_non_acces_message' => 'Ùn avete accessu à stu messagiu.', 'avis_non_acces_page' => 'Ùn avete accessu à sta pàgina.', 'avis_operation_echec' => 'Hè fiascata l’uperazione.', 'avis_operation_impossible' => 'Uperazione impussìbule', - 'avis_probleme_archive' => 'Prublemu di lettura di u schedariu @archive@', 'avis_suppression_base' => 'ATTENTI, dopu cancellati i dati, ùn si ponu più ricuarà', - 'avis_version_mysql' => 'U vostru servore SQL (@version_mysql@) ùn permette micca a riparazione autumàtica di e tàvule di a basa.', // B 'bouton_acces_ldap' => 'Aghjunghje l’accessu à LDAP', 'bouton_ajouter' => 'Aghjunghje', - 'bouton_ajouter_participant' => 'AGHJUNGHJE UN UTILIZATORE :', - 'bouton_annonce' => 'ANNUNCIU', 'bouton_annuler' => 'Annullà', - 'bouton_checkbox_envoi_message' => 'pussibulità di mandà un messagiu', - 'bouton_checkbox_indiquer_site' => 'rinsignà per forza un situ web', - 'bouton_checkbox_signature_unique_email' => 'una sola zifra per indirizzu email', - 'bouton_checkbox_signature_unique_site' => 'una sola zifra per situ Web', 'bouton_demande_publication' => 'Dumandà a pubblicazione di st’artìculu', 'bouton_desactive_tout' => 'Tuttu disattivà', 'bouton_desinstaller' => 'Disistallà', - 'bouton_effacer_index' => 'Sguassà l’ìndici', 'bouton_effacer_tout' => 'TUTTU sguassà', - 'bouton_envoi_message_02' => 'MANDÀ UN MESSAGIU', 'bouton_envoyer_message' => 'Messagiu definitivu : mandà', 'bouton_fermer' => 'Chjode', 'bouton_modifier' => 'Mudificà', - 'bouton_pense_bete' => 'MEMENTU À USU PERSUNALE', - 'bouton_radio_activer_messagerie' => 'Attivà a messageria interna', - 'bouton_radio_activer_messagerie_interne' => 'Attivà a messageria interna', - 'bouton_radio_activer_petition' => 'Attivà a petizione', 'bouton_radio_afficher' => 'Vede', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Cumparisce frà a lista di i scrittori cunnessi', - 'bouton_radio_desactiver_messagerie' => 'Disattivà la messageria', 'bouton_radio_envoi_annonces_adresse' => 'Mandà l’annunci à l’indirizzu :', 'bouton_radio_envoi_liste_nouveautes' => 'Mandà a lista di e nuvità', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Ùn cumparisce micca frà a lista di i scrittori cunnessi ', 'bouton_radio_non_envoi_annonces_editoriales' => 'Ùn mandà micca annunci editoriali ', - 'bouton_radio_pas_petition' => 'Nisuna petizione', - 'bouton_radio_petition_activee' => 'Petizione attivata', - 'bouton_radio_supprimer_petition' => 'Toglie a petizione', 'bouton_redirection' => 'RINDIRIZZAMENTU', 'bouton_relancer_installation' => 'Rilancià a stallazione', 'bouton_suivant' => 'In avanti', 'bouton_tenter_recuperation' => 'Pruvà una riparazione', 'bouton_test_proxy' => 'Fà una prova di proxy', 'bouton_vider_cache' => 'Sviutà u cache', - 'bouton_voir_message' => 'Vede u messagiu prima', // C - 'cache_mode_compresse' => 'I schedari di u cache sò arregistrati in modu cumpressu.', - 'cache_mode_non_compresse' => 'I schedari di u cache sò arregistrati in modu micca cumpressu.', 'cache_modifiable_webmestre' => 'Stu paràmetru pò esse mudificatu da u webmaestru di u situ.', 'calendrier_synchro' => 'Sè vo usate un prugrammu di almanaccu chì si pò accuppià cù iCal, ne pudete puru apparinà i dati cù l’infurmazioni di stu situ', 'config_activer_champs' => 'Attivà i seguenti campi', @@ -110,7 +83,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_titre_base_sup' => 'Dichjarazione di una basa di dati in soprapiù', 'config_titre_base_sup_choix' => 'Sceglie una basa di dati in soprapiù', 'connexion_ldap' => 'Cunnessione :', - 'copier_en_local' => 'Cupià versu u lucale', // D 'date_mot_heures' => 'ore', @@ -140,7 +112,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Login', 'entree_login_connexion_1' => 'Login di cunnessione', 'entree_login_connexion_2' => '(Currisponde certe volte à u login d’accessu cù FTP; o puru si pò lascià viotu)', - 'entree_login_ldap' => 'Login LDAP iniziale', 'entree_mot_passe' => 'Parola secreta (password)', 'entree_mot_passe_1' => 'Password di cunnessione', 'entree_mot_passe_2' => '(Currisponde certe volte à u password d’accessu cù FTP; o puru si pò lascià viotu)', @@ -172,7 +143,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( U secondu cuntene l’annunci editoriali è l’ùltimi messagi privati : Hè un spaziu à voi riservatu grazi’à una chjave persunale, chè vo pudete mudificà quand’ella vi pare rinuvellendu u vostru password.', 'ical_methode_http' => 'Scaricà', - 'ical_methode_webcal' => 'Apparinà (webcal://)', + 'ical_methode_webcal' => 'Apparinà (webcal://)', # MODIF 'ical_texte_js' => 'Una ligna di javascript permette di fà vede, di manera assai sèmplice è nant’à qualsìasi situ i nuvelli artìculi pubblicati di pocu nant’à stu situ.', 'ical_texte_prive' => 'St’almanaccu, à usu persunale vostru, vi rinsegna nant’à l’attività edituriale privata di stu situ (incàrichi è appuntamenti @@ -195,16 +166,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_configuration' => 'Cunfigurazione', 'icone_creer_auteur' => 'Creà un novu autore è assucià lu à st’artìculu', 'icone_creer_mot_cle' => 'Creà un nuvellu segnu è assucià lu à st’artìculu', - 'icone_creer_mot_cle_rubrique' => 'Creà un nuvellu segnu è assucià lu à sta rùbbrica', - 'icone_creer_mot_cle_site' => 'Creà un nuvellu segnu è assucià lu à stu situ', 'icone_creer_rubrique_2' => 'Creà una nova rùbbrica', 'icone_edition' => 'Edizione', - 'icone_envoyer_message' => 'Mandà u messagiu', 'icone_ma_langue' => 'A mo lingua', 'icone_mes_infos' => 'E mo infurmazioni', 'icone_mes_preferences' => 'E mo preferenze', 'icone_modifier_article' => 'Mudificà l’artìculu', - 'icone_modifier_message' => 'Mudificà u messagiu', 'icone_modifier_rubrique' => 'Mudificà a rùbbrica', 'icone_publication' => 'Publicazione', 'icone_relancer_signataire' => 'Rilancià u signatariu', @@ -219,13 +186,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_1_auteur' => '1 autore', 'info_1_message' => '1 messagiu', 'info_1_rubrique' => '1 rùbrica', - 'info_1_site' => '1 situ', 'info_1_visiteur' => '1 visitore', 'info_activer_cookie' => 'Pudete puru attivà un cookie di currispundenza, vi permetterà di passà senza straziu da u situ pùbblicu à u situ privatu.', 'info_admin_etre_webmestre' => 'Dammi i diritti di webmaestru', - 'info_admin_gere_rubriques' => 'St’amministratore gestisce e seguenti rùbbriche :', - 'info_admin_gere_toutes_rubriques' => 'St’amministratore gestisce tutte e rùbbriche.', # MODIF 'info_admin_je_suis_webmestre' => 'Sò u webmaestru', 'info_admin_statuer_webmestre' => 'Dà à st’amministratore tutti i diritti di webmaestru', 'info_admin_webmestre' => 'St’amministratore hè webmaestru', @@ -238,15 +202,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'Pudete puru amministrà sta rùbbrica', 'info_adresse' => 'à l’indirizzu :', 'info_adresse_url' => 'Indirizzu (URL) di u situ pùbblicu', - 'info_afficher_visites' => 'Vede e vìsite per :', 'info_aide_en_ligne' => 'Aiutu in ligna SPIP', 'info_ajout_image' => 'Quand’è vo aghjunghjite imàgini cum’è ducumenti alleati à un artìculu, SPIP pò creà per voi, in autumàticu, figurette ridotte da l’imàgini inserite. Per esempiu vi permette di creà in autumàticu una galleria d’imàgini o un portafogliu.', - 'info_ajout_participant' => 'Hè statu aghjuntu u seguente participante :', 'info_ajouter_rubrique' => 'Aghjunghje un’altra rùbbrica da amministrà :', 'info_annonce_nouveautes' => 'Annunciu di e nuvità', - 'info_anterieur' => 'anteriore', 'info_article' => 'artìculu', 'info_article_2' => 'artìculi', 'info_article_a_paraitre' => 'L’artìculi post-datati da pubblicà', @@ -256,16 +217,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_miens' => 'I mo artìculi', 'info_articles_tous' => 'Tutti l’artìculi', 'info_articles_trouves' => 'Artìculi trovi', - 'info_articles_trouves_dans_texte' => 'Artìculi trovi (ricerca in u testu)', 'info_attente_validation' => 'I vostri artìculi in attesa di cunvalidazione', 'info_aucun_article' => 'Nisun artìculu', 'info_aucun_auteur' => 'Nisunu autore', 'info_aucun_message' => 'Nisun messagiu', 'info_aucun_rubrique' => 'Nisuna rùbrica', - 'info_aucun_site' => 'Nisun situ', - 'info_aucun_visiteur' => 'Nisun visitore', 'info_aujourdhui' => 'oghje : ', - 'info_auteur_message' => 'AUTORE DI U MESSAGIU :', + 'info_auteur_gere_toutes_rubriques_2' => 'Je gère toutes les rubriques', # MODIF 'info_auteurs' => 'L’autori', 'info_auteurs_par_tri' => 'Autori@partri@', 'info_auteurs_trouves' => 'Autori trovi', @@ -285,10 +243,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_2' => 'o nant’à @liste@', 'info_code_acces' => 'Ùn vi scurdate di i vostri còdici d’accessu !', 'info_compatibilite_html' => 'Norma HTML da rispettà', - 'info_compresseur_gzip' => 'N. B. : Arricumandemu di verificà capunanzu sì l’òspite cumpressa digià in autumàticu i script php;. Pè sapè la, - pudete aduprà per esempiu stu serviziu : @testgzip@', # MODIF - 'info_compresseur_texte' => 'Sì u vostru servore ùn cumpressa micca in autumàticu e pàgine HTML da mandà le à i visitori, pruvate puru à furzà a cumpressione da - sminuì u pesu di e pàgine da scaricà. Attenti : Quessa pò ralentisce assai certi servori.', 'info_config_suivi' => 'Sì st’indirizzu currisponde à una mailing-list, rinsignate puru quì sottu l’indirizzu cù chì i participanti di u situ si ponu iscrive. St’indirizzu pò esse un’URL (per esempiu a pàgina-web d’iscrizzione à a lista), o puru un indirizzu email cù un sugettu specìficu (per esempiu : @adresse_suivi@?subject=subscribe) :', @@ -316,8 +270,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Data di ùltima scrittura :', 'info_date_referencement' => 'DATA DI RIFERIMENTU DI STU SITU :', 'info_derniere_etape' => 'Fatta !', - 'info_derniers_articles_publies' => 'I vostr’ùltimi artìculi pubblicati', - 'info_desactiver_messagerie_personnelle' => 'Pudete puru attivà o disattivà u sistema di messageria persunale pè stu situ.', 'info_descriptif' => 'Discrizzione :', 'info_desinstaller_plugin' => 'sguassa i dati è disattiveghja u plugin', 'info_discussion_cours' => 'Ragiunata in corsu', @@ -326,7 +278,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_email_envoi_txt' => 'Indettà quì l’indirizzu da aduprà per mandà l’email (da predefinita, l’indirizzu di u destinatariu serà usatu da indirizzu d’inviu) :', 'info_email_webmestre' => 'Indirizzu email di u webmaestru (micca ubbligatoriu)', # MODIF - 'info_entrer_code_alphabet' => 'Indettà u còdice di u santacroce da aduprà :', 'info_envoi_email_automatique' => 'Inviu autumàticu d’email', 'info_envoyer_maintenant' => 'Mandà avà', 'info_etape_suivante' => 'Passà à a prùssima tappa', @@ -338,9 +289,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( pubblicazione è cunvalidazione d’artìculi.', 'info_fichiers_authent' => 'Schedari d’autentificazione ".htpasswd"', 'info_forums_abo_invites' => 'U vostru situ cumporta fori accessìbuli solu à l’abbunati. Per ciò esiste una pàgina d’iscrizzione in u situ pùbblicu.', - 'info_gauche_admin_effacer' => 'Sta pàgina hè accessìbule solu à i rispunsèvuli di u situ.

    - Permette l’accessu à e diverse funzioni di mantenimentu tècnicu. - Certe funzioni richerenu un specìficu prucedimentu d’identificazione, è necessiteghjanu per forza un accessu FTP à u situ.

    ', # MODIF 'info_gauche_admin_tech' => 'Sta pàgina hè accessìbule solu à i rispunsèvuli di u situ.

    Certe funzioni richerenu un specìficu prucedimentu d’identificazione, è necessiteghjanu per forza un accessu FTP à u situ.

    ', # MODIF 'info_gauche_admin_vider' => 'Sta pàgina hè accessìbule solu à i rispunsèvuli di u situ.

    @@ -351,21 +299,13 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis l’autori sguassati da una rumènzula.', # MODIF 'info_gauche_messagerie' => 'A messageria vi permette di scambià messagi trà scrittori, di tene vi certi mementi(à usu propriu persunale) o di pubblicà annunci in a pàgina d’accogliu di u spaziu privatu (sè vo site amministratore).', - 'info_gauche_numero_auteur' => 'AUTORE NÙMERU', 'info_gauche_statistiques_referers' => 'sta pàgina dà una lista di i referers, vale à dì i siti chì cuntenenu lee versu u vostru situ. Vale sta lista solu per eri è oghje , chì Vene sviutata ogni 24 ore.', 'info_gauche_visiteurs_enregistres' => 'Truverete quì i visitori arregistrati in u spaziu pùbblicu di u situ (foru pè l’abbunati).', 'info_generation_miniatures_images' => 'Creazione di figurette da l’imàgini', - 'info_gerer_trad' => 'Gestisce e lee di traduzzione?', 'info_hebergeur_desactiver_envoi_email' => 'Certi òspiti disattiveghjanu l’inviu autumàticu d’email da i so servori. In stu casu, e seguenti funziunalità di SPIP ùn viaghjeranu più.', 'info_hier' => 'eri :', - 'info_historique_activer' => 'Attivà a guardia di e revisioni', - 'info_historique_affiche' => 'Vede sta versione', - 'info_historique_comparaison' => 'paragonu', - 'info_historique_desactiver' => 'Disattivà a guardia di e revisioni', - 'info_historique_texte' => 'A gestione di e revisioni permette di tene una vistica di tutte e mudìfiche fatte à un artìculu, mustrendu ne e sferenze frà - e diverse versioni.', 'info_identification_publique' => 'A vostra identità pùbblica...', 'info_image_process' => 'Sceglite puru u mètudu preferitu per a creazione di e figurette clicchendu nant’à l’imàgine currispundente.', 'info_image_process2' => 'N.B. S’ella ùn vene nisun’imàgine, vole dì chì a cunfigurazione di u vostru servore ùn permette l’usu di tale @@ -387,8 +327,6 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'info_logos' => 'I logo', 'info_maximum' => 'màsimu :', 'info_meme_rubrique' => 'In a listessa rùbrica', - 'info_message' => 'Messagiu di u ', - 'info_message_efface' => 'MESSAGIU SGUASSATU', 'info_message_en_redaction' => 'I vostri messagi in corsu di scrittura', 'info_message_technique' => 'Messagiu tècnicu :', 'info_messagerie_interne' => 'Sistema di messageria interna', @@ -401,26 +339,20 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'info_modifier_rubrique' => 'Mudificà a rùbbrica :', 'info_modifier_titre' => 'Mudificà : @titre@', 'info_mon_site_spip' => 'U mo situ SPIP', - 'info_mot_sans_groupe' => '(Segni senza gruppu...)', - 'info_moteur_recherche' => 'Mutore di ricerca integratu', 'info_moyenne' => 'media : ', - 'info_multi_articles' => 'Attivà u menù di lingua pè l’artìculi ?', 'info_multi_cet_article' => 'Lingua di st’artìculu :', 'info_multi_langues_choisies' => 'Sceglite puru avanti e lingue disposte à i scrittori di u situ. E lingue digià aduprate in u situ (venenu e prime) ùn ponu esse disattivate.', - 'info_multi_rubriques' => 'Attivà u menù di lingua pè e rùbbriche ?', 'info_multi_secteurs' => '... solu per e rùbriche cullucate à a {ràdica} di u situ ?', 'info_nb_articles' => '@nb@ artìculi', 'info_nb_auteurs' => '@nb@ autori', 'info_nb_messages' => '@nb@ messagi', 'info_nb_rubriques' => '@nb@ rùbriche', - 'info_nb_sites' => '@nb@ siti', 'info_nb_visiteurs' => '@nb@ visitori', 'info_nom' => 'Nome', 'info_nom_destinataire' => 'Nome di u destinatariu', 'info_nom_site' => 'Nome di u vostru situ', 'info_nombre_articles' => '@nb_articles@ artìculi,', - 'info_nombre_partcipants' => 'PARTICIPANTI À A RAGIUNATA :', 'info_nombre_rubriques' => '@nb_rubriques@ rùbriche,', 'info_nombre_sites' => '@nb_sites@ siti, ', 'info_non_deplacer' => 'Ùn spiazzà micca...', @@ -429,19 +361,14 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'info_non_envoi_liste_nouveautes' => 'Ùn mandà micca a lista di e nuvità', 'info_non_modifiable' => 'ùn pò esse mudificatu', 'info_non_suppression_mot_cle' => 'ùn vogliu micca sguassà segnu.', - 'info_note_numero' => 'Nota @numero@', 'info_notes' => 'Note', - 'info_nouveaux_message' => 'Nuvelli messagi', 'info_nouvel_article' => 'Nuvellu artìculu', 'info_nouvelle_traduction' => 'Nuvella traduzzione :', 'info_numero_article' => 'ARTÌCULU NÙMERU :', 'info_obligatoire_02' => '[Ubbligatoriu]', # MODIF 'info_option_accepter_visiteurs' => 'Accettà l’iscrizzione di visitori di u situ pùbblicu', - 'info_option_faire_suivre' => 'Signalà i novi messagi à l’autori dil’artìculi', 'info_option_ne_pas_accepter_visiteurs' => 'Rifiutà l’iscrizzione di i visitori', 'info_options_avancees' => 'OPZIONI AVANZATE ', - 'info_ortho_activer' => 'Attivà a verìfica urtugràfica', - 'info_ortho_desactiver' => 'Disattivà a verìfica urtugràfica', 'info_ou' => 'o... ', 'info_page_interdite' => 'Pagina riservata', 'info_par_nom' => 'per nome', @@ -450,21 +377,15 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'info_par_tri' => '’(per @tri@)’', 'info_passe_trop_court' => 'Parola secreta troppu corta.', # MODIF 'info_passes_identiques' => 'E duie parole secrete ùn sò listesse.', - 'info_pense_bete_ancien' => 'I vostri mementi vechji', # MODIF 'info_plus_cinq_car' => 'più di 5 caràtteri', 'info_plus_cinq_car_2' => '(Più di 5 caràtteri)', 'info_plus_trois_car' => '(Più di 3 caràtteri)', 'info_popularite' => 'pupularità : @popularite@ ; vìsite : @visites@', - 'info_popularite_4' => 'pupularità : @popularite@ ; vìsite : @visites@', 'info_post_scriptum' => 'Post-Scriptum', 'info_post_scriptum_2' => 'Post-Scriptum :', 'info_pour' => 'per', - 'info_preview_admin' => 'Solu l’amministratori ponu vede u situ in antìcipu', - 'info_preview_comite' => 'Tutti i scrittori ponu vede u situ in antìcipu', - 'info_preview_desactive' => 'A vista in antìcipu di u situ hè propriu disattivata', 'info_preview_texte' => 'Hè pussìbule avè una vista in antìcipu di u situ cù tutti l’artìculi è i dispacci "pruposti" per a pubblicazione. Sta pussibulità - deve esse attivata solu pè l’amministratori, à tutti i scrittori o puru disattivata.', - 'info_principaux_correspondants' => 'I currispundenti principali', + deve esse attivata solu pè l’amministratori, à tutti i scrittori o puru disattivata.', # MODIF 'info_procedez_par_etape' => 'avanzà un passu dopu l’altru', 'info_procedure_maj_version' => 'Deve esse lanciatu a l’aghjurnamentu pè addattà a basa di dati à a nova versione di SPIP.', 'info_proxy_ok' => 'Prova di u proxy riesciuta.', @@ -479,14 +400,9 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis

    Durante l’iscrizzione, l’utilizatori ricevenu un email in autumàticu chì li furnisce i so còdici d’accessu à u situ privatu. Certi òspiti disattiveghjanu l’inviu d’email da i so propri servori : in stu casu, vene impussìbule l’iscrizzione autumàtica.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'vulete aduprà u mutore di ricerca integratu di SPIP ? - (disattivu vene acceleratu u funziunamentu di u sistema)', - 'info_question_vignettes_referer_non' => 'Ùn vede micca a cattura di screnu di i siti d’orìgine di e vìsite', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Ràdica di u situ', 'info_recharger_page' => 'Aghjurnate sta pàgina da quì à un minutu.', - 'info_recherche_auteur_a_affiner' => 'Troppu risultati per "@cherche_auteur@"; precisate puru a ricerca.', - 'info_recherche_auteur_ok' => 'Parechji scrittori trovi per "@cherche_auteur@" :', 'info_recherche_auteur_zero' => 'Nisun risultatu per "@cherche_auteur@".', 'info_recommencer' => 'Ricumincià.', 'info_redacteur_1' => 'Scrittori', @@ -503,7 +419,6 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'info_rubriques' => 'Rùbriche', 'info_rubriques_02' => 'rùbriche', 'info_rubriques_trouvees' => 'Rùbriche trove', - 'info_rubriques_trouvees_dans_texte' => 'Rùbriche trove (ricerca in u testu)', 'info_sans_titre' => 'Senza tìtulu', 'info_selection_chemin_acces' => 'Sceglite quì sottu u percorsu d’accessu in l’annuariu :', 'info_signatures' => 'zifre', @@ -516,14 +431,12 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'info_sites_lies_mot' => 'I siti riferiti alleati à stu segnu', 'info_sites_proxy' => 'Aduprà un proxy', 'info_sites_trouves' => 'Siti trovi', - 'info_sites_trouves_dans_texte' => 'Siti trovi (in u testu)', 'info_sous_titre' => 'Sottutìtulu :', 'info_statut_administrateur' => 'Amministratore', 'info_statut_auteur' => 'Statutu di st’autore :', 'info_statut_auteur_2' => 'Eo sò', 'info_statut_auteur_a_confirmer' => 'Iscrizzione da cunfirmà', 'info_statut_auteur_autre' => 'Altru statutu :', - 'info_statut_efface' => 'Sguassatu', 'info_statut_redacteur' => 'Scrittore', 'info_statut_utilisateurs_1' => 'Statutu predefinitu di l’utilizatori impurtati', 'info_statut_utilisateurs_2' => 'Sceglite u statutu da attribuisce à e persone presenti in l’annuariu LDAP quandu pè a prima volta si cunnettenu. @@ -548,7 +461,6 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'info_tous_articles_en_redaction' => 'Tutti l’artìculi in corsu di scrittura', 'info_tous_articles_presents' => 'Tutti l’artìculi pubblicati in sta rùbrica', 'info_tous_les' => 'tutti i:', - 'info_tous_redacteurs' => 'Annunci à tutti i scrittori', 'info_tout_site' => 'Tuttu u situ', 'info_tout_site2' => 'L’artìculu ùn hè statu traduttu in sta lingua.', 'info_tout_site3' => 'L’artìculu hè statu traduttu in sta lingua, ma sò state fatte unepoche di mudìfiche à l’artìculu di riferenza. A traduzzione deve @@ -565,7 +477,6 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'info_une_rubrique_02' => '1 rùbrica', 'info_url' => 'URL :', 'info_url_proxy' => 'URL di u proxy', - 'info_url_site' => 'URL DI U SITU :', 'info_url_test_proxy' => 'URL di prova', 'info_urlref' => 'Lea ipertestu :', 'info_utilisation_spip' => 'Avà pudete puru principià à aduprà u sistema di pubblicazione assistita...', @@ -575,7 +486,6 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'info_visiteurs' => 'Visitori', 'info_visiteurs_02' => 'Visitori di u situ pùbblicu', 'install_adresse_base_hebergeur' => 'Indirizzu di a basa di dati attribuitu da l’òspite', - 'install_base_ok' => 'A basa di dati @base@ hè stata ricunnisciuta', 'install_echec_annonce' => 'A stallazione hà da fiascà o compie cagiunendu à u situ prublemi di funziunamenti ...', 'install_extension_mbstring' => 'SPIP ùn funziona micca cù :', 'install_extension_php_obligatoire' => 'SPIP esige l’estensione php :', @@ -600,8 +510,6 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'item_activer_messages_avertissement' => 'Attivà i messagi d’avertimentu', 'item_administrateur_2' => 'amministratore', 'item_afficher_calendrier' => 'Pubblicà in l’almanaccu', - 'item_autoriser_documents_joints' => 'Auturizà i ducumenti alleati à l’artìculi', - 'item_autoriser_documents_joints_rubriques' => 'Auturizà i ducumenti alleati à e rùbbriche', 'item_autoriser_syndication_integrale' => 'Sparghje a versione sana sana di l’artìculi in i schedari di sindicazione', 'item_choix_administrateurs' => 'l’amministratori', 'item_choix_generation_miniature' => 'Creà in autumàticu e figurette di l’imàgini.', @@ -609,7 +517,6 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'item_choix_redacteurs' => 'i scrittori', 'item_choix_visiteurs' => 'i visitori di u situ pùbblicu', 'item_creer_fichiers_authent' => 'Creà i schedari .htpasswd', - 'item_limiter_recherche' => 'Limità a ricerca à l’infurmazioni cuntenute in u vostru situ', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Attivà a messageria è l’agenda', 'item_mots_cles_association_articles' => 'à l’artìculi', @@ -619,22 +526,15 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'item_non_accepter_inscriptions' => 'Ùn accettà micca l’iscrizzioni', 'item_non_activer_messages_avertissement' => 'Nisun messagiu d’avertimentu', 'item_non_afficher_calendrier' => 'Ùn pubblicà in l’almanaccu', - 'item_non_autoriser_documents_joints' => 'Ùn auturizà i ducumenti alleati in l’artìculi', - 'item_non_autoriser_documents_joints_rubriques' => 'Ùn auturizà i ducumenti alleati in e rùbbriche', 'item_non_autoriser_syndication_integrale' => 'Sparghje solu un riassuntu', - 'item_non_compresseur' => 'Disattivà a cumpressione', 'item_non_creer_fichiers_authent' => 'Ùn creà micca sti schedari', - 'item_non_gerer_statistiques' => 'Ùn gestisce micca e statìstiche', - 'item_non_limiter_recherche' => 'Allargà e ricerca à u cuntenutu di i siti in sindicazione', 'item_non_messagerie_agenda' => 'Disattivà a messageria è l’agenda', 'item_non_publier_articles' => 'Ùn pubblicà micca l’àrtìculi prima di a data imposta.', - 'item_non_utiliser_moteur_recherche' => 'Ùn aduprà micca u mutore di ricerca', 'item_nouvel_auteur' => 'Nuvellu autore', 'item_nouvelle_rubrique' => 'Nuvella rùbrica', 'item_oui' => 'Iè', 'item_publier_articles' => 'Pubblicà l’artìculi qualsìasi a data di pubblicazione.', 'item_reponse_article' => 'Risposta à l’artìculu ', - 'item_utiliser_moteur_recherche' => 'Aduprà u mutore di ricerca', 'item_version_html_max_html5' => 'Permette HTML5', 'item_visiteur' => 'visitore', @@ -643,9 +543,7 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis // L 'label_choix_langue' => 'Sceglite a vostra lingua', - 'lien_ajout_destinataire' => 'Aghjunghje u dstinatariu', 'lien_ajouter_auteur' => 'Aghjunghje sy’autore', - 'lien_ajouter_participant' => 'Aghjunghje un participante', 'lien_ajouter_une_rubrique' => 'Aghjunghje sta rùbrica', 'lien_email' => 'email', 'lien_nom_site' => 'NOME DI U SITU :', @@ -653,9 +551,7 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'lien_retirer_rubrique' => 'Toglie a rùbrica', 'lien_retirer_tous_auteurs' => 'Toglie tutti l’autori', 'lien_retirer_toutes_rubriques' => 'Toglie tutte e rùbriche', - 'lien_retrait_particpant' => 'caccià stu participante', 'lien_site' => 'situ', - 'lien_supprimer_rubrique' => 'sguassà a rùbrica', 'lien_tout_deplier' => 'Tuttu spalancà', 'lien_tout_replier' => 'Tuttu chjode', 'lien_tout_supprimer' => 'Tuttu sguassà', @@ -681,13 +577,12 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'mois_non_connu' => 'scunnisciutu', // N - 'nouvelle_version_spip' => 'Hè dispunìbule a versione @version@ di SPIP', + 'nouvelle_version_spip' => 'Hè dispunìbule a versione @version@ di SPIP', # MODIF // O 'onglet_contenu' => 'Cuntenutu', 'onglet_declarer_une_autre_base' => 'Dichjarà un’altra basa di dati', 'onglet_discuter' => 'Ragiunà', - 'onglet_documents' => 'Ducumenti', 'onglet_interactivite' => 'Interattività', 'onglet_proprietes' => 'Pruprietà', 'onglet_repartition_actuelle' => 'attualmente', @@ -730,7 +625,7 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'plugin_info_upgrade_ok' => 'Aghjurnamentu riesciutu', 'plugin_librairies_installees' => 'Librerie stallate', 'plugin_necessite_lib' => 'Stu plugin richere a libreria @lib@', - 'plugin_necessite_plugin' => 'Richere u plugin @plugin@ cù omancu a versione @version@.', + 'plugin_necessite_plugin' => 'Richere u plugin @plugin@ cù omancu a versione @version@.', # MODIF 'plugin_necessite_plugin_sans_version' => 'Richere u plugin @plugin@', 'plugin_necessite_spip' => 'Richere SPIP cù omancu a versione @version@.', 'plugin_source' => 'urìgine: ', @@ -762,6 +657,7 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis // R 'repertoire_plugins' => 'Cartulare :', + 'required' => '[Ubbligatoriu]', # MODIF // S 'sans_heure' => 'Senza l’ore', @@ -793,16 +689,11 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'texte_auteur_messagerie' => 'Stu situ vi pò furnisce in permanenza a lista di i scrittori cunnessi, cusì vi permette di scambià messagi in tempu reale. Pudete puru decide d’ùn cumparisce micca in quella lista (vale à dì chì state invisìbule da l’altri utilizatori).', - 'texte_auteur_messagerie_1' => 'Stu situ permette u scambiu di messagi è a custituzione di fori di discussione privati trà i participanti di u situ. - Pudete puru decide d’ùn participà micca à issi scambi.', 'texte_auteurs' => 'L’AUTORI', 'texte_choix_base_1' => 'Sceglite a basa di dati :', 'texte_choix_base_2' => 'U servore SQL cuntene parechje base di dati.', 'texte_choix_base_3' => 'Sceglite quella ch`vi hè stata attribuita da u vostru òspite :', 'texte_choix_table_prefix' => 'Prefissu di e tàvule :', - 'texte_commande_vider_tables_indexation' => 'Aduprà sta cumanda pè sviutà e tàvule d’indizzazione usate da u mutore di ricerca - integratu à SPIP. Cusì vincerebbe spaziu discu.', - 'texte_compresse_ou_non' => '(pò esse cumpressu o micca)', 'texte_compte_element' => '@count@ elementu', 'texte_compte_elements' => '@count@ elementi', 'texte_conflit_edition_correction' => 'Cuntrullate puru quì sottu e sferenze trà e duie versioni di u testu ; pudete dinù ancu cupià @@ -820,10 +711,8 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'texte_date_publication_anterieure_nonaffichee' => 'Ùn fà vede a data di ùltima scrittura.', 'texte_date_publication_article' => 'DATA DI PUBBLICAZIONE :', 'texte_date_publication_objet' => 'Data di publicazione in ligna :', - 'texte_descriptif_petition' => 'Discrizzione di a petizione', 'texte_descriptif_rapide' => 'Discrizzione corta', 'texte_effacer_base' => 'Sguassà a basa di dati SPIP', - 'texte_effacer_donnees_indexation' => 'Sguassà i dati d’indizzazione', 'texte_effacer_statistiques' => 'Sguassà e statìstiche', 'texte_en_cours_validation' => 'L’artìculi è i dispacci quì sottu sò pruposti à a pubblicazione. Date puru u vostru parè usendu i fori chì seguitanu ogni artìculu o dispacciu.', # MODIF @@ -836,32 +725,20 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'texte_introductif_article' => 'Testu d’intruduzzione di l’artìculu', 'texte_jeu_caractere' => 'Hè cunsigliatu d’aduprà pè u vostru situ u santacroce universale (utf-8) : permette di vede i testi in tutte e lingue è ùn pone più prublemi di cumpatibilità cù i navigatori muderni.', - 'texte_jeu_caractere_2' => 'Attenti : sta scelta ùn lancia micca a cunversione di i testi digià arregistrati in a basa di dati.', 'texte_jeu_caractere_3' => 'U vostru situ hà attualmente u ghjocu di caràtteri :', 'texte_jeu_caractere_4' => 'S’ella ùn currisponde à a realità di i vostri dati (per esempiu, per via d’una ricuperazione di a basa di dati), o sè vo smarrate u situ vulendu principià cù un altru ghjocu di caràtteri, rinsignate puru quì stu nuvellu ghjocu :', - 'texte_jeu_caractere_conversion' => 'Nota : Pudete puru decide di cunvertisce una volta per tutte tutti i testi di u situ (artìculi, dispacci, fori, ecc.) - in u santacroce utf-8, andendu à a pàgina di cunversione in utf-8.', - 'texte_lien_hypertexte' => '(Sì u vostru messagiu si riferisce à un artìculu pubblicatu nant’à u web, o à una pàgina chì furnisce di più infurmazioni, - rinsignate puru quì u so tìtulu è u so indirizzu URL.)', 'texte_login_ldap_1' => '(Lascià viotu per un accessu anònimu, o inserisce u percorsu sanu sanu, per esempiu «uid=paoli, ou=users, dc=u-mo-duminiu, dc=com ».)', 'texte_login_precaution' => 'Attenti ! Questu hè u login cun chì site cunnessu avà. Aduprate stu furmulariu cù assai cura ...', - 'texte_message_edit' => 'Attenti ! Stu messagiu pò esse mudificatu da tutti l’amministratori di u situ, è si pò vede da tutti i scrittori. - Aduprate puru l’annunci solu per sparghje evenimenti impurtanti ina vita di u situ.', 'texte_messagerie_agenda' => 'A messageria permette à i scrittori di u situ di cumunicà frà elli direttamente in u spaziu privatu. A messageria hè assuciata à un agenda..', 'texte_mise_a_niveau_base_1' => 'Avete aghjurnatu u schedariu SPIP. Vi tocca avà à aghjurnà a basa di dati.', 'texte_modifier_article' => 'Mudificà l’artìculu :', - 'texte_moteur_recherche_active' => 'Hè attivatu u mutore di ricerca. Aduprà sta cumanda sè vo vulete lancià una rindizzazione veloce (dopu ricuperazione - d’una copia di salvezza, per esempiu). Nota bè : i ducumenti mudificati di manera nurmale (cun l’interfaccia di SPIP) sò rindizzati in - autumàticu. Vale à dì chì sta cumanda hè ùtule solu in casi eccezziunali.', - 'texte_moteur_recherche_non_active' => 'Ùn hè attivatu u mutore di ricerca.', 'texte_multilinguisme' => 'Sè vo vulete gestisce artìculi in parechje lingue, con un sistema di navigazione cumplessu, pudete puru aghjunghje un menù di scelta di lingua in l’artìculi è/o in e rùbbriche, secondu cum’ellu hè strutturatu u vostru situ.', # MODIF 'texte_multilinguisme_trad' => 'Pudete dinù attivà un sistema di gestione di lee frà e diverse traduzzioni d’un artìculu.', # MODIF 'texte_non_compresse' => 'micca cumpressu (u vostru servore ùn pussede micca sta funziunalità)', - 'texte_nouveau_message' => 'Novu messagiu', 'texte_nouvelle_version_spip_1' => 'Avete stallatu una nova versione di SPIP.', 'texte_nouvelle_version_spip_2' => 'Sta nova versione richere un aghjurnamentu più impurtante chè di règula. Sè vo site u webmaestru di u situ, sguassate puru u schedariu @connect@ è ripigliate a stallazione di modu d’aghjurnà dinù i vostri paràmetri di cunnessione à a basa di dati.

    @@ -877,8 +754,6 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'texte_publication_articles_post_dates' => 'Cumu si deve cumpurtà SPIP cù l’artìculi chì anu una data di pubblicazione futura ?', 'texte_rappel_selection_champs' => '[Ùn vi scurdate di sceglie bè stu campu]', 'texte_recalcul_page' => 'Sè vo vulete ricaricà una sola pàgina, andate piuttostu in u spaziu pùbblicu è cliccate puru nant’à «ricaricà».', - 'texte_recapitiule_liste_documents' => 'Sta pàgina allistineghja i ducumenti chì stanu in e vostre rùbbriche. Per mudificà l’infurmazioni d’ogni ducumentu, - seguitate a lea versu a relativa pàgina di rùbbrica.', 'texte_recuperer_base' => 'Riparà a basa di dati', 'texte_reference_mais_redirige' => 'artìculu riferitu in u vostru situ SPIP, ma cun rindirizzamentu versu un’altra URL.', 'texte_requetes_echouent' => 'Quandu certe richieste SQL fiascanu di manera ripetuta è senza tante ragioni, pò accade ch’ella sia colpa di a basa stessa.

    @@ -900,7 +775,6 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis u ricaricamentu di tuttu e pàgine sè vo avete fattu mudìfiche impurtanti nant`à a gràfica o a struttura di u situ.', 'texte_sur_titre' => 'Sottutìtulu', 'texte_table_ok' => ' : sta tàvula hè OK.', - 'texte_tables_indexation_vides' => 'Sò viote e tàvule d’indizzazione di u mutore.', 'texte_tentative_recuperation' => 'Prova di riparazione', 'texte_tenter_reparation' => 'Pruvà una riparazione di a basa di dati', 'texte_test_proxy' => 'Per fà una prova di stu proxy, rinsignate quì l’indirizzu di un situ Web da pruvà.', @@ -910,21 +784,11 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'texte_travail_collaboratif' => 'S’ella accade à spessu chì parechji scrittori travaglinu nant’à listessu artìculu, u sistema pò signalà l’artìculi «aperti» di pocu, di modu ch’elle ùn sianu fatte parechje mudìfiche à listessu tempu. Sta scelta hè predefinita disattivata per ùn creà micca messagi d’avertimentu in quantità.', - 'texte_trop_resultats_auteurs' => 'Troppu risultati per "@cherche_auteur@"; precisate puru a ricerca.', - 'texte_unpack' => 'scaricà l’ùltima versione', - 'texte_utilisation_moteur_syndiques' => 'Quand’è vo usate u mutore di ricerca integratu di SPIP, pudete fà ricerche nant’à i siti è l’artìculi sindicati - di duie manere sferenti.
    - - A più sèmplice cunsiste à ricircà solu in i tìtuli è e descrizzioni di l’artìculi.
    - - Un altru mètudu, assai più putente, permette à SPIP di ricercà ancu dentr’à u testu di l’artìculi riferiti. - Sè vo riferite un situ, SPIP ferà a ricerca propriu in u testu di stu situ.', - 'texte_utilisation_moteur_syndiques_2' => 'Stu mètudu forza SPIP à visità di manera regulare i siti riferiti, ciò chì puderà allentà appena di u vostru situ.', 'texte_vide' => 'viotu', 'texte_vider_cache' => 'Sviutà u cache', - 'titre_admin_effacer' => 'Mantenimentu tècnicu', 'titre_admin_tech' => 'Mantenimentu tècnicu', 'titre_admin_vider' => 'Mantenimentu tècnicu', 'titre_ajouter_un_auteur' => 'Aghjunghje un autore', - 'titre_ajouter_une_rubrique' => 'Aghjunghje una rùbrica', 'titre_cadre_afficher_article' => 'Vede l’artìculi', 'titre_cadre_afficher_traductions' => 'Vede u statu di e traduzzioni per e seguenti lingue :', 'titre_cadre_ajouter_auteur' => 'AGHJUNGHJE UN AUTORE : ', @@ -950,58 +814,27 @@ U so statutu hè signalatu da u culore di l’icona (scrittore = giallu; amminis 'titre_naviguer_dans_le_site' => 'Navigà in u situ ...', 'titre_nouvelle_rubrique' => 'Nuvella rùbbrica', 'titre_numero_rubrique' => 'RÙBBRICA NÙMERU :', - 'titre_page_admin_effacer' => 'Mantenimentu tècnicu : sguassà a basa di dati', 'titre_page_articles_edit' => 'Mudificà : @titre@', 'titre_page_articles_page' => 'L’artìculi', 'titre_page_articles_tous' => 'U situ sanu', - 'titre_page_auteurs' => 'Visitori', 'titre_page_calendrier' => 'Almanaccu @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Cunfigurazione di u situ', - 'titre_page_config_fonctions' => 'Configurazione di u situ', - 'titre_page_configuration' => 'Cunfigurazione u situ', - 'titre_page_controle_petition' => 'Guardia di e petizioni', 'titre_page_delete_all' => 'sguassamentu tutale senza ritornu', - 'titre_page_documents_liste' => 'I ducumenti di e rùbbriche', - 'titre_page_index' => 'U vostru spaziu privatu', - 'titre_page_message_edit' => 'Scrive un messagiu', - 'titre_page_messagerie' => 'I vostri messagi', 'titre_page_recherche' => 'Risultati di a ricerca @recherche@', 'titre_page_statistiques_referers' => 'Statìstiche (lee versu u vostru situ)', - 'titre_page_statistiques_signatures_jour' => 'Nùmeru di zifre à u ghjornu', - 'titre_page_statistiques_signatures_mois' => 'Nùmeru di zifre à u mese', 'titre_page_upgrade' => 'Aghjurnamentu di SPIP', 'titre_publication_articles_post_dates' => 'Pubblicazione di l’artìculi postdatati', - 'titre_referencer_site' => 'Riferisce u situ :', - 'titre_rendez_vous' => 'APPUNTAMENTU :', 'titre_reparation' => 'Riparazione', 'titre_suivi_petition' => 'Guardia di e petizioni', 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'Ùn esiste artìculu cù stu nùmeru.', 'trad_article_traduction' => 'Tutte e versioni di st’artìculu :', - 'trad_deja_traduit' => 'Errore : Ùn hè micca pussìbule d’alleà st’artìculu à u nùmeru dumandatu.', 'trad_delier' => 'Ùn alleà più st’artìculu à e so traduzzioni', # MODIF 'trad_lier' => 'St’artìculu hè una traduzzione di l’artìculu nùmeru :', 'trad_new' => 'Scrive una nova traduzzione di l’artìculu', # MODIF // U - 'upload_info_mode_document' => 'Mette st’imàgine in u portafogliu', - 'upload_info_mode_image' => 'Caccià st’imàgine da u portafogliu', - 'utf8_convert_attendez' => 'Aspettate dui minuti è ricaricate puru sta pàgina.', - 'utf8_convert_avertissement' => 'V’appruntate à cunvertisce u cuntenutu di a vostra basa di dati (artìculi, dispacci, ecc.) da u ghjocu di caràtteri - @orig@ à u chjocu di caràtteri @charset@.', - 'utf8_convert_backup' => 'Ùn vi scurdate micca di fà una copia di salvezza di u situ sanu sanu capunanzu. Inoltre vi tuccherà à verificà chì i vostri mudelli - è schedari di lingua rispettanu @charset@.', - 'utf8_convert_erreur_deja' => 'U vostru situ hè digià in @charset@, ùn ghjova à nunda di cunvertisce lu...', 'utf8_convert_erreur_orig' => 'Errore : u ghjocu di caràtteri @charset@ ùn hè presente.', - 'utf8_convert_termine' => 'Hè finita !', - 'utf8_convert_timeout' => 'Impurtante : in casu di timeout di u servore, ricaricate puru a pàgina finch’ella vi dessi u messagiu - « Hè finita ».', - 'utf8_convert_verifier' => 'Avà vi tocca à andà à sviutà u cache, è verificà chì tuttu viaghji bè nant’à e pàgine pùbbliche di u situ. - In casu di prublemi maiò, hè stata fatta una copia di i vostri dati (in furmatu SQL) in u cartulare @rep@.', - 'utf8_convertir_votre_site' => 'Cunvertisce u situ in UTF-8', // V 'version' => 'Versione :' ); - -?> diff --git a/www/ecrire/lang/ecrire_cpf.php b/www/ecrire/lang/ecrire_cpf.php index 0549fe17..586ce682 100644 --- a/www/ecrire/lang/ecrire_cpf.php +++ b/www/ecrire/lang/ecrire_cpf.php @@ -1,9 +1,11 @@ 'Artourn paz-déryèr èk vèy byin bann zinformasyon ou la doné.', 'avis_connexion_ldap_echec_3' => 'Dann ka-la,i giny pa a rien anserv lo supor LDAP pou import a bann zitilizatèr.', 'avis_deplacement_rubrique' => 'Pangar ! Dann rubrik-la néna @contient_breves@ brève@scb@ : si ou dékal ali, mèt inn krwa pou kofirmé.', - 'avis_destinataire_obligatoire' => 'Astèr ou dwa kadr inn destinatèr pou anvwayé out modékri.', 'avis_erreur_connexion_mysql' => 'Astèr néna inn kanard èk lakostaz SQL', - 'avis_erreur_version_archive' => 'Pangar ! Fisyé @archive@-la i apartyin - - - -inn ot versyon Spip sak ou la mi andan out sit. Ou va giny gro traka : - - - - kanar-la i pé dégrèn out bazdodné èk out sitwèb sa minm, plizyèrs zot larlik lé posib etc. - - - -Ni konsèy aou kofirm pa ladomann linportasyon-la

    Si ou néna bezwin inn pé plid zinformasyon, gèt - - ladocumentasyon lo SPIP-la.', # MODIF - 'avis_espace_interdit' => 'Ou na pwinn permisyon ariv dann lépas-tèrla

    Ou la déza finn mèt inn versyon d-SPIP.', + 'avis_espace_interdit' => 'Ou na pwinn permisyon ariv dann lépas-tèrla

    Ou la déza finn mèt inn versyon d-SPIP.', # MODIF 'avis_lecture_noms_bases_1' => 'Program linstalasyion-la, li na pwinn finn ginyé dlir bann non bann bazdodné sak lé prézan dann sit.', 'avis_lecture_noms_bases_2' => 'Kiswa néna okinn baz disponib, kiswa fonksyon "listé bann bazdodné" la finn dèt apiyé porézon sékirité (néna plisyèr zéberzèr sak i dégrèn ali).', 'avis_lecture_noms_bases_3' => 'Si dernyèr idé-la lé vré, lé probab ou i pé anservir inn bazdodné sak i port out nondkod :', - 'avis_non_acces_message' => 'Ou néna pwinn pèrmisyon lir modékri-la minm. Zafèr kabri lé pa zafèr mouton ! ', 'avis_non_acces_page' => 'Ou na pwinn permisyon akost sir pazwèb-la.', 'avis_operation_echec' => 'Lopérasyon-la la pwinn finn marsé. ', - 'avis_probleme_archive' => 'Astèr, néna inn kanard. Lé pa posib lir lo fisyé @archive@', 'avis_suppression_base' => 'TANSYON PANGAR, si ou i dégrèn bann doné-la, i pé pa bataryèr pou rékupèr azot : ou sava pèrd tout bann zinformasyon', - 'avis_version_mysql' => 'Out versyon SQL (@version_mysql@),li permé pa aranz tousèl bann tab d-la baz.', // B 'bouton_acces_ldap' => 'Azout laksé dann LDAP >>', 'bouton_ajouter' => 'Azouté', - 'bouton_ajouter_participant' => 'AZOUT INN DALON :', - 'bouton_annonce' => 'ZANONS', - 'bouton_checkbox_envoi_message' => 'lé posib anvway inn modékri.', - 'bouton_checkbox_indiquer_site' => 'a zot lé nésésèr mèt lo non dinn sitwèb', - 'bouton_checkbox_signature_unique_email' => 'inn sèl sinyatir po inn ladrès imèl', - 'bouton_checkbox_signature_unique_site' => 'inn sèl sinyatir po inn sitwèb', 'bouton_demande_publication' => 'Domann lapiblikasyon lartik-la', 'bouton_desactive_tout' => 'Dégrenn tout zot', - 'bouton_effacer_index' => 'Dégrèn a tout bann zindèks ', 'bouton_effacer_tout' => 'Dégrèn a TOUT', - 'bouton_envoi_message_02' => 'ANVWA INN MODÉKRI', 'bouton_envoyer_message' => 'Modékri-la lé fini : anvwa ali', 'bouton_modifier' => 'Sanz', - 'bouton_pense_bete' => 'OUT PROP GARDANTÈT - - - - - - - - - - - - - - - -', - 'bouton_radio_activer_messagerie' => 'Fé zwé lakazmodékri ', - 'bouton_radio_activer_messagerie_interne' => 'Fé zwé lakazmodékri', - 'bouton_radio_activer_petition' => 'Fé zwé filsinyatir', 'bouton_radio_afficher' => 'Fé vwar an liyn', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Amontr aou dann bann lotèr an liyn ', - 'bouton_radio_desactiver_messagerie' => 'Dégrèn lakazmodékri ', 'bouton_radio_envoi_annonces_adresse' => 'Anvwa bann zanons sir ladrès-la :', 'bouton_radio_envoi_liste_nouveautes' => 'Anvwa lalist bann nouvèlté', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Bann lotèr-la i pé pa vwar ou lé an liyn ', 'bouton_radio_non_envoi_annonces_editoriales' => 'Anpès anvwayé bann zanons léditoryal', - 'bouton_radio_pas_petition' => 'Anpès néna filsinyatir', - 'bouton_radio_petition_activee' => 'Astèr, filsinyatir i mars', - 'bouton_radio_supprimer_petition' => 'Dégrèn filsinyatir', 'bouton_redirection' => 'TOURNÉVIRÉ LADRÈSWÈB', 'bouton_relancer_installation' => 'Rosarz linstalasyon', 'bouton_suivant' => 'Answit', 'bouton_tenter_recuperation' => 'Eséy inn aranzman', 'bouton_test_proxy' => 'Eséy lo proksi-la', 'bouton_vider_cache' => 'Dévid kas lo sitwèb', - 'bouton_voir_message' => 'Artourn gèt modékri avann konfirm ali', // C - 'cache_mode_compresse' => 'Bann fisyè lo kas sanlé anroziztré sanm manyir koprésé.', - 'cache_mode_non_compresse' => 'Bann fisyè lo kas sa lé anroziztré sanm manyir sat lé pa koprésé.', 'cache_modifiable_webmestre' => 'Lo wèbmèt lo sit, li pé sanz paramèt-la. ', 'calendrier_synchro' => 'Si ou ansèrv in lozisyèl pou in lajinda i mars èk iCal (Apple iCal, Mozilla Calendar, Ximian Evolution, KOrganizer...),ou pé mèt ali si lo ritm bann arnouvèlman laktyalité lo sit-la.', @@ -138,7 +86,6 @@ Bann zinformasyon-la, sé komandèr-sistèm ou komandèr-rézo sak i dwa donn a 'entree_login' => 'Out nondkod', 'entree_login_connexion_1' => 'Lo nondkod lakostaz', 'entree_login_connexion_2' => '(nadfwa lé paréy out nondkod-laksé FTP ; nadfwa lé vid)', - 'entree_login_ldap' => 'Promyé nondkod LDAP ', 'entree_mot_passe' => 'Out modpas', 'entree_mot_passe_1' => 'Modpas lakostaz', 'entree_mot_passe_2' => '(Nadfwa lé paréy out modpas pou FTP ; nadfwa lé vid)', @@ -165,7 +112,7 @@ Bann zinformasyon-la, sé komandèr-sistèm ou komandèr-rézo sak i dwa donn a 'ical_info2' => 'Si ou i vé dot ranseyman si bann teknik anlèr, ezit pa rogardé bann paz dokimantasyon pou SPIP.', # MODIF 'ical_info_calendrier' => 'Astèr néna dé kalandryé disponib. Promyé lé in manyèr d’kart pou lo sit, sak i donn a ou tout bann zartik la finn dèt pibliyé. Dézièm-la, i donn aou tout bann zanons léditoryal èk zot dernyé modékri andann out léspas privé (out kazmodékri) : laksé dézyèm kalandryé-la, li lé rézervé. ou minm sèlman lé kav konsilt ali sanm inn sort klé privé, sak ou pé sanz kank i vé (sanz sèlman out modpas). ', 'ical_methode_http' => 'Télésarzman', - 'ical_methode_webcal' => 'Po fé lasinkronizasyon(webcal ://)', + 'ical_methode_webcal' => 'Po fé lasinkronizasyon(webcal://)', # MODIF 'ical_texte_js' => 'In liny "javascript" (zavaskrip) i permé afisé tout bann zartik sat la finn dèt pibliyé an liny si lo sit-la. Lé tré sinp. Ou i pé afisé zot-la si tout bann sit aou.', 'ical_texte_prive' => 'Kalandryé-la lé sèlman disponib pou ou-minm. I di aou kosa i lé laktivité éditoryal lo sitwèb (kosa ou dwa fé, kank i lé out bann randévou, kank bann zartik èk bann tite-nouvèl la finn dèt propozé...).', 'ical_texte_public' => 'Kalandryé-la i di aou kosa i lé laktivité pibli si lo sitwèb (i rappèl tout bann zartik èk tite-nouvèl sat la finn dèt pibliyé).', @@ -182,9 +129,7 @@ Bann zinformasyon-la, sé komandèr-sistèm ou komandèr-rézo sak i dwa donn a 'icone_creer_auteur' => 'Kré inn nouvo lotèr é mèt ali ansanm dann lartik-la', 'icone_creer_mot_cle' => 'Kré inn nouvo molaklé è gatir ali sanm lartik-la.', 'icone_creer_rubrique_2' => 'Kré inn nouvèl rubrik', - 'icone_envoyer_message' => 'Anvwa modékri-la', 'icone_modifier_article' => 'Sanz lartik-la', - 'icone_modifier_message' => 'Sanz modékri-la', 'icone_modifier_rubrique' => 'Sanz rubrik-la', 'icone_retour' => 'Bat-aryèr', 'icone_retour_article' => 'Bat-aryèr si lartik', @@ -194,10 +139,7 @@ Bann zinformasyon-la, sé komandèr-sistèm ou komandèr-rézo sak i dwa donn a 'icone_valider_signature' => 'Konfirm sinyatir-la', 'image_administrer_rubrique' => 'Ou néna drwa d-komandman sir rubrik-la', 'info_1_article' => '1 lartik', - 'info_1_site' => '1 sitwèb', 'info_activer_cookie' => 'I pé fé zwé inn gatomakro drokonésans . Kom sa ou sra kav pas fasilman dopwi lafigirwèb piblik sir lo sit privé.', - 'info_admin_gere_rubriques' => 'Komandèr-la lé responsab si bann rubrik anba :', - 'info_admin_gere_toutes_rubriques' => 'Komandèr-la lé responsab pou TOUT bann rubrik.', # MODIF 'info_administrateur' => 'Komandèr', 'info_administrateur_1' => 'Komandèr', 'info_administrateur_2' => 'lo sitwèb(anserv èk prékosyon)', @@ -207,16 +149,13 @@ Bann zinformasyon-la, sé komandèr-sistèm ou komandèr-rézo sak i dwa donn a 'info_administrer_rubrique' => 'Ou pé zèr larubrik-la', 'info_adresse' => 'si ladrès :', 'info_adresse_url' => 'Ladrès (URL) lo sit piblik (figirwèb)', - 'info_afficher_visites' => 'Armontr bann vizit pou :', 'info_aide_en_ligne' => 'Koudmin an liyn SPIP', 'info_ajout_image' => 'Kank ou azout inndé zimaz pou mèt inn dokiman-zwinn èk inn lartik, SPIP i pé kré otomatikman inndé vinyèt (inndé tit-limaz), aparti tout bann zimaz ou la déza sarzé. Sa lé itil pou kré inn liv-zimaz (sédir inn galri).', - 'info_ajout_participant' => 'Dalon(n)-la lé azouté :', 'info_ajouter_rubrique' => 'Azout inn ot rubrik pour okipé :', 'info_annonce_nouveautes' => 'Zanons bann nouvèlté', - 'info_anterieur' => 'avann', 'info_article' => 'Lartik', 'info_article_2' => 'bann zartik', 'info_article_a_paraitre' => 'Bann zartik pou pibliyé èk inn dat postéryèr lo zour son lékritir ', @@ -224,10 +163,9 @@ inn liv-zimaz (sédir inn galri).', 'info_articles_2' => 'Bann zartik', 'info_articles_auteur' => 'Bann zartik lotèr-la', 'info_articles_trouves' => 'Bann zartik la finn dèt trouvé', - 'info_articles_trouves_dans_texte' => 'Bann zartik la finn dèt trouvé (dann lo tèks)', 'info_attente_validation' => 'Out bann zartik sak i espèr lakonfirmasyon', 'info_aujourdhui' => 'Zordi :', - 'info_auteur_message' => 'LOTÈR MODÉKRI :', + 'info_auteur_gere_toutes_rubriques_2' => 'Je gère toutes les rubriques', # MODIF 'info_auteurs' => 'Bann lotèr', 'info_auteurs_par_tri' => 'Bann lotèr@partri@', 'info_auteurs_trouves' => 'Bann lotèr la finn dèt trouvé', @@ -260,15 +198,12 @@ inn liv-zimaz (sédir inn galri).', 'info_date_publication_anterieure' => 'Avans ladat lapiblikasyon :', 'info_date_referencement' => 'DAT LO RÉFÉRANSMAN SITWÈB-LA :', 'info_derniere_etape' => 'Dernyèr étap : Ala ! Tousala lé fini !', - 'info_derniers_articles_publies' => 'Out bann dèrnyé zartik an liyn', - 'info_desactiver_messagerie_personnelle' => 'Ou pé fé zwé ou détour, kom sak i vé, out prop kazmodékri si lo sitwèb.', 'info_descriptif' => 'Sak i kontyin :', 'info_discussion_cours' => 'Bann kozman ou lé apré kozé ', 'info_ecrire_article' => 'Ou i dwa dabor kré inn promyé rubrik avand ékri out bann zartik.', 'info_email_envoi' => 'Ladrès po lanvwa inn lilèl(lépa obligatwar)', 'info_email_envoi_txt' => 'Mèrsi indiké tèrla out ladrès pou anvwa bann zimèl (sinonsa ladrès déstinatèr li sra ansèrvi osi kom ladrès lanvwa) :', 'info_email_webmestre' => 'Ladrès imèl lo wèbmèt (lé pa obligatwar)', # MODIF - 'info_entrer_code_alphabet' => 'Mèt isi lo kod lalfabé ifo anserv :', 'info_envoi_email_automatique' => 'Anvwa inn limèl otomatikman', 'info_envoyer_maintenant' => 'Anvwa astèr', 'info_etape_suivante' => 'Pas létap answit', @@ -278,7 +213,6 @@ inn liv-zimaz (sédir inn galri).', 'info_facilite_suivi_activite' => 'Pou swiv fasilman laktivité léditoryal sir lo sit, SPIP i pé anvwa inn zanons dann fil-imèl pou tout bann zitilizatèr anrozistré. Zanons komsa i kadr tout bann dommand pou lapiblikasyon oubyinsa bann konfirmasyon do dernyé bann zartik.', 'info_fichiers_authent' => 'Bann fisyé pou lotantifikasyon « .htpasswd »', 'info_forums_abo_invites' => 'Out sit néna bann forom si labonman ; Ifo bann vizitèr li inskri azot si lo sit piblik.', - 'info_gauche_admin_effacer' => 'Pazwèb-la, lé sèlman ouvèr pou inndé responsab lo sit.

    Li donn laksé sir bann fonksyon pou lantrotyen tèknik. Nana désertin sak i domann aou fé zwé inn prosésus spésial pou lotantifikasyon. Dann ka-la inn laksé FTP lé néséser pou sanz inn sizé sir lo sit.', # MODIF 'info_gauche_admin_tech' => 'Pazwèb-la, lé sèlman ouvèr pour inndé responsab lo sit.

    Li donn laksé sir bann fonksyon pou lantrotyen tèknik. Nana désertin sak i domann aou fé zwé inn prosésus spésial pou lotantifikasyon. Dann ka-la inn laksé FTP lé néséser pou sanz inn sizé sir lo sit.', # MODIF 'info_gauche_admin_vider' => 'Pazwèb-la, lé sèlman ouvèr pou inndé responsab lo sit.

    Li donn laksé sir bann fonksyon pou lantrotyen tèknik. Nana désertin sak i domann aou fé zwé inn prosésus spésyal pou lotantifikasyon. Dann ka-la inn laksé FTP lé néséser pou sanz inn sizé sir lo sit.', # MODIF @@ -286,20 +220,13 @@ néséser pou sanz inn sizé sir lo sit.', # MODIF Bann drwa pou bann dalon lé kadré èk la koulèr likonn azot (komandèr= vèr ;lotèr = zonn).', 'info_gauche_auteurs_exterieurs' => 'Bann lotèr-déor, sak nana pwinn laksé sir lo sitwèb, lé présizé èk inn likonn blé ; bann lotèr dégréné lé kadré èk inn korbéy.', # MODIF 'info_gauche_messagerie' => 'Kazmodékri-la i permé azot mèt ansanm pou lanvwa inndé modékri antrozot, gard out prop bann gardandèt, ou byin sa ankor : afis tout bann zanons sir pazlakèy dann zéspas privé (si ou lé komandèr).', - 'info_gauche_numero_auteur' => 'LOTÈR NIMÉRO', 'info_gauche_statistiques_referers' => 'Pazwèb-la i prézant lo fil bann référèr, ou poutoudir lo fil bann sit sak i gatir out prop sitwèb. Rannkont-la lé selman valab po yèr é zordi : fil-la i ropat zéro tout bann 24H.', 'info_gauche_visiteurs_enregistres' => 'Ou va trouv tèrla bann vizitèr anroziztré sir figirwèb piblik (bann forom sir labonman).', 'info_generation_miniatures_images' => 'La kréasyon bann miniatyr pou bann zimaz', - 'info_gerer_trad' => 'Zot i vé zèr bann gatir pou bann tradiksyon ?', 'info_hebergeur_desactiver_envoi_email' => 'Nana désertin lébèrzèr sak i défalk lanvwa otomatik do bann limèl, dopwi zot bann servèr. Dann ka-la, bann fonksyonalité SPIP anba-la, i sava pa marsé.', 'info_hier' => 'Yèr :', - 'info_historique_activer' => 'Po fé roulé lo swivi tout sat la sanzé', - 'info_historique_affiche' => 'Afisé versyon-la', - 'info_historique_comparaison' => 'Kompar', - 'info_historique_desactiver' => 'Dégrèn lo swivi tout sak la sanzé', - 'info_historique_texte' => 'Lo swivi sat la sanzé i pèrmé gard listwar out bann sanzman andann zartik, è afisé bann diférans sanm tout bann versyon.', 'info_identification_publique' => 'Out lidantité piblik...', 'info_image_process' => 'Mersi swazi lo méyèr manyir pou fabrik out bann vinyèt sam apiyé si limaz i korespon.', 'info_image_process2' => 'Pangar Si néna okinn zimaz sat i pé vwar an liny, i pé dir lo sèrvèr li ébèrz out sitwèb lé pa kofigiré po akèy bann zouti-la. Ifo zot i koz èk lo résponsab po domann ali tout bann zekstansyon « GD » ou « Imagick ».', # MODIF @@ -317,8 +244,6 @@ SPIP anba-la, i sava pa marsé.', 'info_login_trop_court' => 'Nondkod-la lé takini : ékart ali.', 'info_maximum' => 'Pli gran siksé :', 'info_meme_rubrique' => 'Andann mèm ribrik-la', - 'info_message' => 'Modékri dann', - 'info_message_efface' => 'MODÉKRI DÉGRÉNÉ', 'info_message_en_redaction' => 'Out bann modékri lé apré lékritir ', 'info_message_technique' => 'Lavi tèknik :', 'info_messagerie_interne' => 'Kazmodékri', @@ -331,21 +256,16 @@ fisyé SPIP.}}', 'info_modifier_rubrique' => 'Sanz la rubrik :', 'info_modifier_titre' => 'Sanz : @titre@', 'info_mon_site_spip' => 'Sit SPIP amwin', - 'info_mot_sans_groupe' => '(Bann mo-la nana pwinn group...)', - 'info_moteur_recherche' => 'Rodèr dodan', 'info_moyenne' => 'Mwayinn :', - 'info_multi_articles' => 'Fé zwé lo "méni-déroulèr bann lang" sir bann zartik ?', 'info_multi_cet_article' => 'Patwa lartik-la :', 'info_multi_langues_choisies' => 'Swazi anba-tèrla bann lang ou vé pèrmèt out bann zitilizatèr i ansèrv sir out sitwèb. Zot i pé pa dégrèn bann lang sak lé déza prézan sir out sitwèb (ni afis azot dabor). ', - 'info_multi_rubriques' => 'Fé zwé lo méni-déroulèr pou bann lang si bann ribrik ?', 'info_multi_secteurs' => '...sèlman pou bann ribrik ou la plas dann rasine ?', 'info_nom' => 'Non', 'info_nom_destinataire' => 'Non lo korespondan', 'info_nom_site' => 'Lo non out sitwèb ', 'info_nombre_articles' => '@nb_articles@ bann zartik,', - 'info_nombre_partcipants' => 'BANN DALON DANN KOZMAN :', 'info_nombre_rubriques' => '@nb_rubriques@ bann rubrik,', 'info_nombre_sites' => '@nb_sites@ bann sitwèb,', 'info_non_deplacer' => 'Mèrsi pa dékalé...', @@ -355,36 +275,26 @@ la finn dèt publyé).', 'info_non_modifiable' => 'ou pé pa sanz ali', 'info_non_suppression_mot_cle' => 'Mi vé pa dégrèn molaklé-la.', 'info_notes' => 'Bann komantèr', - 'info_nouveaux_message' => 'Bann nouvo modékri', 'info_nouvel_article' => 'Nouvo lartik', 'info_nouvelle_traduction' => 'Nouvèl tradiksyon :', 'info_numero_article' => 'LARTIK NIMÉRO :', 'info_obligatoire_02' => '[Obligatwar]', # MODIF 'info_option_accepter_visiteurs' => 'Asèpt bann vizitèr i inskri azot si lo sit piblik', - 'info_option_faire_suivre' => 'Pou fé swiv bann modékri lo forom a tout bann lotèr bann zartik', 'info_option_ne_pas_accepter_visiteurs' => 'Arfiz bann vizitèr i inskri azot', 'info_options_avancees' => 'BANN ZOPSYON AVANSÉ', - 'info_ortho_activer' => 'Roul ron lo korèktèr po la grafi', - 'info_ortho_desactiver' => 'Dégrènn lo korèktèr po la grafi', 'info_ou' => 'ou...', 'info_page_interdite' => 'Pazwèb intèrdi', 'info_par_nombre_article' => '(pou lo nonb bann zartik)', 'info_passe_trop_court' => 'Out modpas lé tro takini.', 'info_passes_identiques' => 'Bann dé modpass-la lé pa parèy.', - 'info_pense_bete_ancien' => 'Out bann vyé gardantèt', # MODIF 'info_plus_cinq_car' => 'pli dé 5 karaktèr-limprimri', 'info_plus_cinq_car_2' => '(Pli dé 5 karaktèr-limprimri)', 'info_plus_trois_car' => '(Pli dé 3 karaktèr-limprimri)', 'info_popularite' => 'Koman lé populèr : @popularite@ ; bann vizit : @visites@', - 'info_popularite_4' => 'koman lé populèr : @popularite@ ; bann vizit : @visites@', 'info_post_scriptum' => 'Koz-Déryèr', 'info_post_scriptum_2' => 'Koz-déryèr :', 'info_pour' => 'pou', - 'info_preview_admin' => 'Bann komandèr sèlman i pé vwar lo sit avan', - 'info_preview_comite' => 'Tout bann rédaktèr i pé vwar lo sit avan', - 'info_preview_desactive' => 'Manyir po vwar lo sit avan lé tout dégréné-la', - 'info_preview_texte' => 'Lé posib vwar lo sit avan komsi tout bann zartik èk bann tit-nouvèl (sat néna omwin lo statu « pou pibliyé ») zot sré astèr an liny. Ou pé swazi si lé sèlman po komandèr, po rédaktèr ou si lé pa posib ni po lin ni po lot. ', - 'info_principaux_correspondants' => 'Out méyèr dalon po koresponn', + 'info_preview_texte' => 'Lé posib vwar lo sit avan komsi tout bann zartik èk bann tit-nouvèl (sat néna omwin lo statu « pou pibliyé ») zot sré astèr an liny. Ou pé swazi si lé sèlman po komandèr, po rédaktèr ou si lé pa posib ni po lin ni po lot. ', # MODIF 'info_procedez_par_etape' => 'azi étap sanm étap', 'info_procedure_maj_version' => 'Lé nésésèr fé zwé arnouvèlman la bazdodné pou giny roul ron la nouvèl versyon SPIP.', @@ -397,13 +307,9 @@ versyon SPIP.', sir figirwèb privé é propoz zot prop zartik minm.

    Dan moman linskrisyon, bann zitilizatèr i giny inn limèl otomatikman. Limèl-la i donn azot bann kod lakostaz sir figirwèb privé. Nana désertin zéberzèr sak i dégrèn lanvwa bann limèl sir zot bann servèr : dann kala, linskrisyon otomatik li lé pa posib', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Indik si ou vé ansèrv lo rodèr-dodan SPIP -(si ou défalk ali, lo sistèm lé pli rapid.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Rasin lo sitwèb', 'info_recharger_page' => 'Mersi rosarz lapazwèb-la disi inn ti moman.', - 'info_recherche_auteur_a_affiner' => 'Néna trod bann rézilta pou "@cherche_auteur@" ; mersi kadr myé kosa i rod.', - 'info_recherche_auteur_ok' => 'Nana plizyèr bann lotèr trouvé pou "@cherche_auteur@" :', 'info_recherche_auteur_zero' => 'Néna pa okinn rézilta pou "@cherche_auteur@".', 'info_recommencer' => 'Mersi arcomans inn ot fwa.', 'info_redacteur_1' => 'Lotèr', @@ -420,7 +326,6 @@ sak i dégrèn lanvwa bann limèl sir zot bann servèr : dann kala, linskrisyon 'info_rubriques' => 'Bann rubrik', 'info_rubriques_02' => 'bann rubrik', 'info_rubriques_trouvees' => 'Bann rubrik la finn dèt trouvé', - 'info_rubriques_trouvees_dans_texte' => 'Bann rubrik la fin dèt trouvé(dann tèks)', 'info_sans_titre' => 'Néna pwinn titr', 'info_selection_chemin_acces' => 'Swazi tèrla lo somin-laksé dann karné :', 'info_signatures' => 'bann sinyatir', @@ -433,13 +338,11 @@ sak i dégrèn lanvwa bann limèl sir zot bann servèr : dann kala, linskrisyon 'info_sites_lies_mot' => 'Bann sit référansé sak lé gatiré èk molalklé-la', 'info_sites_proxy' => 'Anserv inn proksi', 'info_sites_trouves' => 'Bann sitwèb trouvé', - 'info_sites_trouves_dans_texte' => 'Bann sitwèb trouvé (dann lo tèks)', 'info_sous_titre' => 'Soutitr :', 'info_statut_administrateur' => 'Komandèr', 'info_statut_auteur' => 'Lo statu lotèr-la :', # MODIF 'info_statut_auteur_a_confirmer' => 'Ou i dwa konfime out linkrisyon ', 'info_statut_auteur_autre' => 'In ot stati :', - 'info_statut_efface' => 'Dégréné', 'info_statut_redacteur' => 'Lotèr', 'info_statut_utilisateurs_1' => 'Lo statu sanswa bann zitilizatèr déor', 'info_statut_utilisateurs_2' => 'Swazi lo ran ou vé donn do moun prézan dann karné LDAP, kank moun-la i konèk inn promyèr fwa. Ou sra kav answuit sanz valèr ou la donn azot (o ka sanm lo ka).', @@ -459,7 +362,6 @@ sak i dégrèn lanvwa bann limèl sir zot bann servèr : dann kala, linskrisyon 'info_tous_articles_en_redaction' => 'Tout bann zartik lé apré lékritir', 'info_tous_articles_presents' => 'Tout bann zartik pibliyé dann rubrik-la', 'info_tous_les' => 'tout bann :', - 'info_tous_redacteurs' => 'Bann zanons pou tout bann lotèr', 'info_tout_site' => 'Lo sit antyé', 'info_tout_site2' => 'Lartik lé pa tradwi andan lo patwa-la.', 'info_tout_site3' => 'Lartik-la, li lé tradwi andan lo patwa-la, somansa ni la port bann sanzman si lartik lorizin. Larnouvèlman la tradiksyon lé nésésèr.', @@ -474,7 +376,6 @@ sanm in koulèr i présiz son léta :', 'info_une_rubrique' => 'inn rubrik,', 'info_une_rubrique_02' => '1 rubrik', 'info_url' => 'URL :', - 'info_url_site' => 'URL LO SITWÈB :', 'info_urlref' => 'Gatir wèb :', 'info_utilisation_spip' => 'Astèr ou pé anserv lo sistèm lapiblikasyon SPIP...', 'info_visites_par_mois' => 'Afis pou lo mwa :', @@ -491,8 +392,6 @@ sanm in koulèr i présiz son léta :', 'item_activer_messages_avertissement' => 'Fé zwé bann modékri pou lavizman', 'item_administrateur_2' => 'komandèr', 'item_afficher_calendrier' => 'Afis dann kalandryé', - 'item_autoriser_documents_joints' => 'Permèt do zwinn inndé dokiman dann bann zartik', - 'item_autoriser_documents_joints_rubriques' => 'Permèt azout bann dokiman dann bann rubrik', 'item_autoriser_syndication_integrale' => 'Pou don a zot tout lartik byen komplé andann bann fisyé pou la sindikasyon', 'item_choix_administrateurs' => 'bann komandèr', 'item_choix_generation_miniature' => 'Pou kré otomatikman bann zimaz-minyatir (bann vinyèt).', @@ -500,7 +399,6 @@ sanm in koulèr i présiz son léta :', 'item_choix_redacteurs' => 'bann lotèr', 'item_choix_visiteurs' => 'bann vizitèr sir figirwèb', 'item_creer_fichiers_authent' => 'Pou kré bann fisyé .htpasswd', - 'item_limiter_recherche' => 'Mèt inn limit pou lo rodaz zinformasyon sir out sitwèb', 'item_login' => 'Nondkod', 'item_mots_cles_association_articles' => 'èk bann zartik', 'item_mots_cles_association_rubriques' => 'èk bann rubrik', @@ -509,35 +407,25 @@ sanm in koulèr i présiz son léta :', 'item_non_accepter_inscriptions' => 'Anpès asèpt bann zinskrisyon', 'item_non_activer_messages_avertissement' => 'Anpès anvwa bann modékri pou lavizman', 'item_non_afficher_calendrier' => 'Anpès afis lo kalandryé', - 'item_non_autoriser_documents_joints' => 'Anpès zwinn inndé dokiman dann bann zartik', - 'item_non_autoriser_documents_joints_rubriques' => 'Anpès zwinn inndé dokiman dann bann rubrik', 'item_non_autoriser_syndication_integrale' => 'Pour donn azot selman in rézimé', 'item_non_creer_fichiers_authent' => 'Anpès kré bann fisyé-la', - 'item_non_gerer_statistiques' => 'Anpès zèr bann sifklé pou bann vizit', - 'item_non_limiter_recherche' => 'Ékart lo rodaz pou lo kontnu bann sit référansé', 'item_non_publier_articles' => 'Bann zartik lé pa an liyn avan ladat sak lé di.', - 'item_non_utiliser_moteur_recherche' => 'Anpès ansèrv lo rodèr', 'item_nouvel_auteur' => 'Nouvo lotèr', 'item_nouvelle_rubrique' => 'Nouvèl rubrik', 'item_oui' => 'Wi', 'item_publier_articles' => 'Mèt an liyn tout bann zartik san gèt ladat lapiblikasyon.', 'item_reponse_article' => 'Répons lartik', - 'item_utiliser_moteur_recherche' => 'Ansèrv lo rodèr', 'item_visiteur' => 'vizitèr', // J 'jour_non_connu_nc' => 'p.k. (pa konu)', // L - 'lien_ajout_destinataire' => 'Azout korèspondan-la', 'lien_ajouter_auteur' => 'Azout lotèr-la', - 'lien_ajouter_participant' => 'Azout inn dalon', 'lien_email' => 'limèl', 'lien_nom_site' => 'LO NON LO SITWÈB :', 'lien_retirer_auteur' => 'Artir lotèr-la', - 'lien_retrait_particpant' => 'Artir dalon-la', 'lien_site' => 'sitwèb', - 'lien_supprimer_rubrique' => 'dégrèn rubrik-la', 'lien_tout_deplier' => 'Dépliy a tout', 'lien_tout_replier' => 'Arpliy a tout ', 'lien_trier_nom' => 'Prézant swivan lo non', @@ -572,6 +460,7 @@ sanm in koulèr i présiz son léta :', // R 'repertoire_plugins' => 'Répertwar :', + 'required' => '[Obligatwar]', # MODIF // S 'statut_admin_restreint' => '(komandèr ti-drwa)', # MODIF @@ -596,14 +485,10 @@ linstalasyon do SPIP pou kré inn nouvèl labaz èk inn promyé laksé komandèr 'texte_article_virtuel_reference' => 'Lartik virtyel : lé référansé dann out sit SPIP, somansa li lé artourné sir inn ot URL(tourné-viré). Pou dégrèn lartournaz, éfas anlèr son ladrès URL.', 'texte_aucun_resultat_auteur' => 'Nana pwinn rézilta pou "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Sit-la i pé armont toultan tout bann lotèr an liyn. Sa lé itil pour mèt ansanm bann modékri, dann tan minm moun lé sir lo sit (mé kank lakazmodékri lé dégréné anlèr, list-la lé pa visib). Ou pé swazi kas aou dann la list-la (bann zitilizatèr i pé pa vwar aou somansa ou pé vwar azot).', - 'texte_auteur_messagerie_1' => 'Sit-la i permé lanvwa bann modékri èk lakréasyon bann forom privé antrozot bann dalon si lo sit. Ou lé lib mèt ansanm ou arfiz aparèt dann forom kozman-la.', 'texte_auteurs' => 'BANN LOTÈR', 'texte_choix_base_1' => 'Swazi out labaz :', 'texte_choix_base_2' => 'Servèr SQL li kontyin plizyèr bann bazdodné.', 'texte_choix_base_3' => 'Swazi anba terlà sak out lébérzèr la donn aou :', - 'texte_commande_vider_tables_indexation' => 'Itiliz komand-la pou vid bann tab lindèksasyon sak lo rodèr SPIP i -anserv astèr. Kom sa ou sava giny inn pé plid léspas-diks.', - 'texte_compresse_ou_non' => '(i pé konpèrs ali si ou vé)', 'texte_compte_element' => '@count@ zéléman', 'texte_compte_elements' => '@count@ bann zéléman', 'texte_connexion_mysql' => 'Gèt bann zinformasyon out léberzèr la don aou : si li néna SQL, ou dwa trouv bann kod pou lakostaz sir lo servèr SQL.', # MODIF @@ -618,10 +503,8 @@ Anserv lalist anba-la pou kadr byin sak lé disponib.', 'texte_date_publication_anterieure' => 'Dat li té pibliyé avan :', 'texte_date_publication_anterieure_nonaffichee' => 'Afis pa okinn dat pou in rédaksyon avan.', 'texte_date_publication_article' => 'LADAT LAPIBLIKASYON AN LIYN :', - 'texte_descriptif_petition' => 'Dékri inn pé kosa ifo sinyé', 'texte_descriptif_rapide' => 'Dékri vitman kosa i lé', 'texte_effacer_base' => 'Dégrèn bazdodné SPIP', - 'texte_effacer_donnees_indexation' => 'Dégrèn tout bann doné pou lindéksasyon', 'texte_en_cours_validation' => 'Bann zartik èk bann rubrik anba-la, lé prézanté pou lapiblikasyon. Ézit pas donn ani out manyirdvwar dann bann forom i bord azot.', # MODIF 'texte_enrichir_mise_a_jour' => 'Pou rannd pli ris lamanyir out sit lé mi an paz, i pé anserv « bann rédiyon linprimri ».', 'texte_fichier_authent' => 'Présiz byin si out sistèm SPIP li dwa kré bann fisyé spésifik .htpasswd @@ -633,27 +516,17 @@ Si fisyé-la, li sèr pa ryen sir out sitwèb, lès la valèr otomatik pou lopsy 'texte_informations_personnelles_2' => '(Gèt byin tousa : si néna inn nouvèl linstalasyon é si laksé i mars touzour, i pé ', # MODIF 'texte_introductif_article' => '(Tèks pour anbèk lartik.)', 'texte_jeu_caractere' => 'Ni konsey a ou anserv, pou out sit, lalfabé inivérsel (utf-8) : li permé afisé in teks ek tout bann lang, sank ou gigny okinn larlik ek la konpatinilité d ban navigatèr modern.', - 'texte_jeu_caractere_2' => 'Réglaz-la la pwinnd léfé sir sak ou la déza mi an liyn dann tan dèryèr. Akoz sa minm, néna inn riks bann tèks déza prézan sir lo sit, i afis pa zot-minm byin korèkman. Pwatan, lé pa inn gro larlik, akoz ou pé touzour rebrous-somin èk lo réglaz davan.', 'texte_jeu_caractere_3' => 'Ou sit la i anserv komela lo jéd karactèr swivan :', 'texte_jeu_caractere_4' => 'Si li korespon pa ek la réalité out ban doné (aprè ou la restora out bazdodne pa examp), ou si ou la zust finn komansé out sit sat ou vé vwar ek in ot jéd bann karactèr, mersi ou mèt lo non terla :', - 'texte_jeu_caractere_conversion' => 'Pangar : Ou i pé désidé pass tout bann teks out sit(zartik, tite-nouvel, forom étousala.) andan utf-8. Ifo sempman ou sar bat karé bat sirsédir lo paj pou lo chanjman andan forma utf-8.', - 'texte_lien_hypertexte' => '(Si out modékri-la i rannkont inn larlik èk inn lartik an liyn, ou si té sinyalé pé plid zinformasyon sir in ot paz, mersi indik tèrla lo non lapaz ou di èk son ladrès URL.)', 'texte_login_ldap_1' => '(Lès vid pou inn laksé san lidentifikasyon ou rant in somin komplé, pa égsanp « uid=hoareau, ou=zitilizatèr, dc=domèn-amwin, dc=com ».)', 'texte_login_precaution' => 'Tansyon pangar ! Sa lé lo non sanm ou lé konékté. Ansèrv formulèr-la èk prékosyon...', - 'texte_message_edit' => 'Tansyon pangar : modékri-la, tout bann komandèr lo sit i pé sanz ali. Li lé vizib osi pou tout bann lotèr. Ni konsèy aou anserv bann zanons sèlman pou armontr bann zévènman sak lé inportan sir lo sit.', 'texte_mise_a_niveau_base_1' => 'Ou vyin zist d-fini larnouvèlman bann fisyé SPIP. Ifo astèr armètanivo labazdodné.', 'texte_modifier_article' => 'Sanz lartik :', - 'texte_moteur_recherche_active' => 'Lo rodèr lo sit lé an mars. Anserv lakomand-la -si ou vé fè zwé inn rapid nouvèl indéksasyon (dann ka-la pa égsanp : aprè ou la réstoré -inn sovgard. Gard an tèt sak bann dokiman ou la sanz normalman (dopwi lafigirwèb lo SPIP), zot lé otomatikman -réindéksé : é litilité la komand-la lé donk ésépsyonèl.', - 'texte_moteur_recherche_non_active' => 'Rodèr do SPIP lé pa an mars.', 'texte_multilinguisme' => 'Si ou vé zèr out bann zartik dann plizyèr lang, èk inn sistèm navigasyon konplèks, ou pé azout inn ménidswa lalang lartik ou laribrik.', # MODIF 'texte_multilinguisme_trad' => 'Ou pé osi azout inn sistèm lazéstyon bann gatir ant tout bann tradiksyon inn minm lartik.', # MODIF 'texte_non_compresse' => 'Lé pa konpèrsé (akoz out servèr i pé pa fé zwé lafonksyon-la)', - 'texte_nouveau_message' => 'Nouvo modékri', 'texte_nouvelle_version_spip_1' => 'Ou la finn instal inn nouvèl versyon do SPIP.', 'texte_nouvelle_version_spip_2' => 'Ek lo nouvèl versyon-la lé nésésèr fé zwé inn pli konplé arnouvèlman, sak dabitid. Si ou lé lo wèbmèt lo sit, mersi éfas lo fisyé @connect@. Arpran answit linstalasyon pour arnouvèl out bann paramèt pou lakostaz-labazdodné.

    (Véy byin. : si ou la oubliyé out bann paramèt pou lakostaz, gèt inn pé lo fisyé @connect@ avann dégrèn ali...)', # MODIF 'texte_operation_echec' => 'Bataryèr si lapazwèb davan pou swazi ou kré inn ot labaz. Vèy byin osi tout bann zinformasyon out lébèrzèr la donn aou.', @@ -671,7 +544,6 @@ lés sinpman kaz-la vid.', 'texte_rappel_selection_champs' => '[Oubli pa swazi korèkman lo karo-la.]', 'texte_recalcul_page' => 'Si ou vé arkalkil inn sèl paz, ni konsèy aou pas dann léspas piblik èk anserv lo bouton « arkalkil ».', - 'texte_recapitiule_liste_documents' => 'Paz-la i ramas lalist bann dokiman ou la finn mèt dann bann rubrik. Pou sanz tout bann zinformasyon po bann dokiman-la, anon swiv lo gatiraz sir lapaz son rubrik.', 'texte_recuperer_base' => 'Aranz la bazdodné', 'texte_reference_mais_redirige' => 'lartik lé référansé dann out sit SPIP, mé li lé tourné-viré sir inn ot ladrès URL.', 'texte_requetes_echouent' => 'Kank néna désertinn rokèt SQL i mars zamé @@ -692,7 +564,6 @@ Si lo larlik-la i rest touzour, ifo koz do sa èk out léberzèr.

    ', # MODIF 'texte_suppression_fichiers' => 'Anserv lakomand-la pou dégrèn tout bann fisyé sir lo kas SPIP. Sa lé itil, pa égsanp, pou fors larkalkil do tout bann pazwèb si lo sit, kank ou la fé bann sanzman inportan dann grafism ou dann lastriktir lo sit.', 'texte_sur_titre' => 'Sirtitr', 'texte_table_ok' => ' : tab-la lé OK.', - 'texte_tables_indexation_vides' => 'Bann tab lé vid (pou lindèksasyon lo rodèr).', 'texte_tentative_recuperation' => 'Esèy inn aranzman', 'texte_tenter_reparation' => 'Esèy inn aranzman dla bazdodné', 'texte_test_proxy' => 'Pou inn test lo proksi, mèt isi ladrès inn sitwèb sak ou vé testé.', @@ -701,17 +572,8 @@ Si lo larlik-la i rest touzour, ifo koz do sa èk out léberzèr.

    ', # MODIF 'texte_travail_article' => '@nom_auteur_modif@ la finn travay sir lartik-la néna @date_diff@ minit', 'texte_travail_collaboratif' => 'Si néna souvandfwa plisyèr lotèr pou mèt ansanm inn travay sir lo minm lartik, lo sistèm i pé afis inn zanons spésial. Zanons-la, i pé montr azot bann zartik sak la finn dèt « ouver » inn ti pé avan. Lé pratik pou anpès bann sanzman similtané. Mé vèy byin, lopsyon-la, li lé pa aktivé otomatikman pou anpès lafisaz inn lavizman abizif.', - 'texte_trop_resultats_auteurs' => 'Néna trod rézilta pou "@cherche_auteur@" ; mersi kadr myé lo rodaz.', - 'texte_unpack' => 'télézarzman dla dernyèr versyon', - 'texte_utilisation_moteur_syndiques' => 'Kank ou i anserv lo rodèr SPIP, ou pé fèr bann rodaz sir tout bann sit èk out bann zartik sindiké. Néna plisyèr manyir diféran.
    Pli sinp lé rod sélman dann lo titr ou dann ladéskrisyon out bann zartik.
    - -Inn dézièm métod, pli pwisan, li permè a SPIP rod osi dann kor lo tèks tout out bann sit référansé . Si ou - la référans inn sitwèb, SPIP i sava rod dann tèks sa-minm.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Èk métod-la, SPIP lé oblizé d-vizité -souvandfwa bann sit référansé, -sak i pé rand out sit inn pé pli lan.', 'texte_vide' => 'vid', 'texte_vider_cache' => 'Dévid lo kas', - 'titre_admin_effacer' => 'Lantrotyin tèknik', 'titre_admin_tech' => 'Lantrotyin tèknik', 'titre_admin_vider' => 'Lantrotyin tèknik', 'titre_cadre_afficher_article' => 'Afis bann zartik', @@ -731,49 +593,26 @@ sak i pé rand out sit inn pé pli lan.', 'titre_naviguer_dans_le_site' => 'Bat-karé sir lo sit...', 'titre_nouvelle_rubrique' => 'Nouvèl rubrik', 'titre_numero_rubrique' => 'RUBRIK NIMÉRO :', - 'titre_page_admin_effacer' => 'Lantrotyin tèknik : pou dégrèn labaz', 'titre_page_articles_edit' => 'Sanz : @titre@', 'titre_page_articles_page' => 'Bann zartik', 'titre_page_articles_tous' => 'Lo sit antyé', - 'titre_page_auteurs' => 'Bann vizitèr', 'titre_page_calendrier' => 'Kalandryé @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Lakonfigirasyon lo sit', - 'titre_page_config_fonctions' => 'Lakonfigirasyon lo sit', - 'titre_page_configuration' => 'Lakonfigirasyon lo sit', - 'titre_page_controle_petition' => 'Pu swiv bann filsinyatir', 'titre_page_delete_all' => 'Dégrénaz antyé. Lé pa posib artourné komand-la', - 'titre_page_documents_liste' => 'Bann dokiman dann bann rubrik', - 'titre_page_index' => 'Out léspas privé', - 'titre_page_message_edit' => 'Ékri inn modékri', - 'titre_page_messagerie' => 'Out kazmodékri', 'titre_page_recherche' => 'Bann rézilta pou lo rodaz @recherche@', 'titre_page_statistiques_referers' => 'Bann sifklé (bann gatir i rant dann sit)', 'titre_page_upgrade' => 'Dernyé sanzman SPIP (armizanivo)', 'titre_publication_articles_post_dates' => 'Piblikasyion pou bann zartik daté-déryèr', - 'titre_referencer_site' => 'Référans inn sitwèb :', - 'titre_rendez_vous' => 'RANDÉVOU :', 'titre_reparation' => 'Aranzman', 'titre_suivi_petition' => 'Pou swiv bann filsinyatir', - 'trad_article_inexistant' => 'Ni la pa trouv okin lartik i port zot niméro-la.', 'trad_article_traduction' => 'Tout bann versyon lartik-la :', - 'trad_deja_traduit' => 'Lartik-la lé déza inn tradiksyon li-minm.', 'trad_delier' => 'Arèt gatiré lartik-la èk son bann tradiksyon', # MODIF 'trad_lier' => 'Lartik-la lé inn tradiksyon lartik niméro :', 'trad_new' => 'Ekri inn nouvèl tradiksyon lartik-la', # MODIF // U - 'utf8_convert_attendez' => 'Mersi espèr in ti moman pi rocharj lo paj la.', - 'utf8_convert_avertissement' => 'Ou sava chanje lo kontni out bazdodné (bzartik, tite-nouvèl,etousal) sat lé koméla dan formad karaktèr @orig@ pou pass azot dan bann karaktèr@charset@.', - 'utf8_convert_backup' => 'Oubly pa fè in sovgard byen komplé out sit. Sra nésésèr ou gad byen sak out ban leskelèt ek bann fisyé lang zot lé kopatib ek @charset@. Pangar, si lo sistèm pou swiv bann révizyon lé aktivé, li sra sirman ravajé.', - 'utf8_convert_erreur_deja' => 'Out sit i anserv déja @charset@, lé pa itil chanje ali...', 'utf8_convert_erreur_orig' => 'Larlik : lansanm karaktèr @charset@ li lé pa siporté.', - 'utf8_convert_termine' => 'Lé finn fini !', - 'utf8_convert_timeout' => 'TANSYON PANGAR : SI out server li gigny in timeout, ou nora bezwin rocharj out paj zizka èl i afis « finn fino ».', - 'utf8_convert_verifier' => 'Fok ou sava vid lo kach, epi gad byen tout lé normal sir lo sit piblik. Si ou nénna in larlik, inkièt pa ou, in sovgard out donné la té fin fini (ek lo forma SQL) andan lo répertwar @rep@.', - 'utf8_convertir_votre_site' => 'Po chanjer out sit ek utf-8', // V 'version' => 'Vesyon :' ); - -?> diff --git a/www/ecrire/lang/ecrire_cpf_hat.php b/www/ecrire/lang/ecrire_cpf_hat.php index 80d6551e..c00ee58c 100644 --- a/www/ecrire/lang/ecrire_cpf_hat.php +++ b/www/ecrire/lang/ecrire_cpf_hat.php @@ -1,9 +1,11 @@ 'Tounyen dèyè paj avan pou ou byen gade ankò enfòmasyon yo w te doné.', 'avis_connexion_ldap_echec_3' => 'Ann itilize pa sipò LDAP pou gen enpòt itilizatè yo.', 'avis_deplacement_rubrique' => 'Atansyon ! Ribwik la @contient_breves@ brève@scb@ : si w déplas ali, mési ekri yon krwa po konfirmasyon.', - 'avis_destinataire_obligatoire' => 'Fòk w enskri yon destinatè avan voye mesaj la.', 'avis_erreur_connexion_mysql' => 'Erè ak koneksyon SQL', # MODIF - 'avis_erreur_version_archive' => 'Atansyon! Fichye @archive@ ka koresponn - lòt vèsyon SPIP -. W ke genyen gwo pwoblèm sa-yo mèm - : bazdone ke petèt kraze, ouswa sit w ke pa mache. Ann - pa konfime domann lenpòtasyon-nan .

    W ke trouve kèk enfòmasyon sou paj - - dokimantasyon SPIP la.

    ', # MODIF - 'avis_espace_interdit' => 'Espas entèdi
    SPIP se déja instalé.
    ', + 'avis_espace_interdit' => 'Espas entèdi
    SPIP se déja instalé.
    ', 'avis_lecture_noms_bases_1' => 'Pwogwam pou enstalasyon, li te pa kap fè lekti kouman ki rele bazdone yo, yo ki deja enstale.', 'avis_lecture_noms_bases_2' => 'Ouswa okenn bazdone se disponib, oswa fonksyon-nan ki pèmè fé lan lis tout bazdone te kraze akòz sekirite (genyen anpil lebergè te chwazi ki se ka-a).', 'avis_lecture_noms_bases_3' => 'Nan dezyèm ka, gen petèt posib itilize yon lòt baz ki rele deja nonkod w sa-a :', - 'avis_non_acces_message' => 'Aksé entèdi sou mesaj la.', 'avis_non_acces_page' => 'Ou gen pa aksé sou paj la.', 'avis_operation_echec' => 'Operasyon la te pa mache.', - 'avis_probleme_archive' => 'Pwoblèm pou fè lekti fichyé @archive@', 'avis_suppression_base' => 'ATANSYON, sipwesyon tout done-an se pa kav tounen deyé', - 'avis_version_mysql' => 'Ou versyon SQL (@version_mysql@) i gen pa pémi ranje tousèl tab yo andan la bazdoné.', # MODIF // B 'bouton_acces_ldap' => 'Ajoute yon aksé LDAP', 'bouton_ajouter' => 'Ajoute', - 'bouton_ajouter_participant' => 'AJOUTE YON PATISIPAN :', - 'bouton_annonce' => 'ANONS', - 'bouton_checkbox_envoi_message' => 'posibilite voye yon mesaj', - 'bouton_checkbox_indiquer_site' => 'fòk enskri yon sitwèb', - 'bouton_checkbox_signature_unique_email' => 'yon sèl siyati pou yon ladrès imèl ', - 'bouton_checkbox_signature_unique_site' => 'yon sèl siyati pou yon sitwèb', 'bouton_demande_publication' => 'Mann atik la i parèt', 'bouton_desactive_tout' => 'Empeche laktivasyon', - 'bouton_effacer_index' => 'Kraze endèks yo', 'bouton_effacer_tout' => 'Kraze TOUT', - 'bouton_envoi_message_02' => 'VOYE YON MESAJ', 'bouton_envoyer_message' => 'Mesaj se bon : voye', 'bouton_modifier' => 'Chanje', - 'bouton_pense_bete' => 'RAPLE-W POU W MEM', - 'bouton_radio_activer_messagerie' => 'Mèt kazmodékri', - 'bouton_radio_activer_messagerie_interne' => 'Mèt kazmodekri', - 'bouton_radio_activer_petition' => 'Mèt yon pétisyon', 'bouton_radio_afficher' => 'Fé parèt', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Montre w nan lis redaktè yo ap an liy', - 'bouton_radio_desactiver_messagerie' => 'Rete kazmodekri', 'bouton_radio_envoi_annonces_adresse' => 'Voye anons yo sou adrès la :', 'bouton_radio_envoi_liste_nouveautes' => 'Voye yon lis nouvèlte yo', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Ann pa aparèt w nan lis redakté yo ap an liy', 'bouton_radio_non_envoi_annonces_editoriales' => 'Rete voye anons editoyal ', - 'bouton_radio_pas_petition' => 'Okenn petisyon', - 'bouton_radio_petition_activee' => 'Petisyon ka mache', - 'bouton_radio_supprimer_petition' => 'Kraez petisyon nan', 'bouton_redirection' => 'TOUNYEN ADRES DEYO', 'bouton_relancer_installation' => 'Ann eseye ankò instalasyon nan', 'bouton_suivant' => 'Swivan', 'bouton_tenter_recuperation' => 'Esèy yon aranjman', 'bouton_test_proxy' => 'Esèy proksi', 'bouton_vider_cache' => 'Vid kach-la', - 'bouton_voir_message' => 'Gad mesaj-la avan konfime', // C - 'cache_mode_compresse' => 'Fichye yo kach se konprese.', - 'cache_mode_non_compresse' => 'Fichye yo kach se pa konprese.', 'cache_modifiable_webmestre' => 'Webmèt sit-la sèlman li kap chanje paramèt sa-a.', 'calendrier_synchro' => 'Si w itilize yon logisyèl pou en lajenda ki mache ak iCal (Apple iCal, Mozilla Calendar, Ximian Evolution, KOrganizer...), w pé mèt ali swiv yon ritm laktyalité sit-la kan li chanje.', @@ -113,7 +85,6 @@ Tout informasyon-nan, komandèr-sistèm ou komandèr-rézo li dwa donn a w.', 'entree_login' => 'Ou nonkod', 'entree_login_connexion_1' => 'Nonkod pou koneksyon', 'entree_login_connexion_2' => '(souvan se nondkod ou pou laksé FTP mèm ; men se posib lès vid)', - 'entree_login_ldap' => 'Premye nonkod LDAP ', 'entree_mot_passe' => 'Ou modpas', 'entree_mot_passe_1' => 'Modpas pou koneksyon', 'entree_mot_passe_2' => '(souvan se nondkod ou pou laksé FTP menm ; men se posib lès vid)', @@ -139,7 +110,7 @@ Tout informasyon-nan, komandèr-sistèm ou komandèr-rézo li dwa donn a w.', 'ical_info2' => 'Si w vle dot ranseyman sou tout teknik anlèr, ezit pa gad tout paj dokimantasyon pou SPIP.', # MODIF 'ical_info_calendrier' => 'W genyen dé kalandryé. Promyè sé kart sit-la ki anonsé tout atik piblyé. Lòt dezyèm se kalandryé ka kontni tout anons editoryal yo ak mesaj prive yo ki w te genyen : kalandryé a se résèvè pou w sèlman akoz w gen ositou yon klé pèsònel. Klé ou-a kap chanje nepòt kan w vle pa chanje modpas w-a.', 'ical_methode_http' => 'Telechajman', - 'ical_methode_webcal' => 'Sinkwonizasyon (webcal://)', + 'ical_methode_webcal' => 'Sinkwonizasyon (webcal://)', # MODIF 'ical_texte_js' => 'Yon liy javaskrip (javascript) ka pémè w fé parèt senpman tout atik résan nan ki te pibliyé nan sit la, sou nepòt sit ki w genyen a w.', 'ical_texte_prive' => 'Kalandriyé a, se sèlman pèsònel, ki enfòm a w kisa se laktivité editoryal pwivé sou sit-la (kisa se ankò pou fè, rannkont lòt patisipan, kisa se atik yo ak tinouvèl ki pwopozé pou piblikasyon...).', 'ical_texte_public' => 'Kalandriyé a ka pémè w swiv laktivité piblik sou sit la (atik yo ak tinouvèl ositou ki pibliyé).', @@ -156,9 +127,7 @@ Tout informasyon-nan, komandèr-sistèm ou komandèr-rézo li dwa donn a w.', 'icone_creer_auteur' => 'Kreye yon nouvo lotè ek mèt ali ak atik la', 'icone_creer_mot_cle' => 'Kreye yon nouvo mokle ek gen yon lyen ak atik la', 'icone_creer_rubrique_2' => 'Kreye yon nouvo ribrik', - 'icone_envoyer_message' => 'Voye mesaj la', 'icone_modifier_article' => 'Chanje atik la', - 'icone_modifier_message' => 'Chanje mesaj la', 'icone_modifier_rubrique' => 'Chanje ribrik la', 'icone_retour' => 'Tounyen deyé', 'icone_retour_article' => 'Tounyen deyé sou atik a', @@ -168,11 +137,8 @@ Tout informasyon-nan, komandèr-sistèm ou komandèr-rézo li dwa donn a w.', 'icone_valider_signature' => 'Konfime siyati a', 'image_administrer_rubrique' => 'Ou kapab gèr ribrik la', 'info_1_article' => '1 atik', - 'info_1_site' => '1 sitwèb', 'info_activer_cookie' => 'Ou kapab mèt yon gatomakro ki rokonèt a w, ki ke pèmè fè yon viré ant sit piblik ek sit privé.', - 'info_admin_gere_rubriques' => 'Komandè-a gè ribrik yo isit kote mèm :', - 'info_admin_gere_toutes_rubriques' => 'Komandè-a kapab gère tout ribrik yo.', # MODIF 'info_administrateur' => 'Komandè', 'info_administrateur_1' => 'Komandè', 'info_administrateur_2' => 'sit (atansyon kan w ke itilize ali)', @@ -182,16 +148,13 @@ Tout informasyon-nan, komandèr-sistèm ou komandèr-rézo li dwa donn a w.', 'info_administrer_rubrique' => 'Ou kapab gère ribrik-la', 'info_adresse' => 'sou ladrès :', 'info_adresse_url' => 'Ladrès(URL) sit piblik', - 'info_afficher_visites' => 'Fè parèt vizit yo pou :', 'info_aide_en_ligne' => 'Bourad an liy SPIP', 'info_ajout_image' => 'Kan w vlé ajoute kèk imaj tankou kèk dokiman jwenn sou yon atik, Spip kap kreye kèk vinyèt ak imaj yo w te mèt sou sit la(kèk piti imaj)otomatikman.Konsa gen posib kreye yon galri ou yon pòtfolyo otomatik. .', - 'info_ajout_participant' => 'Patisipan swivan te fin ajoute :', 'info_ajouter_rubrique' => 'Ajoute yon lòt ribrik pou gére :', 'info_annonce_nouveautes' => 'Annons nouvèlté yo', - 'info_anterieur' => 'avan', 'info_article' => 'atik', 'info_article_2' => 'atik yo', 'info_article_a_paraitre' => 'Atik posdaté yo ki pou parèt', @@ -199,10 +162,8 @@ Tout informasyon-nan, komandèr-sistèm ou komandèr-rézo li dwa donn a w.', 'info_articles_2' => 'Atik yo', 'info_articles_auteur' => 'Tout atik lotè-a ', 'info_articles_trouves' => 'Atik yo ki te rannkont', - 'info_articles_trouves_dans_texte' => 'Atik yo ki te rannkont (nan tèks)', 'info_attente_validation' => 'Atik w-a ki tann komandè konfime', 'info_aujourdhui' => 'jodiya, :', - 'info_auteur_message' => 'LOTE MESAJ LA:', 'info_auteurs' => 'Lotè yo', 'info_auteurs_par_tri' => 'Lotè yo@partri@', 'info_auteurs_trouves' => 'Lotè yo ki te fin rannkont', @@ -218,7 +179,6 @@ Tout informasyon-nan, komandèr-sistèm ou komandèr-rézo li dwa donn a w.', 'info_classement_1' => 'ye sou @liste@', 'info_classement_2' => 'em sou @liste@', 'info_code_acces' => 'Oubliy pa kod laksè w-a, pou w mèm !', - 'info_compresseur_gzip' => 'N. B. : Il est recommandé de vérifier au préalable si l’hébergeur compresse déjà systématiquement les scripts php ; pour cela, vous pouvez par exemple utiliser le service suivant : @testgzip@', # MODIF 'info_config_suivi' => 'Si ladrès-la ap koresponn yon lis-limèl, w kap enskri isit anba ladès tout patisapan sou sit-la yon ke kap enskri a y. Ladrès-la pétèt se yon URL (pa egsanp lapaj lenskrisyon sou lalis-limèl pa Web-la), osnon yon ladrès limèl ki gen yon sijé spécifik (pa egsanp: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'W kap enskri w pou ou gen lalis-limèl sit-la. Ou ke gen alò yon limèl pou rankont tout anons pou atik-la ek tinouvèl nan sit-la ki pwopozé pou piblikasyon.', 'info_confirmer_passe' => 'Konfime nouvo modpas-la :', @@ -236,15 +196,12 @@ Tout informasyon-nan, komandèr-sistèm ou komandèr-rézo li dwa donn a w.', 'info_date_publication_anterieure' => 'Dat li te fin pibliyé avan :', 'info_date_referencement' => 'DAT SIT-LA TE FIN REFERANSE :', 'info_derniere_etape' => 'Dènye etap : se fin fini !', # MODIF - 'info_derniers_articles_publies' => 'Denye atik w-a ki te fin pibliye an liy', - 'info_desactiver_messagerie_personnelle' => 'W kapab mèt oubyen suspann lan kazmodékri (mesajri) pésonèl sou sit-la.', 'info_descriptif' => 'Dekrisyon :', 'info_discussion_cours' => 'Kozman ki ap diskite', 'info_ecrire_article' => 'Ou dwa dabò kreye yon premyé ribrik avan ekri yon atik.', 'info_email_envoi' => 'Adrès limèl pour voye yon mesaj (pa oblijé)', 'info_email_envoi_txt' => 'Ann enskri isit ladrès fòk limèl yo ke rive sou (osnon ladrès destinatè ke itilise konsa yon ladrès pou lanvwa) :', 'info_email_webmestre' => 'Ladrès limèl wèbmèt(pa oblije)', # MODIF - 'info_entrer_code_alphabet' => 'Rantre kòd lalfabe w vle sit-la li itilize :', 'info_envoi_email_automatique' => 'Pou voye kèk limèl otomatikman', 'info_envoyer_maintenant' => 'Voye kounye-a touswit', 'info_etape_suivante' => 'Mach etap swivan', @@ -256,7 +213,6 @@ Tout informasyon-nan, komandèr-sistèm ou komandèr-rézo li dwa donn a w.', voye tout domann osnon konfimasyon pou fè parèt yon atik pa egsanp nan list-limèl pou redaktè.', 'info_fichiers_authent' => 'Fichye yo pou lotantifikasyon « .htpasswd »', 'info_forums_abo_invites' => 'Sit w genyen fowom sou abonman ; vizitè se invite enskri ali sou sit piblik.', - 'info_gauche_admin_effacer' => 'Responsab sit-la selman kapab fè lekti paj-la.

    Li pèrmè laksé pou diféran fonksyon teknik pou swen sit sa-a. Genyen fonksyon sa-yo ki doman yon otantifikasyon espesifik ki doman yon laksé FTP pou sitweb-la.

    ', # MODIF 'info_gauche_admin_tech' => 'Responsab sit-la selman kapab fè lekti paj-la.

    Li pèrmè laksé pou diféran fonksyon teknik pou swen sit sa-a. Genyen fonksyon sa-yo ki doman yon otantifikasyon espesifik ki doman yon laksé FTP pou sitweb-la.

    ', # MODIF 'info_gauche_admin_vider' => 'Responsab sit-la selman kapab fè lekti paj-la.

    Li pèrmè laksé pou diféran fonksyon teknik pou swen sit sa-a. Genyen fonksyon sa-yo ki doman yon otantifikasyon espesifik ki doman yon laksé FTP pou sitweb-la.

    ', # MODIF 'info_gauche_auteurs' => 'Isit, genyen tout zotè sit sa-a. @@ -264,21 +220,14 @@ Koulè imaj rannkont stati yo (komandè = vèr; redaktè = jon).', 'info_gauche_auteurs_exterieurs' => 'Tout lòtè andèyò, ki genyen pa aksè sit-la, se afiche pa yon ikòn blè ; lòtè yo ki te kraze se yon bwat poubèl.', # MODIF 'info_gauche_messagerie' => 'Mesajri rann w kapab voye tout mesaj ant redaktè, gade pansbèt (pèsonel) osnon fè parèt annons sou paj akey nan espas prive (si w se komandè).', - 'info_gauche_numero_auteur' => 'LOTE NIMEWO', 'info_gauche_statistiques_referers' => 'Paj-la se paj ki done lis referers, se dir tout sit sa-yo ki genyen lyen ki rive sou sit w, yer ak jodila ; li repar zéwo tout 24èr la.', 'info_gauche_visiteurs_enregistres' => 'Ou ka rannkont isit vizitè yo ki enskri nan espas piblik sit sa-a (fowom sou labonman).', 'info_generation_miniatures_images' => 'Kreyasyon piti imaj la', - 'info_gerer_trad' => 'Eske fòk sit-la kap okipe tout lyen-tradiksyon ?', 'info_hebergeur_desactiver_envoi_email' => 'Kèk lebègè ki sispann posibilitè voye kèk limèl otomatikman sou sèvè yo-a. Alò, tout fonksyonalité swivan ke pa mache. ', 'info_hier' => 'yèr :', - 'info_historique_activer' => 'Fè mache posibilité gad kisa te chanje', - 'info_historique_affiche' => 'Fè parèt vèsyon la', - 'info_historique_comparaison' => 'konparezon', - 'info_historique_desactiver' => 'Kraze swivi kisa te chanje', - 'info_historique_texte' => 'Swivi tout chanjman ran w kapab sere yon istorik pou tout bagay ki ap chanje nan kontni yon atik. Li afich kisa ki chanje ant kèk vèsyon sa-yo.', 'info_identification_publique' => 'Ou lidantité piblik...', 'info_image_process' => 'Tanpri chwazi mèyè métod pou lakreyasyon viyèt yo. Pou sa-a mèsi klike sou imaj la ki koresponn.', 'info_image_process2' => 'N.B. Si oken imaj ki parèt, pètèt se sèvè ki ebèj sit ou ki pa konfigire pou itilize outiy sa-yo. Fòk w kontak responsab teknik sèvè an pou domann tout ektansyon «GD» ou «Imagick» sa-yo.', # MODIF @@ -296,8 +245,6 @@ Koulè imaj rannkont stati yo (komandè = vèr; redaktè = jon).', 'info_login_trop_court' => 'Nondkod ki tro piti.', 'info_maximum' => 'maksimom :', 'info_meme_rubrique' => 'Lòt dokiman nan pati sa a nan sit la', - 'info_message' => 'Mesaj nan', - 'info_message_efface' => 'MESAJ KRAZE', 'info_message_en_redaction' => 'Mesaj w yo ki ap ekri ankò', 'info_message_technique' => 'Mesaj tèknik :', 'info_messagerie_interne' => 'Kazmodékri andodan', @@ -310,20 +257,15 @@ pa mache mèm.
    {{Fòk w instal ankò 'info_modifier_rubrique' => 'Chanje ribrik-la :', 'info_modifier_titre' => 'Chanje : @titre@', 'info_mon_site_spip' => 'Sit SPIP a mwen', - 'info_mot_sans_groupe' => '(Mokle ki genyen pa oken gwoup...)', - 'info_moteur_recherche' => 'Motè-rechèche andodan', 'info_moyenne' => 'mwayèn :', - 'info_multi_articles' => 'Eske gen bezwen mèt meni lalanng sou atik yo ?', 'info_multi_cet_article' => 'Lalanng atik la :', 'info_multi_langues_choisies' => 'Mèsi chwazi lang redaktè kapab itilize genyen inposib kraze lang sa-yo ki deja itilize sou sit-la (yo afiche premyé).', - 'info_multi_rubriques' => 'Eske gen bezwen mèt meni lalanng sou ribrik yo ?', 'info_multi_secteurs' => '... sèlman sou ribrik andan rasin sit la ?', 'info_nom' => 'Kouman i rele', 'info_nom_destinataire' => 'Kouman destinatè i rele', 'info_nom_site' => 'Kouman sit la li rele', 'info_nombre_articles' => '@nb_articles@ atik (yo),', - 'info_nombre_partcipants' => 'PATISIPAN TO NAN KOZMAN :', 'info_nombre_rubriques' => '@nb_rubriques@ ribrik (yo),', 'info_nombre_sites' => '@nb_sites@ sit (yo),', 'info_non_deplacer' => 'Mèsi chanje pa laplas-la...', @@ -333,37 +275,27 @@ pa mache mèm.
    {{Fòk w instal ankò 'info_non_modifiable' => 'ki pa posib chanje', 'info_non_suppression_mot_cle' => 'mwen vle pa kraze mokle-a.', 'info_notes' => 'Not yo', - 'info_nouveaux_message' => 'Nouvo mesaj yo', 'info_nouvel_article' => 'Nouvo atik', 'info_nouvelle_traduction' => 'Nouvo tradiksyon :', 'info_numero_article' => 'ATIK NIMEWO :', - 'info_obligatoire_02' => '[Nésèsè]', # MODIF + 'info_obligatoire_02' => ' (Nésèsè)', # MODIF 'info_option_accepter_visiteurs' => 'Asepte vizitè yo enskri y sou sit piblik', - 'info_option_faire_suivre' => 'Voye mesaj yo nan fowom yo pou lotè sa-yo tout atik ki komanté', 'info_option_ne_pas_accepter_visiteurs' => 'Refize lenskripsyon vizitè yo', 'info_options_avancees' => 'KEK OPSYON PWESI ', - 'info_ortho_activer' => 'Fè mache vérifikatè lotograf', - 'info_ortho_desactiver' => 'Suspann vérifikatè lotograf', 'info_ou' => 'ou...', 'info_page_interdite' => 'Paj-la se entèdi', 'info_par_nom' => 'kritè se kouman rele', 'info_par_nombre_article' => '(pa nonm artik yo)', 'info_passe_trop_court' => 'Modpas se tro piti.', 'info_passes_identiques' => 'Ou dè modpas yo se pa parey sa-mèm.', - 'info_pense_bete_ancien' => 'Ou vyé raple-w sa-yo ', # MODIF 'info_plus_cinq_car' => 'plis de 5 kawaktè-leprimri', 'info_plus_cinq_car_2' => '(Plis de 5 kawaktè-lenprimri)', 'info_plus_trois_car' => '(Plis de 3 kawaktè-lenprimri)', 'info_popularite' => 'kouman se popilè : @popularite@ ; vizit yo : @visites@', - 'info_popularite_4' => 'kouman se popilè : @popularite@ ; vizit yo : @visites@', 'info_post_scriptum' => 'Gen di ankò', 'info_post_scriptum_2' => 'Gen di ankò :', 'info_pour' => 'pou', - 'info_preview_admin' => 'Komnadè yo sèlman kapab gad avan sit sa- kom l te an liy', - 'info_preview_comite' => 'Tout redakté kapab gad avan sit-la kom li te an liy', - 'info_preview_desactive' => 'Sistèm pou gad avan kom te an liy tout patisipasyon, l ap pa aktive ', - 'info_preview_texte' => 'Posib gad avan sit-la kom si tout atik ek tinouvèl sa-yo (yon ki lestati « se pwopozé » omwen) te pibliyé an liy. Eske w vle bay posibilite a ouvè pou tout komandè sèlman, oubyen tout rédaktè, ousinon pa okenn moun sa-mèm ?', - 'info_principaux_correspondants' => 'Ou gwoup kowespondan pli enpòtan', + 'info_preview_texte' => 'Posib gad avan sit-la kom si tout atik ek tinouvèl sa-yo (yon ki lestati « se pwopozé » omwen) te pibliyé an liy. Eske w vle bay posibilite a ouvè pou tout komandè sèlman, oubyen tout rédaktè, ousinon pa okenn moun sa-mèm ?', # MODIF 'info_procedez_par_etape' => 'avans etap pa etap', 'info_procedure_maj_version' => 'fòk w koumans larnouvèlman labaz pou adapte labazdone ansamn nouvo vèsyon SPIP.', @@ -380,13 +312,9 @@ Si wi ka aksepte, vizité yo ke enskri azot depi lébèjè ka enpeche lanvwa tout limèl depi zot sèvè : alò, lenskrisyon otomatik ke inposib.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Eske w vle itilize motè pou chèche de SPIP ? - (enlèv ali ke rann sistèm pli rapid ek soup.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Rasin sit-la', 'info_recharger_page' => 'Tapri rochaj paj la nan kèk minit.', - 'info_recherche_auteur_a_affiner' => 'Genyen trò rezilta pou "@cherche_auteur@" ; tanpri souple fè yon nouvo chèche pli prési.', - 'info_recherche_auteur_ok' => 'Kèk redaktè te fin trouve pou "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Okenn rezilta pou « @cherche_auteur@ ».', 'info_recommencer' => 'Mèsi eseye yon lòt fwa.', 'info_redacteur_1' => 'Redaktè', @@ -403,7 +331,6 @@ Si wi ka aksepte, vizité yo ke enskri azot depi 'info_rubriques' => 'Ribrik yo', 'info_rubriques_02' => 'ribrik yo', 'info_rubriques_trouvees' => 'Ribrik yo ki te fin rannkont', - 'info_rubriques_trouvees_dans_texte' => 'Ribrik yo ki te fin rannkont (nan tèks)', 'info_sans_titre' => 'Bagay ki pa rele oken non', 'info_selection_chemin_acces' => 'Chwazi chemen laksé nan laniyè :', 'info_signatures' => 'siyati yo', @@ -416,11 +343,9 @@ Si wi ka aksepte, vizité yo ke enskri azot depi 'info_sites_lies_mot' => 'Sit referanse sa-yo ki jwenn nan lyen ak mokle-a', 'info_sites_proxy' => 'Itilize yon proksi (proxy)', 'info_sites_trouves' => 'Sit sa-yo ki te fin rannkont', - 'info_sites_trouves_dans_texte' => 'Sit sa-yo ki te finn rannkont (nan tèks)', 'info_sous_titre' => 'Soutit :', 'info_statut_administrateur' => 'Komandè', 'info_statut_auteur' => 'Lestati lotè-a :', # MODIF - 'info_statut_efface' => 'Ki te finn kraze', 'info_statut_redacteur' => 'Redaktè', 'info_statut_utilisateurs_1' => 'Lestati otomatik pou zitilizatè enpòte yo', 'info_statut_utilisateurs_2' => 'Chwazi stati ki bay smou préan nan laniyé LDAP, kank moun ka konek azot promyé fwa. Aprésa w kapab chanje valè la pou chak lotè, chaken apré lòt.', @@ -438,7 +363,6 @@ Si wi ka aksepte, vizité yo ke enskri azot depi 'info_tous_articles_en_redaction' => 'Tout atik sa-yo ki ap pou ekri ankò', 'info_tous_articles_presents' => 'Tout atik sa-yo ki pibliye nan ribrik-la', 'info_tous_les' => 'tout :', - 'info_tous_redacteurs' => 'Annons sa-yo pou tout redaktè yo', 'info_tout_site' => 'Tout sit sa-mèm', 'info_tout_site2' => 'Atik-la se pa tradwui nan lalanng la.', 'info_tout_site3' => 'Atik-la li te tradwi nan lang-la, men kèk chanjman te rive sou latik-referans, apré tradiksyon la. Fòk li ke mont nan nivo.', @@ -453,7 +377,6 @@ nan yon koulè ki bay lestati ali :', 'info_une_rubrique' => 'yon ribrik,', 'info_une_rubrique_02' => '1 ribrik', 'info_url' => 'Ladres URL :', - 'info_url_site' => 'URL SIT SA-A :', 'info_urlref' => 'Lyen ipètèks :', 'info_utilisation_spip' => 'Kounyen-a,ou kapab koumanse itilize sistèm pou piblikasyon ki édé...', 'info_visites_par_mois' => 'Fè parèt pa mwa :', @@ -470,15 +393,12 @@ nan yon koulè ki bay lestati ali :', 'item_activer_messages_avertissement' => 'Aktive mesaj-lavertisman ', 'item_administrateur_2' => 'komandè', 'item_afficher_calendrier' => 'Fè parèt nan kalandrye', - 'item_autoriser_documents_joints' => 'Asèpte dokiman jwenn yo nan atik yo', - 'item_autoriser_documents_joints_rubriques' => 'Asèpte dokiman jwenn yo nan ribrik yo', 'item_choix_administrateurs' => 'komandè yo', 'item_choix_generation_miniature' => 'Kreye otomatikman vèsyon miyati (viyèt) pou tout imaj.', 'item_choix_non_generation_miniature' => 'Pa kreye miyati pou limaj.', 'item_choix_redacteurs' => 'redaktè yo', 'item_choix_visiteurs' => 'vizitè yo d sit piblik', 'item_creer_fichiers_authent' => 'Kreye fichye yo .htpasswd', - 'item_limiter_recherche' => 'Sere lachèche nan limit lenfomasyon ki kontni sit a w. ', 'item_login' => 'Nonkod', 'item_mots_cles_association_articles' => 'nan atik yo', 'item_mots_cles_association_rubriques' => 'nan ribrik yo', @@ -487,34 +407,24 @@ nan yon koulè ki bay lestati ali :', 'item_non_accepter_inscriptions' => 'Asèpt pa enskripsyon yo', 'item_non_activer_messages_avertissement' => 'Pa oken mesaj-lavertisman', 'item_non_afficher_calendrier' => 'Refize parèt nan kalandrye', - 'item_non_autoriser_documents_joints' => 'Asèpte pa dokiman jwenn nan atik yo', - 'item_non_autoriser_documents_joints_rubriques' => 'Asèpte pa dokiman jwenn nan ribrik yo', 'item_non_creer_fichiers_authent' => 'Kreye pa fichye sa yo', - 'item_non_gerer_statistiques' => 'Fè pa estatistik', - 'item_non_limiter_recherche' => 'Tann chèche nan kontni sit ki referansé', 'item_non_publier_articles' => 'Pa pibliyé atik sa-yo avan ladat ki présizé.', - 'item_non_utiliser_moteur_recherche' => 'Itilize pa motè-rechèche', 'item_nouvel_auteur' => 'Nouvo lotè', 'item_nouvelle_rubrique' => 'Nouvo ribrik', 'item_oui' => 'Wi', 'item_publier_articles' => 'Fè parèt tout atik kiswa dat piblikasyon ali.', 'item_reponse_article' => 'Repons sou atik sa-a', - 'item_utiliser_moteur_recherche' => 'Itilize motè-rechèche', 'item_visiteur' => 'vizitè', // J 'jour_non_connu_nc' => 'ki pa koni', // L - 'lien_ajout_destinataire' => 'Ajoute destinatè-a', 'lien_ajouter_auteur' => 'Ajoute lotè-a', - 'lien_ajouter_participant' => 'Ajoute yon patisipan', 'lien_email' => 'limèl', 'lien_nom_site' => 'KOUMAN SIT-LA RELE :', 'lien_retirer_auteur' => 'Kraze lotè-a', - 'lien_retrait_particpant' => 'kraze patisipan-nan', 'lien_site' => 'sit', - 'lien_supprimer_rubrique' => 'kraze ribrik-la', 'lien_tout_deplier' => 'Dépliye tout', 'lien_tout_replier' => 'Repliye tout', 'lien_trier_nom' => 'Fé parèt swivan kouman rele', @@ -540,6 +450,9 @@ nan yon koulè ki bay lestati ali :', // O 'onglet_repartition_actuelle' => 'kounye-a', + // R + 'required' => '[Nésèsè]', # MODIF + // S 'statut_admin_restreint' => '(komandè ki limité)', # MODIF @@ -563,15 +476,10 @@ lenstalasyon SPIP pou w kreye yon lòt nouvo baz ak son promyé laksé komandè' 'texte_article_virtuel_reference' => 'Atik virtyèl : se yon atik ki referanse nan sit SPIP aw, men ki touné viré sou yon lòt URL. Pou efase touné-viré an, ann efas w URL isit anlèr.', 'texte_aucun_resultat_auteur' => 'Pa oken rézilta pou "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Sit-la kapab bay w lalis redaktè an liy kounyen-a, bagay-la pèmè w voye mesaj direk ansamn moun. W pe chwazi pa parèt a liy nan lis-la (w kembe « envisib » pou tout zot itilizatè).', - 'texte_auteur_messagerie_1' => 'Sit-la pémè a w voye mesaj fowom pou pale nan kozman privé ant tout patisipan ki soutni nan sit.W pé chwazi pa soutni pale nan kontak-la.', 'texte_auteurs' => 'LOTÈ YO', 'texte_choix_base_1' => 'Ann chwazi labaz ou :', 'texte_choix_base_2' => 'Sèvè SQL-la, li ka kembe kèk bazdoné.', # MODIF 'texte_choix_base_3' => 'Chwazi issit anba labaz ki lébérjè te bay aw:', - 'texte_commande_vider_tables_indexation' => 'Itilize komand-la pou vide tout tabl endeksasyon ki itilizé - nan motè-lachèche ki prézan nan SPIP. Ke permèt aw - kembe lespas diks.', - 'texte_compresse_ou_non' => '(li mèm se petèt konprese, petèt non)', 'texte_compte_element' => '@count@ eleman', 'texte_compte_elements' => '@count@ eleman (yo)', 'texte_connexion_mysql' => 'Gade tout lenfòmasyon lébèjè te bay aw : fòk w rankont tout kod pou koneksyon sou sèvè SQL la, si lébéjè kabab bay yon baz SQL.', # MODIF @@ -587,10 +495,8 @@ lenstalasyon SPIP pou w kreye yon lòt nouvo baz ak son promyé laksé komandè' 'texte_date_publication_anterieure' => 'Ladat redaksyon davan :', 'texte_date_publication_anterieure_nonaffichee' => 'Pa afiche yon dat redaksyon déyè.', 'texte_date_publication_article' => 'LADAT PIBLIKASYON AN LIY :', - 'texte_descriptif_petition' => 'Dékrisyon pétisyon nan', 'texte_descriptif_rapide' => 'Dekrisyon taptap', 'texte_effacer_base' => 'Efase labazdoné SPIP', - 'texte_effacer_donnees_indexation' => 'Efase tout doné pou lendeksasyon', 'texte_en_cours_validation' => 'Atik ak tinouvèl isit anba, zot se pwopoze pou fè parèt. Ezit pa bay lavi aw nan fowom jwen.', # MODIF 'texte_enrichir_mise_a_jour' => 'W kapab rann laspé lapaj pli rich ak « tichemen tipografik ».', 'texte_fichier_authent' => 'Fòk SPIP kreye fichye yo espesyal .htpasswd @@ -607,28 +513,16 @@ lenstalasyon SPIP pou w kreye yon lòt nouvo baz ak son promyé laksé komandè' Se mye fè yon esey avan pou rankout yon manyen adapté pou afich lang-la Si ou chanje lalfabe a ann fé osi bo reglaj nan leskelèt sit w (baliz #CHARSET).', # MODIF - 'texte_jeu_caractere_2' => 'Reglaj-la li pa mache toune ayè. Akoz bagay-la - tout tèks ki enskri avan, ot kap afich mal aprè chanjman-la. - Nepôt bagay-la, se fasil toune deyè sou promye reglaj ou chanje ali ankò.', - 'texte_lien_hypertexte' => '(Si mesaj aw se mesaj ki pale yon atik w rankout deò sou yo lòt sitweb, osnon yon paj ki sere plis enfòmasyon, mèsi bay isit anba kouman li rele ak kilès URL.)', 'texte_login_ldap_1' => '(Kembe vid ali pou yo laksé anonim, osnon ekri w chemen konple pa egsanp « uid=mwen, ou=users, dc=sitamwen, dc=com ».)', 'texte_login_precaution' => 'Atansyon ! bagay-la se nonkod koumon w rele kounyen-a. Ann itilize fòmilè-a ek swen...', - 'texte_message_edit' => 'Atansyon : tout komandè sit sa-a kapab chnaje mesaj-la ak tout redaktè kapab li ali. Mèsi itilize mesaj anons komsa sélman pou soutni yon evenman enpòtan nan vi sit-la.', 'texte_mise_a_niveau_base_1' => 'W te fini renouvèle tout fichye SPIP. Fòk kembe nan nivo labazdoné pou sit-la.', 'texte_modifier_article' => 'Chanje atik-la :', - 'texte_moteur_recherche_active' => 'Motè-lachèche ki aktive. Itilize w komand-la pou fè ankò yon endeksayon - le (aprè w te fin restore - yon sòvgad pa egsanp). Tout dokiman ki te chanje - nòmalman (depi lentèfas SPIP) se endeksé - otomatikman : komand-la selman itil nan tan ésepsyonel.', - 'texte_moteur_recherche_non_active' => 'Motè-lachèche ki pa aktive.', 'texte_multilinguisme' => 'Si w vle itilize atik yo sous sit-la nan diferan lang, ak yon navigasyon konplèks, w kapab ajoute yon meni-dewoulè pou chwazi lalang tout atik ak ribrik yo, selon kouman w te òganize sit aw.', # MODIF 'texte_multilinguisme_trad' => 'Ou kap mèt yon sistèm pou okipe kèk lyen ant plizyè tradiksyon yon mèm atik.', # MODIF 'texte_non_compresse' => 'ki pa konprese (sèvè w ki pa soutni nan fonksyon la)', - 'texte_nouveau_message' => 'Nouvo mesaj', 'texte_nouvelle_version_spip_1' => 'W te enstalé yon nouvo vésyon SPIP.', 'texte_nouvelle_version_spip_2' => 'Fòk w fè yon arnouvèlman pli konple pou monte nivo nouvo vèsyon an. Si w se webmèt sit-la, mèsi efase fichye-a inc_connect.php3 nan repetwar ecrire ak ropran lenstalasyon pou mèt paramèt koneksyon sou bazdone nan nivo.

    (Gad. : si w te oubliye paramèt koneksyon aw, gad fichye inc_connect.php3 avan efase ali...)

    ', # MODIF 'texte_operation_echec' => 'Mèsi tounyen deyè sou paj davan, chwazi yon lòt baz osnon kreye w yon nouvo baz. Gad byin tout lenfòmasyon lébjèje w te bay aw.', @@ -646,7 +540,6 @@ w ke sere chan-la vid. ', # MODIF 'texte_rappel_selection_champs' => '[Oubliy pa w chwazi chan la korekman.]', 'texte_recalcul_page' => 'Si w vle kalkil ankò yon sel paj selman, itilize plito lespas piblik ak bouton « Kalkil ankò ».', - 'texte_recapitiule_liste_documents' => 'Paj-la ka rankont tout dokiman w teplase nan ribrik yo. Si w vle chanje tout lenfòmasyon chak dokiman, mèsi swiv lyanaj sou paj ribrik azot.', 'texte_recuperer_base' => 'Aranje bazdoné la', 'texte_reference_mais_redirige' => 'atik ki referanse nan sit SPIP aou, men ki viré direksyon sou yon lot URL.', 'texte_requetes_echouent' => 'kank kèk rekèt SQL ki pa mache @@ -672,7 +565,6 @@ Bagay-la pémè, pa egsanp, fòse rekalkil tout paj sa-yo, apré plizyè gro cha ', 'texte_sur_titre' => 'Sir-tit', 'texte_table_ok' => ': tab-la se bon.', - 'texte_tables_indexation_vides' => 'Tab pou indeksayon motè se vid.', 'texte_tentative_recuperation' => 'Esey aranjé', 'texte_tenter_reparation' => 'Esèy yon aranjman labazdoné', 'texte_test_proxy' => 'Pou eseye pwoksi-a (proxy), ann enskri isit ladrès yon sit web @@ -686,26 +578,9 @@ Bagay-la pémè, pa egsanp, fòse rekalkil tout paj sa-yo, apré plizyè gro cha nan tan résan pou evite chanjman ki kraze lòt. W kapab mèt opsyon-nan ki sispann otomatikman pou evite fè parèt toultan mesaj yo pou atansyon. -', - 'texte_trop_resultats_auteurs' => 'Genyen tro rezilta pou "@cherche_auteur@" ; mèsi présiz chèche w-a.', - 'texte_unpack' => 'téléchajman dènyè vèsyon', - 'texte_utilisation_moteur_syndiques' => 'Kan w itilize motè-rechèche andodan SPIP, w kapab chèche - sou sit ak atik sendiké yo nan dé manyè diféran. -
    Pli senp se chèche sèlman kouman atik yo rele (tit yo) -ou nan dékripsyon atik sa-yo -
    - Dèzyèm métod, pli pwisan, se fè - SPIP chèche ositou nan tèks tout sit referansé yo. - Si w ka referanse yon sit - SPIP ka chèche nan tèks sit li mème sa-a. - .', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Mètod la li domann SPIP vizite - souvan tout sit referanse, - li kap diminye vitès sit a w. ', 'texte_vide' => 'vid', 'texte_vider_cache' => 'Vide kach-la', - 'titre_admin_effacer' => 'Swen teknik', 'titre_admin_tech' => 'Swen teknik', 'titre_admin_vider' => 'Swen teknik', 'titre_cadre_afficher_article' => 'Fè parèt atik yo', @@ -725,35 +600,20 @@ ou nan dékripsyon atik sa-yo 'titre_naviguer_dans_le_site' => 'Fè yon vire sou sit-la...', 'titre_nouvelle_rubrique' => 'Nouvo ribrik', 'titre_numero_rubrique' => 'RIBRIK NIMEWO :', - 'titre_page_admin_effacer' => 'Swen teknik : kraze labaz', 'titre_page_articles_edit' => 'Chanje: @titre@', 'titre_page_articles_page' => 'Atik yo', 'titre_page_articles_tous' => 'Tout sit sa-mèm', - 'titre_page_auteurs' => 'Vizitè yo', 'titre_page_calendrier' => 'Kalandriye @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Konfigire sit-la', - 'titre_page_config_fonctions' => 'Konfigire sit-la', - 'titre_page_configuration' => 'Konfigire sit-la', - 'titre_page_controle_petition' => 'Swivi petisyon yo', 'titre_page_delete_all' => 'krazman konple ke pa posib pou anile', - 'titre_page_documents_liste' => 'Dokiman yo nan ribrik ', - 'titre_page_index' => 'Espas prive a w', - 'titre_page_message_edit' => 'Ekri yon mesaj', - 'titre_page_messagerie' => 'Ou kazmodekri ', 'titre_page_recherche' => 'Rezilta chèche @recherche@', 'titre_page_statistiques_referers' => 'Rézilta estatistik (lyen sa-yo ka rive)', 'titre_page_upgrade' => 'Mèt SPIP nan nivle', 'titre_publication_articles_post_dates' => 'Piblikasyon tout atik yo posdate', - 'titre_referencer_site' => 'Referanse sit la :', - 'titre_rendez_vous' => 'PWOPOZE YON RANKONT :', 'titre_reparation' => 'Reparasyon', 'titre_suivi_petition' => 'Swiv tout petisyon yo', - 'trad_article_inexistant' => 'Okenn atik gen pa nimewo-a.', 'trad_article_traduction' => 'Tout versyon pou atik la :', - 'trad_deja_traduit' => 'Atik sa a se deja tradiksyon pou prezan atik la.', # MODIF 'trad_delier' => 'Retire lyen ansanm atik la ak tout tradidksyon', # MODIF 'trad_lier' => 'Atik la se tradiksyon atik nimewo :', 'trad_new' => 'Ekri tradiksyon ankò pou atik la' # MODIF ); - -?> diff --git a/www/ecrire/lang/ecrire_cs.php b/www/ecrire/lang/ecrire_cs.php index 3f15b44a..020e6860 100644 --- a/www/ecrire/lang/ecrire_cs.php +++ b/www/ecrire/lang/ecrire_cs.php @@ -1,9 +1,11 @@ 'Vraťte se na předchozí stránku a zkontrolujte zadané údaje.', 'avis_connexion_ldap_echec_3' => 'Případně při importu uživatelů nepoužívejte podporu LDAP.', 'avis_deplacement_rubrique' => 'Upozornění! V této sekci je celkem @contient_breves@ vložených novinek: potvrďte jejich přesun zaškrtnutím tohoto políčka.', - 'avis_destinataire_obligatoire' => 'Před odesláním zprávy musíte vybrat adresáta.', 'avis_erreur_connexion_mysql' => 'Chyba připojení SQL', # MODIF - 'avis_erreur_version_archive' => 'Varování! Soubor @archive@ odpovídá jiné verzi - systému SPIP, než je ta, kterou máte - nainstalovánu. Důsledkem mohou být tyto vážné - potíže: zničení databáze, - nefunkčnost různých částí webu atd. Neodesílejte - tento požadavek na import.

    Bližší informace - viz dokumentace systému SPIP .', # MODIF 'avis_espace_interdit' => 'Zakázaná oblast

    Systém SPIP je již nainstalován.', # MODIF 'avis_lecture_noms_bases_1' => 'Instalační program nemůže přečíst názvy nainstalovaných databází.', 'avis_lecture_noms_bases_2' => 'Buď není dostupná žádná databáze nebo bylo zveřejňování seznamu databází z bepečnostních důvodů vypnuto (to je případ mnoha hostitelů).', 'avis_lecture_noms_bases_3' => 'V takovém případě je možné, že bude možno používat databázi, která má stejný název jako je vaše uživatelské jméno:', - 'avis_non_acces_message' => 'K této zprávě nemáte přístup.', 'avis_non_acces_page' => 'K této stránce nemáte přístup.', 'avis_operation_echec' => 'Došlo k selhání operace.', - 'avis_probleme_archive' => 'Chyba při čtení ze souboru @archive@', 'avis_suppression_base' => 'VAROVÁNÍ! Odstranění dat je nevratné', - 'avis_version_mysql' => 'Ve vaší verzi databáze SQL (@version_mysql@) nelze automaticky opravovat databázové tabulky.', # MODIF // B 'bouton_acces_ldap' => 'Přidat přístup k LDAP >>', # MODIF 'bouton_ajouter' => 'Přidat', - 'bouton_ajouter_participant' => 'PŘIDAT ÚČASTNÍKA:', - 'bouton_annonce' => 'OZNÁMENÍ', - 'bouton_checkbox_envoi_message' => 'možnost odeslat zprávu', - 'bouton_checkbox_indiquer_site' => 'Musíte zadat název webu', - 'bouton_checkbox_signature_unique_email' => 'pouze jeden podpis na jednu elektronickou adresu', - 'bouton_checkbox_signature_unique_site' => 'pouze jeden podpis na jeden web', 'bouton_demande_publication' => 'Požádat o zveřejnění článku', 'bouton_desactive_tout' => 'Vše vypnout', - 'bouton_effacer_index' => 'Odstranit indexování', 'bouton_effacer_tout' => 'Odstranit vše', - 'bouton_envoi_message_02' => 'ODESLAT ZPRÁVU', 'bouton_envoyer_message' => 'Konečná zpráva: odeslat', 'bouton_modifier' => 'Změnit', - 'bouton_pense_bete' => 'INTERNÍ POZNÁMKA', - 'bouton_radio_activer_messagerie' => 'Zapnout interní systém zpráv', - 'bouton_radio_activer_messagerie_interne' => 'Zapnout interní systém zpráv', - 'bouton_radio_activer_petition' => 'Zapnout petici', 'bouton_radio_afficher' => 'Zobrazit', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Zobrazit v seznamu připojených redaktorů', - 'bouton_radio_desactiver_messagerie' => 'Vypnout systém zpráv', 'bouton_radio_envoi_annonces_adresse' => 'Odesílat oznámení na adresu:', 'bouton_radio_envoi_liste_nouveautes' => 'Zasílat seznam novinek', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Nezobrazovat v seznamu redaktorů', 'bouton_radio_non_envoi_annonces_editoriales' => 'Nezasílat redaktorská oznámení', - 'bouton_radio_pas_petition' => 'Bez petice', - 'bouton_radio_petition_activee' => 'Petice zapnuta', - 'bouton_radio_supprimer_petition' => 'Odstranit petici', 'bouton_redirection' => 'PŘESMĚROVÁNÍ', 'bouton_relancer_installation' => 'Znovu spustit instalaci', 'bouton_suivant' => 'Další', 'bouton_tenter_recuperation' => 'Zkusit opravu', 'bouton_test_proxy' => 'Zkusit proxy', 'bouton_vider_cache' => 'Vyprázdnit cache', - 'bouton_voir_message' => 'Zobrazit zprávu před odesláním', // C - 'cache_mode_compresse' => 'Soubory cache jsou uloženy komprimovaně.', - 'cache_mode_non_compresse' => 'Soubory cache jsou uloženy nekomprimovaně.', 'cache_modifiable_webmestre' => 'Tento parametr může měnit správce webu.', 'calendrier_synchro' => 'Používáte-li kompatibilní kalendář iCal, můžete jej synchnizovat s údaji na tomto webu.', @@ -112,7 +84,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Vaše přihlašovací údaje', 'entree_login_connexion_1' => 'Přihlašovací údaje pro připojení', 'entree_login_connexion_2' => '(Někdy odpovídá vašim přihlašovacím údajům k FTP, někdy zůstávají nevyplněné)', - 'entree_login_ldap' => 'Původní příhlašovací údaje k LDAP', 'entree_mot_passe' => 'Vaše heslo', 'entree_mot_passe_1' => 'Heslo pro připojení', 'entree_mot_passe_2' => '(Někdy odpovídá vašemu heslu k FTP, někdy zůstává prázdné)', @@ -139,7 +110,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'Bližší informace naleznete v dokumentaci k systému SPIP.', # MODIF 'ical_info_calendrier' => 'Máte k dispozici dva kalendáře. První obsahuje seznam webů s uvedením všech publikovaných článků. Druhý obsahuje redaktorská oznámení a vaše poslední soukromá sdělení: k němu máte přístup pomocí osobního klíče. Tento klíč můžete kdykoli změnit obnovením svého hesla.', 'ical_methode_http' => 'Odeslání / stažení', - 'ical_methode_webcal' => 'Synchronizace (webcal://)', + 'ical_methode_webcal' => 'Synchronizace (webcal://)', # MODIF 'ical_texte_js' => 'Jeden příkaz JavaScriptu jednoduše umožní na všech vašich webech zobrazit nejnovější články z tohoto webu.', 'ical_texte_prive' => 'Tento kalendář je určen výhradně k vašemu osobnímu použití a informuje vás o soukromé činnosti redaktorů tohoto webu (osobní úkoly a schůzky, navrhované články a novinky ...).', 'ical_texte_public' => 'Tento kalendář vám umožní sledovat aktivitu veřejné části webu (publikované články a novinky).', @@ -156,9 +127,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_creer_auteur' => 'Vytvořit nového autora a spojit ho s tímto článkem', 'icone_creer_mot_cle' => 'Zadejte nové klíčové slovo a spojte jej s tímto článkem', 'icone_creer_rubrique_2' => 'Vytvořit novou sekci', - 'icone_envoyer_message' => 'Odeslat zprávu', 'icone_modifier_article' => 'Změnit článek', - 'icone_modifier_message' => 'Změnit zprávu', 'icone_modifier_rubrique' => 'Změnit sekci', 'icone_retour' => 'Zpět', 'icone_retour_article' => 'Zpět k článku', @@ -168,11 +137,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'Potvrdit podpis', 'image_administrer_rubrique' => 'Máte právo správy této sekce', 'info_1_article' => '1 článek', - 'info_1_site' => '1 web', 'info_activer_cookie' => 'Můžete nastavit administrátorské cookie, které vám dovolí snadno přecházet mezi prohlížením webu a jeho editací.', - 'info_admin_gere_rubriques' => 'Tento správce ospovídá za následující sekce:', - 'info_admin_gere_toutes_rubriques' => 'Tento správce odpovídá ua všechny sekce.', # MODIF 'info_administrateur' => 'Správce', 'info_administrateur_1' => 'Správce', 'info_administrateur_2' => 'webu (používat opatrně)', @@ -182,16 +148,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'Máte právo správy této sekce', 'info_adresse' => 'na adrese:', 'info_adresse_url' => 'Adresa URL veřejného webu', - 'info_afficher_visites' => 'Zobrazit návštěvy:', 'info_aide_en_ligne' => 'Nápověda online systému SPIP', 'info_ajout_image' => 'Přikládáte-li k článku obrázky jako dokumenty, systém SPIP umí automaticky vytvořit jejich náhledy (miniatury vložených obrázků). To umožňuje automaticky vytvořit např. galerii nebo přehled.', - 'info_ajout_participant' => 'Bude přidán tento účastník:', 'info_ajouter_rubrique' => 'Přidat další sekci do správy:', 'info_annonce_nouveautes' => 'Oznámení novinek', - 'info_anterieur' => 'předchozí', 'info_article' => 'článek', 'info_article_2' => 'články', 'info_article_a_paraitre' => 'Články čekající na termín publikování', @@ -199,10 +162,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_2' => 'Články', 'info_articles_auteur' => 'Články tohoto autora', 'info_articles_trouves' => 'Nalezené články', - 'info_articles_trouves_dans_texte' => 'Nalezené články (v textu)', 'info_attente_validation' => 'Vaše články čekající na schválení', 'info_aujourdhui' => 'dnes:', - 'info_auteur_message' => 'AUTOR ZPRÁVY:', 'info_auteurs' => 'Autoři', 'info_auteurs_par_tri' => 'Autoři@partri@', 'info_auteurs_trouves' => 'Nalezení autoři', @@ -218,7 +179,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_1' => 'z @liste@', 'info_classement_2' => 'e z @liste@', 'info_code_acces' => 'Nezapomeňte své přístupové kódy!', - 'info_compresseur_gzip' => 'It is advisable to first check if the service provider systematically compresses PHP scripts. To do this you can, for example, use the following service: @testgzip@', # MODIF 'info_config_suivi' => 'Jedná-li se o adresu diskusní skupiny, můžete zde uvést adresu, na které se mohou účastníci webu přihlásit. Může se jednat o adresu URL (například webová stránka pro přihlášení do skupiny) nebo o elektronickou adresu s uvedením specifického předmětu (např.: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Můžete se přihlásit na mailing-list tohoto webu. Potom budete dostávat oznámení o článcích a novinkách připravených k publikování.', 'info_confirmer_passe' => 'Potvrdit nové heslo:', @@ -236,15 +196,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Datum poslední úpravy:', 'info_date_referencement' => 'Datum vytvoření odkazu na tento web:', 'info_derniere_etape' => 'Poslední krok: byl dokončen!', # MODIF - 'info_derniers_articles_publies' => 'Vaše poslední publikované články.', - 'info_desactiver_messagerie_personnelle' => 'U tohoto webu můžete zapnout nebo vypnout systém interních zpráv.', 'info_descriptif' => 'Popis:', 'info_discussion_cours' => 'Probíhající diskuse', 'info_ecrire_article' => 'Články můžete psát teprve, když vytvoříte alespoň jednu sekci.', 'info_email_envoi' => 'Email pro zprávy (volitelný údaj)', 'info_email_envoi_txt' => 'Zde uveďte adresu pro zasílání emailů (standardně se jako tato adresa použije email příjemce):', 'info_email_webmestre' => 'Email správce webu (volitelný údaj)', # MODIF - 'info_entrer_code_alphabet' => 'Zadejte kód znakové sady, která se má používat:', 'info_envoi_email_automatique' => 'Automatické zasílání emailů', 'info_envoyer_maintenant' => 'Odeslat nyní', 'info_etape_suivante' => 'Přejít k dalšímu kroku', @@ -257,7 +214,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( na webu. ', 'info_fichiers_authent' => 'Autentifikační soubor ".htpasswd"', 'info_forums_abo_invites' => 'Na vašem webu existují diskusní skupiny vyhrazené přihlášeným účastníkům; návštěvníci se musí tedy zaregistrovat na veřejné části webu.', - 'info_gauche_admin_effacer' => 'Tato stránka je přístupná pouze těm, kdo za web odpovídají.

    Umožňuje přístup k funkcím určeným pro technickou údržbu. Některé z nich spouští autentifikaci, jež vyžaduje FTP přístup k webu.

    ', # MODIF 'info_gauche_admin_tech' => 'Tato stránka je vyhrazena těm, kdo za web odpovídají.

    Umožňuje přístup k funkcím pro technickou údržbu. Některé z nich spouští autentifikaci, jež vyžaduje FTP přístup k webu.

    ', # MODIF 'info_gauche_admin_vider' => 'Tato stránka je vyhrazena těm, kdo za web odpovídají.

    Umožňuje přístup k funkcím @@ -267,21 +223,14 @@ pro technickou údržbu. Některé z nich spouští autentifikaci, jež vyžaduj 'info_gauche_auteurs_exterieurs' => 'Externí autoři bez přístupu k webu jsou označeni modrou ikonou; odstranění autoři symbolem odpadkového koše.', # MODIF 'info_gauche_messagerie' => 'Systém zpráv umožňuje zasílat zprávy mezi redaktory, ukládat interní poznámky a zveřejňovat oznámení na hlavní stánce interní části webu (jste-li správce).', - 'info_gauche_numero_auteur' => 'ČÍSLO AUTORA', 'info_gauche_statistiques_referers' => 'Na této stránce je seznam referencí, to je webů, ze kterých vede odkaz na váš vlastní web. Údaje jsou pouze za včerejšek a dnešek. Seznam se každých 24 hodin vynuluje.', 'info_gauche_visiteurs_enregistres' => 'Zde naleznete návštěvníky zaregistrované ve veřejné části webu (diskusní skupiny, do kterých je nutno se přihlásit).', 'info_generation_miniatures_images' => 'Generování náhledů', - 'info_gerer_trad' => 'Správa odkazů na překlad?', 'info_hebergeur_desactiver_envoi_email' => 'Někteří poskytovatelé prostoru pro web (hostitelé) mají vypnuté automatické zasílání emailů ze svých serverů. Níže uvedené funkce systému SPIP pak nelze používat.', 'info_hier' => 'včera:', - 'info_historique_activer' => 'Zapnout sledování revizí', - 'info_historique_affiche' => 'Zobrazit tuto verzi', - 'info_historique_comparaison' => 'porovnání', - 'info_historique_desactiver' => 'Vypnout sledování revizí', - 'info_historique_texte' => 'Sledování revizí umožňuje zachovat historii všech změn obsahu článku a zobrazit změny mezi jeho jednotlivými verzemi.', 'info_identification_publique' => 'Vaše veřejná identita...', 'info_image_process' => 'Nejlepší metodu tvorby náhledů zvolíte klepnutím na příslušný obrázek.', 'info_image_process2' => 'Pozn.: Neobjeví-li se žádný obrázek, není hostitelský server vašeho webu nastaven k používání těchto nástrojů. Chcete-li je používat, spojete se s příslušnou technickou podporou a požádejte o rozšíření "GD" nebo "Imagick".', # MODIF @@ -299,8 +248,6 @@ pro technickou údržbu. Některé z nich spouští autentifikaci, jež vyžaduj 'info_login_trop_court' => 'Uživatelské jeméno je příliš krátké.', 'info_maximum' => 'maximum:', 'info_meme_rubrique' => 'Ve stejné sekci', - 'info_message' => 'Zpráva z', - 'info_message_efface' => 'ZPRÁVA BYLA ODSTRANĚNA', 'info_message_en_redaction' => 'Baše rozpracované zprávy', 'info_message_technique' => 'Technická zpráva:', 'info_messagerie_interne' => 'Interní systém zpráv', @@ -313,20 +260,15 @@ pro technickou údržbu. Některé z nich spouští autentifikaci, jež vyžaduj 'info_modifier_rubrique' => 'Změnit sekci:', 'info_modifier_titre' => 'Změnit: @titre@', 'info_mon_site_spip' => 'Můj web SPIP', - 'info_mot_sans_groupe' => '(Slova mimo skupinu...)', - 'info_moteur_recherche' => 'Vestavěný vyhledávač', 'info_moyenne' => 'střed / průměr:', - 'info_multi_articles' => 'Zapnout u článků nabídku jazyků?', 'info_multi_cet_article' => 'Jazyk článku:', 'info_multi_langues_choisies' => 'Dále zvolte jazyk, který bude k dispozici redaktorům tohoto webu. Jazyky, které se již v rámci webu používají (zobrazené na počátku), nelze vypnout.', - 'info_multi_rubriques' => 'Zapnout nabídku nazyků v sekcích?', 'info_multi_secteurs' => '... pouze u sekcí v kořenovém adresáři?', 'info_nom' => 'Jméno', 'info_nom_destinataire' => 'Jméno příjemce', 'info_nom_site' => 'Název webu', 'info_nombre_articles' => '@nb_articles@ články,', - 'info_nombre_partcipants' => 'ÚČASTNÍCI DISKUSE:', 'info_nombre_rubriques' => '@nb_rubriques@ sekce,', 'info_nombre_sites' => '@nb_sites@ weby,', 'info_non_deplacer' => 'Nepřesouvat...', @@ -335,17 +277,13 @@ pro technickou údržbu. Některé z nich spouští autentifikaci, jež vyžaduj 'info_non_modifiable' => 'nelze změnit', 'info_non_suppression_mot_cle' => 'nechci odstanit toto klíčové slovo.', 'info_notes' => 'Poznámky', - 'info_nouveaux_message' => 'Nové zprávy', 'info_nouvel_article' => 'Nový článek', 'info_nouvelle_traduction' => 'Nový překlad:', 'info_numero_article' => 'ČLÁNEK Č.:', 'info_obligatoire_02' => '[povinný údaj]', # MODIF 'info_option_accepter_visiteurs' => 'Schválit přihlášení návštěvníků veřejného webu', - 'info_option_faire_suivre' => 'Sledovat zprávy z diskusní skupiny autory článků', 'info_option_ne_pas_accepter_visiteurs' => 'Odmítnout přihlášky návštěvníků', 'info_options_avancees' => 'ROZŠÍŘENÉ MOŽNOSTI', - 'info_ortho_activer' => 'Zapnout kontrolu překlepů', - 'info_ortho_desactiver' => 'Vypnout kontrolu překlepů', 'info_ou' => 'nebo...', 'info_page_interdite' => 'Zakázaná stránka', 'info_par_nom' => 'podle jména', @@ -354,20 +292,14 @@ pro technickou údržbu. Některé z nich spouští autentifikaci, jež vyžaduj 'info_par_tri' => '’(podle @tri@)’', 'info_passe_trop_court' => 'Heslo je příliš krátké.', 'info_passes_identiques' => 'Zadaná hesla nesouhlasí.', - 'info_pense_bete_ancien' => 'Staré interní poznámky', # MODIF 'info_plus_cinq_car' => 'vice než 5 znaků', 'info_plus_cinq_car_2' => '(Více než 5 znaků)', 'info_plus_trois_car' => '(více než 3 znaky)', 'info_popularite' => 'oblíbenost: @popularite@; návštěvy: @visites@', - 'info_popularite_4' => 'oblíbenost: @popularite@; návštěvy: @visites@', 'info_post_scriptum' => 'P.S.', 'info_post_scriptum_2' => 'P.S.:', 'info_pour' => 'pro', - 'info_preview_admin' => 'Náhled webu je přístupný pouze pro správce ', - 'info_preview_comite' => 'Náhled webu je přístupný všem redaktorům', - 'info_preview_desactive' => 'Náhledy jsou zcela vypnuty', - 'info_preview_texte' => 'Náhled umožňuje zobrazit web tak, jakoby všechny články a novinky (minimálně ve stavu "předloženo") byly zveřejněny. Chcete náhled povolit jen správcům, všem redaktorům nebo jej nechcete povolit nikomu?', - 'info_principaux_correspondants' => 'Vaši hlavní korespondenti', + 'info_preview_texte' => 'Náhled umožňuje zobrazit web tak, jakoby všechny články a novinky (minimálně ve stavu "předloženo") byly zveřejněny. Chcete náhled povolit jen správcům, všem redaktorům nebo jej nechcete povolit nikomu?', # MODIF 'info_procedez_par_etape' => 'postupujte krok za krokem', 'info_procedure_maj_version' => 'pro úpravu nové verze systému SPIP je třeba spustit aktualizaci databáze.', @@ -384,13 +316,9 @@ pro technickou údržbu. Některé z nich spouští autentifikaci, jež vyžaduj Někteří poskytovatelé prostoru pro web odesílání emailů ze svých serverů vypínají. Automatické přihlášení je v takovém případě nemožné.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Chcete používat vyhledávač, který je součástí systému SPIP? - (je-li vyhledávač vypnut, zrychluje to chod systému.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Kořenový adresář webu', 'info_recharger_page' => 'Za okamžik zkuste stránku znovu nahrát.', - 'info_recherche_auteur_a_affiner' => 'Pro "@cherche_auteur@" bylo nalezeno příliš mnoho výsledků. Upřesněte vyhledávací kritéria.', - 'info_recherche_auteur_ok' => 'Pro "@cherche_auteur@" bylo nalezeno více redaktorů:', 'info_recherche_auteur_zero' => 'Pro "@cherche_auteur@" nebyly nalezeny žádné výsledky.', 'info_recommencer' => 'Začněte znovu.', 'info_redacteur_1' => 'Redaktor', @@ -407,7 +335,6 @@ pro technickou údržbu. Některé z nich spouští autentifikaci, jež vyžaduj 'info_rubriques' => 'Sekce', 'info_rubriques_02' => 'sekce', 'info_rubriques_trouvees' => 'Nalezené sekce', - 'info_rubriques_trouvees_dans_texte' => 'Nalezené sekce(v textu)', 'info_sans_titre' => 'Bez názvu', 'info_selection_chemin_acces' => 'Zadejte cestu k adresáři:', 'info_signatures' => 'podpisy', @@ -420,13 +347,11 @@ pro technickou údržbu. Některé z nich spouští autentifikaci, jež vyžaduj 'info_sites_lies_mot' => 'Weby, na něž vedou odkazy, a které jsou spojeny s tímto klíčovým slovem', 'info_sites_proxy' => 'Používat proxy', 'info_sites_trouves' => 'Nalezené weby', - 'info_sites_trouves_dans_texte' => 'Nalezené weby (v textu)', 'info_sous_titre' => 'Dílčí nadpis:', 'info_statut_administrateur' => 'Správce', 'info_statut_auteur' => 'Statut autora:', # MODIF 'info_statut_auteur_a_confirmer' => 'Registrace k potvrzení', 'info_statut_auteur_autre' => 'Další status:', - 'info_statut_efface' => 'Odstraněno', 'info_statut_redacteur' => 'Redaktor', 'info_statut_utilisateurs_1' => 'Standardní statut importovaných uživatelů', 'info_statut_utilisateurs_2' => 'Zadejte statut, který mají osoby uvedené v adresáři LDAP, když se poprvé připojí. Tuto hodnotu můžete u každého jednotlivého autora následně změnit.', @@ -446,7 +371,6 @@ pro technickou údržbu. Některé z nich spouští autentifikaci, jež vyžaduj 'info_tous_articles_en_redaction' => 'Všechny rozpracované články', 'info_tous_articles_presents' => 'Všechny články publikované v této rubrice.', 'info_tous_les' => 'všechny:', - 'info_tous_redacteurs' => 'Zpráva pro všechny redaktory', 'info_tout_site' => 'Celý web', 'info_tout_site2' => 'Do tohoto jazyka nebyl článek přeložen.', 'info_tout_site3' => 'Článek byl do tohoto jazyka přeložen, ale referenční článek byl následně změněn. Překlad je proto třeba aktualizovat.', @@ -461,7 +385,6 @@ ukazuje jejich stav:', 'info_une_rubrique' => 'jedna sekce, ', 'info_une_rubrique_02' => '1 sekce', 'info_url' => 'URL:', - 'info_url_site' => 'URL WEBU:', 'info_urlref' => 'Hypertextový odkaz:', 'info_utilisation_spip' => 'Nyní můžete začít používat redakční systém...', 'info_visites_par_mois' => 'Zobrazení po měsících:', @@ -478,8 +401,6 @@ ukazuje jejich stav:', 'item_activer_messages_avertissement' => 'Zapnout upozornění', 'item_administrateur_2' => 'správce', 'item_afficher_calendrier' => 'Zobrazit v kalendáři', - 'item_autoriser_documents_joints' => 'Povolit dokumenty přiložené k článku', - 'item_autoriser_documents_joints_rubriques' => 'Povolit dokumenty v sekcích', 'item_autoriser_syndication_integrale' => 'Vložit kompletní články do syndikačních souborů', 'item_choix_administrateurs' => 'administrátoři', 'item_choix_generation_miniature' => 'Automaticky generovat náhledy obrázků.', @@ -487,7 +408,6 @@ ukazuje jejich stav:', 'item_choix_redacteurs' => 'redaktoři', 'item_choix_visiteurs' => 'návštěvníci veřejného webu', 'item_creer_fichiers_authent' => 'Vytvořit soubory .htpasswd', - 'item_limiter_recherche' => 'Omezit vyhledávání na údaje obsažené na vašem webu', 'item_login' => 'Uživatelské jméno', 'item_mots_cles_association_articles' => 'k článkům,', 'item_mots_cles_association_rubriques' => 'k sekcím', @@ -496,35 +416,25 @@ ukazuje jejich stav:', 'item_non_accepter_inscriptions' => 'Odmítnout přihlášky', 'item_non_activer_messages_avertissement' => 'Bez upozornění', 'item_non_afficher_calendrier' => 'Nezobrazovat v kalendáři', - 'item_non_autoriser_documents_joints' => 'Nepovolit dokumenty v článcích', - 'item_non_autoriser_documents_joints_rubriques' => 'Nepovolit dokumenty v sekcích', 'item_non_autoriser_syndication_integrale' => 'Poslat pouze shrnutí', 'item_non_creer_fichiers_authent' => 'Nevytvářet tyto soubory', - 'item_non_gerer_statistiques' => 'Bez správy statistik', - 'item_non_limiter_recherche' => 'Rozšířit hledání na obsah webů, na něž vedou odkazy', 'item_non_publier_articles' => 'Nezveřejňovat články před stanoveným datem.', - 'item_non_utiliser_moteur_recherche' => 'Nepoužívat vyhledávač', 'item_nouvel_auteur' => 'Nový autor', 'item_nouvelle_rubrique' => 'Nová sekce', 'item_oui' => 'Ano', 'item_publier_articles' => 'Zveřejnit články bez ohledu na datum.', 'item_reponse_article' => 'Odpověď na článek', - 'item_utiliser_moteur_recherche' => 'Používat vyhledávač', 'item_visiteur' => 'návštěvník', // J 'jour_non_connu_nc' => 'neuvedeno', // L - 'lien_ajout_destinataire' => 'Přidat příjemce', 'lien_ajouter_auteur' => 'Přidat autora', - 'lien_ajouter_participant' => 'Přidat účastníka', 'lien_email' => 'email', 'lien_nom_site' => 'NÁZEV WEBU:', 'lien_retirer_auteur' => 'Odstanit autora', - 'lien_retrait_particpant' => 'odstranit účastníka', 'lien_site' => 'web', - 'lien_supprimer_rubrique' => 'zrušit sekci', 'lien_tout_deplier' => 'Rozbalit vše', 'lien_tout_replier' => 'Sbalit vše', 'lien_trier_nom' => 'Třídit podle jména', @@ -559,6 +469,7 @@ ukazuje jejich stav:', // R 'repertoire_plugins' => 'Adresář:', + 'required' => '[povinný údaj]', # MODIF // S 'statut_admin_restreint' => '(admin - vyhrazeno)', # MODIF @@ -583,15 +494,10 @@ systém SPIP, abyste vytvořili novou databázi a první přístup pro správce. 'texte_article_virtuel_reference' => 'Virtuální článek: znamená článek, na nějž je na vašem webu SPIP odkaz. Ten je však přesměrován na jinou adresu URL. Chcete-li přesměrování zrušit, odstraňte níže uvedenou adresu URL.', 'texte_aucun_resultat_auteur' => 'Vyhledávání"@cherche_auteur@" nepřineslo žádné výsledky', 'texte_auteur_messagerie' => 'Na tomto webu lze mít neustále zobrazený seznam připojených redaktorů. To umožňuje přímou výměnu zpráv. Na uvedeném seznamu nemusíte figurovat (pro ostatní uživatele jste "neviditelní").', - 'texte_auteur_messagerie_1' => 'Na tomto webu je možné zasílání zpráv mezi účastníky a vytváření soukromých diskusních skupin. Těchto skupin a diskusí se nemusíte účastnit.', 'texte_auteurs' => 'AUTOŘI', 'texte_choix_base_1' => 'Zvolte databázi:', 'texte_choix_base_2' => 'Na serveru SQL je několik databází.', # MODIF 'texte_choix_base_3' => 'Zvolte databázi, která vám byla přidělena poskytovatelem webového prostoru:', # MODIF - 'texte_commande_vider_tables_indexation' => 'Tento příkaz slouží k vyčištění indexových tabulek, které používá - vyhledávač, jenž je součástí systému SPIP. Umožní vám získat více - místa na disku.', - 'texte_compresse_ou_non' => '(může ale nemusí být komprimováno)', 'texte_compte_element' => '@count@ prvek', 'texte_compte_elements' => '@count@ prvky', 'texte_connexion_mysql' => 'Zkontrolujte informace od vašeho poskytovatele webového prostoru: mělo by tam být uvedeno, zda podporuje databázi SQL a přístupové kódy pro připojení k serveru SQL.', # MODIF @@ -606,10 +512,8 @@ systém SPIP, abyste vytvořili novou databázi a první přístup pro správce. 'texte_date_publication_anterieure' => 'Datum poslední úpravy:', 'texte_date_publication_anterieure_nonaffichee' => 'Nezobrazovat datum poslední úpravy.', 'texte_date_publication_article' => 'DATUM ZVEŘEJNĚNÍ ONLINE:', - 'texte_descriptif_petition' => 'Popis petice', 'texte_descriptif_rapide' => 'Stručný popis', 'texte_effacer_base' => 'Odstranit databázi SPIP', - 'texte_effacer_donnees_indexation' => 'Odstranit indexy', 'texte_en_cours_validation' => 'Následující články a novinky jsou připraveny k publikaci. Neváhejte připojit svůj názor prostřednictvím diskusního fóra, jež je k nim připojeno.', # MODIF 'texte_enrichir_mise_a_jour' => 'Zalamování textu můžete rozšířit pomocí "typografických zkratek".', 'texte_fichier_authent' => 'Má systém SPIP vytvořit speciální soubory .htpasswd @@ -623,28 +527,17 @@ systém SPIP, abyste vytvořili novou databázi a první přístup pro správce. 'texte_informations_personnelles_2' => '(Poznámka: pokud se jedná o opakovanou instalaci a váš přístup je stále funkční, můžete', # MODIF 'texte_introductif_article' => '(Úvodní text článku.)', 'texte_jeu_caractere' => 'Doporučujeme použít univerzální abecedu Unicode (utf-8) pro váš web, která umožňuje zobrazit texty v jakémkoli jazyce. Žádný moderní prohlížeč s Unicode nemá potíže.', - 'texte_jeu_caractere_2' => 'Toto nastavení nezmění texty, které jsou již uloženy v databázi.', 'texte_jeu_caractere_3' => 'Váš web nyní používá tuto znakovou sadu:', 'texte_jeu_caractere_4' => 'Pokud toto neodpovídá vaší situaci (například po obnovení dat ze zálohy), nebo pokud konfigurujete tento web a chcete použít jinou znakovou sadu, prosím označte znakovou sadu:', - 'texte_jeu_caractere_conversion' => 'Můžete se rozhodnout zkonvertovat všechny texty (články, novinky, diskuse, ...) jednou provždy do UTF-8. Použijte UTF-8 konverzní stránku.', - 'texte_lien_hypertexte' => '(Jestliže se vaše zpráva vztahuje k nějakému článku na webu nebo jiné stránce s dalšími informacemi, vložte zde její titulek a URL.)', 'texte_login_ldap_1' => '(V případě anonymního přístupu ponechte prázdné, případně zadejte kompletní cestu "uid=dupont, ou=users, dc=mon-domaine, dc=com".)', 'texte_login_precaution' => 'Pozor! Pod tímto uživatelským jménem jste právě přihlášeni! Tento formulář používejte opatrně...', - 'texte_message_edit' => 'Pozor! Tuto zprávu může měnit kdokoli ze správců webu. Zobrazuje se všem redaktorům. Oznámení používejte pouze, pokud chcete zveřejnit významné události týkající se činnosti webu.', 'texte_mise_a_niveau_base_1' => 'Aktualizovali jste soubory systému SPIP. Nyní musíte aktualizovat databázi webu.', 'texte_modifier_article' => 'Změnit článek:', - 'texte_moteur_recherche_active' => 'Je zapnut vyhledávač. Tento příkaz slouží k rychlému indexování - (např. po obnově ze zálohy). - Upozornění: Dokumenty, které byly změněny normálním způsobem - (pomocí rozhraní systému SPIP) jsou reindexovány automaticky: - Příkaz je tedy vhodné používat pouze výjimečně.', - 'texte_moteur_recherche_non_active' => 'Vyhledávač je vypnut.', 'texte_multilinguisme' => 'Chcete-li správu článků v několika jazycích se složitou navigací, můžete k článkům, resp. sekcím (záleží na organizační struktuře vašeho webu) přidat nabídku pro výběr jazyka.', # MODIF 'texte_multilinguisme_trad' => 'Rovněž můžete zapnout systém správy odkazů mezi překlady jednotlivých článků.', # MODIF 'texte_non_compresse' => 'nekomprimováno (váš server tuto funkci nepodporuje)', - 'texte_nouveau_message' => 'Nová zpráva', 'texte_nouvelle_version_spip_1' => 'Nainstalovali jste novou verzi systému SPIP.', 'texte_nouvelle_version_spip_2' => 'Tato verze vyžaduje rozsáhlejší aktualizaci než je obvyklé. Jste-li správcem tohoto webu, odstraňte soubor @connect@ a spusťte instalaci. Tím dojde k aktualizaci parametrů pro připojení k databázi.

    (Pozn.: Pokud jste parametry pro připojení zapomněli, podívejte se nejprve do souboru @connect@, a teprve poté jej odstraňte...)

    ', # MODIF 'texte_operation_echec' => 'Vraťte se na předchozí stránku a zvolte jinou databázi nebo vytvořte novou. Zkontrolujte informace od svého poskytovatele prostoru pro web.', @@ -663,7 +556,6 @@ systém SPIP, abyste vytvořili novou databázi a první přístup pro správce. 'texte_rappel_selection_champs' => '[Nezapomeňte správně zvolit hodnotu v tomto poli.]', 'texte_recalcul_page' => 'Chcete-li tuto stránku znovu vygenerovat, přejděte raději do veřejné části a použijte tlačítko "znovu vypočítat".', - 'texte_recapitiule_liste_documents' => 'Na této stránkce je přehled dokumentů umístněných v sekcích. Informace o dokumentech změníte klepnutím na odkaz na stránku příslušné sekce.', 'texte_recuperer_base' => 'Opravit databázi', 'texte_reference_mais_redirige' => 'Na článek je na vašem webu SPIP odkaz, ale je přesměrován na jinou adresu URL.', 'texte_requetes_echouent' => 'Pokud některé dotazy SQL neustále @@ -689,7 +581,6 @@ Tím například vynutíte obnovu všech stránek poté, co provedete významné změny grafického uspořádání nebo struktury vašeho webu.', 'texte_sur_titre' => 'Podtitul', 'texte_table_ok' => ': tato tabulka je v pořádku.', - 'texte_tables_indexation_vides' => 'Tabulky indexů vyhledávače jsou prázdné.', 'texte_tentative_recuperation' => 'Pokus o opravu', 'texte_tenter_reparation' => 'Zkusit opravu databáze', 'texte_test_proxy' => 'Proxy otestujete zadáním adresy webu, @@ -702,21 +593,8 @@ změny grafického uspořádání nebo struktury vašeho webu.', v poslední době. Tím se předejde souběžným úpravám. Tato možnost je standardně vypnuta, aby se předešlo zobrazování zbytečných varovných hlášení.', - 'texte_trop_resultats_auteurs' => 'Pro "@cherche_auteur@" bylo zobrazeno příliš mnoho výsledků. Zpřesněte vyhledávací kritéria.', - 'texte_unpack' => 'odesílání/stahování poslední verze', - 'texte_utilisation_moteur_syndiques' => 'Vestavěný prohledávací nástroj systému SPIS, - můžete vyhledávat i na syndikovaných webech a v syndikovaných - článcích, a to dvěma různými způsoby.
    - Nejjednodušší je - hledat pouze v názvech a popisech článků.
    - Druhý, mnohem účinnější způsob, umožňuje systému SPIP - hledat i v textech webů, na které vedou odkazy. - Pokud se odkazujete nějaký web, systém SPIP - bude vyhledávat v textech tohoto webu.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Tento způsob vyžaduje, aby systém SPIP - pravidelně odkazované weby navštěvoval. - To může mírně zpomalit běh vašeho webu.', 'texte_vide' => 'vyprázdnit', 'texte_vider_cache' => 'Vyprázdnit cache', - 'titre_admin_effacer' => 'Technická údržba', 'titre_admin_tech' => 'Technická údržba', 'titre_admin_vider' => 'Technická údržba', 'titre_cadre_afficher_article' => 'Zobrazit články', @@ -736,50 +614,27 @@ změny grafického uspořádání nebo struktury vašeho webu.', 'titre_naviguer_dans_le_site' => 'Procházet webem...', 'titre_nouvelle_rubrique' => 'Nová sekce', 'titre_numero_rubrique' => 'SEKCE ČÍSLO:', - 'titre_page_admin_effacer' => 'Technická údržba: odstranění databáze', 'titre_page_articles_edit' => 'Změnit: @titre@', 'titre_page_articles_page' => 'Články', 'titre_page_articles_tous' => 'Celý web', - 'titre_page_auteurs' => 'Návštěvníci', 'titre_page_calendrier' => 'Kalendář @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Nastavení webu', - 'titre_page_config_fonctions' => 'Nastavení webu', - 'titre_page_configuration' => 'Nastavení webu', - 'titre_page_controle_petition' => 'Sledování peticí', 'titre_page_delete_all' => 'kompletní a nevratné odstranění', - 'titre_page_documents_liste' => 'Dokumenty v sekcích', - 'titre_page_index' => 'Váš privátní prostor', - 'titre_page_message_edit' => 'Upravit zprávu', - 'titre_page_messagerie' => 'Váš systém zpráv', 'titre_page_recherche' => 'Výsledky vyhledávání @recherche@', 'titre_page_statistiques_referers' => 'Statistiky (příchozí odkazy)', 'titre_page_upgrade' => 'Aktualizace systému SPIP', 'titre_publication_articles_post_dates' => 'Zveřejnění post-datovaných článků', - 'titre_referencer_site' => 'Zadat odkaz na web:', - 'titre_rendez_vous' => 'SCHŮZKA:', 'titre_reparation' => 'Oprava', 'titre_suivi_petition' => 'Sledování peticí', 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'Článek tohoto čísla neexistuje.', 'trad_article_traduction' => 'Dostupné překlady tohoto článku:', - 'trad_deja_traduit' => 'Chyba: tento článek není možné propojit s požadovaným číslem', 'trad_delier' => 'Tento článek nadále s překlady nespojovat', # MODIF 'trad_lier' => 'Toto je překlad článku číslo:', 'trad_new' => 'Nově přeložit článek', # MODIF // U - 'utf8_convert_attendez' => 'Počkejte několik sekund a potom znovu načtěte tuto stránku.', - 'utf8_convert_avertissement' => 'Nyní zkonvertujete obsah databáze (články, novinky, ...) ze znakové sady @orig@ do znakové sady @charset@.', - 'utf8_convert_backup' => 'Nezapomeňte nejprve udělat kompletní zálohu vašeho webu. Rovněž zkontrolujte, zda jsou vaše šablony a jazykové soubory kompatibilní se znakovou sadou @charset@. ', - 'utf8_convert_erreur_deja' => 'Váš web již používá znakovou sadu @charset@, není důvod ke konverzi.', 'utf8_convert_erreur_orig' => 'Chyba: jazyková sada @charset@ není podporována.', - 'utf8_convert_termine' => 'Hotovo!', - 'utf8_convert_timeout' => 'Důležité: Pokud server odpoví timeout nebo podobně, obnovujte stránku dokud se neobjeví «Hotovo!».', - 'utf8_convert_verifier' => 'Nyní vyprázdněte cache a zkontrolujte veřejnou část vašeho webu. Pokud by nastaly vážné problémy, najdete zálohu původních dat (ve formátu SQL) v adresáři @rep@.', - 'utf8_convertir_votre_site' => 'Zkovertujte web do UTF-8', // V 'version' => 'Verze:' ); - -?> diff --git a/www/ecrire/lang/ecrire_da.php b/www/ecrire/lang/ecrire_da.php index be7c3316..3f6e2a17 100644 --- a/www/ecrire/lang/ecrire_da.php +++ b/www/ecrire/lang/ecrire_da.php @@ -1,9 +1,11 @@ 'Gå tilbage til sidste side og kontroller de oplysninger, du har indtastet.', 'avis_connexion_ldap_echec_3' => 'Alternativt kan du vælge ikke at benytte LDAP til at importere brugere.', 'avis_deplacement_rubrique' => 'Advarsel! Dette afsnit indeholder @contient_breves@ nyheder@scb@: Hvis du vil flytte den, så afkryds venligst her for at bekræfte.', - 'avis_destinataire_obligatoire' => 'Du skal vælge en modtager, før du kan sende meddelelsen.', 'avis_erreur_connexion_mysql' => 'Fejl i forbindelse til SQL', - 'avis_erreur_version_archive' => ' Advarsel! Filen @archive@ hører til - en anden version af SPIP end den du har - installeret. Du risikerer store - vanskeligheder: risiko for at ødelægge din database, - forskellige funktionsfejl på webstedet, osv. - Fortsæt ikke indlæsningen.

    For mere - information henvises til , - SPIP-dokumentationen.', # MODIF - 'avis_espace_interdit' => 'Forbudt område

    SPIP er allerede installeret.', + 'avis_espace_interdit' => 'Forbudt område

    SPIP er allerede installeret.', # MODIF 'avis_lecture_noms_bases_1' => 'Installationsprogrammet kunne ikke læse navnene på de installerede databaser.', 'avis_lecture_noms_bases_2' => 'Enten er databasen ikke tilgængelig, eller også er funktionen, som giver oversigt over databaser, sat ud af kraft af sikkerhedsårsager (hvilket er tilfældet på mange servere).', 'avis_lecture_noms_bases_3' => 'Hvis det sidstnævnte er tilfældet, er det muligt at en database, som er navngivet efter dit login, kan anvendes:', - 'avis_non_acces_message' => 'Du har ikke adgang til denne meddelelse.', 'avis_non_acces_page' => 'Du har ikke adgang til denne side.', 'avis_operation_echec' => 'Opgaven mislykkedes.', - 'avis_probleme_archive' => 'Læsefejl i filen @archive@', 'avis_suppression_base' => 'ADVARSEL, sletning kan ikke omgøres', - 'avis_version_mysql' => 'Din version af SQL (@version_mysql@) tillader ikke automatisk reparation af tabeller.', // B 'bouton_acces_ldap' => 'Tilføj adgang til LDAP >>', 'bouton_ajouter' => 'Tilføj', - 'bouton_ajouter_participant' => 'TILFØJ DELTAGER:', - 'bouton_annonce' => 'ANNONCERING', - 'bouton_checkbox_envoi_message' => 'mulighed for at sende en meddelelse', - 'bouton_checkbox_indiquer_site' => 'obligatorisk angivelse af websted ', - 'bouton_checkbox_signature_unique_email' => 'kun en signatur pr. e-mail-adresse', - 'bouton_checkbox_signature_unique_site' => 'kun en signatur pr. websted', 'bouton_demande_publication' => 'Anmod om at få offentliggjort denne artikel', - 'bouton_effacer_index' => 'Slet indeksering', 'bouton_effacer_tout' => 'Slet alt', - 'bouton_envoi_message_02' => 'SEND MEDDELELSE', 'bouton_envoyer_message' => 'Send færdig meddelelse', 'bouton_modifier' => 'Ret', - 'bouton_pense_bete' => 'PERSONLIGT MEMO', - 'bouton_radio_activer_messagerie' => 'Tillad interne meddelelser', - 'bouton_radio_activer_messagerie_interne' => 'Tillad interne meddelelser', - 'bouton_radio_activer_petition' => 'Tillad appeller', 'bouton_radio_afficher' => 'Vis', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Medtag i listen over tilknyttede redaktører', - 'bouton_radio_desactiver_messagerie' => 'Slå meddelelsesfunktion fra', 'bouton_radio_envoi_annonces_adresse' => 'Send nyheder til adressen:', 'bouton_radio_envoi_liste_nouveautes' => 'Send seneste nyhedsliste', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Medtag ikke i listen over tilknyttede redaktører', 'bouton_radio_non_envoi_annonces_editoriales' => 'Send ingen redaktionelle nyheder', - 'bouton_radio_pas_petition' => 'Ingen appeller', - 'bouton_radio_petition_activee' => 'Appelfunktion slået til', - 'bouton_radio_supprimer_petition' => 'Slet appellen', 'bouton_redirection' => 'VIDERESTIL', 'bouton_relancer_installation' => 'Gentag installationen', 'bouton_suivant' => 'Næste', 'bouton_tenter_recuperation' => 'Reparationsforsøg', 'bouton_test_proxy' => 'Test proxy', 'bouton_vider_cache' => 'Tøm cache', - 'bouton_voir_message' => 'Vis indlæg før godkendelse', // C 'calendrier_synchro' => 'Hvis du benytter en kalenderapplikation, der er kompatibel med iCal, kan du synkronisere med information på dette websted.', @@ -105,7 +78,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Dit login', 'entree_login_connexion_1' => 'Tilkoblingslogin', 'entree_login_connexion_2' => '(Undertiden identisk med dit FTP-login, andre gange blank)', - 'entree_login_ldap' => 'LDAP basis-login', 'entree_mot_passe' => 'Din adgangskode', 'entree_mot_passe_1' => 'Tilkoblingsadgangskode', 'entree_mot_passe_2' => '(Undertiden identisk med dit FTP-login, andre gange blank)', @@ -125,7 +97,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'For mere information, besøg SPIP dokumentation.', # MODIF 'ical_info_calendrier' => 'To kalendere står til rådighed. Den første er en oversigt over webstedet, der viser alle offentliggjorte artikler.Den anden indeholder både redaktionelle annonceringer og dine seneste private meddelelser. Den er forbeholdt dig i kraft af en personlig nøgle, som du kan ændre når som helst ved at forny din adgangskode.', 'ical_methode_http' => 'Filhentning', - 'ical_methode_webcal' => 'Synkronisering (webcal://)', + 'ical_methode_webcal' => 'Synkronisering (webcal://)', # MODIF 'ical_texte_js' => 'Med en linies javascript kan du nemt vise de senest offentliggjorte artikler på et websted, der tilhører dig.', 'ical_texte_prive' => 'Denne strengt personlige kalender holder dig underrettet om private redaktionelle aktiviteter på webstedet (opgaver, personlige aftaler, indsendte artikler, nyheder ...).', 'ical_texte_public' => 'Med denne kalender kan du følge de offentlige aktiviteter på webstedet (offentliggjorte artikler og nyheder).', @@ -141,9 +113,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_creer_auteur' => 'Opret ny forfatter og tilknyt til denne artikel', 'icone_creer_mot_cle' => 'Opret nyt nøgleord og tilknyt til denne artikel', 'icone_creer_rubrique_2' => 'Opret nyt afsnit', - 'icone_envoyer_message' => 'Send denne meddelelse', 'icone_modifier_article' => 'Ret denne artikel', - 'icone_modifier_message' => 'Ret denne meddelelse', 'icone_modifier_rubrique' => 'Ret dette afsnit', 'icone_retour' => 'Tilbage', 'icone_retour_article' => 'Tilbage til artikel', @@ -153,10 +123,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'Godkend signatur', 'image_administrer_rubrique' => 'Du kan administrere dette afsnit', 'info_1_article' => '1 artikel', - 'info_1_site' => '1 websted', 'info_activer_cookie' => 'Du kan installere en administrationscookie, som tillader dig at skifte nemt mellem det offentlige websted og dit private afsnit.', - 'info_admin_gere_rubriques' => 'Denne administrator administrerer følgende afsnit:', - 'info_admin_gere_toutes_rubriques' => 'Denne administrator administrerer alle afsnit.', # MODIF 'info_administrateur' => 'Administrator', 'info_administrateur_1' => 'Administrator', 'info_administrateur_2' => 'af webstedet (anvend med forsigtighed)', @@ -166,16 +133,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'Du kan administrere dette afsnit', 'info_adresse' => 'til adressen:', 'info_adresse_url' => 'Dit offentlige websteds URL', - 'info_afficher_visites' => 'Vis besøg for:', 'info_aide_en_ligne' => 'SPIP online hjælp', 'info_ajout_image' => 'Når du vedhæfter billeder til en artikel, kan SPIP automatisk lave miniatureudgaver af billederne. Dette muliggør f.eks. automatisk oprettelse af et galleri eller et album.', - 'info_ajout_participant' => 'Følgende deltager er tilføjet:', 'info_ajouter_rubrique' => 'Tilføj endnu et afsnit at administrere:', 'info_annonce_nouveautes' => 'Seneste annonceringer', - 'info_anterieur' => 'forrige', 'info_article' => 'artikel', 'info_article_2' => 'artikler', 'info_article_a_paraitre' => 'Fremdaterede artikler der skal offentliggøres', @@ -183,10 +147,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_2' => 'Artikler', 'info_articles_auteur' => 'Denne forfatters artikler', 'info_articles_trouves' => 'Fundne artikler', - 'info_articles_trouves_dans_texte' => 'Artikler fundet (i teksten)', 'info_attente_validation' => 'Dine artikler som afventer godkendelse', 'info_aujourdhui' => 'i dag:', - 'info_auteur_message' => 'MEDDELELSESAFSENDER:', 'info_auteurs' => 'Forfattere', 'info_auteurs_par_tri' => 'Forfattere@partri@', 'info_auteurs_trouves' => 'Forfattere fundet', @@ -219,15 +181,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Dato for tidligere offentliggørelse:', 'info_date_referencement' => 'DATO FOR HENVISNING TIL DETTE WEBSTED:', 'info_derniere_etape' => 'Sidste skridt: Det er overstået!', - 'info_derniers_articles_publies' => 'Dine senest offentliggjorte artikler', - 'info_desactiver_messagerie_personnelle' => 'Du kan åbne eller lukke for personlige meddelelser på dette websted.', 'info_descriptif' => 'Beskrivelse:', 'info_discussion_cours' => 'Igangværende diskussioner', 'info_ecrire_article' => 'Før du kan lave artikler, skal du oprette mindst et afsnit.', 'info_email_envoi' => 'Afsenderens e-mail adresse (valgfri)', 'info_email_envoi_txt' => 'Indtast afsenderens e-mail adresse ved afsendelse af e-mails (som standard bruges modtagerens adresse som afsenderadresse) :', 'info_email_webmestre' => 'E-mail-adresse på webmaster (valgfrit)', # MODIF - 'info_entrer_code_alphabet' => 'Indtast koden for det tegnsæt, der skal benyttes:', 'info_envoi_email_automatique' => 'Automatisk e-mail-forsendelse', 'info_envoyer_maintenant' => 'Send nu', 'info_etape_suivante' => 'Gå til næste trin', @@ -236,18 +195,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_exportation_base' => 'eksporter database til @archive@', 'info_facilite_suivi_activite' => 'For at lette opfølgning på webstedets redaktionelle aktiviteter sender SPIP e-mails med anmodning om offentliggørelse og godkendelse til f.eks. redaktørens adresseliste.', 'info_fichiers_authent' => 'Adgangskontrolfil ".htpasswd"', - 'info_gauche_admin_effacer' => 'Kun administratorer har adgang til denne side.

    Den giver adgang til forskellige tekniske vedligeholdelsesopgaver. Nogle af dem giver anledning til en særlig adgangskontrol, der kræver FTP-adgang til siden.', # MODIF 'info_gauche_admin_tech' => 'Kun administratorer har adgang til denne side.

    Den giver adgang til forskellige tekniske vedligeholdelsesopgaver. Nogle af dem giver anledning til en særlig adgangskontrol, der kræver FTP-adgang til siden.', # MODIF 'info_gauche_admin_vider' => 'Kun administratorer har adgang til denne side.

    Den giver adgang til forskellige tekniske vedligeholdelsesopgaver. Nogle af dem giver anledning til en særlig adgangskontrol, der kræver FTP-adgang til siden.', # MODIF 'info_gauche_auteurs' => 'Her finder du alle webstedets forfattere. Status på hver enkelt fremgår af farven på ikonet (redaktør = grøn, administrator = gul).', 'info_gauche_auteurs_exterieurs' => 'Udenforstående forfattere uden adgang til webstedet vises med et blåt symbol; slettede forfattere repræsenteres af en papirkurv.', # MODIF 'info_gauche_messagerie' => 'Meddelelsessystemet giver mulighed for at udveksle meddelelser mellem redaktører, for at gemme huskesedler (til personlig brug) eller for at vise annonceringer i det private område (hvis du er administrator).', - 'info_gauche_numero_auteur' => 'FORFATTER NUMMER:', 'info_gauche_statistiques_referers' => 'Denne side viser en oversigt over henvisende sider, dvs. websteder der har linket til dit websted alene i dag. Faktisk nulstilles oversigten med 24 timers mellemrum.', 'info_gauche_visiteurs_enregistres' => 'Her finder du de besøgende, der er tilmeldt til webstedets offentlige afsnit (fora med tilmelding).', 'info_generation_miniatures_images' => 'Dannelse af piktogrammer', - 'info_gerer_trad' => 'Danne link til oversættelse?', 'info_hebergeur_desactiver_envoi_email' => 'Nogle webhoteller tillader ikke automatisk udsendelse af e-mails. I så fald kan følgende funktioner i SPIP ikke benyttes.', 'info_hier' => 'i går:', 'info_identification_publique' => 'Din offentlige identitet...', @@ -265,8 +221,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_login_existant' => 'Dette login findes allerede.', 'info_login_trop_court' => 'Login for kort.', 'info_maximum' => 'maksimum:', - 'info_message' => 'Meddelelse fra', - 'info_message_efface' => 'MEDDELELSE SLETTET', 'info_message_en_redaction' => 'Dine meddelelser under redaktion', 'info_message_technique' => 'Teknisk meddelelse:', 'info_messagerie_interne' => 'Interne meddelelser', @@ -275,21 +229,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'Ret afsnit:', 'info_modifier_titre' => 'Ret: @titre@', 'info_mon_site_spip' => 'Mit SPIP-websted', - 'info_mot_sans_groupe' => '(Nøgleord uden en gruppe...)', - 'info_moteur_recherche' => 'Indbygget søgemaskine', 'info_moyenne' => 'gennemsnit:', - 'info_multi_articles' => 'Muliggøre valg af sprog til artiklerne?', 'info_multi_cet_article' => 'Denne artikel er på:', 'info_multi_langues_choisies' => 'Vælg de sprog der skal være til rådighed for redaktører på webstedet. Sprog der allerede er i brug på webstedet (de øverste på listen) kan ikke fravælges. ', - 'info_multi_rubriques' => 'Muliggøre sprogvalg til afsnit?', 'info_multi_secteurs' => 'Kun for afsnit placeret i roden ?', 'info_nom' => 'Navn', 'info_nom_destinataire' => 'Navn på modtager', 'info_nom_site' => 'Dit websteds navn', 'info_nombre_articles' => '@nb_articles@ artikler,', - 'info_nombre_partcipants' => 'DELTAGERE I DISKUSSIONEN:', 'info_nombre_rubriques' => '@nb_rubriques@ afsnit', 'info_nombre_sites' => '@nb_sites@ websteder,', 'info_non_deplacer' => 'Flyt ikke...', @@ -299,28 +248,23 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_modifiable' => 'kan ikke ændres', 'info_non_suppression_mot_cle' => 'Jeg ønsker ikke at slette dette nøgleord.', 'info_notes' => 'Fodnoter', - 'info_nouveaux_message' => 'Nye meddelelser', 'info_nouvel_article' => 'Ny artikel', 'info_nouvelle_traduction' => 'Ny oversættelse:', 'info_numero_article' => 'ARTIKEL NUMMER:', 'info_obligatoire_02' => '[Skal udfyldes]', # MODIF - 'info_option_faire_suivre' => 'Videresend meddelelser i forummer til artiklernes forfattere', 'info_options_avancees' => 'AVANCEREDE INDSTILLINGER', 'info_ou' => 'eller...', 'info_page_interdite' => 'Forbudt side', 'info_par_nombre_article' => '(efter antal artiker)', 'info_passe_trop_court' => 'Adgangskode for kort.', 'info_passes_identiques' => 'De to adgangskoder er ikke ens.', - 'info_pense_bete_ancien' => 'Dine gamle huskesedler', # MODIF 'info_plus_cinq_car' => 'mere end 5 tegn', 'info_plus_cinq_car_2' => '(Mere end 5 tegn)', 'info_plus_trois_car' => '(Mere end 3 tegn)', 'info_popularite' => 'popularitet: @popularite@; besøg: @visites@', - 'info_popularite_4' => 'polularitet: @popularite@; besøg: @visites@', 'info_post_scriptum' => 'Efterskrift', 'info_post_scriptum_2' => 'Efterskrift:', 'info_pour' => 'til', - 'info_principaux_correspondants' => 'Dine hovedbidragydere', 'info_procedez_par_etape' => 'gå frem skridt for skridt', 'info_procedure_maj_version' => 'opgraderingsprocdeduren bør følges for at tilpasse databasen til den nye version af SPIP.', 'info_ps' => 'P.S.', @@ -331,13 +275,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(

    Under tilmeldingen modtager brugerne en automatisk dannet e-mail med deres adgangskode til det private websted. Nogle webhoteller tillader ikke at der sendes e-mails fra deres servere. I så fald kan automatisk tilmelding ikke finde sted.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Ønsker du at anvende den søgefunktion, der findes i SPIP? - (At fravælge søgefunktionen gør webstedet hurtigere.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Top', 'info_recharger_page' => 'Vær venlig at genindlæse denne side om et øjeblik.', - 'info_recherche_auteur_a_affiner' => 'For mange resultater fundet til "@cherche_auteur@"; vær venlig at afgrænse søgningen mere.', - 'info_recherche_auteur_ok' => 'Der er fundet flere redaktører til "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Ingen resultater fundet til "@cherche_auteur@".', 'info_recommencer' => 'Vær venlig at forsøge igen.', 'info_redacteur_1' => 'Redaktør', @@ -354,7 +294,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'Afsnit', 'info_rubriques_02' => 'afsnit', 'info_rubriques_trouvees' => 'Afsnit fundet', - 'info_rubriques_trouvees_dans_texte' => 'Afsnit fundet (i teksten)', 'info_sans_titre' => 'Uden overskrift', 'info_selection_chemin_acces' => 'Vælg nedenfor stien til kataloget:', 'info_signatures' => 'underskrifter', @@ -367,11 +306,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_sites_lies_mot' => 'Links til websteder knyttet til dette nøgleord', 'info_sites_proxy' => 'Brug proxy', 'info_sites_trouves' => 'Websteder fundet', - 'info_sites_trouves_dans_texte' => 'Websteder fundet (i teksten)', 'info_sous_titre' => 'Underrubrik:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Denne forfatters status:', # MODIF - 'info_statut_efface' => 'Slettet', 'info_statut_redacteur' => 'Redaktør', 'info_statut_utilisateurs_1' => 'Importerede brugeres standardstatus', 'info_statut_utilisateurs_2' => 'Vælg den status som skal tildeles personerne i LDAP kataloget, når de logger ind første gang. Senere kan du ændre værdien for hver forfatter fra sag til sag.', @@ -389,7 +326,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_en_redaction' => 'Alle artikler undervejs', 'info_tous_articles_presents' => 'Alle artikler offentliggjort i dette afsnit', 'info_tous_les' => 'for hver:', - 'info_tous_redacteurs' => 'Annonceringer til alle redaktører', 'info_tout_site' => 'Hele webstedet', 'info_tout_site2' => 'Artiklen er ikke blevet oversat til dette sprog.', 'info_tout_site3' => 'Artiklen er blevet oversat til dette sprig, men nogle ændringer er senere blevet tilføjet til referenceartiklen. Oversættelsen skal opdateres. ', @@ -404,7 +340,6 @@ i en farve, der angiver deres status:', 'info_une_rubrique' => 'et afsnit,', 'info_une_rubrique_02' => '1 afsnit', 'info_url' => 'URL:', - 'info_url_site' => 'WEBSTEDETS URL:', 'info_urlref' => 'Hyperlink:', 'info_utilisation_spip' => 'SPIP er nu klar til brug...', 'info_visites_par_mois' => 'Besøg pr. måned:', @@ -418,15 +353,12 @@ i en farve, der angiver deres status:', 'item_activer_messages_avertissement' => 'Tillad advarselsmeddelelser', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Vis i kalenderen', - 'item_autoriser_documents_joints' => 'Tillad at vedhæfte dokumenter til artikler', - 'item_autoriser_documents_joints_rubriques' => 'Tillad dokumenter i afsnit', 'item_choix_administrateurs' => 'administratorer', 'item_choix_generation_miniature' => 'Dan miniaturepiktogrammer automatisk.', 'item_choix_non_generation_miniature' => 'Dan ikke miniaturebilleder.', 'item_choix_redacteurs' => 'redaktører', 'item_choix_visiteurs' => 'besøgende på den offentlige websted', 'item_creer_fichiers_authent' => 'Dan .htpasswd filer', - 'item_limiter_recherche' => 'Begræns søgning til information på din eget websted', 'item_login' => 'Login', 'item_mots_cles_association_articles' => 'artiklerne', 'item_mots_cles_association_rubriques' => 'afsnittene', @@ -435,34 +367,24 @@ i en farve, der angiver deres status:', 'item_non_accepter_inscriptions' => 'Tillad ikke tilmelding', 'item_non_activer_messages_avertissement' => 'Ingen advarselsmeddelelser', 'item_non_afficher_calendrier' => 'Vis ikke i kalender', - 'item_non_autoriser_documents_joints' => 'Tillad ikke vedhæftning af dokumenter til artikler', - 'item_non_autoriser_documents_joints_rubriques' => 'Tillad ikke dokumenter i afsnit', 'item_non_creer_fichiers_authent' => 'Dan ikke disse filer', - 'item_non_gerer_statistiques' => 'Dan ikke statistik', - 'item_non_limiter_recherche' => 'Udvid søgning til indholdet i linkede websteder', 'item_non_publier_articles' => 'Vent med at offentliggøre artikler til deres publiceringsdato.', - 'item_non_utiliser_moteur_recherche' => 'Benyt ikke søgefunktion', 'item_nouvel_auteur' => 'Ny forfatter', 'item_nouvelle_rubrique' => 'Nyt afsnit', 'item_oui' => 'Ja', 'item_publier_articles' => 'Offentliggør artikler uden hensyn til deres publiceringsdato.', 'item_reponse_article' => 'Kommenter artiklen', - 'item_utiliser_moteur_recherche' => 'Benyt søgefunktion', 'item_visiteur' => 'besøgende', // J 'jour_non_connu_nc' => ' ', // L - 'lien_ajout_destinataire' => 'Tilføj denne modtager', 'lien_ajouter_auteur' => 'Tilføj denne forfatter', - 'lien_ajouter_participant' => 'Tilføj modtager', 'lien_email' => 'e-mail', 'lien_nom_site' => 'WEBSTEDETS NAVN:', 'lien_retirer_auteur' => 'Fjern forfatter', - 'lien_retrait_particpant' => 'fjern denne modtager', 'lien_site' => 'websted', - 'lien_supprimer_rubrique' => 'slet dette afsnit', 'lien_tout_deplier' => 'Udfold alle', 'lien_tout_replier' => 'Sammenfold alle', 'lien_trier_nom' => 'Sorter efter navn', @@ -488,6 +410,9 @@ i en farve, der angiver deres status:', // O 'onglet_repartition_actuelle' => 'nu', + // R + 'required' => '[Skal udfyldes]', # MODIF + // S 'statut_admin_restreint' => '(begrænset admin)', # MODIF @@ -505,14 +430,10 @@ i en farve, der angiver deres status:', 'texte_article_virtuel_reference' => 'Virtuel artikel: fremstår som en artikel på dit websted, men viderestiller til en anden URL. Slet URL’en for at fjerne viderestillingen.', 'texte_aucun_resultat_auteur' => 'Ingen resultater til "@cherche_auteur@".', 'texte_auteur_messagerie' => 'Dette websted kan løbende holde øje med, hvilke redaktører der er logget ind. Dette muliggør realtidsudveksling af meddelelser (hvis udveksling af meddelser ovenfor er fravalgt, vedligeholdes oversigten over redaktører, der er online, heller ikke). Du kan vælge ikke at være synlig i oversigten (du er så «usynlig» for andre brugere).', - 'texte_auteur_messagerie_1' => 'Dette websted tillader udveksling af meddelelser og oprettelse af private diskussionsforummer mellem deltagere på webstedet. Du kan vælge ikke at deltage i udvekslingen.', 'texte_auteurs' => 'FORFATTERNE', 'texte_choix_base_1' => 'Vælg database:', 'texte_choix_base_2' => 'SQL server indeholder et antal databaser.', 'texte_choix_base_3' => 'Vælg vælg nedenfor den database, som webhotellet har tildelt dig:', - 'texte_commande_vider_tables_indexation' => 'Brug denne kommando til at tømme de indekstabeller, som benyttes af SPIP’s indbyggede søgefunktion. - Derved kan du spare diskplads.', - 'texte_compresse_ou_non' => '(denne kan være komprimeret eller ikke)', 'texte_compte_element' => '@count@ element', 'texte_compte_elements' => '@count@ elementer', 'texte_connexion_mysql' => 'Slå op i de oplysninger, som dit webhotel har stillet til rådighed: Hvis webhotellet understøtter SQL, bør det indeholde oplysninger om opkobling.', # MODIF @@ -525,10 +446,8 @@ i en farve, der angiver deres status:', 'texte_date_publication_anterieure' => 'DATO FOR TIDLIGERE OFFENTLIGGØRELSE', 'texte_date_publication_anterieure_nonaffichee' => 'Skjul dato for tidligere offentliggørelse.', 'texte_date_publication_article' => 'DATO FOR ONLINE OFFENTLIGGØRELSE:', - 'texte_descriptif_petition' => 'Beskrivelse af appellen', 'texte_descriptif_rapide' => 'Kort beskrivelse', 'texte_effacer_base' => 'Slet SPIP databasen', - 'texte_effacer_donnees_indexation' => 'Slet indekseringsdata', 'texte_en_cours_validation' => 'Følgende artikler og nyheder er foreslået offentliggjort. Tøv ikke med at give din mening til kende via de fora, som er knyttet til artiklerne.', # MODIF 'texte_enrichir_mise_a_jour' => 'Du kan forbedre layoutet af teksten ved at benytte «typografiske koder».', 'texte_fichier_authent' => 'Skal SPIP oprette specielle .htpasswd @@ -541,25 +460,15 @@ i en farve, der angiver deres status:', 'texte_introductif_article' => '(Introduktion til artiklen)', 'texte_jeu_caractere' => 'Denne indstilling er nyttig, hvis dit websted viser andre alfabeter end det latinske alfabet (dvs. det «vestlige») og dets afledninger. I så fald skal standardindstillingen ændres til et passende tegnsæt. Vi anbefaler dig at prøve med forskellige indstillinger for at finde den bedste løsning. Husk også at tilpasse webstedet tilsvarende (#CHARSET parameteren).', - 'texte_jeu_caractere_2' => 'Denne indstilling har ikke tilbagevirkende kraft. - Tekst, der allerede er lagt ind, kan derfor blive vist forkert efter ændring af denne indstilling. - Du kan dog altid vende tilbage til den oprindelige indstilling.', - 'texte_lien_hypertexte' => '(Hvis din meddelelse henviser til en artikel der er offentliggjort på webben, eller til en side der giver flere oplysninger, så indtast her artiklens overskrift og dens URL.)', 'texte_login_ldap_1' => '(Efterlad tom for anonym adgang eller indtast en fuldstændig sti, f.eks. «uid=hansen, ou=brugere, dc=mit-domæne, dc=dk».)', 'texte_login_precaution' => 'Advarsel! Dette er den login, du er koblet på med nu. Brug denne formular med forsigtighed ...', - 'texte_message_edit' => 'Advarsel: Denne meddelelse kan ændres af alle webstedets administratorer, og den er synlig for alle redaktører. Benyt kun annonceringer til at gøre opmærksom på vigtige begivenheder på webstedet.', 'texte_mise_a_niveau_base_1' => 'Du har netop opdateret SPIP’s filer. Du skal nu opdatere webstedets database.', 'texte_modifier_article' => 'Ret artiklen:', - 'texte_moteur_recherche_active' => 'Søgefunktionen er valgt til. Brug denne kommando, hvis du ønsker at udføre en hurtig reindeksering - (f.eks. efter at have indlæst en sikkerhedskopi). Bemærk, at dokumenter der ændres normalt (f.eks. fra SPIP’s brugergrænseflade) - automatisk indekseres igen: derfor er denne kommando kun nyttig under ekstraordinære omstændigheder.', - 'texte_moteur_recherche_non_active' => 'Søgefunktionen er valgt fra.', 'texte_multilinguisme' => 'Hvis du ønsker at administrere artikler på flere sprog med den deraf følgende større kompleksitet, kan du forsyne afsnit og/eller artikler med en sprogvalgsmenu. Denne funktion er afhængig af strukturen på websiden.', # MODIF 'texte_multilinguisme_trad' => 'Du kan også vælge at have link mellem de forskellige sprogversioner af en artikel.', # MODIF 'texte_non_compresse' => 'ukomprimeret (din server understøtter ikke denne funktion)', - 'texte_nouveau_message' => 'Ny meddelelse', 'texte_nouvelle_version_spip_1' => 'Du har netop installeret en ny version af SPIP.', 'texte_nouvelle_version_spip_2' => 'Denne nye version kræver en mere omfattende opdatering end sædvanligt. Hvis du er webmaster på webstedet, så slet venligst filen inc_connect.php3 i kataloget ecrire og genstart installationen for at opdatere dine opkoblingsparametre til databasen.

    (NB.: hvis du har glemt dine opkoblingsparametre, så kast et blik på indholdet af filen inc_connect.php3 før du sletter den...)', # MODIF 'texte_operation_echec' => 'Gå tilbage til forrige side og vælg en anden database eller opret en ny. Kontroller de oplysninger, dit webhotel har stillet til rådighed.', @@ -575,7 +484,6 @@ i en farve, der angiver deres status:', fremtiden?', 'texte_rappel_selection_champs' => '[Husk at vælge dette felt korrekt.]', 'texte_recalcul_page' => 'Hvis du kun ønsker at opdatere en side, bør du gøre det ved fra det offentlige område at benytte knappen « Opdater ».', - 'texte_recapitiule_liste_documents' => 'Denne side er en oversigt over de dokumenter, du har anbragt i afsnittene. For at ændre oplysningerne om et dokument, skal du følge linket til dets afsnitsside.', 'texte_recuperer_base' => 'Reparer databasen', 'texte_reference_mais_redirige' => 'artikler der refereres til på dit SPIP websted, men som viderestiller til en anden URL.', 'texte_requetes_echouent' => 'Når nogle SQL forespørgsler systematisk og uden tilsyneladende grund går galt, er det muligt at fejlen ligger i selve databasen. @@ -604,7 +512,6 @@ i en farve, der angiver deres status:', at du har lavet væsentlige grafiske eller strukturelle ændringer på webstedet.', 'texte_sur_titre' => 'Hovedoverskrift', 'texte_table_ok' => ': denne tabel er OK.', - 'texte_tables_indexation_vides' => 'Søgefunktionens indekstabeller er tomme.', 'texte_tentative_recuperation' => 'Reparationsforsøg', 'texte_tenter_reparation' => 'Forsøg på at reparere databasen', 'texte_test_proxy' => 'For at afprøve proxy’en, kan du indtaste adressen på et websted som du ønsker at teste.', @@ -614,18 +521,8 @@ i en farve, der angiver deres status:', 'texte_travail_collaboratif' => 'Hvis det sker hyppigt at flere redaktører arbejder på samme artikel, kan systemet vise «åbne» artikler for at undgå samtidige ændringer. Denne indstilling er som standard slået fra for at undgå utidige advarselsmeddelelser.', - 'texte_trop_resultats_auteurs' => 'For mange resultater til "@cherche_auteur@"; vær venlig at afgrænse søgningen yderligere.', - 'texte_unpack' => 'download af seneste version', - 'texte_utilisation_moteur_syndiques' => 'Hvis du benytter SPIP’s indbyggede søgefunktion, kan du på forskellig vis foretage - søgninger på websteder og i syndikerede artikler.
    Den enkleste består i kun at - søge i artiklernes overskrifter og beskrivelser.
    - En anden metode, som er stærkere, lader SPIP søge i teksten på de websteder, der henvises til. - Hvis du henviser til et websted, vil SPIP selv søge i dens tekst.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Denne metode tvinger SPIP til jævnligt at besøge webstedet, hvilket kan koste - en forringelse af svartiderne på din eget websted.', 'texte_vide' => 'tom', 'texte_vider_cache' => 'Tøm cachen', - 'titre_admin_effacer' => 'Teknisk vedligeholdelse', 'titre_admin_tech' => 'Teknisk vedligeholdelse', 'titre_admin_vider' => 'Teknisk vedligeholdelse', 'titre_cadre_afficher_article' => 'Vis artikler som er', @@ -645,35 +542,20 @@ i en farve, der angiver deres status:', 'titre_naviguer_dans_le_site' => 'Gennemse webstedet...', 'titre_nouvelle_rubrique' => 'Nyt afsnit', 'titre_numero_rubrique' => 'AFSNITSNUMMER:', - 'titre_page_admin_effacer' => 'Teknisk vedligeholdelse: sletning af database', 'titre_page_articles_edit' => 'Ret: @titre@', 'titre_page_articles_page' => 'Artikler', 'titre_page_articles_tous' => 'Hele webstedet', - 'titre_page_auteurs' => 'Besøgende', 'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Webstedskonfigurering', - 'titre_page_config_fonctions' => 'Webstedkonfigurering', - 'titre_page_configuration' => 'Konfiguration af websted', - 'titre_page_controle_petition' => 'Opfølgning på appel', 'titre_page_delete_all' => 'total og uigenkaldelig sletning', - 'titre_page_documents_liste' => 'Dokumenter i afsnit', - 'titre_page_index' => 'Dit private område', - 'titre_page_message_edit' => 'Skriv meddelelse', - 'titre_page_messagerie' => 'Din meddelelsesfunktion', 'titre_page_recherche' => 'Søgeresultater @recherche@', 'titre_page_statistiques_referers' => 'Statistik (indkommende links)', 'titre_page_upgrade' => 'SPIP opgradering', 'titre_publication_articles_post_dates' => 'Offentliggørelse af fremdaterede artikler', - 'titre_referencer_site' => 'Henvis til webstedet:', - 'titre_rendez_vous' => 'AFTALER:', 'titre_reparation' => 'Reparer', 'titre_suivi_petition' => 'Opfølgning på appeller', - 'trad_article_inexistant' => 'Der findes ingen artikel med dette nummer.', 'trad_article_traduction' => 'Alle udgaver af denne artikel :', - 'trad_deja_traduit' => 'Denne artikel er allerede en oversættelse af den aktuelle artikel.', 'trad_delier' => 'Afbryd forbindelsen mellem denne artikel og oversættelserne', # MODIF 'trad_lier' => 'Denne artikel er en oversættelse af artikel nummer :', 'trad_new' => 'Lav en ny oversættelse af denne artikel' # MODIF ); - -?> diff --git a/www/ecrire/lang/ecrire_de.php b/www/ecrire/lang/ecrire_de.php index a1b523dc..e36a90d1 100644 --- a/www/ecrire/lang/ecrire_de.php +++ b/www/ecrire/lang/ecrire_de.php @@ -1,16 +1,18 @@ 'Plugin aktivieren', 'affichage' => 'Anzeigen', - 'aide_non_disponible' => 'Teil der Online-Hilfe in dieser Sprache noch nicht verfügbar.', + 'aide_non_disponible' => 'Dieser Teil der Online-Hilfe ist in dieser Sprache noch nicht verfügbar.', 'annuler_recherche' => 'Sucheingabe löschen', 'auteur' => 'Autor:', 'avis_acces_interdit' => 'Zugang verweigert.', @@ -22,80 +24,51 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_connexion_echec_1' => 'Die Verbindung zur Datenbank ist fehlgeschlagen.', 'avis_connexion_echec_2' => 'Kehren Sie zur vorigen Seite zurück und überprüfen sie ihre Eingaben.', 'avis_connexion_echec_3' => 'N.B. Bei vielen Servern müssen Sie Ihre Datenbank ausdrücklich freischalten lassen um sie nutzen zu können. Falls die Verbindung wieder fehlschlägt, stellen Sie bitte sicher, dass Ihre Datenbank freigeschaltet wurde.', + 'avis_connexion_erreur_creer_base' => 'Die Datenbank konnte nicht erstellt werden.', 'avis_connexion_erreur_nom_base' => 'Der Datenbankname darf nur Buchstaben, Ziffern und Bindestriche "-" enthalten.', 'avis_connexion_ldap_echec_1' => 'Die Verbindung zum LDAP-Server ist fehlgeschlagen.', 'avis_connexion_ldap_echec_2' => 'Kehren Sie zur vorigen Seite zurück und überprüfen sie ihre Eingaben.', 'avis_connexion_ldap_echec_3' => 'Sie können Benutzer auch ohne LDAP-Support importieren.', 'avis_deplacement_rubrique' => 'Achtung! diese Rubrik enthält @contient_breves@ Meldungen@scb@: wenn Sie Rubrik verschieben wollen, markieren Sie bitte zur Bestätigung dieses Kästchen.', - 'avis_destinataire_obligatoire' => 'Sie müssen einen Empfänger angeben, bevor Sie die Nachricht abschicken.', 'avis_erreur_connexion_mysql' => 'Verbindungsfehler (SQL)', - 'avis_erreur_version_archive' => 'Achtung! Die Datei @archive@ entspricht -nicht der von Ihnen installierten Version -von SPIP. Sie riskieren die Funktionalität -Ihrer Website zu beeinträchtigen oder sogar die Datenbank -zu zerstören. Bitte brechen Sie den Vorgang jetzt ab. -

    Mehr dazu finden Sie in der -französischen SPIP-Dokumentation.', - 'avis_espace_interdit' => 'Gesperrter Bereich

    SPIP ist bereits installiert.
    ', + 'avis_espace_interdit' => 'Gesperrter Bereich
    SPIP ist bereits installiert.
    ', 'avis_lecture_noms_bases_1' => 'Das Installationsprogramm konnte die Namen der vorhandenen Datenbanken nicht lesen.', 'avis_lecture_noms_bases_2' => 'Entweder ist keine Datenbank vorhanden oder die Funktion zum Auflisten der Datenbanken ist aus Sciherheitsgründen abgeschaltet (Das ist bei vielen Webhostern der Fall).', 'avis_lecture_noms_bases_3' => 'Im zweiten Fall ist wahrscheinlich eine Datenbank vorhanden, die Ihren Anmeldenamen trägt:', - 'avis_non_acces_message' => 'Sie haben keinen Zugriff auf diese Nachricht.', 'avis_non_acces_page' => 'Sie haben keinen Zugriff auf diese Seite.', 'avis_operation_echec' => 'Aktion fehlgeschlagen.', 'avis_operation_impossible' => 'Aktion nicht möglich', - 'avis_probleme_archive' => 'Fehler beim Lesen der Archivdatei @archive@', 'avis_suppression_base' => 'ACHTUNG, Daten werden unwiderruflich gelöscht.', - 'avis_version_mysql' => 'Ihre SQL-Version (@version_mysql@) erlaubt keine automatische Reparatur der Tabellen.', // B 'bouton_acces_ldap' => 'LDAP Zugang hinzufügen', 'bouton_ajouter' => 'Hinzufügen', - 'bouton_ajouter_participant' => 'TEILNEHMER HINZUFÜGEN:', - 'bouton_annonce' => 'ANKÜNDIGUNG', 'bouton_annuler' => 'Abbrechen', 'bouton_cache_activer' => 'Cache aktivieren', 'bouton_cache_desactiver' => 'Cache vorübergehend abschalten', - 'bouton_checkbox_envoi_message' => 'Verschicken einer Nachricht ermöglichen', - 'bouton_checkbox_indiquer_site' => 'obligatorische Angabe einer Website', - 'bouton_checkbox_signature_unique_email' => 'eine einzige Unterschrift pro E-Mail Adresse', - 'bouton_checkbox_signature_unique_site' => 'eine einzige Unterschrift pro Website', 'bouton_demande_publication' => 'Artikel zur Veröffentlichung vorschlagen', 'bouton_desactive_tout' => 'Alles deaktivieren', 'bouton_desinstaller' => 'Deinstallieren', - 'bouton_effacer_index' => 'Indexe löschen', 'bouton_effacer_tout' => 'ALLES löschen', - 'bouton_envoi_message_02' => 'NACHRICHT SENDEN', 'bouton_envoyer_message' => 'Nachricht fertig: Senden', 'bouton_fermer' => 'Schließen', 'bouton_mettre_a_jour_base' => 'Datenbank updaten', 'bouton_modifier' => 'Ändern', - 'bouton_pense_bete' => 'PERSÖNLICHER MERKZETTEL', - 'bouton_radio_activer_messagerie' => 'Interne Nachrichten aktivieren', - 'bouton_radio_activer_messagerie_interne' => 'Interne Nachrichten aktivieren', - 'bouton_radio_activer_petition' => 'Petitionen aktivieren', 'bouton_radio_afficher' => 'Anzeigen', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Auf der Liste angemeldeter Redakteure anzeigen', - 'bouton_radio_desactiver_messagerie' => 'Nachrichten abschalten', 'bouton_radio_envoi_annonces_adresse' => 'Editorische Ankündigungen an diese Adresse senden:', 'bouton_radio_envoi_liste_nouveautes' => 'Liste der neuesten Veröffentlichungen verschicken', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Ich will nicht auf dieser Liste zu sehen sein.', 'bouton_radio_non_envoi_annonces_editoriales' => 'Keine editorischen Ankündigungen verschicken', - 'bouton_radio_pas_petition' => 'Keine Petition', - 'bouton_radio_petition_activee' => 'Petition aktiviert', - 'bouton_radio_supprimer_petition' => 'Petition löschen', 'bouton_redirection' => 'UMLEITUNG', 'bouton_relancer_installation' => 'Installation wiederholen', 'bouton_suivant' => 'weiter', 'bouton_tenter_recuperation' => 'Reparatur versuchen', 'bouton_test_proxy' => 'Proxy testen', 'bouton_vider_cache' => 'Cache leeren', - 'bouton_voir_message' => 'Beitrag vor dem Absenden ansehen', // C - 'cache_mode_compresse' => 'Cache-Dateien werden komprimiert gespeichert.', - 'cache_mode_non_compresse' => 'Cache-Dateien werden unkomprimiert gespeichert.', 'cache_modifiable_webmestre' => 'Dieser Parameter kann vom Webmaster eingestellt werden.', 'calendrier_synchro' => 'Wenn Sie eine mit iCal kompatibles PIM-Programm verwenden, könne Sie es mit den Einträgen dieser Website synchronisieren.', 'config_activer_champs' => 'Aktivieren Sie folgende Felder', @@ -114,9 +87,7 @@ französischen SPIP-Dokumentation.', 'config_titre_base_sup' => 'Deklaration einer zusätzlichen Datenbank', 'config_titre_base_sup_choix' => 'Wählen Sie eine zusätzliche Datenbank', 'connexion_ldap' => 'Verbindung:', - 'copier_en_local' => 'Lokale Koipe', 'creer_et_associer_un_auteur' => 'Autor anlegen und zuordnen', - 'creer_et_associer_une_rubrique' => 'Neue Rubrik anlegen und zuordnen', // D 'date_mot_heures' => 'Stunden', @@ -146,7 +117,6 @@ französischen SPIP-Dokumentation.', 'entree_login' => 'Ihr Login', 'entree_login_connexion_1' => 'Login für die Verbindung', 'entree_login_connexion_2' => '(Dieser entspricht häufig Ihrem FTP-Login, bleibt in manchen Fällen leer)', - 'entree_login_ldap' => 'LDAP Basis-Login', 'entree_mot_passe' => 'Ihr Passwort', 'entree_mot_passe_1' => 'Passwort für die Verbindung', 'entree_mot_passe_2' => '(Entspricht häufig Ihrem FTP-Login, bleibt in manchen Fällen leer)', @@ -164,7 +134,9 @@ französischen SPIP-Dokumentation.', 'entree_url' => 'Adresse (URL) Ihrer Website', 'entree_url_2' => 'Adresse (URL) der Website', 'erreur_connect_deja_existant' => 'Ein Server mit diesem Namen existiert bereits.', + 'erreur_email_deja_existant' => 'Diese Adresse ist bereits gespeichert.', 'erreur_nom_connect_incorrect' => 'Dieser Servername ist nicht zulässig.', + 'erreur_plugin_attribut_balise_manquant' => 'Attribut @attribut@ Fehlt in den Tag @balise@.', 'erreur_plugin_desinstalation_echouee' => 'Das Deinstallieren des Plugins ist fehlgeschlagen. Sie können es jedoch deaktivieren.', 'erreur_plugin_fichier_absent' => 'Datei nicht vorhanden', 'erreur_plugin_fichier_def_absent' => 'Definitionsdatei nicht vorhanden', @@ -183,7 +155,7 @@ französischen SPIP-Dokumentation.', 'ical_info2' => 'Um mehr über diese Techniken zu erfahren, lesen Sie bitte die SPIP Dokumentation.', 'ical_info_calendrier' => 'Sie verfügen über zwei Kalender. Einer gibt Ihnen eine Übersicht über die Website und alle dort veröffentlichten Artikel. Der zweite enthält editorische Ankündigungen und Ihre persönlichen Nachrichten. Sie allein haben Zugriff auf ihn indem Sie Ihr Passwort eingeben. Sie könne es ändern, indem Sie Ihr Zugangspasswort für diese Website ändern.', 'ical_methode_http' => 'Download', - 'ical_methode_webcal' => 'Synchronisieren (webcal://)', + 'ical_methode_webcal' => 'Synchronisierung (webcal://)', 'ical_texte_js' => 'Mit nur einer Zeile Javascript können Sie auf Ihrer Website die neuesten Artikel dieser Website anzeigen.', 'ical_texte_prive' => 'Dieser nur für Sie selbst zugängliche Kalender hält Sie auf dem Laufenden über die internen redaktionellen Vorgänge dieser Website (Aufgaben und persönliche Termine, vorgeschlagene Artikel und Meldungen ...).', 'ical_texte_public' => 'Dieser Kalender gibt Ihnen einen Überblick über die Ereignisse im öffentlichen Bereich der Website.', @@ -203,16 +175,13 @@ französischen SPIP-Dokumentation.', 'icone_configuration' => 'Konfiguration', 'icone_creer_auteur' => 'Neuen Autor anlegen und diesem Artikel zuordnen', 'icone_creer_mot_cle' => 'Neues Schlagwort anlegen und mit diesem Artikel verknüpfen', - 'icone_creer_mot_cle_rubrique' => 'Schlagwort anlegen und dieser Rubrik zuordnen.', - 'icone_creer_mot_cle_site' => 'Schlagwort anlegen und dieser Website zuordnen.', 'icone_creer_rubrique_2' => 'Neue Rubrik anlegen', + 'icone_developpement' => 'Entwicklung', 'icone_edition' => 'Redaktion', - 'icone_envoyer_message' => 'Nachricht abschicken', 'icone_ma_langue' => 'Meine Sprache', 'icone_mes_infos' => 'Meine Informationen', 'icone_mes_preferences' => 'Meine Einstellungen', 'icone_modifier_article' => 'Artikel bearbeiten', - 'icone_modifier_message' => 'Nachricht bearbeiten', 'icone_modifier_rubrique' => 'Rubrik bearbeiten', 'icone_publication' => 'Veröffentlichen', 'icone_relancer_signataire' => 'Unterzeichner erneut benachrichtigen', @@ -225,21 +194,15 @@ französischen SPIP-Dokumentation.', 'icone_supprimer_signature' => 'Unterschrift löschen', 'icone_valider_signature' => 'Unterschrift bestätigen', 'image_administrer_rubrique' => 'Sie können diese Rubrik verwalten', - 'impossible_modifier_login_auteur' => 'Login kann nicht geändert werden.', - 'impossible_modifier_pass_auteur' => 'Passwort kann nicht geändert werden.', 'info_1_article' => '1 Artikel', - 'info_1_article_syndique' => '1 syndizierte Artikel', 'info_1_auteur' => '1 Autor', 'info_1_message' => '1 Nachricht', 'info_1_mot_cle' => '1 Schlagwort', 'info_1_rubrique' => '1 Rubrik', - 'info_1_site' => '1 Website', 'info_1_visiteur' => '1 Besucher', 'info_activer_cookie' => 'Sie können ein Verwaltungs-Cookie setzen. Es erlaubt Ihnen, Artikel und Rubriken direkt aus der Website zu bearbeiten.', + 'info_activer_menu_developpement' => 'Entwicklermenü anzeigen', 'info_admin_etre_webmestre' => 'Mir Webmaster-Rechte geben', - 'info_admin_gere_rubriques' => 'Dieser Administrator verwaltet die folgenden Rubriken:', - 'info_admin_gere_toutes_rubriques' => 'Dieser Administrator verwaltet alle Rubriken.', - 'info_admin_gere_toutes_rubriques_2' => 'Ich verwalte alle Rubriken.', 'info_admin_je_suis_webmestre' => 'Ich bin Webmaster', 'info_admin_statuer_webmestre' => 'Diesem Administrator Webmaster-Rechte geben', 'info_admin_webmestre' => 'Dieser Administrator ist Webmaster', @@ -251,15 +214,13 @@ französischen SPIP-Dokumentation.', 'info_administrateurs' => 'Administratoren', 'info_administrer_rubrique' => 'Sie können diese Rubrik verwalten', 'info_adresse' => 'an Adresse:', + 'info_adresse_desinscription' => 'Adresse für die Abmeldung:', 'info_adresse_url' => 'Adresse (URL) der öffentlichen Website', 'info_afficher_par_nb' => 'Anzeigen nach', - 'info_afficher_visites' => 'Besuche anzeigen für:', 'info_aide_en_ligne' => 'SPIP Online-Hilfe', 'info_ajout_image' => 'Wenn Sie Bilder als Dokumente anlegen, die einem Artikel zugeordnet sind, kann SPIP automatisch (Miniatur-)Vorschaubilder dazu erstellen. Sie können so eine automatische Galerie oder Bildermappe einrichten.', - 'info_ajout_participant' => 'Dieser Teilnehmer wurde hinzugefügt:', 'info_ajouter_rubrique' => 'Eine weitere zu verwaltende Rubrik hinzufügen:', 'info_annonce_nouveautes' => 'Ankündigung der Neuigkeiten', - 'info_anterieur' => 'vorige', 'info_article' => 'Artikel', 'info_article_2' => 'Artikel', 'info_article_a_paraitre' => 'Vordatierte Artikel, die noch nicht erschienen sind.', @@ -269,17 +230,15 @@ französischen SPIP-Dokumentation.', 'info_articles_miens' => 'Meine Artikel', 'info_articles_tous' => 'Alle Artikel', 'info_articles_trouves' => 'Gefundene Artikel', - 'info_articles_trouves_dans_texte' => 'Gefundene Artikel (im Text)', 'info_attente_validation' => 'Ihre zur Veröffentlichung vorgeschlagenen Artikel', 'info_aucun_article' => 'Kein Artikel', - 'info_aucun_article_syndique' => 'Kein syndizierter Artikel', 'info_aucun_auteur' => 'Kein Autor', 'info_aucun_message' => 'Keine Nachricht', 'info_aucun_rubrique' => 'Keine Rubrik', - 'info_aucun_site' => 'Keine Website', - 'info_aucun_visiteur' => 'Kein Besucher', 'info_aujourdhui' => 'heute: ', - 'info_auteur_message' => 'AUTOR DES BEITRAGS:', + 'info_auteur_gere_rubriques' => 'Dieser Autor verwaltet folgende Rubriken :', + 'info_auteur_gere_toutes_rubriques' => 'Dieser Autor verwaltet alle Rubriken.', + 'info_auteur_gere_toutes_rubriques_2' => 'Ich verwalte alle Rubriken.', 'info_auteurs' => 'Autoren', 'info_auteurs_par_tri' => 'Autoren@partri@', 'info_auteurs_trouves' => 'Gefundene Autoren', @@ -299,8 +258,6 @@ französischen SPIP-Dokumentation.', 'info_classement_2' => 'von @liste@', 'info_code_acces' => 'Vergessen Sie ihre Zugangsdaten nicht!', 'info_compatibilite_html' => 'Zu respektierende HTML Norm', - 'info_compresseur_gzip' => 'Wir empfehlen, vorab zu testen, ob der Provider bereits PHP-Skripte komprimiert. Dazu können Sie z.B. den Dienst @testgzip@ nutzen.', # Ma première traduction avec trad.spip.org - merci kent1 ! - 'info_compresseur_texte' => 'Falls Ihr Server HTML Seiten nicht automatisch für die Übertragung zum Websurfer komprimiert, können Sie hier versuchen, die Kompression zu erzeingen und so die Datenmenge der übertragenen Seiten zu reduzieren. Achtung : Diese Einstellung kann manche Server merklich verlangsamen.', 'info_config_suivi' => 'Wenn es sich bei dieser Adresse um eine Mailing-Liste handelt, können Sie unten die Adresse angeben, unter der sich Teilnehmer der Website anmelden können. Es kann sich um den URL einer Webseite handeln (die ein Anmeldeformular enthält) oder um eine E-Mail Adresse mit angehängtem Parameter (z.B. @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Sie können die Mailing-Liste dieser Website abonnieren. Sie werden dann per E-Mail über neu zur Veröffentlichung vorgeschlagene Artikel informiert.', 'info_confirmer_passe' => 'Neues Passwort bestätigen:', @@ -324,8 +281,6 @@ französischen SPIP-Dokumentation.', 'info_date_publication_anterieure' => 'Datum einer früheren Bearbeitung:', 'info_date_referencement' => 'DATUM DER VERLINKUNG DIESER WEBSITE:', 'info_derniere_etape' => 'Fertig!', - 'info_derniers_articles_publies' => 'Ihre letzten veröffentlichten Artikel', - 'info_desactiver_messagerie_personnelle' => 'Sie können die Nutzung Ihrer persönlichen Nachrichten abschalten.', 'info_descriptif' => 'Beschreibung:', 'info_desinstaller_plugin' => 'löscht die Daten und desktiviert das Plugin', 'info_discussion_cours' => 'Aktuelle Diskussionen', @@ -333,7 +288,6 @@ französischen SPIP-Dokumentation.', 'info_email_envoi' => 'Absenderadresse (freiwillige Angabe)', 'info_email_envoi_txt' => 'Geben Sie hier die Absenderadresse der E-Mails an (ohne diese Angabe wird die Empfängeradresse als Absender eingetragen). ', 'info_email_webmestre' => 'E-Mail des Webmasters', - 'info_entrer_code_alphabet' => 'Geben Sie die Bezeichnung des gewünschten Zeichensatz an: ', 'info_envoi_email_automatique' => 'Automatischer Mailversand', 'info_envoyer_maintenant' => 'Jetzt schicken', 'info_etape_suivante' => 'Weiter', @@ -344,31 +298,24 @@ französischen SPIP-Dokumentation.', 'info_facilite_suivi_activite' => 'Um die editorische Arbeit zu erleichtern kann SPIP Veröffentlichungsvorschläge und Freischaltungen z.B. an eine Mailing-Liste der Redakteure schicken.', 'info_fichiers_authent' => '“.htpasswd” Dateien', 'info_forums_abo_invites' => 'Ihre Website hat Foren für eingetragene Teilnehmer. Ihre Leser werden aus diesem Gund aufgefordert, sich bei Ihrer Website anzumelden.', - 'info_gauche_admin_effacer' => 'Diese Seite ist nur für den Verantwortlichen der Website zugänglich.

    Sie erlaubt bestimmte technische Wartungsvorgänge auszulösen. Für manche Funktionen ist die Authentifizierung per FTP Voraussetzung.', 'info_gauche_admin_tech' => 'Diese Seite ist nur für den Verantwortlichen der Website zugänglich.

    Sie erlaubt bestimmte technische Wartungsvorgänge auszulösen. Für manche Funktionen ist die Authentifizierung per FTP Voraussetzung.', 'info_gauche_admin_vider' => 'Diese Seite ist nur für den Verantwortlichen der Website zugänglich.

    Sie erlaubt bestimmte technische Wartungsvorgänge auszulösen. Für manche Funktionen ist die Authentifizierung per FTP Voraussetzung.', 'info_gauche_auteurs' => 'Hier sehen Sie alle Autoren der Website. Ihr Status wird durch die Farbe ihres Symbols angezeigt (Redakteur = gelb; Administrator = grün). ', 'info_gauche_auteurs_exterieurs' => 'Externe Autoren ohne Zugang zum Redaktionssystem werden mit einem blauen Symbol gekennzeichnet, gelöschte Autoren haben eine Mülltonne als Symbol.', 'info_gauche_messagerie' => 'Nachrichtensystem: SPIP ermöglicht den Austausch von Nachrichten zwischen Redakteuren, persönliche Merkzettel und Ankündigungen im privaten Arbeitsbereich der Redakteure (nur Administratoren können diese verschicken).', - 'info_gauche_numero_auteur' => 'AUTOR NUMMER', 'info_gauche_statistiques_referers' => 'Diese Seite zeigt Ihnen REFERER, d.h. Webadressen mit Links zu Ihrer Website. Angezeigt werden nur Links von gestern und heute, diese Liste wird alle 24 Stunden auf Null gesetzt.', 'info_gauche_visiteurs_enregistres' => 'Hier sehen Sie die im öffentlichen Bereich der Website angemeldeten Besucher (Teilnahme an Foren nur mit gültiger E-Mail Adresse).', 'info_generation_miniatures_images' => 'Anlegen der Vorschaubilder', - 'info_gerer_trad' => 'Übersetzungslinks verwalten?', 'info_gerer_trad_objets' => '@objets@: Übersetzungslinks verwalten', 'info_hebergeur_desactiver_envoi_email' => 'Manche ISPs verhindern den Versand von Mails mit PHP. Die Mailfunktionen von SPIP funktionieren dann nicht.', 'info_hier' => 'Gestern:', - 'info_historique_activer' => 'Versionskontrolle aktivieren', - 'info_historique_affiche' => 'Version anzeigen', - 'info_historique_comparaison' => 'Vergleich', - 'info_historique_desactiver' => 'Versionskontrolle abschalten', - 'info_historique_texte' => 'Die Versionskontrolle ermöglicht es, alle Änderungen an einem Artikel aufzuzeichnen und die Unterschiede zwischen aufeinander folgenden Versionen anzuzeigen.', 'info_identification_publique' => 'Ihre öffentliche Identität ...', 'info_image_process' => 'Bitte wählen Sie das beste Verfahren zum Generieren der Miniaturbilder, indem Sie auf ein Bild klicken.', 'info_image_process2' => 'Wenn kein Bild angezeigt wird, ist der Server ihrer Website nicht für die Verwendung solcher Werkzeuge eingerichtet. Wenn Sie diese Funktionen nutzen möchten, wenden Sie sich bitte an den verantwortlichen Techniker und bitten ihn, die Erweiterungen «GD» oder «Imagick» einzurichten.', 'info_images_auto' => 'automatisch berechnete Bilder', 'info_informations_personnelles' => 'Persönliche Informationen', + 'info_inscription' => 'Angemeldet am', 'info_inscription_automatique' => 'Automatische Anmeldung neuer Redakteure', 'info_jeu_caractere' => 'Zeichensatz der Website', 'info_jours' => 'Tage', @@ -384,8 +331,6 @@ Ihr Status wird durch die Farbe ihres Symbols angezeigt (Redakteur = gelb; Admin 'info_logos' => 'Die Logos', 'info_maximum' => 'Maximum:', 'info_meme_rubrique' => 'In der gleichen Rubrik', - 'info_message' => 'Nachricht vom ', - 'info_message_efface' => 'NACHRICHT GELÖSCHT', 'info_message_en_redaction' => 'IHRE NACHRICHTEN IN BEARBEITUNG', 'info_message_technique' => 'Technische Nachricht:', 'info_messagerie_interne' => 'Interne Nachrichten', @@ -396,29 +341,22 @@ Ihr Status wird durch die Farbe ihres Symbols angezeigt (Redakteur = gelb; Admin 'info_modifier_rubrique' => 'Rubrik bearbeiten:', 'info_modifier_titre' => 'Bearbeiten: @titre@', 'info_mon_site_spip' => 'Meine SPIP-Site', - 'info_mot_sans_groupe' => '(Ohne Kategorie...)', - 'info_moteur_recherche' => 'Integrierte Suchfunktion', 'info_moyenne' => 'Durchschnitt: ', - 'info_multi_articles' => 'Sprachauswahl für Artikel aktivieren?', 'info_multi_cet_article' => 'Dieser Artikel ist auf: ', 'info_multi_langues_choisies' => 'Bitte wählen Sie hier die Sprachen aus, die den Redakteuren Ihrer Website zur Verfügung stehen sollen. Die Sprachen, welche bereits in Ihrer Website verwendet werden (oben auf der Liste), können nicht abgeschaltet werden.', 'info_multi_objets' => '@objets@: Sprachauswahlmenü aktivieren', - 'info_multi_rubriques' => 'Sprachauswahl für Rubriken aktivieren?', 'info_multi_secteurs' => '... nur für Rubriken der obersten Ebene?', 'info_nb_articles' => '@nb@ Artikel', - 'info_nb_articles_syndiques' => '@nb@ syndizierte Artikel', 'info_nb_auteurs' => '@nb@ Autoren', 'info_nb_messages' => '@nb@ Nachrichten', 'info_nb_mots_cles' => '@nb@ Schlagworte', 'info_nb_rubriques' => '@nb@ Rubriken', - 'info_nb_sites' => '@nb@ Websites', 'info_nb_visiteurs' => '@nb@ Besucher', 'info_nom' => 'Name', 'info_nom_destinataire' => 'Name des Empfängers', 'info_nom_pas_conforme' => 'HTNL-Tags sind nicht zugelassen.', 'info_nom_site' => 'Name Ihrer Website', 'info_nombre_articles' => '@nb_articles@ Artikel,', - 'info_nombre_partcipants' => 'TEILNEHMER DER DISKUSSION:', 'info_nombre_rubriques' => '@nb_rubriques@ Rubriken, ', 'info_nombre_sites' => '@nb_sites@ Websites, ', 'info_non_deplacer' => 'Bitte nicht verschieben...', @@ -426,19 +364,14 @@ Ihr Status wird durch die Farbe ihres Symbols angezeigt (Redakteur = gelb; Admin 'info_non_envoi_liste_nouveautes' => 'Keine Liste der Neuigkeiten verschicken.', 'info_non_modifiable' => 'kann nicht geändert werden.', 'info_non_suppression_mot_cle' => 'ich möchte dieses Schlagwort nicht löschen.', - 'info_note_numero' => 'Notiz @numero@', 'info_notes' => 'Anmerkungen', # Fußnoten bzw. #NOTES werden besser als "Anmerkungen" denn als "Notizen" bezeichnet. - 'info_nouveaux_message' => 'Neue Nachrichten', 'info_nouvel_article' => 'Neuer Artikel', 'info_nouvelle_traduction' => 'Neue Übersetzung:', 'info_numero_article' => 'ARTIKEL NUMMER:', 'info_obligatoire_02' => ' (Erforderlich)', 'info_option_accepter_visiteurs' => 'Besucher dürfen sich als Leser der Website anmelden.', - 'info_option_faire_suivre' => 'Forumsbeiträge an Autoren der Artikel schicken.', 'info_option_ne_pas_accepter_visiteurs' => 'Anmeldung von Lesern verhindern', 'info_options_avancees' => 'SPEZIALFUNKTIONEN', - 'info_ortho_activer' => 'Rechtschreibprüfung aktivieren', - 'info_ortho_desactiver' => 'Rechtschreibprüfung abschalten', 'info_ou' => 'oder ... ', 'info_page_interdite' => 'Seite gesperrt', 'info_par_nom' => 'nach Namen', @@ -448,20 +381,14 @@ Ihr Status wird durch die Farbe ihres Symbols angezeigt (Redakteur = gelb; Admin 'info_passe_trop_court' => 'Passwort zu kurz.', 'info_passe_trop_court_car_pluriel' => 'Das Passwort muss mindestens @nb@ Zeichen haben.', 'info_passes_identiques' => 'Die zwei Passworte stimmen nicht überein.', - 'info_pense_bete_ancien' => 'Ihre alten Merkzettel', 'info_plus_cinq_car' => 'mehr als 5 Zeichen', 'info_plus_cinq_car_2' => '(mehr als 5 Zeichen)', 'info_plus_trois_car' => '(mehr als 3 Zeichen)', 'info_popularite' => 'Beliebtheit: @popularite@ ; Besuche: @visites@', - 'info_popularite_4' => 'Beliebtheit: @popularite@ ; Besuche: @visites@', 'info_post_scriptum' => 'Post-Scriptum', 'info_post_scriptum_2' => 'Post-scriptum:', 'info_pour' => 'für', - 'info_preview_admin' => 'Nur Administratoren können die Vorschau nutzen', - 'info_preview_comite' => 'Alle Redakteure können die Vorschau nutzen', - 'info_preview_desactive' => 'Vorschau deaktiviert', - 'info_preview_texte' => 'Man kann sich die Website so anzeigen lassen, als ob alle Artikel veröffentlicht wären, die mindestens den Status « vorgeschlagen » haben. Wem soll diese Möglichkeit zur Verfügung stehen (Adminsitratoren, Redakteure, niemand)?', - 'info_principaux_correspondants' => 'Ihre wichtigsten Korrespondezpartner', + 'info_preview_texte' => 'Man kann sich alle Elemente der Website so anzeigen lassen, als ob sie veröffentlicht wären, vorausgesetzt sie haben mindestens den Status « vorgeschlagen » oder man ist ihr Autor . Wem soll diese Möglichkeit zur Verfügung stehen (Adminsitratoren, Redakteure, niemand)?', 'info_procedez_par_etape' => 'gehen Sie Schritt für Schritt vor', 'info_procedure_maj_version' => 'Sie müssen die Update-Funktion starten, um Ihre Datenbank an die neue Version von SPIP anzupassen.', 'info_proxy_ok' => 'Proxytest erfolgreich.', @@ -476,13 +403,9 @@ Ihr Status wird durch die Farbe ihres Symbols angezeigt (Redakteur = gelb; Admin eine E-Mail mit ihren Zugangsdaten. Manche Webhoster unterbinden den Mailversand von ihren Webservern aus. In diesem Fall funktioniert die automatische Anmeldung nicht.', - 'info_question_utilisation_moteur_recherche' => 'Wollen Sie die integrierte Suchfunktion von SPIP verwenden? (ohne Suchfunktion wird Ihr System schneller.)', - 'info_question_vignettes_referer_non' => 'Keine Thumbnails der Herkunftswebsites anzeigen', 'info_qui_edite' => '@nom_auteur_modif@ hat vor @date_diff@ Minuten an diesem Objekt gearbeitet.', 'info_racine_site' => 'OBERSTE EBENE DER WEBSITE', 'info_recharger_page' => 'Bitte laden Sie diese Seite in ein paar Augenblicken erneut.', - 'info_recherche_auteur_a_affiner' => 'Zu viele Fundstellen für R20;@cherche_auteur@R21; - bitte grenzen Sie die Suche ein.', - 'info_recherche_auteur_ok' => 'Zu „@cherche_auteur@“ wurde mehrere Autoren gefunden:', 'info_recherche_auteur_zero' => 'Dem Kriterium “@cherche_auteur@” entspricht kein Autor.', 'info_recommencer' => 'Bitte wiederholen.', 'info_redacteur_1' => 'Redakteur', @@ -491,6 +414,7 @@ Ihr Status wird durch die Farbe ihres Symbols angezeigt (Redakteur = gelb; Admin 'info_redaction_en_cours' => 'IN BEARBEITUNG', 'info_redirection' => 'Umleitung', 'info_redirection_activee' => 'Die Weiterleitung ist aktiviert.', + 'info_redirection_boucle' => 'Sie versuchen, den Artikel mit sich selber zu verlinken.', 'info_redirection_desactivee' => 'Die Weiterleitung wurde abgeschaltet.', 'info_refuses' => 'Ihre abgelehnten Artikel', 'info_reglage_ldap' => 'Optionen: LDAP-Import Einstellungen', @@ -501,7 +425,6 @@ Ihr Status wird durch die Farbe ihres Symbols angezeigt (Redakteur = gelb; Admin 'info_rubriques' => 'Rubriken', 'info_rubriques_02' => 'Rubriken', 'info_rubriques_trouvees' => 'Rubriken gefunden', - 'info_rubriques_trouvees_dans_texte' => 'Rubriken gefunden (im Text)', 'info_sans_titre' => 'Ohne Titel', 'info_selection_chemin_acces' => 'Wählen Sie hier den Pfad zu Ihrem Verzeichnis:', 'info_signatures' => 'Unterschriften', @@ -514,14 +437,12 @@ Ihr Status wird durch die Farbe ihres Symbols angezeigt (Redakteur = gelb; Admin 'info_sites_lies_mot' => 'Mit dieser Website verknüpfte Schlagworte', 'info_sites_proxy' => 'HTTP-Proxy verwenden', 'info_sites_trouves' => 'Gefundene Websites', - 'info_sites_trouves_dans_texte' => 'Gefundene Websites (im Text)', 'info_sous_titre' => 'Untertitel:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Status des Autors:', 'info_statut_auteur_2' => 'Ich bin', 'info_statut_auteur_a_confirmer' => 'Anmeldung bestätigen', 'info_statut_auteur_autre' => 'Anderer Status:', - 'info_statut_efface' => 'Gelöscht', 'info_statut_redacteur' => 'Redakteur', 'info_statut_utilisateurs_1' => 'Vorgegebener Status der importierten Benutzer', 'info_statut_utilisateurs_2' => 'Wählen Sie den Status, der Personen im LDAP-Verzeichnis zugeordnet wird, wenn sie sich zum ersten Mal anmelden. Sie können diesen Wert später für jeden Autor individuell einstellen.', @@ -544,7 +465,6 @@ Ihr Status wird durch die Farbe ihres Symbols angezeigt (Redakteur = gelb; Admin 'info_tous_articles_presents' => 'Alle veröffentlichten Artikel dieser Rubrik', 'info_tous_articles_refuses' => 'Alle abgelehnten Artikel', 'info_tous_les' => 'alle', - 'info_tous_redacteurs' => 'Ankündigung für alle Redakteure', 'info_tout_site' => 'Ganze Website', 'info_tout_site2' => 'Der Artikel wurde nicht in diese Sprache übersetzt.', 'info_tout_site3' => 'Der Artikel wurde in diese Sprache übersetzt, aber der Originalartikel wurde erneut verändert. Die Übersetzung muss überarbeitet werden.', @@ -561,7 +481,8 @@ in einer Farbe, die den Status anzeigt :', 'info_une_rubrique_02' => '1 Rubrik', 'info_url' => 'URL:', 'info_url_proxy' => 'URL des Proxy', - 'info_url_site' => 'URL DER WEBSITE:', + 'info_url_proxy_pas_conforme' => 'ungültige Proxy-URL', + 'info_url_site_pas_conforme' => 'Ungültiger Website-URL', 'info_url_test_proxy' => 'Test-URL', 'info_urlref' => 'Hyperlink:', 'info_utilisation_spip' => 'Sie können SPIP jetzt verwenden ...', @@ -572,7 +493,6 @@ in einer Farbe, die den Status anzeigt :', 'info_visiteurs_02' => 'Besucher des öffentlichen Bereichs', 'info_webmestre_forces' => 'Die Webmaster sind in der Datei @file_options@ konfiguriert.', 'install_adresse_base_hebergeur' => 'Adresse der vom Provider zugewiesenen Datenbank', - 'install_base_ok' => 'Die Datenbank @base@ wurde erkannt', 'install_connect_ok' => 'Die neue Datenbank wurde unter dem Namen @connect@ deklariert.', 'install_echec_annonce' => 'Die Installation wird wahrscheinlich fehlschlagen oder eine nicht funktionierende Site ergeben.', 'install_extension_mbstring' => 'SPIP funktioniert nicht mit:', @@ -585,7 +505,6 @@ in einer Farbe, die den Status anzeigt :', 'install_select_langue' => 'Wählen Sie eine Sprache aus und klicken Sie auf «Weiter», um die Installation zu starten.', 'install_select_type_db' => 'Geben Sie den Typ der Datenbank an:', 'install_select_type_mysql' => 'MySQL', - 'install_select_type_mysqli' => 'MySQLi', 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', @@ -602,8 +521,6 @@ in einer Farbe, die den Status anzeigt :', 'item_activer_messages_avertissement' => 'Aktuelle Benachrichtigungen einschalten', 'item_administrateur_2' => 'Administrator', 'item_afficher_calendrier' => 'Im Kalender anzeigen', - 'item_autoriser_documents_joints' => 'Dokumente zu Artikeln erlauben', - 'item_autoriser_documents_joints_rubriques' => 'Dokumente zu Rubriken erlauben', 'item_autoriser_syndication_integrale' => 'Vollständige Artikel im Feed übertragen', 'item_choix_administrateurs' => 'Administratoren', 'item_choix_generation_miniature' => 'Vorschaubilder automatisch generieren.', @@ -611,7 +528,6 @@ in einer Farbe, die den Status anzeigt :', 'item_choix_redacteurs' => 'Redakteure', 'item_choix_visiteurs' => 'Besucher im öffentlichen Bereich', 'item_creer_fichiers_authent' => '.htpasswd-Dateien anlegen', - 'item_limiter_recherche' => 'Suche auf eigene Website begrenzen', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Nachrichtenfunktion des Kalenders aktivieren', 'item_mots_cles_association_articles' => 'Artikeln zuordnen', @@ -621,22 +537,15 @@ in einer Farbe, die den Status anzeigt :', 'item_non_accepter_inscriptions' => 'Anmeldungen verhindern', 'item_non_activer_messages_avertissement' => 'Keine aktuellen Benachrichtigungen', 'item_non_afficher_calendrier' => 'Nicht im Kalender anzeigen', - 'item_non_autoriser_documents_joints' => 'Zuordnung von Dokumenten zu Artikeln abschalten', - 'item_non_autoriser_documents_joints_rubriques' => 'Verwendung von Dokumenten in Rubriken abschalten', 'item_non_autoriser_syndication_integrale' => 'Nur Zusammenfassung übertragen', - 'item_non_compresseur' => 'Kompression abschalten', 'item_non_creer_fichiers_authent' => 'Diese Dateien nicht anlegen', - 'item_non_gerer_statistiques' => 'Keine Statistiken anlegen', - 'item_non_limiter_recherche' => 'Inhalt verlinkter Websites in die Suchmaschine aufnehmen', 'item_non_messagerie_agenda' => 'Nachrichtenfunktion des Kalenders abschalten', 'item_non_publier_articles' => 'Artikel nicht vor dem eingestellten Datum veröffentlichen.', - 'item_non_utiliser_moteur_recherche' => 'Suchmaschine nicht verwenden.', 'item_nouvel_auteur' => 'Neuer Autor', 'item_nouvelle_rubrique' => 'Neue Rubrik', 'item_oui' => 'Ja', 'item_publier_articles' => 'Sofort veröffentlichen, egal welches Datum ein Artikel trägt. ', 'item_reponse_article' => 'Antwort auf Artikel', - 'item_utiliser_moteur_recherche' => 'Suchmaschine verwenden', 'item_version_html_max_html4' => 'Im öffentlichen bereich nur HTML4 verwenden', 'item_version_html_max_html5' => 'HTML5 erlauben', 'item_visiteur' => 'Besucher', @@ -657,19 +566,19 @@ in einer Farbe, die den Status anzeigt :', 'ldap_correspondance' => 'Vererbung von Feld @champ@', 'ldap_correspondance_1' => 'Vererbung des LDAP Felds', 'ldap_correspondance_2' => 'Geben sie bitte für jedes der folgenden SPIP-Felder das entsprechende LDAP-Feld an. Leere Felder werden nicht genutzt, LDAP-Felder mit Leerzeichen oder Kommata trennen, um mehrere zu probieren. ', - 'lien_ajout_destinataire' => 'Empfänger hinzufügen', 'lien_ajouter_auteur' => 'Autor hinzufügen', - 'lien_ajouter_participant' => 'Teilnehmer hinzufügen', 'lien_ajouter_une_rubrique' => 'Diese Rubrik hinzufügen', 'lien_email' => 'E-Mail', 'lien_nom_site' => 'NAME DER WEBSITE:', + 'lien_rapide_contenu' => 'zum Inhalt', + 'lien_rapide_navigation' => 'zur Navigation', + 'lien_rapide_recherche' => 'zur Suche', 'lien_retirer_auteur' => 'Autor entfernen', 'lien_retirer_rubrique' => 'Rubrik entfernen', 'lien_retirer_tous_auteurs' => 'Alle Autoren entfernen', 'lien_retirer_toutes_rubriques' => 'Alle Rubriken entfernen ', - 'lien_retrait_particpant' => 'Teilnehmer entfernen', 'lien_site' => 'Website', - 'lien_supprimer_rubrique' => 'Rubrik löschen', + 'lien_tout_decocher' => 'Alles abwählen', 'lien_tout_deplier' => 'Alle anzeigen', 'lien_tout_replier' => 'Alle ausblenden', 'lien_tout_supprimer' => 'Alles löschen', @@ -695,12 +604,12 @@ in einer Farbe, die den Status anzeigt :', // N 'nouvelle_version_spip' => 'SPIP Version @version@ ist verfügbar.', + 'nouvelle_version_spip_majeure' => 'Eine neue SPIP Version @version@ steht zur Verfügung.', // O 'onglet_contenu' => 'Inhalt', 'onglet_declarer_une_autre_base' => 'Weitere Datenbank deklarieren', 'onglet_discuter' => 'Diskussionen', - 'onglet_documents' => 'Dokumente', 'onglet_interactivite' => 'Interaktivität', 'onglet_proprietes' => 'Eigenschaften', 'onglet_repartition_actuelle' => 'zur Zeit', @@ -709,6 +618,7 @@ in einer Farbe, die den Status anzeigt :', // P 'page_pas_proxy' => 'Diese Seite darf nicht durch den Proxy übertragen werden.', 'pas_de_proxy_pour' => 'Falls erforderlich, könne Sie die Rechner und Domainen angeben, die nicht über den Proxy angesprochen werden (z.B. @exemple@)', + 'phpinfo' => 'PHP-Konfiguration', 'plugin_charge_paquet' => 'Paket @name@ wird geladen', 'plugin_charger' => 'Übertragen', 'plugin_erreur_charger' => 'Fehler: @zip@ kann nicht geladen werden', @@ -743,8 +653,11 @@ in einer Farbe, die den Status anzeigt :', 'plugin_info_telecharger' => 'herunterladen von @url@ und in @rep@ installieren', 'plugin_info_upgrade_ok' => 'Upgrade erfolgreich', 'plugin_librairies_installees' => 'Installierte Bibliotheken', + 'plugin_necessite_extension_php' => 'benötigt die PHP-Erweiterung @plugin@ Version @version@.', + 'plugin_necessite_extension_php_sans_version' => 'benötigt die PHP-Erweiterung @plugin@', 'plugin_necessite_lib' => 'Dieses Plugin benötigt die Bibliothek @lib@', - 'plugin_necessite_plugin' => 'Benötigt mindestens Version @version@ des Plugin @plugin@.', + 'plugin_necessite_php' => 'benötigt @plugin@ Version @version@.', + 'plugin_necessite_plugin' => 'Benötigt Version @version@ des Plugin @plugin@.', 'plugin_necessite_plugin_sans_version' => 'Benötigt das Plugin @plugin@', 'plugin_necessite_spip' => 'Benötigt mindestens Version @version@ von SPIP.', 'plugin_source' => 'Quelle: ', @@ -752,6 +665,9 @@ in einer Farbe, die den Status anzeigt :', 'plugin_titre_automatique_ajouter' => 'Plugins hinzufügen', 'plugin_titre_installation' => 'Installation des Plugins @plugin@', 'plugin_titre_modifier' => 'Meine Plugins', + 'plugin_utilise_extension_php' => 'verwendet die PHP-Erweiterung @plugin@ Version @version@.', + 'plugin_utilise_php' => 'verwendet @plugin@ Version @version@.', + 'plugin_utilise_plugin' => 'Verwendet das Plugin @plugin@ in der Version @version@.', 'plugin_zip_active' => 'Weiter zum Aktivieren', 'plugin_zip_adresse' => 'Geben Sie hier die Adresse einer ZIP-Datei, die das Plugin enthält, oder die Adresse einer Plugin-Liste an.', 'plugin_zip_adresse_champ' => 'Adresse des Plugins oder der Liste ', @@ -788,6 +704,7 @@ in einer Farbe, die den Status anzeigt :', // R 'repertoire_plugins' => 'Verzeichnis:', + 'required' => ' (Erforderlich)', // S 'sans_heure' => 'Ohne Zeit', @@ -797,7 +714,7 @@ in einer Farbe, die den Status anzeigt :', // T 'tache_cron_asap' => 'Cronjob @function@ (unverzüglich)', 'tache_cron_secondes' => 'Cronjob @function@ (alle @nb@ Sekunden)', - 'taille_cache_image' => 'Dei von SPIP automatisch berechneten Grafiken (Icons für Dokumente, als Grafiken gespeicherte Titel, mathematische Ausdrücke im Format TeX...) belegen insgesamt @taille@ im Verzeichnis @dir@.', + 'taille_cache_image' => 'Die von SPIP automatisch berechneten Grafiken (Icons für Dokumente, als Grafiken gespeicherte Titel, mathematische Ausdrücke im Format TeX...) belegen insgesamt @taille@ im Verzeichnis @dir@.', 'taille_cache_infinie' => 'Die Grösse des CACHE/ dieser Website wird nicht begrenzt.', 'taille_cache_maxi' => 'SPIP versucht die Grösse des CACHE/ der Website auf ca. @octets@ Byte zu begrenzen.', 'taille_cache_moins_de' => 'Die Größe des Caches beträgt mindestens @octets@.', @@ -815,16 +732,13 @@ in einer Farbe, die den Status anzeigt :', 'texte_article_virtuel_reference' => 'Virtueller Artikel: Dieser Artikel ist Teil Ihrer Website, leitet Besucher aber zu einer anderen URL um. Sie können die Umleitung abschalten, indem Sie den URL oben löschen.', 'texte_aucun_resultat_auteur' => 'Kein Ergebnis für “@cherche_auteur@”', 'texte_auteur_messagerie' => 'Die Website kann Ihnen eine Liste aktuell eingelogter Redakteure anzeigen, so dass Sie sofort miteinander in Kontakt treten können (Wenn das Nachrichtensystem abgeschaltet ist, gibt es auch keine Liste angemeldeter Redakteure). Sie haben die Möglichkeit, nicht in diese Liste aufgenommen zu werden (damit sind Sie für andere Benutzer "unsichtbar").', - 'texte_auteur_messagerie_1' => 'Diese Webbsite ermöglicht den Austausch interner Nachrichten und das Anlegen von Foren für Diskussionen zwischen Teilnehmern der Site. Sie können Ihre Teilnahme daran abschalten.', 'texte_auteurs' => 'AUTOREN', 'texte_choix_base_1' => 'Wählen Sie die Datenbank:', 'texte_choix_base_2' => 'Der SQL-Server enthält mehrere Datenbanken.', 'texte_choix_base_3' => 'Wählen Sie die von Ihrem Webhoster für Sie angelegte aus:', 'texte_choix_table_prefix' => 'Prefix der Tabellen:', - 'texte_commande_vider_tables_indexation' => 'Verwenden Sie diese Funktion, um die Tabellen der integrierten Suchmaschine zu löschen. Damit sparen Sie Speicherplatz.', 'texte_compatibilite_html' => 'Sie können SPIP so einstellen, daß die öffentlichen Seiten in HTML4 erstellt werden, oder in HTML5 mit seinen erweiterten Leistungsmerkmalen.', 'texte_compatibilite_html_attention' => 'Die Aktivierung von HTML5 ist völlig ungefährlich, nur müssen ihre Seiten dann mit der folgenden Zeile beginnen, um der HTML-Norm zu entsprechen: <!DOCTYPE html>.', - 'texte_compresse_ou_non' => '(kann komprimiert oder unkomprimiert sein)', 'texte_compte_element' => '@count@ Element', 'texte_compte_elements' => '@count@ Elemente', 'texte_conflit_edition_correction' => 'Bitte überprüfen sie hier die Unterschiede zwischen zwei Versionen des Textes. Sie können Ihre Änderungen kopieren und neu eingeben.', @@ -839,36 +753,28 @@ in einer Farbe, die den Status anzeigt :', 'texte_date_publication_anterieure_nonaffichee' => 'Kein Datum einer früheren Bearbeitung anzeigen.', 'texte_date_publication_article' => 'ONLINE VERÖFFENTLICHT AM:', 'texte_date_publication_objet' => 'Veröffentlichungsdatum:', - 'texte_descriptif_petition' => 'Beschreibung der Petition', + 'texte_definir_comme_traduction_rubrique' => 'Diese Rubrik ist eine Übersetzung der Rubik mit der Nummer', 'texte_descriptif_rapide' => 'Kurzbeschreibung', 'texte_effacer_base' => 'SPIP-Datenbank löschen', - 'texte_effacer_donnees_indexation' => 'Indexe löschen', 'texte_effacer_statistiques' => 'Statistiken löschen', 'texte_en_cours_validation' => 'Die folgenden Einträge sind zur Veröffentlichung vorgeschlagen.', 'texte_enrichir_mise_a_jour' => 'Sie können Ihren Text ansprechend gestalten, indem Sie die „typografischen Abkürzungen“ verwenden.', 'texte_fichier_authent' => 'Soll SPIP die Dateien .htpasswd und .htpasswd-admin im Verzeichnis @dossier@ anlegen?

    - Mit diesen Dateien können Sie den Zugang zu anderen Bereichen Ihrer Website (z.B. externe Logfile-Auswertungen) auf Redakteure und Administratoren beschränken.

    Wenn Sie diese Möglickeit nicht nutzen, könnn Sie hier die Grundeinstellung (Dateien werden nicht angelegt) beibehalten.

    ', # MODIF + Mit diesen Dateien können Sie den Zugang zu anderen Bereichen Ihrer Website (z.B. externe Logfile-Auswertungen) auf Redakteure und Administratoren beschränken.

    Wenn Sie diese Möglickeit nicht nutzen, könnn Sie hier die Grundeinstellung (Dateien werden nicht angelegt) beibehalten.

    ', 'texte_informations_personnelles_1' => 'Das System wird nun persönliche Zugangsdaten für Sie anlegen.', 'texte_informations_personnelles_2' => '(Hinweis: Wenn Sie die Site erneut installieren, und Ihre Zugangsdaten funktionieren, können Sie', 'texte_introductif_article' => '(Einleitender Text des Artikels.)', 'texte_jeu_caractere' => 'Es empfiehlt sich, das Universalalphabet (utf-8) für ihre Website zu verwenden. Es ermöglicht die Darstellung der Zeichen aller Sprachen und wird nunmehr von allen modernen Webbrowsern unterstützt.', - 'texte_jeu_caractere_2' => 'Achtung: Diese Einstellung bewirkt keine Konvertierung der bereits gespeicherten Texte.', 'texte_jeu_caractere_3' => 'Ihre Website verwendet zur Zeit den Zeichensatz:', 'texte_jeu_caractere_4' => 'Wenn das nicht mit den Erfordernissen ihrer Daten übereinstimmt (z.B. nach der Wiederherstellung einer Datensicherung), oder wenn sie die Website neu einrichten und einen anderen Zeichernsatz verwenden möchten, stellen sie ihn bitte hier ein:', - 'texte_jeu_caractere_conversion' => 'Anmerkung: Wenn sie die texte Ihrer Website endgültig nach utf-8 umstellen möchten, verwenden sie bitte die Seite zur Konvertierung nach utf-8.', - 'texte_lien_hypertexte' => '(Wenn sich Ihr Beitrag auf einen Artikel im WWW bezieht oder es eine Seite mit Zusatzinformationen gibt, geben Sie bitte die Bezeichnung der Seite und ihren URL an.)', 'texte_login_ldap_1' => '(Keine Angabe bzw. vollständiger Pfad, z.B. „uid=meier, ou=mitglieder, dc=MeineDomäne, dc=com“.)', 'texte_login_precaution' => 'Achtung! Sie sind zur Zeit mit diesem Namen angemeldet. Bitte verwenden Sie diese Seite mit der erforderlichen Vorsicht.', - 'texte_message_edit' => 'Achtung! Diese Nachricht kann von allen Administratoren der Website bearbeitet werden und ist für alle Redakteure sichtbar. Verwenden Sie Ankündigungen nur für wichtige Ereignisse, die alle Teilnehmer kennen müssen.', 'texte_messagerie_agenda' => 'Mit dem Nachrichtensystem können Redakteure im Redaktionsbereich direkt miteinander kommunizieren. Es ist mit einem Kalender verbunden.', 'texte_mise_a_niveau_base_1' => 'Sie haben den Programmcode von SPIP aktualisiert. Jetzt muss die Datenbank aktualisiert werden.', 'texte_modifier_article' => 'Artikel bearbeiten:', - 'texte_moteur_recherche_active' => 'Die integrierte Suchmaschine ist eingeschaltet. Damit können Sie eine erneute Erfassung aller Seiten erzwingen, wenn Sie z.B. wesentliche Änderungen am Inhalt und Layout Ihrer Site gemacht haben oder eine Sicherungskopie eingespielt haben. Dokumente, die im SPIP Redaktionssystem eingegeben werden, erfasst die Suchmaschine automatisch. Sie benötigen diese Funktion deshalb nur in Ausnahmefällen.', - 'texte_moteur_recherche_non_active' => 'Suchmaschine ist abgeschaltet.', 'texte_multilinguisme' => 'Wenn Sie Artikel in mehreren Sprachen mit entsprecher komplexer Navigation verwalten möchten, können Sie den Rubriken und/oder den Artikeln ein Menü zur Sprachauswahl hinzufügen. Diese Funktion ist abhängig von der Struktur Ihrer Website.', 'texte_multilinguisme_trad' => 'Sie können ein System zur automatischen Verlinkung der verschiedenen Sprachversionen von Objekten aktivieren.', 'texte_non_compresse' => 'unkomprimiert (ihr Server unterstützt diese Funktion nicht)', - 'texte_nouveau_message' => 'Neue Nachricht', 'texte_nouvelle_version_spip_1' => 'Sie haben eine neue Version von SPIP installiert.', 'texte_nouvelle_version_spip_2' => 'Diese neue Version erfordert eine weiter gehende Aktualisierung Ihres Systems als gewöhnlich. Wenn Sie Webmaster dieser Site sind, löschen Sie bitte die Datei @connect@ und setzen Sie die Installation fort, indem Sie die Verbindungsdaten zur Datenbank neu eingeben.

    (Tipp: Sollten Sie Ihre Verbindungsdaten vergessen haben, schauen Sie in der Datei @connect@ nach, bevor Sie sie löschen ...)

    ', 'texte_operation_echec' => 'Gehen Sie zur vorigen Seite zurück und wählen Sie eine andere Datenbank aus bzw. legen Sie eine neue an. Überprüfen Sie die Angaben Ihres Providers.', @@ -885,7 +791,6 @@ Meistens kann dieses Feld aber leer bleiben.', 'texte_publication_articles_post_dates' => 'Wie soll SPIP Artikel behandeln, deren Erscheinungsdatum in die Zukunft gelegt wurde?', 'texte_rappel_selection_champs' => '[Vergessen Sie nicht, dieses Feld korrekt auszufüllen.]', 'texte_recalcul_page' => 'Wenn Sie nur eine einzelne Seite aktualisieren wollen, verwenden Sie besser den Schalter „Seite aus Cache löschen“.', - 'texte_recapitiule_liste_documents' => 'Diese Seite enthält eine Liste der Dokumente, die Sie in Rubriken eingeordnet haben. Um die Angaben zu den Dokumenten zu bearbeiten, benutzen Sie bitte den Link zur jeweiligen Rubrik.', 'texte_recuperer_base' => 'Datenbank reparieren', 'texte_reference_mais_redirige' => 'Artikel Ihrer Website, der eine Umleitung zu einem anderen URL enthält.', 'texte_requetes_echouent' => 'Wenn manche SQL-Befehle ohne ersichtlichen Grund systematisch fehlschlagen, kann es an einer beschädigten Datenbank liegen.

    @@ -904,7 +809,6 @@ Wenn das Problem weiter besteht, nehmen Sie bitte Kontakt mit Ihrem Provider auf 'texte_suppression_fichiers' => 'Benutzen Sie diesen Befehl, um alle Dateien aus dem Zwischenspeicher von SPIP zu löschen. Damit können Sie eine erneute Berechnung aller Seiten erzwingen, wenn Sie z.B. wesentliche Änderungen am Inhalt und Layout Ihrer Site gemacht haben. ', 'texte_sur_titre' => 'Einleitender Titel', 'texte_table_ok' => ': Tabelle OK.', - 'texte_tables_indexation_vides' => 'Indextabellen der Suchmaschine sind leer.', 'texte_tentative_recuperation' => 'Reparaturversuch', 'texte_tenter_reparation' => 'Reparatur der Datenbank versuchen', 'texte_test_proxy' => 'Um den Proxy zu testen, geben Sie hier die Adresse einer gewünschten Website ein.', @@ -912,21 +816,12 @@ Wenn das Problem weiter besteht, nehmen Sie bitte Kontakt mit Ihrem Provider auf 'texte_titre_obligatoire' => 'Titel [obligatorisch]', 'texte_travail_article' => '@nom_auteur_modif@ hat diesen Artikel vor @date_diff@ Minuten bearbeitet', 'texte_travail_collaboratif' => 'Wenn es öfter vorkommt, dass mehrere Redakteure gemeinsam an Artikeln arbeiten, kann SPIP die vor kurzem „geöffneten“ Artikel anzeigen, um gleichzeitige Änderungen vorzubeugen. Diese Funktion ist normalerweise abgeschaltet, um störende Meldungen zu reduzieren.', - 'texte_trop_resultats_auteurs' => 'Zu viele Ergebnisse für „@cherche_auteur@“. Bitte präzisieren Sie Ihre Suchanfrage.', - 'texte_unpack' => 'neue Version laden.', - 'texte_utilisation_moteur_syndiques' => 'Wenn Sie die Suchmaschine von SPIP einsetzen, - können Sie syndizierte Artikel und Websites auf zwei Arten behandeln.
    - Im einfachsten Fall werden nur Titel und Beschreibung der Artikel durchsucht.
    - - Die zweite, wesentlich leistungsfähigere Methode erlaubt es, auch den Text der - syndizierten Websites zu durchsuchen. Wenn Sie eine Website verlinken, erfasst SPIP vollautomatisch den Inhalt der Website selber. ', - 'texte_utilisation_moteur_syndiques_2' => 'Diese Methode zwingt SPIP, die verlinkten Websites in regelmässigen Abständen abzurufen, wodurch Ihre Website etwas langsamer werden kann.', 'texte_vide' => 'leer', 'texte_vider_cache' => 'Cache leeren', - 'titre_admin_effacer' => 'Wartung', 'titre_admin_tech' => 'Wartung', 'titre_admin_vider' => 'Wartung', 'titre_ajouter_un_auteur' => 'Autor hinzufügen', 'titre_ajouter_un_mot' => 'Schlagwort hinzufügen', - 'titre_ajouter_une_rubrique' => 'Eine Rubrik hinzufügen', 'titre_cadre_afficher_article' => 'Artikel anzeigen', 'titre_cadre_afficher_traductions' => 'Stand der Übersetzungen für diese Sprachen anzeigen', 'titre_cadre_ajouter_auteur' => 'AUTOR HINZUFÜGEN: ', @@ -941,6 +836,7 @@ Wenn das Problem weiter besteht, nehmen Sie bitte Kontakt mit Ihrem Provider auf 'titre_config_langage' => 'Sprache einstellen', 'titre_configuration' => 'Website konfigurieren', 'titre_configurer_preferences' => 'Ihre Einstellungen', + 'titre_configurer_preferences_menus' => 'Konfigurieren Sie Ihre Menüeinstellungen', 'titre_conflit_edition' => 'Bearbeitungskonflikt', 'titre_connexion_ldap' => 'Optionen: LDAP-Verbindung', 'titre_groupe_mots' => 'KATEGORIE:', @@ -953,54 +849,28 @@ Wenn das Problem weiter besteht, nehmen Sie bitte Kontakt mit Ihrem Provider auf 'titre_naviguer_dans_le_site' => 'Sitenavigation ...', 'titre_nouvelle_rubrique' => 'Neue Rubrik', 'titre_numero_rubrique' => 'RUBRIK NUMMER:', - 'titre_page_admin_effacer' => 'Wartung: Datenbank löschen', 'titre_page_articles_edit' => 'Bearbeiten: @titre@', 'titre_page_articles_page' => 'Artikel', 'titre_page_articles_tous' => 'Ganze Website', - 'titre_page_auteurs' => 'Besucher', 'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Website konfigurieren', - 'titre_page_config_fonctions' => 'Website konfigurieren', - 'titre_page_configuration' => 'Website konfigurieren', - 'titre_page_controle_petition' => 'Petitionen verwalten', 'titre_page_delete_all' => 'vollständig unwiderruflich löschen', - 'titre_page_documents_liste' => 'Dokumente in Rubriken', - 'titre_page_index' => 'Ihr Bereich', - 'titre_page_message_edit' => 'Nachricht verfassen', - 'titre_page_messagerie' => 'Ihr Nachrichtensystem', 'titre_page_recherche' => 'Ergebnisse der Suche nach @recherche@', 'titre_page_statistiques_referers' => 'Statistik (Referer)', - 'titre_page_statistiques_signatures_jour' => 'Unterschriften pro Tag', - 'titre_page_statistiques_signatures_mois' => 'Unterschriften pro Monat', 'titre_page_upgrade' => 'Aktualisierung von SPIP', + 'titre_preference_menus_favoris' => 'Lieblingsmenüs', 'titre_publication_articles_post_dates' => 'Veröffentlichung von vordatierten Artikeln', - 'titre_referencer_site' => 'Website verlinken:', - 'titre_rendez_vous' => 'TERMIN:', 'titre_reparation' => 'Reparatur', 'titre_suivi_petition' => 'Petitionen verwalten', 'tls_ldap' => 'Transport Layer Security:', - 'trad_article_inexistant' => 'Es gibt keinen Artikel mit dieser Nummer.', 'trad_article_traduction' => 'Alle Fassungen dieses Artikels:', - 'trad_deja_traduit' => 'Fehler: Dieser Artikel kann nicht mit der gewünschten Nummer verknüpft werden.', 'trad_delier' => 'Nicht mehr mit diesen Übersetzungen verbinden', 'trad_lier' => 'Dieser Artikel ist eine Übersetzung des Artikels Nummer ', 'trad_new' => 'Neue Übersetzung beginnen', // U - 'upload_info_mode_document' => 'Bild im Portfolio ablegen', - 'upload_info_mode_image' => 'Bild aus dem Portfolio entfernen', - 'utf8_convert_attendez' => 'Warten sie einen Augenblick und laden sie diese Seite erneut.', - 'utf8_convert_avertissement' => 'Sie werden ihre Datenbank (Artikel, Meldungen, etc.) vom Zeichensatz @orig@ nach @charset@ zu konvertieren.', - 'utf8_convert_backup' => 'Vergessen sie nicht, zunächst eine Sicherung ihrer Website anzulegen. Sie sollten ebenfalls überprüfen, ob ihre Skelette und Sprachdateien zum Zeichensatz @charset@ kompatibel sind.', - 'utf8_convert_erreur_deja' => 'Ihre website verwendet bereits den zeichensatz @charset@. Die Konvertierung ist überflüssig.', 'utf8_convert_erreur_orig' => 'Fehler: Der Zeichensatz @charset@ wird nicht unterstützt.', - 'utf8_convert_termine' => 'Fertig!', - 'utf8_convert_timeout' => 'Wichtig: Im Falle eines timeout des Servers, laden sie diese Seite so lange neu, bis «Fertig» angezeigt wird.', - 'utf8_convert_verifier' => 'Sie müssen nun den Cache leeren und das Verhalten ihrer öffentlich zugänglichen Seiten überprüfen. Falls es ernste Probleme damit geben sollte, steht ihnen eine Sicherungskopie ihrer Daten (im SQL-Format) im Verzeichnis @rep@ zur Verfügung.', - 'utf8_convertir_votre_site' => 'Website nach utf-8 konvertieren', // V 'version' => 'Version:' ); - -?> diff --git a/www/ecrire/lang/ecrire_en.php b/www/ecrire/lang/ecrire_en.php index 8b69318b..1ae6d905 100644 --- a/www/ecrire/lang/ecrire_en.php +++ b/www/ecrire/lang/ecrire_en.php @@ -1,9 +1,11 @@ 'Connection to the SQL server failed.', 'avis_connexion_echec_2' => 'Go back to the previous page, and verify the information you provided.', 'avis_connexion_echec_3' => 'N.B. On many servers, you must request activation of your access to the SQL database before you can use it. If you cannot connect to your database, check that activation has been done.', + 'avis_connexion_erreur_creer_base' => 'The database could not be created.', 'avis_connexion_erreur_nom_base' => 'The database name should contain letters, digits and hyphens only.', 'avis_connexion_ldap_echec_1' => 'Connection to the LDAP server failed.', 'avis_connexion_ldap_echec_2' => 'Go back to the previous page, and verify the information you provided.', 'avis_connexion_ldap_echec_3' => 'Alternatively, do not use LDAP support to import users.', 'avis_deplacement_rubrique' => 'Warning! This section contains @contient_breves@ news item@scb@: if you move it, please check this box to confirm.', - 'avis_destinataire_obligatoire' => 'To send a message, you must select a recipient.', 'avis_erreur_connexion_mysql' => 'SQL connection error', - 'avis_erreur_version_archive' => 'Warning! The file @archive@ was created by a version of SPIP other than the one you have installed. -You are likely to encounter serious problems, including destroying your database, or serious site malfunctions. -Do not submit this import request.

    For more information, please see the SPIP documentation.

    ', - 'avis_espace_interdit' => 'Forbidden area
    SPIP is already installed.
    ', + 'avis_espace_interdit' => 'Forbidden area
    SPIP is already installed.
    ', 'avis_lecture_noms_bases_1' => 'The installer could not read the names of any databases already installed.', 'avis_lecture_noms_bases_2' => 'Either no database is available, or the option for listing databases was disabled for security reasons (which is the case with a lot of hosting services).', 'avis_lecture_noms_bases_3' => 'In the second case, it is possible that a database named after your login would be usable:', - 'avis_non_acces_message' => 'You do not have access to this message.', 'avis_non_acces_page' => 'You do not have access to this page.', 'avis_operation_echec' => 'The operation failed.', 'avis_operation_impossible' => 'Operation impossible', - 'avis_probleme_archive' => 'Read error in file @archive@', 'avis_suppression_base' => 'WARNING: data deletion is irreversible', - 'avis_version_mysql' => 'Your version of SQL (@version_mysql@) does not allow autorepair of the database tables.', // B 'bouton_acces_ldap' => 'Add LDAP access', 'bouton_ajouter' => 'Add', - 'bouton_ajouter_participant' => 'ADD A PARTICIPANT:', - 'bouton_annonce' => 'ANNOUNCEMENT', 'bouton_annuler' => 'Cancel', 'bouton_cache_activer' => 'Re-activate the cache', 'bouton_cache_desactiver' => 'Disable the cache momentarily', - 'bouton_checkbox_envoi_message' => 'possibility of sending a message', - 'bouton_checkbox_indiquer_site' => 'You must enter the name of a Website', - 'bouton_checkbox_signature_unique_email' => 'only one signature per email address', - 'bouton_checkbox_signature_unique_site' => 'only one signature per website', 'bouton_demande_publication' => 'Request publication of this article', 'bouton_desactive_tout' => 'Disable all', 'bouton_desinstaller' => 'Uninstall', - 'bouton_effacer_index' => 'Delete indexing', 'bouton_effacer_tout' => 'Delete ALL', - 'bouton_envoi_message_02' => 'SEND A MESSAGE', 'bouton_envoyer_message' => 'Message complete: send', 'bouton_fermer' => 'Close', 'bouton_mettre_a_jour_base' => 'Update the database', 'bouton_modifier' => 'Modify', - 'bouton_pense_bete' => 'PERSONAL MEMO', - 'bouton_radio_activer_messagerie' => 'Enable internal messaging', - 'bouton_radio_activer_messagerie_interne' => 'Enable internal messaging', - 'bouton_radio_activer_petition' => 'Activate the petition', 'bouton_radio_afficher' => 'Show', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Appear in the list of editors online', - 'bouton_radio_desactiver_messagerie' => 'Disable messaging', 'bouton_radio_envoi_annonces_adresse' => 'Send announcements to:', 'bouton_radio_envoi_liste_nouveautes' => 'Send news update list', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Do not appear in the list of editors online', 'bouton_radio_non_envoi_annonces_editoriales' => 'Do not send any editorial announcements', - 'bouton_radio_pas_petition' => 'No petition', - 'bouton_radio_petition_activee' => 'Petition activated', - 'bouton_radio_supprimer_petition' => 'Delete the petition', 'bouton_redirection' => 'REDIRECT', + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Reset to default values', 'bouton_relancer_installation' => 'Recommence installation', + 'bouton_reset_password' => 'Create a new password and send by e-mail', 'bouton_suivant' => 'Next', 'bouton_tenter_recuperation' => 'Attempt to repair', 'bouton_test_proxy' => 'Test the proxy', 'bouton_vider_cache' => 'Empty the cache', - 'bouton_voir_message' => 'Preview message before validating', // C - 'cache_mode_compresse' => 'The cache files are saved in compressed mode.', - 'cache_mode_non_compresse' => 'The cache files are written in uncompressed mode.', 'cache_modifiable_webmestre' => 'This parameter can be modified by the webmaster.', 'calendrier_synchro' => 'If you use a calendar application compatible with iCal, you can synchronise it with information from this site.', 'config_activer_champs' => 'Activate the following fields', @@ -109,9 +88,7 @@ Do not submit this import request.

    For more information, please see 'Your login', 'entree_login_connexion_1' => 'Connection login', 'entree_login_connexion_2' => '(Sometimes matches your FTP account login and sometimes left empty)', - 'entree_login_ldap' => 'Initial LDAP login', 'entree_mot_passe' => 'Your password', 'entree_mot_passe_1' => 'Password', 'entree_mot_passe_2' => '(Sometimes matches your FTP access password and sometimes left empty)', @@ -159,7 +135,10 @@ Do not submit this import request.

    For more information, please see 'Configuration', 'icone_creer_auteur' => 'Create a new author and associate him/her with this article', 'icone_creer_mot_cle' => 'Create a new keyword and link it to this article', - 'icone_creer_mot_cle_rubrique' => 'Create a new keyword and attach it to this section', - 'icone_creer_mot_cle_site' => 'Create a new keyword and attach it to this site', 'icone_creer_rubrique_2' => 'Create a new section', + 'icone_developpement' => 'Development', 'icone_edition' => 'Edit', - 'icone_envoyer_message' => 'Send this message', 'icone_ma_langue' => 'My language', 'icone_mes_infos' => 'My details', 'icone_mes_preferences' => 'Preferences', 'icone_modifier_article' => 'Edit this article', - 'icone_modifier_message' => 'Edit this message', 'icone_modifier_rubrique' => 'Edit this section', 'icone_publication' => 'Publish', 'icone_relancer_signataire' => 'Contact the signatory again', @@ -220,22 +196,16 @@ Do not submit this import request.

    For more information, please see 'Administrators', 'info_administrer_rubrique' => 'You can manage this section', 'info_adresse' => 'to this address:', + 'info_adresse_desinscription' => 'Unsubscription address:', 'info_adresse_url' => 'URL of the public site', 'info_afficher_par_nb' => 'Show ', - 'info_afficher_visites' => 'Show visits for:', 'info_aide_en_ligne' => 'SPIP Online Help', 'info_ajout_image' => 'When you add images as attached documents to an article, SPIP can automatically create thumbnails from inserted images. This will allow, for instance, the automated creation of a gallery or portfolio.', - 'info_ajout_participant' => 'The following participant has been added:', 'info_ajouter_rubrique' => 'Add another section to manage:', 'info_annonce_nouveautes' => 'Latest news announcements', - 'info_anterieur' => 'previous', 'info_article' => 'article', 'info_article_2' => 'articles', 'info_article_a_paraitre' => 'Post-dated articles set for publication', @@ -268,17 +236,15 @@ Do not submit this import request.

    For more information, please see ' out of @liste@', 'info_code_acces' => 'Do not forget your own access codes!', 'info_compatibilite_html' => 'HTML norm to apply', - 'info_compresseur_gzip' => 'It is advisable to check first whether your hosting provider already systematically compresses PHP scripts. To do this you can use a service such as @testgzip@', - 'info_compresseur_texte' => 'If your server does not compress HTML pages before sending them, you can attempt to force compression in order to reduce the size of the pages transmitted.Warning: this can have a noticeable adverse effect on the performance of some servers, ', 'info_config_suivi' => 'If this address corresponds to a mailing list, you can indicate the subscription address for this list. This may be a URL (e.g. a webpage enabling subscription online), or an email address with a specific subject (for instance: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'You can subscribe to the mailing-list for this site. You will then receive email announcements concerning articles and news items submitted for publication.', 'info_confirmer_passe' => 'Confirm new password:', @@ -323,8 +287,6 @@ Do not submit this import request.

    For more information, please see 'Sender’s email address (optional)', 'info_email_envoi_txt' => 'Enter the sender’s email address used for sending emails (by default, the recipient’s address is used as the sender’s address) :', 'info_email_webmestre' => 'Webmaster’s email address', - 'info_entrer_code_alphabet' => 'Enter the code of the character set to be used:', 'info_envoi_email_automatique' => 'Automated mailing', 'info_envoyer_maintenant' => 'Send now', 'info_etape_suivante' => 'Go to the next step', @@ -345,7 +306,6 @@ Do not submit this import request.

    For more information, please see 'Your site contains forums by subscription; visitors may register for them on the public site.', - 'info_gauche_admin_effacer' => 'Only webmasters have access to this page.

    It provides access to various technical maintenance tasks. Some of them require a specific authentication process via FTP.

    ', 'info_gauche_admin_tech' => 'Only webmasters have access to this page.

    It provides access to various maintenance tasks. Some of them require a specific authentication process via FTP.

    ', @@ -356,27 +316,21 @@ via FTP.

    ', The status of each is indicated by the colour of their icon (administrator = green; editor = yellow).', 'info_gauche_auteurs_exterieurs' => 'Visiting authors, without any access to the site, are indicated by a blue icon; deleted authors by a grey icon.', 'info_gauche_messagerie' => 'Messaging allows you to exchange messages amongst editors, to preserve memos (for your personal use) or to display announcements on the homepage of the private area (if you are an administrator).', - 'info_gauche_numero_auteur' => 'AUTHOR NUMBER:', 'info_gauche_statistiques_referers' => 'This page displays the list of referrers, i.e. websites containing links to your own site, for yesterday and today. The list is reset every 24 hours.', 'info_gauche_visiteurs_enregistres' => 'You will find here the visitors registered for the public area of the site (subscription-only forums).', 'info_generation_miniatures_images' => 'Generation of thumbnail images', - 'info_gerer_trad' => 'Enable translation links?', 'info_gerer_trad_objets' => '@objets@: manage translation links', 'info_hebergeur_desactiver_envoi_email' => 'Some hosts disable automated mail sending on their servers. In this case the following features of SPIP cannot be implemented.', 'info_hier' => 'yesterday:', - 'info_historique_activer' => 'Enable revision tracking', - 'info_historique_affiche' => 'Show this version', - 'info_historique_comparaison' => 'compare', - 'info_historique_desactiver' => 'Disable revision tracking', - 'info_historique_texte' => 'Revision tracking allows you to view changes made to an article and displays the differences between successive versions.', 'info_identification_publique' => 'Your public identity...', 'info_image_process' => 'Select the best method to create thumbnails by clicking on the corresponding picture.', 'info_image_process2' => 'If you can’t see any images, then your server is not configured to use such tools. If you want to use these features, contact your provider’s technical support and ask for the «GD» or «Imagick» extensions to be installed.', 'info_images_auto' => 'Images calculated automatically', 'info_informations_personnelles' => 'Personal information', + 'info_inscription' => 'Registered on', 'info_inscription_automatique' => 'Automatic registration for new editors', 'info_jeu_caractere' => 'Character set for the site', 'info_jours' => 'days', @@ -392,8 +346,6 @@ via FTP.

    ', 'info_logos' => 'The logos', 'info_maximum' => 'maximum:', 'info_meme_rubrique' => 'In this section', - 'info_message' => 'Message from', - 'info_message_efface' => 'MESSAGE DELETED', 'info_message_en_redaction' => 'Your draft messages', 'info_message_technique' => 'Technical message:', 'info_messagerie_interne' => 'Internal messaging', @@ -408,30 +360,23 @@ via FTP.

    ', 'info_modifier_rubrique' => 'Edit the section:', 'info_modifier_titre' => 'Edit: @titre@', 'info_mon_site_spip' => 'My SPIP site', - 'info_mot_sans_groupe' => '(Keywords without a group...)', - 'info_moteur_recherche' => 'Integrated search engine', 'info_moyenne' => 'average:', - 'info_multi_articles' => 'Enable the language menu for articles?', 'info_multi_cet_article' => 'Language for this article:', 'info_multi_langues_choisies' => 'Please select the languages to be made available to the editors of your site. Languages already used on your site (at the top of the list) cannot be disabled.', 'info_multi_objets' => '@objets@: activate the language menu', - 'info_multi_rubriques' => 'Enable the language menu for sections?', 'info_multi_secteurs' => '... only for root-level sections?', 'info_nb_articles' => '@nb@ articles', - 'info_nb_articles_syndiques' => '@nb@ syndicated articles', 'info_nb_auteurs' => '@nb@ authors', 'info_nb_messages' => '@nb@ messages', 'info_nb_mots_cles' => '@nb@ keywords', 'info_nb_rubriques' => '@nb@ sections', - 'info_nb_sites' => '@nb@ sites', 'info_nb_visiteurs' => '@nb@ visitors', 'info_nom' => 'Name', 'info_nom_destinataire' => 'Name of recipient', 'info_nom_pas_conforme' => 'html tags are not allowed', 'info_nom_site' => 'Name of your site', 'info_nombre_articles' => '@nb_articles@ articles,', - 'info_nombre_partcipants' => 'PARTICIPANTS IN THIS DISCUSSION:', 'info_nombre_rubriques' => '@nb_rubriques@ sections,', 'info_nombre_sites' => '@nb_sites@ sites,', 'info_non_deplacer' => 'Do not move...', @@ -440,19 +385,14 @@ via FTP.

    ', 'info_non_envoi_liste_nouveautes' => 'Do not send newsletter', 'info_non_modifiable' => 'cannot be modified', 'info_non_suppression_mot_cle' => 'I do not want to delete this keyword.', - 'info_note_numero' => 'Note @numero@', 'info_notes' => 'Footnotes', - 'info_nouveaux_message' => 'New messages', 'info_nouvel_article' => 'New article', 'info_nouvelle_traduction' => 'New translation:', 'info_numero_article' => 'ARTICLE NUMBER:', 'info_obligatoire_02' => '(Required)', 'info_option_accepter_visiteurs' => 'Allow visitor registration via the public site', - 'info_option_faire_suivre' => 'Forward forum messages to articles’ author(s)', 'info_option_ne_pas_accepter_visiteurs' => 'Disable visitor registration', 'info_options_avancees' => 'ADVANCED OPTIONS', - 'info_ortho_activer' => 'Enable spellchecking.', - 'info_ortho_desactiver' => 'Disable spellchecking.', 'info_ou' => 'or...', 'info_page_interdite' => 'Forbidden page', 'info_par_nom' => 'by name', @@ -462,20 +402,14 @@ via FTP.

    ', 'info_passe_trop_court' => 'Password too short.', 'info_passe_trop_court_car_pluriel' => 'Your password must contain at least @nb@ characters.', 'info_passes_identiques' => 'The two passwords are not identical.', - 'info_pense_bete_ancien' => 'Your old memos', 'info_plus_cinq_car' => 'more than 5 characters', 'info_plus_cinq_car_2' => '(More than 5 characters)', 'info_plus_trois_car' => '(More than 3 characters)', 'info_popularite' => 'popularity: @popularite@; visits: @visites@', - 'info_popularite_4' => 'popularity: @popularite@; visits: @visites@', 'info_post_scriptum' => 'Postscript', 'info_post_scriptum_2' => 'Postscript:', 'info_pour' => 'for', - 'info_preview_admin' => 'Only administrators have access to Preview mode', - 'info_preview_comite' => 'All authors have access to Preview mode', - 'info_preview_desactive' => 'Preview mode is disabled', - 'info_preview_texte' => 'It is possible to preview the site as if all articles and news items (with at least the status "submitted") were already published. Should this preview mode be restricted to administrators, open to all authors, or disabled completely?', - 'info_principaux_correspondants' => 'Your main correspondents', + 'info_preview_texte' => 'It is possible to preview the site’s various editorial elements with at least the "submitted" status, as well as the"editing in progress" elements of which you are the author. Should this preview mode be restricted to administrators, open to all authors, or disabled completely?', 'info_procedez_par_etape' => 'please proceed step by step', 'info_procedure_maj_version' => 'the upgrade procedure must be run to adapt the database to this new version of SPIP.', @@ -492,14 +426,9 @@ via FTP.

    ', service providers disallow the sending of email from their servers: in that case, automated registration cannot be implemented.', - 'info_question_utilisation_moteur_recherche' => 'Do you wish to use SPIP’s integrated search engine? - (Disabling it speeds up system performance.)', - 'info_question_vignettes_referer_non' => 'Do not show screenshots of referring sites', 'info_qui_edite' => '@nom_auteur_modif@ worked on the contents @date_diff@ minutes ago', 'info_racine_site' => 'Site root', 'info_recharger_page' => 'Please wait a few moments, then reload this page.', - 'info_recherche_auteur_a_affiner' => 'Too many results for "@cherche_auteur@"; please refine your search.', - 'info_recherche_auteur_ok' => 'Several editors were found for "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'No results for "@cherche_auteur@".', 'info_recommencer' => 'Please try again.', 'info_redacteur_1' => 'Editor', @@ -508,6 +437,7 @@ via FTP.

    ', 'info_redaction_en_cours' => 'EDITING IN PROGRESS', 'info_redirection' => 'Redirection', 'info_redirection_activee' => 'Redirection is enabled.', + 'info_redirection_boucle' => 'You are trying to redirect the article toward itself. ', 'info_redirection_desactivee' => 'Redirection is deleted.', 'info_refuses' => 'Your rejected articles ', 'info_reglage_ldap' => 'Options: Adjusting LDAP import', @@ -518,7 +448,6 @@ via FTP.

    ', 'info_rubriques' => 'Sections', 'info_rubriques_02' => 'sections', 'info_rubriques_trouvees' => 'Sections found', - 'info_rubriques_trouvees_dans_texte' => 'Sections found (in the text)', 'info_sans_titre' => 'Untitled', 'info_selection_chemin_acces' => 'Select the access path in the directory:', 'info_signatures' => 'signatures', @@ -531,14 +460,12 @@ via FTP.

    ', 'info_sites_lies_mot' => 'Referenced sites with this keyword', 'info_sites_proxy' => 'Using a proxy', 'info_sites_trouves' => 'Sites found', - 'info_sites_trouves_dans_texte' => 'Sites found (in the text)', 'info_sous_titre' => 'Subtitle:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'This author’s status:', 'info_statut_auteur_2' => 'I am', 'info_statut_auteur_a_confirmer' => 'Registration to be confirmed', 'info_statut_auteur_autre' => 'Other status:', - 'info_statut_efface' => 'Deleted', 'info_statut_redacteur' => 'Editor', 'info_statut_utilisateurs_1' => 'Default status for imported users', 'info_statut_utilisateurs_2' => 'Choose the status to be attributed to persons present in the LDAP directory when they connect for the first time. You can modify this value for each individual author later on.', @@ -561,7 +488,6 @@ via FTP.

    ', 'info_tous_articles_presents' => 'All articles published in this section', 'info_tous_articles_refuses' => 'All refused articles', 'info_tous_les' => 'every:', - 'info_tous_redacteurs' => 'Announcements to all editors', 'info_tout_site' => 'The entire site', 'info_tout_site2' => 'The article has not been translated into this language.', 'info_tout_site3' => 'The article has been translated into this language, but changes have since been made to the reference article. The translation needs updating.', @@ -578,7 +504,7 @@ and their status is colour-coded:', 'info_une_rubrique_02' => '1 section', 'info_url' => 'URL:', 'info_url_proxy' => 'Proxy URL', - 'info_url_site' => 'SITE URL:', + 'info_url_proxy_pas_conforme' => 'Proxy’s URL not valid.', 'info_url_site_pas_conforme' => 'the website URL is invalid.', 'info_url_test_proxy' => 'Test URL', 'info_urlref' => 'Hyperlink:', @@ -590,7 +516,6 @@ and their status is colour-coded:', 'info_visiteurs_02' => 'Public site visitors', 'info_webmestre_forces' => 'The web administrators are currently defined in @file_options@.', 'install_adresse_base_hebergeur' => 'Database address attributed by the hosting provider', - 'install_base_ok' => 'The base @base@ was identified', 'install_connect_ok' => 'The new database has been declared using the server name @connect@.', 'install_echec_annonce' => 'This installation will probably fail, or damage your site.', 'install_extension_mbstring' => 'SPIP does not work with:', @@ -603,7 +528,6 @@ and their status is colour-coded:', 'install_select_langue' => 'Select a language, then click on "next" to start installation.', 'install_select_type_db' => 'Indicate the type of database:', 'install_select_type_mysql' => 'MySQL', - 'install_select_type_mysqli' => 'MySQLi', 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', @@ -620,8 +544,6 @@ and their status is colour-coded:', 'item_activer_messages_avertissement' => 'Activate warning messages', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Display in calendar', - 'item_autoriser_documents_joints' => 'Allow documents attached to articles', - 'item_autoriser_documents_joints_rubriques' => 'Allow documents in sections', 'item_autoriser_syndication_integrale' => 'Include entire articles in syndication feeds', 'item_choix_administrateurs' => 'administrators', 'item_choix_generation_miniature' => 'Generate thumbnails automatically.', @@ -629,7 +551,6 @@ and their status is colour-coded:', 'item_choix_redacteurs' => 'editors', 'item_choix_visiteurs' => 'visitors to the public site', 'item_creer_fichiers_authent' => 'Create .htpasswd files', - 'item_limiter_recherche' => 'Limit the search to your site', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Activate messaging system and calendars', 'item_mots_cles_association_articles' => 'articles', @@ -639,22 +560,15 @@ and their status is colour-coded:', 'item_non_accepter_inscriptions' => 'Disable registration', 'item_non_activer_messages_avertissement' => 'No warning messages', 'item_non_afficher_calendrier' => 'Do not show in calendar', - 'item_non_autoriser_documents_joints' => 'Do not allow documents in articles', - 'item_non_autoriser_documents_joints_rubriques' => 'Do not allow documents in sections', 'item_non_autoriser_syndication_integrale' => 'Only send a summary', - 'item_non_compresseur' => 'Disable compression', 'item_non_creer_fichiers_authent' => 'Do not create these files', - 'item_non_gerer_statistiques' => 'Do not use statistics', - 'item_non_limiter_recherche' => 'Widen search to include content on referenced sites', 'item_non_messagerie_agenda' => 'Disable the messaging system and calendars', 'item_non_publier_articles' => 'Do not publish articles before their specified publication date.', - 'item_non_utiliser_moteur_recherche' => 'Do not use the engine', 'item_nouvel_auteur' => 'New author', 'item_nouvelle_rubrique' => 'New section', 'item_oui' => 'Yes', 'item_publier_articles' => 'Publish articles, irrespective of publication date.', 'item_reponse_article' => 'Reply to the article', - 'item_utiliser_moteur_recherche' => 'Use the search engine', 'item_version_html_max_html4' => 'Use only HTML4 on the public site', 'item_version_html_max_html5' => 'Allow HTML5', 'item_visiteur' => 'visitor', @@ -675,19 +589,19 @@ and their status is colour-coded:', 'ldap_correspondance' => 'inherit field @champ@', 'ldap_correspondance_1' => 'Inherit LDAP fields', 'ldap_correspondance_2' => 'For each of these SPIP fields, enter the name of the corresponding LDAP field. Leave blank if you don’t want it filled, separate with spaces or commas to try several LDAP fields.', - 'lien_ajout_destinataire' => 'Add this recipient', 'lien_ajouter_auteur' => 'Add this author', - 'lien_ajouter_participant' => 'Add a participant', 'lien_ajouter_une_rubrique' => 'Add this section', 'lien_email' => 'email', 'lien_nom_site' => 'SITE NAME:', + 'lien_rapide_contenu' => 'Go to the content', + 'lien_rapide_navigation' => 'Go to the navigation', + 'lien_rapide_recherche' => 'Go to the search', 'lien_retirer_auteur' => 'Remove author', 'lien_retirer_rubrique' => 'Remove the section', 'lien_retirer_tous_auteurs' => 'Remove all authors', 'lien_retirer_toutes_rubriques' => 'Remove all sections', - 'lien_retrait_particpant' => 'remove this participant', 'lien_site' => 'site', - 'lien_supprimer_rubrique' => 'delete this section', + 'lien_tout_decocher' => 'Uncheck all', 'lien_tout_deplier' => 'Expand all', 'lien_tout_replier' => 'Collapse all', 'lien_tout_supprimer' => 'Delete all', @@ -696,7 +610,7 @@ and their status is colour-coded:', 'lien_trier_statut' => 'Sort by status', 'lien_voir_en_ligne' => 'VIEW ONLINE:', 'logo_article' => 'Article logo', - 'logo_auteur' => 'Autor’s logo', + 'logo_auteur' => 'Author’s logo', 'logo_rubrique' => 'Logo of the section', 'logo_site' => 'Logo of this site', 'logo_standard_rubrique' => 'Standard logo of sections', @@ -712,13 +626,13 @@ and their status is colour-coded:', 'mois_non_connu' => 'unknown', // N - 'nouvelle_version_spip' => 'SPIP version @version@ is available', + 'nouvelle_version_spip' => 'SPIP upgrade @version@ is available', + 'nouvelle_version_spip_majeure' => 'A new SPIP version @version@ is available', // O 'onglet_contenu' => 'Contents', 'onglet_declarer_une_autre_base' => 'Declare another database', 'onglet_discuter' => 'Discuss', - 'onglet_documents' => 'Documents', 'onglet_interactivite' => 'Interactivity', 'onglet_proprietes' => 'Properties', 'onglet_repartition_actuelle' => 'now', @@ -727,6 +641,7 @@ and their status is colour-coded:', // P 'page_pas_proxy' => 'This page must not go through the proxy', 'pas_de_proxy_pour' => 'If necessary, indicate to which machines or domains this proxy should not apply (for example: @exemple@)', + 'phpinfo' => 'PHP configuration', 'plugin_charge_paquet' => 'Loading the archive file @name@', 'plugin_charger' => 'Download', 'plugin_erreur_charger' => 'error: @zip@ cannot be loaded', @@ -761,8 +676,11 @@ and their status is colour-coded:', 'plugin_info_telecharger' => 'load from @url@ and install to @rep@', 'plugin_info_upgrade_ok' => 'Successful update', 'plugin_librairies_installees' => 'Libraries installed', + 'plugin_necessite_extension_php' => 'Requires the PHP extension @plugin@ version @version@.', + 'plugin_necessite_extension_php_sans_version' => 'Requires the PHP extension @plugin@', 'plugin_necessite_lib' => 'This plugin requires the library @lib@', - 'plugin_necessite_plugin' => 'Version @version@ or newer of the plugin @plugin@ is required.', + 'plugin_necessite_php' => 'Requires @plugin@ version @version@.', + 'plugin_necessite_plugin' => 'Version @version@ of the plugin @plugin@ is required.', 'plugin_necessite_plugin_sans_version' => 'Requires the plugin @plugin@', 'plugin_necessite_spip' => 'SPIP version @version@ or newer is required.', 'plugin_source' => 'source: ', @@ -770,6 +688,9 @@ and their status is colour-coded:', 'plugin_titre_automatique_ajouter' => 'Add plugins', 'plugin_titre_installation' => 'Installation of the @plugin@ plugin', 'plugin_titre_modifier' => 'My plugins', + 'plugin_utilise_extension_php' => 'Uses the PHP extension @plugin@ version @version@.', + 'plugin_utilise_php' => 'Uses @plugin@ version @version@.', + 'plugin_utilise_plugin' => 'Utilise le plugin @plugin@ en version @version@.', 'plugin_zip_active' => 'Continue in order to activate', 'plugin_zip_adresse' => 'To load a zipped plugin file, or a list of plugins, enter the path below.', 'plugin_zip_adresse_champ' => 'Path of the plugin or list ', @@ -806,6 +727,7 @@ and their status is colour-coded:', // R 'repertoire_plugins' => 'Directory:', + 'required' => '(Required)', // S 'sans_heure' => 'time not specified', @@ -835,18 +757,13 @@ reinstall SPIP, create a new database and a new administrator account.', 'texte_article_virtuel_reference' => 'Virtual article: an article on your SPIP website which redirects to another URL. To remove redirection, delete the URL.', 'texte_aucun_resultat_auteur' => 'No results for "@cherche_auteur@".', 'texte_auteur_messagerie' => 'This site can update the list of editors online in real time, which allows you to be contacted by other users. You can opt not to appear in this list (you are then "invisible" to other users).', - 'texte_auteur_messagerie_1' => 'This site allows the exchange of messages and creation of private forums between contributors to the site. You can opt not to participate in these activities.', 'texte_auteurs' => 'THE AUTHORS', 'texte_choix_base_1' => 'Select your database:', 'texte_choix_base_2' => 'The SQL server contains several databases.', 'texte_choix_base_3' => 'Select below the one attributed by your hosting provider:', 'texte_choix_table_prefix' => 'Prefix for tables:', - 'texte_commande_vider_tables_indexation' => 'Use this command to empty the indexing tables used - by SPIP’s integrated search engine. It will anable you - to save some disk space.', 'texte_compatibilite_html' => 'You can require SPIP to produce code compatible with the HTML4 standard, or allow it to use more modern HTML5 compatible code.', 'texte_compatibilite_html_attention' => 'There is no risk involved in activating the HTML5 option. But if you do, the pages of your site must begin with the following code in order to be valid: .', - 'texte_compresse_ou_non' => '(compression optional)', 'texte_compte_element' => '@count@ element', 'texte_compte_elements' => '@count@ elements', 'texte_conflit_edition_correction' => 'Please compare differences between the two versions. You can also copy your changes and start over.', @@ -865,10 +782,9 @@ reinstall SPIP, create a new database and a new administrator account.', 'texte_date_publication_anterieure_nonaffichee' => 'Hide previous publication date.', 'texte_date_publication_article' => 'PUBLISHED ON:', 'texte_date_publication_objet' => 'Published on:', - 'texte_descriptif_petition' => 'Petition description', + 'texte_definir_comme_traduction_rubrique' => 'This section is a translation of section number:', 'texte_descriptif_rapide' => 'Brief description', 'texte_effacer_base' => 'Delete the SPIP database', - 'texte_effacer_donnees_indexation' => 'Delete indexing data', 'texte_effacer_statistiques' => 'Delete the statistics', 'texte_en_cours_validation' => 'The following articles and news have been submitted for evaluation.', 'texte_enrichir_mise_a_jour' => 'You can enrich the layout of your text by using "typographical shortcuts".', @@ -879,30 +795,19 @@ reinstall SPIP, create a new database and a new administrator account.', 'texte_informations_personnelles_2' => '(Note: if it is a reinstallation, if your former access is still working, you can', 'texte_introductif_article' => '(Introductory text for the article.)', 'texte_jeu_caractere' => 'We advise using the universal alphabet (utf-8) on your site. This will make it possible to display text in any language. All modern browsers are fully comptabile with this character set.', - 'texte_jeu_caractere_2' => 'N.B. This setting will not convert text which already figures in the database.', 'texte_jeu_caractere_3' => 'Your site currently uses this character set:', 'texte_jeu_caractere_4' => 'If that does not correspond to your current data (this may occur after restoring your database from a backup), or if you are setting up this site and wish to use a different character set, please indicate the character set here:', - 'texte_jeu_caractere_conversion' => 'Note: You can opt to convert definitely all the text (articles, news items, forums, etc.) on your site to the character set utf-8. To do this, go to the
    UTF-8 conversion page.', - 'texte_lien_hypertexte' => '(If your message refers to an article published elsewhere on the Web, or to a page providing more information, please enter the page title and URL here.)', 'texte_login_ldap_1' => '(Keep empty for anonymous access or enter complete path, for instance «uid=smith, ou=users, dc=my-domain, dc=com».)', 'texte_login_precaution' => 'Warning! This is the login which you are currently using. Use this form with caution...', - 'texte_message_edit' => 'Warning: this message can be modified by all site administrators, and it is visible to all editors. Use announcements only to communicate important information concerning the site.', 'texte_messagerie_agenda' => 'A messaging system enables the authors on this site to communicate directly in the private area. It is linked to a calendar.', 'texte_mise_a_niveau_base_1' => 'You have just updated SPIP files. Now you must upgrade the site database.', 'texte_modifier_article' => 'Edit this article:', - 'texte_moteur_recherche_active' => 'The search engine is enabled. Use this command - to force a quick reindexing (e.g. after restoring - a backup). You should note that the documents modified in - the normal way (via the SPIP interface) are automatically - reindexed. This command is therefore only useful in exceptional circumstances.', - 'texte_moteur_recherche_non_active' => 'The search engine is not enabled.', 'texte_multilinguisme' => 'If you want to manage objects in several languages​​, with complex navigation, you can add a language selection menu to these objects, depending on the organization of your site.', 'texte_multilinguisme_trad' => 'You can also enable a system for managing links between the various translations of certain objects.', 'texte_non_compresse' => 'uncompressed (your server does not support this feature)', - 'texte_nouveau_message' => 'New message', 'texte_nouvelle_version_spip_1' => 'You have just installed a new version of SPIP.', 'texte_nouvelle_version_spip_2' => 'This new version requires a more thorough update than usual. If you are the webmaster of this site, please delete the file @connect@ and restart installation in order to update your database connection parameters.

    (PS.: if you have forgotten your connection parameters, take a look at the file @connect@ before deleting it!)

    ', 'texte_operation_echec' => 'Go back to the previous page, select another database or create a new one. Verify the information provided by your hosting service.', @@ -918,7 +823,6 @@ reinstall SPIP, create a new database and a new administrator account.', 'texte_rappel_selection_champs' => '[Remember to select this field correctly.]', 'texte_recalcul_page' => 'If you want to re-process a single page, it is easier to view that page from the public site and click "Re-process this page".', - 'texte_recapitiule_liste_documents' => 'This page summarises the documents that you have placed in the sections. To modify the information for a document, follow the link to its section.', 'texte_recuperer_base' => 'Repair the database', 'texte_reference_mais_redirige' => 'article referenced in your SPIP site, but redirected to another URL.', 'texte_requetes_echouent' => 'When some SQL queries fail @@ -948,7 +852,6 @@ in the SPIP cache. This will force recalculation of every page on the site, usef significant modifications to the site’s graphics or structure.', 'texte_sur_titre' => 'Lead-in title', 'texte_table_ok' => ': this table is OK.', - 'texte_tables_indexation_vides' => 'The engine’s indexing tables are empty.', 'texte_tentative_recuperation' => 'Attempting to repair', 'texte_tenter_reparation' => 'Attempt to repair the database', 'texte_test_proxy' => 'To test this proxy, enter the address of a website @@ -959,27 +862,12 @@ significant modifications to the site’s graphics or structure.', 'texte_travail_collaboratif' => 'If several editors often work on the same article, the system can mark recently "opened" articles in order to avoid multiple simultaneous editing. This option is disabled by default to avoid displaying unnecessary warning messages.', - 'texte_trop_resultats_auteurs' => 'Too many results for "@cherche_auteur@". Please use more search criteria.', - 'texte_unpack' => 'downloading the latest version', - 'texte_utilisation_moteur_syndiques' => 'When you use SPIP’s integrated search engine, -you can perform searches on syndicated sites and - articles in two different ways.
    - The simplest - way is to search only in the - titles and descriptions of the articles.
    - - A second, much more powerful, method allows - SPIP to also search the text - of referenced sites. If you - reference a site, SPIP will perform - the search on the site’s text itself.', - 'texte_utilisation_moteur_syndiques_2' => 'This method forces SPIP to visit referenced sites regularly, which may cause a drop in performance for your own site.', 'texte_vide' => 'empty', 'texte_vider_cache' => 'Empty the cache', - 'titre_admin_effacer' => 'Technical maintenance', 'titre_admin_tech' => 'Technical maintenance', 'titre_admin_vider' => 'Technical maintenance', 'titre_ajouter_un_auteur' => 'Add an author', 'titre_ajouter_un_mot' => 'Add a keyword', - 'titre_ajouter_une_rubrique' => 'Add a section', 'titre_cadre_afficher_article' => 'Show the articles:', 'titre_cadre_afficher_traductions' => 'Display the translation status for these languages:', 'titre_cadre_ajouter_auteur' => 'ADD AN AUTHOR:', @@ -994,6 +882,7 @@ you can perform searches on syndicated sites and 'titre_config_langage' => 'Configure the language', 'titre_configuration' => 'Site configuration', 'titre_configurer_preferences' => 'Configure your preferences', + 'titre_configurer_preferences_menus' => 'Settings of your menus preferences', 'titre_conflit_edition' => 'Conflict while editing', 'titre_connexion_ldap' => 'Options: Your LDAP connection', 'titre_groupe_mots' => 'KEYWORD GROUP:', @@ -1006,54 +895,28 @@ you can perform searches on syndicated sites and 'titre_naviguer_dans_le_site' => 'Browse the site...', 'titre_nouvelle_rubrique' => 'New section', 'titre_numero_rubrique' => 'SECTION NUMBER:', - 'titre_page_admin_effacer' => 'Technical maintenance: deleting the database', 'titre_page_articles_edit' => 'Modify: @titre@', 'titre_page_articles_page' => 'Articles', 'titre_page_articles_tous' => 'The entire site', - 'titre_page_auteurs' => 'Visitors', 'titre_page_calendrier' => 'Calendar @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Site configuration', - 'titre_page_config_fonctions' => 'Site configuration', - 'titre_page_configuration' => 'Site configuration', - 'titre_page_controle_petition' => 'Petitions follow-up', 'titre_page_delete_all' => 'total and irreversible deletion', - 'titre_page_documents_liste' => 'Attached documents', - 'titre_page_index' => 'Your private area', - 'titre_page_message_edit' => 'Write a message', - 'titre_page_messagerie' => 'Your messaging', 'titre_page_recherche' => 'Search results @recherche@', 'titre_page_statistiques_referers' => 'Statistics (incoming links)', - 'titre_page_statistiques_signatures_jour' => 'Signatures count by day', - 'titre_page_statistiques_signatures_mois' => 'Signatures count by month', 'titre_page_upgrade' => 'SPIP upgrade', + 'titre_preference_menus_favoris' => 'Favourites menu', 'titre_publication_articles_post_dates' => 'Publication of post dated articles', - 'titre_referencer_site' => 'Reference the site:', - 'titre_rendez_vous' => 'APPOINTMENTS:', 'titre_reparation' => 'Repair', 'titre_suivi_petition' => 'Petitions follow-up', 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'There is no article with this number', 'trad_article_traduction' => 'All the versions of this article:', - 'trad_deja_traduit' => 'Error: impossible to link this article to the requested number.', 'trad_delier' => 'Stop linking to these translations', 'trad_lier' => 'This article is a translation of article number:', 'trad_new' => 'Write a new translation', // U - 'upload_info_mode_document' => 'Place this image in the portfolio', - 'upload_info_mode_image' => 'Remove this image from the portfolio', - 'utf8_convert_attendez' => 'Wait a few seconds and then reload this page.', - 'utf8_convert_avertissement' => 'You are about to convert the contents of your database (articles, news items, etc) from the character set @orig@ to the character set @charset@.', - 'utf8_convert_backup' => 'Don’t forget to first make a complete backup of your site. You need also to check that your templates and language files are compatible with @charset@.', - 'utf8_convert_erreur_deja' => 'Your site is already in @charset@, there is no point in converting.', 'utf8_convert_erreur_orig' => 'Error: the character set @charset@ is not supported.', - 'utf8_convert_termine' => 'Finished!', - 'utf8_convert_timeout' => 'Important: If the server indicates timeout, please continue to reload the page until you receive the message «Finished!».', - 'utf8_convert_verifier' => 'You now need to empty the site cache and then check if all is well on the public pages of the site. If you are stuck with a major problem, a backup of your original data (in SQL format) has been made in the @rep@ directory.', - 'utf8_convertir_votre_site' => 'Convert your site to utf-8', // V 'version' => 'Version:' ); - -?> diff --git a/www/ecrire/lang/ecrire_eo.php b/www/ecrire/lang/ecrire_eo.php index 401cfece..436d1511 100644 --- a/www/ecrire/lang/ecrire_eo.php +++ b/www/ecrire/lang/ecrire_eo.php @@ -1,9 +1,11 @@ 'Revenu al la antaŭa paĝo, kaj kontrolu la entajpitajn datenojn. ', 'avis_connexion_ldap_echec_3' => 'Eventuale, provu ne uzi LDAP-materialon por importi uzantojn.', 'avis_deplacement_rubrique' => 'Atentu ! Tiu ĉi rubriko enhavas @contient_breves@ fulm-informon @scb@ : se vi translokas ĝin, bonvolu noĉi tiun por-konfirman noĉujon. ', - 'avis_destinataire_obligatoire' => 'Vi devas indiki adresaton antaŭ ol sendi ĉi tiun mesaĝon.', 'avis_erreur_connexion_mysql' => 'SQL-konekta eraro ', - 'avis_erreur_version_archive' => 'Atentu ! La dosiero @archive@ kongruas kun - alia versio de SPIP ol tiu, kiun vi instalis. - Vi estas alfrontonta grandegajn problemojn : - detru-riskon de via datenbazo, - diversajn retejajn misfunkciojn, ktp. - Ne validigu tiun peton pri importo.

    Por pli - da informoj, vidu - la dokumentaron pri SPIP.

    ', - 'avis_espace_interdit' => 'Malpermesata aliro
    SPIP jam estas instalita.
    ', + 'avis_espace_interdit' => 'Malpermesata aliro
    SPIP jam estas instalita.
    ', 'avis_lecture_noms_bases_1' => 'Instalprogramo ne sukcesis legi la nomojn de la instalitaj datenbazoj.', 'avis_lecture_noms_bases_2' => 'Aŭ neniu datenbazo disponeblas, aŭ la funkcio ebliganta listigi datenbazojn estis malaktivigita pro sekuraj kialoj (tio ja okazas ĉe multaj retejoj-gastigantoj).', 'avis_lecture_noms_bases_3' => 'Okaze de la dua alternativo, eble uzeblos datenbazo nomita per via salutnomo :', - 'avis_non_acces_message' => 'Vi ne havas alir-rajton al tiu mesaĝo.', 'avis_non_acces_page' => 'Vi ne havas alir-rajton al tiu paĝo.', 'avis_operation_echec' => 'La ago malsukcesis.', 'avis_operation_impossible' => 'Faro ne ebla', - 'avis_probleme_archive' => 'Problemo por legi la dosieron @archive@', 'avis_suppression_base' => 'ATENTU, forviŝo de datenoj estas definitiva', - 'avis_version_mysql' => 'Via SQL-versio (@version_mysql@) ne ebligas memriparon de datenbazaj tabeloj.', // B 'bouton_acces_ldap' => 'Aldoni aliron al LDAP', 'bouton_ajouter' => 'Aldoni', - 'bouton_ajouter_participant' => 'ALDONI PARTOPRENONTON :', - 'bouton_annonce' => 'ANONCO', 'bouton_annuler' => 'Nuligi', - 'bouton_checkbox_envoi_message' => 'eblas sendi mesaĝon', - 'bouton_checkbox_indiquer_site' => 'devige indiku retejon', - 'bouton_checkbox_signature_unique_email' => 'po unu subskribo por retpoŝtadreso', - 'bouton_checkbox_signature_unique_site' => 'po unu subskribo por retejo', 'bouton_demande_publication' => 'Peti publikigon de tiu ĉi artikolo', 'bouton_desactive_tout' => 'Ĉion malaktivigi', 'bouton_desinstaller' => 'Malinstali', - 'bouton_effacer_index' => 'Forviŝi indicojn', 'bouton_effacer_tout' => 'Forviŝi ĈION', - 'bouton_envoi_message_02' => 'SENDI MESAĜON', 'bouton_envoyer_message' => 'Definitiva mesaĝo : sendi', 'bouton_fermer' => 'Fermi', 'bouton_mettre_a_jour_base' => 'Ĝisdatigi la datumbazo', 'bouton_modifier' => 'Modifi', - 'bouton_pense_bete' => 'PROPRA MEMORIGILO', - 'bouton_radio_activer_messagerie' => 'Ŝalti la internan mesaĝilon', - 'bouton_radio_activer_messagerie_interne' => 'Ŝalti la internan mesaĝilon', - 'bouton_radio_activer_petition' => 'Aktivigi la petskribon', 'bouton_radio_afficher' => 'Afiŝi', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Aperi en la listo de konektitaj redaktantoj', - 'bouton_radio_desactiver_messagerie' => 'Malŝalti la mesaĝilon', 'bouton_radio_envoi_annonces_adresse' => 'Sendi la anoncojn al jena adreso :', 'bouton_radio_envoi_liste_nouveautes' => 'Sendi la novaĵoj-liston', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Ne aperi en la listo de redaktantoj', 'bouton_radio_non_envoi_annonces_editoriales' => 'Ne sendi anoncojn pri ĉefartikoloj', - 'bouton_radio_pas_petition' => 'Neniu petskribo', - 'bouton_radio_petition_activee' => 'Aktivigita petskribo', - 'bouton_radio_supprimer_petition' => 'Forviŝi la petskribon', 'bouton_redirection' => 'ALIDIREKTIGO', 'bouton_relancer_installation' => 'Relanĉi la instaladon', 'bouton_suivant' => 'Sekvanta', 'bouton_tenter_recuperation' => 'Provi riparon', 'bouton_test_proxy' => 'Provi la prokuran servilon', 'bouton_vider_cache' => 'Malplenigi la staplon', - 'bouton_voir_message' => 'Antaŭrigardi antaŭ ol validigi la mesaĝon', // C - 'cache_mode_compresse' => 'Dosieroj de la staplo estas registritaj laŭ densigita modo.', - 'cache_mode_non_compresse' => 'La dosieroj de staplo estas registritaj laŭ ne-densigita modo.', 'cache_modifiable_webmestre' => 'Tiun parametron povas modifi la retejestro.', 'calendrier_synchro' => 'Se vi uzas temp-organizan bitvaron kongruan kun iCal formato, vi povas ĝisdatigi tiun lastan laŭ la datenoj de tiu ĉi retejo.', 'config_activer_champs' => 'Ŝalti la jenajn kampojn', @@ -112,9 +83,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_titre_base_sup' => 'Deklaro de kroma datumbazo', 'config_titre_base_sup_choix' => 'Elektu kroman datumbazon', 'connexion_ldap' => 'Konektiĝo :', - 'copier_en_local' => 'Kopii en lokan komputilon', 'creer_et_associer_un_auteur' => 'Krei kaj ligi aŭtoron', - 'creer_et_associer_une_rubrique' => 'Krei kaj ligi rubrikon', // D 'date_mot_heures' => 'horoj', @@ -144,7 +113,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Via salutnomo', 'entree_login_connexion_1' => 'La salutnomo', 'entree_login_connexion_2' => '(Foje estas via salutnomo por eniri la FTP-ejon ; foje ĝi restas malplena)', - 'entree_login_ldap' => 'Komenca salutnomo por LDAP', 'entree_mot_passe' => 'Via pasvorto', 'entree_mot_passe_1' => 'La pasvorto por ensaluti', 'entree_mot_passe_2' => '(Foje estas via pasvorto por la FTP-ejo ; foje ĝi restas malplena)', @@ -182,7 +150,7 @@ Tamen vi povas malŝalti ĝin.', 'ical_info2' => 'Por pli da informoj pri ĉi ĉiuj teknikoj, senhezite konsultu la dokumentaron de SPIP.', 'ical_info_calendrier' => 'Du kalendaroj disponeblas. La unua estas retejo-mapo anoncanta ĉiujn publikigitajn artikolojn. La dua enhavas la eldon-anoncojn, kaj viajn lastajn privatajn mesaĝojn : ĝi estas rezervita al vi, pere de persona ŝlosilo, kiun vi ĉiumomente povas modifi ŝanĝante vian pasvorton.', 'ical_methode_http' => 'Elŝuti', - 'ical_methode_webcal' => 'Sinkroniga ĝisdatigo (webcal ://)', + 'ical_methode_webcal' => 'Sinkroniga ĝisdatigo (webcal://)', # MODIF 'ical_texte_js' => 'Per ununura linio de ĝavaskripto, vi povas simplege afiŝi ĉe kiu ajn retejo, kiun vi havas, la lastajn artikolojn publikigitajn ĉe tiu retejo.', 'ical_texte_prive' => 'Tiu ĉi strikte persona kalendaro, informas vin pri la privataj eldonoj de la retejo (personaj taskoj kaj rendevuoj, proponitaj artikoloj kaj fulm-informoj...).', 'ical_texte_public' => 'Per tiu ĉi kalendaro, vi povas gvati la publikan funkciadon de tiu retejo (publikigitaj fulm-informoj kaj artikoloj).', @@ -202,16 +170,12 @@ Tamen vi povas malŝalti ĝin.', 'icone_configuration' => 'Agordo', 'icone_creer_auteur' => 'Krei novan aŭtoron kaj ligi ŝlin al tiu artikolo', 'icone_creer_mot_cle' => 'Krei novan ŝlosilvorton kaj ligi ĝin al tiu artikolo', - 'icone_creer_mot_cle_rubrique' => 'Krei novan ŝlosilvorton kaj ligi ĝin kun tiu ĉi rubriko', - 'icone_creer_mot_cle_site' => 'Krei novan ŝlosilvorton kaj ligi ĝin kun tiu ĉi retejo', 'icone_creer_rubrique_2' => 'Krei novan rubrikon', 'icone_edition' => 'Eldono', - 'icone_envoyer_message' => 'Sendi tiun ĉi mesaĝon', 'icone_ma_langue' => 'Mia lingvo', 'icone_mes_infos' => 'Miaj informoj', 'icone_mes_preferences' => 'Miaj preferoj', 'icone_modifier_article' => 'Modifi tiun ĉi artikolon', - 'icone_modifier_message' => 'Modifi tiun ĉi mesaĝon', 'icone_modifier_rubrique' => 'Modifi tiun ĉi rubrikon', 'icone_publication' => 'Publikigo', 'icone_relancer_signataire' => 'Reinstigi tiun ĉi subskribinton', @@ -224,21 +188,14 @@ Tamen vi povas malŝalti ĝin.', 'icone_supprimer_signature' => 'Forviŝi tiun subskribon', 'icone_valider_signature' => 'Validigi tiun subskribon', 'image_administrer_rubrique' => 'Vi povas mastrumi tiun rubrikon', - 'impossible_modifier_login_auteur' => 'Ne eblas modifi la salutnomo.', - 'impossible_modifier_pass_auteur' => 'Ne eblas modifi la pasvorto.', 'info_1_article' => '1 artikolo', - 'info_1_article_syndique' => '1 abonligita artikolo', 'info_1_auteur' => '1 aŭtoro', 'info_1_message' => '1 mesaĝo', 'info_1_mot_cle' => '1 ŝlosilvorto', 'info_1_rubrique' => '1 rubriko', - 'info_1_site' => '1 retejo', 'info_1_visiteur' => '1 vizitanto', 'info_activer_cookie' => 'Vi povas aktivigi por-korespondan kuketon. Tio ebligos al vi facile iri de la publika spaco al la privata.', 'info_admin_etre_webmestre' => 'Doni al mi la rajtoj de retejestro', - 'info_admin_gere_rubriques' => 'Tiu mastrumanto mastrumas la jenajn rubrikojn :', - 'info_admin_gere_toutes_rubriques' => 'Tiu mastrumanto mastrumas ĉiujn rubrikojn.', - 'info_admin_gere_toutes_rubriques_2' => 'Mi mastrumas ĉiujn rubrikojn', 'info_admin_je_suis_webmestre' => 'Mi estas retejestro', 'info_admin_statuer_webmestre' => 'Doni al tiu mastrumanto la rajtoj de retejestro', 'info_admin_webmestre' => 'Tiu mastrumanto estas retejestro', @@ -252,15 +209,12 @@ Tamen vi povas malŝalti ĝin.', 'info_adresse' => 'ĉe la adreso :', 'info_adresse_url' => 'Retadreso (URL) de la publika retejo', 'info_afficher_par_nb' => 'Afiŝi per', - 'info_afficher_visites' => 'Afiŝi la vizitojn de :', 'info_aide_en_ligne' => 'Reta SPIP-helpilo', 'info_ajout_image' => 'Kiam vi ligas bildojn kiel alkroĉitajn dokumentojn al artikolo, SPIP povas aŭtomate krei por vi etajn vinjetojn de la enmetitaj bildoj. Tio ebligas ekzemple, aŭtomate krei bildaron, ĉu en sukcesiva, ĉu samtempa ordo.', - 'info_ajout_participant' => 'La jena partoprenanto estas aldonita :', 'info_ajouter_rubrique' => 'Aldoni alian mastrumendan rubrikon :', 'info_annonce_nouveautes' => 'Anonco pri novaĵoj', - 'info_anterieur' => 'antaŭa', 'info_article' => 'artikolo', 'info_article_2' => 'artikoloj', 'info_article_a_paraitre' => 'Aperotaj post-datitaj artikoloj', @@ -270,17 +224,13 @@ Tamen vi povas malŝalti ĝin.', 'info_articles_miens' => 'Miaj artikoloj', 'info_articles_tous' => 'Ĉiuj la artikoloj', 'info_articles_trouves' => 'Trovitaj artikoloj', - 'info_articles_trouves_dans_texte' => 'Trovitaj artikoloj (en la teksto)', 'info_attente_validation' => 'Viaj artikoloj atendantaj validigon', 'info_aucun_article' => 'Neniu artikolo', - 'info_aucun_article_syndique' => 'Neniu abonligita artikolo', 'info_aucun_auteur' => 'Neniu aŭtoro', 'info_aucun_message' => 'Neniu mesaĝo', 'info_aucun_rubrique' => 'Neniu rubriko', - 'info_aucun_site' => 'Neniu retejo', - 'info_aucun_visiteur' => 'Neniu vizitanto', 'info_aujourdhui' => 'hodiaŭ : ', - 'info_auteur_message' => 'AŬTORO DE LA MESAĜO :', + 'info_auteur_gere_toutes_rubriques_2' => 'Mi mastrumas ĉiujn rubrikojn', # MODIF 'info_auteurs' => 'La aŭtoroj', 'info_auteurs_par_tri' => 'Aŭtoroj@partri@', 'info_auteurs_trouves' => 'Aŭtoroj trovitaj', @@ -299,8 +249,6 @@ Tamen vi povas malŝalti ĝin.', 'info_classement_2' => 'a en @liste@', 'info_code_acces' => 'Ne forgesu viajn proprajn alir-kodojn !', 'info_compatibilite_html' => 'Sekvi la HTML-normon', - 'info_compresseur_gzip' => 'Estas rekomendate antaŭfare kontroli, ĉu via retgastiganto jam ĉiufoje densigas la php-skriptojn ; por tio, vi povas ekzemple uzi la jenan servon : @testgzip@', - 'info_compresseur_texte' => 'Se via servilo ne aŭtomate densigas la html-paĝojn por ilin sendi al interretanoj, vi povas provi trudi tiun densigon por malkreskigi la pezon de la elŝutitaj paĝoj. Atentu : tio povas forte malrapidigi iujn servilojn.', 'info_config_suivi' => 'Se tiu ĉi adreso estas tiu de dissendlisto, indiku ĉi-sube la adreson ĉe kiu la partoprenantoj de la retejo povos registriĝi. Tiu adreso povas esti retligilo (ekz. la paĝo por rete registriĝi en la listo), aŭ retpoŝtadreso kun specifa temo (ekz. @adresse_suivi@?subject=registrigxi) :', 'info_config_suivi_explication' => 'Vi povas aboni la dissendliston de tiu ĉi retejo. Aboninta, vi ricevos per retmesaĝoj la anoncojn pri artikoloj kaj pri fulm-informoj proponitaj por publikigo.', 'info_confirmer_passe' => 'Konfirmi tiun novan pasvorton :', @@ -324,8 +272,6 @@ Tamen vi povas malŝalti ĝin.', 'info_date_publication_anterieure' => 'Dato de antaŭa redakto :', 'info_date_referencement' => 'REFERENCIGO-DATO DE TIU RETEJO :', 'info_derniere_etape' => 'Finite !', - 'info_derniers_articles_publies' => 'Viaj artikoloj laste rete publikigitaj', - 'info_desactiver_messagerie_personnelle' => 'Vi povas aktivigi aŭ malaktivigi vian personan mesaĝilon ĉe tiu retejo.', 'info_descriptif' => 'Priskribo :', 'info_desinstaller_plugin' => 'forviŝas la datenojn kaj malaktivigas la kromprogramon', 'info_discussion_cours' => 'Nunaj diskutoj', @@ -333,7 +279,6 @@ Tamen vi povas malŝalti ĝin.', 'info_email_envoi' => 'retpoŝtadreso por sendo (nedeviga)', 'info_email_envoi_txt' => 'Indiku ĉi tie la adreson uzotan por sendi poŝtmesaĝojn (defaŭlte, la ricev-adreso estos uzata) :', 'info_email_webmestre' => 'Retpoŝtadreso de la retejestro', - 'info_entrer_code_alphabet' => 'Entajpu la kodon de la uzenda alfabeto :', 'info_envoi_email_automatique' => 'Aŭtomata retleteroj-dissendado', 'info_envoyer_maintenant' => 'Sendu nun', 'info_etape_suivante' => 'Ek al posta etapo', @@ -344,7 +289,6 @@ Tamen vi povas malŝalti ĝin.', 'info_facilite_suivi_activite' => 'Por faciligi la kontrolon de la reteja ĉefartikola aktiveco, SPIP povas transdoni per retmesaĝoj - ekzemple al dissendlisto de redaktantoj - la anoncon pri publikig-petoj kaj validig-petoj de artikoloj.', 'info_fichiers_authent' => 'Aŭtentokontrolaj dosieroj « .htpasswd »', 'info_forums_abo_invites' => 'Via retejo enhavas forumojn alireblajn nur per abono ; vizitantoj estas invititaj al registriĝo ĉe la publika retejo.', - 'info_gauche_admin_effacer' => 'Nur respondeculoj de la retejo rajtas aliri tiun paĝon.

    Ĝi ebligas aliron al la diversaj funkcioj pri teknika bontenado. Iuj el ili okazigas specifan aŭtentigan procezon, kiu postulas disponi je FTP-alirrajto al la retejo.

    ', 'info_gauche_admin_tech' => 'Nur respondeculoj de la retejo rajtas aliri tiun paĝon.

    Ĝi ebligas aliron al la diversaj funkcioj pri teknika bontenado. Iuj el ili okazigas specifan aŭtentigan procezon, kiu postulas disponi je FTP-alirrajto al la retejo.

    ', 'info_gauche_admin_vider' => 'Nur respondeculoj de la retejo rajtas aliri tiun paĝon.

    Ĝi ebligas aliron al la diversaj funkcioj pri teknika bontenado. Iuj el ili okazigas specifan aŭtentigan procezon, kiu @@ -353,20 +297,13 @@ postulas disponi je FTP-alirrajto al la retejo.

    ', 'info_gauche_auteurs_exterieurs' => 'La eksteraj aŭtoroj, sen alireblo al la retejo, estas indikitaj per blua piktogramo ; la aŭtoroj forviŝitaj per griza piktogramo.', 'info_gauche_messagerie' => 'La mesaĝilo ebligas al vi interŝanĝi mesaĝojn inter aŭtoroj, konservi memorigilojn (por via propra uzado) aŭ afiŝi anoncojn ĉe la hejmpaĝo de la privata spaco (se vi estas mastrumanto).', - 'info_gauche_numero_auteur' => 'AŬTORA NUMERO', 'info_gauche_statistiques_referers' => 'Tiu paĝo prezentas la liston de la referencoj, tio estas retejoj enhavantaj ligilojn al via propra retejo, nur koncerne hieraŭ kaj hodiaŭ : tiu listo estas prastatigita ĉiujn 24 horojn.', 'info_gauche_visiteurs_enregistres' => 'Vi trovos ĉi tie la vizitantojn registritajn en la publika spaco de la retejo (forumoj laŭ abono).', 'info_generation_miniatures_images' => 'Bildoj-miniaturigo', - 'info_gerer_trad' => 'Ĉu mastrumi la traduk-ligilojn ?', 'info_gerer_trad_objets' => '@objets@ : mastrumi la traduk-ligilojn', 'info_hebergeur_desactiver_envoi_email' => 'Iuj retgastigantoj malaktivigas la aŭtomatan retleteroj-sendadon ekde ties serviloj. Tiukaze, la jenaj SPIP-funkcioj ne fonkcios.', 'info_hier' => 'hieraŭ :', - 'info_historique_activer' => 'Aktivigi la superrigardo de la revizioj', - 'info_historique_affiche' => 'Afiŝi tiun version', - 'info_historique_comparaison' => 'kompari', - 'info_historique_desactiver' => 'Malaktivigi la superrigardon de la revizioj', - 'info_historique_texte' => 'La superrigardo de revizioj ebligas konservi historion de ĉiuj modifoj al la enhavo de artikolo, kaj afiŝi la diferencojn inter la sinsekvaj versioj.', 'info_identification_publique' => 'Via publika identeco...', 'info_image_process' => 'Bonvolu elekti la plej bonan metodon por fabriki vinjetojn musklakante laŭcele bildon.', 'info_image_process2' => 'Se neniu bildo afiŝiĝas, tio signifas ke la servilo kiu gastigas vian retejon ne estas konfigurita por uzi tiajn ilojn. Se vi deziras uzi tiujn funkciojn, petu la « GD » aŭ « Imagick » modulojn al la teknika repondeculo.', @@ -387,8 +324,6 @@ postulas disponi je FTP-alirrajto al la retejo.

    ', 'info_logos' => 'La vinjetoj', 'info_maximum' => 'maksimumo :', 'info_meme_rubrique' => 'En la sama rubriko', - 'info_message' => 'Mesaĝo de la', - 'info_message_efface' => 'MESAĜO FORVIŜITA', 'info_message_en_redaction' => 'Viaj redaktataj mesaĝoj', 'info_message_technique' => 'Teknika mesaĝo :', 'info_messagerie_interne' => 'Interna mesaĝilo', @@ -400,29 +335,22 @@ postulas disponi je FTP-alirrajto al la retejo.

    ', 'info_modifier_rubrique' => 'Modifi la rubrikon :', 'info_modifier_titre' => 'Modifi : @titre@', 'info_mon_site_spip' => 'Mia SPIP-retejo', - 'info_mot_sans_groupe' => '(Vortoj sen grupo...)', - 'info_moteur_recherche' => 'Integrita serĉilo', 'info_moyenne' => 'meznombro :', - 'info_multi_articles' => 'Ĉu aktivigi la lingvomenuon en la artikoloj ?', 'info_multi_cet_article' => 'Lingvo de tiu ĉi artikolo :', 'info_multi_langues_choisies' => 'Bonvolu elekti ĉi-sube la lingvojn, kiujn vi volas disponigi al la redaktantoj de via retejo. Vi ne povas malaktivigi la lingvojn jam uzatajn (unue afiŝitajn) ĉe via retejo.', 'info_multi_objets' => '@objets@ : aktivigi la lingvomenuon', - 'info_multi_rubriques' => 'Ĉu aktivigi la lingvomenuon en la rubrikoj ?', 'info_multi_secteurs' => '... ĉu nur por la rubrikoj situantaj ĉe la radiko ?', 'info_nb_articles' => '@nb@ artikoloj', - 'info_nb_articles_syndiques' => '@nb@ abonligitaj artikoloj', 'info_nb_auteurs' => '@nb@ aŭtoroj', 'info_nb_messages' => '@nb@ mesaĝoj', 'info_nb_mots_cles' => '@nb@ ŝlosilvortoj', 'info_nb_rubriques' => '@nb@ rubrikoj', - 'info_nb_sites' => '@nb@ retejoj', 'info_nb_visiteurs' => '@nb@ vizitantoj', 'info_nom' => 'Nomo', 'info_nom_destinataire' => 'Nomo de la adresato', 'info_nom_site' => 'Nomo de via retejo', 'info_nombre_articles' => '@nb_articles@ artikoloj,', - 'info_nombre_partcipants' => 'PARTOPRENANTOJ EN LA DISKUTO :', 'info_nombre_rubriques' => '@nb_rubriques@ rubrikoj,', 'info_nombre_sites' => '@nb_sites@ retejoj,', 'info_non_deplacer' => 'Ne transloki...', @@ -430,19 +358,14 @@ postulas disponi je FTP-alirrajto al la retejo.

    ', 'info_non_envoi_liste_nouveautes' => 'Ne sendi la liston de la novaĵoj.', 'info_non_modifiable' => 'ne modifebla', 'info_non_suppression_mot_cle' => 'mi ne volas forviŝi tiun ŝlosilvorton.', - 'info_note_numero' => 'Noto @numero@', 'info_notes' => 'Notoj', - 'info_nouveaux_message' => 'Novaj mesaĝoj', 'info_nouvel_article' => 'Nova artikolo', 'info_nouvelle_traduction' => 'Nova tradukaĵo :', 'info_numero_article' => 'ARTIKOLO NUMERO :', 'info_obligatoire_02' => '(deviga)', 'info_option_accepter_visiteurs' => 'Permesi registriĝojn de vizitantoj el la publika spaco', - 'info_option_faire_suivre' => 'Plusendi la mesaĝojn de la forumoj al la aŭtoroj de la artikoloj', 'info_option_ne_pas_accepter_visiteurs' => 'Rifuzi registriĝon de vizitantoj', 'info_options_avancees' => 'PLENDETALAJ AGORDOJ', - 'info_ortho_activer' => 'Aktivigi la ortografian kontrolilon', - 'info_ortho_desactiver' => 'Malaktivigi la ortografian kontrolilon', 'info_ou' => 'aŭ...', 'info_page_interdite' => 'Malpermesata paĝo', 'info_par_nom' => 'laŭ nomo', @@ -452,20 +375,14 @@ postulas disponi je FTP-alirrajto al la retejo.

    ', 'info_passe_trop_court' => 'Pasvorto tro mallonga.', 'info_passe_trop_court_car_pluriel' => 'La pasvorto devas enhavi almenaŭ @nb@ signojn.', 'info_passes_identiques' => 'Ambaŭ pasvortoj ne samas.', - 'info_pense_bete_ancien' => 'Viaj malnovaj memorigiloj', 'info_plus_cinq_car' => 'pli ol 5 signoj', 'info_plus_cinq_car_2' => '(Pli ol 5 signoj)', 'info_plus_trois_car' => '(Pli ol 3 signoj)', 'info_popularite' => 'populareco : @popularite@ ; vizitoj : @visites@', - 'info_popularite_4' => 'populareco : @popularite@ ; vizitoj : @visites@', 'info_post_scriptum' => 'Postskribo', 'info_post_scriptum_2' => 'Postskribo :', 'info_pour' => 'por', - 'info_preview_admin' => 'Nur la mastrumantoj povas antaŭrigardi la retejon', - 'info_preview_comite' => 'Ĉiuj redaktantoj povas antaŭrigardi la retejon', - 'info_preview_desactive' => 'La antaŭrigardeblo estas malaktivigita', - 'info_preview_texte' => 'Eblas antaŭrigardi la retejon kvazaŭ ciuj artikoloj kaj fulm-informoj (kiuj almenaŭ havas la statuson « proponatan ») estus publikigitaj. Ĉu tio eblu nur al mastrumantoj, al ĉiuj redaktantoj, aŭ al neniu ?', - 'info_principaux_correspondants' => 'Viaj ĉefaj korespondantoj', + 'info_preview_texte' => 'Eblas antaŭrigardi la retejon kvazaŭ ciuj artikoloj kaj fulm-informoj (kiuj almenaŭ havas la statuson « proponatan ») estus publikigitaj. Ĉu tio eblu nur al mastrumantoj, al ĉiuj redaktantoj, aŭ al neniu ?', # MODIF 'info_procedez_par_etape' => 'procedu etapon post etapo', 'info_procedure_maj_version' => 'la ĝisdatiga proceduro devas esti lanĉita por adapti la datenbazon al la nova versio de SPIP.', @@ -482,14 +399,9 @@ postulas disponi je FTP-alirrajto al la retejo.

    ', alir-kodoj al la privata spaco. Iuj retejgastigantoj malaktivigas la sendadon de retleteroj el siaj serviloj : tiukaze la aŭtomata aliĝo ne eblos.', - 'info_question_utilisation_moteur_recherche' => 'Ĉu vi deziras uzi la SPIP-internan serĉilon ? - (malaktivigi ĝin rapidigas la funkciadon de la sistemo.)', - 'info_question_vignettes_referer_non' => 'Ne vidigi de kiuj retejoj venas vizitantoj', 'info_qui_edite' => '@nom_auteur_modif@ laboris pri tiu ĉi enhavo antaŭ @date_diff@ minutoj', 'info_racine_site' => 'Radiko de la retejo', 'info_recharger_page' => 'Bonvolu refreŝigi tiun ĉi paĝon post momento.', - 'info_recherche_auteur_a_affiner' => 'Tro da rezultoj por "@cherche_auteur@" ; bonvolu fajnigi la serĉokriteriojn.', - 'info_recherche_auteur_ok' => 'Pluraj redaktantoj trovitaj por "@cherche_auteur@" :', 'info_recherche_auteur_zero' => 'Neniu rezulto por "@cherche_auteur@".', 'info_recommencer' => 'Bonvolu rekomenci.', 'info_redacteur_1' => 'Redaktanto', @@ -508,7 +420,6 @@ postulas disponi je FTP-alirrajto al la retejo.

    ', 'info_rubriques' => 'Rubrikoj', 'info_rubriques_02' => 'rubrikoj', 'info_rubriques_trouvees' => 'Trovitaj rubrikoj', - 'info_rubriques_trouvees_dans_texte' => 'Rubrikoj trovitaj (en la teksto)', 'info_sans_titre' => 'Sen titolo', 'info_selection_chemin_acces' => 'Selektu ĉi-sube alirvojon en la dosierujilo :', 'info_signatures' => 'subskriboj', @@ -521,14 +432,12 @@ postulas disponi je FTP-alirrajto al la retejo.

    ', 'info_sites_lies_mot' => 'La referencigitaj retejoj ligitaj al tiu ĉi ŝlosilvorto', 'info_sites_proxy' => 'Uzi prokuran servilon', 'info_sites_trouves' => 'Retejoj trovitaj', - 'info_sites_trouves_dans_texte' => 'Retejoj trovitaj (en la teksto)', 'info_sous_titre' => 'Subtitolo :', 'info_statut_administrateur' => 'Mastrumanto', 'info_statut_auteur' => 'Statuso de tiu ĉi aŭtoro :', 'info_statut_auteur_2' => 'Mi estas', 'info_statut_auteur_a_confirmer' => 'Konfirmenda registropeto', 'info_statut_auteur_autre' => 'Alia statuso :', - 'info_statut_efface' => 'forviŝita', 'info_statut_redacteur' => 'Redaktanto', 'info_statut_utilisateurs_1' => 'Defaŭlta statuso de la importitaj uzantoj', 'info_statut_utilisateurs_2' => 'Elektu la statuson atribuotan al la personoj ĉeestantaj en LDAP-dosierujilo, kiam ili unuafoje konektiĝas. Poste vi povos modifi tiun valoron por ĉiu aŭtoro laŭkaze.', @@ -551,7 +460,6 @@ postulas disponi je FTP-alirrajto al la retejo.

    ', 'info_tous_articles_presents' => 'Ĉiuj artikoloj publikigitaj en tiu ĉi rubriko', 'info_tous_articles_refuses' => 'Ĉiuj artikoloj rifuzitaj', 'info_tous_les' => 'ĉiuj :', - 'info_tous_redacteurs' => 'Anoncoj al ĉiuj redaktantoj', 'info_tout_site' => 'La tuta retejo', 'info_tout_site2' => 'La artikolon oni ne tradukis al tiu lingvo.', 'info_tout_site3' => 'La artikolo jam haveblas en tiu lingvo, sed modifoj estis poste aldonitaj al la referenca artikolo. Bonvolu ĝisdatigi la tradukaĵon.', @@ -567,7 +475,6 @@ La tradukoj estas kunligitaj al la originalo, kun koloro kiu indikas ties staton 'info_une_rubrique_02' => '1 rubriko', 'info_url' => 'URL :', 'info_url_proxy' => 'URL de la prokura servilo', - 'info_url_site' => 'RETEJO-URL :', 'info_url_test_proxy' => 'URL de testo', 'info_urlref' => 'Hiperligilo :', 'info_utilisation_spip' => 'Vi povas nun ekuzi la asistatan publikigilon...', @@ -578,7 +485,6 @@ La tradukoj estas kunligitaj al la originalo, kun koloro kiu indikas ties staton 'info_visiteurs_02' => 'Vizitantoj de la publika spaco', 'info_webmestre_forces' => 'La retejestroj nune estas difinita en @file_options@.', 'install_adresse_base_hebergeur' => 'Adreso de la datenbazo atribuita de la retejgastiganto', - 'install_base_ok' => 'La datumbazo @base@ estis rekonita', 'install_connect_ok' => 'La nova bazo estis bone deklarita kiel servilonomo @connect@.', 'install_echec_annonce' => 'Certe la instalado estas malsukcesonta, aŭ naskos ne funkciivan retejon...', 'install_extension_mbstring' => 'SPIP ne funkcias per :', @@ -607,8 +513,6 @@ La tradukoj estas kunligitaj al la originalo, kun koloro kiu indikas ties staton 'item_activer_messages_avertissement' => 'Aktivigi la averto-mesaĝojn', 'item_administrateur_2' => 'mastrumanto', 'item_afficher_calendrier' => 'Afiŝi en la kalendaro', - 'item_autoriser_documents_joints' => 'Permesi alkroĉon de dokumentoj al la artikoloj', - 'item_autoriser_documents_joints_rubriques' => 'Permesi dokumentojn en la rubrikoj', 'item_autoriser_syndication_integrale' => 'Disponigi la tuton de la artikoloj en la abondosieroj', 'item_choix_administrateurs' => 'la mastrumantoj', 'item_choix_generation_miniature' => 'Aŭtomatigi miniaturigadon de la bildoj.', @@ -616,7 +520,6 @@ La tradukoj estas kunligitaj al la originalo, kun koloro kiu indikas ties staton 'item_choix_redacteurs' => 'la redaktantoj', 'item_choix_visiteurs' => 'la vizitantoj de la publika spaco', 'item_creer_fichiers_authent' => 'Krei la dosierojn .htpasswd', - 'item_limiter_recherche' => 'Limigi la serĉprocezon al informoj entenataj ĉe via retejo', 'item_login' => 'Salutnomo', 'item_messagerie_agenda' => 'Aktivigi la mesaĝilon kaj la agendon', 'item_mots_cles_association_articles' => 'al artikoloj', @@ -626,22 +529,15 @@ La tradukoj estas kunligitaj al la originalo, kun koloro kiu indikas ties staton 'item_non_accepter_inscriptions' => 'Ne akcepti la registropetojn', 'item_non_activer_messages_avertissement' => 'Neniuj averto-mesaĝoj', 'item_non_afficher_calendrier' => 'Ne afiŝi en la kalendaro', - 'item_non_autoriser_documents_joints' => 'Ne permesi dokumentojn en la artikoloj', - 'item_non_autoriser_documents_joints_rubriques' => 'Ne permesi dokumentojn en la rubrikoj', 'item_non_autoriser_syndication_integrale' => 'Nur disponigi po unu resumo', - 'item_non_compresseur' => 'Malaktivigi la densigon', 'item_non_creer_fichiers_authent' => 'Ne krei tiujn ĉi dosierojn', - 'item_non_gerer_statistiques' => 'Ne mastrumi statistikojn', - 'item_non_limiter_recherche' => 'Etendi la serĉadon al la enhavo de la referencigitaj retejoj', 'item_non_messagerie_agenda' => 'Malaktivigi la mesaĝilon kaj la agendon', 'item_non_publier_articles' => 'Ne publikigi la artikolojn antaŭ la fiksita publikig-dato.', - 'item_non_utiliser_moteur_recherche' => 'Ne uzi la serĉilon', 'item_nouvel_auteur' => 'Nova aŭtoro', 'item_nouvelle_rubrique' => 'Nova rubriko', 'item_oui' => 'Jes', 'item_publier_articles' => 'Publikigi la artikolojn, kiu ajn estas ties publikig-dato.', 'item_reponse_article' => 'Respondo al la artikolo', - 'item_utiliser_moteur_recherche' => 'Uzi la serĉilon', 'item_version_html_max_html4' => 'Limiĝi al HTML4 en publika spaco', 'item_version_html_max_html5' => 'Permesi HTML5', 'item_visiteur' => 'vizitanto', @@ -656,15 +552,13 @@ La tradukoj estas kunligitaj al la originalo, kun koloro kiu indikas ties staton 'label_choix_langue' => 'Elektu vian lingvon', 'label_nom_fichier_connect' => 'Indiku la nomon uzita por tiu servilo', 'label_slogan_site' => 'Devizo de la retejo', - 'label_taille_ecran' => 'Larĝo de la ekrano', + 'label_taille_ecran' => 'Larĝo de la ekrano', # MODIF 'label_texte_et_icones_navigation' => 'Naviga menuo', 'label_texte_et_icones_page' => 'Afiŝado en paĝo', 'ldap_correspondance' => 'heredado de la kampo @champ@', 'ldap_correspondance_1' => 'Heredadoj de LDAP-kampoj', 'ldap_correspondance_2' => 'Por ĉiuj jenaj SPIP-kampoj, indiki la nomo de la rilata LDAP-kampo. Lasi malplenan por ne plenigis ĝin, apartigi per spacoj aŭ komoj por provi plurajn LDAP-kampoj.', - 'lien_ajout_destinataire' => 'Aldoni tiun adresaton', 'lien_ajouter_auteur' => 'Aldoni tiun aŭtoron', - 'lien_ajouter_participant' => 'Aldoni partoprenanton', 'lien_ajouter_une_rubrique' => 'Aldoni tiu rubriko', 'lien_email' => 'retpoŝtadreso', 'lien_nom_site' => 'NOMO DE LA RETEJO :', @@ -672,9 +566,7 @@ La tradukoj estas kunligitaj al la originalo, kun koloro kiu indikas ties staton 'lien_retirer_rubrique' => 'Forviŝi la rubrikon', 'lien_retirer_tous_auteurs' => 'Forviŝi ĉiujn aŭtorojn', 'lien_retirer_toutes_rubriques' => 'Forviŝi ĉiujn rubrikojn', - 'lien_retrait_particpant' => 'Forviŝi tiun ĉi partoprenanton', 'lien_site' => 'retejo', - 'lien_supprimer_rubrique' => 'forviŝi tiun ĉi rubrikon', 'lien_tout_deplier' => 'Malfaldi ĉion', 'lien_tout_replier' => 'Refaldi ĉion', 'lien_tout_supprimer' => 'Ĉion forviŝi', @@ -700,13 +592,12 @@ La tradukoj estas kunligitaj al la originalo, kun koloro kiu indikas ties staton 'mois_non_connu' => 'nekonata', // N - 'nouvelle_version_spip' => 'SPIP-versio @version@ estas disponebla', + 'nouvelle_version_spip' => 'SPIP-versio @version@ estas disponebla', # MODIF // O 'onglet_contenu' => 'Enhavo', 'onglet_declarer_une_autre_base' => 'Deklari alian datumbazon', 'onglet_discuter' => 'Diskuti', - 'onglet_documents' => 'Dokumentoj', 'onglet_interactivite' => 'Interago', 'onglet_proprietes' => 'Trajtoj', 'onglet_repartition_actuelle' => 'nun', @@ -749,7 +640,7 @@ La tradukoj estas kunligitaj al la originalo, kun koloro kiu indikas ties staton 'plugin_info_telecharger' => 'elŝutota de @url@ kaj instalota en @rep@', 'plugin_librairies_installees' => 'Instalitaj bibliotekoj', 'plugin_necessite_lib' => 'Tiu ĉi kromprogramo bezonas la bibliotekon @lib@', - 'plugin_necessite_plugin' => 'Postulas la kromprogramon @plugin@ minimume laŭ versio @version@.', + 'plugin_necessite_plugin' => 'Postulas la kromprogramon @plugin@ minimume laŭ versio @version@.', # MODIF 'plugin_necessite_plugin_sans_version' => 'Necesas la kromprogramon @plugin@', 'plugin_necessite_spip' => 'Necesas SPIP laŭ minimume versio @version@.', 'plugin_source' => 'fonto : ', @@ -784,7 +675,7 @@ La tradukoj estas kunligitaj al la originalo, kun koloro kiu indikas ties staton // Q 'queue_executer_maintenant' => 'Lanĉi nun', - 'queue_info_purger' => 'Vi povas forviŝi ĉiujn atendante taskojn kaj restarigi la liston kun la periodaj taskoj', + 'queue_info_purger' => 'Vi povas forviŝi ĉiujn atendante taskojn kaj restarigi la liston kun la periodaj taskoj', # MODIF 'queue_nb_jobs_in_queue' => '@nb@ atendante taskoj', 'queue_next_job_in_nb_sec' => 'Sekva tasko post @nb@ s', 'queue_no_job_in_queue' => 'Neniu atendante tasko', @@ -794,6 +685,7 @@ La tradukoj estas kunligitaj al la originalo, kun koloro kiu indikas ties staton // R 'repertoire_plugins' => 'Dosierujo :', + 'required' => '(deviga)', // S 'sans_heure' => 'sen horo', @@ -822,19 +714,14 @@ SPIP-reinstalon por rekrei novan bazon kaj unuan mastrumulan alirrajton.', 'texte_article_virtuel_reference' => 'Virtuala artikolo : artikolo referencigita ĉe via SPIP-retejo, sed alidirektita al alia retadreso. Por forigi la alidirekton, forviŝu la ĉi supran URL-n.', 'texte_aucun_resultat_auteur' => 'Neniu rezulto por "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Tiu retejo povas konstante indiki la liston de la konektitaj redaktantoj. Tio ebligas al vi rekte interŝanĝi mesaĝojn. Vi povas decidi ne aperi en tia listo (vi estas « nevidebla » al la aliaj uzantoj).', - 'texte_auteur_messagerie_1' => 'Tiu retejo ebligas la interŝanĝon de mesaĝoj kaj la estigon de privataj forumoj inter la partoprenantoj de la retejo. Vi povas decidi ne partopreni en tiaj interŝanĝoj.', 'texte_auteurs' => 'LA AŬTOROJ', 'texte_choix_base_1' => 'Elektu vian datenbazon :', 'texte_choix_base_2' => 'La SQL-servilo enhavas plurajn datenbazojn.', 'texte_choix_base_3' => 'Elektu ĉi-poste tiun, kiun atribuis al vi via retejgastiganto :', 'texte_choix_table_prefix' => 'Prefikso de la tabeloj :', - 'texte_commande_vider_tables_indexation' => 'Uzu tiun komandon por malplenigi la indeksajn tabelojn uzatajn - de la SPIP-integrita serĉilo. Tio ebligos al vi - gajni diskospacon.', 'texte_compatibilite_html' => 'Vi povas peti SPIP por produkti en la publika spaco, kodon kongruan kun HTML4, aŭ rajtigi ĝin por uzi la pli modernaj eblecoj de la HTML5.', 'texte_compatibilite_html_attention' => 'Estas neniu risko aktivigi la opcion HTML5, sed se vi faras, la paĝoj de via retejo devos komenciĝi per la sekva mencio por resti valida : < !DOCTYPE html>. ', - 'texte_compresse_ou_non' => '(tiu ĉi povas aŭ ne esti densigita)', 'texte_compte_element' => '@count@ elemento', 'texte_compte_elements' => '@count@ elementoj', 'texte_conflit_edition_correction' => 'Bonvolu kontroli ĉi-sube la diferencojn inter ambaŭ versioj de la teksto, vi povas ankaŭ kopii viajn ŝanĝojn, poste restartu.', @@ -853,10 +740,8 @@ SPIP-reinstalon por rekrei novan bazon kaj unuan mastrumulan alirrajton.', 'texte_date_publication_anterieure_nonaffichee' => 'Ne afiŝi daton de antaŭa redakto.', 'texte_date_publication_article' => 'DATO DE RETA PUBLIKIGO :', 'texte_date_publication_objet' => 'Dato de reta publikigo :', - 'texte_descriptif_petition' => 'Priskribo de petskribo', 'texte_descriptif_rapide' => 'Konciza priskribo', 'texte_effacer_base' => 'Forviŝi la SPIP-datenbazon', - 'texte_effacer_donnees_indexation' => 'Forviŝi la indeksajn datenojn', 'texte_effacer_statistiques' => 'Forviŝi statistikojn', 'texte_en_cours_validation' => 'La enhavoj ĉi-subaj estas proponitaj por publikigo.', 'texte_enrichir_mise_a_jour' => 'Vi povas pliriĉigi la enpaĝigon de via teksto uzante « tipografiajn rapidklavojn ».', @@ -871,30 +756,19 @@ SPIP-reinstalon por rekrei novan bazon kaj unuan mastrumulan alirrajton.', 'texte_informations_personnelles_2' => '(Noto : se temas pri reinstalo kaj se via aliro daŭre funkcias, vi povas', 'texte_introductif_article' => '(Enkonduka teksto al la artikolo.)', 'texte_jeu_caractere' => 'Ni konsilas al vi uzi, en via retejo, universalan alfabeton (utf-8) : tio ebligas afiŝadon de tekstoj en ĉiuj lingvoj kaj solvas problemojn de kongrueco se vi uzas modernajn retumilojn.', - 'texte_jeu_caractere_2' => 'Atentu : tiu agordo ne konvertas tekstojn jam registritajn en la datenbazo.', 'texte_jeu_caractere_3' => 'Via retejo estas nun instalita laŭ la litertiparo :', 'texte_jeu_caractere_4' => 'Se tio ne kongruas kun la realo de viaj datenoj (ekzemple, sekve de datenbazo-restaŭro), aŭ se vi ĵus ekkreis tiun retejon kaj deziras ekuzi novan litertiparon, bonvolu indiki ĝin ĉi tie :', - 'texte_jeu_caractere_conversion' => 'Noto : vi povas decidi konverti definitive ĉiujn tekstojn de via retejo (artikoloj, fulm-informoj, forumoj, ktp...) en alfabeton utf-8, irante ĉe la al-utf-8-konvertan paĝon.', - 'texte_lien_hypertexte' => 'Se via mesaĝo rilatas al artikolo publikigita ĉe la reto, aŭ al paĝo donanta pli da informoj, bonvolu indiki ĉi-poste la titolon de la paĝo kaj ties URL-adreson.)', 'texte_login_ldap_1' => 'Lasu malplena por sennoma aliro, aŭ entajpu la kompletan vojon, ekzemple « uid=nomo, ou=uzanto, dc=mia-domajno, dc=com ».)', 'texte_login_precaution' => 'Atentu ! Tio ĉi estas la salutnomo laŭ kiu vi ensalutis. Uzu tiun ĉi formularon prudente...', - 'texte_message_edit' => 'Atentu : tiu ĉi mesaĝo povas esti modifita de ĉiuj mastrumantoj de la retejo, kaj estas videbla de ĉiuj redaktantoj. Uzu la anoncojn nur por sciigi eventojn gravajn pri la vivo de la retejo.', 'texte_messagerie_agenda' => 'Mesaĝado permesas al retejaj redaktantoj komuniki inter si rekte en la privata spaco de la retejo. Ĝi estas asociita kun agendo.', 'texte_mise_a_niveau_base_1' => 'Vi ĵus ĝisdatigis la SPIP-dosierojn. Necesas nun alniveligi la datenbazon de la retejo.', 'texte_modifier_article' => 'Modifi la artikolon :', - 'texte_moteur_recherche_active' => 'La serĉilo estas aktiva. Uzu tiun komandon - se vi volas fari rapidan reindeksigon (ekzemple post restaŭro - de savkopio). Notu ke la dokumentoj normale modifitaj - (ekde la SPIP-interfaco) estas aŭtomate reindeksitaj : - tiu ĉi komando estas do nur escepte utila.', - 'texte_moteur_recherche_non_active' => 'La serĉilo ne estas aktivigita.', 'texte_multilinguisme' => 'Se vi deziras mastrumi la objektojn en pluraj lingvoj, per kompleksa retumado, vi povas aldoni menuon pri lingvoelekto en la objektojn, konforme al la organizo de via retejo.', 'texte_multilinguisme_trad' => 'Vi povas ankaŭ aktivigi sistemon por mastrumi la ligilojn inter la diversaj tradukoj sur iuj objektoj.', 'texte_non_compresse' => 'ne densigita (ĉar via servilo ne eltenas tiun funkcion)', - 'texte_nouveau_message' => 'Nova mesaĝo', 'texte_nouvelle_version_spip_1' => 'Vi instalis novan version de SPIP.', 'texte_nouvelle_version_spip_2' => 'Tiu ĉi nova versio bezonas pli kompletan ĝisdatigon ol kutime. Se vi estas retejestro de la retejo, bonvolu forviŝi la dosieron @connect@ kaj restarigi la instalprocezon por ĝisdatigi viajn konekt-parametrojn al la datenbazo.

    (Notu : se vi forgesis viajn konektparametrojn, legu la dosieron @connect@ antaŭ ol forviŝi ĝin...)

    ', 'texte_operation_echec' => 'Reiru al antaŭa paĝo, selektu alian datenbazon aŭ kreu novan. Kontrolu la informojn donitajn de via retgastiganto.', @@ -913,7 +787,6 @@ SPIP-reinstalon por rekrei novan bazon kaj unuan mastrumulan alirrajton.', 'texte_rappel_selection_champs' => '[Ne forgesu ĝuste selekti tiun kampon.]', 'texte_recalcul_page' => 'Se vi volas rekalkuli ununuran paĝon, pasu prefere tra la publika spaco kaj tie uzu la butonon « rekalkuli ».', - 'texte_recapitiule_liste_documents' => 'Tiu ĉi paĝo montras la liston de dokumentoj, kiujn vi metis en la rubrikojn. Por modifi la informojn pri ĉiu dokumento, sekvu la ligilon al la paĝo de ties rubriko.', 'texte_recuperer_base' => 'Ripari la datenbazon', 'texte_reference_mais_redirige' => 'artikolo referencigita ĉe via SPIP-retejo, sed redirektita al alia URL.', 'texte_requetes_echouent' => 'Kiam iuj SQL-serĉpetoj ĉiufoje @@ -942,7 +815,6 @@ en la SPIP-staplo. Tio ebligas ekzemple devigi la sistemon rekalkuli ĉiujn paĝ faris gravajn ŝanĝojn en la grafiko aŭ strukturo de la retejo.', 'texte_sur_titre' => 'Surtitolo', 'texte_table_ok' => ' : tiu tabelo estas en ordo.', - 'texte_tables_indexation_vides' => 'La indeksaj tabeloj de la serĉilo estas malplenaj.', 'texte_tentative_recuperation' => 'Ripar-provo', 'texte_tenter_reparation' => 'Provi riparon de la datenbazo', 'texte_test_proxy' => 'Por testi tiun prokuran servilon, indiku ĉi tie la adreson de retejo, kiun vi deziras testi.', @@ -956,30 +828,12 @@ faris gravajn ŝanĝojn en la grafiko aŭ strukturo de la retejo.', Tiu opcio estas defaŭlte malaktivigita por eviti maloportunajn averto-mesaĝojn.', - 'texte_trop_resultats_auteurs' => 'Tro da rezultoj por "@cherche_auteur@" ; bonvolu fajnigi la serĉokriteriojn.', - 'texte_unpack' => 'Elŝuto de la lasta versio', - 'texte_utilisation_moteur_syndiques' => 'Kiam vi uzas la SPIP-internan serĉilon, - vi povas fari serĉprocezojn ĉe retejoj abonligigitaj laŭ du malsamaj manieroj. -
    - Plej simple - estas serĉi nur en la titoloj - kaj en la priskriboj de la artikoloj.
    - - La dua metodo, multe pli potenca, ebligas - al SPIP serĉi ankaŭ en la teksto de la - referencigitaj retejoj . Se vi referencigas - retejon, SPIP tiam serĉos - en la teksto de la retejo mem.', - 'texte_utilisation_moteur_syndiques_2' => 'Tiu metodo devigas SPIP-n regule viziti - la referencigitajn retejojn. - Tio povas okazigi iometan malrapidiĝon de - via propra retejo.', 'texte_vide' => 'malplena', 'texte_vider_cache' => 'Malplenigi la staplon', - 'titre_admin_effacer' => 'Teknika bontenado', 'titre_admin_tech' => 'Teknika bontenado', 'titre_admin_vider' => 'Teknika bontenado', 'titre_ajouter_un_auteur' => 'Aldoni aŭtoro', 'titre_ajouter_un_mot' => 'Aldoni ŝlosilvorto', - 'titre_ajouter_une_rubrique' => 'Aldoni rubrikon', 'titre_cadre_afficher_article' => 'Afiŝi la artikolojn', 'titre_cadre_afficher_traductions' => 'Afiŝi la traduk-staton por tiuj lingvoj :', 'titre_cadre_ajouter_auteur' => 'ALDONI AŬTORON :', @@ -1006,54 +860,27 @@ faris gravajn ŝanĝojn en la grafiko aŭ strukturo de la retejo.', 'titre_naviguer_dans_le_site' => 'Retejumi...', 'titre_nouvelle_rubrique' => 'Nova rubriko', 'titre_numero_rubrique' => 'RUBRIKO NUMERO :', - 'titre_page_admin_effacer' => 'Teknika bontenado : forviŝi la datenbazon', 'titre_page_articles_edit' => 'Modifi : @titre@', 'titre_page_articles_page' => 'La artikoloj', 'titre_page_articles_tous' => 'La tuta retejo', - 'titre_page_auteurs' => 'Vizitantoj', 'titre_page_calendrier' => 'Kalendaro @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Agordo de la retejo', - 'titre_page_config_fonctions' => 'Agordo de la retejo', - 'titre_page_configuration' => 'Agordo de la retejo', - 'titre_page_controle_petition' => 'Kontrolo de petskriboj', 'titre_page_delete_all' => 'tuta kaj malfarebla forviŝo', - 'titre_page_documents_liste' => 'La dokumentoj de la rubrikoj', - 'titre_page_index' => 'Via privata spaco', - 'titre_page_message_edit' => 'Skribi mesaĝon', - 'titre_page_messagerie' => 'Via mesaĝilo', 'titre_page_recherche' => 'Serĉrezulto @recherche@', 'titre_page_statistiques_referers' => 'Statistikoj (eniraj ligoj)', - 'titre_page_statistiques_signatures_jour' => 'Subskribnombro en tago', - 'titre_page_statistiques_signatures_mois' => 'Subskribnombro en monato', 'titre_page_upgrade' => 'SPIP-alniveligo', 'titre_publication_articles_post_dates' => 'Publikigo de la postdatitaj artikoloj', - 'titre_referencer_site' => 'Referencigi la retejon :', - 'titre_rendez_vous' => 'RENDEVUO :', 'titre_reparation' => 'Riparo', 'titre_suivi_petition' => 'Kontrolo de la petskriboj', 'tls_ldap' => 'Transŝuta tavolsekureco (TLS) :', - 'trad_article_inexistant' => 'Neniu artikolo kun tiu numero.', 'trad_article_traduction' => 'Ĉiuj versioj de tiu ĉi artikolo :', - 'trad_deja_traduit' => 'Eraro : ne eblas ligi tiun artikolon al la petita numero.', 'trad_delier' => 'Ne plu ligi al ties tradukoj', 'trad_lier' => 'Tiu artikolo estas traduko de la artikolo numero :', 'trad_new' => 'Skribi novan tradukon', // U - 'upload_info_mode_document' => 'Enmeti tiun bildon en la bildteko', - 'upload_info_mode_image' => 'Eltiri tiun bildon de la bildteko', - 'utf8_convert_attendez' => 'Atendu kelkajn momentojn kaj refreŝigu tiun paĝon.', - 'utf8_convert_avertissement' => 'Vi estas konvertonta la enhavon de via datenbazo (artikoloj, fulm-informoj, ktp...) kun la litertiparo @orig@ al la litertiparo @charset@.', - 'utf8_convert_backup' => 'Antaŭe, ne forgesu fari kompletan savkopion de via retejo. Vi devos ankaŭ kontroli, ke viaj skeletoj kaj lingvaj dosieroj kungruas kun @charset@.', - 'utf8_convert_erreur_deja' => 'Via retejo jam estas je @charset@, estas senutile konverti ĝin...', 'utf8_convert_erreur_orig' => 'Eraro : la litertiparo @charset@ ne estas eltenata.', - 'utf8_convert_termine' => 'Finite !', - 'utf8_convert_timeout' => 'Grava : kaze de servila eltempiĝo bonvolu freŝigi la paĝon ĝis kiam ĝi indikos « finite ».', - 'utf8_convert_verifier' => 'Vi devas nun malplenigi la staplon, kaj kontroli ke ĉio bonas ĉe la publikaj paĝoj de la retejo. Kaze de grava problemo, savkopio de viaj datenoj estas farita (je la SQL-formato) en la dosierujo @rep@.', - 'utf8_convertir_votre_site' => 'Konverti vian retejon en utf-8', // V 'version' => 'Versio :' ); - -?> diff --git a/www/ecrire/lang/ecrire_es.php b/www/ecrire/lang/ecrire_es.php index 8f11c921..7ab37f25 100644 --- a/www/ecrire/lang/ecrire_es.php +++ b/www/ecrire/lang/ecrire_es.php @@ -1,9 +1,11 @@ 'La conexión con la base de datos ha fallado.', 'avis_connexion_echec_2' => 'Regresa a la página precedente y verifica las informaciones procuradas.', 'avis_connexion_echec_3' => 'Aviso: En muchos servidores, es necesario solicitar la activación del acceso a la base de datos SQL antes de poder usarla. En caso de no poder conectarse a la base de datos, compruebe que se ha realizado la activación.', + 'avis_connexion_erreur_creer_base' => 'La base de datos no se ha podido crear', 'avis_connexion_erreur_nom_base' => 'El nombre de la base sólo puede contener letras, dígitos y guiones.', 'avis_connexion_ldap_echec_1' => 'La conexión al servidor LDAP ha fallado.', 'avis_connexion_ldap_echec_2' => 'Regrese a la página anterior y compruebe la información procurada.', 'avis_connexion_ldap_echec_3' => 'Alternativamente, no utilice el soporte LDAP para importar usuarios.', 'avis_deplacement_rubrique' => '¡ATENCIÓN! Esta sección contiene @contient_breves@ breve@scb@. Si la desplaza, active esta casilla de confirmación.', - 'avis_destinataire_obligatoire' => 'Debe indicar un destinatario antes de enviar este mensaje.', 'avis_erreur_connexion_mysql' => 'Error de conexión SQL', - 'avis_erreur_version_archive' => '¡OjO! El archivo @archive@ corresponde a - otra versión de SPIP, diferente a la instalada. Si continúa podrá encontrar grandes - dificultades: riesgo de destrucción de su base de - datos, disfuncionamientos varios del sitio, etc. No - valide esta importación.

    Para mayor información, ver - la documentación de SPIP

    .', - 'avis_espace_interdit' => 'Espacio prohibido
    SPIP ya está instalado.
    ', + 'avis_espace_interdit' => 'Espacio prohibido
    SPIP ya está instalado.
    ', 'avis_lecture_noms_bases_1' => 'El programa de instalación no logró leer los nombres de las bases de datos instaladas.', 'avis_lecture_noms_bases_2' => 'Dos posibilidades: o no hay ninguna base disponible o la función de listado de las bases fue desactivada por razones de seguridad (caso frecuente en muchos hospedajes).', 'avis_lecture_noms_bases_3' => 'En el segundo caso, es probable que una base que tenga como nombre su identificador de usuario sea utilizable:', - 'avis_non_acces_message' => 'No tiene acceso a este mensaje.', 'avis_non_acces_page' => 'No tiene acceso a esta página.', 'avis_operation_echec' => 'La operación ha fallado.', 'avis_operation_impossible' => 'Operación imposible', - 'avis_probleme_archive' => 'Problema de lectura del archivo @archive@', 'avis_suppression_base' => '¡ATENCIÓN, la supresión de datos es irreversible!', - 'avis_version_mysql' => 'Tu servidor SQL (@version_mysql@) no permite la auto-reparación de tablas en la base.', // B 'bouton_acces_ldap' => 'Añadir un acceso LDAP', 'bouton_ajouter' => 'Añadir', - 'bouton_ajouter_participant' => 'AÑADIR UN PARTICIPANTE:', - 'bouton_annonce' => 'ANUNCIO', 'bouton_annuler' => 'Anular', 'bouton_cache_activer' => 'Reactivar la caché', 'bouton_cache_desactiver' => 'Desactivar temporalmente la caché', - 'bouton_checkbox_envoi_message' => 'posibilidad de enviar un mensaje', - 'bouton_checkbox_indiquer_site' => 'indicar obligatoriamente un sitio Web', - 'bouton_checkbox_signature_unique_email' => 'una sola firma por correo electrónico', - 'bouton_checkbox_signature_unique_site' => 'una sola firma por sitio Web', 'bouton_demande_publication' => 'Pedir la publicación de este artículo', 'bouton_desactive_tout' => 'Desactivar todo', 'bouton_desinstaller' => 'Desinstalar', - 'bouton_effacer_index' => 'Borrar los índices', 'bouton_effacer_tout' => '¡Borrar TODO!', - 'bouton_envoi_message_02' => 'ENVIAR UN MENSAJE', 'bouton_envoyer_message' => 'Mensaje definitivo: enviar', 'bouton_fermer' => 'Cerrar', 'bouton_mettre_a_jour_base' => 'Actualizar la base de datos', 'bouton_modifier' => 'Modificar', - 'bouton_pense_bete' => 'RECORDATORIO PERSONAL', - 'bouton_radio_activer_messagerie' => 'Activar la mensajería interna', - 'bouton_radio_activer_messagerie_interne' => 'Activar la mensajería interna', - 'bouton_radio_activer_petition' => 'Activar la petición', 'bouton_radio_afficher' => 'Mostrar', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Aparecer en la lista de redactores y redactoras conectados', - 'bouton_radio_desactiver_messagerie' => 'Desactivar la mensajería', 'bouton_radio_envoi_annonces_adresse' => 'Enviar los anuncios a la dirección:', 'bouton_radio_envoi_liste_nouveautes' => 'Enviar la lista de novedades', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'No aparecer en la lista de redactores y redactoras', 'bouton_radio_non_envoi_annonces_editoriales' => 'No enviar anuncios editoriales', - 'bouton_radio_pas_petition' => 'Sin petición', - 'bouton_radio_petition_activee' => 'Petición activada', - 'bouton_radio_supprimer_petition' => 'Suprimir la petición', 'bouton_redirection' => 'Redirección', 'bouton_relancer_installation' => 'Relanzar la instalación', 'bouton_suivant' => 'Siguiente', 'bouton_tenter_recuperation' => 'Intentar reparar', 'bouton_test_proxy' => 'Probar el proxy', 'bouton_vider_cache' => 'Vaciar la caché', - 'bouton_voir_message' => 'Ver el mensaje antes de enviarlo', // C - 'cache_mode_compresse' => 'Los archivos de caché se almacenan en modo comprimido.', - 'cache_mode_non_compresse' => 'Los archivos de caché se almacenan en modo no comprimido.', 'cache_modifiable_webmestre' => 'Este parámetro es modificable por la webmistress del sitio.', 'calendrier_synchro' => 'Si utiliza un software de agenda compatible iCal, puede sincronizarlo con la actualidad editorial de este sitio.', 'config_activer_champs' => 'Activar los campos siguientes', @@ -112,9 +86,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_titre_base_sup' => 'Declaración de una base suplementaria', 'config_titre_base_sup_choix' => 'Elige una base suplementaria', 'connexion_ldap' => 'Conexión:', - 'copier_en_local' => 'Copiar en local', 'creer_et_associer_un_auteur' => 'Crear y asociar un autor', - 'creer_et_associer_une_rubrique' => 'Crear y asociar una sección', // D 'date_mot_heures' => 'horas', @@ -144,7 +116,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Su nombre de usuario', 'entree_login_connexion_1' => 'Su identificador de conexión', 'entree_login_connexion_2' => '(A veces corresponde a su identificador de conexión; a veces se deja vacío)', - 'entree_login_ldap' => 'Login LDAP inicial', 'entree_mot_passe' => 'Su contraseña', 'entree_mot_passe_1' => 'Su contraseña de conexión', 'entree_mot_passe_2' => '(A veces corresponde a tu contraseña FTP y a veces se deja en blanco)', @@ -162,7 +133,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_url' => 'La dirección (URL) de su sitio', 'entree_url_2' => 'Dirección (URL) del sitio', 'erreur_connect_deja_existant' => 'Ya existe un servidor con este nombre', + 'erreur_email_deja_existant' => 'Esta dirección de correo electrónico ya esta registrada.', 'erreur_nom_connect_incorrect' => 'Este nombre de servidor no esta autorizado', + 'erreur_plugin_attribut_balise_manquant' => 'Atributo @attribut@ que falta en la baliza @balise@.', 'erreur_plugin_desinstalation_echouee' => 'La desinstalación del plugin ha fracasado. No obstante, puede desactivarlo.', 'erreur_plugin_fichier_absent' => 'Archivo inexistente ', 'erreur_plugin_fichier_def_absent' => 'Archivo de definición inexistente', @@ -201,16 +174,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_configuration' => 'Configuración', 'icone_creer_auteur' => 'Crear un nuevo autor o autora y asociarla a este artículo', 'icone_creer_mot_cle' => 'Crear una nueva palabra clave y asociarla a este artículo', - 'icone_creer_mot_cle_rubrique' => 'Crear una nueva palabra clave y aplicarla a esta sección', - 'icone_creer_mot_cle_site' => 'Crear una nueva palabra clave y aplicarla a este sitio', 'icone_creer_rubrique_2' => 'Crear una nueva sección', + 'icone_developpement' => 'Desarrollo', 'icone_edition' => 'Edición', - 'icone_envoyer_message' => 'Enviar el mensaje', 'icone_ma_langue' => 'Mi idioma', 'icone_mes_infos' => 'Mis datos', 'icone_mes_preferences' => 'Mis preferencias', 'icone_modifier_article' => 'Modificar este artículo', - 'icone_modifier_message' => 'Modificar el mensaje', 'icone_modifier_rubrique' => 'Modificar esta sección', 'icone_publication' => 'Publicación', 'icone_relancer_signataire' => 'Recordar al firmante', @@ -223,21 +193,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_supprimer_signature' => 'Suprimir esta firma', 'icone_valider_signature' => 'Validar esta firma', 'image_administrer_rubrique' => 'Puedes administrar esta sección', - 'impossible_modifier_login_auteur' => 'No se puede modificar el nombre de usuario.', - 'impossible_modifier_pass_auteur' => 'No se puede modificar la contraseña.', 'info_1_article' => '1 artículo', - 'info_1_article_syndique' => '1 artículo sindicado', 'info_1_auteur' => '1 autor/a', 'info_1_message' => '1 mensaje', 'info_1_mot_cle' => '1 palabra-clave', 'info_1_rubrique' => '1 sección', - 'info_1_site' => '1 sitio', 'info_1_visiteur' => '1 visitante', 'info_activer_cookie' => 'Puede activar una "cookie" de correspondencia, que le permite actualizar páginas y pasar fácilmente de la parte pública a la redacción.', + 'info_activer_menu_developpement' => 'Mostrar el menu desarrollo ', 'info_admin_etre_webmestre' => 'Darme derechos de webmaster', - 'info_admin_gere_rubriques' => 'Esta persona administra las secciones siguientes:', - 'info_admin_gere_toutes_rubriques' => 'Este/a administrador/a maneja todas las secciones.', - 'info_admin_gere_toutes_rubriques_2' => 'Manejo todas las secciones', 'info_admin_je_suis_webmestre' => 'Soy webmaster', 'info_admin_statuer_webmestre' => 'Dar a este/a administrador/a derechos de webmaster', 'info_admin_webmestre' => 'Este/a administrador/a es webmaster', @@ -249,15 +213,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrateurs' => 'Administradores', 'info_administrer_rubrique' => 'Puede administrar esta sección', 'info_adresse' => 'a la dirección:', + 'info_adresse_desinscription' => 'Dirección para darse de baja:', 'info_adresse_url' => 'Dirección (URL) del sitio público', 'info_afficher_par_nb' => 'Visualizar por', - 'info_afficher_visites' => 'Mostrar las visitas para:', 'info_aide_en_ligne' => 'Ayuda en línea de SPIP', 'info_ajout_image' => 'Cuando se añaden imágenes en tanto que documentos, SPIP puede crear automáticamente iconos de estas imágenes insertadas (miniaturas). Resulta útil, por ejemplo, para crear una galería o portafolio.', - 'info_ajout_participant' => 'El participante siguiente ha sido añadido:', 'info_ajouter_rubrique' => 'Añadir otra sección para administrar:', 'info_annonce_nouveautes' => 'Anunciar novedades', - 'info_anterieur' => 'anterior', 'info_article' => 'artículo', 'info_article_2' => 'artículos', 'info_article_a_paraitre' => 'Los artículos con fecha posterior a ser publicados', @@ -267,17 +229,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_miens' => 'Mis artículos', 'info_articles_tous' => 'Todos los artículos', 'info_articles_trouves' => 'Artículos localizados', - 'info_articles_trouves_dans_texte' => 'Artículos encontrados (en el texto)', 'info_attente_validation' => 'Sus artículos en espera de validación', 'info_aucun_article' => 'Ningún artículo', - 'info_aucun_article_syndique' => 'Ningún artículo sindicado', 'info_aucun_auteur' => 'Ningún autor', 'info_aucun_message' => 'Ningún mensaje', 'info_aucun_rubrique' => 'Ninguna sección', - 'info_aucun_site' => 'Ningún sitio', - 'info_aucun_visiteur' => 'Ningún visitante', 'info_aujourdhui' => 'hoy:', - 'info_auteur_message' => 'AUTOR O AUTORA DEL MENSAJE:', + 'info_auteur_gere_rubriques' => 'Este autor gestiona las secciones siguientes :', + 'info_auteur_gere_toutes_rubriques' => 'este autor gestiona todas las secciones', + 'info_auteur_gere_toutes_rubriques_2' => 'yo gestiono todas las secciones', 'info_auteurs' => 'Autores', 'info_auteurs_par_tri' => 'Autores@partri@', 'info_auteurs_trouves' => 'Autores encontrados', @@ -297,8 +257,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_2' => 'o sobre @liste@', 'info_code_acces' => '¡No olvide sus códigos de acceso!', 'info_compatibilite_html' => '¿Qué norma HTML seguir?', - 'info_compresseur_gzip' => 'Se recomienda verificar previamente si el proveedor ya comprime sistemáticamente los scripts php; para lo cual se puede utilizar, por ejemplo, el servicio siguiente: @testgzip@', - 'info_compresseur_texte' => 'Si su servidor no comprime automáticamente las páginas html para enviarlas a los internautas, puedes intentar forzar la compresión para disminuir el tamaño de las páginas enviadas. Atención: esto puede ralentizar considerablemente ciertos servidores.', 'info_config_suivi' => 'Si esta dirección corresponde a una lista de correo, puede indicar aquí abajo la dirección en la cual los participantes del sitio pueden inscribirse. Esta dirección puede ser una URL (por ejemplo la página de inscripción a la lista por la web), o una dirección de correo electrónico con un asunto específico (por ejemplo: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Puede suscribirse a la lista de correo de este sitio. Recibirás por correo electrónico los anuncios de artículos y de breves propuestas a la publicación.', 'info_confirmer_passe' => 'Confirmar la nueva contraseña:', @@ -322,8 +280,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Fecha de redacción anterior:', 'info_date_referencement' => 'FECHA DE SINDICACIÓN DE ESTE SITIO :', 'info_derniere_etape' => '¡Ya terminamos!', - 'info_derniers_articles_publies' => 'Sus últimos artículos publicados', - 'info_desactiver_messagerie_personnelle' => 'Puede activar o desactivar su mensajería personal en este sitio.', 'info_descriptif' => 'Descripción:', 'info_desinstaller_plugin' => 'suprime los datos y desactiva el plugin', 'info_discussion_cours' => 'Debates en curso', @@ -331,7 +287,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_email_envoi' => 'Dirección de correo de envío (opcional)', 'info_email_envoi_txt' => 'Indique aqui la dirección a utilizar para enviar los correos electrónicos (por defecto, se utiliza la dirección del destinatario como dirección de envío):', 'info_email_webmestre' => 'Dirección de correo electrónico del webmaster', - 'info_entrer_code_alphabet' => 'Introduzca el código del alfabeto a utilizar', 'info_envoi_email_automatique' => 'Envío automático de correos electrónicos', 'info_envoyer_maintenant' => 'Enviar ahora', 'info_etape_suivante' => 'Pasar a la siguiente etapa ', @@ -342,31 +297,24 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_facilite_suivi_activite' => 'Para facilitar el seguimiento de la actividad editorial, SPIP puede enviar por correo electrónico, por ejemplo a un lista de redactores, anuncios de solicitudes de publicación y de validación de artículos.', 'info_fichiers_authent' => 'Archivos de autentificación «.htpasswd»', 'info_forums_abo_invites' => 'Su sitio tiene foros para abonados; en el sitio público se invita a los visitantes a que se registren.', - 'info_gauche_admin_effacer' => 'A esta página sólo pueden acceder los responsables del sitio.

    Da acceso a las distintas funciones de mantenimiento técnico. Algunas de ellas comprenden un proceso de autenticación, que requiere un acceso FTP al sitio web.

    ', 'info_gauche_admin_tech' => 'Esta página sólo es accesible para los responsables del sitio.

    Da acceso a las distintas funciones de mantenimiento técnico. Algunas de ellas requieren un proceso de autentificación para el cual es necesario tener acceso por FTP al sitio web.

    ', 'info_gauche_admin_vider' => 'Esta página sólo es accesible para los responsables del sitio.

    Da acceso a las distintas funciones de mantenimiento técnico. Algunas de ellas dan lugar a un proceso de autentificación para el cual es necesario tener acceso por FTP al sitio web.

    ', 'info_gauche_auteurs' => 'Aquí figuran todos los autores del sitio. Su estatus se indica mediante el color de su icono (administrador/a = verde; redactor/a = amarillo).', 'info_gauche_auteurs_exterieurs' => 'Los autores exteriores, sin acceso al sitio, están indicados con un icono azul; los que están borrados por un icono gris.', 'info_gauche_messagerie' => 'La mensajería permite comunicarse, crear recordatorios para traer a la memoria algo o publicar anuncios (en el caso de pertenecer al grupo de administración).', - 'info_gauche_numero_auteur' => 'AUTOR NÚMERO', 'info_gauche_statistiques_referers' => 'Esta página presenta la lista de los referers, es decir, de los sitios que contienen enlaces que llevan a su propio sitio, sólo para ayer y hoy; esta lista se pone a cero cada 24 horas.', 'info_gauche_visiteurs_enregistres' => 'Aquí se encuentran las personas registradas en el espacio público del sitio (foros con suscripción).', 'info_generation_miniatures_images' => 'Generación de las miniaturas de imágenes', - 'info_gerer_trad' => '¿Manejar los enlaces de traducción?', 'info_gerer_trad_objets' => '@objets@: manejar los vínculos de traducción', 'info_hebergeur_desactiver_envoi_email' => 'Algunos servidores no permiten el envío automático de correos electrónicos. En esos casos, las siguientes funciones de SPIP no darán ningún resultado.', 'info_hier' => 'ayer:', - 'info_historique_activer' => 'Activar el seguimiento de revisiones', - 'info_historique_affiche' => 'Mostrar esta versión', - 'info_historique_comparaison' => 'comparación', - 'info_historique_desactiver' => 'Desactivar el seguimiento de revisiones', - 'info_historique_texte' => 'El seguimiento de revisiones permite conservar un historial de todas las modificaciones hechas en el contenido de un artículo, y mostrar las diferencias entre las sucesivas versiones.', 'info_identification_publique' => 'Su identidad pública...', 'info_image_process' => 'Por favor seleccione el mejor método de fabricación de viñetas pinchando en la imágen correspondiente. ', 'info_image_process2' => 'Si no aparece ninguna imagen, es que el servidor que alberga su sitio web no está configurado para usar estas herramientas. Si quiere utilizarlas, contacte al responsable técnico y solicite las extensiones «GD» o «Imagick».', 'info_images_auto' => 'Imágenes calculadas automáticamente', 'info_informations_personnelles' => 'Información personal', + 'info_inscription' => 'Inscripción el', 'info_inscription_automatique' => 'Inscripcción automática de nuevos redactores', 'info_jeu_caractere' => 'Juego de caracteres del sitio', 'info_jours' => 'días', @@ -382,8 +330,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_logos' => 'Los logos', 'info_maximum' => 'máximo:', 'info_meme_rubrique' => 'En la misma sección', - 'info_message' => 'Mensaje del', - 'info_message_efface' => 'Mensaje borrado', 'info_message_en_redaction' => 'Sus mensajes en curso de redacción', 'info_message_technique' => 'Mensaje técnico:', 'info_messagerie_interne' => 'Mensajería interna', @@ -394,31 +340,24 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'Modificar la sección', 'info_modifier_titre' => 'Modificar @titre@', 'info_mon_site_spip' => 'Mi sitio SPIP', - 'info_mot_sans_groupe' => '(Palabras sin grupo...)', - 'info_moteur_recherche' => 'Motor de búsqueda integrado', 'info_moyenne' => 'promedio:', - 'info_multi_articles' => '¿Activar el menú de idioma en los artículos?', 'info_multi_cet_article' => 'Idioma de este artículo:', 'info_multi_langues_choisies' => 'A continuación seleccione los idiomas que quiera poner a disposición de los redactores de su sitio. Los idiomas que ya se utilizan en el sitio (al principio de la lista) no pueden ser desactivados. ', 'info_multi_objets' => '@objets@: activar el menú de idioma', - 'info_multi_rubriques' => '¿Activar el menú de idioma en las secciones?', 'info_multi_secteurs' => '... sólo para las secciones situadas en la raíz?', 'info_nb_articles' => '@nb@ artículos', - 'info_nb_articles_syndiques' => '@nb@ artículos sindicados', 'info_nb_auteurs' => '@nb@ autores', 'info_nb_messages' => '@nb@ mensajes', 'info_nb_mots_cles' => '@nb@ palabras-claves', 'info_nb_rubriques' => '@nb@ secciones', - 'info_nb_sites' => '@nb@ sitios', 'info_nb_visiteurs' => '@nb@ visitantes', 'info_nom' => 'Nombre', 'info_nom_destinataire' => 'Nombre del destinatario o destinataria', 'info_nom_pas_conforme' => 'las etiquetas HTML no están permitidas', 'info_nom_site' => 'Nombre de tu sitio', 'info_nombre_articles' => '@nb_articles@ artículos,', - 'info_nombre_partcipants' => 'PARTICIPANTES EN LA DISCUSIÓN:', 'info_nombre_rubriques' => '@nb_rubriques@ secciones,', 'info_nombre_sites' => '@nb_sites@ sitios,', 'info_non_deplacer' => 'No desplazar...', @@ -426,19 +365,14 @@ Los idiomas que ya se utilizan en el sitio (al principio de la lista) no pueden 'info_non_envoi_liste_nouveautes' => 'No enviar la lista de novedades', 'info_non_modifiable' => 'no puede ser modificado', 'info_non_suppression_mot_cle' => 'No deseo suprimir esta palabra clave', - 'info_note_numero' => 'Nota @numero@', 'info_notes' => 'Notas', - 'info_nouveaux_message' => 'Nuevos mensajes', 'info_nouvel_article' => 'Nuevo artículo', 'info_nouvelle_traduction' => 'Nueva traducción:', 'info_numero_article' => 'ARTÍCULO NÚMERO:', 'info_obligatoire_02' => '(obligatorio)', 'info_option_accepter_visiteurs' => 'Aceptar la inscripción de los visitantes del sitio público', - 'info_option_faire_suivre' => 'Enviar los mensajes de los foros a los autores de artículos', 'info_option_ne_pas_accepter_visiteurs' => 'Rechazar la inscripción de visitantes', 'info_options_avancees' => 'OPCIONES AVANZADAS', - 'info_ortho_activer' => 'Activar el corrector ortográfico', - 'info_ortho_desactiver' => 'Desactivar el corrector ortográfico', 'info_ou' => 'o...', 'info_page_interdite' => 'Página no accesible', 'info_par_nom' => 'por nombre', @@ -448,20 +382,16 @@ Los idiomas que ya se utilizan en el sitio (al principio de la lista) no pueden 'info_passe_trop_court' => 'Contraseña demasiado corta', 'info_passe_trop_court_car_pluriel' => 'La contraseña debe contener al menos @nb@ caracteres.', 'info_passes_identiques' => 'Hay diferencias entre las dos contraseñas', - 'info_pense_bete_ancien' => 'Tus antiguos recordatorios', 'info_plus_cinq_car' => 'más de 5 caracteres', 'info_plus_cinq_car_2' => '(Más de 5 caracteres)', 'info_plus_trois_car' => '(Más de tres caracteres)', 'info_popularite' => 'Popularidad: @popularite@ Visitas: @visites@', - 'info_popularite_4' => 'Popularidad: @popularite@ Visitas: @visites@', 'info_post_scriptum' => 'Post Scríptum', 'info_post_scriptum_2' => 'Post Scríptum:', 'info_pour' => 'para', - 'info_preview_admin' => 'Sólo los administradores pueden previsualizar el sitio', - 'info_preview_comite' => 'Todos los redactores pueden previsualizar el sitio', - 'info_preview_desactive' => 'La previsualización está totalmente desactivada', - 'info_preview_texte' => 'Es posible previsualizar el sitio como si todos los artículos y las breves (que tengan al menos el estado «propuesto») estuviesen publicados. Debe esta posibilidad estar disponible sólo para los administradores, para todos los redactores, o para nadie?', - 'info_principaux_correspondants' => 'Sus principales corresponsales', + 'info_preview_texte' => 'Es posible previsualizar los diferentes elementos editoriales del sitio que tengan por lo menos el estatuto de "propuesto", así como los elementos que están en curso de redacción y de los que seamos el autor. Esta función debe estar disponible para los administradores, los redactores, o para nadie ? + +', 'info_procedez_par_etape' => 'proceda etapa por etapa', 'info_procedure_maj_version' => 'Se debe ejecutar el proceso de actualización de la base de datos a esta nueva versión de SPIP.', 'info_proxy_ok' => 'Test del proxy logrado.', @@ -477,13 +407,9 @@ Los idiomas que ya se utilizan en el sitio (al principio de la lista) no pueden códigos de acceso al sitio privado. Ciertos proveedores de hospedaje desactivan el envío de correos electrónicos desde sus servidores: en tal caso, se hace imposible la inscripción automática.', - 'info_question_utilisation_moteur_recherche' => '¿Desea utilizar el motor de búsqueda integrado de SPIP? (desactivarlo agiliza el sitio)', - 'info_question_vignettes_referer_non' => 'No mostrar las capturas de los sitios de origen de las visitas', 'info_qui_edite' => '@nom_auteur_modif@ ha trabajado en este contenido hace @date_diff@ minutos', 'info_racine_site' => 'Raíz del sitio', 'info_recharger_page' => 'Por favor recargue esta página dentro de un momento', - 'info_recherche_auteur_a_affiner' => 'Hay demasiados resultados para "@cherche_auteur@", por favor restrinja los criterios.', - 'info_recherche_auteur_ok' => 'Varios autores encontrado para "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'No hay resultados para « @cherche_auteur@ ».', 'info_recommencer' => 'Vuelva a empezar.', 'info_redacteur_1' => 'Redactor/a', @@ -492,6 +418,7 @@ Los idiomas que ya se utilizan en el sitio (al principio de la lista) no pueden 'info_redaction_en_cours' => 'EN CURSO DE REDACCIÓN', 'info_redirection' => 'Redirección', 'info_redirection_activee' => 'La redirección está activada.', + 'info_redirection_boucle' => 'Usted esta probando redirigir el artículo hacía el mismo.', 'info_redirection_desactivee' => 'La redirección se ha suprimido.', 'info_refuses' => 'Sus artículos rechazados', 'info_reglage_ldap' => 'Opciones: Ajustes de la importación LDAP', @@ -502,7 +429,6 @@ Los idiomas que ya se utilizan en el sitio (al principio de la lista) no pueden 'info_rubriques' => 'Secciones', 'info_rubriques_02' => 'secciones', 'info_rubriques_trouvees' => 'Secciones localizadas', - 'info_rubriques_trouvees_dans_texte' => 'Secciones localizadas (en el texto)', 'info_sans_titre' => 'Sin título', 'info_selection_chemin_acces' => 'Seleccione el camino de acceso en el anuario', 'info_signatures' => 'firmas', @@ -515,14 +441,12 @@ Los idiomas que ya se utilizan en el sitio (al principio de la lista) no pueden 'info_sites_lies_mot' => 'Los sitios referenciados ligados a esta palabra clave', 'info_sites_proxy' => 'Utilizar un proxy', 'info_sites_trouves' => 'Sitios hallados', - 'info_sites_trouves_dans_texte' => 'Sitios encontrados (en el texto)', 'info_sous_titre' => 'Subtítulo', 'info_statut_administrateur' => 'Administrador/a', 'info_statut_auteur' => 'Estatus de este autor o autora:', 'info_statut_auteur_2' => 'Soy', 'info_statut_auteur_a_confirmer' => 'Inscripción por confirmar', 'info_statut_auteur_autre' => 'Otro papel:', - 'info_statut_efface' => 'Borrado', 'info_statut_redacteur' => 'Redactor/a', 'info_statut_utilisateurs_1' => 'Estatus por defecto de usuarios importados', 'info_statut_utilisateurs_2' => 'Elija el estatus atribuido a las personas presentes en el directorio LDAP cuando se conectan por primera vez. Posteriormente podrá modificar este valor para cada autor en cada caso.', @@ -545,7 +469,6 @@ Los idiomas que ya se utilizan en el sitio (al principio de la lista) no pueden 'info_tous_articles_presents' => 'Todos los artículos publicados en esta sección', 'info_tous_articles_refuses' => 'Todos los artículos rechazados', 'info_tous_les' => 'todos los:', - 'info_tous_redacteurs' => 'Anuncios a todos', 'info_tout_site' => 'Todo el sitio', 'info_tout_site2' => 'El artículo no ha sido traducido a este idioma.', 'info_tout_site3' => 'El artículo ha sido traducido a este idioma, pero posteriormente se han aportado modificaciones al artículo de referencia. La traducción debe ser actualizada.', @@ -561,7 +484,7 @@ Las traducciones están asociadas al original, en un color que indica su estado: 'info_une_rubrique_02' => '1 sección', 'info_url' => 'URL:', 'info_url_proxy' => 'URL del proxy', - 'info_url_site' => 'URL del sitio:', + 'info_url_proxy_pas_conforme' => 'La URL del proxy no es válido.', 'info_url_site_pas_conforme' => 'la URL del sitio no es válida.', 'info_url_test_proxy' => 'URL de prueba', 'info_urlref' => 'Enlace hipertexto:', @@ -573,7 +496,6 @@ Las traducciones están asociadas al original, en un color que indica su estado: 'info_visiteurs_02' => 'Visitantes del sitio público', 'info_webmestre_forces' => 'La lista de webmasters está actualmente definida en @file_options@.', 'install_adresse_base_hebergeur' => 'Dirección de la base de datos asignada por el proveedor del alojamiento', - 'install_base_ok' => 'La base @base@ ha sido reconocida', 'install_connect_ok' => 'La nueva base de datos fue declarada con éxito con el nombre de servidor @connect@.', 'install_echec_annonce' => 'La instalación probablemente va a fallar, o creará un sitio que no funcione...', 'install_extension_mbstring' => 'SPIP no funciona con:', @@ -586,7 +508,6 @@ Las traducciones están asociadas al original, en un color que indica su estado: 'install_select_langue' => 'Seleccione un idioma y después pulse el botón «siguiente» para iniciar el proceso de instalación.', 'install_select_type_db' => 'Indicar el tipo de base de datos:', 'install_select_type_mysql' => 'MySQL', - 'install_select_type_mysqli' => 'MySQLi', 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', @@ -603,8 +524,6 @@ Las traducciones están asociadas al original, en un color que indica su estado: 'item_activer_messages_avertissement' => 'Activar los mensajes de advertencia', 'item_administrateur_2' => 'administrador/a', 'item_afficher_calendrier' => 'Mostrar en el calendario', - 'item_autoriser_documents_joints' => 'Autorizar los documentos adjuntos a los artículos', - 'item_autoriser_documents_joints_rubriques' => 'Autorizar los documentos en las secciones', 'item_autoriser_syndication_integrale' => 'Difundir íntegramente los artículos en los archivos de sindicación', 'item_choix_administrateurs' => 'los administradores', 'item_choix_generation_miniature' => 'Generar automáticamente las miniaturas de las imágenes', @@ -612,7 +531,6 @@ Las traducciones están asociadas al original, en un color que indica su estado: 'item_choix_redacteurs' => 'los redactores', 'item_choix_visiteurs' => 'los visitantes del sitio público', 'item_creer_fichiers_authent' => 'Crear los archivos «.htpasswd»', - 'item_limiter_recherche' => 'Limitar la búsqueda de información contenida en este sitio', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Activar la mensajería y la agenda', 'item_mots_cles_association_articles' => 'a los artículos', @@ -622,22 +540,15 @@ Las traducciones están asociadas al original, en un color que indica su estado: 'item_non_accepter_inscriptions' => 'No aceptar inscripciones', 'item_non_activer_messages_avertissement' => 'Sin mensajes de advertencia', 'item_non_afficher_calendrier' => 'No mostrar en el calendario', - 'item_non_autoriser_documents_joints' => 'No autorizar la inclusión de documentos en los artículos', - 'item_non_autoriser_documents_joints_rubriques' => 'Impedir la inclusión de documentos en las secciones', 'item_non_autoriser_syndication_integrale' => 'Sólo difundir un resumen', - 'item_non_compresseur' => 'Desactivar la compresión', 'item_non_creer_fichiers_authent' => 'No crear esos archivos', - 'item_non_gerer_statistiques' => 'No gestionar las estadísticas', - 'item_non_limiter_recherche' => 'Buscar en el contenido de los sitios referenciados', 'item_non_messagerie_agenda' => 'Desactivar la mensajería y la agenda', 'item_non_publier_articles' => 'No publicar los artículos antes de la fecha de publicación indicada', - 'item_non_utiliser_moteur_recherche' => 'No utilizar el motor', 'item_nouvel_auteur' => 'Nueva autora o autor', 'item_nouvelle_rubrique' => 'Nueva sección', 'item_oui' => 'Sí', 'item_publier_articles' => 'Publicar los artículos sin tener en cuenta la fecha de publicación', 'item_reponse_article' => 'Respuesta al artículo', - 'item_utiliser_moteur_recherche' => 'Utilizar el motor de búsqueda', 'item_version_html_max_html4' => 'Limitarse al HTML4 en el sitio público', 'item_version_html_max_html5' => 'Permitir el HTML5', 'item_visiteur' => 'visitante', @@ -658,19 +569,19 @@ Las traducciones están asociadas al original, en un color que indica su estado: 'ldap_correspondance' => 'herencia del campo @champ@', 'ldap_correspondance_1' => 'Herencia de los campos LDAP', 'ldap_correspondance_2' => 'Por cada uno de los campos SPIP siguientes, indicar el nombre del campo LDAP correspondiente. Dejar vacío para no indicar ninguno, y separar con espacios o comas para que se prueben varios campos LDAP.', - 'lien_ajout_destinataire' => 'Añadir este destinatario', 'lien_ajouter_auteur' => 'Añadir este autor', - 'lien_ajouter_participant' => 'Añadir un participante', 'lien_ajouter_une_rubrique' => 'Añadir esta sección', 'lien_email' => 'correo electrónico', 'lien_nom_site' => 'NOMBRE DEL SITIO:', + 'lien_rapide_contenu' => 'saltar al contenido', + 'lien_rapide_navigation' => 'Saltar a la navegación', + 'lien_rapide_recherche' => 'Saltar al buscador', 'lien_retirer_auteur' => 'Retirar el autor', 'lien_retirer_rubrique' => 'Retirar la sección', 'lien_retirer_tous_auteurs' => 'Quitar todos los autores', 'lien_retirer_toutes_rubriques' => 'Retirar todas las secciones', - 'lien_retrait_particpant' => 'Retirar este/esta participante', 'lien_site' => 'sitio', - 'lien_supprimer_rubrique' => 'suprimir esta sección', + 'lien_tout_decocher' => 'desmarcar todo', 'lien_tout_deplier' => 'Desplegar todo', 'lien_tout_replier' => 'Replegar todo', 'lien_tout_supprimer' => 'Suprimir todo', @@ -696,12 +607,12 @@ Las traducciones están asociadas al original, en un color que indica su estado: // N 'nouvelle_version_spip' => 'La versión @version@ de SPIP está disponible', + 'nouvelle_version_spip_majeure' => 'Una nueva versión SPIP @version@ está disponible', // O 'onglet_contenu' => 'Contenido', 'onglet_declarer_une_autre_base' => 'Declarar otra base', 'onglet_discuter' => 'Discutir', - 'onglet_documents' => 'Documentos', 'onglet_interactivite' => 'Interactividad', 'onglet_proprietes' => 'Propriedades', 'onglet_repartition_actuelle' => 'actualmente', @@ -710,6 +621,7 @@ Las traducciones están asociadas al original, en un color que indica su estado: // P 'page_pas_proxy' => 'Esta página no debe pasar por el proxy', 'pas_de_proxy_pour' => 'Si fuera el caso, indica los servidores o dominios para los cuales este proxy no debe aplicarse. (por ejemplo: @exemple@)', + 'phpinfo' => 'Configuración PHP', 'plugin_charge_paquet' => 'Carga del paquete @name@', 'plugin_charger' => 'Descargar', 'plugin_erreur_charger' => 'error: no es posible cargar @zip@', @@ -753,6 +665,7 @@ Las traducciones están asociadas al original, en un color que indica su estado: 'plugin_titre_automatique_ajouter' => 'Añadir plugins', 'plugin_titre_installation' => 'Instalación del plugin @plugin@', 'plugin_titre_modifier' => 'Mis plugins', + 'plugin_utilise_plugin' => 'Utiliza le plugin @plugin@ en versión @version@.', 'plugin_zip_active' => 'Continúe para activarlo', 'plugin_zip_adresse' => 'indique aquí la dirección de un archivo zip de plugin a descargar, o también la dirección de una lista de plugins.', 'plugin_zip_adresse_champ' => 'Dirección del plugin o de la lista ', @@ -789,6 +702,7 @@ Las traducciones están asociadas al original, en un color que indica su estado: // R 'repertoire_plugins' => 'Carpeta:', + 'required' => '(obligatorio)', // S 'sans_heure' => 'sin hora', @@ -816,16 +730,13 @@ Las traducciones están asociadas al original, en un color que indica su estado: 'texte_article_virtuel_reference' => 'Artículo virtual: Artículo referenciado en su sitio SPIP, pero redirigido hacia otra URL. Para eliminar la redirección, borre la URL .', 'texte_aucun_resultat_auteur' => 'Ningún resultado por "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Este sitio puede indicarle permanentemente la lista de personas conectadas, lo que permite intercambiar mensajes en directo. Además, puede decidir no aparecer en la lista (figura como «invisible» para los otros usuarios).', - 'texte_auteur_messagerie_1' => 'En este sitio, SPIP permite intercambiar mensajes y realizar foros privados entre los participantes. Puede participar o no en estos intercambios.', 'texte_auteurs' => 'LOS AUTORES', 'texte_choix_base_1' => 'Eleja la base:', 'texte_choix_base_2' => 'El servidor SQL contiene varias bases de datos.', 'texte_choix_base_3' => 'Seleccione aquí la que te fue atribuída por tu proveedor de hospedaje:', 'texte_choix_table_prefix' => 'Prefijo de las tablas:', - 'texte_commande_vider_tables_indexation' => 'Utilice este comando para vaciar las tablas de indexación del motor de búsqueda integrado de SPIP. Permite ganar espacio en el disco.', 'texte_compatibilite_html' => 'Puede elegir si quiere que SPIP produzca, en el sitio público, un código compatible con la norma HTML4, o si prefiere usar las posibilidades más modernas de HTML5.', 'texte_compatibilite_html_attention' => 'No hay ningún riesgo en activar la opción HTML5, pero entonces las páginas de su sitio tienen que empezar por la mención siguiente (para ser válidas): <!DOCTYPE html>.', - 'texte_compresse_ou_non' => '(comprimido o no)', 'texte_compte_element' => '@count@ elemento', 'texte_compte_elements' => '@count@ elementos', 'texte_conflit_edition_correction' => 'Por favor revise aquí debajo las diferencias entre las dos versiones del texto; también podrá copiar sus modificaciones, y luego volver a empezar.', @@ -840,10 +751,9 @@ Las traducciones están asociadas al original, en un color que indica su estado: 'texte_date_publication_anterieure_nonaffichee' => 'No mostrar fecha de redacción anterior.', 'texte_date_publication_article' => 'FECHA DE PUBLICACIÓN EN LÍNEA:', 'texte_date_publication_objet' => 'Fecha de publicación en línea:', - 'texte_descriptif_petition' => 'Descripción de la petición', + 'texte_definir_comme_traduction_rubrique' => 'Esta rúbrica es una traducción de la rúbrica número :', 'texte_descriptif_rapide' => 'Descripción rápida', 'texte_effacer_base' => 'Borrar la base de datos SPIP', - 'texte_effacer_donnees_indexation' => 'Borrar los datos de indexación', 'texte_effacer_statistiques' => 'Borrar las estadísticas', 'texte_en_cours_validation' => 'Los contenidos a continuación están a la espera de validación.', 'texte_enrichir_mise_a_jour' => 'Puedes enriquecer el formato de tu texto utilizando "atajos tipográficos"', @@ -855,25 +765,18 @@ Si no le ve utilidad, puede dejar esta opción con su valor por defecto (no crea 'texte_informations_personnelles_2' => '(Nota: si se trata de una reinstalación, y su acceso todavía funciona, puede ', 'texte_introductif_article' => '(Introducción del artículo)', 'texte_jeu_caractere' => 'Se aconseja emplear para el sitio el alfabeto universal utf-8): permite visualizar textos en todos los idiomas, y ya no plantea problemas de compatibilidad con navegadores modernos.', - 'texte_jeu_caractere_2' => 'Cuidado: este parámetro no provoca la conversión de textos ya ingresados en la base de datos. ', 'texte_jeu_caractere_3' => 'Su sitio está actualmente instalado en el juego de caracteres:', 'texte_jeu_caractere_4' => 'Si no corresponde a la realidad de Sus datos (por ejemplo, después de una restauración de base de datos), o si empieza este sitio y desea hacerlo con otro juego de caracteres, indíquelo aquí:', - 'texte_jeu_caractere_conversion' => 'Nota: puede decidir convertir de una vez por todas el conjunto de textos de su sitio (artículos, breves, foros, etcétera) al alfabeto utf-8, visitando la página de conversión al l’utf-8.', - 'texte_lien_hypertexte' => '(Si su mensaje se refiere a un artículo publicado en la Web, o a una página que contiene más información, indique a continuación el título de la página y su dirección URL)', 'texte_login_ldap_1' => '(Dejar en blanco para un acceso anónimo, o indicar la ruta completa, por ejemplo "uid=perez, ou=users, dc=mi-dominio, dc=com".)', 'texte_login_precaution' => '¡Atención! Éste es el nombre de usuario con el que está conectado actualmente. Utilice este formulario con precaución...', - 'texte_message_edit' => 'Atención: este mensaje puede ser modificado por todos los administradores del sitio, y es visible por todos los redactores. Utilice los anuncios solamente para exponer acontecimientos importantes de la vida del sitio.', 'texte_messagerie_agenda' => 'Una mensajería permite a los redactores del sitio comunicarse entre ellos directamente en el espacio privado. Esta mensajería está asociada a una agenda.', 'texte_mise_a_niveau_base_1' => 'Acaba de actualizar los archivos de SPIP. Ahora se debe actualizar la base de datos del sitio.', 'texte_modifier_article' => 'Modificar el artículo:', - 'texte_moteur_recherche_active' => 'El motor de búsqueda está activado. Utilice este comando si desea proceder a una reindexación rápida (después de la restauración de una copia de respaldo, por ejemplo). Note que los documentos modificados de modo normal (mediante la interfaz SPIP) se vuelven a indexar automáticamente: esta orden sólo es útil excepcionalmente.', - 'texte_moteur_recherche_non_active' => 'El motor de búsqueda no está activado.', 'texte_multilinguisme' => 'Si desea manejar objetos en varios idiomas, con una navegación compleja, puede agregar un menú de selección de idioma para esos objetos, en función de la organización de su sitio.', 'texte_multilinguisme_trad' => 'También puede activar un sistema de gestión de enlaces entre las diferentes traducciones de ciertos objetos. ', 'texte_non_compresse' => 'no comprimido (tu servidor no soporta esta funcionalidad)', - 'texte_nouveau_message' => 'Nuevo mensaje', 'texte_nouvelle_version_spip_1' => 'Ha instalado una versión nueva de SPIP.', 'texte_nouvelle_version_spip_2' => 'Esta nueva versión necesita una actualización más completa que de costumbre. Si es webmaster del sitio, borre el archivo @connect@ y retome la instalación con el fin de actualizar los parámetros de conexión a la base de datos.

    (NB: si ha olvidado los parámetros de conexión, eche un vistazo al archivo @connect@ antes de suprimirlo...)

    ', 'texte_operation_echec' => 'Regrese a la página anterior, seleccione otra base o cree una nueva. Verifique la información facilitada por su proveedor de hospedaje.', @@ -886,7 +789,6 @@ Utilice este formulario con precaución...', 'texte_publication_articles_post_dates' => '¿Qué comportamiento debe adoptar SPIP frente a los artículos cuya fecha de publicación ha sido fijada con un plazo futuro?', 'texte_rappel_selection_champs' => '[Seleccione correctamente este campo]', 'texte_recalcul_page' => 'Si desea recalcular una sola página utiliza el botón "Recalcular" en el espacio público.', - 'texte_recapitiule_liste_documents' => 'Esta página recapitula la lista de documentos que ha insertado en las secciones. Para modificar la información de cada documento, utilice el enlace de su sección.', 'texte_recuperer_base' => 'Reparar la base de datos', 'texte_reference_mais_redirige' => 'Artículo referenciado en su sitio y redirigido hacia otra URL.', 'texte_requetes_echouent' => 'Cuando algunas peticiones SQL fallan sistemáticamente y sin razón aparente, es posible que sea debido a la base de datos en sí.

    @@ -905,7 +807,6 @@ Si el problema persiste, contacte a su hospedaje.

    ', 'texte_suppression_fichiers' => 'Utilice esta operación para suprimir todos los archivos presentes en la caché de SPIP. Esto permite, por ejemplo, forzar la actualización de todas las páginas si se hicieron importantes modificaciones gráficas o de estructura del sitio.', 'texte_sur_titre' => 'Antetítulo', 'texte_table_ok' => ': esta tabla está bien.', - 'texte_tables_indexation_vides' => 'Las tablas del motor de indexación están vacías.', 'texte_tentative_recuperation' => 'Tentativa de reparación.', 'texte_tenter_reparation' => 'Intentar la reparación de la base de datos.', 'texte_test_proxy' => 'Para ensayar este "proxy" indique aquí la URL del sitio.', @@ -914,23 +815,12 @@ Si el problema persiste, contacte a su hospedaje.

    ', 'texte_travail_article' => '@nom_auteur_modif@ ha trabajado sobre este artículo hace @date_diff@ minutos.', 'texte_travail_collaboratif' => 'Es frecuente que varios redactores y redactoras trabajen sobre el mismo artículo, el sistema puede mostrar los artículos recientemente «abiertos» para evitar las modificaciones simultáneas. Esta opción está desactivada por omisión para evitar mostrar mensajes de advertencia intempestivos.', - 'texte_trop_resultats_auteurs' => 'Demasiados resultados para la búsqueda de "@cherche_auteur@". Precise los criterios.', - 'texte_unpack' => 'Descarga de la última versión', - 'texte_utilisation_moteur_syndiques' => 'Cuando utilice el motor de búsqueda integrado - en SPIP, puedes efectuar las búsquedas sobre los sitios y - los artículos sindicados de dos maneras - diferentes.
    - La más - simple consiste en buscar únicamente en los -títulos y las descripciones de los artículos.
    - Un segundo método, mucho más potente, permite a SPIP buscar también en el texto de los sitios referenciados. Si referencia un sitio, SPIP efectuará entonces la búsqueda dentro del contenido de éste.', - 'texte_utilisation_moteur_syndiques_2' => 'Este método obliga a SPIP a visitar regularmente los sitios referenciados, lo que provoca una ligera disminución de velocidad de su propio sitio.', 'texte_vide' => 'vacío', 'texte_vider_cache' => 'Vaciar la caché', - 'titre_admin_effacer' => 'Mantenimiento técnico', 'titre_admin_tech' => 'Mantenimiento técnico', 'titre_admin_vider' => 'Mantenimiento técnico', 'titre_ajouter_un_auteur' => 'Añadir una autora', 'titre_ajouter_un_mot' => 'Añadir una palabra-clave', - 'titre_ajouter_une_rubrique' => 'Añadir una sección', 'titre_cadre_afficher_article' => 'Mostrar los artículos', 'titre_cadre_afficher_traductions' => 'Mostrar el estado de las traducciones para los idiomas siguientes:', 'titre_cadre_ajouter_auteur' => 'Añadir un autor', @@ -957,54 +847,27 @@ títulos y las descripciones de los artículos.
    - Un segundo método, much 'titre_naviguer_dans_le_site' => 'Navegar por el sitio...', 'titre_nouvelle_rubrique' => 'Nueva sección', 'titre_numero_rubrique' => 'SECCIÓN NÚMERO:', - 'titre_page_admin_effacer' => 'Mantenimiento técnico: borrar la base', 'titre_page_articles_edit' => 'Modificar: @titre@', 'titre_page_articles_page' => 'Los artículos', 'titre_page_articles_tous' => 'Todo el sitio', - 'titre_page_auteurs' => 'Visitantes', 'titre_page_calendrier' => 'Calendario @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Configuración del sitio', - 'titre_page_config_fonctions' => 'Configuración del sitio', - 'titre_page_configuration' => 'Configuración del sitio', - 'titre_page_controle_petition' => 'Seguimiento de las peticiones', 'titre_page_delete_all' => 'Supresión total e irreversible', - 'titre_page_documents_liste' => 'Los documentos de las secciones', - 'titre_page_index' => 'Su espacio privado', - 'titre_page_message_edit' => 'Redactar un mensaje', - 'titre_page_messagerie' => 'Su mensajería', 'titre_page_recherche' => 'Resultados de la búsqueda @recherche@', 'titre_page_statistiques_referers' => 'Estadísticas (enlaces entrantes)', - 'titre_page_statistiques_signatures_jour' => 'Número de firmas por día', - 'titre_page_statistiques_signatures_mois' => 'Número de firmas por mes', 'titre_page_upgrade' => 'Actualización de SPIP', 'titre_publication_articles_post_dates' => 'Publicación de los artículos con fecha posterior', - 'titre_referencer_site' => 'Agregar un sitio:', - 'titre_rendez_vous' => 'CITAS:', 'titre_reparation' => 'Reparación', 'titre_suivi_petition' => 'Gestión de las peticiones', 'tls_ldap' => 'Transport Layer Security:', - 'trad_article_inexistant' => 'No hay ningún artículo con ese número.', 'trad_article_traduction' => 'Todas las versiones de este artículo:', - 'trad_deja_traduit' => 'Error: imposible de vincular este artículo con el numero solicitado.', 'trad_delier' => 'Dejar de ligar a estas traducciones ', 'trad_lier' => 'Este artículo es una traducción del artículo número:', 'trad_new' => 'Escribir una nueva traducción', // U - 'upload_info_mode_document' => 'Dejar esta imagen en el portafolios', - 'upload_info_mode_image' => 'Retirar esta imagen del portafolios', - 'utf8_convert_attendez' => 'Espere unos instantes y vuelva a cargar esta página.', - 'utf8_convert_avertissement' => 'Se prepara para convertir el contenido de su base de datos (artículos, breves, etc) del juego de caracteres @orig@ hacia el juego de caracteres @charset@.', - 'utf8_convert_backup' => 'No se olvides de hacer primero un respaldo completo de su sitio. También conviene verificar que sus esqueletos y archivos de idioma son compatibles @charset@.', - 'utf8_convert_erreur_deja' => 'Su sitio ya está en @charset@, inútil convertirlo...', 'utf8_convert_erreur_orig' => 'Error: el juego de caracteres no está soportado.', - 'utf8_convert_termine' => '¡Se ha acabado!', - 'utf8_convert_timeout' => 'Importante: en caso de timeout del servidor, vuelve a cargar la página hasta que indique «terminado».', - 'utf8_convert_verifier' => 'Ahora debe ir a vaciar la cache y verificar que todo funciona bien en las páginas públicas del sitio. En caso de graves problemas, un respaldo de los datos se ha realizado (al formato SQL) en la carpeta @rep@.', # Respaldo de los datos quiere decir copia de seguridad, por si alguien no lo sabe. Se puede decir de las dos maneras. - 'utf8_convertir_votre_site' => 'Convertir tu sitio en utf-8', // V 'version' => 'Versión:' ); - -?> diff --git a/www/ecrire/lang/ecrire_eu.php b/www/ecrire/lang/ecrire_eu.php index 9cb0637a..538677ac 100644 --- a/www/ecrire/lang/ecrire_eu.php +++ b/www/ecrire/lang/ecrire_eu.php @@ -1,9 +1,11 @@ 'SQL zerbitzariarekiko lokarriak huts egin du.', 'avis_connexion_echec_2' => 'Itzul zaitez aurreko orrialdera eta egiazta itzazu sartutako informazioak.', 'avis_connexion_echec_3' => 'KONTUZ: Zerbitzari askotan, erabili ahal izan aurretik SQL baserako sarreraren aktibatzea eskatu behar da. Ezin baduzu konektatu, egiaztaezazu tramite hori bete duzula.', + 'avis_connexion_erreur_creer_base' => 'Datu basea ez sortu ahal izan.', 'avis_connexion_erreur_nom_base' => 'Basearen izenak hizkiak, zifrak eta marratxoak soilik eduki ditzazke', 'avis_connexion_ldap_echec_1' => 'LDAP zerbitzariarekiko lokarriak huts egin du', 'avis_connexion_ldap_echec_2' => 'Itzul zaitez aurreko orrialdera eta egiazta itzazu sartutako informazioak.', 'avis_connexion_ldap_echec_3' => 'Horren ordez, erabiltzaileak inportatzeko ez erabili LDAP euskarria.', 'avis_deplacement_rubrique' => 'ADI EGON!. Atal honek (@contient_breves@)breve@scb@. Mugitzen baduzu, eragin ezazu baieztapen-kutxatila hau.', - 'avis_destinataire_obligatoire' => 'Mezu hau igorri aurretik jasotzailea zehaztu behar duzu.', 'avis_erreur_connexion_mysql' => 'SQL lokarri-errorea', - 'avis_erreur_version_archive' => 'KONTUZ ! - -@archive@ fitxategia beste SPIP bertsio bati dagokio, instalatutakoaren desberdina. -Arazo larriak edukitzeko arriskuan zaude: Zure datu-basearen suntsiketa, gunearen zenbait disfuntzio, eta abar. -Ez balidatu inportazio galdera hau. -

    Informazio gehiago edukitzeko ikus SPIP dokumentazioa (oraindik frantsesez) .

    ', - 'avis_espace_interdit' => 'Gune helezina SPIP instalaturik dago jadanik.', + 'avis_espace_interdit' => 'Gune helezina
    SPIP instalaturik dago jadanik.
    ', 'avis_lecture_noms_bases_1' => 'Instalazio-programak ez du lortu instalaturik dauden datu-baseen izenak irakurtzea.', 'avis_lecture_noms_bases_2' => 'Bi aukera: Base erabilgarririk ez dago edo segurtasun arrazoiak direla medio baseen zerrenda-funtzioa desaktibatu egin da (zerbitzari ugaritan ohizkoa da). ', 'avis_lecture_noms_bases_3' => 'Bigarren kasuan, zure login izena duen base bat erabili ahal izatea litekeena da.', - 'avis_non_acces_message' => 'Ez daukazu mezu hau irakurtzeko baimenik', 'avis_non_acces_page' => 'Ez daukazu orri honetan sartzeko baimenik', 'avis_operation_echec' => 'Eragiketak huts egin du.', 'avis_operation_impossible' => 'Ezinezko eragiketa', - 'avis_probleme_archive' => '@archive@ fitxategiaren irakurketa-arazoa', 'avis_suppression_base' => 'KONTUZ, dataezabapena itzulezina da!', - 'avis_version_mysql' => 'Zure(@version_mysql@) SQL bertsioak ez du uzten basean bertan taulen auto-konponketa.', // B 'bouton_acces_ldap' => 'LDAP >> -rako sarrera erantsi ', 'bouton_ajouter' => 'Erantsi', - 'bouton_ajouter_participant' => 'PARTEHARTZAILE BAT GEHITU:', - 'bouton_annonce' => 'IRAGARKIA', 'bouton_annuler' => 'Ezeztatu', 'bouton_cache_activer' => 'Cachea berraktibatu', 'bouton_cache_desactiver' => 'Cachea aldi baterako desaktibatu', - 'bouton_checkbox_envoi_message' => 'mezu bat bidaltzeko aukera', - 'bouton_checkbox_indiquer_site' => 'Web toki bat derrigorrezadierazi', - 'bouton_checkbox_signature_unique_email' => 'Posta elektroniko bakoitzeko sinadura bana', - 'bouton_checkbox_signature_unique_site' => 'sinadura bakar bat Web gune bakoitzako ', 'bouton_demande_publication' => 'Artikulu honen argitaratzea eskatu', 'bouton_desactive_tout' => 'Dena desaktibatu', 'bouton_desinstaller' => 'Desinstalatu', - 'bouton_effacer_index' => 'Aurkibideak ezabatu ', 'bouton_effacer_tout' => 'Ezabatu DENA!', - 'bouton_envoi_message_02' => 'MEZUBAT IGORRI', 'bouton_envoyer_message' => 'Behin-betiko mezua: igorri', 'bouton_fermer' => 'Hetsi', 'bouton_mettre_a_jour_base' => 'Datu-basea eguneratu', 'bouton_modifier' => 'Aldatu', - 'bouton_pense_bete' => 'OROIGARRI PERTSONALA', - 'bouton_radio_activer_messagerie' => 'Barne mezularitza aktibatu', - 'bouton_radio_activer_messagerie_interne' => 'Barne mezularitza aktibatu', - 'bouton_radio_activer_petition' => 'Eskaera aktibatu', 'bouton_radio_afficher' => 'Erakutsi', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Konektaturikoerredaktoreen zerrendan agertu', - 'bouton_radio_desactiver_messagerie' => 'Mezularitza desaktibatu', 'bouton_radio_envoi_annonces_adresse' => 'Iragarkiak hurrengo helbideraigorri:', 'bouton_radio_envoi_liste_nouveautes' => 'Nobedadeen zerrenda igorri', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Erredaktoreen zerrendan ez agertzea', 'bouton_radio_non_envoi_annonces_editoriales' => 'Ez igorri iragarki editorialik', - 'bouton_radio_pas_petition' => 'Eskaerarik gabe', - 'bouton_radio_petition_activee' => 'Eskaera aktibaturik', - 'bouton_radio_supprimer_petition' => 'Eskaera ezabatu', 'bouton_redirection' => 'Berbideraketa', 'bouton_relancer_installation' => 'Instalazioa berriro bultzatu', 'bouton_suivant' => 'Hurrengo', 'bouton_tenter_recuperation' => 'Konpontzen saiatu', 'bouton_test_proxy' => 'Proxy delakoa probatu', 'bouton_vider_cache' => 'Cachea hustu', - 'bouton_voir_message' => 'Mezua ikusi bidalibaino lehen', // C - 'cache_mode_compresse' => 'Cacheko fitxategiak modu konprimituan gorde dira.', - 'cache_mode_non_compresse' => 'Cacheko fitxategiak ez dira gorde modu konprimituan.', 'cache_modifiable_webmestre' => 'Parametra hauek tokiaren administratzaileak aldatzen ahal ditu.', 'calendrier_synchro' => 'Agenda-software bateragarri bat erabiltzen baduzu iCal, gune honen gaurkotasun-editorialarekin sinkroniza dezakezu.', 'config_activer_champs' => 'Ondorengo eremuak aktibatu', @@ -112,9 +86,7 @@ Ez balidatu inportazio galdera hau. 'config_titre_base_sup' => 'Datu base osagarri bat adierazi', 'config_titre_base_sup_choix' => 'Aukeratu datu base osagarri bat', 'connexion_ldap' => 'Konexioa :', - 'copier_en_local' => 'Lokalean kopiatu', 'creer_et_associer_un_auteur' => 'Autore bat sortu eta lotu', - 'creer_et_associer_une_rubrique' => 'Atal bat sortu eta elkartu', // D 'date_mot_heures' => 'orduak', @@ -144,7 +116,6 @@ Ez balidatu inportazio galdera hau. 'entree_login' => 'Zure login-a', 'entree_login_connexion_1' => 'Zure lokarriarenidentifikatzailea', 'entree_login_connexion_2' => '(Batzutan lokarriaren login delakoaridagokio eta bestetan hutsik gelditzen da)', - 'entree_login_ldap' => 'Hasierako LDAPLogin', 'entree_mot_passe' => 'Zure pasahitza', 'entree_mot_passe_1' => 'Zurelokarriaren pasahitza', 'entree_mot_passe_2' => '(Batzutan zure FTP pasahitzari dagokioeta bestetan hutsik gelditzen da)', @@ -162,6 +133,7 @@ Ez balidatu inportazio galdera hau. 'entree_url' => 'Zure lekuaren (URL) helbidea', 'entree_url_2' => 'Gunearen helbidea (URL)', 'erreur_connect_deja_existant' => 'Izen bereko zerbitzari bat badago jadanik', + 'erreur_email_deja_existant' => 'Helbilde elektroniko hau jadanik erregistratua da.', 'erreur_nom_connect_incorrect' => 'Zerbitzari izen hori debekatua da', 'erreur_plugin_desinstalation_echouee' => 'Pluginaren desinstalazioak huts egin du. Halere, desaktibatzen ahal duzu.', 'erreur_plugin_fichier_absent' => 'Fitxategia ez dago', @@ -197,22 +169,18 @@ Seguritate hobetzeko, konfigurazio hau aldatu behar zenuke, edo @constantes@ kon 'icone_admin_plugin' => 'Plugin-en kudeaketa', 'icone_administration' => 'Mantentzea', 'icone_afficher_auteurs' => 'Egileak erakutsi', - 'icone_afficher_visiteurs' => 'Bisitariakerakutsi', + 'icone_afficher_visiteurs' => 'Bisitariak erakutsi', 'icone_arret_discussion' => 'Elkarrizketa honetan ez berriro parte hartu ', 'icone_calendrier' => 'Egutegi', 'icone_configuration' => 'Konfigurazioa', 'icone_creer_auteur' => 'Egile berri bat eratu eta artikulu honi elkartu', 'icone_creer_mot_cle' => 'Gako-hitz berri bat eratu eta artikuluhoni elkartu', - 'icone_creer_mot_cle_rubrique' => 'Gako-hitz berri bat sortu eta atal huni lotu', - 'icone_creer_mot_cle_site' => 'Gako-hitz berri bat sortu eta gune huni lotu', 'icone_creer_rubrique_2' => 'Atal berribat eratu', 'icone_edition' => 'Edizioa', - 'icone_envoyer_message' => 'Mezua igorri', 'icone_ma_langue' => 'Nire hizkuntza', 'icone_mes_infos' => 'Nire informazioak', 'icone_mes_preferences' => 'Nire hobespenak', 'icone_modifier_article' => 'Artikulu hau aldatu', - 'icone_modifier_message' => 'Mezua aldatu', 'icone_modifier_rubrique' => 'Atal hau aldatu', 'icone_publication' => 'Argitaratzea', 'icone_relancer_signataire' => 'Izenpetzaileari berreskatu', @@ -225,21 +193,14 @@ Seguritate hobetzeko, konfigurazio hau aldatu behar zenuke, edo @constantes@ kon 'icone_supprimer_signature' => 'Sinadura hau ezabatu', 'icone_valider_signature' => 'Sinadura hau onartu', 'image_administrer_rubrique' => 'Atal hau kudeatu ahal duzu', - 'impossible_modifier_login_auteur' => 'Logina aldatzea ezinezkoa da.', - 'impossible_modifier_pass_auteur' => 'Pasahitza aldatzea ezinezkoa da.', 'info_1_article' => 'artikulu 1', - 'info_1_article_syndique' => 'Artikulu 1 sindikatua', 'info_1_auteur' => 'Autore 1', 'info_1_message' => 'Mezu 1', 'info_1_mot_cle' => 'Gako hitz 1', 'info_1_rubrique' => 'Atal 1', - 'info_1_site' => 'Toki bat', 'info_1_visiteur' => 'Bisitari 1', 'info_activer_cookie' => 'Egokitasun-"cookie" bat aktibatu dezakezu; horrek aukera emango dizu orrialdeakeguneratzeko, eta jendaurreko ataletik erredakziora errazki aldatzeko ere.', 'info_admin_etre_webmestre' => 'Web-arduradun eskubideak nire kontuari ezarri', - 'info_admin_gere_rubriques' => 'Pertsona horrek honako atal hauek administratzenditu:', - 'info_admin_gere_toutes_rubriques' => 'Administratzaile honek atal guztiak kudeatzen ditu.', - 'info_admin_gere_toutes_rubriques_2' => 'Atal guztiak kudeatzen ditut', 'info_admin_je_suis_webmestre' => 'web-arduradun naiz.', 'info_admin_statuer_webmestre' => 'Administratzaile honi Web-arduradun eskubideak eman', 'info_admin_webmestre' => 'Administratzaile hau Web-arduradun da.', @@ -253,13 +214,10 @@ Seguritate hobetzeko, konfigurazio hau aldatu behar zenuke, edo @constantes@ kon 'info_adresse' => 'helbidera:', 'info_adresse_url' => 'Toki publikoaren helbidea(URL) ', 'info_afficher_par_nb' => 'Bistaratu horrela', - 'info_afficher_visites' => 'Atal honentzako bisitak erakutsi:', 'info_aide_en_ligne' => 'SPIP-eko zuzeneko laguntza', 'info_ajout_image' => 'Irudiak dokumentu bezala gehitzen direnean SPIP-ekautomatikoki sartutako irudi hauen ikonoak sor ditzake. Erabilgarria izan daiteke,adibidez, galeria bat sortzeko.', - 'info_ajout_participant' => 'Partehartzaile hau erantsiaizan da:', 'info_ajouter_rubrique' => 'Administratzeko beste atal bat gehitu', 'info_annonce_nouveautes' => 'Berritasunak iragarri', - 'info_anterieur' => 'Lehengoa', 'info_article' => 'artikulua', 'info_article_2' => 'artikuluak', 'info_article_a_paraitre' => 'Argitaratuakizango diren baino geroagoko data duten artikuluak', @@ -269,17 +227,13 @@ Seguritate hobetzeko, konfigurazio hau aldatu behar zenuke, edo @constantes@ kon 'info_articles_miens' => 'Nire artikuluak', 'info_articles_tous' => 'Artikulu guztiak', 'info_articles_trouves' => 'Aurkitutako artikuluak', - 'info_articles_trouves_dans_texte' => '(Testuan)aurkitutako artikuluak', 'info_attente_validation' => 'Egiaztapenaren zain dauden zureartikuluak', 'info_aucun_article' => 'Artikulurik ez', - 'info_aucun_article_syndique' => 'Sindikatutako artikulurik ez', 'info_aucun_auteur' => 'Autorerik ez', - 'info_aucun_message' => 'Mezurik ez', + 'info_aucun_message' => 'Iruzkinik ez', 'info_aucun_rubrique' => 'Atalik ez', - 'info_aucun_site' => 'Gunerik ez', - 'info_aucun_visiteur' => 'Bisitaririk ez', 'info_aujourdhui' => 'Gaur :', - 'info_auteur_message' => 'MEZUARENIDAZLEA:', + 'info_auteur_gere_toutes_rubriques_2' => 'Atal guztiak kudeatzen ditut', 'info_auteurs' => 'Egileak', 'info_auteurs_par_tri' => '@partri@ egileak', 'info_auteurs_trouves' => 'Aurkitutako idazlariak', @@ -299,8 +253,6 @@ Seguritate hobetzeko, konfigurazio hau aldatu behar zenuke, edo @constantes@ kon 'info_classement_2' => '.@zerrendan@', 'info_code_acces' => 'Zure sarbide kodeak ezahaztu !', 'info_compatibilite_html' => 'Segitu beharreko HTML normak', - 'info_compresseur_gzip' => 'N. B. : Aterbetazileak ez dituenez jadanik php script-ak konprimitzen baieztatzea gomendatua da; horretarako zerbitsu hau erabil dezakezu : @testgzip@', - 'info_compresseur_texte' => 'Zure sareburuak ez baditu automatikoki html orrialdeak konprimitzen erabiltzaileari igortzeko, konpresioa bortxatzen entsegatzen ahal zira deskargatutako orrien pisua ttipitzeko.Kontuz : teknika hunek zoinbeit sareburu zinez moteltzen ahal ditu.', 'info_config_suivi' => 'Helbide hau korreo lista bati baldin ba dagokio, hemen azpian bere bitartez tokiarenparte-hartzaileek inskripzioa egin dezaketen helbidea jar dezakezu. Helbide hau URLbat izan daiteke ( adibidez web-aren bitartez izena emateko orria), edo e-mail helbidebat gai zehatz batekin (adibidez: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Gune honetako posta-zerrendan harpidetza egindezakezu. Argitalpenerako proposaturiko artikuluen eta berri laburren iragarpenakjasoko dituzu posta elektronikoz.', 'info_confirmer_passe' => 'Pasahitz berria baieztatu:', @@ -324,8 +276,6 @@ Seguritate hobetzeko, konfigurazio hau aldatu behar zenuke, edo @constantes@ kon 'info_date_publication_anterieure' => 'Lehengo argitaratze data', 'info_date_referencement' => 'Toki honen erreferentziapendata', 'info_derniere_etape' => 'Azken etapa : Bukatu da!', - 'info_derniers_articles_publies' => 'Zure azken artikulu argitaratuak', - 'info_desactiver_messagerie_personnelle' => 'Zuremezularitza pertsonala aktibatu edo desaktibatu dezakezu gune honetan.', 'info_descriptif' => 'Deskribapena:', 'info_desinstaller_plugin' => 'datuak ezabatzen eta plugin-a desaktibatzen ditu', 'info_discussion_cours' => 'Uneko eztabaidak', @@ -333,7 +283,6 @@ Seguritate hobetzeko, konfigurazio hau aldatu behar zenuke, edo @constantes@ kon 'info_email_envoi' => 'Bidalketarako posta-helbidea (aukeran)', 'info_email_envoi_txt' => 'Adierazi hemen emailak bidaltzeko erabili behar den helbidea (bestela, helbide hartzailea erabiliko da bidalketa-helbide gisa) :', 'info_email_webmestre' => 'Web-arduradunaren helbide elektronikoa', - 'info_entrer_code_alphabet' => 'Sar ezazu erabiliko den alfabetoaren kodea', 'info_envoi_email_automatique' => 'Mezu elektronikoen bidalketa automatikoa', 'info_envoyer_maintenant' => 'Orain bidali', 'info_etape_suivante' => 'Hurrengo etapara pasa', @@ -344,7 +293,6 @@ Seguritate hobetzeko, konfigurazio hau aldatu behar zenuke, edo @constantes@ kon 'info_facilite_suivi_activite' => 'Jarduera editorialaren jarraipena errazteko, SPIP-ekkorreo elektronikoaren bidez bidali ahal dizkio, adibidez erredaktoreen zerrenda bati,artikuluen baliaztapen eta argitarapenen eskaeren iragarkiak.', 'info_fichiers_authent' => '« .htpasswd » autentifikazio-fitxategiak', 'info_forums_abo_invites' => 'Zure guneak harpidetza beharrezkoa egiten dituen foroak hartzen ditu ; beraz, bisitariak gune publikoan erregistratzera gonbidatuta daude.', - 'info_gauche_admin_effacer' => 'Orrialde honetan gunearen arduradunak baino ezin dira sartu.

    Mantenimendu teknikoaren funtzio guztietan sartzeko aukera ematen du. Horietako batzuk baimentzeko prozesu berezi bat egin behar dute, gunearen FTP sarrera baliatzea eskatzen dutenak.', 'info_gauche_admin_tech' => 'Orrialde honetan gunearen arduradunak baizik ezin dira sartu.

    Mantentze teknikoaren funtzio guztietan sartzeko aukera ematen du. Horietako batzuk baimentzeko prozesu berezi bat egin behar dute, gunearen FTP sarrerak eskatzen dituenak.

    ', 'info_gauche_admin_vider' => 'Orrialde honetan gunearen arduradunak baizik ezin dira sartu.

    Mantentze teknikoaren funtzio guztietan sartzeko aukera ematen du. Horietako batzuk baimentzeko prozesu berezi bat egin behar dute, gunearen FTP sarrerak eskatzen dituenak.', @@ -352,20 +300,13 @@ Horietako batzuk baimentzeko prozesu berezi bat egin behar dute, gunearen FTP sa Ikonoaren koloreak autore bakoitzaren egoera adierazten du (idazlaria = berdea; administratzailea = horia).', 'info_gauche_auteurs_exterieurs' => 'Kanpoko autoreak, gunean sartzeko baimenik ez dutenak, ikono urdin batez adieraziak dira; ezabatuak izan direnak, berriz, ikono grisa baten bidez.', 'info_gauche_messagerie' => 'Mezularitzak idazlarien artean mezuak trukatzen,abisuak kontserbatzen (zure erabilera pertsonalarentzat), edo eremu pribatuko orri nagusian iragarpenak jartzen (administratzailea bazara) uzten dizu.', - 'info_gauche_numero_auteur' => 'IDAZLEA ', 'info_gauche_statistiques_referers' => 'Orri honetan referers-en zerrenda dago, hau da, zure web-gunera eramaten dituztenloturak dauzkaten tokien zerrenda, bakarrik atzo eta gaurko; zerrenda honek egunerozerora jartzen da.', 'info_gauche_visiteurs_enregistres' => 'Hemen guneko eremu publikoan erregistratutako bisitariak aurkituko dituzu (foroak aurretiko harpidetzaz).', 'info_generation_miniatures_images' => 'Irudien miniatura-sorkuntza', - 'info_gerer_trad' => 'Itzulpen-estekak kudeatu?', 'info_gerer_trad_objets' => '@objets@ :itzulpen loturak kudeatu', 'info_hebergeur_desactiver_envoi_email' => 'Ostapen zuzkitzaile batzuek mail-bidalketa automatikoa desaktibatzen dute bere zerbitzarietatik. Kasu honetan, SPIP-eko hurrengo funtzinalitateak ez dute funtzionatuko.', 'info_hier' => 'atzo:', - 'info_historique_activer' => 'Berrikuspenen jarraipena aktibatu', - 'info_historique_affiche' => 'Bertsio hau bistaratu', - 'info_historique_comparaison' => 'konparazioa', - 'info_historique_desactiver' => 'Berrikuspenen jarraipena desaktibatu', - 'info_historique_texte' => 'Berrikuspenen jarraipenak artikulu baten edukiari egindako aldaketa guztien historia gordetzen eta geroko bertsioen arteko desberdintasunak bistaratzen uzten du.', 'info_identification_publique' => 'Zurenortasun publikoa...', 'info_image_process' => 'Mesedez aukeratu biñetak egitekomodurik onena dagokion irudian klikatuz.', 'info_image_process2' => 'N.B. Ez bada irudirik agertzen, orduan zure gunea ostatatzen duen zerbitzaria ez da tresna horiek erabiltzeko konfiguratua. Funtzio horiek erabili nahi badituzu, arduradun teknikoa kontakta ezazu eta «GD» edo «Imagick» luzapenak eska itzaizkiozu.', @@ -386,8 +327,6 @@ Kasu honetan, SPIP-eko hurrengo funtzinalitateak ez dute funtzionatuko.', 'info_logos' => 'Logoak', 'info_maximum' => 'gehienez:', 'info_meme_rubrique' => 'Atal berean', - 'info_message' => 'Mezua', - 'info_message_efface' => 'Mezua ezabatu da', 'info_message_en_redaction' => 'Idaztekobidean dauden zure mezuak', 'info_message_technique' => 'Mezu teknikoa', 'info_messagerie_interne' => 'Barne mezularitza', @@ -398,29 +337,22 @@ Kasu honetan, SPIP-eko hurrengo funtzinalitateak ez dute funtzionatuko.', 'info_modifier_rubrique' => 'Gaia aldatu :', 'info_modifier_titre' => 'Aldatu :@titre@', 'info_mon_site_spip' => 'Nire SPIP gunea', - 'info_mot_sans_groupe' => '(Talderik gabeko hitzak...)', - 'info_moteur_recherche' => 'Barneratutako bilaketa motorra', 'info_moyenne' => 'ertaina :', - 'info_multi_articles' => 'Artikuluetan hizkuntza menu-a aktibatu?', 'info_multi_cet_article' => 'Artikuluhonen hizkuntza:', 'info_multi_langues_choisies' => 'Jarraian aukeratu zure tokiarenidazleek erabiltzeko baimena izango dituzten hizkuntzak. Tokian dagoeneko erabiltzendiren hizkuntzak (zerrendaren hasieran) ezin dira desaktibatu. ', 'info_multi_objets' => '@objets@ : hizkuntza menua aktibatu', - 'info_multi_rubriques' => 'Ataletan hizkuntza menu-a aktibatu?', 'info_multi_secteurs' => '>... erroan dauden atalentzat bakarrik ?', 'info_nb_articles' => '@nb@ artikulu', - 'info_nb_articles_syndiques' => '@nb@ sindikatutako artikulu', 'info_nb_auteurs' => '@nb@ autore', 'info_nb_messages' => '@nb@ mezu', 'info_nb_mots_cles' => '@nb@ gako-hitz', 'info_nb_rubriques' => '@nb@ atal', - 'info_nb_sites' => '@nb@ gune', 'info_nb_visiteurs' => '@nb@ bisitari', 'info_nom' => 'Izena', 'info_nom_destinataire' => 'Hartzailearen izena', 'info_nom_pas_conforme' => 'HTML etiketak ez dira onartuak', 'info_nom_site' => 'Zure gunearen izena', 'info_nombre_articles' => '@nb_articles@ artikulu,', - 'info_nombre_partcipants' => 'Debatean parte-hartzaile...', 'info_nombre_rubriques' => '@nb_rubriques@ atal,', 'info_nombre_sites' => '@nb_sites@ gune,', 'info_non_deplacer' => 'Ez murgildu...', @@ -428,19 +360,14 @@ Kasu honetan, SPIP-eko hurrengo funtzinalitateak ez dute funtzionatuko.', 'info_non_envoi_liste_nouveautes' => 'Ez bidali nobedadeen zerrenda', 'info_non_modifiable' => 'ezin da aldatu', 'info_non_suppression_mot_cle' => 'Ez dutgako-hitz hau ezabatu nahi', - 'info_note_numero' => 'Nota @numero@', 'info_notes' => 'Oharrak', - 'info_nouveaux_message' => 'Mezu berriak', 'info_nouvel_article' => 'Artikulu berria', 'info_nouvelle_traduction' => 'Itzulpen berria:', 'info_numero_article' => 'Artikulua:', 'info_obligatoire_02' => '(nahitaezkoa)', 'info_option_accepter_visiteurs' => 'Gune publikoko bisitarien inskripzioa onartu', - 'info_option_faire_suivre' => 'Foroetako mezuak artikuluen idazleei jarraituak izateaegin', 'info_option_ne_pas_accepter_visiteurs' => 'Bisitarien inskripzioa ezetsi', 'info_options_avancees' => 'Aukera aurreratuak', - 'info_ortho_activer' => 'Zuzentzaile ortografikoa aktibatu', - 'info_ortho_desactiver' => 'Zuzentzaile ortografikoa desaktibatu', 'info_ou' => 'edo...', 'info_page_interdite' => 'Orri debekatua', 'info_par_nom' => 'izenez', @@ -450,20 +377,14 @@ Kasu honetan, SPIP-eko hurrengo funtzinalitateak ez dute funtzionatuko.', 'info_passe_trop_court' => 'Pasahitz laburregia.', 'info_passe_trop_court_car_pluriel' => 'Zure pasahitzak @nb@ karaktere bederen eduki behar ditu.', 'info_passes_identiques' => 'Pasahitzak ezberdinak dira', - 'info_pense_bete_ancien' => 'Zure ohartarapen zaharrak', 'info_plus_cinq_car' => '5 karaktere baino gehiago', 'info_plus_cinq_car_2' => '(5 karaktere baino gehiago)', 'info_plus_trois_car' => '(3karaktere baino gehiago)', 'info_popularite' => 'Arrakasta: @popularite@ Bisitak:@visites@', - 'info_popularite_4' => 'Arrakasta: @popularite@ Bisitak: @visites@', 'info_post_scriptum' => 'Post scriptum', 'info_post_scriptum_2' => 'Post scriptum:', 'info_pour' => '-rako', - 'info_preview_admin' => 'Administratzaileek baino ez dute tokiaaurreikusteko baimena.', - 'info_preview_comite' => 'Idazlari guztiek tokia aurreikusten ahal dute', - 'info_preview_desactive' => 'Aurreikuspena guztiz desaktibatuta dago', 'info_preview_texte' => 'Gunea artikulu eta berri labur guztiak (gutxienez« proposatua » statusa dutenak) argitaratuta egon balira bezala aurreikustea posible da. Posibilitate hau administratzaileentzat bakarrik, idazlari guztientzat, edo inorentzat egon behar da zabalik?', - 'info_principaux_correspondants' => 'Zure korrespontsal printzipalak', 'info_procedez_par_etape' => 'etapaz etapa jokatu', 'info_procedure_maj_version' => 'Eguneratzeko prozedura bete egin behar da datu-basea SPIP-en bertsio berrira moldatzeko.', 'info_proxy_ok' => 'Proxy-aren proba lortua', @@ -477,14 +398,9 @@ Onartzen badituzu, bisitariak inprimaki automatizatu batetik harpidetu ahal izan

    Inskribatzean, erabiltzaileek mezu elektroniko automatiko bat jasotzen dute eremu pribaturako sarbide-kodeekin. Ostapen zuzkitzaile batzuek mail-bidalketa desaktibatzen dute bere zerbitzarietatik : kasu honetan, inskripzio automatikoa ezinezkoa da.
    ', - 'info_question_utilisation_moteur_recherche' => 'SPIP-ean integratutako bilatzailea erabili nahi duzu ? -(desaktibapenak sistemaren funtzionamendua bizkortzen du.)', - 'info_question_vignettes_referer_non' => 'Bisiten jatorrien guneen kapturak ez erakutsi', 'info_qui_edite' => '@nom_auteur_modif@ eduki hau landu du duela @date_diff@ minutu', 'info_racine_site' => 'Gunearen erroa', 'info_recharger_page' => 'Mesedez orrialde hau berriz kargatu minutu batzuk barru.', - 'info_recherche_auteur_a_affiner' => 'Emaitza gehiegi "@cherche_auteur@"-rako ; mesedez bilaketa doitu.', - 'info_recherche_auteur_ok' => 'Egile asko aurkituak"@cherche_auteur@"-rako:', 'info_recherche_auteur_zero' => 'Emaitzarik ez «@cherche_auteur@ »-rako.', 'info_recommencer' => 'Mesedez berrabiarazi.', 'info_redacteur_1' => 'Idazlaria', @@ -503,7 +419,6 @@ Ostapen zuzkitzaile batzuek mail-bidalketa desaktibatzen dute bere zerbitzarieta 'info_rubriques' => 'Atalak', 'info_rubriques_02' => 'atalak', 'info_rubriques_trouvees' => 'Aukitutako atalak', - 'info_rubriques_trouvees_dans_texte' => 'Aurkitutako atalak (testuan)', 'info_sans_titre' => 'Titulurik gabe', 'info_selection_chemin_acces' => 'Ondoren urtekarian sartzeko bidea hautatu :', 'info_signatures' => 'sinadurak', @@ -516,14 +431,12 @@ Ostapen zuzkitzaile batzuek mail-bidalketa desaktibatzen dute bere zerbitzarieta 'info_sites_lies_mot' => 'Gako-hitz honi lotutako gune erreferientziatuak', 'info_sites_proxy' => 'Proxy bat erabili', 'info_sites_trouves' => 'Aurkitutako guneak', - 'info_sites_trouves_dans_texte' => 'Aurkitutako guneak(testuan)', 'info_sous_titre' => 'Azpititulua :', 'info_statut_administrateur' => 'Administratzailea', 'info_statut_auteur' => 'Egile honen estatusa:', 'info_statut_auteur_2' => 'Nor naizen', 'info_statut_auteur_a_confirmer' => 'Izen-ematea baieztatzekoa', 'info_statut_auteur_autre' => 'Beste egoera :', - 'info_statut_efface' => 'Ezabatuta', 'info_statut_redacteur' => 'Idazlea', 'info_statut_utilisateurs_1' => 'Inportatutako erabiltzaileen estatus lehenetsia', 'info_statut_utilisateurs_2' => 'LDAP urtekarian dauden pertsonei emandako estatusa aukeratu lehen aldiz konektatzen direnean. Ondoren balio hau aldatu ahal izango duzu idazle bakoitzarentzat kasuz kasu.', @@ -538,15 +451,14 @@ Ostapen zuzkitzaile batzuek mail-bidalketa desaktibatzen dute bere zerbitzarieta 'info_texte' => 'Testua', 'info_texte_explicatif' => 'Testu esplikatiboa', 'info_texte_long' => '(testua luzea da : beraz, balidazio ondoren berriz elkartuko diren zati askotan agertzen da.)', - 'info_texte_message' => 'Zure mezuaren testua', - 'info_texte_message_02' => 'Mezuaren testua', + 'info_texte_message' => 'Zure iruzkinaren testua', + 'info_texte_message_02' => 'Iruzkinaren testua', 'info_titre' => 'Titulua :', 'info_total' => 'guztira :', 'info_tous_articles_en_redaction' => 'Artikulu guztiak idazteko bidean', 'info_tous_articles_presents' => 'Argitaratutako artikulu guztiak eremu honetan', 'info_tous_articles_refuses' => 'Errefusatutako artikulu guztiak', 'info_tous_les' => 'guztiak :', - 'info_tous_redacteurs' => 'Idazlari guztientzako abisuak', 'info_tout_site' => 'Gune guztia', 'info_tout_site2' => 'Artikulua ez da hizkuntza honetara itzuli.', 'info_tout_site3' => 'Artikulua hizkuntza honetara itzuli da, baina ondoren erreferentzia-artikuluari aldaketak egin zaizkio. Itzulpena eguneratu behar da.', @@ -562,7 +474,6 @@ Itzulpenak originalari asoziatuta daude, bere egoera adierazten duten kolore bat 'info_une_rubrique_02' => 'atal bat', 'info_url' => 'URL ', 'info_url_proxy' => 'proxy-aren URLa', - 'info_url_site' => 'Gunearen URL-a', 'info_url_site_pas_conforme' => 'Gunearen helbidea baliogabekoa da.', 'info_url_test_proxy' => 'Entseguendako URLa', 'info_urlref' => 'Hipertestu lotura:', @@ -574,7 +485,6 @@ Itzulpenak originalari asoziatuta daude, bere egoera adierazten duten kolore bat 'info_visiteurs_02' => 'Gune publikoaren bisitariak', 'info_webmestre_forces' => 'Webmaster-ak fitxategi honetan definituak dira : @file_options@.', 'install_adresse_base_hebergeur' => 'Aterbetzaileak emandako datu-basearen helbidea', - 'install_base_ok' => '@base@ basea ezagutua izan da', 'install_connect_ok' => 'Datu-base berria behar bezala deklaratua izan da zerbitzari izen honekin @connect@.', 'install_echec_annonce' => 'Instalazioak seguraski huts eginen du, edo martxan izanen ez den gune bat sortuko du...', 'install_extension_mbstring' => 'SPIP ez da ibilki hunekin :', @@ -587,7 +497,6 @@ Itzulpenak originalari asoziatuta daude, bere egoera adierazten duten kolore bat 'install_select_langue' => 'Hizkuntza bat aukeratu eta « hurrengoa » botoian klikatu instalazio-prozedura hasteko.', 'install_select_type_db' => 'Zehaztu datu-base mota :', 'install_select_type_mysql' => 'MySQL', - 'install_select_type_mysqli' => 'MySQLi', 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', @@ -604,8 +513,6 @@ Itzulpenak originalari asoziatuta daude, bere egoera adierazten duten kolore bat 'item_activer_messages_avertissement' => 'Ohartarazpen mezuak aktibatu', 'item_administrateur_2' => 'administratzailea', 'item_afficher_calendrier' => 'Egutegianerakutsi', - 'item_autoriser_documents_joints' => 'Artikuluei erantsitako dokumentuak baimendu', - 'item_autoriser_documents_joints_rubriques' => 'Ataletako artikuluak baimendu', 'item_autoriser_syndication_integrale' => 'Artikuluen osotasuna zabaldu sindikazio fitxategietan', 'item_choix_administrateurs' => 'administratzaileak', 'item_choix_generation_miniature' => 'Irudien miniaturak automatikoki sortu', @@ -613,7 +520,6 @@ Itzulpenak originalari asoziatuta daude, bere egoera adierazten duten kolore bat 'item_choix_redacteurs' => 'erredaktoreak', 'item_choix_visiteurs' => 'lekuarenbisitariak', 'item_creer_fichiers_authent' => '".htpasswd" fitxategiak sortu', - 'item_limiter_recherche' => 'Lekuhonetan mugatu ikerketa', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Mezutegia eta agenda aktibatu', 'item_mots_cles_association_articles' => 'artikuluekin', @@ -623,22 +529,15 @@ Itzulpenak originalari asoziatuta daude, bere egoera adierazten duten kolore bat 'item_non_accepter_inscriptions' => 'Ez onartu inskripziorik', 'item_non_activer_messages_avertissement' => 'Ohar mezurik gabe', 'item_non_afficher_calendrier' => 'Ez erakutsi egutegian', - 'item_non_autoriser_documents_joints' => 'Artikuluetan dokumentuak sartzea galarazi', - 'item_non_autoriser_documents_joints_rubriques' => 'Ataletan dokumentuak sartzeagalarazi', 'item_non_autoriser_syndication_integrale' => 'Bilduma bat baizik zabaldu', - 'item_non_compresseur' => 'Konprimatzea desaktibatu', 'item_non_creer_fichiers_authent' => 'Ez sortu fitxategi horiek', - 'item_non_gerer_statistiques' => 'Ez kudeatu estatistikarik', - 'item_non_limiter_recherche' => 'Aipatutako lekuen edukian ikertu', 'item_non_messagerie_agenda' => 'Mezutegia eta agenda desaktibatu', 'item_non_publier_articles' => 'Artikuluak adierazitako argitaratze data baino lehen ezargitaratu', - 'item_non_utiliser_moteur_recherche' => 'Ez erabili motorra', 'item_nouvel_auteur' => 'Egile berria', 'item_nouvelle_rubrique' => 'Atal berria', 'item_oui' => 'Bai', 'item_publier_articles' => 'Artikuluak argitaratu argitaratze-eguna kontuan izan gabe ', 'item_reponse_article' => 'Artikuluari erantzuna', - 'item_utiliser_moteur_recherche' => 'Bilaketa-motorra erabili', 'item_version_html_max_html4' => 'HTML4-ean mugatu gune publikoarentzat.', 'item_version_html_max_html5' => 'HTML5 baimendu', 'item_visiteur' => 'bisitaria', @@ -653,16 +552,14 @@ Itzulpenak originalari asoziatuta daude, bere egoera adierazten duten kolore bat 'label_choix_langue' => 'Hizkuntza aukera ezazu', 'label_nom_fichier_connect' => 'Zerbitzari honendako erabilitako izena ezar ezazu', 'label_slogan_site' => 'Gunearen lema', - 'label_taille_ecran' => 'Panatila zabalera', + 'label_taille_ecran' => 'Pantailaren zabalera', 'label_texte_et_icones_navigation' => 'Nabigazio menua', 'label_texte_et_icones_page' => 'Orria erakutsi', 'ldap_correspondance' => '@champ@ eremuaren jaurantsia', 'ldap_correspondance_1' => 'LDAP eremuen jaraunspena', 'ldap_correspondance_2' => 'Ondoko SPIP eremu bakoitzarentzat, ezar ezazu LDAP eremuaren izena. Hutsik utz ezazu ez betetzeko, espazio edo komak tarteka itzazu LDAP eremu bat baino gehiago probatzeko.', - 'lien_ajout_destinataire' => 'Jasotzaile hau erantsi', 'lien_ajouter_auteur' => 'Egile hau erantsi', - 'lien_ajouter_participant' => 'Parte-hartzaile bat erantsi', 'lien_ajouter_une_rubrique' => 'Atal hau gehitu', 'lien_email' => 'posta elektronikoa', 'lien_nom_site' => 'Lekuaren izena', @@ -670,9 +567,7 @@ Hutsik utz ezazu ez betetzeko, espazio edo komak tarteka itzazu LDAP eremu bat b 'lien_retirer_rubrique' => 'Atala kendu', 'lien_retirer_tous_auteurs' => 'Autore guziak kendu', 'lien_retirer_toutes_rubriques' => 'Atal guziak kendu', - 'lien_retrait_particpant' => 'Parte-hartzailehau baztertu', 'lien_site' => 'lekua', - 'lien_supprimer_rubrique' => 'Atal hau kendu', 'lien_tout_deplier' => 'Hedatu dena', 'lien_tout_replier' => 'Bildu dena', 'lien_tout_supprimer' => 'Dena kendu', @@ -703,7 +598,6 @@ Hutsik utz ezazu ez betetzeko, espazio edo komak tarteka itzazu LDAP eremu bat b 'onglet_contenu' => 'Edukia', 'onglet_declarer_une_autre_base' => 'Beste base bat deklaratu', 'onglet_discuter' => 'Solastu', - 'onglet_documents' => 'Dokumentuak', 'onglet_interactivite' => 'Interaktibitatea', 'onglet_proprietes' => 'Proprietateak', 'onglet_repartition_actuelle' => 'gaur egun', @@ -791,6 +685,7 @@ Hutsik utz ezazu ez betetzeko, espazio edo komak tarteka itzazu LDAP eremu bat b // R 'repertoire_plugins' => 'Direktorioa :', + 'required' => '(nahitaezkoa)', // S 'sans_heure' => 'ordurik gabe', @@ -818,15 +713,12 @@ Hutsik utz ezazu ez betetzeko, espazio edo komak tarteka itzazu LDAP eremu bat b 'texte_article_virtuel_reference' => 'Artikulu birtuala : zure SPIP gunean erreferentziatutako artikulua, baina beste URL batera birbideratua. Birbideratzea bertan behera uzteko, goiko URL-a ezabatu.', 'texte_aucun_resultat_auteur' => 'Emaitzarik ez "@cherche_auteur@"-rako', 'texte_auteur_messagerie' => 'Toki honekuneoro konektatuta dauden pertsonen zerrenda erakutsi ahal dizu, honela mezuakzuzenean trukatu ahal dituzu. Gainera, zerrendan ez agertzea erabaki dezakezu(besteontzat "ikustezina" zaude)', - 'texte_auteur_messagerie_1' => 'Toki honek mezu-trukea eta eztabaida-foro pribatuen sorrera onartzen ditu tokiko parte-hartzaileen artean. Truke horietan parte ez hartzea erabaki ahal duzu zuk.', 'texte_auteurs' => 'AUTOREAK', 'texte_choix_base_1' => 'Baseaaukeratu', 'texte_choix_base_2' => 'MYSQL zerbitzariak data base ugari dauzka.', 'texte_choix_base_3' => 'Aukeratu hemen zure ostapen zuzkitzaileak eman dizuna:', 'texte_choix_table_prefix' => 'Mahaien aurrizkiak :', - 'texte_commande_vider_tables_indexation' => 'Komando hau erabili SPIP-en integratuta dagoen bilaketa-tresnak erabilitako indexazio-taulak husteko. Honek disko-lekua irabazten utziko dizu.', 'texte_compatibilite_html' => 'SPIPi galdegin diezaiokezu sortzea, parte publikoan, HTML4 normarekin bateragarri den kodea, edo baimentzen ahal zenioke HTML5 norma modernoagoaren erabiltzea.', - 'texte_compresse_ou_non' => '(hau konprimitua izan ahal da edo ez)', 'texte_compte_element' => '@count@ osagai', 'texte_compte_elements' => '@count@osagai', 'texte_conflit_edition_correction' => 'Otoi, testoaren bi bertsio desberdinen arteko desberdinatsunak kontrola itzazu ;edo zure aldaketak kopia itzazu, eta ondotik berriz hasi.', @@ -841,10 +733,8 @@ zure ostapen zuzkitzaileak SQL jasaten badu, han aurkitu beharko zenituzke SQL z 'texte_date_publication_anterieure' => 'Lehengo argitarapen data', 'texte_date_publication_anterieure_nonaffichee' => 'Aurreko argitarapen data ez erakutsi.', 'texte_date_publication_article' => 'ARGITARAPEN DATA:', - 'texte_descriptif_petition' => 'Eskaeraren azalpena', 'texte_descriptif_rapide' => 'Deskribapen motza', 'texte_effacer_base' => 'Ezabatu SPIP datu-basea', - 'texte_effacer_donnees_indexation' => 'Indexazio datak ezabatu', 'texte_effacer_statistiques' => 'Estatistikak ezabatu', 'texte_en_cours_validation' => 'Azpiko edukiak argitarapenerako proposatuta daude.', 'texte_enrichir_mise_a_jour' => 'Zure testuaren formatua aberastu dezakezu,"tipografia-lasterbideak" erabiliz', @@ -855,23 +745,14 @@ zure ostapen zuzkitzaileak SQL jasaten badu, han aurkitu beharko zenituzke SQL z 'texte_informations_personnelles_2' => '(Oharra : berrinstalazio batez ari bagara, eta zure sarbidea beti funtzionatzen bada, ahal duzu', 'texte_introductif_article' => '(Artikuluaren sarrera.)', 'texte_jeu_caractere' => 'Aukera hau probetxugarria da zure guneak alfabeto erromatarreko (edo « mendebaldarrekoa ») alfabetodesberdinak eta bere eratorriak erakutsi behar baditu. Kasu honetan, komenigarria izango litzatekekonfigurazio lehenetsia aldatzea karaktere-joko egoki baterako ; kasu guztietan probak egiteagomendatzen dizugu irtenbide on bat aurkitzeko. Parametro hau aldatzen baduzu,ez ahaztu ondorioko gune publikoa egokitzen (#CHARSET marka).', - 'texte_jeu_caractere_2' => 'Konfigurazio honek ez du atzeraeraginezko efekturik. Beraz,dagoeneko sartutako testuak gaizki bistaratu ahal dira konfigurazioaren aldaketa batenondorioz. Kasu guztietan, kalteri gabe aurreko konfiguraziora itzuli ahalizango zara.', 'texte_jeu_caractere_3' => 'Zure gunea karaktere-joko huntan instalatua da :', - 'texte_lien_hypertexte' => 'Zure mezua Web-gunean argitaratutakoartikulu bati baldin badagokio, edo informazio gehiago dituen orrialde bati, jarri orainorriaren izenburua eta bere URL helbidea)', 'texte_login_ldap_1' => '(Hutsik laga sarbide anonimo baterako, edo bide osoan sartu, adibidez «uid=dupont, ou=users, dc=mon-domaine, dc=com ».)', 'texte_login_precaution' => 'Kontuz ! Hau da orain konektatuta zaudenarekiko login-a. Inprimaki hau kontuz erabili...', - 'texte_message_edit' => 'Adi Egon: tokiarenadministratzaileek mezu hau alda dezakete, eta erredaktore guztiek ikus dezakete.Iragarkiak erabili bakar bakarrik tokiaren bizitzaren gertakari garrantzitsuakiragartzeko.', 'texte_mise_a_niveau_base_1' => 'SPIP-eko artxiboak berritu egin dituzu eta oraintokiaren data basea berritu egin behar duzu.', 'texte_modifier_article' => 'Artikuluaaldatu:', - 'texte_moteur_recherche_active' => 'Bilaketa-tresna aktibatuta dago. - manamendu hau erabili, -berrindexazio bizkor bati ekin nahi badiozu (adibidez babeskopiabat berreskuratu ondoren). Modu arruntean aldatutako dokumentuak (SPIP interfazetik)automatikoki berrindexatuak direla antzeman : -beraz komando hau salbuespenezkomodurako bakarrik da probetxugarria.', - 'texte_moteur_recherche_non_active' => 'Bilaketarako motorea ez dago aktibaturik.', 'texte_multilinguisme' => 'Objektu batzuk hizkuntza anitzetan kudeatu nahi badituzu, nabigazio konplexu batekin, zure gunearen antolakuntzaren arabera, objektu horiei hizkuntza aukeratzeko menu bat erantsi diezakezu.', 'texte_multilinguisme_trad' => 'Elementu batzuen itzulpenen arteko loturak kudeatzeko sistema bat ere aktiba dezakezu.', 'texte_non_compresse' => 'konpresiorikgabe (zure zerbitzariak ez du funtzionalitate hau jasaten)', - 'texte_nouveau_message' => 'Mezu berria', 'texte_nouvelle_version_spip_1' => 'SPIPren bertsio berri bat instalatu duzu.', 'texte_nouvelle_version_spip_2' => 'Bertsio berri honek ohikoa baino osoago den eguneratze bat behar du. Gunearen web-arduraduna bazara, otoi @connect@ fitxategia ezaba ezazu eta instalazioari berriro ekin iezaiozu zure datu-basearekilako konexio-parametroak eguneratzeko. (NB. : zure konexio-parametroak ahaztu badituzu, @connect@ fitxategia begira ezazu ezabatu aurretik...)', 'texte_operation_echec' => 'Lehengo orriraitzuli, beste base bat aukeratu edo base berri bat sortu. Zure ostapen zuzkitzaileakemandako argibideak egiaztatu.', @@ -885,7 +766,6 @@ Orokorrean, aukera hau hutsik geratuko da.', 'texte_publication_articles_post_dates' => 'Zer nolako jarrera hartu behar du SPIP-ekberen argitaratze data oraindik heldu ez den data duten artikuluen aurrean?', 'texte_rappel_selection_champs' => '[Ez ahaztu eremu hau zuzenki hautatzea.]', 'texte_recalcul_page' => 'Orri bat baino ez baduzu berkalkulatu nahi,gunepublikoan dagoen "Berkalkulatu" botoia erabili.', - 'texte_recapitiule_liste_documents' => 'Orri honek ataletan sartu dituzun dokumentu lista osoa erakusten du. Dokumentu bakoitzaren argibideak aldatzeko, erabili bere ataleko lotura.', 'texte_recuperer_base' => 'Datuen Basea konpondu', 'texte_reference_mais_redirige' => 'Zure tokianerreferentziatutako artikulua eta beste URL batengana berzuzenduta.', 'texte_requetes_echouent' => 'SQL eskaera batzuk sistematikoki eta agerian dagoen arrazoirik gabe huts egiten dutenean, datu-basea berarengatik izatea posible da.

    Zure SQL zerbitzariak bere taulak konpontzeko gaitasun bat dauka istripu baten erruz hondatuak izan direnean. Hemen konponketa hau egiten saia zaitezke; huts eginez gero, gorde emaitzaren kopia bat, posible baita huts egitearen aztarnak izatea...

    @@ -899,7 +779,6 @@ Arazoa berriro gertatzen baldin bada, zure aterbetzailearekin harremanetan jar z 'texte_suppression_fichiers' => 'Instrukzio hau erabili SPIP kache-andauden artxibo guztiak ezabatzeko. Honen bidez, besteak beste, aldaketa grafikoak edotokiaren egitura dezente aldatuz gero, orri guztiak berkalkula daitezke.', 'texte_sur_titre' => 'Aurreizenburua', 'texte_table_ok' => ': Taula hau ondo dago.', - 'texte_tables_indexation_vides' => 'Indexazio motorraren taulak hutsik daude.', 'texte_tentative_recuperation' => 'Konponketa saiakera.', 'texte_tenter_reparation' => 'Datu basearen konponketa saiatu.', 'texte_test_proxy' => 'Tokiaren URL-a hemen ipini "proxy" hau frogatzeko.', @@ -907,17 +786,8 @@ Arazoa berriro gertatzen baldin bada, zure aterbetzailearekin harremanetan jar z 'texte_titre_obligatoire' => 'Izenburua [Derrigorrezkoa]', 'texte_travail_article' => '@nom_auteur_modif@ artikulu hau berridatzi egin duduela@date_diff@ minutu.', 'texte_travail_collaboratif' => 'Sarritan erredaktore batbaino gehiago artikulu berberan lan egiten dute, sistemak duela gutxi "irekiak" izandiren artikuluak erakutsi ahal du, aldi bereko aldaketak saihesteko. Aukera hau,kontrakoa egin ezean, desaktibatuta dago ezorduko abisu mezuak saihesteko.', - 'texte_trop_resultats_auteurs' => '"@cherche_auteur@" bilaketarako emaitza gehiegi.Irizpideak zehaztu.', - 'texte_unpack' => 'Azken bertsiotik telekargatua.', - 'texte_utilisation_moteur_syndiques' => 'SPIP-en barneratutako bilaketa motorra erabiltzen duzunean, -bilaketak tokietan eta sindikatutako artikuluetan bi era desberdinetan egin ditzakezu -Errazena artikuluen deskribapenetan eta izenburuetan bilatzean datza. -Bigarren era, askoz potenteagoa, SPIP-i erreferentziatutako tokien testuan bilatzen ereuzten dio. -Toki bat erreferentziatzen baldin baduzu, orduan SPIP-ek tokiaren edukiaren barruan bilaketa egingo du.', - 'texte_utilisation_moteur_syndiques_2' => 'Bide honekSPIP erreferentziatutako tokiak sarritan bisitatzera behartzen du, zure tokian abiadurabeherapen txikia eragiten duena.', 'texte_vide' => 'Hutsik', 'texte_vider_cache' => 'Kache-a hustu', - 'titre_admin_effacer' => 'Mantenimendu teknikoa', 'titre_admin_tech' => 'Mantentze-lan teknikoa', 'titre_admin_vider' => 'Mantentze-lan teknikoa', 'titre_ajouter_un_auteur' => 'Autore bat gehitu', @@ -943,43 +813,24 @@ Toki bat erreferentziatzen baldin baduzu, orduan SPIP-ek tokiaren edukiaren barr 'titre_naviguer_dans_le_site' => 'Tokian ibili...', 'titre_nouvelle_rubrique' => 'Atal berria', 'titre_numero_rubrique' => 'ATALA:', - 'titre_page_admin_effacer' => 'Mantenimendu teknikoa: basea ezabatu', 'titre_page_articles_edit' => '@titre@ Aldatu', 'titre_page_articles_page' => 'Artikuluak', 'titre_page_articles_tous' => 'Toki osoa', - 'titre_page_auteurs' => 'Bisitari', 'titre_page_calendrier' => 'Egutegia @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Tokiaren konfigurazioa', - 'titre_page_config_fonctions' => 'Tokiaren konfigurazioa', - 'titre_page_configuration' => 'Tokiaren konfigurazioa', - 'titre_page_controle_petition' => 'Eskaeren jarraipena', 'titre_page_delete_all' => 'Itzuliezin eta erabateko ezabapena', - 'titre_page_documents_liste' => 'Atalendokumentuak', - 'titre_page_index' => 'Zure gune pribatua', - 'titre_page_message_edit' => 'Mezu bat idatzi', - 'titre_page_messagerie' => 'Zure mezularitza', 'titre_page_recherche' => 'Bilaketaren emaitzak @recherche@', 'titre_page_statistiques_referers' => 'Estatistikak (sartu direnloturak)', 'titre_page_upgrade' => 'SPIPen gaurkotzea', 'titre_publication_articles_post_dates' => 'Geroko datarekinartikuluen argitarapena', - 'titre_referencer_site' => 'Toki bat erreferentziatu', - 'titre_rendez_vous' => 'AIPAMENAK:', 'titre_reparation' => 'Konponketa', 'titre_suivi_petition' => 'Eskaerenkudeaketa', 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'Zenbaki horrekin ez dago artikulurik', 'trad_article_traduction' => 'Artikulu honen bertsio guztiak:', - 'trad_deja_traduit' => 'Errorea : Artikulu hau ezin da eskatutako zenbakiari lotu.', 'trad_delier' => 'Itzulpen hauetarik deslotu', 'trad_lier' => 'Artikulu hau artikuluaren itzulpena da', 'trad_new' => 'Artikulu honen itzulpen berria idatzi', - // U - 'upload_info_mode_document' => 'Irudi hau portfolioan ezarri', - 'utf8_convertir_votre_site' => 'Zure gunean utf-8-era konbertitu', - // V 'version' => 'Bertsioa :' ); - -?> diff --git a/www/ecrire/lang/ecrire_fa.php b/www/ecrire/lang/ecrire_fa.php index b93a88a3..34f3d134 100644 --- a/www/ecrire/lang/ecrire_fa.php +++ b/www/ecrire/lang/ecrire_fa.php @@ -1,9 +1,11 @@ 'به صفحه پيش برگرديد و ببينيد اطلاعاتي را كه داده ايد صحيح ميباشند', 'avis_connexion_ldap_echec_3' => 'از سيستم ال دى ا پى به طور پى در پى براى ورود كاربران استفاده نكنيد', 'avis_deplacement_rubrique' => 'توجه ! اين بخش داراى@contient_breves@ brève@scb@ ميباشد : خواهشمند است درصورت جابجائي آن، علامت مربوطه را تائيد كنيد ', - 'avis_destinataire_obligatoire' => 'شما بايد گيرنده را پيش از فرستادن پيام مشخص نماييد.', 'avis_erreur_connexion_mysql' => 'خطاى اتصال SQL ', - 'avis_erreur_version_archive' => 'توجه ! فايل @archive@ با نسخه ديگرى غير از نسخه اسپيپ شما مطابقت ميكند. :شما به مشكلات عمده اى برخورد خواهيد كرد : از بين رفتن داده پى‌ها، اختلالات گوناگون در كار سايت، و غيره. درخواست واردات را a> تائيد نكنيد. براى اطلاعات بيشتر رجوع كنيد به href="@spipnet@"> la documentation de SPIP.', - 'avis_espace_interdit' => 'بخش ممنوع

    اسپيپ قبلأ نصب شده', + 'avis_espace_interdit' => 'بخش ممنوع

    اسپيپ قبلأ نصب شده', # MODIF 'avis_lecture_noms_bases_1' => ' برنامه نصبى نتوانست نام داده پى هاى مستقر شده را بخواند ', 'avis_lecture_noms_bases_2' => ' يا هيچ پايگاهى موجود نميباشد، يا كاركردى كه اجازه فهرست گذارى پايگاه ها راميدهد بدلايل ايمنى غير فعال شده است (مورد بعضى از ميزبانان ميباشد)', 'avis_lecture_noms_bases_3' => ' در گزينش دوم، اين احتمال وجود دارد كه پايگاهى كه حامل نام شما براى ارتباط ميباشد استفاده شده باشد', - 'avis_non_acces_message' => 'اين پيام در دسترس شما نميباشد', 'avis_non_acces_page' => 'اين صفحه در دسترس شما نميباشد', 'avis_operation_echec' => 'کارکرد نتیجه نداد.', 'avis_operation_impossible' => 'عمل غیرممکن', - 'avis_probleme_archive' => '@archive@ اشكال در خواندن فايل', 'avis_suppression_base' => ' توجه! حذف داده ها غير قابل برگشت ميباشد', - 'avis_version_mysql' => 'اس.كيو.ال سرور شما (@version_mysql@) به جدول‌هاي داده‌ها اجازه‌ي خود-ترميمي را نمي‌دهد.', // B 'bouton_acces_ldap' => 'دسترسى به LDAP را اضافه كنيد', 'bouton_ajouter' => 'اضافه كنيد', - 'bouton_ajouter_participant' => ': يك شركت كننده اضافه كنيد', - 'bouton_annonce' => 'خبر', 'bouton_annuler' => 'باطل کنید', - 'bouton_checkbox_envoi_message' => 'امكان فرستادن پيام', - 'bouton_checkbox_indiquer_site' => 'يك سايت تارنما را الزامأ مشخص كنيد', - 'bouton_checkbox_signature_unique_email' => 'تنها يك امضاء براى هر آدرس الكترونيكى', - 'bouton_checkbox_signature_unique_site' => 'تنها يك امضاء براى هر سايت تارنما', + 'bouton_cache_activer' => 'بازفعال سازي حافظه پنهان', + 'bouton_cache_desactiver' => 'غيرفعال سازي موقت حافظه پنهان ', 'bouton_demande_publication' => 'انتشار اين مقاله را درخواست كنيد ', 'bouton_desactive_tout' => 'همه را غیر فعال کنید', 'bouton_desinstaller' => 'حذف کنید', - 'bouton_effacer_index' => 'فهرست را پاك كنيد', 'bouton_effacer_tout' => 'همه را پاك كنيد', - 'bouton_envoi_message_02' => 'يك پيام بفرستيد', 'bouton_envoyer_message' => 'پيام آماده : بفرستيد', 'bouton_fermer' => 'بستن', 'bouton_mettre_a_jour_base' => 'به هنگام سازي پايگاه داده‌ها', 'bouton_modifier' => 'اصلاح كنيد', - 'bouton_pense_bete' => 'يادداشت براى استفاده شخصى', - 'bouton_radio_activer_messagerie' => 'پيام گير داخلى را فعال كنيد', - 'bouton_radio_activer_messagerie_interne' => 'پيام گير داخلى را فعال كنيد', - 'bouton_radio_activer_petition' => 'درخواست را فعال كنيد', 'bouton_radio_afficher' => 'نشان دهيد', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'در فهرست نويسندگانى كه به اسپيپ وصل هستند ظاهر شود', - 'bouton_radio_desactiver_messagerie' => 'پپام گير را غير فعال كنيد', 'bouton_radio_envoi_annonces_adresse' => ':خبرها را به اين آدرس بفرستيد', 'bouton_radio_envoi_liste_nouveautes' => 'فهرست تازه ها را بفرستيد:', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'در فهرست نويسندها نمايان نشود', 'bouton_radio_non_envoi_annonces_editoriales' => 'خبرهاى مربوط به سر مقاله ها را نفرستيد', - 'bouton_radio_pas_petition' => 'بدون درخواست', - 'bouton_radio_petition_activee' => 'درخواست، فعال شده', - 'bouton_radio_supprimer_petition' => 'حذف درخواست', 'bouton_redirection' => 'هدايت دوباره', 'bouton_relancer_installation' => 'دوباره نصب كنيد', 'bouton_suivant' => 'بعدى', 'bouton_tenter_recuperation' => 'اقدام به تعمير كنيد', 'bouton_test_proxy' => 'پروكسى را امتحان كنيد', 'bouton_vider_cache' => 'فايل موقت را خالى كنيد', - 'bouton_voir_message' => 'اين پيام را پيش از معتبر كردن بخوانيد', // C - 'cache_mode_compresse' => 'فايلهاى پنهان بصورت فشرده ذخيره شده اند.', - 'cache_mode_non_compresse' => 'اين فايلهاى پنهان بصورت فشرده ذخيره نشده اند.', 'cache_modifiable_webmestre' => 'اين پارامترها توسط وب مستر سايت ميتواند اصلاح شود.', 'calendrier_synchro' => ' درصورت استفاده از نرم افزارهاى روزشمار ويژهiCal, ميتوانيد آنرا با مطالب اين سايت منطبق كنيد', 'config_activer_champs' => 'بخشهای زیر را فعال کنید', @@ -105,9 +85,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_titre_base_sup' => 'اعلام يك پايگاه مكمل', 'config_titre_base_sup_choix' => 'يك پايگاه مكمل انتخاب كنيد', 'connexion_ldap' => 'ارتباط', - 'copier_en_local' => 'در local کپی کنید', 'creer_et_associer_un_auteur' => 'ايجاد و اتصال نويسنده', - 'creer_et_associer_une_rubrique' => 'يك بخش ايجاد و وصل كنيد', // D 'date_mot_heures' => 'ساعت', @@ -139,7 +117,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'شما login', 'entree_login_connexion_1' => 'ارتباط login', 'entree_login_connexion_2' => '(مطابقت ميكند، گاهى خالى گذاشته شده FTPورود به login گاهى با) ', - 'entree_login_ldap' => 'نخستين Login LDAP', 'entree_mot_passe' => 'كلمه ورودتان', 'entree_mot_passe_1' => '(كلمه ورود براى ارتباط (كنكشن', 'entree_mot_passe_2' => '(مطابقت ميكند، گاهى خالى گذاشته شده FTP گاهى با كلمه ورود ) ', @@ -157,8 +134,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_url' => '(URL) آدرس سايتتان', 'entree_url_2' => 'آدرس (يو.آر.ال) سايت', 'erreur_connect_deja_existant' => 'سروري به نام موجود است', + 'erreur_email_deja_existant' => 'اين نشاني ايميل قبلاً ثبت شده است.', 'erreur_nom_connect_incorrect' => 'نام سرور مجاز نيست', - 'erreur_plugin_desinstalation_echouee' => 'پلاگين نصب زدايي نشد. با اين وجود مي‌توانيد آن را غيرفعال سازيد.', # MODIF + 'erreur_plugin_desinstalation_echouee' => 'نصب زدايي پلاگين موفق نبود. با اين وجود مي‌توانيد آن را غيرفعال سازيد.', 'erreur_plugin_fichier_absent' => 'فایل موجود نیست', 'erreur_plugin_fichier_def_absent' => 'فایل معیار موجود نیست', 'erreur_plugin_nom_fonction_interdit' => 'نام تابع مجاز نمیباشد', @@ -196,16 +174,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_configuration' => 'پيكربندي', 'icone_creer_auteur' => 'يك نويسنده جديد اضافه و به اين مقاله مرتبطش كنيد', 'icone_creer_mot_cle' => 'يك كليد-واژه نو بسازيد و به اين مقاله مرتبطش كنيد', - 'icone_creer_mot_cle_rubrique' => 'ساختن كليدواژه جديد و چسباندن آن به اين بخش', - 'icone_creer_mot_cle_site' => 'ساختن كليدواژه‌ي جديد و چسباندن آن به اين سايت', 'icone_creer_rubrique_2' => 'يك بخش جديد بسازيد', 'icone_edition' => 'ويرايش', - 'icone_envoyer_message' => 'اين پيام را بفرستيد', 'icone_ma_langue' => 'زبان من', 'icone_mes_infos' => 'اطلاعات من', 'icone_mes_preferences' => 'ترجيح‌هاي من', 'icone_modifier_article' => 'اين مقاله را اصلاح كنيد', - 'icone_modifier_message' => 'اين پيام را اصلاح كنيد', 'icone_modifier_rubrique' => 'اين بخش را اصلاح كنيد', 'icone_publication' => 'انتشار', 'icone_relancer_signataire' => 'بازنشر امضاء', @@ -218,21 +192,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_supprimer_signature' => 'اين امضاء را حذف كنيد', 'icone_valider_signature' => 'اين امضاء را معتبر كنيد', 'image_administrer_rubrique' => 'شما ميتوانيد اين بخش را اداره كنيد', - 'impossible_modifier_login_auteur' => 'تغيير لاگين ممكن نيست.', - 'impossible_modifier_pass_auteur' => 'تغيير گذرواژه ممكن نيست.', 'info_1_article' => '١ مقاله', - 'info_1_article_syndique' => 'مقاله‌ي اشتراكي 1', 'info_1_auteur' => 'نويسنده‌ي 1', 'info_1_message' => 'پيام 1', 'info_1_mot_cle' => 'كليدواژه‌ي 1', 'info_1_rubrique' => 'بخش 1', - 'info_1_site' => '١ سايت', 'info_1_visiteur' => 'بازديد‌كننده‌ي 1', 'info_activer_cookie' => ' شما ميتوانيد كوكى مكاتبه را فعال نماپيد اينكار به شما اجازه خواهد داد كه براحتى از سايت همگانى به سايت خصوصى برويد', 'info_admin_etre_webmestre' => 'دادن حق وب مستر به من', - 'info_admin_gere_rubriques' => ':اين گرداننده سايت بخشهاى زير را اداره ميكند', - 'info_admin_gere_toutes_rubriques' => 'اين گرداننده سايت تمام بخش‌ها را اداره مي‌كند.', - 'info_admin_gere_toutes_rubriques_2' => 'من تمام بخش‌ها را اداره مي‌كنم', 'info_admin_je_suis_webmestre' => 'من webmestre هستم', 'info_admin_statuer_webmestre' => 'تفويض حق وب مستري به اين مدير', 'info_admin_webmestre' => 'اين مدير webmestre است', @@ -244,15 +211,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrateurs' => 'گردانند گان سايت', 'info_administrer_rubrique' => 'شما ميتوانيد اين بخش را اداره كنيد', 'info_adresse' => ': به آدرس', + 'info_adresse_desinscription' => 'نساني قطع آبونمان: ', 'info_adresse_url' => '(URL) آدرس سايت همگانى ', 'info_afficher_par_nb' => 'نشان دادن با', - 'info_afficher_visites' => ' فهرست بازديدها را نمايش دهيد:', 'info_aide_en_ligne' => 'SPIP كمك در تارنما', 'info_ajout_image' => ' هنگامى كه تصاويرى را ضميمه مقاله اى ميكنيد، اسپيپ ميتواند بطور خودكار آنها را بصورت كوچك شده اضافه كند. با اين روش ميتوان براى مثال نمايى از مجموع تصاوير را بطور خودكار درست كرد ', - 'info_ajout_participant' => ': شركت كننده بعدى اضافه شده', 'info_ajouter_rubrique' => 'يك بخش ديگر را براى اداه كردن اضافه كنيد', 'info_annonce_nouveautes' => 'خبر تازه ها', - 'info_anterieur' => 'پيشين', 'info_article' => 'مقاله', 'info_article_2' => 'مقاله', 'info_article_a_paraitre' => 'مقالات با تاريخ آينده منتشر شوند', @@ -262,17 +227,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_miens' => 'مقالات من', 'info_articles_tous' => 'تمام مقاله‌ها', 'info_articles_trouves' => 'مقالات پيدا شده', - 'info_articles_trouves_dans_texte' => ' ( مقالات پيدا شده ( درون متن', 'info_attente_validation' => 'مقاله هايتان در انتظار تأئيد شدن', 'info_aucun_article' => 'مقاله‌اي نيست', - 'info_aucun_article_syndique' => 'هيچ مقاله‌ي به اشتراك‌گذاشته‌ شده‌اي وجود ندارد', 'info_aucun_auteur' => 'هيچ مؤلفي موجود نيست', 'info_aucun_message' => 'هيچ پيامي موجود نيست', 'info_aucun_rubrique' => 'هيچ بخش', - 'info_aucun_site' => 'هيچ سايتي موجود نيست', - 'info_aucun_visiteur' => 'هيچ بازديد‌كننده‌اي موجود نيست', 'info_aujourdhui' => ': امروز', - 'info_auteur_message' => ':نويسنده پيام ', + 'info_auteur_gere_toutes_rubriques_2' => 'من تمام بخش‌ها را اداره مي‌كنم', # MODIF 'info_auteurs' => 'نويسندگان ', 'info_auteurs_par_tri' => '@partri@ نويسنده گان', 'info_auteurs_trouves' => 'نويسنده گان پيدا شده ', @@ -281,6 +242,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_barre_outils' => 'با ميل ابزار آن؟', 'info_base_installee' => '.ساختار داده پى هايتان نصب شده', 'info_bio' => 'زندگي‌نامه', + 'info_cache_desactive' => 'حفاظه پنهان موقتاً غيرفعال است.', 'info_chapeau' => 'سر متن', 'info_chapeau_2' => ':سر متن', 'info_chemin_acces_1' => 'گزینش: مسير ورود به راهنما', @@ -291,8 +253,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_2' => 'يندر@liste@', 'info_code_acces' => '! كد ها ى وردي تان را فراموش نكنيد', 'info_compatibilite_html' => 'نرم اچ.تي.ام.ال براي پيگيري ', - 'info_compresseur_gzip' => 'توصيه مي‌شود ابتدا ببينيد كه ارايه دهنده خدمات نويسه‌هاي پي.اچ.پي را به صورت سيستماتيك فشرده مي‌كند يا نه. براي اين كار مي‌توايد به عنوان نمونه از خدمات : @testgzip@ استفاده كنيد.', - 'info_compresseur_texte' => 'اگر سرور شما صفحه‌هاي اچ.تي.ام.ال را براي ارسال به اينترانت (internautes) به صورت خودكار فشرده نمي‌سازد، مي‌توانيد براي كم كردن بار صفحه‌هاي بارگذاري شده اينكار را انجام دهيد. توجه: اين امر مي‌تواند بعضي سرور‌ها را به نحو قابل توجه كند كند.', 'info_config_suivi' => 'اگر اين آدرس به فهرست ايميل ها mailing-list مربوط ميشود, ميتوانيد در زير آدرسى را كه شركت كنندگان سايت ميتوانند در آن ثبت نام كنند را مشخص كنيد. اين آدرس ميتواند يك URL( مانند صفحه ثبت نام در فهرست) و يا ميتواند بدين صورت باشد : @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => ' شما ميتوانيد بطور خودكار بوسيله ايميل خبرهاى مربوط به فعاليت تحريريه سايت را دريافت كنيد. براى اين منظور شما بايد در فهرست ايميلها mailing-list ثبت نام كنيد.', 'info_confirmer_passe' => ':كلمه ورودى جديدتان را تأئيد كنيد', @@ -302,7 +262,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_conflit_edition_votre_version' => 'نسخه شما:', 'info_connexion_base' => 'آزمايش ارتباط با پايگاه', 'info_connexion_base_donnee' => 'اتصال با پايگاه داده‌هاي شما', - 'info_connexion_ldap_ok' => 'ارتباط LDAP برقرار شد .

    ميتوانيد به مرحله بعدى برويد. ', # MODIF + 'info_connexion_ldap_ok' => 'ارتباط ال.دي.اي.پي موفقيت آميز است.

    مي‌توانيد به مرحله بعد برويد.

    ', 'info_connexion_mysql' => 'ارتباط شما با SQL', 'info_connexion_ok' => '.ارتباط برقرار شد', 'info_contact' => 'تماس', @@ -316,8 +276,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'تاريخ نگارش قبلى :', 'info_date_referencement' => ': تاريخ پيوند اين سايت', 'info_derniere_etape' => 'پايان !', - 'info_derniers_articles_publies' => 'آخرين مقاله هاى منتشر شده شما در اينترنت', - 'info_desactiver_messagerie_personnelle' => 'شما ميتوانيد پيامگير شخصى تان را روى اين سايت فعال يا غير فعال كنيد', 'info_descriptif' => ':توصيف', 'info_desinstaller_plugin' => 'داده ها را حذف و plugin را غیر فعال کنید', 'info_discussion_cours' => 'در حال بحث', @@ -325,7 +283,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_email_envoi' => 'آدرس ايميل برای ارسال (اختياری)', 'info_email_envoi_txt' => 'آدرس مورد استفاده تان را برای ارسال ايميل در اينجا درج کنيد (وگرنه از آدرس گيرنده استفاده خواهد شد)', 'info_email_webmestre' => 'آدرس ايميل وب مستر ', - 'info_entrer_code_alphabet' => ': كد الفباى مورد استفاده تان را وارد كنيد', 'info_envoi_email_automatique' => 'ارسال نامه ها بطور خودكار', 'info_envoyer_maintenant' => 'الان بفرستيد', 'info_etape_suivante' => 'به مرحله بعدى برويد', @@ -336,30 +293,23 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_facilite_suivi_activite' => 'براى آسان شدن مداوم فعاليت تحريريه، سيستم ميتواند براى مثال، خبر درخواستهاى انتشار و اعتبار مقالات را به فهرست پيكهاى نويسند گان بفرستد', 'info_fichiers_authent' => 'فايل هاى تأئيدى« .htpasswd »', 'info_forums_abo_invites' => 'سايتتان داراى سخنگاه براى مشتركين ميباشد: از بازديد كنندگان دعوت ميشود كه در قسمت همگانى سايت ثبت نام كنند.', - 'info_gauche_admin_effacer' => 'اين صفحه فقط براى مسئولان سايت قابل دسترسى ميباشد.

    ورود به آن اجازه دسترسى به كاركرهاى گوناگون تعمير و نگهدارى فنى را ميدهد. از جمله روند باز شناسى و تأئيد ويژه اى كه لازمه اش داشتن حق ورود به تارنما است (FTP)', 'info_gauche_admin_tech' => 'اين صفحه فقط براى مسئولان سايت قابل دسترسى ميباشد.

    ورود به آن اجازه دسترسى به كاركردهاى گوناگون تعمير ونگهدارى فنى را ميدهد. از جمله روند باز شناسى و تأئيد ويژه اى كه لازمه اش داشتن حق ورود به تارنما است (FTP)', 'info_gauche_admin_vider' => 'اين صفحه فقط براى مسئولان سايت قابل دسترسى ميباشد.

    ورود به آن اجازه دسترسى به كاركرهاى گوناگون تعمير ونگهداى فنى را ميدهد. از جمله روند باز شناسى و تأئيد ويژه اى كه لازمه اش داشتن حق ورود به تارنما است (FTP)', 'info_gauche_auteurs' => 'شما نام تمام نگارند گان را در اينجا خواهيد يافت. نوع مسئوليتشان با رنگهاى ايكونها مشخص شده است (نگارنده=آيكون سبز، گردانند سايت=آيكون زرد )', - 'info_gauche_auteurs_exterieurs' => 'نويسندگان خارج سايت بدون حق ورود به سايت با رنگ آيكون آبى ، و حذف شده گان با علامت سطل مشخص شده اند', # MODIF + 'info_gauche_auteurs_exterieurs' => 'نويسندگان بازديدكننده، بدون دسترسي به سايت، با علامت آبي مشخص شده‌اند؛ نويسندگان حذف شده با علامت خاكتسري. ', 'info_gauche_messagerie' => 'پيام گير بشما اجازه رد و بدل پيام را با ديگر نويسند گان، نگهدارى يادداشتها (براى استفاده شخصى ) همچنين اعلان خبر در صفحه پذيرش را (در صورتى كه از گردانند گان سايت باشيد )ميدهد.', - 'info_gauche_numero_auteur' => 'نويسنده شماره', 'info_gauche_statistiques_referers' => 'اين صفحه, فهرست سايتهاى مرجع را ارائه ميدهد، بعبارتى سايتهايى كه داراى پيوند با سايت شما هستند، (فقط براى ديروز و امروز) : در واقع اين فهرست هر ٢٤ ساعت يكبار نو ميشود', 'info_gauche_visiteurs_enregistres' => 'شما, در اينجا, همه بازديد كنند گان ثبت شده در قسمت همگانى را خواهيد يافت (براى مشتركين).', 'info_generation_miniatures_images' => 'ساخت تصاوير كوچك شده', - 'info_gerer_trad' => 'آيا پيوندهاى ترجمه را اداره ميكنيد؟', 'info_gerer_trad_objets' => '@objets@ :مديريت پيوند‌هاي ترجمه', 'info_hebergeur_desactiver_envoi_email' => 'تعدادى از ميزبانان ارسال خودكار نامه ها را از سرورهايشان غير فعال ميكنند. در اين صورت، عملكردهاى بعدى اسپيپ كار نخوهند كرد. ', 'info_hier' => ': ديروز', - 'info_historique_activer' => 'ادامه بازبينى ها را فعال كنيد', - 'info_historique_affiche' => 'نمايش دادن اين نسخه', - 'info_historique_comparaison' => 'مقايسه', - 'info_historique_desactiver' => 'غير فعال كردن ادامه بازبينى ها', - 'info_historique_texte' => 'پى گيرى بازنگريها بشما امكان دسترسى به يك روزنگار را ميدهد كه هر گونه اصلاح در محتوى يك مقاله را همراه با تفاوتهاى مابين نسخه هاى ديگر نشان ميدهد.', 'info_identification_publique' => '...شناسنامه شما', 'info_image_process' => 'خواهشمند است بهترين شيوه ساخت تصاوير كوچك را با كليك كردن بروي تصوير مربوطه انتخاب نماييد.', 'info_image_process2' => '<N.B. درصورتيكه تصويرى ظاهر نشود, سرورى كه سايتتان را پذيراست براى چنين ابزارى پيكربندى نشده است. اگر مايل به استفاده از اين كاركردها هستيد با سرپرست فنى تماس بگيريد و تقاضاىGD يا «Imagick» را بكنيد.', 'info_images_auto' => 'تصاوير بطور خودكار محاسبه شده اند', 'info_informations_personnelles' => 'اطلاعات شخصى', + 'info_inscription' => 'ثبت شده در ', 'info_inscription_automatique' => 'ثبت نام خوكار نويسند گان جديد', 'info_jeu_caractere' => 'انتخاب نوع و شكل حروف سايت', 'info_jours' => 'روز', @@ -375,8 +325,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_logos' => 'لوگوها', 'info_maximum' => ': حداكثر', 'info_meme_rubrique' => 'در همان بخش', - 'info_message' => 'پيام', - 'info_message_efface' => 'پيام پاك شده', 'info_message_en_redaction' => 'پيام هايتان در حال نگارش', 'info_message_technique' => ':پيام فنى', 'info_messagerie_interne' => 'پيام گير داخلى', @@ -387,28 +335,22 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => ':اصلاح بخش ', 'info_modifier_titre' => '@titre@ : اصلاح ', 'info_mon_site_spip' => 'SPIP سايت من', - 'info_mot_sans_groupe' => '(...واژه بدون گروه)', - 'info_moteur_recherche' => 'موتور جستجوى گنجانده شده', 'info_moyenne' => ': متوسط', - 'info_multi_articles' => 'آيا ميخواهيد فهرست زبانها را در مورد مقالات فعال كنيد؟', 'info_multi_cet_article' => ' زبان اين مقاله :', 'info_multi_langues_choisies' => 'خواهشمند است كه زبانهاى موجود براى نويسند گان سايتتان را در زير انتخاب كنيد. زبانهاى از پيش استفاده شده نميتوانند غير فعال شوند.', 'info_multi_objets' => '@objets@ :فعال‌سازي منوي زبان', - 'info_multi_rubriques' => 'آيا ميخواهيد فهرست زبانها را در مورد بخش ها فعال كنيد؟', 'info_multi_secteurs' => '...تنها براى بخشهاى واقع در ريشه؟', 'info_nb_articles' => '@nb@ مقاله', - 'info_nb_articles_syndiques' => '@nb@ مقاله‌ به اشتراك‌گذاشته شده', 'info_nb_auteurs' => '@nb@ نويسنده', 'info_nb_messages' => '@nb@ پيام', 'info_nb_mots_cles' => '@nb@ كليدواژه', 'info_nb_rubriques' => '@nb@ بخش', - 'info_nb_sites' => '@nb@ سايت', 'info_nb_visiteurs' => '@nb@ بازديد‌كننده', 'info_nom' => 'نام', 'info_nom_destinataire' => 'نام گيرنده', + 'info_nom_pas_conforme' => 'تگ‌هاي اچ.تي.ام.ال مجاز نيستند', 'info_nom_site' => 'نام سايتتان', 'info_nombre_articles' => 'مقاله @nb_articles@ ', - 'info_nombre_partcipants' => ':شركت كنند گان در اين گفتگو', 'info_nombre_rubriques' => 'بخش @nb_rubriques@ ', 'info_nombre_sites' => 'سايت @nb_sites@', 'info_non_deplacer' => '...جابجا نكنيد', @@ -416,19 +358,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_envoi_liste_nouveautes' => 'فهرست تازه ها را نفرستيد', 'info_non_modifiable' => 'نميتواند اصلاح شود', 'info_non_suppression_mot_cle' => 'نميخواهم اين كليد-واژه را حذف كنم', - 'info_note_numero' => 'يادداشتِ @numero@', 'info_notes' => 'يادداشت ', - 'info_nouveaux_message' => 'پيام هاى جديد', 'info_nouvel_article' => 'مقاله جديد', 'info_nouvelle_traduction' => 'برگردان جديد', 'info_numero_article' => ': مقاله شماره', 'info_obligatoire_02' => '(اجباري)', 'info_option_accepter_visiteurs' => 'پذيرفتن ثبت نام بازديد كنندگان سايت همگانى', - 'info_option_faire_suivre' => 'پيام هاى سخنگاه را به نويسند گان مقالات ارسال كنيد', 'info_option_ne_pas_accepter_visiteurs' => 'رد ثبت نام بازديدكنندگان', 'info_options_avancees' => 'گزينش هاى پيشرفته', - 'info_ortho_activer' => 'تصحيح كننده ى املا را فعال كنيد', - 'info_ortho_desactiver' => 'تصحيح كننده ى املا را غير فعال كنيد', 'info_ou' => '...يا', 'info_page_interdite' => 'صفحه ممنوع', 'info_par_nom' => 'توسط نام', @@ -438,20 +375,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_passe_trop_court' => 'كلمه ورود خيلى كوتاه', 'info_passe_trop_court_car_pluriel' => 'گذرواژه‌ دست كم بايد @nb@ كاراكتر داشته باشد.', 'info_passes_identiques' => 'دو كلمه ورود با هم يكسان نيستند', - 'info_pense_bete_ancien' => 'يادداشت هاى پيشينتان', 'info_plus_cinq_car' => 'بيش از پنج حرف', 'info_plus_cinq_car_2' => '(بيش از پنج حرف)', 'info_plus_trois_car' => '(بيش از سه حرف)', 'info_popularite' => '@popularite@ : محبوبيت@visites@ : بازديد', - 'info_popularite_4' => '@popularite@ : محبوبيت@visites@ : بازديد', 'info_post_scriptum' => 'نوشتار پس از متن اصلى', 'info_post_scriptum_2' => ':نوشتار پس از متن اصلى', 'info_pour' => 'براى', - 'info_preview_admin' => 'تنها گردانندگان سايت ميتوانند مطالب سايت را بازبينى كنند', - 'info_preview_comite' => 'همه نويسندگان سايت ميتوانند مطالب سايت را بازبينى كنند', - 'info_preview_desactive' => 'كاركرد پيش آزما غير فعال است', - 'info_preview_texte' => 'اين امكان وجود دارد كه سايت را پيش از آماده شدن (پيش از پيشنهاد مقالات) بازبينى كرد مانند زمانيكه همه ى مقالات و اخبار منتشر شده اند.اين امكان ميتواند تنها براى گردانند گان سايت يا نويسندگان يا براى هيچكس نباشد.', - 'info_principaux_correspondants' => 'مكاتبين اصلى شما', + 'info_preview_texte' => 'اين امكان وجود دارد كه سايت را پيش از آماده شدن (پيش از پيشنهاد مقالات) بازبينى كرد مانند زمانيكه همه ى مقالات و اخبار منتشر شده اند.اين امكان ميتواند تنها براى گردانند گان سايت يا نويسندگان يا براى هيچكس نباشد.', # MODIF 'info_procedez_par_etape' => 'مرحله به مرحله اقدام كنيد', 'info_procedure_maj_version' => 'روند به روز كردن بايد به جريان بيفتد تا داده پى ها بتوانند با نسخه جديد منطبق شوند.', 'info_proxy_ok' => 'آزمایش پروکسی با موفقیت انجام شد.', @@ -460,14 +391,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_publies' => 'مقاله هاى منتشر شده تان روى تارنما', 'info_question_accepter_visiteurs' => 'اگر اسكلت سايتتان ثبت شمار بازديدكنندگان را بى آنكه اجازه ى ورود به قسمت خصوصى سايت را داشته باشند را داراست خواهشمند است گزينه ى زير را فعال كنيد:', 'info_question_inscription_nouveaux_redacteurs' => 'آيا ثبت نام نويسند گان جديد را از سايت همگانى قبول ميكنيد؟ اگر ميكنيد، كاربران ميتوانند با پر كردن يك پرسشنامه ثبت نام كنند و به محوطه خصوصى راه يابند. آنها ميتوانند مقالاتشان را مطرح كنند

    در هنگام ثبت نام كاربران يك ايميل دريافت خواهند كرد كه شامل كد ورودي شان به سايت خصوصى خواهد بود. تعدادى از ميزبانان، ارسال ايميل را از سرورها غير فعال كرده اند: دراينصورت ثبت نام خودكار غير ممكن خواهد بود..
    ', - 'info_question_utilisation_moteur_recherche' => 'آيا مايل هستيد كه از موتور جستجوى اسپيپ استفاده كنيد ؟ - (غير فعال كردن آن سرعت سيستم را افزايش ميدهد)', - 'info_question_vignettes_referer_non' => 'گيراندازي‌هاي سايت‌هاي مبداء بازديد‌كنندگان را نشان ندادن', 'info_qui_edite' => '@nom_auteur_modif@ روي اين مطلب @date_diff@ كار كرده است.', 'info_racine_site' => 'ريشه سايت', 'info_recharger_page' => 'خواهشمند است اين صفحه را تا چند لحظه بعد دوباره شارژ كنيد', - 'info_recherche_auteur_a_affiner' => 'پاسخهاى بيشمار براى "@cherche_auteur@" ;خواهشمند است پرسشتان را بهتر مطرح كنيد.', - 'info_recherche_auteur_ok' => '"@cherche_auteur@"چندين نويسنده براى پيدا شده', 'info_recherche_auteur_zero' => '"@cherche_auteur@" : جستجوى بدون نتيجه براى', 'info_recommencer' => '.خواهشمند است دوباره شروع كنيد', 'info_redacteur_1' => 'نويسنده', @@ -486,7 +412,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'بخش ها', 'info_rubriques_02' => 'بخش ها', 'info_rubriques_trouvees' => 'بخش هاى پيدا شده', - 'info_rubriques_trouvees_dans_texte' => 'بخش هاى پيدا شده (درون متن)', 'info_sans_titre' => 'بدون عنوان', 'info_selection_chemin_acces' => 'انتخاب كنيد راه ورودى را در راهنما', 'info_signatures' => 'امضاء', @@ -499,14 +424,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_sites_lies_mot' => 'سايتهاى پيوندى مربوط به اين واژه-كليد', 'info_sites_proxy' => 'از پروكسى استفاده كنيد', 'info_sites_trouves' => 'سايت هاى پيدا شده', - 'info_sites_trouves_dans_texte' => 'سايت هاى پيدا شده (درون متن)', 'info_sous_titre' => ':عنوان فرعى', 'info_statut_administrateur' => 'گرداننده سايت', 'info_statut_auteur' => 'وضعيت اين نويسنده:', 'info_statut_auteur_2' => 'من هستم', 'info_statut_auteur_a_confirmer' => 'ثبت نام تائید شود', 'info_statut_auteur_autre' => 'وضعیت دیگر:', - 'info_statut_efface' => 'پاك شده', 'info_statut_redacteur' => 'نويسنده', 'info_statut_utilisateurs_1' => 'وضعيت كاربران ورودى', 'info_statut_utilisateurs_2' => 'وضعيت اشخاص حاضر در راهنماى ال دى ا پى را كه براى اولين بار به سايت ميپيوندند مشخص كنيد. شما ميتوانيد پس از آن براى هر نويسنده آنرا مورد به مورد اصلاح كنيد', @@ -529,7 +452,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_presents' => 'تمام مقالات منتشر شده در اين بخش', 'info_tous_articles_refuses' => 'تمام مقالات رد شده', 'info_tous_les' => 'تمام :', - 'info_tous_redacteurs' => 'خبر براى تمام نويسندگان', 'info_tout_site' => 'همه سايت', 'info_tout_site2' => 'مقاله به اين زبان ترجمه نشده.', 'info_tout_site3' => 'مقاله به اين زبان ترجمه شده, سپس تغييراتى در مقاله ى اصلى صورت گرفته, بدين جهت بايد برگردان آنرا بروز كرد.', @@ -544,7 +466,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_une_rubrique_02' => '١ بخش', 'info_url' => ':URL', 'info_url_proxy' => 'پراكسي URL', - 'info_url_site' => 'URL سايت: ', + 'info_url_site_pas_conforme' => 'يو.آر.ال سايت معتبر نيست. ', 'info_url_test_proxy' => 'تست URL', 'info_urlref' => 'پيوند هايپرتکست:', 'info_utilisation_spip' => 'شما اكنون ميتوانيد از سيستم انتشار حضورى استفاده كنيد', @@ -555,7 +477,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_visiteurs_02' => 'بازديد كنندگان سايت همگانى', 'info_webmestre_forces' => 'وب مستر‌ها در حال حاضر در < tt>@file_options@ 'آدرس داده ها که توسط میزبان وب اعطا شده', - 'install_base_ok' => 'پايگاه @base@ شناخته شده است', 'install_connect_ok' => 'پايگاه داده‌هاي جديد اعلام كرده از سرور با نام @connect@استفاده مي‌كند. ', 'install_echec_annonce' => 'نصب احتمالا موفق آميز نخواهد بود يا به يك سايت غير كاربردى خاتمه ميابد...', 'install_extension_mbstring' => 'اسپيپ با اين كار نميكند :', @@ -584,8 +505,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_activer_messages_avertissement' => 'پيامهاى اخطار را فعال كنيد', 'item_administrateur_2' => 'گرداننده سايت', 'item_afficher_calendrier' => 'در بخش تقويم نمايش دهيد', - 'item_autoriser_documents_joints' => 'افزودن اسناد پيوسته را به مقالات مجاز كنيد', - 'item_autoriser_documents_joints_rubriques' => 'افزودن اسناد را به بخشها مجاز كنيد', 'item_autoriser_syndication_integrale' => 'پخش کامل مقاله ها در فایل های syndication', 'item_choix_administrateurs' => 'گردانندگان سايت', 'item_choix_generation_miniature' => '.تصاوير كوچك را بطور خودكار بسازيد', @@ -593,7 +512,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_choix_redacteurs' => 'نويسندگان', 'item_choix_visiteurs' => 'بازديد كنندگان سايت همگانى', 'item_creer_fichiers_authent' => '.htpasswd : از اين فايلها بسازيد', - 'item_limiter_recherche' => 'جستجو را به اطلاعات داخل سايت محدود كنيد', 'item_login' => 'Login', 'item_messagerie_agenda' => 'فعال سازي سامانه‌ي پيام‌دهي و تقويم', 'item_mots_cles_association_articles' => 'به مقالات', @@ -603,22 +521,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_non_accepter_inscriptions' => 'ثبت نامها را نپذيريد', 'item_non_activer_messages_avertissement' => 'بدون پيام اخطار', 'item_non_afficher_calendrier' => 'در تقويم نيايد', - 'item_non_autoriser_documents_joints' => 'اجازه استفاده از اسناد در مقالات را ندهيد', - 'item_non_autoriser_documents_joints_rubriques' => 'اجازه استفاده از اسناد در بخشها را ندهيد', 'item_non_autoriser_syndication_integrale' => 'تنها خلاصه ی آنرا منتشر کنید', - 'item_non_compresseur' => 'غيرفعال‌سازي فشرده‌سازي ', 'item_non_creer_fichiers_authent' => 'اين فايلها را درست نكنيد', - 'item_non_gerer_statistiques' => 'آمار را اداره نكنيد', - 'item_non_limiter_recherche' => 'جستجو را به محتوى سايتهاى مرجع گسترش دهيد', 'item_non_messagerie_agenda' => 'غيرفعال سازي سامانه‌ي پيام‌دهي و تقويم', 'item_non_publier_articles' => 'مقالات را پيش از تعيين تاريخ قطعى انتشار منتشر نكنيد', - 'item_non_utiliser_moteur_recherche' => 'از موتور استفاده نكنيد', 'item_nouvel_auteur' => 'نويسنده جديد', 'item_nouvelle_rubrique' => 'بخش جديد', 'item_oui' => 'آرى', 'item_publier_articles' => '.مقالات را عليرغم تاريخ نشرشان منتشر كنيد', 'item_reponse_article' => 'پاسخ به مقاله', - 'item_utiliser_moteur_recherche' => 'از موتور جستجو استفاده كنيد', 'item_version_html_max_html4' => 'در سايت همگاني فقط اچ.تي.ام.ال4 را استفاده كنيد', 'item_version_html_max_html5' => 'اجازه‌ي اج.تي.ام.ال5', 'item_visiteur' => 'بازديد كننده', @@ -633,15 +544,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'label_choix_langue' => 'زبان خود را انتخاب كنيد', 'label_nom_fichier_connect' => 'اعلام نام مورد استفاده براي اين سرور ', 'label_slogan_site' => 'شعار سايت', - 'label_taille_ecran' => 'پهناي پرده‌ي نمايش', + 'label_taille_ecran' => 'پهناي پرده‌ي نمايش', # MODIF 'label_texte_et_icones_navigation' => 'منوي ناوبري ', 'label_texte_et_icones_page' => 'صفحه‌ي نمايش ', 'ldap_correspondance' => 'ميدان موروثي @champ@', 'ldap_correspondance_1' => 'ميدان‌هاي موروثي LDAP', 'ldap_correspondance_2' => 'براي هر يك از ميدان‌هاي بعدي اسپيپ، نام متناسب با ميدان LDAP را وارد كنيد. اگر نمي‌خواهيد پر كنيد آن را خالي بگذاريد، براي پركردن چندين ميدان LDAP با كاما يا فاصله جداشان كنيد.', - 'lien_ajout_destinataire' => 'نام اين گيرنده را اضافه كنيد', 'lien_ajouter_auteur' => 'نام اين نويسنده را اضافه كنيد', - 'lien_ajouter_participant' => 'يك شركت كننده را اضافه كنيد', 'lien_ajouter_une_rubrique' => 'افزودن اين بخش', 'lien_email' => 'ايميل', 'lien_nom_site' => ':نام سايت', @@ -649,9 +558,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'lien_retirer_rubrique' => 'حذف كردن بخش', 'lien_retirer_tous_auteurs' => 'حذف تمام مؤلفان', 'lien_retirer_toutes_rubriques' => 'حذف تمام بخش‌ها', - 'lien_retrait_particpant' => 'خارج كردن اين شركت كننده', 'lien_site' => 'سايت', - 'lien_supprimer_rubrique' => 'اين بخش را حذف كنيد', 'lien_tout_deplier' => 'همه را باز كنيد', 'lien_tout_replier' => 'همه را ببنديد', 'lien_tout_supprimer' => 'همه را حذف کنید', @@ -676,13 +583,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mois_non_connu' => 'شناخته نشده', // N - 'nouvelle_version_spip' => 'اسپيپ نسخه‌ي @version@ در دسترس است ', + 'nouvelle_version_spip' => 'اسپيپ نسخه‌ي @version@ در دسترس است ', # MODIF // O 'onglet_contenu' => 'محتوا', 'onglet_declarer_une_autre_base' => 'اعلام يك پايگاه ديگر', 'onglet_discuter' => 'بحث', - 'onglet_documents' => 'سندها', 'onglet_interactivite' => 'تعامل', 'onglet_proprietes' => 'خصوصيات', 'onglet_repartition_actuelle' => 'در حال حاضر', @@ -718,14 +624,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'plugin_info_credit' => 'معتبر', 'plugin_info_erreur_xml' => 'اعلام پلاگين علط', 'plugin_info_install_ok' => 'نصب موفق', - 'plugin_info_necessite' => 'ضروري: ', # MODIF + 'plugin_info_necessite' => 'الزام‌ها:‌', 'plugin_info_non_compatible_spip' => 'اين پلاگن با اين نسخه‌ي اسپيپ نمي‌خواند', 'plugin_info_plugins_dist_1' => 'پلاگين‌هاي زير در پوشه‌ي @plugins_dist@ بارگذاري و فعال‌ شده‌اند. ', 'plugin_info_plugins_dist_2' => 'غيرفعال نمي‌شوند', 'plugin_info_telecharger' => 'باربرداري از @url@ و نصب در @rep@', + 'plugin_info_upgrade_ok' => ' روزآمدسازي موفق', 'plugin_librairies_installees' => 'آرشيو‌هاي نصب‌ شده', 'plugin_necessite_lib' => 'اين پلاگين به آرشيو @lib@ نياز دارد', - 'plugin_necessite_plugin' => 'به plugin @plugin@ نسخه ی @version@ نیاز دارید', + 'plugin_necessite_plugin' => 'به plugin @plugin@ نسخه ی @version@ نیاز دارید', # MODIF 'plugin_necessite_plugin_sans_version' => 'پلاگين @plugin@ لازم است ', 'plugin_necessite_spip' => 'به اسپیپ نسخه ی @version@ نیاز دارید.', 'plugin_source' => 'منبع: ', @@ -759,7 +666,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // Q 'queue_executer_maintenant' => 'اجرا حالا', - 'queue_info_purger' => 'مي‌‌توانيد تمام كارهاي در انتظار را حذف كنيد و فهرست را با كارهاي دوره‌اي بازتنظيم كنيد', # MODIF + 'queue_info_purger' => 'مي‌‌توانيد تمام كارهاي در دست انجام را حذف كنيد و فهرست كارهاي دوره‌اي را بازتنظيم (ريست) كنيد', # MODIF 'queue_nb_jobs_in_queue' => '@nb@ وظيفه در صف ', 'queue_next_job_in_nb_sec' => 'وظيفه‌ي بعدي در @nb@ امين', 'queue_no_job_in_queue' => 'وظيفه‌اي در دست اجرا نيست', @@ -769,10 +676,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // R 'repertoire_plugins' => 'رپرتوار:', + 'required' => '(اجباري)', // S 'sans_heure' => 'زمان نامشخص', - 'statut_admin_restreint' => '(اداره محدود)', # MODIF + 'statut_admin_restreint' => 'ادمين محدود', + 'statut_webmestre' => 'وب مستر ', // T 'tache_cron_asap' => 'وظيفه‌ي CRON @function@ (ASAP)', # MODIF @@ -795,16 +704,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_article_virtuel_reference' => ' مقاله مجازى : مقاله پيوندى شما در سايت اسپيپ است، اما شما ميتوانيد آنرا به آدرس ديگرى هدايت كنيد.براى اينكار بايد آدرس زيرى را حذف كنيد (URL)', 'texte_aucun_resultat_auteur' => 'جستجوى بى نتيجه براى"@cherche_auteur@"', 'texte_auteur_messagerie' => ' اين سايت ميتواند ليست نويسندگان متصل به سايت را بطور دائم نشان دهد اين بشما امكان رد و بدل كردن پيام را بطور مستقيم ميدهد. شما همچنين ميتوانيد گزينش «نامرئي» را انتخاب كنيد', - 'texte_auteur_messagerie_1' => 'اين سايت امكان تبادل پيام و تشكيل سخنگاه خصوصى را بين كاربران سايت ميدهد. شما ميتوانيد در اين مباحثات شركت نكنيد.', 'texte_auteurs' => 'نويسندگان', 'texte_choix_base_1' => 'پايگاه تان را انتخاب كنيد :', 'texte_choix_base_2' => 'سرور اس كيوال حاوى چند داده پى است.', 'texte_choix_base_3' => 'پايگاهى را كه توسط ميزبانتان بشما داده شده انتخاب كنيد:', 'texte_choix_table_prefix' => 'پیشوند جدولها:', - 'texte_commande_vider_tables_indexation' => 'از اين فرمان براى خالى كردن صفحات فهرست گذارى شده براى موتور جستجو استفاده نماييد كه بشما همچنين امكان سبك كردن ديسك سختتان را ميدهد', 'texte_compatibilite_html' => 'مي‌توانيد از اسپيپ بخواهيد تا، روي سايت همگاني، كد سازگار با نرم HTML4 ايجاد كند، يا به اسپيپ اجازه دهيد تا از از امكانات مدرن‌تر HTML5 استفاده كند. ', 'texte_compatibilite_html_attention' => 'در فعال‌سازي گزينه‌ي HTML5 هيچ خطري وجود ندارد، اما در آن صورت، صفحه‌هاي سايت شما بايد با كد: <!DOCTYPE html> شروع شوند تا معتبر باشند. ', - 'texte_compresse_ou_non' => '(از اين ميتوان بصورت فشرده يا غير فشرده استفاده كرد)', 'texte_compte_element' => 'عنصر @count@ ', 'texte_compte_elements' => ' @count@ عنصر', 'texte_conflit_edition_correction' => 'لطفاً تفاوت‌هاي دو متن زير را چك كنيد؛ نيز مي‌توانيد اصلاحات خود را روبرداري كرده و سپس از نو شروع كنيد.', @@ -819,10 +725,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_date_publication_anterieure_nonaffichee' => 'تاريخ نگارش قبلى را اعلان نكنيد.', 'texte_date_publication_article' => 'تاريخ انتشار بروى تارنما:', 'texte_date_publication_objet' => 'تاريخ نشر وصل‌خط:', - 'texte_descriptif_petition' => 'توصيف سخنگاه', 'texte_descriptif_rapide' => 'توصيف سريع', 'texte_effacer_base' => 'داده پى هاى اسپيپ را پاك كنيد', - 'texte_effacer_donnees_indexation' => 'داده هاى فهرست گذارى را پاك كنيد', 'texte_effacer_statistiques' => 'حذف آمارها', 'texte_en_cours_validation' => 'مطالب زير در انتظار تأييد هستند. ', 'texte_enrichir_mise_a_jour' => 'شما ميتوانيد صفحه بندى متن تان را با بعضى از علائم آراسته كنيد (مانند كروشه، آكولاد،...)', @@ -831,28 +735,21 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( اين فايل‌ها مي‌توانند بشما در محدود كردن دسترسى نويسندگان وگردانندگان سايت در جاهاى ديگر( براى مثال برنامه خارجى آمار) كمك كنند).

    اگر به اين گزينه نياز نيست، اسپيپ خودبخود آنرا اداره ميكند (بدون ساخت فايل‌ها)

    .', # MODIF 'texte_informations_personnelles_1' => 'اكنون سيستم براى شما دسترسى انحصارى به سايت را درست ميكند.', - 'texte_informations_personnelles_2' => 'تذكر : اگر موضوع مربوط به نصب دوباره ميباشد، وشما هنوز دسترسى به سايت داريد، ميتوانيد', # MODIF + 'texte_informations_personnelles_2' => 'تذكر : اگر نصب دوباره است، اگر دسترسى شما به سايت برقرار است، مي‌توانيد', 'texte_introductif_article' => '(متن مقدمه اى مقاله.)', 'texte_jeu_caractere' => 'بشما توصیه میشود برای سایتتان از الفبای جهانی (utf-8 استفاده کنید زیرا امکان خواندن متنها در تمامی زبانها را میدهد و مشکلی هم برای مرورگرهای جدید پدید نمیآورد. ', - 'texte_jeu_caractere_2' => 'توجه : این تنظیم موجب وارانگی متنهایی که از پیش در داده پی ها ضبط شده اند را نمیشود.', 'texte_jeu_caractere_3' => 'سایت شما اکنون نویسه ها را مستقر کرد.', 'texte_jeu_caractere_4' => 'اگر این نویسه ها با سایت شما مطابق نیست (برای مثال پس از بازسازی داده پی ها) یا اینکه شما مایل به بکارگیری نویسه های دیگری هستید آنرا در اینجا مشخص کنید:', - 'texte_jeu_caractere_conversion' => 'شما میتواند یکبار برای همیشه از الفبای utf-8 برای تمامی سایتتان استفاده کنید برای این منظور شما باید به این پیوند که معرف تبدیل به یونی کدutf-8 است بروید.', - 'texte_lien_hypertexte' => 'اگر پيامتان به يك مقاله در تارنما مربوط ميشود، يا به يك صفحه با اطلاعات بيشتر، خواهشمند است كه عنوان صفحه و آدرس آنرا در زير مشخص كنيد.', 'texte_login_ldap_1' => '(براى ورود بى نام، خالى بگذاريد، يا تمام مسير را درج كنيد، براى مثال« uid=dupont, ou=users, dc=mon-domaine, dc=com ».)', 'texte_login_precaution' => 'توجه ! شما با اين كد متصل شديد. از اين پرسشنامه با احتياط استفاده كنيد.', - 'texte_message_edit' => 'توجه ! اين پيام ميتواند توسط همه گردانندگان سايت اصلاح شود، و براى همه نويسندگان قابل رويت است. از اعلانات فقط براى عرضه وقايع مهم سايت استفاده كنيد.', 'texte_messagerie_agenda' => 'يك سامانه‌ي پيام‌دهي به نويسندگان سايت امكان مي‌دهد تا در قسمت شخصي به صورت مستقيم با يكديگر ارتباط برقرار كنند. اين سامانه به تقويم نيز لينك مي‌شود. ', 'texte_mise_a_niveau_base_1' => 'شما فايلهاى اسپيپ را نو كرديد. اكنون بايد داده پى هاى سايت را ميزان كنيد. ', 'texte_modifier_article' => 'مقاله را اصلاح كنيد :', - 'texte_moteur_recherche_active' => 'موتور جستجو فعال شده.اين فرمان را هنگام مبادرت به فهرست گذارى سريع استفاده كنيد (براى مثال پس از باسازى ذخيره). توجه داشته باشيد كه اسناد اصلاح شده بطريقه عادى بطور خودكار فهرست گذارى ميشوند : اين فرمان براى موارد استثنايى ميباشد.', - 'texte_moteur_recherche_non_active' => 'موتور جستجو فعال نميباشد. ', - 'texte_multilinguisme' => 'اگر شما مايل به اداره مقالات به چند زبان باشيد، ميتوانيد يك فهرست از زبانهاى انتخابى را در مورد مقالات و بخشها ، در رابطه با تركيب سايتتان اضافه كنيد.', # MODIF - 'texte_multilinguisme_trad' => 'شما همچنين ميتوانيد سيستم اداره پيوندهاى بين برگردان هاى گوناگون از يك مقاله را فعال كنيد.', # MODIF + 'texte_multilinguisme' => 'اگر مايل به اداره موضوع‌ها به چند زبان هستيد، با ناوبري پيچيده، ميتوانيد، بر اساس سازماندهي سايت خود، يك منوي بخش زبان براي اين موضوع‌ها اضافه كنيد.', + 'texte_multilinguisme_trad' => 'شما همچنين ميتوانيد يك سيستم اداره پيوندهاى بين ترجمه‌هاي گوناگون اين موضوع‌ها را فعال كنيد.', 'texte_non_compresse' => 'فشرده نشده (سرور شما اين عملكرد را قبول نميكند)', - 'texte_nouveau_message' => 'پيام جديد', 'texte_nouvelle_version_spip_1' => 'شما نسخه جديد اسپيپ را نصب كرده ايد.', 'texte_nouvelle_version_spip_2' => 'اين نسخه جديد نياز به روزآمدسازي كامل تر دارد. اگر شما وب مستر سايت هستيد لطفا فايل @connect@ را پاك كنيد و دوباره نصب اسپيپ را از سر بگيريد تا پارامترهاى اتصال داده پى ها نو شوند.

    (اگر شما پارامترهاى اتصال را فراموش كرده‌ايد، ميتوانيد به فايل زير مراجعه كنيد @connect@ (پيش از اينكه آنرا حذف كنيد...)

    ', 'texte_operation_echec' => 'به صفحه پيشين برگرديد، يك پايگاه انتخاب كنيد يا اينكه جديدش را بسازيد.اطلاعات داده شده توسط ميزبانتان را در مدنظر داشته باشيد.', @@ -866,7 +763,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_publication_articles_post_dates' => 'اسپيپ بايد چه واكنشى را در مورد مقالاتى كه موعد تاريخ انتشارشان در آينده منقضى ميشود بپذيرد؟', 'texte_rappel_selection_champs' => '[اين موارد را درست انتخاب كنيد.]', 'texte_recalcul_page' => 'اگر ميخواهيد تنها يك صفحه را نو كنيد، بهتر است كه به قسمت همگانى رويد و بروى دكمه «تازه كنيد» كليك كنيد.', - 'texte_recapitiule_liste_documents' => 'اين صفحه فهرست اسنادى را كه شما در بخشها گذاشته ايد را بطور خلاصه نشان ميدهد براى اصلاح هر سند، پيوند صفحه را با بخش دنبال كنيد.', 'texte_recuperer_base' => 'داده پى ها را ترميم كنيد', 'texte_reference_mais_redirige' => 'مقاله پيوندى در سايت اسپيپ، كه به آدرس ديگرى هدايت شده.', 'texte_requetes_echouent' => 'هنگاميكه بعضى از جويش‌هاي اس كيو ال بدون هيچ دليلى به صورت سيستماتيك پذيرفته نميشوند، اين احتمال وجود دارد كه از پايگاه داده‌‌ها باشد.

    @@ -882,7 +778,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( اين بشما امكان نو كردن تمام صفحات را ميدهد بويژه اگر شما تغييرات مهمى در نما يا در ساختار سايت داده باشيد.', 'texte_sur_titre' => 'سر عنوان', 'texte_table_ok' => 'اين جدول درست است :', - 'texte_tables_indexation_vides' => 'جداول فهرست گذاى موتور جستجو خالى ميباشند', 'texte_tentative_recuperation' => 'كوشش براى تعمير', 'texte_tenter_reparation' => 'اقدام به ترميم داده پى ها كنيد', 'texte_test_proxy' => 'براى امتحان اين پروكسى، آدرس سايت تارنماى مورد دلخواهتان را در اينجا درج كنيد.', @@ -892,20 +787,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_travail_collaboratif' => 'اين امكان وجود دارد كه يك مقاله توسط چند نويسنده نوشته شده باشد. اسپيپ ميتواند مقالات تازه وارد شده را نشان دهد تا از تغييرات همزمان جلوگيرى كند. اين گزينش معمولا غير فعال ميباشد تا از اعلان خبرهاى بيموقع جلوگيرى كند. ', - 'texte_trop_resultats_auteurs' => 'ازدياد نتايج براى :"@cherche_auteur@" خواهشمند است جستجو را دقيقتر كنيد.', - 'texte_unpack' => 'استقرار آخرين نسخه', - 'texte_utilisation_moteur_syndiques' => 'هنگاميكه از موتور جستجوى اسپيپ استفاده مي‌كنيد، مي‌توانيد به دو صورت مقالات و سايت‌هاي اشتراكي را جستجو كنيد.
    ساده ترين راه، جستجو در عناوين و توصيفات مقالات است.
    - -راه دوم كه بسيار قوى تر است، به اسپيپ امكان مي‌دهد كه درون متون سايت‌هاى اشتراكي را هم جستجو كند.اگر شما سايتى را اشتراكي كنيد، اسپيپ جستجو را تا متن سايت دنبال مي‌كند.', - 'texte_utilisation_moteur_syndiques_2' => 'اين شيوه اسپيپ را مجبور به بازديد منظم سايتهاى مرجع ميكند -كه باعث كندى سرعت در سايتتان خواهد شد.', 'texte_vide' => 'خالى', 'texte_vider_cache' => 'فايل هاى موقت را خالى كنيد', - 'titre_admin_effacer' => 'نگهدارى و تعميرات فنى', 'titre_admin_tech' => 'نگهدارى و تعميرات فنى', 'titre_admin_vider' => 'نگهدارى و تعميرات فنى', 'titre_ajouter_un_auteur' => 'افزودن يك مؤلف', 'titre_ajouter_un_mot' => 'افزودن يك كليد-واژه', - 'titre_ajouter_une_rubrique' => 'افزودن يك بخش', 'titre_cadre_afficher_article' => 'مقالات را نمايش دهيد', 'titre_cadre_afficher_traductions' => ' وضعيت برگردانها را براى زبانهاي زير نشان دهيد :', 'titre_cadre_ajouter_auteur' => 'يك نويسنده اضافه كنيد :', @@ -932,54 +819,27 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_naviguer_dans_le_site' => 'در سايت گردش كنيد', 'titre_nouvelle_rubrique' => 'بخش جديد', 'titre_numero_rubrique' => 'بخش شماره :', - 'titre_page_admin_effacer' => 'نگهدارى و تعمير سايت : پايگاه را پاك كنيد', 'titre_page_articles_edit' => 'اصلاح كنيد :@titre@', 'titre_page_articles_page' => 'مقالات', 'titre_page_articles_tous' => 'تمام سايت', - 'titre_page_auteurs' => 'بازديد كنندگان', 'titre_page_calendrier' => 'سالنما @nom_mois@ @annee@', 'titre_page_config_contenu' => 'پيكربندى سايت', - 'titre_page_config_fonctions' => 'پيكربندى سايت', - 'titre_page_configuration' => 'پيكربندى سايت', - 'titre_page_controle_petition' => 'دنباله درخواست', 'titre_page_delete_all' => 'حذف كامل و غير قابل برگشت', - 'titre_page_documents_liste' => 'اسناد بخشها', - 'titre_page_index' => 'محوطه شخصي تان', - 'titre_page_message_edit' => 'يك پيام بنويسيد', - 'titre_page_messagerie' => 'پيام گيرتان', 'titre_page_recherche' => 'نتايج جستجوى@recherche@', 'titre_page_statistiques_referers' => 'آمار (پيوندهاى وارد شده)', - 'titre_page_statistiques_signatures_jour' => 'تعداد امضاء‌كنندگان يك روز', - 'titre_page_statistiques_signatures_mois' => 'تعداد امضاء كنندگان در يك ماه', 'titre_page_upgrade' => 'همسان كردن اسپيپ', 'titre_publication_articles_post_dates' => 'انتشار مقالات با تاريخ آينده', - 'titre_referencer_site' => 'سايت را ارجاع دهيد : ', - 'titre_rendez_vous' => 'ملاقات :', 'titre_reparation' => 'تعمير', 'titre_suivi_petition' => 'دنباله درخواستها', 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'مقاله اى با اين شماره يافت نميشود.', 'trad_article_traduction' => 'تمام ترجمه هاى اين مقاله :', - 'trad_deja_traduit' => 'اشتباه : ربط دادن اين مقاله به اين شماره غيرممكن است.', 'trad_delier' => 'پيوند به اين ترجمه‌هاي متوقف شود', 'trad_lier' => 'اين مقاله برگردان مقاله شماره زير ميباشد :', 'trad_new' => 'ترجمه‌ي جديد', // U - 'upload_info_mode_document' => 'اين تصوير را در پرونده‌ي هنري بگذار', - 'upload_info_mode_image' => 'اين تصوير را از پرونده‌ي هنري حذف كن', - 'utf8_convert_attendez' => 'چند لحظه صبر کنید سپس این صفحه را تازه کنید.', - 'utf8_convert_avertissement' => 'شما آماده ی تبدیل محتوی سایت از نویسه های @orig@ به نویسه های @charset@ هستید.', - 'utf8_convert_backup' => 'پیش از هر چیز فراموش نکنید که داده هایتان را ضبط کنید. شما باید همچنین ببینید که اسکلتها و فایلهای زبانتان با @charset@ همخوانی دارد.', - 'utf8_convert_erreur_deja' => 'سایت شما با @charset@ میباشد تبدیل لازم نیست.', 'utf8_convert_erreur_orig' => 'اشتباه: نویسه های @charset@ پذیرفته نمیشود.', - 'utf8_convert_termine' => 'پایان یافت!', - 'utf8_convert_timeout' => 'مهم: درصورت timeout سرورها لطفأ صفحه را تا نمایان شدن «پایان» نو کنید.', - 'utf8_convert_verifier' => 'شما اکنون باید فایل cache را خالی کنید پیشتر مطمئن شوید که در صفحات سایت مشکلی دیده نمیشود. در صورت اشکال ذخیره ی داده هایتان را به صورت (format SQL) در رپرتوار @rep@ مییابید.', - 'utf8_convertir_votre_site' => 'تبدیل سایتتان به utf-8', // V 'version' => 'نسخه:' ); - -?> diff --git a/www/ecrire/lang/ecrire_fon.php b/www/ecrire/lang/ecrire_fon.php index 24bec85e..2fb815bc 100644 --- a/www/ecrire/lang/ecrire_fon.php +++ b/www/ecrire/lang/ecrire_fon.php @@ -1,9 +1,11 @@ 'Mi bo lɛ kɔ yi wekpa gudo tɔ̂n ji bo kpɔn ɖɔ xogbè mi tɔn mi sɛdo lɛ ', 'avis_connexion_ldap_echec_3' => 'Mi ma zan LDAP bo do ylɔ zizantɔ lɛ do zɛnzɛn o', 'avis_deplacement_rubrique' => 'vlɛ! @contient_breves@ brève@scb@ ɖé lɛ̂ do akpa é lɔ mɛ : n sɛ sinɔ, mi tɛnkpɔn bo sɔ xlɛ tɔn do fi.', - 'avis_destinataire_obligatoire' => 'Mi ɖo na wlan mɛ gɔn wɛn na yi ɔ co na sɛ wɛn do', 'avis_erreur_connexion_mysql' => 'afɔkiklɛn do cacado mysql tɔn mɛ ', - 'avis_erreur_version_archive' => 'vlɛ ! xota @archive@ é jɛ do alɔ supipu tɔn dévo ji.Mi jan na kpé afɔ nyanya ɖé lɛ, gblogbloji ɔ sin walɔ nyanya, mi mà na gbe sisɛ do é lɔ o. Nu mi na sè xo gɔ na', # MODIF - 'avis_espace_interdit' => 'acɛku Yé ko ze supipu do fi nɛ', + 'avis_espace_interdit' => 'acɛku Yé ko ze supipu do fi nɛ', # MODIF 'avis_lecture_noms_bases_1' => 'nyikɔ kpodo gbɛtakɛnxokplé lɛ̂ ye do Titomɛ ɔ mɛ a ', 'avis_lecture_noms_bases_2' => 'Kabi gbɛtakɛnxokplé ɖé a , kabi nuwé nɔ zɔn bɔ mi nɔ to gbɛtakɛnxokplé lɛ sin acɛ ku.sɔ ɖo ayi ni ja wu ɔ ( mɔ wɛ e ɖé lo xwétɔ gege gɔn)', 'avis_lecture_noms_bases_3' => 'ɖo sisɔ akpa dévo tɔn mɛ ɔ, Yé siwu zan gbɛtakɛnxokplé ɖé sɔ nyikɔ mi tɔn ', - 'avis_non_acces_message' => 'Mi siwu xa wɛn é lɔ a ', 'avis_non_acces_page' => 'Mi siwu yi wekpa é lɔ ji à ', 'avis_operation_echec' => 'azɔ̂ gbé', - 'avis_probleme_archive' => 'xota xixā glo @archive@', 'avis_suppression_base' => 'vlɛ ! nu mi sunsun gbètakɛn lɛ̂ ɔ é vɔ bi sésé', - 'avis_version_mysql' => 'Mysql mitɔn ɖévo ( @ ɖévo_mysql@) siwu blo akɔnta gbètakɛn lɛ̂ tɔn a ', // B 'bouton_acces_ldap' => 'Mi zé gɔna LDAP', 'bouton_ajouter' => 'Mi gɔna ', - 'bouton_ajouter_participant' => 'Mi zé mɛɖokpo gɔna', - 'bouton_annonce' => 'Xo ɖɔdotoji', - 'bouton_checkbox_envoi_message' => 'mi hɛn ɔ mi na sɛ wɛn ɖokpo ɖo', - 'bouton_checkbox_indiquer_site' => 'mi ɖo na xlɛgblogbloji ɖokpo', - 'bouton_checkbox_signature_unique_email' => 'e-mail ɖokpo, alɔɖowémàmɛ ɖokpo', - 'bouton_checkbox_signature_unique_site' => 'gblogbloji ɖokpo, alɔɖowémàmɛ ɖokpo', 'bouton_demande_publication' => 'Mi kàn ɖiɖétɔn wékpa é lɔ tɔn byɔ', - 'bouton_effacer_index' => 'Mi sùnsun indexu ɔ ', 'bouton_effacer_tout' => 'Mi sùnsun bi', - 'bouton_envoi_message_02' => 'sɛ wɛn ɖo', 'bouton_envoyer_message' => 'wɛn gudogudotɔn : sɛdo', 'bouton_modifier' => 'ɖyɔ', - 'bouton_pense_bete' => 'Lin tamɛ ɖo zizan whɛ dé su tɔn wu ', - 'bouton_radio_activer_messagerie' => 'Mi ta wɛnwiwlan ', - 'bouton_radio_activer_messagerie_interne' => 'Mi ta wɛnwiwlan ', - 'bouton_radio_activer_petition' => 'mi sɔ kɛn ', 'bouton_radio_afficher' => 'mi xlɛ', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'ɖo xlɛ ɖo ɖiɖè nyɔwlantɔ̂é ɖo kan ji lɛ', - 'bouton_radio_desactiver_messagerie' => 'Mi jo wiwlanmɛ ɖo', 'bouton_radio_envoi_annonces_adresse' => 'Mi sɛ xojla do', 'bouton_radio_envoi_liste_nouveautes' => 'mi kplé xogbè yɔyɔ lɛ̂ do ', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'mi ma ɖo xlɛ ɖo ɖiɖè nyɔwlantɔ tɔn mɛ o ', 'bouton_radio_non_envoi_annonces_editoriales' => 'mi ma sɛ gbètàxojla do', - 'bouton_radio_pas_petition' => 'Tajijla ɖé dé a ', - 'bouton_radio_petition_activee' => 'Tajijla ɖé ', - 'bouton_radio_supprimer_petition' => 'mi sunsùn Tajijla ', 'bouton_redirection' => 'mi lɛ vɔ jlɛ', 'bouton_relancer_installation' => 'Mi lɛ vɔ afɔɖotè ɔ blo', 'bouton_suivant' => 'E jɛ gudo ɔ', 'bouton_tenter_recuperation' => 'mi nà tɛnkpɔn bo bloɖo', 'bouton_test_proxy' => 'mi tɛn proxy kpɔn ', 'bouton_vider_cache' => 'bɛ simɛ', - 'bouton_voir_message' => 'mi xa wɛn é lɔ co bo sɔ kɛn na', // C - 'cache_mode_compresse' => 'Wli gbètā jando gudo lɛ̂ hɛn', - 'cache_mode_non_compresse' => 'Wli gbètā jando gudo lɛ̂ hɛn', 'cache_modifiable_webmestre' => 'mɛ lò mɔɔjí ɔ hɛn ɔ é ná vɔ ɖiɖèmɛ bló', 'calendrier_synchro' => 'Nú jó ná zán gbèta, mi siwú xò bí kplé ', @@ -100,7 +78,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'nyìkɔ mī tɔn ', 'entree_login_connexion_1' => 'nyìkɔ mī tɔn ', 'entree_login_connexion_2' => 'nyìkɔ mī tɔn ', - 'entree_login_ldap' => 'nyìkɔ mī tɔn LDAP tɔn ', 'entree_mot_passe' => 'cávì mī tɔn ', 'entree_mot_passe_1' => 'cávì mī tɔn ', 'entree_mot_passe_2' => 'cávì mī tɔn ', @@ -120,7 +97,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'Nú mi lɛ lò xógbè xwítíxwítí bà wɛ ɔ mi síkú yí sùpípú sín xóxòkplémɛ.', # MODIF 'ical_info_calendrier' => 'Yè sɛ kàlànɖlyé wè ɖó mí. ɖòkpó nyí gblogblojí ɔ sín tìtòmɛ tɔn bó nɔ xlɛ wě ɖé yè wlàn lɛ bí. Wègɔ ɔ é nyí xógbèɖòtàjì kpó wɛn mì tɔn vívɛná lɛ kpó jí : mi ɖó càvì mi tɔn, bɔ mi lɛ hɛn ɔ mi ná lɛ nɔ ɖyɔ ɛ kpódó gbètákɛn. .', 'ical_methode_http' => 'ɖìɖɔn ', - 'ical_methode_webcal' => 'mìmá', + 'ical_methode_webcal' => 'mìmá', # MODIF 'ical_texte_js' => 'ɖìdèmɛ javasùclipù tɔn ná síwú nɔ mi ná xlɛ wěkpá gùdógùdó tɔn lɛ ɖò gblogblojí ɖébújí..', 'ical_texte_prive' => 'kàlànɖlyé é lɔ é nyí miɖɛsú tɔn ɔn, nɔ ná xógbè ɖó xógbèɖòtàjìzɔ gblogblojí ɔ tɔ wú', 'ical_texte_public' => 'kàlànɖlyé ná ná bɔ nùkún mi tɔn ná nɔ gblogblojí ɔ sín àzɔnùkùnɖéjí ɔ jí.', @@ -136,9 +113,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_creer_auteur' => 'Mi ɖè gbètakɛn yɔyɔ dévó tɔn ', 'icone_creer_mot_cle' => 'Mi zé nyɔwlántɔ yɔyɔ dévó tɔn bó cáɖó wěkpá', 'icone_creer_rubrique_2' => 'Mi ɖè àkpáxwé dévó tɔn', - 'icone_envoyer_message' => 'sɛ whɛn ɖó', 'icone_modifier_article' => 'mi vɔ ɖyɔ wékpá', - 'icone_modifier_message' => 'mi vɔ ɖyɔ wɛn ɔ ', 'icone_modifier_rubrique' => 'mi vɔ ɖyɔ àkpáxwé ɔ', 'icone_retour' => 'lɛkɔ', 'icone_retour_article' => 'lɛkɔ yì wěkpá ɔ jí', @@ -148,10 +123,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'sɔ kɛn nú àlɔɖówěmámɛ é lɔ', 'image_administrer_rubrique' => 'Mi síw tò àkpáxwé é lɔ', 'info_1_article' => 'wěkpá ɖòkpó', - 'info_1_site' => 'gblogblojí ɖòkpó', 'info_activer_cookie' => 'Mi sí wlán xógbè é sɔgbèbɔ mi ná dó jɛ àgun dévómɛ.', - 'info_admin_gere_rubriques' => 'tìtòt é lɔ nɔ bló àkpáxwé é lɔ lɛ ɖó:', - 'info_admin_gere_toutes_rubriques' => 'tìtòt é lɔ nɔ bló àkpáxwé é lɔ lɛ ɖó', # MODIF 'info_administrateur' => ' tìtòtɔ ', 'info_administrateur_1' => 'tìtòtɔ', 'info_administrateur_2' => 'gblogblojí yè z kpó yɛyì', @@ -161,13 +133,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'mi hɛn ɔ mi ná to àkpáxwé é lɔ ', 'info_adresse' => 'nɔtɛn', 'info_adresse_url' => 'nɔtɛn gblogblojí ɔ tɔn ', - 'info_afficher_visites' => 'mi xlɛ jònɔbíbà ɛ:', 'info_aide_en_ligne' => 'àlɔdó sùpípù tɔn', 'info_ajout_image' => 'àlɔdó sùpípù tɔn.', - 'info_ajout_participant' => 'mɛ dókpó lɛ gɔná:', 'info_ajouter_rubrique' => 'mi gɔ xókwín dókpó ná:', 'info_annonce_nouveautes' => 'xójíjlá yɔyɔ lɛ', - 'info_anterieur' => 'ɖàyí xóxó', 'info_article' => 'wěkpá', 'info_article_2' => 'wěkpá', 'info_article_a_paraitre' => 'wěkpá yé ɖó àzán ná', @@ -175,10 +144,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_2' => 'wěmâ', 'info_articles_auteur' => 'nyɔwlántɔ é lɔ sín wěmà', 'info_articles_trouves' => 'wěmà yè mɔ é', - 'info_articles_trouves_dans_texte' => 'wěmà yè mɔ é', 'info_attente_validation' => 'mi ɖòtè bò ná sɔ kɛn nú wěmà lɛ ', 'info_aujourdhui' => 'égbé:', - 'info_auteur_message' => 'Wɛn sɛɖótɔ :', 'info_auteurs' => 'Nyɔwlántɔ lɛ̂', 'info_auteurs_par_tri' => 'Nyɔwlántɔ (lɛ̂)', 'info_auteurs_trouves' => 'Nyɔwlántɔ lɛ̂ ɖê mi mɔ ɔ', @@ -210,15 +177,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'àzán gùdó tɔn :', 'info_date_referencement' => 'àzán gùdó tɔn :', 'info_derniere_etape' => 'Nɔtɛn gùdó tɔn ɔ!', - 'info_derniers_articles_publies' => 'wékpá gùdó tɔn ɔ', - 'info_desactiver_messagerie_personnelle' => 'mi hɛn mi ná sú kàbí mi ná hùn wlántɛn gblogblojí é lɔ tɔn.', 'info_descriptif' => 'ɖìɖèmɛ :', 'info_discussion_cours' => 'xó kpó ɖò yìyì wɛ', 'info_ecrire_article' => 'có hwɛ mi nɛ nú wlán jí ɔ, mi ɖó ná ɖè àkpáxwé tɔn hwɛ', 'info_email_envoi' => 'e-mailù', 'info_email_envoi_txt' => 'mi dó gesi bó ná sɛ e-mailù lɛ ɖó:', 'info_email_webmestre' => 'tìtòtì sín e-mailù', # MODIF - 'info_entrer_code_alphabet' => 'mi sɔ gbètákɛn ê mi ján zán ɔ:', 'info_envoi_email_automatique' => 'sɛ e-mailù ɖó àzɔn ɖókpó', 'info_envoyer_maintenant' => 'sɛɖó ɖìn', 'info_etape_suivante' => 'mi yí tɛnɔtɛ é bɔɖéwú ɔ jí', @@ -228,24 +192,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_facilite_suivi_activite' => 'bíbɛ xóxókplé sɔ yì', 'info_fichiers_authent' => 'xó xókplé ', 'info_forums_abo_invites' => 'jōnɔ lɛ ní ná nyíkɔ.', - 'info_gauche_admin_effacer' => ' wémà é lɔ Tìtòtɔ lɛ kɛɖɛ wɛ síwú dàlɔmɛ.', # MODIF 'info_gauche_admin_tech' => 'wémà é lɔ Tìtòtɔ lɛ kɛɖɛ wɛ síwú dàlɔmɛ', # MODIF 'info_gauche_admin_vider' => 'wémà é lɔ Tìtòtɔ lɛ kɛɖɛ wɛ síwú dàlɔmɛ', # MODIF 'info_gauche_auteurs' => 'Dò fyɔ, mí ná mɔ Tìtòtɔ gblogblojí ɔ tɔn lɛ .', 'info_gauche_auteurs_exterieurs' => 'Dò fyɔ, mí ná mɔ Tìtòtɔ gblogblojí ɔ tɔn lɛ .', # MODIF 'info_gauche_messagerie' => 'Winwlántɛnmɛ nɔ ná bɔ nyɔwlántɔ síwú nɔ ɖɔxó ɖó kpɔ.', - 'info_gauche_numero_auteur' => 'nyɔwlántɔ nùmɛló', 'info_gauche_statistiques_referers' => 'wémà é lɔ Tìtòtɔ lɛ kɛɖɛ wɛ síwú dàlɔmɛ', 'info_gauche_visiteurs_enregistres' => 'jōnɔ bíbà sín akɔnŋtà', 'info_generation_miniatures_images' => 'Nú títɛ lɛ ɖê yē zé bló gbètákɛn ná', - 'info_gerer_trad' => 'Tìtò tímɛ tɔn lɛ?', 'info_hebergeur_desactiver_envoi_email' => 'e-mailù càcà.', 'info_hier' => 'sɔ tó fí:', - 'info_historique_activer' => 'sɔ tó fí', - 'info_historique_affiche' => 'zé wàlɔ ɔ xlɛ', - 'info_historique_comparaison' => 'kpɔnɖéwú', - 'info_historique_desactiver' => 'mi jó kpɔnɖéwú ɔ dó', - 'info_historique_texte' => 'mi zé ɖìdyɔ sín àfɔ ɖìɖè xlɛ.', 'info_identification_publique' => 'Nyíkɔ mi tɔn tòbítùn...', 'info_image_process' => 'Mi cyán wàlɔ ɖàgbè lɛ.', 'info_image_process2' => 'Mi cyán wàlɔ ɖàgbè lɛ', # MODIF @@ -262,8 +218,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_login_trop_court' => 'nyíkɔ̂ hwè.', 'info_maximum' => 'Bísésé:', 'info_meme_rubrique' => 'Akpáxwé ɖókpó ɔ', - 'info_message' => 'wɛn', - 'info_message_efface' => 'yè súsú wɛn', 'info_message_en_redaction' => 'yè kpò ɖò wɛn wlàn wɛ', 'info_message_technique' => 'wɛn xwítxwítí :', 'info_messagerie_interne' => 'Winwlántɛnmɛ', @@ -272,19 +226,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'ɖyɔ Akpáxwé ɔ:', 'info_modifier_titre' => 'ɖyɔ Akpáxwé ɔ: @xota@', 'info_mon_site_spip' => 'gblogblojí supipu tɔn cè', - 'info_mot_sans_groupe' => '(xókwín máɖó àgùn...)', - 'info_moteur_recherche' => 'Mɔ mɔjɛmɛbátɔ', 'info_moyenne' => 'Tɛntímɛ:', - 'info_multi_articles' => 'Gbè lɛ sín Akpáxwé ní yí àzɔ?', 'info_multi_cet_article' => 'Gbè wékpá é lɔ tɔn :', 'info_multi_langues_choisies' => 'Mi kɛnklɛn bó sɔ gbè é jló myɔ', - 'info_multi_rubriques' => 'Gbè lɛ sín Akpáxwé ní yí àzɔ?', 'info_multi_secteurs' => 'Akpáxwé é lò ɖòkɔ lɛ kɛɖɛ a ?', 'info_nom' => 'E wó', 'info_nom_destinataire' => 'nyíkɔ mɛ ná yí ɔ tɔn', 'info_nom_site' => 'gblogblojí mi tɔn sín nyíkɔ', 'info_nombre_articles' => '@nb_articles@ wékpá,', - 'info_nombre_partcipants' => 'mi byɔ kplé mɛ:', 'info_nombre_rubriques' => '@nb_rubriques@ àkpáxwé lɛ,', 'info_nombre_sites' => '@nb_sites@ gblogblojí ,', 'info_non_deplacer' => 'yè mà sɛ wó...', @@ -293,48 +242,34 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_modifiable' => 'Yé sín ɖyɔ á', 'info_non_suppression_mot_cle' => 'ŋ jó ná súnsún gbètɛn ɔ á.', 'info_notes' => 'wê', - 'info_nouveaux_message' => 'wɛn yɔyɔ', 'info_nouvel_article' => 'wékpá yɔyɔ', 'info_nouvelle_traduction' => 'Tínmɛ ɖévó:', 'info_numero_article' => 'Wékpá nùméló:', 'info_obligatoire_02' => '[dódó]', # MODIF 'info_option_accepter_visiteurs' => 'Mi yí gbè nú jònɔ é ná nyíkɔ lɛ ', - 'info_option_faire_suivre' => 'Mi nɔ kpɔn wɛn lɛ ɖò kplékplé ɔ mɛ', 'info_option_ne_pas_accepter_visiteurs' => 'Mi gbɛ nyíkɔ jónɔ é lɔ tɔn ', 'info_options_avancees' => 'wàlɔ é ɖrɛn àfɔ ', - 'info_ortho_activer' => 'mi vlɔn nú é nɔ wlán gànjí ɔ ', - 'info_ortho_desactiver' => 'mi má vlɔn nú é nɔ wlán gànjí ɔ ', 'info_ou' => 'fítɛ...', 'info_page_interdite' => 'àlì sú', 'info_par_nombre_article' => '(ɖìɖèmɛ wékpá )', 'info_passe_trop_court' => 'gbètákɛn ɔ hwè.', 'info_passes_identiques' => 'gbètákɛn wè lɛ sɔgbè á.', - 'info_pense_bete_ancien' => 'Lìntámɛ-Agúɖàgɔ xóxó mi tɔn lɛ', # MODIF 'info_plus_cinq_car' => 'E hú wékwín àtɔ̂n', 'info_plus_cinq_car_2' => '(E hú wékwín àtɔ̂n)', 'info_plus_trois_car' => '(E hú wékwín àtɔn)', 'info_popularite' => 'Tòbítù: @popularite@ ; Jōnɔ: @visites@', - 'info_popularite_4' => 'Tòbítùn : @popularite@ ; Jōnɔ : @visites@', 'info_post_scriptum' => 'Gbè ní ná', 'info_post_scriptum_2' => 'Gbè ní ná :', 'info_pour' => 'gbɔn', - 'info_preview_admin' => 'Tìtòtɔ lɛ jɛn síwú kpɔn gblogblojí ɔ hwɛ', - 'info_preview_comite' => 'Nyɔwlántɔ lɛ jɛn síwú kpɔn gblogblojí ɔ hwɛ', - 'info_preview_desactive' => 'wàlɔ kpíkpɔn tɔn sɔ ɖò gbɛ á', - 'info_preview_texte' => 'wàlɔ kpíkpɔn tɔn sɔ ɖò gbɛ á', - 'info_principaux_correspondants' => 'Xɔntɔn mìtɔn àlɔ mà yì mɛ lɛ', + 'info_preview_texte' => 'wàlɔ kpíkpɔn tɔn sɔ ɖò gbɛ á', # MODIF 'info_procedez_par_etape' => 'wàlɔ ɖòkpó ɖòkpó', 'info_procedure_maj_version' => 'wàlɔ ɖòkpó ɖòkpó.', 'info_ps' => 'P.S', 'info_publies' => 'yè sɔ kɛn ná', 'info_question_accepter_visiteurs' => 'Nɛ nyí ɖɔ tìtòmɛ mi tɔn bà ɖɔ é mi ná wlí jōnɔ lɛ hɛn ɔ :', 'info_question_inscription_nouveaux_redacteurs' => 'Mi yí gbè nú nyɔwántɔ yɔyɔ lɛ à.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'mi jló ná zán mɔbìbàtɔ supipù tɔn à', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'gblogblojí ɔ sín dɔ', 'info_recharger_page' => 'mi lɛ vɔ jlɔ wémà é lɔ ɖò cɛjú ywɛywɛmɛ.', - 'info_recherche_auteur_a_affiner' => 'xókwìn lɛ súkpɔ ɖí"@cherche_auteur@" ; mi lɛ vɔ bà', - 'info_recherche_auteur_ok' => 'yè mɔ nyɔwlátɔ gégé"@cherche_auteur@":', 'info_recherche_auteur_zero' => 'xókwìn lɛ « @cherche_auteur@ ».', 'info_recommencer' => 'Mi lɛ νɔ bɛ.', 'info_redacteur_1' => 'Nyɔwlántɔ ', @@ -351,7 +286,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'àkpáxwé', 'info_rubriques_02' => 'àkpáxwé lɛ', 'info_rubriques_trouvees' => 'àkpáxwé lɛ ɖê yè mɔ̂', - 'info_rubriques_trouvees_dans_texte' => 'àkpáxwé lɛ ɖê yè mɔ̂ (ɖò wěmà lɛ mɛ) ', 'info_sans_titre' => 'Xótá ɖè á', 'info_selection_chemin_acces' => 'Mi cyán àlì é byoɔ wégbó ɔ mɛ ɔ :', 'info_signatures' => 'Alɔɖówěmámɛ lɛ', @@ -364,11 +298,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_sites_lies_mot' => 'Gblogblojí ɖê cáɖó gbètákɛn ɔ nú ɔ ', 'info_sites_proxy' => 'Mi zán proxy', 'info_sites_trouves' => 'gblogblojí ɖê mɔ lɛ', - 'info_sites_trouves_dans_texte' => 'gblogblojí ɖê mɔ lɛ(ɖò wěmámɛ)', 'info_sous_titre' => 'xótákpɛví:', 'info_statut_administrateur' => 'Tìtòtɔ', 'info_statut_auteur' => 'Nyɔwlán sín tìtòmɛ:', # MODIF - 'info_statut_efface' => 'súnsún', 'info_statut_redacteur' => 'Nyɔwlántɔ', 'info_statut_utilisateurs_1' => 'nɔtè kpòhùn', 'info_statut_utilisateurs_2' => 'mi cyán nɔtè mɛ̂ ɖò LDAP sín wěmámɛ é nú yé sɔ yéɖé xlɛ ɔ núkɔnnúkɔntɔ̂n..', @@ -386,7 +318,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_en_redaction' => 'Wékpá lɛ kpó nyí wlánwlántɔ', 'info_tous_articles_presents' => 'Wékpá lɛ yè zéɖò àkpáxwé é lɔ̂', 'info_tous_les' => 'Yé bî:', - 'info_tous_redacteurs' => 'nyɔwlántɔ lɛ bí xógbè', 'info_tout_site' => 'Gblògblòjí ɔ bí', 'info_tout_site2' => 'Yé tìnmɛ wěkpâ ɖó gbè ɖé mɛ á.', 'info_tout_site3' => 'Yé tìnmɛ wěkpâ ɖó gbè ɖé mɛ á', @@ -400,7 +331,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_une_rubrique' => 'àkpáxwé,', 'info_une_rubrique_02' => 'àkpáxwé', 'info_url' => 'URL :', - 'info_url_site' => 'URL Gblògblòjí ɔ tɔn :', 'info_urlref' => 'àlɔwlí :', 'info_utilisation_spip' => 'mi síwú jɛ tìtò ɖiɖèxlɛ tɔn zán jí...', 'info_visites_par_mois' => 'ɖìdèxlɛ sùn ɖòkpó mɛ tɔn:', @@ -414,15 +344,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_activer_messages_avertissement' => 'mi jɛ sɛn dó jí', 'item_administrateur_2' => 'Tìtótɔ ', 'item_afficher_calendrier' => 'Mi ɖè kalánɖlyé lɛ xlɛ', - 'item_autoriser_documents_joints' => 'Mi sɔ wémà dɔɖó wékpá wú', - 'item_autoriser_documents_joints_rubriques' => 'Mi sɔ wémà dɔɖó àkpáxwé ɔ mɛ', 'item_choix_administrateurs' => 'Tìtótɔ lɛ', 'item_choix_generation_miniature' => 'Mi tò ɖéxlɛ lɛ cíkícíkí.', 'item_choix_non_generation_miniature' => 'Mi mà tò ɖéxlɛ lɛ cíkícíkí.', 'item_choix_redacteurs' => 'nyɔwlántɔ lɛ', 'item_choix_visiteurs' => 'jónɔ lɛ', 'item_creer_fichiers_authent' => 'Gbètáxó lɛ.htpasswd', - 'item_limiter_recherche' => 'Tò nyíkɔ lɛ', 'item_login' => ' nyíkɔ ', 'item_mots_cles_association_articles' => 'Wékpá lɛ', 'item_mots_cles_association_rubriques' => 'àkpáxwé ɔ ', @@ -431,34 +358,24 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_non_accepter_inscriptions' => 'yí gbè nú nyíkɔ lɛ ', 'item_non_activer_messages_avertissement' => 'mi jɛ sɛn dó jí', 'item_non_afficher_calendrier' => 'Mi ɖè kalánɖlyé lɛ xlɛ wo', - 'item_non_autoriser_documents_joints' => 'Mi sɔ wémà dɔɖó àkpáxwé ɔ mɛ', - 'item_non_autoriser_documents_joints_rubriques' => 'Mi sɔ wémà dɔɖó àkpáxwé ɔ mɛ', 'item_non_creer_fichiers_authent' => 'mi má sɔ bló xótá ô', - 'item_non_gerer_statistiques' => 'Mi mà Mi bló tìtò lɛ', - 'item_non_limiter_recherche' => 'mi vlɔn kàn nú bìbà sɔ yí Gblògblòjí bàɖémɛ jí ', 'item_non_publier_articles' => 'mi má sɔ xlɛ wékpá lɛ có àzán lɛ ní wâ.', - 'item_non_utiliser_moteur_recherche' => 'mi má zán mɔ ɔ ', 'item_nouvel_auteur' => 'nyɔwlántɔ yɔyɔ', 'item_nouvelle_rubrique' => 'àkpáxwé yɔyɔ', 'item_oui' => 'ɛ̂', 'item_publier_articles' => 'mi zé wékpá é lɔ lɛ sɔ, é ná bò tɛ nyí àzanɖébú.', 'item_reponse_article' => 'yígbè nú wékpá', - 'item_utiliser_moteur_recherche' => 'mi zán xó kléwún lɛ', 'item_visiteur' => 'jònɔ', // J 'jour_non_connu_nc' => 'n.c.', // L - 'lien_ajout_destinataire' => 'mi zé mɛ̂ gɔn é ná yí ɔ zé gɔn ná', 'lien_ajouter_auteur' => 'mi zé nyɔwlátɔ zé gɔn ná', - 'lien_ajouter_participant' => 'mi zé nyɔwlátɔ zé gɔn ná', 'lien_email' => 'e-mailu', 'lien_nom_site' => 'nyíkɔ gblogblojí ɔ tɔn :', 'lien_retirer_auteur' => 'mi ɖè nyɔwlátɔ sín ', - 'lien_retrait_particpant' => 'mi ɖè nyɔwlátɔ sín ', 'lien_site' => 'gblogblojí', - 'lien_supprimer_rubrique' => 'Sùnsùn àkpáxwé é lɔ', 'lien_tout_deplier' => 'mi vlɔn bí', 'lien_tout_replier' => 'mi blán bí', 'lien_trier_nom' => 'mi cyán nyìkɔmɛ', @@ -484,6 +401,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // O 'onglet_repartition_actuelle' => 'Hwé élɔ nú', + // R + 'required' => '[dódó]', # MODIF + // S 'statut_admin_restreint' => '(tìto kléwún)', # MODIF @@ -504,13 +424,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_article_virtuel_reference' => 'wékpá é lɔ.', 'texte_aucun_resultat_auteur' => 'xógbè lɛ "@cherche_auteur@"', 'texte_auteur_messagerie' => 'nyɔwlántɔ lɛ .', - 'texte_auteur_messagerie_1' => 'gblogblojí é lɔ nɔ zɔn bɔ mi nɔ sɛ wɛn ɖó bó nɔ lɛ yí wɛn.', 'texte_auteurs' => 'nyɔwlántɔ lɛ ', 'texte_choix_base_1' => 'mi sɔ xóxòkplégbàví mi tɔn :', 'texte_choix_base_2' => 'mɔ SQL nɔ hɛnxóxòkplégbàví', 'texte_choix_base_3' => 'mi cyían ɖê jɛ ɖéwú ɔ:', - 'texte_commande_vider_tables_indexation' => 'mi cyían ɖê jɛ ɖéwú ɔ.', - 'texte_compresse_ou_non' => '(E lɔ̂ yé síwú xóklpé)', 'texte_compte_element' => '@count@ kwín', 'texte_compte_elements' => '@count@ kwín', 'texte_connexion_mysql' => 'tòbítùntìto kléwúngbàví ɔ jɛ vɔwɛn é lɔ yé sɛ ɖó ɔ mi kɛnklɛ̂n bó ná lìnlìn mi tɔn ɖé wúSQL, kplékplé yé sɔ ɖó dò wɔ mɛ SQL.', # MODIF @@ -522,10 +439,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_date_publication_anterieure' => 'AZAN ƉÊ YE SƆ WĚMA SƆ XLƐ Ɔ :', 'texte_date_publication_anterieure_nonaffichee' => 'Mi sɔ Azán ɖê yé sɔ wěmà sɔ xlɛ.', 'texte_date_publication_article' => 'Mi sɔ Azán ɖê yé sɔ wěmà sɔ xlɛ :', - 'texte_descriptif_petition' => 'mi tìnmɛ xójíjlá ɔ', 'texte_descriptif_rapide' => 'mi tìnmɛ càcàcà', 'texte_effacer_base' => 'mi sùnsùn xóxòkplé sùpípù tɔn ', - 'texte_effacer_donnees_indexation' => 'mi sùnsùn xóxòkplé indɛsù tɔn', 'texte_en_cours_validation' => 'wékwín é lɔ ɖò wěmámɛyé mɔ wěmà ɖé ɖò gbè é lɔ mɛ áwékwín ɖê yé mà tùn à lɛ ɔ ɖò vɔvɔmɛ. Zìn yé bó kpɔn àyì é yè b ɖó yèwú ɔ.', # MODIF 'texte_enrichir_mise_a_jour' => 'mi síwú zán kwín é lɔ lɛ».', 'texte_fichier_authent' => 'xó kléwun lɛ wěmà kléwún ɖé lɛ wɛbɔ yé nɔ zɔn bɔ xó lɛ nɔ yí àtɛjí gànmɛgànmɛmi sɔ xóxòkplégbàví mi tɔn mɔnɔ hɛnmi cyían ɖê jɛ ɖéwú ɔ', # MODIF @@ -533,19 +448,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_informations_personnelles_2' => 'Nú mi lɛ ján bló bɔ àcɛ mi tɔn ɖò àzɔ wàwɛ tɛgbɛ ɔ mi síwú', # MODIF 'texte_introductif_article' => '(Có nú mi ná bɛ xó ɔ.)', 'texte_jeu_caractere' => 'vlàvò nú mi gòsínbò dózò nú ɖéxlɛtɔ mi tɔn mi k pɔn àcɛ winwl tɔn E ɖò àkpáxwé ɔ mɛ Tìtòmɛ ɔ ná mi àcɛ mi ɖé sú tɔn mi Nú mi lɛ ján bló bɔ àcɛ mi tɔn ɖò àzɔ wàwɛ tɛgbɛ ɔ mi síwú(balise #CHARSET).', - 'texte_jeu_caractere_2' => 'vlàvò nú mi gòsínbò dózò nú ɖéxlɛtɔ mi tɔn mi k pɔn àcɛ winwl tɔn E ɖò àkpáxwé ɔ mɛ Tìtòmɛ ɔ ná mi àcɛ mi ɖé sú tɔn mi Nú mi lɛ ján bló bɔ àcɛ mi tɔn ɖò àzɔ wàwɛ tɛgbɛ ɔ mi síwú', - 'texte_lien_hypertexte' => '(nɛ nyí ɖɔ wɛn é lɔ kò yí àtɛ ɔ jí ɖá yí ɔ mi xlɛ nɔtɛn URL.)', 'texte_login_ldap_1' => 'vlàvò nú mi gòsínbò dózò nú ɖéxlɛtɔ mi tɔn mi k pɔn àcɛ winwl tɔn E ɖò àkpáxwé ɔ mɛ Tìtòmɛ ɔ ná mi àcɛ mi ɖé sú tɔn mi Nú mi lɛ ján bló bɔ àcɛ mi tɔn ɖò àzɔ wàwɛ tɛgbɛ ɔ mi síwú', 'texte_login_precaution' => 'vlàvò nú mi gòsínbò dózò nú ɖéxlɛtɔ mi tɔn mi k pɔn àcɛ winwl tɔn E ɖò àkpáxwé ɔ mɛ Tìtòmɛ ɔ ná mi àcɛ mi ɖé sú tɔn mi Nú mi lɛ ján bló bɔ àcɛ mi tɔn ɖò àzɔ wàwɛ tɛgbɛ ɔ mi síwú...', - 'texte_message_edit' => 'Gbêgbè yé wlán wěmà ɔMi sɔ Azán ɖê yé sɔ wěmà sɔ xlɛàlɔwlí ɖévó lɛ ɖê gòsín gblogblojí é lɔ ján mi tìnmɛ càcàcàxójíjlá ɔmi sɔ ɖidé ɖó wěmà lɛ mɛsùpípù tɔn ', 'texte_mise_a_niveau_base_1' => 'wɛn wékpá tɔn yé sɔ xlɛàlɔwlí yɔyɔ lɛ ná jɛ àtɛ ɔ jími ná sɔ yé xlɛ àzɔn ɖókpó', 'texte_modifier_article' => 'ɖyɔ wékpá ɔ:', - 'texte_moteur_recherche_active' => 'vlàvò nú mi gòsínbò dózò nú ɖéxlɛtɔ mi tɔn mi k pɔn àcɛ winwl tɔn E ɖò àkpáxwé ɔ mɛ Tìtòmɛ ɔ ná mi àcɛ mi ɖé sú tɔn mi Nú mi lɛ ján bló bɔ àcɛ mi tɔn ɖò àzɔ wàwɛ tɛgbɛ ɔ mi síwúCó nú mi ná bɛ xó ɔ nɛ nyí ɖɔ wɛn é lɔ kò yí àtɛ ɔ jí ɖá yí ɔ mi xlɛ nɔtɛn àlɔwlí yɔyɔ lɛ ná jɛ àtɛ ɔ jími ná sɔ yé xlɛ àzɔn ɖókpó', - 'texte_moteur_recherche_non_active' => 'mɔ̂ ɖò àzɔ wà wɛ á.', 'texte_multilinguisme' => 'vlàvò nú mi gòsínbò dózò nú ɖéxlɛtɔ mi tɔn mi k pɔn àcɛ winwl tɔn E ɖò àkpáxwé ɔ mɛ Tìtòmɛ ɔ ná mi àcɛ mi ɖé sú tɔn mi Nú mi lɛ ján bló bɔ àcɛ mi tɔn ɖò àzɔ wàwɛ tɛgbɛ ɔ mi síwúCó nú mi ná bɛ xó ɔ nɛ nyí ɖɔ wɛn é lɔ kò yí àtɛ ɔ jí ɖá yí ɔ mi xlɛ nɔtɛn ', # MODIF 'texte_multilinguisme_trad' => 'wɛn wékpá tɔn yé sɔ xlɛmi jláɖyɔ wékpá ɔmɔ̂ ɖò àzɔ wà wɛ á.', # MODIF 'texte_non_compresse' => 'xókplé(mɔ mi tɔn sìwú yí wàlɔ é nɛ lɛ á)', - 'texte_nouveau_message' => 'wɛn yɔyɔ', 'texte_nouvelle_version_spip_1' => 'wàlɔ sùpípù ɖévó wɛ mi sɔ.', 'texte_nouvelle_version_spip_2' => 'Có nú mi ná bɛ xó ɔ nɛ nyí ɖɔ wɛn é lɔ kò yí àtɛ ɔ jí ɖá yí ɔ mi xlɛ nɔtɛn àlɔwlí yɔyɔ lɛ ná jɛ àtɛ ɔ jími ná sɔ yé xlɛ àzɔn ɖókpówɛn wékpá tɔn yé sɔ xlɛmi jláɖyɔ wékpá ɔmɔ̂ ɖò àzɔ wà wɛ áxókplémɔ mi tɔn sìwú yí wàlɔ é nɛ lɛ ámi hɛn mi ná zán wàlɔ càcàcà ɔ ámi ɖé sú mi bló jɛ xá myɔ wékwín yɔyɔ...)', # MODIF 'texte_operation_echec' => 'mi lɛ vɔ yí wékpá ɖé wá ɔ jí mi lɛ vɔ kpɔn xó é xwétɔ̂ sɛɖó ɔ.', @@ -557,7 +466,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_publication_articles_post_dates' => 'Wàlɔtɛ sùpípù kàsíwú bló wémà ɖê jló ná sɔɖó àtɛ jí hwè ɖé vó nú ɔ?', 'texte_rappel_selection_champs' => '[Mi má wɔn bó sɔ kɛn nú tɛnmɛ ó.]', 'texte_recalcul_page' => 'Mi wɔn wékpá ɖòkpó sín àkɔwúntà bló mi ɖè.Mi lɛ vɔ bó zín .', - 'texte_recapitiule_liste_documents' => 'wékpá nɔ bló àkɔwúntà wémà é ɖò àkpéxwé lɛ̂ mɛ.', 'texte_recuperer_base' => 'mi bló xóxòkplé ɔ ɖó', 'texte_reference_mais_redirige' => 'wémà é lɔ sùpípù mɛ wɛ é mɔ àcɛ ɖé àmɔ nɔtɛn ɖévɔ mɛ wɛ é xwè', 'texte_requetes_echouent' => 'Tìtòmɛ Sùpípù tɔn sɔ gbɔn uZine jíEtɛ wɛ nyí sùpípùWěmàxòkplé sùpípù tɔntɛmɛbìbá - blòɖóTìtòmɛ é nɔ zɔn bɔ yè nɔ ɖè nɛ ɖò gblogblòjí E zɛ kwín àtɔn wúàcɛ yé nɔ ná nɔ jɛɖóNú mi wlán wěmà mi tɔn fó ɔ mi síwú sɔɖó àtɛ jí Wàlɔtɛ sùpípù kàsíwú bló wémà ɖê jló ná sɔɖó àtɛ jí hwè ɖé vó nú ɔMi wɔn wékpá ɖòkpó sín àkɔwúntà bló mi ɖè.Mi lɛ vɔ bó zín bó sɔ kɛn nú tɛnmɛ ówékpá nɔ bló àkɔwúntà wémà é ɖò àkpéxwé lɛ̂ mɛ', # MODIF @@ -570,7 +478,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_suppression_fichiers' => 'tɛmɛbìbá - blòɖóTìtòmɛ é nɔ zɔn bɔ yè nɔ ɖè nɛ ɖò gblogblòjí E zɛ kwín àtɔn wúàcɛ yé nɔ ná nɔ jɛɖóNú mi wlán wěmà mi tɔn fó ɔ mi síwú sɔɖó àtɛ jí Wàlɔtɛ sùpípù kàsíwú bló wémà ɖê jló ná sɔɖó àtɛ jí hwè ɖé vó nú ɔMi wɔn wékpá ɖòkpó sín àkɔwúntà bló mi ɖè.Mi lɛ vɔ bó zín bó sɔ kɛn nú tɛnmɛ ó', 'texte_sur_titre' => 'xótájí', 'texte_table_ok' => 'wàlɔ̂ sɔ gbè.', - 'texte_tables_indexation_vides' => 'wàlɔ̂ lɛ jɛ vɔ.', 'texte_tentative_recuperation' => 'tɛnkpɔn bíblóɖó tɔn', 'texte_tenter_reparation' => 'tɛnkpɔn bíblóɖó tɔn', 'texte_test_proxy' => 'tɛnkpɔn proxy,E zɛ kwín àtɔn wúàcɛ yé nɔ ná nɔ jɛɖóNú mi wlán wěmà mi tɔn fó ɔ mi síwú sɔɖó àtɛ jí .', @@ -578,13 +485,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_titre_obligatoire' => 'xótá[dódó]', 'texte_travail_article' => '@nom_auteur_modif@ é wàzɔ ɖó wékpá é lɔ wú @date_diff@ cɛjú', 'texte_travail_collaboratif' => 'Sùpípù ɔ tìtómɛ nù jíjlá tɔn ɖê minirézo kéjé bó lɛ vlɔnkán nú bíbló gblògblòjí uZine tɔn ɔ. Mì sɔ kɛ mí ɖò àcɛ wàlɔ GPl tɔn mɛ. Mī zé bò zán bó dó bló gblògblòjí lɛ̂ ná : é síwú nyí mì tɔn ɖé sú kàbí gbɛtá ɖé tɔn, kàbí tòxóɖɔgbɛ ɖé tɔn, àló àjɔwíwá wú.Gblògblòjí é lɔ̂, é wɛ nyí Wěmàxòkplé sùpípù tɔn ɖò tájí. Mí ná lɛ mɔ àlɔwlí gégé ɖê ná ɖɔn mî yì gblògblòjí ɖê jí kplékplé lɛ̂ nɔ tîn ɖè ɔ ', - 'texte_trop_resultats_auteurs' => 'xógbè súkpɔ "@cherche_auteur@" ; mi lɛ vɔ bà', - 'texte_unpack' => 'mi ɖon wàlɔ yɔyɔ wá', - 'texte_utilisation_moteur_syndiques' => 'Sùpípù ɔ tìtómɛ nù jíjlá tɔn ɖê minirézo kéjé bó lɛ vlɔnkán nú bíbló gblògblòjí uZine tɔn ɔ. Mì sɔ kɛ mí ɖò àcɛ wàlɔ GPl tɔn mɛ. Mī zé bò zán bó dó bló gblògblòjí lɛ̂ ná : é síwú nyí mì tɔn ɖé sú kàbí gbɛtá ɖé tɔn, kàbí tòxóɖɔgbɛ ɖé tɔn, àló àjɔwíwá wú.Gblògblòjí é lɔ̂, é wɛ nyí Wěmàxòkplé sùpípù tɔn ɖò tájí. Mí ná lɛ mɔ àlɔwlí gégé ɖê ná ɖɔn mî yì gblògblòjí ɖê jí kplékplé lɛ̂ nɔ tîn ɖè ɔ Tìtòmɛ Sùpípù tɔn sɔ gbɔn uZine jíEtɛ wɛ nyí sùpípùWěmàxòkplé sùpípù tɔntɛmɛbìbá - blòɖóTìtòmɛ é nɔ zɔn bɔ yè nɔ ɖè nɛ ɖò gblogblòjí E zɛ kwín àtɔn wúàcɛ yé nɔ ná nɔ jɛɖó', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'wàlɔ é lɔ nɔ zɔn bɔ sùpípù nɔ .', 'texte_vide' => 'jɛ vɔ', 'texte_vider_cache' => 'gbàv i ɔ jɛ vɔ', - 'titre_admin_effacer' => 'wàlɔ zɔ', 'titre_admin_tech' => 'wàlɔ zɔ', 'titre_admin_vider' => 'wàlɔ zɔ', 'titre_cadre_afficher_article' => 'xlɛ wékpá lɛ', @@ -604,35 +506,20 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_naviguer_dans_le_site' => 'kéjénúmɛ ɖò gblogblo ɔ jí ...', 'titre_nouvelle_rubrique' => 'àkpáxwé yɔyɔ', 'titre_numero_rubrique' => 'númɛló àkpáxwé tɔn :', - 'titre_page_admin_effacer' => 'bìblóɖó: sùnsùn xóxòkplé ɔ', 'titre_page_articles_edit' => 'ɖyɔ : @titre@', 'titre_page_articles_page' => 'wékpá lɛ', 'titre_page_articles_tous' => 'gblogblojí ɔ bí ', - 'titre_page_auteurs' => 'Jónɔ lɛ', 'titre_page_calendrier' => 'kàlanɖlyé@nom_mois@ @annee@', 'titre_page_config_contenu' => 'Tìtò gblogblojí ɔ tɔn', - 'titre_page_config_fonctions' => 'Tìtò gblogblojí ɔ tɔn', - 'titre_page_configuration' => 'Tìtò gblogblojí ɔ tɔn', - 'titre_page_controle_petition' => 'Bɔ núkún nú xàjíjlá lɛ', 'titre_page_delete_all' => 'Sùnsùn bó gbìdí bí', - 'titre_page_documents_liste' => 'wěmà àkpáxwé lɛ tɔn ', - 'titre_page_index' => 'tɛnkánɖóvò', - 'titre_page_message_edit' => 'wlán wɛn ', - 'titre_page_messagerie' => 'wɛngbàví', 'titre_page_recherche' => 'xógbè é tɔn ɖò nú bíbà ɔ mɛ ɔ @recherche@', 'titre_page_statistiques_referers' => 'àkɔŋtá ', 'titre_page_upgrade' => 'mi vɛ jɔwú nú sùpípù ɔ ', 'titre_publication_articles_post_dates' => 'ɖéxlɛ wékpá é ná wà lɛ tɔn', - 'titre_referencer_site' => 'àcɛ yíyí ɖò gblogblojí :', - 'titre_rendez_vous' => 'gàmɛ ɖóɖó :', 'titre_reparation' => 'Bìblòɖó', 'titre_suivi_petition' => 'Bɔ núkún ɖó xójíjlá lɛ jí', - 'trad_article_inexistant' => 'númɛló ɖé sɔgbè ɖó wépká é lɔ á.', 'trad_article_traduction' => 'wàlɔ wépká é lɔ tɔn lɛ bí', - 'trad_deja_traduit' => 'wépká é lɔ kò nyí tìnmɛ wékpá ɖévó tɔn.', 'trad_delier' => 'yé má cá wépká é lɔ ɖó tìnmɛ é lɔ wú ó', # MODIF 'trad_lier' => 'kò nyí tìnmɛ wékpá ɖévó tɔn :', 'trad_new' => 'Lɛ wlán tìnmɛ wékpá ɖévó tɔn' # MODIF ); - -?> diff --git a/www/ecrire/lang/ecrire_fr.php b/www/ecrire/lang/ecrire_fr.php index 21c93b01..78da836c 100644 --- a/www/ecrire/lang/ecrire_fr.php +++ b/www/ecrire/lang/ecrire_fr.php @@ -1,7 +1,9 @@ 'La connexion à la base de données a échoué.', 'avis_connexion_echec_2' => 'Revenez à la page précédente, et vérifiez les informations que vous avez fournies.', 'avis_connexion_echec_3' => 'N.B. Sur de nombreux serveurs, vous devez demander l’activation de votre accès à la base de données avant de pouvoir l’utiliser. Si vous ne pouvez vous connecter, vérifiez que vous avez effectué cette démarche.', + 'avis_connexion_erreur_creer_base' => 'La base de données n’a pas pu être créée.', 'avis_connexion_erreur_nom_base' => 'Le nom de la base ne peut contenir que des lettres, des chiffres et des tirets', 'avis_connexion_ldap_echec_1' => 'La connexion au serveur LDAP a échoué.', 'avis_connexion_ldap_echec_2' => 'Revenez à la page précédente, et vérifiez les informations que vous avez fournies.', 'avis_connexion_ldap_echec_3' => 'Alternativement, n’utilisez pas le support LDAP pour importer des utilisateurs.', 'avis_deplacement_rubrique' => 'Attention ! Cette rubrique contient @contient_breves@ brève@scb@ : si vous la déplacez, veuillez cocher cette case de confirmation.', - 'avis_destinataire_obligatoire' => 'Vous devez indiquer un destinataire avant d’envoyer ce message.', 'avis_erreur_connexion_mysql' => 'Erreur de connexion SQL', - 'avis_erreur_version_archive' => 'Attention ! Le fichier @archive@ correspond à - une autre version de SPIP que celle que vous avez - installée. Vous allez au-devant de grosses - difficultés : risque de destruction de votre base de - données, dysfonctionnements divers du site, etc. Ne - validez pas cette demande d’importation.

    Pour plus - d’informations, voyez - la documentation de SPIP.

    ', - 'avis_espace_interdit' => 'Espace interdit
    SPIP est déjà installé.
    ', + 'avis_espace_interdit' => 'Espace interdit
    SPIP est déjà installé.
    ', 'avis_lecture_noms_bases_1' => 'Le programme d’installation n’a pas pu lire les noms des bases de données installées.', 'avis_lecture_noms_bases_2' => 'Soit aucune base n’est disponible, soit la fonction permettant de lister les bases a été désactivée pour des raisons de sécurité (ce qui est le cas chez de nombreux hébergeurs).', 'avis_lecture_noms_bases_3' => 'Dans la seconde alternative, il est probable qu’une base portant votre nom de login soit utilisable :', - 'avis_non_acces_message' => 'Vous n’avez pas accès à ce message.', 'avis_non_acces_page' => 'Vous n’avez pas accès à cette page.', 'avis_operation_echec' => 'L’opération a échoué.', 'avis_operation_impossible' => 'Opération impossible', - 'avis_probleme_archive' => 'Problème de lecture du fichier @archive@', 'avis_suppression_base' => 'ATTENTION, la suppression des données est irréversible', - 'avis_version_mysql' => 'Votre serveur SQL (@version_mysql@) ne permet pas l’auto-réparation des tables de la base.', // B 'bouton_acces_ldap' => 'Ajouter l’accès à LDAP', 'bouton_ajouter' => 'Ajouter', - 'bouton_ajouter_participant' => 'AJOUTER UN PARTICIPANT :', - 'bouton_annonce' => 'ANNONCE', 'bouton_annuler' => 'Annuler', 'bouton_cache_activer' => 'Réactiver le cache', 'bouton_cache_desactiver' => 'Désactiver temporairement le cache', - 'bouton_checkbox_envoi_message' => 'possibilité d’envoyer un message', - 'bouton_checkbox_indiquer_site' => 'indiquer obligatoirement un site Web', - 'bouton_checkbox_signature_unique_email' => 'une seule signature par adresse email', - 'bouton_checkbox_signature_unique_site' => 'une seule signature par site Web', 'bouton_demande_publication' => 'Demander la publication de cet article', 'bouton_desactive_tout' => 'Tout désactiver', 'bouton_desinstaller' => 'Désinstaller', - 'bouton_effacer_index' => 'Effacer les index', 'bouton_effacer_tout' => 'Effacer TOUT', - 'bouton_envoi_message_02' => 'ENVOYER UN MESSAGE', 'bouton_envoyer_message' => 'Message définitif : envoyer', 'bouton_fermer' => 'Fermer', 'bouton_mettre_a_jour_base' => 'Mettre à jour la base de données', 'bouton_modifier' => 'Modifier', - 'bouton_pense_bete' => 'PENSE-BÊTE À USAGE PERSONNEL', - 'bouton_radio_activer_messagerie' => 'Activer la messagerie interne', - 'bouton_radio_activer_messagerie_interne' => 'Activer la messagerie interne', - 'bouton_radio_activer_petition' => 'Activer la pétition', 'bouton_radio_afficher' => 'Afficher', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Apparaître dans la liste des rédacteurs connectés', - 'bouton_radio_desactiver_messagerie' => 'Désactiver la messagerie', 'bouton_radio_envoi_annonces_adresse' => 'Envoyer les annonces à l’adresse :', 'bouton_radio_envoi_liste_nouveautes' => 'Envoyer la liste des nouveautés', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Ne pas apparaître dans la liste des rédacteurs', 'bouton_radio_non_envoi_annonces_editoriales' => 'Ne pas envoyer d’annonces éditoriales', - 'bouton_radio_pas_petition' => 'Pas de pétition', - 'bouton_radio_petition_activee' => 'Pétition activée', - 'bouton_radio_supprimer_petition' => 'Supprimer la pétition', 'bouton_redirection' => 'REDIRECTION', + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Réinitialiser aux valeurs par défaut', 'bouton_relancer_installation' => 'Relancer l’installation', + 'bouton_reset_password' => 'Générer un nouveau mot de passe et l’envoyer par email', 'bouton_suivant' => 'Suivant', 'bouton_tenter_recuperation' => 'Tenter une réparation', 'bouton_test_proxy' => 'Essayer le proxy', 'bouton_vider_cache' => 'Vider le cache', - 'bouton_voir_message' => 'Voir ce message avant de le valider', // C - 'cache_mode_compresse' => 'Les fichiers du cache sont enregistrés en mode compressé.', - 'cache_mode_non_compresse' => 'Les fichiers du cache sont enregistrés en mode non compressé.', 'cache_modifiable_webmestre' => 'Ce paramètre est modifiable par le webmestre du site.', 'calendrier_synchro' => 'Si vous utilisez un logiciel d’agenda compatible iCal, vous pouvez le synchroniser avec les informations de ce site.', 'config_activer_champs' => 'Activer les champs suivants', @@ -113,9 +87,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_titre_base_sup' => 'Déclaration d’une base supplémentaire', 'config_titre_base_sup_choix' => 'Choisissez une base supplémentaire', 'connexion_ldap' => 'Connexion :', - 'copier_en_local' => 'Copier en local', 'creer_et_associer_un_auteur' => 'Créer et associer un auteur', - 'creer_et_associer_une_rubrique' => 'Créer et associer une rubrique', // D 'date_mot_heures' => 'heures', @@ -147,7 +119,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Votre login', 'entree_login_connexion_1' => 'Le login de connexion', 'entree_login_connexion_2' => '(Correspond parfois à votre login d’accès au FTP ; parfois laissé vide)', - 'entree_login_ldap' => 'Login LDAP initial', 'entree_mot_passe' => 'Votre mot de passe', 'entree_mot_passe_1' => 'Le mot de passe de connexion', 'entree_mot_passe_2' => '(Correspond parfois à votre mot de passe pour le FTP ; parfois laissé vide)', @@ -164,9 +135,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_titre_obligatoire' => 'Titre [Obligatoire]
    ', 'entree_url' => 'L’adresse (URL) de votre site', 'entree_url_2' => 'Adresse (URL) du site', - 'erreur_connect_deja_existant' => 'Un serveur existe déjà avec ce nom', - 'erreur_email_deja_existant' => 'Cette adresse email est déjà enregistrée.', + 'erreur_connect_deja_existant' => 'Un serveur existe déjà avec ce nom', + 'erreur_contenu_suspect' => 'Texte mal formé', + 'erreur_email_deja_existant' => 'Cette adresse email est déjà enregistrée.', 'erreur_nom_connect_incorrect' => 'Ce nom de serveur n’est pas autorisé', + 'erreur_plugin_attribut_balise_manquant' => 'Attribut @attribut@ manquant dans la balise @balise@.', 'erreur_plugin_desinstalation_echouee' => 'La désinstallation du plugin a échoué. Vous pouvez néanmoins le désactiver.', 'erreur_plugin_fichier_absent' => 'Fichier absent', 'erreur_plugin_fichier_def_absent' => 'Fichier de définition absent', @@ -185,7 +158,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'Pour plus de renseignements sur toutes ces techniques, n’hésitez pas à consulter la documentation de SPIP.', 'ical_info_calendrier' => 'Deux calendriers sont à votre disposition. Le premier est un plan du site annonçant tous les articles publiés. Le second contient les annonces éditoriales ainsi que vos derniers messages privés : il vous est réservé grâce à une clé personnelle, que vous pouvez modifier à tout moment en renouvelant votre mot de passe.', 'ical_methode_http' => 'Téléchargement', - 'ical_methode_webcal' => 'Synchronisation (webcal ://)', + 'ical_methode_webcal' => 'Synchronisation (webcal://)', 'ical_texte_js' => 'Une ligne de javascript vous permet d’afficher très simplement, sur n’importe quel site vous appartenant, les articles récents publiés sur ce site.', 'ical_texte_prive' => 'Ce calendrier, à usage strictement personnel, vous informe de l’activité éditoriale privée de ce site (tâches et rendez-vous personnels, articles et brèves proposés...).', 'ical_texte_public' => 'Ce calendrier vous permet de suivre l’activité publique de ce site (articles et brèves publiés).', @@ -205,16 +178,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_configuration' => 'Configuration', 'icone_creer_auteur' => 'Créer un nouvel auteur et l’associer à cet article', 'icone_creer_mot_cle' => 'Créer un nouveau mot-clé et le lier à cet article', - 'icone_creer_mot_cle_rubrique' => 'Créer un nouveau mot-clé et le lier à cette rubrique', - 'icone_creer_mot_cle_site' => 'Créer un nouveau mot-clé et le lier à ce site', 'icone_creer_rubrique_2' => 'Créer une nouvelle rubrique', + 'icone_developpement' => 'Développement', 'icone_edition' => 'Édition', - 'icone_envoyer_message' => 'Envoyer ce message', 'icone_ma_langue' => 'Ma langue', 'icone_mes_infos' => 'Mes informations', 'icone_mes_preferences' => 'Mes préférences', 'icone_modifier_article' => 'Modifier cet article', - 'icone_modifier_message' => 'Modifier ce message', 'icone_modifier_rubrique' => 'Modifier cette rubrique', 'icone_publication' => 'Publication', 'icone_relancer_signataire' => 'Relancer le signataire', @@ -227,22 +197,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_supprimer_signature' => 'Supprimer cette signature', 'icone_valider_signature' => 'Valider cette signature', 'image_administrer_rubrique' => 'Vous pouvez administrer cette rubrique', - 'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', - 'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', 'info_1_article' => '1 article', - 'info_1_article_syndique' => '1 article syndiqué', 'info_1_auteur' => '1 auteur', 'info_1_message' => '1 message', 'info_1_mot_cle' => '1 mot-clé', 'info_1_rubrique' => '1 rubrique', - 'info_1_site' => '1 site', 'info_1_visiteur' => '1 visiteur', 'info_activer_cookie' => 'Vous pouvez activer un cookie de correspondance, ce qui vous permettra de passer facilement du site public au site privé.', + 'info_activer_menu_developpement' => 'Afficher le menu Développement', 'info_admin_etre_webmestre' => 'Me donner les droits de webmestre', - 'info_admin_gere_rubriques' => 'Cet administrateur gère les rubriques suivantes :', - 'info_admin_gere_toutes_rubriques' => 'Cet administrateur gère toutes les rubriques', - 'info_admin_gere_toutes_rubriques_2' => 'Je gère toutes les rubriques', 'info_admin_je_suis_webmestre' => 'Je suis webmestre', 'info_admin_statuer_webmestre' => 'Donner à cet administrateur les droits de webmestre', 'info_admin_webmestre' => 'Cet administrateur est webmestre', @@ -254,18 +218,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrateurs' => 'Administrateurs', 'info_administrer_rubrique' => 'Vous pouvez administrer cette rubrique', 'info_adresse' => 'à l’adresse :', + 'info_adresse_desinscription' => 'Adresse de désinscription :', 'info_adresse_url' => 'Adresse (URL) du site public', 'info_afficher_par_nb' => 'Afficher par', - 'info_afficher_visites' => 'Afficher les visites pour :', 'info_aide_en_ligne' => 'Aide en ligne SPIP', 'info_ajout_image' => 'Lorsque vous ajoutez des images en tant que documents joints à un article, SPIP peut créer pour vous, automatiquement, des vignettes (miniatures) des images insérées. Cela permet par exemple de créer automatiquement une galerie ou un portfolio.', - 'info_ajout_participant' => 'Le participant suivant est ajouté :', 'info_ajouter_rubrique' => 'Ajouter une autre rubrique à administrer :', 'info_annonce_nouveautes' => 'Annonce des nouveautés', - 'info_anterieur' => 'antérieure', 'info_article' => 'article', 'info_article_2' => 'articles', 'info_article_a_paraitre' => 'Les articles post-datés à paraître', @@ -275,17 +237,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_miens' => 'Mes articles', 'info_articles_tous' => 'Tous les articles', 'info_articles_trouves' => 'Articles trouvés', - 'info_articles_trouves_dans_texte' => 'Articles trouvés (dans le texte)', 'info_attente_validation' => 'Vos articles en attente de validation', 'info_aucun_article' => 'Aucun article', - 'info_aucun_article_syndique' => 'Aucun article syndiqué', 'info_aucun_auteur' => 'Aucun auteur', 'info_aucun_message' => 'Aucun message', 'info_aucun_rubrique' => 'Aucune rubrique', - 'info_aucun_site' => 'Aucun site', - 'info_aucun_visiteur' => 'Aucun visiteur', 'info_aujourdhui' => 'aujourd’hui :', - 'info_auteur_message' => 'AUTEUR DU MESSAGE :', + 'info_auteur_gere_rubriques' => 'Cet auteur gère les rubriques suivantes :', + 'info_auteur_gere_toutes_rubriques' => 'Cet auteur gère toutes les rubriques', + 'info_auteur_gere_toutes_rubriques_2' => 'Je gère toutes les rubriques', 'info_auteurs' => 'Les auteurs', 'info_auteurs_par_tri' => 'Auteurs@partri@', 'info_auteurs_trouves' => 'Auteurs trouvés', @@ -305,8 +265,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_2' => 'e sur @liste@', 'info_code_acces' => 'N’oubliez pas vos propres codes d’accès !', 'info_compatibilite_html' => 'Norme HTML à suivre', - 'info_compresseur_gzip' => 'Il est recommandé de vérifier au préalable si l’hébergeur compresse déjà systématiquement les scripts php ; pour cela, vous pouvez par exemple utiliser le service suivant : @testgzip@', - 'info_compresseur_texte' => 'Si votre serveur ne comprime pas automatiquement les pages html pour les envoyer aux internautes, vous pouvez essayer de forcer cette compression pour diminuer le poids des pages téléchargées. Attention : cela peut ralentir considérablement certains serveurs.', 'info_config_suivi' => 'Si cette adresse correspond à une mailing-list, vous pouvez indiquer ci-dessous l’adresse à laquelle les participants au site peuvent s’inscrire. Cette adresse peut être une URL (par exemple la page d’inscription à la liste par le Web), ou une adresse email dotée d’un sujet spécifique (par exemple : @adresse_suivi@?subject=subscribe) :', 'info_config_suivi_explication' => 'Vous pouvez vous abonner à la mailing-list de ce site. Vous recevrez alors par courrier électronique les annonces d’articles et de brèves proposés à la publication.', 'info_confirmer_passe' => 'Confirmer ce nouveau mot de passe :', @@ -330,8 +288,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Date de rédaction antérieure :', 'info_date_referencement' => 'DATE DE RÉFÉRENCEMENT DE CE SITE :', 'info_derniere_etape' => 'C’est terminé !', - 'info_derniers_articles_publies' => 'Vos derniers articles publiés en ligne', - 'info_desactiver_messagerie_personnelle' => 'Vous pouvez activer ou désactiver votre messagerie personnelle sur ce site.', 'info_descriptif' => 'Descriptif :', 'info_desinstaller_plugin' => 'supprime les données et désactive le plugin', 'info_discussion_cours' => 'Discussions en cours', @@ -339,7 +295,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_email_envoi' => 'Adresse email d’envoi (optionnel)', 'info_email_envoi_txt' => 'Indiquez ici l’adresse à utiliser pour envoyer les emails (à défaut, l’adresse destinataire sera utilisée comme adresse d’envoi) :', 'info_email_webmestre' => 'Adresse email du webmestre', - 'info_entrer_code_alphabet' => 'Entrez le code de l’alphabet à utiliser :', 'info_envoi_email_automatique' => 'Envoi de mails automatique', 'info_envoyer_maintenant' => 'Envoyer maintenant', 'info_etape_suivante' => 'Passer à l’étape suivante', @@ -353,7 +308,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( publication et des validations d’articles.', 'info_fichiers_authent' => 'Fichiers d’authentification « .htpasswd »', 'info_forums_abo_invites' => 'Votre site comporte des forums sur abonnement ; les visiteurs sont donc invités à s’enregistrer sur le site public.', - 'info_gauche_admin_effacer' => 'Cette page est uniquement accessible aux responsables du site.

    Elle donne accès aux différentes fonctions de maintenance technique. Certaines d’entre elles donnent lieu à un processus d’authentification spécifique, qui exige d’avoir un accès FTP au site Web.

    ', 'info_gauche_admin_tech' => 'Cette page est uniquement accessible aux responsables du site.

    Elle donne accès aux différentes fonctions de maintenance technique. Certaines d’entre elles donnent lieu à un processus d’authentification spécifique, qui exige d’avoir un accès FTP au site Web.

    ', @@ -365,22 +319,15 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_gauche_auteurs_exterieurs' => 'Les auteurs extérieurs, sans accès au site, sont indiqués par une icone bleue ; les auteurs effacés par une icone grise.', 'info_gauche_messagerie' => 'La messagerie vous permet d’échanger des messages entre rédacteurs, de conserver des pense-bêtes (pour votre usage personnel) ou d’afficher des annonces sur la page d’accueil de l’espace privé (si vous êtes administrateur).', - 'info_gauche_numero_auteur' => 'AUTEUR NUMÉRO', 'info_gauche_statistiques_referers' => 'Cette page présente la liste des referers, c’est-à-dire des sites contenant des liens menant vers votre propre site, uniquement pour hier et aujourd’hui ; cette liste est remise à zéro toutes les 24 heures.', 'info_gauche_visiteurs_enregistres' => 'Vous trouverez ici les visiteurs enregistrés dans l’espace public du site (forums sur abonnement).', 'info_generation_miniatures_images' => 'Génération de miniatures des images', - 'info_gerer_trad' => 'Gérer les liens de traduction ?', 'info_gerer_trad_objets' => '@objets@ : gérer les liens de traduction', 'info_hebergeur_desactiver_envoi_email' => 'Certains hébergeurs désactivent l’envoi automatique de mails depuis leurs serveurs. Dans ce cas, les fonctionnalités suivantes de SPIP ne fonctionneront pas.', 'info_hier' => 'hier :', - 'info_historique_activer' => 'Activer le suivi des révisions', - 'info_historique_affiche' => 'Afficher cette version', - 'info_historique_comparaison' => 'comparaison', - 'info_historique_desactiver' => 'Désactiver le suivi des révisions', - 'info_historique_texte' => 'Le suivi des révisions permet de conserver un historique de toutes les modifications apportées au contenu d’un article, et d’afficher les différences entre les versions successives.', 'info_identification_publique' => 'Votre identité publique...', 'info_image_process' => 'Veuillez sélectionner la meilleure méthode de fabrication des vignettes en cliquant sur l’image correspondante.', 'info_image_process2' => 'Si aucune image n’apparaît, alors le serveur qui héberge votre site n’a pas été configuré pour utiliser de tels outils. Si vous souhaitez utiliser ces fonctions, contactez le responsable technique et demandez les extensions « GD » ou « Imagick ».', @@ -402,8 +349,6 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_logos' => 'Les logos', 'info_maximum' => 'maximum :', 'info_meme_rubrique' => 'Dans la même rubrique', - 'info_message' => 'Message du', - 'info_message_efface' => 'MESSAGE EFFACÉ', 'info_message_en_redaction' => 'Vos messages en cours de rédaction', 'info_message_technique' => 'Message technique :', 'info_messagerie_interne' => 'Messagerie interne', @@ -418,30 +363,23 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_modifier_rubrique' => 'Modifier la rubrique :', 'info_modifier_titre' => 'Modifier : @titre@', 'info_mon_site_spip' => 'Mon site SPIP', - 'info_mot_sans_groupe' => '(Mots sans groupe...)', - 'info_moteur_recherche' => 'Moteur de recherche intégré', 'info_moyenne' => 'moyenne :', - 'info_multi_articles' => 'Activer le menu de langue sur les articles ?', 'info_multi_cet_article' => 'Langue de cet article :', 'info_multi_langues_choisies' => 'Veuillez sélectionner ci-après les langues à disposition des rédacteurs de votre site. Les langues déjà utilisées dans votre site (affichées en premier) ne peuvent pas être désactivées.', 'info_multi_objets' => '@objets@ : activer le menu de langue', - 'info_multi_rubriques' => 'Activer le menu de langue sur les rubriques ?', 'info_multi_secteurs' => '... seulement pour les rubriques situées à la racine ?', 'info_nb_articles' => '@nb@ articles', - 'info_nb_articles_syndiques' => '@nb@ articles syndiqués', 'info_nb_auteurs' => '@nb@ auteurs', 'info_nb_messages' => '@nb@ messages', 'info_nb_mots_cles' => '@nb@ mots-clés', 'info_nb_rubriques' => '@nb@ rubriques', - 'info_nb_sites' => '@nb@ sites', 'info_nb_visiteurs' => '@nb@ visiteurs', 'info_nom' => 'Nom', 'info_nom_destinataire' => 'Nom du destinataire', 'info_nom_pas_conforme' => 'les tags html ne sont pas autorisés', 'info_nom_site' => 'Nom de votre site', 'info_nombre_articles' => '@nb_articles@ articles,', - 'info_nombre_partcipants' => 'PARTICIPANTS À LA DISCUSSION :', 'info_nombre_rubriques' => '@nb_rubriques@ rubriques,', 'info_nombre_sites' => '@nb_sites@ sites,', 'info_non_deplacer' => 'Ne pas déplacer...', @@ -450,19 +388,14 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés', 'info_non_modifiable' => 'ne peut pas être modifié', 'info_non_suppression_mot_cle' => 'je ne veux pas supprimer ce mot-clé.', - 'info_note_numero' => 'Note @numero@', 'info_notes' => 'Notes', - 'info_nouveaux_message' => 'Nouveaux messages', 'info_nouvel_article' => 'Nouvel article', 'info_nouvelle_traduction' => 'Nouvelle traduction :', 'info_numero_article' => 'ARTICLE NUMÉRO :', 'info_obligatoire_02' => ' (obligatoire)', 'info_option_accepter_visiteurs' => 'Accepter l’inscription de visiteurs du site public', - 'info_option_faire_suivre' => 'Faire suivre les messages des forums aux auteurs des articles', 'info_option_ne_pas_accepter_visiteurs' => 'Refuser l’inscription des visiteurs', 'info_options_avancees' => 'OPTIONS AVANCÉES', - 'info_ortho_activer' => 'Activer le vérificateur d’orthographe', - 'info_ortho_desactiver' => 'Désactiver le vérificateur d’orthographe', 'info_ou' => 'ou...', 'info_page_interdite' => 'Page interdite', 'info_par_nom' => 'par nom', @@ -472,20 +405,14 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_passe_trop_court' => 'Mot de passe trop court.', 'info_passe_trop_court_car_pluriel' => 'Le mot de passe doit contenir au moins @nb@ caractères.', 'info_passes_identiques' => 'Les deux mots de passe ne sont pas identiques.', - 'info_pense_bete_ancien' => 'Vos anciens pense-bêtes', 'info_plus_cinq_car' => 'plus de 5 caractères', 'info_plus_cinq_car_2' => '(Plus de 5 caractères)', 'info_plus_trois_car' => '(Plus de 3 caractères)', 'info_popularite' => 'popularité : @popularite@ ; visites : @visites@', - 'info_popularite_4' => 'popularité : @popularite@ ; visites : @visites@', 'info_post_scriptum' => 'Post-Scriptum', 'info_post_scriptum_2' => 'Post-scriptum :', 'info_pour' => 'pour', - 'info_preview_admin' => 'Seuls les administrateurs peuvent prévisualiser le site', - 'info_preview_comite' => 'Tous les rédacteurs peuvent prévisualiser le site', - 'info_preview_desactive' => 'La prévisualisation est totalement désactivée', - 'info_preview_texte' => 'Il est possible de prévisualiser le site comme si tous les articles et les brèves (ayant au moins le statut « proposé ») étaient publiés. Cette possibilité doit-elle être ouverte aux administrateurs seulement, à tous les rédacteurs, ou à personne ?', - 'info_principaux_correspondants' => 'Vos principaux correspondants', + 'info_preview_texte' => 'Il est possible de prévisualiser les différents éléments éditoriaux du site ayant au moins le statut « proposé », ainsi que les éléments en cours de rédaction dont on est l’auteur. Cette fonctionnalité doit-elle être disponible pour les administrateurs, les rédacteurs, ou personne ?', 'info_procedez_par_etape' => 'procédez étape par étape', 'info_procedure_maj_version' => 'la procédure de mise à jour doit être lancée afin d’adapter la base de données à la nouvelle version de SPIP.', @@ -503,14 +430,9 @@ exige d’avoir un accès FTP au site Web.

    ', hébergeurs désactivent l’envoi de mails depuis leurs serveurs : dans ce cas, l’inscription automatique est impossible.', - 'info_question_utilisation_moteur_recherche' => 'Souhaitez-vous utiliser le moteur de recherche intégré à SPIP ? - (le désactiver accélère le fonctionnement du système.)', - 'info_question_vignettes_referer_non' => 'Ne pas afficher les captures des sites d’origine des visites', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', 'info_racine_site' => 'Racine du site', 'info_recharger_page' => 'Veuillez recharger cette page dans quelques instants.', - 'info_recherche_auteur_a_affiner' => 'Trop de résultats pour "@cherche_auteur@" ; veuillez affiner la recherche.', - 'info_recherche_auteur_ok' => 'Plusieurs rédacteurs trouvés pour "@cherche_auteur@" :', 'info_recherche_auteur_zero' => 'Aucun résultat pour « @cherche_auteur@ ».', 'info_recommencer' => 'Veuillez recommencer.', 'info_redacteur_1' => 'Rédacteur', @@ -519,7 +441,7 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_redaction_en_cours' => 'EN COURS DE RÉDACTION', 'info_redirection' => 'Redirection', 'info_redirection_activee' => 'La redirection est activée.', - 'info_redirection_boucle' => 'Vous essayez de rediriger l\'article sur lui-même.', + 'info_redirection_boucle' => 'Vous essayez de rediriger l’article sur lui-même.', 'info_redirection_desactivee' => 'La redirection a été supprimée.', 'info_refuses' => 'Vos articles refusés', 'info_reglage_ldap' => 'Options : Réglage de l’importation LDAP', @@ -530,7 +452,6 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_rubriques' => 'Rubriques', 'info_rubriques_02' => 'rubriques', 'info_rubriques_trouvees' => 'Rubriques trouvées', - 'info_rubriques_trouvees_dans_texte' => 'Rubriques trouvées (dans le texte)', 'info_sans_titre' => 'Sans titre', 'info_selection_chemin_acces' => 'Sélectionnez ci-après le chemin d’accès dans l’annuaire :', 'info_signatures' => 'signatures', @@ -543,14 +464,12 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_sites_lies_mot' => 'Les sites référencés liés à ce mot-clé', 'info_sites_proxy' => 'Utiliser un proxy', 'info_sites_trouves' => 'Sites trouvés', - 'info_sites_trouves_dans_texte' => 'Sites trouvés (dans le texte)', 'info_sous_titre' => 'Soustitre :', 'info_statut_administrateur' => 'Administrateur', 'info_statut_auteur' => 'Statut de cet auteur :', 'info_statut_auteur_2' => 'Je suis', 'info_statut_auteur_a_confirmer' => 'Inscription à confirmer', 'info_statut_auteur_autre' => 'Autre statut :', - 'info_statut_efface' => 'Effacé', 'info_statut_redacteur' => 'Rédacteur', 'info_statut_utilisateurs_1' => 'Statut par défaut des utilisateurs importés', 'info_statut_utilisateurs_2' => 'Choisissez le statut qui est attribué aux personnes présentes dans l’annuaire LDAP lorsqu’elles se connectent pour la première fois. Vous pourrez par la suite modifier cette valeur pour chaque auteur au cas par cas.', @@ -573,7 +492,6 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_tous_articles_presents' => 'Tous les articles publiés dans cette rubrique', 'info_tous_articles_refuses' => 'Tous les articles refusés', 'info_tous_les' => 'tous les :', - 'info_tous_redacteurs' => 'Annonces à tous les rédacteurs', 'info_tout_site' => 'Tout le site', 'info_tout_site2' => 'L’article n’a pas été traduit dans cette langue.', 'info_tout_site3' => 'L’article a été traduit dans cette langue, mais des modifications ont été apportées par la suite à l’article de référence. La traduction doit être mise à jour.', @@ -590,7 +508,7 @@ dans une couleur qui indique leur état :', 'info_une_rubrique_02' => '1 rubrique', 'info_url' => 'URL :', 'info_url_proxy' => 'URL du proxy', - 'info_url_site' => 'URL DU SITE :', + 'info_url_proxy_pas_conforme' => 'l’URL du proxy n’est pas valide.', 'info_url_site_pas_conforme' => 'l’URL du site n’est pas valide.', 'info_url_test_proxy' => 'URL de test', 'info_urlref' => 'Lien hypertexte :', @@ -602,7 +520,6 @@ dans une couleur qui indique leur état :', 'info_visiteurs_02' => 'Visiteurs du site public', 'info_webmestre_forces' => 'Les webmestres sont actuellement définis dans @file_options@.', 'install_adresse_base_hebergeur' => 'Adresse de la base de données attribuée par l’hébergeur', - 'install_base_ok' => 'La base @base@ a été reconnue', 'install_connect_ok' => 'La nouvelle base a bien été déclarée sous le nom de serveur @connect@.', 'install_echec_annonce' => 'L’installation va probablement échouer, ou aboutir à un site non fonctionnel...', 'install_extension_mbstring' => 'SPIP ne fonctionne pas avec :', @@ -615,7 +532,6 @@ dans une couleur qui indique leur état :', 'install_select_langue' => 'Sélectionnez une langue puis cliquez sur le bouton « suivant » pour lancer la procédure d’installation.', 'install_select_type_db' => 'Indiquer le type de base de données :', 'install_select_type_mysql' => 'MySQL', - 'install_select_type_mysqli' => 'MySQLi', 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', @@ -632,8 +548,6 @@ dans une couleur qui indique leur état :', 'item_activer_messages_avertissement' => 'Activer les messages d’avertissement', 'item_administrateur_2' => 'administrateur', 'item_afficher_calendrier' => 'Afficher dans le calendrier', - 'item_autoriser_documents_joints' => 'Autoriser les documents joints aux articles', - 'item_autoriser_documents_joints_rubriques' => 'Autoriser les documents dans les rubriques', 'item_autoriser_syndication_integrale' => 'Diffuser l’intégralité des articles dans les fichiers de syndication', 'item_choix_administrateurs' => 'les administrateurs', 'item_choix_generation_miniature' => 'Générer automatiquement les miniatures des images.', @@ -641,7 +555,6 @@ dans une couleur qui indique leur état :', 'item_choix_redacteurs' => 'les rédacteurs', 'item_choix_visiteurs' => 'les visiteurs du site public', 'item_creer_fichiers_authent' => 'Créer les fichiers .htpasswd', - 'item_limiter_recherche' => 'Limiter la recherche aux informations contenues dans votre site', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Activer la messagerie et l’agenda', 'item_mots_cles_association_articles' => 'aux articles', @@ -651,22 +564,15 @@ dans une couleur qui indique leur état :', 'item_non_accepter_inscriptions' => 'Ne pas accepter les inscriptions', 'item_non_activer_messages_avertissement' => 'Pas de messages d’avertissement', 'item_non_afficher_calendrier' => 'Ne pas afficher dans le calendrier', - 'item_non_autoriser_documents_joints' => 'Ne pas autoriser les documents dans les articles', - 'item_non_autoriser_documents_joints_rubriques' => 'Ne pas autoriser les documents dans les rubriques', 'item_non_autoriser_syndication_integrale' => 'Ne diffuser qu’un résumé', - 'item_non_compresseur' => 'Désactiver la compression', 'item_non_creer_fichiers_authent' => 'Ne pas créer ces fichiers', - 'item_non_gerer_statistiques' => 'Ne pas gérer les statistiques', - 'item_non_limiter_recherche' => 'Étendre la recherche au contenu des sites référencés', 'item_non_messagerie_agenda' => 'Désactiver la messagerie et l’agenda', 'item_non_publier_articles' => 'Ne pas publier les articles avant la date de publication fixée.', - 'item_non_utiliser_moteur_recherche' => 'Ne pas utiliser le moteur', 'item_nouvel_auteur' => 'Nouvel auteur', 'item_nouvelle_rubrique' => 'Nouvelle rubrique', 'item_oui' => 'Oui', 'item_publier_articles' => 'Publier les articles, quelle que soit leur date de publication.', 'item_reponse_article' => 'Réponse à l’article', - 'item_utiliser_moteur_recherche' => 'Utiliser le moteur de recherche', 'item_version_html_max_html4' => 'Se limiter au HTML4 sur le site public', 'item_version_html_max_html5' => 'Permettre le HTML5', 'item_visiteur' => 'visiteur', @@ -678,32 +584,31 @@ dans une couleur qui indique leur état :', 'label_bando_outils' => 'Barre d’outils', 'label_bando_outils_afficher' => 'Afficher les outils', 'label_bando_outils_masquer' => 'Masquer les outils', - 'label_choix_langue' => 'Selectionnez votre langue', + 'label_choix_langue' => 'Sélectionnez votre langue', 'label_nom_fichier_connect' => 'Indiquez le nom utilisé pour ce serveur', 'label_slogan_site' => 'Slogan du site', - 'label_taille_ecran' => 'Largeur de l’ecran', + 'label_taille_ecran' => 'Largeur de l’écran', 'label_texte_et_icones_navigation' => 'Menu de navigation', 'label_texte_et_icones_page' => 'Affichage dans la page', 'ldap_correspondance' => 'héritage du champ @champ@', 'ldap_correspondance_1' => 'Héritage des champs LDAP', 'ldap_correspondance_2' => 'Pour chacun des champs SPIP suivants, indiquer le nom du champ LDAP correspondant. Laisser vide pour ne pas le remplir, séparer par des espaces ou des virgules pour essayer plusieurs champs LDAP.', - 'lien_ajout_destinataire' => 'Ajouter ce destinataire', 'lien_ajouter_auteur' => 'Ajouter cet auteur', - 'lien_ajouter_participant' => 'Ajouter un participant', 'lien_ajouter_une_rubrique' => 'Ajouter cette rubrique', 'lien_email' => 'email', 'lien_nom_site' => 'NOM DU SITE :', + 'lien_rapide_contenu' => 'Aller au contenu', + 'lien_rapide_navigation' => 'Aller à la navigation', + 'lien_rapide_recherche' => 'Aller à la recherche', 'lien_retirer_auteur' => 'Retirer l’auteur', 'lien_retirer_rubrique' => 'Retirer la rubrique', 'lien_retirer_tous_auteurs' => 'Retirer tous les auteurs', 'lien_retirer_toutes_rubriques' => 'Retirer toutes les rubriques', - 'lien_retrait_particpant' => 'retirer ce participant', 'lien_site' => 'site', - 'lien_supprimer_rubrique' => 'supprimer cette rubrique', + 'lien_tout_decocher' => 'Tout décocher', 'lien_tout_deplier' => 'Tout déplier', 'lien_tout_replier' => 'Tout replier', 'lien_tout_supprimer' => 'Tout supprimer', - 'lien_tout_decocher' => 'Tout décocher', 'lien_trier_nom' => 'Trier par nom', 'lien_trier_nombre_articles' => 'Trier par nombre d’articles', 'lien_trier_statut' => 'Trier par statut', @@ -725,14 +630,13 @@ dans une couleur qui indique leur état :', 'mois_non_connu' => 'non connu', // N - 'nouvelle_version_spip' => 'La version @version@ de SPIP est disponible', - 'nouvelle_version_spip_majeure' => 'Une nouvelle version majeure @version@ est disponible', + 'nouvelle_version_spip' => 'La mise à jour @version@ de SPIP est disponible', + 'nouvelle_version_spip_majeure' => 'Une nouvelle version SPIP @version@ est disponible', // O 'onglet_contenu' => 'Contenu', 'onglet_declarer_une_autre_base' => 'Déclarer une autre base', 'onglet_discuter' => 'Discuter', - 'onglet_documents' => 'Documents', 'onglet_interactivite' => 'Interactivité', 'onglet_proprietes' => 'Propriétés', 'onglet_repartition_actuelle' => 'actuellement', @@ -741,6 +645,7 @@ dans une couleur qui indique leur état :', // P 'page_pas_proxy' => 'Cette page ne doit pas passer par le proxy', 'pas_de_proxy_pour' => 'Au besoin, indiquez les machines ou domaines pour lesquels ce proxy ne doit pas s’appliquer (par exemple : @exemple@)', + 'phpinfo' => 'Configuration PHP', 'plugin_charge_paquet' => 'Chargement du paquet @name@', 'plugin_charger' => 'Télécharger', 'plugin_erreur_charger' => 'erreur : impossible de charger @zip@', @@ -775,8 +680,11 @@ dans une couleur qui indique leur état :', 'plugin_info_telecharger' => 'à télécharger depuis @url@ et à installer dans @rep@', 'plugin_info_upgrade_ok' => 'Mise à jour réussie', 'plugin_librairies_installees' => 'Librairies installées', + 'plugin_necessite_extension_php' => 'Nécessite l’extension PHP @plugin@ en version @version@.', + 'plugin_necessite_extension_php_sans_version' => 'Nécessite l’extension PHP @plugin@', 'plugin_necessite_lib' => 'Ce plugin nécessite la librairie @lib@', - 'plugin_necessite_plugin' => 'Nécessite le plugin @plugin@ en version @version@ minimum.', + 'plugin_necessite_php' => 'Nécessite @plugin@ en version @version@.', + 'plugin_necessite_plugin' => 'Nécessite le plugin @plugin@ en version @version@.', 'plugin_necessite_plugin_sans_version' => 'Nécessite le plugin @plugin@', 'plugin_necessite_spip' => 'Nécessite SPIP en version @version@ minimum.', 'plugin_source' => 'source : ', @@ -784,6 +692,9 @@ dans une couleur qui indique leur état :', 'plugin_titre_automatique_ajouter' => 'Ajouter des plugins', 'plugin_titre_installation' => 'Installation du plugin @plugin@', 'plugin_titre_modifier' => 'Mes plugins', + 'plugin_utilise_extension_php' => 'Utilise l’extension PHP @plugin@ en version @version@.', + 'plugin_utilise_php' => 'Utilise @plugin@ en version @version@.', + 'plugin_utilise_plugin' => 'Utilise le plugin @plugin@ en version @version@.', 'plugin_zip_active' => 'Continuez pour l’activer', 'plugin_zip_adresse' => 'indiquez ci-dessous l’adresse d’un fichier zip de plugin à télécharger, ou encore l’adresse d’une liste de plugins.', 'plugin_zip_adresse_champ' => 'Adresse du plugin ou de la liste ', @@ -810,7 +721,7 @@ dans une couleur qui indique leur état :', // Q 'queue_executer_maintenant' => 'Exécuter maintenant', - 'queue_info_purger' => 'Vous pouvez supprimer tous les travaux en attente et ré-initialiser la liste avec les travaux périodiques', + 'queue_info_purger' => 'Vous pouvez supprimer tous les travaux en attente et réinitialiser la liste avec les travaux périodiques', 'queue_nb_jobs_in_queue' => '@nb@ travaux en attente', 'queue_next_job_in_nb_sec' => 'Prochain travail dans @nb@ s', 'queue_no_job_in_queue' => 'Aucun travail en attente', @@ -820,6 +731,7 @@ dans une couleur qui indique leur état :', // R 'repertoire_plugins' => 'Répertoire :', + 'required' => ' (obligatoire)', // S 'sans_heure' => 'sans heure', @@ -849,18 +761,13 @@ réinstallation de SPIP pour recréer une nouvelle base ainsi qu’un premier ac 'texte_article_virtuel_reference' => 'Article virtuel : article référencé dans votre site SPIP, mais redirigé vers une autre URL. Pour supprimer la redirection, effacez l’URL ci-dessus.', 'texte_aucun_resultat_auteur' => 'Aucun résultat pour "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Ce site peut vous indiquer en permanence la liste des rédacteurs connectés, ce qui vous permet d’échanger des messages en direct. Vous pouvez décider de ne pas apparaître dans cette liste (vous êtes « invisible » pour les autres utilisateurs).', - 'texte_auteur_messagerie_1' => 'Ce site permet l’échange de messages et la constitution de forums de discussion privés entre les participants du site. Vous pouvez décider de ne pas participer à ces échanges.', 'texte_auteurs' => 'LES AUTEURS', 'texte_choix_base_1' => 'Choisissez votre base :', 'texte_choix_base_2' => 'Le serveur SQL contient plusieurs bases de données.', 'texte_choix_base_3' => 'Sélectionnez ci-après celle qui vous a été attribuée par votre hébergeur :', 'texte_choix_table_prefix' => 'Préfixe des tables :', - 'texte_commande_vider_tables_indexation' => 'Utilisez cette commande afin de vider les tables d’indexation utilisées - par le moteur de recherche intégré à SPIP. Cela vous permettra - de gagner de l’espace disque.', 'texte_compatibilite_html' => 'Vous pouvez demander à SPIP de produire, sur le site public, du code compatible avec la norme HTML4, ou lui permettre d’utiliser les possibilités plus modernes du HTML5.', 'texte_compatibilite_html_attention' => 'Il n’y a aucun risque à activer l’option HTML5, mais si vous le faites, les pages de votre site devront commencer par la mention suivante pour rester valides : < !DOCTYPE html>.', - 'texte_compresse_ou_non' => '(celui-ci peut être compressé ou non)', 'texte_compte_element' => '@count@ élément', 'texte_compte_elements' => '@count@ éléments', 'texte_conflit_edition_correction' => 'Veuillez contrôler ci-dessous les différences entre les deux versions du texte ; vous pouvez aussi copier vos modifications, puis recommencer.', @@ -879,10 +786,9 @@ réinstallation de SPIP pour recréer une nouvelle base ainsi qu’un premier ac 'texte_date_publication_anterieure_nonaffichee' => 'Ne pas afficher de date de rédaction antérieure.', 'texte_date_publication_article' => 'DATE DE PUBLICATION EN LIGNE :', 'texte_date_publication_objet' => 'Date de publication en ligne :', - 'texte_descriptif_petition' => 'Descriptif de la pétition', + 'texte_definir_comme_traduction_rubrique' => 'Cette rubrique est une traduction de la rubrique numéro :', 'texte_descriptif_rapide' => 'Descriptif rapide', 'texte_effacer_base' => 'Effacer la base de données SPIP', - 'texte_effacer_donnees_indexation' => 'Effacer les données d’indexation', 'texte_effacer_statistiques' => 'Effacer les statistiques', 'texte_en_cours_validation' => 'Les contenus ci-dessous sont en attente de validation.', 'texte_enrichir_mise_a_jour' => 'Vous pouvez enrichir la mise en page de votre texte en utilisant des « raccourcis typographiques ».', @@ -894,30 +800,19 @@ réinstallation de SPIP pour recréer une nouvelle base ainsi qu’un premier ac 'texte_informations_personnelles_2' => '(Note : il s’agit d’une réinstallation, si votre accès marche toujours vous pouvez', 'texte_introductif_article' => '(Texte introductif de l’article.)', 'texte_jeu_caractere' => 'Il est conseillé d’employer, sur votre site, l’alphabet universel (utf-8) : celui-ci permet l’affichage de textes dans toutes les langues, et ne pose plus de problèmes de compatibilité avec les navigateurs modernes.', - 'texte_jeu_caractere_2' => 'Attention : ce réglage ne provoque pas la conversion des textes déjà enregistrés dans la base de données.', 'texte_jeu_caractere_3' => 'Votre site est actuellement installé dans le jeu de caractères :', 'texte_jeu_caractere_4' => 'Si cela ne correspond pas à la réalité de vos données (suite, par exemple, à une restauration de base de données), ou si vous démarrez ce site et souhaitez partir sur un autre jeu de caractères, veuillez indiquer ce dernier ici :', - 'texte_jeu_caractere_conversion' => 'Note : vous pouvez décider de convertir une fois pour toutes l’ensemble des textes de votre site (articles, brèves, forums, etc.) vers l’alphabet utf-8, en vous rendant sur la page de conversion vers l’utf-8.', - 'texte_lien_hypertexte' => '(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, veuillez indiquer ci-après le titre de la page et son adresse URL.)', 'texte_login_ldap_1' => '(Laisser vide pour un accès anonyme, ou entrer le chemin complet, par exemple « uid=dupont, ou=users, dc=mon-domaine, dc=com ».)', 'texte_login_precaution' => 'Attention ! Ceci est le login sous lequel vous êtes connecté actuellement. Utilisez ce formulaire avec précaution...', - 'texte_message_edit' => 'Attention : ce message peut être modifié par tous les administrateurs du site, et est visible par tous les rédacteurs. N’utilisez les annonces que pour exposer des événements importants de la vie du site.', 'texte_messagerie_agenda' => 'Une messagerie permet aux rédacteurs du site de communiquer entre eux directement dans l’espace privé du site. Elle est associée à un agenda.', 'texte_mise_a_niveau_base_1' => 'Vous venez de mettre à jour les fichiers SPIP. Il faut maintenant mettre à niveau la base de données du site.', 'texte_modifier_article' => 'Modifier l’article :', - 'texte_moteur_recherche_active' => 'Le moteur de recherche est activé. Utilisez cette commande - si vous souhaitez procéder à une réindexation rapide (après restauration - d’une sauvegarde par exemple). Notez que les documents modifiés de - façon normale (depuis l’interface SPIP) sont automatiquement - réindexés : cette commande n’est donc utile que de façon exceptionnelle.', - 'texte_moteur_recherche_non_active' => 'Le moteur de recherche n’est pas activé.', 'texte_multilinguisme' => 'Si vous souhaitez gérer des objets en plusieurs langues, avec une navigation complexe, vous pouvez ajouter un menu de sélection de langue sur ces objets, en fonction de l’organisation de votre site.', 'texte_multilinguisme_trad' => 'Vous pouvez également activer un système de gestion de liens entre les différentes traductions sur certains objets.', 'texte_non_compresse' => 'non compressé (votre serveur ne supportant pas cette fonctionnalité)', - 'texte_nouveau_message' => 'Nouveau message', 'texte_nouvelle_version_spip_1' => 'Vous avez installé une nouvelle version de SPIP.', 'texte_nouvelle_version_spip_2' => 'Cette nouvelle version nécessite une mise à jour plus complète qu’à l’accoutumée. Si vous êtes webmestre du site, veuillez effacer le fichier @connect@ et reprendre l’installation afin de mettre à jour vos paramètres de connexion à la base de données.

    (NB. : si vous avez oublié vos paramètres de connexion, jetez un œil au fichier @connect@ avant de le supprimer...)

    ', 'texte_operation_echec' => 'Retournez à la page précédente, sélectionnez une autre base ou créez-en une nouvelle. Vérifiez les informations fournies par votre hébergeur.', @@ -933,7 +828,6 @@ réinstallation de SPIP pour recréer une nouvelle base ainsi qu’un premier ac 'texte_rappel_selection_champs' => '[N’oubliez pas de sélectionner correctement ce champ.]', 'texte_recalcul_page' => 'Si vous voulez recalculer une seule page, passez plutôt par l’espace public et utilisez-y le bouton « recalculer ».', - 'texte_recapitiule_liste_documents' => 'Cette page récapitule la liste des documents que vous avez placés dans les rubriques. Pour modifier les informations de chaque document, suivez le lien vers la page de sa rubrique.', 'texte_recuperer_base' => 'Réparer la base de données', 'texte_reference_mais_redirige' => 'article référencé dans votre site SPIP, mais redirigé vers une autre URL.', 'texte_requetes_echouent' => 'Lorsque certaines requêtes SQL échouent @@ -962,7 +856,6 @@ dans le cache SPIP. Cela permet par exemple de forcer un recalcul de toutes les avez fait des modifications importantes de graphisme ou de structure du site.', 'texte_sur_titre' => 'Sur-titre', 'texte_table_ok' => ' : cette table est OK.', - 'texte_tables_indexation_vides' => 'Les tables d’indexation du moteur sont vides.', 'texte_tentative_recuperation' => 'Tentative de réparation', 'texte_tenter_reparation' => 'Tenter une réparation de la base de données', 'texte_test_proxy' => 'Pour faire un essai de ce proxy, indiquez ici l’adresse d’un site Web @@ -977,31 +870,12 @@ avez fait des modifications importantes de graphisme ou de structure du site.', Cette option est désactivée par défaut afin d’éviter d’afficher des messages d’avertissement intempestifs.', - 'texte_trop_resultats_auteurs' => 'Trop de résultats pour "@cherche_auteur@" ; veuillez affiner la recherche.', - 'texte_unpack' => 'téléchargement de la dernière version', - 'texte_utilisation_moteur_syndiques' => 'Lorsque vous utilisez le moteur de recherche intégré - à SPIP, vous pouvez effectuer les recherches sur les sites et - les articles syndiqués de deux manières - différentes.
    - La plus - simple consiste à rechercher uniquement dans les - titres et les descriptifs des articles.
    - - Une seconde méthode, beaucoup plus puissante, permet - à SPIP de rechercher également dans le texte des - sites référencés . Si vous - référencez un site, SPIP va alors effectuer la - recherche dans le texte du site lui-même.', - 'texte_utilisation_moteur_syndiques_2' => 'Cette méthode oblige SPIP à visiter - régulièrement les sites référencés, - ce qui peut provoquer un léger ralentissement de votre propre - site.', 'texte_vide' => 'vide', 'texte_vider_cache' => 'Vider le cache', - 'titre_admin_effacer' => 'Maintenance technique', 'titre_admin_tech' => 'Maintenance technique', 'titre_admin_vider' => 'Maintenance technique', 'titre_ajouter_un_auteur' => 'Ajouter un auteur', 'titre_ajouter_un_mot' => 'Ajouter un mot-clé', - 'titre_ajouter_une_rubrique' => 'Ajouter une rubrique', 'titre_cadre_afficher_article' => 'Afficher les articles', 'titre_cadre_afficher_traductions' => 'Afficher l’état des traductions pour les langues suivantes :', 'titre_cadre_ajouter_auteur' => 'AJOUTER UN AUTEUR :', @@ -1016,6 +890,7 @@ avez fait des modifications importantes de graphisme ou de structure du site.', 'titre_config_langage' => 'Configurer la langue', 'titre_configuration' => 'Configuration du site', 'titre_configurer_preferences' => 'Configurer vos préférences', + 'titre_configurer_preferences_menus' => 'Configurer vos préférences de menus', 'titre_conflit_edition' => 'Conflit lors de l’édition', 'titre_connexion_ldap' => 'Options : Votre connexion LDAP', 'titre_groupe_mots' => 'GROUPE DE MOTS :', @@ -1028,54 +903,28 @@ avez fait des modifications importantes de graphisme ou de structure du site.', 'titre_naviguer_dans_le_site' => 'Naviguer dans le site...', 'titre_nouvelle_rubrique' => 'Nouvelle rubrique', 'titre_numero_rubrique' => 'RUBRIQUE NUMÉRO :', - 'titre_page_admin_effacer' => 'Maintenance technique : effacer la base', 'titre_page_articles_edit' => 'Modifier : @titre@', 'titre_page_articles_page' => 'Les articles', 'titre_page_articles_tous' => 'Tout le site', - 'titre_page_auteurs' => 'Visiteurs', 'titre_page_calendrier' => 'Calendrier @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Configuration du site', - 'titre_page_config_fonctions' => 'Configuration du site', - 'titre_page_configuration' => 'Configuration du site', - 'titre_page_controle_petition' => 'Suivi des pétitions', 'titre_page_delete_all' => 'suppression totale et irréversible', - 'titre_page_documents_liste' => 'Les documents des rubriques', - 'titre_page_index' => 'Votre espace privé', - 'titre_page_message_edit' => 'Rédiger un message', - 'titre_page_messagerie' => 'Votre messagerie', 'titre_page_recherche' => 'Résultats de la recherche @recherche@', 'titre_page_statistiques_referers' => 'Statistiques (liens entrants)', - 'titre_page_statistiques_signatures_jour' => 'Nombre de signatures par jour', - 'titre_page_statistiques_signatures_mois' => 'Nombre de signatures par mois', 'titre_page_upgrade' => 'Mise à niveau de SPIP', + 'titre_preference_menus_favoris' => 'Menus favoris', 'titre_publication_articles_post_dates' => 'Publication des articles post-datés', - 'titre_referencer_site' => 'Référencer le site :', - 'titre_rendez_vous' => 'RENDEZ-VOUS :', 'titre_reparation' => 'Réparation', 'titre_suivi_petition' => 'Suivi des pétitions', 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'Il n’y a pas d’article portant ce numéro.', 'trad_article_traduction' => 'Toutes les versions de cet article :', - 'trad_deja_traduit' => 'Erreur : impossible de relier cet article au numéro demandé. ', 'trad_delier' => 'Ne plus lier à ces traductions', 'trad_lier' => 'Cet article est une traduction de l’article numéro :', 'trad_new' => 'Écrire une nouvelle traduction', // U - 'upload_info_mode_document' => 'Déposer cette image dans le portfolio', - 'upload_info_mode_image' => 'Retirer cette image du portfolio', - 'utf8_convert_attendez' => 'Attendez quelques instants et rechargez cette page.', - 'utf8_convert_avertissement' => 'Vous vous apprêtez à convertir le contenu de votre base de données (articles, brèves, etc) du jeu de caractères @orig@ vers le jeu de caractères @charset@.', - 'utf8_convert_backup' => 'N’oubliez pas de faire auparavant une sauvegarde complète de votre site. Vous devrez aussi vérifier que vos squelettes et fichiers de langue sont compatibles @charset@.', - 'utf8_convert_erreur_deja' => 'Votre site est déjà en @charset@, inutile de le convertir...', 'utf8_convert_erreur_orig' => 'Erreur : le jeu de caractères @charset@ n’est pas supporté.', - 'utf8_convert_termine' => 'C’est terminé !', - 'utf8_convert_timeout' => 'Important : en cas de timeout du serveur, veuillez recharger la page jusqu’à ce qu’elle indique « terminé ».', - 'utf8_convert_verifier' => 'Vous devez maintenant aller vider le cache, et vérifier que tout se passe bien sur les pages publiques du site. En cas de gros problème, une sauvegarde de vos données a été réalisée (au format SQL) dans le répertoire @rep@.', - 'utf8_convertir_votre_site' => 'Convertir votre site en utf-8', // V 'version' => 'Version :' ); - -?> diff --git a/www/ecrire/lang/ecrire_fr_fem.php b/www/ecrire/lang/ecrire_fr_fem.php old mode 100755 new mode 100644 index 1dd171f3..a3157101 --- a/www/ecrire/lang/ecrire_fr_fem.php +++ b/www/ecrire/lang/ecrire_fr_fem.php @@ -1,9 +1,11 @@ 'Affichage', 'aide_non_disponible' => 'Cette partie de l’aide en ligne n’est pas encore disponible dans cette langue.', 'annuler_recherche' => 'Annuler la recherche', - 'auteur' => 'Auteure :', + 'auteur' => 'Autrice :', 'avis_acces_interdit' => 'Accès interdit.', 'avis_article_modifie' => 'Attention, @nom_auteur_modif@ a travaillé sur cet article il y a @date_diff@ minutes', 'avis_aucun_resultat' => 'Aucun résultat.', @@ -22,81 +24,51 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_connexion_echec_1' => 'La connexion à la base de données a échoué.', 'avis_connexion_echec_2' => 'Revenez à la page précédente, et vérifiez les informations que vous avez fournies.', 'avis_connexion_echec_3' => 'N.B. Sur de nombreux serveurs, vous devez demander l’activation de votre accès à la base de données avant de pouvoir l’utiliser. Si vous ne pouvez vous connecter, vérifiez que vous avez effectué cette démarche.', + 'avis_connexion_erreur_creer_base' => 'La base de données n’a pas pu être créée.', 'avis_connexion_erreur_nom_base' => 'Le nom de la base ne peut contenir que des lettres, des chiffres et des tirets', 'avis_connexion_ldap_echec_1' => 'La connexion au serveur LDAP a échoué.', 'avis_connexion_ldap_echec_2' => 'Revenez à la page précédente, et vérifiez les informations que vous avez fournies.', 'avis_connexion_ldap_echec_3' => 'Alternativement, n’utilisez pas le support LDAP pour importer des utilisatrices.', 'avis_deplacement_rubrique' => 'Attention ! Cette rubrique contient @contient_breves@ brève@scb@ : si vous la déplacez, veuillez cocher cette case de confirmation.', - 'avis_destinataire_obligatoire' => 'Vous devez indiquer une destinataire avant d’envoyer ce message.', 'avis_erreur_connexion_mysql' => 'Erreur de connexion SQL', - 'avis_erreur_version_archive' => 'Attention ! Le fichier @archive@ correspond à - une autre version de SPIP que celle que vous avez - installée. Vous allez au-devant de grosses - difficultés : risque de destruction de votre base de - données, dysfonctionnements divers du site, etc. Ne - validez pas cette demande d’importation.

    Pour plus - d’informations, voyez - la documentation de SPIP.

    ', - 'avis_espace_interdit' => 'Espace interdit
    SPIP est déjà installé.
    ', + 'avis_espace_interdit' => 'Espace interdit
    SPIP est déjà installé.
    ', 'avis_lecture_noms_bases_1' => 'Le programme d’installation n’a pas pu lire les noms des bases de données installées.', 'avis_lecture_noms_bases_2' => 'Soit aucune base n’est disponible, soit la fonction permettant de lister les bases a été désactivée pour des raisons de sécurité (ce qui est le cas chez de nombreux hébergeurs).', 'avis_lecture_noms_bases_3' => 'Dans la seconde alternative, il est probable qu’une base portant votre nom de login soit utilisable :', - 'avis_non_acces_message' => 'Vous n’avez pas accès à ce message.', 'avis_non_acces_page' => 'Vous n’avez pas accès à cette page.', 'avis_operation_echec' => 'L’opération a échoué.', 'avis_operation_impossible' => 'Opération impossible', - 'avis_probleme_archive' => 'Problème de lecture du fichier @archive@', 'avis_suppression_base' => 'ATTENTION, la suppression des données est irréversible', - 'avis_version_mysql' => 'Votre serveur SQL (@version_mysql@) ne permet pas l’auto-réparation des tables de la base.', // B 'bouton_acces_ldap' => 'Ajouter l’accès à LDAP', 'bouton_ajouter' => 'Ajouter', - 'bouton_ajouter_participant' => 'AJOUTER UNE PARTICIPANTE :', - 'bouton_annonce' => 'ANNONCE', 'bouton_annuler' => 'Annuler', 'bouton_cache_activer' => 'Réactiver le cache', 'bouton_cache_desactiver' => 'Désactiver temporairement le cache', - 'bouton_checkbox_envoi_message' => 'possibilité d’envoyer un message', - 'bouton_checkbox_indiquer_site' => 'indiquer obligatoirement un site Web', - 'bouton_checkbox_signature_unique_email' => 'une seule signature par adresse email', - 'bouton_checkbox_signature_unique_site' => 'une seule signature par site Web', 'bouton_demande_publication' => 'Demander la publication de cet article', 'bouton_desactive_tout' => 'Tout désactiver', 'bouton_desinstaller' => 'Désinstaller', - 'bouton_effacer_index' => 'Effacer les index', 'bouton_effacer_tout' => 'Effacer TOUT', - 'bouton_envoi_message_02' => 'ENVOYER UN MESSAGE', 'bouton_envoyer_message' => 'Message définitif : envoyer', 'bouton_fermer' => 'Fermer', 'bouton_mettre_a_jour_base' => 'Mettre à jour la base de données', 'bouton_modifier' => 'Modifier', - 'bouton_pense_bete' => 'PENSE-BÊTE À USAGE PERSONNEL', - 'bouton_radio_activer_messagerie' => 'Activer la messagerie interne', - 'bouton_radio_activer_messagerie_interne' => 'Activer la messagerie interne', - 'bouton_radio_activer_petition' => 'Activer la pétition', 'bouton_radio_afficher' => 'Afficher', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Apparaître dans la liste des rédactrices connectées', - 'bouton_radio_desactiver_messagerie' => 'Désactiver la messagerie', 'bouton_radio_envoi_annonces_adresse' => 'Envoyer les annonces à l’adresse :', 'bouton_radio_envoi_liste_nouveautes' => 'Envoyer la liste des nouveautés', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Ne pas apparaître dans la liste des rédactrices', 'bouton_radio_non_envoi_annonces_editoriales' => 'Ne pas envoyer d’annonces éditoriales', - 'bouton_radio_pas_petition' => 'Pas de pétition', - 'bouton_radio_petition_activee' => 'Pétition activée', - 'bouton_radio_supprimer_petition' => 'Supprimer la pétition', 'bouton_redirection' => 'REDIRECTION', 'bouton_relancer_installation' => 'Relancer l’installation', 'bouton_suivant' => 'Suivant', 'bouton_tenter_recuperation' => 'Tenter une réparation', 'bouton_test_proxy' => 'Essayer le proxy', 'bouton_vider_cache' => 'Vider le cache', - 'bouton_voir_message' => 'Voir ce message avant de le valider', // C - 'cache_mode_compresse' => 'Les fichiers du cache sont enregistrés en mode compressé.', - 'cache_mode_non_compresse' => 'Les fichiers du cache sont enregistrés en mode non compressé.', 'cache_modifiable_webmestre' => 'Ce paramètre est modifiable par la webmestre du site.', 'calendrier_synchro' => 'Si vous utilisez un logiciel d’agenda compatible iCal, vous pouvez le synchroniser avec les informations de ce site.', 'config_activer_champs' => 'Activer les champs suivants', @@ -115,9 +87,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_titre_base_sup' => 'Déclaration d’une base supplémentaire', 'config_titre_base_sup_choix' => 'Choisissez une base supplémentaire', 'connexion_ldap' => 'Connexion :', - 'copier_en_local' => 'Copier en local', - 'creer_et_associer_un_auteur' => 'Créer et associer une auteure', - 'creer_et_associer_une_rubrique' => 'Créer et associer une rubrique', + 'creer_et_associer_un_auteur' => 'Créer et associer une autrice', // D 'date_mot_heures' => 'heures', @@ -143,13 +113,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( Ces informations doivent pouvoir vous être fournies par l’administratrice du système, ou du réseau.', 'entree_infos_perso' => 'Qui êtes-vous ?', - 'entree_infos_perso_2' => 'Qui est l’auteure ?', + 'entree_infos_perso_2' => 'Qui est l’autrice ?', 'entree_interieur_rubrique' => 'À l’intérieur de la rubrique :', 'entree_liens_sites' => 'Lien hypertexte (référence, site à visiter...)', 'entree_login' => 'Votre login', 'entree_login_connexion_1' => 'Le login de connexion', 'entree_login_connexion_2' => '(Correspond parfois à votre login d’accès au FTP ; parfois laissé vide)', - 'entree_login_ldap' => 'Login LDAP initial', 'entree_mot_passe' => 'Votre mot de passe', 'entree_mot_passe_1' => 'Le mot de passe de connexion', 'entree_mot_passe_2' => '(Correspond parfois à votre mot de passe pour le FTP ; parfois laissé vide)', @@ -158,7 +127,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_nom_pseudo_1' => '(Votre nom ou votre pseudo)', 'entree_nom_pseudo_2' => 'Nom ou pseudo', 'entree_nom_site' => 'Le nom de votre site', - 'entree_nom_site_2' => 'Nom du site de l’auteure', + 'entree_nom_site_2' => 'Nom du site de l’autrice', 'entree_nouveau_passe' => 'Nouveau mot de passe', 'entree_passe_ldap' => 'Mot de passe', 'entree_port_annuaire' => 'Le numéro de port de l’annuaire', @@ -167,7 +136,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_url' => 'L’adresse (URL) de votre site', 'entree_url_2' => 'Adresse (URL) du site', 'erreur_connect_deja_existant' => 'Un serveur existe déjà avec ce nom', + 'erreur_email_deja_existant' => 'Cette adresse email est déjà enregistrée.', 'erreur_nom_connect_incorrect' => 'Ce nom de serveur n’est pas autorisé', + 'erreur_plugin_attribut_balise_manquant' => 'Attribut @attribut@ manquant dans la balise @balise@.', 'erreur_plugin_desinstalation_echouee' => 'La désinstallation du plugin a échoué. Vous pouvez néanmoins le désactiver.', 'erreur_plugin_fichier_absent' => 'Fichier absent', 'erreur_plugin_fichier_def_absent' => 'Fichier de définition absent', @@ -186,7 +157,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'Pour plus de renseignements sur toutes ces techniques, n’hésitez pas à consulter la documentation de SPIP.', 'ical_info_calendrier' => 'Deux calendriers sont à votre disposition. Le premier est un plan du site annonçant tous les articles publiés. Le second contient les annonces éditoriales ainsi que vos derniers messages privés : il vous est réservé grâce à une clé personnelle, que vous pouvez modifier à tout moment en renouvelant votre mot de passe.', 'ical_methode_http' => 'Téléchargement', - 'ical_methode_webcal' => 'Synchronisation (webcal ://)', + 'ical_methode_webcal' => 'Synchronisation (webcal://)', 'ical_texte_js' => 'Une ligne de javascript vous permet d’afficher très simplement, sur n’importe quel site vous appartenant, les articles récents publiés sur ce site.', 'ical_texte_prive' => 'Ce calendrier, à usage strictement personnel, vous informe de l’activité éditoriale privée de ce site (tâches et rendez-vous personnels, articles et brèves proposés...).', 'ical_texte_public' => 'Ce calendrier vous permet de suivre l’activité publique de ce site (articles et brèves publiés).', @@ -199,23 +170,20 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_activite' => 'Activité', 'icone_admin_plugin' => 'Gestion des plugins', 'icone_administration' => 'Maintenance', - 'icone_afficher_auteurs' => 'Afficher les auteures', + 'icone_afficher_auteurs' => 'Afficher les autrices', 'icone_afficher_visiteurs' => 'Afficher les visiteuses', 'icone_arret_discussion' => 'Ne plus participer à cette discussion', 'icone_calendrier' => 'Calendrier', 'icone_configuration' => 'Configuration', - 'icone_creer_auteur' => 'Créer une nouvelle auteure et l’associer à cet article', + 'icone_creer_auteur' => 'Créer une nouvelle autrice et l’associer à cet article', 'icone_creer_mot_cle' => 'Créer un nouveau mot-clé et le lier à cet article', - 'icone_creer_mot_cle_rubrique' => 'Créer un nouveau mot-clé et le lier à cette rubrique', - 'icone_creer_mot_cle_site' => 'Créer un nouveau mot-clé et le lier à ce site', 'icone_creer_rubrique_2' => 'Créer une nouvelle rubrique', + 'icone_developpement' => 'Développement', 'icone_edition' => 'Édition', - 'icone_envoyer_message' => 'Envoyer ce message', 'icone_ma_langue' => 'Ma langue', 'icone_mes_infos' => 'Mes informations', 'icone_mes_preferences' => 'Mes préférences', 'icone_modifier_article' => 'Modifier cet article', - 'icone_modifier_message' => 'Modifier ce message', 'icone_modifier_rubrique' => 'Modifier cette rubrique', 'icone_publication' => 'Publication', 'icone_relancer_signataire' => 'Relancer la signataire', @@ -228,24 +196,18 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_supprimer_signature' => 'Supprimer cette signature', 'icone_valider_signature' => 'Valider cette signature', 'image_administrer_rubrique' => 'Vous pouvez administrer cette rubrique', - 'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', - 'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', 'info_1_article' => '1 article', - 'info_1_article_syndique' => '1 article syndiqué', - 'info_1_auteur' => '1 auteure', + 'info_1_auteur' => '1 autrice', 'info_1_message' => '1 message', 'info_1_mot_cle' => '1 mot-clé', 'info_1_rubrique' => '1 rubrique', - 'info_1_site' => '1 site', 'info_1_visiteur' => '1 visiteuse', 'info_activer_cookie' => 'Vous pouvez activer un cookie de correspondance, ce qui vous permettra de passer facilement du site public au site privé.', + 'info_activer_menu_developpement' => 'Afficher le menu Développement', 'info_admin_etre_webmestre' => 'Me donner les droits de webmestre', - 'info_admin_gere_rubriques' => 'Cette administratrice gère les rubriques suivantes :', - 'info_admin_gere_toutes_rubriques' => 'Cette administratrice gère toutes les rubriques', - 'info_admin_gere_toutes_rubriques_2' => 'Je gère toutes les rubriques', 'info_admin_je_suis_webmestre' => 'Je suis webmestre', - 'info_admin_statuer_webmestre' => 'Donner à Cette administratrice les droits de webmestre', + 'info_admin_statuer_webmestre' => 'Donner à cette administratrice les droits de webmestre', 'info_admin_webmestre' => 'Cette administratrice est webmestre', 'info_administrateur' => 'Administratrice', 'info_administrateur_1' => 'Administratrice', @@ -255,41 +217,37 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrateurs' => 'Administratrices', 'info_administrer_rubrique' => 'Vous pouvez administrer cette rubrique', 'info_adresse' => 'à l’adresse :', + 'info_adresse_desinscription' => 'Adresse de désinscription :', 'info_adresse_url' => 'Adresse (URL) du site public', 'info_afficher_par_nb' => 'Afficher par', - 'info_afficher_visites' => 'Afficher les visites pour :', 'info_aide_en_ligne' => 'Aide en ligne SPIP', 'info_ajout_image' => 'Lorsque vous ajoutez des images en tant que documents joints à un article, SPIP peut créer pour vous, automatiquement, des vignettes (miniatures) des images insérées. Cela permet par exemple de créer automatiquement une galerie ou un portfolio.', - 'info_ajout_participant' => 'La participante suivante est ajoutée :', 'info_ajouter_rubrique' => 'Ajouter une autre rubrique à administrer :', 'info_annonce_nouveautes' => 'Annonce des nouveautés', - 'info_anterieur' => 'antérieure', 'info_article' => 'article', 'info_article_2' => 'articles', 'info_article_a_paraitre' => 'Les articles post-datés à paraître', 'info_articles_02' => 'articles', 'info_articles_2' => 'Articles', - 'info_articles_auteur' => 'Les articles de cette auteure', + 'info_articles_auteur' => 'Les articles de cette autrice', 'info_articles_miens' => 'Mes articles', 'info_articles_tous' => 'Tous les articles', 'info_articles_trouves' => 'Articles trouvés', - 'info_articles_trouves_dans_texte' => 'Articles trouvés (dans le texte)', 'info_attente_validation' => 'Vos articles en attente de validation', 'info_aucun_article' => 'Aucun article', - 'info_aucun_article_syndique' => 'Aucun article syndiqué', - 'info_aucun_auteur' => 'Aucune auteure', + 'info_aucun_auteur' => 'Aucune autrice', 'info_aucun_message' => 'Aucun message', 'info_aucun_rubrique' => 'Aucune rubrique', - 'info_aucun_site' => 'Aucun site', - 'info_aucun_visiteur' => 'Aucune visiteuse', 'info_aujourdhui' => 'aujourd’hui :', - 'info_auteur_message' => 'AUTEURE DU MESSAGE :', - 'info_auteurs' => 'Les auteures', - 'info_auteurs_par_tri' => 'Auteures@partri@', - 'info_auteurs_trouves' => 'Auteures trouvées', + 'info_auteur_gere_rubriques' => 'Cette autrice gère les rubriques suivantes :', + 'info_auteur_gere_toutes_rubriques' => 'Cette autrice gère toutes les rubriques', + 'info_auteur_gere_toutes_rubriques_2' => 'Je gère toutes les rubriques', + 'info_auteurs' => 'Les autrices', + 'info_auteurs_par_tri' => 'Autrices@partri@', + 'info_auteurs_trouves' => 'Autrices trouvées', 'info_authentification_externe' => 'Authentification externe', 'info_avertissement' => 'Avertissement', 'info_barre_outils' => 'avec sa barre d’outils ?', @@ -306,8 +264,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_2' => 'e sur @liste@', 'info_code_acces' => 'N’oubliez pas vos propres codes d’accès !', 'info_compatibilite_html' => 'Norme HTML à suivre', - 'info_compresseur_gzip' => 'Il est recommandé de vérifier au préalable si l’hébergeur compresse déjà systématiquement les scripts php ; pour cela, vous pouvez par exemple utiliser le service suivant : @testgzip@', - 'info_compresseur_texte' => 'Si votre serveur ne comprime pas automatiquement les pages html pour les envoyer aux internautes, vous pouvez essayer de forcer cette compression pour diminuer le poids des pages téléchargées. Attention : cela peut ralentir considerablement certains serveurs.', 'info_config_suivi' => 'Si cette adresse correspond à une mailing-list, vous pouvez indiquer ci-dessous l’adresse à laquelle les participantes au site peuvent s’inscrire. Cette adresse peut être une URL (par exemple la page d’inscription à la liste par le Web), ou une adresse email dotée d’un sujet spécifique (par exemple : @adresse_suivi@?subject=subscribe) :', 'info_config_suivi_explication' => 'Vous pouvez vous abonner à la mailing-list de ce site. Vous recevrez alors par courrier électronique les annonces d’articles et de brèves proposés à la publication.', 'info_confirmer_passe' => 'Confirmer ce nouveau mot de passe :', @@ -331,8 +287,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Date de rédaction antérieure :', 'info_date_referencement' => 'DATE DE RÉFÉRENCEMENT DE CE SITE :', 'info_derniere_etape' => 'C’est terminé !', - 'info_derniers_articles_publies' => 'Vos derniers articles publiés en ligne', - 'info_desactiver_messagerie_personnelle' => 'Vous pouvez activer ou désactiver votre messagerie personnelle sur ce site.', 'info_descriptif' => 'Descriptif :', 'info_desinstaller_plugin' => 'supprime les données et désactive le plugin', 'info_discussion_cours' => 'Discussions en cours', @@ -340,7 +294,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_email_envoi' => 'Adresse email d’envoi (optionnel)', 'info_email_envoi_txt' => 'Indiquez ici l’adresse à utiliser pour envoyer les emails (à défaut, l’adresse destinataire sera utilisée comme adresse d’envoi) :', 'info_email_webmestre' => 'Adresse e-mail de la webmestre', - 'info_entrer_code_alphabet' => 'Entrez le code de l’alphabet à utiliser :', 'info_envoi_email_automatique' => 'Envoi de mails automatique', 'info_envoyer_maintenant' => 'Envoyer maintenant', 'info_etape_suivante' => 'Passer à l’étape suivante', @@ -354,39 +307,32 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( publication et des validations d’articles.', 'info_fichiers_authent' => 'Fichiers d’authentification « .htpasswd »', 'info_forums_abo_invites' => 'Votre site comporte des forums sur abonnement ; les visiteuses sont donc invitées à s’enregistrer sur le site public.', - 'info_gauche_admin_effacer' => 'Cette page est uniquement accessible aux responsables du site.

    Elle donne accès aux différentes fonctions de maintenance technique. Certaines d’entre elles donnent lieu à un processus d’authentification spécifique, qui exige d’avoir un accès FTP au site Web.

    ', 'info_gauche_admin_tech' => 'Cette page est uniquement accessible aux responsables du site.

    Elle donne accès aux différentes fonctions de maintenance technique. Certaines d’entre elles donnent lieu à un processus d’authentification spécifique, qui exige d’avoir un accès FTP au site Web.

    ', 'info_gauche_admin_vider' => 'Cette page est uniquement accessible aux responsables du site.

    Elle donne accès aux différentes fonctions de maintenance technique. Certaines d’entre elles donnent lieu à un processus d’authentification spécifique, qui exige d’avoir un accès FTP au site Web.

    ', - 'info_gauche_auteurs' => 'Vous trouverez ici toutes les auteures du site. - Leur statut est indiqué par la couleur de leur icône (administratrice = vert ; rédactrice = jaune).', - 'info_gauche_auteurs_exterieurs' => 'Les auteures extérieures, sans accès au site, sont indiquées par une icone bleue ; - les auteures effacées par une icone grise.', + 'info_gauche_auteurs' => 'Vous trouverez ici toutes les autrices du site. + Leur statut est indiqué par la couleur de leur icone (administratrice = vert ; rédactrice = jaune).', + 'info_gauche_auteurs_exterieurs' => 'Les autrices extérieures, sans accès au site, sont indiquées par une icone bleue ; + les autrices effacées par une icone grise.', 'info_gauche_messagerie' => 'La messagerie vous permet d’échanger des messages entre rédactrices, de conserver des pense-bêtes (pour votre usage personnel) ou d’afficher des annonces sur la page d’accueil de l’espace privé (si vous êtes administratrice).', - 'info_gauche_numero_auteur' => 'AUTEURE NUMÉRO', 'info_gauche_statistiques_referers' => 'Cette page présente la liste des referers, c’est-à-dire des sites contenant des liens menant vers votre propre site, uniquement pour hier et aujourd’hui ; cette liste est remise à zéro toutes les 24 heures.', 'info_gauche_visiteurs_enregistres' => 'Vous trouverez ici les visiteuses enregistrées dans l’espace public du site (forums sur abonnement).', 'info_generation_miniatures_images' => 'Génération de miniatures des images', - 'info_gerer_trad' => 'Gérer les liens de traduction ?', 'info_gerer_trad_objets' => '@objets@ : gérer les liens de traduction', 'info_hebergeur_desactiver_envoi_email' => 'Certains hébergeurs désactivent l’envoi automatique de mails depuis leurs serveurs. Dans ce cas, les fonctionnalités suivantes de SPIP ne fonctionneront pas.', 'info_hier' => 'hier :', - 'info_historique_activer' => 'Activer le suivi des révisions', - 'info_historique_affiche' => 'Afficher cette version', - 'info_historique_comparaison' => 'comparaison', - 'info_historique_desactiver' => 'Désactiver le suivi des révisions', - 'info_historique_texte' => 'Le suivi des révisions permet de conserver un historique de toutes les modifications apportées au contenu d’un article, et d’afficher les différences entre les versions successives.', 'info_identification_publique' => 'Votre identité publique...', 'info_image_process' => 'Veuillez sélectionner la meilleure méthode de fabrication des vignettes en cliquant sur l’image correspondante.', 'info_image_process2' => 'Si aucune image n’apparaît, alors le serveur qui héberge votre site n’a pas été configuré pour utiliser de tels outils. Si vous souhaitez utiliser ces fonctions, contactez la responsable technique et demandez les extensions « GD » ou « Imagick ».', 'info_images_auto' => 'Images calculées automatiquement', 'info_informations_personnelles' => 'Informations personnelles', + 'info_inscription' => 'Inscription le', 'info_inscription_automatique' => 'Inscription automatique de nouvelles rédactrices', 'info_jeu_caractere' => 'Jeu de caractères du site', 'info_jours' => 'jours', @@ -402,8 +348,6 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_logos' => 'Les logos', 'info_maximum' => 'maximum :', 'info_meme_rubrique' => 'Dans la même rubrique', - 'info_message' => 'Message du', - 'info_message_efface' => 'MESSAGE EFFACÉ', 'info_message_en_redaction' => 'Vos messages en cours de rédaction', 'info_message_technique' => 'Message technique :', 'info_messagerie_interne' => 'Messagerie interne', @@ -414,34 +358,27 @@ exige d’avoir un accès FTP au site Web.

    ', perdue et votre site ne fonctionnera plus.
    {{Réinstallez les fichiers de SPIP.}}', 'info_modification_enregistree' => 'Votre modification a été enregistrée', - 'info_modifier_auteur' => 'Modifier l’auteure :', + 'info_modifier_auteur' => 'Modifier l’autrice :', 'info_modifier_rubrique' => 'Modifier la rubrique :', 'info_modifier_titre' => 'Modifier : @titre@', 'info_mon_site_spip' => 'Mon site SPIP', - 'info_mot_sans_groupe' => '(Mots sans groupe...)', - 'info_moteur_recherche' => 'Moteur de recherche intégré', 'info_moyenne' => 'moyenne :', - 'info_multi_articles' => 'Activer le menu de langue sur les articles ?', 'info_multi_cet_article' => 'Langue de cet article :', 'info_multi_langues_choisies' => 'Veuillez sélectionner ci-après les langues à disposition des rédactrices de votre site. Les langues déjà utilisées dans votre site (affichées en premier) ne peuvent pas être désactivées.', 'info_multi_objets' => '@objets@ : activer le menu de langue', - 'info_multi_rubriques' => 'Activer le menu de langue sur les rubriques ?', 'info_multi_secteurs' => '... seulement pour les rubriques situées à la racine ?', 'info_nb_articles' => '@nb@ articles', - 'info_nb_articles_syndiques' => '@nb@ articles syndiqués', - 'info_nb_auteurs' => '@nb@ auteures', + 'info_nb_auteurs' => '@nb@ autrices', 'info_nb_messages' => '@nb@ messages', 'info_nb_mots_cles' => '@nb@ mots-clés', 'info_nb_rubriques' => '@nb@ rubriques', - 'info_nb_sites' => '@nb@ sites', 'info_nb_visiteurs' => '@nb@ visiteuses', 'info_nom' => 'Nom', 'info_nom_destinataire' => 'Nom de la destinataire', 'info_nom_pas_conforme' => 'les tags html ne sont pas autorisés', 'info_nom_site' => 'Nom de votre site', 'info_nombre_articles' => '@nb_articles@ articles,', - 'info_nombre_partcipants' => 'PARTICIPANTES À LA DISCUSSION :', 'info_nombre_rubriques' => '@nb_rubriques@ rubriques,', 'info_nombre_sites' => '@nb_sites@ sites,', 'info_non_deplacer' => 'Ne pas déplacer...', @@ -450,19 +387,14 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés', 'info_non_modifiable' => 'ne peut pas être modifié', 'info_non_suppression_mot_cle' => 'je ne veux pas supprimer ce mot-clé.', - 'info_note_numero' => 'Note @numero@', 'info_notes' => 'Notes', - 'info_nouveaux_message' => 'Nouveaux messages', 'info_nouvel_article' => 'Nouvel article', 'info_nouvelle_traduction' => 'Nouvelle traduction :', 'info_numero_article' => 'ARTICLE NUMÉRO :', 'info_obligatoire_02' => ' (obligatoire)', 'info_option_accepter_visiteurs' => 'Accepter l’inscription de visiteuses du site public', - 'info_option_faire_suivre' => 'Faire suivre les messages des forums aux auteures des articles', 'info_option_ne_pas_accepter_visiteurs' => 'Refuser l’inscription des visiteuses', 'info_options_avancees' => 'OPTIONS AVANCÉES', - 'info_ortho_activer' => 'Activer le vérificateur d’orthographe', - 'info_ortho_desactiver' => 'Désactiver le vérificateur d’orthographe', 'info_ou' => 'ou...', 'info_page_interdite' => 'Page interdite', 'info_par_nom' => 'par nom', @@ -472,20 +404,14 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_passe_trop_court' => 'Mot de passe trop court.', 'info_passe_trop_court_car_pluriel' => 'Le mot de passe doit contenir au moins @nb@ caractères.', 'info_passes_identiques' => 'Les deux mots de passe ne sont pas identiques.', - 'info_pense_bete_ancien' => 'Vos anciens pense-bêtes', 'info_plus_cinq_car' => 'plus de 5 caractères', 'info_plus_cinq_car_2' => '(Plus de 5 caractères)', 'info_plus_trois_car' => '(Plus de 3 caractères)', 'info_popularite' => 'popularité : @popularite@ ; visites : @visites@', - 'info_popularite_4' => 'popularité : @popularite@ ; visites : @visites@', 'info_post_scriptum' => 'Post-Scriptum', 'info_post_scriptum_2' => 'Post-scriptum :', 'info_pour' => 'pour', - 'info_preview_admin' => 'Seuls les administratrices peuvent prévisualiser le site', - 'info_preview_comite' => 'Tous les rédactrices peuvent prévisualiser le site', - 'info_preview_desactive' => 'La prévisualisation est totalement désactivée', - 'info_preview_texte' => 'Il est possible de prévisualiser le site comme si tous les articles et les brèves (ayant au moins le statut « proposé ») étaient publiés. Cette possibilité doit-elle être ouverte aux administratrices seulement, à tous les rédactrices, ou à personne ?', - 'info_principaux_correspondants' => 'Vos principales correspondantes', + 'info_preview_texte' => 'Il est possible de prévisualiser le site comme si tous les articles et les brèves (ayant au moins le statut « proposé ») étaient publiés. Cette possibilité doit-elle être ouverte aux administratrices seulement, à toutes les rédactrices, ou à personne ?', 'info_procedez_par_etape' => 'procédez étape par étape', 'info_procedure_maj_version' => 'la procédure de mise à jour doit être lancée afin d’adapter la base de données à la nouvelle version de SPIP.', @@ -503,14 +429,9 @@ exige d’avoir un accès FTP au site Web.

    ', hébergeurs désactivent l’envoi de mails depuis leurs serveurs : dans ce cas, l’inscription automatique est impossible.', - 'info_question_utilisation_moteur_recherche' => 'Souhaitez-vous utiliser le moteur de recherche intégré à SPIP ? - (le désactiver accélère le fonctionnement du système.)', - 'info_question_vignettes_referer_non' => 'Ne pas afficher les captures des sites d’origine des visites', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', 'info_racine_site' => 'Racine du site', 'info_recharger_page' => 'Veuillez recharger cette page dans quelques instants.', - 'info_recherche_auteur_a_affiner' => 'Trop de résultats pour "@cherche_auteur@" ; veuillez affiner la recherche.', - 'info_recherche_auteur_ok' => 'Plusieurs rédactrices trouvées pour "@cherche_auteur@" :', 'info_recherche_auteur_zero' => 'Aucun résultat pour « @cherche_auteur@ ».', 'info_recommencer' => 'Veuillez recommencer.', 'info_redacteur_1' => 'Rédactrice', @@ -519,6 +440,7 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_redaction_en_cours' => 'EN COURS DE RÉDACTION', 'info_redirection' => 'Redirection', 'info_redirection_activee' => 'La redirection est activée.', + 'info_redirection_boucle' => 'Vous essayez de rediriger l’article sur lui-même.', 'info_redirection_desactivee' => 'La redirection a été supprimée.', 'info_refuses' => 'Vos articles refusés', 'info_reglage_ldap' => 'Options : Réglage de l’importation LDAP', @@ -529,7 +451,6 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_rubriques' => 'Rubriques', 'info_rubriques_02' => 'rubriques', 'info_rubriques_trouvees' => 'Rubriques trouvées', - 'info_rubriques_trouvees_dans_texte' => 'Rubriques trouvées (dans le texte)', 'info_sans_titre' => 'Sans titre', 'info_selection_chemin_acces' => 'Sélectionnez ci-après le chemin d’accès dans l’annuaire :', 'info_signatures' => 'signatures', @@ -542,17 +463,15 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_sites_lies_mot' => 'Les sites référencés liés à ce mot-clé', 'info_sites_proxy' => 'Utiliser un proxy', 'info_sites_trouves' => 'Sites trouvés', - 'info_sites_trouves_dans_texte' => 'Sites trouvés (dans le texte)', 'info_sous_titre' => 'Soustitre :', 'info_statut_administrateur' => 'Administratrice', - 'info_statut_auteur' => 'Statut de cette auteure :', + 'info_statut_auteur' => 'Statut de cette autrice :', 'info_statut_auteur_2' => 'Je suis', 'info_statut_auteur_a_confirmer' => 'Inscription à confirmer', 'info_statut_auteur_autre' => 'Autre statut :', - 'info_statut_efface' => 'Effacée', 'info_statut_redacteur' => 'Rédactrice', 'info_statut_utilisateurs_1' => 'Statut par défaut des utilisatrices importées', - 'info_statut_utilisateurs_2' => 'Choisissez le statut qui est attribué aux personnes présentes dans l’annuaire LDAP lorsqu’elles se connectent pour la première fois. Vous pourrez par la suite modifier cette valeur pour chaque auteure au cas par cas.', + 'info_statut_utilisateurs_2' => 'Choisissez le statut qui est attribué aux personnes présentes dans l’annuaire LDAP lorsqu’elles se connectent pour la première fois. Vous pourrez par la suite modifier cette valeur pour chaque autrice au cas par cas.', 'info_suivi_activite' => 'Suivi de l’activité éditoriale', 'info_surtitre' => 'Surtitre :', 'info_syndication_integrale_1' => 'Votre site propose des fichiers de syndication (voir « @titre@ »).', @@ -572,7 +491,6 @@ exige d’avoir un accès FTP au site Web.

    ', 'info_tous_articles_presents' => 'Tous les articles publiés dans cette rubrique', 'info_tous_articles_refuses' => 'Tous les articles refusés', 'info_tous_les' => 'tous les :', - 'info_tous_redacteurs' => 'Annonces à toutes les rédactrices', 'info_tout_site' => 'Tout le site', 'info_tout_site2' => 'L’article n’a pas été traduit dans cette langue.', 'info_tout_site3' => 'L’article a été traduit dans cette langue, mais des modifications ont été apportées par la suite à l’article de référence. La traduction doit être mise à jour.', @@ -589,7 +507,8 @@ dans une couleur qui indique leur état :', 'info_une_rubrique_02' => '1 rubrique', 'info_url' => 'URL :', 'info_url_proxy' => 'URL du proxy', - 'info_url_site' => 'URL DU SITE :', + 'info_url_proxy_pas_conforme' => 'l’URL du proxy n’est pas valide.', + 'info_url_site_pas_conforme' => 'l’URL du site n’est pas valide.', 'info_url_test_proxy' => 'URL de test', 'info_urlref' => 'Lien hypertexte :', 'info_utilisation_spip' => 'Vous pouvez maintenant commencer à utiliser le système de publication assistée...', @@ -600,7 +519,6 @@ dans une couleur qui indique leur état :', 'info_visiteurs_02' => 'Visiteuses du site public', 'info_webmestre_forces' => 'Les webmestres sont actuellement définies dans @file_options@.', 'install_adresse_base_hebergeur' => 'Adresse de la base de données attribuée par l’hébergeur', - 'install_base_ok' => 'La base @base@ a été reconnue', 'install_connect_ok' => 'La nouvelle base a bien été déclarée sous le nom de serveur @connect@.', 'install_echec_annonce' => 'L’installation va probablement échouer, ou aboutir à un site non fonctionnel...', 'install_extension_mbstring' => 'SPIP ne fonctionne pas avec :', @@ -613,7 +531,6 @@ dans une couleur qui indique leur état :', 'install_select_langue' => 'Sélectionnez une langue puis cliquez sur le bouton « suivant » pour lancer la procédure d’installation.', 'install_select_type_db' => 'Indiquer le type de base de données :', 'install_select_type_mysql' => 'MySQL', - 'install_select_type_mysqli' => 'MySQLi', 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', @@ -630,8 +547,6 @@ dans une couleur qui indique leur état :', 'item_activer_messages_avertissement' => 'Activer les messages d’avertissement', 'item_administrateur_2' => 'administratrice', 'item_afficher_calendrier' => 'Afficher dans le calendrier', - 'item_autoriser_documents_joints' => 'Autoriser les documents joints aux articles', - 'item_autoriser_documents_joints_rubriques' => 'Autoriser les documents dans les rubriques', 'item_autoriser_syndication_integrale' => 'Diffuser l’intégralité des articles dans les fichiers de syndication', 'item_choix_administrateurs' => 'les administratrices', 'item_choix_generation_miniature' => 'Générer automatiquement les miniatures des images.', @@ -639,7 +554,6 @@ dans une couleur qui indique leur état :', 'item_choix_redacteurs' => 'les rédactrices', 'item_choix_visiteurs' => 'les visiteuses du site public', 'item_creer_fichiers_authent' => 'Créer les fichiers .htpasswd', - 'item_limiter_recherche' => 'Limiter la recherche aux informations contenues dans votre site', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Activer la messagerie et l’agenda', 'item_mots_cles_association_articles' => 'aux articles', @@ -649,22 +563,15 @@ dans une couleur qui indique leur état :', 'item_non_accepter_inscriptions' => 'Ne pas accepter les inscriptions', 'item_non_activer_messages_avertissement' => 'Pas de messages d’avertissement', 'item_non_afficher_calendrier' => 'Ne pas afficher dans le calendrier', - 'item_non_autoriser_documents_joints' => 'Ne pas autoriser les documents dans les articles', - 'item_non_autoriser_documents_joints_rubriques' => 'Ne pas autoriser les documents dans les rubriques', 'item_non_autoriser_syndication_integrale' => 'Ne diffuser qu’un résumé', - 'item_non_compresseur' => 'Désactiver la compression', 'item_non_creer_fichiers_authent' => 'Ne pas créer ces fichiers', - 'item_non_gerer_statistiques' => 'Ne pas gérer les statistiques', - 'item_non_limiter_recherche' => 'Étendre la recherche au contenu des sites référencés', 'item_non_messagerie_agenda' => 'Désactiver la messagerie et l’agenda', 'item_non_publier_articles' => 'Ne pas publier les articles avant la date de publication fixée.', - 'item_non_utiliser_moteur_recherche' => 'Ne pas utiliser le moteur', - 'item_nouvel_auteur' => 'Nouvelle auteure', + 'item_nouvel_auteur' => 'Nouvelle autrice', 'item_nouvelle_rubrique' => 'Nouvelle rubrique', 'item_oui' => 'Oui', 'item_publier_articles' => 'Publier les articles, quelle que soit leur date de publication.', 'item_reponse_article' => 'Réponse à l’article', - 'item_utiliser_moteur_recherche' => 'Utiliser le moteur de recherche', 'item_version_html_max_html4' => 'Se limiter au HTML4 sur le site public', 'item_version_html_max_html5' => 'Permettre le HTML5', 'item_visiteur' => 'visiteuse', @@ -676,7 +583,7 @@ dans une couleur qui indique leur état :', 'label_bando_outils' => 'Barre d’outils', 'label_bando_outils_afficher' => 'Afficher les outils', 'label_bando_outils_masquer' => 'Masquer les outils', - 'label_choix_langue' => 'Selectionnez votre langue', + 'label_choix_langue' => 'Sélectionnez votre langue', 'label_nom_fichier_connect' => 'Indiquez le nom utilisé pour ce serveur', 'label_slogan_site' => 'Slogan du site', 'label_taille_ecran' => 'Largeur de l’écran', @@ -685,19 +592,19 @@ dans une couleur qui indique leur état :', 'ldap_correspondance' => 'héritage du champ @champ@', 'ldap_correspondance_1' => 'Héritage des champs LDAP', 'ldap_correspondance_2' => 'Pour chacun des champs SPIP suivants, indiquer le nom du champ LDAP correspondant. Laisser vide pour ne pas le remplir, séparer par des espaces ou des virgules pour essayer plusieurs champs LDAP.', - 'lien_ajout_destinataire' => 'Ajouter cette destinataire', - 'lien_ajouter_auteur' => 'Ajouter cette auteure', - 'lien_ajouter_participant' => 'Ajouter une participante', + 'lien_ajouter_auteur' => 'Ajouter cette autrice', 'lien_ajouter_une_rubrique' => 'Ajouter cette rubrique', 'lien_email' => 'email', 'lien_nom_site' => 'NOM DU SITE :', - 'lien_retirer_auteur' => 'Retirer l’auteure', + 'lien_rapide_contenu' => 'Aller au contenu', + 'lien_rapide_navigation' => 'Aller à la navigation', + 'lien_rapide_recherche' => 'Aller à la recherche', + 'lien_retirer_auteur' => 'Retirer l’autrice', 'lien_retirer_rubrique' => 'Retirer la rubrique', - 'lien_retirer_tous_auteurs' => 'Retirer toutes les auteures', + 'lien_retirer_tous_auteurs' => 'Retirer toutes les autrices', 'lien_retirer_toutes_rubriques' => 'Retirer toutes les rubriques', - 'lien_retrait_particpant' => 'retirer cette participante', 'lien_site' => 'site', - 'lien_supprimer_rubrique' => 'supprimer cette rubrique', + 'lien_tout_decocher' => 'Tout décocher', 'lien_tout_deplier' => 'Tout déplier', 'lien_tout_replier' => 'Tout replier', 'lien_tout_supprimer' => 'Tout supprimer', @@ -706,7 +613,7 @@ dans une couleur qui indique leur état :', 'lien_trier_statut' => 'Trier par statut', 'lien_voir_en_ligne' => 'VOIR EN LIGNE :', 'logo_article' => 'Logo de l’article', - 'logo_auteur' => 'Logo de l’auteure', + 'logo_auteur' => 'Logo de l’autrice', 'logo_rubrique' => 'Logo de la rubrique', 'logo_site' => 'Logo de ce site', 'logo_standard_rubrique' => 'Logo standard des rubriques', @@ -722,13 +629,13 @@ dans une couleur qui indique leur état :', 'mois_non_connu' => 'non connu', // N - 'nouvelle_version_spip' => 'La version @version@ de SPIP est disponible', + 'nouvelle_version_spip' => 'La mise à jour @version@ de SPIP est disponible', + 'nouvelle_version_spip_majeure' => 'Une nouvelle version SPIP @version@ est disponible', // O 'onglet_contenu' => 'Contenu', 'onglet_declarer_une_autre_base' => 'Déclarer une autre base', 'onglet_discuter' => 'Discuter', - 'onglet_documents' => 'Documents', 'onglet_interactivite' => 'Interactivité', 'onglet_proprietes' => 'Propriétés', 'onglet_repartition_actuelle' => 'actuellement', @@ -737,6 +644,7 @@ dans une couleur qui indique leur état :', // P 'page_pas_proxy' => 'Cette page ne doit pas passer par le proxy', 'pas_de_proxy_pour' => 'Au besoin, indiquez les machines ou domaines pour lesquels ce proxy ne doit pas s’appliquer (par exemple : @exemple@)', + 'phpinfo' => 'Configuration PHP', 'plugin_charge_paquet' => 'Chargement du paquet @name@', 'plugin_charger' => 'Télécharger', 'plugin_erreur_charger' => 'erreur : impossible de charger @zip@', @@ -780,6 +688,7 @@ dans une couleur qui indique leur état :', 'plugin_titre_automatique_ajouter' => 'Ajouter des plugins', 'plugin_titre_installation' => 'Installation du plugin @plugin@', 'plugin_titre_modifier' => 'Mes plugins', + 'plugin_utilise_plugin' => 'Utilise le plugin @plugin@ en version @version@.', 'plugin_zip_active' => 'Continuez pour l’activer', 'plugin_zip_adresse' => 'indiquez ci-dessous l’adresse d’un fichier zip de plugin à télécharger, ou encore l’adresse d’une liste de plugins.', 'plugin_zip_adresse_champ' => 'Adresse du plugin ou de la liste ', @@ -806,7 +715,7 @@ dans une couleur qui indique leur état :', // Q 'queue_executer_maintenant' => 'Exécuter maintenant', - 'queue_info_purger' => 'Vous pouvez supprimer tous les travaux en attente et ré-initialiser la liste avec les travaux périodiques', + 'queue_info_purger' => 'Vous pouvez supprimer tous les travaux en attente et réinitialiser la liste avec les travaux périodiques', 'queue_nb_jobs_in_queue' => '@nb@ travaux en attente', 'queue_next_job_in_nb_sec' => 'Prochain travail dans @nb@ s', 'queue_no_job_in_queue' => 'Aucun travail en attente', @@ -816,6 +725,7 @@ dans une couleur qui indique leur état :', // R 'repertoire_plugins' => 'Répertoire :', + 'required' => ' (obligatoire)', // S 'sans_heure' => 'sans heure', @@ -838,25 +748,20 @@ dans une couleur qui indique leur état :', y compris tous les accès rédactrices et administratrices. Après l’avoir exécutée, vous devrez lancer la réinstallation de SPIP pour recréer une nouvelle base ainsi qu’un premier accès administratrice.', 'texte_adresse_annuaire_1' => '(Si votre annuaire est installé sur la même machine que ce site Web, il s’agit probablement de « localhost ».)', - 'texte_ajout_auteur' => 'L’auteure suivante a été ajoutée à l’article :', + 'texte_ajout_auteur' => 'L’autrice suivante a été ajoutée à l’article :', 'texte_annuaire_ldap_1' => 'Si vous avez accès à un annuaire (LDAP), vous pouvez l’utiliser pour importer automatiquement des utilisatrices sous SPIP.', 'texte_article_statut' => 'Cet article est :', 'texte_article_virtuel' => 'Article virtuel', 'texte_article_virtuel_reference' => 'Article virtuel : article référencé dans votre site SPIP, mais redirigé vers une autre URL. Pour supprimer la redirection, effacez l’URL ci-dessus.', 'texte_aucun_resultat_auteur' => 'Aucun résultat pour "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Ce site peut vous indiquer en permanence la liste des rédactrices connectées, ce qui vous permet d’échanger des messages en direct. Vous pouvez décider de ne pas apparaître dans cette liste (vous êtes « invisible » pour les autres utilisatrices).', - 'texte_auteur_messagerie_1' => 'Ce site permet l’échange de messages et la constitution de forums de discussion privés entre les participantes du site. Vous pouvez décider de ne pas participer à ces échanges.', - 'texte_auteurs' => 'LES AUTEURES', + 'texte_auteurs' => 'LES AUTRICES', 'texte_choix_base_1' => 'Choisissez votre base :', 'texte_choix_base_2' => 'Le serveur SQL contient plusieurs bases de données.', 'texte_choix_base_3' => 'Sélectionnez ci-après celle qui vous a été attribuée par votre hébergeur :', 'texte_choix_table_prefix' => 'Préfixe des tables :', - 'texte_commande_vider_tables_indexation' => 'Utilisez cette commande afin de vider les tables d’indexation utilisées - par le moteur de recherche intégré à SPIP. Cela vous permettra - de gagner de l’espace disque.', 'texte_compatibilite_html' => 'Vous pouvez demander à SPIP de produire, sur le site public, du code compatible avec la norme HTML4, ou lui permettre d’utiliser les possibilités plus modernes du HTML5.', 'texte_compatibilite_html_attention' => 'Il n’y a aucun risque à activer l’option HTML5, mais si vous le faites, les pages de votre site devront commencer par la mention suivante pour rester valides : < !DOCTYPE html>.', - 'texte_compresse_ou_non' => '(celui-ci peut être compressé ou non)', 'texte_compte_element' => '@count@ élément', 'texte_compte_elements' => '@count@ éléments', 'texte_conflit_edition_correction' => 'Veuillez contrôler ci-dessous les différences entre les deux versions du texte ; vous pouvez aussi copier vos modifications, puis recommencer.', @@ -875,49 +780,37 @@ réinstallation de SPIP pour recréer une nouvelle base ainsi qu’un premier ac 'texte_date_publication_anterieure_nonaffichee' => 'Ne pas afficher de date de rédaction antérieure.', 'texte_date_publication_article' => 'DATE DE PUBLICATION EN LIGNE :', 'texte_date_publication_objet' => 'Date de publication en ligne :', - 'texte_descriptif_petition' => 'Descriptif de la pétition', + 'texte_definir_comme_traduction_rubrique' => 'Cette rubrique est une traduction de la rubrique numéro :', 'texte_descriptif_rapide' => 'Descriptif rapide', 'texte_effacer_base' => 'Effacer la base de données SPIP', - 'texte_effacer_donnees_indexation' => 'Effacer les données d’indexation', 'texte_effacer_statistiques' => 'Effacer les statistiques', 'texte_en_cours_validation' => 'Les contenus ci-dessous sont en attente de validation.', 'texte_enrichir_mise_a_jour' => 'Vous pouvez enrichir la mise en page de votre texte en utilisant des « raccourcis typographiques ».', 'texte_fichier_authent' => 'SPIP doit-il créer les fichiers spéciaux .htpasswd et .htpasswd-admin dans le répertoire @dossier@ ? -

    Ces fichiers peuvent vous servir à restreindre l’accès aux auteures et administratrices en d’autres endroits de votre site (programme externe de statistiques, par exemple).

    +

    Ces fichiers peuvent vous servir à restreindre l’accès aux autrices et administratrices en d’autres endroits de votre site (programme externe de statistiques, par exemple).

    Si vous n’en avez pas l’utilité, vous pouvez laisser cette option à sa valeur par défaut (pas de création des fichiers).

    ', 'texte_informations_personnelles_1' => 'Le système va maintenant vous créer un accès personnalisé au site.', 'texte_informations_personnelles_2' => '(Note : il s’agit d’une réinstallation, si votre accès marche toujours vous pouvez', 'texte_introductif_article' => '(Texte introductif de l’article.)', 'texte_jeu_caractere' => 'Il est conseillé d’employer, sur votre site, l’alphabet universel (utf-8) : celui-ci permet l’affichage de textes dans toutes les langues, et ne pose plus de problèmes de compatibilité avec les navigateurs modernes.', - 'texte_jeu_caractere_2' => 'Attention : ce réglage ne provoque pas la conversion des textes déjà enregistrés dans la base de données.', 'texte_jeu_caractere_3' => 'Votre site est actuellement installé dans le jeu de caractères :', 'texte_jeu_caractere_4' => 'Si cela ne correspond pas à la réalité de vos données (suite, par exemple, à une restauration de base de données), ou si vous démarrez ce site et souhaitez partir sur un autre jeu de caractères, veuillez indiquer ce dernier ici :', - 'texte_jeu_caractere_conversion' => 'Note : vous pouvez décider de convertir une fois pour toutes l’ensemble des textes de votre site (articles, brèves, forums, etc.) vers l’alphabet utf-8, en vous rendant sur la page de conversion vers l’utf-8.', - 'texte_lien_hypertexte' => '(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, veuillez indiquer ci-après le titre de la page et son adresse URL.)', 'texte_login_ldap_1' => '(Laisser vide pour un accès anonyme, ou entrer le chemin complet, par exemple « uid=dupont, ou=users, dc=mon-domaine, dc=com ».)', 'texte_login_precaution' => 'Attention ! Ceci est le login sous lequel vous êtes connectée actuellement. Utilisez ce formulaire avec précaution...', - 'texte_message_edit' => 'Attention : ce message peut être modifié par toutes les administratrices du site, et est visible par toutes les rédactrices. N’utilisez les annonces que pour exposer des événements importants de la vie du site.', 'texte_messagerie_agenda' => 'Une messagerie permet aux rédactrices du site de communiquer entre elles directement dans l’espace privé du site. Elle est associée à un agenda.', 'texte_mise_a_niveau_base_1' => 'Vous venez de mettre à jour les fichiers SPIP. Il faut maintenant mettre à niveau la base de données du site.', 'texte_modifier_article' => 'Modifier l’article :', - 'texte_moteur_recherche_active' => 'Le moteur de recherche est activé. Utilisez cette commande - si vous souhaitez procéder à une réindexation rapide (après restauration - d’une sauvegarde par exemple). Notez que les documents modifiés de - façon normale (depuis l’interface SPIP) sont automatiquement - réindexés : cette commande n’est donc utile que de façon exceptionnelle.', - 'texte_moteur_recherche_non_active' => 'Le moteur de recherche n’est pas activé.', 'texte_multilinguisme' => 'Si vous souhaitez gérer des objets en plusieurs langues, avec une navigation complexe, vous pouvez ajouter un menu de sélection de langue sur ces objets, en fonction de l’organisation de votre site.', 'texte_multilinguisme_trad' => 'Vous pouvez également activer un système de gestion de liens entre les différentes traductions sur certains objets.', 'texte_non_compresse' => 'non compressé (votre serveur ne supportant pas cette fonctionnalité)', - 'texte_nouveau_message' => 'Nouveau message', 'texte_nouvelle_version_spip_1' => 'Vous avez installé une nouvelle version de SPIP.', 'texte_nouvelle_version_spip_2' => 'Cette nouvelle version nécessite une mise à jour plus complète qu’à l’accoutumée. Si vous êtes webmestre du site, veuillez effacer le fichier @connect@ et reprendre l’installation afin de mettre à jour vos paramètres de connexion à la base de données.

    (NB. : si vous avez oublié vos paramètres de connexion, jetez un œil au fichier @connect@ avant de le supprimer...)

    ', 'texte_operation_echec' => 'Retournez à la page précédente, sélectionnez une autre base ou créez-en une nouvelle. Vérifiez les informations fournies par votre hébergeur.', 'texte_plus_trois_car' => 'plus de 3 caractères', - 'texte_plusieurs_articles' => 'Plusieurs auteures trouvées pour "@cherche_auteur@" :', + 'texte_plusieurs_articles' => 'Plusieurs autrices trouvées pour "@cherche_auteur@" :', 'texte_port_annuaire' => '(La valeur indiquée par défaut convient généralement.)', 'texte_presente_plugin' => 'Cette page liste les plugins disponibles sur le site. Vous pouvez activer les plugins nécessaires en cochant la case correspondante.', 'texte_proposer_publication' => 'Lorsque votre article est terminé,
    vous pouvez proposer sa publication.', @@ -928,7 +821,6 @@ réinstallation de SPIP pour recréer une nouvelle base ainsi qu’un premier ac 'texte_rappel_selection_champs' => '[N’oubliez pas de sélectionner correctement ce champ.]', 'texte_recalcul_page' => 'Si vous voulez recalculer une seule page, passez plutôt par l’espace public et utilisez-y le bouton « recalculer ».', - 'texte_recapitiule_liste_documents' => 'Cette page récapitule la liste des documents que vous avez placés dans les rubriques. Pour modifier les informations de chaque document, suivez le lien vers la page de sa rubrique.', 'texte_recuperer_base' => 'Réparer la base de données', 'texte_reference_mais_redirige' => 'article référencé dans votre site SPIP, mais redirigé vers une autre URL.', 'texte_requetes_echouent' => 'Lorsque certaines requêtes SQL échouent @@ -957,7 +849,6 @@ dans le cache SPIP. Cela permet par exemple de forcer un recalcul de toutes les avez fait des modifications importantes de graphisme ou de structure du site.', 'texte_sur_titre' => 'Sur-titre', 'texte_table_ok' => ' : cette table est OK.', - 'texte_tables_indexation_vides' => 'Les tables d’indexation du moteur sont vides.', 'texte_tentative_recuperation' => 'Tentative de réparation', 'texte_tenter_reparation' => 'Tenter une réparation de la base de données', 'texte_test_proxy' => 'Pour faire un essai de ce proxy, indiquez ici l’adresse d’un site Web @@ -972,36 +863,17 @@ avez fait des modifications importantes de graphisme ou de structure du site.', Cette option est désactivée par défaut afin d’éviter d’afficher des messages d’avertissement intempestifs.', - 'texte_trop_resultats_auteurs' => 'Trop de résultats pour "@cherche_auteur@" ; veuillez affiner la recherche.', - 'texte_unpack' => 'téléchargement de la dernière version', - 'texte_utilisation_moteur_syndiques' => 'Lorsque vous utilisez le moteur de recherche intégré - à SPIP, vous pouvez effectuer les recherches sur les sites et - les articles syndiqués de deux manières - différentes.
    - La plus - simple consiste à rechercher uniquement dans les - titres et les descriptifs des articles.
    - - Une seconde méthode, beaucoup plus puissante, permet - à SPIP de rechercher également dans le texte des - sites référencés . Si vous - référencez un site, SPIP va alors effectuer la - recherche dans le texte du site lui-même.', - 'texte_utilisation_moteur_syndiques_2' => 'Cette méthode oblige SPIP à visiter - régulièrement les sites référencés, - ce qui peut provoquer un léger ralentissement de votre propre - site.', 'texte_vide' => 'vide', 'texte_vider_cache' => 'Vider le cache', - 'titre_admin_effacer' => 'Maintenance technique', 'titre_admin_tech' => 'Maintenance technique', 'titre_admin_vider' => 'Maintenance technique', - 'titre_ajouter_un_auteur' => 'Ajouter une auteure', + 'titre_ajouter_un_auteur' => 'Ajouter une autrice', 'titre_ajouter_un_mot' => 'Ajouter un mot-clé', - 'titre_ajouter_une_rubrique' => 'Ajouter une rubrique', 'titre_cadre_afficher_article' => 'Afficher les articles', 'titre_cadre_afficher_traductions' => 'Afficher l’état des traductions pour les langues suivantes :', - 'titre_cadre_ajouter_auteur' => 'AJOUTER UNE AUTEURE :', + 'titre_cadre_ajouter_auteur' => 'AJOUTER UNE AUTRICE :', 'titre_cadre_interieur_rubrique' => 'À l’intérieur de la rubrique', - 'titre_cadre_numero_auteur' => 'AUTEURE NUMÉRO', + 'titre_cadre_numero_auteur' => 'AUTRICE NUMÉRO', 'titre_cadre_numero_objet' => '@objet@ NUMÉRO :', 'titre_cadre_signature_obligatoire' => 'Signature [Obligatoire]
    ', 'titre_config_contenu_notifications' => 'Notifications', @@ -1023,54 +895,27 @@ avez fait des modifications importantes de graphisme ou de structure du site.', 'titre_naviguer_dans_le_site' => 'Naviguer dans le site...', 'titre_nouvelle_rubrique' => 'Nouvelle rubrique', 'titre_numero_rubrique' => 'RUBRIQUE NUMÉRO :', - 'titre_page_admin_effacer' => 'Maintenance technique : effacer la base', 'titre_page_articles_edit' => 'Modifier : @titre@', 'titre_page_articles_page' => 'Les articles', 'titre_page_articles_tous' => 'Tout le site', - 'titre_page_auteurs' => 'Visiteuses', 'titre_page_calendrier' => 'Calendrier @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Configuration du site', - 'titre_page_config_fonctions' => 'Configuration du site', - 'titre_page_configuration' => 'Configuration du site', - 'titre_page_controle_petition' => 'Suivi des pétitions', 'titre_page_delete_all' => 'suppression totale et irréversible', - 'titre_page_documents_liste' => 'Les documents des rubriques', - 'titre_page_index' => 'Votre espace privé', - 'titre_page_message_edit' => 'Rédiger un message', - 'titre_page_messagerie' => 'Votre messagerie', 'titre_page_recherche' => 'Résultats de la recherche @recherche@', 'titre_page_statistiques_referers' => 'Statistiques (liens entrants)', - 'titre_page_statistiques_signatures_jour' => 'Nombre de signatures par jour', - 'titre_page_statistiques_signatures_mois' => 'Nombre de signatures par mois', 'titre_page_upgrade' => 'Mise à niveau de SPIP', 'titre_publication_articles_post_dates' => 'Publication des articles post-datés', - 'titre_referencer_site' => 'Référencer le site :', - 'titre_rendez_vous' => 'RENDEZ-VOUS :', 'titre_reparation' => 'Réparation', 'titre_suivi_petition' => 'Suivi des pétitions', 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'Il n’y a pas d’article portant ce numéro.', 'trad_article_traduction' => 'Toutes les versions de cet article :', - 'trad_deja_traduit' => 'Erreur : impossible de relier cet article au numéro demandé. ', 'trad_delier' => 'Ne plus lier à ces traductions', 'trad_lier' => 'Cet article est une traduction de l’article numéro :', 'trad_new' => 'Écrire une nouvelle traduction', // U - 'upload_info_mode_document' => 'Déposer cette image dans le portfolio', - 'upload_info_mode_image' => 'Retirer cette image du portfolio', - 'utf8_convert_attendez' => 'Attendez quelques instants et rechargez cette page.', - 'utf8_convert_avertissement' => 'Vous vous apprêtez à convertir le contenu de votre base de données (articles, brèves, etc) du jeu de caractères @orig@ vers le jeu de caractères @charset@.', - 'utf8_convert_backup' => 'N’oubliez pas de faire auparavant une sauvegarde complète de votre site. Vous devrez aussi vérifier que vos squelettes et fichiers de langue sont compatibles @charset@.', - 'utf8_convert_erreur_deja' => 'Votre site est déjà en @charset@, inutile de le convertir...', 'utf8_convert_erreur_orig' => 'Erreur : le jeu de caractères @charset@ n’est pas supporté.', - 'utf8_convert_termine' => 'C’est terminé !', - 'utf8_convert_timeout' => 'Important : en cas de timeout du serveur, veuillez recharger la page jusqu’à ce qu’elle indique « terminé ».', - 'utf8_convert_verifier' => 'Vous devez maintenant aller vider le cache, et vérifier que tout se passe bien sur les pages publiques du site. En cas de gros problème, une sauvegarde de vos données a été réalisée (au format SQL) dans le répertoire @rep@.', - 'utf8_convertir_votre_site' => 'Convertir votre site en utf-8', // V 'version' => 'Version :' ); - -?> diff --git a/www/ecrire/lang/ecrire_gl.php b/www/ecrire/lang/ecrire_gl.php index d1dfd56c..e20b78e0 100644 --- a/www/ecrire/lang/ecrire_gl.php +++ b/www/ecrire/lang/ecrire_gl.php @@ -1,9 +1,11 @@ 'Volva á páxina anterior, e verifique as informacións introducidas.', 'avis_connexion_ldap_echec_3' => 'Como alternativa, non empregue o sistema LDAP para importar redactores.', 'avis_deplacement_rubrique' => 'Atención! Este tema contén @contient_breves@ breve@scb@: se a(s) quere desprazar, confírmeo aquí.', - 'avis_destinataire_obligatoire' => 'Tes que indicar o destino antes de enviar esta mensaxe.', 'avis_erreur_connexion_mysql' => 'Erro de conexión SQL', - 'avis_erreur_version_archive' => 'Atención! O ficheiro @arquivo@ corresponde a - outra versión de SPIP que non é a que ten instalada. - Pode estar ante graves problemas: hai risco de destrución - da súa base de datos, erros no funcionamento do web, etc. - Non valide esta solicitude de importación.

    Para máis - informacións, consulte - a documentación de SPIP.

    ', - 'avis_espace_interdit' => 'Espazo prohibido
    SPIP xa está instalado.
    ', + 'avis_espace_interdit' => 'Espazo prohibido
    SPIP xa está instalado.
    ', 'avis_lecture_noms_bases_1' => 'O programa de instalación non puido ler os nomes das bases de datos instaladas.', 'avis_lecture_noms_bases_2' => 'Pode que non haxa ningunha base dispoñíbel, ou que a función que lista as bases estea desactivada por motivos de seguridade (caso moi frecuente en moitos provedores de servizos).', 'avis_lecture_noms_bases_3' => 'Na segunda alternativa, é probábel que unha base co seu nome de identificador poida ser empregada:', - 'avis_non_acces_message' => 'Non tes acceso a esta mensaxe.', 'avis_non_acces_page' => 'Non tes acceso a esta páxina.', 'avis_operation_echec' => 'Fallou a operación.', 'avis_operation_impossible' => 'Operación imposíbel', - 'avis_probleme_archive' => 'Problema de leitura do ficheiro @archive@', 'avis_suppression_base' => 'ATENCIÓN, a supresión dos datos é irreversible', - 'avis_version_mysql' => 'A súa versión de SQL (@version_mysql@) non permite a auto-reparación das táboas da base de datos.', // B 'bouton_acces_ldap' => 'Engadir o acceso a LDAP', 'bouton_ajouter' => 'Engadir', - 'bouton_ajouter_participant' => 'ENGADIR PARTICIPANTE:', - 'bouton_annonce' => 'ANUNCIO', 'bouton_annuler' => 'Anular', - 'bouton_checkbox_envoi_message' => 'posibilidade de enviar unha mensaxe', - 'bouton_checkbox_indiquer_site' => 'indicar obrigatoriamente un web', - 'bouton_checkbox_signature_unique_email' => 'unha soa sinatura por cada enderezo de correo-e', - 'bouton_checkbox_signature_unique_site' => 'unha soa sinatura por cada web', 'bouton_demande_publication' => 'Solicitar a publicación deste artigo', 'bouton_desactive_tout' => 'Desactivar todo', 'bouton_desinstaller' => 'Desinstalar', - 'bouton_effacer_index' => 'Borrar os índices', 'bouton_effacer_tout' => 'Borrar TODO', - 'bouton_envoi_message_02' => 'ENVIAR UNHA MENSAXE', 'bouton_envoyer_message' => 'Mensaxe definitiva: enviar', 'bouton_fermer' => 'Cerrar', 'bouton_mettre_a_jour_base' => 'Actualizar a base de datos', 'bouton_modifier' => 'Modificar', - 'bouton_pense_bete' => 'NOTA PARA USO PERSOAL', - 'bouton_radio_activer_messagerie' => 'Activar a mensaxería interna', - 'bouton_radio_activer_messagerie_interne' => 'Activar a mensaxería interna', - 'bouton_radio_activer_petition' => 'Activar a petición', 'bouton_radio_afficher' => 'Mostrar', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Aparecer na lista de redactores conectados', - 'bouton_radio_desactiver_messagerie' => 'Desactivar a mensaxería', 'bouton_radio_envoi_annonces_adresse' => 'Enviar os anuncios ao enderezo:', 'bouton_radio_envoi_liste_nouveautes' => 'Enviar a lista de novidades', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Non aparecer na lista de redactores que publica', 'bouton_radio_non_envoi_annonces_editoriales' => 'Non enviar as novidades editoriais', - 'bouton_radio_pas_petition' => 'Sen petición', - 'bouton_radio_petition_activee' => 'Petición activada', - 'bouton_radio_supprimer_petition' => 'Eliminar a petición', 'bouton_redirection' => 'REDIRECCIÓN', 'bouton_relancer_installation' => 'Relanzar a instalación', 'bouton_suivant' => 'Seguinte', 'bouton_tenter_recuperation' => 'Tentar unha reparación', 'bouton_test_proxy' => 'Probar o proxy', 'bouton_vider_cache' => 'Baleirar a memoria caché', - 'bouton_voir_message' => 'Ver a mensaxe antes de validala', // C - 'cache_mode_compresse' => 'Os ficheiros da memoria caché están rexistrados en modo comprimido.', - 'cache_mode_non_compresse' => 'Os ficheiros da memoria caché están rexistrados en modo non comprimido', 'cache_modifiable_webmestre' => 'Este parámetro é modificábel polo webmáster do web.', 'calendrier_synchro' => 'Se usa un programa de axenda compatible iCal, poderá sincronizalo coas informacións deste web.', 'config_activer_champs' => 'Activar os seguintes campos', @@ -109,7 +81,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_titre_base_sup' => 'Declaración dunha base suplementaria', 'config_titre_base_sup_choix' => 'Escolla unha base de datos suplementaria', 'connexion_ldap' => 'Conexión :', - 'copier_en_local' => 'Copiar en local', // D 'date_mot_heures' => 'horas', @@ -135,7 +106,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'O seu identificador', 'entree_login_connexion_1' => 'O identificador de conexión', 'entree_login_connexion_2' => '(ás veces é o mesmo login que ten para o acceso por FTP; outras veces pódese deixar baleiro)', - 'entree_login_ldap' => 'Identificador LDAP inicial', 'entree_mot_passe' => 'A súa chave', 'entree_mot_passe_1' => 'A chave da conexión', 'entree_mot_passe_2' => '(ás veces é o mesmo que ten para o acceso por FTP; outras veces pódese deixar baleiro)', @@ -169,7 +139,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'Para obter máis detalles sobre todas estas técnicas, non dubide en consultar a documentación de SPIP.', 'ical_info_calendrier' => 'Dous calendarios están á súa disposición. O primeiro e un mapa do web que anuncia todos os artigos publicados. O segundo contén os anuncios editoriais así como as súas últimas mensaxes privadas : estalle reservada gracias a unha chave persoal, que pode modificar en calquera momento anovando a súa chave.', 'ical_methode_http' => 'Descarga', - 'ical_methode_webcal' => 'Sincronización (webcal://)', + 'ical_methode_webcal' => 'Sincronización (webcal://)', # MODIF 'ical_texte_js' => 'Unha liña de javascript permítelle mostrar moi doadamente, sobre calquera web do que dispoña os artigos recentes deste web.', 'ical_texte_prive' => 'Este calendario, de uso estrictamente persoal, permítelle informarse da actividade editorial privada deste web (tarefas e citas persoais, artigos e breves propostas...).', 'ical_texte_public' => 'Este calendario permítelle seguir a actividade pública deste web (artigos e breves publicadas).', @@ -189,16 +159,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_configuration' => 'Configuración', 'icone_creer_auteur' => 'Crear un novo membro do equipo de redacción e asocialo con este artigo', 'icone_creer_mot_cle' => 'Crear unha nova palabra chave e asociala con este artigo', - 'icone_creer_mot_cle_rubrique' => 'Crear unha nova palabra chave e ligala a esta sección', - 'icone_creer_mot_cle_site' => 'Crear unha nova palabra chave e ligala a este web', 'icone_creer_rubrique_2' => 'Crear un novo tema', 'icone_edition' => 'Edición', - 'icone_envoyer_message' => 'Enviar a mensaxe', 'icone_ma_langue' => 'O meu idioma', 'icone_mes_infos' => 'Os meus datos', 'icone_mes_preferences' => 'As miñas preferencias', 'icone_modifier_article' => 'Modificar este artigo', - 'icone_modifier_message' => 'Modificar esta mensaxe', 'icone_modifier_rubrique' => 'Modificar este tema', 'icone_publication' => 'Publicación', 'icone_relancer_signataire' => 'Relanzar o signatario', @@ -212,17 +178,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'Validar a sinatura', 'image_administrer_rubrique' => 'Podes administrar este tema', 'info_1_article' => '1 artigo', - 'info_1_article_syndique' => '1 artigo sindicado', 'info_1_auteur' => '1 autor', 'info_1_message' => '1 mensaxe', 'info_1_mot_cle' => '1 palabra clave', 'info_1_rubrique' => '1 sección', - 'info_1_site' => '1 web', 'info_1_visiteur' => '1 visitante', 'info_activer_cookie' => 'Pode activar unha cookie de correspondencia, co cal poderá pasar facilmente do web público ao web privado.', 'info_admin_etre_webmestre' => 'Concederme os dereitos de administrador', - 'info_admin_gere_rubriques' => 'Esta persoa xestiona os seguintes temas:', - 'info_admin_gere_toutes_rubriques' => 'Esta persoa xestiona todos os temas.', # MODIF 'info_admin_je_suis_webmestre' => 'Son o/a webmáster', 'info_admin_statuer_webmestre' => 'Dar a este administrador dereitos de webmáster', 'info_admin_webmestre' => 'Este administrdor é webmáster', @@ -235,16 +197,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'Podes administrar este tema', 'info_adresse' => 'ó enderezo:', 'info_adresse_url' => 'Enderezo (URL) do web público', - 'info_afficher_visites' => 'Mostrar as visitas de :', 'info_aide_en_ligne' => 'Axuda en liña do SPIP', 'info_ajout_image' => 'Cando engada imaxes como documentos adxuntos a un artigo, SPIP pode crear, automaticamente, viñetas (miniaturas) das imaxes insertas. Esto permite crear automaticamente unha galería de imaxes.', - 'info_ajout_participant' => '@ O/A participante foi engadido:', 'info_ajouter_rubrique' => 'Engadir outro tema á administrar:', 'info_annonce_nouveautes' => 'Anuncio de novidades', - 'info_anterieur' => 'Anterior', 'info_article' => 'Artigo', 'info_article_2' => 'Artigos', 'info_article_a_paraitre' => 'Os artigos con data posterior á da sua publicación', @@ -254,17 +213,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_miens' => 'Meus artigos', 'info_articles_tous' => 'Todos os artigos', 'info_articles_trouves' => 'Artigos atopados', - 'info_articles_trouves_dans_texte' => 'Artigos atopados (no texto)', 'info_attente_validation' => 'Os teus artigos en espera de validación', 'info_aucun_article' => 'Ningún artigo', - 'info_aucun_article_syndique' => 'Ningún artigo sindicado', 'info_aucun_auteur' => 'Ningún autor', 'info_aucun_message' => 'Ningunha mensaxe', 'info_aucun_rubrique' => 'Ningunha sección', - 'info_aucun_site' => 'Ningún sitio', - 'info_aucun_visiteur' => 'Ningún visitante', 'info_aujourdhui' => 'hoxe:', - 'info_auteur_message' => 'AUTOR/A DA MENSAXE:', + 'info_auteur_gere_toutes_rubriques_2' => 'Je gère toutes les rubriques', # MODIF 'info_auteurs' => 'O equipo de redacción', 'info_auteurs_par_tri' => 'Autores @partri@', 'info_auteurs_trouves' => 'Autores/as atopados', @@ -282,8 +237,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_2' => 'a en @liste@', 'info_code_acces' => 'Non esquezas os teus códigos de acceso!', 'info_compatibilite_html' => 'Norma HTML que se segue', - 'info_compresseur_gzip' => 'N. B. : Recoméndaselle comprobar antes de nada se o aloxador comprime xa sistematicamente os scripts php ; para iso, pode utilizar por exemplo o servizo seguinte : @testgzip@', # MODIF - 'info_compresseur_texte' => 'No caso de que o seu servidor non comprima automaticamente as páxinas html para enviarllas aos internautas, pode probar a forzar esta compresión para diminuír o peso das páxinas para descarga. Alerta : isto pode ralentizar considerablemente certos servidores.', 'info_config_suivi' => 'Se este enderezo corresponde á unha lista de correo, vostede pode indicar aquí abaixo o enderezo co cal os participantes no web se poden inscribir. Este enderezo pode ser un URL (por exemplo a páxina de inscrición á lista via web), ou un enderezo de correo electrónico dotado dun asunto específico (por exemplo: @adresse_suivi@?subject=subscribirse):', 'info_config_suivi_explication' => 'Pode subscribirse á lista de correo deste web. Recibirá entón por correo os anuncios de artigos e de breves propostas para publicación.', 'info_confirmer_passe' => 'Confirmar a nova chave:', @@ -307,8 +260,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Data de redacción anterior:', 'info_date_referencement' => 'DATA DE REFERENCIA DESTE WEB:', 'info_derniere_etape' => 'Acabouse!', - 'info_derniers_articles_publies' => 'Os teus últimos artigos publicados en liña', - 'info_desactiver_messagerie_personnelle' => 'Pode activar ou desactivar a súa mensaxería persoal neste web.', 'info_descriptif' => 'Descrición:', 'info_desinstaller_plugin' => 'elimina os datos e desactiva o plugin', 'info_discussion_cours' => 'Discusións en proceso', @@ -316,7 +267,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_email_envoi' => 'Enderezo de envío de correo (opcional)', 'info_email_envoi_txt' => 'Indique aquí o enderezo para lle enviar os correos (por defecto o enderezo destinatario será usado como enderezo de envío) :', 'info_email_webmestre' => 'Enderezo de correo-e. do/a webmáster (opcional)', # MODIF - 'info_entrer_code_alphabet' => 'Teclea o código do alfabeto a empregar:', 'info_envoi_email_automatique' => 'Envío automático de correos-e.', 'info_envoyer_maintenant' => 'Enviar agora', 'info_etape_suivante' => 'Pasar á etapa seguinte', @@ -330,7 +280,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( de publicación e de validacións dos artigos.', 'info_fichiers_authent' => 'Ficheiros de autenticación «.htpasswd»', 'info_forums_abo_invites' => 'O seu web dispón de foros para se aboar ; os visitantes están invitados a se rexistrar neles na parte pública do web.', - 'info_gauche_admin_effacer' => 'Esta páxina é unicamente accessible para o equipo de xestión do web.

    Dálle acceso a diferentes funcións de mantemento técnico. Algunhas delas dan lugar a procesos de autenticación específicos, que esixen ter un acceso por FTP ao web.

    ', 'info_gauche_admin_tech' => 'Esta páxina é unicamente accessible para o equipo de xestión do web.

    Dálle acceso a diferentes funcións de mantemento técnico. Algunhas delas dan lugar a procesos de autenticación específicos, que esixen ter un acceso por FTP ao web.

    ', 'info_gauche_admin_vider' => 'Esta páxina é unicamente accesible para o equipo de xestión do web.

    Dálle acceso a diferentes funcións de mantemento técnico. Algunhas delas dan lugar a procesos de autenticación específicos, que esixeb ter un acceso por FTP ao web.

    ', 'info_gauche_auteurs' => 'Aquí atoparás a todos os autores do web. @@ -338,23 +287,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_gauche_auteurs_exterieurs' => 'Os colaboradores exteriores, sen acceso ao web, indícanse por unha ícona azul; os autores que foron eliminados, por unha papeleira.', # MODIF 'info_gauche_messagerie' => 'A mensaxería permíteche intercambiar mensaxes entre o equipo de redacción, gardar notas (para o teu uso persoal) ou mostrar os anuncios na páxina de entrada do espazo privado (se estás no equipo de xestión).', - 'info_gauche_numero_auteur' => 'AUTOR/A NÚMERO', 'info_gauche_statistiques_referers' => 'Esta páxina presenta a lista de referentes, ou sexa, os enderezos con ligazóns apuntando a este mesmo web, únicamente para onte e para hoxe; esta lista ponse a cero a cada 24 horas.', 'info_gauche_visiteurs_enregistres' => 'aquí atoparás as visitas rexistradas no espazo público do web (foros con rexistro).', 'info_generation_miniatures_images' => 'Creación de miniaturas das imaxes', - 'info_gerer_trad' => 'Crear as ligazóns de tradución ?', 'info_gerer_trad_objets' => '@objets@ : xestionar as ligazóns de tradución', 'info_hebergeur_desactiver_envoi_email' => 'Algúns aloxadores desactivan o envío automático de correos-e. dende os seus servidores. Nese caso, as seguintes funcionalidades do SPIP non estarán dispoñibles.', 'info_hier' => 'onte:', - 'info_historique_activer' => 'Activar o seguimento de revisións', - 'info_historique_affiche' => 'Mostrar esta versión', - 'info_historique_comparaison' => 'Comparación', - 'info_historique_desactiver' => 'Desactivar o seguimento de revisións', - 'info_historique_texte' => 'O seguimento de revisións permite conservar un histórico de todas as modificacións realizadas no contido dun artigo, e de mostrar as diferenzas entre as versións sucesivas.', 'info_identification_publique' => 'A súa identidade pública...', 'info_image_process' => 'Probe a seleccionar o mellor método de fabricación de viñetas premendo sobre a imaxe correspondente.', 'info_image_process2' => 'N.B. Se non aparece ningunha imaxe, significa que o servidor que aloxa o web non foi configurado para para usar tales utilidades. Se desexa empregar estas funcións, contacte co responsable técnico e solicítelle as extensións «GD» ou «Imagick».', # MODIF @@ -373,8 +315,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_logos' => 'Os logos', 'info_maximum' => 'máximo:', 'info_meme_rubrique' => 'Na mesma rúbrica ou sección', - 'info_message' => 'Mensaxe de', - 'info_message_efface' => 'MENSAXE BORRADA', 'info_message_en_redaction' => 'As túas mensaxes en proceso de redacción', 'info_message_technique' => 'Mensaxe técnica:', 'info_messagerie_interne' => 'mensaxería interna', @@ -389,29 +329,22 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'Modificar o tema:', 'info_modifier_titre' => 'Modificar: @titre@', 'info_mon_site_spip' => 'O meu web SPIP', - 'info_mot_sans_groupe' => '(Palabra sen grupo...)', - 'info_moteur_recherche' => 'Motor de procura integrado', 'info_moyenne' => 'mediana:', - 'info_multi_articles' => 'Activar o menú de lingua sobre os artigos ?', 'info_multi_cet_article' => 'Lingua deste artigo :', 'info_multi_langues_choisies' => 'Quere seleccionar despois as linguas dispoñibles dos redactores de seu web. As linguas xa utilizadas no seu web (fixadas ao principio) non poden ser desactivadas.', 'info_multi_objets' => '@objets@ : activar o menú de idioma', - 'info_multi_rubriques' => 'Activar o menú de lingua nas seccións ?', 'info_multi_secteurs' => '... soamente para as seccións situadas na raíz ?', 'info_nb_articles' => '@nb@ artigos', - 'info_nb_articles_syndiques' => '@nb@ artigos sindicados', 'info_nb_auteurs' => '@nb@ autores', 'info_nb_messages' => '@nb@ mensaxes', 'info_nb_mots_cles' => '@nb@ palabras-clave', 'info_nb_rubriques' => '@nb@ seccións', - 'info_nb_sites' => '@nb@ sitios', 'info_nb_visiteurs' => '@nb@ visitantes', 'info_nom' => 'Nome', 'info_nom_destinataire' => 'Nome do/a destinatario', 'info_nom_site' => 'Nome do seu web', 'info_nombre_articles' => '@nb_articles@ artigos,', - 'info_nombre_partcipants' => 'PARTICIPANTES NA DISCUSIÓN:', 'info_nombre_rubriques' => '@nb_rubriques@ temas,', 'info_nombre_sites' => '@nb_sites@ webs,', 'info_non_deplacer' => 'Non desplazar...', @@ -420,19 +353,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_envoi_liste_nouveautes' => 'Non enviar á lista de novidades', 'info_non_modifiable' => 'Non se pode modificar', 'info_non_suppression_mot_cle' => 'Non quero eliminar esta palabra chave.', - 'info_note_numero' => 'Nota @numero@', 'info_notes' => 'Notas', - 'info_nouveaux_message' => 'Novas mensaxes', 'info_nouvel_article' => 'Novo artigo', 'info_nouvelle_traduction' => 'Nova tradución :', 'info_numero_article' => 'ARTIGO NÚMERO:', 'info_obligatoire_02' => '[Obrigatorio]', # MODIF 'info_option_accepter_visiteurs' => 'Aceptar a inscrición de visitantes do web público', - 'info_option_faire_suivre' => 'Enviar aviso das mensaxes dos foros ás persoas responsabeis dos artigos', 'info_option_ne_pas_accepter_visiteurs' => 'Rexeitar a inscrición de visitantes', 'info_options_avancees' => 'OPCIÓNS AVANZADAS', - 'info_ortho_activer' => 'Activar a comprobación de ortografía.', - 'info_ortho_desactiver' => 'Desactivar a comprobación de ortografía.', 'info_ou' => 'ou...', 'info_page_interdite' => 'Páxina prohibida', 'info_par_nom' => 'por nome', @@ -441,20 +369,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_par_tri' => '’(por @tri@)’', 'info_passe_trop_court' => 'Chave moi curta.', 'info_passes_identiques' => 'As dúas chaves non son idénticas.', - 'info_pense_bete_ancien' => 'Notas vellas', 'info_plus_cinq_car' => 'máis de 5 caracteres', 'info_plus_cinq_car_2' => '(Máis de 5 caracteres)', 'info_plus_trois_car' => '(Máis de 3 caracteres)', 'info_popularite' => 'popularidade: @popularite@; visitas: @visites@', - 'info_popularite_4' => 'popularidade: @popularite@; visitas: @visites@', 'info_post_scriptum' => 'Pé do artigo', 'info_post_scriptum_2' => 'Pé do artigo:', 'info_pour' => 'para', - 'info_preview_admin' => 'Só os administradores poden previsualizar o web', - 'info_preview_comite' => 'Todos os redactores poden previsualizar o web', - 'info_preview_desactive' => 'A previsualización está totalmente desactivada', - 'info_preview_texte' => 'É posíbel previsualizar o web como se todos os artigos e breves (que teñan cando menos o estado de « proposto ») estivesen publicados. Esta posibilidade debe estar aberta só para os administradores, para todos os redactores, ou para calquera ?', - 'info_principaux_correspondants' => 'Os colaboradores principais', + 'info_preview_texte' => 'É posíbel previsualizar o web como se todos os artigos e breves (que teñan cando menos o estado de « proposto ») estivesen publicados. Esta posibilidade debe estar aberta só para os administradores, para todos os redactores, ou para calquera ?', # MODIF 'info_procedez_par_etape' => 'procede etapa por etapa', 'info_procedure_maj_version' => 'o procedemento da posta ó día ten que ser lanzado a fin de adaptar a base de datos á nova versión de SPIP.', @@ -471,14 +393,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( cos seus códigos de acceso ao web privado. Algúns provedores desactivan o envío automático desde os seus servidores: nese caso, a inscrición automática é imposible.
    ', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Quere empregar o motor de procura integrado en SPIP? - (desactivalo acelera o funcionamento do sistema.)', - 'info_question_vignettes_referer_non' => 'Non mostrar as capturas de webs de orixe das visitas', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Raíz do web', 'info_recharger_page' => 'Recarga a páxina nuns intres.', - 'info_recherche_auteur_a_affiner' => 'Resultados de máis para "@cherche_auteur@"; por favor, afine a súa procura.', - 'info_recherche_auteur_ok' => 'Atopou.se máis dunha persoa para "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Ningún resultado para "@cherche_auteur@".', 'info_recommencer' => 'Volta empezar.', 'info_redacteur_1' => 'Redactor/a', @@ -495,7 +411,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'temas', 'info_rubriques_02' => 'temas', 'info_rubriques_trouvees' => 'Temas atopados', - 'info_rubriques_trouvees_dans_texte' => 'Temas atopados (no texto)', 'info_sans_titre' => 'Sen título', 'info_selection_chemin_acces' => 'Selecciona aquí a vía de acceso á guía:', 'info_signatures' => 'sinaturas', @@ -508,13 +423,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_sites_lies_mot' => 'Os webs referidos ligados a esta palabra chave', 'info_sites_proxy' => 'Empregar un proxy', 'info_sites_trouves' => 'Webs atopados', - 'info_sites_trouves_dans_texte' => 'Webs atopados (no texto)', 'info_sous_titre' => 'Subtítulo:', 'info_statut_administrateur' => 'Equipo de xestión', 'info_statut_auteur' => 'Categoría deste autor:', 'info_statut_auteur_a_confirmer' => 'Inscrición para confirmar', 'info_statut_auteur_autre' => 'Outro estatuto :', - 'info_statut_efface' => 'Eliminado', 'info_statut_redacteur' => 'Redactor/a', 'info_statut_utilisateurs_1' => 'Categoría por defecto de redactores importados', 'info_statut_utilisateurs_2' => 'Escolla a categoría que han ter as persoas presentes na guía LDAP cando se conecten por primeira vez. Máis tarde poderás trocar este valor caso por caso.', @@ -537,7 +450,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_presents' => 'Todos os artigos publicados neste tema', 'info_tous_articles_refuses' => 'Todos os artigos foron rexeitados', 'info_tous_les' => 'todos os:', - 'info_tous_redacteurs' => 'Anuncios a toda a redacción', 'info_tout_site' => 'Todo o web', 'info_tout_site2' => 'O artigo non foi traducido nesta lingua.', 'info_tout_site3' => 'O artigo foi traducido nesta lingua, pero as modificacións foron aplicadas polo momento ao artigo de referencia. A tradución debe ser actualizada.', @@ -554,7 +466,6 @@ cunha cor que indica o seu estado :', 'info_une_rubrique_02' => '1 tema', 'info_url' => 'URL:', 'info_url_proxy' => 'URL do proxy', - 'info_url_site' => 'URL DO WEB :', 'info_url_test_proxy' => 'URL de test', 'info_urlref' => 'Ligazón de hipertexto :', 'info_utilisation_spip' => 'Agora podes comezar a usar o sistema de publicación asistida...', @@ -565,7 +476,6 @@ cunha cor que indica o seu estado :', 'info_visiteurs_02' => 'Visitantes do web público', 'info_webmestre_forces' => 'Os/as webmásters actuais están definidos en @file_options@.', 'install_adresse_base_hebergeur' => 'Enderezo da base de datos atribuída polo aloxador', - 'install_base_ok' => 'A base @base@ foi recoñecida', 'install_connect_ok' => 'A nova base está correctamente declarada co nome do servidor @connect@.', 'install_echec_annonce' => 'A instalación probabelmente vai pechar ou lanzar un sitio non funcional...', 'install_extension_mbstring' => 'SPIP non funnciona con :', @@ -592,8 +502,6 @@ cunha cor que indica o seu estado :', 'item_activer_messages_avertissement' => 'Activar as mensaxes de aviso', 'item_administrateur_2' => 'Equipo de xestión', 'item_afficher_calendrier' => 'Mostrar no calendario', - 'item_autoriser_documents_joints' => 'Autorizar os documentos adxuntos cos artigos', - 'item_autoriser_documents_joints_rubriques' => 'Autorizar os documentos nos temas', 'item_autoriser_syndication_integrale' => 'Difundir integramente os artigos nos ficheiros de subscrición', 'item_choix_administrateurs' => 'o equipo de xestión', 'item_choix_generation_miniature' => 'Crear automaticamente as miniaturas das imaxes.', @@ -601,7 +509,6 @@ cunha cor que indica o seu estado :', 'item_choix_redacteurs' => 'o equipo de redacción', 'item_choix_visiteurs' => 'as visitas do web público', 'item_creer_fichiers_authent' => 'Crear os ficheiros «.htpasswd»', - 'item_limiter_recherche' => 'Limitar a procura ás informacións contidas neste web', 'item_login' => 'Identificador', 'item_messagerie_agenda' => 'Activar a mensaxería e a axenda', 'item_mots_cles_association_articles' => 'ós artigos', @@ -611,22 +518,15 @@ cunha cor que indica o seu estado :', 'item_non_accepter_inscriptions' => 'Non aceptar as inscricións', 'item_non_activer_messages_avertissement' => 'Sen mensaxes de aviso', 'item_non_afficher_calendrier' => 'Non mostrar no calendario', - 'item_non_autoriser_documents_joints' => 'Non permitir documentos nos artigos', - 'item_non_autoriser_documents_joints_rubriques' => 'Non permitir documentos nos temas', 'item_non_autoriser_syndication_integrale' => 'Non difundir senón un resumo', - 'item_non_compresseur' => 'Desactivar a compactación', 'item_non_creer_fichiers_authent' => 'Non crear estes ficheiros', - 'item_non_gerer_statistiques' => 'Non xestionar as estatísticas', - 'item_non_limiter_recherche' => 'Estender a procura ó contido dos webs referidos', 'item_non_messagerie_agenda' => 'Desactivar a mensaxería e a axenda', 'item_non_publier_articles' => 'Non publicar os artigos antes da data de publicación fixada.', - 'item_non_utiliser_moteur_recherche' => 'Non usar o motor', 'item_nouvel_auteur' => 'Novo/a autor/a', 'item_nouvelle_rubrique' => 'Novo tema', 'item_oui' => 'Sí', 'item_publier_articles' => 'Publicar os artigos, sen importar a súa data de publicación.', 'item_reponse_article' => 'Resposta ó artigo', - 'item_utiliser_moteur_recherche' => 'Empregar o motor de procura', 'item_version_html_max_html4' => 'Limitarse ao HTML4 sobre o sitio público', 'item_version_html_max_html5' => 'Permitir o HTML5', 'item_visiteur' => 'visitante', @@ -641,22 +541,18 @@ cunha cor que indica o seu estado :', 'label_choix_langue' => 'Seleccione o seu idioma', 'label_nom_fichier_connect' => 'Indique o nome utilizado polo servidor', 'label_slogan_site' => 'Lema do sitio', - 'label_taille_ecran' => 'Largura de pantalla', + 'label_taille_ecran' => 'Largura de pantalla', # MODIF 'label_texte_et_icones_navigation' => 'Menú de navegación', 'label_texte_et_icones_page' => 'Presentación na páxina', 'ldap_correspondance' => 'herdanza do campo @champ@', 'ldap_correspondance_1' => 'Herdanza dos campos LDAP', 'ldap_correspondance_2' => 'Para cadanseu campo SPIP, indique o nome do campo LDAP correspondente. Deixe baleiro para non os cubrir, separar por espazos ou comas para probar varios campos LDAP.', - 'lien_ajout_destinataire' => 'Engadir destinatari@', 'lien_ajouter_auteur' => 'Engadir autor/a', - 'lien_ajouter_participant' => 'Engadir participante', 'lien_email' => 'correo-e.', 'lien_nom_site' => 'NOME DO WEB:', 'lien_retirer_auteur' => 'Retirar esta persoa', 'lien_retirer_tous_auteurs' => 'Retirar todos os autores', - 'lien_retrait_particpant' => 'retirar participante', 'lien_site' => 'web', - 'lien_supprimer_rubrique' => 'Suprimir este tema', 'lien_tout_deplier' => 'Despregalo todo', 'lien_tout_replier' => 'Repregalo todo', 'lien_tout_supprimer' => 'Suprimir todo', @@ -681,13 +577,12 @@ cunha cor que indica o seu estado :', 'mois_non_connu' => 'descoñecido', // N - 'nouvelle_version_spip' => 'A versión @version@ de SPIP está dispoñible', + 'nouvelle_version_spip' => 'A versión @version@ de SPIP está dispoñible', # MODIF // O 'onglet_contenu' => 'Contido', 'onglet_declarer_une_autre_base' => 'Declarar algunha outra base de datos', 'onglet_discuter' => 'Discutir', - 'onglet_documents' => 'Documentos', 'onglet_interactivite' => 'Interactividade', 'onglet_proprietes' => 'Propiedades', 'onglet_repartition_actuelle' => 'actualmente', @@ -725,7 +620,7 @@ cunha cor que indica o seu estado :', 'plugin_info_telecharger' => 'descargar desde @url@ e instalalo no cartafol @rep@', 'plugin_librairies_installees' => 'Librarías instaladas', 'plugin_necessite_lib' => 'Este módulo necesita a libraría @lib@', - 'plugin_necessite_plugin' => 'Necesita o plugin @plugin@ na súa version @version@ mínimo.', + 'plugin_necessite_plugin' => 'Necesita o plugin @plugin@ na súa version @version@ mínimo.', # MODIF 'plugin_necessite_spip' => 'Necesita SPIP na súa versión @version@ como mínimo.', 'plugin_source' => 'fonte: ', 'plugin_titre_automatique' => 'Instalación automática', @@ -764,6 +659,7 @@ cunha cor que indica o seu estado :', // R 'repertoire_plugins' => 'Repertorio :', + 'required' => '[Obrigatorio]', # MODIF // S 'sans_heure' => 'sen hora', @@ -793,18 +689,13 @@ cunha cor que indica o seu estado :', mais redirixido cara a outro URL. Para eliminar a redirección, elimina o URL aquí.', 'texte_aucun_resultat_auteur' => 'Ningún resultado de "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Este web pode indicar permanentemente a lista de redactores que están conectados nun intre, o que lle permite intercambiar mensaxes en directo (cando a mensaxería habilitada). Pode decidir non aparecer nesta lista (será «invisible» para os demais).', - 'texte_auteur_messagerie_1' => 'Este web permite o intercambio de mensaxes e a constitución de foros de discusión privados entre os participantes do web. Pode decidir non participar nestes parladoiros.', 'texte_auteurs' => 'A AUTORÍA', 'texte_choix_base_1' => 'Elixe a túa base:', 'texte_choix_base_2' => 'O servidor SQL contén varias bases de datos.', 'texte_choix_base_3' => 'Seleccione aquí a que lle dese o seu provedor:', 'texte_choix_table_prefix' => 'Prefixo das táboas :', - 'texte_commande_vider_tables_indexation' => 'empregue este comando para baleirar as táboas - de indexado empregadas polo motor de procura integrado no Spip. - Isto permite gañar espazo en disco.', 'texte_compatibilite_html' => 'Pode pedir que SPIP produza, no sitio público, código compatible coa norma HTML4, ou permitirlle utilizar as posibilidades máis modernas do HTML5.', 'texte_compatibilite_html_attention' => 'Non hai ningún risco ao activar a opción HTML5, pero se o fai, as páxinas do seu sitio deberán comezar pola seguinte mención para seren correctas : <!DOCTYPE html>.', - 'texte_compresse_ou_non' => '(comprimido ou non)', 'texte_compte_element' => '@count@ elemento', 'texte_compte_elements' => '@count@ elementos', 'texte_conflit_edition_correction' => 'Controle a seguir as diferenzas entre as dúas versións do texto; pode tamén copiar as súas modificacións e volver comezar.', @@ -818,10 +709,8 @@ cunha cor que indica o seu estado :', 'texte_date_publication_anterieure' => 'Data de redacción anterior :', 'texte_date_publication_anterieure_nonaffichee' => 'Non mostrar data de redacción anterior.', 'texte_date_publication_article' => 'DATA DE PUBLICACIÓN EN LIÑA :', - 'texte_descriptif_petition' => 'Descrición da petición', 'texte_descriptif_rapide' => 'Descrición rápida', 'texte_effacer_base' => 'Eliminar a base de datos SPIP', - 'texte_effacer_donnees_indexation' => 'Eliminar os datos de indexación', 'texte_effacer_statistiques' => 'Borrar as estatísticas', 'texte_en_cours_validation' => 'Os artigos e as breves de aquí embaixo foron propostos para a súa publicación.', # MODIF 'texte_enrichir_mise_a_jour' => 'Pódese mellorar a presentación do texto empregando os «atallos tipográficos».', @@ -837,33 +726,19 @@ estes ficheiros).

    ', # MODIF 'texte_informations_personnelles_2' => '(Nota: se se trata dunha reinstalación, e o teu acceso vai sen atrancos, podes', # MODIF 'texte_introductif_article' => '(Texto introdutorio do artigo.)', 'texte_jeu_caractere' => 'Aconséllase empregar, no seu web, o alfabeto universal (utf-8) : isto permite mostrar textos en todas as linguas, e non presenta problemas de compatibilidade cos navegadores modernos.', - 'texte_jeu_caractere_2' => 'Atención : este axuste non ten efecto retroactivo. Daquela, non se produce a conversión dos textos xa rexistrados na base de datos.', 'texte_jeu_caractere_3' => 'O seu web está actualmente instalado co xogo de carácteres :', 'texte_jeu_caractere_4' => 'Se iso non corresponde coa realidade dos seus datos (logo, por exemplo, dunha restauración da base de datos), ou se vostede principia neste web e quere partir doutro xogo de carácteres, indíqueo por favor aquí :', - 'texte_jeu_caractere_conversion' => 'Nota : pode decidir converter dunha soa vez o conxunto dos texto do seu web (artigos, breves, foros, etc.) ao alfabeto utf-8, se accede en á páxina de conversión a utf-8.', - 'texte_lien_hypertexte' => '(Se a súa mensaxe se refire a un artigo publicado no web, ou a - unha páxina con que forneza máis información, indica aquí o título da páxina e o seu enderezo URL.)', 'texte_login_ldap_1' => '(Deixar baleiro para un acceso anónimo, ou poñer a vía completa, por exemplo «uid=maricarmen, ou=users, dc=meu-dominio, dc=com».)', 'texte_login_precaution' => 'Atención! Este é o identificador co que se conectou. Empregue este formulario con precaución...', - 'texte_message_edit' => 'Atención: esta mensaxe pode ser modificada por calquera dos xestores, -e será visible para todo o equipo de redacción. Use os anuncios só para avisar - de eventos importantes da vida do web.', 'texte_messagerie_agenda' => 'A mensaxería permítelles aos redactores do web comunicarse entre eles directamente no espazo privado do web. Está asociado a unha axenda.', 'texte_mise_a_niveau_base_1' => 'Acaba de por ao día os ficheiros do SPIP. Agora ten que actualizar a base de datos do web.', 'texte_modifier_article' => 'Modificar o artigo:', - 'texte_moteur_recherche_active' => 'O motor de procuras está activado. emprégueo - cando queira proceder a un reindexado rápido (trala restauración dunha copia de seguridade, - por exemplo). Saiba que os documentos modificados de xeito normal - (dende a interface do SPIP) son reindexados automaticamente: - este comando só é útil excepcionalmente.', - 'texte_moteur_recherche_non_active' => 'O motor de procura non está activado.', 'texte_multilinguisme' => 'Se desexa crear artigos en varias linguas, cunha navegación complexa, pode engadir un menú de selección da lingua dos artigos e/ou das seccións, en función da organización do seu web.', # MODIF 'texte_multilinguisme_trad' => 'Pode igualmente activar un sistema de xestión de ligazóns entre as diferentes traducións dun artigo.', # MODIF 'texte_non_compresse' => 'non comprimido (o teu servidor non soporta esta funcionalidade)', - 'texte_nouveau_message' => 'Nova mensaxe', 'texte_nouvelle_version_spip_1' => 'Instalaches unha nova versión de SPIP.', 'texte_nouvelle_version_spip_2' => 'Esta nova versión precisa unha posta ao día máis completa que a habitual. De seres webmáster do web, elimine o ficheiro @connect@ e retome a instalación para poñer ao día os parámetros de conexión á base de datos.

    (NB. : se esqueceu os parámetros de conexión, bótelle un ollo ao ficheiro @connect@ antes de borralo...)

    ', 'texte_operation_echec' => 'Volve á páxina anterior, selecciona outra base ou crea unha nova. Verifica a información que che dera o teu aloxador.', @@ -878,7 +753,6 @@ e será visible para todo o equipo de redacción. Use os anuncios só para avisa que a data de publicación foi fixada no futuro?', 'texte_rappel_selection_champs' => '[Lembre seleccionar correctamente este campo.]', 'texte_recalcul_page' => 'Se quere recalcular unha soa páxina, vaia millor polo espazo público e empregue o botón «recargar».', - 'texte_recapitiule_liste_documents' => 'Esta páxina recolle a lista dos documentos introducidos nos temas. Para modificar as informacións de cada documento, siga a ligazón cara á páxina de tal tema.', 'texte_recuperer_base' => 'Reparar a base de datos', 'texte_reference_mais_redirige' => 'artigo referido no seu web SPIP, mais redirixido cara a outro URL.', 'texte_requetes_echouent' => 'Cando algunhas peticións SQL fallan @@ -904,7 +778,6 @@ e será visible para todo o equipo de redacción. Use os anuncios só para avisa grandes cambios gráficos ou de estrutura do web.', 'texte_sur_titre' => 'Sobretítulo', 'texte_table_ok' => ': esta táboa está ben.', - 'texte_tables_indexation_vides' => 'As táboas de indexación do motor están baleiras.', 'texte_tentative_recuperation' => 'Tentativa de reparación', 'texte_tenter_reparation' => 'Tentar unha reparación da base de datos', 'texte_test_proxy' => 'Para probar o proxy, indique o enderezo do web que queira testear.', @@ -916,23 +789,8 @@ e será visible para todo o equipo de redacción. Use os anuncios só para avisa «abertos» recentemente, por mor de evitar as modificacións simultáneas. Esta opción está desactivada por defecto para evitar mostrar mensaxes de aviso intempestivas.', - 'texte_trop_resultats_auteurs' => 'Resultados de máis para "@cherche_auteur@"; por favor, afine a procura.', - 'texte_unpack' => 'descarga da última versión', - 'texte_utilisation_moteur_syndiques' => 'Cando emprega o motor de procura integrado - no SPIP, pode efectuar as procuras nos webs e nos artigos afiliados - de dous xeitos diferentes. -
    - O máis - sinxelo consiste en buscar só - nos títulos e nas descricións dos artigos.
    - - Un segundo método, moito máis potente, permítelle - a SPIP buscar, a maiores, no texto dos lugares afiliados . Se se referencia un web, - daquela SPIP buscará tamén alá, no propio texto do web referido.', - 'texte_utilisation_moteur_syndiques_2' => 'Este método obriga a SPIP a visitar - regularmente os webs referidos, o cal pode provocar unha lixeira perda de - velocidade no seu propio web.', 'texte_vide' => 'baleiro', 'texte_vider_cache' => 'Baleirar a memoria caché', - 'titre_admin_effacer' => 'Mantemento técnico', 'titre_admin_tech' => 'Mantemento técnico', 'titre_admin_vider' => 'Mantemento técnico', 'titre_ajouter_un_auteur' => 'Engadir un autor', @@ -963,54 +821,27 @@ e será visible para todo o equipo de redacción. Use os anuncios só para avisa 'titre_naviguer_dans_le_site' => 'Navegar no web...', 'titre_nouvelle_rubrique' => 'Novo tema', 'titre_numero_rubrique' => 'TEMA NÚMERO:', - 'titre_page_admin_effacer' => 'Mantemento técnico: borrar a base', 'titre_page_articles_edit' => 'Modificar: @titre@', 'titre_page_articles_page' => 'Os artigos', 'titre_page_articles_tous' => 'Todo o web', - 'titre_page_auteurs' => 'Visitantes', 'titre_page_calendrier' => 'Calendario @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Configuración do web', - 'titre_page_config_fonctions' => 'Configuración do web', - 'titre_page_configuration' => 'Configuración do web', - 'titre_page_controle_petition' => 'Seguimento das peticións', 'titre_page_delete_all' => 'Supresión total e irreversible', - 'titre_page_documents_liste' => 'Os documentos dos temas', - 'titre_page_index' => 'O teu espazo privado', - 'titre_page_message_edit' => 'Redactar unha mensaxe', - 'titre_page_messagerie' => 'A túa mensaxería', 'titre_page_recherche' => 'Resultados da procura de @recherche@', 'titre_page_statistiques_referers' => 'Estatísticas (ligazóns entrantes)', - 'titre_page_statistiques_signatures_jour' => 'Número de sinaturas por día', - 'titre_page_statistiques_signatures_mois' => 'Número de sinaturas por mes', 'titre_page_upgrade' => 'Posta ao día de SPIP', 'titre_publication_articles_post_dates' => 'Publicación dos artigos con data posterior', - 'titre_referencer_site' => 'Referir o web:', - 'titre_rendez_vous' => 'CITA:', 'titre_reparation' => 'Reparación', 'titre_suivi_petition' => 'Seguimento das peticións', 'tls_ldap' => 'Capa de seguridade de transporte (Transport Layer Security) :', - 'trad_article_inexistant' => 'Non hai artigo que leve este número.', 'trad_article_traduction' => 'Todas as versións deste artigo :', - 'trad_deja_traduit' => 'Erro: é imposible religar este artigo co número solicitado.', 'trad_delier' => 'Non ligar a estas traducións', 'trad_lier' => 'Este artigo é unha tradución do artigo número :', 'trad_new' => 'Escribir unha nova tradución', // U - 'upload_info_mode_document' => 'Poñer esta imaxe no portafolio', - 'upload_info_mode_image' => 'Retirar esta imaxe do portafolio', - 'utf8_convert_attendez' => 'Agarde un pouco de tempo e recargue esta páxina.', - 'utf8_convert_avertissement' => 'Vai converter o contido da súa base de datos (artigos, breves, etc) do xogo de carácteres @orig@ ao xogo de carácteres @charset@.', - 'utf8_convert_backup' => 'Non esqueza antes de nada de facer unha salvagarda completa do seu web. Débese tamén comprobar que os esqueletos e ficheiros de lingua sexan compatibles con @charset@.', - 'utf8_convert_erreur_deja' => 'O seu web xa está en carácter @charset@, é inútil convertelo...', 'utf8_convert_erreur_orig' => 'Erro : o xogo de carácteres @charset@ non está soportado.', - 'utf8_convert_termine' => 'Rematou!', - 'utf8_convert_timeout' => 'Importante : para o caso de que se produza timeout do servidor, recargue a páxina até que indique « terminé ».', - 'utf8_convert_verifier' => 'Agora debe baleirar a memoria temporal (caché), e comprobar que todo vai ben nas páxinas públicas do web. No caso de que haxa problemas graves, unha copia de salvagarda dos seus datos foi realizada (en formato SQL) no cartafol @rep@.', - 'utf8_convertir_votre_site' => 'Converter o seu web a utf-8', // V 'version' => 'Versión :' ); - -?> diff --git a/www/ecrire/lang/ecrire_he.php b/www/ecrire/lang/ecrire_he.php index 5816c710..ff6b1a76 100644 --- a/www/ecrire/lang/ecrire_he.php +++ b/www/ecrire/lang/ecrire_he.php @@ -1,9 +1,11 @@ 'חזור אל הדף הקודם וודא את האינפורמציה שסיפקת', 'avis_connexion_ldap_echec_3' => 'לחלופין, אל תשתמש בתמיכת אל.די.איי.פי לייבא משתמשים ', 'avis_deplacement_rubrique' => ' אזהרה ! המדור הזה כולל @contient_breves@ brève@scb@ : אם הנך מזיז אותו, וודא שהנך מסמן את התיבה הזאת לאישור.', - 'avis_destinataire_obligatoire' => 'הנך חייב לבחור נמען לפני שליחת הודעה זאת ', 'avis_erreur_connexion_mysql' => 'שגיאת התחברות לאס.קיו.אל', - 'avis_erreur_version_archive' => 'חשוב! הקובץ @archive@ מתאים ל גרסה אחרת של SPIP מאשר זאת שאתה התקנת.
    אתה עומד בפני קשיים גדולים: סיכון להריסת בסיס הנתונים שלך, חוסר תפקודים שונים של האתר וכו. לא ללחוץ על הביקוש היבוא. לפרטים נוספים, אנא פנה אל המסמכים של SPIP.', # MODIF - 'avis_espace_interdit' => 'Forbidden area

    אס.פי.אי.פי כבר מותקן', + 'avis_espace_interdit' => 'Forbidden area

    אס.פי.אי.פי כבר מותקן', # MODIF 'avis_lecture_noms_bases_1' => 'תוכנת ההתקנה לא יכולה לקרוא את שמות בסיסי הנתונים המותקנים ', 'avis_lecture_noms_bases_2' => 'או שאף בסיס אינו נגיש , או שהפונקציה המאפשרת לערוך רשימה של הבסיסים אינה פעילה יותר מסיבות בטיחות (מקרה הקורה אצל הרבה שרתי אכסון).', 'avis_lecture_noms_bases_3' => 'במידה והחלופה השנייה הייתה נכונה, ישנה אפשרות שבסיס הנתונים שנקרא אחרי כניסתך למערכת יכול להיות שימושי: ', - 'avis_non_acces_message' => 'אינך חייב להכנס אל ההודעה הזאת', 'avis_non_acces_page' => 'אינך חייב להכנס לדף הזה', 'avis_operation_echec' => 'הפעולה נכשלה', 'avis_operation_impossible' => 'פעולה אינה אפשרית', - 'avis_probleme_archive' => 'שגיאת קריאה בקובץ @archive@', 'avis_suppression_base' => 'אזהרה, מחיקת המידע היא פעולה בלתי הפיכה ', - 'avis_version_mysql' => 'הגרסה שלך ל-מיי.אס.קיו.אל (@version_mysql@) לא מאפשרת תיקון עצמי לטבלאות בסיס הנתונים ', // B 'bouton_acces_ldap' => ' הוסף גישה ל-LDAP', 'bouton_ajouter' => 'הוסף', - 'bouton_ajouter_participant' => ':הוסף משתמש', - 'bouton_annonce' => 'הודעה', 'bouton_annuler' => 'בטל', - 'bouton_checkbox_envoi_message' => 'אפשרות לשליחת הודעה', - 'bouton_checkbox_indiquer_site' => 'אתה חייב לרשום שם של אתר אינטרנט', - 'bouton_checkbox_signature_unique_email' => 'רק חתימה אחת לדוא"ל אחד', - 'bouton_checkbox_signature_unique_site' => 'רק חתימה אחת לאתר אינטרנט אחד', 'bouton_demande_publication' => 'בקשה להופיע את המאמר', 'bouton_desactive_tout' => 'בטל פעולה של הכל', 'bouton_desinstaller' => 'הסר', - 'bouton_effacer_index' => 'מחיקת הרשימות', 'bouton_effacer_tout' => 'מחיקת הכל', - 'bouton_envoi_message_02' => 'שליחת הודעה', 'bouton_envoyer_message' => 'הודעה סופית : שלח', 'bouton_fermer' => 'סגור', 'bouton_mettre_a_jour_base' => 'עכדן נדבך נתונים', 'bouton_modifier' => 'תיקון', - 'bouton_pense_bete' => 'תזכיר אישי', - 'bouton_radio_activer_messagerie' => 'אפשר התכתבות פנימית ', - 'bouton_radio_activer_messagerie_interne' => 'הפעל את הדוא"ל הפנימי', - 'bouton_radio_activer_petition' => 'להפעיל את העצומה', 'bouton_radio_afficher' => 'הראה', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'הופיע ברשימת העורכים המחוברים', - 'bouton_radio_desactiver_messagerie' => 'ביטול התכתבות ', 'bouton_radio_envoi_annonces_adresse' => ':שליחת הודעות לכתובת', 'bouton_radio_envoi_liste_nouveautes' => 'שלח את רשימת החדשות האחרונה', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'אל תופיע ברשימת העורכים המחוברים', 'bouton_radio_non_envoi_annonces_editoriales' => 'אל תשלח הודעות עורך ', - 'bouton_radio_pas_petition' => 'אין עצומה', - 'bouton_radio_petition_activee' => 'עצומה מופעלת', - 'bouton_radio_supprimer_petition' => 'מחק את העצומה', 'bouton_redirection' => 'כוון שנית', 'bouton_relancer_installation' => 'התחל בשנית התקנה', 'bouton_suivant' => 'הבא', 'bouton_tenter_recuperation' => 'ניסיון תיקון', 'bouton_test_proxy' => 'בחן את ייפוי הכוח', 'bouton_vider_cache' => '(לרוקן את המחבוא(מטמון', - 'bouton_voir_message' => 'הראה הודעה לפני נתינת תוקף ', // C - 'cache_mode_compresse' => 'קבצי ה-CACHE רשומים במצב דחוס', - 'cache_mode_non_compresse' => 'קבצי ה-CACHE רשומים במצב לא דחוס', 'cache_modifiable_webmestre' => 'הפרמטר הזה ניתן לשינוי על ידי מנהל האתר', 'calendrier_synchro' => 'אם אתה משתמש באפליקציית יומן תואמת עם iCal, אתה יכול לסנכרן את זה עם אינפורמציה של אתרים אחרים', 'config_activer_champs' => 'הפעל את השדות הבאים', @@ -104,7 +82,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_titre_base_sup' => 'הצהרה של בסיס נתונים נוסף', 'config_titre_base_sup_choix' => 'בחר בסיס נתונים נוסף', 'connexion_ldap' => 'התחברות:', - 'copier_en_local' => 'העתק למקומי', // D 'date_mot_heures' => '"H"', @@ -131,7 +108,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'שם ההתחברות שלך', 'entree_login_connexion_1' => 'שם ההתחברות של החיבור', 'entree_login_connexion_2' => '(מתייחס לעיתים ל-LOGIN הגישה שלך ל-FTP, לפעמים הוא מושאר ריק)', - 'entree_login_ldap' => 'שם התחברות אל.די.איי.פי ראשוני', 'entree_mot_passe' => 'סיסמתך', 'entree_mot_passe_1' => 'סיסמת התחברות', 'entree_mot_passe_2' => '(מתייחס לעיתים לסיסמה שלך על ה-FTP, לפעמים מושאר ריק)', @@ -159,7 +135,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'ליותר פרטים על כל הטכניקות, אל תהסס לפנות ל המסמכים של <SPIP 'שני לוחות זמנים נמצאים בסל האשפה. הראשון הוא מפת אתר אשר מראה את כל הכתבות המפורסמות. השני מכיל הודעות עורכים גם ההודעות הפרטיות האחרונות שלך: זה שמור בשבילך הודות למפתח אישי שאתה יכול לשנות בכל זמן על ידי חידוש סיסמתך.', 'ical_methode_http' => 'מוריד', - 'ical_methode_webcal' => 'סינכרוניזציה (webcal://)', + 'ical_methode_webcal' => 'סינכרוניזציה (webcal://)', # MODIF 'ical_texte_js' => 'שורה של שפת "ג’אווה סקריפט" מאפשרת להציג, בקלות ובכל אתר ששייך לך, המאמרים האחרונים מפורסמים באתר זה.', 'ical_texte_prive' => 'לוח הזמנים זה, לשימוש פרטי בלבד, מיידע אותך על הפעילות הפרטית של העורכים של האתר הזה (משימות, פגישות אישיות, מאמרים ומבזקים מוצעים...).', 'ical_texte_public' => 'לוח הזמנים זה מאפשר לך לעקוב אחר הפעילות הציבורית של האתר הזה (מאמרים מפורסמים ומבזקים). ', @@ -175,12 +151,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_calendrier' => 'לוח שנה', 'icone_creer_auteur' => 'צור מחבר חדש ושתף אותו עם המאמר הזה', 'icone_creer_mot_cle' => 'צור מילת מפתח חדשה וצור לה קישור עם המאמר הזה', - 'icone_creer_mot_cle_rubrique' => 'צור מילת מפתח חדשה וקשר אותה לרובריקה הזאת', - 'icone_creer_mot_cle_site' => 'צור מילת מפתח חדשה וקשר אותה לאתר זה', 'icone_creer_rubrique_2' => 'צור מדור חדש', - 'icone_envoyer_message' => 'שלח הודעה זו', 'icone_modifier_article' => 'שנה את המאמר הזה', - 'icone_modifier_message' => 'שנה את ההודעה הזאת', 'icone_modifier_rubrique' => 'תיקון מדור', 'icone_relancer_signataire' => 'העלה מחדש את החתום', 'icone_retour' => 'אחורה', @@ -191,11 +163,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'תן תוקף לחתימה זו', 'image_administrer_rubrique' => 'אתה יכול לנהל את המדור', 'info_1_article' => 'מאמר 1', - 'info_1_site' => 'אתר 1', 'info_activer_cookie' => 'אתה יכול להפעיל עוגיית התכתבות, אשר יאפשר לך לעבור בקלות מן האתר הציבורי לאתר הפרטי.', - 'info_admin_gere_rubriques' => 'המנהל הזה מנהל את המדורים הבאים:', - 'info_admin_gere_toutes_rubriques' => 'המנהל הזה מנהל את כל המדורים.', # MODIF 'info_administrateur' => 'מנהל', 'info_administrateur_1' => 'מנהל', 'info_administrateur_2' => 'של האתר (use with caution)', @@ -205,16 +174,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'הינך יכול לנהל מדור זה', 'info_adresse' => ':אל הכתובת', 'info_adresse_url' => 'הכתובת הכללית של האתר הציבורי שלך', - 'info_afficher_visites' => ':הצג ביקורים ל', 'info_aide_en_ligne' => 'עזרה מקוונת ל-אס.פי.אי.פי', 'info_ajout_image' => 'כאשר אתה מוסיף תמונות כמסמכים מצורפים למאמר, SPIP יכול ליצור עבורך, בצורה אוטומטית, מיניאטורות של תמונות מוכנסות. הדבר מאפשר למשל ליצור אוטומטית גלריה או תיק עבודות.', - 'info_ajout_participant' => ':המשתתף הבא צורף', 'info_ajouter_rubrique' => 'הוספת מדור נוסף לניהול:', 'info_annonce_nouveautes' => 'מודעות אחרונות של חדשות', - 'info_anterieur' => 'הקודם', 'info_article' => 'מאמר', 'info_article_2' => 'מאמרים', 'info_article_a_paraitre' => 'המאמרים בעלי תאריך מאוחר שיופיעו', @@ -222,10 +188,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_2' => 'מאמרים', 'info_articles_auteur' => 'המאמרים של המחבר הזה', 'info_articles_trouves' => 'מאמרים נמצאו', - 'info_articles_trouves_dans_texte' => '(מאמרים נמצאו (בתוך הטקסט', 'info_attente_validation' => 'המאמרים שלך מחכים למתן תוקף', 'info_aujourdhui' => ':היום', - 'info_auteur_message' => ':שולח הודעה', 'info_auteurs' => 'מחברים', 'info_auteurs_par_tri' => 'מחברים@partri@', 'info_auteurs_trouves' => 'מחברים נמצאו', @@ -242,8 +206,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_1' => 'st מחוץ ל @liste@', 'info_classement_2' => 'th מחוץ ל @liste@', 'info_code_acces' => '!אל תשכח את את קודי הגישה שלך', - 'info_compresseur_gzip' => 'N. B. :/b> מומלץ לבדוק מראש אם המאכסן מכווץ מקודם בצורה סיסטמטית את הסקריפטים php ; לשם כך, אתה יכול למשל להשתמש בשרות הבא : @testgzip@ ', # MODIF - 'info_compresseur_texte' => 'אם השרת שלך אינו מכווץ אוטומטית את דפי ה-HTML על מנת לשלחם לגולשים, אתה יכול לנסות לאלץ את הכיווץ הזה על מנת להפחית את נפח הדפים המורדים.שים לב : הדבר יכול להאיט בצורה ניכרת כמה מסוגי שרתים ', 'info_config_suivi' => 'אם הכתובת הזאת מותאמת לרשימת דיוור, אתה יכול לציין להלן את הכתובת איפה שמשתתפי האתר יכולים להרשם. הכתובת הזאת יכולה להיות כתובת כללית (למשל העמוד של רשימת הרישום דרך הרשת), או כתובת דוא"למעונקת עם נושא מסויים (למשל: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'הינך יכול להירשם לרשימת הדיוור של האתר. לאחר הרישום תקבל, על ידי דואר אלקטרוני, את המודעות באשר למאמרים ולמבזקים המוצעים לפרסום.', 'info_confirmer_passe' => ':אשר סיסמה חדשה', @@ -260,14 +222,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'תאריך של הוצאה לאור מוקדמת:', 'info_date_referencement' => ':תאריך של הוספת מראי מקום באתר זה', 'info_derniere_etape' => 'זהו הסתיים!', - 'info_derniers_articles_publies' => 'המאמרים המפורסמים המאוחרים ביותר שלך', - 'info_desactiver_messagerie_personnelle' => 'הינך יכול לאפשר או לנטרל את ההעברת ההודעות האישיות שלך באתר זה.', 'info_descriptif' => ':תיאור', 'info_discussion_cours' => 'דיונים בהתקדמות', 'info_ecrire_article' => 'לפני שתוכל לכתוב מאמרים, אתה חייב ליצור לפחות מדור אחד.', 'info_email_envoi' => '(כתובת הדוא"ל של השולח (רשות', 'info_email_webmestre' => '(כתובת הדוא"ל של מומחה הרשת (רשות', # MODIF - 'info_entrer_code_alphabet' => ':רשום את הקוד של מערך התווים להשתמש בו', 'info_envoi_email_automatique' => 'דיוור אוטומטי', 'info_envoyer_maintenant' => 'שלח עכשיו', 'info_etape_suivante' => 'לך אל השלב הבא', @@ -277,10 +236,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_fichiers_authent' => '".htpasswd" אישור קובץ', 'info_gauche_auteurs_exterieurs' => 'מחברים חיצוניים, ללא שום גישה לאתר, מצויינים על ידי סמל כחול; מחברים מחוקים על ידי פח אשפה.', # MODIF 'info_gauche_messagerie' => 'התכתבות מאפשרת לך להחליף הודעות בין עורכים, כדי לשמר תזכירים (לשימושך האישי) או להציג מודעות בדף הבית של (.האזור הפרטי (אם אתה אחראי', - 'info_gauche_numero_auteur' => ':מספר מחבר', 'info_gauche_statistiques_referers' => 'הדף הזה מציג רשימה של referrers, כלומר האתר מכיל קישורים לאתרך, רק להיום: למעשה הרשימה הזאת מתעדכנת כל 24 שעות.', 'info_generation_miniatures_images' => 'יוצר תמונות ממוזערות', - 'info_gerer_trad' => '?מנהל קישורי תרגום', 'info_hier' => ':אתמול', 'info_identification_publique' => '...הזהות הציבורית שלך', 'info_image_process2' => 'Si aucune image n’apparaît, alors le serveur qui héberge votre site n’a pas été configuré pour utiliser de tels outils. Si vous souhaitez utiliser ces fonctions, contactez le responsable technique et demandez les extensions « GD » ou « Imagick ».', @@ -296,8 +253,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_login_existant' => '.שם ההתחברות הזה תפוס', 'info_login_trop_court' => '.שם ההתחברות יותר מדי קצר', 'info_maximum' => ':מקסימום', - 'info_message' => '-הודעה מ', - 'info_message_efface' => 'הודעה נמחקה', 'info_message_en_redaction' => 'ההודעות שלך בהתקדמות', 'info_message_technique' => ':הודעה טכנית', 'info_messagerie_interne' => 'התכתבות פנימית', @@ -305,18 +260,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'תיקון המדור הזה:', 'info_modifier_titre' => 'שנה: @titre@', 'info_mon_site_spip' => 'אתר ה-אס.פי.איי.פי שלי', - 'info_mot_sans_groupe' => '(...מילות מפתח ללא קבוצה)', - 'info_moteur_recherche' => 'מנוע חיפוש משולב', 'info_moyenne' => ':ממוצע', - 'info_multi_articles' => '?לאפשר את תפריט השפות למאמרים', 'info_multi_cet_article' => ':שפת המאמר הזה', - 'info_multi_rubriques' => 'אפשר את תפריט השפות במדורים', 'info_multi_secteurs' => '...רק למדורים הנמצאים בראשי?', 'info_nom' => 'שם', 'info_nom_destinataire' => 'שם המקבל', 'info_nom_site' => 'שם האתר שלך', 'info_nombre_articles' => '@nb_articles@ מאמרים,', - 'info_nombre_partcipants' => ':משתתפים לדיון', 'info_nombre_rubriques' => '@nb_rubriques@ מדורים,', 'info_nombre_sites' => '@nb_sites@ אתרים,', 'info_non_deplacer' => '...אל תזוז', @@ -326,12 +276,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_modifiable' => 'לא יכול להשתנות', 'info_non_suppression_mot_cle' => '.אני לא רוצה למחוק את מילת המפתח הזאת', 'info_notes' => 'הערת שוליים', - 'info_nouveaux_message' => 'הודעות חדשות', 'info_nouvel_article' => 'מאמר חדש', 'info_nouvelle_traduction' => ':תרגום חדש', 'info_numero_article' => ':מספר מאמר', 'info_obligatoire_02' => '[מהווה חובה]', # MODIF - 'info_option_faire_suivre' => 'להעביר הלאה הודעות פורומים למחברי המאמרים', 'info_options_avancees' => 'אפשרויות מתקדמות', 'info_ou' => '...או', 'info_page_interdite' => 'דף אסור', @@ -339,25 +287,20 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_par_nombre_article' => '(על ידי מספר מאמרים)', 'info_passe_trop_court' => '.סיסמה קצרה מדי', 'info_passes_identiques' => '.שתי הסימאות לא זהות', - 'info_pense_bete_ancien' => 'התזכירים הישנים שלך', # MODIF 'info_plus_cinq_car' => 'יותר מ-5 תווים', 'info_plus_cinq_car_2' => '(יותר מ-5 תווים)', 'info_plus_trois_car' => '(יותר מ-3 תווים)', 'info_popularite' => 'פופולריות: @popularite@; ביקורים: @visites@', - 'info_popularite_4' => 'פופולריות: @popularite@; פופולריות: @visites@', 'info_post_scriptum' => 'פוסטסקריפט', 'info_post_scriptum_2' => ':פוסטסקריפט', 'info_pour' => 'ל', - 'info_preview_texte' => 'אפשר לבקר את האתר בהקשפה מוקדמת כאילו כל המאמרים והמבזקים התפרסמו (עם לפחות הסטטוס "מוצע"). האם אתה רוצה להגיש אפשרות זו למנהלים בלבד, לכל מחברים או לכולם?', - 'info_principaux_correspondants' => 'הכתבים הראשיים שלך', + 'info_preview_texte' => 'אפשר לבקר את האתר בהקשפה מוקדמת כאילו כל המאמרים והמבזקים התפרסמו (עם לפחות הסטטוס "מוצע"). האם אתה רוצה להגיש אפשרות זו למנהלים בלבד, לכל מחברים או לכולם?', # MODIF 'info_procedez_par_etape' => 'אנא המשך צעד אחר צעד', 'info_ps' => 'נ.ב', 'info_publier' => 'לפרסם', 'info_publies' => 'המאמרים שלך מפורסמים ברשת', 'info_racine_site' => 'בסיס האתר', 'info_recharger_page' => '.אנא טען מחדש דף זה בעוד כמה רגעים', - 'info_recherche_auteur_a_affiner' => 'יותר מדי תוצאות ל"@cherche_auteur@"; אנא עדן את החיפוש שלך.', - 'info_recherche_auteur_ok' => 'כמה עורכים נמצאו ל "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'אין תוצאות ל "@cherche_auteur@".', 'info_recommencer' => '.אנא נסה שוב', 'info_redacteur_1' => 'עורך', @@ -413,7 +356,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // O 'onglet_contenu' => 'תכות', 'onglet_discuter' => 'לדון', - 'onglet_documents' => 'מסמך', 'onglet_proprietes' => 'םינייפאמ', // P @@ -422,6 +364,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // R 'repertoire_plugins' => 'ספריה :', + 'required' => '[מהווה חובה]', # MODIF // S 'sans_heure' => 'בלי זמן', @@ -432,7 +375,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_auteurs' => 'המחברים', 'texte_compte_element' => '@count@ אלמנט', 'texte_compte_elements' => '@count@ אלמנטים', - 'texte_nouveau_message' => 'הודעה חדשה', 'texte_sous_titre' => 'כתובית', 'texte_statut_attente_validation' => 'אימות ממתינים', 'texte_statut_publies' => 'שפורסם באינטרנט', @@ -444,16 +386,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_rubrique' => 'שפת המדור', 'titre_page_articles_page' => 'מאמרים', 'titre_page_articles_tous' => 'כל האתר', - 'titre_page_auteurs' => 'מבקרים', 'titre_reparation' => 'תיקון', 'trad_delier' => 'לא לקשור את המאמר לתרגומיו', 'trad_new' => 'כתיבת תרגום חדש של המאמר', - // U - 'utf8_convert_termine' => 'סיימת!', - // V 'version' => 'מספר :' ); - -?> diff --git a/www/ecrire/lang/ecrire_hu.php b/www/ecrire/lang/ecrire_hu.php index 0d1fccb5..03df090c 100644 --- a/www/ecrire/lang/ecrire_hu.php +++ b/www/ecrire/lang/ecrire_hu.php @@ -1,9 +1,11 @@ 'Menjen az elöző oldalra, és ellenőrizze a beírt adatokat.', 'avis_connexion_ldap_echec_3' => 'Alternatív módon, ne használja az LDAP támogatást felhasználók importálására.', 'avis_deplacement_rubrique' => 'Vigyázat ! Ez a rovat @contient_breves@ hírt tartalmaz : ha át akarja helyezni, ezt a megerősítési jelölőkockát kell jelölni.', - 'avis_destinataire_obligatoire' => 'Egy címzettet kell jelölni mielőbb elküldi ezt az üzenetet.', 'avis_erreur_connexion_mysql' => 'SQL-es csatlakozási hiba', # MODIF - 'avis_erreur_version_archive' => 'Vigyázat! A @archive@ fájl az itt telepített SPIP - egy másik verziónak felel meg - Óriási nehézségek előtt áll: -az Ön adatbázis megsemmisítése, honlap rossz működése, stb. Ne - érvényesítse ezt az impotálási kérést.

    több - információról lásd -SPIP dokumentációja (franciául).', # MODIF 'avis_espace_interdit' => 'Tiltott zóna

    SPIP már telepítve van.', # MODIF 'avis_lecture_noms_bases_1' => 'A telepítő program nem tudta olvasni a már telepített adatbázisok nevét.', 'avis_lecture_noms_bases_2' => 'Vagy egyetlen adatbázis sem szabad, vagy az adatbázisokat listázó függvény lett inaktiválva biztonsági okokból (ami előfordul számos szolgáltatónál).', 'avis_lecture_noms_bases_3' => 'A második alternativában elképzelhető, hogy az Ön login nevét viselő adatbázis használható :', - 'avis_non_acces_message' => 'Nincs jogosultsága erre az üzenetre.', 'avis_non_acces_page' => 'Nincs jogosultsága erre az oldalra.', 'avis_operation_echec' => 'A művelet sikertelen.', - 'avis_probleme_archive' => 'Olvasási hiba a @archive@ nevű fájlon', 'avis_suppression_base' => 'VIGYÁZAT, az adatok törlése visszavonhatatlan', - 'avis_version_mysql' => 'Ez a SQL verzió (@version_mysql@) nem teszi lehetővé a adatbázis táblai önjavítását.', # MODIF // B 'bouton_acces_ldap' => 'Hozzátenni az LDAP hozzáférést >>', # MODIF 'bouton_ajouter' => 'Új', - 'bouton_ajouter_participant' => 'ÚJ RÉSZTVEVŐ :', - 'bouton_annonce' => 'HÍRDETÉS', - 'bouton_checkbox_envoi_message' => 'Lehetőség üzenetküldéshez', - 'bouton_checkbox_indiquer_site' => 'Honlapot kötelezően kell kijelölni', - 'bouton_checkbox_signature_unique_email' => 'csak egy aláírás emailcímenként', - 'bouton_checkbox_signature_unique_site' => 'csak egy aláírás honlaponként', 'bouton_demande_publication' => 'Kérni e cikk publikálását', 'bouton_desactive_tout' => 'Minden tiltása', - 'bouton_effacer_index' => 'Törölni az indexeket', 'bouton_effacer_tout' => 'MINDENT törölni', - 'bouton_envoi_message_02' => 'ÜZENET KÜLDÉS', 'bouton_envoyer_message' => 'Végleges üzenet: küldés', 'bouton_modifier' => 'Módosítás', - 'bouton_pense_bete' => 'EMLÉKEZTETŐ SZEMÉLYES HASZNÁLATHOZ', - 'bouton_radio_activer_messagerie' => 'A belső üzenetek aktiválása', - 'bouton_radio_activer_messagerie_interne' => 'A belső üzenetek aktiválása', - 'bouton_radio_activer_petition' => 'Az aláírásgyűjtés aktiválása', 'bouton_radio_afficher' => 'Megjelenítés', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Szerepelni a csatlakozott szerzők listában', - 'bouton_radio_desactiver_messagerie' => 'Inaktiválni az üzeneteket', 'bouton_radio_envoi_annonces_adresse' => 'Küldeni a hírdetéseket a következő címre :', 'bouton_radio_envoi_liste_nouveautes' => 'Küldeni az újdongágok listáját', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Nem szerepelni a szerzők listában', 'bouton_radio_non_envoi_annonces_editoriales' => 'Ne legyen szerkesztői hírküldés', - 'bouton_radio_pas_petition' => 'Nincs aláírásgyűjtés', - 'bouton_radio_petition_activee' => 'Aláírásgyűjtés aktiválása', - 'bouton_radio_supprimer_petition' => 'Törölni az aláírásgyűjtést', 'bouton_redirection' => 'ÁTIRÁNYÍTÁS', 'bouton_relancer_installation' => 'Telepítés újrakezdése', 'bouton_suivant' => 'Következő', 'bouton_tenter_recuperation' => 'Kisérletezni egy javítást', 'bouton_test_proxy' => 'Probálni a proxyt', 'bouton_vider_cache' => 'A "cache" ürítése', - 'bouton_voir_message' => 'Nézni az üzenetet jóváhagyás előtt', // C - 'cache_mode_compresse' => 'A "cache" fájlai tömörített formában vannak felvéve.', - 'cache_mode_non_compresse' => 'A "cache" fájlai nem tömörített formában vannak felvéve.', 'cache_modifiable_webmestre' => 'Ezt a paramétert a honlap gazdája módosíthatja.', 'calendrier_synchro' => 'Amennyiben egy iCal-val kompatibilis szoftvert használ, lehet szinkronizálni e honlap információival.', @@ -111,7 +83,6 @@ SPIP dokumentációja (franciául).', # MODIF 'entree_login' => 'Az Ön felhasználói neve (login)', 'entree_login_connexion_1' => 'Csatlakozási login', 'entree_login_connexion_2' => '(Néha megfelel az FTP loginjának; néha üres marad)', - 'entree_login_ldap' => 'Eredeti LDAP login', 'entree_mot_passe' => 'Az Ön jelszava', 'entree_mot_passe_1' => 'Csatlakozási jelszó', 'entree_mot_passe_2' => '(Néha megfelel az FTP jelszavának; néha üres marad)', @@ -138,7 +109,7 @@ SPIP dokumentációja (franciául).', # MODIF 'ical_info2' => 'Azokról a technikákról tövábbi információk olvashatók ide az SPIP dokumentációja (franciául).', # MODIF 'ical_info_calendrier' => 'Két naptár áll rendelkezésére. Az első egy olyan térpkép a honlapról, melyben szerepel az összes publikált cikk. A második pedig a tartalmi hírdetéseket, illetve az Ön utolsó privát üzenetei : egy személyes kulcsnak köszönhetően van fenntartva Ön részére, ami bármikor módosítható a jelszava változtatásával.', 'ical_methode_http' => 'Letöltés', - 'ical_methode_webcal' => 'Szinkronizálás (webcal://)', + 'ical_methode_webcal' => 'Szinkronizálás (webcal://)', # MODIF 'ical_texte_js' => 'Egyetlenegy javascript sor nagyon egyszerűen teszi lehetővé az itteni honlap legutóbbi cikkei publikálását bármilyen honlapon, ami az Öné.', 'ical_texte_prive' => 'Ez a naptár, ami szigorúan személyes használatra, informálja Önt a honlap privát tartalmi tevékenységről (feladatok és személyes talákozások, javasolt cikkek és hírek...).', 'ical_texte_public' => 'Ez a naptár a honlap nyilvános tevékenységének a figyelését teszi lehetővé (publikált cikkek és hírek).', @@ -155,9 +126,7 @@ SPIP dokumentációja (franciául).', # MODIF 'icone_creer_auteur' => 'Új szerző létrehozása, és hozzárendelése ehhez a cikkekhez', 'icone_creer_mot_cle' => 'Új kulcsszó létrehozása és hozzárendelése ehhez a cikkhez', 'icone_creer_rubrique_2' => 'Új rovat létrehozása', - 'icone_envoyer_message' => 'Üzenet küldése', 'icone_modifier_article' => 'A cikk módosítása', - 'icone_modifier_message' => 'Az üzenet módosítása', 'icone_modifier_rubrique' => 'A rovat módosítása', 'icone_retour' => 'Vissza', 'icone_retour_article' => 'Vissza a cikkhez', @@ -167,10 +136,7 @@ SPIP dokumentációja (franciául).', # MODIF 'icone_valider_signature' => 'Az aláírás érvényesítése', 'image_administrer_rubrique' => 'Ezt a rubrikát adminisztrálhatja', 'info_1_article' => '1 cikk', - 'info_1_site' => '1 honlap', 'info_activer_cookie' => 'Egy hivatkozási sütit (cookie) lehet aktiválni, melynek segítségével könnyen át tud menni a nyilvános részről a privát részre.', - 'info_admin_gere_rubriques' => 'Ez az adminisztrátor a következő rovatokat kezelheti :', - 'info_admin_gere_toutes_rubriques' => 'Ez az adminisztrátor az összes rubrikát kezeli.', # MODIF 'info_administrateur' => 'Adminisztrátor', 'info_administrateur_1' => 'Adminisztrátor', 'info_administrateur_2' => 'honlap (óvatosan használja)', @@ -180,15 +146,12 @@ SPIP dokumentációja (franciául).', # MODIF 'info_administrer_rubrique' => 'Ezt a rubrikát Ön adminisztrálhatja', 'info_adresse' => 'ezen a címen :', 'info_adresse_url' => 'A nyilvános honlap címe (URL)', - 'info_afficher_visites' => 'A látógatások megjelenítése erre :', 'info_aide_en_ligne' => 'On-line SPIP súgó', 'info_ajout_image' => 'Ha képeket tesz hozzá, mint cikkhez csatolt dokumentum, akkor SPIP automatikusan létre hozhat Önnek kisebb képeket (miniatürök)a beszúrt képekről Ez példáúl teszi lehetővé egy képgalléria, vagy egy portfolio automatikus létrehozása.', - 'info_ajout_participant' => 'A következő résztvevő hozzá van téve :', 'info_ajouter_rubrique' => 'Újabb adminisztrálandó rovat létrehozása :', 'info_annonce_nouveautes' => 'Az újdonságok közlése', - 'info_anterieur' => 'elöző', 'info_article' => 'cikk', 'info_article_2' => 'cikk', 'info_article_a_paraitre' => 'utólagosan dátumozott publikálandó cikkek', @@ -196,10 +159,8 @@ SPIP dokumentációja (franciául).', # MODIF 'info_articles_2' => 'Cikkek', 'info_articles_auteur' => 'A szerző cikkei', 'info_articles_trouves' => 'Talált cikkek', - 'info_articles_trouves_dans_texte' => 'Talált cikkek (a szövegben)', 'info_attente_validation' => 'Jóváhagyás alatti cikkei', 'info_aujourdhui' => 'A mai napon :', - 'info_auteur_message' => 'AZ ÜZENET SZERZŐJE :', 'info_auteurs' => 'A szerzők', 'info_auteurs_par_tri' => 'Szerzők@partri@', 'info_auteurs_trouves' => 'Talált szerzők', @@ -215,7 +176,6 @@ SPIP dokumentációja (franciául).', # MODIF 'info_classement_1' => '. összesen @liste@', 'info_classement_2' => '.-dik összesen @liste@', 'info_code_acces' => 'Ne felejtse el a saját hozzáférési kódjait !', - 'info_compresseur_gzip' => 'N. B. : Il est recommandé de vérifier au préalable si l’hébergeur compresse déjà systématiquement les scripts php ; pour cela, vous pouvez par exemple utiliser le service suivant : @testgzip@', # MODIF 'info_config_suivi' => 'Ha ez a cím egy levelező listahoz tartozik, lejjebb azt a címet jelezheti, ahova a résztvevők beíratkozhatnak. Ez a cím akár URL lehet (pl. a beíratkozási oldal a Weben), vagy egy specifikus tárgyat tartalmazó email cím (pl.@adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Beíratkozhat a honlap levelező listájához. Ilyenkor emailben fogja kapni ezeket a cikkeket, híreket, melyeket javasoltak publikálásra.', 'info_confirmer_passe' => 'Az új jelszó erősítse meg :', @@ -233,15 +193,12 @@ SPIP dokumentációja (franciául).', # MODIF 'info_date_publication_anterieure' => 'Elöző szerkesztés dátuma :', 'info_date_referencement' => 'A HONLAP ELTÁVOLÍTÁSA DÁTUMA :', 'info_derniere_etape' => 'Utolsó lépés : Vége van !', # MODIF - 'info_derniers_articles_publies' => 'Az Ön legutolsó publikált cikkei', - 'info_desactiver_messagerie_personnelle' => 'Lehet aktiválni, vagy inaktiválni a személyes levelezést a honlapon.', 'info_descriptif' => 'Rövid ismertető :', 'info_discussion_cours' => 'Folyamatban lévő viták', 'info_ecrire_article' => 'Mielőbb írjon cikkeket, legalább egy rubrikát kell létrehozni.', 'info_email_envoi' => 'Email cím küldésre (opció)', 'info_email_envoi_txt' => 'Itt jelezze a használandó feladó címet az email küldésére (ennek híján, a címzett címét használjuk, mint feladói) :', 'info_email_webmestre' => 'A Webmester email címe (opció)', # MODIF - 'info_entrer_code_alphabet' => 'Írja be a használandó abécé kódját :', 'info_envoi_email_automatique' => 'Automatikus email küldés', 'info_envoyer_maintenant' => 'Azonnali küldés', 'info_etape_suivante' => 'Következő lépés', @@ -251,7 +208,6 @@ SPIP dokumentációja (franciául).', # MODIF 'info_facilite_suivi_activite' => 'Ahhoz, hogy könnyebben lehessen figyelemmel követni a honlap szerkesztői tevékenységét, SPIP emailen küldheti például a publikálási, ill. cikkjóváhagyási kéréseket egy szerzői levelezőlistára.', 'info_fichiers_authent' => 'Azonosítási fájlok « .htpasswd »', 'info_forums_abo_invites' => 'A honlapja beiratkozásos fórumokat tartalmaz ; tehát a látogatók beíratkozhatnak a nyilvános részen.', - 'info_gauche_admin_effacer' => 'Ez az oldal csak a honlap gazdai részére elérhető.

    A különböző műszaki karbantartási feladatokra ad lehetőséget. Ezek közül néhany igényel olyan specifikus azonosítási eljárást, ami a honlaphoz FTP elérést követel.

    ', # MODIF 'info_gauche_admin_tech' => 'Ez az oldal csak a honlap gazdai részére elérhető.

    A különböző műszaki karbantartási feladatokra ad lehetőséget. Ezek közül néhany igényel olyan specifikus azonosítási eljárást, ami a honlaphoz FTP elérést követel.

    ', # MODIF 'info_gauche_admin_vider' => 'Ez az oldal csak a honlap gazdai részére elérhető.

    A különböző műszaki karbantartási feladatokra ad lehetőséget. Ezek közül néhany igényel olyan specifikus azonosítási eljárást, ami a honlaphoz FTP elérést követel.

    ', # MODIF 'info_gauche_auteurs' => 'Itt található a honlap összes szerzője. @@ -259,18 +215,11 @@ SPIP dokumentációja (franciául).', # MODIF 'info_gauche_auteurs_exterieurs' => 'A külső szerzők, melyek nem férhetnek a honlaphoz, kék ikonnal vannak jelölve ; a törölt szerzők pedig kukával vannak jelölve.', # MODIF 'info_gauche_messagerie' => 'A levelezés lehetővé tesz szerzők közti üzenetcserét, emlékeztetők (saját használatra) megtartását, vagy hírdetések megjelenítését a privát rész főoldalán (amennyiben Ön adminisztrátor).', - 'info_gauche_numero_auteur' => 'SZERZŐ SZÁMA', 'info_gauche_statistiques_referers' => 'Ez az oldal a referers listáját mutat, vagyis olyan honlapokat, melyeken az Ön honlapjához hivatkozó linkek találhatók, de csak a tegnapi és a mai napra : ez a lista nullázva van 24 óra után.', 'info_gauche_visiteurs_enregistres' => 'Itt találhatók a honlap nyilvános részén regisztrált látogatók (beíratkozásos fórumok).', 'info_generation_miniatures_images' => 'Bélyegképek generálása a képekről', - 'info_gerer_trad' => 'Fordítasi linkek kezelése ?', 'info_hebergeur_desactiver_envoi_email' => 'Bizonyos szolgáltatók nem aktiválják az automatikus email küldést a szerverükről. Ilyen esetben, a következő SPIP funkciók nem fognak működni.', 'info_hier' => 'Tegnap :', - 'info_historique_activer' => 'A felülvizsgálatok megfigyelésének aktiválása', - 'info_historique_affiche' => 'A verzió megjelenítése', - 'info_historique_comparaison' => 'Összehasonlítás', - 'info_historique_desactiver' => 'A felülvizsgalatok megfigyelésének inaktiválása', - 'info_historique_texte' => 'A felülvizsgalatok megfigyelése egy cikk tartalmához nyújtott összes módosításokről tárolja az előzményeket, és megjeleníti az egymást követő változatok eltéréseket.', 'info_identification_publique' => 'Az Ön nyilvános azonosítása...', 'info_image_process' => 'Válasszon a bélyegképek legjobb készítesi modszerét azzal, hogy kattintson a megfelelő képre.', 'info_image_process2' => 'Megjegyzés Ha egyetlen kép sem jelenik meg, akkor ez azt jelenti, hogy a honlapját tároló szervert nem konfigurálták olyan eszkőzök használására. Ha mégis akarja használni ezeket a funkciókat, keresse a rendszergazdát, és a «GD» vagy «Imagick» kiegészítéseket kérje.', # MODIF @@ -288,8 +237,6 @@ a törölt szerzők pedig kukával vannak jelölve.', # MODIF 'info_login_trop_court' => 'A login túl rövid.', 'info_maximum' => 'A legtöbb :', 'info_meme_rubrique' => 'Abban a rovatban', - 'info_message' => 'Üzenet kelte', - 'info_message_efface' => 'ÜZENET TÖRÖLVE', 'info_message_en_redaction' => 'Az Ön szerkesztés alatti üzenetei', 'info_message_technique' => 'Műszaki üzenet :', 'info_messagerie_interne' => 'Belső levelezés', @@ -298,20 +245,15 @@ a törölt szerzők pedig kukával vannak jelölve.', # MODIF 'info_modifier_rubrique' => 'A rovat módosítása :', 'info_modifier_titre' => 'Módosítás : @titre@', 'info_mon_site_spip' => 'Az én SPIP honlapom', - 'info_mot_sans_groupe' => '(Csoport nélküli szavak...)', - 'info_moteur_recherche' => 'Integrált kereső motor', 'info_moyenne' => 'Átlagosan :', - 'info_multi_articles' => 'A nyelvi menü aktiválása a cikkeknél ?', 'info_multi_cet_article' => 'A cikk nyelve :', 'info_multi_langues_choisies' => 'Lejjebb jelölje ki a szerzők által használható nyelveket. A honlapján már használt nyelveket (elsőknek jelennek meg) nem lehet inaktiválni.', - 'info_multi_rubriques' => 'A nyelvi menü aktiválása a rovatoknál ?', 'info_multi_secteurs' => '... csak a gyökérben található rovatok esetén ?', 'info_nom' => 'Név', 'info_nom_destinataire' => 'Címzett neve', 'info_nom_site' => 'Az Ön honlapja neve', 'info_nombre_articles' => '@nb_articles@ cikk,', - 'info_nombre_partcipants' => 'A VITA RÉSZTVEVŐI :', 'info_nombre_rubriques' => '@nb_rubriques@ rovat,', 'info_nombre_sites' => '@nb_sites@ honlap,', 'info_non_deplacer' => 'Nem kell áthelyezni...', @@ -321,36 +263,26 @@ a törölt szerzők pedig kukával vannak jelölve.', # MODIF 'info_non_modifiable' => 'nem módosítható', 'info_non_suppression_mot_cle' => 'ne akarom törölni ezt a kulcsszót.', 'info_notes' => 'Megjegyzések', - 'info_nouveaux_message' => 'Új üzenetek', 'info_nouvel_article' => 'Új cikk', 'info_nouvelle_traduction' => 'Új fordítás :', 'info_numero_article' => 'CIKK SZÁMA :', 'info_obligatoire_02' => '[Kötelező]', # MODIF 'info_option_accepter_visiteurs' => 'A látogatói beíratkozás engedélyezése ', - 'info_option_faire_suivre' => 'A fórumok üzenetei továbbítása a cikkek szerzői felé', 'info_option_ne_pas_accepter_visiteurs' => 'Látogatói beíratkozás tiltása', 'info_options_avancees' => 'B?VÍTETT OPCIÓK', - 'info_ortho_activer' => 'A helyesírás ellenőrző aktiválása', - 'info_ortho_desactiver' => 'A helyesírás ellenőrző leállítása', 'info_ou' => 'vagy...', 'info_page_interdite' => 'Tiltott oldal', 'info_par_nombre_article' => '(cikk darabszám szerint)', # MODIF 'info_passe_trop_court' => 'A jelszó túl rövid.', 'info_passes_identiques' => 'A két jelszó nem egyforma.', - 'info_pense_bete_ancien' => 'Az Ön régebbi emlékeztet?i', # MODIF 'info_plus_cinq_car' => 'több, mint 5 karakter', 'info_plus_cinq_car_2' => '(több, mint 5 karakter)', 'info_plus_trois_car' => '(több, mint 3 karakter)', 'info_popularite' => 'Népszer?ség : @popularite@ ; látógatások : @visites@', - 'info_popularite_4' => 'népszerűség : @popularite@ ; látógatások : @visites@', 'info_post_scriptum' => 'Útóírat', 'info_post_scriptum_2' => 'Útóírat:', 'info_pour' => 'erre', - 'info_preview_admin' => 'Csak az adminisztrátorok előnézhetik a honlapot', - 'info_preview_comite' => 'Minden szerző előnézheti a honlapot', - 'info_preview_desactive' => 'Az előnézet teljesen van leállítva', - 'info_preview_texte' => 'Lehetséges előnézni a honlapot, mintha az összes cikk és hír (legalább "javasolt" státusszal) publikálva lenne. Ezt a lehetőséget csak az adminisztrátoroknak, az összes szerzőnek, vagy senkinek kell adni ?', - 'info_principaux_correspondants' => 'A főbb levelezőtársai', + 'info_preview_texte' => 'Lehetséges előnézni a honlapot, mintha az összes cikk és hír (legalább "javasolt" státusszal) publikálva lenne. Ezt a lehetőséget csak az adminisztrátoroknak, az összes szerzőnek, vagy senkinek kell adni ?', # MODIF 'info_procedez_par_etape' => 'lépésről lépésre járjon el', 'info_procedure_maj_version' => 'A naprakésztételes eljárást kell indítani ahhoz, hogy adaptáljuk az adatbázist az SPIP új változatához.', @@ -363,13 +295,8 @@ a törölt szerzők pedig kukával vannak jelölve.', # MODIF a felhasználók automatikus emailt kapnak, mely a privát reszhez szükséges hozzáférési kódokat tartalmazza. Bizonyos szolgáltatók inaktiválják az emailküldést a szerverükről : ilyen esetben lehetetlen az automatikus beíratkozás.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Kivánja-e használni az SPIP integrált kereső motorját ? - (annak inaktiválása gyorsítja a rendszer működését.)', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Honlap teteje', 'info_recharger_page' => 'Legyen szíves újratölteni ezt az oldalt egy kis idő múlva.', - 'info_recherche_auteur_a_affiner' => 'Túl sok eredmény erre "@cherche_auteur@" ; legyen szíves szükíteni a keresést.', - 'info_recherche_auteur_ok' => 'Több szerző talált erre "@cherche_auteur@":', 'info_recherche_auteur_zero' => '"@cherche_auteur@" nincs találat.', 'info_recommencer' => 'Még egyszer, legyen szíves.', 'info_redacteur_1' => 'Szerző', @@ -386,7 +313,6 @@ a felhasználók automatikus emailt kapnak, 'info_rubriques' => 'Rovatok', 'info_rubriques_02' => 'rovatok', 'info_rubriques_trouvees' => 'Talált rovatok', - 'info_rubriques_trouvees_dans_texte' => 'Talált rovatok (a szövegben)', 'info_sans_titre' => 'Cím nélkül', 'info_selection_chemin_acces' => 'Válassza lejjebb az elérési utat a címtárban :', 'info_signatures' => 'aláírások', @@ -399,13 +325,11 @@ a felhasználók automatikus emailt kapnak, 'info_sites_lies_mot' => 'A kulcsszóhoz kötött felvett honlapok', 'info_sites_proxy' => 'Proxy használata', 'info_sites_trouves' => 'Talált honlapok', - 'info_sites_trouves_dans_texte' => 'Talált honlapok (a szövegben)', 'info_sous_titre' => 'Alcím :', 'info_statut_administrateur' => 'Adminisztrátor', 'info_statut_auteur' => 'A szerző státusza :', # MODIF 'info_statut_auteur_a_confirmer' => 'Megerősítendő beíratkozás', 'info_statut_auteur_autre' => 'Egyéb státusz :', - 'info_statut_efface' => 'Törölt', 'info_statut_redacteur' => 'Szerző', 'info_statut_utilisateurs_1' => 'Az importált felhasználók alapértelmezett státusza', 'info_statut_utilisateurs_2' => 'Válassza azt a státuszt, ami lesz hozzárendelve az LDAP címtárban lévő személyekhez, ha csatlakoznak legelőször. Később ez az érték egyénileg lesz módosítható.', @@ -425,7 +349,6 @@ a felhasználók automatikus emailt kapnak, 'info_tous_articles_en_redaction' => 'Az összes szerkesztés alatti cikk', 'info_tous_articles_presents' => 'Az összes publikált cikk abban a rovatban', 'info_tous_les' => 'minden :', - 'info_tous_redacteurs' => 'Hírdetések minden szerző részére', 'info_tout_site' => 'A egész honlap', 'info_tout_site2' => 'A cikk nem lett lefordítva erre a nyelvre.', 'info_tout_site3' => 'A cikk le lett fordítva arra a nyelvre, de később módosült az eredeti. A fordítást frissíteni kell.', @@ -440,7 +363,6 @@ ami állapotát jelzi :', 'info_une_rubrique' => 'egy rovat,', 'info_une_rubrique_02' => '1 rovat', 'info_url' => 'URL :', - 'info_url_site' => 'HONLAP URL-JE :', 'info_urlref' => 'Hiperhivatkozás :', 'info_utilisation_spip' => 'Mostantól kezdheti használni a publikálási rendszert...', 'info_visites_par_mois' => 'Megjelenítés havonta :', @@ -457,8 +379,6 @@ ami állapotát jelzi :', 'item_activer_messages_avertissement' => 'A figyelmeztető üzenetek aktiválása', 'item_administrateur_2' => 'adminisztrátor', 'item_afficher_calendrier' => 'Megjelenítés a naptárban', - 'item_autoriser_documents_joints' => 'Cikkekhez csatolt dokumentumok engedélyezése', - 'item_autoriser_documents_joints_rubriques' => 'Rovatokban lévő dokumentumok engedélyezése', 'item_autoriser_syndication_integrale' => 'A cikkek teljes tartalma a szindikálási fájlokban', 'item_choix_administrateurs' => 'az adminisztrátorok', 'item_choix_generation_miniature' => 'Bélyegképek automatikus létrehozása.', @@ -466,7 +386,6 @@ ami állapotát jelzi :', 'item_choix_redacteurs' => 'a szerzők', 'item_choix_visiteurs' => 'a nyilvános honlap látógatói', 'item_creer_fichiers_authent' => 'A .htpasswd tipusú fájlok létrehozása', - 'item_limiter_recherche' => 'Keresés a honlapon', 'item_login' => 'Login', 'item_mots_cles_association_articles' => 'cikkekre', 'item_mots_cles_association_rubriques' => 'rovatokra', @@ -475,35 +394,25 @@ ami állapotát jelzi :', 'item_non_accepter_inscriptions' => 'Beíratkozások elutasítása', 'item_non_activer_messages_avertissement' => 'Nincs figyelmeztető üzenet', 'item_non_afficher_calendrier' => 'Nincs megjelenítés a naptárban', - 'item_non_autoriser_documents_joints' => 'Dokumentumok tiltása a cikkekben', - 'item_non_autoriser_documents_joints_rubriques' => 'Dokumentumok tiltása a rovatokban', 'item_non_autoriser_syndication_integrale' => 'Csak egy összefoglalást átadni', 'item_non_creer_fichiers_authent' => 'Nem kell létrehozni ezeket a fájlokat', - 'item_non_gerer_statistiques' => 'Nem kell kezelni a statisztikákat', - 'item_non_limiter_recherche' => 'Keresés bővítése a felvett honlapok tartalmáig', 'item_non_publier_articles' => 'Nem kell publikálni a cikkeket az adott publikálási dátum előtt.', - 'item_non_utiliser_moteur_recherche' => 'Nem kell motort használni', 'item_nouvel_auteur' => 'Új szerző', 'item_nouvelle_rubrique' => 'Új rovat', 'item_oui' => 'Igen', 'item_publier_articles' => 'A cikkek publikálása, publikálási dátumtól függetlenül.', 'item_reponse_article' => 'Hozzászólás a cikkhez', - 'item_utiliser_moteur_recherche' => 'Kereső motor használata', 'item_visiteur' => 'vendég', // J 'jour_non_connu_nc' => 'névtelen', // L - 'lien_ajout_destinataire' => 'A címzett hozzáadása', 'lien_ajouter_auteur' => 'A szerző hozzáadása', - 'lien_ajouter_participant' => 'Egy résztvevő hozzáadása', 'lien_email' => 'email', 'lien_nom_site' => 'HONLAP NEVE :', 'lien_retirer_auteur' => 'A szerző eltávolítása', - 'lien_retrait_particpant' => 'a résztvevő eltávolítása', 'lien_site' => 'honlap', - 'lien_supprimer_rubrique' => 'a rovat törlése', 'lien_tout_deplier' => 'Minden kibontása', 'lien_tout_replier' => 'Minden összecsukása', 'lien_trier_nom' => 'Név szerinti sorbarendezés', @@ -538,6 +447,7 @@ ami állapotát jelzi :', // R 'repertoire_plugins' => 'Mappa :', + 'required' => '[Kötelező]', # MODIF // S 'statut_admin_restreint' => '(korlátolt admin)', # MODIF @@ -562,13 +472,10 @@ SPIP újratélépítését egy újabb adatbázis létrehozására, valamint egy 'texte_article_virtuel_reference' => 'Virtuális cikk : SPIP honlapján felvett cikk, de másik URL felé átirányítva. Az átirányítás megszüntetésére törölje a fenti URL-t.', 'texte_aucun_resultat_auteur' => 'Nincs találat erre "@cherche_auteur@"', 'texte_auteur_messagerie' => 'A honlap állandóan jelezheti a csatlakozott szerzők listáját, ami közvetlen üzenetcserét tesz lehetővé. Úgy is döntheti, hogy nem szerepel a listában (Ön "láthatatlan" a többi felhasználók számára).', - 'texte_auteur_messagerie_1' => 'Ez a honlap engedi az üzenetcserét és a magán fórumok létrehozását a résztvevők között. Úgy dönhet, hogy nem vesz részt ezekben.', 'texte_auteurs' => 'A SZERZŐ', 'texte_choix_base_1' => 'Válassza az adatbázist :', 'texte_choix_base_2' => 'A SQL szerver több adatbázist tartalmaz.', # MODIF 'texte_choix_base_3' => 'Jelölje azt, amit az Ön Web szolgaltatója adta:', # MODIF - 'texte_commande_vider_tables_indexation' => 'Ezt a parancsot használja a használt indexálási táblák törlésére, melyeket használ az SPIP belső kereső motorja. Ettól tárhelyet lehet visszanyerni.', - 'texte_compresse_ou_non' => '(ez tömörítve lehet, vagy nem)', 'texte_compte_element' => '@count@ darab', 'texte_compte_elements' => '@count@ darab', 'texte_connexion_mysql' => 'Ellenőrizze a Web szolgáltatója által adott információkat : található az, ha fut SQL, illetve annak csatlakozási paraméterei.', # MODIF @@ -583,10 +490,8 @@ SPIP újratélépítését egy újabb adatbázis létrehozására, valamint egy 'texte_date_publication_anterieure' => 'Elöző szerkesztés dátuma :', 'texte_date_publication_anterieure_nonaffichee' => 'Nem kell megjeleníteni az elöző szerkesztés(ek) időpontját.', 'texte_date_publication_article' => 'NYILVÁNOS PUBLIKÁLÁS IDŐPONTJA :', - 'texte_descriptif_petition' => 'Az aláírásgyűjtés leírása', 'texte_descriptif_rapide' => 'Rövid leírás', 'texte_effacer_base' => 'Az SPIP adatbázisa törlése', - 'texte_effacer_donnees_indexation' => 'Az indexálási adatok törlése', 'texte_en_cours_validation' => 'Az alábbi híreket és cikkeket javasolták publikálásra. Szóljon hozzá a hozzájuk csatolt fórumokban.', # MODIF 'texte_enrichir_mise_a_jour' => 'A szerkesztést lehet szépíteni a « nyomdai jelek » segítségével.', 'texte_fichier_authent' => 'SPIP-nek kell-e létrehoznia spéciális .htpasswd @@ -599,26 +504,17 @@ SPIP újratélépítését egy újabb adatbázis létrehozására, valamint egy 'texte_informations_personnelles_2' => '(Megjegyzés : ha újratelepítésról van szó, és még mindig megy a hozzáférése, akkor', # MODIF 'texte_introductif_article' => '(A cikk bevezető szövege.)', 'texte_jeu_caractere' => 'Az Őn honlapján ajánlott az univerzális abécé (utf-8) használata :az összes nyelv megjelenítését teszi lehetővé, és már nem okoz kompatibilitási problemát a korszerű böngészőkkel.', - 'texte_jeu_caractere_2' => 'Vigyázat: E beállítás nem végzi az adatbázisban már meglévő szövegek konvertálását.', 'texte_jeu_caractere_3' => 'Az Őn honlapja jelenleg a kovetkező karaktertáblát használja :', 'texte_jeu_caractere_4' => 'Ha nem felel meg adatai állapotának (pl. adatbázisresztaurálás után), vagy ha inditja ezt a honlapot, és szeretne egy másik karaktertáblát használni, ezt az utóbbit jelölje ide :', - 'texte_jeu_caractere_conversion' => 'Megjegyzés : úgy döntheti, hogy véglegesen konvertálja honlapja összes szövegeit (cikkek, hírek, fórumok, stb.) az utf-8 karakter táblára az utf-8-ra konvertálási oldal látógatásával.', - 'texte_lien_hypertexte' => '(Ha az Ön üzenete egy publikált cikkre, vagy egy több információt tartalmazó oldara hivatkozik, lejjeb jelezze az oldal nevét, illetve címét.)', 'texte_login_ldap_1' => '(Névtelen hozzáféréshez üresen kell hagyni, vagy beírni a teljes utat például « uid=azennevem, ou=users, dc=azen-domainem, dc=com ».)', 'texte_login_precaution' => 'Vigyázat ! Ez az a login, amivel jelenleg csatlakozva van. Ezt az űrlapot óvatosan használja...', - 'texte_message_edit' => 'Vigyázat : ezt az üzenetet a honlap összes adminisztrátora módosíthatja, és az összes szerző láthatja. A hirdetéseket csak a honlap legfontosabb eseményeinek közlésére használja.', 'texte_mise_a_niveau_base_1' => 'Éppen SPIP verziófrissítést végzett. Most pedig a honlap adatbázisát kell naprakésszé tenni.', 'texte_modifier_article' => 'Cikk módosítása :', - 'texte_moteur_recherche_active' => 'A kereső motor aktiválva van. Ezt a parancsot használja, - ha gyors újraindexálást szeretne (például egy mentés resztaurálása után). - Jegyezze meg, hogy a rendesen (az SPIP felületen) módosított dokumentumok automatikusan vannak újra indexelve : ez a parancs tehát csak rendkivül esetben hasznos.', - 'texte_moteur_recherche_non_active' => 'A kereső motor nincs aktiválva.', 'texte_multilinguisme' => 'Amennyiben több nyelvű cikkeket szeretne kezelni, komplex böngészés mellett, egy nyelvi menüt lehet tenni a cikkekhez és/vagy a rovatokhoz, a honlapja felépítésétől függően.', # MODIF 'texte_multilinguisme_trad' => 'Egy linkeket kezelő rendszert is lehet aktiválni egy cikk különböző fordításai között.', # MODIF 'texte_non_compresse' => 'nincs tömörítve (az Ön szervere nem él azzal a lehetőséggel)', - 'texte_nouveau_message' => 'Új üzenet', 'texte_nouvelle_version_spip_1' => 'Az SPIP egyik újabb verzióját telepítette.', 'texte_nouvelle_version_spip_2' => 'Ez az új verzió a szokásosnál teljesebb frissítést igényel. Ha Ön a honlap gazdája, akkor törölje a @connect@ nevű fájlt, folytassa a telepítést ahhoz, hogy az adatbázis csatlakozási paramétereit módosíthassa.

    (Megjegyzés. : amennyiben elfelejtette a csatlakozási paramétereit, tekintse át a @connect@ nevű fájlt, mielőbb kitörölne...)

    ', # MODIF 'texte_operation_echec' => 'Menjen az elöző oldalra, jelöljön ki egy másik adatbázist, vagy hozzon létre egy ujat. Ellenőrizze az Ön szolgáltatója által adott információkat.', @@ -637,7 +533,6 @@ SPIP újratélépítését egy újabb adatbázis létrehozására, valamint egy 'texte_rappel_selection_champs' => '[Ne felejtse el helyesen kijelölni ezt a mezőt.]', 'texte_recalcul_page' => 'Ha csak egy oldalt szeretne frissíteni, akkor menjen inkább a nyilvános részre, és kattintson az «oldal frissítés» gombra.', - 'texte_recapitiule_liste_documents' => 'Ez az oldal felsorolja ezeket a dokumentumokat, melyeket helyezte a rovatokba. Minden egyes dokumentum módosítására, kövesse a rovata oldalához vezető linket.', 'texte_recuperer_base' => 'Adatbázis javítása', 'texte_reference_mais_redirige' => 'a cikke fel van véve az Ön SPIP honlapján, de át lett irányítva egy másik URL felé.', 'texte_requetes_echouent' => 'Ha bizonyos SQL lekérdezések rendszeresen és oktalanul hibásak, @@ -661,7 +556,6 @@ szeretne frissíteni, akkor menjen inkább a nyilvános részre, és kattintson dans le cache SPIP. Ez például eröltethet az összes oldal frissítését, ha jelentős módosításokat végzett a honlap grafikáján, vagy szerkezetén.', 'texte_sur_titre' => 'Felső cím', 'texte_table_ok' => ': ez a tábla rendben van.', - 'texte_tables_indexation_vides' => 'A motor indexálási táblai üresek.', 'texte_tentative_recuperation' => 'Javítási kisérlet', 'texte_tenter_reparation' => 'Adatbázis javítási kisérlet', 'texte_test_proxy' => 'Ha ezt a proxyt akarja tesztelni, ide jelezze a tesztelni kívánt honlap címét.', @@ -674,20 +568,8 @@ dans le cache SPIP. Ez például eröltethet az összes oldal frissítését, ha Ez az opció nincs aktiválva eleve a váratlan figyelmeztető üzenetek elkerülésére. ', - 'texte_trop_resultats_auteurs' => 'Túl sok találat erre "@cherche_auteur@" ; szükítse a kérésést.', - 'texte_unpack' => 'Legújabb verzió letöltése', - 'texte_utilisation_moteur_syndiques' => 'Ha az SPIP belső kereső motorját használja - , kétféle módon lehet keresni a szindikált cikkekben, illetve honlapokon. -
    Az egyszerűbb korlátózodik a cikkek címeire és rövid ismertetőire. -
    - Egy erőteljesebb módszer lehetővé teszi, - hogy az SPIP a felvett honlapok szövegein belül is keres . Ha valamilyen honlapot vesz fel, - akkor SPIP fogja végezni a keresést a honlap saját szövegében.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Ez a módszer kényszeríti az SPIP rendszeres látógatásokra a felvett honlapokon, - ami enyhe lassítást okozhat az Ön honlapján.', 'texte_vide' => 'üres', 'texte_vider_cache' => 'A cache ürítése', - 'titre_admin_effacer' => 'Műszaki karbantartás', 'titre_admin_tech' => 'Műszaki karbantartás', 'titre_admin_vider' => 'Műszaki karbantartás', 'titre_cadre_afficher_article' => 'Cikkek megjelenítése', @@ -707,49 +589,26 @@ dans le cache SPIP. Ez például eröltethet az összes oldal frissítését, ha 'titre_naviguer_dans_le_site' => 'Böngészni a honlapon...', 'titre_nouvelle_rubrique' => 'Új rovat', 'titre_numero_rubrique' => 'ROVAT SZÁMA :', - 'titre_page_admin_effacer' => 'Műszaki karbantartás : adatbázis törlése', 'titre_page_articles_edit' => 'Módosítás : @titre@', 'titre_page_articles_page' => 'A cikkek', 'titre_page_articles_tous' => 'Az egész honlap', - 'titre_page_auteurs' => 'Vendégek', 'titre_page_calendrier' => 'Naptár @annee@ @nom_mois@', 'titre_page_config_contenu' => 'A honlap konfigurálása', - 'titre_page_config_fonctions' => 'A honlap konfigurálása', - 'titre_page_configuration' => 'A honlap konfigurálása', - 'titre_page_controle_petition' => 'Aláírásgyűjtések megfigyelése', 'titre_page_delete_all' => 'Teljes és visszavonhatatlan törlés', - 'titre_page_documents_liste' => 'A rovatok dokumentumai', - 'titre_page_index' => 'Az Ön privát része', - 'titre_page_message_edit' => 'Üzenet szerkesztése', - 'titre_page_messagerie' => 'Az Ön levelezése', 'titre_page_recherche' => 'A @recherche@ alapú keresés eredménye', 'titre_page_statistiques_referers' => 'Statisztikák (bejövő linkek)', 'titre_page_upgrade' => 'SPIP frissítése', 'titre_publication_articles_post_dates' => 'Utólagosan dátumozott cikkek publikálása', - 'titre_referencer_site' => 'Honlap felvétele :', - 'titre_rendez_vous' => 'TALÁLKOZÓ :', 'titre_reparation' => 'Javítás', 'titre_suivi_petition' => 'Aláírásgyűjtések megfigyelése', - 'trad_article_inexistant' => 'Nincs ilyen sorszámú cikk.', 'trad_article_traduction' => 'A cikk összes változatai :', - 'trad_deja_traduit' => 'Ez a cikk már egy fordítás a jelen cikkről.', # MODIF 'trad_delier' => 'Visszavenni a cikk csatolását ezekre a fordításokra', # MODIF 'trad_lier' => 'Ez a cikk egy fordítás erről a cikkről :', 'trad_new' => 'Írni egy újabb fordítást erről a cikkről', # MODIF // U - 'utf8_convert_attendez' => 'Várjon egy kicsit, majd töltse újra az oldalt.', - 'utf8_convert_avertissement' => 'Most az adatbázis tartalmát (cikkek, hírek, stb.) készül konvertálni az eredeti @orig@ karaktertáblából a @charset@ karaktertábla felé.', - 'utf8_convert_backup' => 'Ne felejtse először teljesen megmenteni a honlapját. Azt is ellenőrizze, hogy a szkiptjei és a nyelvi fájlok is @charset@ kompatibilis. Egyébként a módosítások követése, ha aktivált, károsodni fog.', # MODIF - 'utf8_convert_erreur_deja' => 'A honlapja használja már a @charset@ karaktertáblát, szóval felesleges konvertálni...', 'utf8_convert_erreur_orig' => 'Hiba : a @charset@ karaktertábla nincs támogatva.', - 'utf8_convert_termine' => 'Befejeződött !', - 'utf8_convert_timeout' => 'Fontos :
    szerver időtúllépése esetén töltse újra az oldalt addig, amíg nem írja ki, hogy "befejeződött".', - 'utf8_convert_verifier' => 'Most ürítse a cache-t, és ellenőrizze, hogy minden rendben van a publikus lapokon. Nagyobb problema esetére egy adatmentés (SQL formátumban) megtörtént a @rep@ n. mappában.', - 'utf8_convertir_votre_site' => 'utf-8 karaktertáblába konvertálodjon a honlapja', // V 'version' => 'Verzió :' ); - -?> diff --git a/www/ecrire/lang/ecrire_id.php b/www/ecrire/lang/ecrire_id.php index 34ecd594..3f29d0ed 100644 --- a/www/ecrire/lang/ecrire_id.php +++ b/www/ecrire/lang/ecrire_id.php @@ -1,9 +1,11 @@ 'Kembali ke halaman sebelumnya, dan verifikasi informasi yang anda telah berikan.', 'avis_connexion_ldap_echec_3' => 'Alternatif lainnya, jangan gunakan dukungan LDAP untuk mengimpor pengguna.', 'avis_deplacement_rubrique' => 'Peringatan! Bagian ini mengandung @contient_breves@ berita@scb@: jika anda memindahkannya, silakan cek kotak ini untuk konfirmasi.', - 'avis_destinataire_obligatoire' => 'Anda harus memilih satu orang penerima sebelum mengirimkan pesan ini.', 'avis_erreur_connexion_mysql' => 'Kesalahan koneksi SQL', - 'avis_erreur_version_archive' => 'Peringatan! Berkas @archive@ berkaitan dengan - sebuah versi SPIP yang lain dengan yang anda - miliki. Anda akan mengalami sejumlah - kesulitan: risiko untuk merusak database anda, - kejanggalan fungsional situs anda, dll. Jangan - kirim permohonan impor ini.

    Untuk informasi - lebih lanjut, silakan lihat - dokumentasi SPIP.', # MODIF - 'avis_espace_interdit' => 'Area terlarang

    SPIP telah diinstal.', + 'avis_espace_interdit' => 'Area terlarang

    SPIP telah diinstal.', # MODIF 'avis_lecture_noms_bases_1' => 'Sistem instalasi tidak dapat membaca nama-nama database yang terinstal.', 'avis_lecture_noms_bases_2' => 'Bisa jadi tidak ada database yang tersedia, atau fitur yang mengizinkan penampilan daftar database dinonaktifkan dengan alasan keamanan (yang sering ditemui pada banyak hosting).', 'avis_lecture_noms_bases_3' => 'Jika alternatif kedua benar, sangat mungkin sebuah database dinamai sama dengan log masuk anda:', - 'avis_non_acces_message' => 'Anda tidak memiliki akses ke pesan ini.', 'avis_non_acces_page' => 'Anda tidak memiliki akses ke halaman ini.', 'avis_operation_echec' => 'Operasi gagal.', 'avis_operation_impossible' => 'Operasi tidak mungkin dijalankn', - 'avis_probleme_archive' => 'Kesalahan membaca pada berkas @archive@', 'avis_suppression_base' => 'PERINGATAN, data yang dihapus tidak dapat dikembalikan lagi', - 'avis_version_mysql' => 'Versi SQL anda (@version_mysql@) tidak mengizinkan perbaikan otomatis tabel-tabel database.', // B 'bouton_acces_ldap' => 'Tambah sebuah akses ke LDAP >>', 'bouton_ajouter' => 'Tambah', - 'bouton_ajouter_participant' => 'TAMBAH SEORANG PESERTA:', - 'bouton_annonce' => 'PENGUMUMAN', 'bouton_annuler' => 'Batal', - 'bouton_checkbox_envoi_message' => 'kemungkinan untuk mengirimkan sebuah pesan', - 'bouton_checkbox_indiquer_site' => 'Anda harus mengisi nama untuk sebuah situs web', - 'bouton_checkbox_signature_unique_email' => 'hanya satu tanda tangan per alamat e-mail', - 'bouton_checkbox_signature_unique_site' => 'hanya satu tanda tangan per situs web', 'bouton_demande_publication' => 'Permohonan publikasi artikel ini', 'bouton_desactive_tout' => 'Non aktifkan semua', - 'bouton_effacer_index' => 'Hapus indeksasi', 'bouton_effacer_tout' => 'Hapus SEMUA', - 'bouton_envoi_message_02' => 'KIRIM SEBUAH PESAN', 'bouton_envoyer_message' => 'Pesan terakhir: kirim', 'bouton_modifier' => 'Modifikasi', - 'bouton_pense_bete' => 'MEMO PRIBADI', - 'bouton_radio_activer_messagerie' => 'Aktifkan sistem pesan intern', - 'bouton_radio_activer_messagerie_interne' => 'Aktifkan sistem pesan intern', - 'bouton_radio_activer_petition' => 'Aktifkan petisi', 'bouton_radio_afficher' => 'Tampilkan', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Muncul di daftar editor-editor yang terkoneksi', - 'bouton_radio_desactiver_messagerie' => 'Non aktifkan sistem pesan', 'bouton_radio_envoi_annonces_adresse' => 'Kirim pengumuman ke alamat:', 'bouton_radio_envoi_liste_nouveautes' => 'Kirim daftar berita terbaru', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Jangan muncul di daftar editor-editor yang terkoneksi', 'bouton_radio_non_envoi_annonces_editoriales' => 'Jangan kirim pengumuman editorial apapun juga', - 'bouton_radio_pas_petition' => 'Tidak ada petisi', - 'bouton_radio_petition_activee' => 'Petisi diaktifkan', - 'bouton_radio_supprimer_petition' => 'Hapus petisi', 'bouton_redirection' => 'MENGALIHKAN TUJUAN ', 'bouton_relancer_installation' => 'Menjalankan instalasi kembali', 'bouton_suivant' => 'Selanjutnya', 'bouton_tenter_recuperation' => 'Usaha perbaikan', 'bouton_test_proxy' => 'Tes proxy', 'bouton_vider_cache' => 'Kosongkan cache', - 'bouton_voir_message' => 'Lihat pesan sebelum divalidasi', // C - 'cache_mode_compresse' => 'Berkas-berkas cache disimpan dalam bentuk kompresi.', - 'cache_mode_non_compresse' => 'Berkas-berkas cache ditulis dalam bentuk tidak terkompresi.', 'cache_modifiable_webmestre' => 'Parameter ini dapat dimodifikasi oleh webmaster.', 'calendrier_synchro' => 'Jika anda menggunakan aplikasi kalender yang kompatibel dengan iCal, anda dapat mensinkronisasikannya dengan informasi situs ini.', 'connexion_ldap' => 'Koneksi:', - 'copier_en_local' => 'Kopi ke situs lokal', // D 'date_mot_heures' => 'H', @@ -115,7 +85,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Log masuk anda', 'entree_login_connexion_1' => 'Log masuk koneksi', 'entree_login_connexion_2' => '(Kadang kala sesuai dengan log masuk akses FTP anda dan bisa jadi juga dibiarkan tidak terisi)', - 'entree_login_ldap' => 'Log masuk awal LDAP', 'entree_mot_passe' => 'Kata sandi anda', 'entree_mot_passe_1' => 'Kata sandi koneksi', 'entree_mot_passe_2' => '(Kadang kala sesuai dengan kata sandi akses FTP anda dan bisa jadi juga dibiarkan tidak terisi)', @@ -142,7 +111,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'Untuk informasi lebih lanjut, jangan segan-segan untuk mengunjungi dokumentasi SPIP.', # MODIF 'ical_info_calendrier' => 'Dua kalender berada di tangan anda siap untuk dipakai. Yang pertama adalah peta situs yang menampilkan semua artikel yang dipublikasi. Yang kedua berisikan pengumuman editorial sekaligus pesan-pesan pribadi terbaru anda: semuanya dapat disimpan berkat kunci pribadi yang bisa anda modifikasi setiap saat dengan jalan memperbaharui kata sandi.', 'ical_methode_http' => 'Mengunduh', - 'ical_methode_webcal' => 'Sinkronisasi (webcal://)', + 'ical_methode_webcal' => 'Sinkronisasi (webcal://)', # MODIF 'ical_texte_js' => 'Sebuah kode javascript mengizinkan anda untuk menampilkan secara mudah dan di setiap situs yang anda miliki, semua artikel terbaru yang dipublikasikan di situs ini.', 'ical_texte_prive' => 'Kalender ini, yang sifatnya pribadi sekali, menginformasikan anda seluruh aktivitas editorial pribadi situs ini (tugas-tugas, janji-janji pribadi, artikel-artikel dan berita-berita yang dikirimkan...).', 'ical_texte_public' => 'Kalender ini memperbolehkan anda mengikuti aktivitas umum situs ini (artikel-artikel dan berita-berita yang dipublikasi).', @@ -159,9 +128,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_creer_auteur' => 'Buat seorang penulis baru dan asosiasikan dia dengan artikel ini', 'icone_creer_mot_cle' => 'Buat sebuah kata kunci baru dan tautkan ia ke artikel ini', 'icone_creer_rubrique_2' => 'Buat sebuah bagian baru', - 'icone_envoyer_message' => 'Kirim pesan ini', 'icone_modifier_article' => 'Modifikasi artikel ini', - 'icone_modifier_message' => 'Modifikasi pesan ini', 'icone_modifier_rubrique' => 'Modifikasi bagian ini', 'icone_retour' => 'Kembali', 'icone_retour_article' => 'Kembali ke artikel', @@ -171,11 +138,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'Validasi tanda tangan ini', 'image_administrer_rubrique' => 'Anda dapat mengelola bagian ini', 'info_1_article' => '1 artikel', - 'info_1_site' => '1 situs', 'info_activer_cookie' => 'Anda apat mengaktifkan cookie administrasi, yang memperbolehkan anda untuk berpindah-pindah dengan mudah antara situs umum dan area pribadi.', - 'info_admin_gere_rubriques' => 'Administrator ini mengelola bagian-bagian berikut:', - 'info_admin_gere_toutes_rubriques' => 'Administrator ini mengelola semua bagian.', # MODIF 'info_administrateur' => 'Administrator', 'info_administrateur_1' => 'Administrator', 'info_administrateur_2' => 'situs (gunakan dengan penuh kehati-hatian)', @@ -185,16 +149,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'Anda dapat mengelola bagian ini', 'info_adresse' => 'ke alamat:', 'info_adresse_url' => 'URL situs umum anda', - 'info_afficher_visites' => 'Tampilkan kunjungan untuk:', 'info_aide_en_ligne' => 'Bantuan Online SPIP', 'info_ajout_image' => 'Ketika anda menambahkan gambar sebagai lampiran pada sebuah artikel, SPIP dapat secara otomatis membuat gambar kecil dari gambar yang dimasukkan. Ini bermanfaat ,sebagai contoh, untuk membuat sebuah galeri gambar atau portfolio.', - 'info_ajout_participant' => 'Peserta berikut telah ditambahkan:', 'info_ajouter_rubrique' => 'Tambah sebuah bagian untuk dikelola:', 'info_annonce_nouveautes' => 'Pengumuman-pengumuman berita terbaru', - 'info_anterieur' => 'sebelumnya', 'info_article' => 'artikel', 'info_article_2' => 'artikel', 'info_article_a_paraitre' => 'Artikel-artikel bertanggal yang akan dipublikasikan', @@ -202,10 +163,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_2' => 'Artikel', 'info_articles_auteur' => 'Artikel-artikel penulis ini', 'info_articles_trouves' => 'Artikel ditemukan', - 'info_articles_trouves_dans_texte' => 'Artikel ditemukan (dalam teks)', 'info_attente_validation' => 'Validasi tertunda artikel-artikel anda', 'info_aujourdhui' => 'hari ini:', - 'info_auteur_message' => 'PENGIRIM PESAN:', 'info_auteurs' => 'Penulis', 'info_auteurs_par_tri' => 'Penulis@partri@', 'info_auteurs_trouves' => 'Penulis ditemukan', @@ -238,15 +197,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Tanggal publikasi sebelumnya:', 'info_date_referencement' => 'TANGGAL REFERENSI SITUS INI:', 'info_derniere_etape' => 'Langkah terakhir: Selesai!', - 'info_derniers_articles_publies' => 'Artikel-artikel terakhir anda yang dipublikasi', - 'info_desactiver_messagerie_personnelle' => 'Anda dapat mengaktifkan atau menonaktifkan sistem pesan pribadi anda di situs ini.', 'info_descriptif' => 'Deskripsi:', 'info_discussion_cours' => 'Diskusi-diskusi yang sedang berlangsung', 'info_ecrire_article' => 'Sebelum dapat menulis artikel, anda harus membuat paling tidak satu bagian.', 'info_email_envoi' => 'Alamat e-mail pengirim (opsional)', 'info_email_envoi_txt' => 'Masukkan alamat e-mail pengirim yang digunakan untuk mengirim e-mail (secara standar, alamat penerima digunakan sebagai alamat pengirim) :', 'info_email_webmestre' => 'Alamat e-mail webmaster (opsional)', # MODIF - 'info_entrer_code_alphabet' => 'Masukkan kode set karakter yang akan digunakan:', 'info_envoi_email_automatique' => 'Pengiriman otomatis', 'info_envoyer_maintenant' => 'Kirim sekarang', 'info_etape_suivante' => 'Lanjut ke langkah berikutnya', @@ -258,28 +214,20 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( sebagai contoh permohonan publikasi dan validasi artikel.', 'info_fichiers_authent' => 'Berkas ototentikasi ".htpasswd"', 'info_forums_abo_invites' => 'Situs anda berisikan forum-forum berlangganan; pengunjung dapat mendaftarkan diri pada forum-forum tersebut di situs umum.', - 'info_gauche_admin_effacer' => 'Hanya administrator yang memiliki akses ke halaman ini.

    Halaman ini memberikan akses ke berbagai tugas pemeliharaan teknis. Beberapa di antaranya memerlukan proses ototentikasi tersendiri yang membutuhkan akses FTP ke situs web.

    ', # MODIF 'info_gauche_admin_tech' => 'Hanya administrator yang memiliki akses ke halaman ini.

    Halaman ini memberikan akses ke berbagai tugas pemeliharaan teknis. Beberapa di antaranya memerlukan proses ototentikasi tersendiri yang membutuhkan akses FTP ke situs web.

    ', # MODIF 'info_gauche_admin_vider' => 'Hanya administrator yang memiliki akses ke halaman ini.

    Halaman ini memberikan akses ke berbagai tugas pemeliharaan teknis. Beberapa di antaranya memerlukan proses ototentikasi tersendiri yang membutuhkan akses FTP ke situs web.

    ', # MODIF 'info_gauche_auteurs' => 'Anda akan menemukan seluruh penulis situs di sini. Status dari setiap penulis ditunjukkan oleh warna icon (administrator = hijau; editor = kuning).', 'info_gauche_auteurs_exterieurs' => 'Penulis eksternal, tanpa akses ke situs, ditunjukkan oleh icon biru; penulis yang dihapus oleh icon warna keranjang sampah.', # MODIF 'info_gauche_messagerie' => 'Sistem pesan mengizinkan anda bertukar pesan dengan sesama editor, untuk menyimpan memo (untuk keperluan pribadi anda) atau untuk menampilkan pengumuman di halaman depan area pribadi (jika anda seorang administrator).', - 'info_gauche_numero_auteur' => 'NOMOR PENULIS:', 'info_gauche_statistiques_referers' => 'Halaman ini menampilkan daftar pereferensi, yakni situs-situs yang memuat tautan ke situs anda, hanya untuk kemarin dan hari ini: sesungguhnya daftar ini diperbaharui setiap 24 jam.', 'info_gauche_visiteurs_enregistres' => 'Anda akan menemukan di sini para pengunjung terdaftar di area umum situs (forum-forum berlangganan).', 'info_generation_miniatures_images' => 'Membuat gambar-gambar kecil', - 'info_gerer_trad' => 'Aktifkan tautan penerjemahan?', 'info_hebergeur_desactiver_envoi_email' => 'Sejumlah hosting menonaktifkan pengiriman e-mail otomatis di server mereka. Dalam hal ini fitur-fitur SPIP berikut tidak dapat diimplementasikan.', 'info_hier' => 'kemarin:', - 'info_historique_activer' => 'Aktifkan pelacakan revisi', - 'info_historique_affiche' => 'Tampilkan versi ini', - 'info_historique_comparaison' => 'bandingkan', - 'info_historique_desactiver' => 'Non aktifkan pelacakan revisi', - 'info_historique_texte' => 'Pelacakan revisi mengizinkan anda untuk melihat perubahan dan penambahan yang dibuat pada sebuah artikel dan menampilkan perbedaan di antara versi-versi yang ada.', 'info_identification_publique' => 'Identitas umum anda...', 'info_image_process' => 'Pilih metode terbaik untuk membuat gambar kecil dengan mengklik gambar yang terkait.', 'info_image_process2' => 'Catatan: Jika anda tidak dapat melihat gambar, berarti server anda tidak dikonfigurasi untuk menggunakan peralatan yang ada. Jika anda ingin menggunakan fitur-fitur ini, hubungi bagian teknis penyedia hosting anda dan minta ekstensi «GD» atau «Imagick» diinstal.', # MODIF @@ -297,8 +245,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_login_trop_court' => 'Log masuk terlalu pendek.', 'info_maximum' => 'maksimum:', 'info_meme_rubrique' => 'Dalam bagian yang sama', - 'info_message' => 'Pesan dari', - 'info_message_efface' => 'PESAN DIHAPUS', 'info_message_en_redaction' => 'Pesan-pesan anda dalam proses', 'info_message_technique' => 'Pesan teknis:', 'info_messagerie_interne' => 'Sistem pesan internal', @@ -311,20 +257,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'Modifikasi bagian:', 'info_modifier_titre' => 'Modifikasi: @titre@', 'info_mon_site_spip' => 'Situs SPIP saya', - 'info_mot_sans_groupe' => '(Kata-kata kunci tanpa kelompok...)', - 'info_moteur_recherche' => 'Mesin pencari terintegrasi', 'info_moyenne' => 'rata-rata:', - 'info_multi_articles' => 'Aktifkan menu bahasa untuk artikel?', 'info_multi_cet_article' => 'Bahasa artikel ini:', 'info_multi_langues_choisies' => 'Silakan pilih di bawah bahasa yang tersedia untuk editor situs anda. Bahasa-bahasa yang telah digunakan oleh situs anda (di daftar paling atas) tidak dapat dinonaktifkan.', - 'info_multi_rubriques' => 'Aktifkan menu bahasa untuk bagian?', 'info_multi_secteurs' => '... hanya untuk bagian-bagian yang berlokasi di root?', 'info_nom' => 'Nama', 'info_nom_destinataire' => 'Nama penerima', 'info_nom_site' => 'Nama situs anda', 'info_nombre_articles' => '@nb_articles@ artikel,', - 'info_nombre_partcipants' => 'PESERTA DISKUSI:', 'info_nombre_rubriques' => '@nb_rubriques@ bagian,', 'info_nombre_sites' => '@nb_sites@ situs,', 'info_non_deplacer' => 'Jangan pindahkan...', @@ -334,17 +275,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_modifiable' => 'tidak dapat dimodifikasi', 'info_non_suppression_mot_cle' => 'Saya tidak ingin menghapus kata kunci ini.', 'info_notes' => 'Catatan kaki', - 'info_nouveaux_message' => 'Pesan-pesan baru', 'info_nouvel_article' => 'Artikel baru', 'info_nouvelle_traduction' => 'Terjemahan baru:', 'info_numero_article' => 'NOMOR ARTIKEL:', 'info_obligatoire_02' => '[Dibutuhkan]', # MODIF 'info_option_accepter_visiteurs' => 'Izinkan registrasi pengunjung dari situs umum', - 'info_option_faire_suivre' => 'Teruskan pesan forum ke penulis artikel', 'info_option_ne_pas_accepter_visiteurs' => 'Tolak registrasi pengunjung', 'info_options_avancees' => 'OPSI-OPSI LANJUTAN', - 'info_ortho_activer' => 'Aktifkan pemeriksa ejaan.', - 'info_ortho_desactiver' => 'Non aktifkan pemeriksa ejaan.', 'info_ou' => 'atau...', 'info_page_interdite' => 'Halaman terlarang', 'info_par_nom' => 'berdasarkan nama', @@ -353,20 +290,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_par_tri' => '(Oleh @tri@)', 'info_passe_trop_court' => 'Kata sandi terlalu pendek.', 'info_passes_identiques' => 'Dua kata sandi tidak identik.', - 'info_pense_bete_ancien' => 'Memo-memo lama anda', # MODIF 'info_plus_cinq_car' => 'lebih dari 5 karakter', 'info_plus_cinq_car_2' => '(Lebih dari 5 karakter)', 'info_plus_trois_car' => '(Lebih dari 3 karakter)', 'info_popularite' => 'popularitas: @popularite@; kunjungan: @visites@', - 'info_popularite_4' => 'popularitas: @popularite@; kunjungan: @visites@', 'info_post_scriptum' => 'Postscript', 'info_post_scriptum_2' => 'Postscript:', 'info_pour' => 'untuk', - 'info_preview_admin' => 'Hanya administrator yang memiliki akses ke mode preview', - 'info_preview_comite' => 'Semua penulis memiliki akses ke mode preview', - 'info_preview_desactive' => 'Mode preview dinonaktifkan', - 'info_preview_texte' => 'Ada kemungkinan melihat situs terlebih dahulu seolah-olah semua artikel dan berita (yang paling tidak memiliki status "terkirim") telah dipublikasi. Apakah mode preview ini sebaiknya dibatasi hanya kepada administrator, terbuka untuk semua penulis atau dinonaktifkan selama-lamanya?', - 'info_principaux_correspondants' => 'Korespondensi utama anda', + 'info_preview_texte' => 'Ada kemungkinan melihat situs terlebih dahulu seolah-olah semua artikel dan berita (yang paling tidak memiliki status "terkirim") telah dipublikasi. Apakah mode preview ini sebaiknya dibatasi hanya kepada administrator, terbuka untuk semua penulis atau dinonaktifkan selama-lamanya?', # MODIF 'info_procedez_par_etape' => 'silakan dilanjutkan langkah demi langkah', 'info_procedure_maj_version' => 'prosedur pembaharuan hendaknya dijalankan untuk mengadaptasi database degan versi terbaru SPIP.', @@ -384,13 +315,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( hosting menonaktifkan pengiriman e-mail di server mereka: dalam hal ini ini registrasi terotomasi tidak dapat diimplementasikan.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Apakah anda ingin mengunakan mesin pencari yang terintegrasi dengan SPIP? - (Menonaktifkannya akan meningkatkan kinerja sistem.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Root situs', 'info_recharger_page' => 'Silakan buka kembali halaman ini beberapa saat lagi.', - 'info_recherche_auteur_a_affiner' => 'Terlalu banyaj hasil untuk "@cherche_auteur@"; silakan perbaiki pencarian anda.', - 'info_recherche_auteur_ok' => 'Sejumlah editor ditemukan untuk "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Tidak ada hasil untuk "@cherche_auteur@".', 'info_recommencer' => 'Silakan coba lagi.', 'info_redacteur_1' => 'Redaktur', @@ -407,7 +334,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'Bagian', 'info_rubriques_02' => 'bagian', 'info_rubriques_trouvees' => 'Bagian ditemukan', - 'info_rubriques_trouvees_dans_texte' => 'Bagian ditemukan (dalam teks)', 'info_sans_titre' => 'Tidak berjudul', 'info_selection_chemin_acces' => 'Pilih di bawah path akses dalam direktori:', 'info_signatures' => 'tanda tangan', @@ -420,13 +346,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_sites_lies_mot' => 'Situs-situs referensi yang terasosiasi dengan kata kunci ini', 'info_sites_proxy' => 'Menggunakan proxy', 'info_sites_trouves' => 'Situs ditemukan', - 'info_sites_trouves_dans_texte' => 'Situs ditemukan (dalam teks)', 'info_sous_titre' => 'Sub judul:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Status penulis ini:', # MODIF 'info_statut_auteur_a_confirmer' => 'Pendaftaran yang perlu dikonfirmasi', 'info_statut_auteur_autre' => 'Status lainnya:', - 'info_statut_efface' => 'Dihapus', 'info_statut_redacteur' => 'Editor', 'info_statut_utilisateurs_1' => 'Status standar para pengguna yang diimpor', 'info_statut_utilisateurs_2' => 'Pilih status yang diberikan kepada orang-orang yang terdapat di direktori LDAP ketika terkoneksi pertama kali. Nanti anda dapat memodifikasi status tersebut untuk setiap penulis berdasarkan kasus per kasus.', @@ -447,7 +371,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_en_redaction' => 'Semua artikel dalam proses', 'info_tous_articles_presents' => 'Semua artikel yang dipublikasi dalam bagian ini', 'info_tous_les' => 'setiap:', - 'info_tous_redacteurs' => 'Pengumuman kepada semua editor', 'info_tout_site' => 'Seluruh situs', 'info_tout_site2' => 'Artikel-artikel belum diterjemahkan ke dalam bahasa ini.', 'info_tout_site3' => 'Artikel telah diterjemahkan ke dalam bahasa ini, tapi sejumlah modifikasi telah dibuat untuk artikel referensi. Oleh karenanya terjemahan memerlukan pembaharuan.', @@ -462,7 +385,6 @@ dalam warna yang menunjukkan statusnya:', 'info_une_rubrique' => 'sebuah bagian,', 'info_une_rubrique_02' => '1 bagian', 'info_url' => 'URL:', - 'info_url_site' => 'URL SITUS:', 'info_urlref' => 'Tautan web:', 'info_utilisation_spip' => 'SPIP siap untuk digunakan...', 'info_visites_par_mois' => 'Tampilan bulanan:', @@ -480,8 +402,6 @@ dalam warna yang menunjukkan statusnya:', 'item_activer_messages_avertissement' => 'Aktifkan pesan-pesan peringatan', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Tampilkan dalam kalender', - 'item_autoriser_documents_joints' => 'Otorisasi dokumen yang terlampir di artikel', - 'item_autoriser_documents_joints_rubriques' => 'Otorisasi dokumen dalam bagian', 'item_autoriser_syndication_integrale' => 'Ikut sertakan semua artikel dalam berkas sindikasi', 'item_choix_administrateurs' => 'administrator', 'item_choix_generation_miniature' => 'Buat gambar-gambar kecil secara otomatis.', @@ -489,7 +409,6 @@ dalam warna yang menunjukkan statusnya:', 'item_choix_redacteurs' => 'editor', 'item_choix_visiteurs' => 'pengunjung situs umum', 'item_creer_fichiers_authent' => 'Buat berkas .htpasswd', - 'item_limiter_recherche' => 'Batasi pencarian pada informasi yang terdapat di situs anda', 'item_login' => 'Log masuk', 'item_mots_cles_association_articles' => 'artikel', 'item_mots_cles_association_rubriques' => 'bagian', @@ -498,35 +417,25 @@ dalam warna yang menunjukkan statusnya:', 'item_non_accepter_inscriptions' => 'Jangan izinkan pendaftaran', 'item_non_activer_messages_avertissement' => 'Tidak ada pesan-pesan kesalahan', 'item_non_afficher_calendrier' => 'Jangan tampilkan dalam kalender', - 'item_non_autoriser_documents_joints' => 'Jangan otorisasi dokumen dalam artikel', - 'item_non_autoriser_documents_joints_rubriques' => 'Jangan otorisasi dokumen dalam bagian', 'item_non_autoriser_syndication_integrale' => 'Kirim ringkasan saja', 'item_non_creer_fichiers_authent' => 'Jangan buat berkas-berkas ini', - 'item_non_gerer_statistiques' => 'Jangan kelola statistik', - 'item_non_limiter_recherche' => 'Perluas pencarian isi dari situs-situs referensi', 'item_non_publier_articles' => 'Jangan publikasi artikel sebelum tanggal publikasinya.', - 'item_non_utiliser_moteur_recherche' => 'Jangan gunakan sistem', 'item_nouvel_auteur' => 'Penulis baru', 'item_nouvelle_rubrique' => 'Bagian baru', 'item_oui' => 'Ya', 'item_publier_articles' => 'Publikasi artikel tanpa menghiraukan tanggal publikasinya.', 'item_reponse_article' => 'Balasan pada artikel', - 'item_utiliser_moteur_recherche' => 'Gunakan mesin pencari', 'item_visiteur' => 'pengunjung', // J 'jour_non_connu_nc' => 'tidak dikenal', // L - 'lien_ajout_destinataire' => 'Tambahkan penerima ini', 'lien_ajouter_auteur' => 'Tambahkan penulis ini', - 'lien_ajouter_participant' => 'Tambahkan seorang peserta', 'lien_email' => 'e-mail', 'lien_nom_site' => 'NAMA SITUS:', 'lien_retirer_auteur' => 'Hapus penulis', - 'lien_retrait_particpant' => 'Hapus peserta ini', 'lien_site' => 'situs', - 'lien_supprimer_rubrique' => 'hapus bagian ini', 'lien_tout_deplier' => 'Buka semuanya', 'lien_tout_replier' => 'Tutup semuanya', 'lien_tout_supprimer' => 'Hapus semua', @@ -563,6 +472,7 @@ dalam warna yang menunjukkan statusnya:', // R 'repertoire_plugins' => 'Directori:', + 'required' => '[Dibutuhkan]', # MODIF // S 'statut_admin_restreint' => '(admin terbatas)', # MODIF @@ -587,16 +497,11 @@ menginstal kembali SPIP untuk membuat database baru dan akses administrator pert 'texte_article_virtuel_reference' => 'Artikel maya: artikel referensi di situs SPIP anda, yang dialihkan ke lain URL. Untuk menghapus pengalihan, hapuslah URL di atas.', 'texte_aucun_resultat_auteur' => 'Tidak ada hasil untuk "@cherche_auteur@".', 'texte_auteur_messagerie' => 'Situs ini dapat memonitor secara terus-menerus daftar editor-editor yang terkoneksi, yang mengizinkan anda untuk bertukar pesan secara langsung. Anda dapat memilih untuk tidak muncul dalam daftar ini (yang membuat anda kemudian, "tak terlihat" di hadapan pengguna lainnya).', - 'texte_auteur_messagerie_1' => 'Situs ini mengizinkan anda untuk bertukar pesan dan membuat forum diskusi pribadi di antara pengunjung situs. Anda dapat memilih untuk tidak berpartisipasi dalam pertukaran ini.', 'texte_auteurs' => 'PENULIS', 'texte_choix_base_1' => 'Pilih database anda:', 'texte_choix_base_2' => 'Server SQL berisikan sejumlah database.', 'texte_choix_base_3' => 'Pilih di bawah salah satu yang diberikan hosting anda kepada anda:', 'texte_choix_table_prefix' => 'Prefiks untuk tabel:', - 'texte_commande_vider_tables_indexation' => 'Gunakan perintah ini untuk mengosongkan tabel terindeksasi - yang digunakan oleh mesin pencari SPIP. Ini akan memberi anda - sejumlah ruangan di disk.', - 'texte_compresse_ou_non' => '(yang ini dapat dikompres atau tidak)', 'texte_compte_element' => '@count@ elemen', 'texte_compte_elements' => '@count@ elemen', 'texte_connexion_mysql' => 'Merujuk kepada informasi yang diberikan hosting anda kepada anda: mereka seharusnya memberikan anda, jika hosting anda mendukung SQL, kode koneksi ke server SQL.', # MODIF @@ -612,10 +517,8 @@ menginstal kembali SPIP untuk membuat database baru dan akses administrator pert 'texte_date_publication_anterieure' => 'Tanggal publikasi awal:', 'texte_date_publication_anterieure_nonaffichee' => 'Sembunyikan data publikasi awal.', 'texte_date_publication_article' => 'TANGGAL PUBLIKASI ONLINE:', - 'texte_descriptif_petition' => 'Deskripsi petisi', 'texte_descriptif_rapide' => 'Deskripsi singkat', 'texte_effacer_base' => 'Hapus database SPIP', - 'texte_effacer_donnees_indexation' => 'Hapus data terindeksasi', 'texte_en_cours_validation' => 'Artikel-artikel dan berita-berita berikut dikirim untuk publikasi. Jangan segan-segan memberikan opini anda melalui forum yang terlampir di dalamnya.', # MODIF 'texte_enrichir_mise_a_jour' => 'Anda dapat memperkaya tampilan teks anda dengan menggunakan «jalan pintas typografis».', 'texte_fichier_authent' => 'Haruskah SPIP membuat berkas .htpasswd @@ -630,29 +533,17 @@ menginstal kembali SPIP untuk membuat database baru dan akses administrator pert 'texte_informations_personnelles_2' => '(Catatan: jika ini adalah instalasi kembali, dan akses anda masih berlaku, anda dapat', # MODIF 'texte_introductif_article' => '(Teks Pengantar artikel.)', 'texte_jeu_caractere' => 'Anda disarankan menggunakan aksara universal (utf-8) di situs anda. Ini memungkinkan untuk menampilkan teks dalam segala bahsa. Browser modern tidak akan mengalami kesulitan dalam menangani set karakter ini.', - 'texte_jeu_caractere_2' => 'Catatan: Pengaturan ini tidak akan mengubah teks yang sudah disimpan dalam database.', 'texte_jeu_caractere_3' => 'Situs anda saat ini menggunakan set karakter ini:', 'texte_jeu_caractere_4' => 'Jika itu tidak berkaitan dengan situasi yang anda miliki dengan data anda (sebagai contoh, setelah pemulihan database anda dari backup), atau jika anda mengkonfigurasi situs ini dan berkeinginan menggunakan set karakter yang berbeda, silakan tunjukkan set karakter di sini:', - 'texte_jeu_caractere_conversion' => 'Catatan: Anda dapat memutuskan untuk mengubah semua teks (artickel, berita, forum, dll.) situs anda dan semua set karakter ke utf-8. Untuk melakukan ini, silakan kunjungi halaman konversi UTF-8.', - 'texte_lien_hypertexte' => '(Jika pesan anda merujuk pada sebuah artikel yang dipublikasi di Web, atau ke halaman yang berisikan informasi lebih banyak, silakan memasukkan judul halaman dan URL nya di sini.)', 'texte_login_ldap_1' => '(Biarkan kosong untuk akses anonim atau masukkan path lengkap, sebagai contoh «uid=smith, ou=users, dc=my-domain, dc=com».)', 'texte_login_precaution' => 'Peringatan! Ini adalah log masuk yang anda gunakan untuk terkoneksi sekarang. Gunakan formulir ini dengan hati-hati...', - 'texte_message_edit' => 'Peringatan: pesan ini dapat dimodifikasi oleh semua administrator situs, dan muncul di hadapan semua editor. Gunakan pengumuman hanya untuk menekankan pentingnya sebuah kejadian dalam siklus hidup situs.', 'texte_mise_a_niveau_base_1' => 'Anda harus memperbaharui berkas-berkas SPIP. Sekarang anda harus memperbaharui database situs.', 'texte_modifier_article' => 'Modifikasi artikel:', - 'texte_moteur_recherche_active' => 'Mesin pencari diaktifkan. Gunakan perintah ini - jika anda ingin mengeksekusi indeksasi ulang (setelah pemulihan - sebuah backup sebagai contohnya). Anda seharusnya memperhatikan bahwa - dokumen yang dimodifikasi secara normal (dari tatap muka SPIP) akan diindeks - kembali secara otomatis: oleh karenanya perintah ini hanya berlaku dalam - situasi tertentu saja.', - 'texte_moteur_recherche_non_active' => 'Mesin pencari tidak diaktifkan.', 'texte_multilinguisme' => 'Jika anda ingin mengelola artikel-artikel dalam beberapa bahasa, dengan navigasi yang kompleks, anda dapat menambah sebuah menu pemilih bahasa di artikel dan/atau bagian, sesuai dengan organisasi dari situs anda.', # MODIF 'texte_multilinguisme_trad' => 'Selain itu, anda juga dapat mengaktifkan sistem manajemen tautan di antara terjemahan yang berbeda dari sebuah artikel.', # MODIF 'texte_non_compresse' => 'tidak dikompresi (server anda tidak mendukung fitur ini)', - 'texte_nouveau_message' => 'Pesan baru', 'texte_nouvelle_version_spip_1' => 'Anda baru saja menginstal versi terbaru SPIP.', 'texte_nouvelle_version_spip_2' => 'Versi terbaru ini membutuhkan pembaharuan secara menyeluruh daripada biasanya. Jika anda adalah webmaster situs ini, silakan hapus berkas @connect@ dan jalankan kembali instalasi untuk memperbaharui paramater-parameter koneksi database anda.

    (Catatan: Jika anda lupa paramater-parameter koneksi database anda, silakan lihat berkas @connect@ sebelum menghapusnya!)

    ', # MODIF 'texte_operation_echec' => 'Kembali ke halaman sebelumnya, pilih database lain atau buat yang baru. Verifikasi informasi yang diberikan oleh hosting anda.', @@ -672,7 +563,6 @@ menginstal kembali SPIP untuk membuat database baru dan akses administrator pert 'texte_rappel_selection_champs' => '[Ingat untuk memilih kolom ini dengan benar.]', 'texte_recalcul_page' => 'Jika anda hanya ingin memperbaharui satu halaman, anda sebaiknya melakukannya dari area umum dan gunakan tombol « perbaharui ».', - 'texte_recapitiule_liste_documents' => 'Halaman ini menampilkan daftar dari dokumen-dokumen yang anda tempatkan di bagian-bagian. Untuk memodifikasi informasi setiap dokumen, ikuti tautan ke halaman bagiannya.', 'texte_recuperer_base' => 'Perbaiki database', 'texte_reference_mais_redirige' => 'artikel referensi di situs SPIP anda, tapi mengarah ke URL lain.', 'texte_requetes_echouent' => 'Wetika sejumlah query SQL gagal @@ -703,7 +593,6 @@ dalam cache SPIP. Ini mengizinkan anda, antara lain, untuk memaksa semua halaman anda memasukkan modifikasi yang penting di grafik atau struktur situs.', 'texte_sur_titre' => 'Judul atas', 'texte_table_ok' => ': tabel ini OK.', - 'texte_tables_indexation_vides' => 'Tabel terindeksasi mesin kosong.', 'texte_tentative_recuperation' => 'Usaha perbaikan', 'texte_tenter_reparation' => 'Usaha untuk memperbaiki database.', 'texte_test_proxy' => 'Untuk mencoba proxy ini, masukkan alamat sebuah situs web di sini @@ -713,13 +602,8 @@ anda memasukkan modifikasi yang penting di grafik atau struktur situs.', 'texte_travail_article' => '@nom_auteur_modif@ telah bekerja di artikel ini @date_diff@ menit yang lalu', 'texte_travail_collaboratif' => 'Jika beberapa editor sering bekerja sama dalam artikel yang sama, sistem dapat menandai artikel-artikel yang saat itu sedang «dibuka» guna menghindari konflik saat diedit. Opsi ini dinonaktifkan secara standar untuk menghindri pesan-pesan peringatan yang tidak perlu.', - 'texte_trop_resultats_auteurs' => 'Terlalu banyak hasil untuk "@cherche_auteur@"; silakan perbaiki pencarian anda.', - 'texte_unpack' => 'mengunduh versi terakhir', - 'texte_utilisation_moteur_syndiques' => 'Ketika anda menggunakan mesin pencari SPIP, anda dapat melakukan pencarian di situs dan artikel yang tersindikasi dala dua cara yang berbeda.
    - Cara termudah adalah mencari hanya di judul dan deskripsi artikel.
    - Kedua, cara yang lebih bagus, selain di atas juga mencari dalam teks situs-situs referensi. Jika anda mereferensi sebuah situs, SPIP akan melakukan pencarian di teks situs tersebut.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Metode ini memaksa SPIP untuk mengunjungi situs-situs referensi secara teratur, yang mungkin dapat menurunkan kinerja situs anda.', 'texte_vide' => 'kosong', 'texte_vider_cache' => 'Kosongkan cache', - 'titre_admin_effacer' => 'Pemeliharaan teknis', 'titre_admin_tech' => 'Pemeliharaan teknis', 'titre_admin_vider' => 'Pemeliharaan teknis', 'titre_cadre_afficher_article' => 'Tampilkan artikel:', @@ -739,50 +623,27 @@ anda memasukkan modifikasi yang penting di grafik atau struktur situs.', 'titre_naviguer_dans_le_site' => 'Jelajah situs...', 'titre_nouvelle_rubrique' => 'Bagian baru', 'titre_numero_rubrique' => 'NOMOR BAGIAN:', - 'titre_page_admin_effacer' => 'Pemeliharaan teknis: mengahpus database', 'titre_page_articles_edit' => 'Modifikasi: @titre@', 'titre_page_articles_page' => 'Artikel', 'titre_page_articles_tous' => 'Seluruh situs', - 'titre_page_auteurs' => 'Pengunjung', 'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Konfigurasi situs', - 'titre_page_config_fonctions' => 'Konfigurasi situs', - 'titre_page_configuration' => 'Konfigurasi situs', - 'titre_page_controle_petition' => 'Tindak lanjut petisi', 'titre_page_delete_all' => 'penghapusan menyeluruh dan tidak dapat dikembalikan lagi', - 'titre_page_documents_liste' => 'Lampiran', - 'titre_page_index' => 'Area pribadi anda', - 'titre_page_message_edit' => 'Tulis sebuah pesan', - 'titre_page_messagerie' => 'Sistem pesan anda', 'titre_page_recherche' => 'Hasil pencarian @recherche@', 'titre_page_statistiques_referers' => 'Statistik (tautan masuk)', 'titre_page_upgrade' => 'Pembaharuan SPIP', 'titre_publication_articles_post_dates' => 'Publikasi artikel terjadwal', - 'titre_referencer_site' => 'Referensi situs:', - 'titre_rendez_vous' => 'JANJI:', 'titre_reparation' => 'Perbaikan', 'titre_suivi_petition' => 'Tindak lanjut petisi', 'tls_ldap' => 'Pengamanan layer transportasi:', - 'trad_article_inexistant' => 'Tidak ada artikel dengan nomor ini', 'trad_article_traduction' => 'Semua versi artikel ini:', - 'trad_deja_traduit' => 'Artikel ini adalah terjemahan dari artikel yang sekarang.', 'trad_delier' => 'Berhenti menautkan artikel ini ke terjemahannya', # MODIF 'trad_lier' => 'Artikel ini adalah terjemahan dari artikel nomor:', 'trad_new' => 'Tulis terjemahan baru untuk artikel ini', # MODIF // U - 'utf8_convert_attendez' => 'Tunggu beberapa saat dan perbaharui halaman ini.', - 'utf8_convert_avertissement' => 'Anda akan mengubah isi database anda (artikel, berita, dll) dari set karakter @orig@ ke set karakter @charset@.', - 'utf8_convert_backup' => 'Jangan lupa membuat backup lengkap situs anda terlebih dahulu. Anda juga perlu memeriksa bahawa templat dan bahasa anda kompatibel dengan @charset@.', - 'utf8_convert_erreur_deja' => 'Situs anda sudah dalam @charset@, tidak ada yang perlu diubah.', 'utf8_convert_erreur_orig' => 'Kesalahan: set karakter @charset@ tidak didukung.', - 'utf8_convert_termine' => 'Selesai!', - 'utf8_convert_timeout' => 'Penting: Jika server menunjukkan timeout, silakan perbaharui halaman di mana anda memperoleh pesan «Selesai!».', - 'utf8_convert_verifier' => 'Anda sekarang harus mengosongkan cache situs dan periksa apakah semuanya baik-baik saja di halaman-halaman umum situs. Jika anda mengalami sebuah permasalahan besar, sebuah backup data asli anda (dalam format SQL) telah dibuat di direktori @rep@.', - 'utf8_convertir_votre_site' => 'Ubah situs anda ke utf-8', // V 'version' => 'Versi:' ); - -?> diff --git a/www/ecrire/lang/ecrire_it.php b/www/ecrire/lang/ecrire_it.php index 00ae28f9..3d146414 100644 --- a/www/ecrire/lang/ecrire_it.php +++ b/www/ecrire/lang/ecrire_it.php @@ -1,9 +1,11 @@ 'il percorso che hai scelto', 'avis_chemin_invalide_2' => 'non sembra valido. Torna alla pagina precedente e verifica le informazioni fornite.', 'avis_connexion_echec_1' => 'Il collegamento alla base di dati è fallito.', - 'avis_connexion_echec_2' => 'torna alla pagina precedente e verifica le informazioni fornite.', + 'avis_connexion_echec_2' => 'Torna alla pagina precedente e verifica le informazioni fornite.', 'avis_connexion_echec_3' => 'N.B. Su molti server si deve chiedere l’attivazione dell’accesso alla base di dati prima di poterlo utilizzare. Se è impossibile collegarsi, verificare che questo passo sia stato fatto.', + 'avis_connexion_erreur_creer_base' => 'Non è stato possibile creare un database.', 'avis_connexion_erreur_nom_base' => 'Il nome del database può contenere solo lettere, numeri e tratti.', 'avis_connexion_ldap_echec_1' => 'La connessione al server LDAP è fallita.', 'avis_connexion_ldap_echec_2' => 'Torna alla pagina precedente e verifica le informazioni fornite. ', 'avis_connexion_ldap_echec_3' => 'In alternativa, non utilizzare il supporto LDAP per importare utenti.', 'avis_deplacement_rubrique' => 'Attenzione! Questa rubrica contiene @contient_breves@ breve/i: se vuoi spostarla, spunta questa casella per confermare.', - 'avis_destinataire_obligatoire' => 'Devi indicare un destinatario prima di mandare questo messaggio.', 'avis_erreur_connexion_mysql' => 'Errore di connessione SQL', - 'avis_erreur_version_archive' => 'Attenzione! Il file @archive@ è stato creato - con una versione di SPIP diversa da quella - installata. Potranno sorgere notevoli problemi: - rischio di distruzione del database, vari malfunzionamenti del sito ecc. - Non confermare questa richiesta d’importazione.

    Per ulteriori - informazioni, vedere - la documentazione di SPIP.

    ', - 'avis_espace_interdit' => 'Area vietata
    SPIP è già installato.
    ', + 'avis_espace_interdit' => 'Area vietata
    SPIP è già installato.
    ', 'avis_lecture_noms_bases_1' => 'Il programma di installazione non ha potuto leggere i nomi dei database installati nel server.', 'avis_lecture_noms_bases_2' => 'Nessun database è disponibile, o la funzione che permette di accedere alla lista database è disattivata per motivi sicurezza (verifica con l’amministratore di sistema).', 'avis_lecture_noms_bases_3' => 'Nel secondo caso, è probabile che un database con il tuo nome di login sia utilizzabile:', - 'avis_non_acces_message' => 'Non hai accesso a questo messaggio.', 'avis_non_acces_page' => 'Non hai accesso a questa pagina.', 'avis_operation_echec' => 'L’operazione è fallita.', 'avis_operation_impossible' => 'Operazione impossibile', - 'avis_probleme_archive' => 'Problema di lettura del file @archive@', 'avis_suppression_base' => 'ATTENZIONE, la cancellazione dei dati è irreversibile', - 'avis_version_mysql' => 'Il vostro server SQL (@version_mysql@)non permette la correzione automatica delle tabelle del database.', // B 'bouton_acces_ldap' => 'Aggiungi l’accesso a LDAP ', 'bouton_ajouter' => 'Aggiungi', - 'bouton_ajouter_participant' => 'AGGIUNGI UN UTENTE:', - 'bouton_annonce' => 'ANNUNCIO', 'bouton_annuler' => 'Annulla', 'bouton_cache_activer' => 'Riattivare la cache', 'bouton_cache_desactiver' => 'Disabilita temporaneamente la cache', - 'bouton_checkbox_envoi_message' => 'possibilità di inviare un messaggio', - 'bouton_checkbox_indiquer_site' => 'indicare obbligatoriamente un sito Web', - 'bouton_checkbox_signature_unique_email' => 'una sola adesione per indirizzo email', - 'bouton_checkbox_signature_unique_site' => 'una sola adesione per sito Web', 'bouton_demande_publication' => 'Chiedi la pubblicazione di questo articolo', 'bouton_desactive_tout' => 'Disattiva tutto', 'bouton_desinstaller' => 'Disinstalla', - 'bouton_effacer_index' => 'Cancella gli indici', 'bouton_effacer_tout' => 'Cancella TUTTO', - 'bouton_envoi_message_02' => 'INVIA UN MESSAGGIO', 'bouton_envoyer_message' => 'Messaggio definitivo: Invia', 'bouton_fermer' => 'Chiudi', 'bouton_mettre_a_jour_base' => 'Aggiorna il database', 'bouton_modifier' => 'Modifica', - 'bouton_pense_bete' => 'PROMEMORIA AD USO PERSONALE', - 'bouton_radio_activer_messagerie' => 'Attiva la messaggistica interna', - 'bouton_radio_activer_messagerie_interne' => 'Attiva la messaggistica interna', - 'bouton_radio_activer_petition' => 'Attiva la petizione', 'bouton_radio_afficher' => 'Visualizza', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Comparire nell’elenco dei redattori collegati', - 'bouton_radio_desactiver_messagerie' => 'Disattiva la messaggistica', 'bouton_radio_envoi_annonces_adresse' => 'Invia gli annunci all’indirizzo:', 'bouton_radio_envoi_liste_nouveautes' => 'Invia l’elenco delle novità', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Non comparire nell’elenco dei redattori collegati ', 'bouton_radio_non_envoi_annonces_editoriales' => 'Non inviare annunci editoriali ', - 'bouton_radio_pas_petition' => 'Nessuna petizione', - 'bouton_radio_petition_activee' => 'Petizione attivata', - 'bouton_radio_supprimer_petition' => 'Elimina la petizione', 'bouton_redirection' => 'REINDIRIZZAMENTO', 'bouton_relancer_installation' => 'Rilanciare l’installazione', 'bouton_suivant' => 'Avanti', 'bouton_tenter_recuperation' => 'Tentare un ripristino', 'bouton_test_proxy' => 'Testare il proxy', 'bouton_vider_cache' => 'Svuota la cache', - 'bouton_voir_message' => 'Anteprima messaggio', // C - 'cache_mode_compresse' => 'I file di cache sono salvati in modalità compressa.', - 'cache_mode_non_compresse' => 'I file di cache sono salvati in modalità non compressa.', 'cache_modifiable_webmestre' => 'Questo parametro può essere modificato dal webmaster del sito.', 'calendrier_synchro' => 'Se si utilizza un programma di agenda compatibile con iCal, è possibile sincronizzare i dati con le informazioni di questo sito', 'config_activer_champs' => 'Attiva i campi seguenti', @@ -114,9 +87,7 @@ disattivata per motivi sicurezza (verifica con l’amministratore di sistema).', 'config_titre_base_sup' => 'Dichiarazione di un database supplementare', 'config_titre_base_sup_choix' => 'Scegliere un database supplementare', 'connexion_ldap' => 'Connessione:', - 'copier_en_local' => 'Copia in locale', 'creer_et_associer_un_auteur' => 'Crea e associa un’autore', - 'creer_et_associer_une_rubrique' => 'Crea e collega una rubrica', // D 'date_mot_heures' => 'ore', @@ -147,7 +118,6 @@ Se non conosci queste informazioni, richiedile all’amministratore del sistema 'entree_login' => 'Login', 'entree_login_connexion_1' => 'Il login di connessione', 'entree_login_connexion_2' => '(Corrisponde a volte al login d’accesso via FTP; in alcuni casi non occorre specificare nulla)', - 'entree_login_ldap' => 'Login LDAP iniziale', 'entree_mot_passe' => 'Password', 'entree_mot_passe_1' => 'La password di connessione', 'entree_mot_passe_2' => '(Corrisponde a volte alla password d’accesso via FTP; in alcuni casi non occorre specificare nulla)', @@ -165,7 +135,9 @@ Se non conosci queste informazioni, richiedile all’amministratore del sistema 'entree_url' => 'Indirizzo (URL) del sito', 'entree_url_2' => 'Indirizzo del sito', 'erreur_connect_deja_existant' => 'Esista già un server con quel nome', + 'erreur_email_deja_existant' => 'Questo indirizzo email risulta già registrato.', 'erreur_nom_connect_incorrect' => 'Nome del server non consentito', + 'erreur_plugin_attribut_balise_manquant' => 'Attributo @attribut@ mancante nel tag @balise@.', 'erreur_plugin_desinstalation_echouee' => 'La disinstallazione del plugin è fallita. In ogni caso potete disattivarlo.', 'erreur_plugin_fichier_absent' => 'File non presente', 'erreur_plugin_fichier_def_absent' => 'File di definizioni non presente', @@ -204,16 +176,13 @@ Se non conosci queste informazioni, richiedile all’amministratore del sistema 'icone_configuration' => 'Configurazione', 'icone_creer_auteur' => 'Crea un nuovo autore ed associalo a questo articolo', 'icone_creer_mot_cle' => 'Crea una nuova parola chiave e collegala a questo articolo', - 'icone_creer_mot_cle_rubrique' => 'Creare una nuova parola chiave e collegarla a questa rubrica', - 'icone_creer_mot_cle_site' => 'Creare una nuova parola chiave e collegarla a questo sito', 'icone_creer_rubrique_2' => 'Crea una nuova rubrica', + 'icone_developpement' => 'Sviluppo', 'icone_edition' => 'Modifica', - 'icone_envoyer_message' => 'Invia questo messaggio', 'icone_ma_langue' => 'La mia lingua', 'icone_mes_infos' => 'Le mie informazioni', 'icone_mes_preferences' => 'Le mie preferenze', 'icone_modifier_article' => 'Modifica l’articolo', - 'icone_modifier_message' => 'Modifica il messaggio', 'icone_modifier_rubrique' => 'Modifica la rubrica', 'icone_publication' => 'Pubblicazione', 'icone_relancer_signataire' => 'Rilanciare il firmatario', @@ -226,22 +195,16 @@ Se non conosci queste informazioni, richiedile all’amministratore del sistema 'icone_supprimer_signature' => 'Cancella l’adesione', 'icone_valider_signature' => 'Conferma l’adesione', 'image_administrer_rubrique' => 'Puoi amministrare questa rubrica', - 'impossible_modifier_login_auteur' => 'Impossibile modificare le credenziali d’accesso', - 'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # Impossibile modificare la password 'info_1_article' => '1 articolo', - 'info_1_article_syndique' => '1 articolo in syndication', 'info_1_auteur' => '1 autore', 'info_1_message' => '1 messaggio', 'info_1_mot_cle' => '1 parola chiave', 'info_1_rubrique' => '1 rubrica', - 'info_1_site' => '1 sito', 'info_1_visiteur' => '1 visitatore', 'info_activer_cookie' => 'Se vuoi puoi attivare un cookie di corrispondenza, che ti permetterà di passare facilmente dal sito pubblico all’interfaccia privata.', + 'info_activer_menu_developpement' => 'Mostra il menù Sviluppo', 'info_admin_etre_webmestre' => 'Concedimi i privilegi di webmaster', - 'info_admin_gere_rubriques' => 'Questo amministratore gestisce le seguenti rubriche:', - 'info_admin_gere_toutes_rubriques' => 'Questo amministratore gestisce tutte le rubriche.', - 'info_admin_gere_toutes_rubriques_2' => 'Io modifico tutte le rubriche', 'info_admin_je_suis_webmestre' => 'Sono webmaster', 'info_admin_statuer_webmestre' => 'Dai a questo amministratore i privilegi di webmaster', 'info_admin_webmestre' => 'Questo amministratore è un webmaster', @@ -253,17 +216,15 @@ di passare facilmente dal sito pubblico all’interfaccia privata.', 'info_administrateurs' => 'Amministratori', 'info_administrer_rubrique' => 'Puoi amministrare questa rubrica', 'info_adresse' => 'all’indirizzo:', + 'info_adresse_desinscription' => 'Indirizzo per la cancellazione :', 'info_adresse_url' => 'Indirizzo (URL) del sito pubblico', 'info_afficher_par_nb' => 'Mostra', - 'info_afficher_visites' => 'Visualizzare le visite per:', 'info_aide_en_ligne' => 'Guida in linea SPIP', 'info_ajout_image' => 'Quando aggiungi delle immagini come documenti allegati ad un articolo, SPIP può creare delle thumbnail (miniature) delle immagini inserite. Ciò permette ad esempio di creare in automatico una galleria di immagini o un portfolio.', - 'info_ajout_participant' => 'Si è aggiunto il seguente partecipante:', 'info_ajouter_rubrique' => 'Aggiungi un’altra rubrica da amministrare:', 'info_annonce_nouveautes' => 'Annuncio delle novità', - 'info_anterieur' => 'anteriore', 'info_article' => 'articolo', 'info_article_2' => 'articoli', 'info_article_a_paraitre' => 'Gli articoli postdatati da pubblicare', @@ -273,17 +234,13 @@ immagini inserite. Ciò permette ad esempio di creare in automatico una galleria 'info_articles_miens' => 'I miei articoli', 'info_articles_tous' => 'Tutti gli articoli', 'info_articles_trouves' => 'Articoli trovati', - 'info_articles_trouves_dans_texte' => 'Articoli trovati (ricerca nel testo)', 'info_attente_validation' => 'I tuoi articoli in attesa di convalida', 'info_aucun_article' => 'Nessun articolo', - 'info_aucun_article_syndique' => 'Nessun articolo in syndication', 'info_aucun_auteur' => 'Nessun autore', 'info_aucun_message' => 'Nessun messaggio', 'info_aucun_rubrique' => 'Nessuna rubrica', - 'info_aucun_site' => 'Nessun sito', - 'info_aucun_visiteur' => 'Nessun visitatore', 'info_aujourdhui' => 'oggi: ', - 'info_auteur_message' => 'AUTORE DEL MESSAGGIO:', + 'info_auteur_gere_toutes_rubriques_2' => 'Io modifico tutte le rubriche', # MODIF 'info_auteurs' => 'Gli autori', 'info_auteurs_par_tri' => 'Autori@partri@', 'info_auteurs_trouves' => 'Autori trovati', @@ -303,8 +260,6 @@ immagini inserite. Ciò permette ad esempio di creare in automatico una galleria 'info_classement_2' => 'o su @liste@', 'info_code_acces' => 'Non dimenticare i tuoi codici d’accesso!', 'info_compatibilite_html' => 'Schema HTML da seguire', - 'info_compresseur_gzip' => 'Si raccomanda di verificare se il provider comprime già in maniera sistematica gli script PHP. A tal fine è possibile utilizzare, per esempio, il seguente servizio: @testgzip@', - 'info_compresseur_texte' => 'Se il proprio server non comprime automaticamente le pagine HTML per inviarle ai visitatori, è possibile tentare di forzare la compressione per diminuire il peso delle pagine da scaricare. Attenzione: ciò può rallentare notevolmente alcuni server.', 'info_config_suivi' => 'Se questo indirizzo corrisponde a una mailing-list, è possibile indicare qui sotto l’indirizzo al quale i partecipanti del sito possono iscriversi. Questo indirizzo può essere una URL (per esempio la pagina di iscrizione via Web alla lista), oppure un indirizzo email che contiene un Oggetto specifico (per esempio: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'È possibile abbonarsi alla mailing-list di questo sito. Verranno spedite per email le notifiche degli articoli e delle brevi proposte per la pubblicazione.', 'info_confirmer_passe' => 'Conferma la nuova password:', @@ -328,8 +283,6 @@ immagini inserite. Ciò permette ad esempio di creare in automatico una galleria 'info_date_publication_anterieure' => 'Data di redazione anteriore:', 'info_date_referencement' => 'DATA DI INSERIMENTO IN REPERTORIO DI QUESTO SITO:', 'info_derniere_etape' => 'Finito!', - 'info_derniers_articles_publies' => 'I tuoi ultimi articoli pubblicati', - 'info_desactiver_messagerie_personnelle' => 'Puoi attivare o disattivare il sistema di messaggistica personale su questo sito.', 'info_descriptif' => 'Descrizione:', 'info_desinstaller_plugin' => 'elimina i dati e disattiva il plug-in', 'info_discussion_cours' => 'Discussioni in corso', @@ -337,7 +290,6 @@ immagini inserite. Ciò permette ad esempio di creare in automatico una galleria 'info_email_envoi' => 'Indirizzo email del mittente (opzionale)', 'info_email_envoi_txt' => 'Indicare qui l’indirizzo da utilizzare per l’invio degli email (come impostazione predefinita l’indirizzo del destinatario sarà utilizzato come indirizzo del mittente):', 'info_email_webmestre' => 'Indirizzo email del webmaster', - 'info_entrer_code_alphabet' => 'Inserisci il codice dell’alfabeto da utilizzare:', 'info_envoi_email_automatique' => 'Invio di email automatico', 'info_envoyer_maintenant' => 'Invia adesso', 'info_etape_suivante' => 'Passare alla fase successiva', @@ -351,7 +303,6 @@ per esempio ad una mailing-list dei redattori, l’annuncio delle domande di pubblicazione e di convalida degli articoli.', 'info_fichiers_authent' => 'File d’autenticazione ".htpasswd"', 'info_forums_abo_invites' => 'Il sito comprende dei forum accessibili solo a utenti registrati. Nel sito pubblico è quindi presente una pagina d’iscrizione.', - 'info_gauche_admin_effacer' => 'Questa pagina è accessibile solo ai responsabili del sito.

    Permette l’accesso alle diverse funzioni di manutenzione tecnica. Alcune di esse richiedono una specifica procedura di identificazione, eseguibile grazie a un accesso FTP.

    ', 'info_gauche_admin_tech' => 'Questa pagina è accessibile solo ai responsabili del sito.

    Permette l’accesso alle diverse funzioni di manutenzione tecnica. Alcune di esse richiedono una specifica procedura di identificazione, eseguibile grazie a un accesso FTP.

    ', @@ -362,26 +313,20 @@ Il loro status è indicato dal colore dell’icona (redattore = giallo; amminist 'info_gauche_auteurs_exterieurs' => 'Gli autori esterni, senza accesso al sito, sono indicati da un’icona blu; gli autori eliminati da un’icona grigia.', 'info_gauche_messagerie' => 'Il sistema di messaggistica permette di scambiare dei messaggi tra redattori, di conservare dei memo (promemoria ad uso personale) o di pubblicare degli annunci nel pannello di controllo dell’area riservata (se sei amministratore).', - 'info_gauche_numero_auteur' => 'AUTORE NUMERO', 'info_gauche_statistiques_referers' => 'Questa pagina presenta un elenco dei siti che contengono link verso il tuo (referrer). Questo elenco è valido però solo per oggi essendo azzerato ogni 24 ore.', 'info_gauche_visiteurs_enregistres' => 'Trovi qui i visitatori registrati allo spazio pubblico del sito (forum su abbonamento).', 'info_generation_miniatures_images' => 'Generazione di thumbnail di immagini', - 'info_gerer_trad' => 'Gestire i link di traduzione?', 'info_gerer_trad_objets' => '@objets@ : gestire i collegamenti alle traduzioni', 'info_hebergeur_desactiver_envoi_email' => 'Alcuni hoster disattivano l’invio automatico di email dai loro server. In questo caso, le funzionalità di SPIP di seguito riportate non funzioneranno.', 'info_hier' => 'ieri:', - 'info_historique_activer' => 'Attivare la gestione delle revisioni', - 'info_historique_affiche' => 'Visualizzare questa versione', - 'info_historique_comparaison' => 'confronto', - 'info_historique_desactiver' => 'Disattivare la gestione delle revisioni', - 'info_historique_texte' => 'La gestione delle revisioni permette di conservare traccia di tutte le modifiche effettuate su un articolo, mostrando le differenze fra le sue versioni successive.', 'info_identification_publique' => 'La tua identità pubblica...', 'info_image_process' => 'Seleziona il metodo migliore per la creazione delle anteprime cliccando sull’immagine corrispondente.', 'info_image_process2' => 'Se non appare alcuna immagine, significa che la configurazione del server non permette l’uso di alcune funzioni grafiche. Se si desidera utilizzarle, rivolgersi al responsabile tecnico chiedendo di installare le estensioni «GD» o «Imagick».', 'info_images_auto' => 'Immagini elaborate automaticamente', 'info_informations_personnelles' => 'Informazioni personali', + 'info_inscription' => 'Iscritto il', 'info_inscription_automatique' => 'Iscrizione automatica di nuovi redattori', 'info_jeu_caractere' => 'Set di caratteri del sito', 'info_jours' => 'giorni', @@ -397,8 +342,6 @@ dai loro server. In questo caso, le funzionalità di SPIP di seguito riportate n 'info_logos' => 'I logo', 'info_maximum' => 'massimo:', 'info_meme_rubrique' => 'Nella stessa rubrica', - 'info_message' => 'Messaggio del ', - 'info_message_efface' => 'MESSAGGIO CANCELLATO', 'info_message_en_redaction' => 'I tuoi messaggi in corso di redazione', 'info_message_technique' => 'Messaggio tecnico:', 'info_messagerie_interne' => 'Sistema di messaggistica interna', @@ -411,30 +354,23 @@ le informazioni contenute nel database sono probabilmente andate perse.
    {{R 'info_modifier_rubrique' => 'Modifica la rubrica:', 'info_modifier_titre' => 'Modifica: @titre@', 'info_mon_site_spip' => 'Il mio sito SPIP', - 'info_mot_sans_groupe' => '(Parole chiave senza gruppo...)', - 'info_moteur_recherche' => 'Motore di ricerca integrato', 'info_moyenne' => 'media: ', - 'info_multi_articles' => 'Attivare il menu della lingua negli articoli?', 'info_multi_cet_article' => 'Lingua di questo articolo:', 'info_multi_langues_choisies' => 'Selezionare di seguito le lingue disponibili per i redattori del sito. Le lingue già utilizzate nel sito (visualizzate per prime) non possono essere disattivate.', 'info_multi_objets' => '@objets@ : attiva il menù delle lingue', - 'info_multi_rubriques' => 'Attivare il menu della lingua nelle rubriche?', 'info_multi_secteurs' => '... solo per le rubriche collocate nella {root} del sito?', 'info_nb_articles' => '@nb@ articoli', - 'info_nb_articles_syndiques' => '@nb@ articoli in syndication', 'info_nb_auteurs' => '@nb@ autori', 'info_nb_messages' => '@nb@ messaggi', 'info_nb_mots_cles' => '@nb@ parole chiave', 'info_nb_rubriques' => '@nb@ rubriche', - 'info_nb_sites' => '@nb@ siti', 'info_nb_visiteurs' => '@nb@ visitatori', 'info_nom' => 'Nome', 'info_nom_destinataire' => 'Nome del destinatario', 'info_nom_pas_conforme' => 'I tag html non sono consentiti', 'info_nom_site' => 'Nome del tuo sito', 'info_nombre_articles' => '@nb_articles@ articoli,', - 'info_nombre_partcipants' => 'PARTECIPANTI ALLA DISCUSSIONE:', 'info_nombre_rubriques' => '@nb_rubriques@ rubriche,', 'info_nombre_sites' => '@nb_sites@ siti, ', 'info_non_deplacer' => 'Non spostare...', @@ -443,19 +379,14 @@ le informazioni contenute nel database sono probabilmente andate perse.
    {{R 'info_non_envoi_liste_nouveautes' => 'Non inviare l’elenco delle novità', 'info_non_modifiable' => 'non può essere modificato', 'info_non_suppression_mot_cle' => 'non voglio cancellare questa parola chiave.', - 'info_note_numero' => 'Nota @numero@', 'info_notes' => 'Note', - 'info_nouveaux_message' => 'Nuovi messaggi', 'info_nouvel_article' => 'Nuovo articolo', 'info_nouvelle_traduction' => 'Nuova traduzione:', 'info_numero_article' => 'ARTICOLO NUMERO:', 'info_obligatoire_02' => '(Obbligatorio)', 'info_option_accepter_visiteurs' => 'Accetta l’iscrizione di utenti del sito pubblico', - 'info_option_faire_suivre' => 'Segnala i nuovi messaggi', 'info_option_ne_pas_accepter_visiteurs' => 'Rifiuta l’iscrizione di utenti', 'info_options_avancees' => 'OPZIONE AVANZATA', - 'info_ortho_activer' => 'Attivare il controllo ortografico', - 'info_ortho_desactiver' => 'Disattivare il controllo ortografico', 'info_ou' => 'o... ', 'info_page_interdite' => 'Pagina riservata', 'info_par_nom' => 'per nome', @@ -465,20 +396,14 @@ le informazioni contenute nel database sono probabilmente andate perse.
    {{R 'info_passe_trop_court' => 'Password troppo corta.', 'info_passe_trop_court_car_pluriel' => 'La password deve contenere almeno @nb@ caratteri.', 'info_passes_identiques' => 'Le due password non sono uguali.', - 'info_pense_bete_ancien' => 'I tuoi vecchi memo', 'info_plus_cinq_car' => 'più di 5 caratteri', 'info_plus_cinq_car_2' => '(Più di 5 caratteri)', 'info_plus_trois_car' => '(Più di 3 caratteri)', 'info_popularite' => 'popolarità: @popularite@; visite: @visites@', - 'info_popularite_4' => 'popolarità: @popularite@; visite: @visites@', 'info_post_scriptum' => 'Post Scriptum', 'info_post_scriptum_2' => 'Post Scriptum:', 'info_pour' => 'per', - 'info_preview_admin' => 'Solo gli amministratori possono visualizzare l’anteprima del sito', - 'info_preview_comite' => 'Tutti i redattori possono visualizzare l’anteprima del sito', - 'info_preview_desactive' => 'L’anteprima del sito è totalmente disattivata', - 'info_preview_texte' => 'È possibile visualizzare un’anteprima del sito comprendente anche gli articoli e le brevi "proposti" per la pubblicazione. Questa funzionalità può essere disattivata, consentita solo agli amministratori o a tutti i redattori.', - 'info_principaux_correspondants' => 'Corrispondenti principali', + 'info_preview_texte' => 'È possibile visualizzare un’anteprima del sito comprendente anche gli articoli e le brevi "proposti" per la pubblicazione. Questa funzionalità può essere disattivata, consentita solo agli amministratori o a tutti i redattori.', # MODIF 'info_procedez_par_etape' => 'procedere passo dopo passo', 'info_procedure_maj_version' => 'è necessario avviare la procedura di aggiornamento per adattare il database alla nuova versione di SPIP.', @@ -490,14 +415,9 @@ il database alla nuova versione di SPIP.', 'info_question_inscription_nouveaux_redacteurs' => 'Vuoi accettare le iscrizioni di nuovi redattori direttamente dal sito pubblico? In caso affermativo, i visitatori potranno iscriversi grazie ad un modulo automatizzato e accedere all’area riservata per proporre i propri articoli.
    Durante il processo d’iscrizione, gli utenti riceveranno un email che fornisce loro i codici d’accesso all’area privata. Alcuni servizi di hosting disattivano l’invio di email dai propri server: in questo caso l’iscrizione automatica non può essere attivata.
    ', - 'info_question_utilisation_moteur_recherche' => 'Desideri utilizzare il motore di ricerca integrato di SPIP? -(disattivandolo viene velocizzato il funzionamento del sistema)', - 'info_question_vignettes_referer_non' => 'Non visualizzare la cattura dello schermo dei siti di origine delle visite', 'info_qui_edite' => '@nom_auteur_modif@ ha lavorato su questo contenuto @date_diff@ minuti fa', 'info_racine_site' => 'Root del sito', 'info_recharger_page' => 'Aggiorna questa pagina fra qualche istante.', - 'info_recherche_auteur_a_affiner' => 'Troppi risultati per "@cherche_auteur@"; restringi la ricerca.', - 'info_recherche_auteur_ok' => 'Molti redattori trovati per "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Nessun risultato per "@cherche_auteur@".', 'info_recommencer' => 'Ricomincia.', 'info_redacteur_1' => 'Redattori', @@ -506,6 +426,7 @@ In caso affermativo, i visitatori potranno iscriversi grazie ad un modulo automa 'info_redaction_en_cours' => 'IN CORSO DI REDAZIONE', 'info_redirection' => 'Reindirizzamento', 'info_redirection_activee' => 'Il reindirizzamento è attivato.', + 'info_redirection_boucle' => 'Stai cercando di sovrascrivere l’articolo.', 'info_redirection_desactivee' => 'Il reindirizzamento è stato cancellato.', 'info_refuses' => 'I tuoi articoli rifiutati', 'info_reglage_ldap' => 'Opzioni: Parametri per l’importazione LDAP', @@ -516,7 +437,6 @@ In caso affermativo, i visitatori potranno iscriversi grazie ad un modulo automa 'info_rubriques' => 'Rubriche', 'info_rubriques_02' => 'rubriche', 'info_rubriques_trouvees' => 'Rubriche trovate', - 'info_rubriques_trouvees_dans_texte' => 'Rubriche trovate (ricerca nel testo)', 'info_sans_titre' => 'Senza titolo', 'info_selection_chemin_acces' => 'Seleziona qui sotto il percorso d’accesso nell’elenco:', 'info_signatures' => 'firme', @@ -529,14 +449,12 @@ In caso affermativo, i visitatori potranno iscriversi grazie ad un modulo automa 'info_sites_lies_mot' => 'I siti in repertorio legati a questa parola chiave', 'info_sites_proxy' => 'Utilizza un proxy', 'info_sites_trouves' => 'Siti trovati', - 'info_sites_trouves_dans_texte' => 'Siti trovati (nel testo)', 'info_sous_titre' => 'Sottotitolo:', 'info_statut_administrateur' => 'Amministratore', 'info_statut_auteur' => 'Status di questo autore:', 'info_statut_auteur_2' => 'Io sono', 'info_statut_auteur_a_confirmer' => 'Iscrizione da confermare', 'info_statut_auteur_autre' => 'Altro stato:', - 'info_statut_efface' => 'Cancellato', 'info_statut_redacteur' => 'Redattore', 'info_statut_utilisateurs_1' => 'Status predefinito degli utenti importati', 'info_statut_utilisateurs_2' => 'Scegli lo status da attribuire alle personne presenti nell’elenco LDAP quando si collegano per la prima volta. Potrai poi modificare questa impostazione per ogni singolo autore.', @@ -559,7 +477,6 @@ In caso affermativo, i visitatori potranno iscriversi grazie ad un modulo automa 'info_tous_articles_presents' => 'Tutti gli articoli pubblicati in questa rubrica', 'info_tous_articles_refuses' => 'Tutti gli articoli rifiutati', 'info_tous_les' => 'tutti i:', - 'info_tous_redacteurs' => 'Annunci a tutti i redattori', 'info_tout_site' => 'Tutto il sito', 'info_tout_site2' => 'L’articolo non è stato tradotto in questa lingua.', 'info_tout_site3' => 'L’articolo è stato tradotto in questa lingua, ma sono state effettuate alcune modifiche all’articolo di riferimento. La traduzione deve quindi essere aggiornata.', @@ -576,7 +493,7 @@ Le traduzioni sono associate all’originale, 'info_une_rubrique_02' => '1 rubrica', 'info_url' => 'URL:', 'info_url_proxy' => 'URL del proxy', - 'info_url_site' => 'URL DEL SITO:', + 'info_url_site_pas_conforme' => 'l’URL del sito non è valido.', 'info_url_test_proxy' => 'URL di test', 'info_urlref' => 'Link ipertestuale:', 'info_utilisation_spip' => 'Puoi ora cominciare ad utilizzare il sistema di pubblicazione assistita...', @@ -587,7 +504,6 @@ Le traduzioni sono associate all’originale, 'info_visiteurs_02' => 'Visitatori del sito pubblico', 'info_webmestre_forces' => 'I webmaster sono attualmente definiti in @file_options@.', 'install_adresse_base_hebergeur' => 'Indirizzo del database attribuito dal provider', - 'install_base_ok' => 'Il database @base@ è stato riconosciuto', 'install_connect_ok' => 'Il nuovo database è stato definito sul server @connect@.', 'install_echec_annonce' => 'L’installazione potrebbe fallire oppure causare problemi di funzionalità al sito...', 'install_extension_mbstring' => 'SPIP non funziona con:', @@ -600,7 +516,6 @@ Le traduzioni sono associate all’originale, 'install_select_langue' => 'Seleziona una lingua e poi clicca sul bottone « Avanti » per lanciare la procedura di installazione.', 'install_select_type_db' => 'Indicare il tipo di database:', 'install_select_type_mysql' => 'MySQL', - 'install_select_type_mysqli' => 'MySQLi', 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', @@ -617,8 +532,6 @@ Le traduzioni sono associate all’originale, 'item_activer_messages_avertissement' => 'Attiva i messaggi d’avvertimento', 'item_administrateur_2' => 'amministratore', 'item_afficher_calendrier' => 'Pubblica nel calendario', - 'item_autoriser_documents_joints' => 'Consenti di allegare documenti agli articoli', - 'item_autoriser_documents_joints_rubriques' => 'Consenti di allegare documenti alle rubriche', 'item_autoriser_syndication_integrale' => 'Diffondere la versione integrale degli articoli nei file di syndication', 'item_choix_administrateurs' => 'gli amministratori', 'item_choix_generation_miniature' => 'Genera automaticamente le thumbnail delle immagini.', @@ -626,7 +539,6 @@ Le traduzioni sono associate all’originale, 'item_choix_redacteurs' => 'i redattori', 'item_choix_visiteurs' => 'i visitatori del sito pubblico', 'item_creer_fichiers_authent' => 'Crea i file .htpasswd', - 'item_limiter_recherche' => 'Limita la ricerca alle informazioni contenute nel tuo sito', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Attiva la messaggistica e l’agenda', 'item_mots_cles_association_articles' => 'agli articoli', @@ -636,22 +548,15 @@ Le traduzioni sono associate all’originale, 'item_non_accepter_inscriptions' => 'Non accettare le iscrizioni', 'item_non_activer_messages_avertissement' => 'Nessun messaggio d’avvertimento', 'item_non_afficher_calendrier' => 'Non pubblicare nel calendario', - 'item_non_autoriser_documents_joints' => 'Non consentire di allegare documenti agli articoli', - 'item_non_autoriser_documents_joints_rubriques' => 'Non consentire di allegare documenti alle rubriche', 'item_non_autoriser_syndication_integrale' => 'Diffondere solo un riassunto', - 'item_non_compresseur' => 'Disattiva la compressione', 'item_non_creer_fichiers_authent' => 'Non creare questi file', - 'item_non_gerer_statistiques' => 'Non gestire le statistiche', - 'item_non_limiter_recherche' => 'Estendi la ricerca al contenuto dei siti in syndication', 'item_non_messagerie_agenda' => 'Disattiva la messaggistica e l’agenda', 'item_non_publier_articles' => 'Non pubblicare gli articoli prima della data impostata.', - 'item_non_utiliser_moteur_recherche' => 'Non utilizzare il motore di ricerca', 'item_nouvel_auteur' => 'Nuovo autore', 'item_nouvelle_rubrique' => 'Nuova rubrica', 'item_oui' => 'Si', 'item_publier_articles' => 'Pubblica gli articoli indipendentemente dalla data impostata.', 'item_reponse_article' => 'Risposta all’articolo ', - 'item_utiliser_moteur_recherche' => 'Utilizza il motore di ricerca', 'item_version_html_max_html4' => 'Limita a HTML4 sul sito pubblico', 'item_version_html_max_html5' => 'Consenti HTML5', 'item_visiteur' => 'visitatore', @@ -666,15 +571,13 @@ Le traduzioni sono associate all’originale, 'label_choix_langue' => 'Seleziona la tua lingua', 'label_nom_fichier_connect' => 'Indica il nome per questo server', 'label_slogan_site' => 'Slogan del sito', - 'label_taille_ecran' => 'Larghezza dello schermo', + 'label_taille_ecran' => 'Larghezza dello schermo', # MODIF 'label_texte_et_icones_navigation' => 'Menù di naviagazione', 'label_texte_et_icones_page' => 'Visualizzazione nella pagina', 'ldap_correspondance' => 'mappa del campo @champ@', 'ldap_correspondance_1' => 'Mappa dei campi LDAP', 'ldap_correspondance_2' => 'Per ognuno dei seguenti campi SPIP, indicare il nome del campo LDAP corrispondente. Lasciare vuoto per non riempire, separare da spazi o da virgole per provare più campi LDAP.', - 'lien_ajout_destinataire' => 'Aggiungi il destinatario', 'lien_ajouter_auteur' => 'Aggiungi questo autore', - 'lien_ajouter_participant' => 'Aggiungi un partecipante', 'lien_ajouter_une_rubrique' => 'Aggiungi questa rubrica', 'lien_email' => 'email', 'lien_nom_site' => 'NOME DEL SITO:', @@ -682,9 +585,8 @@ Le traduzioni sono associate all’originale, 'lien_retirer_rubrique' => 'Elimina la rubrica', 'lien_retirer_tous_auteurs' => 'Elimina tutti gli autori', 'lien_retirer_toutes_rubriques' => 'Rimuovi tutte le rubriche', - 'lien_retrait_particpant' => 'rimuovere questo partecipante', 'lien_site' => 'sito', - 'lien_supprimer_rubrique' => 'elimina la rubrica', + 'lien_tout_decocher' => 'Deselezionare tutto', 'lien_tout_deplier' => 'Espandi', 'lien_tout_replier' => 'Richiudi', 'lien_tout_supprimer' => 'Eliminare tutto', @@ -709,13 +611,12 @@ Le traduzioni sono associate all’originale, 'mois_non_connu' => 'sconosciuto', // N - 'nouvelle_version_spip' => 'La versione @version@ di SPIP è disponibile', + 'nouvelle_version_spip' => 'La versione @version@ di SPIP è disponibile', # MODIF // O 'onglet_contenu' => 'Contenuto', 'onglet_declarer_une_autre_base' => 'Dichiarare un altro database', 'onglet_discuter' => 'Discuti', - 'onglet_documents' => 'Documenti', 'onglet_interactivite' => 'Interattività', 'onglet_proprietes' => 'Proprietà', 'onglet_repartition_actuelle' => 'attualmente', @@ -759,7 +660,7 @@ Le traduzioni sono associate all’originale, 'plugin_info_upgrade_ok' => 'Aggiornamento avvenuto', 'plugin_librairies_installees' => 'Librerie installate', 'plugin_necessite_lib' => 'Questa estensione richiede la libreria @lib@', - 'plugin_necessite_plugin' => 'Necessita l’estensione @plugin@ con almeno la versione @version@.', + 'plugin_necessite_plugin' => 'Necessita l’estensione @plugin@ con la versione @version@.', 'plugin_necessite_plugin_sans_version' => 'Necessita del plugin @plugin@', 'plugin_necessite_spip' => 'Necessita SPIP con almeno la versione @version@.', 'plugin_source' => 'origine: ', @@ -793,7 +694,7 @@ Le traduzioni sono associate all’originale, // Q 'queue_executer_maintenant' => 'Esegui adesso', - 'queue_info_purger' => 'È possibile eliminare tutti i lavori in sospeso e reinizializzare lista con delle elaborazioni periodiche', + 'queue_info_purger' => 'È possibile eliminare tutti i lavori in sospeso e reinizializzare lista con delle elaborazioni periodiche', # MODIF 'queue_nb_jobs_in_queue' => '@nb@ processi in coda', 'queue_next_job_in_nb_sec' => 'Prossimo processo in @nb@ s', 'queue_no_job_in_queue' => 'Nessun processo appeso', @@ -803,6 +704,7 @@ Le traduzioni sono associate all’originale, // R 'repertoire_plugins' => 'Cartella:', + 'required' => '(Obbligatorio)', // S 'sans_heure' => 'ora mancante', @@ -831,18 +733,13 @@ Le traduzioni sono associate all’originale, 'texte_article_virtuel_reference' => 'Articolo virtuale: articolo citato nel tuo sito SPIP, ma reindrizzato verso un’altro URL. Per eliminare il reindirizzamento, cancella l’URL qui sopra.', 'texte_aucun_resultat_auteur' => 'Nessun risultato per "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Questo sito può costantemente visualizzare la lista dei redattori collegati, permettendo lo scambio di messaggi in tempo reale. Si può però decidere di non comparire in questo elenco (rendendosi quindi «invisibili» agli altri utenti).', - 'texte_auteur_messagerie_1' => 'Questo sito permette lo scambio di messaggi e la costituzione di forum di discussione privati tra i partecipanti al sito. Puoi però decidere di non partecipare a questi scambi.', 'texte_auteurs' => 'GLI AUTORI', 'texte_choix_base_1' => 'Scegli il database:', 'texte_choix_base_2' => 'Il server SQL contiene diversi database.', 'texte_choix_base_3' => 'Seleziona quello che è stato attribuito al tuo dominio:', 'texte_choix_table_prefix' => 'Prefisso delle tabelle:', - 'texte_commande_vider_tables_indexation' => 'Utilizza questo comando per svuotare le tabelle d’incidizzazione utilizzate -dal motore di ricerca integrato di SPIP. Ciò permetterà -di guadagnare spazio sul disco.', 'texte_compatibilite_html' => 'Puoi impostare SPIP per produrre, sul sito pubblico, codice compatibile con lo schema HTML4, o consentire di utilizzare le più moderne funzionalità di HTML5.', 'texte_compatibilite_html_attention' => 'Non c’è nessun rischio di attivare l’opzione HTML5, ma se lo fai, le pagine del tuo sito dovranno cominciare con la seguente dichiarazione per essere valide: <!DOCTYPE html>.', - 'texte_compresse_ou_non' => '(può essere compresso o meno)', 'texte_compte_element' => '@count@ elemento', 'texte_compte_elements' => '@count@ elementi', 'texte_conflit_edition_correction' => 'Controllare qui sotto le differenze tra le due versioni del testo; è possibile anche copiare le modifiche e poi ricominciare.', @@ -859,47 +756,34 @@ Serviti dell’elenco qui sotto per indicare quali elementi rendere disponibili. 'texte_date_publication_anterieure_nonaffichee' => 'Non visualizzare la data di redazione anteriore.', 'texte_date_publication_article' => 'DATA DI PUBBLICAZIONE:', 'texte_date_publication_objet' => 'Pubblicato il :', - 'texte_descriptif_petition' => 'Descrizione della petizione', 'texte_descriptif_rapide' => 'Descrizione rapida', 'texte_effacer_base' => 'Cancella il database SPIP', - 'texte_effacer_donnees_indexation' => 'Cancella i dati d’indicizzazione', 'texte_effacer_statistiques' => 'Cancellare le statistiche', 'texte_en_cours_validation' => 'Gli articoli e le brevi elencati qui sotto sono stati proposti per la pubblicazione. ', 'texte_enrichir_mise_a_jour' => 'Puoi arricchire la formattazione del testo utilizzando le «scorciatoie tipografiche»', 'texte_fichier_authent' => 'SPIP deve creare i file speciali .htpasswd -e .htpasswd-admin nella cartella @dossier@?

    - Questi file possono servire a limitare l’accesso agli autori +e .htpasswd-admin nella cartella @dossier@? +

    Questi file possono servire a limitare l’accesso agli autori e agli amministratori in particolari aree del sito -(per esempio, per un programma esterno di statistiche).

    -Se ciò non è necessario, lasciare quest’opzione -al suo valore predefinito (nessuna creazione -di file).

    ', # MODIF +(per esempio, per un programma esterno di statistiche).

    +

    Se ciò non è necessario, lasciare quest’opzione al suo valore predefinito (nessuna creazione +di file).

    ', 'texte_informations_personnelles_1' => 'Il sistema creerà un tuo accesso personalizzato al sito.', 'texte_informations_personnelles_2' => '(Nota: se si tratta di una reinstallazione, e il tuo accesso funziona ancora, puoi ', 'texte_introductif_article' => 'Testo introduttivo dell’articolo', 'texte_jeu_caractere' => 'Si consiglia di utilizzare sul proprio sito l’alfabeto universale (utf-8): esso permette di visualizzare i testi in tutte le lingue e non pone problemi di compatibilità con i browser moderni.', - 'texte_jeu_caractere_2' => 'Attenzione: questa impostazione non causa la conversione dei testi già registrati nel database.', 'texte_jeu_caractere_3' => 'Il tuo sito usa attualmente il set di caratteri:', 'texte_jeu_caractere_4' => 'Se ciò non corrisponde alla realtà dei propri dati (a causa, per esempio, di un ripristino del database), o se si avvia il sito e si desidera partire con un altro set di caratteri è necessario indicare quest’ultimo qui:', - 'texte_jeu_caractere_conversion' => 'Nota: è possibile decidere di convertire una volta per tutte tutti i testi del sito (articoli, brevi, forum, ecc.) nell’alfabeto utf-8, andando sulla pagina di conversione in utf-8.', - 'texte_lien_hypertexte' => '(Se il tuo messaggio si riferisce ad un articolo pubblicato sul Web, o ad una pagina che fornisce informazioni supplementari, indica il titolo della pagina e il suo indirizzo URL.)', 'texte_login_ldap_1' => '(Lascia vuoto per un accesso anonimo, o inserisci il percorso completo, per esempio «uid=rossi, ou=users, dc=mio-dominio, dc=com ».)', 'texte_login_precaution' => 'Attenzione! Questo è l’ID con il quale sei attualmente collegato. Utilizza questo modulo con cognizione di causa...', - 'texte_message_edit' => 'Attenzione: questo messaggio può essere modificato da tutti gli amministratori del sito, ed è visibile da tutti i redattori. Utilizza gli annunci solo per esporre degli eventi importanti per la vita del sito.', 'texte_messagerie_agenda' => 'La messageria permette ai redattori del sito di comunicare tra loro in maniera diretta nell’area riservata. Essa è associata a una agenda.', 'texte_mise_a_niveau_base_1' => 'Hai aggiornato i file SPIP. Adesso è necessario aggiornare il database.', 'texte_modifier_article' => 'Modifica l’articolo:', - 'texte_moteur_recherche_active' => 'Il motore di ricerca è attivato. Utilizza questo commando -se vuoi procedere a una reindicizzazione rapida (dopo il ripristino -di un salvataggio, per esempio). Nota bene: i documenti modificati in modo standard (con l’interfaccia di SPIP) sono automaticamente -reindicizzati. Questo commando, quindi, è utile solo in casi eccezionali.', - 'texte_moteur_recherche_non_active' => 'Il motore di ricerca non è attivato.', 'texte_multilinguisme' => 'Se desideri gestire gli articoli in diverse lingue, con un sistema di navigazione complesso, è possibile aggiungere un menu di selezione della lingua in funzione della struttura del sito.', 'texte_multilinguisme_trad' => 'È anche possibile attivare un sistema di gestione dei link fra le diverse traduzioni di un certo oggetto.', 'texte_non_compresse' => 'non compresso (il tuo server non supporta questa funzionalità)', - 'texte_nouveau_message' => 'Nuovo messaggio', 'texte_nouvelle_version_spip_1' => 'Hai installato una nuova versione di SPIP.', 'texte_nouvelle_version_spip_2' => 'Questa nuova versione necessita un aggiornamento più radicale del solito. Se sei il webmaster del sito, cancella il file @connect@ e riprendi l’installazione al fine di aggiornare i parametri di connessione al database.

    (NB: se hai dimenticato i parametri di connessione, rileggi il file @connect@ prima di cancellarlo!)

    ', 'texte_operation_echec' => 'Torna alla pagina precedente, seleziona un altro database o creane uno nuovo. Verifica le informazioni fornite dal tuo hoster.', @@ -914,7 +798,6 @@ una data di pubblicazione impostata nel futuro?', 'texte_rappel_selection_champs' => '[Non dimenticare di impostare correttamente questo campo]', 'texte_recalcul_page' => 'Se vuoi rigenerare una sola pagina, utilizza piuttosto lo spazio pubblico e clicca sul pulsante «rigenera».', - 'texte_recapitiule_liste_documents' => 'Questa pagina mostra l’elenco dei documenti allegati alle rubriche. Per modificare le informazioni di un documento, seguire il link verso la relativa pagina di rubrica.', 'texte_recuperer_base' => 'Ripara il database', 'texte_reference_mais_redirige' => 'articolo catalogato nel tuo sito SPIP, ma con reindirizzamento verso un altro URL.', 'texte_requetes_echouent' => 'Quando alcune query SQL falliscono @@ -939,7 +822,6 @@ Se il problema persiste, contattare il proprio fornitore di hosting.

    ', cache di SPIP. Ciò permette ad esempio di forzare la rigenerazione di tutte le pagine se hai fatto delle importanti modifiche di grafica o di struttura del sito.', 'texte_sur_titre' => 'Occhiello', 'texte_table_ok' => ': questa tabella è OK.', - 'texte_tables_indexation_vides' => 'Le tabelle d’indicizzazione del motore sono vuote.', 'texte_tentative_recuperation' => 'Tentativo di ripristino', 'texte_tenter_reparation' => 'Tenta un ripristino del database', 'texte_test_proxy' => 'Per fare una prova di questo proxy, indicare qui l’indirizzo @@ -952,27 +834,12 @@ il sistema può segnalare gli articoli «aperti» di recente al fine di evitare modifiche simultanee. Questa opzione è disattivata di default per evitare di generare messaggi d’avvertimento intempestivi.', - 'texte_trop_resultats_auteurs' => 'Troppi risultati per "@cherche_auteur@"; restringi la ricerca.', - 'texte_unpack' => 'scarica l’ultima versione', - 'texte_utilisation_moteur_syndiques' => 'Quando utilizzi il motore di ricerca integrato di SPIP, -puoi effettuare le ricerche sui siti e -gli articoli in syndication -in due modalità diverse.
    - La più semplice -consiste nel ricercare solo nei titoli e nelle descrizioni degli articoli.
    - -Un altro metodo, molto più potente, consente -a SPIP di cercare anche nel testo degli articoli in syndication. -Se inserisci un sito nel repertorio, SPIP effettuerà la ricerca anche nel testo del sito stesso.', - 'texte_utilisation_moteur_syndiques_2' => 'Questo metodo obbliga SPIP a visitare -regolarmente i siti in repertorio; -in tal caso si può verificare un leggero rallentamento del tuo sito.', 'texte_vide' => 'vuoto', 'texte_vider_cache' => 'Svuota la cache', - 'titre_admin_effacer' => 'Manutenzione tecnica', 'titre_admin_tech' => 'Manutenzione tecnica', 'titre_admin_vider' => 'Manutenzione tecnica', 'titre_ajouter_un_auteur' => 'Aggiungi un autore', 'titre_ajouter_un_mot' => 'Aggiungi una parola chiave', - 'titre_ajouter_une_rubrique' => 'Aggiungi una rubrica', 'titre_cadre_afficher_article' => 'Visualizza gli articoli', 'titre_cadre_afficher_traductions' => 'Visualizzare lo stato delle traduzioni per le seguenti lingue:', 'titre_cadre_ajouter_auteur' => 'AGGIUNGI UN AUTORE: ', @@ -999,54 +866,27 @@ in tal caso si può verificare un leggero rallentamento del tuo sito.', 'titre_naviguer_dans_le_site' => 'Navigare nel sito...', 'titre_nouvelle_rubrique' => 'Nuova rubrica', 'titre_numero_rubrique' => 'RUBRICA NUMERO:', - 'titre_page_admin_effacer' => 'Manutenzione tecnica: svuota il database', 'titre_page_articles_edit' => 'Modifica: @titre@', 'titre_page_articles_page' => 'Gli articoli', 'titre_page_articles_tous' => 'Tutto il sito', - 'titre_page_auteurs' => 'Visitatori', 'titre_page_calendrier' => 'Calendario @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Configurazione del sito', - 'titre_page_config_fonctions' => 'Configurazione del sito', - 'titre_page_configuration' => 'Configurazione del sito', - 'titre_page_controle_petition' => 'Monitoraggio delle petizioni', 'titre_page_delete_all' => 'eliminazione totale e irreversible', - 'titre_page_documents_liste' => 'I documenti delle rubriche', - 'titre_page_index' => 'Area riservata', - 'titre_page_message_edit' => 'Scrivere un messaggio', - 'titre_page_messagerie' => 'I tuoi messaggi', 'titre_page_recherche' => 'Risultati della ricerca @recherche@', 'titre_page_statistiques_referers' => 'Statistiche (link al tuo sito)', - 'titre_page_statistiques_signatures_jour' => 'Numero di firme al giorno', - 'titre_page_statistiques_signatures_mois' => 'Numero di firme al mese', 'titre_page_upgrade' => 'Aggiornamento di SPIP', 'titre_publication_articles_post_dates' => 'Pubblicazione di articoli postdatati', - 'titre_referencer_site' => 'Inserire il sito in repertorio:', - 'titre_rendez_vous' => 'APPUNTAMENTO:', 'titre_reparation' => 'Riparazione', 'titre_suivi_petition' => 'Monitoraggio delle petizioni', 'tls_ldap' => 'Transport Layer Security:', - 'trad_article_inexistant' => 'Non esiste un articolo con questo numero.', 'trad_article_traduction' => 'Tutte le versioni di questo articolo:', - 'trad_deja_traduit' => 'Errore: non è possibile collegare questo articolo al numero richiesto.', 'trad_delier' => 'Non collegare più questo articolo alle sue traduzioni', 'trad_lier' => 'Questo articolo è una traduzione dell’articolo numero:', 'trad_new' => 'Scrivere una nuova traduzione dell’articolo', // U - 'upload_info_mode_document' => 'Mettere questa immagine nel portfolio', - 'upload_info_mode_image' => 'Eliminare questa immagine dal portfolio', - 'utf8_convert_attendez' => 'Attendi qualche secondo e aggiorna la pagina.', - 'utf8_convert_avertissement' => 'Stai per convertire il contenuto del proprio database (articoli, brevi, ecc.) dal set di caratteri @orig@ al set di caratteri @charset@.', - 'utf8_convert_backup' => 'Non dimenticare di fare prima un backup completo del sito. Inoltre si deve verificare che i modelli e i file lingua sono compatibili @charset@.', - 'utf8_convert_erreur_deja' => 'Il tuo sito è già in @charset@, è inutile convertirlo...', 'utf8_convert_erreur_orig' => 'Errore: il set di caratteri @charset@ non è supportato.', - 'utf8_convert_termine' => 'Finito!', - 'utf8_convert_timeout' => 'Importante: in caso di timeout del server, aggiorna la pagina fino a che non si ottiene il messaggio « finito ».', - 'utf8_convert_verifier' => 'Ora è necessario svuotale la cache e verificare che non vi siano problemi sulle pagine pubbliche del sito. In caso di problemi gravi è stato effettuato un backup dei dati (in formato SQL) nella cartella @rep@.', - 'utf8_convertir_votre_site' => 'Convertire il sito in UTF-8', // V 'version' => 'Versione:' ); - -?> diff --git a/www/ecrire/lang/ecrire_it_fem.php b/www/ecrire/lang/ecrire_it_fem.php index c87c533b..1daddb13 100644 --- a/www/ecrire/lang/ecrire_it_fem.php +++ b/www/ecrire/lang/ecrire_it_fem.php @@ -1,9 +1,11 @@ 'Attiva il plugin', 'affichage' => 'Visualizzazione', 'aide_non_disponible' => 'Questa parte della guida in linea non è ancora disponibile in italiano.', + 'annuler_recherche' => 'Annullare la ricerca', 'auteur' => 'Autrice:', 'avis_acces_interdit' => 'Accesso vietato.', 'avis_article_modifie' => 'Attenzione, @nom_auteur_modif@ ha lavorato su quest’articolo @date_diff@ minuti fa', 'avis_aucun_resultat' => 'Nessun risultato.', + 'avis_base_inaccessible' => 'Impossibile connettersi al database @base@.', 'avis_chemin_invalide_1' => 'il percorso che hai scelto', 'avis_chemin_invalide_2' => 'non sembra valido. Torna alla pagina precedente e verifica le informazioni fornite.', 'avis_connexion_echec_1' => 'il collegamento alla base di dati è fallito.', 'avis_connexion_echec_2' => 'torna alla pagina precedente e verifica le informazioni fornite.', 'avis_connexion_echec_3' => 'N.B. Spesso sul server si deve chiedere l’attivazione dell’accesso alla base di dati prima di poterlo utilizzare. Se è impossibile collegarsi, verificare la configurazione per la connessione con l’amministratrice del sistema.', + 'avis_connexion_erreur_nom_base' => 'Il nome del database può contenere solo lettere, cifre e tratti', 'avis_connexion_ldap_echec_1' => 'La connessione al server LDAP è fallita.', 'avis_connexion_ldap_echec_2' => 'Torna alla pagina precedente e verifica le informazioni fornite. ', 'avis_connexion_ldap_echec_3' => 'In alternativa, non utilizzare il supporto LDAP per importare utenti.', 'avis_deplacement_rubrique' => 'Attenzione! Questa rubrica contiene @contient_breves@ breve/i: se vuoi spostarla, spunta questa casella per confermare.', - 'avis_destinataire_obligatoire' => 'Devi indicare un destinatario prima di mandare questo messaggio.', 'avis_erreur_connexion_mysql' => 'Errore di connessione SQL', - 'avis_erreur_version_archive' => 'Attenzione! Il file @archive@ corrisponde a -una versione di SPIP diversa da quella installata. Potranno sorgere notevoli problemi: -rischio di distruzione del database, malfunzionamenti diversi del sito ecc. -Non confermare questa richiesta d’importazione.

    Per ulteriori - informazioni, vedere -la documentazione di SPIP.

    ', # MODIF - 'avis_espace_interdit' => 'Area vietata
    SPIP è già installato.
    ', + 'avis_espace_interdit' => 'Area vietata
    SPIP è già installato.
    ', 'avis_lecture_noms_bases_1' => 'Il programma di installazione non ha potuto leggere i nomi dei database installati nel server.', 'avis_lecture_noms_bases_2' => 'Nessun database è disponibile, o la funzione che permette di accedere alla lista database è disattivata per motivi sicurezza (verifica con l’amministratrice di sistema).', 'avis_lecture_noms_bases_3' => 'Nel secondo caso, è probabile che un database con il tuo nome di login sia utilizzabile:', - 'avis_non_acces_message' => 'Non hai accesso a questo messaggio.', 'avis_non_acces_page' => 'Non hai accesso a questa pagina.', 'avis_operation_echec' => 'L’operazione è fallita.', 'avis_operation_impossible' => 'Operazione impossibile', - 'avis_probleme_archive' => 'Problema di lettura del file @archive@', 'avis_suppression_base' => 'ATTENZIONE, la cancellazione dei dati è irreversibile', - 'avis_version_mysql' => 'La versione di SQL installata (@version_mysql@)non permette la correzione automatica delle tabelle.', // B 'bouton_acces_ldap' => 'Aggiungi l’accesso a LDAP', 'bouton_ajouter' => 'Aggiungi', - 'bouton_ajouter_participant' => 'AGGIUNGI UNA UTENTE:', - 'bouton_annonce' => 'ANNUNCIO', 'bouton_annuler' => 'Annulla', - 'bouton_checkbox_envoi_message' => 'possibilità di inviare un messaggio', - 'bouton_checkbox_indiquer_site' => 'indicare obbligatoriamente un sito Web', - 'bouton_checkbox_signature_unique_email' => 'una sola adesione per indirizzo email', - 'bouton_checkbox_signature_unique_site' => 'una sola adesione per sito Web', + 'bouton_cache_activer' => 'Riattivare la cache', + 'bouton_cache_desactiver' => 'Disattivare temporaneamente la cache', 'bouton_demande_publication' => 'Chiedi la pubblicazione di questo articolo', 'bouton_desactive_tout' => 'Disattiva tutto', 'bouton_desinstaller' => 'Disinstalla', - 'bouton_effacer_index' => 'Cancella gli indici', 'bouton_effacer_tout' => 'Cancella TUTTO', - 'bouton_envoi_message_02' => 'INVIA UN MESSAGGIO', 'bouton_envoyer_message' => 'Messaggio definitivo: Invia', + 'bouton_fermer' => 'Chiudere', + 'bouton_mettre_a_jour_base' => 'Aggiornare il database', 'bouton_modifier' => 'Modifica', - 'bouton_pense_bete' => 'PROMEMORIA AD USO PERSONALE', - 'bouton_radio_activer_messagerie' => 'Attiva la messaggistica interna', - 'bouton_radio_activer_messagerie_interne' => 'Attiva la messaggistica interna', - 'bouton_radio_activer_petition' => 'Attiva la petizione', 'bouton_radio_afficher' => 'Visualizza', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Comparire nell’elenco delle redattrici collegate', - 'bouton_radio_desactiver_messagerie' => 'Disattiva la messaggistica', 'bouton_radio_envoi_annonces_adresse' => 'Invia gli annunci all’indirizzo:', 'bouton_radio_envoi_liste_nouveautes' => 'Invia l’elenco delle novità', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Non comparire nell’elenco delle redattrici collegate ', 'bouton_radio_non_envoi_annonces_editoriales' => 'Non inviare annunci editoriali ', - 'bouton_radio_pas_petition' => 'Nessuna petizione', - 'bouton_radio_petition_activee' => 'Petizione attivata', - 'bouton_radio_supprimer_petition' => 'Elimina la petizione', 'bouton_redirection' => 'REINDIRIZZAMENTO', 'bouton_relancer_installation' => 'Rilanciare l’installazione', 'bouton_suivant' => 'Avanti', 'bouton_tenter_recuperation' => 'Tentare un ripristino', 'bouton_test_proxy' => 'Testare il proxy', 'bouton_vider_cache' => 'Svuota la cache', - 'bouton_voir_message' => 'Anteprima messaggio', // C - 'cache_mode_compresse' => 'I file di cache sono salvati in modalità compressa.', - 'cache_mode_non_compresse' => 'I file di cache sono salvati in modalità non compressa.', 'cache_modifiable_webmestre' => 'Questo parametro può essere modificato dalla webmistress del sito.', 'calendrier_synchro' => 'Se si utilizza un programma di agenda compatibile con iCal, è possibile sincronizzare i dati con le informazioni di questo sito', 'config_activer_champs' => 'Attiva i campi seguenti', @@ -106,45 +86,57 @@ disattivata per motivi sicurezza (verifica con l’amministratrice di sistema).' 'config_titre_base_sup' => 'Dichiarazione di un database supplementare', 'config_titre_base_sup_choix' => 'Scegliere un database supplementare', 'connexion_ldap' => 'Connessione:', - 'copier_en_local' => 'Copia in locale', + 'creer_et_associer_un_auteur' => 'Creare ed associare un’autrice', // D 'date_mot_heures' => 'ore', // E + 'ecran_securite' => ' + schermo di sicurezza @version@', # RELIRE 'email' => 'email', 'email_2' => 'email:', + 'en_savoir_plus' => 'Ulteriori informazioni', # RELIRE 'entree_adresse_annuaire' => 'Indirizzo della rubrica', 'entree_adresse_email' => 'Il tuo indirizzo email', + 'entree_adresse_email_2' => 'Indirizzo email', 'entree_base_donnee_1' => 'Indirizzo del database', 'entree_base_donnee_2' => '(Spesso questo indirizzo coincide con quello dell’intero sito, qualche volta corrisponde a "localhost", altre volte invece non è necessario specificarlo.)', 'entree_biographie' => 'La tua biografia in breve.', 'entree_chemin_acces' => 'Inserire il percorso d’accesso:', 'entree_cle_pgp' => 'Chiave PGP', + 'entree_cle_pgp_2' => 'Autenticazione', # RELIRE 'entree_contenu_rubrique' => '(Contenuto della rubrica in qualche parola)', 'entree_identifiants_connexion' => 'Identificativo di connessione...', + 'entree_identifiants_connexion_2' => 'Identificativo', # RELIRE 'entree_informations_connexion_ldap' => 'Inserisci in questo form gli estremi per la connessione alla tua rubrica LDAP. Se non conosci queste informazioni, richiedile all’amministratrice del sistema o della rete.', 'entree_infos_perso' => 'Chi sei?', + 'entree_infos_perso_2' => 'Chi è l’autrice ?', 'entree_interieur_rubrique' => 'All’interno della rubrica:', 'entree_liens_sites' => 'Link ipertestuale (riferimento, sito da visitare...)', 'entree_login' => 'Login', 'entree_login_connexion_1' => 'Il login di connessione', 'entree_login_connexion_2' => '(Corrisponde a volte al login d’accesso via FTP; in alcuni casi non occorre specificare nulla)', - 'entree_login_ldap' => 'Login LDAP iniziale', 'entree_mot_passe' => 'Password', 'entree_mot_passe_1' => 'La password di connessione', 'entree_mot_passe_2' => '(Corrisponde a volte alla password d’accesso via FTP; in alcuni casi non occorre specificare nulla)', 'entree_nom_fichier' => 'Inserire il nome del file @texte_compresse@:', 'entree_nom_pseudo' => 'Nome o pseudonimo', 'entree_nom_pseudo_1' => '(Nome o pseudonimo)', + 'entree_nom_pseudo_2' => 'Nome o pseudonimo', 'entree_nom_site' => 'Nome del tuo sito', + 'entree_nom_site_2' => 'Nome del sito dell’autrice', # RELIRE 'entree_nouveau_passe' => 'Nuova password', 'entree_passe_ldap' => 'Password', 'entree_port_annuaire' => 'Il numero di porta della rubrica', 'entree_signature' => 'Firma', 'entree_titre_obligatoire' => 'Titolo [Obbligatorio]
    ', 'entree_url' => 'Indirizzo (URL) del sito', + 'entree_url_2' => 'Indirizzo (URL) del sito', + 'erreur_connect_deja_existant' => 'Esiste già un server con questo nome', # RELIRE + 'erreur_email_deja_existant' => 'Questo indirizzo email è già registrato', + 'erreur_nom_connect_incorrect' => 'Questo nome non è autorizzato', # RELIRE + 'erreur_plugin_desinstalation_echouee' => 'La disinstallazione del plug in è fallita. E’ comunque possibile disattivarlo.', # RELIRE 'erreur_plugin_fichier_absent' => 'File non presente', 'erreur_plugin_fichier_def_absent' => 'File di definizioni non presente', 'erreur_plugin_nom_fonction_interdit' => 'Nome di funzione non possibile', @@ -153,6 +145,9 @@ Se non conosci queste informazioni, richiedile all’amministratrice del sistema 'erreur_plugin_tag_plugin_absent' => '<plugin> mancante nel file di definizione', 'erreur_plugin_version_manquant' => 'Versione del plugin mancante', + // H + 'htaccess_a_simuler' => 'Attenzione: la configurazione del vostro server HTTP non tiene conto dei file @htaccess@. Per poter mettere in sicurezza bisognerà modificare la configurazione di questo punto, oppure sarà necessario che i parametri fissi @constantes@ (definiti nel file le_mie_opzioni.php) abbiano i valore dei registri diversi da @document_root@.', # RELIRE + // I 'ical_info1' => 'Questa pagina elenca diversi metodi per rimanere in contatto con le varie attività del sito.', 'ical_info2' => 'Per ulteriori informazioni su tutte queste tecniche, non esitate a consultare la documentazione di SPIP.', @@ -167,6 +162,7 @@ Se non conosci queste informazioni, richiedile all’amministratrice del sistema 'ical_titre_mailing' => 'Mailing-list', 'ical_titre_rss' => 'File di syndication', 'icone_activer_cookie' => 'Attiva il cookie di corrispondenza', + 'icone_activite' => 'Attività', 'icone_admin_plugin' => 'Gestione dei plugin', 'icone_afficher_auteurs' => 'Pubblica le autrici', 'icone_afficher_visiteurs' => 'Pubblica i visitatori', @@ -174,12 +170,10 @@ Se non conosci queste informazioni, richiedile all’amministratrice del sistema 'icone_calendrier' => 'Calendario', 'icone_creer_auteur' => 'Crea una nuova autrice ed associala a questo articolo', 'icone_creer_mot_cle' => 'Crea una nuova parola chiave e collegala a questo articolo', - 'icone_creer_mot_cle_rubrique' => 'Creare una nuova parola chiave e collegarla a questa rubrica', - 'icone_creer_mot_cle_site' => 'Creare una nuova parola chiave e collegarla a questo sito', 'icone_creer_rubrique_2' => 'Crea una nuova rubrica', - 'icone_envoyer_message' => 'Invia questo messaggio', + 'icone_ma_langue' => 'La mia lingua', + 'icone_mes_infos' => 'Le mie informazioni', 'icone_modifier_article' => 'Modifica l’articolo', - 'icone_modifier_message' => 'Modifica il messaggio', 'icone_modifier_rubrique' => 'Modifica la rubrica', 'icone_relancer_signataire' => 'Rilanciare il firmatario', 'icone_retour' => 'Indietro', @@ -190,11 +184,8 @@ Se non conosci queste informazioni, richiedile all’amministratrice del sistema 'icone_valider_signature' => 'Conferma l’adesione', 'image_administrer_rubrique' => 'Puoi amministrare questa rubrica', 'info_1_article' => '1 articolo', - 'info_1_site' => '1 sito', 'info_activer_cookie' => 'Se vuoi puoi attivare un cookie di corrispondenza, che ti permetterà di passare facilmente dal sito pubblico all’interfaccia privata.', - 'info_admin_gere_rubriques' => 'Questa amministratrice gestisce le seguenti rubriche:', - 'info_admin_gere_toutes_rubriques' => 'Questa amministratrice gestisce tutte le rubriche.', # MODIF 'info_administrateur' => 'Amministratrice', 'info_administrateur_1' => 'Amministratrice', 'info_administrateur_2' => 'del sito (da utilizzare con prudenza)', @@ -204,15 +195,12 @@ di passare facilmente dal sito pubblico all’interfaccia privata.', 'info_administrer_rubrique' => 'Puoi amministrare questa rubrica', 'info_adresse' => 'all’indirizzo:', 'info_adresse_url' => 'Indirizzo (URL) del sito pubblico', - 'info_afficher_visites' => 'Visualizzare le visite per:', 'info_aide_en_ligne' => 'Guida in linea SPIP', 'info_ajout_image' => 'Quando aggiungi delle immagini come documenti allegati ad un articolo, SPIP può creare delle thumbnail (miniature) delle immagini inserite. Ciò permette ad esempio di creare in automatico una galleria di immagini o un portfolio.', - 'info_ajout_participant' => 'Si è aggiunta la seguente partecipante:', 'info_ajouter_rubrique' => 'Aggiungi un’altra rubrica da amministrare:', 'info_annonce_nouveautes' => 'Annuncio delle novità', - 'info_anterieur' => 'anteriore', 'info_article' => 'articolo', 'info_article_2' => 'articoli', 'info_article_a_paraitre' => 'Gli articoli postdatati da pubblicare', @@ -220,10 +208,8 @@ immagini inserite. Ciò permette ad esempio di creare in automatico una galleria 'info_articles_2' => 'Articoli', 'info_articles_auteur' => 'Articoli di questo autore', 'info_articles_trouves' => 'Articoli trovati', - 'info_articles_trouves_dans_texte' => 'Articoli trovati (ricerca nel testo)', 'info_attente_validation' => 'I tuoi articoli in attesa di convalida', 'info_aujourdhui' => 'oggi: ', - 'info_auteur_message' => 'AUTRICE DEL MESSAGGIO:', 'info_auteurs' => 'Le autrici', 'info_auteurs_par_tri' => 'Autrici@partri@', 'info_auteurs_trouves' => 'Autrici trovate', @@ -240,8 +226,6 @@ immagini inserite. Ciò permette ad esempio di creare in automatico una galleria 'info_classement_1' => 'o su @liste@', 'info_classement_2' => 'o su @liste@', 'info_code_acces' => 'Non dimenticare i tuoi codici d’accesso!', - 'info_compresseur_gzip' => 'N. B. : Si raccomanda di verificare preventivamente se il provider comprime già in maniera sistematica gli script php; a tal fine è possibile utilizzare, per esempio, il seguente servizio: @testgzip@', # MODIF - 'info_compresseur_texte' => 'Se il proprio server non comprime automaticamente le pagine HTML per inviarle ai visitatori, è possibile tentare di forzare la compressione per diminuire il peso delle pagine da scaricare. Attenzione: ciò può rallentare notevolmente alcuni server.', 'info_config_suivi' => 'Se questo indirizzo corrisponde a una mailing-list, è possibile indicare qui sotto l’indirizzo al quale i partecipanti del sito possono iscriversi. Questo indirizzo può essere una URL (per esempio la pagina di iscrizione via Web alla lista), oppure un indirizzo email che contiene un Oggetto specifico (per esempio: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'È possibile abbonarsi alla mailing-list di questo sito. Verranno spedite per email le notifiche degli articoli e delle brevi proposte per la pubblicazione.', 'info_confirmer_passe' => 'Conferma la nuova password:', @@ -251,12 +235,12 @@ immagini inserite. Ciò permette ad esempio di creare in automatico una galleria 'info_conflit_edition_votre_version' => 'La tua versione:', 'info_connexion_base' => 'Prova di connessione al database', 'info_connexion_base_donnee' => 'Connessione al proprio database', - 'info_connexion_ldap_ok' => 'La connessione LDAP è riuscita.

    È possibile passare alla fase successiva.

    ', # MODIF + 'info_connexion_ldap_ok' => 'La connessione LDAP è riuscita.

    È possibile passare alla fase successiva.

    ', 'info_connexion_mysql' => 'La connessione a SQL', 'info_connexion_ok' => 'La connessione è riuscita.', 'info_contact' => 'Contatti', 'info_contenu_articles' => 'Contentuto degli articoli', - 'info_creation_paragraphe' => '(Per creare dei paragrafi indipendenti, lasciare fra loro delle righe vuote.)', # MODIF + 'info_creation_paragraphe' => 'Per creare dei paragrafi indipendenti, lasciare delle righe vuote.', # RELIRE 'info_creation_rubrique' => 'Prima di poter scrivere degli articoli,
    devi creare almeno una rubrica.
    ', 'info_creation_tables' => 'Creazione delle tabelle nel database', 'info_creer_base' => 'Creare un nuovo database:', @@ -264,16 +248,13 @@ immagini inserite. Ciò permette ad esempio di creare in automatico una galleria 'info_date_publication_anterieure' => 'Data di redazione anteriore:', 'info_date_referencement' => 'DATA DI INSERIMENTO IN REPERTORIO DI QUESTO SITO:', 'info_derniere_etape' => 'Finito!', - 'info_derniers_articles_publies' => 'I tuoi ultimi articoli pubblicati', - 'info_desactiver_messagerie_personnelle' => 'Puoi attivare o disattivare il sistema di messaggistica personale su questo sito.', 'info_descriptif' => 'Descrizione:', 'info_desinstaller_plugin' => 'elimina i dati e disattiva il plug-in', 'info_discussion_cours' => 'Discussioni in corso', 'info_ecrire_article' => 'Prima di poter scrivere degli articoli, devi creare almeno una rubrica.', 'info_email_envoi' => 'Indirizzo email del mittente (opzionale)', 'info_email_envoi_txt' => 'Indicare qui l’indirizzo da utilizzare per l’invio degli email (come impostazione predefinita l’indirizzo del destinatario sarà utilizzato come indirizzo del mittente):', - 'info_email_webmestre' => 'Indirizzo email della webmistress (opzionale)', # MODIF - 'info_entrer_code_alphabet' => 'Inserisci il codice dell’alfabeto da utilizzare:', + 'info_email_webmestre' => 'Indirizzo email della webmistress', # RELIRE 'info_envoi_email_automatique' => 'Invio di email automatico', 'info_envoyer_maintenant' => 'Invia adesso', 'info_etape_suivante' => 'Passare alla fase successiva', @@ -286,31 +267,23 @@ per esempio ad una mailing-list delle redattrici, l’annuncio delle domande di pubblicazione e di convalida degli articoli.', 'info_fichiers_authent' => 'File d’autenticazione ".htpasswd"', 'info_forums_abo_invites' => 'Il sito comprende dei forum accessibili solo a utenti registrate. Nel sito pubblico è quindi presente una pagina d’iscrizione.', - 'info_gauche_admin_effacer' => 'Questa pagina è accessibile solo alle responsabili del sito.

    Permette l’accesso alle diverse funzioni di manutenzione tecnica. Alcune di esse richiedono una specifica procedura di identificazione, eseguibile grazie a un accesso FTP.

    ', # MODIF - 'info_gauche_admin_tech' => 'Questa pagina è accessibile solo alle responsabili del sito.

    Permette l’accesso alle diverse funzioni di manutenzione tecnica. Alcune di esse richiedono una specifica procedura di identificazione, eseguibile grazie a un accesso FTP.

    ', # MODIF - 'info_gauche_admin_vider' => 'Questa pagina è accessibile solo alle responsabili del sito.

    Permette l’accesso alle diverse funzioni di manutenzione tecnica. Alcune di esse richiedono una specifica procedura di identificazione, eseguibile grazie ad un accesso FTP.

    ', # MODIF + 'info_gauche_admin_tech' => 'Questa pagina è accessibile solo alle responsabili del sito.

    Permette l’accesso alle diverse funzioni di manutenzione tecnica. Alcune di esse richiedono una procedura di identificazione specifica, tramite accesso FTP.

    ', # RELIRE + 'info_gauche_admin_vider' => 'Questa pagina è accessibile solo alle responsabili del sito.

    Permette l’accesso alle diverse funzioni di manutenzione tecnica. Alcune di esse richiedono una procedura di identificazione specifica, tramite accesso FTP.

    ', # RELIRE 'info_gauche_auteurs' => 'Elenco di tutte le autrici del sito. Il loro status è indicato dal colore dell’icona (redattrice = giallo; amministratrice = verde).', 'info_gauche_auteurs_exterieurs' => 'Le autrici esterne, senza accesso al sito, sono indicate da un’icona blu; -le autrici eliminate, invece, da un cestino.', # MODIF + le autrici eliminate sono indicate da un’icona grigia.', # RELIRE 'info_gauche_messagerie' => 'Il sistema di messaggistica permette di scambiare dei messaggi tra redattrici, di conservare dei memo (promemoria ad uso personale) o di pubblicare degli annunci nel pannello di controllo dell’area riservata (se sei amministratrice).', - 'info_gauche_numero_auteur' => 'AUTRICE NUMERO', 'info_gauche_statistiques_referers' => 'Questa pagina presenta un elenco dei siti che contengono link verso il tuo (referrer). Questo elenco è valido però solo per oggi essendo azzerato ogni 24 ore.', 'info_gauche_visiteurs_enregistres' => 'Trovi qui i visitatori registrati allo spazio pubblico del sito (forum su abbonamento).', 'info_generation_miniatures_images' => 'Generazione di thumbnail di immagini', - 'info_gerer_trad' => 'Gestire i link di traduzione?', 'info_hebergeur_desactiver_envoi_email' => 'Alcuni hoster disattivano l’invio automatico di email dai loro server. In questo caso, le funzionalità di SPIP di seguito riportate non funzioneranno.', 'info_hier' => 'ieri:', - 'info_historique_activer' => 'Attivare la gestione delle revisioni', - 'info_historique_affiche' => 'Visualizzare questa versione', - 'info_historique_comparaison' => 'confronto', - 'info_historique_desactiver' => 'Disattivare la gestione delle revisioni', - 'info_historique_texte' => 'La gestione delle revisioni permette di conservare traccia di tutte le modifiche effettuate su un articolo, mostrando le differenze fra le sue versioni successive.', 'info_identification_publique' => 'La tua identità pubblica...', 'info_image_process' => 'Seleziona il metodo migliore per la creazione delle anteprime cliccando sull’immagine corrispondente.', - 'info_image_process2' => 'N.B. Se non appare alcuna immagine, ciò significa che la configurazione del server non permette l’uso di alcune funzioni grafiche. Se si desidera utilizzarle, rivolgersi al responsabile tecnico chiedendo di installare le estensioni "GD" o "Imagick".', # MODIF + 'info_image_process2' => 'Se non appare alcuna immagine, ciò significa che la configurazione del server non permette l’uso di tali funzioni. Se si desidera utilizzarle, contattate la responsabile tecnica chiedendo delle estensioni "GD" o "Imagick".', # RELIRE 'info_images_auto' => 'Immagini elaborate automaticamente', 'info_informations_personnelles' => 'Informazioni personali', 'info_inscription_automatique' => 'Iscrizione automatica di nuove redattrici', @@ -326,8 +299,6 @@ dai loro server. In questo caso, le funzionalità di SPIP di seguito riportate n 'info_logos' => 'I logo', 'info_maximum' => 'massimo:', 'info_meme_rubrique' => 'Nella stessa rubrica', - 'info_message' => 'Messaggio del ', - 'info_message_efface' => 'MESSAGGIO CANCELLATO', 'info_message_en_redaction' => 'I tuoi messaggi in corso di redazione', 'info_message_technique' => 'Messaggio tecnico:', 'info_messagerie_interne' => 'Sistema di messaggistica interna', @@ -339,20 +310,15 @@ le informazioni contenute nel database sono probabilmente andate perse.
    {{R 'info_modifier_rubrique' => 'Modifica la rubrica:', 'info_modifier_titre' => 'Modifica: @titre@', 'info_mon_site_spip' => 'Il mio sito SPIP', - 'info_mot_sans_groupe' => '(Parole chiave senza gruppo...)', - 'info_moteur_recherche' => 'Motore di ricerca integrato', 'info_moyenne' => 'media: ', - 'info_multi_articles' => 'Attivare il menu della lingua negli articoli?', 'info_multi_cet_article' => 'Lingua di questo articolo:', 'info_multi_langues_choisies' => 'Selezionare di seguito le lingue disponibili per le redattrici del sito. Le lingue già utilizzate nel sito (visualizzate per prime) non possono essere disattivate.', - 'info_multi_rubriques' => 'Attivare il menu della lingua nelle rubriche?', 'info_multi_secteurs' => '... solo per le rubriche collocate nella {root} del sito?', 'info_nom' => 'Nome', 'info_nom_destinataire' => 'Nome del destinatario', 'info_nom_site' => 'Nome del tuo sito', 'info_nombre_articles' => '@nb_articles@ articoli,', - 'info_nombre_partcipants' => 'PARTECIPANTI ALLA DISCUSSIONE:', 'info_nombre_rubriques' => '@nb_rubriques@ rubriche,', 'info_nombre_sites' => '@nb_sites@ siti, ', 'info_non_deplacer' => 'Non spostare...', @@ -362,17 +328,13 @@ le informazioni contenute nel database sono probabilmente andate perse.
    {{R 'info_non_modifiable' => 'non può essere modificato', 'info_non_suppression_mot_cle' => 'non voglio cancellare questa parola chiave.', 'info_notes' => 'Note', - 'info_nouveaux_message' => 'Nuovi messaggi', 'info_nouvel_article' => 'Nuovo articolo', 'info_nouvelle_traduction' => 'Nuova traduzione:', 'info_numero_article' => 'ARTICOLO NUMERO:', - 'info_obligatoire_02' => '[Obbligatorio]', # MODIF + 'info_obligatoire_02' => '(obbligatorio)', 'info_option_accepter_visiteurs' => 'Accetta l’iscrizione di utenti del sito pubblico', - 'info_option_faire_suivre' => 'Segnala i nuovi messaggi', 'info_option_ne_pas_accepter_visiteurs' => 'Rifiuta l’iscrizione di utenti', 'info_options_avancees' => 'OPZIONE AVANZATA', - 'info_ortho_activer' => 'Attivare il controllo ortografico', - 'info_ortho_desactiver' => 'Disattivare il controllo ortografico', 'info_ou' => 'o... ', 'info_page_interdite' => 'Pagina riservata', 'info_par_nom' => 'per nome', @@ -381,20 +343,14 @@ le informazioni contenute nel database sono probabilmente andate perse.
    {{R 'info_par_tri' => '’(per @tri@)’', 'info_passe_trop_court' => 'Password troppo corta.', 'info_passes_identiques' => 'Le due password non sono uguali.', - 'info_pense_bete_ancien' => 'I vecchi memo', # MODIF 'info_plus_cinq_car' => 'più di 5 caratteri', 'info_plus_cinq_car_2' => '(Più di 5 caratteri)', 'info_plus_trois_car' => '(Più di 3 caratteri)', 'info_popularite' => 'popolarità: @popularite@; visite: @visites@', - 'info_popularite_4' => 'popolarità: @popularite@; visite: @visites@', 'info_post_scriptum' => 'Post Scriptum', 'info_post_scriptum_2' => 'Post Scriptum:', 'info_pour' => 'per', - 'info_preview_admin' => 'Solo le amministratrici possono visualizzare l’anteprima del sito', - 'info_preview_comite' => 'Tutte le redattrici possono visualizzare l’anteprima del sito', - 'info_preview_desactive' => 'L’anteprima del sito è totalmente disattivata', - 'info_preview_texte' => 'È possibile visualizzare un’anteprima del sito comprendente anche gli articoli e le brevi "proposti" per la pubblicazione. Questa funzionalità può essere disattivata, consentita solo alle amministratrici o a tutte le redattrici.', - 'info_principaux_correspondants' => 'Corrispondenti principali', + 'info_preview_texte' => 'È possibile visualizzare un’anteprima del sito comprendente anche gli articoli e le brevi "proposti" per la pubblicazione. Questa funzionalità può essere disattivata, consentita solo alle amministratrici o a tutte le redattrici.', # MODIF 'info_procedez_par_etape' => 'procedere passo dopo passo', 'info_procedure_maj_version' => 'è necessario avviare la procedura di aggiornamento per adattare il database alla nuova versione di SPIP.', @@ -404,21 +360,17 @@ il database alla nuova versione di SPIP.', 'info_publies' => 'I tuoi articoli pubblicati', 'info_question_accepter_visiteurs' => 'I modelli di pagina del sito prevedono la registrazione di utenti senza accesso all’area riservata. Attivare la seguente funzionalità:', 'info_question_inscription_nouveaux_redacteurs' => 'Accettate le iscrizioni di nuove redattrici -direttamente dal sito pubblico? In questo caso, chi visita il sito potrà iscriversi -grazie ad un modulo automatizzato e accedere all’area riservata per proporre -i propri articoli.
    Durante la fase d’iscrizione, -le utenti ricevono automaticamente un email +direttamente dal sito pubblico? In questo caso, chi visita il sito potrà iscriversi +grazie ad un modulo automatizzato e potrà accedere all’area riservata per proporre i propri articoli. +
    Durante la fase d’iscrizione, +le utenti ricevono automaticamente un’email che fornisce loro i codici d’accesso al sito privato. Alcuni -hoster disattivano l’invio di email dai propri server: in questo caso, l’iscrizione automatica è -impossibile.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Desideri utilizzare il motore di ricerca integrato di SPIP? -(disattivandolo viene velocizzato il funzionamento del sistema)', - 'info_question_vignettes_referer_non' => 'Non visualizzare la cattura dello schermo dei siti di origine delle visite', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF +host disattivano l’invio di email dai +propri server: in questo caso, l’iscrizione automatica è +impossibile.', # RELIRE + 'info_qui_edite' => '@nom_auteur_modif@ ha lavorato su questo contenuto @date_diff@ minuti fa', 'info_racine_site' => 'Root del sito', 'info_recharger_page' => 'Aggiorna questa pagina fra qualche istante.', - 'info_recherche_auteur_a_affiner' => 'Troppi risultati per "@cherche_auteur@"; restringi la ricerca.', - 'info_recherche_auteur_ok' => 'Molti redattori trovati per "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Nessun risultato per "@cherche_auteur@".', 'info_recommencer' => 'Ricomincia.', 'info_redacteur_1' => 'Redattori', @@ -435,7 +387,6 @@ impossibile.', # MODIF 'info_rubriques' => 'Rubriche', 'info_rubriques_02' => 'rubriche', 'info_rubriques_trouvees' => 'Rubriche trovate', - 'info_rubriques_trouvees_dans_texte' => 'Rubriche trovate (ricerca nel testo)', 'info_sans_titre' => 'Senza titolo', 'info_selection_chemin_acces' => 'Seleziona qui sotto il percorso d’accesso nell’elenco:', 'info_signatures' => 'firme', @@ -443,18 +394,16 @@ impossibile.', # MODIF 'info_site_2' => 'sito: ', 'info_site_min' => 'sito', 'info_site_reference_2' => 'Sito repertoriato', - 'info_site_web' => 'SITO WEB:', # MODIF + 'info_site_web' => 'Sito Web :', 'info_sites' => 'siti', 'info_sites_lies_mot' => 'I siti in repertorio legati a questa parola chiave', 'info_sites_proxy' => 'Utilizza un proxy', 'info_sites_trouves' => 'Siti trovati', - 'info_sites_trouves_dans_texte' => 'Siti trovati (nel testo)', 'info_sous_titre' => 'Sottotitolo:', 'info_statut_administrateur' => 'Amministratrice', 'info_statut_auteur' => 'Status di questa autrice:', 'info_statut_auteur_a_confirmer' => 'Iscrizione da confermare', 'info_statut_auteur_autre' => 'Altro stato:', - 'info_statut_efface' => 'Cancellato', 'info_statut_redacteur' => 'Redattrice', 'info_statut_utilisateurs_1' => 'Status predefinito delle utenti importate', 'info_statut_utilisateurs_2' => 'Scegli lo status da attribuire alle personne presenti nell’elenco LDAP quando si collegano per la prima volta. Potrai poi modificare questa impostazione per ogni singola autrice.', @@ -469,14 +418,13 @@ impossibile.', # MODIF 'info_texte' => 'Testo', 'info_texte_explicatif' => 'Testo esplicativo', 'info_texte_long' => '(il testo è lungo: è quindi visualizzato in più sezioni che verranno riunificate dopo la convalida)', - 'info_texte_message' => 'Testo del messaggio:', # MODIF + 'info_texte_message' => 'Testo del messaggio', 'info_texte_message_02' => 'Testo del messaggio', 'info_titre' => 'Titolo:', 'info_total' => 'totale: ', 'info_tous_articles_en_redaction' => 'Tutti gli articoli in corso di redazione', 'info_tous_articles_presents' => 'Tutti gli articoli pubblicati in questa rubrica', 'info_tous_les' => 'tutti i:', - 'info_tous_redacteurs' => 'Annunci a tutte le redattrici', 'info_tout_site' => 'Tutto il sito', 'info_tout_site2' => 'L’articolo non è stato tradotto in questa lingua.', 'info_tout_site3' => 'L’articolo è stato tradotto in questa lingua, ma sono state effettuate alcune modifiche all’articolo di riferimento. La traduzione deve quindi essere aggiornata.', @@ -491,7 +439,6 @@ Le traduzioni sono associate all’originale, 'info_une_rubrique' => 'una rubrica, ', 'info_une_rubrique_02' => '1 rubrica', 'info_url' => 'URL:', - 'info_url_site' => 'URL DEL SITO:', 'info_urlref' => 'Link ipertestuale:', 'info_utilisation_spip' => 'Puoi ora cominciare ad utilizzare il sistema di pubblicazione assistita...', 'info_visites_par_mois' => 'Visualizzazione per mese:', @@ -500,7 +447,6 @@ Le traduzioni sono associate all’originale, 'info_visiteurs' => 'Visitatori', 'info_visiteurs_02' => 'Visitatori del sito pubblico', 'install_adresse_base_hebergeur' => 'Indirizzo del database attribuito dal provider', - 'install_base_ok' => 'Il database @base@ è stato riconosciuto', 'install_echec_annonce' => 'L’installazione potrebbe fallire oppure causare problemi di funzionalità al sito...', 'install_extension_mbstring' => 'SPIP non funziona con:', 'install_extension_php_obligatoire' => 'SPIP esige l’estensione php:', @@ -517,16 +463,14 @@ Le traduzioni sono associate all’originale, 'install_serveur_hebergeur' => 'Server del database attribuito dall’hoster', 'install_table_prefix_hebergeur' => 'Prefisso della tabella attribuito dal provider:', 'install_tables_base' => 'Tabelle del database', - 'install_types_db_connus' => 'SPIP può utilizzare MySQL (il più diffuso), PostgreSQL e SQLite.', # MODIF - 'install_types_db_connus_avertissement' => 'Attenzione: numerosi plug-in funziano solamente con MySQL', # MODIF + 'install_types_db_connus' => 'SPIP può utilizzare MySQL (il più diffuso) e SQLite.', + 'install_types_db_connus_avertissement' => 'Il supporto PostgreSQL viene proposto a titolo sperimentale', # RELIRE 'intem_redacteur' => 'redattrice', 'intitule_licence' => 'Licenza', 'item_accepter_inscriptions' => 'Accetta le iscrizioni', 'item_activer_messages_avertissement' => 'Attiva i messaggi d’avvertimento', 'item_administrateur_2' => 'amministratrice', 'item_afficher_calendrier' => 'Pubblica nel calendario', - 'item_autoriser_documents_joints' => 'Consenti di allegare documenti agli articoli', - 'item_autoriser_documents_joints_rubriques' => 'Consenti di allegare documenti alle rubriche', 'item_autoriser_syndication_integrale' => 'Diffondere la versione integrale degli articoli nei file di syndication', 'item_choix_administrateurs' => 'le amministratrici', 'item_choix_generation_miniature' => 'Genera automaticamente le thumbnail delle immagini.', @@ -534,7 +478,6 @@ Le traduzioni sono associate all’originale, 'item_choix_redacteurs' => 'le redattrici', 'item_choix_visiteurs' => 'i visitatori del sito pubblico', 'item_creer_fichiers_authent' => 'Crea i file .htpasswd', - 'item_limiter_recherche' => 'Limita la ricerca alle informazioni contenute nel tuo sito', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Attiva la messaggistica e l’agenda', 'item_mots_cles_association_articles' => 'agli articoli', @@ -544,37 +487,26 @@ Le traduzioni sono associate all’originale, 'item_non_accepter_inscriptions' => 'Non accettare le iscrizioni', 'item_non_activer_messages_avertissement' => 'Nessun messaggio d’avvertimento', 'item_non_afficher_calendrier' => 'Non pubblicare nel calendario', - 'item_non_autoriser_documents_joints' => 'Non consentire di allegare documenti agli articoli', - 'item_non_autoriser_documents_joints_rubriques' => 'Non consentire di allegare documenti alle rubriche', 'item_non_autoriser_syndication_integrale' => 'Diffondere solo un riassunto', - 'item_non_compresseur' => 'Disattiva la compressione', 'item_non_creer_fichiers_authent' => 'Non creare questi file', - 'item_non_gerer_statistiques' => 'Non gestire le statistiche', - 'item_non_limiter_recherche' => 'Estendi la ricerca al contenuto dei siti in syndication', 'item_non_messagerie_agenda' => 'Disattiva la messaggistica e l’agenda', 'item_non_publier_articles' => 'Non pubblicare gli articoli prima della data impostata.', - 'item_non_utiliser_moteur_recherche' => 'Non utilizzare il motore di ricerca', 'item_nouvel_auteur' => 'Nuova autrice', 'item_nouvelle_rubrique' => 'Nuova rubrica', 'item_oui' => 'Sì', 'item_publier_articles' => 'Pubblica gli articoli indipendentemente dalla data impostata.', 'item_reponse_article' => 'Risposta all’articolo ', - 'item_utiliser_moteur_recherche' => 'Utilizza il motore di ricerca', 'item_visiteur' => 'visitatore', // J 'jour_non_connu_nc' => 'n.c.', // L - 'lien_ajout_destinataire' => 'Aggiungi il destinatario', 'lien_ajouter_auteur' => 'Aggiungi questa autrice', - 'lien_ajouter_participant' => 'Aggiungi una partecipante', 'lien_email' => 'email', 'lien_nom_site' => 'NOME DEL SITO:', 'lien_retirer_auteur' => 'Rimuovere l’autrice', - 'lien_retrait_particpant' => 'rimuovere questa partecipante', 'lien_site' => 'sito', - 'lien_supprimer_rubrique' => 'elimina la rubrica', 'lien_tout_deplier' => 'Espandi', 'lien_tout_replier' => 'Richiudi', 'lien_tout_supprimer' => 'Eliminare tutto', @@ -582,12 +514,12 @@ Le traduzioni sono associate all’originale, 'lien_trier_nombre_articles' => 'Ordina per numero di articoli', 'lien_trier_statut' => 'Ordina per status', 'lien_voir_en_ligne' => 'VEDI ON LINE:', - 'logo_article' => 'LOGO DELL’ARTICOLO', # MODIF - 'logo_auteur' => 'LOGO DELL’AUTORE', # MODIF - 'logo_rubrique' => 'LOGO DELLA RUBRICA', # MODIF - 'logo_site' => 'LOGO DI QUESTO SITO ', # MODIF - 'logo_standard_rubrique' => 'LOGO STANDARD DELLE RUBRICHE', # MODIF - 'logo_survol' => 'LOGO ROLLOVER', # MODIF + 'logo_article' => 'Logo dell’articolo', + 'logo_auteur' => 'Logo dell’autrice', + 'logo_rubrique' => 'Logo della rubrica', + 'logo_site' => 'Logo di questo sito', + 'logo_standard_rubrique' => 'Logo standard delle rubriche', + 'logo_survol' => 'Logo rollover', # RELIRE // M 'menu_aide_installation_choix_base' => 'Scegliere il database', @@ -602,7 +534,6 @@ Le traduzioni sono associate all’originale, 'onglet_contenu' => 'Contenuto', 'onglet_declarer_une_autre_base' => 'Dichiarare un altro database', 'onglet_discuter' => 'Discuti', - 'onglet_documents' => 'Documenti', 'onglet_interactivite' => 'Interattività', 'onglet_proprietes' => 'Proprietà', 'onglet_repartition_actuelle' => 'attualmente', @@ -636,7 +567,7 @@ Le traduzioni sono associate all’originale, 'plugin_info_telecharger' => 'da scaricare da @url@ e da installare in @rep@', 'plugin_librairies_installees' => 'Librerie installate', 'plugin_necessite_lib' => 'Questo plug-in richiede la libreria @lib@', - 'plugin_necessite_plugin' => 'Necessita il plug-in @plugin@ con almeno la versione @version@.', + 'plugin_necessite_plugin' => 'Necessita il plug-in @plugin@ con almeno la versione @version@.', # MODIF 'plugin_necessite_spip' => 'Necessita SPIP con almeno la versione @version@.', 'plugin_source' => 'origine: ', 'plugin_titre_automatique' => 'Installazione automatica', @@ -660,16 +591,17 @@ Le traduzioni sono associate all’originale, // R 'repertoire_plugins' => 'Cartella:', + 'required' => '(obbligatorio)', // S 'sans_heure' => 'ora mancante', - 'statut_admin_restreint' => '(ammin parziale)', # MODIF + 'statut_admin_restreint' => 'admin limitato', # RELIRE // T 'taille_cache_image' => 'Le immagini elaborate automaticamente da SPIP (icone dei documenti, titoli in formato grafico, funzioni matematiche in formato TeX...) occupano nella cartella @dir@ in tutto @taille@.', 'taille_cache_infinie' => 'Questo sito non prevede limiti alle dimensioni della cartella della cache.', 'taille_cache_maxi' => 'SPIP tenta di limitare le dimensioni della cartella della cache di questo sito a circa @octets@ di dati.', - 'taille_cache_octets' => 'La cartella della cache occupa attualmente @octets@ su disco.', # MODIF + 'taille_cache_octets' => 'Attualmente la cache è di circa @octets@.', # RELIRE 'taille_cache_vide' => 'La cache è vuota.', 'taille_repertoire_cache' => 'Dimensioni della cartella di cache', 'text_article_propose_publication' => 'Articolo proposto per la pubblicazione. ', @@ -684,16 +616,11 @@ Le traduzioni sono associate all’originale, 'texte_article_virtuel_reference' => 'Articolo virtuale: articolo citato nel tuo sito SPIP, ma reindrizzato verso un’altro URL. Per eliminare il reindirizzamento, cancella l’URL qui sopra.', 'texte_aucun_resultat_auteur' => 'Nessun risultato per "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Questo sito può costantemente visualizzare la lista delle redattrici collegate, permettendo lo scambio di messaggi in tempo reale. Si può però decidere di non comparire in questo elenco (rendendosi quindi «invisibili» alle altre utenti).', - 'texte_auteur_messagerie_1' => 'Questo sito permette lo scambio di messaggi e la costituzione di forum di discussione privati tra le partecipanti al sito. Puoi però decidere di non partecipare a questi scambi.', 'texte_auteurs' => 'LE AUTRICI', 'texte_choix_base_1' => 'Scegli il database:', 'texte_choix_base_2' => 'Il server SQL contiene diversi database.', 'texte_choix_base_3' => 'Seleziona quello che è stato attribuito al tuo dominio:', 'texte_choix_table_prefix' => 'Prefisso delle tabelle:', - 'texte_commande_vider_tables_indexation' => 'Utilizza questo comando per svuotare le tabelle d’incidizzazione utilizzate -dal motore di ricerca integrato di SPIP. Ciò permetterà -di guadagnare spazio sul disco.', - 'texte_compresse_ou_non' => '(può essere compresso o meno)', 'texte_compte_element' => '@count@ elemento', 'texte_compte_elements' => '@count@ elementi', 'texte_conflit_edition_correction' => 'Controllare qui sotto le differenze tra le due versioni del testo; è possibile anche copiare le modifiche e poi ricominciare.', @@ -708,49 +635,35 @@ Serviti dell’elenco qui sotto per indicare quali elementi rendere disponibili. 'texte_date_publication_anterieure' => 'DATA DI REDAZIONE ANTERIORE', 'texte_date_publication_anterieure_nonaffichee' => 'Non visualizzare la data di redazione anteriore.', 'texte_date_publication_article' => 'DATA DI PUBBLICAZIONE:', - 'texte_descriptif_petition' => 'Descrizione della petizione', 'texte_descriptif_rapide' => 'Descrizione rapida', 'texte_effacer_base' => 'Cancella il database SPIP', - 'texte_effacer_donnees_indexation' => 'Cancella i dati d’indicizzazione', 'texte_effacer_statistiques' => 'Cancellare le statistiche', - 'texte_en_cours_validation' => 'Gli articoli e le brevi elencati qui sotto sono proposti per la pubblicazione. ', # MODIF + 'texte_en_cours_validation' => 'I contenuti qui di seguito sono in attesa di validazione. ', # RELIRE 'texte_enrichir_mise_a_jour' => 'Puoi arricchire la formattazione del testo utilizzando le «scorciatoie tipografiche»', - 'texte_fichier_authent' => 'SPIP deve creare i file speciali .htpasswd -e .htpasswd-admin nella cartella @dossier@?

    - Questi file possono servire a limitare l’accesso alle autrici -e alle amministratrici in particolari aree del sito -(per esempio, per un programma esterno di statistiche).

    -Se ciò non è necessario, lasciare quest’opzione -al suo valore predefinito (nessuna creazione -di file).

    ', # MODIF + 'texte_fichier_authent' => 'SPIP deve creare i file speciali +.htpasswd e .htpasswd-admin nella cartella @dossier@ ? +

    Questi file possono servire a limitare l’accesso alle autrici +e alle amministratrici in particolari aree del vostro sito (per esempio, per un programma esterno di statistiche).

    +

    Se ciò non è necessario, lasciare quest’opzione al suo valore predefinito (nessuna creazione +di file).

    ', # RELIRE 'texte_informations_personnelles_1' => 'Il sistema creerà un tuo accesso personalizzato al sito.', - 'texte_informations_personnelles_2' => '(Nota: se si tratta di una reinstallazione, e il tuo accesso funziona ancora, puoi ', # MODIF + 'texte_informations_personnelles_2' => '(Nota : trattandosi di una reinstallazione, se il tuo accesso funziona ancora potete ', # RELIRE 'texte_introductif_article' => 'Testo introduttivo dell’articolo', 'texte_jeu_caractere' => 'Si consiglia di utilizzare sul proprio sito l’alfabeto universale (utf-8): esso permette di visualizzare i testi in tutte le lingue e non pone problemi di compatibilità con i browser moderni.', - 'texte_jeu_caractere_2' => 'Attenzione: questa impostazione non causa la conversione dei testi già registrati nel database.', 'texte_jeu_caractere_3' => 'Il tuo sito usa attualmente il set di caratteri:', 'texte_jeu_caractere_4' => 'Se ciò non corrisponde alla realtà dei propri dati (a causa, per esempio, di un ripristino del database), o se si avvia il sito e si desidera partire con un altro set di caratteri è necessario indicare quest’ultimo qui:', - 'texte_jeu_caractere_conversion' => 'Nota: è possibile decidere di convertire una volta per tutte tutti i testi del sito (articoli, brevi, forum, ecc.) nell’alfabeto utf-8, andando sulla pagina di conversione in utf-8.', - 'texte_lien_hypertexte' => '(Se il tuo messaggio si riferisce ad un articolo pubblicato sul Web, o ad una pagina che fornisce informazioni supplementari, indica il titolo della pagina e il suo indirizzo URL.)', 'texte_login_ldap_1' => '(Lascia vuoto per un accesso anonimo, o inserisci il percorso completo, per esempio «uid=rossi, ou=users, dc=mio-dominio, dc=com ».)', 'texte_login_precaution' => 'Attenzione! Questo è l’ID con il quale sei attualmente collegato. Utilizza questo modulo con cognizione di causa...', - 'texte_message_edit' => 'Attenzione: questo messaggio può essere modificato da tutte le amministratrici del sito, ed è visibile da tutte le redattrici. Utilizza gli annunci solo per esporre degli eventi importanti per la vita del sito.', 'texte_messagerie_agenda' => 'La messageria permette alle redattrici del sito di comunicare tra loro in maniera diretta nell’area riservata. Essa è associata a una agenda.', 'texte_mise_a_niveau_base_1' => 'Hai aggiornato i file SPIP. Adesso è necessario aggiornare il database.', 'texte_modifier_article' => 'Modifica l’articolo:', - 'texte_moteur_recherche_active' => 'Il motore di ricerca è attivato. Utilizza questo commando -se vuoi procedere a una reindicizzazione rapida (dopo il ripristino -di un salvataggio, per esempio). Nota bene: i documenti modificati in modo standard (con l’interfaccia di SPIP) sono automaticamente -reindicizzati. Questo commando, quindi, è utile solo in casi eccezionali.', - 'texte_moteur_recherche_non_active' => 'Il motore di ricerca non è attivato.', - 'texte_multilinguisme' => 'Se desideri gestire gli articoli in diverse lingue, con un sistema di navigazione complesso, è possibile aggiungere un menu di selezione della lingua negli articoli e/o nelle rubriche, in funzione della struttura del sito.', # MODIF - 'texte_multilinguisme_trad' => 'È anche possibile attivare un sistema di gestione dei link fra le diverse traduzioni di un articolo.', # MODIF + 'texte_multilinguisme' => 'Se desideri gestire gli articoli in diverse lingue, con un sistema di navigazione complesso, è possibile aggiungere un menu di selezione della lingua negli articoli e/o nelle rubriche, in funzione della struttura del sito.', # RELIRE + 'texte_multilinguisme_trad' => 'È anche possibile attivare un sistema di gestione di link fra le diverse traduzioni relative ad alcuni elementi.', # RELIRE 'texte_non_compresse' => 'non compresso (il tuo server non supporta questa funzionalità)', - 'texte_nouveau_message' => 'Nuovo messaggio', 'texte_nouvelle_version_spip_1' => 'Hai installato una nuova versione di SPIP.', - 'texte_nouvelle_version_spip_2' => 'Questa nuova versione necessita un aggiornamento più radicale del solito. Se sei la webmistress del sito, cancella il file @connect@ e riprendi l’installazione al fine di aggiornare i parametri di connessione al database.

    (NB: se hai dimenticato i parametri di connessione, rileggi il file @connect@ prima di cancellarlo...)

    ', # MODIF + 'texte_nouvelle_version_spip_2' => 'Questa nuova versione necessita un aggiornamento più radicale del solito. Se sei la webmistress del sito, cancella il file @connect@ e riprendi l’installazione al fine di aggiornare i parametri di connessione al database.

    (NB: se hai dimenticato i parametri di connessione, rileggi il file @connect@ prima di cancellarlo...)

    ', # RELIRE 'texte_operation_echec' => 'Torna alla pagina precedente, seleziona un altro database o creane uno nuovo. Verifica le informazioni fornite dal tuo hoster.', 'texte_plus_trois_car' => 'più di tre caratteri', 'texte_plusieurs_articles' => 'Diversi autori trovati per "@cherche_auteur@":', @@ -763,17 +676,19 @@ una data di pubblicazione impostata nel futuro?', 'texte_rappel_selection_champs' => '[Non dimenticare di impostare correttamente questo campo]', 'texte_recalcul_page' => 'Se vuoi rigenerare una sola pagina, utilizza piuttosto lo spazio pubblico e clicca sul pulsante «rigenera».', - 'texte_recapitiule_liste_documents' => 'Questa pagina mostra l’elenco dei documenti allegati alle rubriche. Per modificare le informazioni di un documento, seguire il link verso la relativa pagina di rubrica.', 'texte_recuperer_base' => 'Ripara il database', 'texte_reference_mais_redirige' => 'articolo catalogato nel tuo sito SPIP, ma con reindirizzamento verso un altro URL.', 'texte_requetes_echouent' => 'Quando alcune query SQL falliscono ripetutamente e senza un chiaro motivo, è possibile -che sia per colpa del database stesso.

    -SQL dispone di una funzione di ripristino delle tabelle -danneggiate inavvertitamente. È possibile tentare il ripristino; -in caso di errore, conservare una copia del messaggio visualizzato, -contenente forse delle informazioni preziose...

    -Se il problema persiste, contattare la webmistress.

    ', # MODIF +che sia per colpa del database +stesso.

    +Il vostro server SQL dispone di una funzione di ripristino delle tabelle +danneggiate +inavvertitamente. È possibile tentare il ripristino; in +caso di errore, conservate una copia del messaggio visualizzato, contenente, +forse, delle informazioni preziose...

    +Se il problema persiste, contattate la vostra +webmistress.

    ', # RELIRE 'texte_selection_langue_principale' => 'Puoi selezionare qui sotto la «lingua predefinita» del sito. Questa scelta non obbliga - fortunatamente! - a scrivere gli articoli nella stessa lingua, ma permette di determinare:
    • il formato di default delle date sul sito pubblico;
    • la tipologia di motore tipografico che SPIP deve utilizzare per la resa del testo;
    • @@ -788,7 +703,6 @@ Se il problema persiste, contattare la webmistress.

      ', # MODIF cache di SPIP. Ciò permette ad esempio di forzare la rigenerazione di tutte le pagine se hai fatto delle importanti modifiche di grafica o di struttura del sito.', 'texte_sur_titre' => 'Occhiello', 'texte_table_ok' => ': questa tabella è OK.', - 'texte_tables_indexation_vides' => 'Le tabelle d’indicizzazione del motore sono vuote.', 'texte_tentative_recuperation' => 'Tentativo di ripristino', 'texte_tenter_reparation' => 'Tenta un ripristino del database', 'texte_test_proxy' => 'Per fare una prova di questo proxy, indicare qui l’indirizzo @@ -801,22 +715,8 @@ il sistema può segnalare gli articoli «aperti» di recente al fine di evitare modifiche simultanee. Questa opzione è disattivata di default per evitare di generare messaggi d’avvertimento intempestivi.', - 'texte_trop_resultats_auteurs' => 'Troppi risultati per "@cherche_auteur@"; restringi la ricerca.', - 'texte_unpack' => 'scarica l’ultima versione', - 'texte_utilisation_moteur_syndiques' => 'Quando utilizzi il motore di ricerca integrato di SPIP, -puoi effettuare le ricerche sui siti e -gli articoli in syndication -in due modalità diverse.
      - La più semplice -consiste nel ricercare solo nei titoli e nelle descrizioni degli articoli.
      - -Un altro metodo, molto più potente, consente -a SPIP di cercare anche nel testo degli articoli in syndication. -Se inserisci un sito nel repertorio, SPIP effettuerà la ricerca anche nel testo del sito stesso.', - 'texte_utilisation_moteur_syndiques_2' => 'Questo metodo obbliga SPIP a visitare -regolarmente i siti in repertorio; -in tal caso si può verificare un leggero rallentamento del tuo sito.', 'texte_vide' => 'vuoto', 'texte_vider_cache' => 'Svuota la cache', - 'titre_admin_effacer' => 'Manutenzione tecnica', 'titre_admin_tech' => 'Manutenzione tecnica', 'titre_admin_vider' => 'Manutenzione tecnica', 'titre_cadre_afficher_article' => 'Visualizza gli articoli', @@ -833,62 +733,35 @@ in tal caso si può verificare un leggero rallentamento del tuo sito.', 'titre_conflit_edition' => 'Conflitto all’atto dell’edizione', 'titre_connexion_ldap' => 'Opzioni: La connessione LDAP', 'titre_groupe_mots' => 'GRUPPO DI PAROLE CHIAVE:', - 'titre_langue_article' => 'LINGUA DELL’ARTICOLO', # MODIF - 'titre_langue_rubrique' => 'LINGUA DELLA RUBRICA', # MODIF + 'titre_langue_article' => 'Lingua dell’articolo', + 'titre_langue_rubrique' => 'Lingua della rubrica', 'titre_langue_trad_article' => 'LINGUA E TRADUZIONI DELL’ARTICOLO', 'titre_les_articles' => 'GLI ARTICOLI', 'titre_messagerie_agenda' => 'Messagistica e agenda', 'titre_naviguer_dans_le_site' => 'Navigare nel sito...', 'titre_nouvelle_rubrique' => 'Nuova rubrica', 'titre_numero_rubrique' => 'RUBRICA NUMERO:', - 'titre_page_admin_effacer' => 'Manutenzione tecnica: svuota il database', 'titre_page_articles_edit' => 'Modifica: @titre@', 'titre_page_articles_page' => 'Gli articoli', 'titre_page_articles_tous' => 'Tutto il sito', - 'titre_page_auteurs' => 'Visitatori', 'titre_page_calendrier' => 'Calendario @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Configurazione del sito', - 'titre_page_config_fonctions' => 'Configurazione del sito', - 'titre_page_configuration' => 'Configurazione del sito', - 'titre_page_controle_petition' => 'Monitoraggio delle petizioni', 'titre_page_delete_all' => 'eliminazione totale e irreversible', - 'titre_page_documents_liste' => 'I documenti delle rubriche', - 'titre_page_index' => 'Area riservata', - 'titre_page_message_edit' => 'Scrivere un messaggio', - 'titre_page_messagerie' => 'I tuoi messaggi', 'titre_page_recherche' => 'Risultati della ricerca @recherche@', 'titre_page_statistiques_referers' => 'Statistiche (link al tuo sito)', - 'titre_page_statistiques_signatures_jour' => 'Numero di firme al giorno', - 'titre_page_statistiques_signatures_mois' => 'Numero di firme al mese', 'titre_page_upgrade' => 'Aggiornamento di SPIP', 'titre_publication_articles_post_dates' => 'Pubblicazione di articoli postdatati', - 'titre_referencer_site' => 'Inserire il sito in repertorio:', - 'titre_rendez_vous' => 'APPUNTAMENTO:', 'titre_reparation' => 'Riparazione', 'titre_suivi_petition' => 'Monitoraggio delle petizioni', 'tls_ldap' => 'Transport Layer Security:', - 'trad_article_inexistant' => 'Non esiste un articolo con questo numero.', 'trad_article_traduction' => 'Tutte le versioni di questo articolo:', - 'trad_deja_traduit' => 'Errore: non è possibile collegare questo articolo al numero richiesto.', - 'trad_delier' => 'Non collegare più questo articolo alle sue traduzioni', # MODIF + 'trad_delier' => 'Non collegare più a queste traduzioni', # RELIRE 'trad_lier' => 'Questo articolo è una traduzione dell’articolo numero:', - 'trad_new' => 'Scrivere una nuova traduzione dell’articolo', # MODIF + 'trad_new' => 'Scrivere una nuova traduzione', // U - 'upload_info_mode_document' => 'Mettere questa immagine nel portfolio', - 'upload_info_mode_image' => 'Eliminare questa immagine dal portfolio', - 'utf8_convert_attendez' => 'Attendi qualche secondo e aggiorna la pagina.', - 'utf8_convert_avertissement' => 'Stai per convertire il contenuto del proprio database (articoli, brevi, ecc.) dal set di caratteri @orig@ al set di caratteri @charset@.', - 'utf8_convert_backup' => 'Non dimenticare di fare prima un backup completo del sito. Inoltre si deve verificare che i modelli e i file lingua sono compatibili @charset@.', - 'utf8_convert_erreur_deja' => 'Il tuo sito è già in @charset@, è inutile convertirlo...', 'utf8_convert_erreur_orig' => 'Errore: il set di caratteri @charset@ non è supportato.', - 'utf8_convert_termine' => 'Finito!', - 'utf8_convert_timeout' => 'Importante: in caso di timeout del server, aggiorna la pagina fino a che non si ottiene il messaggio « finito ».', - 'utf8_convert_verifier' => 'Ora è necessario svuotale la cache e verificare che non vi siano problemi sulle pagine pubbliche del sito. In caso di problemi gravi è stato effettuato un backup dei dati (in formato SQL) nella cartella @rep@.', - 'utf8_convertir_votre_site' => 'Convertire il sito in UTF-8', // V 'version' => 'Versione:' ); - -?> diff --git a/www/ecrire/lang/ecrire_ja.php b/www/ecrire/lang/ecrire_ja.php index 1b0e6e93..240c4670 100644 --- a/www/ecrire/lang/ecrire_ja.php +++ b/www/ecrire/lang/ecrire_ja.php @@ -1,9 +1,11 @@ '前のページに戻って、与えられている情報を確認してください。', 'avis_connexion_ldap_echec_3' => '交代でLDAPサポートをユーザのインポートのために利用しないでください。', 'avis_deplacement_rubrique' => '注意! この項目は、 @contient_breves@ 件のニュースを含んでいます: それを移動する場合は、確認のためこのボックスにチェックを入れてください。', - 'avis_destinataire_obligatoire' => 'メッセージを送信するには、受取人を選択してください。', 'avis_erreur_connexion_mysql' => 'SQL接続のエラーです。', - 'avis_erreur_version_archive' => '注意! @archive@ ファイルは -あなたのお手元のSPIPとは異なるバージョンのSPIPに対応するものです。このままですと、データベースの破壊や -いくつかのサイトに関する機能不全といった -深刻な問題に行き当たることになります。 -このインポートはリクエストしないでください。

      詳細は、 - -SPIPドキュメントをご覧ください。

      ', # MODIF - 'avis_espace_interdit' => '許されないエリア

      SPIPが既にインストールされています。', + 'avis_espace_interdit' => '許されないエリア

      SPIPが既にインストールされています。', # MODIF 'avis_lecture_noms_bases_1' => 'インストールプログラムは、インストールされたデータベースの名前を読むことが出来ませんでした。', 'avis_lecture_noms_bases_2' => 'ベースが有効でないか、ベースリストを許可する機能がアクティブではありませんでした。 これはセキュリティ上の理由によります(多くのホスティングによくみられるものです)。', 'avis_lecture_noms_bases_3' => '二つ目の選択において、あなたのログイン名を含むデータベースが利用可能なようです :', - 'avis_non_acces_message' => 'このメッセージにはアクセスしていません。', 'avis_non_acces_page' => 'このページにはアクセスしていません。', 'avis_operation_echec' => '操作に失敗しました。', - 'avis_probleme_archive' => '@archive@ ファイルの読み込みに問題があります。', 'avis_suppression_base' => '注意!データ消去します。復旧出来ません。', - 'avis_version_mysql' => 'あなたのSQLのバージョン (@version_mysql@) は、データベーステーブルの自動修復が不可能です。', // B 'bouton_acces_ldap' => 'LDAPへのアクセスを追加 >>', 'bouton_ajouter' => '追加する', - 'bouton_ajouter_participant' => '関係するものを追加:', - 'bouton_annonce' => 'アナウンス', - 'bouton_checkbox_envoi_message' => 'メッセージが送れるようにする', - 'bouton_checkbox_indiquer_site' => 'ウェブサイトを必須入力にする', - 'bouton_checkbox_signature_unique_email' => 'メールアドレス1つにつき、1署名まで', - 'bouton_checkbox_signature_unique_site' => 'ウェブサイト1つにつき、1署名まで', 'bouton_demande_publication' => 'この記事の公開を要求する', 'bouton_desactive_tout' => 'すべて無効', - 'bouton_effacer_index' => 'インデックスの削除', 'bouton_effacer_tout' => 'すべての削除', - 'bouton_envoi_message_02' => 'メッセージを送る', 'bouton_envoyer_message' => '最後のメッセージ: 送る', 'bouton_modifier' => '修正', - 'bouton_pense_bete' => '個人的なメモ', - 'bouton_radio_activer_messagerie' => '内部でのメッセージ交換を可能にする', - 'bouton_radio_activer_messagerie_interne' => '内部でのメッセージ交換を可能にする', - 'bouton_radio_activer_petition' => '署名機能を使う', 'bouton_radio_afficher' => '表示', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => '接続中に接続中エディターのリストに表示', - 'bouton_radio_desactiver_messagerie' => 'メッセージ交換を不能にする', 'bouton_radio_envoi_annonces_adresse' => 'アナウンスを送信するアドレス:', 'bouton_radio_envoi_liste_nouveautes' => '最新のニュースリストを送る', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => '接続中のエディターズのリストに表示しない', 'bouton_radio_non_envoi_annonces_editoriales' => '編集の発表を送らない', - 'bouton_radio_pas_petition' => '署名機能なし', - 'bouton_radio_petition_activee' => '署名機能を使用中', - 'bouton_radio_supprimer_petition' => '署名機能を無効にする', 'bouton_redirection' => 'リダイレクト', 'bouton_relancer_installation' => 'インストレーションを再起動', 'bouton_suivant' => '次', 'bouton_tenter_recuperation' => '修復を試みる', 'bouton_test_proxy' => 'プロキシーをテスト', 'bouton_vider_cache' => 'システムキャッシュを空にする', - 'bouton_voir_message' => '承認前にメッセージを再度表示する', // C - 'cache_mode_compresse' => 'キャッシュファイルは圧縮して保存されました。', - 'cache_mode_non_compresse' => 'キャッシュファイルは未圧縮で保存されました。', 'cache_modifiable_webmestre' => 'これらのパラメータはwebmasterによって修正できます。', 'calendrier_synchro' => 'iCalと互換性のある日記アプリケーションを使っているなら、それとこのサイトの情報を同調(シンクロ)することが出来ます。', @@ -110,7 +82,6 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'entree_login' => 'あなたのログインID', 'entree_login_connexion_1' => '接続するログインID', 'entree_login_connexion_2' => '(あなたのFTP用のログインIDと同じときもあれば空欄のときもあります)', - 'entree_login_ldap' => '最初のLDAPのログインID', 'entree_mot_passe' => 'パスワード', 'entree_mot_passe_1' => '接続パスワード', 'entree_mot_passe_2' => '(あなたのFTP用のパスワードと同じときもあれば空欄のときもあります)', @@ -131,7 +102,7 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'ical_info2' => 'さらに情報が欲しい場合、躊躇せずに、SPIP’sドキュメントを訪れてください。', # MODIF 'ical_info_calendrier' => 'あなたは2種類のカレンダーが自由に使えます。1つめはすべての公開された記事を示すサイトマップです。2つめは編集中のアナウンスに加え、あなたの最新のプライベートメッセージも含んでいます: URL中に含まれる個人のキーはあなたの為に確保してあり、あなたのパスワードを新しくすることでいつでも変更することができます。', 'ical_methode_http' => 'ダウンロードする', - 'ical_methode_webcal' => '同調(シンクロ)する (webcal://)', + 'ical_methode_webcal' => '同調(シンクロ)する (webcal://)', # MODIF 'ical_texte_js' => 'このサイトで出版された最新記事を、あなたの管理しているどんなサイトでもとても簡単に、たった1行のjavascriptで表示することが出来ます。', 'ical_texte_prive' => 'このカレンダーは完全に個人用で、このサイトのあなたのプライベートの編集活動を知らせます(仕事、個人的な約束、提出された記事とニュース...)。', 'ical_texte_public' => 'このカレンダーは、あなたがこのサイト(公開された記事とニュース)のパブリックな活動を理解するのを手伝います。', @@ -147,9 +118,7 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'icone_creer_auteur' => '新しい著者を作って、彼をこの記事に参加させる。', 'icone_creer_mot_cle' => '新しいキーワードと、この記事へのリンクを作る', 'icone_creer_rubrique_2' => '新しいセクションを作る', - 'icone_envoyer_message' => 'このメッセージを送る', 'icone_modifier_article' => 'この記事を修正', - 'icone_modifier_message' => 'このメッセージを修正', 'icone_modifier_rubrique' => 'このセクションを修正', 'icone_retour' => '戻る', 'icone_retour_article' => '記事に戻る', @@ -159,11 +128,8 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'icone_valider_signature' => 'この署名を確認', 'image_administrer_rubrique' => 'あなたはこのセクションを管理することができる', 'info_1_article' => '1記事', - 'info_1_site' => '1 サイト', 'info_activer_cookie' => '管理者用クッキーを使うことが出来ます。 それによって パブリックなサイトとプライベートエリアの切替が簡単に出来ます。', - 'info_admin_gere_rubriques' => 'この管理者は下記のセクションを管理:', - 'info_admin_gere_toutes_rubriques' => 'この管理者はすべてのセクションを管理。', # MODIF 'info_administrateur' => '管理者', 'info_administrateur_1' => '管理者', 'info_administrateur_2' => 'サイトについて(注意して使って)', @@ -173,16 +139,13 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'info_administrer_rubrique' => 'あなたはこのセクションを管理することができる', 'info_adresse' => 'そのアドレスへ:', 'info_adresse_url' => 'あなたの公開サイトのURL', - 'info_afficher_visites' => '訪問者の表示:', 'info_aide_en_ligne' => 'SPIPオンラインヘルプ', 'info_ajout_image' => '記事に添付書類として画像イメージを付け加えるとき、 SPIPは自動的にヴィニェット<半身像・ロゴなど>(サムネイル)を 挿入された画像から作成します。 これにより例えば ギャラリーやポートフォリオの自動作成を可能にします。', - 'info_ajout_participant' => '次の関係者は加えられた:', 'info_ajouter_rubrique' => '管理する他のセクションを追加:', 'info_annonce_nouveautes' => '最新のニュースアナウンス', - 'info_anterieur' => '前候補', 'info_article' => '記事', 'info_article_2' => '記事', 'info_article_a_paraitre' => '公開されている記事の投稿日付', @@ -190,10 +153,8 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'info_articles_2' => '記事', 'info_articles_auteur' => 'この著者の記事', 'info_articles_trouves' => '記事が見つかりました', - 'info_articles_trouves_dans_texte' => '記事が見つかりました(文中)', 'info_attente_validation' => '適性検査前のあなたの記事', 'info_aujourdhui' => '今日:', - 'info_auteur_message' => '差出人:', 'info_auteurs' => '著者たち', 'info_auteurs_par_tri' => '著者@partri@', 'info_auteurs_trouves' => '見つかった著者たち', @@ -226,15 +187,12 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'info_date_publication_anterieure' => '公表時の日付:', 'info_date_referencement' => 'このサイトを参照した日付 :', 'info_derniere_etape' => '最後のステップ: 終わりました!', - 'info_derniers_articles_publies' => 'あなたの最近公開された記事', - 'info_desactiver_messagerie_personnelle' => 'あなたはこのサイト上で個人的なメッセージ交換を、するかしないか決められます。', 'info_descriptif' => '記述:', 'info_discussion_cours' => '進行中の討論', 'info_ecrire_article' => '記事を書く前に、あなたは最低1つのセクションを作らなければなりません。', 'info_email_envoi' => '送り主のe-mailアドレス(任意)', 'info_email_envoi_txt' => 'e-mailを送るのに使っている送り主のe-mailアドレスを入力してください(デフォルトで、受信者のアドレスは送信者のアドレスが入力してあります :', 'info_email_webmestre' => 'ウェブマスターのe-mailアドレス(任意)', # MODIF - 'info_entrer_code_alphabet' => '使っている文字セットのコードを入力してください:', 'info_envoi_email_automatique' => 'メールを自動送信', 'info_envoyer_maintenant' => '今送る', 'info_etape_suivante' => '次のステップに進む', @@ -244,25 +202,17 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'info_facilite_suivi_activite' => 'サイトでの編集活動のお手伝いのために、SPIPは記事公開要求、適性検査の結果など、メールで自動送信することが出来ます。(例えばメーリングリストなど)', 'info_fichiers_authent' => '認証ファイル ".htpasswd"', 'info_forums_abo_invites' => 'あなたのサイトはサブスクリプションのための掲示板を持っています; 訪問者達はパブリックなサイトでそれらのために登録するかもしれません。', - 'info_gauche_admin_effacer' => '管理者のみがこのページにアクセス出来る。

      そのページはさまざまな技術的メンテナンスのための手順を提供します。いくらかの手順では同WEBサイトへのFTPアクセスによる特別な認証手順が必要です。

      ', # MODIF 'info_gauche_admin_tech' => '管理者のみがこのページにアクセス出来る。

      そのページはさまざまな技術的メンテナンスのための手順を提供します。いくらかの手順では同WEBサイトへのFTPアクセスによる特別な認証手順が必要です。

      ', # MODIF 'info_gauche_admin_vider' => 'このページは管理者のみアクセス出来ます。

      このページはいろいろなメンテナンスの手順を提供します。いくつかの手順は同WEBサイトへのアクセスによる特別な認証を必要とします。

      ', # MODIF 'info_gauche_auteurs' => 'あなたはサイトの著者たちすべてをここで見つけることができます。 それぞれの状態はアイコンの色によって示されています(管理者 = 緑; エディター = 黄色)。', 'info_gauche_auteurs_exterieurs' => '外部の著者たち、サイトへのどんなアクセスもない、は青いアイコンで示されています; また、削除された著者たちはゴミ箱です。', # MODIF 'info_gauche_messagerie' => 'メッセージ交換はエディター同士でのメッセージの交換を可能にします、保護されたメモ(あなたの私用向け)または、プライベートエリアのホームページのアナウンスを示す(あなたが管理者の場合)。', - 'info_gauche_numero_auteur' => '著者番号', 'info_gauche_statistiques_referers' => 'このページはreferrersのリストを表示します。つまり昨日と今日の間、あなたのサイトへのリンクを含んだサイト:実際にこのリストは24時間ごとに初期化されています。', 'info_gauche_visiteurs_enregistres' => 'ここでサイトのパブリックなエリアで登録された訪問者たちを探せるでしょう(寄付による掲示板)。', 'info_generation_miniatures_images' => '画像のサムネイルを生成', - 'info_gerer_trad' => '翻訳版同士リンクし合いますか?', 'info_hebergeur_desactiver_envoi_email' => '若干のホストでは、それらサーバー上から自動的にメールを送ることが出来ません。そういう場合、SPIPの次の機能は実施できません。', 'info_hier' => '昨日:', - 'info_historique_activer' => 'リビジョン(修正点)の表示を有効にする', - 'info_historique_affiche' => 'このバージョンを表示', - 'info_historique_comparaison' => '比較', - 'info_historique_desactiver' => 'リビジョン(改訂)の表示を無効化する', - 'info_historique_texte' => '改訂(リビジョン)の追跡で、あなたが記事のすべての変更を記録・追跡することが可能になります。前後バージョンとの記事の変更点を表示することができます。', 'info_identification_publique' => 'あなたの公開ID...', 'info_image_process' => 'ミニチュアを作る最も良い方法を、対応する写真の上を、クリックして選んでください。', 'info_image_process2' => '付記 もし画像を見ることが出来なかったら、あなたのサーバーではソフトが使えるように設定してありません。もしあなたがそれらの機能を使いたいなら、プロバイダの技術サポートに«GD»か«Imagick»拡張をインストールしてもらって下さい。', # MODIF @@ -280,8 +230,6 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'info_login_trop_court' => 'ログインIDが短すぎます。', 'info_maximum' => '最大:', 'info_meme_rubrique' => '同じセクションで', - 'info_message' => 'メッセージ from', - 'info_message_efface' => 'メッセージは削除された', 'info_message_en_redaction' => '進行中のあなたのメッセージ', 'info_message_technique' => '技術的なメッセージ:', 'info_messagerie_interne' => '内部のメッセージ交換', @@ -293,19 +241,14 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'info_modifier_rubrique' => '修正するセクション:', 'info_modifier_titre' => '修正: @titre@', 'info_mon_site_spip' => '私のSPIPのサイト', - 'info_mot_sans_groupe' => '(グループを除いたキーワード...)', - 'info_moteur_recherche' => '検索エンジンを結合した', 'info_moyenne' => '平均:', - 'info_multi_articles' => '記事用に言語選択メニューを有効にしますか?', 'info_multi_cet_article' => 'この記事の言語:', 'info_multi_langues_choisies' => 'あなたのサイトのエディターが利用できる言語を下で選んでください。もうすでにあなたのサイト内で(リストの上で)使われている言語は無効に出来ません。', - 'info_multi_rubriques' => 'セクション用にに言語選択メニューを有効にしますか?', 'info_multi_secteurs' => '... ルート(一番上のフォルダ)にあるセクションだけ有効にしますか?', 'info_nom' => '名前', 'info_nom_destinataire' => '受取人の名前', 'info_nom_site' => 'HPの名前', 'info_nombre_articles' => '@nb_articles@ 記事、', - 'info_nombre_partcipants' => '討論の参加者:', 'info_nombre_rubriques' => '@nb_rubriques@ セクション、', 'info_nombre_sites' => '@nb_sites@サイト、', 'info_non_deplacer' => '動かさないで...', @@ -315,36 +258,26 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'info_non_modifiable' => '変更できない', 'info_non_suppression_mot_cle' => '私はこのキーワードを削除することを望みません。', 'info_notes' => '補足', - 'info_nouveaux_message' => '新しいメッセージ', 'info_nouvel_article' => '新しい記事', 'info_nouvelle_traduction' => '新しい翻訳:', 'info_numero_article' => '記事番号:', 'info_obligatoire_02' => '[要求した]', # MODIF 'info_option_accepter_visiteurs' => 'パブリックなサイトからの訪問者の登録を許可', - 'info_option_faire_suivre' => '記事の著者たちへ掲示板のメッセージを送る', 'info_option_ne_pas_accepter_visiteurs' => '訪問者の登録を断る', 'info_options_avancees' => '拡張オプション', - 'info_ortho_activer' => 'スペルチェッカーを有効にする', - 'info_ortho_desactiver' => 'スペルチェッカーを無効にする。', 'info_ou' => '又は...', 'info_page_interdite' => '禁じられたページ', 'info_par_nombre_article' => '(記事の数によって)', 'info_passe_trop_court' => 'パスワードが短すぎます。', 'info_passes_identiques' => 'その二つのパスワードは同一でない。', - 'info_pense_bete_ancien' => 'あなたの古いメモ類', # MODIF 'info_plus_cinq_car' => '6文字以上', 'info_plus_cinq_car_2' => '(6文字以上)', 'info_plus_trois_car' => '(4文字以上)', 'info_popularite' => '人気度: @popularite@; 訪問者: @visites@', - 'info_popularite_4' => '人気度: @popularite@; 訪問者: @visites@', 'info_post_scriptum' => 'Postscript', 'info_post_scriptum_2' => 'Postscript:', 'info_pour' => 'for', - 'info_preview_admin' => '管理者のみ、プレビューモードへアクセス出来る', - 'info_preview_comite' => 'すべての編集者がプレビューモードへアクセス出来る', - 'info_preview_desactive' => 'プレビューモードは使用不能', - 'info_preview_texte' => '(少なくとも"提出中"状態の)すべての記事とニュースを公表した時どのように見えるか試しに見ることが出来ます。このプレビューモードは管理人だけに限定するか、すべての編集者に開放するか、完全に無効にすることが出来ます。', - 'info_principaux_correspondants' => 'あなたの主な通信者', + 'info_preview_texte' => '(少なくとも"提出中"状態の)すべての記事とニュースを公表した時どのように見えるか試しに見ることが出来ます。このプレビューモードは管理人だけに限定するか、すべての編集者に開放するか、完全に無効にすることが出来ます。', # MODIF 'info_procedez_par_etape' => 'どうかステップbyステップで進んでください', 'info_procedure_maj_version' => '新しいバージョンのSPIPに順応させるために、データベースをアップグレードするべきです。', 'info_ps' => 'P.S.', @@ -352,13 +285,8 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'info_publies' => 'オンラインに公開されたあなたの記事', 'info_question_accepter_visiteurs' => 'もしあなたのサイトのテンプレートが、プライベートエリアに入らないで登録する訪問者たちを許すなら、次のオプションを有効にしてください:', 'info_question_inscription_nouveaux_redacteurs' => '公開されているサイトで新しいエディターの登録を募りますか? 許可した場合、訪問者たちはフォームから自動で登録でき、プライベートエリアにアクセスし自分の記事を提出できます。
      登録作業中に、ユーザーは自動的に送信されるプライベートエリアへのIDとパスワードを記したe-mailを受け取ります。若干のホストでは、それらサーバー上からメールが送れない場合があります:そういう場合、自動登録を実施できません。', # MODIF - 'info_question_utilisation_moteur_recherche' => 'SPIPに結合された検索エンジンを使いたいですか? - (無効にするとシステムが早くなります。)', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'サイトのルート', 'info_recharger_page' => 'ちょっとしてからこのページを再読込してください。', - 'info_recherche_auteur_a_affiner' => '"@cherche_auteur@"の検索結果が多すぎます; もうちょっとキーワードをひねって検索して下さい。', - 'info_recherche_auteur_ok' => '"@cherche_auteur@"に対するエディターが幾人か見つかりました:', 'info_recherche_auteur_zero' => '"@cherche_auteur@"は何も見つかりませんでした。', 'info_recommencer' => 'もう一度挑戦してみて下さい。', 'info_redacteur_1' => '編集者', @@ -375,7 +303,6 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'info_rubriques' => 'セクション', 'info_rubriques_02' => 'セクション', 'info_rubriques_trouvees' => '見つかったセクション', - 'info_rubriques_trouvees_dans_texte' => '見つかったセクション(文中)', 'info_sans_titre' => '無名', 'info_selection_chemin_acces' => '下を選択 ディレクトリのアクセスパス:', 'info_signatures' => '署名', @@ -388,12 +315,10 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'info_sites_lies_mot' => '参照されたサイトをこのキーワードと関連付ける', 'info_sites_proxy' => 'プロキシを使う', 'info_sites_trouves' => '見つかったサイト', - 'info_sites_trouves_dans_texte' => '見つかったサイト(文中)', 'info_sous_titre' => 'サブタイトル:', 'info_statut_administrateur' => '管理者', 'info_statut_auteur' => 'この著者の状態:', # MODIF 'info_statut_auteur_autre' => 'その他の状態:', - 'info_statut_efface' => '削除', 'info_statut_redacteur' => 'エディター', 'info_statut_utilisateurs_1' => '読み込まれたユーザーの標準の状態', 'info_statut_utilisateurs_2' => '始めて接続したときにLDAPディレクトリに存在・属している人たちの状態を選択してください。後で、それぞれの著者ごとにケースバイケースで値を変更できます。', @@ -411,7 +336,6 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'info_tous_articles_en_redaction' => '進行中のすべての記事', 'info_tous_articles_presents' => 'このセクションに出版したすべての記事', 'info_tous_les' => 'すべて:', - 'info_tous_redacteurs' => 'すべてのエディターへのアナウンス', 'info_tout_site' => '全サイト', 'info_tout_site2' => '記事はこの言語へ翻訳されていません。', 'info_tout_site3' => '記事はこの言語へ翻訳されていますが、いくつかの別言語版に、その後入力がなされました。翻訳のアップデートを要求します。', @@ -426,7 +350,6 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'info_une_rubrique' => '1つのセクション、', 'info_une_rubrique_02' => '1セクション', 'info_url' => 'URL:', - 'info_url_site' => 'サイトのURL:', 'info_urlref' => 'リンク:', 'info_utilisation_spip' => 'SPIPが使えるように準備中...', 'info_visites_par_mois' => '月単位で表示:', @@ -443,15 +366,12 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'item_activer_messages_avertissement' => '警告メッセージを作動させる', 'item_administrateur_2' => '管理者', 'item_afficher_calendrier' => 'カレンダーに表示', - 'item_autoriser_documents_joints' => 'ドキュメントが記事に結びつくのを許可する', - 'item_autoriser_documents_joints_rubriques' => 'セクション内のドキュメントを許可する', 'item_choix_administrateurs' => '管理者たち', 'item_choix_generation_miniature' => '自動的に画像のサムネイルを作る。', 'item_choix_non_generation_miniature' => '画像のサムネイルを作らない。', 'item_choix_redacteurs' => 'エディターズ', 'item_choix_visiteurs' => 'パブリックなサイトの訪問者', 'item_creer_fichiers_authent' => '.htpasswdファイルを作る', - 'item_limiter_recherche' => 'あなたのサイトに含まれている情報に検索を制限する', 'item_login' => 'ログインID', 'item_mots_cles_association_articles' => '記事', 'item_mots_cles_association_rubriques' => 'セクション', @@ -460,34 +380,24 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'item_non_accepter_inscriptions' => '登録を許可しない', 'item_non_activer_messages_avertissement' => '警告メッセージを表示しない', 'item_non_afficher_calendrier' => 'カレンダー上に表示しない', - 'item_non_autoriser_documents_joints' => '記事内のドキュメントを許可しない', - 'item_non_autoriser_documents_joints_rubriques' => 'セクション内のドキュメントを許可しない', 'item_non_creer_fichiers_authent' => 'それらファイルを作らない', - 'item_non_gerer_statistiques' => '統計を管理しない', - 'item_non_limiter_recherche' => '参照しているサイトの内容へ検索を拡張する', 'item_non_publier_articles' => 'それらの公開日付前に記事を公表しない。', - 'item_non_utiliser_moteur_recherche' => 'エンジンを使わない', 'item_nouvel_auteur' => '新しい著者', 'item_nouvelle_rubrique' => '新しいセクション', 'item_oui' => 'はい', 'item_publier_articles' => 'それらの発表日時を無視して記事を公表する。', 'item_reponse_article' => '記事に返信', - 'item_utiliser_moteur_recherche' => '検索エンジンを使う', 'item_visiteur' => '訪問者', // J 'jour_non_connu_nc' => '未定義', // L - 'lien_ajout_destinataire' => 'この受取人を追加', 'lien_ajouter_auteur' => 'この著者を追加', - 'lien_ajouter_participant' => '関係者を追加', 'lien_email' => 'e-mail', 'lien_nom_site' => 'サイトの名前:', 'lien_retirer_auteur' => '著者を削除', - 'lien_retrait_particpant' => 'この関係者を削除', 'lien_site' => 'サイト', - 'lien_supprimer_rubrique' => 'このセクションを削除', 'lien_tout_deplier' => 'すべて拡張', 'lien_tout_replier' => 'すべて壊す', 'lien_trier_nom' => '名前でソート', @@ -513,6 +423,9 @@ SPIPドキュメントをご覧ください。

      ', # MODIF // O 'onglet_repartition_actuelle' => '今', + // R + 'required' => '[要求した]', # MODIF + // S 'statut_admin_restreint' => '(限定された管理者)', # MODIF @@ -534,13 +447,10 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'texte_article_virtuel_reference' => '仮想記事: あなたのSPIPサイト内の記事を参照しているが、ほかのURLへとリダイレクトしている。リダイレクションを削除するには上のURLを削除して下さい。', 'texte_aucun_resultat_auteur' => '"@cherche_auteur@"は見つかりませんでした。', 'texte_auteur_messagerie' => 'このサイトはリアルタイムでメッセージ交換できるように、接続中のエディターのリストを絶えず表示することが出来ます。このリストに表れないようにも出来ます。(そうすると、他の著者たちには" 見えません ")。', - 'texte_auteur_messagerie_1' => 'このサイトはメッセージ交換やサイトの参加者と関係者用の掲示板を作ることができます。あなたはこの交換に参加しないようにも設定出来ます。', 'texte_auteurs' => '著者たち', 'texte_choix_base_1' => 'あなたのデータベースの選択:', 'texte_choix_base_2' => 'SQLサーバーはいくつかのデータベースを含んでいます。', 'texte_choix_base_3' => 'あなたのホストがあなたに割り当てたものを下から1つ選んで下さい:', - 'texte_commande_vider_tables_indexation' => 'この手順を使うとSPIPに結合された検索エンジンが使っているインデックステーブルが空になります。いくらかのディスクが空くことでしょう。', - 'texte_compresse_ou_non' => '(これが圧縮できなかったか、違う)', 'texte_compte_element' => '@count@ 要素', 'texte_compte_elements' => '@count@ 要素', 'texte_connexion_mysql' => 'あなたのホストからあなたに提供されている情報を参照して下さい: もしあなたのホストがSQL、SQLサーバーへの接続コードをサポートするなら、それはあなたを与えるべきです。', # MODIF @@ -552,10 +462,8 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'texte_date_publication_anterieure' => '公開前の日付:', 'texte_date_publication_anterieure_nonaffichee' => '公表前の日時を隠す。', 'texte_date_publication_article' => 'オンラインに公表された日時:', - 'texte_descriptif_petition' => '署名内容の説明', 'texte_descriptif_rapide' => '短い記述', 'texte_effacer_base' => 'SPIPデータベースを削除', - 'texte_effacer_donnees_indexation' => 'インデックスデータを削除', 'texte_en_cours_validation' => '次の記事およびニュースは公表するために送られました。それらの掲示板を通してあなたの意見を述べることを、どうぞためらわないでください。', # MODIF 'texte_enrichir_mise_a_jour' => 'あなたは、«印刷上のショートカット»を使うことによってあなたの文章のレイアウトを豊かにすることができます。', 'texte_fichier_authent' => 'SPIPは.ecrire/data/フォルダ内に.htpasswdファイルと.htpasswd-adminファイルを作るべきですか?

      それらのファイルであなたのサイトの他の部分で、著者たちと管理者に限定したアクセスを使うことが出来ます。(例えば、外部の統計プログラムとか)。

      @@ -564,21 +472,15 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'texte_informations_personnelles_2' => '(メモ: もしそれが再インストールであり、そしてあなたのアクセスがまだ機能しているなら、あなたは', # MODIF 'texte_introductif_article' => '(記事の紹介文章。)', 'texte_jeu_caractere' => 'このオプションはあなたのサイトがローマ字(«western»)とその派生物以外の文字セット(日本語など)を表示する場合に使用すると便利です。そういう場合、自分にあった文字コード(文字の設定)に変えなければいけません。とにかく、私たちは正しいのを探すために違うのを試してみることを勧めします。もしこの設定を変更したなら、忘れずに#CHARSETタグにあわせて公開しているサイトを変更してください。', - 'texte_jeu_caractere_2' => 'この設定はさかのぼって有効にはなりません。したがって、この設定を変更した後、文章が文字化けする可能性があります。いずれにしても、あなたはいつでも前の設定に戻すことが出来ます。', - 'texte_lien_hypertexte' => '(もしあなたのメッセージがウェブに公開されている記事か、さらなる情報を提供しているページへリンクしている場合、ここにページのタイトルとURLを入力してください。)', 'texte_login_ldap_1' => '(匿名アクセスのために空状態にしておくか、完全なパスを入力、例えば、«uid=smith, ou=users, dc=my-domain, dc=com»。)', 'texte_login_precaution' => '警告! これは今あなたが接続しているログインIDです。 注意してこのフォームを使ってください...', - 'texte_message_edit' => '警告:このメッセージはすべてのサイト管理者によって変更することができます、そしてすべてのエディターに表示されます。サイト生活での重要な出来事を強調するときのみ、アナウンスを使ってください。', 'texte_mise_a_niveau_base_1' => 'あなたはちょうど今SPIPのファイルを更新しました 今あなたはサイトのデータベースも更新しなければなりません。', 'texte_modifier_article' => '修正する記事:', - 'texte_moteur_recherche_active' => '検索エンジンは有効になっています。すばやく再度インデックスしたいならこれを実行してください(例えばバックアップを復元した後など)。気をつけてください、(SPIPのインターフェースから)普通に変更されたドキュメントは再度自動的にインデックスされています。:そのためこのコマンドは特別な事情があるときだけ有用です。', - 'texte_moteur_recherche_non_active' => '検索エンジンが無効です。', 'texte_multilinguisme' => 'もし記事をいくつかの言語で管理したいなら、完全なナビゲーション インターフェースによって、あなたのサイトの組織の記事と、セクションに言語選択メニューを追加できます。', # MODIF 'texte_multilinguisme_trad' => '同じく、あなたは1つの記事の、違う翻訳版間のリンク管理システムを有効にできます。', # MODIF 'texte_non_compresse' => '未圧縮(あなたのサーバーでこの機能は使えません)', - 'texte_nouveau_message' => '新しいメッセージ', 'texte_nouvelle_version_spip_1' => 'たった今SPIPの新しいバージョンがインストールされました。', 'texte_nouvelle_version_spip_2' => 'この新しいバージョンはこまめに更新(アップデート)することが必要となります。もしこのサイトの管理者なら、ecrireディレクトリのinc_connect.php3ファイルを削除して、あなたのデータベースとの接続の仕方などを変更するためインストールを再度実施してください。

      (付記:もし接続用の情報などを忘れているのなら、inc_connect.php3を"削除する前に"見ておいてください。)

      ', # MODIF 'texte_operation_echec' => '前のページに戻って、他のデータベースを選択するか、新しいのを作ってください。あなたのホストに提供された情報を確認してみてください。', @@ -590,7 +492,6 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'texte_publication_articles_post_dates' => '出版用に未来の日付が設定された記事に対するSPIPの対応を決めて下さい。', 'texte_rappel_selection_champs' => '[忘れずにこの部分をきちんと選択してください。]', 'texte_recalcul_page' => 'もしあなたが1つのページだけリフレッシュしたい場合、公開エリアで« リフレッシュ »ボタンを使った方が良いです。', - 'texte_recapitiule_liste_documents' => 'このページはセクション内に置いてあるドキュメントのリストのまとめです。それぞれのドキュメントの情報を変更するには、次の(置いてあるセクションへリンクしている)リンクをクリックしてください。', 'texte_recuperer_base' => 'データベースを復元', 'texte_reference_mais_redirige' => 'あなたのSPIPサイト内の記事を参照しているけれど、他のURLへとリダイレクションしている。', 'texte_requetes_echouent' => 'いくらかのSQLの要求(クエリー)がシステム的に何も理由を表さず失敗したとき、データベース自体が壊れている可能性があります。

      SQLは偶然壊れたとき、また使えるようにテーブルの機能を修復します。ここで、あなたはこの修復に挑戦できます; 失敗した場合、あなたは画面の複製をとっておくべきです。何が悪かったのかが書いてあるかもしれません。

      もし問題が残っているなら、あなたのホストと連絡をとってください。

      ', # MODIF @@ -611,7 +512,6 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'texte_suppression_fichiers' => 'これを使うとSPIPのすべてのキャッシュファイルが削除されます。これを許可すると、特にサイトの構造や画像の重要な変更を入力している場合に備えて、すべてのページのリフレッシュを強制します。', 'texte_sur_titre' => 'トップタイトル', 'texte_table_ok' => ': このテーブルはOK。', - 'texte_tables_indexation_vides' => '空のエンジンのテーブルをインデックス', 'texte_tentative_recuperation' => '復元を試みる', 'texte_tenter_reparation' => 'データベースの復元を試みる', 'texte_test_proxy' => 'このプロキシを試すために、ここにあなたがテストしてみたいウェブサイトのアドレスを入力してください。', @@ -619,13 +519,8 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'texte_titre_obligatoire' => 'タイトル [必須]', 'texte_travail_article' => '@nom_auteur_modif@は、@date_diff@分前、この記事で働いていた', 'texte_travail_collaboratif' => '同じ記事上で数人のエディターが頻繁に働くと、システムは記事が同時に修正されるのを防ぐために最近«開かれた»と表示することができます。このオプションはたくさん警告メッセージが表示されるのを防ぐため、初めは無効になっています。', - 'texte_trop_resultats_auteurs' => '"@cherche_auteur@"に対する結果が多すぎます; キーワードをひねって検索してください。', - 'texte_unpack' => '最新バージョンをダウンロード', - 'texte_utilisation_moteur_syndiques' => 'あなたがSPIPに結合された検索エンジンを使うとき、サイト上と供給(シンジケート)されている記事を違った態度で検索することができます。
      最も簡単なのは記事のタイトルと記述だけを検索することです。
      もっと強力な2番目の方法は、同じように参照されているサイト内の文も検索できます。もしあなたがサイトを参照するなら、SPIPはサイトの文自体の検索を行うでしょう。', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'この方法は定期的に参照しているサイトへ訪問することを強います。あなた自身のサイトに少々負担を掛けます。', 'texte_vide' => '空にする', 'texte_vider_cache' => 'キャッシュを空にする', - 'titre_admin_effacer' => '技術的なメンテナンス', 'titre_admin_tech' => '技術的なメンテナンス', 'titre_admin_vider' => '技術的なメンテナンス', 'titre_cadre_afficher_article' => '記事の表示:', @@ -645,43 +540,26 @@ SPIPドキュメントをご覧ください。

      ', # MODIF 'titre_naviguer_dans_le_site' => 'このサイトをブラウザする...', 'titre_nouvelle_rubrique' => '新しいセクション', 'titre_numero_rubrique' => 'セクション番号:', - 'titre_page_admin_effacer' => '技術的なメンテナンス: データベースを削除しています', 'titre_page_articles_edit' => '変更: @titre@', 'titre_page_articles_page' => '記事', 'titre_page_articles_tous' => '全てのサイト', - 'titre_page_auteurs' => '訪問者たち', 'titre_page_calendrier' => 'カレンダー @nom_mois@ @annee@', 'titre_page_config_contenu' => 'サイトの設定', - 'titre_page_config_fonctions' => 'サイトの設定', - 'titre_page_configuration' => 'サイトの設定', - 'titre_page_controle_petition' => '署名の把握', 'titre_page_delete_all' => '撤回できない、ページ全体の削除', - 'titre_page_documents_liste' => '付属した文章', - 'titre_page_index' => 'あなたのプライベートエリア', - 'titre_page_message_edit' => 'メッセージを書く', - 'titre_page_messagerie' => 'あなたのメッセージング', 'titre_page_recherche' => '検索語 @recherche@ による検索結果', 'titre_page_statistiques_referers' => '統計(入ってくるリンク)', 'titre_page_upgrade' => 'SPIPアップグレード', 'titre_publication_articles_post_dates' => '記事の投稿時間の公開', - 'titre_referencer_site' => 'サイトの参照:', - 'titre_rendez_vous' => '約束:', 'titre_reparation' => '修理', 'titre_suivi_petition' => '署名の把握', - 'trad_article_inexistant' => 'この番号には記事はありません', 'trad_article_traduction' => '記事のすべてのバージョン:', - 'trad_deja_traduit' => 'この記事は、それ自身現在の記事の翻訳です。', 'trad_delier' => 'この記事をその翻訳に関連付けないで下さい。', # MODIF 'trad_lier' => 'この記事はこの記事番号の翻訳です:', 'trad_new' => 'この記事の新しい翻訳を書く', # MODIF // U 'utf8_convert_erreur_orig' => 'エラー: その文字セット @charset@ は、対応していません。', - 'utf8_convert_termine' => '完了しました!!', - 'utf8_convertir_votre_site' => 'あなたのサイトをutf-8に変換します。', // V 'version' => 'バージョン:' ); - -?> diff --git a/www/ecrire/lang/ecrire_km.php b/www/ecrire/lang/ecrire_km.php index 1b530a42..3d4780aa 100644 --- a/www/ecrire/lang/ecrire_km.php +++ b/www/ecrire/lang/ecrire_km.php @@ -1,9 +1,11 @@ 'ត្រលប់ទៅ ទំព័រមុន, និងផ្ទៀង ពត៌មាន អ្នកបានផ្តល់។', 'avis_connexion_ldap_echec_3' => 'តាមជំរើស, កុំ​ប្រើ​ប្រាស់ការ​គាំទ្រ LDAP ដើម្បី​នាំចូលអ្នក​ប្រើប្រាស់។', 'avis_deplacement_rubrique' => 'ប្រយត្ន! មាតិកា​នេះ ​មានផ្ទុក @contient_breves@ ពត៌មានសង្ខេប @scb@ ៖ បើ​អ្នក​ប្តូរទីតាំងវា, សូមគូស ប្រអប់បញ្ជាក់ទទួលស្គាល់ នេះ។', - 'avis_destinataire_obligatoire' => 'អ្នកត្រូវតែ ជ្រើសយក អាសយដ្ឋានអ្នកទទួល មុនផ្ញើសារនេះ។', 'avis_erreur_connexion_mysql' => 'កំហុស​ ភ្ជាប់ទៅ SQL ', - 'avis_erreur_version_archive' => 'ប្រយត្ន! សំណុំឯកសារ @រarchive@ ត្រូវជាមួយ ​កំណែ​ដទៃ ​នៃ SPIP ​ជាងកំណែ​ ដែល​អ្នក​បានតំលើង។អ្នក​កំពុងនៅចំពោះមុខ ភាពលំបាកខ្លាំង​៖ គ្រោះថ្នាក់បំផ្លាញមូលដ្ឋានទិន្នន័យ របស់អ្នក, ភាពលែងដំណើរ​ ផ្សេងៗ នៃវ៉ែបសៃថ៍ របស់អ្នក, ​ល ​។ កុំ​ធ្វើអោយសុពលភាព ​សំណើ​នាំចូល​នេះ។

      សំរាប់​ពត៌មាន​បន្ថែម, ​មើល - កំរងឯកសារ នៃ SPIP ។', # MODIF - 'avis_espace_interdit' => 'តំបន់ហាម

      SPIP ធ្លាប់ត្រូវ​បានតំលើង។
      ', + 'avis_espace_interdit' => 'តំបន់ហាម
      SPIP ធ្លាប់ត្រូវ​បានតំលើង។
      ', 'avis_lecture_noms_bases_1' => 'កម្មវិធីតំលើង គ្មាន​អាច ​អាន​ឈ្មោះ​ឃ្លាំង​ទិន្នន័យ​ ដែល​ត្រូវបានតំលើង។', 'avis_lecture_noms_bases_2' => '​ឃ្លាំង​ទិន្នន័យ គ្មានស្រាប់, ឬមុខងារអនុញ្ញាត ការរាយបញ្ជី​ នុមូលដ្ឋានទិន្នន័យ គ្មានត្រូវបានអនុញ្ញាត ព្រោះហេតុផលសុវត្ថភាព (វាជាករណី ជាមួយច្រើនខំព្យូរើ)។', 'avis_lecture_noms_bases_3' => 'ករណីជំរើសទីពីរ ពិត, វាអាចជាលទ្ធភាព ដែលមួួមូលដ្ឋានទិន្នន័យ ត្រូវបានដាក់ឈ្មោះ ក្រោយការពិនិត្យចូល របស់អ្នក អាចត្រូវបានប្រើប្រាស់៖', - 'avis_non_acces_message' => 'អ្នកគ្មាន​អាច ​ចូល​ទៅ​​សារ​នេះ។', 'avis_non_acces_page' => 'អ្នក​គ្មានអាច ​ចូល​ទៅ​ ​ទំព័រ​នេះ។', 'avis_operation_echec' => 'ប្រតិបត្ដិការ ​បានបរាជ័យ។', 'avis_operation_impossible' => 'ប្រតិបត្ដិការ​ មិន​អាចទៅ​រួច', - 'avis_probleme_archive' => 'បញ្ហាអំណាន នៃឯកសារ @archive@', 'avis_suppression_base' => 'ប្រយត្ន, ការលុបចេញ​ទិន្នន័យ គ្មានអាច​ត្រលប់​វិញ', - 'avis_version_mysql' => 'ខំព្យូរើបំរើសេវា SQL របស់អ្នក (@version_mysql@) គ្មាន​អនុញ្ញាត ការស្វ័យជួសជុល ​តារាង​ឃ្លាំង​ទិន្នន័យ​។', // B 'bouton_acces_ldap' => 'បន្ថែម​ ការ​ចូល​ទៅ LDAP ', 'bouton_ajouter' => 'បន្ថែម', - 'bouton_ajouter_participant' => 'បន្ថែម​ អ្នកចូលរួម ៖', - 'bouton_annonce' => 'ការប្រកាសដំណឹង', 'bouton_annuler' => 'បោះបង់', - 'bouton_checkbox_envoi_message' => 'លទ្ធភាពផ្ញើ​មួយសារ', - 'bouton_checkbox_indiquer_site' => 'ត្រូវ​តែបង្ហាញ​ មួយវ៉ែបសៃថ៍', - 'bouton_checkbox_signature_unique_email' => 'មួយគត់ ហត្ថលេខា​ ក្នុងមួយ​អ៊ីមែវល៍អាសយដ្ឋាន', - 'bouton_checkbox_signature_unique_site' => 'ត្រឹមមួយហត្ថលេខា​ ក្នុងមួយវ៉ែបសៃថ៍', 'bouton_demande_publication' => 'សួររក ការផ្សព្វផ្សាយ នៃអត្ថបទនេះ', 'bouton_desactive_tout' => 'អសកម្មទាំងអស់', 'bouton_desinstaller' => 'លែងតំលើង', - 'bouton_effacer_index' => 'លុប​សំអាត បញ្ជីលំដាប់អក្សរ', 'bouton_effacer_tout' => 'លុប​ចេញ ទាំងអស់', - 'bouton_envoi_message_02' => 'ផ្ញើ​ មួយសារ', 'bouton_envoyer_message' => 'សារ​បញ្ចប់ ៖ ផ្ញើ', 'bouton_modifier' => 'កែប្រែ', - 'bouton_pense_bete' => 'ការក្រើនរំលឹក ផ្ទាល់ខ្លួន', - 'bouton_radio_activer_messagerie' => 'សកម្ម បញ្ញើសារខាងក្នុង', - 'bouton_radio_activer_messagerie_interne' => 'សកម្ម បញ្ញើសារ ខាងក្នុង', - 'bouton_radio_activer_petition' => 'សកម្ម បណ្តឹងជំទាស់', 'bouton_radio_afficher' => 'បង្ហាញចេញ', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'លេច​ចេញ ​ក្នុង​បញ្ជី​អ្នកតែងនិពន្ធ ​ដែល​បានភ្ជាប់', - 'bouton_radio_desactiver_messagerie' => 'អសកម្ម បញ្ញើសារ', 'bouton_radio_envoi_annonces_adresse' => 'ផ្ញើ​ ការប្រកាសដំណឹង ទៅអាសយដ្ឋាន ៖', 'bouton_radio_envoi_liste_nouveautes' => 'ផ្ញើ​ ប​ញ្ជី នៃអ្វី ដែលថ្មី', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'មិន​លេច​ចេញ ​ក្នុង​បញ្ជី​ អ្នកតែងនិពន្ធ', 'bouton_radio_non_envoi_annonces_editoriales' => 'មិន​ផ្ញើ​ ការប្រកាសដំណឹង ​ដែល​ផ្សព្វផ្សាយ', - 'bouton_radio_pas_petition' => 'គ្មាន បណ្តឹងជំទាស់', - 'bouton_radio_petition_activee' => 'បានសកម្ម បណ្តឹងជំទាស់', - 'bouton_radio_supprimer_petition' => 'លុបចេញ បណ្តឹងជំទាស់', 'bouton_redirection' => 'បណ្តូរទិស', 'bouton_relancer_installation' => 'តំលើង ឡើងវិញ', 'bouton_suivant' => 'បន្ទាប់', 'bouton_tenter_recuperation' => 'ព្យាយាម​ជួសជុល', 'bouton_test_proxy' => 'សាកល្បង ខំព្យូរើបំរើសេវា Proxy', 'bouton_vider_cache' => 'ពង្រីង សតិភ្ជាប់', - 'bouton_voir_message' => 'មើល​ សារនេះ ​មុននឹងធ្វើ​អោយ ​សុពលភាព', // C - 'cache_mode_compresse' => 'បានរក្សាទុក សំណុំឯកសារ នៃសតិភ្ជាប់​ ជា ទំរង់បង្ហាប់។', - 'cache_mode_non_compresse' => 'បានរក្សាទុក សំណុំឯកសារ នៃសតិភ្ជាប់ ជាទំរង់គ្មានបង្ហាប់។', 'cache_modifiable_webmestre' => 'អាចផ្លាស់ប្តូរ ប៉ារ៉ាម៉ែត្រ​នេះ​ ដោយអ្នកជំនាញវ៉ែប នៃសៃថ៍។', 'calendrier_synchro' => 'បើ​អ្នក​ប្រើ​ប្រាស់ ផ្នែកទន់សៀវភៅកត់ត្រា សមស្រប iCal, អ្នក​អាច សមកាលវា ជាមួយពត៌មាន នៃសៃថ៍នេះ។', 'config_activer_champs' => 'ធ្វើអោយសកម្ម វាលខាងក្រោម', @@ -119,7 +96,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'ការ​ពិនិត្យចូល​ របស់​អ្នក', 'entree_login_connexion_1' => 'ការ​ពិនិត្យចូល ដើម្បី​ភ្ជាប់', 'entree_login_connexion_2' => '(​ជួនកាល ត្រូវតាម ​ការពិនិត្យ​ចូល​ ទៅ FTP របស់​អ្នក, ជួនកាល ទុកនៅទទេ​)', - 'entree_login_ldap' => 'ការ​ពិនិត្យចូល LDAP ដំបូង', 'entree_mot_passe' => 'ពាក្យសំងាត់ ​របស់​អ្នក', 'entree_mot_passe_1' => 'ពាក្យសំងាត់ សំរាប់ភ្ជាប់', 'entree_mot_passe_2' => '(​ជួនកាល ​ត្រូវតាម ពាក្យសំងាត់ របស់អ្នក សំរាប់ FTP, ​ជួនកាល ទុកនៅទទេ)', @@ -147,7 +123,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info_calendrier' => 'ពីប្រក្រតីទិន មានស្រាប់ សំរាប់អ្នក។ ទី​មួយ ជា​ផែនទី​ នៃសៃថ៍ ប្រកាសអំពី គ្រប់អត្ថបទ ត្រូវបានផ្សព្វផ្សាយ។ ទី​ពីរ ​មានផ្ទុក ការប្រកាសដំណឹង ផ្សព្វផ្សាយក៏ដូច​ជា សារ​ឯកជនថ្មីៗ របស់​អ្នក៖ វា​បង្ការ សំរាប់អ្នក ដោយសារតែ មួយកូនសោផ្ទាល់ខ្លួន, ដែលអ្នកអាច កែប្រែ នៅគ្រប់ពេល ដោយធ្វើថ្មីឡើងវិញ ពាក្យសំងាត់ របស់អ្នក។', 'ical_methode_http' => 'ទំនាញយក', - 'ical_methode_webcal' => 'ភាពសមកាល (webcal://)', + 'ical_methode_webcal' => 'ភាពសមកាល (webcal://)', # MODIF 'ical_texte_js' => 'មួយបន្ទាត់ ចាវ៉ាស្ក្រិប (Java script) អនុញ្ញាតអ្នក បង្ហាញចេញសាមញ្ញបំផុត, លើគ្រប់សៃថ៍ របស់អ្នក, អត្ថបទថ្មីៗ ត្រូវបានផ្សព្វផ្សាយ លើសៃថ៍នេះ។', 'ical_texte_prive' => 'ប្រក្រតីទិន, ប្រើប្រាស់ត្រឹមផ្ទាល់ខ្លួន, ផ្តល់ពត៌មាន អ្នក អំពីសកម្មភាពបោះផ្សាយឯកជន នៃសៃថ៍នេះ (ភារៈកិច្ច និង ការណាត់ជួបផ្ទាល់ខ្លួន, អត្ថបទ និង ពត៌មានខ្លី ត្រូវបានស្នើ...)។', 'ical_texte_public' => 'ប្រក្រតីទិននេះ អនុញ្ញាតអ្នក តាមដាន សកម្មភាពសាធារណៈ នៃសៃថ៍នេះ (អត្ថបទ និង ពត៌មានខ្លី ត្រូវបានបោះផ្សាយ)។', @@ -163,12 +139,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_calendrier' => 'ប្រក្រតីទិន', 'icone_creer_auteur' => 'បង្កើត​ មួយអ្នកនិពន្ធ​ថ្មី និង​ភ្ជាប់​គាត់ ទៅ​អត្ថបទ​នេះ', 'icone_creer_mot_cle' => 'បង្កើតថ្មី មួយពាក្យគន្លឹះ និងតភ្ជាប់វា ទៅអត្ថបទនេះ', - 'icone_creer_mot_cle_rubrique' => 'បង្កើតថ្មី មួយពាក្យគន្លឹះ និងភ្ជាប់វា ទៅផ្នែកនេះ', - 'icone_creer_mot_cle_site' => 'បង្កើតថ្មី មួយពាក្យគន្លឹះ និងភ្ជាប់វា ទៅសៃថ៍នេះ', 'icone_creer_rubrique_2' => 'បង្កើត មួយផ្នែកថ្មី', - 'icone_envoyer_message' => 'ផ្ញើ​ សារ​នេះ', 'icone_modifier_article' => 'កែប្រែ អត្ថបទនេះ', - 'icone_modifier_message' => 'កែប្រែ សារនេះ', 'icone_modifier_rubrique' => 'កែប្រែ ផ្នែកនេះ', 'icone_retour' => 'ត្រលប់ក្រោយ', 'icone_retour_article' => 'ត្រលប់ ទៅអត្ថបទ', @@ -178,10 +150,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'ធ្វើ​អោយ​ហត្ថលេខា​នេះ​មាន​សុពលភាព', 'image_administrer_rubrique' => 'អ្នក​អាច​គ្រប់គ្រង​ផ្នែក​នេះ', 'info_1_article' => 'អត្ថបទ ១', - 'info_1_site' => '១ សៃថ៍', 'info_activer_cookie' => 'អ្នអ្នក អាចធ្វើអោយសកម្ម មួយ ខូកឃីឆ្លងឆ្លើយ, វា នឹងអនុញ្ញាតអ្នក ងាយដើរ ពីសៃថ៍សាធារណះ ទៅសៃថ៍ឯកជន។', - 'info_admin_gere_rubriques' => 'អ្នកគ្រប់គ្រង​នេះ​ចាត់ចែង​ផ្នែក​ដូច​ខាងក្រោម ៖', - 'info_admin_gere_toutes_rubriques' => 'អ្នកអភិបាលនេះ គ្រប់គ្រង គ្រប់ផ្នែក។', # MODIF 'info_administrateur' => 'អ្នកគ្រប់គ្រង', 'info_administrateur_1' => 'អ្នកគ្រប់គ្រង', 'info_administrateur_2' => 'នៃសៃថ៍ (ប្រើប្រាស់ ដោយប្រយត្ន)', @@ -191,13 +160,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'អ្នក​អាច​ចាត់ចែង​ផ្នែក​នេះ', 'info_adresse' => 'ទៅ​នឹង​អាសយដ្ឋាន ៖', 'info_adresse_url' => 'អាសយដ្ឋាន URL នៃសៃថ៍សាធារណះ', - 'info_afficher_visites' => 'បង្ហាញ ចំណូលមើល សំរាប់ ៖', 'info_aide_en_ligne' => 'ជំនួយ លើបណ្តាញ SPIP', 'info_ajout_image' => 'នៅ​ពេល​អ្នក​បន្ថែម​រូប​ជា​ឯកសារ​ភ្ជាប់​ទៅ​នឹង​អត្ថបទ នោះ SPIP អាច​បង្កើត​រូបថត​ដោយ​ស្វ័យប្រវត្ដិ (​គំនូស​ព្រាង​) ពី​រូប​ដែល​បាន​បញ្ចូល ។ ប្រការ​នេះ​នឹង​អនុញ្ញាត ឧទាហរណ៍ អោយ​មានការ​បង្កើត​ដោយ​ស្វ័យប្រវត្ដិ​នូវ​វិចិត្រសាល ឬ​ផលប័ត្រ ។', - 'info_ajout_participant' => 'អ្នកចូលរួម​ខាងក្រោម​ត្រូវ​បាន​បន្ថែម ៖', 'info_ajouter_rubrique' => 'បន្ថែម​ផ្នែក​មួយទៀត​ដើម្បី​ចាត់ចែង ៖', 'info_annonce_nouveautes' => 'ជំនូនដំណឹង ចុងក្រោយបំផុត', - 'info_anterieur' => 'ពី​មុន', 'info_article' => 'អត្ថបទ', 'info_article_2' => 'អត្ថបទ', 'info_article_a_paraitre' => 'អត្ថបទ​ចាស់​ដែល​ត្រូវ​បោះ​ពុ​ម្ភ​ផ្សាយ', @@ -205,10 +171,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_2' => 'អត្ថបទ', 'info_articles_auteur' => 'អត្ថបទ របស់អ្នកនិពន្ធនេះ', 'info_articles_trouves' => 'អត្ថបទ​ត្រូវ​បាន​រក​ឃើញ', - 'info_articles_trouves_dans_texte' => 'អត្ថបទ​ត្រូវ​បាន​រក​ឃើញ (​នៅ​ក្នុង​ឯកសារ​)', 'info_attente_validation' => 'អត្ថបទ របស់អ្នក កំពុងរង់ចាំ សុពលភាព', 'info_aujourdhui' => 'ថ្ងៃនេះ ៖', - 'info_auteur_message' => 'អ្នក​ផ្ញើ​សារ ៖', 'info_auteurs' => 'អ្នកនិពន្ធ', 'info_auteurs_par_tri' => 'អ្នកនិពន្ធ@partri@', 'info_auteurs_trouves' => 'អ្នកនិពន្ធ​ត្រូវ​បាន​រក​ឃើញ', @@ -225,7 +189,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_1' => ' out of @liste@', 'info_classement_2' => ' out of @liste@', 'info_code_acces' => 'កុំភ្លេច អក្សរកូដចូលទៅ ផ្ទាល់ខ្លួន របស់អ្នក!', - 'info_compresseur_gzip' => 'N. B. : Il est recommandé de vérifier au préalable si l’hébergeur compresse déjà systématiquement les scripts php ; pour cela, vous pouvez par exemple utiliser le service suivant : @testgzip@', # MODIF 'info_config_suivi' => 'បើអាសយដ្ឋាននេះ ត្រូវតាម បញ្ជីផ្ញើមែវល៍, អ្នក អាចបង្ហាញខាងក្រោម អាសយដ្ឋាន ដែលពួកអ្នកចូលរួម សៃថ៍ អាចចុះឈ្មោះ។ អាសយដ្ឋាននេះ អាចជា មួយអាសយដ្ឋាន URL (ជា ឧទាហរ ទំព័រចុះឈ្មោះ ទៅបញ្ជី​តាមរយះវ៉ែប), ឬ អាសយដ្ឋានអ៊ីមែវល៍ បានមានប្រធានបទ ជាក់លាក់ (ជា ឧទាហរ៖ @adresse_suivi@?subject=subscribe)៖', 'info_config_suivi_explication' => 'អ្នក អាចជាវប្រចាំ ទៅបញ្ជីផ្ញើមែវល៍ នៃសៃថ៍នេះ។ អ្នក នឹងទទួលបាន តាមមែវល៍ រាល់ជំនូនដំណឹង នៃអត្ថបទ​និង​នៃពត៌មានខ្លី បានស្នើ សំរាប់ការបោះផ្សាយ។', 'info_confirmer_passe' => 'បញ្ជាក់ទទួលស្គាល់ ពាក្យសំងាត់ថ្មី៖', @@ -247,8 +210,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'កាលបរិច្ឆេទ​នៃ​ការ​បោះ​ពុ​ម្ភ​ផ្សាយ​កាលពី​លើក​មុន ៖', 'info_date_referencement' => 'ថ្ងៃខែឆ្នាំ នៃការយោង របស់សៃថ៍នេះ ៖ ', 'info_derniere_etape' => 'ជំហាន​ចុង​ក្រោយ ៖ រួចរាល់​!', - 'info_derniers_articles_publies' => 'អត្ថបទ​ដែល​បាន​បោះ​ពុ​ម្ភ​ផ្សាយ​ចុង​ក្រោយ​របស់​អ្នក', - 'info_desactiver_messagerie_personnelle' => 'អ្នក អាចធ្វើអោយ សកម្ម/អសកម្ម សារផ្ទាល់ខ្លួន របស់អ្នក លើសៃថនេះ។', 'info_descriptif' => 'ការពិពណ៌នា៖', 'info_desinstaller_plugin' => 'លុបចេញ ទិន្នន័យ និងធ្វើអោយអសកម្ម plugin', 'info_discussion_cours' => 'ការពិភាក្សា កំពុងដំណើរ', @@ -256,7 +217,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_email_envoi' => 'អាសយដ្ឋានអ៊ីមែវល៍ របស់ម្ចាស់បញ្ញើ (ជាជំរើស)', 'info_email_envoi_txt' => 'បញ្ចូល អាយដ្ឋានអ៊ីមែវល៍ របស់អ្នកផ្ញើ ធ្លាប់បានប្រើប្រាស់ ពេលផ្ញើអ៊ីមែវល៍ (ជាលំនាំដើម, អាសយដ្ឋានអ្នកទទួល ត្រូវបានប្រើប្រាស់ ជាអាសយដ្ឋានអ្នកផ្ញើ) ៖', 'info_email_webmestre' => 'អាសយដ្ឋានអ៊ីមែវល៍ របស់អ្នកជំនាញវ៉ែប (ជាជំរើស)', # MODIF - 'info_entrer_code_alphabet' => 'បញ្ចូល​លេខ​កូដ​នៃ​តួអក្សរ​ដែល​បាន​កំណត់​ត្រូវ​ប្រើប្រាស់ ៖', 'info_envoi_email_automatique' => 'ការ​ផ្ញើ​មែ​ល​ដោយ​ស្វ័យប្រវត្ដិ', 'info_envoyer_maintenant' => 'ផ្ញើ ឥឡូវ', 'info_etape_suivante' => 'ទៅ ជំហានបន្ទាប់', @@ -266,7 +226,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_facilite_suivi_activite' => 'សំរាប់សំរួល ការតាមដាន សកម្មភាពបោះផ្សាយ នៃសៃថ៍, SPIP អាចជូនដំណឹង តាមមែវល៍, ជាឧទាហរ ទៅបញ្ជីផ្ញើមែវល៍ របស់ពួកស្មេរ, ជំនូនដំណឹង នៃសំណើ បោះផ្សាយនានា និងភាពសុពលភាព នៃអត្ថបទនានា។', 'info_fichiers_authent' => 'ហ្វា​ល​យថាភាព \\".htpasswd\\"', 'info_forums_abo_invites' => 'វ៉ែបសៃថ៍ របស់អ្នក រួមមាន ទីប្រជុំមតិ តាមរយះការជាវ ; ចឹង ពួកទស្សនាករ អាចចុះឈ្មោះ ចូលរួម ទីប្រជុំមតិទាំងនេះ លើសៃថ៍សាធារណះ។', - 'info_gauche_admin_effacer' => 'ត្រឹមពួកអ្នកទទួលខុសត្រូវ នៃសៃថ៍ ទើបអាចចូលទៅ ទំព័រនេះ។

      វាវា អនុញ្ញាតចូលទៅ គ្រប់មុខងារថែទាំបច្ចេកទេស ដទៃ។ មួយចំនួននៃពួកវា ផ្តល់ដំណើរ សំគាល់ជាក់លាក់, ដែលតំរូវអោយមាន FTP ចូលទៅវ៉ែបសៃថ៍។

      ', # MODIF 'info_gauche_admin_tech' => 'ត្រឹម ពួកអ្នកទទួលខុសត្រូវសៃថ៍ អាចចូលទៅ ទំព័រនេះ។

      វាអនុញ្ញាត អោយចូលទៅ មុខងារថែទាំបច្ចេកទេស ដទៃ។ មួយចំនួននៃមុខងារ ផ្តល់ដំណើរ សំគាល់ជាក់លាក់, តំរូវអោយមាន FTP សំរាប់ចូលទៅ វ៉ែបសៃថ៍។

      ', # MODIF 'info_gauche_admin_vider' => 'ត្រឹម ពួកអ្នកទទួលខុសត្រូវសៃថ៍ អាចចូលទៅ ទំព័រនេះ។

      វាអនុញ្ញាត ចូលទៅ មុខងារថែទាំបច្ចេកទេស ដទៃ។ មួយចំនួននៃមុខងារ ផ្តល់ដំណើរ សំគាល់ជាក់លាក់, តំរូវអោយមាន FTP សំរាប់ចូលទៅ វ៉ែបសៃថ៍។

      ', # MODIF 'info_gauche_auteurs' => 'អ្នកនឹងឃើញ ទីនេះ គ្រប់អ្នកនិពន្ធ នៃវ៉ែបសៃថ៍។ @@ -274,19 +233,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_gauche_auteurs_exterieurs' => 'ពួកអ្នកនិពន្ធ ពីខាងក្រៅ, គ្មានអាចចូលទៅ វ៉ែបសៃថ៍, ត្រូវបានសំគាល់ ជារូបតំណាង ពណ៌ខៀវ ; ​ ពួកអ្នកនិពន្ធ ត្រូវបានលុបចេញ ដោយធុងសំរាម។', # MODIF 'info_gauche_messagerie' => 'ការ​ផ្ញើ​សារ​អនុញ្ញាត​អោយ​អ្នក​ផ្លាស់​ប្ដូរ​សារ​ក្នុង​ចំណោម​បណ្ណាធិកា ដើម្បី​រក្សា​ទុក​អនុស្សរណៈ (​សម្រាប់​ការ​ប្រើប្រាស់​ផ្ទាល់ខ្លួន​របស់​អ្នក​) ឬ​ដើម្បី​បង្ហាញ​នូវ​សេចក្ដី​ប្រកាស​នៅ​លើ​គេហទំព័រ​នៃ​កន្លែង​ឯកជន (​ប្រសិនបើ​អ្នក​គឺជា​អ្នកគ្រប់គ្រង​) ។', - 'info_gauche_numero_auteur' => 'លេខ​អ្នកនិពន្ធ ៖', 'info_gauche_statistiques_referers' => 'ទំព័រនេះ បង្ហាញ បញ្ជីឯកសារយោង, បានន័យថា វ៉ែបសៃថ៍ មានផ្ទុកតំណភ្ជាប់ សំដៅសៃថ៍ផ្ទាល់ របស់អ្នក, ត្រឹម ម្សិល និងថ្ងៃនេះ ; បញ្ជីនេះ ត្រូវបានត្រលប់ទៅ សូន្យ រាល់ ២៤ ម៉ោង។', 'info_gauche_visiteurs_enregistres' => 'អ្នកនឹង រកឃើញ ទីនេះ ពួកទស្សនាករ ក្នុងធ្លាសាធារណះ នៃវ៉ែបសៃថ៍ (​ទីប្រជុំមតិ ជាវប្រចាំ)។', 'info_generation_miniatures_images' => 'បង្កើត​គំនូស​ព្រាង​រូបភាព', - 'info_gerer_trad' => 'អនុញ្ញាត តំណភ្ជាប់ នៃបំរែសំរួល ឬ?', 'info_hebergeur_desactiver_envoi_email' => '“​កុំព្យូទ័រ​ខ្លះ​បិទមុខ​ងារ​ផ្ញើ​សារ​ស្វ័យប្រវត្ដិ', 'info_hier' => 'ម្សិល​ម៉ិ​ញៈ', - 'info_historique_activer' => 'ធ្វើអោយសកម្ម ការតាមដាន អត្ថបទបានកែប្រែ', - 'info_historique_affiche' => 'បង្ហាញ​អត្ថបទ​នេះ', - 'info_historique_comparaison' => 'ប្រៀបធៀប', - 'info_historique_desactiver' => 'ធ្វើអោយអសកម្ម ការតាមដាន នៃអត្តបទបានកែប្រែ', - 'info_historique_texte' => 'មុខងារ​ពិនិត្យ​អត្ថបទ​កែសម្រួល​អាច​ឱ្យ​លោក​អ្នក​មើលឃើញ​នូវ​ចំណុច​កែប្រែ ឬ​បន្ថែម​នានា​នៅ​ក្នុង​អត្ថបទ ព្រមទាំង​បង្ហាញ​អំពី​ភាព​ខុស​គ្នា​នៃ​អត្ថបទ​បន្ដបន្ទាប់', 'info_identification_publique' => 'អត្តសញ្ញា សាធារណះ របស់អ្នក...', 'info_image_process' => 'ជ្រើសយក វិធីប្រពៃបំផុត សំរាប់បង្កើត កូនរូបភាព ដោយ ចុចលើ រូបភាពទាក់ទិន។', 'info_image_process2' => 'ចំណាំ៖ បើគ្មានរូបភាព លេចឡើង, ពេលខំព្យូរើបំរើសេវា ដែលទទួលផ្ទុកវ៉ែបសៃថ៍ របស់អ្នក គ្មានត្រូវបានកំណត់ទំរង់ សំរាប់ប្រើប្រាស់ ឧបករបែបចឹង។ បើអ្នក ចង់ប្រើប្រាស់ មុខងារទាំងនេះ, ទាក់ទងអ្នកទទួលខុសត្រូវ ផ្នែកបច្ចេកទេស និងសួរ ផ្នែកបន្ថែម «GD» ឬ «Imagick»', # MODIF @@ -305,8 +257,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_logos' => 'រូបសញ្ញា', 'info_maximum' => 'អតិបរមាៈ', 'info_meme_rubrique' => 'នៅ​ក្នុង​ផ្នែក​ដដែល', - 'info_message' => 'សារ​ពី', - 'info_message_efface' => 'សារ ត្រូវបានលុបចេញ', 'info_message_en_redaction' => 'សារ​របស់​លោក​អ្នក​កំពុង​ដំណើរការ', 'info_message_technique' => 'សារ​បច្ចេកទេសៈ', 'info_messagerie_interne' => 'ការ​បញ្ជូន​សារ​ខាងក្នុង', @@ -317,20 +267,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'កែប្រែ ផ្នែក៖', 'info_modifier_titre' => 'កែប្រែ៖ @titre@', 'info_mon_site_spip' => 'សៃថ៍ SPIP របស់ខ្ញុំ', - 'info_mot_sans_groupe' => '(​ពាក្យ​គន្លឹះ​ដែល​ក្រុម​មិន​...)', - 'info_moteur_recherche' => 'កម្មវិធី​ស្វែងរក​វ៉ិ​ប​សាយ​រួម', 'info_moyenne' => 'មធ្យមៈ', - 'info_multi_articles' => 'សកម្ម មែនញាវភាសា លើអត្ថបទ ឬ ?', 'info_multi_cet_article' => 'ភាសា​ក្នុង​អត្ថបទ​នេះ', 'info_multi_langues_choisies' => 'សូមជ្រើសយក ភាសាមានស្រាប់ ខាងក្រោម សំរាប់ ពួកស្មេរ នៃសៃថ៍ របស់អ្នក។ ភាសា ត្រូវបានប្រើប្រាស់ហើយ ក្នុងសៃថ៍ របស់អ្នក(បង្ហាញ ដំបូង) គ្មានអាចត្រូវបាន អសកម្ម។', - 'info_multi_rubriques' => 'បើកមុខ​ងារ​តារាង​ភាសា​សំរាប់​ផ្នែក​នេះ​?', 'info_multi_secteurs' => '...​សំរាប់​តែ​ផ្នែក​ដែល​នៅ​ខាងក្រោម​គេ​ប៉ុណ្ណោះ​?', 'info_nom' => 'ឈ្មោះ', 'info_nom_destinataire' => 'ឈ្មោះ​អ្នក​ទទួល', 'info_nom_site' => 'ឈ្មោះវ៉ែបសៃថ៍ របស់ខ្ញុំ', 'info_nombre_articles' => 'អត្ថបទ', - 'info_nombre_partcipants' => 'អ្នកចូលរួម​ក្នុង​ការ​ពិភាក្សាៈ', 'info_nombre_rubriques' => 'ផ្នែក', 'info_nombre_sites' => '@nb_sites@ វ៉ែបសៃថ៍,', 'info_non_deplacer' => 'សូមកុំ​រំកិល', @@ -340,17 +285,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_modifiable' => 'គ្មានអាចត្រូវបាន កែប្រែ', 'info_non_suppression_mot_cle' => 'ខ្ញុំ គ្មានចង់លុបចេញ ពាក្យគន្លឹះនេះ។', 'info_notes' => 'កំណត់សំគាល់​នៅ​ចុង​ទំព័រ', - 'info_nouveaux_message' => 'សារ​ថ្មីៗ', 'info_nouvel_article' => 'អត្ថបទ​ថ្មី', 'info_nouvelle_traduction' => 'អត្ថបទ​បកប្រែ​ថ្មីៈ', 'info_numero_article' => 'លេខ​អត្ថបទៈ', 'info_obligatoire_02' => '[ចាំបាច់]', # MODIF 'info_option_accepter_visiteurs' => 'យល់ព្រម ការចុះឈ្មោះ ពួកទស្សនាករ នៃវ៉ែបសៃថ៍​សាធារណះ', - 'info_option_faire_suivre' => 'បញ្ជូន​សារ​របស់​វេទិកា​ទៅ​អ្នក​សរសេរ​កម្មវិធី', 'info_option_ne_pas_accepter_visiteurs' => 'បដិសេធ ការចុះឈ្មោះ របស់ទស្សនាករ', 'info_options_avancees' => 'ជំរើស​ពិសេស', - 'info_ortho_activer' => 'បើក​មុខងារ​កម្មវិធី​ត្រួតពិនិត្យ​កំហុស​អក្ខរាវិរុទ្ធ', - 'info_ortho_desactiver' => 'បិទ​មុខងារ​កម្មវិធី​ត្រួតពិនិត្យ​កំហុស​អក្ខរាវិរុទ្ធ', 'info_ou' => 'ឬ​....', 'info_page_interdite' => 'ទំព័រ​ហាមឃាត់', 'info_par_nom' => 'តាម​ឈ្មោះ', @@ -359,20 +300,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_par_tri' => '’(by @tri@)’', 'info_passe_trop_court' => 'ពាក្យសំងាត់ ខ្លីពេក។', 'info_passes_identiques' => 'ពាក្យសំងាត់ ទាំងពីរ គ្មានដូចគ្នា។', - 'info_pense_bete_ancien' => 'កំណត់​ហេ​ុ​ត​ចាស់​របស់​លោក​អ្នក', # MODIF 'info_plus_cinq_car' => 'លើសពី​ ៥ អក្សរ', 'info_plus_cinq_car_2' => '(​លើស​ពី ៥ អក្សរ​)', 'info_plus_trois_car' => '(​លើស​ពី ៣ អក្សរ​)', 'info_popularite' => 'ភាពពេញនិយម៖ ៖ @popularite@; ចំណូលមើល៖ @visites@', - 'info_popularite_4' => 'ភាពប្រជាប្រិយ ៖ @popularite@; ចំណូលមើល ៖ @visites@', 'info_post_scriptum' => 'បដ្ឋនាលិខិត', 'info_post_scriptum_2' => 'បដ្ឋនាលិខិត', 'info_pour' => 'សំរាប់', - 'info_preview_admin' => 'ត្រឹមពួកអ្នកអភិបាល ទើបអាចមើលមុន សៃថ៍', - 'info_preview_comite' => 'គ្រប់ស្មេរ អាចមើលមុន សៃថ៍', - 'info_preview_desactive' => 'ម៉ូត (mode) ពិនិត្យ​ជា​មុន​ត្រូវ​បាន​បិទមុខ​មុខងារ', - 'info_preview_texte' => 'គ្មានអាចមើលមុន សៃថ៍ ដូចដែលគ្រប់អត្ថបទ និងខ្ទង់ដំណឹង (ដែលមានយ៉ាងតិច ស្ថានភាព "បានដាក់ស្នើ") ត្រូវបានបោះផ្សាយហើយ។ បែបមើលមុននេះ គួរត្រូវបានអនុញ្ញាត សំរាប់ពួកអ្នកអភិបាល, បើក សំរាប់គ្រប់អ្នកនិពន្ធ, ឬ គ្មានអនុញ្ញាតទាំងស្រុង?', - 'info_principaux_correspondants' => 'អ្នកឆ្លើយឆ្លង ចំបង របស់អ្នក', + 'info_preview_texte' => 'គ្មានអាចមើលមុន សៃថ៍ ដូចដែលគ្រប់អត្ថបទ និងខ្ទង់ដំណឹង (ដែលមានយ៉ាងតិច ស្ថានភាព "បានដាក់ស្នើ") ត្រូវបានបោះផ្សាយហើយ។ បែបមើលមុននេះ គួរត្រូវបានអនុញ្ញាត សំរាប់ពួកអ្នកអភិបាល, បើក សំរាប់គ្រប់អ្នកនិពន្ធ, ឬ គ្មានអនុញ្ញាតទាំងស្រុង?', # MODIF 'info_procedez_par_etape' => 'សូម​ដំណើរការ​មួយ​ជំហាន​ម្ដងៗ', 'info_procedure_maj_version' => 'គួរ​បើក​ដំណើរការ​នីតិវិធី​កែ​លំអ​ដើម្បី​សម្រួល​ដល់​ការ​ប្រើប្រាស់​ទិន្នន័យ​ទៅ​ក្នុង​វើ​សឹ​ន (version) របស់ SPIP', 'info_proxy_ok' => 'ការ​ពិនិត្យ​លើ​វើ​សឹ​ន​ថ្មី​ទទួល​បាន​ជោគជ័យ​។', @@ -381,12 +316,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_publies' => 'រាល់អត្ថបទ របស់អ្នក ត្រូវបានបោះផ្សាយ លើអិនរើណែត', 'info_question_accepter_visiteurs' => 'ប្រសិនបើ​ទម្រង់​វ៉ិ​ប​សាយ​របស់​លោក​អ្នក​អនុញ្ញាត​ឱ្យ​អ្នក​ទស្សនា​ចុះ​ឈ្មោះ​ដោយ​មិន​ចាំបាច់​ចូល​ទៅ​ក្នុង​ផ្នែក​ឯកជន សូម​បើកមុខ​ងារ​ជំរើស​ខាងក្រោមៈ', 'info_question_inscription_nouveaux_redacteurs' => 'តើ​លោក​អ្នក​ត្រូវការ​អនុញ្ញាត​ឱ្យ​អ្នក​សរសេរ​អត្ថបទ​ថ្មី​ចុះ​ឈ្មោះ​ពី​វ៉ិ​ប​សាយ​សាធារណៈ​ដែល​ឬទេ​? ប្រសិនបើ​លោក​អ្នក​យល់ព្រម អ្នក​ទស្សនា​នឹង​អាច​ចុះ​ឈ្មោះ​ដោយ​ប្រើប្រាស់​ទម្រង់​ស្វ័យប្រវត្ដិ​មួយ ហើយ​បន្ទាប់​មក​ចូល​ក្នុង​ផ្នែក​ឯកជន​ដើម្បី​បញ្ចូល​អត្ថបទ​ផ្ទា់ល់​របស់​ពួក​គេ​។
      ក្នុង​ពេល​ដំណើរការ​ចុះ​ឈ្មោះ អ្នក​ប្រើប្រាស់​ទទួល​បាន​អ៊ី​ម៉ែ​ល​ស្វ័យប្រវត្ដិ​ដែល​ផ្ដល់​ជូន​ពួក​គេ​នូវ​លេខ​កូដ​ចូល​ទៅ​ក្នុង​ផ្នែក​ឯកជន​។ ក្រុមហ៊ុន​ផ្ដល់​សេវា​មួយ​ចំនួន​មិន​អនុញ្ញាត​ចំពោះ​ការ​ផ្ញើ​អ៊ី​ម៉ែ​ល​ម៉ាស៊ីន​មេ (servers)​របស់​ពួក​គេ​ទេ ៖ ក្នុង​ករណី​នោះ ការ​ចុះ​ឈ្មោះ​ដោយ​ស្វ័យប្រវត្ដិ​គឺ​មិន​អាច​អនុវត្ដ​បាន​ទេ​។', # MODIF - 'info_question_utilisation_moteur_recherche' => 'អ្នកចង់ប្រើប្រាស់ ឧបករស្វែងរក ត្រូវបានបញ្ចូលទៅ SPIP ឬ? (ការមិនអនុញ្ញាតវា បង្កើនល្បឿន ភាពប្រពៃ នៃប្រព័ន្ធ។)', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'ឫស នៃវ៉ែបសៃថ៍', 'info_recharger_page' => 'សូម​បញ្ចូល​ទំព័រ​នេះ​ជា​ថ្មី​ម្ដងទៀត​នៅ​មួយសន្ទុះ​ក្រោយ', - 'info_recherche_auteur_a_affiner' => 'លទ្ធផលច្រើនពេក សំរាប់ "@cherche_auteur@"; សូមចំរាញ់ ការស្វែងរក របស់អ្នក។', - 'info_recherche_auteur_ok' => 'ឃើញ​មាន​អ្នក​សរសេរ​អត្ថបទ​ជា​ច្រើន​សំរាប់ \\"@cherche_auteur@\\":', 'info_recherche_auteur_zero' => 'គ្មាន​លទ្ធផល​ទេ​សំរាប់ \\"@cherche_auteur@\\".', 'info_recommencer' => 'សូម​ព្យាយាម​ម្ដងទៀត', 'info_redacteur_1' => 'Rédacteur', @@ -403,7 +334,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'ផ្នែក', 'info_rubriques_02' => 'ផ្នែក', 'info_rubriques_trouvees' => 'ផ្នែក ត្រូវបានរកឃើញ', - 'info_rubriques_trouvees_dans_texte' => 'ផ្នែក​ដែល​ឃើញ​មាន (​នៅ​ក្នុង​អត្ថបទ​)', 'info_sans_titre' => 'គ្មាន​ចំណងជើង', 'info_selection_chemin_acces' => 'ជ្រើសយក ខាងក្រោម ​ផ្លូវចូល​ទៅ​បញ្ជីឈ្មោះ ៖', 'info_signatures' => 'ហត្ថលេខា', @@ -416,13 +346,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_sites_lies_mot' => '​​សៃថ៍យោង​ ដែល​មាន​ពាក្យ​គន្លឹះ​នេះ', 'info_sites_proxy' => '​ប្រើប្រាស់​ មួយខំព្យូរើបំរើសេវា Proxy', 'info_sites_trouves' => 'បានរកឃើញ សៃថ៍', - 'info_sites_trouves_dans_texte' => 'បានរកឃើញ សៃថ៍ (​ក្នុង ​អត្ថបទ​)', 'info_sous_titre' => 'ចំណងជើង​រង៖', 'info_statut_administrateur' => 'អ្នកអភិបាល', 'info_statut_auteur' => 'ស្ថានភាព នៃអ្នកនិពន្ធ នេះ៖', 'info_statut_auteur_a_confirmer' => 'ការ​ចុះ​ឈ្មោះ​ ដែល​ត្រូវ​បញ្ជាក់ទទួលស្គាល់', 'info_statut_auteur_autre' => 'ស្ថានភាព ដទៃ ៖', - 'info_statut_efface' => 'បាន​ត្រូវ​លុប​សំអាត', 'info_statut_redacteur' => 'អ្នក​តែងនិពន្ធ', 'info_statut_utilisateurs_1' => 'ស្ថានភាព​ លំនាំដើម នៃអ្នក​ប្រើប្រាស់​ ដែល​បានត្រូវនាំចូល', 'info_statut_utilisateurs_2' => 'ជ្រើសរើស​ស្ថានភាព​ដែល​បញ្ជាក់​អំពី​បុគ្គល​ដែល​មាននៅ​ក្នុង​បញ្ជី (directory) LDAP នៅ​ពេល​ដែល​ពួក​គេ​ភ្ជាប់​ជា​លើក​ដំបូង​។ ក្រោយមក​លោក​អ្នក​អាច​កែសម្រួល​តម្លៃ​នេះ​សំរាប់​អ្នក​សរសេរ​កម្មវិធី​នីមួយៗ ដោយ​ផ្នែក​លើ​ករណី​មួយៗ​។', @@ -442,7 +370,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_en_redaction' => 'គ្រប់អត្ថបទ ក្នុងដំណើរសរសេរ', 'info_tous_articles_presents' => 'គ្រប់អត្ថបទ ត្រូវបានបោះផ្សាយ ក្នុងផ្នែកនេះ', 'info_tous_les' => 'រាល់៖', - 'info_tous_redacteurs' => 'ជំនូនដំណឹង ទៅ គ្រប់ស្មេរ', 'info_tout_site' => 'សៃថ៍ ទាំងមូល', 'info_tout_site2' => 'អត្ថបទ គ្មានទាន់ត្រូវបាន ប្រែសំរួល ជាភាសានេះ។', 'info_tout_site3' => 'អត្ថបទ ត្រូវបានប្រែសំរួល ជាភាសានេះ, ប៉ុន្តែ​មានបំលាស់ប្តូរ បន្ទាប់ពីអត្ថបទយោង។ បំរែសំរួល ត្រូវការ ការបន្ទាន់សម័យ។ ', @@ -457,7 +384,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_une_rubrique' => 'ផ្នែក', 'info_une_rubrique_02' => 'មួយ​ផ្នែក', 'info_url' => 'URL ​៖', - 'info_url_site' => 'អាសយដ្ឋាន URL នៃសៃថ៍ ៖', 'info_urlref' => 'តំណភ្ជាប់ខ្ពស់ ៖', 'info_utilisation_spip' => 'ពេលនេះ អ្នកអាចផ្តើមប្រើប្រាស់ SPIP មានការណែនាំ....', 'info_visites_par_mois' => 'ការ​បង្ហាញ​ចេញ ប្រចាំខែ ៖', @@ -465,7 +391,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_visiteur_2' => 'នៃសៃថ៍​សាធារណៈ', 'info_visiteurs' => 'ទស្សនាករ', 'info_visiteurs_02' => '​ទស្សនាករ នៃសៃថ៍​សាធារណៈ', - 'install_base_ok' => 'បានស្គាល់អត្តសញ្ញា របស់ទិន្នន័យ @base@', 'install_echec_annonce' => 'ការ​តំលើង​នេះ ​អាច​នឹងបរាជ័យ, ឬ​ អាចនាំ​ទៅ មួយសៃថ៍ខូច...', 'install_extension_mbstring' => 'SPIP គ្មានធ្វើការ ​ជាមួយ ៖', 'install_extension_php_obligatoire' => 'SPIP ទាមទារ កន្ទុយ .php ៖', @@ -483,8 +408,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_activer_messages_avertissement' => 'សកម្ម សារព្រមាន', 'item_administrateur_2' => 'អ្នកអភិបាល', 'item_afficher_calendrier' => 'បង្ហាញ​ចេញ ក្នុង​ប្រក្រតីទិន', - 'item_autoriser_documents_joints' => 'អនុញ្ញាត​ឯកសារ​ភ្ជាប់​ ទៅអត្ថបទ', - 'item_autoriser_documents_joints_rubriques' => 'អនុ​ញ្ញា​​ឯកសារភ្ជាប់ ​ក្នុង​ផ្នែក', 'item_autoriser_syndication_integrale' => 'បញ្ចូល​អត្ថបទ​ទាំងមូល​ទៅ​ក្នុង​ហ្វា​ល (files) បញ្ចូល​។', 'item_choix_administrateurs' => 'អ្នកគ្រប់គ្រង​ប្រព័ន្ធ', 'item_choix_generation_miniature' => 'បង្កើត​ទម្រង់​រូបភាព​សង្ខេប​ច្បាស់ៗ​ដោយ​ស្វ័យប្រវត្ដិ', @@ -492,7 +415,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_choix_redacteurs' => 'អ្នក​សរសេរ​អត្ថបទ', 'item_choix_visiteurs' => 'ពួកទស្សនាករ នៃសៃថ៍សាធារណះ', 'item_creer_fichiers_authent' => 'បង្កើត​ហ្វា​ល (files).htpasswd', - 'item_limiter_recherche' => 'កំរិត ការស្វែងរក ពត៌មានត្រូវបានបានផ្ទុក ក្នុងសៃថ៍ របស់អ្នក', 'item_login' => 'ការពិនិត្យចូល', 'item_mots_cles_association_articles' => 'អត្ថបទ', 'item_mots_cles_association_rubriques' => 'ផ្នែក', @@ -501,36 +423,25 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_non_accepter_inscriptions' => 'មិន​អនុញ្ញាត​ចំពោះ​ការ​ចុះ​ឈ្មោះ', 'item_non_activer_messages_avertissement' => 'គ្មាន​សារ​រំលឹក', 'item_non_afficher_calendrier' => 'គ្មានបង្ហាញ ក្នុងប្រក្រតីទិន', - 'item_non_autoriser_documents_joints' => 'មិន​អនុញ្ញាត​ចំពោះ​ការ​បញ្ចូល​ឯកសារ​ទៅ​ក្នុង​អត្ដ​បទ', - 'item_non_autoriser_documents_joints_rubriques' => 'មិន​អនុញ្ញាត​ចំពោះ​ការ​បញ្ចូល​ឯកសារ​ទៅ​ក្នុង​ផ្នែក', 'item_non_autoriser_syndication_integrale' => 'គ្រាន់តែ​ផ្ញើ​សេចក្ដី​សង្ខេប', - 'item_non_compresseur' => 'ធ្វើអោយអសកម្ម ការបង្ហាប់', 'item_non_creer_fichiers_authent' => 'មិន​បង្កើត​ឯកសារ​ទាំងនេះ', - 'item_non_gerer_statistiques' => 'គ្មានគ្រប់គ្រង ស្ថិតិ', - 'item_non_limiter_recherche' => 'ពង្រីកការស្វែងរក ទៅខ្លឹមសារ នៃពួកសៃថ៍យោង', 'item_non_publier_articles' => 'មិន​ចុះ​ផ្សាយ​អត្ថបទ​មុន​កាលបរិច្ឆេទ​ចុះ​ផ្សាយ​របស់​វា', - 'item_non_utiliser_moteur_recherche' => 'មិន​ប្រើប្រាស់​កម្មវិធី​ស្វែងរក​វ៉ិ​ប​សាយ', 'item_nouvel_auteur' => 'អ្នក​សរសេរ​កម្មវិធី​ថ្មី', 'item_nouvelle_rubrique' => 'ផ្នែក​ថ្មី', 'item_oui' => 'បាទ​,​ចាស', 'item_publier_articles' => 'បោះពុម្ព​អត្ថបទ​ដោយ​មិន​គិត​អំពី​កាលបរិច្ឆេទ​បោះពុម្ព​របស់​វា', 'item_reponse_article' => 'ចំលើយ ទៅអត្ថបទ', - 'item_utiliser_moteur_recherche' => 'ប្រើប្រាស់​កម្មវិធី​ស្វែងរក​វ៉ិ​ប​សាយ', 'item_visiteur' => 'ទស្សនាករ', // J 'jour_non_connu_nc' => 'គ្មានស្គាល់', // L - 'lien_ajout_destinataire' => 'បន្ថែម​អ្នក​ទទួល​នេះ', 'lien_ajouter_auteur' => 'បន្ថែម​អ្នក​សរសេរ​កម្មវិធី​នេះ', - 'lien_ajouter_participant' => 'បន្ថែម​អ្នកចូលរួម', 'lien_email' => 'អ៊ី​ម៉ែ​ល', 'lien_nom_site' => 'ឈ្មោះសៃថ៍៖', 'lien_retirer_auteur' => 'ដកចេញ អ្នកនិពន្ធនេះ', - 'lien_retrait_particpant' => 'ដកចេញ អ្នកចូលរួមនេះ', 'lien_site' => 'សៃថ៍', - 'lien_supprimer_rubrique' => 'លុបចេញ ផ្នែកនេះ', 'lien_tout_deplier' => 'ពង្រីក​ ទាំងអស់', 'lien_tout_replier' => 'រួម​បញ្ចូល​គ្នា​ទាំងអស់', 'lien_tout_supprimer' => 'លុបចេញ ទាំងអស់', @@ -558,7 +469,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'onglet_contenu' => 'ខ្លឹមសារ', 'onglet_declarer_une_autre_base' => 'ប្រកាស មួយមូលដ្ឋានទិន្នន័យ ដទៃ', 'onglet_discuter' => 'ពិភាក្សា', - 'onglet_documents' => 'ឯកសារ', 'onglet_proprietes' => 'លក្ខណះ', 'onglet_repartition_actuelle' => 'ឥឡូវ', 'onglet_sous_rubriques' => 'ផ្នែករង', @@ -576,6 +486,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // R 'repertoire_plugins' => 'បញ្ជី (directory)', + 'required' => '[ចាំបាច់]', # MODIF // S 'statut_admin_restreint' => '(​អ្នកគ្រប់គ្រង​ប្រព័ន្ធ​ដែល​ត្រូវ​ហាមឃាត់​)', # MODIF @@ -598,13 +509,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_article_virtuel_reference' => 'Virtual article: អត្ថបទ​យោង​នៅ​ក្នុង​វ៉ិ​ប​សាយ SPIP របស់​លោក​អ្នក ប៉ុន្ដែ​ត្រូវ​កំណត់​ទិស​ដៅ​ថ្មី​ទៅ​កាន់ URL មួយ​ផ្សេង​ទៀត​។ ដើម្បី​លុប​ការ​កំណត់​ទិស​ដៅ​ជា​ថ្មី​នេះ សូម​លុបURL ខាងលើ​។', 'texte_aucun_resultat_auteur' => 'គ្មាន​លទ្ធផល​សំរាប់ \\"@cherche_auteur@\\"។', 'texte_auteur_messagerie' => 'វ៉ិ​ប​សាយ​នេះ​អាច​តាមដាន​ជា​បន្ដបន្ទាប់​នូវ​បញ្ជី​អ្នក​សរសេរ​អត្ថបទ​ដែល​បាន​ភ្ជាប់ ដែល​អនុញ្ញាត​ឱ្យ​លោក​អ្នក​ដោះ​ដូរ​សារ​តាម​ពេល​ជាក់ស្ដែង​។ លោក​អ្នក​អាច​សំរេច​មិន​បង្ហាញខ្លួន​នៅ​ក្នុង​បញ្ជី​នេះ (​ដូច្នេះ​លោក​អ្នក​ស្ថិត​ក្នុង​សភាព “​មើល​មិនឃើញ​” (\\"invisible\\") សំរាប់​អ្នក​ប្រើប្រាស់​ផ្សេង​ទៀត​។​)', - 'texte_auteur_messagerie_1' => 'វ៉ិ​ប​សាយ​នេះ​អនុញ្ញាត​ចំពោះ​ការ​ដោះ​ដូរ​សារ និង​ការ​បង្កើត​វេទិកា​ពិភាក្សា​ឯកជន​រវាង​អ្នកចូលរួម​នៅ​ក្នុង​វ៉ិ​ប​សាយ​។ លោក​អ្នក​អាច​សំរេច​មិន​ចូលរួម​ក្នុង​ការ​ដោះ​ដូរ​នេះ​។', 'texte_auteurs' => 'អ្នក​សរសេរ​កម្មវិធី', 'texte_choix_base_1' => 'ជ្រើសយក មូលដ្ឋានទិន្នន័យ របស់អ្នក៖', 'texte_choix_base_2' => 'ម៉ាស៊ីន​មេMySQL មាន​សំណុំ​ទិន្នន័យ​ច្រើន​។', 'texte_choix_base_3' => 'ជ្រើសយក ខាងក្រោម អ្វីដែល ខំព្យូរើផ្ទុកវ៉ែបសៃថ៍ របស់អ្នក​ បានផ្គត់ផ្គង់ អ្នក៖', - 'texte_commande_vider_tables_indexation' => 'ប្រើប្រាស់​បញ្ជា​នេះ​ដើម្បី​លុប​តារាង​លិបិក្រម​ដែល​ប្រើប្រាស់​ដោយ​កម្មវិធី​ស្វែងរក​វ៉ិ​ប​សាយ​ដែល​បញ្ចូល​នៅ​ក្នុង SPIP។ វា​នឹង​អនុញ្ញាត​ឱ្យ​លោក​អ្នក​សន្សំ​បាន​ទំហំ​ថាស​ខ្លះ​។', - 'texte_compresse_ou_non' => '(​នេះ​អាច​ត្រូវ​បង្រួម ឬ​មិន​អាច​)', 'texte_compte_element' => 'សមាសធាតុ', 'texte_compte_elements' => 'សមាសធាតុ', 'texte_connexion_mysql' => 'ពិនិត្យពត៌មាន បានផ្តល់ដោយ ក្រុមហ៊ុនផ្តល់សេវា របស់អ្នក។ វាប្រហែលមានផ្ទុក អក្សរកូដភ្ជាប់ សំរាប់ខំព្យូរើបំរើសេវា SQL។', @@ -616,10 +524,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_date_publication_anterieure' => 'កាលបរិច្ឆេទ​បោះពុម្ព​មុនគេៈ', 'texte_date_publication_anterieure_nonaffichee' => 'លាក់​កាលបរិច្ឆេទ​ការ​បោះពុម្ព​មុនគេ', 'texte_date_publication_article' => 'ថ្ងៃខែឆ្នាំ បោះផ្សាយ លើអិនរើណែត ៖', - 'texte_descriptif_petition' => 'លក្ខណ​បដ្ឋនាលិខិត', 'texte_descriptif_rapide' => 'ការពិពណ៌នារហ័ស', 'texte_effacer_base' => 'លុបសំអាត មូលដ្ឋានទិន្នន័យ SPIP', - 'texte_effacer_donnees_indexation' => 'លុប​ទិន្នន័យ​លិបិក្រម', 'texte_effacer_statistiques' => 'លុបចេញ ស្ថិតិ', 'texte_en_cours_validation' => 'អត្ថបទ និងពត៌មានខ្លី ខាងក្រោម ត្រូវបានស្នើ បោះផ្សាយ។', # MODIF 'texte_enrichir_mise_a_jour' => 'លោក​អ្នក​អាច​កែ​លំអ​ទម្រង់​អត្ថបទ​របស់​លោក​អ្នក ដោយ​ប្រើប្រាស់ «typographical shortcuts».', @@ -628,22 +534,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_informations_personnelles_2' => '(ចំណាំ៖ បើវាជា មួយការតំលើងឡើងវិញ, និងការចូលទៅ របស់អ្នក នៅតែធ្វើការ, អ្នកអាច', # MODIF 'texte_introductif_article' => '(​អត្ថបទ​សេចក្ដី​ផ្ដើម​នៃ​អត្ថបទ​នេះ)', 'texte_jeu_caractere' => 'លោក​អ្នក​គួរតែ​ប្រើប្រាស់​អក្ខរាវិរុទ្ធ​សកល', - 'texte_jeu_caractere_2' => 'ការ​កំណត់​នេះ​មិន​បំ​លែង​អត្ថបទ​ដែល​បាន​រក្សា​ទុក​នៅ​ក្នុង​សំណុំ​ទិន្នន័យ​រួច​ហើយ​ទេ', 'texte_jeu_caractere_3' => 'សៃថ៍ របស់អ្នក បច្ចុប្បន្ន ប្រើប្រាស់កញ្ចប់អក្សរនេះ ៖', 'texte_jeu_caractere_4' => 'ប្រសិនបើ​មិន​អាច​ឆ្លើយ​តប​ចំពោះ​ស្ថានភាព​ដែល​លោក​អ្នកមាន​ជាមួយ​នឹ​ឹ​ង​ទិន្នន័យ​របស់​លោក​អ្នក (​ឧទាហរណ៍ បន្ទាប់​ពី​សើរើ​សំណុំ​ទិន្ន​ន័៏​យ​ពី​ហ្វា​ល​ថត​ទុក​) ឬ​ប្រសិនបើ លោក​អ្នក​កំពុង​កំណត់​វ៉ិ​ប​សាយ​នេះ និង​ត្រូវការ​ប្រើប្រាស់​សំណុំ​តួអក្សរ​ផ្សេង សូម​បង្ហាញ​សំណុំ​តួអក្សរ​នៅ​ទី​នេះៈ', - 'texte_jeu_caractere_conversion' => 'ចំណាំ៖ អ្នកអាចសំរេចបំលែងម្តង គ្រប់អត្ថបទ (ប្រកាស, ខ្ទង់ដំណឹង, ទីប្រជុំមតិ, ...) នៃវ៉ែបសៃថ៍ របស់អ្នក និង សំរាប់ទាំងអស់​ទៅកញ្ចប់អក្សរ utf-8។ ដើម្បីធ្វើនេះ, ចូលទៅ ទំព័របំលែង UTF-8 ។', - 'texte_lien_hypertexte' => '(បើសារ របស់អ្នក សំដៅមួយអត្ថបទ បានបោះផ្សាយ លើវ៉ែបសៃថ៍, ឬ ទៅ មួយទំព័រផ្តល់បន្ថែមពត៌មាន, សូមបញ្ចូលទីនេះ ចំណងជើង នៃទំព័រ និងអាសយដ្ឋាន URL របស់វា។)', 'texte_login_ldap_1' => '(​ត្រូវ​ទុក​ប្រអប់​ភ្ជាប់​អនាមិក ឬ​ចូល​ទៅ​ផ្លូវ​ពេញលេញ ឧទាហរណ៍ «uid=smith, ou=users, dc=my-domain, dc=com»)​។', 'texte_login_precaution' => 'ប្រយត្ន៖ នេះជាការពិនិត្យចូល ជាមួយអ្វី ដែលអ្នកបានភ្ជាប់ ពេលនេះ។ ប្រើប្រាស់ បែបបទនេះ ដោយប្រយត្ន...', - 'texte_message_edit' => 'ប្រយត្ន៖ សារនេះ អាចត្រូវបានផ្លាស់ប្តូរ ដោយពួកអ្នកអភិបាលសៃថ៍, និងអាចមើលឃើញ ដោយ គ្រប់អ្នកនិពន្ធអត្ថបទ។ សូមប្រើប្រាស់ ជំនូនដំណឹង សំរាប់ត្រឹមស្តែងចេញ រាល់ព្រឹត្តិការសំខាន់ នៃជីវិត របស់សៃថ៍។', 'texte_mise_a_niveau_base_1' => 'លោក​អ្នក​ទើបតែ​បាន​កែសម្រួល​ហ្វា​លSPIP។ ឥឡូវ​លោក​អ្នក​ត្រូវ​តែ​កែ​លំអ​សំណុំ​ទិន្នន័យ​របស់​វ៉ិ​ប​សាយ​នេះ', 'texte_modifier_article' => 'កែប្រែ អត្ថបទ៖', - 'texte_moteur_recherche_active' => 'កម្មវិធី​ស្វែងរក​វ៉ិ​ប​សាយ​ត្រូវ​បាន​បើកមុខ​ងារ​។ សូម​ប្រើប្រាស់​បញ្ជា​នេះ ប្រ​សិន​បេ​លោក​អ្នកមាន​បំណង​អនុវត្ដ​ការ​រៀបចំ​លិបិក្រម​ជា​ថ្មី​យ៉ាង​រហ័ស​មួយ​នោះ (​ឧទាហរណ៍​កែ​លំអ​ការ​ថត​ទុក​។​) លោក​អ្នក​ត្រូវ​កត់​សំគាល់ថា​ឯកសារ​ដែល​បាន​កែសម្រួល​តាម​វ៉ិ​ធី​ធម្មតា (​តាម​រយៈ​ការ​ភ្ជាប់​ប្រព័ន្ធ​ជាមួយនឹង SPIP) គឺ​ត្រូវ​បាន​រៀបចំ​លិបិក្រម​ជា​ថ្មី​ម្ដងទៀត​ដោយ​ស្វ័យប្រវត្ដិៈ ៖ ដូច្នេះ​ហើយ​បញ្ជា​នេះ​មាន​ប្រយោជន៍​តែ​នៅ​ក្នុង​កាលៈទេសៈ​លើកលែង​ប៉ុណ្ណោះ​។', - 'texte_moteur_recherche_non_active' => 'កម្មវិធី​ស្វែងរក​វ៉ិ​ប​សាយ​មិន​ត្រូវ​បាន​បើក​ឱ្យ​មានមុខ​ងារ​ទេ​។', 'texte_multilinguisme' => 'ប្រសិនបើ​លោក​អ្នកមាន​បំណង​គ្រប់គ្រង​អត្ថបទ​ជា​ភាសា​ច្រើន ដែល​មានដំណើរ​ការ​ស្មុគស្មាញ លោក​អ្នក​អាច​បន្ថែម​បញ្ជី​ភាសា​មួយ​ទៅ​ក្នុង​អត្ថបទ និង​/​ឬ​ផ្នែក ទៅ​តាម​ការ​រៀបចំ​នៃ​វ៉ិ​ប​សាយ​របស់​លោក​អ្នក​។', # MODIF 'texte_multilinguisme_trad' => 'លោក​អ្នក​ក៏​អាច​បើកមុខ​ងារ​ប្រព័ន្ធ​គ្រប់គ្រង​ទំនាក់ទំនង​ក្នុង​ចំណោម​អត្ថបទ​បកប្រែ​ជា​ច្រើន​ភាសា​។', # MODIF 'texte_non_compresse' => 'uncompressed (​ម៉ាស៊ីន​មេ​របស់​លោក​អ្នក​មិន​ប្រើប្រាស់​ជាមួយនឹង​លក្ខណៈ​នេះ​ទេ​)', - 'texte_nouveau_message' => 'សារ​ថ្មី', 'texte_nouvelle_version_spip_1' => 'អ្នក ​បានតំលើង កំណែថ្មី នៃ SPIP។', 'texte_nouvelle_version_spip_2' => 'វើ​សឹ​ន​ថ្មី​នេះ​តម្រូវ​ឱ្យ​មានការ​កែសម្រួល​លំអិត​ជា​ការ​កែសម្រួល​ធម្មតា​។ ប្រសើ​ន​បើ​លោក​អ្នក​គឺជា​អ្នក​រចនា​វ៉ិ​ប​សាយ​នេះ សូម​លុប​ហ្វា​ល @connect@ និង​ចាប់ផ្ដើម​តំឡើង​ដើម្បី​អាច​កែសម្រួល​លក្ខណៈ​ទំនាក់ទំនង​សំណុំ​ទិន្នន័យ​របស់​លោក​អ្នក​។

      (NB.: ប្រសិនបើ​លោក​អ្នក​បាន​ភ្លើ​ច​លក្ខណៈ​ទំនាក់ទំនង​របស់​លោក​អ្នក សូម​មើល​ក្នុង​ហ្វា​ល@ មុន​នឹង​លុប​វា​!)

      ', # MODIF 'texte_operation_echec' => 'ត្រលប់ទៅ ទំព័រមុន, ជ្រើសយក មួយមូលដ្ឋានទិន្នន័យដទៃ ឬបង្កើតមួយថ្មី។ ផ្ទៀងពត៌មាន ផ្តល់ដោយ ខំព្យូរើ របស់អ្នក។', @@ -656,7 +555,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_publication_articles_post_dates' => 'តើ​ឥរិយាបថ​មួយ​ណា​ដែល SPIP ត្រូវ​ប្រើ ទាក់ទិន​ទៅ​នឹង​អត្ថបទ​ដែល​កំណត់​សំរាប់​ការ​ចុះ​ផ្សាយ​នៅ​អនាគត​?', 'texte_rappel_selection_champs' => '[ចាំ​ថា ត្រូវ​ជ្រើសរើស​ប្រអប់​នេះ​ឱ្យ​បាន​ត្រឹមត្រូវ​។]', 'texte_recalcul_page' => 'ប្រសិនបើ​លោក​អ្នក​ត្រូវការ​សម្រួល​ឡើង​វិ​ញុ (refresh) តែ​មួយ​ទំព័រ លោក​អ្នក​ត្រូវធ្វើ​វា​ពី​ផ្នែក​សាធារណៈ និង​ប្រើប្រាស់​ប៊ូ​តុង « refresh ».', - 'texte_recapitiule_liste_documents' => 'ទំព័រនេះ សរុប បញ្ជីនៃឯកសារ​ដែលអ្នកបានដាក់ ក្នុងផ្នែក។ ដើម្បីផ្លាស់ប្តូរ រាល់ពត៌មាននៃឯកសារ,​ ធ្វើតាមតំណភ្ជាប់ ទៅទំព័រផ្នែក របស់វា។', 'texte_recuperer_base' => 'ជួសជុល​សំណុំ​ទិន្នន័យ', 'texte_reference_mais_redirige' => 'អត្ថបទ​យោង​នៅ​ក្នុង​វ៉ិ​ប​សាយSPIP របស់​លោក​អ្នក ប៉ុន្ដែ​ត្រូវ​បាន​កំណត់​ទិស​ដៅ​ជា​ថ្មី​ទៅ​រកURL មួយ​ផ្សេង​ទៀត​។', 'texte_requetes_echouent' => 'នៅ​ពេល​ដែល​សំណួរ MySQL មិន​ដំណើរការ​ជា​លក្ខណៈ​ប្រព័ន្ធ និង​ដោយ​គ្មាន​ហេតុផល​ច្បាស់លាស់ វា​អាច​ដោយសារ​សំណុំ​ទិន្នន័យ​ផ្ទាល់​របស់​វា​នោះ​។

      MySQL មាន​លក្ខណៈ​ជួសជុល​នូវ​តារាង​របស់​ខ្លួន​ទៅ​តាម​ការ​សំរេច​របស់​ខ្លួន នៅ​ពេល​ដែល​ពួក​វា​មានការ​ខូចខាត​ដោយ​ចៃដន្យ​។ លោក​អ្នក​អាច​ព្យាយាម​ធ្វើការ​ជួសជុល​បែប​នេះ នៅ​ក្នុង​ករណី​មានការ​ខូចខាត លោក​អ្នក​ត្រូវ​រក្សា​ច្បាប់​ថតចំលង​នៃ​ផ្ទាំង​បង្ហាញ ដែល​អាច​មាន​គន្លឹះ​មួយ​ចំនួន​ស្ដី​ពី​អ្វី​ដែល​ខុស​ប្រក្រតី​...

      ប្រសិនបើ​បញ្ហា​ទាំងនោះ​មិន​អាច​ដោះស្រាយ​បាន សូម​ទាក់ទង​ទៅ​ម៉ាស៊ីន​កូន​របស់​លោក​អ្នក​។ host.

      ', # MODIF @@ -672,7 +570,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_suppression_fichiers' => 'ប្រើប្រាស់​បញ្ជា​នេះ​ដើម្បី​លុប​ហ្វា​ល​ទាំងអស់​នៅ​ក្នុង​សំណុំ​ហ្វា​ល​លាក់ខ្លួន​របស់ SPIP។ វា​អនុញ្ញាត​ឱ្យ​លោក​អ្នក បង្ខំ​ការ​សម្រួល​ដំណើរការ​ឡើង​វិញ​នូវ​ទំព័រ​ទាំងអស់ ក្នុង​ចំ​ណោំ​អ្វី​ផ្សេងៗ​ទៀត នៅ​ក្នុង​ករណី​លោក​អ្នក​បាន​ធើ​ការ​កែប្រែ​សំខាន់ៗ​ទៅ​លើ​ក្រាហ្វិក ឬ​រចនាសម្ព័ន្ធ​របស់​វ៉ិ​ប​សាយ​។', 'texte_sur_titre' => 'ចំណងជើងកំពូល', 'texte_table_ok' => '៖ តារាង​នេះ​គឺ​ត្រឹមត្រូវ', - 'texte_tables_indexation_vides' => 'តារាង​លិបិក្រម​នៃ​ម៉ាស៊ីន​គឺ​ទទេ', 'texte_tentative_recuperation' => 'ការ​ប៉ុនប៉ង​ជួសជុល', 'texte_tenter_reparation' => 'ការ​ប៉ុនប៉ង​ជួសជុល​សំណុំ​ទិន្នន័យ', 'texte_test_proxy' => 'ដើម្បី​ពិសោធ​តំណាង​នេះ សូម​បញ្ចូល​អាសយដ្ឋាន​វ៉ិ​ប​សាយ​ដែល​លោក​អ្នក​ត្រូវការ​ពិសោធន៍', @@ -680,13 +577,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_titre_obligatoire' => 'Title [ចាំបាច់]', 'texte_travail_article' => 'បាន​ដំណើរការ​លើ​អត្ថបទ​នេះ @date_diff@ នាទី​ក្រោម​មក', 'texte_travail_collaboratif' => 'ប្រសិនបើជា​រឿយៗ មាន​អ្នក​សរសេរ​កម្មវិធី​ច្រើន​អាច​ធ្វើការ​ងារ​លើ​អត្ថបទ​តែ​មួយ ប្រព័ន្ធ​អាច​កត់សំគាល់​ការងារ​ថ្មី​ជាងគេ «opened»áŸ” អត្ថបទ​ត្រូវ​រៀបចំ​ឱ្យ​មាន​របៀបរៀបរយ ដើម្បី​ជៀសវាង​ការ​កែប្រែ​រួម​គ្នា​ដែល​ធ្វើ​ឡើង​។ ជម្រើស​នេះ​ត្រូវ​បាន​បិទមុខ​ងារ​ដោយ​ក្រុមហ៊ុន​ផលិត ដើម្បី​ជៀស​វា​ពី​ការ​រំលឹក​មិន​ចាំបាច់​។ សារ​។', - 'texte_trop_resultats_auteurs' => 'លទ្ធផល​ច្រើន​ជ្រុល​សំរាប់\\"@cherche_auteur@\\"។ សូម​កំណត់​ការ​ស្វែងរក​ជា​ថ្មី​។', - 'texte_unpack' => 'ទំនាញយក កំណែចុងក្រោយ', - 'texte_utilisation_moteur_syndiques' => 'នៅ​ពេល​ដែល​លោក​អ្នក​ប្រើប្រាស់​កម្មវិធី​ស្វែងរក​រួម​របស់ SPIP លោក​អ្នក​អាច​ស្វែងរក​វ៉ិ​ប​សាយ និង​អត្ថបទ​ដែល​បញ្ចូល​តាម​ពីរ​របៀប​ផ្សេង​គ្នា​។
      - បៀ​ប​ងាយ​បំផុត​គឺ​ត្រូវ​ស្វែង​រកតែ​ចំណងជើង និង​លក្ខណៈ​អត្ថបទ​តែ​ប៉ុណ្ណោះ​។
      - ទី​ពីរ ដែល​មាន​ប្រសិទ្ធភាព​ជាង វ៉ិ​ធី​នេះ​អនុញ្ញាត​ឱ្យ SPIP ស្វែងរក​នៅ​ក្នុង​អត្ថបទ​នៃ​វ៉ិ​ប​សាយ​យោង​ផង​ដែរ​។ ប្រសិនបើ​លោក​អ្នក​យោង​ទៅ​វ៉ិ​ប​សាយ​មួយSPIP និង​ស្វែងរក​នៅ​ក្នុង​អត្ថបទ​របស់​វ៉ិ​ប​សាយ​ខ្លួន​វា​។', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'វិធី​នេះ​ជំរុញ​ឱ្យ SPIP ចូល​មើ​លក​វ៉ិ​ប​សាយ​យោង​ជា​ទៀត​ទាត់ ដែល​អាច​នាំ​ឱ្យ​មានការ​រអាក់រអួល​នៅ​ក្នុង​ការ​អនុវត្ដន៍​នៃ​វ៉ិ​ប​សាយ​ផ្ទាល់​របស់​លោក​អ្នក​។', 'texte_vide' => 'ទទេ', 'texte_vider_cache' => 'លុបសំអាត សតិភ្ជាប់', - 'titre_admin_effacer' => 'តំហែទាំ បច្ចេកទេស', 'titre_admin_tech' => 'តំហែទាំ បច្ចេកទេស', 'titre_admin_vider' => 'តំហែទាំ បច្ចេកទេស', 'titre_cadre_afficher_article' => 'បង្ហាញ អត្ថបទ៖', @@ -707,50 +599,27 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_naviguer_dans_le_site' => 'ត្រាច់ចរ ក្នុងសៃថ៍​...', 'titre_nouvelle_rubrique' => 'ផ្នែក​ថ្មី', 'titre_numero_rubrique' => 'លេខ​ផ្នែកៈ', - 'titre_page_admin_effacer' => 'តំហែទាំ បច្ចេកទេស៖ ការលុបចេញ មូលដ្ឋានទិន្នន័យ', 'titre_page_articles_edit' => 'កែប្រែ ៖ @titre@', 'titre_page_articles_page' => 'អត្ថបទ', 'titre_page_articles_tous' => 'សៃថ៍ ទាំងមូល', - 'titre_page_auteurs' => 'ពួកទស្សនាករ', 'titre_page_calendrier' => 'ប្រតិទិន @nom_mois@ @annee@', 'titre_page_config_contenu' => 'ការកំណត់ទំរង់ សៃថ៍', - 'titre_page_config_fonctions' => 'ការកំណត់ទំរង់ សៃថ៍', - 'titre_page_configuration' => 'ការកំណត់ទំរង់ នៃសៃថ៍', - 'titre_page_controle_petition' => 'ការ​តាមដាន​បដ្ឋនាលិខិត', 'titre_page_delete_all' => 'ការ​លុប​ចោល​ទាំងស្រុង និង​មិន​អាច​បដិសេធ​វិញ​បាន', - 'titre_page_documents_liste' => 'ឯកសារ​ភ្ជាប់', - 'titre_page_index' => 'តំបន់​ឯកជន​របស់​លោក​អ្នក', - 'titre_page_message_edit' => 'តែង មួយសារ', - 'titre_page_messagerie' => 'បញ្ញើសារ របស់អ្នក', 'titre_page_recherche' => 'លទ្ធផល​នៃ​ការ​ស្វែងរក @recherche@', 'titre_page_statistiques_referers' => 'ស្ថិតិ (​ទំនាក់ទំនង​ចូល​)', 'titre_page_upgrade' => 'ការ​កែ​លំអSPIP', 'titre_publication_articles_post_dates' => 'ការ​ចុះ​ផ្សាយ​អត្ថបទ​ដែល​ចុះ​កាលបរិច្ឆេទ​យឺត', - 'titre_referencer_site' => 'យោង សៃថ៍៖', - 'titre_rendez_vous' => 'ការ​កំណត់​ឈ្មោះៈ', 'titre_reparation' => 'ជួសជុល', 'titre_suivi_petition' => 'ការ​តាមដាន​បដ្ឋនាលិខិត', 'tls_ldap' => 'សុវត្ថិភាព​គាំទ្រ​ការ​ជញ្ជូន (Transport Layer Security)​ៈ', - 'trad_article_inexistant' => 'គ្មាន​អត្ថបទ​ដែល​មាន​លេខ​នេះ​ទេ', 'trad_article_traduction' => 'គ្រប់កំណែ នៃអត្ថបទនេះ ៖', - 'trad_deja_traduit' => 'កំហុស ៖ មិន​អាច​ភ្ជាប់​អត្ថបទ​នេះ​ទៅ​លេខ​ដែល​ស្នើ​ទេ​។', 'trad_delier' => 'ឈប់​ភ្ជាប់​អត្ថបទ​នេះ​ទៅ​អត្ថបទ​បកប្រែ​របស់​វា​។', # MODIF 'trad_lier' => 'អត្ថបទ​នេះ​គឺជា​អត្ថបទ​បកប្រែ​ដែល​មាន​លេខៈ', 'trad_new' => 'សរសេរ​អត្ថបទ​បកប្រែ​ថ្មី​នៃ​អត្ថបទ​នេះ', # MODIF // U - 'utf8_convert_attendez' => 'រង់ចាំ​មួយសន្ទុះ និង ផ្ទុកឡើងម្តងទៀត ​ទំព័រ​នេះ។', - 'utf8_convert_avertissement' => '​អ្នកត្រៀម​​បំ​លែង ​ខ្លឹមសារ​ នៃឃ្លាំងទិន្នន័យ ​របស់​អ្នក (​អត្ថបទ, ពត៌មានសង្ខេប, ​ល​។​) ពី​កញ្ចប់​អក្សរ @orig@ ទៅ​កញ្ចប់​អក្សរ @charset@។', - 'utf8_convert_backup' => 'កុំ​ភ្លេច​ជាមុន បង្កើត មួយច្បាប់ចំលងតាំងមូល នៃសៃថ៍ របស់អ្នក។ ​អ្នក​ត្រូវ​តែផងដែរ ផ្ទៀងផ្ទាត់ភាពសមស្រប រវាង គ្រោងឆ្អឹង និង សំណុំឯកសារភាសា របស់អ្នក @charset@។', - 'utf8_convert_erreur_deja' => 'សៃថ៍ ​របស់​អ្នក ​នៅ​ជា @charset@, គ្មានប្រយោជ ដើម្បីបំលែងវា...', 'utf8_convert_erreur_orig' => 'កំហុស ៖ មិនគាំទ្រ កញ្ចប់អក្សរ @charset@។', - 'utf8_convert_termine' => 'ចប់​សព្វគ្រប់!', - 'utf8_convert_timeout' => 'សំខាន់ ៖ ករណី អស់ពេល នៃខំព្យូរើបំរើសេវា, សូម​ផ្ទុកឡើង​ម្ដងទៀត ទំព័រ លុះត្រាវាបង្ហាញ «បានចប់!»។', - 'utf8_convert_verifier' => 'ពេលនេះ​ អ្នក​ត្រូវ​តែសំអាត សតិភ្ជាប់, និងផ្ទៀងផ្ទាត់ អោយឃើញថា ដំណើរបានល្អ លើទំព័រសាធារណៈ​នៃសៃថ៍។ ករណី មានបញ្ហាធ្ងន់ធ្ងរ, ច្បាប់ចំលងទិន្នន័យ របស់អ្នក ត្រូវបានតំលើង (ជាទ្រង់ទ្រាយ SQL) ក្នុង​ថតឯកសារ @rep@។', - 'utf8_convertir_votre_site' => 'បំ​លែង​ សៃថ៍ របស់អ្នក ជា utf-8', // V 'version' => 'កំណែ ៖' ); - -?> diff --git a/www/ecrire/lang/ecrire_lb.php b/www/ecrire/lang/ecrire_lb.php index 74bc818f..b25c5399 100644 --- a/www/ecrire/lang/ecrire_lb.php +++ b/www/ecrire/lang/ecrire_lb.php @@ -1,9 +1,11 @@ 'Gidd op déi läscht Säit zeréck a kontrolléiert d’Informatiounen.', 'avis_connexion_ldap_echec_3' => 'Alternativ benotzt keng LDAP-Ënnerstetzung fir d’Benotzer ze verwalten.', 'avis_deplacement_rubrique' => 'Opgepasst! Dës Rubrik huet @contient_breves@ brève@scb@: wann der se réckelt, klickt dëst Bestätegungs-Feld un.', - 'avis_destinataire_obligatoire' => 'Dir musst dën Empfänger uginn ier der dëse Message fortschéckt.', 'avis_erreur_connexion_mysql' => 'Fehler bei der SQL-Verbindung', - 'avis_erreur_version_archive' => 'Opgepasst! De Fichier @archive@ korrespondéiert zu enger anerer SPIP-Versioun wéi déi installéiert. Dir kommt a grouss Schwieregkeeten: Risiko dat är Datebank zerstéiert gëtt, generellen Dysfonctionnement vum Site, asw. Bestätegt dësen Import net.

      Fir méi Informatiounen kuckt an der Dokumentatioun vu SPIP.

      ', - 'avis_espace_interdit' => 'Gespaarten Deel

      SPIP ass schon installéiert.

      ', + 'avis_espace_interdit' => 'Gespaarten Deel

      SPIP ass schon installéiert.

      ', # MODIF 'avis_lecture_noms_bases_1' => 'Den Installatiouns-Programm konnt d’Nimm vun den installéierten Datebanken net liesen.', 'avis_lecture_noms_bases_2' => 'Entweder steet keng Datebank zur Verfügung, oder d’Fonctioun fir d’Datebanken opzelëschten ass aus Sécherheetsgrënn ausgeschalt ginn (dat ass esou bei villen Provider’en).', 'avis_lecture_noms_bases_3' => 'Am zweete Fall ass et méiglech dat eng Datebank mam selwechte Numm wéi äre Login ka benotzt ginn:', - 'avis_non_acces_message' => 'Dir hutt keen Zougang zu dësem Message.', 'avis_non_acces_page' => 'Dir hutt keen Zougang zu dëser Säit.', 'avis_operation_echec' => 'Déi Operatioun huet net fonctionnéiert.', 'avis_operation_impossible' => 'Operatioun onméiglech', - 'avis_probleme_archive' => 'Problem beim Liese vum Fichier @archive@', 'avis_suppression_base' => 'OPGEPASST, d’Läsche vun den Daten ka net réckgängeg gemaach ginn', - 'avis_version_mysql' => 'Är SQL-Versioun (@version_mysql@) erlaabt d’automatesch Reparatur vun den Datebank-Tafelen net.', // B 'bouton_acces_ldap' => 'LDAP-Zougang bäiflécken', 'bouton_ajouter' => 'Bäiflécken', - 'bouton_ajouter_participant' => 'MATAARBECHTER BÄIFLÉCKEN:', - 'bouton_annonce' => 'ANNONCE', 'bouton_annuler' => 'Ofbriechen', - 'bouton_checkbox_envoi_message' => 'et kann e Message geschéckt ginn', - 'bouton_checkbox_indiquer_site' => 'dir musst en Internet-Site uginn', - 'bouton_checkbox_signature_unique_email' => 'eng eenzeg Ënnerschrëft pro Email-Adress', - 'bouton_checkbox_signature_unique_site' => 'Eng eenzeg Ënnerschrëft pro Internet-Site', 'bouton_demande_publication' => 'D’Verëffentlechung vum Artikel ufroen', 'bouton_desactive_tout' => 'Alles ausschalten', 'bouton_desinstaller' => 'De-installéieren', - 'bouton_effacer_index' => 'Den Index läschen', 'bouton_effacer_tout' => 'ALLES läschen', - 'bouton_envoi_message_02' => 'MESSAGE SCHÉCKEN', 'bouton_envoyer_message' => 'Definitive Message: schécken', 'bouton_fermer' => 'Zouklappen', 'bouton_mettre_a_jour_base' => 'Datebank upassen', 'bouton_modifier' => 'Änneren', - 'bouton_pense_bete' => 'PERSÉINLECH NOTIZ', - 'bouton_radio_activer_messagerie' => 'Déi intern Messagerie aschalten', - 'bouton_radio_activer_messagerie_interne' => 'Déi intern Messagerie aschalten', - 'bouton_radio_activer_petition' => 'D’Petitioun aschalten', 'bouton_radio_afficher' => 'Weisen', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Op d’Lëscht vun den ugemellte Redaktere kommen', - 'bouton_radio_desactiver_messagerie' => 'D’Messagerie ausschalten', 'bouton_radio_envoi_annonces_adresse' => 'D’Annonce schécken op d’Adress:', 'bouton_radio_envoi_liste_nouveautes' => 'D’Lëscht mat de Neiegkeeten schécken', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Net op d’Lëscht vun de Redaktere kommen', 'bouton_radio_non_envoi_annonces_editoriales' => 'Keng editorial Neiegkeete schécken', - 'bouton_radio_pas_petition' => 'Keng Petitioun', - 'bouton_radio_petition_activee' => 'Petitioun ageschalt', - 'bouton_radio_supprimer_petition' => 'D’Petitioun läschen', 'bouton_redirection' => 'ËMLEEDUNG', 'bouton_relancer_installation' => 'D’Ariichte nei ufänken', 'bouton_suivant' => 'Weider', 'bouton_tenter_recuperation' => 'Eng Reparatur probéieren', 'bouton_test_proxy' => 'E Proxy probéieren', 'bouton_vider_cache' => 'De Cache läschen', - 'bouton_voir_message' => 'De Message weisen ier e validéiert gëtt', // C - 'cache_mode_compresse' => 'D’Fichieren am Cache si kompriméiert gespäichert.', - 'cache_mode_non_compresse' => 'D’Fichieren am Cache si net kompriméiert gespäichert.', 'cache_modifiable_webmestre' => 'Dëse Parameter ka vum Webmaster geännert ginn.', 'calendrier_synchro' => 'Wann dir en iCal-kompatibelen Agenda benotzt, da kënnt dir d’Informatioune mat dësem Site synchroniséieren.', 'config_activer_champs' => 'Folgend Felder aschalten', @@ -105,9 +83,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_titre_base_sup' => 'Ariichte vun enger zousätzlecher Datebank', 'config_titre_base_sup_choix' => 'Wielt eng zousätzlech Datebank aus', 'connexion_ldap' => 'Verbindung:', - 'copier_en_local' => 'Lokal kopéieren', 'creer_et_associer_un_auteur' => 'En Auteur bäiflécken an ubannen', - 'creer_et_associer_une_rubrique' => 'Eng Rubrik bäiflécken an ubannen', // D 'date_mot_heures' => 'h', @@ -137,7 +113,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Äre Login', 'entree_login_connexion_1' => 'De Login fir d’Verbindung', 'entree_login_connexion_2' => '(Ass heiansdo selwecht wéi ären FTP-Login, heiansdo gëtt en eidel gelooss)', - 'entree_login_ldap' => 'Initialen LDAP-Login', 'entree_mot_passe' => 'Äert Passwuert', 'entree_mot_passe_1' => 'D’Passwuert fir d’Verbindung', 'entree_mot_passe_2' => '(Ass heiansdo selwecht wéi äert FTP-Passwuert; gëtt heiansdo eidel gelooss)', @@ -194,16 +169,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_configuration' => 'Astellung', 'icone_creer_auteur' => 'E neien Auteur bäiflécken an un dësen Artikel bannen', 'icone_creer_mot_cle' => 'E neit Schlësselwuert bäiflécken an un dësen Artikel bannen', - 'icone_creer_mot_cle_rubrique' => 'E neit Schlësselwuert bäiflécken an un dës Rubrik bannen', - 'icone_creer_mot_cle_site' => 'E neit Schlësselwuert bäiflécken an un dëse Site bannen', 'icone_creer_rubrique_2' => 'Nei Rubrik bäiflécken', 'icone_edition' => 'Ännerung', - 'icone_envoyer_message' => 'Dëse Message schécken', 'icone_ma_langue' => 'Meng Sprooch', 'icone_mes_infos' => 'Meng Informatiounen', 'icone_mes_preferences' => 'Meng Virléift', 'icone_modifier_article' => 'Dësen Artikel änneren', - 'icone_modifier_message' => 'Dëse Message änneren', 'icone_modifier_rubrique' => 'Dës Rubrik änneren', 'icone_publication' => 'Verëffentlechung', 'icone_relancer_signataire' => 'Beim Ënnerschreiwer nofroen', @@ -216,21 +187,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_supprimer_signature' => 'Dës Ënnerschrëft läschen', 'icone_valider_signature' => 'Dës Ënnerschrëft bestätegen', 'image_administrer_rubrique' => 'Dir kënnt dës Rubrik verwalten', - 'impossible_modifier_login_auteur' => 'De Login ka net geännert ginn.', - 'impossible_modifier_pass_auteur' => 'D’Passwuert ka net geännert ginn.', 'info_1_article' => '1 Artikel', - 'info_1_article_syndique' => '1 Artikel verlinkt', 'info_1_auteur' => '1 Auteur', 'info_1_message' => '1 Message', 'info_1_mot_cle' => '1 Schlësselwuert', 'info_1_rubrique' => '1 Rubrik', - 'info_1_site' => '1 Site', 'info_1_visiteur' => '1 Visiteur', 'info_activer_cookie' => 'Dir kënnt e Cookie aktivéieren, deen iech erlaabt einfach vum ëffentlechen op de private Site ze wiesselen.', 'info_admin_etre_webmestre' => 'Mir Webmaster-Rechter ginn', - 'info_admin_gere_rubriques' => 'Dësen Admin këmmert sech ëm folgend Rubriken:', - 'info_admin_gere_toutes_rubriques' => 'Dësen Admin këmmert sech ëm all Rubriken', - 'info_admin_gere_toutes_rubriques_2' => 'Ech verwalten all d’Rubriken', 'info_admin_je_suis_webmestre' => 'Ech si Webmaster', 'info_admin_statuer_webmestre' => 'Dësem Admin Webmaster-Rechter ginn', 'info_admin_webmestre' => 'Dësen Admin ass Webmaster', @@ -244,13 +208,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_adresse' => 'op der Adress:', 'info_adresse_url' => 'Adress (URL) vum ëffentleche Site', 'info_afficher_par_nb' => 'Zortéiert no', - 'info_afficher_visites' => 'D’Visiten weisen fir:', 'info_aide_en_ligne' => 'Online-Hëllef vu SPIP', 'info_ajout_image' => 'Wann dir engem Artikel Biller als Dokumenter bäifléckt, kann SPIP automatesch Vignetten maachen. Dat erlaabt z.B. automatesch eng Billergalerie ze maachen.', - 'info_ajout_participant' => 'De folgenden gouf bäigefléckt:', 'info_ajouter_rubrique' => 'Eng aner Rubrik fir ze verwalten bäiflécken:', 'info_annonce_nouveautes' => 'D’Neiegkeeten annoncéieren', - 'info_anterieur' => 'virdrun', 'info_article' => 'Artikel', 'info_article_2' => 'Artikelen', 'info_article_a_paraitre' => 'Déi post-datéiert Artikelen', @@ -260,17 +221,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_miens' => 'Meng Artikelen', 'info_articles_tous' => 'All Artikelen', 'info_articles_trouves' => 'Artikele fonnt', - 'info_articles_trouves_dans_texte' => 'Artikele fonnt (am Text)', 'info_attente_validation' => 'Är Artikelen déi op Bestätegung waarden', 'info_aucun_article' => 'Keen Artikel', - 'info_aucun_article_syndique' => 'Keen Artikel verlinkt', 'info_aucun_auteur' => 'Keen Auteur', 'info_aucun_message' => 'Kee Message', 'info_aucun_rubrique' => 'Keng Rubrik', - 'info_aucun_site' => 'Kee Site', - 'info_aucun_visiteur' => 'Kee Visiteur', 'info_aujourdhui' => 'Haut:', - 'info_auteur_message' => 'AUTEUR VUM MESSAGE:', + 'info_auteur_gere_toutes_rubriques_2' => 'Ech verwalten all d’Rubriken', # MODIF 'info_auteurs' => 'D’Auteuren', 'info_auteurs_par_tri' => 'Auteuren @partri@', 'info_auteurs_trouves' => 'Auteure fonnt', @@ -289,8 +246,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_2' => '. an @liste@', 'info_code_acces' => 'Vergiesst är Zougangs-Informatioune net!', 'info_compatibilite_html' => 'HTML-Norm', - 'info_compresseur_gzip' => 'Mir roden iech fir d’éischt ze kontrolléieren op ären Hebergeur d’PHP-Skripter net schonns systematesch kompriméiert; dir kënnt dofir z.B. dësen Service benotzen: @testgzip@', - 'info_compresseur_texte' => 'Wann äre Server d’HTML-Säiten net automatesch kompriméiert, kënnt dir probéieren eng Kompressioun ze forcéieren. Opgepasst: dat kann verschidde Serveren méi lues maachen.', 'info_config_suivi' => 'Wann dës Adress eng Mailingslëscht ass, da kënnt dier hei d’Adress uginn wou d’Mataarbechter vun dësem Site sech aschreiwe kënnen. Dës Adress kann eng URL sinn (z.B. d’Internetsäit wou een sech aschreiwe kann), oder eng Email-Adress mat engem extra Sujet (z.B.: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Dir kënnt Iech un d’Mailingslëscht vun dësem Site abonnéieren. Dir kritt dann per Email d’Annoncen vun den Artikelen a Kuerzmeldungen déi fir d’Verëffentlechung virgeschloe goufen.', 'info_confirmer_passe' => 'Bestätegt dat neit Passwuert:', @@ -314,8 +269,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Éischten Redaktiounsdatum:', 'info_date_referencement' => 'DËSE SITE GOUF VERLINKT:', 'info_derniere_etape' => 'Et ass fäerdeg!', - 'info_derniers_articles_publies' => 'Är läscht verëffentlecht Artikelen', - 'info_desactiver_messagerie_personnelle' => 'Dir kënnt är perséinlech Messagerie op dësem Site an- oder ausschalten.', 'info_descriptif' => 'Beschreiwung:', 'info_desinstaller_plugin' => 'läscht d’Daten a schalt de Plugin aus', 'info_discussion_cours' => 'Aktiv Diskussiounen', @@ -323,7 +276,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_email_envoi' => 'Adress vum Absender (optional)', 'info_email_envoi_txt' => 'Gitt d’Adress un fir Email’en ze schécken (als Default gëtt d’Adress vum Destinataire benotzt):', 'info_email_webmestre' => 'Email-Adress vum Webmaster', - 'info_entrer_code_alphabet' => 'Code vum Alphabet dat benotzt soll ginn:', 'info_envoi_email_automatique' => 'Automatescht Schécken vun Emailen', 'info_envoyer_maintenant' => 'Elo schécken', 'info_etape_suivante' => 'Weider bei de nächste Schrëtt', @@ -334,25 +286,17 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_facilite_suivi_activite' => 'Fir déi editorial Aktivitéiten ze verfollegen, ka SPIP d’Demande fir Artikelen ze verëffentlechen oder d’Bestätegungen un eng Mailingslëscht vun de Redakteren schécken.', 'info_fichiers_authent' => 'Authentifikatiouns-Fichieren ".htpasswd"', 'info_forums_abo_invites' => 'Äre Site huet Forume wou een sech umelle muss; d’Visiteuren ginn also agelueden sech ze enregistréieren.', - 'info_gauche_admin_effacer' => 'Dës Säit ass fir déi Responsabel vum Site reservéiert.

      Si erlaabt technesch Maintenance-Aarbechten. Fir verschidde vun deene Prozeduren muss een sech iwwer FTP identifizéieren kënnen.

      ', 'info_gauche_admin_tech' => 'Dës Säit ass fir déi Responsabel vum Site reservéiert.

      Si erlaabt technesch Maintenance-Aarbechten. Fir verschidde vun deene Prozeduren muss een sech iwwer FTP identifizéieren kënnen.

      ', 'info_gauche_admin_vider' => 'Dës Säit ass fir déi Responsabel vum Site reservéiert.

      Si erlaabt technesch Maintenance-Aarbechten. Fir verschidde vun deene Prozeduren muss een sech iwwer FTP identifizéieren kënnen.

      ', 'info_gauche_auteurs' => 'Hei fannt dir all d’Auteur’en vum Site. Hiren Zoustand ass duerch d’Faarf ugewisen (Admin = gréng; Redakter = giel).', 'info_gauche_auteurs_exterieurs' => 'Déi extern Auteuren ouni Zougang zum internen Deel sinn duerch eng blo Ikon markéiert, déi geläschten Auteuren duerch eng Dreckskëscht.', 'info_gauche_messagerie' => 'D’Messagerie erlaabt Iech Messagen un d’Redakteren ze schécken, privat Notizen ze maachen oder Annoncen op d’Startsäit vum privaten Deel ze setzen (wann dir Administrateur sidd).', - 'info_gauche_numero_auteur' => 'AUTEUR NUMMER', 'info_gauche_statistiques_referers' => 'Dës Säit weist d’Lëscht vun de Referer, déi Siten wou e Link op ären Site geklickt gouf, awer nëmmen fir haut: dës Lëscht gëtt all 24 Stonnen op Null gesat.', 'info_gauche_visiteurs_enregistres' => 'Hei sinn déi ageschriwwe Visiteuren vum ëffentlechen Deel (Forumen op Abonnement).', 'info_generation_miniatures_images' => 'Miniature vun de Biller maachen', - 'info_gerer_trad' => 'Iwwersetzungs-Linken aschalten?', 'info_gerer_trad_objets' => '@objets@: Iwwersetzungs-Linke änneren', 'info_hebergeur_desactiver_envoi_email' => 'Verschidden Provideren erlabe net automatesch Emailen ze schécken. An deem Fall fonctionnéiert dat hei net.', 'info_hier' => 'gëschter:', - 'info_historique_activer' => 'Versioning aschalten', - 'info_historique_affiche' => 'Nei Versioun weisen', - 'info_historique_comparaison' => 'Verglach', - 'info_historique_desactiver' => 'Versioning ausschalten', - 'info_historique_texte' => 'De Versioning erlaabt den Historique vun allen Ännerunge vun engem Artikel an d’Uweisen vun den Ënnerscheeder tëschent de Versiounen.', 'info_identification_publique' => 'Är ëffentlech Identitéit...', 'info_image_process' => 'Wielt déi bescht Method fir Vignetten ze maachen an deem dier op d’Bild klickt.', 'info_image_process2' => 'Wa kee Bild kënnt, dann ass äre Server net fir dës Funktionalitéit ageriicht. Wann dir se wëllt benotzen, kontaktéiert den technesche Responsabelen a frot no der Extensiounen "GD" oder "Imagick".', @@ -373,8 +317,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_logos' => 'D’Logoen', 'info_maximum' => 'Maximum:', 'info_meme_rubrique' => 'An dëser Rubrik', - 'info_message' => 'Message vum', - 'info_message_efface' => 'MESSAGE GELÄSCHT', 'info_message_en_redaction' => 'Är Messagen an der Aarbecht', 'info_message_technique' => 'Technesche Message:', 'info_messagerie_interne' => 'Intern Messagerie', @@ -385,28 +327,21 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'Rubrik änneren:', 'info_modifier_titre' => 'Änneren: @titre@', 'info_mon_site_spip' => 'Mäi SPIP-Site', - 'info_mot_sans_groupe' => '(Wierder ouni Grupp...)', - 'info_moteur_recherche' => 'Integréierten Sich-Motor', 'info_moyenne' => 'Duerchschnëtt', - 'info_multi_articles' => 'De Sprooch-Menü bei den Artikelen aschalten?', 'info_multi_cet_article' => 'Sprooch vun dësem Artikel:', 'info_multi_langues_choisies' => 'Wielt hei d’Sproochen aus déi d’Redaktere vun ärem Site kënne benotzen. Déi schonns gebrauchte Sproochen (als éischt ugewisen) kënnen net ausgeschalt ginn.', 'info_multi_objets' => '@objets@: de Sprooch-Menü aschalten', - 'info_multi_rubriques' => 'Sprooch-Menü bei de Rubriken aschalten?', 'info_multi_secteurs' => '... nëmme fir d’Haapt-Rubriken?', 'info_nb_articles' => '@nb@ Artikelen', - 'info_nb_articles_syndiques' => '@nb@ verlinkten Artikelen', 'info_nb_auteurs' => '@nb@ Auteuren', 'info_nb_messages' => '@nb@ Messagen', 'info_nb_mots_cles' => '@nb@ Schlësselwierder', 'info_nb_rubriques' => '@nb@ Rubriken', - 'info_nb_sites' => '@nb@ Websiten', 'info_nb_visiteurs' => '@nb@ Visiteuren', 'info_nom' => 'Numm', 'info_nom_destinataire' => 'Numm vum Destinataire', 'info_nom_site' => 'Numm vun ärem Site', 'info_nombre_articles' => '@nb_articles@ Artikelen,', - 'info_nombre_partcipants' => 'HUELEN UN DER DISKUSSIOUN DEEL:', 'info_nombre_rubriques' => '@nb_rubriques@ Rubriken,', 'info_nombre_sites' => '@nb_sites@ Siten,', 'info_non_deplacer' => 'Net réckelen...', @@ -414,19 +349,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_envoi_liste_nouveautes' => 'Keng Lëscht vun de Neiegkeete schécken', 'info_non_modifiable' => 'ka net geännert ginn', 'info_non_suppression_mot_cle' => 'ech kann dëst Schlësselwuert net läschen.', - 'info_note_numero' => 'Notiz @numero@', 'info_notes' => 'Notten', # war als "Notizen" übersetzt - 'info_nouveaux_message' => 'Nei Messagen', 'info_nouvel_article' => 'Neien Artikel', 'info_nouvelle_traduction' => 'Nei Iwwersetzung:', 'info_numero_article' => 'ARTIKEL NUMMER:', 'info_obligatoire_02' => '(obligatoresch)', 'info_option_accepter_visiteurs' => 'D’Aschreiwung vu Visiteuren unhuelen', - 'info_option_faire_suivre' => 'D’Messagen vun de Forumen un d’Auteuren vun den Artikele schécken', 'info_option_ne_pas_accepter_visiteurs' => 'D’Aschreiwung vu Visiteuren refuséieren', 'info_options_avancees' => 'FORTGESCHRATTEN OPTIOUNEN', - 'info_ortho_activer' => 'D’Korrektur aschalten', - 'info_ortho_desactiver' => 'D’Korrektur ausschalten', 'info_ou' => 'oder...', 'info_page_interdite' => 'Säit gespaart', 'info_par_nom' => 'no Numm', @@ -436,20 +366,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_passe_trop_court' => 'Passwuert ze kuerz.', 'info_passe_trop_court_car_pluriel' => 'D’Passwuert muss mindestens @nb@ Zeechen hunn.', 'info_passes_identiques' => 'Déi zwee Passwierder si net selwecht.', - 'info_pense_bete_ancien' => 'Är al Notizen', 'info_plus_cinq_car' => 'méi wéi 5 Buschtawen', 'info_plus_cinq_car_2' => '(Méi wéi 5 Buschtawen)', 'info_plus_trois_car' => '(Méi wéi 3 Buschtawen)', 'info_popularite' => 'Popularitéit: @popularite@; Visiten: @visites@', - 'info_popularite_4' => 'Popularitéit: @popularite@; Visiten: @visites@', 'info_post_scriptum' => 'Post-Scriptum', 'info_post_scriptum_2' => 'Post-Scriptum:', 'info_pour' => 'fir', - 'info_preview_admin' => 'Nëmmen d’Administrateure kréien eng Virschau vum Site', - 'info_preview_comite' => 'All d’Redaktere kréien eng Virschau vum Site', - 'info_preview_desactive' => 'D’Virschau ass ausgeschalt', - 'info_preview_texte' => 'Dir kënnt de Site ukucken wéi wann all d’Artikelen an d’Kuerzmeldungen (déi op mannst de Status "virgeschloen" hunn) verëffentlecht wären. Soll dës Méiglechkeet fir just d’Administrateuren, fir all d’Redakteren oder fir kee gëllen.', - 'info_principaux_correspondants' => 'Är wichtegst Korrespondenten', + 'info_preview_texte' => 'Dir kënnt de Site ukucken wéi wann all d’Artikelen an d’Kuerzmeldungen (déi op mannst de Status "virgeschloen" hunn) verëffentlecht wären. Soll dës Méiglechkeet fir just d’Administrateuren, fir all d’Redakteren oder fir kee gëllen.', # MODIF 'info_procedez_par_etape' => 'gitt Schrëtt fir Schrëtt fir', 'info_procedure_maj_version' => 'D’Update-Prozedur muss ausgeféiert ginn fir är Datebank un déi nei SPIP-Versioun unzepassen.', 'info_proxy_ok' => 'Test vum Proxy OK.', @@ -458,13 +382,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_publies' => 'Är verëffentlecht Artikelen', 'info_question_accepter_visiteurs' => 'Wann är Skeletter d’Aschreiwen vu Visiteuren ouni Zougang op de privaten Deel virgesinn, da schalt d’Optioun hei drënner an:', 'info_question_inscription_nouveaux_redacteurs' => 'Acceptéiert dier d’Aschreiwe vu neie Redakteren direkt vum ëffentleche Site? Wa jo, da kënnen d’Visiteuren sech iwwer en automatesche Formulaire aschreiwen an esou Zougang op de privaten Deel kréien fir hir Artikelen ze proposéieren.
      Während der Aschreiwungs-Phase kréien d’Benotzer automatesch en Email mat hiren Zougangs-Informatiounen. Verschidde Provideren verbidden d’Schécken vun Email vun hire Serveuren aus: an deem Fall ass automatescht Aschreiwen onméiglech.
      ', - 'info_question_utilisation_moteur_recherche' => 'Wëllt dir de Sich-Motor vu SPIP benotzen? (ausschalten mécht de System méi séier.)', - 'info_question_vignettes_referer_non' => 'D’Virschau vun den Ausgangs-Site net weisen', 'info_qui_edite' => 'Den Auteur @nom_auteur_modif@ huet virun @date_diff@ Minutten un dësem Inhalt geschafft', 'info_racine_site' => 'Ufank vum Site', 'info_recharger_page' => 'Lued dës Säit an e puer Sekonne nei.', - 'info_recherche_auteur_a_affiner' => 'Ze vill Resultater fir "@cherche_auteur@"; verbessert är Sich.', - 'info_recherche_auteur_ok' => 'E puer Redaktere fonnt fir "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Kee Resultat fir "@cherche_auteur@".', 'info_recommencer' => 'Fänkt w.e.g. nei un.', 'info_redacteur_1' => 'Redakter', @@ -483,7 +403,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'Rubriken', 'info_rubriques_02' => 'Rubriken', 'info_rubriques_trouvees' => 'Rubrike fonnt', - 'info_rubriques_trouvees_dans_texte' => 'Rubrike fonnt (am Text)', 'info_sans_titre' => 'Ouni Titel', 'info_selection_chemin_acces' => 'Wielt hei de Wee fir den Annuaire:', 'info_signatures' => 'Ënnerschrëften', @@ -496,14 +415,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_sites_lies_mot' => 'Un dëst Schlësselwuert gebonne verlinkte Siten', 'info_sites_proxy' => 'Proxy benotzen', 'info_sites_trouves' => 'Site fonnt', - 'info_sites_trouves_dans_texte' => 'Site fonnt (am Text)', 'info_sous_titre' => 'Ënnertitel:', 'info_statut_administrateur' => 'Administrateur', 'info_statut_auteur' => 'Zoustand vun dësem Auteur:', 'info_statut_auteur_2' => 'Ech sinn', 'info_statut_auteur_a_confirmer' => 'Umeldung ze bestätegen', 'info_statut_auteur_autre' => 'Aneren Zoustand:', - 'info_statut_efface' => 'Geläscht', 'info_statut_redacteur' => 'Redakter', 'info_statut_utilisateurs_1' => 'Default-Zoustand vun den importéierten Auteuren', 'info_statut_utilisateurs_2' => 'Wielt den Zoustand vun de Persounen aus dem LDAP-Annuaire déi sech fir d’éischt umellen. Dier kënnt duerno dës Valeur pro Auteur änneren.', @@ -526,7 +443,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_presents' => 'All d’Artikelen déi an dëser Rubrik verëffentlecht sinn', 'info_tous_articles_refuses' => 'All déi refuséiert Artikelen', 'info_tous_les' => 'all:', - 'info_tous_redacteurs' => 'Annoncen un all d’Redakteren', 'info_tout_site' => 'De ganze Site', 'info_tout_site2' => 'Dësen Artikel ass net an déi Sprooch iwwersat.', 'info_tout_site3' => 'Den Artikel ass an déi Sprooch iwwersat, mais den Original-Artikel ass geännert ginn. D’Iwwersetzung muss ugepasst ginn.', @@ -541,7 +457,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_une_rubrique_02' => '1 Rubrik', 'info_url' => 'URL:', 'info_url_proxy' => 'URL vum Proxy', - 'info_url_site' => 'URL VUM SITE:', 'info_url_test_proxy' => 'Test-URL', 'info_urlref' => 'Link:', 'info_utilisation_spip' => 'Dir kënnt elo de System benotzen...', @@ -552,7 +467,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_visiteurs_02' => 'Visiteure vum ëffentleche Site', 'info_webmestre_forces' => 'D’Webmasteren sinn an @file_options@ definéiert.', 'install_adresse_base_hebergeur' => 'Adress vun der Datebank déi dir vum Provider krut', - 'install_base_ok' => 'D’Datebank @base@ ass erkannt ginn', 'install_connect_ok' => 'Déi nei Datebank gouf ënnert dem Server-Numm @connect@ bäigefléckt.', 'install_echec_annonce' => 'D’Installatioun wäert wahrscheinlech net fonctionnéieren oder zu engem feelerhafte Site féieren...', 'install_extension_mbstring' => 'SPIP fonctionnéiert net mat:', @@ -581,8 +495,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_activer_messages_avertissement' => 'Warnungen aschalten', 'item_administrateur_2' => 'Administrateur', 'item_afficher_calendrier' => 'Am Kalenner weisen', - 'item_autoriser_documents_joints' => 'Dokumenter bei den Artikelen erlaben', - 'item_autoriser_documents_joints_rubriques' => 'Dokumenter an de Rubriken erlaben', 'item_autoriser_syndication_integrale' => 'D’Artikelen ganz an d’Verlinkungs-Fichieren iwwerdroen', 'item_choix_administrateurs' => 'd’Administrateuren', 'item_choix_generation_miniature' => 'Automatesch Miniature vun de Biller maachen.', @@ -590,7 +502,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_choix_redacteurs' => 'd’Redakteren', 'item_choix_visiteurs' => 'd’Visiteuren vum ëffentleche Site', 'item_creer_fichiers_authent' => 'D’Fichieren .htpasswd bäiflécken', - 'item_limiter_recherche' => 'D’Sich vun den Informatiounen op äre Site limitéieren', 'item_login' => 'Login', 'item_messagerie_agenda' => 'D’Messagerie an den Agenda aschalten', 'item_mots_cles_association_articles' => 'vun den Artikelen', @@ -600,22 +511,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_non_accepter_inscriptions' => 'Keng Aschreiwung unhuelen', 'item_non_activer_messages_avertissement' => 'Keng Warnungen', 'item_non_afficher_calendrier' => 'Kee Kalenner weisen', - 'item_non_autoriser_documents_joints' => 'Keng Dokumenter bei den Artikelen erlaben', - 'item_non_autoriser_documents_joints_rubriques' => 'Keng Dokumenter an de Rubriken erlaben', 'item_non_autoriser_syndication_integrale' => 'Nëmmen e Resumé iwwerdroen', - 'item_non_compresseur' => 'Kompressioun ausschalten', 'item_non_creer_fichiers_authent' => 'Dës Fichieren net bäiflécken', - 'item_non_gerer_statistiques' => 'D’Statistik ausschalten', - 'item_non_limiter_recherche' => 'D’Sich op den Inhalt vun de verlinkte Siten erweideren', 'item_non_messagerie_agenda' => 'D’Messagerie an den Agenda ausschalten', 'item_non_publier_articles' => 'D’Artikelen net virun dem Verëffentlechungs-Datum fräiginn.', - 'item_non_utiliser_moteur_recherche' => 'De Sich-Motor ausschalten', 'item_nouvel_auteur' => 'Neien Auteur', 'item_nouvelle_rubrique' => 'Nei Rubrik', 'item_oui' => 'Jo', 'item_publier_articles' => 'D’Artikelen fäiginn, egal wéi e Verëffentlechungs-Datum', 'item_reponse_article' => 'Äntwert op den Artikel', - 'item_utiliser_moteur_recherche' => 'De Sich-Motor aschalten', 'item_version_html_max_html4' => 'Op HTML4 um ëffentleche Site beschränken', 'item_version_html_max_html5' => 'HTML5 erlaaben', 'item_visiteur' => 'Visiteur', @@ -630,15 +534,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'label_choix_langue' => 'Wielt är Sprooch aus', 'label_nom_fichier_connect' => 'Gidd de Numm vun dësem Server un', 'label_slogan_site' => 'Slogan vum Site', - 'label_taille_ecran' => 'Breet vum Bildschierm', + 'label_taille_ecran' => 'Breet vum Bildschierm', # MODIF 'label_texte_et_icones_navigation' => 'Navigatiouns-Menü', 'label_texte_et_icones_page' => 'Uweisen an der Säit', 'ldap_correspondance' => 'verierft vum Feld @champ@', 'ldap_correspondance_1' => 'Verierwen vun den LDAP-Felder', 'ldap_correspondance_2' => 'Gidd de Numm vum LDAP-Feld un deen zu jiddwer SPIP-Feld gehéiert. Loosst eidel fir net auszefëllen, trennt mat Leerzeechen oder Komma fir e puer LDAP-Felder ze probéieren.', - 'lien_ajout_destinataire' => 'Destinataire bäiflécken', 'lien_ajouter_auteur' => 'Dësen Auteur bäiflécken', - 'lien_ajouter_participant' => 'E Mataarbechter bäiflécken', 'lien_ajouter_une_rubrique' => 'Dës Rubrik bäiflécken', 'lien_email' => 'Email', 'lien_nom_site' => 'NUMM VUM SITE:', @@ -646,9 +548,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'lien_retirer_rubrique' => 'D’Rubrik zeréckzéien', 'lien_retirer_tous_auteurs' => 'All d’Auteuren ewech huelen', 'lien_retirer_toutes_rubriques' => 'All Rubriken zeréckzéien', - 'lien_retrait_particpant' => 'Mataarbechter läschen', 'lien_site' => 'Site', - 'lien_supprimer_rubrique' => 'dës Rubrik läschen', 'lien_tout_deplier' => 'Alles opklappen', 'lien_tout_replier' => 'Alles zouklappen', 'lien_tout_supprimer' => 'Alles läschen', @@ -673,13 +573,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mois_non_connu' => 'onbekannt', // N - 'nouvelle_version_spip' => 'D’Versioun @version@ vu SPIP ass do', + 'nouvelle_version_spip' => 'D’Versioun @version@ vu SPIP ass do', # MODIF // O 'onglet_contenu' => 'Inhalt', 'onglet_declarer_une_autre_base' => 'Eng aner Datebank ariichten', 'onglet_discuter' => 'Diskutéieren', - 'onglet_documents' => 'Dokumenter', 'onglet_interactivite' => 'Interaktivitéit', 'onglet_proprietes' => 'Propriétéiten', 'onglet_repartition_actuelle' => 'elo', @@ -722,7 +621,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'plugin_info_telecharger' => 'Eroflueden vun @url@ an Ariichten an @rep@', 'plugin_librairies_installees' => 'Installéiert Librairie’en', 'plugin_necessite_lib' => 'Dëse Plugin brauch d’Librairie @lib@', - 'plugin_necessite_plugin' => 'De Plugin @plugin@ muss mindestens op der Versioun @version@ sinn.', + 'plugin_necessite_plugin' => 'De Plugin @plugin@ muss mindestens op der Versioun @version@ sinn.', # MODIF 'plugin_necessite_plugin_sans_version' => 'Brauch de Plugin @plugin@', 'plugin_necessite_spip' => 'SPIP muss mindestens op der Versioun @version@ sinn.', 'plugin_source' => 'Quell: ', @@ -756,7 +655,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // Q 'queue_executer_maintenant' => 'Elo ausféieren', - 'queue_info_purger' => 'Dir kënnt all Aarbechten déi nach ustinn läschen an d’Lëscht mat de periodeschen Aarbechten nei starten', + 'queue_info_purger' => 'Dir kënnt all Aarbechten déi nach ustinn läschen an d’Lëscht mat de periodeschen Aarbechten nei starten', # MODIF 'queue_nb_jobs_in_queue' => '@nb@ Aarbechten an der Waardeschläif', 'queue_next_job_in_nb_sec' => 'Nächst Aarbecht an @nb@ s', 'queue_no_job_in_queue' => 'Kéng Aarbecht an der Waardeschläif', @@ -766,6 +665,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // R 'repertoire_plugins' => 'Dossier:', + 'required' => '(obligatoresch)', // S 'sans_heure' => 'ouni Zäit', @@ -792,16 +692,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_article_virtuel_reference' => 'Virtuellen Artikel: am SPIP agedroen, mais op eng aner URL ëmgeleet. Fir d’Ëmleedung ze läschen, läscht d’URL hei driwwer.', 'texte_aucun_resultat_auteur' => 'Kee Resultat fir "@cherche_auteur@"', 'texte_auteur_messagerie' => 'De Site kann Iech dauernd d’Lëscht vun den ugemellten Redaktere weisen, fir dat dier hinnen direkt Messagen kënnt schécken. Dir kënnt entscheeden net an der Lëscht ze sinn (dir sidd "onsiichtbar" fir déi aner Benotzer).', - 'texte_auteur_messagerie_1' => 'De Site erlaabt den Austausch vu Messagen a privat Forumen tëschent de Mataarbechter. Dir kënnt entscheeden net dorun deelzehuelen.', 'texte_auteurs' => 'D’AUTEUREN', 'texte_choix_base_1' => 'Wielt är Datebank:', 'texte_choix_base_2' => 'Den SQL-Server huet e puer Datebanken.', 'texte_choix_base_3' => 'Wielt hei déi déi Iech vun ärem Provider zougewise gouf:', 'texte_choix_table_prefix' => 'Präfix vun den Tabellen:', - 'texte_commande_vider_tables_indexation' => 'Benotzt dës Prozedur fir d’Index-Tabellen vum SPIP Sich-Motor eidel ze maachen. Domat gewannt dir Disk-Plaz.', 'texte_compatibilite_html' => 'Dir kënnt SPIP ustellen um ëffentleche Site e Code ze produzéieren dee mat der HTML4-Norm kompatibel ass oder him erlaben déi méi modern Méiglechkeete vun HTML5 auszenotzen.', 'texte_compatibilite_html_attention' => 'D’Optioun HTML5 aschalten ass risikofräi, mais wann dir et maacht mussen är Säite mat dësem Code ufänken fir kompatibel ze sinn: .', - 'texte_compresse_ou_non' => '(dee ka kompriméiert sinn oder net)', 'texte_compte_element' => '@count@ Element', 'texte_compte_elements' => '@count@ Elementer', 'texte_conflit_edition_correction' => 'Kontrolléiert d’Ënnerscheeder tëschent den zwou Versioune vum Text; dir kënnt är Ännerungen och kopéieren an erëm ufänken.', @@ -816,10 +713,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_date_publication_anterieure_nonaffichee' => 'Éischten Redaktiouns-Datum net weisen.', 'texte_date_publication_article' => 'VERËFFENTLECHT DEN:', 'texte_date_publication_objet' => 'Datum vun der Verëffentlechung:', - 'texte_descriptif_petition' => 'Beschreiwung vun der Petitioun', 'texte_descriptif_rapide' => 'Kuerz Beschreiwung', 'texte_effacer_base' => 'D’SPIP-Datebank läschen', - 'texte_effacer_donnees_indexation' => 'Den Index läschen', 'texte_effacer_statistiques' => 'Statistik läschen', 'texte_en_cours_validation' => 'Déi Inhalter hei drënner waarden op d’Verëffentlechung.', 'texte_enrichir_mise_a_jour' => 'Dir kënnt de Layout verbesseren mat "typographeschen Ofkierzungen".', @@ -828,23 +723,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_informations_personnelles_2' => '(N.B.: Wann äre Login bei dëser Re-Installatioun nach fonctionnéiert, da kënnt Dier', 'texte_introductif_article' => '(Aleedung vum Artikel.)', 'texte_jeu_caractere' => 'Mir roden Iech ob ärem Site dat universaalt Alphabet (UTF-8) ze gebrauchen: et kann Texter an alle Sproochen uweisen, an huet keng Kompatibilitéits-Problemer méi mat de moderne Browseren.', - 'texte_jeu_caractere_2' => 'Opgepasst: Dës Astellung mécht kéng Konversioun vun den Texter déi schon an der Datebank sinn.', 'texte_jeu_caractere_3' => 'Äre Site benotzt elo den Character-Set:', 'texte_jeu_caractere_4' => 'Wann dat net der Realitéit vun ären Daten entsprécht (z.B. no enger Restauratioun vun der Datebank), oder wann dir dësen Site nei ufänkt an dir ob en aneren Character-Set ëmschalten wëllt, dann gitt en elo hie un:', - 'texte_jeu_caractere_conversion' => 'Dir kënnt entscheeden, e fir allemol all d’Texter vun ärem Site (Artikelen, Kuerzmeldungen, Forumen, asw) ob d’Alphabet UTF-8 ze konvertéieren, andeem dir ob dës Konversiouns-Säit fir UTF-8 gidd.', - 'texte_lien_hypertexte' => '(Wann äre Message sech op een Artikel um Internet, oder op eng Säit mat méi Informatiounen bezitt, da gitt hei säin Titel an seng URL an.)', 'texte_login_ldap_1' => '(Eidel loossen fir en anonymen Zougang, oder de kompletten Wee uginn, z.B. " uid=muller, ou=users, dc=domain, dc=com ".)', 'texte_login_precaution' => 'Opgepasst! Dëst ass de Login mat dem dier ugemellt sidd. Benotzt dëse Formulaire virsiichteg...', - 'texte_message_edit' => 'Opgepasst: dëse Message kann vun all Administrateur vum Site geännert ginn, an ass fir all Redakter siichtbar. Benotzt dës Annonce nëmmen fir wichteg Informatiounen vum Site matzedeelen.', 'texte_messagerie_agenda' => 'Eng Messagerie erlaabt de Redakteren vum Site direkt am privaten Deel mateneen ze schwätzen. Si ass en Deel vum Agenda.', 'texte_mise_a_niveau_base_1' => 'Dir hutt eng Upassung vun de SPIP-Fichier’en gemaach. Elo muss d’Datebank ugepasst ginn.', 'texte_modifier_article' => 'Den Artikel änneren:', - 'texte_moteur_recherche_active' => 'De Sich-Motor ass ageschalt. Benotzt dës Prozedur fir eng séier Indexatioun (z.B. no enger Restauratioun). Déi normal Ännerunge (iwwer de SPIP-Interface) ginn automatesch nei indexéiert: dës Prozedur ass nëmmen an aussergewéinleche Fäll néideg.', - 'texte_moteur_recherche_non_active' => 'De Sich-Motor ass ausgeschalt.', 'texte_multilinguisme' => 'Wann dir Objekter a méi Sprooche mat enger komplexer Navigatioun wëllt benotzen, da kënnt dir e Menü fir d’Sproochwiel bei den Objekter aschalten.', 'texte_multilinguisme_trad' => 'Dir kënnt och eng Gestioun vun de Linken tëschent den Iwwersetzunge vu verschidden Objekter aschalten.', 'texte_non_compresse' => 'net kompriméiert (äre Server erlaabt dat net)', - 'texte_nouveau_message' => 'Neie Message', 'texte_nouvelle_version_spip_1' => 'Dir hutt eng nei Versioun vu SPIP ageriicht.', 'texte_nouvelle_version_spip_2' => 'Dës nei Versioun verlaangt e méi kompletten Update wéi normalerweis. Wann Dir de Webmaster vum Site sidd, läscht de Fichier @connect@ a fuert mat dem Ariichte weider fir Zougangsberechtegunge fir d’Datebank unzepassen.

      (N.B.: wann dir är Berechtegunge vergiess hutt, kuckt am Fichier @connect@ ier Dir e läscht...)

      ', 'texte_operation_echec' => 'Gidd op déi läscht Säit zeréck, wielt eng aner Datebank oder fléckt eng bäi. Kontrolléiert d’Informatioune vun ärem Provider.', @@ -857,7 +745,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_publication_articles_post_dates' => 'Wat soll SPIP mat den Artikelen maachen, wou de Verëffentlechungs-Datum an der Zukunft ass?', 'texte_rappel_selection_champs' => '[Vergiesst net dëst Feld richteg ze wielen.]', 'texte_recalcul_page' => 'Wann dir eng eenzeg Säit nei berechne wëllt, maacht dat léiwer iwwert den ëffentlechen Deel a benotzt de Knäppchen "Nei rechnen".', - 'texte_recapitiule_liste_documents' => 'Dës Säit ass d’Lëscht vun den Dokumenter aus de Rubriken. Fir d’Informatioune vun engem Dokument ze änneren, gitt mam Link op seng Säit an der Rubrik.', 'texte_recuperer_base' => 'Datebank flécken', 'texte_reference_mais_redirige' => 'Artikel aus dem SPIP-Site, awer op eng aner URL ëmgeleet.', 'texte_requetes_echouent' => 'Wa verschidden SQL-Query’en systematesch an ouni siichtbar Ursaach feelschloen, ass et méiglech dat et un der Datebank selwer hänkt.

      Ären SQL-Serveur kann seng Tabelle flécken wann se futti sinn. Dir kënnt hei eng Reparatur probéieren; wann et net geet, kopéiert den Bildschierm, do si villäicht Hiweiser op dat wat net fonctionnéiert...

      Wann de Problem weider besteet, kontaktéiert äre Provider.

      ', @@ -870,7 +757,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_suppression_fichiers' => 'Benotzt dës Prozedur fir all d’Fichieren aus dem Cache ze läschen. Sou kënnt dir z.B. all d’Säiten nei rechnen, wann dir grouss Ännerungen um Layout oder der Struktur vum Site gemaach hutt.', 'texte_sur_titre' => 'Iwwertitel', 'texte_table_ok' => ': dës Tafel ass OK.', - 'texte_tables_indexation_vides' => 'Den Index vum Sich-Motor ass eidel.', 'texte_tentative_recuperation' => 'Reparatur-Versuch', 'texte_tenter_reparation' => 'Eng Reparatur vun der Datebank probéieren', 'texte_test_proxy' => 'Fir de Proxy ze probéieren, gitt hei d’Adress vun engem Web-Site un.', @@ -878,18 +764,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_titre_obligatoire' => 'Titel [Obligatoresch]', 'texte_travail_article' => '@nom_auteur_modif@ huet un dësem Artikel virun @date_diff@ Minutte geschafft', 'texte_travail_collaboratif' => 'Wann öfters e puer Redakteren un deem selwechten Artikel schaffen, kann de System déi rezent "oppen" Artikele weisen fir gläichzäiteg Ännerungen ze verhënneren. Dës Optioun ass par défaut ausgeschalt fir net andauernd Warnungen ze weisen.', - 'texte_trop_resultats_auteurs' => 'Ze vill Resultater fir "@cherche_auteur@"; verbessert är Sich.', - 'texte_unpack' => 'läscht Versioun eroflueden', - 'texte_utilisation_moteur_syndiques' => 'Wann der den integréierte Sich-Motor benotzt, kënnt dir d’Sichen op Siten a verlinkt Artikelen op zwou Manéiere maachen.
      - Déi einfachst ass nëmmen am Titel an an der Beschreiwung vun den Artikelen ze sichen.
      - Eng aner, besser Method, erlaabt och am Text vun den Siten ze sichen. Wann dir e Site verlinkt, da sicht SPIP och am Text vun deem Site.', - 'texte_utilisation_moteur_syndiques_2' => 'Dës Method forcéiert SPIP regelméisseg déi verlinkte Siten ze besichen, wat riskéiert dass äre Site e bësschen méi lues gëtt.', 'texte_vide' => 'eidel', 'texte_vider_cache' => 'De Cache läschen', - 'titre_admin_effacer' => 'Maintenance', 'titre_admin_tech' => 'Maintenance', 'titre_admin_vider' => 'Maintenance', 'titre_ajouter_un_auteur' => 'En Auteur bäiflécken', 'titre_ajouter_un_mot' => 'E Schlësselwuert bäiflécken', - 'titre_ajouter_une_rubrique' => 'Eng Rubrik bäiflécken', 'titre_cadre_afficher_article' => 'D’Artikele weisen', 'titre_cadre_afficher_traductions' => 'Zoustand vun den Iwwersetzunge weisen fir dës Sproochen:', 'titre_cadre_ajouter_auteur' => 'AUTEUR BÄIFLÉCKEN:', @@ -916,54 +796,27 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_naviguer_dans_le_site' => 'Am Site surfen...', 'titre_nouvelle_rubrique' => 'Nei Rubrik', 'titre_numero_rubrique' => 'RUBRIK NUMMER:', - 'titre_page_admin_effacer' => 'Maintenance: Datebank läschen', 'titre_page_articles_edit' => 'Änneren: @titre@', 'titre_page_articles_page' => 'D’Artikelen', 'titre_page_articles_tous' => 'De ganzen Site', - 'titre_page_auteurs' => 'Visiteuren', 'titre_page_calendrier' => 'Kalenner @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Astelle vum Site', - 'titre_page_config_fonctions' => 'Astelle vum Site', - 'titre_page_configuration' => 'Astelle vum Site', - 'titre_page_controle_petition' => 'Suivi vun de Petitiounen', 'titre_page_delete_all' => 'definitiv an irreversibel läschen', - 'titre_page_documents_liste' => 'D’Dokumenter aus de Rubriken', - 'titre_page_index' => 'Äre privaten Deel', - 'titre_page_message_edit' => 'E Message schreiwen', - 'titre_page_messagerie' => 'Är Messagerie', 'titre_page_recherche' => 'Resultater vun der Sich @recherche@', 'titre_page_statistiques_referers' => 'Statistik (Linken déi era kommen)', - 'titre_page_statistiques_signatures_jour' => 'Zuel vun den Ënnerschrëfte pro Dag', - 'titre_page_statistiques_signatures_mois' => 'Zuel vun den Ënnerschrëfte pro Mount', 'titre_page_upgrade' => 'SPIP updaten', 'titre_publication_articles_post_dates' => 'Verëffentleche vun den post-datéierten Artikelen', - 'titre_referencer_site' => 'De Site verlinken:', - 'titre_rendez_vous' => 'RENDEZVOUS:', 'titre_reparation' => 'Reparatur', 'titre_suivi_petition' => 'Suivi vun de Petitiounen', 'tls_ldap' => 'Transport Layer Security:', - 'trad_article_inexistant' => 'Et gëtt keen Artikel mat där Nummer.', 'trad_article_traduction' => 'All d’Versioune vun dësem Artikel:', - 'trad_deja_traduit' => 'Fehler: Onméiglech dësen Artikel un déi gefrote Nummer ze bannen.', 'trad_delier' => 'Dës Iwwersetzunge net méi verbannen', 'trad_lier' => 'Dësen Artikel ass eng Iwwersetzung vum Artikel Nummer:', 'trad_new' => 'Eng nei Iwwersetzung schreiwen', // U - 'upload_info_mode_document' => 'Dëst Bild am Portfolio ofleeën', - 'upload_info_mode_image' => 'Dëst Bild aus dem Portfolio läschen', - 'utf8_convert_attendez' => 'Waart e bësschen a luet dann dës Säit nei.', - 'utf8_convert_avertissement' => 'Dir wäert elo den Inhalt vun ärer Datebank (Artikelen, Kuerzmeldungen, asw) vum Character-Set @orig@ ob @charset@ änneren.', - 'utf8_convert_backup' => 'Vergiesst net virdrun e komplette Backup vun ärem Site ze maachen. Dir musst och kontrolléieren ob är Skeletter a Sproch-Fichier’en @charset@ kompatibel sinn.', - 'utf8_convert_erreur_deja' => 'Äre Site ass schon ob @charset@, kee Wäert ze konvertéieren...', 'utf8_convert_erreur_orig' => 'Fehler: de Character-Set @charset@ gëtt net ënnerstëtzt.', - 'utf8_convert_termine' => 'Et ass fäerdeg!', - 'utf8_convert_timeout' => 'Wichteg: wann ären Server en Timeout mécht, Lued dës Säit nei bis se "Fäerdeg" weist.', - 'utf8_convert_verifier' => 'Dir musst elo de Cache läschen a kontrolléieren ob alles ob dem ëffentlechen Site richteg ass. Fir de Fall vu grousse Problemer läit am Dossier @rep@ e Backup am Format SQL.', - 'utf8_convertir_votre_site' => 'Ären Site ob UTF-8 konvertéieren', // V 'version' => 'Versioun:' ); - -?> diff --git a/www/ecrire/lang/ecrire_my.php b/www/ecrire/lang/ecrire_my.php index 3a0922c7..762f5f74 100644 --- a/www/ecrire/lang/ecrire_my.php +++ b/www/ecrire/lang/ecrire_my.php @@ -1,9 +1,11 @@ 'အရင်စာမျက်နှာသို့ ပြန်သွားပြီး အချက်လက်များကို ပြန်စစ်ဆေးပါ', 'avis_connexion_ldap_echec_3' => 'သုံးစွဲသူအသစ်များ ထည့်သွင်းရန် LDAP ကို တခြားနည်းဖြင့် အသုံးမပြုပါနှင့်', 'avis_deplacement_rubrique' => 'သတိပေးချက်။ သည်အပိုင်းတွင် @contient_breves@ သတင်းစကား @scb@ ပါဝင်ပါသည်။ ၄င်းကို ဖယ်ရှားလိုပါက သည်လုပ်ဆောင်ချက်ကို ပြန်လည်အတည်ပြုပါ', - 'avis_destinataire_obligatoire' => 'သည်စာကိုမပို့ခင် လက်ခံမည့်သူကို အရင်ရွေးချယ်ပါ', 'avis_erreur_connexion_mysql' => 'MySQL ချိတ်ဆက်မှု အခက်ခဲဖြစ်သည်', - 'avis_erreur_version_archive' => 'သတိပေးချက်။ ဖိုင်@archive@ သည် သင်ထည့်သွင်းထားသောမူကွဲထက် SPIP မူကွဲကိုပိုလက်ခံသည် သင့်ဝက်ဘ်ဆိုက်တွင် အမှားများစွာနှင့် သင့်အချက်လက် သိုလှောင်မှု ပျက်စီးခြင်းစသည့် အန္တရာယ်ရှိသောကြောင့် တောင်းဆိုမှုကို အတည်မပြုပါနှင့်

      SPIP စာရွက်စာတမ်းနှင့် ပတ်သက်ပြီး ပိုမိုသိရှိလိုပါက သို့သွားပါ', # MODIF - 'avis_espace_interdit' => 'တားမြစ်နယ်မြေ

      SPIP ကို ထည့်သွင်းပြီးဖြစ်သည်
      ', + 'avis_espace_interdit' => 'တားမြစ်နယ်မြေ
      SPIP ကို ထည့်သွင်းပြီးဖြစ်သည်
      ', 'avis_lecture_noms_bases_1' => 'အချက်များကို ထည့်သွင်းသည့်ကိရိယာသည် ထည့်သွင်းနေသော အချက်လက်သိုလှေင်မှုများကို မဖတ်နိုင်ပါ', 'avis_lecture_noms_bases_2' => 'အချက်လက်လည်းမရနိုင်ပါ (သို့) ခွင့်ပြုထားသော အချက်လက် စာရင်းလည်း လုံခြုံရေးကြောင့် မရနိုင်ပါ (ပင်မဆာဗာ တောင်းဆိုမှု များလွန်းသည်)', 'avis_lecture_noms_bases_3' => 'ဤနေရာတွင် ဒုတိယရွေး​ချယ်မှုသည် မှန်ကန်ပါသည်။ သင့်ချိတ်ဆက် ဝင်ရောက်လို့ရပြီးနောက် အချက်လက်သိုလှောင်မှုကို အမည်ပေးထားနိုင်ပါသည်', - 'avis_non_acces_message' => 'ဤစာစောင်ကို အသုံးပြုခွင့်မရှိပါ', 'avis_non_acces_page' => 'ဤစာမျက်နှာကို အသုံးပြုခွင့်မရှိပါ', 'avis_operation_echec' => 'လုပ်ဆောင်မှု မအောင်မြင်ပါ', 'avis_operation_impossible' => 'လုပ်ဆောင်ရန် မဖြစ်နိုင်ပါ', - 'avis_probleme_archive' => 'ဖိုင် @archive@ကို ဖတ်ရန်အခက်ခဲဖြစ်သည်', 'avis_suppression_base' => 'သတိပေးချက်၊ ဒေသာ ဖျက်သိမ်းမှုကို ပြန်ဖော်၍ရမည် မဟုတ်ပါ', - 'avis_version_mysql' => 'MySQL မူကွဲ(@version_mysql@)သည် အ​လိုအ​လျှောက်ပြင်ဆင်ခြင်း မပြုနိုင်ပါ', // B 'bouton_acces_ldap' => 'LDAP ကိုဆက်သွယ်ရန် လုပ်ပါ >>', 'bouton_ajouter' => 'ထပ်ထည့်ပါ', - 'bouton_ajouter_participant' => 'ပါဝင်သူထပ်ထည့်ပါ', - 'bouton_annonce' => 'ကြေငြာချက်', 'bouton_annuler' => 'ပယ်သည်', - 'bouton_checkbox_envoi_message' => 'စာပို့ရန်ဖြစ်နိုင်ခြေ', - 'bouton_checkbox_indiquer_site' => 'ဝက်ဘ်ဆိုက်နာမည်ထည့်ပါ', - 'bouton_checkbox_signature_unique_email' => 'အီးမေးလ်လိပ်စာတခုတွင် အမှတ်သားတခုသာ', - 'bouton_checkbox_signature_unique_site' => 'ဝက်ဘ်ဆိုက်တခုတွင် အမှတ်သားတခုသာ', 'bouton_demande_publication' => 'ဤဆောင်းပါး ထုတ်ဝေသည့်ရက်စွဲ လိုအပ်သည်', 'bouton_desactive_tout' => 'အားလုံးမဖြစ်နိုင်ပါ', - 'bouton_effacer_index' => 'စာညွှန်းကို ဖျက်ပစ်ပါ', 'bouton_effacer_tout' => 'အားလုံးကိုဖျက်ပစ်ပါ', - 'bouton_envoi_message_02' => 'စာပို့ပါ', 'bouton_envoyer_message' => 'နောက်ဆုံးစာကို ပို့ပါ', 'bouton_modifier' => 'ပြန်လည်ပြုပြင်မွမ်းမံသည်', - 'bouton_pense_bete' => 'ကိုယ်ပိုင်မှတ်တမ်း', - 'bouton_radio_activer_messagerie' => 'အတွင်းစာစောင် ပေးပို့နိုင်သည်', - 'bouton_radio_activer_messagerie_interne' => 'အတွင်းစာစောင် ပေးပို့နိုင်သည', - 'bouton_radio_activer_petition' => 'တောင်းဆိုမှုကို အသက်ဝင်စေသည်', 'bouton_radio_afficher' => 'ပြပါ', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'ဆက်သွယ်သော စာတည်းများကို ပြပါ', - 'bouton_radio_desactiver_messagerie' => 'စာ​စောင်ပို့ဆောင်ခြင်း ပိတ်ထားသည်', 'bouton_radio_envoi_annonces_adresse' => 'ကြေငြာချက်များကို ဤလိပ်စာများသို့ ပေးပို့ရန်', 'bouton_radio_envoi_liste_nouveautes' => 'နောက်ဆုံးရသတင်း စာရင်းကို ပေးပို့ရန်', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'အချိတ်အဆက်ရှိထားသော စာတည်းများစာရင်းတွင် မ​ပေါ်စေလိုပါ', 'bouton_radio_non_envoi_annonces_editoriales' => 'စာတည်းများ၏ ကြေငြာချက်များ ပေးပို့ရန်မလို', - 'bouton_radio_pas_petition' => 'လျှောက်လဲချက်မလို', - 'bouton_radio_petition_activee' => 'လျှောက်လဲချက် ​အတည်ပြုခဲ့ပြီးဖြစ်သည်', - 'bouton_radio_supprimer_petition' => 'လျှောက်လဲချက် ပယ်ဖျက်ရန်', 'bouton_redirection' => 'ပြန်လည်ရည်ညွှန်းသည်', 'bouton_relancer_installation' => 'ပြန်လည် ထည့်သွင်းရန်', 'bouton_suivant' => 'နောက်တစ်ခု', 'bouton_tenter_recuperation' => 'ပြင်ဆင်ရန် ကြိုးပမ်းမှု', 'bouton_test_proxy' => 'proxy ကိုစမ်းသပ်ရန်', 'bouton_vider_cache' => 'မှတ်ဉာဏ်ကို ပျယ်ဖျက်ရန်', - 'bouton_voir_message' => 'စာ​စောင်ကို အတည်မပြူခင် ​အရင်ကြည့်ရှုရန်', // C - 'cache_mode_compresse' => 'မှတ်ထားသော ဖိုင်များကို ချုံ့မထား​သော နေရာတွင် သိမ်းထားသည်', - 'cache_mode_non_compresse' => 'မှတ်ထားသော ဖိုင်များကို ချုံ့မထားသော ပုံစံဖြင့်ရေးထားသည်', 'cache_modifiable_webmestre' => 'ဤကန့်သတ်ချက်ကို webmasterမှ ပြန်လည်ပြုပြင်မွမ်းမံနိုင်သည်', 'calendrier_synchro' => 'iCal နှင့်အတူ ပြက္ခဒိန် ကိုသင်အသုံးပြုလျှင် ဤဝက်ဘ်ဆိုက်၏ သတင်းအချက်လက်များနှင့် ၄င်းကို ​ချိတ်ဆက်နိုင်ပါသည်', 'connexion_ldap' => 'ချိတ်ဆက်မှု', @@ -106,7 +84,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'သင့်ဝင်ရောက်မှု', 'entree_login_connexion_1' => 'ဆက်သွယ်မှုထဲသို့ ဝင်ရောက်မှု', 'entree_login_connexion_2' => '(FTP ထဲဝင်ရောက်မှုသည် တခါတရံ တက်လိုက်ကျလိုက်ဖြစ်နေသည်)', - 'entree_login_ldap' => 'တစ်ဦးချင်း LDAPထဲ ဝင်ရောက်မှု', 'entree_mot_passe' => 'သင့်စကားဝှက်', 'entree_mot_passe_1' => 'ဆက်သွယ်မှု စကားဝှက်', 'entree_mot_passe_2' => '(FTP ထဲဝင်ရောက်မှု စကားဝှက်သည် တခါတရံ တက်လိုက်ကျလိုက်ဖြစ်နေသည)', @@ -133,7 +110,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'ပိုမိုစုံစုံလင်လင် သိရှိရန်SPIP စာရွက်စာတမ်းများ ကိုလာလည်ပါ။', # MODIF 'ical_info_calendrier' => 'ပြက္ခဒိန် နှစ်ခုသည် သင့်၏ပစ်ပျယ်ခြင်း ပြုလုပ်မည့်​ စာရင်းထဲတွင်ရှိနေသည်။ ပထမ တခုကတော့ ထုတ်လွင့်ပြီးသားဆောင်းပါးများ စာရင်း၊နောက် တခုကတော့ စာတည်းအဖွဲ့၏ထုတ်ပြန် ကြေငြာချက်များနှင့် သင့်၏ကိုယ်ပိုင် စကားဝှက်ကို ပြန်လည်ပြင်ဆင်ရန် သတင်းစကားများပါဝင်သည်။', 'ical_methode_http' => 'ဆွဲချရန်', - 'ical_methode_webcal' => 'ပူးတွဲချိတ်ဆက်မှု (webcal://)', + 'ical_methode_webcal' => 'ပူးတွဲချိတ်ဆက်မှု (webcal://)', # MODIF 'ical_texte_js' => 'javascriptသည် ဤဝက်ဘ်ဆိုက်ပေါ်ရှိ ဆောင်းပါးသစ်များ ထုတ်​ဝေမှုကို မည်သည့်ဝက်ဘ်ဆိုက်တွင်မဆို လွယ်ကူစွာ သုံးစွဲဖော်ပြရန်ဖြစ်သည်', 'ical_texte_prive' => 'ဤပြက္ခဒိန်သည် ကိုယ်ရေးကိုတာ ကိစ္စများ (အလုပ်၊ ချိန်းဆိုချက်များ၊ တင်သွင်းပြီး ဆောင်ပါးများ၊ သတင်းများ စသည်ဖြင့်)', 'ical_texte_public' => 'ဤပြက္ခဒိန်သည် အများသုံးနိုင်ရန်ခွင့်ပြုသည် (အများဆိုင် ဆောင်းပါးများနှင့် သတင်းစကားများ)', @@ -149,9 +126,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_calendrier' => 'ပြက္ခဒိန်', 'icone_creer_auteur' => 'စာရေးသူ အသစ်ဖန်တီး၍ ဤဆောင်းပါးနှင့် ချိတ်လိုက်ပါ', 'icone_creer_rubrique_2' => 'ကဏ္ဍအသစ်တည်ဆောက်ပါ', - 'icone_envoyer_message' => 'သည်စာကို ပို့လိုက်ပါ', 'icone_modifier_article' => 'ဤဆောင်းပါးကို ပြန်လည်မွမ်းမံပါ', - 'icone_modifier_message' => 'ဤမှာကြားချက်ကို ပြန်လည်မွမ်းမံပါ', 'icone_modifier_rubrique' => 'ဤကဏ္ဍကို ပြန်လည်မွမ်းမံပါ', 'icone_retour' => 'နောက်သို့', 'icone_retour_article' => 'ဆောင်းပါးသို့ပြန်သွားပါ', @@ -161,10 +136,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'ဤလက်မှတ်ကိုအတည်ပြုပါ', 'image_administrer_rubrique' => 'ဤကဏ္ဍကို သင်စီမံနိုင်သည်', 'info_1_article' => '၁ ဆောင်းပါး', - 'info_1_site' => '၁ ဝက်ဘ်ဆိုက်', 'info_activer_cookie' => 'ကိုယ်ပိုင်နေရာနှင့် အများသုံးဝက်ဘ်ဆိုက်ကြားသို့ အလွယ်တကူကူးနိုင်ရန် သင့်ကိုခွင့်ပြုထားသော ကြီးကြပ်သူကွတ်ကီးတခုကို သင်အသက်သွင်းနိုင်သည်', - 'info_admin_gere_rubriques' => 'ဤကြီးကြပ်သူသည် အောက်ပါကဏ္ဍများကို စီမံသည်', - 'info_admin_gere_toutes_rubriques' => 'ဤဝက်ဘ်ဆိုက် ကြီးကြပ်သူသည်ကဏ္ဍအားလုံးကို စီမံခန့်ခွဲသည်', # MODIF 'info_administrateur' => 'ကြီးကြပ်သူ', 'info_administrateur_1' => 'ကြီးကြပ်သူ', 'info_administrateur_2' => 'ဝက်ဆိုက်၏ (သတိပေးချက်နှင့်အသုံးပြုပါ)', @@ -174,13 +146,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'သင်သည်အခန်းကဏ္ဍကို စီမံခန့်ခွဲနိုင်သည်', 'info_adresse' => 'လိပ်စာသို့', 'info_adresse_url' => 'အများဆိုင်ရာ ဝက်ဘ်ဆိုက်လိပ်စာ', - 'info_afficher_visites' => 'အတွက် ဝင်ရောက်ကြည့်ရှုမှုကို ပြပါ', 'info_aide_en_ligne' => 'SPIP အွန်လိုင်းအကူညီရယူရန်', 'info_ajout_image' => 'ပုံရိပ်များကို ဆောင်းပါးများနှင့် ပူးတွဲထည့်သည့်အခါ SPIP မှ နမူနာပုံရိပ်ကို ဖန်တီးပေးပါမည်။', - 'info_ajout_participant' => 'ထည့်ထားပြီးဖြစ်သည့် ပါဝင်သူများစရင်းကို အောက်တွင်ဖော်ပြထားသည်', 'info_ajouter_rubrique' => 'စာရေးသူကဏ္ဍကို စီမံရန်ထပ်ထည့်ပါ', 'info_annonce_nouveautes' => 'နောက်ဆုံးကြေငြာချက်များ', - 'info_anterieur' => 'အရင်စာမျက်နှာ', 'info_article' => 'ဆောင်းပါး', 'info_article_2' => 'ဆောင်းပါးများ', 'info_article_a_paraitre' => 'ဆောင်းပါးများထုတ်ဝေရမည့် နောက်ဆုံးရက်စွဲ', @@ -188,10 +157,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_2' => 'ဆောင်းပါးများ', 'info_articles_auteur' => 'ဤစာရေးသူ၏ ဆောင်းပါးများ', 'info_articles_trouves' => 'ဆောင်းပါးများတွေ့သည်', - 'info_articles_trouves_dans_texte' => 'စာသားထဲတွင် ဆောင်းပါးများကို တွေ့သည်', 'info_attente_validation' => 'သင့်ဆောင်းပါးများကို ပယ်ရန်အတည်ပြုခြင်း', 'info_aujourdhui' => 'ဒီနေ့', - 'info_auteur_message' => 'စာပို့သူ', 'info_auteurs' => 'စာရေးသူများ', 'info_auteurs_par_tri' => 'စာရေးသူများ@partri@', 'info_auteurs_trouves' => 'စာရေးသူများကို တွေ့သည်', @@ -224,15 +191,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'အရင်ထုတ်ဝေခဲ့သည့် ရက်စွဲ', 'info_date_referencement' => 'ဤဆိုက်ကို ကိုးကားသည့်ရက်စွဲ', 'info_derniere_etape' => 'နောက်ဆုံးအဆင့် လုပ်ပြီးပြီ', - 'info_derniers_articles_publies' => 'နောင်ဆုံး ထုတ်ဝေလိုက်သော သင့်ဆောင်းပါးများ', - 'info_desactiver_messagerie_personnelle' => 'သည်ဝက်ဘ်ဆိုက်ပေါ်မှာ သင့်ကိုယ်ပိုင်စာစောင်များကို ရနိုင်သည် (သို့) မဖြစ်နိုင်ပါ', 'info_descriptif' => 'ဖော်ပြချက်', 'info_discussion_cours' => 'ဆွေးနွေးနေဆဲ', 'info_ecrire_article' => 'ဆောင်းပါးများမရေးမီ အနည်းဆုံး အခန်းကဏ္ဍတစ်ခုကို အရင်ဖန်တီးပါ', 'info_email_envoi' => 'ပေးပို့သူ၏လိပ်စာ (ဖြစ်နိုင်လျှင်)', 'info_email_envoi_txt' => 'စာပို့သူ၏ အီးမေးလ်လိပ်စာကိုထည့်ပြီး စာပို့နေစဉ်တွင် အသုံးပြုပါ၊ (သတ်မှတ်ချက်- လက်ခံသူလိပ်စာကို ပေးပို့သူလိပ်စာအဖြစ်သုံးသည်)', 'info_email_webmestre' => 'ဝက်ဘ်ဆိုက်အုပ်ချုပ်သူ၏ အီးမေးလ်လိပ်စာ', # MODIF - 'info_entrer_code_alphabet' => 'အသုံးပြုမည့် အက္ခရာကုတ်ကို ထည့်ပါ', 'info_envoi_email_automatique' => 'အလိုအလျောက်စာပို့ခြင်း', 'info_envoyer_maintenant' => 'အခုပို့လိုက်ပါ', 'info_etape_suivante' => 'နောက်တဆင့်သို့သွားပါ', @@ -242,24 +206,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_facilite_suivi_activite' => 'To facilitate the follow-up of the site’s editorial; activities, SPIP can send notification by email, to an editor’s mailing list for instance, of publication requests and article validations.', 'info_fichiers_authent' => 'ဖိုင်\\".htpasswd\\"ကို အတည်ပြုပါ', 'info_forums_abo_invites' => 'သင့်ဝက်ဘ်ဆိုက် ဖိုရမ်မှာ အခမဲ့ဖြစ်သည်၊ ဝင်ရောက်ကြည့်ရှုသူများက အများသုံး ဝက်ဘ်ဆိုက်ပေါ်တွင် မှတ်ပုံတင်လိမ့်မည်', - 'info_gauche_admin_effacer' => 'ဝက်ဘ်ဆိုက်ကြီးကြပ်သူသာ ဤစာမျက်နှာသို့ ဝင်နိုင်သည်၊

      သည်ဟာက လုပ်ငန်းများစွာကို ထိန်းသိမ်းရန်အတွက် အထောက်ကူပြုသည်၊ အချို့က ဝက်ဘ်ဆိုက်ပေါ်တွင် လိုအပ်သော FTP ဆက်သွယ်မှုကို လုပ်ဆောင်စေနိုင်သည်

      ', # MODIF 'info_gauche_admin_tech' => 'ဝက်ဘ်ဆိုက်ကြီးကြပ်သူသာ ဤစာမျက်နှာသို့ဝင်နိုင်သည်၊

      သည်ဟာက လုပ်ငန်းများစွာကို ထိန်းသိမ်းရန်အတွက် အထောက်ကူပြုသည်၊ အချို့က ဝက်ဘ်ဆိုက်ပေါ်တွင် လိုအပ်သော FTP ဆက်သွယ်မှုကို လုပ်ဆောင်စေနိုင်သည်

      ', # MODIF 'info_gauche_admin_vider' => 'ဝက်ဘ်ဆိုက်ကြီးကြပ်သူသာ ဤစာမျက်နှာသို့ဝင်နိုင်သည်၊

      သည်ဟာက လုပ်ငန်းများစွာကို ထိန်းသိမ်းရန်အတွက် အထောက်ကူပြုသည်၊ အချို့က ဝက်ဘ်ဆိုက်ပေါ်တွင် လိုအပ်သော FTP ဆက်သွယ်မှုကို လုပ်ဆောင်စေနိုင်သည်

      ', # MODIF 'info_gauche_auteurs' => 'ဝက်ဘ်ဆိုက်အားလုံး၏ စာရေးသူများကို သည်မှာမြင်နိုင်သည်၊ ၎င်းတို့တခုစီ၏ အနေအထားများကို ရောင်စုံပုံဖြင့် ဖော်ပြထားသည် (ဝက်ဘ်ဆိုက်ကြီးကြပ်သူ = စိမ်းရောင်။ စာတည်း = အဝါရောင်)', 'info_gauche_auteurs_exterieurs' => 'ဝက်ဘ်ဆိုက်နှင့် ဆက်သွယ်မှုမရှိသော ပြင်ပစာရေးသူများကို အပြာရောင်ဖြင့်ဖော်ပြသည်၊ အမှိုက်ပုံးထဲ ထည့်၍ ၎င်းစာရေးသူများကို ဖျက်ပစ်ပါ', # MODIF 'info_gauche_messagerie' => 'စာပေးပို့ခြင်းက စာတည်းများကြားတွင် စာများကိုကာကွယ်ရန် စာအပြန်အလှန်ဖလှယ်ခြင်း (သင့်ကိုယ်ပိုင်သုံးရန်) သို့မဟုတ် ကိုယ်ပိုင်နေရာ၏ ကနဦးစာမျက်နှာတွင် ကြေငြာချက်များကို ဖော်ပြရန်ခွင့်ပြူသည် (အကယ်၍သင်သည် ကြီးကြပ်သူဖြစ်ခဲ့လျှင်ပေါ့)', - 'info_gauche_numero_auteur' => 'စာရေးသူနံပါတ်', 'info_gauche_statistiques_referers' => 'ဤစာမျက်နှာတွင် အကိုးကားယူသည့်နေရာများ စာရင်းကို ဖော်ပြမည်။ ၄င်းသည် သင့်ကိုယ်ပိုင်ဝက်ဘ်ဆိုက်သို့ ချိတ်ဆက်ထားသော ဝက်ဘ်​ဆိုက်များဖြစ်ပြီး မနေ့နှင့် ဒီနေ့အတွက်တရက်ချင်းစာရင်းဖြစ်သည်', 'info_gauche_visiteurs_enregistres' => 'ဤဝက်ဆိုက်၏ အများသုံးနေရာ အတွင်းဝင်ရောက်ကြည့်ရှုသူများမှတ်ပုံတင်ကို သင်မြင်မည်(ဖိုရမ်များ ခွင့်ပြုချက်ဖြင့်)', 'info_generation_miniatures_images' => 'ရုပ်ပုံများကို မြင်သာရန်ဖန်တီးနေသည်', - 'info_gerer_trad' => 'ဘာသာပြန်ဆက်နွယ်မှု ပြုလုပ်နိုင်သလား', 'info_hebergeur_desactiver_envoi_email' => 'အချို့ပင်မဆာဗာများသည် ၎င်းတို့ဆာဗာပေါ်တွင် အလိုလျောက် အီးမေးလ်မပို့နိုင်ပါ၊ ဤသို့ဖြစ်ပါက အေက်ပါ SPIPသဏ္ဍန်များကိုလည်း အကောင်ထည်မဖော်နိုင်ပါ', 'info_hier' => 'မနေ့က', - 'info_historique_activer' => 'မူကွဲခြေရာ ပြန်ကောက်နိုင်သည်', - 'info_historique_affiche' => 'ဤမူကွဲကို ဖော်ပြပါ', - 'info_historique_comparaison' => 'နှိုင်းယှဉ်ပါ', - 'info_historique_desactiver' => 'ခြေရာပြန်ကောက်ကြည့်၍မရပါ', - 'info_historique_texte' => 'ပြန်လည်မွမ်းမံမှုခြေရာက အောင်မြင်စွာ တည်းဖြတ်ခြင်းနှင့် ထပ်ပေါင်းခြင်း ပြုလုပ်ထားသော ဆောင်းပါးတွင် ပြုပြင်ချက် ကွဲပြားမှုများကို မြင်သာစေရန် လုပ်ဆောင်​ပေးနိုင်သည်။', 'info_identification_publique' => 'အများသုံး အမှတ်အသား', 'info_image_process' => 'ဆက်သွယ်ထားသောပုံပေါ်တွင်နှိပ်လိုက်သောအခါ ရုပ်ပုံမြင်နိုင်ရန်အတွက် အကောင်းဆုံးဖန်တီးမှုနည်းလမ်းကိုရွေးပါ', 'info_image_process2' => 'N.B. ပုံရိပ်တခုမှ မတွေ့ရလျှင်၊ သင့်ဆာဗာသည် အဲဒီအတွက် တပ်ဆင်ထားခြင်း မရှိလို့ဖြစ်ပါမည်။ ဤလုပ်ဆောင်မှုကို သင်အလိုရှိတယ်ဆိုရင် ဝက်ဘ်ဝန်ဆောင်မှုကို ဆက်သွယ်ပြီးတော့ «GD» သို့မဟုတ် «Imagick» extensions ကို ထည့်သွင်းပေးပါရန် တောင်းဆိုပါ။', # MODIF @@ -277,8 +233,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_login_trop_court' => 'ဝင်ရောက်မှုတိုလွန်းသည်', 'info_maximum' => 'အများဆုံး', 'info_meme_rubrique' => 'တစ်ကဏ္ဍထဲတွင်', - 'info_message' => 'မှာကြားချက်ပုံစံ', - 'info_message_efface' => 'စာစောင်ဖျက်ပစ်သည်', 'info_message_en_redaction' => 'သင့်​စာစောင်ကို ပြုလုပ်နေဆဲ', 'info_message_technique' => 'နည်းပညာဆိုင်ရာ မှာကြားချက်', 'info_messagerie_interne' => 'အတွင်းပိုင်းစာစောင်', @@ -287,19 +241,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'ကဏ္ဍကို ပြုပြင်မွမ်းမံပါ', 'info_modifier_titre' => '@titre@ကို ပြုးပြင်မွမ်းမံပါ', 'info_mon_site_spip' => 'SPIP ဆိုက်', - 'info_mot_sans_groupe' => '(အုပ်စုလိုက် မဟုတ်သော သော့ချက်စကားလုံးများ)', - 'info_moteur_recherche' => 'ကနဦးရှာဖွေမှုအင်ဂျင်', 'info_moyenne' => 'ပျမ်းမျှ', - 'info_multi_articles' => 'ဆောင်းပါးများအတွက် ဘာသာစကားမီနူးရနိုင်ပါသည်', 'info_multi_cet_article' => 'သည်ဆောင်းပါး ဘာသာစကား', 'info_multi_langues_choisies' => 'အောက်ဖော်ပြပါ ဘာသာစကားများကို စားတည်းများ​ ​ရွေးချယ်နိုင်အောင် ပြုလုပ်ပါ။ သင့်ဆိုက်တွင် အသုံးပြုနေသော ဘာသာစကားများကို ပြန်လည် ပိတ်ပင်၍ မရနိုင်တော့ပါ။', - 'info_multi_rubriques' => 'ကဏ္ဍတိုင်းအတွက် ဘာသာစကားမီနူးကို ရရှိနိုင်ပါသည်', 'info_multi_secteurs' => 'ဆိုက်၏ ပထမဆုံး စာမျက်နှာတွင်တွင် အခန်းကဏ္ဍများကိုသာ မြင်စေလိုပါသလား', 'info_nom' => 'အမည်', 'info_nom_destinataire' => 'ပါဝင်သူအမည်', 'info_nom_site' => 'သင့်ဝက်ဘ်ဆိုက်နာမည်', 'info_nombre_articles' => '@nb_articles@ ဆောင်းပါးများ', - 'info_nombre_partcipants' => 'ဆွေးနွေးမှုတွင် ပါဝင်သူများ', 'info_nombre_rubriques' => '@nb_rubriques@အပိုင်းကဏ္ဍများ', 'info_nombre_sites' => '@nb_sites@ဝက်ဘ်ဆိုက်များ', 'info_non_deplacer' => 'မရွှေ့ပါနှင့်', @@ -308,17 +257,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_modifiable' => 'ပြန်လည်ပြုပြင်မွမ်းမံ၍မရပါ', 'info_non_suppression_mot_cle' => 'သည်သော့ချက်စကားလုံးကို မဖျက်ပစ်ချင်ပါ', 'info_notes' => 'အောက်ခြေမှတ်စု', - 'info_nouveaux_message' => 'စာစောင်အသစ်', 'info_nouvel_article' => 'ဆောင်းပါးအသစ်', 'info_nouvelle_traduction' => 'ဘာသာပြန်အသစ်', 'info_numero_article' => 'ဆောင်းပါးနံပါတ်', 'info_obligatoire_02' => '[လိုအပ်ပါသည်]', # MODIF 'info_option_accepter_visiteurs' => 'ဝင်ရောက်လည်ပတ်သူများအား အ​များသုံးဝက်ဘ်ဆိုက်မှ မှတ်ပုံတင်ရန်ခွင့်ပြုသည်', - 'info_option_faire_suivre' => 'ဖိုရမ်မှပို့လိုက်သော စာများကို ဆောင်းပါးရေးသူများသို့ ထပ်ဆင့်ပို့လိုက်ပါ', 'info_option_ne_pas_accepter_visiteurs' => 'ဝင်ရောက်လည်ပတ်သူမှတ်ပုံတင်ခြင်းကို ငြင်းဆိုသည်', 'info_options_avancees' => 'အဆင့်မြှင့်ရွေးချယ်မှုများ', - 'info_ortho_activer' => 'စာ​လုံးပေါင်းစစ်စနစ်ရလိုသည်', - 'info_ortho_desactiver' => 'စာ​လုံးပေါင်းစစ်စနစ်မရလိုပါ', 'info_ou' => 'သို့မဟုတ်', 'info_page_interdite' => 'တားမြစ်စာမျက်နှာ', 'info_par_nom' => 'အမည်အလိုက်', @@ -327,20 +272,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_par_tri' => '’(@tri@ဖြင့်)’', 'info_passe_trop_court' => 'စကားဝှက်တိုလွန်သည်', 'info_passes_identiques' => 'စကားဝှက်နှစ်ခု မတူညီပါ', - 'info_pense_bete_ancien' => 'သင့်အမှတ်သားဟောင်း', # MODIF 'info_plus_cinq_car' => 'အက္ခရာ ငါး လုံးထက်ပို၍', 'info_plus_cinq_car_2' => '(အက္ခရာ ငါး လုံးထက်ပို၍)', 'info_plus_trois_car' => '(အက္ခရာ သုံး လုံးထက်ပို၍)', 'info_popularite' => 'ထင်ပေါ်ကျော်ကြားမှု - @popularite@; ဝင်ရောက်လည်ပတ်သူများ @visites@', - 'info_popularite_4' => 'ထင်ပေါ်ကျော်ကြားမှု - @popularite@; ဝင်ရောက်လည်ပတ်သူများ @visites@', 'info_post_scriptum' => 'ပို့စခရစ် (ပရိုဂရမ်ဘာသာစကား)', 'info_post_scriptum_2' => 'ပို့စခရစ် (ပရိုဂရမ်ဘာသာစကား)', 'info_pour' => 'အတွက်', - 'info_preview_admin' => 'ကြီးကြပ်သူကသာ နမူနာမြင်ကွင်းကို ကြည့်စေလိုသည်', - 'info_preview_comite' => 'စာရေးသူအားလုံး နမူနာမြင်ကွင်းကို ကြည့်စေလိုသည်', - 'info_preview_desactive' => 'နမူနာမြင်ကွင်းကို ပိတ်လိုသည်', - 'info_preview_texte' => 'ဤဆိုက်ပေါ်ရှိ ဆောင်းပါးများ၊ သတင်းများ အားလုံးကို ကြည့်ရှုနိုင်ပါသည် (ထုတ်ဝေရန် တင်သွင်းပြီး၊ ထုတ်ဝေပြီးသား ဆိုရင်)။ ဤသို့ကြည့်ရှုခွင့်ကို စီမံကြီးကြပ်သူများ အ​တွက်သီးသန့် ဖြစ်စေလိုပါသလား (သို့) စာရေးသူများ အားလုံးကို ခွင့်ပြုလိုပါသလား (သို့) လုံးဝဥတုံ ပိတ်ထားချင်သလား?', - 'info_principaux_correspondants' => 'အဓိကသတင်းထောက်များ', + 'info_preview_texte' => 'ဤဆိုက်ပေါ်ရှိ ဆောင်းပါးများ၊ သတင်းများ အားလုံးကို ကြည့်ရှုနိုင်ပါသည် (ထုတ်ဝေရန် တင်သွင်းပြီး၊ ထုတ်ဝေပြီးသား ဆိုရင်)။ ဤသို့ကြည့်ရှုခွင့်ကို စီမံကြီးကြပ်သူများ အ​တွက်သီးသန့် ဖြစ်စေလိုပါသလား (သို့) စာရေးသူများ အားလုံးကို ခွင့်ပြုလိုပါသလား (သို့) လုံးဝဥတုံ ပိတ်ထားချင်သလား?', # MODIF 'info_procedez_par_etape' => 'အဆင့်လိုက်စတင်လုပ်ဆောင်ပါ', 'info_procedure_maj_version' => 'အဆင့်မြှင့်တင် လုပ်ဆောင်မှုသည် SPIP၏ သိုလှောင်မှု မူကွဲအသစ်နှင့် ကိုက်ညီရန် လိုအပ်သည်', 'info_proxy_ok' => 'proxy စမ်းသပ်မှုအောင်မြင်သည်', @@ -349,12 +288,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_publies' => 'သင့်ဆောင်းပါးများကို အွန်လိုင်​တွင်ထုတ်လွင့်သည်', 'info_question_accepter_visiteurs' => 'သင့်ဝက်ဘ်ဆိုက်သို့ ဝင်ရောက်လည်ပတ်သူများကို ကိုယ်ပိုင်နေရာသို့ ဝင်စရာမလိုဘဲ မှတ်ပုံတင်ရန်ခွင့်ပြုထားပါက အောက်ပါရွေးချယ်မှုများကို ပြူလုပ်ပါ', 'info_question_inscription_nouveaux_redacteurs' => 'စာတည်းအသစ်များ မှတ်ပုံတင်ခွင့်ကို အများဆိုင်နေရာမှ လုပ်ဆောင်ခွင့် ပေးလိုပါသလား? သင်ခွင့်ပြုမည်ဆိုလျှင် လာလည်သူများသည်လည်း အလိုအလျှောက် ဖောင်ကိုအသုံးပြု၍ မှတ်ပုံတင်နိုင်မည်ဖြစ်သည်။ သူတို့ဖန်တီးထားသော ဆောင်းပါးများကို တိုက်ရိုက်မွမ်းမံ နိုင်မည်ဖြစ်သဖြင့် နှစ်သက်ပါလိမ့်မည်။
      မှတ်ပုံတင်ခြင်းလုပ်ဆောင်နေစဉ် ကိုယ်ပိုင်ကန့်သတ်နေရာသို့ ဝင်ရောက်နိုင်ရန် လိုအပ်သော အချက်အလက်များကို အလိုအလျှောက်အီးမေးလ်မှ ရောက်လာပါလိမ့်မည်။ တချို့သော ဝက်ဘ်ဝန်ဆောင်မှုလုပ်ငန်းများသည် ဤအလိုအလျှောက် စာပို့ခြင်းကို လက်မခံကြပေ၊ ဤသို့ဖြစ်နေလျှင် ဤစာပို့ခြင်းသည် အ​ဆင်ပြေမည်မဟုတ်ပါ။', # MODIF - 'info_question_utilisation_moteur_recherche' => 'SPIP သို့ ရှာဖွေမှုအင်ဂျင်ကို အသုံးပြုချင်ပါသလား။ (စစ်စတမ် အရှိန်ကို မြှင့်တင်၍မရနိုင်ပါ)', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'ဝက်ဘ်ဆိုက် ပင်မဇစ်မြစ်', 'info_recharger_page' => 'မိနစ်အနည်းငယ်အတွင်း ဤစာမျက်နှာကို ပြန်ဖွင့်ပါ', - 'info_recherche_auteur_a_affiner' => '\\"@cherche_auteur@\\"အတွက်ရလာဒ်များ များလွန်းသည်။ ရှာဖွေမှုကို ပြန်လုပ်ပါ', - 'info_recherche_auteur_ok' => 'အချို့စာတည်းများက\\"@cherche_auteur@\\" ကို တွေ့သည်', 'info_recherche_auteur_zero' => ' \\"@cherche_auteur@\\"အတွက် ရလာဒ်မရှိပါ', 'info_recommencer' => 'ပြန်ကြိုးစားပါ', 'info_redacteur_1' => 'Rédacteur', @@ -371,7 +306,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'ကဏ္ဍများ', 'info_rubriques_02' => 'ကဏ္ဍများ', 'info_rubriques_trouvees' => 'အပိုင်းကဏ္ဍများကို တွေ့ရသည်', - 'info_rubriques_trouvees_dans_texte' => 'အပိုင်းကဏ္ဍများကို တွေ့ရသည်(စာသားထဲတွင်)', 'info_sans_titre' => 'ခေါင်းစဉ်မရှိ', 'info_selection_chemin_acces' => ' အညွှန်းရှိ အောက်ပါအသုံးပြုခွင့်ရအပိုင်းကို ရွေးပါ', 'info_signatures' => 'အမှတ်အသား', @@ -384,13 +318,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_sites_lies_mot' => 'ဤသော့ချက်စကားလုံးနှင့် သင့်လျော်သော ကိုးကားဝက်ဘ်ဆိုက်များ', 'info_sites_proxy' => 'ကြားခံဆာဗာကို အသုံးပြုနေသည်', 'info_sites_trouves' => 'ဝက်ဘ်ဆိုက်များကို တွေ့သည်', - 'info_sites_trouves_dans_texte' => 'ဝက်ဘ်ဆိုက်များကိုတွေ့သည် (စာသားထဲတွင်)', 'info_sous_titre' => 'ခေါင်းစဉ်ခွဲ', 'info_statut_administrateur' => 'ကြီးကြပ်သူ', 'info_statut_auteur' => 'ဤစာရေးသူ၏ အခြေနေ', # MODIF 'info_statut_auteur_a_confirmer' => 'အတည်ပြုရန် မှတ်တမ်းတင်ခြင်း', 'info_statut_auteur_autre' => 'အခြားအ​ခြေနေ', - 'info_statut_efface' => 'ဖျက်ပစ်သည်', 'info_statut_redacteur' => 'စာတည်း', 'info_statut_utilisateurs_1' => 'တင်သွင်ထားသောအသုံးပြုသူများဿ သတ်မှတ်မထားသောအခြေနေ', 'info_statut_utilisateurs_2' => 'LDAP လမ်းညွှန်ထဲသို့ ပထမဆုံးအကြိမ် တင်ဆက်သော ပုဂ္ဂိုလ်၏ နေအထားကို ရွေးချယ်ပါ။ နောက်နောင်မှာလည်း အမှုစီတိုင်းပေါ်မူတည်ပြီး စာရေးသူ တယေက်ချင်းစီအတွက် ပြန်လည်မွမ်းမံနိုင်ပါသည်။', @@ -410,7 +342,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_en_redaction' => 'ဆောင်းပါးအားလုံးကို ပြုလုပ်ဆဲ', 'info_tous_articles_presents' => 'ဤကဏ္ဍတွင် ထုတ်ဝေထားသော ဆောင်းပါးအားလုံး', 'info_tous_les' => 'အမြဲ', - 'info_tous_redacteurs' => 'စာတည်းအားလုံးသို့ ကြေငြာချက်များ', 'info_tout_site' => 'လက်ရှိဝက်ဘ်ဆိုက်', 'info_tout_site2' => 'ဤဆောင်းပါးကို ဒီဘာသာသို့ ဘာသာမပြန်ရသေးပါ', 'info_tout_site3' => 'ဤဆောင်းပါးကို ဒီဘာသာသို့ ဘာသာပြန်ပြီးဖြစ် သို့သော် ထပ်မံဖြည့်စွက်ခြင်း ရှိပါသဖြင့် ဘာသာပြန်ခြင်းကိုလည်း ပြန်လည်မွမ်းမံရန် လိုအပ်ပါသည်', @@ -423,7 +354,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_une_rubrique' => 'ကဏ္ဍတခု', 'info_une_rubrique_02' => '၁ အခန်းကဏ္ဍ', 'info_url' => 'ဝက်ဘ်ဆိုက်လိပ်စာ', - 'info_url_site' => 'ဝက်ဘ်ဆိုက်လိပ်စာ', 'info_urlref' => 'ဆက်နွယ်မှု', 'info_utilisation_spip' => 'SPIP ကို အသုံးပြုရန် အဆင်သင့်ဖြစ်ပြီ', 'info_visites_par_mois' => 'လစဉ်​ဖော်ပြချက်', @@ -441,8 +371,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_activer_messages_avertissement' => 'သတိပေးတားမြစ်စာများကို အသက်သွင်းပါ', 'item_administrateur_2' => 'ကြီးကြပ်သူများ', 'item_afficher_calendrier' => 'ပြက္ခဒိန်တွင် ဖော်ပြပါ', - 'item_autoriser_documents_joints' => 'ဆောင်းပါးများနှင့် စာရွက်စာတမ်း တွဲခွင့်ပြုသည်', - 'item_autoriser_documents_joints_rubriques' => 'အခန်းကဏ္ဍများထဲတွင် စာရွက်စာတမ်းများခွင့်ပြုသည်', 'item_autoriser_syndication_integrale' => 'ပူးတွဲချိတ်ဆက်မှုထဲတွင် ဆောင်းပါးအားလုံးပါဝင်သည်', 'item_choix_administrateurs' => 'ကြီးကြပ်သူများ', 'item_choix_generation_miniature' => 'ပုံများကို အလိုအလျောက် မြင်နိုင်ရန် ပြုလုပ်ပါ', @@ -450,7 +378,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_choix_redacteurs' => 'စာတည်းများ', 'item_choix_visiteurs' => 'အများသုံး ဝက်ဘ်ဆိုက်သို့ ဝင်ရောက်လည်ပတ်သူများ', 'item_creer_fichiers_authent' => '.htpasswd ဖိုင်များကို တည်ဆောက်ပါ', - 'item_limiter_recherche' => 'သင့်ဝက်ဘ်ဆိုက်ထဲရှိ သတင်းအချက်အလက်များ လာရောက်ရှာဖွေမှုကို ကန့်သတ်ပါ', 'item_login' => 'ဝင်ရောက်ရန်', 'item_mots_cles_association_articles' => 'ဆောင်းပါးများ', 'item_mots_cles_association_rubriques' => 'အခန်းကဏ္ဍများ', @@ -459,35 +386,25 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_non_accepter_inscriptions' => 'မှတ်ပုံတင်ခြင်းများကို ခွင့်မပြုပါ', 'item_non_activer_messages_avertissement' => 'သတိပေးတားမြစ်ချက်စာမရှိပါ', 'item_non_afficher_calendrier' => 'ပြက္ခဒိန်တွင် မဖော်ပြပါနှင့်', - 'item_non_autoriser_documents_joints' => 'ဆောင်းပါးများထဲရှိ စာရွက်စာတမ်းများ ခွင့်မပြုပါ', - 'item_non_autoriser_documents_joints_rubriques' => 'ကဏ္ဍများထဲရှိ စာရွက်စာတမ်းများ ခွင့်မပြုပါ', 'item_non_autoriser_syndication_integrale' => 'နမူနာကိုသာပို့ပါ', 'item_non_creer_fichiers_authent' => 'ဤဖိုင်များကို မတည်ဆောက်ပါနှင့်', - 'item_non_gerer_statistiques' => 'စာရင်းအင်းများကို မစီမံပါနှင့်', - 'item_non_limiter_recherche' => 'ကိုးကားဝက်ဘ်ဆိုက်မျာတွင် ပါဝင်သည့်အကြောင်းအရာ ရှာဖွေမှုကိုထပ်ချဲ့ပါ', 'item_non_publier_articles' => 'ဆောင်းပါးများ ထုတ်ဝေရမည့် ရက်စွဲမတိုင်မီ မထုတ်ဝေပါနှင့်', - 'item_non_utiliser_moteur_recherche' => 'အင်ဂျင်မသုံးပါနှင့်', 'item_nouvel_auteur' => 'စာရေးသူအသစ်', 'item_nouvelle_rubrique' => 'ကဏ္ဍအသစ်', 'item_oui' => 'ဟုတ်ကဲ့', 'item_publier_articles' => 'ဆောင်းပါးများကို ၎င်းတို့ရက်စွဲနှင့် မဟုတ်ဘဲထုတ်​ဝေပါ', 'item_reponse_article' => 'ဆောင်းပါးကို စာပြန်ရန်', - 'item_utiliser_moteur_recherche' => 'ရှာဖွေမှု အင်ဂျင်ကိုသုံးပါ', 'item_visiteur' => 'ဝက်ဘ်ဆိုက်သို့လာလည်သူ', // J 'jour_non_connu_nc' => 'အမည်မသိ', // L - 'lien_ajout_destinataire' => 'ဤလက်ခံသူကို ထပ်ထည့်ပါ', 'lien_ajouter_auteur' => 'ဤစာရေးသူကို ထပ်ထည့်ပါ', - 'lien_ajouter_participant' => 'ပါဝင်သူတယောက်ထပ်ထည့်ပါ', 'lien_email' => 'လျှပ်စစ်စာပို့စနစ်', 'lien_nom_site' => 'ဝက်ဘ်ဆိုက်အမည်', 'lien_retirer_auteur' => 'စာရေးသူကို ဖျေက်ပစ်ပါ', - 'lien_retrait_particpant' => 'ဤပါဝင်သူကို ဖျက်ပစ်ပါ', 'lien_site' => 'ဝက်ဘ်ဆိုက်', - 'lien_supprimer_rubrique' => 'ဤကဏ္ဍကို ဖျက်ပစ်ပါ', 'lien_tout_deplier' => 'အကုန်ချဲ့ပါ', 'lien_tout_replier' => 'အားလုံးကို ခေါက်သိမ်းပါ', 'lien_tout_supprimer' => 'အကုန်ဖျက်ပစ်ပါ', @@ -500,7 +417,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'logo_rubrique' => 'အခန်းကဏ္ဍ၏လိုဂို', # MODIF 'logo_site' => 'ဤဝက်ဘ်ဆိုက်၏ လိုဂို', # MODIF 'logo_standard_rubrique' => 'အခန်းကဏ္ဍများအတွက် ဘုံလိုဂို', # MODIF - 'logo_survol' => 'HOVERING LOGO', # MODIF // M 'menu_aide_installation_choix_base' => 'သင့်အချက်အလက် သိုလှောင်မှုကိုရွေးပါ', @@ -524,6 +440,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // R 'repertoire_plugins' => 'အညွှန်း', + 'required' => '[လိုအပ်ပါသည်]', # MODIF // S 'statut_admin_restreint' => '(ကန့်သတ်​ထားသော ကြီးကြပ်သူ)', # MODIF @@ -546,13 +463,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_article_virtuel_reference' => 'အရေးကြီးသော ​ဆောင်းပါ သင့် ဆိုက်ရှိကိုးကား ဆောင်းပါးဖြစ်သော်လည်း အခြားဝက်ဘ်ဆိုက်လိပ်စာသို့ လမ်းလွဲနေသည်၊ အထက်ပါဝက်ဘ်ဆိုက်လိပ်စာကို ဖျက်ပစ်ခြင်းဖြင့် ပြန်တည့်နိုင်သည်', 'texte_aucun_resultat_auteur' => '\\"@cherche_auteur@\\"အတွက်ရလာဒ်မရှိပါ', 'texte_auteur_messagerie' => 'ဤဆိုက်သည် ချိတ်ဆက်​ထားသော စာတည်းများကို အဆက်မပြတ်​ စောင့်ကြည့်နိုင်သည်၊ ဤလုပ်ဆောင်ချက်သည် သတင်းစကားများကို ချက်ချင်းဖလှယ်နိုင်ရန် လုပ်ဆောင်ပေးသည်။ ဤစာရင်းထဲတွင် သင့်နာမည် မပါအောင် သင့်မှာရွေးချယ်ခွင့်ရှိသည်။ (သင့်ကိုတခြားသူများမှ မြင်နိုင်မည် မဟုတ်တော့ပါ)', - 'texte_auteur_messagerie_1' => 'ဤဝက်ဘ်ဆိုက်က ဆိုက်ပေါ်တွင် ပါဝင်သူများကြား ကိုယ်ပိုင်ဆွေးနွေးမှုအခန်းဖန်တီးရန်နှင့် စာစောင်အပြန်လှန်ပေးပို့ရန် ခွင့်ပြုထားသည်', 'texte_auteurs' => 'စာရေးဆရာများ', 'texte_choix_base_1' => 'သင့်အချက်လက်သိုလှောင်မှုကိုရွေးချယ်ပါ', 'texte_choix_base_2' => 'MySQL ဆာဗာတွင် အချက်လက်သိုလှောင်မှုများ များစွာပါဝင်သည်', 'texte_choix_base_3' => 'ရွေးချယ်ရန် အောက်တွင်ဖော်ပြသည်မှာ သင့် အင်တာနက် ဝန်ဆောင်မှုပေးသူမှ အေးထားသော အချက်အလက်များဖြစ်သည်။', - 'texte_commande_vider_tables_indexation' => 'ဤလုပ်ဆောင်ချက်သည် ရှာဖွေမှုအင်ဂျင်အတွက် စာညွှန်းများသိမ်းဆည်းမှုကို ပယ်ဖျက်မည်။ သင့်ကိုလည်း နေရာအလွတ်ပိုမိုရရှိစေမည်။', - 'texte_compresse_ou_non' => '(ချုံ့ရန်သို့ မချုံ့ရန်)', 'texte_compte_element' => '@count@ အက္ခရာစဉ်', 'texte_compte_elements' => '@count@ အက္ခရာစဉ်', 'texte_connexion_mysql' => 'သင့်ဝက်ဘ်ဆိုက် MySQLနှင့် ဆက်သွယ်မှု ခွင့်ပြုထားလ္ခင် အချက်လက်များကို MySQL ဝက်ဘ်ဆာဗာမှ ပေးထားပြီး ဖြစ်ပါလိမ့်မည်', # MODIF @@ -564,10 +478,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_date_publication_anterieure' => 'အရင်ထုတ်ဝေသည့် ရက်စွဲ', 'texte_date_publication_anterieure_nonaffichee' => 'အရင်ထုတ်​ဝေသည့် ဆောင်းပါးကို ဖျောက်ထားပါ', 'texte_date_publication_article' => 'အွန်လိုင်းထုတ်ဝေမှုရက်စွဲ', - 'texte_descriptif_petition' => 'တောင်းဆိုမှုဖော်ပြချက်', 'texte_descriptif_rapide' => 'အကျဉ်းချုပ်ဖော်ပြချက်', 'texte_effacer_base' => 'SPIP အချက်လက်သိုလှောင်မှုကို ဖျက်ပစ်ပါ', - 'texte_effacer_donnees_indexation' => 'စာညွှန်းကိုဖျက်ပစ်ပါ', 'texte_en_cours_validation' => 'အောက်ပါဆောင်းပါးများနှင့် သတင်းများသည် ထုတ်​ဝေရန်ထည့်သွင်းပြီးဖြစ်ပါသည်၊ ၎င်းတွင် ဖိုရမ်များတွဲ၍ သင့်အမြင်ကိုပေးရန်', # MODIF 'texte_enrichir_mise_a_jour' => '«typographical shortcuts»ကိုအသုံးပြုပြီးသင့်စာသားအခင်းအကျင်းကို ပိုကောင်းအောင်ပြုလုပ်နိုင်ပါသည်', 'texte_fichier_authent' => 'SPIP မှ.htpasswd နှင့် .htpasswd-admin ဖိုင်များကို လမ်းညွှန် @dossier@ထဲတွင် ဖန်တီးစေလိုပါသလား?

      ဤဖိုင်များသည် ဤဆိုက်​၏ ကန့်သတ်ထားသော တခြားနေရာများတွင် စာရေးသူနှင့် စီမံကြီးကြပ်သူတို့ကို ဝင်ရောက်နိုင်အောင် အသုံးပြုနိုင်သည်။

      ဒီဖိုင်များကို သင်အလိုမရှိဘူးဆိုရင် ဤရွေးချယ်မှုကို ဒီအတိုင်းထားနိုင်သည်။

      ', # MODIF @@ -575,24 +487,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_informations_personnelles_2' => '(မှတ်စု-အကယ်၍ သည်ဟာသည် ပြန်လည်ထည့်သွင်းခြင်းဖြစ်ပါက သင့်လုပ်ဆောင်ချက်သည် အလုပ်​လုပ်နေဆဲဖြစ်သည်။ သင်လုပ်နိုင်သည်', # MODIF 'texte_introductif_article' => '(ဆောင်းပါးတွင် စာသားများ အစပြုခြင်း)', 'texte_jeu_caractere' => 'နိုင်ငံသကာသုံး alphabet (utf-8) ကို သင့်ဆိုက်တွင် အသုံးပြုရန် အကြံပြုပါသည်။ ဤသို့ဖြင့် ဘယ်ဘာသာစကားမဆို သင့်ဆိုက်ပေါ်တွင် ​ဖတ်ရှုနိုင်မည်။ ဤ character set နှင့် ပတ်သက်၍ နောက်ဆုံပေါ် ဘယ်browserနှင့် မဆို အဆင်ပြေပါသည်။', - 'texte_jeu_caractere_2' => 'N.B. ဆက်တင်သည် အချက်လက်စုဆောင်းခြင်းတွင် သိမ်းထားပြီးသော စသားများကို ပြောင်းလဲမည်မဟုတ်ပါ', 'texte_jeu_caractere_3' => '​လက်ရှိတွင် သင့်ဝက်ဘ်ဆိုက်က ဤအက္ခရာ သတ်မှတ်ချက်ကို အသုံးပြုနေသည်', 'texte_jeu_caractere_4' => 'သင့် ​ဒေတာများနှင့် ဆက်နွယ်မှု မရှိဘူးဆိုရင်တော့ (ဥပမာ- အရံသိမ်းဆည်းထားသည့် သိုလှောင်မှုကို ပြန်လည်ထည့်သွင်းပြီးမှ) သို့တည်းမဟုတ် ဤဆိုက်ကိုပြန်လည် တပ်ဆင်ပြီးတော့မှ တခြား character set များကို အသုံးပြုလိုလျှင် ဤနေရာတွင်ဖော်ပြပါ။', - 'texte_jeu_caractere_conversion' => 'မှတ်စု- အက္ခရာနေရာအားလုံးနှင့် စာသားအားလုံး (ဆောင်းပါးများ။ သတင်းအမျိုးအစား။ ဖိုရမ်များ စသည်) တစ်ကြိမ်ပြင်ဆင်နိုင်သည်၊ အက္ခရာတည်ဆောက်ရန် utf-8။ ထိုသို့ပြုလုပ်ရန် UTF-8 စာမျက်နှာ ပေါင်းစည်းခြင်းသို့သွားပါ', - 'texte_lien_hypertexte' => '(သင့်စာစောင်သည် ဝက်ဘ်ပေါ်ရှိ ဆောင်းပါးတစ်ခု (သို့) သတင်းအချက်လက် ပိုရနိုင်သောစာမျက်နှာကို ရည်ညွှန်းပါက ဤနေရာတွင် ထိုစာမျက်နှာခေါင်းစဉ်နှင့် ဝက်ဘ်ဆိုက်လိပ်စာကို ထည့်သွင်းပါ)', 'texte_login_ldap_1' => '(အမည်မရှိသူများမဝင်ရောက်နိုင်ရန်သိမ်းထားပါ (သို့) «uid=smith, ou=users, dc=my-domain, dc=com».) တို့အတွက် ပြည့်စုံသည့်အပိုင်းကို ထည့်သွင်းပါ', 'texte_login_precaution' => 'သတိပေးချက်-သင်ချိတ်ဆက်ထားသောအရာနှင့် ဝင်ရောက်နိုင်သည်၊ ဤပုံစံကိုဂရုတစိုက်သုံးပါ', - 'texte_message_edit' => 'သတိပေးချက်-ဤစာစောင်ကို ဝက်ဘ်ဆိုက်ကြီးကြပ်သူအားလုံးမှ မွမ်းမံပြင်ဆင်နိုင်ပြီး စာတည်းအားလုံးထံတွင်ပေါ်နေသည်။ -ဝက်ဘ်ဆိုက်တွင်း ​အရေးကြီးသော အဖြစ်ပျက်များကိုသာ ကြေငြာရန်သုံးပါ', 'texte_mise_a_niveau_base_1' => 'သင့်SPIP ဖိုင်များကို လက်ရှိ​အနေအထားတိုင်း မွမ်းမံပြီးဖြစ်သည်။ ဝက်ဘ်ဆိုက်အချက်လက် သိုလှောင်မှုကို အဆင့်မြှင့်ပြုပြင်ပါ', 'texte_modifier_article' => 'ဆောင်းပါးကို ပြန်လည်မွမ်းမံ ပြင်ဆင်ပါ', - 'texte_moteur_recherche_active' => 'ရှာဖွေမှု အင်ဂျင် ဖွင့်ထားပါသည် စာညွှန်း ပြန်လည်တည်ဆောက်ခြင်း (အမြန်နည်း) အသုံးပြုလိုလျှင် ဤခိုင်းစေချက်ကို နှိပ်ပါ (သင့်ဆိုက် သိမ်းဆည်းထားတာကို ပြန်ထည့်သွင်းပြီးမှ)။ သိစေလိုသည်- SPIP ဝက်ဘ်စာမျက်နှာမှ ပုံမှန် ပြန်လည်မွမ်းမံ ပြင်ဆင်ခြင်းသည် စာညွှန်းများကို အလိုအလျောက် ထည့်ပေးသည်။ ဤစေခိုင်းချက်သည် ခြွင်းချက်အခြေအနေများတွင်သာ အသုံးဝင်သည်။', - 'texte_moteur_recherche_non_active' => 'ရှာဖွေမှုအင်ဂျင်ကို ခွင့်မပြုပါ', 'texte_multilinguisme' => 'ဆောင်းပါးများကို ဘာသာစကားအများပြားဖြင့် စီမံလိုပါက ဆောင်းပါးတွင် (သို့) အပိုင်းများတွင် သင့်ဝက်ဆိုက်၏ အမျိုးစားအလိုက် ဘာသာစကား ရွေးချယ်နိုင်သည့် မီနူးကို ပြည့်စုံသော ဦးတည်ချက်ဖြင့် ထပ်ထည့်ပါ', # MODIF 'texte_multilinguisme_trad' => 'ဘာသာပြန်မတူညီသော ဆောင်းပါးတွင် ဆက်နွယ်မှု စီမံခန့်ခွဲခြင်းကိုလည်း သင်ပြုလုပ်နိုင်ပါသည်', # MODIF 'texte_non_compresse' => 'ချုံ့၍မရပါ (သင့်ဆာဗာက သည်ပုံစံကို လက်မခံနိုင်ပါ)', - 'texte_nouveau_message' => 'စာစောင်အသစ်', 'texte_nouvelle_version_spip_1' => ' SPIP မူကွဲကိုသင် အခုသွင်းနေသည်', 'texte_nouvelle_version_spip_2' => 'ဤမူကွဲ အသစ်သည် တခြားတွေထက် မြှင့်တင်ခြင်းလုပ်ရန် လိုအပ်ပါသည်။ သင်ဟာ ဒီဝက်ဘ်ဆိုက် webmaster ဖြစ်လျှင် ဖိုင် @connect@ ကို ပယ်ဖျက်ပြီး သိုလှောင်မှု ဆက်သွယ်ရေး အချက်အလက်များ မြှင့်တင်ရန် ထည့်သွင်းခြင်းကို ပြန်လည်ပြုလုပ်ပါ။

      (NB.: သင့်ဆက်သွယ်မှု အချက်အလက်များကို မေ့လျော့​နေလျှင် @connect@ ဖိုင် မဖျက်သိမ်းခင် သေချာမှတ်သားထားပါ!)

      ', # MODIF 'texte_operation_echec' => 'အရင်စာမျက်နှာသို့ ပြန်သွား၍ အချက်လက် စုဆောင်းမှုတစ်ခုကိုရွေးပါ (သို့) အသစ်ပြုလုပ်ပါ၊ သင့် ဆာဗာကြီးကြပ်သူထံမှ သတင်းအချက်လက်များဖြင့် အတည်ပြုပေးပါ', @@ -606,7 +510,6 @@ proxy လိပ်စာကို အောက်တွင်​ဖော်ပ 'texte_publication_articles_post_dates' => 'အနာဂတ်တွင်ထုတ်ဝေရန်သတ်မှတ်ပြီးသော ဆောင်းပါးများအတွက် SPIP ကမည်သည့်စနစ်ကို သုံးသင့်သလဲ', 'texte_rappel_selection_champs' => '[နေရာကိုမှန်ကန်စွာရွေးချယ်ရန်သတိရပါ]', 'texte_recalcul_page' => 'စာတစ်မျက်နှာကိုသာပြန်သစ်ရန် « refresh » ကိုသုံး၍ အများသုံးဧရိယာမှပြန်လုပ်ပါ', - 'texte_recapitiule_liste_documents' => 'ဤစာမျက်နှာသည် အပိုင်းများထဲသို့သင်ထားခဲ့သော စာရွက်စာတမ်းများကို စာရင်းပေါင်းနေသည်။ မှတ်တမ်းတခုချင်းစီအတွက် သတင်းအချက်လက်များကို ပြန်လည်မွမ်းမံရန် ထိုအပိုင်းစာမျက်နှာကို ချိတ်ဆက်ထားသည့်နေရာသို့သွားပါ', 'texte_recuperer_base' => 'အချက်လက်ထိန်းသိမ်းမှုကို ပြန်လည်ပြင်ဆင်ပါ', 'texte_reference_mais_redirige' => ' SPIP ဝက်ဘ်ဆိုက်ထဲတွင် သင့်ကိုးကားဆောင်းပါးသည် အခြားဝက်ဘ်လိပ်စာသို့လမ်းလွဲသည်', 'texte_requetes_echouent' => 'MySQL ဆက်သွယ်မှုများ အကြောင်းပြချက်မရှိဘဲနှင့် ​ဖျက်တောက်ခြင်းခံရလျှင် သိုလှောင်မှုကိုယ်၌ ပြသနာ တရားခံဖြစ်သည်။

      MySQL ရုတ်တရက်ပျက်စီးခဲ့လျှင် သူ့ဟာသူပြင်ဆင်နိုင်ရန် ပါရှိသည်။ ဤနေရာမှ ပြင်ဆင်မှုလုပ်ဆောင်ရန် နှိပ်ပါ။ အကယ်၍ အဆင်မပြေရင် ဖော်ပြလာသော စာသားများကို သိမ်းဆည်းထားပါ။ ဘယ်အရာများ မှားယွင်းကြောင်းကို ​​​ဖော်ပြပါရှိမည်။

      ပြသနာ တစုံတရာရှိခဲ့ရင် သင့်ဝက်ဘ်ဝန်ဆောင်မှု ​ဆက်သွယ်ပါ။

      ', # MODIF @@ -620,7 +523,6 @@ proxy လိပ်စာကို အောက်တွင်​ဖော်ပ 'texte_suppression_fichiers' => 'SPIP မှတ်ဉာဏ်ထဲရှိ ဖိုင်များအားလုံးကို ဤခိုင်းစေမှု လုပ်ဆောင်ချက်မှ အကုန်လုံးပျယ်ဖျက်မည်။', 'texte_sur_titre' => 'ထိပ်စည်းခေါင်းစဉ်', 'texte_table_ok' => 'ဤဇယားအဆင်ပြေသည်', - 'texte_tables_indexation_vides' => 'စာညွှန်း ထိန်းသိမ်းထားမှုမရှိပါ', 'texte_tentative_recuperation' => 'ပြုပြင်ရန်ကြိုးစားသည်', 'texte_tenter_reparation' => 'အချက်အလက် သိုလှောင်မှုကို ပြုပြင်ရန်ကြိုးစားသည်', 'texte_test_proxy' => 'ဤပင်မဆာဗာကို စမ်းသပ်ရန် သင်စမ်းသပ်လိုသည့် ဝက်ဘ်ဆိုက်လိပ်စာကို ဖြည့်ပါ', @@ -628,15 +530,8 @@ proxy လိပ်စာကို အောက်တွင်​ဖော်ပ 'texte_titre_obligatoire' => 'ခေါင်းစဉ် [လိုအပ်ပါသည်]', 'texte_travail_article' => '@nom_auteur_modif@သည် ဤဆောင်းပါးတွင် လွန်ခဲ့သော မိနစ် @date_diff@ ကအလုပ်လုပ်ပြီးပြီ', 'texte_travail_collaboratif' => 'စာတည်းများ ဆောင်းပါးတပုဒ်ပေါ်တွင် အတူတူလုပ်ဆောင်နေပါက၊ မှားယွင်းသော လုပ်ဆောင်မှုများ မဖြစ်ရန်၊ နောက်ဆုံး စာတည်း «opened» ဟုဖော်ပြပါမည်။ ဒီသတိပေး စာစောင်ဟာ အနောက်အယှက်များ မဖြစ်စေရန် ကနဦးမှ ပိတ်ပင်ထားပါသည်။', - 'texte_trop_resultats_auteurs' => ' \\"@cherche_auteur@\\"; အတွက်ရှာဖွေမှုရလာဒ်များလွန်းသည်၊ ရှာဖွေမှုကိုပြန်ဆန်းစစ်ပါ၊', - 'texte_unpack' => 'နောက်ဆုံးမူကွဲကိုဆွဲချနေသည်', - 'texte_utilisation_moteur_syndiques' => 'ရှာဖွေမှုပုံစံထည့်သွင်းထားသော SPIP ကိုသင်အသုံးပြုသည့်အခါ ပူးတွဲချိတ်ဆက်ထားသော ဆောင်းပါးများနှင့် -ဝက်ဘ်ဆိုက်ပေါ်ရှာဖွေမှုများကို နည်းနှစ်မျိုးဖြင့်သုံးနိုင်သည်၊ ဆောင်းပါးမှဖော်ပြချက်နှင့် ခေါင်းစဉ်များဖြင့် ရှာဖွေခြင်းသည် အရိုးရှင်းဆုံးနည်းဖြစ်သည်၊ -ကိုးကားဝက်ဘ်ဆိုက်များမှ စာသားဖြင့်လည်းရှာဖွေနိုင်သည်၊ သင်ဝက်ဘ်ဆိုက်တခုကိုကိုးကားပါက SPIP ကထိုကိုးကားဝက်ဘ်ဆိုက်စာသားကို အလိုလိုရှာပေးပါလိမ့်မည်', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'ဤနည်းလမ်းသည် ကိုးကားဝက်ဘ်ဆိုက်များသို့ မှန်မှန်လည်ပတ်ရန် SPIP ကိုအာရုံထားသည်', 'texte_vide' => 'မရှိပါ', 'texte_vider_cache' => 'မှတ်ထားချက်မရှိပါ', - 'titre_admin_effacer' => 'နည်းပညာထိန်းသိမ်းမှု', 'titre_admin_tech' => 'နည်းပညာထိန်းသိမ်းမှု', 'titre_admin_vider' => 'နည်းပညာထိန်းသိမ်းမှု', 'titre_cadre_afficher_article' => 'ဆောင်းပါးများကို ပြပါ', @@ -656,50 +551,27 @@ proxy လိပ်စာကို အောက်တွင်​ဖော်ပ 'titre_naviguer_dans_le_site' => 'ဤဝက်ဘ်ဆိုက်သွားပါ', 'titre_nouvelle_rubrique' => 'အခန်းကဏ္ဍမသစ်', 'titre_numero_rubrique' => 'အခန်းကဏ္ဍအမှတ်', - 'titre_page_admin_effacer' => 'နည်းပညာထိန်းသိမ်းမှု - အချက်လက်သိုလှောင်မှုကို ဖျက်ပစ်ပါ', 'titre_page_articles_edit' => '@titre@ကို ပြန်လည်မွမ်းမံပါ', 'titre_page_articles_page' => 'ဆောင်းပါးများ', 'titre_page_articles_tous' => 'ဝက်ဘ်ဆိုက်တခုလုံး', - 'titre_page_auteurs' => 'ဝက်ဘ်ဆိုက်တွင်း လာရောက်ကြည့်ရှုသူများ', 'titre_page_calendrier' => 'ပြက္ခဒိန် @nom_mois@ @annee@', 'titre_page_config_contenu' => 'ဝက်ဘ်ဆိုက်ဆက်သွယ်တပ်ဆင်မှု', - 'titre_page_config_fonctions' => 'ဝက်ဘ်ဆိုက်ဆက်သွယ်တပ်ဆင်မှု', - 'titre_page_configuration' => 'ဝက်ဘ်ဆိုက်ဆက်သွယ်တပ်ဆင်မှု', - 'titre_page_controle_petition' => 'တောင်းဆိုမှုနောက်ဆက်တွဲ', 'titre_page_delete_all' => 'ထာဝရဖျက်သိမ်းခြင်း', - 'titre_page_documents_liste' => 'စာရွက်စာတမ်းများတွဲပါ', - 'titre_page_index' => 'သင့်ကိုယ်ပိုင် ဧရိယာ', - 'titre_page_message_edit' => 'မှာကြားချက်တစောင်ရေးပါ', - 'titre_page_messagerie' => 'သင့်မှာကြားချက်', 'titre_page_recherche' => '@recherche@အတွက်ရှာဖွေမှုရလာဒ်', 'titre_page_statistiques_referers' => 'ဝင်လာသော ဆက်နွယ်မှုစာရင်းများ', 'titre_page_upgrade' => 'SPIP မြှင့်တင်မှု', 'titre_publication_articles_post_dates' => 'ရက်လွန်ဆောင်းပါးများ​ထုတ်ဝေခြင်း', - 'titre_referencer_site' => 'ဝက်ဘ်ဆိုက်ကို ကိုးကားပါ', - 'titre_rendez_vous' => 'ချိန်းဆိုချက်များ', 'titre_reparation' => 'ပြန်လည်ပြင်ဆင်သည်', 'titre_suivi_petition' => 'နောက်ဆက်တွဲတောင်းဆိုမှု', 'tls_ldap' => 'ပို့ဆောင်မှုအလွှာ လုံခြုံရေး', - 'trad_article_inexistant' => 'ဤနံပါတ်နှင့် ဆောင်းပါးမရှိပါ', 'trad_article_traduction' => 'ဤဆောင်းပါး၏ မူကွဲအားလုံး', - 'trad_deja_traduit' => 'အခက်ခဲ- တောင်းဆိုထားသော နံပါတ်နှင့် ဆက်သွယ်မှုမပြုနိုင်ပါ', 'trad_delier' => 'ဤဆောင်းပါးနှင့် ၄င်း၏ ဘာသာပြန် ချိတ်ဆက်မှု ရပ်ဆိုင်းပါ', # MODIF 'trad_lier' => 'ဤဆောင်းပါးသည် ဆောင်းပါးအမှတ် ကိုဘာသာပြန်ခြင်းဖြစ်သည်', 'trad_new' => 'ဤဆောင်းပါးကို ပြန်လည်ဘာသာပြန်ပါ', # MODIF // U - 'utf8_convert_attendez' => 'ခဏစောင့်ပြီးမှ သည်စာမျက်နှာကို ပြန်သွားပါ', - 'utf8_convert_avertissement' => 'သိုလှောင်သိမ်းဆည်းမှုတွင် ပါဝင်သော အရာများ (ဆောင်းပါး၊ သတင်း စသည်) များကို character set @orig@ မှ character set @charset@ သို့ပြောင်းလဲရန် ကြိုးစားနေသည်။', - 'utf8_convert_backup' => 'သင့်ဝက်ဘ်ဆိုက် အပိုသိမ်းဆည်းရန် မမေ့ပါနှင့်၊ ပုံစံနှင့် ဘာသာစကားဖိုင်များကိုလည်း @charset@ နှင့်သင့်လျော်ခြင်း ရှိ၊ မရှိ စစ်ဆေးပါ', - 'utf8_convert_erreur_deja' => 'သင့်ဝက်ဘ်ဆိုက်သည် @charset@ အတွင်းရှိသောကြောင့် ပြောင်းလဲ၍မရပါ', 'utf8_convert_erreur_orig' => 'အမှား- အက္ခရာထားရှိမှု @charset@ ကို သုံး၍မရပါ', - 'utf8_convert_termine' => 'ပြီးပြီ', - 'utf8_convert_timeout' => 'အရေးပါသည် ဆာဗာမှ အချိန်ကုန်ပြီဟုပြောလျှင်၊ မြင်ရသည့်အထိ ပြန်ပြန်လုပ်ပါ «Finished!»', - 'utf8_convert_verifier' => 'မှတ်ထားချက်ကို အရင်ဖျက်ပစ်ပါ အကယ်၍ အများဆိုင်ဝက်ဘ်ဆိုက် စာမျက်နှာများ အားလုံးအဆင်ပြေလျှင်ပြန်စစ်ပါ။ အကယ်၍ သင်ပြသနာတွေ့ပါက မူရင်းအချက်လက်ကို @rep@ (SQL ပုံစံထဲ)၏ အညွှန်းတွင် အရံသိမ်းဆည်းထားပြီးဖြစ်သည်', - 'utf8_convertir_votre_site' => 'သင့်ဝက်ဘ်ဆိုက်ကို ယူနီကုဒ် သို့ပြောင်းပါ', // V 'version' => 'မူကွဲ' ); - -?> diff --git a/www/ecrire/lang/ecrire_nl.php b/www/ecrire/lang/ecrire_nl.php index fb4ec7b7..2b7460a5 100644 --- a/www/ecrire/lang/ecrire_nl.php +++ b/www/ecrire/lang/ecrire_nl.php @@ -1,129 +1,107 @@ 'Plugin activeren', - 'affichage' => 'Display', + 'affichage' => 'Weergave', 'aide_non_disponible' => 'Dit deel van de online handleiding is nog niet beschikbaar in het Nederlands.', 'annuler_recherche' => 'Zoekopdracht stoppen', - 'auteur' => 'Auteur :', + 'auteur' => 'Auteur:', 'avis_acces_interdit' => 'Toegang verboden', - 'avis_article_modifie' => 'Opgelet, @nom_auteur_modif@ heeft @date_diff@ minuten geleden aan dit artikel gewerkt.', + 'avis_article_modifie' => 'LET OP: @nom_auteur_modif@ heeft @date_diff@ minuten geleden aan dit artikel gewerkt.', 'avis_aucun_resultat' => 'Geen resultaat.', - 'avis_base_inaccessible' => 'Kan geen verbinding met de database @base@.', + 'avis_base_inaccessible' => 'Kan geen verbinding maken met database @base@.', 'avis_chemin_invalide_1' => 'De toegang die je hebt gekozen', - 'avis_chemin_invalide_2' => 'lijkt niet geldig. Gelieve terug te keren naar de vorige pagina en de ingevulde gegevens na te kijken.', + 'avis_chemin_invalide_2' => 'lijkt niet geldig. Ga terug naar de vorige pagina en controleer de ingevulde gegevens.', 'avis_connexion_echec_1' => 'De verbinding met de database is mislukt.', 'avis_connexion_echec_2' => 'Keer terug naar de vorige pagina en kijk de gegevens na die je hebt ingevuld.', - 'avis_connexion_echec_3' => 'N.B. Op veel servers dien je de activatie van je toegang tot de database te vragen vooraleer je ze kan gebruiken. Als je geen verbinding kan maken, kijk dan na of je deze actie hebt ondernomen..', + 'avis_connexion_echec_3' => 'LET OP Op veel servers moet je vooraf om activatie van je toegang tot de database vragen. Als je geen verbinding kan maken, kijk dan na of je deze actie hebt ondernomen.', + 'avis_connexion_erreur_creer_base' => 'De database kon niet worden gemaakt.', 'avis_connexion_erreur_nom_base' => 'De databasenaam kan enkel letters, cijfers en koppeltekens bevatten', 'avis_connexion_ldap_echec_1' => 'De verbinding met de LDAP-server is mislukt.', 'avis_connexion_ldap_echec_2' => 'Ga terug naar de vorige pagina en kijk na of de ingevulde gegevens correct zijn.', 'avis_connexion_ldap_echec_3' => 'Andere mogelijkheid is om de LDAP-ondersteuning om gebruikers in te voeren niet te gebruiken.', - 'avis_deplacement_rubrique' => 'Opgelet! Deze rubiek bevat @contient_breves@ brève@scb@: als je haar verplaatst, gelieve dit te bevestigen door hier het vakje aan te vinken.', - 'avis_destinataire_obligatoire' => 'Je dient een bestemmeling op te geven vooraleer dit bericht te verzenden.', + 'avis_deplacement_rubrique' => 'LET OP! Deze rubriek bevat @contient_breves@ nieuwsbericht@scb@. Als je wil verplaatsten, bevestig dit dan door hier het vakje aan te vinken.', 'avis_erreur_connexion_mysql' => 'Verbinding met de SQL connectie mislukt', - 'avis_erreur_version_archive' => 'Aandacht! Het bestand @archive@is een andere versie van SPIP dan je hebt geïnstalleerd. Dan kan tot grote problemen leiden : het risico van het vernietigen van je basis gegevens, het niet functioneren van de site, enz... Bevestig de vraag tot importeren niet. -

      Meer info kan je vinden op de documentatie van SPIP.

      ', - 'avis_espace_interdit' => 'Toegang Verboden
      SPIP is reeds geïnstalleerd.', - 'avis_lecture_noms_bases_1' => 'Het installatieprogramma heeft de namen van de geïnstalleerde databanken niet kunnen lezen.', - 'avis_lecture_noms_bases_2' => 'Geen enkele database is beschikbaar, ofwel is de functie die de databases zou moeten tonen, niet geactiveerd omwille van veiligheidsredenen (wat vaak het geval is bij providers).', - 'avis_lecture_noms_bases_3' => 'In het andere geval is het heel waarschijnlijk dat een database met uw aanmeldingsnaam (login) bruikbaar is:', - 'avis_non_acces_message' => 'Je hebt geen toegang tot dit bericht.', + 'avis_espace_interdit' => 'Toegang verboden
      SPIP is al geïnstalleerd.', + 'avis_lecture_noms_bases_1' => 'Het installatieprogramma heeft de namen van de geïnstalleerde databases niet kunnen lezen.', + 'avis_lecture_noms_bases_2' => 'Geen enkele database is beschikbaar, ofwel is de functie die de databases zou moeten tonen om veiligheidsredenen niet geactiveerd (wat vaak het geval is bij providers).', + 'avis_lecture_noms_bases_3' => 'In het andere geval is het heel waarschijnlijk dat een database met jouw aanmeldingsnaam (login) bruikbaar is:', 'avis_non_acces_page' => 'Je hebt geen toegang tot deze pagina.', 'avis_operation_echec' => 'De bewerking is mislukt.', - 'avis_operation_impossible' => 'Onmogelijke verrichting', - 'avis_probleme_archive' => 'Probleem om het bestand @archive@ te lezen.', - 'avis_suppression_base' => 'OPGELET, het wissen van de gegevens is onomkeerbaar', - 'avis_version_mysql' => 'De gebruikte SQL server versie (@version_mysql@) laat een automatische herstelling van tabellen uit de databank niet toe.', + 'avis_operation_impossible' => 'Onmogelijke handeling', + 'avis_suppression_base' => 'LET OP: Het wissen van de gegevens is onomkeerbaar', // B 'bouton_acces_ldap' => 'LDAP toegang toevoegen', 'bouton_ajouter' => 'Toevoegen', - 'bouton_ajouter_participant' => 'EEN DEELNEMER TOEVOEGEN:', - 'bouton_annonce' => 'AANKONDIGING', 'bouton_annuler' => 'Annuleren', 'bouton_cache_activer' => 'Buffer (cache) reactiveren', 'bouton_cache_desactiver' => 'Buffer (cache) tijdelijk uitschakelen', - 'bouton_checkbox_envoi_message' => 'mogelijkheid om een bericht te versturen', - 'bouton_checkbox_indiquer_site' => 'verplicht een website opgeven', - 'bouton_checkbox_signature_unique_email' => 'een enkele handtekening per e-mail adres', - 'bouton_checkbox_signature_unique_site' => 'een enkele handtekening per website', 'bouton_demande_publication' => 'De publicatie van het artikel vragen', 'bouton_desactive_tout' => 'Alles desactiveren', 'bouton_desinstaller' => 'Terugtrekken', - 'bouton_effacer_index' => 'Index verwijderen', 'bouton_effacer_tout' => 'ALLES wissen', - 'bouton_envoi_message_02' => 'EEN BERICHT VERZENDEN', - 'bouton_envoyer_message' => 'Definitief bericht : versturen', + 'bouton_envoyer_message' => 'Definitief bericht: versturen', 'bouton_fermer' => 'Sluiten', 'bouton_mettre_a_jour_base' => 'Database update', 'bouton_modifier' => 'Wijzigen', - 'bouton_pense_bete' => 'MEMO VOOR PERSOONLIJK GEBRUIK', - 'bouton_radio_activer_messagerie' => 'Intern berichtensysteem activeren', - 'bouton_radio_activer_messagerie_interne' => 'Intern berichtensysteem activeren', - 'bouton_radio_activer_petition' => 'Petitie activeren', - 'bouton_radio_afficher' => 'Tonen', - 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Opnemen in de lijst van online redacteuren', - 'bouton_radio_desactiver_messagerie' => 'Intern berichtensysteem desactiveren', - 'bouton_radio_envoi_annonces_adresse' => 'Aankondigingen verzenden naar dit adres :', + 'bouton_radio_afficher' => 'Weergeven', + 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Opnemen in de lijst van online redacteurs', + 'bouton_radio_envoi_annonces_adresse' => 'Aankondigingen verzenden naar dit adres:', 'bouton_radio_envoi_liste_nouveautes' => 'De lijst met nieuwe bijdragen versturen', - 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Niet opnemen in de lijst van redacteuren', + 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Niet opnemen in de lijst van redacteurs', 'bouton_radio_non_envoi_annonces_editoriales' => 'Geen editoriale aankondigingen versturen', - 'bouton_radio_pas_petition' => 'Geen petitie', - 'bouton_radio_petition_activee' => 'Petitie geactiveerd', - 'bouton_radio_supprimer_petition' => 'De petitie verwijderen', 'bouton_redirection' => 'OMLEIDING', - 'bouton_relancer_installation' => 'Installatie herbeginnen', + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Terugzetten naar de standaardwaardes', + 'bouton_relancer_installation' => 'Installatie herstarten', + 'bouton_reset_password' => 'Een nieuw wachtwoord genereren en per email opsturen', 'bouton_suivant' => 'Volgende', 'bouton_tenter_recuperation' => 'Poging tot herstel', 'bouton_test_proxy' => 'Proxy proberen', 'bouton_vider_cache' => 'De buffer (cache) leegmaken', - 'bouton_voir_message' => 'Dit bericht bekijken alvorens het goed te keuren', // C - 'cache_mode_compresse' => 'Bestanden in de buffer worden gecomprimeerd opgeslaan.', - 'cache_mode_non_compresse' => 'Bestanden in de buffer zijn niet gecomprimeerd opgeslaan.', 'cache_modifiable_webmestre' => 'Deze parameter kan door de webmaster van de site gewijzigd worden.', 'calendrier_synchro' => 'Wanneer je iCal compatibele agendasoftware gebruikt, kan je deze synchroniseren met informatie van deze site.', 'config_activer_champs' => 'De volgende velden activeren', - 'config_choix_base_sup' => 'een databank op deze server kiezen', - 'config_erreur_base_sup' => 'SPIP heeft geen toegang tot de lijst van toegankelijke databanken', - 'config_info_base_sup' => 'Als u andere databases hebt om door SPIP te ondervragen, met zijn SQL server of andere, kan je deze via onderstaand formulier opgeven. Als u bepaalde velden laat laat, zullen de identificatiegegevens van de primaire databank gebruikt worden.', - 'config_info_base_sup_disponibles' => 'De reeds bevraagbare bijkomende databanken:', + 'config_choix_base_sup' => 'een database op deze server kiezen', + 'config_erreur_base_sup' => 'SPIP heeft geen toegang tot de lijst van toegankelijke databases', + 'config_info_base_sup' => 'Als u andere databases hebt om door SPIP te ondervragen, met zijn SQL server of anders, kan je deze via onderstaand formulier opgeven. Als u bepaalde velden leeg laat, zullen de identificatiegegevens van de primaire database gebruikt worden.', + 'config_info_base_sup_disponibles' => 'De reeds opvraagbare aanvullende databases:', 'config_info_enregistree' => 'De nieuwe configuratie werd bewaard', 'config_info_logos' => 'Elk element van de site kan een logo hebben, evenals een « zwevend logo »', 'config_info_logos_utiliser' => 'De logo’s gebruiken', 'config_info_logos_utiliser_non' => 'De logo’s niet gebruiken', 'config_info_logos_utiliser_survol' => 'De zwevende logo’s gebruiken', 'config_info_logos_utiliser_survol_non' => 'Geen zwevende logo’s gebruiken', - 'config_info_redirection' => 'Door deze optie te activeren, kan je virtuele artikels maken, eenvoudige verwijzen naar gepubliceerde artikelen op andere sites, ook buiten SPIP.', + 'config_info_redirection' => 'Door deze optie te activeren, kan je virtuele artikelen maken, eenvoudige verwijzen naar gepubliceerde artikelen op andere sites, ook buiten SPIP.', 'config_redirection' => 'Virtuele artikelen', 'config_titre_base_sup' => 'Verklaring van een aanvullende basis', 'config_titre_base_sup_choix' => 'Kiest een aanvullende basis', - 'connexion_ldap' => 'Aansluiten :', - 'copier_en_local' => 'Lokaal kopiëren', + 'connexion_ldap' => 'Aansluiten:', 'creer_et_associer_un_auteur' => 'Maken en associëren een auteur', - 'creer_et_associer_une_rubrique' => 'Een rubriek aanmaken en koppelen', // D 'date_mot_heures' => 'uur', // E - 'ecran_securite' => '+ beveiliging scherm @version@', + 'ecran_securite' => '+ beveiligingsscherm @version@', 'email' => 'e-mail', 'email_2' => 'e-mail:', 'en_savoir_plus' => 'Meer weten hierover', 'entree_adresse_annuaire' => 'Plaats van het adresboek', 'entree_adresse_email' => 'Uw e-mail adres', 'entree_adresse_email_2' => 'E-mail adres', - 'entree_base_donnee_1' => 'Adres van de databank', + 'entree_base_donnee_1' => 'Adres van de database', 'entree_base_donnee_2' => '(Vaak komt dit adres overeen met dat van je website, soms is het gewoon de vermelding«localhost» of kan je het veld blanco laten.)', 'entree_biographie' => 'Korte biografie in enkele woorden.', 'entree_chemin_acces' => 'Invullen van de toegangscode :', @@ -132,7 +110,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_contenu_rubrique' => '(Inhoud van de rubriek in enkele woorden)', 'entree_identifiants_connexion' => 'Je verbindingsgegevens...', 'entree_identifiants_connexion_2' => 'Login', - 'entree_informations_connexion_ldap' => 'Vul hier de gegevens in om verbinding te maken met het LDAP adresboek. Deze gegevens kan je bekomen bij de systeem- of netwerkbeheerder.', + 'entree_informations_connexion_ldap' => 'Vul hier de gegevens in om verbinding te maken met het LDAP adresboek. Deze gegevens kan je opvragen bij de systeem- of netwerkbeheerder.', 'entree_infos_perso' => 'Wie ben je ?', 'entree_infos_perso_2' => 'Wie is de auteur ?', 'entree_interieur_rubrique' => 'In de rubriek:', @@ -140,25 +118,27 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Je login', 'entree_login_connexion_1' => 'De login voor de verbinding', 'entree_login_connexion_2' => '(Komt soms overeen met je FTP-loginnaam; soms wordt dit niet ingevuld)', - 'entree_login_ldap' => 'Eerste LDAP-login', - 'entree_mot_passe' => 'Je paswoord', - 'entree_mot_passe_1' => 'Paswoord voor deze verbinding ', - 'entree_mot_passe_2' => '(Komt vaak overeen met je paswoord voor FTP-toegang; soms kan je dit ook blanco laten)', + 'entree_mot_passe' => 'Je wachtwoord', + 'entree_mot_passe_1' => 'Wachtwoord voor deze verbinding ', + 'entree_mot_passe_2' => '(Komt vaak overeen met je wachtwoord voor FTP-toegang; soms kan je dit ook blanco laten)', 'entree_nom_fichier' => 'Vul hier de naam in van het betand @texte_compresse@:', 'entree_nom_pseudo' => 'je naam of bijnaam', 'entree_nom_pseudo_1' => '(je naam of bijnaam)', 'entree_nom_pseudo_2' => 'Naam of bijnaam', 'entree_nom_site' => 'De websitenaam', 'entree_nom_site_2' => 'Naam van de site van de auteur', - 'entree_nouveau_passe' => 'nieuw paswoord', - 'entree_passe_ldap' => 'Paswoord', + 'entree_nouveau_passe' => 'Nieuw wachtwoord', + 'entree_passe_ldap' => 'Wachtwoord', 'entree_port_annuaire' => 'Het poortnummer van het adresboek', 'entree_signature' => 'Handtekening', 'entree_titre_obligatoire' => 'Titel [verplicht]
      ', 'entree_url' => 'Je website-adres (URL)', 'entree_url_2' => 'Adres van de site (URL)', 'erreur_connect_deja_existant' => 'Een server met die naam bestaat al', + 'erreur_contenu_suspect' => 'Slecht gevormde tekst', + 'erreur_email_deja_existant' => 'Dit emailadres is al geregistreerd.', 'erreur_nom_connect_incorrect' => 'Deze server naam is niet toegestaan', + 'erreur_plugin_attribut_balise_manquant' => 'Attribuut @attribut@ ontbreekt in lus @balise@.', 'erreur_plugin_desinstalation_echouee' => 'Het verwijderen van de plugin is mislukt. Echter, kunt u deze uitschakelen.', 'erreur_plugin_fichier_absent' => 'Bestand ontbreekt', 'erreur_plugin_fichier_def_absent' => 'Definitiebestand ontbreekt', @@ -169,18 +149,18 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'erreur_plugin_version_manquant' => 'Versie van de ontbrekende plugin', // H - 'htaccess_a_simuler' => 'Waarschuwing: De configuratie van de HTTP-server negeert @htaccess@ bestanden . Om een goede beveiliging,te hebben, moet u deze configuratie wijzigen, of de constanten @constantes@ (definieerbaar in het bestand mes_options.php) laten verwijzen naar mappen buiten @document_root@. ', # Je ne vois pas la modif ! La trad reste valable. - 'htaccess_inoperant' => 'htaccess niet werkt', + 'htaccess_a_simuler' => 'Waarschuwing: De configuratie van de HTTP-server negeert @htaccess@ bestanden. Om een goede beveiligingte hebben, moet je deze configuratie wijzigen, of de constanten @constantes@ (definieerbaar in het bestand mes_options.php) laten verwijzen naar mappen buiten @document_root@. ', # Je ne vois pas la modif ! La trad reste valable. + 'htaccess_inoperant' => 'htaccess werkt niet', // I 'ical_info1' => 'Deze pagina toont de verschillende wijzen waarop je contact kan houden met het gebeuren van deze website.', 'ical_info2' => 'Voor meer inlichtingen over al deze technieken, aarzelt niet om de documentatie van SPIP.', - 'ical_info_calendrier' => 'Twee kalenders zijn beschikbaar. De eerste geeft een overzicht van alle gepubliceerde artikels. De tweede bevat editoriale berichten en je meest recente privé-berichten : deze tweede kalender is afgeschermd voor andere gebruikers door een persoonlijke sleutel die je op elk moment kan wijzigen door je paswoord te vernieuwen.', + 'ical_info_calendrier' => 'Twee kalenders zijn beschikbaar. De eerste geeft een overzicht van alle gepubliceerde artikelen. De tweede bevat editoriale berichten en je meest recente privé-berichten : deze tweede kalender is afgeschermd voor andere gebruikers door een persoonlijke sleutel die je op elk moment kan wijzigen door je wachtwoord te vernieuwen.', 'ical_methode_http' => 'Downloaden', 'ical_methode_webcal' => 'Synchronisatie (webcal://)', - 'ical_texte_js' => 'Met een javascriptregel kan je op eenvoudige wijze de meest recente artikels van deze site weergeven op een andere site die je beheert.', - 'ical_texte_prive' => 'Deze kalender is voor persoonlijk gebruik en houdt je op de hoogte van je eigen editoriale activiteit (taken en persoonlijke afspraken, voorgestelde artikels en nieuwsberichten...).', - 'ical_texte_public' => 'Via deze kalender kan je de publieke activiteit van de site volgen (gepubliceerde artikels en berichten).', + 'ical_texte_js' => 'Met een javascriptregel kan je op eenvoudige wijze de meest recente artikelen van deze site weergeven op een andere site die je beheert.', + 'ical_texte_prive' => 'Deze kalender is voor persoonlijk gebruik en houdt je op de hoogte van je eigen editoriale activiteit (taken en persoonlijke afspraken, voorgestelde artikelen en nieuwsberichten...).', + 'ical_texte_public' => 'Via deze kalender kan je de publieke activiteit van de site volgen (gepubliceerde artikelen en nieuwsberichten).', 'ical_texte_rss' => 'Je kan de nieuwe berichten van de site overnemen (syndiceren) op een andere site in eender welke bestandslezer via het formaat XML/RSS (Rich Site Summary). Dit is hetzelfde formaat dat SPIP toelaat nieuws over te nemen van andere sites die een uitwisselbaar formaat hanteren (gesyndiceerde sites).', 'ical_titre_js' => 'Javascript', 'ical_titre_mailing' => 'Mailinglijst', @@ -189,7 +169,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_activer_cookie' => 'De toegangskoekie activeren', 'icone_activite' => 'Activiteit', 'icone_admin_plugin' => 'Plugin beheer', - 'icone_administration' => 'Onderhoud', + 'icone_administration' => 'Beheer', 'icone_afficher_auteurs' => 'Auteurs tonen', 'icone_afficher_visiteurs' => 'Bezoekers tonen', 'icone_arret_discussion' => 'Niet langer deelnemen aan deze discussie', @@ -197,16 +177,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_configuration' => 'Configuratie', 'icone_creer_auteur' => 'Een nieuwe auteur aanmaken en koppelen aan dit artikel', 'icone_creer_mot_cle' => 'Een nieuw trefwoord aanmaken en koppelen aan dit artikel', - 'icone_creer_mot_cle_rubrique' => 'Een nieuw sleutelwoord creëren en het binden aan deze rubriek', - 'icone_creer_mot_cle_site' => 'Een nieuw sleutelwoord creëren en het binden aan deze site', 'icone_creer_rubrique_2' => 'Een nieuwe rubriek aanmaken', + 'icone_developpement' => 'Ontwikkeling', 'icone_edition' => 'Items', - 'icone_envoyer_message' => 'Bericht verzenden', 'icone_ma_langue' => 'Mijn taal', 'icone_mes_infos' => 'Mijn informatie', 'icone_mes_preferences' => 'Mijn Voorkeuren', 'icone_modifier_article' => 'Dit artikel wijzigen', - 'icone_modifier_message' => 'Bericht wijzigen', 'icone_modifier_rubrique' => 'Deze rubriek wijzigen', 'icone_publication' => 'Publicatie', 'icone_relancer_signataire' => 'De ondertekenaar weer op gang brengen', @@ -219,23 +196,17 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_supprimer_signature' => 'Deze naam wissen', 'icone_valider_signature' => 'Deze naam goedkeuren', 'image_administrer_rubrique' => 'Je kan deze rubriek beheren', - 'impossible_modifier_login_auteur' => 'Kan niet veranderen login.', - 'impossible_modifier_pass_auteur' => 'Kan wachtwoord niet wijzigen.', 'info_1_article' => '1 artikel', - 'info_1_article_syndique' => 'Gesyndiceerde 1 artikel', 'info_1_auteur' => '1 auteur', 'info_1_message' => '1 bericht', 'info_1_mot_cle' => '1 trefwoord', 'info_1_rubrique' => '1 rubriek', - 'info_1_site' => '1 site', 'info_1_visiteur' => '1 bezoeker', - 'info_activer_cookie' => 'Je kan een toegangskoekie activeren, waardoor je makkelijk kan wisselen tussen de het publieke en het private deel van de website.', - 'info_admin_etre_webmestre' => 'Geef me de taken van de webmaster', - 'info_admin_gere_rubriques' => 'Deze auteur beheert de volgende rubrieken :', - 'info_admin_gere_toutes_rubriques' => 'Deze beheerder beheert alle onderwerpen', - 'info_admin_gere_toutes_rubriques_2' => 'Ik beheer alle onderwerpen', - 'info_admin_je_suis_webmestre' => 'Ik ben webmestre', - 'info_admin_statuer_webmestre' => 'Geef deze administrator webmaster rechten', + 'info_activer_cookie' => 'Je kan een toegangskoekie activeren, waardoor je makkelijk kan wisselen tussen de het publieke en het privé gedeelte van de website.', + 'info_activer_menu_developpement' => 'Toon het menu Ontwikkeling', + 'info_admin_etre_webmestre' => 'Geef me de webmaster rechten', + 'info_admin_je_suis_webmestre' => 'Ik ben webmaster', + 'info_admin_statuer_webmestre' => 'Geef deze beheerder webmaster rechten', 'info_admin_webmestre' => 'Deze beheerder is webmaster', 'info_administrateur' => 'Beheerder', 'info_administrateur_1' => 'Beheerder', @@ -245,137 +216,120 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrateurs' => 'Beheerders', 'info_administrer_rubrique' => 'Je kan deze rubriek beheren', 'info_adresse' => 'aan/naar het adres:', + 'info_adresse_desinscription' => 'Adres voor uitschrijven:', 'info_adresse_url' => 'Adres (URL) van de website', 'info_afficher_par_nb' => 'Tonen', - 'info_afficher_visites' => 'Toon het aantal bezoeken voor:', 'info_aide_en_ligne' => 'ONLINE HELP VAN SPIP', 'info_ajout_image' => 'Als je afbeeldingen als bijlage aan een document toevoegt, kan SPIP hiervan automatisch miniaturen aanmaken. Hierdoor kan je bvb. automatisch een fotogalerij of portfolio aanmaken. ', - 'info_ajout_participant' => 'De volgende deelnemer is toegevoegd:', 'info_ajouter_rubrique' => 'Een nieuwe rubriek toevoegen om te beheren:', - 'info_annonce_nouveautes' => 'Aankondiging van nieuwigheden', - 'info_anterieur' => 'vorige', + 'info_annonce_nouveautes' => 'Aankondiging van nieuwe bijdragen', 'info_article' => 'artikel', - 'info_article_2' => 'artikels', - 'info_article_a_paraitre' => 'Te publiceren artikels met postdatering', - 'info_articles_02' => 'artikels', - 'info_articles_2' => 'Artikels', - 'info_articles_auteur' => 'Artikels van deze auteur', + 'info_article_2' => 'artikelen', + 'info_article_a_paraitre' => 'Te publiceren artikelen met postdatering', + 'info_articles_02' => 'artikelen', + 'info_articles_2' => 'Artikelen', + 'info_articles_auteur' => 'Artikelen van deze auteur', 'info_articles_miens' => 'Mijn artikelen', 'info_articles_tous' => 'Alle artikelen', - 'info_articles_trouves' => 'Gevonden artikels', - 'info_articles_trouves_dans_texte' => 'Gevonden artikels (in de tekst)', - 'info_attente_validation' => 'Je artikels die op goedkeuring wachten', + 'info_articles_trouves' => 'Gevonden artikelen', + 'info_attente_validation' => 'Je artikelen die op goedkeuring wachten', 'info_aucun_article' => 'Geen artikelen', - 'info_aucun_article_syndique' => 'Geen gesyndiceerde artikel', 'info_aucun_auteur' => 'Geen auteur', 'info_aucun_message' => 'Geen bericht', 'info_aucun_rubrique' => 'Geen rubriek', - 'info_aucun_site' => 'Geen site', - 'info_aucun_visiteur' => 'Geen bezoekers', 'info_aujourdhui' => 'vandaag:', - 'info_auteur_message' => 'AUTEUR VAN HET BERICHT:', + 'info_auteur_gere_rubriques' => 'Deze auteur beheert de volgende rubrieken:', + 'info_auteur_gere_toutes_rubriques' => 'Deze auteur beheert alle rubrieken', + 'info_auteur_gere_toutes_rubriques_2' => 'Ik beheer alle rubrieken', 'info_auteurs' => 'De auteurs', 'info_auteurs_par_tri' => 'Auteur@partri@', 'info_auteurs_trouves' => 'Gevonden auteurs', 'info_authentification_externe' => 'Externe authenticatie', 'info_avertissement' => 'Waarschuwing', 'info_barre_outils' => 'met zijn gereedschapsbalk?', - 'info_base_installee' => 'De structuur van je databank is geïnstalleerd.', + 'info_base_installee' => 'De structuur van je database is geïnstalleerd.', 'info_bio' => 'biografie', 'info_cache_desactive' => 'De buffer (cache) is tijdelijk uitgeschakeld.', 'info_chapeau' => 'Kop', 'info_chapeau_2' => 'Kop :', - 'info_chemin_acces_1' => 'Opties : Toegang tot het adresboek', + 'info_chemin_acces_1' => 'Opties: Toegang tot het adresboek', 'info_chemin_acces_2' => 'Je dient de toegang tot de gegevens uit het adresboek in te stellen. Zonder deze instellingen is het ONmogelijk de gebruikersprofielen in dit adresboek te lezen.', - 'info_chemin_acces_annuaire' => 'Opties : Toegang in het adresboek', + 'info_chemin_acces_annuaire' => 'Opties: Toegang in het adresboek', 'info_choix_base' => 'Derde stap:', 'info_classement_1' => 'ste op @liste@', 'info_classement_2' => 'de @liste@', 'info_code_acces' => 'Vergeet je eigen toegangscode niet!', - 'info_compatibilite_html' => 'HTML-standaard te volgen', - 'info_compresseur_gzip' => 'Het is raadzaam om vooraf te controleren of de gastheer al systematisch te comprimeren php scripts, voor deze kunt u bijvoorbeeld gebruik maken van de volgende dienst : @testgzip@', - 'info_compresseur_texte' => 'Als uw server de bladzijdes HTML niet automatisch samendrukt om ze te verzenden naar de internauten, kunt u deze samendrukking proberen te forceren om het gewicht van de gedownloade bladzijdes te verminderen. Aandacht: dat kan bepaalde servers aanzienlijk vertragen.', - 'info_config_suivi' => 'Wanneer dit adres van een rondzendlijst is, kan je hieronder het adres opgeven waarlangs deelnemers van de site zich kunnen inschrijven. Dit adres kan een URL zijn (bvb. het webadres voor het inschrijving op de mailinglist), of een e-mailadres met een onderwerp (bvb. @adresse_suivi@?subject=subscribe):', - 'info_config_suivi_explication' => 'Je kan je op de mailinglijst van deze site inschrijven. Je zal dan via e-mail een aankondiging ontvangen van artikels en nieuwsberichten die voor publicatie werden voorgesteld.', - 'info_confirmer_passe' => 'Bevestig het nieuwe paswoord :', - 'info_conflit_edition_avis_non_sauvegarde' => 'Aandacht, de volgende velden werden voorts gewijzigd. Uw wijzigingen op deze velden werden dus niet geregistreerd.', + 'info_compatibilite_html' => 'Te volgen HTML-standaard', + 'info_config_suivi' => 'Wanneer dit adres van een distributielijst is, kan je hieronder het adres opgeven waar deelnemers van de site zich kunnen inschrijven. Dit adres kan een URL zijn (het webadres voor het inschrijving op de lijst), of een emailadres met een onderwerp (zoals @adresse_suivi@?subject=subscribe):', + 'info_config_suivi_explication' => 'Je kan je op de mailinglijst van deze site inschrijven. Je zal dan via e-mail een aankondiging ontvangen van artikelen en nieuwsberichten die voor publicatie werden voorgesteld.', + 'info_confirmer_passe' => 'Bevestig het nieuwe wachtwoord:', + 'info_conflit_edition_avis_non_sauvegarde' => 'Let op: de volgende velden werden elders gewijzigd. Jouw wijzigingen op deze velden werden dus niet geregistreerd.', 'info_conflit_edition_differences' => 'Verschillen :', 'info_conflit_edition_version_enregistree' => 'De geregistreerde versie :', - 'info_conflit_edition_votre_version' => 'Uw versie :', + 'info_conflit_edition_votre_version' => 'Jouw versie:', 'info_connexion_base' => 'Proef van aansluiten aan de basis', 'info_connexion_base_donnee' => 'Aansluiten aan uw database', 'info_connexion_ldap_ok' => 'De LDAP-verbinding is gelukt.

      U kunt doorgaan naar de volgende stap.

      ', 'info_connexion_mysql' => 'Uw aansluiten SQL', 'info_connexion_ok' => 'De verbinding is geslaagd.', 'info_contact' => 'Contact', - 'info_contenu_articles' => 'Inhoud van de artikels', + 'info_contenu_articles' => 'Inhoud van de artikelen', 'info_contributions' => 'Bijdragen', - 'info_creation_paragraphe' => 'Voor alinea’s te maken, laat je gewoon enkele lijnen blanco.', - 'info_creation_rubrique' => 'Alvorens artikelen te kunnen schrijven,
      u moet een rubriek minstens creëren.
      ', - 'info_creation_tables' => 'Oprichting van tabellen in de databank', - 'info_creer_base' => 'Creëren een nieuw databank:', + 'info_creation_paragraphe' => 'Om alinea’s te maken laat je gewoon enkele regels leeg.', + 'info_creation_rubrique' => 'Alvorens artikelen te kunnen schrijven
      moet minstens een rubriek worden gemaakt.
      ', + 'info_creation_tables' => 'Aanmaken van tabellen in de database', + 'info_creer_base' => 'Creëren een nieuw database:', 'info_dans_rubrique' => 'In de rubriek:', - 'info_date_publication_anterieure' => 'Datum van eerdere redactie :', + 'info_date_publication_anterieure' => 'Datum van eerdere redactie:', 'info_date_referencement' => 'DATUM VAN DE KOPPELING VAN DEZE SITE:', - 'info_derniere_etape' => 'Gedaan !', - 'info_derniers_articles_publies' => 'Je meest recente online artikels', - 'info_desactiver_messagerie_personnelle' => 'Je kan het interne berichtensysteem op deze site aan- of uitzetten.', + 'info_derniere_etape' => 'Klaar!', 'info_descriptif' => 'Beschrijving:', - 'info_desinstaller_plugin' => 'schaft de gegevens af en désactive plugin', + 'info_desinstaller_plugin' => 'verwijdert de gegevens en deactiveert de plugin', 'info_discussion_cours' => 'Lopende discussies', - 'info_ecrire_article' => 'Alvorens een artikel te kunnen schrijven, dien je minimaal één rubriek aanmaken.', + 'info_ecrire_article' => 'Alvorens een artikel te kunnen schrijven, dien je minimaal één rubriek aan te maken.', 'info_email_envoi' => 'Verzendadres (optioneel)', - 'info_email_envoi_txt' => 'Geef hieronder het adres op dat gebruikt wordt voor het versturen van e-mails. (Standaard wordt het adres van de bestemmeling als verzendadres gebruikt.) :', - 'info_email_webmestre' => 'Webmaster E-mail', - 'info_entrer_code_alphabet' => 'Vul de alfabetcode in die je wil gebruiken:', + 'info_email_envoi_txt' => 'Geef hieronder het adres op dat gebruikt wordt voor het versturen van e-mails. (Standaard wordt het adres van de geadresseerde als verzendadres gebruikt.):', + 'info_email_webmestre' => 'E-mailadres webmaster', 'info_envoi_email_automatique' => 'Automatisch verzenden van e-mails', 'info_envoyer_maintenant' => 'Nu versturen', 'info_etape_suivante' => 'Naar de volgende stap ', - 'info_etape_suivante_1' => 'Je kan de volgende stap zetten.', - 'info_etape_suivante_2' => 'Je kan de volgende stap zetten.', + 'info_etape_suivante_1' => 'Je kunt de volgende stap zetten.', + 'info_etape_suivante_2' => 'Je kunt de volgende stap zetten.', 'info_exceptions_proxy' => 'Uitzonderingen op de proxy', - 'info_exportation_base' => 'Uitvoer van de databank naar @archive@', - 'info_facilite_suivi_activite' => 'Om de opvolging en redactie van artikels te vergemakkelijken, kan SPIP mails versturen -bijvoorbeeld naar een mailinglist van redacteurs- met de aankondiging van vragen voor publicatie of goedgekeurde publicaties.', + 'info_exportation_base' => 'Uitvoer van de database naar @archive@', + 'info_facilite_suivi_activite' => 'Om de opvolging en redactie van artikelen te vergemakkelijken, kan SPIP mails versturen -bijvoorbeeld naar een mailinglist van redacteurs- met de aankondiging van vragen voor publicatie of goedgekeurde publicaties.', 'info_fichiers_authent' => 'Verificatiebestand ".htpasswd"', 'info_forums_abo_invites' => 'Je site bevat forums met abonnement; bezoekers worden dus op de publieke site verzocht zich in te schrijven.', - 'info_gauche_admin_effacer' => 'Deze pagina is alleen beschikbaar voor beheerders.

      Het biedt toegang tot diverse functies van technisch onderhoud. Sommigen van hen aanleiding geven tot een specifieke verificatie proces, dat nodig heeft om FTP-toegang tot de website.

      ', 'info_gauche_admin_tech' => 'Deze pagina is enkel toegankelijk voor beheerders van de site.

      Ze geeft toegang tot allerlei technische onderhoudstaken. Voor het uitvoeren van sommige taken zijn een afzonderlijke aanmelding en toegang tot je site via FTP nodig.

      ', 'info_gauche_admin_vider' => 'Deze pagina is alleen beschikbaar voor beheerders.

      Het biedt toegang tot diverse - functies van technisch onderhoud. Sommigen van hen aanleiding geven tot een specifieke verificatie - proces, dat nodig heeft om FTP-toegang tot de website.

      ', + technische onderhoudsfuncties. Sommige vereisen een specifiek verificatieproces, dat nodig is voor FTP-toegang tot de website.

      ', 'info_gauche_auteurs' => 'Je vindt hier alle auteurs van de site. Hun status is te herkennen aan de kleur van het icoontje (beheerder = groen; redacteur = geel).', 'info_gauche_auteurs_exterieurs' => 'Externe auteurs, zonder toegang tot de site, zijn aangeduid met een blauw icoontje, gewiste auteurs met een grijze.', 'info_gauche_messagerie' => 'Het berichtensysteem laat toe om berichten uit te wisselen tussen redacteurs, memo’s (voor persoonlijk gebruik) te bewaren of aankondigingen te tonen op de beginpagina van de privé-ruimte (als je beheerder bent).', - 'info_gauche_numero_auteur' => 'NUMMER AUTEUR', - 'info_gauche_statistiques_referers' => 'Deze pagina toont een lijst met referers, tw. sites die een koppeling bevatten naar je eigen site, enkel voor vandaag en gisteren: de lijst wordt elke 24 uur opnieuw aangemaakt.', + 'info_gauche_statistiques_referers' => 'Deze pagina toont een lijst met referers (sites die een koppeling bevatten naar je eigen site), alleen voor vandaag en gisteren: de lijst wordt elke 24 uur opnieuw aangemaakt.', 'info_gauche_visiteurs_enregistres' => 'Hier zal je de geregistreerde bezoekers van de publieke site vinden (forums met inschrijving).', - 'info_generation_miniatures_images' => 'Aanmaak van de miniatuurafbeeldingen', - 'info_gerer_trad' => 'De koppelingen voor vertaling beheren ?', - 'info_gerer_trad_objets' => '@objets@ : het beheer van de vertaling koppelingen', - 'info_hebergeur_desactiver_envoi_email' => 'Sommige hostingbedrijven staan het automatisch versturen van e-mails door hun servers niet toe. In dat geval zullen de volgende functionaliteiten van SPIP niet werken.', + 'info_generation_miniatures_images' => 'Aanmaak van miniatuurafbeeldingen', + 'info_gerer_trad_objets' => '@objets@: het beheer van de vertalingskoppelingen', + 'info_hebergeur_desactiver_envoi_email' => 'Sommige hostingbedrijven staan het automatisch versturen van e-mails via hun servers niet toe. In dat geval zal de volgende functionaliteit van SPIP niet werken.', 'info_hier' => 'gisteren:', - 'info_historique_activer' => 'Activeren van het opvolgen van de revisies', - 'info_historique_affiche' => 'Deze versie weergeven', - 'info_historique_comparaison' => 'vergelijking', - 'info_historique_desactiver' => 'Het opvolgen van de revisies desactiveren', - 'info_historique_texte' => 'Met de opvolging van de revisies is het mogelijk de geschiedenis van alle wijzigingen aan een artikel bij te houden, en de verschillende tussen opeenvolgende versies weer te geven.', 'info_identification_publique' => 'Je publieke identiteit...', 'info_image_process' => 'Kies de beste methode om een miniatuurafbeelding te maken door op de bijhorende afbeelding te klikken.', 'info_image_process2' => 'Wanneer geen enkel beeld wordt getoond, betekent dit dat de server van je website niet is ingesteld om deze tools te gebruiken. Als je van deze functies gebruik wil maken, dien je de technische verantwoordelijke van de server te contacteren en te vragen naar «GD» of «Imagick» extensies.', 'info_images_auto' => 'Beelden automatisch berekend', 'info_informations_personnelles' => 'Persoonlijke gegevnes', + 'info_inscription' => 'Ingeschreven op', 'info_inscription_automatique' => 'Automatische inschrijving van nieuwe redacteurs', 'info_jeu_caractere' => 'Tekenset van de site', 'info_jours' => 'dagen', 'info_laisser_champs_vides' => 'velden leeglaten)', 'info_langues' => 'Talen van de site', 'info_ldap_ok' => 'De LDAP-autentificatie is geïnstalleerd', - 'info_lien_hypertexte' => 'Hypertekst koppeling :', - 'info_liste_nouveautes_envoyee' => 'Het nieuwighedenlijst werd opgestuurd', + 'info_lien_hypertexte' => 'Hypertekst koppeling:', + 'info_liste_nouveautes_envoyee' => 'Het lijst met nieuwe bijdragen werd verstuurd', 'info_liste_redacteurs_connectes' => 'Lijst met online redacteuren', 'info_login_existant' => 'Deze login is reeds in gebruik', 'info_login_trop_court' => 'Login te kort.', @@ -383,113 +337,88 @@ gewiste auteurs met een grijze.', 'info_logos' => 'De logo’s', 'info_maximum' => 'maximum:', 'info_meme_rubrique' => 'In dezelfde rubriek', - 'info_message' => 'Bericht van', - 'info_message_efface' => 'GEWIST BERICHT', 'info_message_en_redaction' => 'Je berichten in redactie', - 'info_message_technique' => 'Technisch bericht :', + 'info_message_technique' => 'Technisch bericht:', 'info_messagerie_interne' => 'Intern berichtensysteem', - 'info_mise_a_niveau_base' => 'update van je SQL-databank', - 'info_mise_a_niveau_base_2' => '{{Opgelet!}} Je hebt een SPIP-versie geïnstalleerd die {ouder} is dan diegene die zich eerder op deze site bevond.: je databank loopt hierdoor het risico beschadigd te worden waardoor je site niet meer zal functioneren.
      {{Herinstalleer de SPIP-bestanden.}}', + 'info_mise_a_niveau_base' => 'update van je SQL-database', + 'info_mise_a_niveau_base_2' => '{{LET OP!}} Je hebt een SPIP-versie geïnstalleerd die {ouder} is dan diegene die zich eerder op deze site bevond.: je database loopt hierdoor het risico beschadigd te worden waardoor je site niet meer zal functioneren.
      {{Herinstalleer de SPIP-bestanden.}}', 'info_modification_enregistree' => 'Uw wijziging werd geregistreerd', - 'info_modifier_auteur' => 'De auteur wijzigen :', + 'info_modifier_auteur' => 'De auteur wijzigen:', 'info_modifier_rubrique' => 'De rubriek wijzigen:', - 'info_modifier_titre' => 'Wijzigen : @titre@', + 'info_modifier_titre' => 'Wijzigen: @titre@', 'info_mon_site_spip' => 'Mijn SPIP-site', - 'info_mot_sans_groupe' => '(Woorden zonder groep...)', - 'info_moteur_recherche' => 'Geïntegreerde zoekmachine', 'info_moyenne' => 'gemiddeld:', - 'info_multi_articles' => 'Taalmenu voor artikels instellen?', 'info_multi_cet_article' => 'Gebruikte taal in dit artikel is:', 'info_multi_langues_choisies' => 'Kies hierna welke talen ter beschikking staan van de redacteurs van je site. Talen die al worden gebruikt (vooraan in de lijst getoond) kunnen niet geschrapt worden. ', 'info_multi_objets' => '@objets@ : Activeer de taalmenu', - 'info_multi_rubriques' => 'Taalmenu toepassen op de rubrieken?', 'info_multi_secteurs' => '... enkel voor de rubrieken in de hoofdmap?', 'info_nb_articles' => '@nb@ artikelen', - 'info_nb_articles_syndiques' => '@nb@ gesyndiceerde artikelen', 'info_nb_auteurs' => '@nb@ auteurs', 'info_nb_messages' => '@nb@ berichten', 'info_nb_mots_cles' => '@nb@ trefwoord', 'info_nb_rubriques' => '@nb@ secties', - 'info_nb_sites' => '@nb@ sites', 'info_nb_visiteurs' => '@nb@ bezoekers', 'info_nom' => 'Naam', - 'info_nom_destinataire' => 'Naam van de bestemmeling', - 'info_nom_pas_conforme' => 'html bakens zijn niet toegelaten', + 'info_nom_destinataire' => 'Naam van de geadresseerde', + 'info_nom_pas_conforme' => 'HTML bakens zijn niet toegestaan', 'info_nom_site' => 'naam van je site', - 'info_nombre_articles' => '@nb_articles@ artikels,', - 'info_nombre_partcipants' => 'DEELNEMERS AAN DE DISCUSSIE :', + 'info_nombre_articles' => '@nb_articles@ artikelen,', 'info_nombre_rubriques' => '@nb_rubriques@ rubrieken, ', 'info_nombre_sites' => '@nb_sites@ sites,', 'info_non_deplacer' => 'Niet verplaatsen...', - 'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP kan regelmatig een bericht versturen om de laatste nieuwigheden van de site te melden - (recent gepubliceerde artikels en berichten).', - 'info_non_envoi_liste_nouveautes' => 'De lijst met nieuwigheden niet versturen', + 'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP kan regelmatig een bericht versturen om de laatste nieuwtjes van de site te melden + (recent gepubliceerde artikelen en nieuwsberichten).', + 'info_non_envoi_liste_nouveautes' => 'De lijst met nieuwe bijdragen niet versturen', 'info_non_modifiable' => 'kan niet gewijzigd worden', 'info_non_suppression_mot_cle' => 'Ik wil dit trefwoord niet verwijderen.', - 'info_note_numero' => 'Noot @numero@', 'info_notes' => 'Opmerkingen', - 'info_nouveaux_message' => 'Nieuwe berichten', 'info_nouvel_article' => 'Nieuw artikel', 'info_nouvelle_traduction' => 'Nieuwe vertaling :', 'info_numero_article' => 'ARTIKEL NUMMER:', 'info_obligatoire_02' => '(verplicht)', 'info_option_accepter_visiteurs' => 'Inschrijving van bezoekers van de publieke site aanvaarden', - 'info_option_faire_suivre' => 'Berichten van het forum bezorgen aan de auteurs van de artikels', 'info_option_ne_pas_accepter_visiteurs' => 'Inschrijving van bezoekers weigeren', 'info_options_avancees' => 'GEAVANCEERDE OPTIES', - 'info_ortho_activer' => 'Spellingcontrole inschakelen', - 'info_ortho_desactiver' => 'Spellingcontrole uitschakelen', 'info_ou' => 'of...', 'info_page_interdite' => 'Verboden pagina', 'info_par_nom' => 'per naam', - 'info_par_nombre_article' => 'volgens aantal artikels', + 'info_par_nombre_article' => 'volgens aantal artikelen', 'info_par_statut' => 'per statuut', 'info_par_tri' => '’(per @tri@)’', - 'info_passe_trop_court' => 'Paswoord te kort.', + 'info_passe_trop_court' => 'Te kort wachtwoord.', 'info_passe_trop_court_car_pluriel' => 'Het wachtwoord moet ten minste @nb@ tekens.', - 'info_passes_identiques' => 'Beide paswoorden zijn niet identiek.', - 'info_pense_bete_ancien' => 'Uw oude herinneringen', + 'info_passes_identiques' => 'Beide wachtwoorden zijn niet identiek.', 'info_plus_cinq_car' => 'Meer dan 5 karakters', 'info_plus_cinq_car_2' => '(Meer dan 5 karakters)', 'info_plus_trois_car' => '(Meer dan 3 karakters)', 'info_popularite' => 'populariteit: @popularite@; bezoeken: @visites@', - 'info_popularite_4' => 'populariteit: @popularite@; bezoeken: @visites@', 'info_post_scriptum' => 'Post-Scriptum', - 'info_post_scriptum_2' => 'Post-scriptum :', + 'info_post_scriptum_2' => 'Post-scriptum:', 'info_pour' => 'voor', - 'info_preview_admin' => 'Enkel beheerders kunnen de site in preview zien', - 'info_preview_comite' => 'Alle redacteurs kunnen de site in preview zien', - 'info_preview_desactive' => 'Preview van de site is uitgeschakeld', - 'info_preview_texte' => 'Nu is het ook mogelijk om de site in preview mode te zien, alsof alle artikels en berichten (indien ze tenminste werden « voorgesteld voor publicatie ») ook echt waren gepubliceerd.Dient deze mogelijkheid te worden voorzien voor de beheerders alleen, voor alle redacteurs of voor niemand ?', - 'info_principaux_correspondants' => 'Je belangrijkste correspondenten', + 'info_preview_texte' => 'Nu is het ook mogelijk om de site in preview mode te zien, alsof alle artikelen en berichten (indien ze tenminste werden « voorgesteld voor publicatie ») ook echt waren gepubliceerd. Dient deze mogelijkheid uitsluitend te worden voorzien voor de beheerders, voor alle redacteurs of voor niemand?', 'info_procedez_par_etape' => 'volg stap voor stap', - 'info_procedure_maj_version' => 'de procedure voor updaten die nodig is om de databank aan te passen + 'info_procedure_maj_version' => 'de procedure voor de update die nodig is om de database aan te passen aan de nieuwe versie van SPIP.', 'info_proxy_ok' => 'Test van proxy geslaagde.', 'info_ps' => 'N.B.', 'info_publier' => 'publiceren', - 'info_publies' => 'Je gepubliceerde artikels', + 'info_publies' => 'Je gepubliceerde artikelen', 'info_question_accepter_visiteurs' => 'Als de sjablonen van je site voorzien dat bezoekers zich kunnen registreren zonder toegang tot de privé-ruimte, activeer dan de volgende optie :', - 'info_question_inscription_nouveaux_redacteurs' => 'Aanvaard je inschrijvingen van nieuwe redacteuren vanop + 'info_question_inscription_nouveaux_redacteurs' => 'Aanvaard je inschrijvingen van nieuwe redacteuren vanaf de publieke site? Indien wel, dan kunnen bezoekers zich via een geautomatiseerd formulier inschrijven en - toegang krijgen tot de privé-ruimte om zelf artikels + toegang krijgen tot de privé-ruimte om zelf artikelen voor te stellen.
      Bij inschrijving zal een gebruiker een automatische e-mail ontvangen met daarin de toeganscode voor de site. Sommige hostingproviders blokkeren echter het versturen van e-mail vanaf hun - servers : in dat geval is een automatische inschrijving + servers: in dat geval is een automatische inschrijving niet mogelijk.
      ', - 'info_question_utilisation_moteur_recherche' => 'Wil je gebruik maken van de geintegreerde zoekmachine van SPIP ? - (niet-activeren hiervan versnelt de werking van het systeem.)', - 'info_question_vignettes_referer_non' => 'Niet de vangsten van de sites van oorsprong van de bezoeken te kennen geven', 'info_qui_edite' => '@nom_auteur_modif@ gewerkt aan de inhoud er @date_diff@ minuten ', 'info_racine_site' => 'Begin van de site', - 'info_recharger_page' => 'Gelieve deze pagina binnen enkele ogenblikken te herladen.', - 'info_recherche_auteur_a_affiner' => 'Teveel resultaten voor "@cherche_auteur@" ; gelieve de zoekopdracht te verfijnen.', - 'info_recherche_auteur_ok' => 'Meerdere redacteurs gevonden voor "@cherche_auteur@":', + 'info_recharger_page' => 'Laad deze pagina over enkele ogenblikken opnieuw.', 'info_recherche_auteur_zero' => 'Geen resultaat voor « @cherche_auteur@ ».', 'info_recommencer' => 'Proberd nog eens alstublieft.', 'info_redacteur_1' => 'Redacteur', @@ -498,44 +427,42 @@ gewiste auteurs met een grijze.', 'info_redaction_en_cours' => 'IN REDACTIE', 'info_redirection' => 'Omleiding', 'info_redirection_activee' => 'De omleiding is ingeschakeld.', + 'info_redirection_boucle' => 'Je probeert het artikel op zichzelf te redirigeren.', 'info_redirection_desactivee' => 'De redirect is verwijderd.', - 'info_refuses' => 'Uw geweigerde artikels', - 'info_reglage_ldap' => 'Opties : Instellen van de LDAP invoer', + 'info_refuses' => 'Uw geweigerde artikelen', + 'info_reglage_ldap' => 'Opties: Instellen van de LDAP invoer', 'info_renvoi_article' => 'Doorsturen. Dit artikel verwijst naar de pagina:', 'info_reserve_admin' => 'Alleen beheerders kunnen dit adres wijzigen.', - 'info_restreindre_rubrique' => 'Beheer tot deze rubriek beperken :', - 'info_resultat_recherche' => 'onderzoek resultaats:', + 'info_restreindre_rubrique' => 'Beheer tot deze rubriek beperken:', + 'info_resultat_recherche' => 'Resultaat van de zoekopdracht:', 'info_rubriques' => 'Rubrieken', 'info_rubriques_02' => 'Rubrieken', 'info_rubriques_trouvees' => 'gevonden Rubrieken', - 'info_rubriques_trouvees_dans_texte' => 'Rubrieken gevonden (in tekst)', 'info_sans_titre' => 'Zonder titel', 'info_selection_chemin_acces' => 'Selecteer hierna de toegangswijze tot het jaarboek:', 'info_signatures' => 'namen', 'info_site' => 'Site', - 'info_site_2' => 'site :', + 'info_site_2' => 'site:', 'info_site_min' => 'site', 'info_site_reference_2' => 'Gekoppelde site', - 'info_site_web' => 'Site Web :', + 'info_site_web' => 'Website:', 'info_sites' => 'sites', 'info_sites_lies_mot' => 'Referentiesites gekoppeld aan het trefwoord ', 'info_sites_proxy' => 'Een proxy gebruiken', 'info_sites_trouves' => 'Gevonden Sites ', - 'info_sites_trouves_dans_texte' => 'Gevonden sites (in de tekst)', 'info_sous_titre' => 'Ondertitel:', - 'info_statut_administrateur' => 'Administrator', - 'info_statut_auteur' => 'Statuut van deze auteur :', + 'info_statut_administrateur' => 'Beheerder', + 'info_statut_auteur' => 'Status van deze auteur:', 'info_statut_auteur_2' => 'Ik ben', 'info_statut_auteur_a_confirmer' => 'Inschrijving bevestigen', 'info_statut_auteur_autre' => 'Andere status :', - 'info_statut_efface' => 'Uitgewist', 'info_statut_redacteur' => 'Redacteur', 'info_statut_utilisateurs_1' => 'Standaardstatus voor de ingevoerde gebruikers', 'info_statut_utilisateurs_2' => 'Kies de status die de personen uit het LDAP-adressenboek toebediend krijgen als ze de eerste keer inloggen. Nadien kan je deze status van elke auteur altijd één per één wijzgen.', 'info_suivi_activite' => 'Vervolg van de editoriale activiteit', 'info_surtitre' => 'Opschrift', 'info_syndication_integrale_1' => 'Uw site stelt syndicatiebestanden voor (zie « @titre@ »).', - 'info_syndication_integrale_2' => 'Wil u integrale artikels doorgeven of enkel een samenvatting van enkele honderden karakters doorgeven ?', + 'info_syndication_integrale_2' => 'Wil u integrale artikelen doorgeven of enkel een samenvatting van enkele honderden karakters doorgeven ?', 'info_table_prefix' => 'U kunt het voorvoegsel van de naam van de tabel van gegevens (dit is absoluut noodzakelijk wanneer men verschillende sites in dezelfde database wil sites) wijzigen. Dit voorvoegsel schrijft zich in kleine letters, niet geaccentueerd, en zonder ruimte.', 'info_taille_maximale_images' => 'SPIP zal de maximumomvang van de beelden testen die hij kan behandelen (in miljoenen pixels).
      zullen de grotere beelden niet verminderd zijn.', 'info_taille_maximale_vignette' => 'Maximale grootte van de mini-afbeeldingen gemaakt door het systeem:', @@ -546,41 +473,39 @@ gewiste auteurs met een grijze.', 'info_texte_message' => 'Tekst van je bericht', 'info_texte_message_02' => 'Tekst van het bericht', 'info_titre' => 'Titel:', - 'info_total' => 'totaal :', - 'info_tous_articles_en_redaction' => 'Alle artikels in redactie', - 'info_tous_articles_presents' => 'Alle gepubliceerde artikels van deze rubriek', + 'info_total' => 'totaal:', + 'info_tous_articles_en_redaction' => 'Alle artikelen in redactie', + 'info_tous_articles_presents' => 'Alle in deze rubriek gepubliceerde artikelen', 'info_tous_articles_refuses' => 'Alle items afgewezen', - 'info_tous_les' => 'alle :', - 'info_tous_redacteurs' => 'Berichten voor alle redacteurs', + 'info_tous_les' => 'alle:', 'info_tout_site' => 'Volledige site', 'info_tout_site2' => 'Het artikel werd niet naar deze taal vertaald.', 'info_tout_site3' => 'Het artikel werd naar deze taal vertaald maar aan het bronartikel werden wijzigingen aangebracht. De vertaling dient geactualiseerd te worden.', 'info_tout_site4' => 'Het artikel is vertaald naar deze taal en de vertaling is geactualiseerd.', 'info_tout_site5' => 'Origineel artikel.', - 'info_tout_site6' => 'Opgelet : enkel de originele artikels worden getoond. + 'info_tout_site6' => 'LET OP: alleen de originele artikelen worden getoond. Vertalingen worden gelinkt aan het origineel, een kleur geeft hun status aan :', 'info_traductions' => 'Vertalingen', - 'info_travail_colaboratif' => 'Samenwerking voor de artikels', + 'info_travail_colaboratif' => 'Samenwerking op artikelen', 'info_un_article' => 'een Artikel, ', 'info_un_site' => 'een Website, ', 'info_une_rubrique' => 'een Rubriek, ', 'info_une_rubrique_02' => '1 Rubriek', 'info_url' => 'URL :', 'info_url_proxy' => 'Proxy-URL', - 'info_url_site' => 'WEBSITE URL :', + 'info_url_proxy_pas_conforme' => 'De URL van de proxy is ongeldig.', 'info_url_site_pas_conforme' => 'De site URL is niet geldig.', 'info_url_test_proxy' => 'URL-test', 'info_urlref' => 'Adres van de koppeling :', 'info_utilisation_spip' => 'Je kan het publicatiesysteem nu gebruiken...', - 'info_visites_par_mois' => 'Tonen per maand :', + 'info_visites_par_mois' => 'Tonen per maand:', 'info_visiteur_1' => 'Bezoeker', 'info_visiteur_2' => 'van de publieke site', 'info_visiteurs' => 'Bezoekers', 'info_visiteurs_02' => 'Bezoekers van de publieke site', 'info_webmestre_forces' => 'Webmasters zijn op dit moment gedefinieerd in @file_options@.', 'install_adresse_base_hebergeur' => 'Adres van de database die door leverancier wordt toegekend', - 'install_base_ok' => 'De basis @base@ werd erkend', 'install_connect_ok' => 'De nieuwe basis is uitgeroepen tot de server @connect@.', 'install_echec_annonce' => 'De installatie zal wellicht mislukken of leiden tot een niet-werkende site...', 'install_extension_mbstring' => 'SPIP functioneert niet met :', @@ -593,209 +518,206 @@ een kleur geeft hun status aan :', 'install_select_langue' => 'Kies een taal en klik vervolgens op de knop «volgende» om de installatie te beginnen.', 'install_select_type_db' => 'Het basissoort gegevens aangeven:', 'install_select_type_mysql' => 'MySQL', - 'install_select_type_mysqli' => 'MySQLi', 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', - 'install_serveur_hebergeur' => 'Basisserver van gegevens die door de leverancier wordt toegekend', - 'install_table_prefix_hebergeur' => 'Het voorvoegsel van tafel dat door de leverancier wordt toegekend:', - 'install_tables_base' => 'Tabelen van de basis', + 'install_serveur_hebergeur' => 'Databaseserver die door de leverancier wordt toegekend', + 'install_table_prefix_hebergeur' => 'Het voorvoegsel van de tabel dat door de leverancier wordt toegekend:', + 'install_tables_base' => 'Tabellen van de database', 'install_types_db_connus' => 'SPIP kan MySQL (het meest verbreid), PostgreSQL en SQLite gebruiken.', 'install_types_db_connus_avertissement' => 'PostgreSQLsupport wordt ter experiment voorgesteld.', 'instituer_erreur_statut_a_change' => 'Het statuut is gewijzigd', - 'instituer_erreur_statut_non_autorise' => 'U kunt niet kiezen voor deze status', + 'instituer_erreur_statut_non_autorise' => 'Je kunt niet kiezen voor deze status', 'intem_redacteur' => 'redacteur', 'intitule_licence' => 'Licentie', 'item_accepter_inscriptions' => 'Inschrijvingen aanvaarden', 'item_activer_messages_avertissement' => 'Waarschuwingsberichten activeren', 'item_administrateur_2' => 'beheerder', 'item_afficher_calendrier' => 'Op de kalender tonen', - 'item_autoriser_documents_joints' => 'Gebruik van bijlagen bij artikels toestaan', - 'item_autoriser_documents_joints_rubriques' => 'Gebruik van bijlagen bij rubrieken toestaan', - 'item_autoriser_syndication_integrale' => 'Volledige artikels verspreiden via syndicatie', + 'item_autoriser_syndication_integrale' => 'Volledige artikelen verspreiden via syndicatiebestanden', 'item_choix_administrateurs' => 'de beheerders', 'item_choix_generation_miniature' => 'Automatisch aanmaken van verkleinde afbeeldingen.', 'item_choix_non_generation_miniature' => 'Geen verkleinde afbeeldingen aanmaken.', 'item_choix_redacteurs' => 'de redacteurs', 'item_choix_visiteurs' => 'bezoekers van de publieke site', 'item_creer_fichiers_authent' => 'de .htpasswd bestanden aanmaken', - 'item_limiter_recherche' => 'opzoeking beperken tot informatie van je eigen site', 'item_login' => 'Login', - 'item_messagerie_agenda' => 'De besteldienst en de agenda activeren', - 'item_mots_cles_association_articles' => 'Het artikels', + 'item_messagerie_agenda' => 'De berichtendienst en de agenda activeren', + 'item_mots_cles_association_articles' => 'aan artikelen', 'item_mots_cles_association_rubriques' => 'van de rubrieken', 'item_mots_cles_association_sites' => 'van de gesyndiceerde of gerefereerde sites.', 'item_non' => 'Nee', 'item_non_accepter_inscriptions' => 'Geen inschrijvingen aanvaarden', 'item_non_activer_messages_avertissement' => 'Geen waarschuwingsberichten', 'item_non_afficher_calendrier' => 'Niet tonen op de kalender', - 'item_non_autoriser_documents_joints' => 'Bijlagen bij artikels niet toestaan', - 'item_non_autoriser_documents_joints_rubriques' => 'Bijlagen bij rubrieken niet toestaan', - 'item_non_autoriser_syndication_integrale' => 'Enkel een samenvatting verspreiden', - 'item_non_compresseur' => 'De samendrukking desactiveren', + 'item_non_autoriser_syndication_integrale' => 'Alleen een samenvatting verspreiden', 'item_non_creer_fichiers_authent' => 'Deze bestanden niet aanmaken', - 'item_non_gerer_statistiques' => 'Geen statistieken aanmaken', - 'item_non_limiter_recherche' => 'De zoekopdracht uitbreiden naar de inhoud van de gerefereerde sites', - 'item_non_messagerie_agenda' => 'De boodschappendienst en de agenda desactiveren', - 'item_non_publier_articles' => 'Artikels niet vrijgeven voor de vastgelegde datum van publicatie', - 'item_non_utiliser_moteur_recherche' => 'Zoekmachine niet gebruiken', + 'item_non_messagerie_agenda' => 'De berichtendienst en de agenda desactiveren', + 'item_non_publier_articles' => 'Artikelen niet vrijgeven voor de vastgelegde datum van publicatie', 'item_nouvel_auteur' => 'Nieuwe auteur', 'item_nouvelle_rubrique' => 'Nieuw rubriek', 'item_oui' => 'Ja', - 'item_publier_articles' => 'Artikels publiceren, welke ook hun publicatiedatum is.', - 'item_reponse_article' => 'Antwoord op Artikel', - 'item_utiliser_moteur_recherche' => 'De zoekmachine gebruiken', + 'item_publier_articles' => 'Artikelen publiceren, ongeacht hun publicatiedatum.', + 'item_reponse_article' => 'Antwoord op artikel', 'item_version_html_max_html4' => 'Worden beperkt tot HTML4 op de publieke site', - 'item_version_html_max_html5' => 'Enable HTML5', + 'item_version_html_max_html5' => 'Maak HTML5 mogelijk', 'item_visiteur' => 'bezoeker', // J 'jour_non_connu_nc' => 'onbekend', // L - 'label_bando_outils' => 'Toolbar', - 'label_bando_outils_afficher' => 'Tonen gereedschap', - 'label_bando_outils_masquer' => 'Hide tools', + 'label_bando_outils' => 'Knoppenbalk', + 'label_bando_outils_afficher' => 'Knoppenbalk tonen', + 'label_bando_outils_masquer' => 'Knoppenbalk verbergen', 'label_choix_langue' => 'Selecteer uw taal', 'label_nom_fichier_connect' => 'Geef de naam die wordt gebruikt voor deze server', - 'label_slogan_site' => 'Site Tag', + 'label_slogan_site' => 'Slogan', 'label_taille_ecran' => 'Breedte van het scherm', 'label_texte_et_icones_navigation' => 'Navigatiemenu', 'label_texte_et_icones_page' => 'Bekijken van de pagina', 'ldap_correspondance' => 'erfenis van het veld @champ@', 'ldap_correspondance_1' => 'Erfenis van de velden LDAP', - 'ldap_correspondance_2' => 'Voor elk volgend SPIP veld, de naam van het overeenkomstige veld LDAP aangeven. Leegte laten om niet het te vullen, door ruimtes of komma’s te scheiden om verschillende LDAP velden te proberen.', - 'lien_ajout_destinataire' => 'Voeg deze bestemmeling toe', + 'ldap_correspondance_2' => 'Voor elk volgend SPIP veld, de naam van het overeenkomstige LDAP veld aangeven. Leeglaten om niets in te vullen, door spaties of komma’s gescheiden om verschillende LDAP velden te proberen.', 'lien_ajouter_auteur' => 'Voeg deze auteur toe', - 'lien_ajouter_participant' => 'Voeg nieuwe deelnemer toe', 'lien_ajouter_une_rubrique' => 'Deze rubriek toevoegen', 'lien_email' => 'e-mail', - 'lien_nom_site' => 'WEBSITENAME:', + 'lien_nom_site' => 'NAAM WEBSITE:', + 'lien_rapide_contenu' => 'Naar de inhoud gaan', + 'lien_rapide_navigation' => 'Naar de navigatie gaan', + 'lien_rapide_recherche' => 'Op zoek gaan', 'lien_retirer_auteur' => 'Auteur verwijderen', - 'lien_retirer_rubrique' => 'Rubriek uittrekken', + 'lien_retirer_rubrique' => 'Rubriek verwijderen', 'lien_retirer_tous_auteurs' => 'Verwijder alle auteurs', - 'lien_retirer_toutes_rubriques' => 'Alle rubrieken uittrekken', - 'lien_retrait_particpant' => 'Deelnemer verwijderen', + 'lien_retirer_toutes_rubriques' => 'Alle rubrieken verwijderen', 'lien_site' => 'Site', - 'lien_supprimer_rubrique' => 'Rubriek verwijderen', + 'lien_tout_decocher' => 'Alles deselecteren', 'lien_tout_deplier' => 'Alles uitvouwen', - 'lien_tout_replier' => 'Alles invouwen', - 'lien_tout_supprimer' => 'Alles afschaffen', + 'lien_tout_replier' => 'Alles opvouwen', + 'lien_tout_supprimer' => 'Alles verwijderen', 'lien_trier_nom' => 'Sorteer op naam', - 'lien_trier_nombre_articles' => 'Sorteer op aantal artikels', + 'lien_trier_nombre_articles' => 'Sorteer op aantal artikelen', 'lien_trier_statut' => 'Sorteer op status', 'lien_voir_en_ligne' => 'ONLINE BEKIJKEN:', 'logo_article' => 'Logo van het artikel', 'logo_auteur' => 'Logo van de auteur', 'logo_rubrique' => 'Logo van de rubriek ', 'logo_site' => 'Logo van deze site', - 'logo_standard_rubrique' => 'Logo standaard onderwerpen', + 'logo_standard_rubrique' => 'Standaard logo rubrieken', 'logo_survol' => 'Logo voor rollover', // M - 'menu_aide_installation_choix_base' => 'Databank kiezen', + 'menu_aide_installation_choix_base' => 'Database kiezen', 'module_fichier_langue' => 'Taalbestand', 'module_raccourci' => 'Snelkoppeling', 'module_texte_affiche' => 'Weergegeven tekst', - 'module_texte_explicatif' => 'Je kan de volgende snelkoppelingen invoegen in de sjablonen van je publieke site. Ze worden automatisch vertaald in de verschillende talen waarvoor een taalbestand is aangemaakt.', - 'module_texte_traduction' => 'Het taalbestand « @module@ » is beschikbaar in het :', + 'module_texte_explicatif' => 'Je kan de volgende snelkoppelingen invoegen in de skeletten van je publieke site. Ze worden automatisch vertaald in de verschillende talen waarvoor een taalbestand is aangemaakt.', + 'module_texte_traduction' => 'Het taalbestand « @module@ » is beschikbaar in het:', 'mois_non_connu' => 'Onbekend', // N 'nouvelle_version_spip' => 'Versie @version@ van SPIP is beschikbaar', + 'nouvelle_version_spip_majeure' => 'Een nieuwe versie van SPIP @version@ is beschikbaar', // O 'onglet_contenu' => 'Inhoud', - 'onglet_declarer_une_autre_base' => 'Een andere basis verklaren', + 'onglet_declarer_une_autre_base' => 'Een andere database declareren', 'onglet_discuter' => 'Discussiëren', - 'onglet_documents' => 'Documenten', 'onglet_interactivite' => 'Interactiviteit', 'onglet_proprietes' => 'Eigendommen', 'onglet_repartition_actuelle' => 'nu', - 'onglet_sous_rubriques' => 'Onder-rubrieken', + 'onglet_sous_rubriques' => 'Subrubrieken', // P 'page_pas_proxy' => 'Deze bladzijde moet niet via proxy gaan', - 'pas_de_proxy_pour' => 'Desnoods geeft de machines of gebieden aan waarvoor dit proxy niet moet van toepassing zijn (bijvoorbeeld : @exemple@)', - 'plugin_charge_paquet' => 'Lading van het pak @name@', + 'pas_de_proxy_pour' => 'Geef desnoods de machines of gebieden aan waarvoor deze proxy niet van toepassing moet zijn (bijvoorbeeld : @exemple@)', + 'phpinfo' => 'PHP Configuratie', + 'plugin_charge_paquet' => 'Lading van het pakket @name@', 'plugin_charger' => 'Download', - 'plugin_erreur_charger' => 'fout : onmogelijk om @zip@ te laden', - 'plugin_erreur_droit1' => 'De lijst @dest@ is niet toegankelijk in schrift.', - 'plugin_erreur_droit2' => 'Gelieve de rechten op deze lijst (en het eventueel te creëren) controleren, of de bestanden door FTP plaatsen.', - 'plugin_erreur_zip' => 'de mislukking pclzip : fout @status@', + 'plugin_erreur_charger' => 'fout: onmogelijk om @zip@ te laden', + 'plugin_erreur_droit1' => 'Er kan niet worden geschreven naar @dest@.', + 'plugin_erreur_droit2' => 'Controleer de rechten op deze map (en maak hem eventueel aan), of plaats de bestanden via FTP.', + 'plugin_erreur_zip' => 'pclzip fout: fout @status@', 'plugin_etat_developpement' => 'in ontwikkeling', 'plugin_etat_experimental' => 'experimenteel', 'plugin_etat_stable' => 'stabiel', 'plugin_etat_test' => 'in test', 'plugin_impossible_activer' => 'Onmogelijk om plugin @plugin@ te activeren', - 'plugin_info_automatique1' => 'Als u tot de automatische installatie van plugins wilt machtiging verlenen, zal willen :', - 'plugin_info_automatique1_lib' => 'Als u de automatische installatie van deze bibliotheek toe te laten :', - 'plugin_info_automatique2' => 'een lijst @rep@ creëren ;', - 'plugin_info_automatique3' => 'controleren dat de server wordt gemachtigd om in deze lijst te schrijven.', - 'plugin_info_automatique_creer' => 'om aan de wortel van de plaats te creëren.', - 'plugin_info_automatique_exemples' => 'voorbeelden :', - 'plugin_info_automatique_ftp' => 'U kunt een plugins, door FTP, in de lijst @rep@ plaatsen', - 'plugin_info_automatique_lib' => 'Sommige plugins vragen eveneens om bestanden in de lijst lib/ te kunnen downloaden, om eventueel aan de wortel van de plaats te creëren.', - 'plugin_info_automatique_liste' => 'Uw lijsten van plugins :', + 'plugin_info_automatique1' => 'Als je de automatische installatie van plugins wilt toelaten, moet je:', + 'plugin_info_automatique1_lib' => 'Als je de automatische installatie van deze bibliotheek toe wilt laten:', + 'plugin_info_automatique2' => 'een lijst @rep@ aanmaken;', + 'plugin_info_automatique3' => 'controleren dat de server het recht heeft om in deze map te schrijven.', + 'plugin_info_automatique_creer' => 'om in de siteroot te creëren.', + 'plugin_info_automatique_exemples' => 'voorbeelden:', + 'plugin_info_automatique_ftp' => 'Je kunt een plugin met FTP in de map @rep@ plaatsen', + 'plugin_info_automatique_lib' => 'Sommige plugins vragen eveneens om bestanden in map lib/ te kunnen downloaden, die in de root van de site moet bestaan.', + 'plugin_info_automatique_liste' => 'Je lijst van plugins:', 'plugin_info_automatique_liste_officielle' => 'officiële plugins', 'plugin_info_automatique_liste_update' => 'De lijsten bijwerken', 'plugin_info_automatique_ou' => 'om...', - 'plugin_info_automatique_select' => 'Selecteert hieronder een plugin : SPIP zal het downloaden en zal in de lijst @rep@ het plaatsen; als dit plugin reeds bestaat, zal hij bijgewerkt worden.', + 'plugin_info_automatique_select' => 'Selecteert hieronder een plugin: SPIP zal hem downloaden en in map @rep@ plaatsen; als de plugin al bestaat, zal hij worden bijgewerkt.', 'plugin_info_credit' => 'Credits', 'plugin_info_erreur_xml' => 'De declaratie van deze plugin is onjuist', 'plugin_info_install_ok' => 'Succesvolle installatie', - 'plugin_info_necessite' => 'Benodigd :', + 'plugin_info_necessite' => 'Benodigd:', 'plugin_info_non_compatible_spip' => 'Deze plugin is niet compatibel met deze versie van SPIP', 'plugin_info_plugins_dist_1' => 'De onderstaande plugins zijn geladen en geactiveerd in de directory @plugins_dist@.', # extensies zijn speciaale plugins geleeverd met spip-core om een gebruikbare SPIP pakket te bouwen 'plugin_info_plugins_dist_2' => 'Ze zijn niet te deactiveren.', - 'plugin_info_telecharger' => 'om sinds @url@ te downloaden en om te plaatsen in @rep@', - 'plugin_info_upgrade_ok' => ' Geslaagde update', + 'plugin_info_telecharger' => 'om vanaf @url@ te downloaden en te plaatsen in @rep@', + 'plugin_info_upgrade_ok' => ' Update geslaagd', 'plugin_librairies_installees' => 'Geïnstalleerde libraries', - 'plugin_necessite_lib' => 'Dit plugin vereist de library @lib@', - 'plugin_necessite_plugin' => 'Vereist plugin @plugin@ in versie minimale @version@.', - 'plugin_necessite_plugin_sans_version' => 'Vereist de plugin @plugin@ ', + 'plugin_necessite_extension_php' => 'De PHP-extensie @plugin@ is benodigd in versie @version@.', + 'plugin_necessite_extension_php_sans_version' => 'Benodigde PHP-extensie: @plugin@', + 'plugin_necessite_lib' => 'Deze plugin vereist de library @lib@', + 'plugin_necessite_php' => 'Benodigt @plugin@ in versie @version@.', + 'plugin_necessite_plugin' => 'Vereist plugin @plugin@ met minimale versie @version@.', + 'plugin_necessite_plugin_sans_version' => 'Vereist plugin @plugin@ ', 'plugin_necessite_spip' => 'Vereist SPIP in versie minimale @version@.', 'plugin_source' => 'bron: ', 'plugin_titre_automatique' => 'Automatische installatie', - 'plugin_titre_automatique_ajouter' => 'Een plugins toevoegen', - 'plugin_titre_installation' => 'Het installeren van de plugin @plugin@', + 'plugin_titre_automatique_ajouter' => 'Een plugin toevoegen', + 'plugin_titre_installation' => 'Het installeren van plugin @plugin@', 'plugin_titre_modifier' => 'Mijn plugins', + 'plugin_utilise_extension_php' => 'Gebruik de PHP-extensie @plugin@ in versie @version@.', + 'plugin_utilise_php' => 'Gebruikt @plugin@ in versie @version@.', + 'plugin_utilise_plugin' => 'Gebruikt plugin @plugin@ met versie @version@.', 'plugin_zip_active' => 'Gaat door om het te activeren', - 'plugin_zip_adresse' => 'geeft hieronder het adres van een bestand zip van te downloaden plugin, of nog het adres van een lijst van plugins aan.', - 'plugin_zip_adresse_champ' => 'Adres van plugin of de lijst ', + 'plugin_zip_adresse' => 'geef hieronder het adres van een zipbestand om de plugin te downloaden, of het adres van een lijst van plugins.', + 'plugin_zip_adresse_champ' => 'Adres van plugin of van de lijst ', 'plugin_zip_content' => 'Hij bevat de volgende bestanden (@taille@),
      leningen die in de lijst @rep@ moeten geplaatst worden', - 'plugin_zip_installe_finie' => 'Het bestand @zip@ is unzip en werd geplaatst.', - 'plugin_zip_installe_rep_finie' => 'Het bestand @zip@ is unzip en werd in de lijst @rep@ geplaatst', - 'plugin_zip_installer' => 'U kunt nu het plaatsen.', + 'plugin_zip_installe_finie' => 'Het bestand @zip@ is geunzipt en werd geplaatst.', + 'plugin_zip_installe_rep_finie' => 'Het bestand @zip@ is geunzipt en werd in de lijst @rep@ geplaatst', + 'plugin_zip_installer' => 'Je kunt nu het nu plaatsen.', 'plugin_zip_telecharge' => 'Het bestand @zip@ werd geladen', 'plugins_actif_aucun' => 'Geen plugins ingeschakeld.', - 'plugins_actif_un' => 'Een plugin is ingeschakeld.', + 'plugins_actif_un' => 'Eén plugin is ingeschakeld.', 'plugins_actifs' => '@count@ plugins activeren.', 'plugins_actifs_liste' => 'Actief', 'plugins_compte' => '@count@ plugins', - 'plugins_disponible_un' => 'Een plugin beschikbaar.', + 'plugins_disponible_un' => 'Eén plugin beschikbaar.', 'plugins_disponibles' => '@count@ plugins beschikbaar.', 'plugins_erreur' => 'De fout in plugins: @plugins@', 'plugins_liste' => 'Lijst van plugins', 'plugins_liste_dist' => 'Vergrendelde plugins', # "locked" in english - 'plugins_recents' => 'Recent plugins.', + 'plugins_recents' => 'Recente plugins.', 'plugins_tous_liste' => 'Alle', 'plugins_vue_hierarchie' => 'Hiërarchie', 'plugins_vue_liste' => 'Lijst', - 'protocole_ldap' => 'De versie van het protocol :', + 'protocole_ldap' => 'De versie van het protocol:', // Q 'queue_executer_maintenant' => 'Nu uitvoeren', - 'queue_info_purger' => 'U kunt alle werken in afwachting verwijderen en het lijst van periodieke werken herstarten', + 'queue_info_purger' => 'Je kunt alle wachtende taken verwijderen en het lijst van periodieke taken herstarten', 'queue_nb_jobs_in_queue' => '@nb@ wachtrij', - 'queue_next_job_in_nb_sec' => 'Volgende opdracht in @nb@ s', + 'queue_next_job_in_nb_sec' => 'Volgende opdracht in @nb@ sec', 'queue_no_job_in_queue' => 'Geen opdracht in de wachtrij', - 'queue_one_job_in_queue' => '1 achterstand', - 'queue_purger_queue' => 'De werkenlijst leegmaken', - 'queue_titre' => 'Lijst van werken', + 'queue_one_job_in_queue' => '1 taak in wachtrij', + 'queue_purger_queue' => 'De takenlijst leegmaken', + 'queue_titre' => 'Lijst van taken', // R - 'repertoire_plugins' => 'Map :', + 'repertoire_plugins' => 'Map:', + 'required' => '(verplicht)', // S 'sans_heure' => 'zonder tijdstip', @@ -805,116 +727,103 @@ een kleur geeft hun status aan :', // T 'tache_cron_asap' => 'CRON taak @function@ (ASAP)', 'tache_cron_secondes' => 'CRON taak @function@ (alle @nb@ s)', - 'taille_cache_image' => 'De beelden door SPIP automatisch aangemaakt (icoontjes van documenten, grafisch weergegeven titels, wiskundige functies in TeX formaat...) nemen in de map @dir@ een totale plaats in van @taille@.', + 'taille_cache_image' => 'De door SPIP automatisch aangemaakte afbeeldingen (icoontjes van documenten, grafisch weergegeven titels, wiskundige functies in TeX formaat...) nemen in map @dir@ in totaal @taille@ in.', 'taille_cache_infinie' => 'De site voorziet geen beperking in de grootte van de buffermap.', 'taille_cache_maxi' => 'SPIP probeert de omvang van de buffermap van de site te beperken tot ongeveer @octets@ gegevens.', - 'taille_cache_moins_de' => 'De cache is kleiner dans @octets@.', + 'taille_cache_moins_de' => 'De cache is kleiner dan @octets@.', 'taille_cache_octets' => 'De grootte van de buffer bedraagt momenteel @octets@.', 'taille_cache_vide' => 'De buffer is leeg.', 'taille_repertoire_cache' => 'Grootte van het bufferbestand', - 'text_article_propose_publication' => 'Artikel voorgesteld voor de publicatie.', + 'text_article_propose_publication' => 'Artikel voorgesteld voor publicatie.', 'texte_acces_ldap_anonyme_1' => 'Sommige LDAP-servers aanvaarden geen anonieme toegang. In zo’n geval dien je één loginnaam op te geven om vervolgens informatie in het adressenboek te zoeken. In de meeste gevallen kan je de volgende velden echter leeg laten.', - 'texte_admin_effacer_01' => 'Met dit commando vernietig je de volledige inhoud van de databank, -inbegrepen alle toegangsrechten voor redacteurs en beheerders. Nadat je dit uitgevoerd hebt, dien je de herinstallatie van SPIP te starten om een volledig nieuwe database aan te maken en toegangsrechten voor een eerste beheerder.', - 'texte_adresse_annuaire_1' => '(Als de map is geïnstalleerd is op dezelfde computer als je website, is het waarschijnlijk «localhost».)', - 'texte_ajout_auteur' => 'Deze auteuer is toegevoegd aan het artikel :', + 'texte_admin_effacer_01' => 'Met dit commando vernietig je de volledige inhoud van de database, +inbegrepen alle toegangsrechten voor redacteurs en beheerders. Nadat je dit uitgevoerd hebt, dien je de herinstallatie van SPIP te starten om een volledig nieuwe database aan te maken met toegangsrechten voor een eerste beheerder.', + 'texte_adresse_annuaire_1' => '(Als de map geïnstalleerd is op dezelfde computer als je website, is het waarschijnlijk «localhost».)', + 'texte_ajout_auteur' => 'Deze auteuer is toegevoegd aan het artikel:', 'texte_annuaire_ldap_1' => 'Als je toegang hebt tot een LDAP-adresboek, kan je dit gebruiken om automatisch gebruikers in te voeren in SPIP.', 'texte_article_statut' => 'Dit artikel is:', - 'texte_article_virtuel' => 'Virtual artikel', + 'texte_article_virtuel' => 'Virtueel artikel', 'texte_article_virtuel_reference' => 'Virtueel artikel: gekoppeld artikel in je SPIP site maar doorgestuurd naar een andere URL. Verwijder de URL om de doorverwijzing te stoppen.', 'texte_aucun_resultat_auteur' => 'Geen resultaat voor "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Deze website kan een lijst met auteurs die op dat moment aangelogd zijn, tonen. Het is mogelijk om direkt berichten opsturen en ontvangen tussen de auteurs. Je kan kiezen om niet in deze lijst te verschijnen (je wordt dan « onzichtbaar » voor de andere gebruikers).', - 'texte_auteur_messagerie_1' => 'Deze site biedt de mogelijkheid om berichten uit te wisselen en forums op te starten voor private discussies tussen de deelnemers van de site. Je kan kiezen om niet deel te nemen aan deze uitwisseling van informatie.', 'texte_auteurs' => 'DE AUTEURS', - 'texte_choix_base_1' => 'Kies je databank :', - 'texte_choix_base_2' => 'De SQL server bevat meerdere databanken.', - 'texte_choix_base_3' => 'Kies hierna die die u door uw leverancier werd toegekend:', - 'texte_choix_table_prefix' => 'Voorvoegsel van de tabelen :', - 'texte_commande_vider_tables_indexation' => 'Gebruik dit commando als je de tabellen met indices wil leegmaken die door de - zoekmachine van SPIP gebruikt worden. Zo kan je schijfruimte vrijmaken.', - 'texte_compatibilite_html' => 'U kunt vragen SPIP te produceren, op de openbare site, code compatibel met standaard HTML4, of laat het aan de mogelijkheden van de moderne gebruik HTML5.', - 'texte_compatibilite_html_attention' => 'Er is geen risico, zodat de HTML5, maar als je dat doet, de pagina’s van uw site moet beginnen met het volgende te blijven geldig : <!DOCTYPE html>.', - 'texte_compresse_ou_non' => '(deze kan gecomprimeerd worden of niet)', + 'texte_choix_base_1' => 'Kies je database:', + 'texte_choix_base_2' => 'De SQL server bevat meerdere databases.', + 'texte_choix_base_3' => 'Kies hierna die welke door jouw leverancier werd toegekend:', + 'texte_choix_table_prefix' => 'Voorvoegsel van de tabellen:', + 'texte_compatibilite_html' => 'Je kunt SPIP vragen om de publieke site te genereren in code die compatibel is met de HTML4 standaard, of met moderne HTML5 code die meer mogelijkheden biedt.', + 'texte_compatibilite_html_attention' => 'Er bestaat geen risico bij het gebruik van HTML5, op voorwaarde dat de pagina’s van de site beginnen met: <!DOCTYPE html>.', 'texte_compte_element' => '@count@ element', - 'texte_compte_elements' => '@count@ elements', - 'texte_conflit_edition_correction' => 'Gelieve de verschillen tussen beide versies van de tekst hieronder te controleren; u kunt eveneens uw wijzigingen kopiëren, vervolgens opnieuw beginnen.', - 'texte_connexion_mysql' => 'Raadpleegt de inlichtingen die door uw leverancier worden verstrekt: u moet er de basisserver van gegevens vinden die men voorstelt en uw persoonlijke identificaties om u erop aan te sluiten.', + 'texte_compte_elements' => '@count@ elementen', + 'texte_conflit_edition_correction' => 'Controleer hieronder de verschillen tussen beide versies van de tekst; je kunt eveneens jouw wijzigingen kopiëren en opnieuw beginnen.', + 'texte_connexion_mysql' => 'Raadpleegt de inlichtingen die door jouw leverancier worden verstrekt: je moet er de databaseserver vinden die men voorstelt en jouw persoonlijke identificaties om je erop aan te melden.', 'texte_contenu_article' => '(Inhoud van het artikel in enkele woorden.)', - 'texte_contenu_articles' => 'Naargelang de opmaak van je website kan je beslissen sommige elementen van artikels + 'texte_contenu_articles' => 'Naargelang de opmaak van je website kan je beslissen sommige elementen van een artikel wel of niet te gebruiken. - Duidt hieronder op de lijst de elementen aan die je wil gebruiken.', + Geef op de lijst hieronder aan welke elementen je wil gebruiken.', 'texte_crash_base' => 'Als je database gecrashed is, kan je een automatisch herstel proberen.', - 'texte_creer_rubrique' => 'Alvorens artikelen te kunnen schrijven,
      moet u een rubriek creëren.', + 'texte_creer_rubrique' => 'Alvorens artikelen te kunnen schrijven,
      moet je een rubriek aanmaken.', 'texte_date_creation_article' => 'DATUM VAN AANMAKEN VAN HET ARTIKEL:', - 'texte_date_creation_objet' => 'Aanmaakdatum :', # on ajoute le ":" - 'texte_date_publication_anterieure' => 'Datum van eerdere redactie :', + 'texte_date_creation_objet' => 'Aanmaakdatum:', # on ajoute le ":" + 'texte_date_publication_anterieure' => 'Datum van eerdere redactie:', 'texte_date_publication_anterieure_nonaffichee' => 'Verberg de datum van eerdere redactie.', - 'texte_date_publication_article' => 'DATUM VAN ONLINE PUBLICATIE :', - 'texte_date_publication_objet' => 'Datum van online publicatie :', - 'texte_descriptif_petition' => 'Beschrijving van de petitie.', + 'texte_date_publication_article' => 'DATUM VAN ONLINE PUBLICATIE:', + 'texte_date_publication_objet' => 'Datum van online publicatie:', + 'texte_definir_comme_traduction_rubrique' => 'Deze rubriek is een vertaling van rubrieknummer:', 'texte_descriptif_rapide' => 'Korte beschrijving.', - 'texte_effacer_base' => 'Verwijder de SPIP databank', - 'texte_effacer_donnees_indexation' => 'Verwijder de geïndexeerde gegevens', + 'texte_effacer_base' => 'Verwijder de SPIP database', 'texte_effacer_statistiques' => 'De statistieken wissen', - 'texte_en_cours_validation' => 'De inhouden hieronder wachten op goedkeuring.', - 'texte_enrichir_mise_a_jour' => 'De opmaak van een tekst kan gebeuren met behulp van de zogeheten «typografische snelkoppelingen».', - 'texte_fichier_authent' => 'SPIP moet er dan speciale bestanden .htpasswd + 'texte_en_cours_validation' => 'De onderstaande inhoud wacht op goedkeuring.', + 'texte_enrichir_mise_a_jour' => 'De opmaak van een tekst kan gebeuren met behulp van zogeheten «typografische snelkoppelingen».', + 'texte_fichier_authent' => 'SPIP moet er dan speciale bestanden .htpasswd en .htpasswd-admin in de directory @dossier@ ?

      Deze bestanden die u kunt gebruiken om toegang te beperken tot - auteurs en bestuurders in andere delen van je site + auteurs en beheerders in andere delen van je site (externe programma statistieken, bijvoorbeeld).

      -Als u geen nut ervan hebt, kunt u de standaard instellingen behouden (geen nieuw bestand maken).

      ', - 'texte_informations_personnelles_1' => 'Nu zal het systeem een persoonlijke toegang tot de site voor u creëren.', - 'texte_informations_personnelles_2' => '(Nota : als het herinstallatie betreft, en je toegangscode blijkt nog steeds te werken, kan je', +Als dit geen geen nut heeft, kunt je de standaard instellingen behouden (geen nieuw bestand maken).

      ', + 'texte_informations_personnelles_1' => 'Nu zal het systeem een persoonlijke toegang tot de site voor je creëren.', + 'texte_informations_personnelles_2' => '(Nota: als het een herinstallatie betreft en je toegangscode blijkt nog steeds te werken, kan je', 'texte_introductif_article' => '(Inleidende tekst op het artikel.)', - 'texte_jeu_caractere' => 'Het is aan te raden op je site het universele alfabet (utf-8) te gebruiken :dit laat de weergave van teksten toe in alle talen en stelt geen compatibilieitsprobleemet de recente bladerprogramma’s.', - 'texte_jeu_caractere_2' => 'Opgelet : deze instelling zal teksten die reeds werden ingevoerd in de gegevensbank niet omzetten.', - 'texte_jeu_caractere_3' => 'Je site is momenteel geïnstalleerd in deze tekenset :', - 'texte_jeu_caractere_4' => 'Indien dit niet overeenkomt met je werkelijke gegevens (bvb bij het terugzetten van je gegevensbank), of als je deze site opstart en met een andere tekenset van start wil gaan, gelieve deze dan hieronder aan te duiden :', - 'texte_jeu_caractere_conversion' => 'Noot : je kan beslissen eens en voorgoed al je teksten van je site (artikels, berichten, forums, enz.) naar het utf-8 alfabet om te zetten, door naar de pgaina voor omzetting naar utf-8 te gaan.', - 'texte_lien_hypertexte' => '(Als je artikel handelt over iets dat op het web is gepubliceerd, of naar een internetpagina verwijst met meer informatie, gelieve dan hier de titel en de URL van deze pagina op te geven.)', + 'texte_jeu_caractere' => 'Het is aan te raden op je site het universele alfabet (utf-8) te gebruiken: dit laat de weergave van teksten toe in alle talen en stelt geen compatibilieitsprobleem met de recente browsers.', + 'texte_jeu_caractere_3' => 'Je site is momenteel geïnstalleerd in deze tekenset:', + 'texte_jeu_caractere_4' => 'Indien dit niet overeenkomt met je werkelijke gegevens (bvb bij het terugzetten van je database), of als je deze site opstart en met een andere tekenset van start wil gaan, geef dat dan hieronder aan:', 'texte_login_ldap_1' => '(Leeg laten voor een anonieme login, of een volledig pad invullen, bijvoorbeeld «uid=janssen, ou=users, dc=mijn-domein, dc=com».)', - 'texte_login_precaution' => 'Opgelet! Met deze login ben je momenteel aangemeld. + 'texte_login_precaution' => 'LET OP! Met deze login ben je momenteel aangemeld. Gebruik dit formulier met de nodige voorzichtigheid...', - 'texte_message_edit' => 'Opgelet: dit bericht kan door elke beheerder van de site gewijzigd worden en is zichtbaar voor elke redacteur. Maak enkel gebruik van deze aankondigingen om belangrijk nieuws in verband met de site kenbaar te maken.', 'texte_messagerie_agenda' => 'Een besteldienst laat de redacteuren van de site toe om tussen hen direct in de particuliere ruimte van de plaats mee te delen. Zij wordt verenigd met een agenda.', 'texte_mise_a_niveau_base_1' => 'Je hebt zonet de SPIP bestanden vernieuwd. Nu dien je - eveneens de databank te updaten.', + eveneens de database te updaten.', 'texte_modifier_article' => 'Wijzigen artikel:', - 'texte_moteur_recherche_active' => 'De zoekmotor is geactiveerd. Voer deze taak uit als je een snelle herindexatie wil doorvoeren (na het terugzetten van een reservekopie bijvoorbeeld). Documenten die via de normale weg worden gewijzigd (vanaf de SPIP interface) worden automatisch geherindexeerd: deze taak is dus enkel nuttig in uitzonderlijke omstandigheden.', - 'texte_moteur_recherche_non_active' => 'De zoekmachine is niet geactiveerd.', 'texte_multilinguisme' => 'Als je graag objecten in verschillende talen zou willen beheren, met een complexe navigatie, kan je een taalkeuzemenu toevoegen bij deze objecten, i.f.v de organisatie van je site.', 'texte_multilinguisme_trad' => 'Je kan eveneens een systeem in werking stellen voor het beheer van koppelingen tussen de verschillende vertalingen van de objecten.', 'texte_non_compresse' => 'niet gecomprimeerd (de server ondersteunt deze functionaliteit niet)', - 'texte_nouveau_message' => 'Nieuw bericht', 'texte_nouvelle_version_spip_1' => 'Je hebt een nieuwe versie van SPIP geïnstalleerd.', - 'texte_nouvelle_version_spip_2' => 'Deze nieuwe SPIP-versie vereist een grondiger update dan gewoonlijk. Als je webmaster bent van deze site, verwijder dan het bestand @connect@ en herneem de installatie om de verbindingsgegevens met de databank te vernieuwen.

      (NB. : als je je verbindingsgegevens niet meer kent, kan je best eerst een blik werpen op het bestand @connect@ alvorens het te verwijderen...)

      ', # Pas de modif trouvée, la trad reste valable. - 'texte_operation_echec' => 'Ga terug naar de vorige pagina, selecteer een andere gegevensbank of maak een nieuwe aan. Kijk nog eens alle gegevens na die je van je provider hebt ontvangen.', + 'texte_nouvelle_version_spip_2' => 'Deze nieuwe SPIP-versie vereist een grondiger update dan gewoonlijk. Als je webmaster bent van deze site, verwijder dan het bestand @connect@ en hervat de installatie om de verbindingsgegevens met de database te vernieuwen.

      (NB: als je de verbindingsgegevens niet meer kent, kan je best eerst een blik werpen op het bestand @connect@ alvorens het te verwijderen...)

      ', # Pas de modif trouvée, la trad reste valable. + 'texte_operation_echec' => 'Ga terug naar de vorige pagina, selecteer een andere database of maak een nieuwe aan. Kijk nog eens alle gegevens na die je van je provider hebt ontvangen.', 'texte_plus_trois_car' => 'meer dan 3 karakters', 'texte_plusieurs_articles' => 'Meerdere auteurs gevonden voor "@cherche_auteur@":', 'texte_port_annuaire' => '(De opgegeven standaardwaarde is meestal de juiste.)', 'texte_presente_plugin' => 'Deze pagina toont de lijst van beschikbare plugins op deze site. Je kan de nodige plugins activeren door het overeenkomstige vakje aan te kruisen.', 'texte_proposer_publication' => 'Wanneer uw artikel wordt beëindigd,
      kunt u zijn publicatie voorstellen.', 'texte_proxy' => 'In bepaalde gevallen (intranet, beschermde netwerken), zijn de verwijderde plaatsen (SPIP documentatie , georganiseerde plaatsen, enz.) toegankelijk slechts door een proxy HTTP. Eventueel geeft hieronder zijn adres aan, onder de vorm @proxy_in_actie@. Over het algemeen zult u dit lege hokje laten.', - 'texte_publication_articles_post_dates' => 'Hoe dient SPIP zich op te stellen ten opzichte van artikels waarvan de + 'texte_publication_articles_post_dates' => 'Hoe dient SPIP zich op te stellen ten opzichte van artikelen waarvan de publicatiedatum is vastgelegd op een toekomstige datum?', 'texte_rappel_selection_champs' => '[Vergeet niet de juiste keuze te maken voor dit veld.]', 'texte_recalcul_page' => 'Als je enkel één pagina wil vernieuwen, doe dit dan op de publieke site en gebruik de knop « vernieuwen ».', - 'texte_recapitiule_liste_documents' => 'Deze pagina herneemt de lijst met documenten die je bij de rubrieken hebt geplaatst. Om de informatie van een document te wijzigen, volg je de link naar de pagina van de rubriek.', - 'texte_recuperer_base' => 'De databank herstellen', + 'texte_recuperer_base' => 'De database herstellen', 'texte_reference_mais_redirige' => 'Gekoppeld artikel in je SPIP site, maar doorgestuurd naar een andere URL.', 'texte_requetes_echouent' => 'Wanneer bepaalde SQL-query’s en systematisch niet zonder duidelijke reden, is het mogelijk dat dit te wijten is aan de database zelf.

      Uw SQL Server heeft een regresvordering van tabellen als ze zijn beschadigd door een ongeval. Hier kunt u proberen dit te repareren als dat niet lukt, een kopie van het scherm, die aanwijzingen van wat er mis bevatten ...

      Als het probleem zich blijft voordoen, contact opnemen met uw gastheer.

      ', - 'texte_selection_langue_principale' => 'Hieronder kan je de «basistaal» van de site kiezen. Deze keuze verplicht je - gelukkig! - niet om artikels in deze taal te schrijven maar laat wel toe om het volgende te bepalen: + 'texte_selection_langue_principale' => 'Hieronder kan je de «basistaal» van de site kiezen. Deze keuze verplicht je - gelukkig! - niet om artikelen in deze taal te schrijven, maar laat wel toe om het volgende te bepalen:
      • het standaardformaat van de data op de publieke site;
      • de aard van de typografische motor die SPIP dient te gebruiken om teksten te tonen;
      • de taal die gebruikt moet worden op de formulieren van de publieke site;
      • -
      • de taal die standaard wordt voorgesteld in het private gedeelte.
      ', +
    • de taal die standaard wordt voorgesteld in het privé-gedeelte.
    ', 'texte_sous_titre' => 'Ondertitel', - 'texte_statistiques_visites' => '(donkere balkjes : zondag / donkere lijn : evolutie van het gemiddelde)', + 'texte_statistiques_visites' => '(donkere balkjes: zondag / donkere lijn: evolutie van het gemiddelde)', 'texte_statut_attente_validation' => 'wachten op goedkeuring', 'texte_statut_publies' => 'online geplaatst', 'texte_statut_refuses' => 'geweigerd', @@ -923,50 +832,32 @@ Dit kan handig zijn als je veel pagina’s hebt gewijzigd, de layout of de struc De nieuwste pagina’s worden dan getoond en de buffer wordt opnieuw opgebouwd.', 'texte_sur_titre' => 'opschrift', 'texte_table_ok' => ': deze tabel is OK.', - 'texte_tables_indexation_vides' => 'De indices van de zoekmachine zijn leeggemaakt.', 'texte_tentative_recuperation' => 'Poging tot herstel.', - 'texte_tenter_reparation' => 'Poging tot herstel van de databank', + 'texte_tenter_reparation' => 'Poging tot herstel van de database', 'texte_test_proxy' => 'Om de proxy te testen kan je hier het adres geven van de website die je wil bereiken.', - 'texte_titre_02' => 'Titel :', + 'texte_titre_02' => 'Titel:', 'texte_titre_obligatoire' => 'Titel [verplicht]', 'texte_travail_article' => '@nom_auteur_modif@ heeft @date_diff@ minuten geleden aan dit artikel gewerkt', 'texte_travail_collaboratif' => 'Als het vaak gebeurt dat meerdere redacteurs aan een en hetzelfde artikel werken, kan het systeem - wel tonen welke artikels er recent «geopend» werden - om te vermijden op hetzelfde moment simultaan + wel tonen welke artikelen er recent «geopend» werden + om te vermijden dat simultaan wijzigingen worden aangebracht. - Deze optie is standaard wel niet geactiveerd om te + Deze optie is niet standaard geactiveerd om te vermijden dat er teveel waarschuwingsberichten op het scherm verschijnen.', - 'texte_trop_resultats_auteurs' => 'Teveel resultaten voor "@cherche_auteur@" ; gelieve de zoekopdracht te verfijnen.', - 'texte_unpack' => 'binnenhalen van de laatste versie', - 'texte_utilisation_moteur_syndiques' => 'Wanneer u de geïntegreerdeb de zoekmotor van - SPIP, kunt u het onderzoek naar de site en - instellen de georganiseerde artikelen op twee wijze - verschillend.
    - De meest - eenvoudige manier bestaat erin om alleen te zoeken in titels en - beschrijvingen van de artikels.
    - - Een andere methode is veel krachtiger en laat - eveneens toe op de tekst van de gekoppelde sites te zoeken . Als je - een site hebt gekoppeld, zal SPIP de zoekopdracht - uitbreiden tot de tekst van deze site zelf.', - 'texte_utilisation_moteur_syndiques_2' => 'Deze methode verplicht SPIP om de gekoppelde - site regelmatig te bezoeken, wat een kleine - vertraging van je eigen site tot gevolg kan hebben.', 'texte_vide' => 'leeg', 'texte_vider_cache' => 'Cache leegmaken', - 'titre_admin_effacer' => 'Technisch onderhoud', 'titre_admin_tech' => 'Technisch onderhoud', 'titre_admin_vider' => 'Technisch onderhoud', 'titre_ajouter_un_auteur' => 'Voeg een auteur toe', 'titre_ajouter_un_mot' => 'Voeg een trefwoord', - 'titre_ajouter_une_rubrique' => 'Een rubriek toevoegen', - 'titre_cadre_afficher_article' => 'Artikels tonen', + 'titre_cadre_afficher_article' => 'Artikelen tonen', 'titre_cadre_afficher_traductions' => 'Toon de status van de vertalingen voor de volgende talen :', - 'titre_cadre_ajouter_auteur' => 'EEN AUTEUR TOEVOEGEN :', + 'titre_cadre_ajouter_auteur' => 'EEN AUTEUR TOEVOEGEN:', 'titre_cadre_interieur_rubrique' => 'In de rubriek', 'titre_cadre_numero_auteur' => 'AUTEUR NUMMER', - 'titre_cadre_numero_objet' => '@objet@ NUMBER :', + 'titre_cadre_numero_objet' => '@objet@ NUMMER:', 'titre_cadre_signature_obligatoire' => 'Handtekening [Verplicht]
    ', 'titre_config_contenu_notifications' => 'Kennisgevingen', 'titre_config_contenu_prive' => 'In de particuliere ruimte', @@ -975,6 +866,7 @@ Dit kan handig zijn als je veel pagina’s hebt gewijzigd, de layout of de struc 'titre_config_langage' => 'Stel de taal in', 'titre_configuration' => 'Configuratie van de site', 'titre_configurer_preferences' => 'Configureer uw voorkeuren', + 'titre_configurer_preferences_menus' => 'Configureer je menuvoorkeuren', 'titre_conflit_edition' => 'Conflict bij de uitgave', 'titre_connexion_ldap' => 'Opties: Je LDAP-verbinding', 'titre_groupe_mots' => 'WOORDENGROEP:', @@ -982,59 +874,33 @@ Dit kan handig zijn als je veel pagina’s hebt gewijzigd, de layout of de struc 'titre_langue_article' => 'Taal van het artikel', 'titre_langue_rubrique' => 'Taal van de rubriek', 'titre_langue_trad_article' => 'TAAL EN VERTALINGEN VAN HET ARTIKEL', - 'titre_les_articles' => 'ARTIKELS', + 'titre_les_articles' => 'ARTIKELEN', 'titre_messagerie_agenda' => 'Boodschappen en agenda', 'titre_naviguer_dans_le_site' => 'Bezoek de site...', 'titre_nouvelle_rubrique' => 'Nieuwe rubriek', 'titre_numero_rubrique' => 'RUBRIEKNUMMER:', - 'titre_page_admin_effacer' => 'Technische onderhoud : de databank wissen', - 'titre_page_articles_edit' => 'Wijzigen : @titre@', - 'titre_page_articles_page' => 'Artikels', + 'titre_page_articles_edit' => 'Wijzigen: @titre@', + 'titre_page_articles_page' => 'Artikelen', 'titre_page_articles_tous' => 'Volledige site', - 'titre_page_auteurs' => 'Bezoekers', 'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Websiteconfiguratie', - 'titre_page_config_fonctions' => 'Websiteconfiguratie', - 'titre_page_configuration' => 'Websiteconfiguratie', - 'titre_page_controle_petition' => 'Vervolg van de petities', 'titre_page_delete_all' => 'Volledige en onomkeerbare verwijdering', - 'titre_page_documents_liste' => 'Documenten van de rubrieken', - 'titre_page_index' => 'Je privé-ruimte', - 'titre_page_message_edit' => 'Een bericht opstellen', - 'titre_page_messagerie' => 'Je brievenbus', 'titre_page_recherche' => 'Zoekresultaat voor @recherche@ ', 'titre_page_statistiques_referers' => 'Statistieken (per referer)', - 'titre_page_statistiques_signatures_jour' => 'Aantal handtekeningen per dag', - 'titre_page_statistiques_signatures_mois' => 'Aantal handtekeningen per maand', 'titre_page_upgrade' => 'Bijwerken van SPIP', - 'titre_publication_articles_post_dates' => 'Publicatie van postgedateerde artikels', - 'titre_referencer_site' => 'Deze site koppelen :', - 'titre_rendez_vous' => 'AFSPRAKEN :', + 'titre_preference_menus_favoris' => 'Favoriete menu’s', + 'titre_publication_articles_post_dates' => 'Publicatie van postgedateerde artikelen', 'titre_reparation' => 'Herstel', - 'titre_suivi_petition' => 'Vervolg van de petities', - 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'Er is geen artikel met dit nummer.', + 'titre_suivi_petition' => 'Opvolging van petities', + 'tls_ldap' => 'Transport Layer Security:', 'trad_article_traduction' => 'Alle versies van dit artikel:', - 'trad_deja_traduit' => 'Fout: onmogelijk om dit artikel te verbinden met het gevraagde nummer.', - 'trad_delier' => 'Niet binden aan deze vertalingen', + 'trad_delier' => 'Niet meer aan deze vertalingen koppelen', 'trad_lier' => 'Dit artikel is een vertaling van artikelnummer:', - 'trad_new' => 'Voeg een nieuwe vertaling', + 'trad_new' => 'Een nieuwe vertaling schrijven', // U - 'upload_info_mode_document' => 'Dit beeld in portfolio neerzetten', - 'upload_info_mode_image' => 'Dit beeld van portfolio terugtrekken', - 'utf8_convert_attendez' => 'Wacht enkele ogenblikken en herlaadt deze pagina.', - 'utf8_convert_avertissement' => 'U heeft zich klaargemaakt om de inhoud van uw site (artikels, berichten, enz) om te zetten van karakterset @orig@ naar karakterset @charset@.', - 'utf8_convert_backup' => 'Vergeet niet om vooraf uw volledige site te bewaren. U dient ook na te gaan of uw sjablonen en taalbestanden @charset@ compatibel zijn.', - 'utf8_convert_erreur_deja' => 'Uw site is reeds in @charset@, onnodig om hem om te zetten...', 'utf8_convert_erreur_orig' => 'Fout : de karakterset @charset@ wordt niet ondersteund.', - 'utf8_convert_termine' => 'Opdracht volbracht !', - 'utf8_convert_timeout' => 'Belangrijk : indien de server timeout aangeeft, dien je de pagina te herladen tot ze « volbracht » aangeeft.', - 'utf8_convert_verifier' => 'Je kan nu de buffer leegmaken en nagaan of alles goed werkt op je publieke site. Als het goed fout gaat, kan je terugvallen op een backup die in SQL formaat in de map @rep@ bewaard werd.', - 'utf8_convertir_votre_site' => 'Je site omzetten naar utf-8', // V - 'version' => 'Versie :' + 'version' => 'Versie:' ); - -?> diff --git a/www/ecrire/lang/ecrire_oc_auv.php b/www/ecrire/lang/ecrire_oc_auv.php index 5ab1664d..b71a7fff 100644 --- a/www/ecrire/lang/ecrire_oc_auv.php +++ b/www/ecrire/lang/ecrire_oc_auv.php @@ -1,9 +1,11 @@ 'Tornatz a la pagina anteriora, e verificatz las informacions qu’avètz fornidas. ', 'avis_connexion_ldap_echec_3' => 'Alternativament, utilizetz pas lo supòrt LDAP per importar d’utilizaires.', 'avis_deplacement_rubrique' => 'Atention! Aquela rubrica conten @contient_breves@ brèvas@scb@: se la desplaçatz, voudretz be oschar aquela casa de confirmacion.', - 'avis_destinataire_obligatoire' => 'Devètz indicar un destinatari avans de mandar aquel messatge.', 'avis_erreur_connexion_mysql' => 'Error de connexion SQL', - 'avis_erreur_version_archive' => 'Atencion! Lo fichèir @archive@ correspond amb una autra version d’SPIP qu’aquela qu’avètz installada. Anatz vèrs de dificultats grandassas: risca de destruccion de vòstra basa de donadas, disfoncionaments divèrs dau sit, etc. Validetz pas aquela demanda d’importacion.

    Per mai d’informacions, vejatz - -la documentacion d’SPIP.', # MODIF - 'avis_espace_interdit' => 'Espaci proïbit

    SPIP es ja installat.', + 'avis_espace_interdit' => 'Espaci proïbit

    SPIP es ja installat.', # MODIF 'avis_lecture_noms_bases_1' => 'Lo programa d’installacion a pas pogut legir los noms de las basas de donadas installadas.', 'avis_lecture_noms_bases_2' => 'Siá gran de basa es pas disponibla, siá la foncion que permet de teirar las basas es estada desactivada per de rasons de seguretat (quo es lo cas chas mai que d’un auberjador).', 'avis_lecture_noms_bases_3' => 'Dins la segonda alternativa, z-es probable qu’una basa que pòrta vòstre nom de login siá utilizabla:', - 'avis_non_acces_message' => 'Podètz pas accedir vèrs aquel messatge.', 'avis_non_acces_page' => 'Podètz pas accedir vèrs aquela pagina.', 'avis_operation_echec' => 'L’operacion a patracat.', - 'avis_probleme_archive' => 'Problèma de lectura dau fichèir @archive@', 'avis_suppression_base' => 'ATENCION, suprimir las donadas z-es irreversible', - 'avis_version_mysql' => 'Vòstra version de SQL (@version_mysql@) permet pas l’autoreparacion de las taulas de la basa.', // B 'bouton_acces_ldap' => 'Apondre l’accès a LDAP >>', 'bouton_ajouter' => 'Apondre', - 'bouton_ajouter_participant' => 'APONDRE UN PARTICIPANT:', - 'bouton_annonce' => 'ANONCI', - 'bouton_checkbox_envoi_message' => 'possibilitat de mandar un messatge', - 'bouton_checkbox_indiquer_site' => 'indicar obligatoriament un sit web', - 'bouton_checkbox_signature_unique_email' => 'Mas una signatura per adreiça e-mail', - 'bouton_checkbox_signature_unique_site' => 'Mas una signatura per sit web', 'bouton_demande_publication' => 'Demandar la publicacion d’aqueste article', - 'bouton_effacer_index' => 'Esfaçar los indèx', 'bouton_effacer_tout' => 'Esfaçar tot', - 'bouton_envoi_message_02' => 'MANDAR UN MESSATGE', 'bouton_envoyer_message' => 'Messatge definitiu: mandar', 'bouton_modifier' => 'Modificar', - 'bouton_pense_bete' => 'MEMENTO (D’USATGE PERSONAU)', - 'bouton_radio_activer_messagerie' => 'Activar la messatjariá intèrna', - 'bouton_radio_activer_messagerie_interne' => 'Activar la messatjariá intèrna', - 'bouton_radio_activer_petition' => 'Activar la peticion', 'bouton_radio_afficher' => 'Afichar', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Afichar dins la tèira daus redactors connectats', - 'bouton_radio_desactiver_messagerie' => 'Desactivar la messatjariá', 'bouton_radio_envoi_annonces_adresse' => 'Mandar los anoncis a l’adreiça:', 'bouton_radio_envoi_liste_nouveautes' => 'Mandar la tèira de las novetats', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Pas aparéisser dins la tèira daus redactors', 'bouton_radio_non_envoi_annonces_editoriales' => 'Pas mandar d’anoncis editoriaus', - 'bouton_radio_pas_petition' => 'Gran de peticion', - 'bouton_radio_petition_activee' => 'Peticion activada', - 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', 'bouton_redirection' => 'TORNAR DIRIGIR', 'bouton_relancer_installation' => 'Tornar lançar l’installacion', 'bouton_suivant' => 'Seguent', 'bouton_tenter_recuperation' => 'Assajar de reparar', 'bouton_test_proxy' => 'Assajar lo proxy', 'bouton_vider_cache' => 'Voidar l’escondedor', - 'bouton_voir_message' => 'Veire aquel messatge avans de lo validar', // C - 'cache_mode_compresse' => 'Los fichèirs de l’escondedor son registrats en mòde comprimit.', - 'cache_mode_non_compresse' => 'Los fichèirs de l’escondedor son registrats en mòde non comprimit.', 'cache_modifiable_webmestre' => 'Lo webmèstre dau sit pòt modificar aquestes paramètres.', 'calendrier_synchro' => 'S’utilizatz un logiciau d’agenda compatible iCal, lo podètz sincronizar amb las informacions d’aqueste sit.', @@ -104,7 +80,6 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'entree_login' => 'Vòstre login', 'entree_login_connexion_1' => 'Lo login de connexion', 'entree_login_connexion_2' => '(Correspond de còps a vòstre login d’accès vèrs l’FTP; de còps se laissa voide)', - 'entree_login_ldap' => 'Login LDAP iniciau', 'entree_mot_passe' => 'Vòstre mot de santa Clara', 'entree_mot_passe_1' => 'Mot de santa Clara per la connexion', 'entree_mot_passe_2' => '(Correspond de còps a vòstre mot de santa Clara per l’FTP; de còps se laissa voide)', @@ -124,7 +99,7 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'ical_info2' => 'Per téner mai d’informacions sobre aquelas tecnicas, esitetz pas de consultar la documentacion d’SPIP.', # MODIF 'ical_info_calendrier' => 'I a dos chalendèirs a la vòstra disposicion. Lo primèir es un plan dau sit qu’anóncia totes los articles publicats. Lo segond conten los anoncis editoriaus en mai de vòstres darrèirs messatges privats: vos es reservat gràcias a una clau personala, que la podètz modificar en tot moment en renovant vòstre mot de santa Clara. ', 'ical_methode_http' => 'Telecharjament', - 'ical_methode_webcal' => 'Sincronizacion (webcal://)', + 'ical_methode_webcal' => 'Sincronizacion (webcal://)', # MODIF 'ical_texte_js' => 'Los articles publicats en aquel sit se pòdon afichar aisat, dins totes los sits vòstres, en far servir una linha javascript. ', 'ical_texte_prive' => 'Aquel chalendèir, d’usatge estrictament personau, vos informa de l’activitat editoriala privada d’aquel sit (òbras e rendètz-vos personaus, articles e brèvas prepausats...).', 'ical_texte_public' => 'Aquel chalendèir vos permet de seguir l’activitat publica d’aquel sit (articles e brèvas publicats).', @@ -140,9 +115,7 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'icone_creer_auteur' => 'Crear un autor nuòu e l’associar a aquel article', 'icone_creer_mot_cle' => 'Crear un mot clau nuòu e lo liar a aquel article', 'icone_creer_rubrique_2' => 'Crear una rubrica nuòva', - 'icone_envoyer_message' => 'Mandar aquel messatge', 'icone_modifier_article' => 'Modificar aquel article', - 'icone_modifier_message' => 'Modificar aquel messatge', 'icone_modifier_rubrique' => 'Modificar aquela rubrica', 'icone_retour' => 'Tornar', 'icone_retour_article' => 'Tornar a l’article', @@ -152,10 +125,7 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'icone_valider_signature' => 'Validar aquela signatura', 'image_administrer_rubrique' => 'Podètz administrar aquela rubrica', 'info_1_article' => '1 article', - 'info_1_site' => '1 sit', 'info_activer_cookie' => 'Podètz activar un cookie de correspondéncia; aquò vos permetrá de passar aisat dau sit public au sit privat.', - 'info_admin_gere_rubriques' => 'Aquel administrator gerís las rubricas seguentas:', - 'info_admin_gere_toutes_rubriques' => 'Aquel administrator gerís totas las rubricas.', # MODIF 'info_administrateur' => 'Administrator', 'info_administrateur_1' => 'Administrator', 'info_administrateur_2' => 'dau sit(d’utilizar amb precaucion)', @@ -165,13 +135,10 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_administrer_rubrique' => 'Podètz administrar aquela rubrica', 'info_adresse' => 'a l’adreiça:', 'info_adresse_url' => 'Adreiça (URL) dau sit public', - 'info_afficher_visites' => 'Afichar las vesitas per:', 'info_aide_en_ligne' => 'Ajuda en linha SPIP', 'info_ajout_image' => 'Quand apondètz d’imatges coma estachaments junts a un article, SPIP pòt crear automaticament per vos de vinhetas (miniaturas) daus imatges inserits. Aquò permet per exemple de crear automaticament una galariá o un pòrtfòlio.', - 'info_ajout_participant' => 'Lo participant seguent es apondut:', 'info_ajouter_rubrique' => 'Apondre una autra rubrica d’administrar:', 'info_annonce_nouveautes' => 'Anonci de las novetats', - 'info_anterieur' => 'anteriora', 'info_article' => 'article', 'info_article_2' => 'articles', 'info_article_a_paraitre' => 'Los articles pòstdatats per paréisser', @@ -179,10 +146,8 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_articles_2' => 'Articles', 'info_articles_auteur' => 'Los articles d’aquel autor', 'info_articles_trouves' => 'Articles trobats', - 'info_articles_trouves_dans_texte' => 'Articles trobats (dins lo tèxt)', 'info_attente_validation' => 'Vòstres articles en apèita de validacion', 'info_aujourdhui' => 'anuèit:', - 'info_auteur_message' => 'AUTOR DAU MESSATGE:', 'info_auteurs' => 'Los autors', 'info_auteurs_par_tri' => 'autors@partri@', 'info_auteurs_trouves' => 'Autors trobats', @@ -215,15 +180,12 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_date_publication_anterieure' => 'Data anteriora de publicacion:', 'info_date_referencement' => 'DATA DE REFERENCIAMENT D’AQUEL SIT:', 'info_derniere_etape' => 'Darrèira estapa: Quo es ’chabat!', - 'info_derniers_articles_publies' => 'Vòstres darrèirs articles publicats en linha', - 'info_desactiver_messagerie_personnelle' => 'Podètz activar o desactivar vòstra messatjariá personala sobre aquel sit.', 'info_descriptif' => 'Descriptiu:', 'info_discussion_cours' => 'Discussions en cors', 'info_ecrire_article' => 'Avans de poder escriure d’articles, vos chau crear per lo mens una rubrica.', 'info_email_envoi' => 'Adreiça e-mail d’enviament (opcionau)', 'info_email_envoi_txt' => 'Indicatz aicí l’adreiça d’utilizar per enviar los e-mails (a fauta d’aquò, s’utilizará l’adreiça destinatari coma adreiça d’enviament):', 'info_email_webmestre' => 'Adreiça e-mail dau responsable dau sit (opcionau)', # MODIF - 'info_entrer_code_alphabet' => 'Picatz lo còde de l’alfabet d’utilizar:', 'info_envoi_email_automatique' => 'Enviament d’e-mails automatics', 'info_envoyer_maintenant' => 'Mandar ara', 'info_etape_suivante' => 'Passar a l’estapa seguenta', @@ -233,27 +195,19 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_facilite_suivi_activite' => 'Per facilitar lo segut de l’activitat editoriala dau sit, SPIP vos pòt fornir per e-mail, per exemple a una lista de corrèir daus redactors, l’anonci de las demandas de publicacion e de las validacions d’articles.', 'info_fichiers_authent' => 'Fichèirs d’autentificacion « .htpasswd »', 'info_forums_abo_invites' => 'Vòstre sit web ofrís de forums per los abonats; dins lo sit public los vesitaires son convidats a se registrar.', - 'info_gauche_admin_effacer' => 'A aquela pagina, mas los responsables dau sit lai pòdon accedir.

    Permet de trobar las diferentas foncions de mantenença tecnica. Quauques unas implican un procès d’autentificacion especific, que necessita un accès FTP vèrs lo sit web.

    ', # MODIF 'info_gauche_admin_tech' => 'A aquela pagina, mas los responsables dau sit lai pòdon accedir.

    Permet de trobar las diferentas foncions de mantenença tecnica. Quauques unas implican un procès d’autentificacion especific, que necessita un accès FTP vèrs lo sit web.

    ', # MODIF 'info_gauche_admin_vider' => 'A aquela pagina, mas los responsables dau sit lai pòdon accedir.

    Permet de trobar las diferentas foncions de mantenença tecnica. Quauques unas implican un procès d’autentificacion especific, que necessita un accès FTP vèrs lo sit web.

    ', # MODIF 'info_gauche_auteurs' => 'Trobaretz aicí totes los autors dau sit. La color de las icònas n’indica l’estatut (administrator = verd; redactor = jaune).', 'info_gauche_auteurs_exterieurs' => 'Los autors exteriors, sens accès vèrs lo sit, son indicats amb una icòna blava; los autors esfaçats amb un bordilhèir.', # MODIF 'info_gauche_messagerie' => 'La messatjariá vos permet d’eschamjar de messatges entre redactors, de servar de mementos (per vòstre usatge personau) o d’afichar d’anoncis sus la pagina d’acuèlh de l’espaci privat (se sètz administrator/tritz).', - 'info_gauche_numero_auteur' => 'AUTOR NUMÈRO', 'info_gauche_statistiques_referers' => 'Aquela pagina presenta la lista daus referidors, quò vòu dire daus sits que contenon de liams que menan vèrs vòstre quite sit, mas unicament per ièr e anuèi lo jorn: aquela lista s’actualiza chasca 24 oras.', 'info_gauche_visiteurs_enregistres' => 'Trobaretz aquí los vesitaires registrats dins l’espaci public dau sit (forums amb abonament).', 'info_generation_miniatures_images' => 'Congreacion de miniaturas daus imatges', - 'info_gerer_trad' => 'Gerir los liams de revirada?', 'info_hebergeur_desactiver_envoi_email' => 'Quauques auberjadors desactivan l’enviament automatic d’e-mails dempuèi lors servidors. En aquel cas, las foncionalitats seguentas d’SPIP foncionarán pas.', 'info_hier' => 'ièr:', - 'info_historique_activer' => 'Activar lo seguiment de las revisions', - 'info_historique_affiche' => 'Afichar aquela version', - 'info_historique_comparaison' => 'comparason', - 'info_historique_desactiver' => 'Desactivar lo seguiment de las revisions', - 'info_historique_texte' => 'Lo seguiment de las revisions permet de servar un istoric de totas las modificacions que s’es portat au contengut d’un article, e d’afichar las diferéncias entre las versions successivas.', 'info_identification_publique' => 'Vòstra identitat publica...', 'info_image_process' => 'Volhatz seleccionar lo melhor metòde de fabricacion de las vinhetas en clicar sus l’imatge correspondent.', 'info_image_process2' => 'N.B. Se pas un d’imatge apareis, lendonc lo servidor qu’aubèrja vòstre sit l’an pas configurat per utilizar d’aisinas talas. Se desiratz d’utilizar aquelas foncions, contactatz lo responsable tecnic e demandatz las extensions «GD» o «Imagick».', # MODIF @@ -271,8 +225,6 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_login_trop_court' => 'Login tròp cort.', 'info_maximum' => 'maximum:', 'info_meme_rubrique' => 'Dins la mesma rubrica', - 'info_message' => 'Messatge dau', - 'info_message_efface' => 'MESSATGE ESFAÇAT', 'info_message_en_redaction' => 'Vòstres messatges en cors de redaccion', 'info_message_technique' => 'Messatge tecnic:', 'info_messagerie_interne' => 'Messatjariá intèrna', @@ -285,20 +237,15 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_modifier_rubrique' => 'Modificar la rubrica:', 'info_modifier_titre' => 'Modificar: @titre@', 'info_mon_site_spip' => 'Mon sit SPIP', - 'info_mot_sans_groupe' => '(Mots fòra grop...)', - 'info_moteur_recherche' => 'Cerchador integrat', 'info_moyenne' => 'mejana:', - 'info_multi_articles' => 'Activar lo menut de lenga per los articles?', 'info_multi_cet_article' => 'Lenga d’aqueste article:', 'info_multi_langues_choisies' => 'Volhatz seleccionar çai sos las lengas que son a posita daus redactors de vòstre sit. Las lengas ja emplejadas dins vòstre sit (afichadas primèiras) se pòdon pas desactivar.', - 'info_multi_rubriques' => 'Activar lo menut de lenga per las rubricas?', 'info_multi_secteurs' => '... mas per las rubricas a la raiç dau sit?', 'info_nom' => 'Nom', 'info_nom_destinataire' => 'Nom dau destinatari', 'info_nom_site' => 'Nom de vòstre sit', 'info_nombre_articles' => '@nb_articles@ articles,', - 'info_nombre_partcipants' => 'PARTICIPANTS A LA DISCUSSION:', 'info_nombre_rubriques' => '@nb_rubriques@ rubricas,', 'info_nombre_sites' => '@nb_sites@ sits,', 'info_non_deplacer' => 'De pas desplaçar...', @@ -308,36 +255,26 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_non_modifiable' => 'se pòt pas modificar', 'info_non_suppression_mot_cle' => 'vòle pas suprimir aquel mot clau.', 'info_notes' => 'Nòtas', - 'info_nouveaux_message' => 'Messatges nuòus', 'info_nouvel_article' => 'Article nuòu', 'info_nouvelle_traduction' => 'Revirada nuòva:', 'info_numero_article' => 'ARTICLE NUMÈRO:', 'info_obligatoire_02' => '[Obligatòri]', # MODIF 'info_option_accepter_visiteurs' => 'Acceptar l’inscripcion daus vesitaires dau sit public', - 'info_option_faire_suivre' => 'Far sègre los messatges daus forums aus autors daus articles', 'info_option_ne_pas_accepter_visiteurs' => 'Refusar l’inscripcion de vesitaires', 'info_options_avancees' => 'OPCIONS AVANÇADAS', - 'info_ortho_activer' => 'Activar lo verificador d’ortografia', - 'info_ortho_desactiver' => 'Desactivar lo verificador d’ortografia', 'info_ou' => 'o... ', 'info_page_interdite' => 'Pagina proïbida', 'info_par_nombre_article' => '(per nombre d’articles)', 'info_passe_trop_court' => 'Mot de santa Clara tròp cort.', 'info_passes_identiques' => 'Los dos mots de santa Clara son pas identics.', - 'info_pense_bete_ancien' => 'Vòstres mementos ancians ', # MODIF 'info_plus_cinq_car' => 'mai de 5 caractèrs', 'info_plus_cinq_car_2' => '(mai de 5 caractèrs)', 'info_plus_trois_car' => '(mai de 3 caractèrs)', 'info_popularite' => 'popularitat: @popularite@; vesitas: @visites@', - 'info_popularite_4' => 'popularitat: @popularite@; vesitas: @visites@', 'info_post_scriptum' => 'Post-scriptum', 'info_post_scriptum_2' => 'Post-scriptum:', 'info_pour' => 'per', - 'info_preview_admin' => 'Mas los administrators pòdon previsualizar lo sit', - 'info_preview_comite' => 'Totes los redactors pòdon previsualizar lo sit', - 'info_preview_desactive' => 'La previsualizacion z-es dau tot desactivada', - 'info_preview_texte' => 'Z-es possible de previsualizar lo sit coma s’avián publicat totes los articles e brèvas (que tenon aumens l’estatut "prepausat"). La chau dobrir, aquela possibilitat, aus administrators solament, a totes los redactors, o a pas degun?', - 'info_principaux_correspondants' => 'Vòstres correspondents principaus', + 'info_preview_texte' => 'Z-es possible de previsualizar lo sit coma s’avián publicat totes los articles e brèvas (que tenon aumens l’estatut "prepausat"). La chau dobrir, aquela possibilitat, aus administrators solament, a totes los redactors, o a pas degun?', # MODIF 'info_procedez_par_etape' => 'procedissètz estapa per estapa', 'info_procedure_maj_version' => 'Chau lançar la procedura d’actualizacion per adaptar la basa de donadas a la version novèla d’SPIP.', @@ -352,12 +289,9 @@ L’administrator dau sistèma o de la ret vos deu poder fornir que lor baila un còde d’accès vèrs lo sit privat. Quauques auberjadors autorizan pas l’enviament d’e-mails dempuèi lors servidors: en aquel cas, l’inscripcion automatica z-es impossibla.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Desiratz d’utilizar lo cerchador integrat a SPIP? (lo desactivar abriva lo foncionament dau sistèma.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Raiç dau sit', 'info_recharger_page' => 'Volhatz tornar charjar aquela pagina dins un momenton.', - 'info_recherche_auteur_a_affiner' => 'Tròp de resultats per "@cherche_auteur@"; volhatz afinar la cèrcha.', - 'info_recherche_auteur_ok' => 'Mai que d’un redactor trobat per "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Ges de resultat trobat per "@cherche_auteur@".', 'info_recommencer' => 'Volhatz tornar començar.', 'info_redacteur_1' => 'Redactor', @@ -374,7 +308,6 @@ Quauques auberjadors autorizan pas l’enviament d’e-mails dempuèi lors servi 'info_rubriques' => 'Rubricas', 'info_rubriques_02' => 'rubricas', 'info_rubriques_trouvees' => 'Rubricas trobadas', - 'info_rubriques_trouvees_dans_texte' => 'Rubricas trobadas (dins lo tèxt)', 'info_sans_titre' => 'Sens títol', 'info_selection_chemin_acces' => 'Seleccionatz çai sos lo chamin d’accès dins l’annuari:', 'info_signatures' => 'signaturas', @@ -387,11 +320,9 @@ Quauques auberjadors autorizan pas l’enviament d’e-mails dempuèi lors servi 'info_sites_lies_mot' => 'Los sits referenciats liats a aquel mot clau', 'info_sites_proxy' => 'Utilizar un proxy', 'info_sites_trouves' => 'Sits trobats', - 'info_sites_trouves_dans_texte' => 'Sits trobats (dins lo tèxt)', 'info_sous_titre' => 'Sostítol:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Estatut d’aquel autor:', # MODIF - 'info_statut_efface' => 'Esfaçat', 'info_statut_redacteur' => 'Redactor', 'info_statut_utilisateurs_1' => 'Estatut predefinit daus utilizaires importats', 'info_statut_utilisateurs_2' => 'Chausissètz l’estatut d’atribuir a las personas presentas dins l’annuari LDAP quand se connèctan per lo primèir còp. Poiretz puèi modificar aquel estatut per chasque autor un cas per un.', @@ -409,7 +340,6 @@ Quauques auberjadors autorizan pas l’enviament d’e-mails dempuèi lors servi 'info_tous_articles_en_redaction' => 'Totes los articles en cors de redaccion', 'info_tous_articles_presents' => 'Totes los articles publicats dins aquela rubrica', 'info_tous_les' => 'totes los:', - 'info_tous_redacteurs' => 'Anoncis per totes los redactors ', 'info_tout_site' => 'Tot lo sit ', 'info_tout_site2' => 'Z-an pas revirat l’article vèrs aquela lenga.', 'info_tout_site3' => 'Z-an revirat l’article vèrs aquela lenga, mas an portat puèi de modificacions a l’article de referéncia. Chau actualizar la revirada.', @@ -424,7 +354,6 @@ una color indica lor estat:', 'info_une_rubrique' => 'una rubrica, ', 'info_une_rubrique_02' => '1 rubrica', 'info_url' => 'URL:', - 'info_url_site' => 'URL DAU SIT:', 'info_urlref' => 'Liam ipertèxt:', 'info_utilisation_spip' => 'Ara podètz començar d’utilizar lo sistèma de publicacion assistida...', 'info_visites_par_mois' => 'Afichatge per mes:', @@ -441,15 +370,12 @@ una color indica lor estat:', 'item_activer_messages_avertissement' => 'Activar los messatges d’avertiment', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Afichar dins lo chalendèir', - 'item_autoriser_documents_joints' => 'Autorizar que se jonha de documents aus articles', - 'item_autoriser_documents_joints_rubriques' => 'Autorizar los documents dins las rubricas', 'item_choix_administrateurs' => 'los administrators', 'item_choix_generation_miniature' => 'Congrear automaticament las miniaturas daus imatges.', 'item_choix_non_generation_miniature' => 'Pas congrear de miniaturas daus imatges.', 'item_choix_redacteurs' => 'los redactors', 'item_choix_visiteurs' => 'los vesitaires dau sit public', 'item_creer_fichiers_authent' => 'Crear de fichèirs .htpasswd', - 'item_limiter_recherche' => 'Limitar la cèrcha a las informacions contengudas dins vòstre sit', 'item_login' => 'Login', 'item_mots_cles_association_articles' => 'aus articles', 'item_mots_cles_association_rubriques' => 'a las rubricas', @@ -458,34 +384,24 @@ una color indica lor estat:', 'item_non_accepter_inscriptions' => 'Pas acceptar las inscripcions', 'item_non_activer_messages_avertissement' => 'Gran de messatge d’avertiment', 'item_non_afficher_calendrier' => 'De pas afichar dins lo chalendèir', - 'item_non_autoriser_documents_joints' => 'Pas autorizar los documents dins los articles', - 'item_non_autoriser_documents_joints_rubriques' => 'Pas autorizar los documents dins las rubricas', 'item_non_creer_fichiers_authent' => 'Pas crear aqueles fichèirs', - 'item_non_gerer_statistiques' => 'Pas gerir las estadisticas', - 'item_non_limiter_recherche' => 'Eslarjar la cèrcha au contengut daus sits referenciats', 'item_non_publier_articles' => 'Pas publicar los articles avans la data de publicacion prevista.', - 'item_non_utiliser_moteur_recherche' => 'Pas utilizar lo motor', 'item_nouvel_auteur' => 'Autor nuòu', 'item_nouvelle_rubrique' => 'Rubrica nuòva', 'item_oui' => 'Òc be', 'item_publier_articles' => 'Publicar los articles, quina que siá lor data de publicacion', 'item_reponse_article' => 'Responsa a l’article', - 'item_utiliser_moteur_recherche' => 'Utilizar lo cerchador', 'item_visiteur' => 'vesitaire', // J 'jour_non_connu_nc' => 'n.c.', // L - 'lien_ajout_destinataire' => 'Apondre aquel destinatari', 'lien_ajouter_auteur' => 'Apondre aquel autor', - 'lien_ajouter_participant' => 'Apondre un participant', 'lien_email' => 'e-mail', 'lien_nom_site' => 'NOM DAU SIT:', 'lien_retirer_auteur' => 'Tirar l’autor', - 'lien_retrait_particpant' => 'Tirar aquel participant', 'lien_site' => 'sit', - 'lien_supprimer_rubrique' => 'suprimir aquela rubrica', 'lien_tout_deplier' => 'Desplejar tot', 'lien_tout_replier' => 'Tornar plejar', 'lien_trier_nom' => 'Triar per nom', @@ -511,6 +427,9 @@ una color indica lor estat:', // O 'onglet_repartition_actuelle' => 'per lo temps que vai', + // R + 'required' => '[Obligatòri]', # MODIF + // S 'statut_admin_restreint' => '(admin. restrent)', # MODIF @@ -533,14 +452,10 @@ una color indica lor estat:', 'texte_article_virtuel_reference' => 'Article virtuau: article referenciat dins vòstre sit SPIP, mas redirigit vèrs una autra URL. Per suprimir la redireccion, esfaçatz l’URL çai sobre.', 'texte_aucun_resultat_auteur' => 'Gran de resultat per "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Aqueste sit vos pòt indicar de contunh la lista daus redactors connectats, çò que vos permet d’eschamjar de messatges en dirècte. Podètz decidir de pas aparéisser dins aquela lista (sètz "invisible/a" per los autres utilizaires).', - 'texte_auteur_messagerie_1' => 'Aquel sit permet d’eschamjar de messatges e de constituir de forums de discussion privats entre los participants dau sit. Podètz decidir de pas participar a aqueles eschamges.', 'texte_auteurs' => 'LOS AUTORS', 'texte_choix_base_1' => 'Chausissètz vòstra basa:', 'texte_choix_base_2' => 'Lo servidor SQL conten mai que d’una basa de donadas.', 'texte_choix_base_3' => 'Chausissètz çai sos aquela que vòstre auberjador vos a atribuida:', - 'texte_commande_vider_tables_indexation' => 'Utilizatz aquela comanda per voidar las taulas d’indexacion utilizadas per lo cerchador integrat a SPIP. Aquò permetrá - de ganhar d’espaci disc.', - 'texte_compresse_ou_non' => '(Aqueste se pòt comprimir o non)', 'texte_compte_element' => '@count@ element', 'texte_compte_elements' => '@count@ elements', 'texte_connexion_mysql' => 'Consultatz las informacions que vòstre auberjador fornís: lai devètz trobar, se vòstre auberjador supòrta SQL, los còdes de connexion au servidor SQL.', # MODIF @@ -556,10 +471,8 @@ una color indica lor estat:', 'texte_date_publication_anterieure' => 'DATA DE PUBLICACION ANTERIORA :', 'texte_date_publication_anterieure_nonaffichee' => 'Afichar ges de data de publicacion anteriora.', 'texte_date_publication_article' => 'DATA DE PUBLICACION EN LINHA :', - 'texte_descriptif_petition' => 'Descriptiu de la peticion', 'texte_descriptif_rapide' => 'Descriptiu rapid', 'texte_effacer_base' => 'Esfaçar la basa de donadas SPIP', - 'texte_effacer_donnees_indexation' => 'Esfaçar las donadas d’indexacion', 'texte_en_cours_validation' => 'Se prepausa de publicar los articles e brèvas çai sos. Esitetz pas per donar vòstre vejaire gràcias aus forums que lai son estachats.', # MODIF 'texte_enrichir_mise_a_jour' => 'Podètz enrichir la compaginacion de vòstre tèxt en utilizar de "’corchas tipograficas".', 'texte_fichier_authent' => 'Deu crear, SPIP, de fichèirs especiaus .htpasswd @@ -579,29 +492,16 @@ una color indica lor estat:', un jòc de caractèrs apropriat. ’Ma que siá vos conselham de far d’assais per fin de trobar una solucion satisfasenta. Se modificatz aquel paramètre, oblidetz pas nimai d’adaptar lo sit public en consequéncia (balisa #CHARSET).', - 'texte_jeu_caractere_2' => 'Aqueste reglatge a gran d’efèit retroactiu. Adoncas - los tèxts ja sasits se pòdon afichar - d’una manèira incorrècta après que s’aja modificat lo reglatge. Siá que siá - poiretz tornar sens damatge au reglatge precedent.', - 'texte_lien_hypertexte' => '(Se vòstre messatge se referís a un article publicat sus lo web, o a una pagina fornissent mai d’informacions, volhatz indicar çai sos lo títol de la pagina e son adreiça URL.)', 'texte_login_ldap_1' => '(Laissar voide per un accès anonim, o picar lo chamin complet, per exemple «uid=fabre, ou=usancèirs, dc=mon-domeni, dc=com».)', 'texte_login_precaution' => 'Atencion! Quo es lo login amb lo quau sètz ara connectat/ada. Utilizatz aqueste formulari amb precaucion...', - 'texte_message_edit' => 'Atencion: aqueste messatge, chasque redactor lo pòt veire, e chasque administrator dau sit lo pòt modificar. Utilizatz los anoncis mas per expausar d’eveniments importants de la vida dau sit.', 'texte_mise_a_niveau_base_1' => 'Venètz d’actualizar los fichèirs SPIP. Ara chau metre a nivèl la basa de donadas dau sit.', 'texte_modifier_article' => 'Modificar l’article:', - 'texte_moteur_recherche_active' => 'Lo cerchador es activat. Utilizatz aquesta commanda - se volètz tornar indexar la basa rapidament (après restauracion - d’una sauvagarda per exemple). Notatz que los documents modificats de - manèira normala (a partir de l’interfàcia SPIP) se tornan indexar - automaticament: donc aquesta comanda es utila solament de manèira excepcionala.', - 'texte_moteur_recherche_non_active' => 'Lo cerchador es pas activat.', 'texte_multilinguisme' => 'Se desiratz de gerir d’articles en mai que d’una lenga, amb una navigacion complèxa, podètz apondre un menut per chausir la lenga daus articles e/o de las rubricas, en foncion de l’organizacion de vòstre sit.', # MODIF 'texte_multilinguisme_trad' => 'Podètz maitot activar un sistèma de gestion daus liams entre las diferentas reviradas d’un article.', # MODIF 'texte_non_compresse' => 'non comprimit (pr’amor que vòstre servidor supòrta pas aquela foncionalitat)', - 'texte_nouveau_message' => 'Messatge nuòu', 'texte_nouvelle_version_spip_1' => 'Avètz installada una version novèla d’SPIP.', 'texte_nouvelle_version_spip_2' => 'Aquesta version novèla demanda una actualizacion mai completa que de costuma. Se sètz webmèstre/webmèstra dau sit, volhatz esfaçar lo fichèir inc_connect.php3 dau repertòri ecrire e tornar prene l’installacion a fin d’actualizar vòstres paramètres de connexion a la basa de donadas.

    (NB: s’avètz eissubliat vòstres paramètres de connexion, agaitatz lo fichèir inc_connect.php3 avans de lo suprimir...)

    ', # MODIF 'texte_operation_echec' => 'Tornatz a la pagina precedenta, chausissètz una autra basa o creatz-ne’n una novèla. Verificatz las informacions que vòstre auberjador a fornidas.', @@ -620,7 +520,6 @@ una color indica lor estat:', 'texte_rappel_selection_champs' => '[Oblidetz pas de seleccionar aquel champ corrèctament.]', 'texte_recalcul_page' => 'Se volètz tornar calcular mas una pagina, passatz puslèu per l’espaci public e utilizatz lo boton "tornar calcular".', - 'texte_recapitiule_liste_documents' => 'Aquesta pagina recapitula la tèira daus documents qu’avètz plaçats dins las rubricas. Per modificar las informacions de chasque document, seguètz lo liam vèrs la pagina de sa rubrica.', 'texte_recuperer_base' => 'Reparar la basa de donadas', 'texte_reference_mais_redirige' => 'article referenciat dins vòstre sit SPIP, mas redirigit vèrs una autra URL.', 'texte_requetes_echouent' => 'Quand quauques requistas SQL patracan @@ -648,7 +547,6 @@ dins l’escondedor SPIP. Aquò permet per exemple de forçar un calcul nuòu de s’avètz bravament modificat lo grafisme o l’estructura dau sit.', 'texte_sur_titre' => 'Sobretítol', 'texte_table_ok' => ': aquesta taula z-es condreita.', - 'texte_tables_indexation_vides' => 'Las taulas d’indexacion dau motor son voidas.', 'texte_tentative_recuperation' => 'Assai de reparacion', 'texte_tenter_reparation' => 'Assajar de reparar la basa de donadas', 'texte_test_proxy' => 'Per assajar aquel proxy, indicatz aicí l’adreiça d’un sit web @@ -663,26 +561,8 @@ s’avètz bravament modificat lo grafisme o l’estructura dau sit.', Aquela opcion z-es desactivada de manèira predefinida a fin d’evitar d’afichar de messatges d’avertiment intempestius.', - 'texte_trop_resultats_auteurs' => 'Tròp de resultats per "@cherche_auteur@" ; volhatz afinar la cèrcha.', - 'texte_unpack' => 'telecharjament de la darrèira version', - 'texte_utilisation_moteur_syndiques' => 'Quand utilizatz lo cerchador integrat - a SPIP, podètz far las cèrchas sus los sits e - articles sindicats de doas manèiras - diferentas.
    Lo mai - simple consistís a cerchar solament dins los - títols e descriptius daus articles.
    - La segonda manèira, plan mai potenta, permet - a SPIP de cerchar maitot dins lo tèxt daus - sits referenciats. - Se referenciatz un sit, aladonc SPIP fará la - cèrcha dins lo tèxt dau quite sit.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Aquel metòde obliga SPIP de vesitar - regularament los sits referenciats, - aquò pòt alentir un pauc vòstre quite - sit.', 'texte_vide' => 'voide', 'texte_vider_cache' => 'Voidar l’escondedor', - 'titre_admin_effacer' => 'Mantenença tecnica', 'titre_admin_tech' => 'Mantenença tecnica', 'titre_admin_vider' => 'Mantenença tecnica', 'titre_cadre_afficher_article' => 'Afichar los articles', @@ -702,35 +582,20 @@ s’avètz bravament modificat lo grafisme o l’estructura dau sit.', 'titre_naviguer_dans_le_site' => 'Navigar per lo sit...', 'titre_nouvelle_rubrique' => 'Rubrica novèla', 'titre_numero_rubrique' => 'RUBRICA NUMÈRO:', - 'titre_page_admin_effacer' => 'Mantenença tecnica: esfaçar la basa', 'titre_page_articles_edit' => 'Modificar: @titre@', 'titre_page_articles_page' => 'Los articles', 'titre_page_articles_tous' => 'Tot lo sit', - 'titre_page_auteurs' => 'Vesitaires', 'titre_page_calendrier' => 'Chalendèir @nom_mois@ de @annee@', 'titre_page_config_contenu' => 'Configuracion dau sit', - 'titre_page_config_fonctions' => 'Configuracion dau sit', - 'titre_page_configuration' => 'Configuracion dau sit', - 'titre_page_controle_petition' => 'Segut de las peticions', 'titre_page_delete_all' => 'supression totala e irreversibla', - 'titre_page_documents_liste' => 'Los documents de las rubricas', - 'titre_page_index' => 'Vòstre espaci privat', - 'titre_page_message_edit' => 'Redigir un messatge', - 'titre_page_messagerie' => 'Vòstra messatjariá', 'titre_page_recherche' => 'Resultats de la cèrcha @recherche@', 'titre_page_statistiques_referers' => 'Estadisticas (liams entrants)', 'titre_page_upgrade' => 'Mesa a nivèl d’SPIP', 'titre_publication_articles_post_dates' => 'Publicacion daus articles pòstdatats', - 'titre_referencer_site' => 'Referenciar lo sit:', - 'titre_rendez_vous' => 'RENDÈTZ-VOS:', 'titre_reparation' => 'Reparacion', 'titre_suivi_petition' => 'Segut de las peticions', - 'trad_article_inexistant' => 'I a gran d’article que pòrte aquel numèro.', 'trad_article_traduction' => 'Totas las versions d’aquel article:', - 'trad_deja_traduit' => 'Aquel article ja z-es una revirada de l’article present.', 'trad_delier' => 'Pas mai liar aqueste article a sas reviradas ', # MODIF 'trad_lier' => 'Aqueste article es una revirada de l’article numèro:', 'trad_new' => 'Escriure una revirada novèla d’aqueste article' # MODIF ); - -?> diff --git a/www/ecrire/lang/ecrire_oc_gsc.php b/www/ecrire/lang/ecrire_oc_gsc.php index 88a94100..c1e6d4f8 100644 --- a/www/ecrire/lang/ecrire_oc_gsc.php +++ b/www/ecrire/lang/ecrire_oc_gsc.php @@ -1,9 +1,11 @@ 'Tornatz a la pagina anteriora, e verificatz las informacions qui avetz hornidas. ', 'avis_connexion_ldap_echec_3' => 'Alternativament, n’utilizetz pas lo supòrt LDAP tà importar utilizaires.', 'avis_deplacement_rubrique' => 'Atention! Aquera rubrica que contien @contient_breves@ brèvas@scb@: se la desplaçatz, que voleretz plan oscar aquera casa de confirmacion.', - 'avis_destinataire_obligatoire' => 'Que devetz indicar un destinatari abans d’enviar aqueth messatge.', 'avis_erreur_connexion_mysql' => 'Error de connexion SQL', - 'avis_erreur_version_archive' => 'Atencion! Lo fichièr @archive@ que correspond a ua auta version d’SPIP que la qu’avetz installada. Qu’anatz de cap tà dificultats de la bèras: risc de destruccion de la vòsta basa de dadas, disfoncionaments divèrs deu sit, etc. Non validetz pas aquera demanda d’importacion.

    Entà mei informacions, vejatz - -la documentacion d’SPIP.', # MODIF - 'avis_espace_interdit' => 'Espaci proïbit

    SPIP qu’ei ja installat.', + 'avis_espace_interdit' => 'Espaci proïbit

    SPIP qu’ei ja installat.', # MODIF 'avis_lecture_noms_bases_1' => 'Lo programa d’installacion n’a pas poscut legir los noms de las basas de dadas installadas.', 'avis_lecture_noms_bases_2' => 'Sia nada basa n’ei pas disponibla, sia la foncion qui permet de listar las basas ei estada desactivada per rasons de seguretat (aquò qu’ei lo cas en çò de mei d’un aubergader).', 'avis_lecture_noms_bases_3' => 'Dens la dusau alternativa, qu’ei probable qu’ua basa qui pòrta lo vòste nom de login e sia utilizabla:', - 'avis_non_acces_message' => 'Non podetz pas accedir a aqueth messatge.', 'avis_non_acces_page' => 'Non podetz pas accedir a aquera pagina.', 'avis_operation_echec' => 'L’operacion que s’i ei mauescaduda.', - 'avis_probleme_archive' => 'Problèma de lectura deu fichièr @archive@', 'avis_suppression_base' => 'ATENCION, suprimir las dadas qu’ei irreversible', - 'avis_version_mysql' => 'La vòsta version de SQL (@version_mysql@) non permet pas l’autoreparacion de las taulas de la basa.', // B 'bouton_acces_ldap' => 'Ajustar l’accès a LDAP >>', 'bouton_ajouter' => 'Ajustar', - 'bouton_ajouter_participant' => 'AJUSTAR UN PARTICIPANT:', - 'bouton_annonce' => 'ANONCI', - 'bouton_checkbox_envoi_message' => 'possibilitat de mandar un messatge', - 'bouton_checkbox_indiquer_site' => 'indicar obligatòriament un sit web', - 'bouton_checkbox_signature_unique_email' => 'sonque ua signatura per adreiça e-mail', - 'bouton_checkbox_signature_unique_site' => 'sonque ua signatura per sit web', 'bouton_demande_publication' => 'Demandar la publicacion d’aqueste article', - 'bouton_effacer_index' => 'Esfaçar los indèx', 'bouton_effacer_tout' => 'Esfaçar-ac tot', - 'bouton_envoi_message_02' => 'MANDAR UN MESSATGE', 'bouton_envoyer_message' => 'Messatge definitiu: mandar', 'bouton_modifier' => 'Modificar', - 'bouton_pense_bete' => 'MEMENTO (D’USATGE PERSONAU)', - 'bouton_radio_activer_messagerie' => 'Activar la messatjaria intèrna', - 'bouton_radio_activer_messagerie_interne' => 'Activar la messatjaria intèrna', - 'bouton_radio_activer_petition' => 'Activar la peticion', 'bouton_radio_afficher' => 'Afichar', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Afichar dens la tèra deus redactors connectats', - 'bouton_radio_desactiver_messagerie' => 'Desactivar la messatjaria', 'bouton_radio_envoi_annonces_adresse' => 'Mandar los anoncis a l’adreiça:', 'bouton_radio_envoi_liste_nouveautes' => 'Mandar la tèra de las nautats', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'N’aparéisher pas dens la tèra deus redactors', 'bouton_radio_non_envoi_annonces_editoriales' => 'Non mandar pas nat anonci editoriau', - 'bouton_radio_pas_petition' => 'Nada peticion', - 'bouton_radio_petition_activee' => 'Peticion activada', - 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', 'bouton_redirection' => 'TORNAR DIRIGIR', 'bouton_relancer_installation' => 'Tornar lançar l’installacion', 'bouton_suivant' => 'Seguent', 'bouton_tenter_recuperation' => 'Ensajar de reparar', 'bouton_test_proxy' => 'Ensajar lo proxy', 'bouton_vider_cache' => 'Vueidar l’esconeder', - 'bouton_voir_message' => 'Véder aqueth messatge abans de’u validar', // C - 'cache_mode_compresse' => 'Los fichièrs de l’esconeder que son registrats en mòde comprimit.', - 'cache_mode_non_compresse' => 'Los fichièrs de l’esconeder que son registrats en mòde non comprimit.', 'cache_modifiable_webmestre' => 'Lo webmèstre deu sit que pòt modificar aquestes paramètres.', 'calendrier_synchro' => 'S’utilizatz un logiciau d’agenda compatible iCal (Apple iCal, Mozilla Calendar, Ximian Evolution, KOrganizer...), que’u podetz sincronizar dab l’actualitat deu sit.', @@ -104,7 +80,6 @@ L’administrator deu sistèma o de l’arret que’vs deu poder hornir 'entree_login' => 'Lo vòste login', 'entree_login_connexion_1' => 'Lo login de connexion', 'entree_login_connexion_2' => '(Que correspond a còps au vòste login d’accès a l’FTP; a còps qu’es dèisha vueid)', - 'entree_login_ldap' => 'Login LDAP iniciau', 'entree_mot_passe' => 'Lo vòste mot de santa Clara', 'entree_mot_passe_1' => 'Mot de santa Clara tà la connexion', 'entree_mot_passe_2' => '(Que correspond a còps au vòste mot de santa Clara tà l’FTP; a còps que’s dèisha vueid)', @@ -124,7 +99,7 @@ L’administrator deu sistèma o de l’arret que’vs deu poder hornir 'ical_info2' => 'Tà tiéner mei informacions suber aqueras tecnicas, n’esitetz pas de consultar la documentacion d’SPIP.', # MODIF 'ical_info_calendrier' => 'Que i a dus calendèrs a la vòsta disposicion. Lo permèr qu’ei un plan deu sit qui anóncia tots los articles publicats. Lo segond que contien los anoncis editoriaus en mei deus vòstes darrèrs messatges privats: que vs’ei reservat gràcias a ua clau personau, qui podetz modificar en tot moment en renovant lo vòste mot de santa Clara. ', 'ical_methode_http' => 'Telecargament', - 'ical_methode_webcal' => 'Sincronizacion (webcal://)', + 'ical_methode_webcal' => 'Sincronizacion (webcal://)', # MODIF 'ical_texte_js' => 'Los articles publicats en aqueth sit que’s pòden afichar aisit, dens tots los sits vòstes, en har servir ua linha javascript. ', 'ical_texte_prive' => 'Aqueth calendèr, d’us estrictament personau, que vs’informa de l’activitat editoriau privada d’aqueth sit (òbras e rendetz-vos personaus, articles e brèvas prepausats...).', 'ical_texte_public' => 'Aqueth calendèr que’vs permet de seguir l’activitat publica d’aqueth sit (articles e brèvas publicats).', @@ -140,9 +115,7 @@ L’administrator deu sistèma o de l’arret que’vs deu poder hornir 'icone_creer_auteur' => 'Crear un autor nau e associà’u a aqueth article', 'icone_creer_mot_cle' => 'Crear un mot clau nau e ligà’u a aqueth article', 'icone_creer_rubrique_2' => 'Crear ua rubrica nava', - 'icone_envoyer_message' => 'Mandar aqueth messatge', 'icone_modifier_article' => 'Modificar aqueth article', - 'icone_modifier_message' => 'Modificar aqueth messatge', 'icone_modifier_rubrique' => 'Modificar aquera rubrica', 'icone_retour' => 'Tornar', 'icone_retour_article' => 'Tornar a l’article', @@ -152,10 +125,7 @@ L’administrator deu sistèma o de l’arret que’vs deu poder hornir 'icone_valider_signature' => 'Validar aquera signatura', 'image_administrer_rubrique' => 'Que podetz administrar aquera rubrica', 'info_1_article' => '1 article', - 'info_1_site' => '1 sit', 'info_activer_cookie' => 'Que podetz activar un cookie de correspondéncia; aquò que’vs permeterà de passar aisit deu sit public au sit privat.', - 'info_admin_gere_rubriques' => 'Aqueth administrator que gereish las rubricas seguentas:', - 'info_admin_gere_toutes_rubriques' => 'Aqueth administrator que gereish totas las rubricas.', # MODIF 'info_administrateur' => 'Administrator', 'info_administrateur_1' => 'Administrator', 'info_administrateur_2' => 'deu sit(d’utilizar dab precaucion)', @@ -165,13 +135,10 @@ L’administrator deu sistèma o de l’arret que’vs deu poder hornir 'info_administrer_rubrique' => 'Que podetz administrar aquera rubrica', 'info_adresse' => 'a l’adreiça:', 'info_adresse_url' => 'Adreiça (URL) deu sit public', - 'info_afficher_visites' => 'Afichar las vesitas per:', 'info_aide_en_ligne' => 'Ajuda en linha SPIP', 'info_ajout_image' => 'Quan ajustatz imatges com estacaments juntats a un article, SPIP que pòt crear automaticament entà vos vinhetas (miniaturas) deus imatges inserits. Aquò que permet per exemple de crear automaticament ua galaria o un pòrtfòlio.', - 'info_ajout_participant' => 'Lo participant seguent qu’ei ajustat:', 'info_ajouter_rubrique' => 'Ajustar ua auta rubrica d’administrar:', 'info_annonce_nouveautes' => 'Anonci de las nautats', - 'info_anterieur' => 'anteriora', 'info_article' => 'article', 'info_article_2' => 'articles', 'info_article_a_paraitre' => 'Los articles pòstdatats per paréisher', @@ -179,10 +146,8 @@ L’administrator deu sistèma o de l’arret que’vs deu poder hornir 'info_articles_2' => 'Articles', 'info_articles_auteur' => 'Los articles d’aqueth autor', 'info_articles_trouves' => 'Articles trobats', - 'info_articles_trouves_dans_texte' => 'Articles trobats (dens lo tèxt)', 'info_attente_validation' => 'Los vòstes articles en espèra de validacion', 'info_aujourdhui' => 'uei:', - 'info_auteur_message' => 'AUTOR DEU MESSATGE:', 'info_auteurs' => 'Los autors', 'info_auteurs_par_tri' => 'autors@partri@', 'info_auteurs_trouves' => 'Autors trobats', @@ -215,15 +180,12 @@ L’administrator deu sistèma o de l’arret que’vs deu poder hornir 'info_date_publication_anterieure' => 'Data anteriora de publicacion:', 'info_date_referencement' => 'DATA DE REFERÉNCIAMENT D’AQUETH SIT:', 'info_derniere_etape' => 'Darrèra estapa: Qu’ei acabat!', - 'info_derniers_articles_publies' => 'Los vòstes darrèrs articles publicats en linha', - 'info_desactiver_messagerie_personnelle' => 'Que podetz activar o desactivar la vòsta messatjaria personau sus aqueth sit.', 'info_descriptif' => 'Descriptiu:', 'info_discussion_cours' => 'Discussions en cors', 'info_ecrire_article' => 'Abans de poder escríver articles, que’vs cau crear aumensh ua rubrica.', 'info_email_envoi' => 'Adreiça e-mail de mandadís (opcionau)', 'info_email_envoi_txt' => 'Indicatz ací l’adreiça d’utilizar tà enviar los e-mails (a fauta d’aquò, que s’utilizarà l’adreiça destinatari com adreiça de mandadís):', 'info_email_webmestre' => 'Adreiça e-mail deu responsable deu sit (opcionau)', # MODIF - 'info_entrer_code_alphabet' => 'Picatz lo còde de l’alfabet d’utilizar:', 'info_envoi_email_automatique' => 'Mandadís d’e-mails automatics', 'info_envoyer_maintenant' => 'Mandar ara', 'info_etape_suivante' => 'Passar a l’estapa seguenta', @@ -233,27 +195,19 @@ L’administrator deu sistèma o de l’arret que’vs deu poder hornir 'info_facilite_suivi_activite' => 'Tà facilitar lo seguit de l’activitat editoriau deu sit, SPIP que’vs pòt hornir per e-mail, per exemple a ua lista de corrièr deus redactors, l’anonci de las demandas de publicacion e de las validacions d’articles.', 'info_fichiers_authent' => 'Fichièrs d’autentificacion « .htpasswd »', 'info_forums_abo_invites' => 'Lo vòste sit web que horneish forums entaus abonats; dens lo sit public los vesitaires que son convidats a registrà’s.', - 'info_gauche_admin_effacer' => 'A aquera pagina, sonque los responsables deu sit qu’i pòden accedir.

    Que permet de trobar las diferentas foncions de mantienença tecnica. Daubuas qu’implican un procès d’autentificacion especific que necessita un accès FTP au sit web.', # MODIF 'info_gauche_admin_tech' => 'A aquera pagina, sonque los responsables deu sit qu’i pòden accedir.

    Que permet de trobar las diferentas foncions de mantienença tecnica. Daubuas qu’implican un procès d’autentificacion especific que necessita un accès FTP au sit web.', # MODIF 'info_gauche_admin_vider' => 'A aquera pagina, sonque los responsables deu sit qu’i pòden accedir.

    Que permet de trobar las diferentas foncions de mantienença tecnica. Daubuas qu’implican un procès d’autentificacion especific que necessita un accès FTP au sit web.', # MODIF 'info_gauche_auteurs' => 'Que trobaratz ací tots los autors deu sit. La color de las icònas que n’indica l’estatut (administrator = verd; redactor = jaune).', 'info_gauche_auteurs_exterieurs' => 'Los autors exteriors, shens accès au sit, que son indicats per ua icòna blava; los autors esfaçats per ua caisha de las dèishas.', # MODIF 'info_gauche_messagerie' => 'La messatjaria que’vs permet d’escambiar messatges entre redactors, de servar mementos (tau vòste usatge personau) o d’afichar anoncis sus la pagina d’arcuelh de l’espaci privat (s’ètz administrator/tritz).', - 'info_gauche_numero_auteur' => 'AUTOR NUMÈRO', 'info_gauche_statistiques_referers' => 'Aquera pagina que presenta la lista deus referiders, qu’ei a díser deus sits qui contienen ligams miant de cap tau vòste quite sit, mes unicament ièr e uei: aquera lista que s’actualiza cada 24 òras.', 'info_gauche_visiteurs_enregistres' => 'Que trobaratz aquí los vesitaires registrats dens l’espaci public deu sit (forums dab abonament).', 'info_generation_miniatures_images' => 'Congreacion de miniaturas deus imatges', - 'info_gerer_trad' => 'Gerir los ligams d’arrevirada?', 'info_hebergeur_desactiver_envoi_email' => 'Daubuns aubergaders que desactivan lo mandadís automatic d’e-mails dempuish los lors serviders. En aqueth cas, las foncionalitats seguentas d’SPIP non foncionaràn pas.', 'info_hier' => 'gèr:', - 'info_historique_activer' => 'Activar lo seguiment de las revisions', - 'info_historique_affiche' => 'Afichar aquera version', - 'info_historique_comparaison' => 'comparason', - 'info_historique_desactiver' => 'Desactivar lo seguiment de las revisions', - 'info_historique_texte' => 'Lo seguiment de las revisions que permet de servar un istoric de totas las modificacions que s’ei portat au contengut d’un article, e d’afichar las diferéncias entre las versions successivas.', 'info_identification_publique' => 'La vòsta identitat publica...', 'info_image_process' => 'Volhatz seleccionar lo melhor metòde de fabricacion de las vinhetas en clicar sus l’imatge correspondent.', 'info_image_process2' => 'N.B. Se nat imatge n’apareish pas, alavetz lo servider qu’aubèrga lo vòste sit non l’an pas configurat entà utilizar aisinas taus. Se desiratz d’utilizar aqueras foncions, contactatz lo responsable tecnic e demandatz las extensions «GD» o «Imagick».', # MODIF @@ -271,8 +225,6 @@ L’administrator deu sistèma o de l’arret que’vs deu poder hornir 'info_login_trop_court' => 'Login tròp cort.', 'info_maximum' => 'maximum:', 'info_meme_rubrique' => 'Dens la medisha rubrica', - 'info_message' => 'Messatge deu', - 'info_message_efface' => 'MESSATGE ESFAÇAT', 'info_message_en_redaction' => 'Los vòstes messatges en cors de redaccion', 'info_message_technique' => 'Messatge tecnic:', 'info_messagerie_interne' => 'Messatjaria intèrna', @@ -285,20 +237,15 @@ L’administrator deu sistèma o de l’arret que’vs deu poder hornir 'info_modifier_rubrique' => 'Modificar la rubrica:', 'info_modifier_titre' => 'Modificar: @titre@', 'info_mon_site_spip' => 'Lo men sit SPIP', - 'info_mot_sans_groupe' => '(Mots hòra grop...)', - 'info_moteur_recherche' => 'Cercader integrat', 'info_moyenne' => 'mejana:', - 'info_multi_articles' => 'Activar lo menut de lenga taus articles?', 'info_multi_cet_article' => 'Lenga d’aqueste article:', 'info_multi_langues_choisies' => 'Volhatz seleccionar ça devath las lengas qui son a posita deus redactors deu vòste sit. Las lengas ja emplegadas dens lo vòste sit (afichadas en permèras) ne’s pòden pas desactivar.', - 'info_multi_rubriques' => 'Activar lo menut de lenga per las rubricas?', 'info_multi_secteurs' => '... sonque tà las rubricas a l’arradit deu sit?', 'info_nom' => 'Nom', 'info_nom_destinataire' => 'Nom deu destinatari', 'info_nom_site' => 'Nom deu vòste sit', 'info_nombre_articles' => '@nb_articles@ articles,', - 'info_nombre_partcipants' => 'PARTICIPANTS A LA DISCUSSION:', 'info_nombre_rubriques' => '@nb_rubriques@ rubricas,', 'info_nombre_sites' => '@nb_sites@ sits,', 'info_non_deplacer' => 'De non desplaçar pas...', @@ -308,36 +255,26 @@ L’administrator deu sistèma o de l’arret que’vs deu poder hornir 'info_non_modifiable' => 'ne’s pòt pas modificar', 'info_non_suppression_mot_cle' => 'Non vòi pas suprimir aqueth mot clau.', 'info_notes' => 'Nòtas', - 'info_nouveaux_message' => 'Messatges naus', 'info_nouvel_article' => 'Article nau', 'info_nouvelle_traduction' => 'Arrevirada nava:', 'info_numero_article' => 'ARTICLE NUMÈRO:', 'info_obligatoire_02' => '[Obligatòri]', # MODIF 'info_option_accepter_visiteurs' => 'Acceptar l’inscripcion deus vesitaires deu sit public', - 'info_option_faire_suivre' => 'Har seguir los messatges deus forums aus autors deus articles', 'info_option_ne_pas_accepter_visiteurs' => 'Arrefusar l’inscripcion de vesitaires', 'info_options_avancees' => 'OPCIONS AVANÇADAS', - 'info_ortho_activer' => 'Activar lo verificader d’ortografia', - 'info_ortho_desactiver' => 'Desactivar lo verificader d’ortografia', 'info_ou' => 'o... ', 'info_page_interdite' => 'Pagina proïbida', 'info_par_nombre_article' => '(per nombre d’articles)', 'info_passe_trop_court' => 'Mot de santa Clara tròp cort.', 'info_passes_identiques' => 'Los dus mots de santa Clara non son pas identics.', - 'info_pense_bete_ancien' => 'Los vòstes mementos ancians ', # MODIF 'info_plus_cinq_car' => 'mei de 5 caractèrs', 'info_plus_cinq_car_2' => '(mei de 5 caractèrs)', 'info_plus_trois_car' => '(mei de 3 caractèrs)', 'info_popularite' => 'popularitat: @popularite@; vesitas: @visites@', - 'info_popularite_4' => 'popularitat: @popularite@; vesitas: @visites@', 'info_post_scriptum' => 'Post-scriptum', 'info_post_scriptum_2' => 'Post-scriptum:', 'info_pour' => 'entà', - 'info_preview_admin' => 'Solament los administrators que pòden previsualizar lo sit', - 'info_preview_comite' => 'Tots los redactors que pòden previsualizar lo sit', - 'info_preview_desactive' => 'La previsualizacion qu’ei deu tot desactivada', - 'info_preview_texte' => 'Qu’ei possible de previsualizar lo sit com s’avèvan publicat tots los articles e brèvas (qui tienen aumensh l’estatut "prepausat"). E la cau obrir, aquera possibilitat, aus administrators sonque, a tots los redactors, o non pas a degun?', - 'info_principaux_correspondants' => 'Los vòstes correspondents principaus', + 'info_preview_texte' => 'Qu’ei possible de previsualizar lo sit com s’avèvan publicat tots los articles e brèvas (qui tienen aumensh l’estatut "prepausat"). E la cau obrir, aquera possibilitat, aus administrators sonque, a tots los redactors, o non pas a degun?', # MODIF 'info_procedez_par_etape' => 'proceditz estapa per estapa', 'info_procedure_maj_version' => 'Que cau lançar la procedura d’actualizacion tà adaptar la basa de dadas a la version navèra d’SPIP.', @@ -352,12 +289,9 @@ L’administrator deu sistèma o de l’arret que’vs deu poder hornir qui’us balha un còde d’accès au sit privat. Daubuns aubergaders n’autorizan pas lo mandadís d’e-mails dempuish los lors serviders: en aqueth cas, l’inscripcion automatica qu’ei impossibla.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'E desiratz d’utilizar lo cercader integrat a SPIP? (lo desactivar qu’accelèra lo foncionament deu sistèma.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Arradit deu sit', 'info_recharger_page' => 'Volhatz tornar cargar aquera pagina dens un momenton.', - 'info_recherche_auteur_a_affiner' => 'Tròp de resultats entà "@cherche_auteur@"; volhatz afinar la cèrca.', - 'info_recherche_auteur_ok' => 'Mei d’un redactor trobat entà "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Nat resultat trobat entà "@cherche_auteur@".', 'info_recommencer' => 'Volhatz tornar començar.', 'info_redacteur_1' => 'Redactor', @@ -374,7 +308,6 @@ Daubuns aubergaders n’autorizan pas lo mandadís d’e-mails dempuish los lors 'info_rubriques' => 'Rubricas', 'info_rubriques_02' => 'rubricas', 'info_rubriques_trouvees' => 'Rubricas trobadas', - 'info_rubriques_trouvees_dans_texte' => 'Rubricas trobadas (dens lo tèxt)', 'info_sans_titre' => 'Shens títol', 'info_selection_chemin_acces' => 'Seleccionatz ça devath lo camin d’accès dens l’annuari:', 'info_signatures' => 'signaturas', @@ -387,11 +320,9 @@ Daubuns aubergaders n’autorizan pas lo mandadís d’e-mails dempuish los lors 'info_sites_lies_mot' => 'Los sits referenciats ligats a aqueth mot clau', 'info_sites_proxy' => 'Utilizar un proxy', 'info_sites_trouves' => 'Sits trobats', - 'info_sites_trouves_dans_texte' => 'Sits trobats (dens lo tèxt)', 'info_sous_titre' => 'Sostítol:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Estatut d’aqueth autor:', # MODIF - 'info_statut_efface' => 'Esfaçat', 'info_statut_redacteur' => 'Redactor', 'info_statut_utilisateurs_1' => 'Estatut predefinit deus utilizaires importats', 'info_statut_utilisateurs_2' => 'Causitz l’estatut d’atribuir a las personas presentas dens l’annuari LDAP quan e’s connèctan lo permèr còp. Que poiratz puish modificar aqueth estatut entà cada autor un cas per un.', @@ -409,7 +340,6 @@ Daubuns aubergaders n’autorizan pas lo mandadís d’e-mails dempuish los lors 'info_tous_articles_en_redaction' => 'Tots los articles en cors de redaccion', 'info_tous_articles_presents' => 'Tots los articles publicats dens aquera rubrica', 'info_tous_les' => 'tots los:', - 'info_tous_redacteurs' => 'Anoncis a tots los redactors ', 'info_tout_site' => 'Tot lo sit ', 'info_tout_site2' => 'N’an pas arrevirat l’article cap tà aquera lenga.', 'info_tout_site3' => 'Qu’an arrevirat l’article cap tà aquera lenga, mes qu’an portat puish modificacions a l’article de referéncia. Que cau actualizar l’arrevirada.', @@ -424,7 +354,6 @@ ua color qu’indica lo lor estat:', 'info_une_rubrique' => 'ua rubrica, ', 'info_une_rubrique_02' => '1 rubrica', 'info_url' => 'URL:', - 'info_url_site' => 'URL DEU SIT:', 'info_urlref' => 'Ligam ipertèxt:', 'info_utilisation_spip' => 'Ara que podetz començar d’utilizar lo sistèma de publicacion assistida...', 'info_visites_par_mois' => 'Afichatge per mes:', @@ -441,15 +370,12 @@ ua color qu’indica lo lor estat:', 'item_activer_messages_avertissement' => 'Activar los messatges d’avertiment', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Afichar dens lo calendèr', - 'item_autoriser_documents_joints' => 'Autorizar que’s junte documents aus articles', - 'item_autoriser_documents_joints_rubriques' => 'Autorizar los documents dens las rubricas', 'item_choix_administrateurs' => 'los administrators', 'item_choix_generation_miniature' => 'Congrear automaticament las miniaturas deus imatges.', 'item_choix_non_generation_miniature' => 'Non congrear pas nada miniatura deus imatges.', 'item_choix_redacteurs' => 'los redactors', 'item_choix_visiteurs' => 'los vesitaires deu sit public', 'item_creer_fichiers_authent' => 'Crear fichièrs .htpasswd', - 'item_limiter_recherche' => 'Limitar la cèrca a las informacions contengudas dens lo vòste sit', 'item_login' => 'Login', 'item_mots_cles_association_articles' => 'aus articles', 'item_mots_cles_association_rubriques' => 'a las rubricas', @@ -458,34 +384,24 @@ ua color qu’indica lo lor estat:', 'item_non_accepter_inscriptions' => 'N’acceptar pas las inscripcions', 'item_non_activer_messages_avertissement' => 'Nat messatge d’avertiment', 'item_non_afficher_calendrier' => 'De non pas afichar dens lo calendèr', - 'item_non_autoriser_documents_joints' => 'N’autorizar pas los documents dens los articles', - 'item_non_autoriser_documents_joints_rubriques' => 'N’autorizar pas los documents dens las rubricas', 'item_non_creer_fichiers_authent' => 'Non crear pas aqueths fichièrs', - 'item_non_gerer_statistiques' => 'Non gerir pas las estadisticas', - 'item_non_limiter_recherche' => 'Alargar la cèrca au contengut deus sits referenciats', 'item_non_publier_articles' => 'Non publicar pas los articles abans la data de publicacion prevista.', - 'item_non_utiliser_moteur_recherche' => 'N’utilizar pas lo motor', 'item_nouvel_auteur' => 'Autor nau', 'item_nouvelle_rubrique' => 'Rubrica nava', 'item_oui' => 'Òc', 'item_publier_articles' => 'Publicar los articles, quina que sia la soa data de publicacion', 'item_reponse_article' => 'Responsa a l’article', - 'item_utiliser_moteur_recherche' => 'Utilizar lo cercader', 'item_visiteur' => 'vesitaire', // J 'jour_non_connu_nc' => 'n.c.', // L - 'lien_ajout_destinataire' => 'Ajustar aqueth destinatari', 'lien_ajouter_auteur' => 'Ajustar aqueth autor', - 'lien_ajouter_participant' => 'Ajustar un participant', 'lien_email' => 'e-mail', 'lien_nom_site' => 'NOM DEU SIT:', 'lien_retirer_auteur' => 'Tirar l’autor', - 'lien_retrait_particpant' => 'Tirar aqueth participant', 'lien_site' => 'sit', - 'lien_supprimer_rubrique' => 'suprimir aquera rubrica', 'lien_tout_deplier' => 'Desplegar tot', 'lien_tout_replier' => 'Tornar plegar', 'lien_trier_nom' => 'Triar per nom', @@ -511,6 +427,9 @@ ua color qu’indica lo lor estat:', // O 'onglet_repartition_actuelle' => 'uei lo dia', + // R + 'required' => '[Obligatòri]', # MODIF + // S 'statut_admin_restreint' => '(admin. restrent)', # MODIF @@ -533,14 +452,10 @@ ua color qu’indica lo lor estat:', 'texte_article_virtuel_reference' => 'Article virtuau: article referenciat dens lo vòste sit SPIP, mes redirigit de cap tà ua auta URL. Tà suprimir la redireccion, esfaçatz l’URL ça suber.', 'texte_aucun_resultat_auteur' => 'Nat resultat entà "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Aqueste sit que pòt indicà’vs de contunh la tèra deus redactors connectats, çò qui’vs permet d’escambiar messatges en dirècte. Que podetz decidir de n’aparéisher pas dens aquera tèra (qu’ètz "invisible/a" taus autes utilizaires).', - 'texte_auteur_messagerie_1' => 'Aqueth sit que permet d’escambiar messatges e de constituir forums de discussion privats entre los participants deu sit. Que podetz decidir de non participar pas a aqueths escambis.', 'texte_auteurs' => 'LOS AUTORS', 'texte_choix_base_1' => 'Causitz la vòsta basa:', 'texte_choix_base_2' => 'Lo servider SQL que contien mei d’ua basa de dadas.', 'texte_choix_base_3' => 'Causitz ça devath la qui lo vòste aubergader e vs’a atribuida:', - 'texte_commande_vider_tables_indexation' => 'Utilizatz aquera comanda tà vueidar las taulas d’indexacion utilizadas peu cercader integrat a SPIP. Aquò que permeterà - de ganhar espaci disc.', - 'texte_compresse_ou_non' => '(Aqueste que’s pòt comprimir o non)', 'texte_compte_element' => '@count@ element', 'texte_compte_elements' => '@count@ elements', 'texte_connexion_mysql' => 'Consultatz las informacions que lo vòste aubergader e forneish: qu’i devetz trobar, se lo vòste aubergader supòrta SQL, los còdes de connexion au servider SQL.', # MODIF @@ -556,10 +471,8 @@ ua color qu’indica lo lor estat:', 'texte_date_publication_anterieure' => 'DATA DE PUBLICACION ANTERIORA :', 'texte_date_publication_anterieure_nonaffichee' => 'N’afichar pas nada data de publicacion anteriora.', 'texte_date_publication_article' => 'DATA DE PUBLICACION EN LINHA :', - 'texte_descriptif_petition' => 'Descriptiu de la peticion', 'texte_descriptif_rapide' => 'Descriptiu rapid', 'texte_effacer_base' => 'Esfaçar la basa de dadas SPIP', - 'texte_effacer_donnees_indexation' => 'Esfaçar las dadas d’indexacion', 'texte_en_cours_validation' => 'Que’s perpausa de publicar los articles e brèvas ça devath. N’esitetz pas de dar la vòsta idèa gràcias aus forums qui i son estacats.', # MODIF 'texte_enrichir_mise_a_jour' => 'Que podetz enriquir la compaginacion deu vòste tèxt en utilizar "acorcidas tipograficas".', 'texte_fichier_authent' => 'E deu crear, SPIP, fichièrs especiaus .htpasswd @@ -578,29 +491,16 @@ ua color qu’indica lo lor estat:', En aqueth cas, que cau cambiar lo reglatge predefinit entà utilizar un jòc de caractèrs apropiat. N’oblidetz pas tanpòc d’adaptar lo sit public en consequéncia (balisa #CHARSET).', - 'texte_jeu_caractere_2' => 'Aqueste reglatge n’a pas nat efièit retroactiu. Adonc - los tèxtes ja sasits que’s pòden afichar - d’ua manèra incorrècta après que s’aja modificat lo reglatge. De tot mòde - que poiratz tornar shens damatge au reglatge precedent.', - 'texte_lien_hypertexte' => '(Se lo vòste messatge se refereish a un article publicat suu web, o a ua pagina hornint mei informacions, volhatz indicar ça devath lo títol de la pagina e la soa adreiça URL.)', 'texte_login_ldap_1' => '(Deishar vueid entà un accès anonim, o picar lo camin complet, per exemple «uid=fabre, ou=usanciers, dc=mon-domeni, dc=com».)', 'texte_login_precaution' => 'Atencion! Aquò qu’ei lo login dab lo quau ètz ara connectat/ada. Utilizatz aqueste formulari dab precaucion...', - 'texte_message_edit' => 'Atencion: aqueste messatge, cada redactor que pòt vede’u, e cada administrator deu sit que pòt modificà’u. Utilizatz los anoncis sonque tà expausar eveniments importants de la vita deu sit.', 'texte_mise_a_niveau_base_1' => 'Que vienetz d’actualizar los fichièrs SPIP. Ara que cau hicar a nivèu la basa de dadas deu sit.', 'texte_modifier_article' => 'Modificar l’article:', - 'texte_moteur_recherche_active' => 'Lo cercader qu’ei activat. Utilizatz aquesta commanda - se voletz tornar indexar la basa rapidament (après restauracion - d’ua sauvagarda per exemple). Notatz que los documents modificats de - manèra normau (a partir de l’interfàcia SPIP) que’s tornan indexar - automaticament: donc aquesta comanda qu’ei utila sonque de manèra excepcionau.', - 'texte_moteur_recherche_non_active' => 'Lo cercader n’ei pas activat.', 'texte_multilinguisme' => 'Se desiratz de gerir articles en mei d’una lenga, dab ua navigacion complèxa, que podetz hornir un menut entà causir la lenga deus articles e/o de las rubricas, en foncion de l’organizacion deu vòste sit.', # MODIF 'texte_multilinguisme_trad' => 'Que podetz tanben activar un sistèma de gestion deus ligams entre las diferentas reviradas d’un article.', # MODIF 'texte_non_compresse' => 'non comprimit (pr’amor que lo vòste servider non supòrta pas aquera foncionalitat)', - 'texte_nouveau_message' => 'Messatge nau', 'texte_nouvelle_version_spip_1' => 'Qu’avetz installada ua version navèra d’SPIP.', 'texte_nouvelle_version_spip_2' => 'Aquesta version navèra que demanda ua actualizacion mei completa que de costuma. S’ètz webmèstre/webmèstra deu sit, volhatz esfaçar lo fichièr inc_connect.php3 deu repertòri ecrire e tornar préner l’installacion entà actualizar los vòstes paramètres de connexion a la basa de dadas.

    (NB: s’avetz desmembrat los vòstes paramètres de connexion, espiatz lo fichièr inc_connect.php3 abans de suprimí’u...)

    ', # MODIF 'texte_operation_echec' => 'Tornatz a la pagina precedenta, causitz ua auta basa o creatz-ne ua navèra. Verificatz las informacions que lo vòste aubergader a hornidas.', @@ -619,7 +519,6 @@ ua color qu’indica lo lor estat:', 'texte_rappel_selection_champs' => '[N’oblidetz pas de seleccionar aqueth camp corrèctament.]', 'texte_recalcul_page' => 'Se voletz tornar calcular sonque ua pagina, passatz meilèu per l’espaci public e utilizatz lo boton "tornar calcular".', - 'texte_recapitiule_liste_documents' => 'Aquesta pagina que recapitula la tèra deus documents qui avetz plaçats dens las rubricas. Tà modificar las informacions de cada document, seguitz lo ligam de cap tà la pagina de la soa rubrica.', 'texte_recuperer_base' => 'Reparar la basa de dadas', 'texte_reference_mais_redirige' => 'article referenciat dens lo vòste sit SPIP, mes redirigit de cap tà ua autra URL.', 'texte_requetes_echouent' => 'Quora daubuas requèstas SQL s’i mauescaden @@ -647,7 +546,6 @@ dens l’esconeder SPIP. Aquò que permet per exemple de forçar un calcul nau d s’avetz modificat de bèth pro lo grafisme o l’estructura deu sit.', 'texte_sur_titre' => 'Subertítol', 'texte_table_ok' => ': aquesta taula qu’ei condreta.', - 'texte_tables_indexation_vides' => 'Las taulas d’indexacion deu motor que son vueidas.', 'texte_tentative_recuperation' => 'Ensai de reparacion', 'texte_tenter_reparation' => 'Ensajar de reparar la basa de dadas', 'texte_test_proxy' => 'Tà ensajar aqueth proxy, indicatz ací l’adreiça d’un sit web @@ -662,26 +560,8 @@ s’avetz modificat de bèth pro lo grafisme o l’estructura deu sit.', Aquera opcion qu’ei desactivada de manèra predefinida entà evitar d’afichar messatges d’avertiment intempestius.', - 'texte_trop_resultats_auteurs' => 'Tròp de resultats entà "@cherche_auteur@" ; volhatz afinar la cèrca.', - 'texte_unpack' => 'telecargament de la darrèra version', - 'texte_utilisation_moteur_syndiques' => 'Quora utilizatz lo cercader integrat - a SPIP, que podetz har las cèrcas suus sits e - articles sindicats de duas manèras - diferentas.
    La mei - simpla que consisteish a cercar sonque dens los - títols e descriptius deus articles.
    - La dusau manèra, plan mei potenta, que permet - a SPIP de cercar tanben dens lo tèxt deus - sits referenciats. - Se referenciatz un sit, alavetz SPIP que harà la - cèrca dens lo tèxt deu quite sit.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Aqueth metòde qu’obliga SPIP de vesitar - regularament los sits referenciats, - aquò que pòt alentir un drin lo vòste quite - sit.', 'texte_vide' => 'vueid', 'texte_vider_cache' => 'Vueidar l’esconeder', - 'titre_admin_effacer' => 'Mantienença tecnica', 'titre_admin_tech' => 'Mantienença tecnica', 'titre_admin_vider' => 'Mantienença tecnica', 'titre_cadre_afficher_article' => 'Afichar los articles', @@ -701,35 +581,20 @@ s’avetz modificat de bèth pro lo grafisme o l’estructura deu sit.', 'titre_naviguer_dans_le_site' => 'Navigar peu lo sit...', 'titre_nouvelle_rubrique' => 'Rubrica navèra', 'titre_numero_rubrique' => 'RUBRICA NUMÈRO:', - 'titre_page_admin_effacer' => 'Mantienença tecnica: esfaçar la basa', 'titre_page_articles_edit' => 'Modificar: @titre@', 'titre_page_articles_page' => 'Los articles', 'titre_page_articles_tous' => 'Tot lo sit', - 'titre_page_auteurs' => 'Vesitaires', 'titre_page_calendrier' => 'Calendèr @nom_mois@ de @annee@', 'titre_page_config_contenu' => 'Configuracion deu sit', - 'titre_page_config_fonctions' => 'Configuracion deu sit', - 'titre_page_configuration' => 'Configuracion deu sit', - 'titre_page_controle_petition' => 'Seguit de las peticions', 'titre_page_delete_all' => 'supression totau e irreversibla', - 'titre_page_documents_liste' => 'Los documents de las rubricas', - 'titre_page_index' => 'Lo vòste espaci privat', - 'titre_page_message_edit' => 'Redigir un messatge', - 'titre_page_messagerie' => 'La vòsta messatjaria', 'titre_page_recherche' => 'Resultats de la cèrca @recherche@', 'titre_page_statistiques_referers' => 'Estadisticas (ligams entrants)', 'titre_page_upgrade' => 'Hicada a nivèu d’SPIP', 'titre_publication_articles_post_dates' => 'Publicacion deus articles pòstdatats', - 'titre_referencer_site' => 'Referenciar lo sit:', - 'titre_rendez_vous' => 'RENDETZ-VOS:', 'titre_reparation' => 'Reparacion', 'titre_suivi_petition' => 'Seguit de las peticions', - 'trad_article_inexistant' => 'N’i a pas nat article qui pòrte aqueth numèro.', 'trad_article_traduction' => 'Totas las versions d’aqueth article:', - 'trad_deja_traduit' => 'Aqueth article qu’ei ja ua arrevirada de l’article present.', 'trad_delier' => 'Non ligar plus aqueste article a las soas arreviradas ', # MODIF 'trad_lier' => 'Aqueste article qu’ei ua arrevirada de l’article numèro:', 'trad_new' => 'Escríver ua arrevirada navèra d’aqueste article' # MODIF ); - -?> diff --git a/www/ecrire/lang/ecrire_oc_lms.php b/www/ecrire/lang/ecrire_oc_lms.php index d2c1af5e..a534d635 100644 --- a/www/ecrire/lang/ecrire_oc_lms.php +++ b/www/ecrire/lang/ecrire_oc_lms.php @@ -1,9 +1,11 @@ 'Tornatz a la pagina anteriora, e verificatz las informacions qu’avetz fornidas. ', 'avis_connexion_ldap_echec_3' => 'Alternativament, utilizetz pas lo supòrt LDAP per importar daus utilizaires.', 'avis_deplacement_rubrique' => 'Atention! Quela rubrica conten @contient_breves@ brevas@scb@: se la desplaçatz, voudretz be oschar quela casa de confirmacion.', - 'avis_destinataire_obligatoire' => 'Devetz indicar un destinatari avans de mandar queu messatge.', 'avis_erreur_connexion_mysql' => 'Error de connexion SQL', - 'avis_erreur_version_archive' => 'Atencion! Lo fichier @archive@ correspond emb una autra version d’SPIP que la qu’avetz installada. Anatz vers de las dificultats grandassas: risca de destruccion de vòstra basa de donadas, disfoncionaments divers dau sit, etc. Validetz pas quela demanda d’importacion.

    Per mai d’informacions, vesetz - -la documentacion d’SPIP.', # MODIF - 'avis_espace_interdit' => 'Espaci proïbit

    SPIP es ja installat.', + 'avis_espace_interdit' => 'Espaci proïbit

    SPIP es ja installat.', # MODIF 'avis_lecture_noms_bases_1' => 'Lo programa d’installacion a pas pogut legir los noms de las basas de donadas installadas.', 'avis_lecture_noms_bases_2' => 'Siá brisa de basa es pas disponibla, siá la foncion que permet d’entierar las basas es estada desactivada per de las rasons de seguretat (quo es lo cas chas mai d’un auberjador).', 'avis_lecture_noms_bases_3' => 'Dins la segonda alternativa, es probable qu’una basa que pòrta vòstre nom de login siá utilizabla:', - 'avis_non_acces_message' => 'Podetz pas accedir a queu messatge.', 'avis_non_acces_page' => 'Podetz pas accedir a quela pagina.', 'avis_operation_echec' => 'L’operacion a frolhat.', - 'avis_probleme_archive' => 'Problema de lectura dau fichier @archive@', 'avis_suppression_base' => 'ATENCION, suprimir las donadas es irreversible', - 'avis_version_mysql' => 'Vòstra version de SQL (@version_mysql@) permet pas l’autoreparacion de las taulas de la basa.', // B 'bouton_acces_ldap' => 'Apondre l’accès a LDAP >>', 'bouton_ajouter' => 'Apondre', - 'bouton_ajouter_participant' => 'APONDRE UN PARTICIPANT:', - 'bouton_annonce' => 'ANONCI', - 'bouton_checkbox_envoi_message' => 'possibilitat de mandar un messatge', - 'bouton_checkbox_indiquer_site' => 'indicar obligatoriament un sit web', - 'bouton_checkbox_signature_unique_email' => 'Nonmàs una signatura per adreiça e-mail', - 'bouton_checkbox_signature_unique_site' => 'Nonmàs una signatura per sit web', 'bouton_demande_publication' => 'Demandar la publicacion de queste article', - 'bouton_effacer_index' => 'Esfaçar los index', 'bouton_effacer_tout' => 'Esfaçar tot', - 'bouton_envoi_message_02' => 'MANDAR UN MESSATGE', 'bouton_envoyer_message' => 'Messatge definitiu: mandar', 'bouton_modifier' => 'Modificar', - 'bouton_pense_bete' => 'MEMENTO (D’USATGE PERSONAU)', - 'bouton_radio_activer_messagerie' => 'Activar la messatjariá interna', - 'bouton_radio_activer_messagerie_interne' => 'Activar la messatjariá interna', - 'bouton_radio_activer_petition' => 'Activar la peticion', 'bouton_radio_afficher' => 'Afichar', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Afichar dins la tiera daus redactors connectats', - 'bouton_radio_desactiver_messagerie' => 'Desactivar la messatjariá', 'bouton_radio_envoi_annonces_adresse' => 'Mandar los anoncis a l’adreiça:', 'bouton_radio_envoi_liste_nouveautes' => 'Mandar la tiera de las novetats', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Pas aparéisser dins la tiera daus redactors', 'bouton_radio_non_envoi_annonces_editoriales' => 'Pas mandar d’anoncis editoriaus', - 'bouton_radio_pas_petition' => 'Brisa de peticion', - 'bouton_radio_petition_activee' => 'Peticion activada', - 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', 'bouton_redirection' => 'TORNAR DIRIGIR', 'bouton_relancer_installation' => 'Tornar lançar l’installacion', 'bouton_suivant' => 'Seguent', 'bouton_tenter_recuperation' => 'Assajar de reparar', 'bouton_test_proxy' => 'Assajar lo proxy', 'bouton_vider_cache' => 'Voidar l’escondedor', - 'bouton_voir_message' => 'Veire queu messatge avans de lo validar', // C - 'cache_mode_compresse' => 'Los fichiers de l’escondedor son registrats en mòde comprimit.', - 'cache_mode_non_compresse' => 'Los fichiers de l’escondedor son registrats en mòde non comprimit.', 'cache_modifiable_webmestre' => 'Lo webmestre dau sit pòt modificar questes parametres.', 'calendrier_synchro' => 'S’utilizatz un logiciau d’agenda compatible iCal (Apple iCal, Mozilla Calendar, Ximian Evolution, KOrganizer...), lo podetz sincronizar emb l’actualitat dau sit.', @@ -104,7 +80,6 @@ L’administrator dau sistema o de la ret vos deu poder fornir 'entree_login' => 'Vòstre login', 'entree_login_connexion_1' => 'Lo login de connexion', 'entree_login_connexion_2' => '(Correspond daus uns còps a vòstre login d’accès a l’FTP; daus uns còps se laissa voide)', - 'entree_login_ldap' => 'Login LDAP iniciau', 'entree_mot_passe' => 'Vòstre mot de santa Clara', 'entree_mot_passe_1' => 'Mot de santa Clara per la connexion', 'entree_mot_passe_2' => '(Correspond daus uns còps a vòstre mot de santa Clara per l’FTP; daus uns còps se laissa voide)', @@ -124,7 +99,7 @@ L’administrator dau sistema o de la ret vos deu poder fornir 'ical_info2' => 'Per téner mai d’informacions subre quelas tecnicas, esitetz pas de consultar la documentacion d’SPIP.', # MODIF 'ical_info_calendrier' => 'I a dos chalendiers a la vòstra disposicion. Lo primier es un plan dau sit qu’anóncia tots los articles publicats. Lo segond conten los anoncis editoriaus en mai de vòstres darriers messatges privats: vos es reservat gràcias a una clau personala, que la podetz modificar en tot moment en renovant vòstre mot de santa Clara. ', 'ical_methode_http' => 'Telecharjament', - 'ical_methode_webcal' => 'Sincronizacion (webcal://)', + 'ical_methode_webcal' => 'Sincronizacion (webcal://)', # MODIF 'ical_texte_js' => 'Los articles publicats en queu sit se pòden afichar aisat, dins tots los sits vòstres, en far servir una linha javascript. ', 'ical_texte_prive' => 'Queu chalendier, d’usatge estrictament personau, vos informa de l’activitat editoriala privada de queu sit (òbras e rendetz-vos personaus, articles e brevas prepausats...).', 'ical_texte_public' => 'Queu chalendier vos permet de seguir l’activitat publica de queu sit (articles e brevas publicats).', @@ -140,9 +115,7 @@ L’administrator dau sistema o de la ret vos deu poder fornir 'icone_creer_auteur' => 'Crear un autor nuòu e l’associar a quel article', 'icone_creer_mot_cle' => 'Crear un mot clau nuòu e lo liar a quel article', 'icone_creer_rubrique_2' => 'Crear una rubrica nuòva', - 'icone_envoyer_message' => 'Mandar queu messatge', 'icone_modifier_article' => 'Modificar quel article', - 'icone_modifier_message' => 'Modificar queu messatge', 'icone_modifier_rubrique' => 'Modificar quela rubrica', 'icone_retour' => 'Tornar', 'icone_retour_article' => 'Tornar a l’article', @@ -152,10 +125,7 @@ L’administrator dau sistema o de la ret vos deu poder fornir 'icone_valider_signature' => 'Validar quela signatura', 'image_administrer_rubrique' => 'Podetz administrar quela rubrica', 'info_1_article' => '1 article', - 'info_1_site' => '1 sit', 'info_activer_cookie' => 'Podetz activar un cookie de correspondéncia; quò lai vos permetrá de passar aisat dau sit public au sit privat.', - 'info_admin_gere_rubriques' => 'Quel administrator gerís las rubricas seguentas:', - 'info_admin_gere_toutes_rubriques' => 'Quel administrator gerís totas las rubricas.', # MODIF 'info_administrateur' => 'Administrator', 'info_administrateur_1' => 'Administrator', 'info_administrateur_2' => 'dau sit(d’utilizar emb precaucion)', @@ -165,13 +135,10 @@ L’administrator dau sistema o de la ret vos deu poder fornir 'info_administrer_rubrique' => 'Podetz administrar quela rubrica', 'info_adresse' => 'a l’adreiça:', 'info_adresse_url' => 'Adreiça (URL) dau sit public', - 'info_afficher_visites' => 'Afichar las vesitas per:', 'info_aide_en_ligne' => 'Ajuda en linha SPIP', 'info_ajout_image' => 'Quand apondetz daus imatges coma estachaments jonchs a un article, SPIP pòt crear automaticament per vos de las vinhetas (miniaturas) daus imatges inserits. Quò lai permet per exemple de crear automaticament una galariá o un pòrtfòlio.', - 'info_ajout_participant' => 'Lo participant seguent es apondut:', 'info_ajouter_rubrique' => 'Apondre una autra rubrica d’administrar:', 'info_annonce_nouveautes' => 'Anonci de las novetats', - 'info_anterieur' => 'anteriora', 'info_article' => 'article', 'info_article_2' => 'articles', 'info_article_a_paraitre' => 'Los articles pòstdatats per paréisser', @@ -179,10 +146,8 @@ L’administrator dau sistema o de la ret vos deu poder fornir 'info_articles_2' => 'Articles', 'info_articles_auteur' => 'Los articles de quel autor', 'info_articles_trouves' => 'Articles trobats', - 'info_articles_trouves_dans_texte' => 'Articles trobats (dins lo text)', 'info_attente_validation' => 'Vòstres articles en espera de validacion', 'info_aujourdhui' => 'uei:', - 'info_auteur_message' => 'AUTOR DAU MESSATGE:', 'info_auteurs' => 'Los autors', 'info_auteurs_par_tri' => 'autors@partri@', 'info_auteurs_trouves' => 'Autors trobats', @@ -215,15 +180,12 @@ L’administrator dau sistema o de la ret vos deu poder fornir 'info_date_publication_anterieure' => 'Data anteriora de publicacion:', 'info_date_referencement' => 'DATA DE REFERENCIAMENT DE QUEU SIT:', 'info_derniere_etape' => 'Darriera estapa: Quo es ’chabat!', - 'info_derniers_articles_publies' => 'Vòstres darriers articles publicats en linha', - 'info_desactiver_messagerie_personnelle' => 'Podetz activar o desactivar vòstra messatjariá personala subre queu sit.', 'info_descriptif' => 'Descriptiu:', 'info_discussion_cours' => 'Discussions en cors', 'info_ecrire_article' => 'Avans de poder escriure daus articles, vos chau crear aumens una rubrica.', 'info_email_envoi' => 'Adreiça e-mail d’enviament (opcionau)', 'info_email_envoi_txt' => 'Indicatz aicí l’adreiça d’utilizar per enviar los e-mails (a fauta d’aquò, s’utilizará l’adreiça destinatari coma adreiça d’enviament):', 'info_email_webmestre' => 'Adreiça e-mail dau responsable dau sit (opcionau)', # MODIF - 'info_entrer_code_alphabet' => 'Picatz lo còde de l’alfabet d’utilizar:', 'info_envoi_email_automatique' => 'Enviament d’e-mails automatics', 'info_envoyer_maintenant' => 'Mandar aura', 'info_etape_suivante' => 'Passar a l’estapa seguenta', @@ -233,27 +195,19 @@ L’administrator dau sistema o de la ret vos deu poder fornir 'info_facilite_suivi_activite' => 'Per facilitar lo segut de l’activitat editoriala dau sit, SPIP vos pòt fornir per e-mail, per exemple a una lista de corrier daus redactors, l’anonci de las demandas de publicacion e de las validacions d’articles.', 'info_fichiers_authent' => 'Fichiers d’autentificacion « .htpasswd »', 'info_forums_abo_invites' => 'Vòstre sit web òfre daus forums per los abonats; dins lo sit public los vesitaires son convidats a se registrar.', - 'info_gauche_admin_effacer' => 'A quela pagina, nonmàs los responsables dau sit i pòden accedir.

    Permet de trobar las diferentas foncions de mantenença tecnica. Quauques unas implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.', # MODIF 'info_gauche_admin_tech' => 'A quela pagina, nonmàs los responsables dau sit i pòden accedir.

    Permet de trobar las diferentas foncions de mantenença tecnica. Quauques unas implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.', # MODIF 'info_gauche_admin_vider' => 'A quela pagina, nonmàs los responsables dau sit i pòden accedir.

    Permet de trobar las diferentas foncions de mantenença tecnica. Quauques unas implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.', # MODIF 'info_gauche_auteurs' => 'Trobaretz aicí tots los autors dau sit. La color de las icònas n’indica l’estatut (administrator: verd; redactor: jaune).', 'info_gauche_auteurs_exterieurs' => 'Los autors exteriors, sens accès au sit, son indicats emb una icòna blava; los autors esfaçats emb un bordilhier.', # MODIF 'info_gauche_messagerie' => 'La messatjariá vos permet d’eschamjar daus messatges entre redactors, de servar daus mementos (per vòstre usatge personau) o d’afichar daus anoncis sus la pagina d’acuelh de l’espaci privat (se setz administrator/tritz).', - 'info_gauche_numero_auteur' => 'AUTOR NUMERO', 'info_gauche_statistiques_referers' => 'Quela pagina presenta la lista daus referidors, quò vòu dire daus sits menant a vòstre quite sit, unicament pet ier e uei: quela lista s’actualiza chasca 24 oras.', 'info_gauche_visiteurs_enregistres' => 'Trobaretz aquí los vesitaires registrats dins l’espaci public dau sit (forums emb abonament).', 'info_generation_miniatures_images' => 'Congreacion de miniaturas daus imatges', - 'info_gerer_trad' => 'Gerir los liams de revirada?', 'info_hebergeur_desactiver_envoi_email' => 'Quauques auberjadors desactivan l’enviament automatic d’e-mails dempuei lors servidors. En queu cas, las foncionalitats seguentas d’SPIP foncionarán pas.', 'info_hier' => 'ier:', - 'info_historique_activer' => 'Activar lo seguiment de las revisions', - 'info_historique_affiche' => 'Afichar quela version', - 'info_historique_comparaison' => 'comparason', - 'info_historique_desactiver' => 'Desactivar lo seguiment de las revisions', - 'info_historique_texte' => 'Le suivi des révisions permet de conserver un historique de toutes les modifications apportées au contenu d’un article, et d’afficher les différences entre les versions successives.', 'info_identification_publique' => 'Vòstra identitat publica...', 'info_image_process' => 'Volhatz seleccionar lo melhor metòde de fabricacion de las vinhetas en clicar sus l’imatge correspondent.', 'info_image_process2' => 'N.B. Se brisa d’imatge apareis, laidonc lo servidor qu’auberja vòstre sit l’an pas configurat per utilizar de taus gatges. Se desiratz d’utilirar quelas foncions, contactatz lo responsable tecnic e demandatz las extensions «GD» o «Imagick».', # MODIF @@ -271,8 +225,6 @@ L’administrator dau sistema o de la ret vos deu poder fornir 'info_login_trop_court' => 'Login tròp cort.', 'info_maximum' => 'maximum:', 'info_meme_rubrique' => 'Dins la mesma rubrica', - 'info_message' => 'Messatge dau', - 'info_message_efface' => 'MESSATGE ESFAÇAT', 'info_message_en_redaction' => 'Vòstres messatges en cors de redaccion', 'info_message_technique' => 'Messatge tecnic:', 'info_messagerie_interne' => 'Messatjariá interna', @@ -285,20 +237,15 @@ L’administrator dau sistema o de la ret vos deu poder fornir 'info_modifier_rubrique' => 'Modificar la rubrica:', 'info_modifier_titre' => 'Modificar: @titre@', 'info_mon_site_spip' => 'Mon sit SPIP', - 'info_mot_sans_groupe' => '(Mots fòra grop...)', - 'info_moteur_recherche' => 'Cerchador integrat', 'info_moyenne' => 'mejana:', - 'info_multi_articles' => 'Activar lo menut de lenga per los articles?', 'info_multi_cet_article' => 'Lenga de queste article:', 'info_multi_langues_choisies' => 'Volhatz seleccionar çai sos las lengas que son a posita daus redactors de vòstre sit. Las lengas ja emplejadas dins vòstre sit (afichadas primieras) se pòden pas desactivar.', - 'info_multi_rubriques' => 'Activar lo menut de lenga per las rubricas?', 'info_multi_secteurs' => '... nonmàs per las rubricas a la raiç dau sit?', 'info_nom' => 'Nom', 'info_nom_destinataire' => 'Nom dau destinatari', 'info_nom_site' => 'Nom de vòstre sit', 'info_nombre_articles' => '@nb_articles@ articles,', - 'info_nombre_partcipants' => 'PARTICIPANTS A LA DISCUSSION:', 'info_nombre_rubriques' => '@nb_rubriques@ rubricas,', 'info_nombre_sites' => '@nb_sites@ sits,', 'info_non_deplacer' => 'De pas desplaçar...', @@ -308,36 +255,26 @@ L’administrator dau sistema o de la ret vos deu poder fornir 'info_non_modifiable' => 'se pòt pas modificar', 'info_non_suppression_mot_cle' => 'vòle pas suprimir queu mot clau.', 'info_notes' => 'Nòtas', - 'info_nouveaux_message' => 'Messatges nuòus', 'info_nouvel_article' => 'Article nuòu', 'info_nouvelle_traduction' => 'Revirada nuòva:', 'info_numero_article' => 'ARTICLE NUMERO:', 'info_obligatoire_02' => '[Obligatòri]', # MODIF 'info_option_accepter_visiteurs' => 'Acceptar l’inscripcion daus vesitaires dau sit public', - 'info_option_faire_suivre' => 'Far segre los messatges daus forums aus autors daus articles', 'info_option_ne_pas_accepter_visiteurs' => 'Refusar l’inscripcion de vesitaires', 'info_options_avancees' => 'OPCIONS AVANÇADAS', - 'info_ortho_activer' => 'Activar lo verificador d’ortografia', - 'info_ortho_desactiver' => 'Desactivar lo verificador d’ortografia', 'info_ou' => 'o... ', 'info_page_interdite' => 'Pagina proïbida', 'info_par_nombre_article' => '(per nombre d’articles)', 'info_passe_trop_court' => 'Mot de santa Clara tròp cort.', 'info_passes_identiques' => 'Los dos mots de santa Clara son pas identics.', - 'info_pense_bete_ancien' => 'Vòstres mementos ancians ', # MODIF 'info_plus_cinq_car' => 'mai de 5 caracters', 'info_plus_cinq_car_2' => '(mai de 5 caracters)', 'info_plus_trois_car' => '(mai de 3 caracters)', 'info_popularite' => 'popularitat: @popularite@; vesitas: @visites@', - 'info_popularite_4' => 'popularitat: @popularite@; vesitas: @visites@', 'info_post_scriptum' => 'Post-scriptum', 'info_post_scriptum_2' => 'Post-scriptum:', 'info_pour' => 'per', - 'info_preview_admin' => 'Nonmàs los administrators pòden previsualizar lo sit', - 'info_preview_comite' => 'Tots los redactors pòden previsualizar lo sit', - 'info_preview_desactive' => 'La previsualizacion es dau tot desactivada', - 'info_preview_texte' => 'Quo es possible de previsualizar lo sit coma s’avián publicat tots los articles e brevas (que tenen aumens l’estatut "prepausat"). La chau dobrir, quela possibilitat, aus administrators solament, a tots los redactors, o a pas degun?', - 'info_principaux_correspondants' => 'Vòstres correspondents principaus', + 'info_preview_texte' => 'Quo es possible de previsualizar lo sit coma s’avián publicat tots los articles e brevas (que tenen aumens l’estatut "prepausat"). La chau dobrir, quela possibilitat, aus administrators solament, a tots los redactors, o a pas degun?', # MODIF 'info_procedez_par_etape' => 'procedissetz estapa per estapa', 'info_procedure_maj_version' => 'Chau lançar la procedura d’actualizacion per adaptar la basa de donadas a la version novela d’SPIP.', @@ -352,12 +289,9 @@ L’administrator dau sistema o de la ret vos deu poder fornir que lor baila un còde d’accès au sit privat. Quauques auberjadors autorizan pas l’enviament d’e-mails dempuei lors servidors: en queu cas, l’inscripcion automatica es impossibla.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Desiratz d’utilizar lo cerchador integrat a SPIP? (lo desactivar abriva lo foncionament dau sistema.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Raiç dau sit', 'info_recharger_page' => 'Volhatz tornar charjar quela pagina dins un momenton.', - 'info_recherche_auteur_a_affiner' => 'Tròp de resultats per "@cherche_auteur@"; volhatz afinar la cercha.', - 'info_recherche_auteur_ok' => 'Mai d’un redactor trobat per "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Brisa de resultat trobat per "@cherche_auteur@".', 'info_recommencer' => 'Volhatz tornar començar.', 'info_redacteur_1' => 'Redactor', @@ -374,7 +308,6 @@ Quauques auberjadors autorizan pas l’enviament d’e-mails dempuei lors servid 'info_rubriques' => 'Rubricas', 'info_rubriques_02' => 'rubricas', 'info_rubriques_trouvees' => 'Rubricas trobadas', - 'info_rubriques_trouvees_dans_texte' => 'Rubricas trobadas (dins lo text)', 'info_sans_titre' => 'Sens títol', 'info_selection_chemin_acces' => 'Seleccionatz çai sos lo chamin d’accès dins l’annuari:', 'info_signatures' => 'signaturas', @@ -387,11 +320,9 @@ Quauques auberjadors autorizan pas l’enviament d’e-mails dempuei lors servid 'info_sites_lies_mot' => 'Los sits referenciats liats a queu mot clau', 'info_sites_proxy' => 'Utilizar un proxy', 'info_sites_trouves' => 'Sits trobats', - 'info_sites_trouves_dans_texte' => 'Sits trobats (dins lo text)', 'info_sous_titre' => 'Sostítol:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Estatut de quel autor:', # MODIF - 'info_statut_efface' => 'Esfaçat', 'info_statut_redacteur' => 'Redactor', 'info_statut_utilisateurs_1' => 'Estatut predefinit daus utilizaires importats', 'info_statut_utilisateurs_2' => 'Chausissetz l’estatut d’atribuir a las personas presentas dins l’annuari LDAP quand se connectan per lo primier còp. Poiretz puei modificar quel estatut per chasque autor un cas per un.', @@ -409,7 +340,6 @@ Quauques auberjadors autorizan pas l’enviament d’e-mails dempuei lors servid 'info_tous_articles_en_redaction' => 'Tots los articles en cors de redaccion', 'info_tous_articles_presents' => 'Tots los articles publicats dins quela rubrica', 'info_tous_les' => 'tots los:', - 'info_tous_redacteurs' => 'Anoncis per tots los redactors ', 'info_tout_site' => 'Tot lo sit ', 'info_tout_site2' => 'An pas revirat l’article dins quela lenga.', 'info_tout_site3' => 'An revirat l’article dins quela lenga, mas an portat puei de las modificacions a l’article de referéncia. Chau actualizar la revirada.', @@ -424,7 +354,6 @@ una color indica lor estat:', 'info_une_rubrique' => 'una rubrica, ', 'info_une_rubrique_02' => '1 rubrica', 'info_url' => 'URL:', - 'info_url_site' => 'URL DAU SIT:', 'info_urlref' => 'Adreiça (URL) de referéncia:', 'info_utilisation_spip' => 'Aura podetz començar d’utilizar lo sistema de publicacion assistida...', 'info_visites_par_mois' => 'Afichatge per mes:', @@ -441,15 +370,12 @@ una color indica lor estat:', 'item_activer_messages_avertissement' => 'Activar los messatges d’avertiment', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Afichar dins lo chalendier', - 'item_autoriser_documents_joints' => 'Autorizar que se jonha daus documents aus articles', - 'item_autoriser_documents_joints_rubriques' => 'Autorizar los documents dins las rubricas', 'item_choix_administrateurs' => 'los administrators', 'item_choix_generation_miniature' => 'Congrear automaticament las miniaturas daus imatges.', 'item_choix_non_generation_miniature' => 'Pas congrear de miniaturas daus imatges.', 'item_choix_redacteurs' => 'los redactors', 'item_choix_visiteurs' => 'los vesitaires dau sit public', 'item_creer_fichiers_authent' => 'Crear daus fichiers .htpasswd', - 'item_limiter_recherche' => 'Limitar la cercha a las informacions contengudas dins vòstre sit', 'item_login' => 'Login', 'item_mots_cles_association_articles' => 'aus articles', 'item_mots_cles_association_rubriques' => 'a las rubricas', @@ -458,34 +384,24 @@ una color indica lor estat:', 'item_non_accepter_inscriptions' => 'Pas acceptar las inscripcions', 'item_non_activer_messages_avertissement' => 'Brisa de messatge d’avertiment', 'item_non_afficher_calendrier' => 'De pas afichar dins lo chalendier', - 'item_non_autoriser_documents_joints' => 'Pas autorizar los documents dins los articles', - 'item_non_autoriser_documents_joints_rubriques' => 'Pas autorizar los documents dins las rubricas', 'item_non_creer_fichiers_authent' => 'Pas crear quilhs fichiers', - 'item_non_gerer_statistiques' => 'Pas gerir las estadisticas', - 'item_non_limiter_recherche' => 'Eslarjar la cercha au contengut daus sits referenciats', 'item_non_publier_articles' => 'Pas publicar los articles avans la data de publicacion previsda.', - 'item_non_utiliser_moteur_recherche' => 'Pas utilizar lo motor', 'item_nouvel_auteur' => 'Autor nuòu', 'item_nouvelle_rubrique' => 'Rubrica nuòva', 'item_oui' => 'Òc ', 'item_publier_articles' => 'Publicar los articles, quina que siá lor data de publicacion', 'item_reponse_article' => 'Responsa a l’article', - 'item_utiliser_moteur_recherche' => 'Utilizar lo cerchador', 'item_visiteur' => 'vesitaire', // J 'jour_non_connu_nc' => 'n.c.', // L - 'lien_ajout_destinataire' => 'Apondre queu destinatari', 'lien_ajouter_auteur' => 'Apondre quel autor', - 'lien_ajouter_participant' => 'Apondre un participant', 'lien_email' => 'e-mail', 'lien_nom_site' => 'NOM DAU SIT:', 'lien_retirer_auteur' => 'Tirar l’autor', - 'lien_retrait_particpant' => 'Tirar queu participant', 'lien_site' => 'sit', - 'lien_supprimer_rubrique' => 'suprimir quela rubrica', 'lien_tout_deplier' => 'Desplejar tot', 'lien_tout_replier' => 'Tornar plejar', 'lien_trier_nom' => 'Triar per nom', @@ -511,6 +427,9 @@ una color indica lor estat:', // O 'onglet_repartition_actuelle' => 'per lo temps que vai', + // R + 'required' => '[Obligatòri]', # MODIF + // S 'statut_admin_restreint' => '(admin. restrench)', # MODIF @@ -533,14 +452,10 @@ una color indica lor estat:', 'texte_article_virtuel_reference' => 'Article virtuau: article referenciat dins vòstre sit SPIP, mas redirigit vers una autra URL. Per suprimir la redireccion, esfaçatz l’URL çai subre.', 'texte_aucun_resultat_auteur' => 'Brisa de resultat per "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Queste sit vos pòt indicar de contunh la tiera daus redactors connectats, çò que vos permet d’eschamjar daus messatges en directe. Podetz decidir de pas aparéisser dins quela tiera (setz "invisible/a" per los autres utilizaires).', - 'texte_auteur_messagerie_1' => 'Queu sit permet d’eschamjar daus messatges e de constituir daus forums de discussion privats entre los participants dau sit. Podetz decidir de pas participar a quilhs eschamges.', 'texte_auteurs' => 'LOS AUTORS', 'texte_choix_base_1' => 'Chausissetz vòstra basa:', 'texte_choix_base_2' => 'Lo servidor SQL conten mai d’una basa de donadas.', 'texte_choix_base_3' => 'Chausissetz çai sos la que vòstre auberjador vos a atribuida:', - 'texte_commande_vider_tables_indexation' => 'Utilizatz quela comanda per voidar las taulas d’indexacion utilizadas per lo cerchador integrat a SPIP. Quò lai permetrá - de ganhar de l’espaci disc.', - 'texte_compresse_ou_non' => '(Queste se pòt comprimir o non)', 'texte_compte_element' => '@count@ element', 'texte_compte_elements' => '@count@ elements', 'texte_connexion_mysql' => 'Consultatz las informacions que vòstre auberjador fornís: i devetz trobar, se vòstre auberjador supòrta SQL, los còdes de connexion au servidor SQL.', # MODIF @@ -556,10 +471,8 @@ una color indica lor estat:', 'texte_date_publication_anterieure' => 'DATA DE PUBLICACION ANTERIORA :', 'texte_date_publication_anterieure_nonaffichee' => 'Afichar brisa de data de publicacion anteriora.', 'texte_date_publication_article' => 'DATA DE PUBLICACION EN LINHA :', - 'texte_descriptif_petition' => 'Descriptiu de la peticion', 'texte_descriptif_rapide' => 'Descriptiu rapid', 'texte_effacer_base' => 'Esfaçar la basa de donadas SPIP', - 'texte_effacer_donnees_indexation' => 'Esfaçar las donadas d’indexacion', 'texte_en_cours_validation' => 'Se prepausa de publicar los articles e brevas çai sos. Esitetz pas per donar vòstre avís gràcias aus forums que i son estachats.', # MODIF 'texte_enrichir_mise_a_jour' => 'Podetz enrichir la compaginacion de vòstre text en utilizar de las "escorchieras tipograficas".', 'texte_fichier_authent' => 'Deu crear, SPIP, daus fichiers especiaus .htpasswd @@ -578,29 +491,16 @@ una color indica lor estat:', En queu cas, chau chamjar lo reglatge predefinit per fin d’utilizar un jòc de caracters apropriat. Oblidetz pas tanpauc d’adaptar lo sit public en consequéncia (balisa #CHARSET).', - 'texte_jeu_caractere_2' => 'Queste reglatge a brisa d’efiech retroactiu. Adonc - los texts ja sasits se pòden afichar - d’una maniera incorrecta après que s’aja modificat lo reglatge. Coma que siá - poiretz tornar sens damatge au reglatge precedent.', - 'texte_lien_hypertexte' => '(Se vòstre messatge se referís a un article publicat sus lo web, o a una pagina fornissent mai d’informacions, volhatz indicar çai sos lo títol de la pagina e son adreiça URL.)', 'texte_login_ldap_1' => '(Laissar voide per un accès anonim, o picar lo chamin complet, per exemple «uid=fabre, ou=usanciers, dc=mon-domeni, dc=com».)', 'texte_login_precaution' => 'Atencion! Quo es lo login emb lo quau setz aura connectat/ada. Utilizatz queste formulari emb precaucion...', - 'texte_message_edit' => 'Atencion: queste messatge, chasque redactor lo pòt veire, e chasque administrator dau sit lo pòt modificar. Utilizatz los anoncis nonmàs per expausar daus eveniments importants de la vida dau sit.', 'texte_mise_a_niveau_base_1' => 'Venetz d’actualizar los fichiers SPIP. Aura chau metre a niveu la basa de donadas dau sit.', 'texte_modifier_article' => 'Modificar l’article:', - 'texte_moteur_recherche_active' => 'Lo cerchador es activat. Utilizatz questa commanda - se voletz tornar indexar la basa rapidament (après restauracion - d’una sauvagarda per exemple). Notatz que los documents modificats de - maniera normala (a partir de l’interfàcia SPIP) se tornan indexar - automaticament: donc questa comanda es utila solament de maniera excepcionala.', - 'texte_moteur_recherche_non_active' => 'Lo cerchador es pas activat.', 'texte_multilinguisme' => 'Se desiratz de gerir daus articles en mai d’una lenga, emb una navigacion complexa, podetz apondre un menut per chausir la lenga daus articles e/o de las rubricas, en foncion de l’organizacion de vòstre sit.', # MODIF 'texte_multilinguisme_trad' => 'Podetz maitot activar un sistema de gestion daus liams entre las diferentas reviradas d’un article.', # MODIF 'texte_non_compresse' => 'non comprimit (per’mor que vòstre servidor supòrta pas quela foncionalitat)', - 'texte_nouveau_message' => 'Messatge nuòu', 'texte_nouvelle_version_spip_1' => 'Avetz installada una version novela d’SPIP.', 'texte_nouvelle_version_spip_2' => 'Questa version novela demanda una actualizacion mai completa que de costuma. Se setz webmestre/webmestra dau sit, volhatz esfaçar lo fichier inc_connect.php3 dau repertòri ecrire e tornar prene l’installacion per fin d’actualizar vòstres parametres de connexion a la basa de donadas.

    (NB: s’avetz oblidat vòstres parametres de connexion, agachatz lo fichier inc_connect.php3 avans de lo suprimir...)', # MODIF 'texte_operation_echec' => 'Tornatz a la pagina precedenta, chausissetz una autra basa o creatz-ne’n una novela. Verificatz las informacions que vòstre auberjador a fornidas.', @@ -619,7 +519,6 @@ una color indica lor estat:', 'texte_rappel_selection_champs' => '[Oblidetz pas de seleccionar queu champ correctament.]', 'texte_recalcul_page' => 'Se voletz tornar calcular nonmàs una pagina, passatz pusleu per l’espaci public e utilizatz lo boton "tornar calcular".', - 'texte_recapitiule_liste_documents' => 'Questa pagina recapitula la tiera daus documents qu’avetz plaçats dins las rubricas. Per modificar las informacions de chasque document, seguetz lo liam vers la pagina de sa rubrica.', 'texte_recuperer_base' => 'Reparar la basa de donadas', 'texte_reference_mais_redirige' => 'article referenciat dins vòstre sit SPIP, mas redirigit vers una autra URL.', 'texte_requetes_echouent' => 'Quand quauques requestas SQL frolhan @@ -647,7 +546,6 @@ dins l’escondedor SPIP. Quò permet per exemple de forçar un calcul nuòu de s’avetz bravament modificat lo grafisme o l’estructura dau sit.', 'texte_sur_titre' => 'Subretítol', 'texte_table_ok' => ': questa taula es condrecha.', - 'texte_tables_indexation_vides' => 'Las taulas d’indexacion dau motor son voidas.', 'texte_tentative_recuperation' => 'Assai de reparacion', 'texte_tenter_reparation' => 'Assajar de reparar la basa de donadas', 'texte_test_proxy' => 'Per assajar queu proxy, indicatz aicí l’adreiça d’un sit web @@ -662,26 +560,8 @@ s’avetz bravament modificat lo grafisme o l’estructura dau sit.', Quela opcion es desactivada de maniera predefinida per fin d’evitar d’afichar daus messatges d’avertiment intempestius.', - 'texte_trop_resultats_auteurs' => 'Tròp de resultats per "@cherche_auteur@" ; volhatz afinar la cercha.', - 'texte_unpack' => 'telecharjament de la darriera version', - 'texte_utilisation_moteur_syndiques' => 'Quand utilizatz lo cerchador integrat - a SPIP, podetz far las cerchas sus los sits e - articles sindicats de doas manieras - diferentas.
    Lo mai - simple consistís a cerchar solament dins los - títols e descriptius daus articles.
    - La segonda maniera, plan mai potenta, permet - a SPIP de cerchar maitot dins lo text daus - sits referenciats. - Se referenciatz un sit, aladonc SPIP fará la - cercha dins lo text dau quite sit.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Queu metòde obliga SPIP de vesitar - regularament los sits referenciats, - quò pòt alentir un pauc vòstre quite - sit.', 'texte_vide' => 'voide', 'texte_vider_cache' => 'Voidar l’escondedor', - 'titre_admin_effacer' => 'Mantenença tecnica', 'titre_admin_tech' => 'Mantenença tecnica', 'titre_admin_vider' => 'Mantenença tecnica', 'titre_cadre_afficher_article' => 'Afichar los articles', @@ -701,35 +581,20 @@ s’avetz bravament modificat lo grafisme o l’estructura dau sit.', 'titre_naviguer_dans_le_site' => 'Navigar per lo sit...', 'titre_nouvelle_rubrique' => 'Rubrica novela', 'titre_numero_rubrique' => 'RUBRICA NUMERO:', - 'titre_page_admin_effacer' => 'Mantenença tecnica: esfaçar la basa', 'titre_page_articles_edit' => 'Modificar: @titre@', 'titre_page_articles_page' => 'Los articles', 'titre_page_articles_tous' => 'Tot lo sit', - 'titre_page_auteurs' => 'Vesitaires', 'titre_page_calendrier' => 'Chalendier @nom_mois@ de @annee@', 'titre_page_config_contenu' => 'Configuracion dau sit', - 'titre_page_config_fonctions' => 'Configuracion dau sit', - 'titre_page_configuration' => 'Configuracion dau sit', - 'titre_page_controle_petition' => 'Segut de las peticions', 'titre_page_delete_all' => 'supression totala e irreversibla', - 'titre_page_documents_liste' => 'Los documents de las rubricas', - 'titre_page_index' => 'Vòstre espaci privat', - 'titre_page_message_edit' => 'Redigir un messatge', - 'titre_page_messagerie' => 'Vòstra messatjariá', 'titre_page_recherche' => 'Resultats de la cercha @recherche@', 'titre_page_statistiques_referers' => 'Estadisticas (liams entrants)', 'titre_page_upgrade' => 'Mesa a niveu d’SPIP', 'titre_publication_articles_post_dates' => 'Publicacion daus articles pòstdatats', - 'titre_referencer_site' => 'Referenciar lo sit:', - 'titre_rendez_vous' => 'RENDETZ-VOS:', 'titre_reparation' => 'Reparacion', 'titre_suivi_petition' => 'Segut de las peticions', - 'trad_article_inexistant' => 'I a brisa d’article que pòrte queu numero.', 'trad_article_traduction' => 'Totas las versions de quel article:', - 'trad_deja_traduit' => 'Quel article ja es una revirada de l’article present.', 'trad_delier' => 'Pas mai liar queste article a sas reviradas ', # MODIF 'trad_lier' => 'Queste article es una revirada de l’article numero:', 'trad_new' => 'Escriure una revirada novela de queste article' # MODIF ); - -?> diff --git a/www/ecrire/lang/ecrire_oc_lnc.php b/www/ecrire/lang/ecrire_oc_lnc.php index 2f8b2796..489c1983 100644 --- a/www/ecrire/lang/ecrire_oc_lnc.php +++ b/www/ecrire/lang/ecrire_oc_lnc.php @@ -1,9 +1,11 @@ 'Tornatz a la pagina anteriora, e verificatz las informacions qu’avètz fornidas. ', 'avis_connexion_ldap_echec_3' => 'Alternativament, utilizetz pas lo supòrt LDAP per importar d’utilizaires.', 'avis_deplacement_rubrique' => 'Atention! Aquela rubrica conten @contient_breves@ brèvas@scb@: se la desplaçatz, voldretz ben oscar aquela casa de confirmacion.', - 'avis_destinataire_obligatoire' => 'Devètz indicar un destinatari abans de mandar aquel messatge.', 'avis_erreur_connexion_mysql' => 'Error de connexion SQL', - 'avis_erreur_version_archive' => 'Atencion! Lo fichièr @archive@ correspond a una autra version d’SPIP que la qu’avètz installada. Anatz cap a de dificultats grandassas: risca de destruccion de vòstra basa de donadas, disfoncionaments divèrses del sit, etc. Validetz pas aquela demanda d’importacion.

    Per mai d’informacions, vejatz - -la documentacion d’SPIP.', # MODIF - 'avis_espace_interdit' => 'Espaci proïbit

    SPIP es ja installat.
    ', + 'avis_espace_interdit' => 'Espaci proïbit
    SPIP es ja installat.
    ', 'avis_lecture_noms_bases_1' => 'Lo programa d’installacion a pas pogut legir los noms de las basas de donadas installadas.', 'avis_lecture_noms_bases_2' => 'Siá cap de basa es pas disponibla, siá la foncion que permet d’entierar las basas es estada desactivada per de rasons de seguretat (aquò’s lo cas en cò de mai d’un albergador).', 'avis_lecture_noms_bases_3' => 'Dins la segonda alternativa, es probable qu’una basa que pòrta lo vòstre nom de login siá utilizabla:', - 'avis_non_acces_message' => 'Podètz pas accedir a aquel messatge.', 'avis_non_acces_page' => 'Podètz pas accedir a aquela pagina.', 'avis_operation_echec' => 'L’operacion a abocat.', 'avis_operation_impossible' => 'Operacion impossibla', - 'avis_probleme_archive' => 'Problèma de lectura del fichièr @archive@', 'avis_suppression_base' => 'ATENCION, suprimir las donadas es irreversible', - 'avis_version_mysql' => 'Vòstre servidor SQL (@version_mysql@) permet pas l’autoreparacion de las taulas de la basa.', // B 'bouton_acces_ldap' => 'Apondre l’accès a LDAP >>', 'bouton_ajouter' => 'Apondre', - 'bouton_ajouter_participant' => 'APONDRE UN PARTICIPANT:', - 'bouton_annonce' => 'ANONCI', 'bouton_annuler' => 'Anullar', - 'bouton_checkbox_envoi_message' => 'possibilitat de mandar un messatge', - 'bouton_checkbox_indiquer_site' => 'indicar obligatòriament un sit web', - 'bouton_checkbox_signature_unique_email' => 'sonque una signatura per adreiça e-mail', - 'bouton_checkbox_signature_unique_site' => 'sonque una signatura per sit web', 'bouton_demande_publication' => 'Demandar la publicacion d’aqueste article', 'bouton_desactive_tout' => 'Desactivar tot', 'bouton_desinstaller' => 'Desinstallar', - 'bouton_effacer_index' => 'Escafar los indèxes', 'bouton_effacer_tout' => 'O escafar tot', - 'bouton_envoi_message_02' => 'MANDAR UN MESSATGE', 'bouton_envoyer_message' => 'Messatge definitiu: mandar', 'bouton_modifier' => 'Modificar', - 'bouton_pense_bete' => 'MEMENTO (D’USATGE PERSONAL)', - 'bouton_radio_activer_messagerie' => 'Activar la messatjariá intèrna', - 'bouton_radio_activer_messagerie_interne' => 'Activar la messatjariá intèrna', - 'bouton_radio_activer_petition' => 'Activar la peticion', 'bouton_radio_afficher' => 'Afichar', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Afichar dins la tièra dels redactors connectats', - 'bouton_radio_desactiver_messagerie' => 'Desactivar la messatjariá', 'bouton_radio_envoi_annonces_adresse' => 'Mandar los anoncis a l’adreiça:', 'bouton_radio_envoi_liste_nouveautes' => 'Mandar la tièra de las novetats', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Aparéisser pas dins la tièra dels redactors', 'bouton_radio_non_envoi_annonces_editoriales' => 'Mandar pas d’anoncis editorials', - 'bouton_radio_pas_petition' => 'Pas cap de peticion', - 'bouton_radio_petition_activee' => 'Peticion activada', - 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', 'bouton_redirection' => 'TORNAR DIRIGIR', 'bouton_relancer_installation' => 'Tornar lançar l’installacion', 'bouton_suivant' => 'Seguent', 'bouton_tenter_recuperation' => 'Ensajar de reparar', 'bouton_test_proxy' => 'Ensajar lo proxy', 'bouton_vider_cache' => 'Vojar l’escondedor', - 'bouton_voir_message' => 'Veire aquel messatge abans de lo validar', // C - 'cache_mode_compresse' => 'Los fichièrs de l’escondedor son registrats en mòde comprimit.', - 'cache_mode_non_compresse' => 'Los fichièrs de l’escondedor son registrats en mòde non comprimit.', 'cache_modifiable_webmestre' => 'Lo webmèstre del sit pòt modificar aqueste paramètre.', 'calendrier_synchro' => 'S’utilizatz un logicial d’agenda compatible iCal, lo podètz sincronizar amb las informacions d’aqueste sit.', 'config_activer_champs' => 'Activar los camps seguents', @@ -94,7 +70,6 @@ la documentacion d’SPIP.', # MODIF 'config_info_redirection' => 'En activar aquela opcion, vous poirretz crear d’articles virtuals, que son de referéncias a d’articles publicats sus d’autres sits o fòra SPIP.', 'config_redirection' => 'Articles virtuals', 'connexion_ldap' => 'Conexion :', - 'copier_en_local' => 'Copiar en local', // D 'date_mot_heures' => 'oras', @@ -120,7 +95,6 @@ L’administrator del sistèma o de la ret vos deu poder fornir 'entree_login' => 'Lo vòstre login', 'entree_login_connexion_1' => 'Lo login de connexion', 'entree_login_connexion_2' => '(Correspond de còps al vòstre login d’accès a l’FTP; de còps se daissa vuèg)', - 'entree_login_ldap' => 'Login LDAP inicial', 'entree_mot_passe' => 'Vòstre mot de santa Clara', 'entree_mot_passe_1' => 'Mot de santa Clara per la connexion', 'entree_mot_passe_2' => '(Correspond de còps a vòstre mot de santa Clara per l’FTP; de còps se daissa vuèg)', @@ -147,7 +121,7 @@ L’administrator del sistèma o de la ret vos deu poder fornir 'ical_info2' => 'Per téner mai d’informacions subre aquelas tecnicas, esitetz pas de consultar la documentacion d’SPIP.', # MODIF 'ical_info_calendrier' => 'I a dos calendièrs a la vòstra disposicion. Lo primièr es un plan del sit qu’anóncia totes los articles publicats. Lo segond conten los anoncis editorials en mai de vòstres darrièrs messatges privats: vos es reservat gràcias a una clau personala, que la podètz modificar en tot moment en renovant vòstre mot de santa Clara. ', 'ical_methode_http' => 'Telecargament', - 'ical_methode_webcal' => 'Sincronizacion (webcal://)', + 'ical_methode_webcal' => 'Sincronizacion (webcal://)', # MODIF 'ical_texte_js' => 'Los articles publicats en aquel sit se pòdon afichar aisit, dins totes los sits vòstres, en far servir una linha javascript. ', 'ical_texte_prive' => 'Aquel calendièr, d’us estrictament personal, vos informa de l’activitat editoriala privada d’aquel sit (òbras e rendètz-vos personals, articles e brèvas prepausats...).', 'ical_texte_public' => 'Aquel calendièr vos permet de seguir l’activitat publica d’aquel sit (articles e brèvas publicats).', @@ -163,12 +137,8 @@ L’administrator del sistèma o de la ret vos deu poder fornir 'icone_calendrier' => 'Calendièr', 'icone_creer_auteur' => 'Crear un autor nòu e l’associar a aquel article', 'icone_creer_mot_cle' => 'Crear un mot clau nòu e lo ligar a aquel article', - 'icone_creer_mot_cle_rubrique' => 'Crear un mot-clau nòu e lo ligar a aquela rubrica', - 'icone_creer_mot_cle_site' => 'Crear un mot-clau nòu e lo ligar a aquel sit', 'icone_creer_rubrique_2' => 'Crear una rubrica nòva', - 'icone_envoyer_message' => 'Mandar aquel messatge', 'icone_modifier_article' => 'Modificar aquel article', - 'icone_modifier_message' => 'Modificar aquel messatge', 'icone_modifier_rubrique' => 'Modificar aquela rubrica', 'icone_retour' => 'Tornar', 'icone_retour_article' => 'Tornar a l’article', @@ -178,10 +148,7 @@ L’administrator del sistèma o de la ret vos deu poder fornir 'icone_valider_signature' => 'Validar aquela signatura', 'image_administrer_rubrique' => 'Podètz administrar aquela rubrica', 'info_1_article' => '1 article', - 'info_1_site' => '1 sit', 'info_activer_cookie' => 'Podètz activar un cookie de correspondéncia; aquò vos permetrà de passar aisit del sit public al sit privat.', - 'info_admin_gere_rubriques' => 'Aquel administrator gerís las rubricas seguentas :', - 'info_admin_gere_toutes_rubriques' => 'Aquel administrator gerís totas las rubricas.', # MODIF 'info_administrateur' => 'Administrator', 'info_administrateur_1' => 'Administrator', 'info_administrateur_2' => 'del sit(d’utilizar amb precaucion)', @@ -191,13 +158,10 @@ L’administrator del sistèma o de la ret vos deu poder fornir 'info_administrer_rubrique' => 'Podètz administrar aquela rubrica', 'info_adresse' => 'a l’adreiça:', 'info_adresse_url' => 'Adreiça (URL) del sit public', - 'info_afficher_visites' => 'Afichar las vesitas per:', 'info_aide_en_ligne' => 'Ajuda en linha SPIP', 'info_ajout_image' => 'Quand apondètz d’imatges coma estacaments jonches a un article, SPIP pòt crear automaticament per vos de vinhetas (miniaturas) dels imatges inserits. Aquò permet per exemple de crear automaticament una galariá o un pòrtfòlio.', - 'info_ajout_participant' => 'Lo participant seguent es apondut :', 'info_ajouter_rubrique' => 'Apondre una autra rubrica d’administrar:', 'info_annonce_nouveautes' => 'Anonci de las novetats', - 'info_anterieur' => 'anteriora', 'info_article' => 'article', 'info_article_2' => 'articles', 'info_article_a_paraitre' => 'Los articles pòstdatats per paréisser', @@ -205,10 +169,8 @@ L’administrator del sistèma o de la ret vos deu poder fornir 'info_articles_2' => 'Articles', 'info_articles_auteur' => 'Los articles d’aquel autor', 'info_articles_trouves' => 'Articles trobats', - 'info_articles_trouves_dans_texte' => 'Articles trobats (dins lo tèxt)', 'info_attente_validation' => 'Vòstres articles en espèra de validacion', 'info_aujourdhui' => 'uèi :', - 'info_auteur_message' => 'AUTOR DEL MESSATGE:', 'info_auteurs' => 'Los autors', 'info_auteurs_par_tri' => 'autors@partri@', 'info_auteurs_trouves' => 'Autors trobats', @@ -241,8 +203,6 @@ L’administrator del sistèma o de la ret vos deu poder fornir 'info_date_publication_anterieure' => 'Data de redaccion anteriora:', 'info_date_referencement' => 'DATA DE REFERÉNCIAMENT D’AQUEL SIT:', 'info_derniere_etape' => 'Es acabat!', - 'info_derniers_articles_publies' => 'Vòstres darrièrs articles publicats en linha', - 'info_desactiver_messagerie_personnelle' => 'Podètz activar o desactivar vòstra messatjariá personala sus aquel sit.', 'info_descriptif' => 'Descriptiu :', 'info_desinstaller_plugin' => 'suprimís las donadas et desactiva l’ajuston ', 'info_discussion_cours' => 'Discussions en cors', @@ -250,7 +210,6 @@ L’administrator del sistèma o de la ret vos deu poder fornir 'info_email_envoi' => 'Adreiça e-mail de mandadís (opcional)', 'info_email_envoi_txt' => 'Indicatz aicí l’adreiça d’utilizar per enviar los e-mails (a fauta d’aquò, s’utilizarà l’adreiça destinatari coma adreiça de mandadís):', 'info_email_webmestre' => 'Adreiça e-mail del responsable del sit (opcional)', # MODIF - 'info_entrer_code_alphabet' => 'Picatz lo còde de l’alfabet d’utilizar:', 'info_envoi_email_automatique' => 'Mandadís d’e-mails automatics', 'info_envoyer_maintenant' => 'Mandar ara', 'info_etape_suivante' => 'Passar a l’estapa seguenta', @@ -260,27 +219,19 @@ L’administrator del sistèma o de la ret vos deu poder fornir 'info_facilite_suivi_activite' => 'Per facilitar lo seguit de l’activitat editoriala del sit, SPIP vos pòt fornir per e-mail, per exemple a una lista de corrièr dels redactors, l’anonci de las demandas de publicacion e de las validacions d’articles.', 'info_fichiers_authent' => 'Fichièrs d’autentificacion « .htpasswd »', 'info_forums_abo_invites' => 'Vòstre sit web porgís de forums pels abonats; dins lo sit public los vesitaires son convidats a se registrar.', - 'info_gauche_admin_effacer' => 'A aquela pagina, sonque los responsables del sit i pòdon accedir.

    Permet de trobar las diferentas foncions de mantenença tecnica. D’unas que i a implican un procès d’autentificacion especific, que necessita un accès FTP al sit web.

    ', # MODIF 'info_gauche_admin_tech' => 'A aquela pagina, sonque los responsables del sit i pòdon accedir.

    Permet de trobar las diferentas foncions de mantenença tecnica. D’unas que i a implican un procès d’autentificacion especific, que necessita un accès FTP al sit web.

    ', # MODIF 'info_gauche_admin_vider' => 'A aquela pagina, sonque los responsables del sit i pòdon accedir.

    Permet de trobar las diferentas foncions de mantenença tecnica. D’unas que i a implican un procès d’autentificacion especific, que necessita un accès FTP al sit web.

    ', # MODIF 'info_gauche_auteurs' => 'Trobaretz aicí totes los autors del sit. La color de las icònas n’indica l’estatut (administrator = verd; redactor = jaune).', 'info_gauche_auteurs_exterieurs' => 'Los autors exteriors, sens accès al sit, son indicats per una icòna blava; los autors escafats per un bordilhièr.', # MODIF 'info_gauche_messagerie' => 'La messatjariá vos permet d’escambiar de messatges entre redactors, de servar de mementos (per vòstre usatge personal) o d’afichar d’anoncis sus la pagina d’acuèlh de l’espaci privat (se sètz administrator/tritz).', - 'info_gauche_numero_auteur' => 'AUTOR NUMÈRO', 'info_gauche_statistiques_referers' => 'Aquela pagina presenta la lista dels referidors, valent a dire dels sits que contenon de ligams menant cap a vòstre quite sit, mas unicament per ièr e uèi: aquela lista s’actualiza cada 24 oras.', 'info_gauche_visiteurs_enregistres' => 'Trobaretz aquí los vesitaires registrats dins l’espaci public del sit (forums amb abonament).', 'info_generation_miniatures_images' => 'Congreacion de miniaturas dels imatges', - 'info_gerer_trad' => 'Gerir los ligams de revirada?', 'info_hebergeur_desactiver_envoi_email' => 'D’unes albergadors desactivan lo mandadís automatic d’e-mails dempuèi lors servidors. En aquel cas, las foncionalitats seguentas d’SPIP foncionaràn pas.', 'info_hier' => 'ièr:', - 'info_historique_activer' => 'Activar lo seguiment de las revisions', - 'info_historique_affiche' => 'Afichar aquela version', - 'info_historique_comparaison' => 'comparason', - 'info_historique_desactiver' => 'Desactivar lo seguiment de las revisions', - 'info_historique_texte' => 'Lo seguiment de las revisions permet de servar un istoric de totas las modificacions que s’es portat al contengut d’un article, e d’afichar las diferéncias entre las versions successivas.', 'info_identification_publique' => 'Vòstra identitat publica...', 'info_image_process' => 'Volgatz seleccionar lo melhor metòde de fabricacion de las vinhetas en clicar sus l’imatge correspondent.', 'info_image_process2' => 'N.B. Se cap d’imatge apareis pas, aladonc lo servidor qu’albèrga vòstre sit l’an pas configurat per utilizar d’aisinas talas. Se desiratz d’utilizar aquelas foncions, contactatz lo responsable tecnic e demandatz las extensions «GD» o «Imagick».', # MODIF @@ -299,8 +250,6 @@ L’administrator del sistèma o de la ret vos deu poder fornir 'info_logos' => 'Los lògos', 'info_maximum' => 'maximum:', 'info_meme_rubrique' => 'Dins la meteissa rubrica', - 'info_message' => 'Messatge del', - 'info_message_efface' => 'MESSATGE ESCAFAT', 'info_message_en_redaction' => 'Vòstres messatges en cors de redaccion', 'info_message_technique' => 'Messatge tecnic:', 'info_messagerie_interne' => 'Messatjariá intèrna', @@ -313,20 +262,15 @@ L’administrator del sistèma o de la ret vos deu poder fornir 'info_modifier_rubrique' => 'Modificar la rubrica:', 'info_modifier_titre' => 'Modificar: @titre@', 'info_mon_site_spip' => 'Mon sit SPIP', - 'info_mot_sans_groupe' => '(Mots fòra grop...)', - 'info_moteur_recherche' => 'Cercador integrat', 'info_moyenne' => 'mejana:', - 'info_multi_articles' => 'Activar lo menut de lenga pels articles?', 'info_multi_cet_article' => 'Lenga d’aqueste article:', 'info_multi_langues_choisies' => 'Volgatz seleccionar çai sota las lengas que son a posita dels redactors de vòstre sit. Las lengas ja emplegadas dins vòstre sit (afichadas primièras) se pòdon pas desactivar.', - 'info_multi_rubriques' => 'Activar lo menut de lenga per las rubricas?', 'info_multi_secteurs' => '... sonque per las rubricas a la raiç del sit?', 'info_nom' => 'Nom', 'info_nom_destinataire' => 'Nom del destinatari', 'info_nom_site' => 'Nom del vòstre sit', 'info_nombre_articles' => '@nb_articles@ articles,', - 'info_nombre_partcipants' => 'PARTICIPANTS A LA DISCUSSION:', 'info_nombre_rubriques' => '@nb_rubriques@ rubricas,', 'info_nombre_sites' => '@nb_sites@ sits,', 'info_non_deplacer' => 'De desplaçar pas...', @@ -336,17 +280,13 @@ L’administrator del sistèma o de la ret vos deu poder fornir 'info_non_modifiable' => 'se pòt pas modificar', 'info_non_suppression_mot_cle' => 'vòli pas suprimir aquel mot clau.', 'info_notes' => 'Nòtas', - 'info_nouveaux_message' => 'Messatges nòus', 'info_nouvel_article' => 'Article nòu', 'info_nouvelle_traduction' => 'Revirada nòva:', 'info_numero_article' => 'ARTICLE NUMÈRO:', 'info_obligatoire_02' => '[Obligatòri]', # MODIF 'info_option_accepter_visiteurs' => 'Acceptar l’inscripcion dels vesitaires del sit public', - 'info_option_faire_suivre' => 'Far seguir los messatges dels forums als autors dels articles', 'info_option_ne_pas_accepter_visiteurs' => 'Refusar l’inscripcion de vesitaires', 'info_options_avancees' => 'OPCIONS AVANÇADAS', - 'info_ortho_activer' => 'Activar lo verificador d’ortografia', - 'info_ortho_desactiver' => 'Desactivar lo verificador d’ortografia', 'info_ou' => 'o... ', 'info_page_interdite' => 'Pagina proïbida', 'info_par_nom' => 'per nom', @@ -355,20 +295,14 @@ L’administrator del sistèma o de la ret vos deu poder fornir 'info_par_tri' => '’(per @tri@)’', 'info_passe_trop_court' => 'Mot de santa Clara tròp cort.', 'info_passes_identiques' => 'Los dos mots de santa Clara son pas identics.', - 'info_pense_bete_ancien' => 'Vòstres mementos ancians ', # MODIF 'info_plus_cinq_car' => 'mai de 5 caractèrs', 'info_plus_cinq_car_2' => '(mai de 5 caractèrs)', 'info_plus_trois_car' => '(mai de 3 caractèrs)', 'info_popularite' => 'popularitat: @popularite@; vesitas: @visites@', - 'info_popularite_4' => 'popularitat: @popularite@; vesitas: @visites@', 'info_post_scriptum' => 'Post-scriptum', 'info_post_scriptum_2' => 'Post-scriptum:', 'info_pour' => 'per', - 'info_preview_admin' => 'Solament los administrators pòdon previsualizar lo sit', - 'info_preview_comite' => 'Totes los redactors pòdon previsualizar lo sit', - 'info_preview_desactive' => 'La previsualizacion es del tot desactivada', - 'info_preview_texte' => 'Es possible de previsualizar lo sit coma s’avián publicat totes los articles e brèvas (que tenon almens l’estatut "prepausat"). La cal dobrir, aquela possibilitat, als administrators sonque, a totes los redactors, o pas a degun?', - 'info_principaux_correspondants' => 'Vòstres correspondents principals', + 'info_preview_texte' => 'Es possible de previsualizar lo sit coma s’avián publicat totes los articles e brèvas (que tenon almens l’estatut "prepausat"). La cal dobrir, aquela possibilitat, als administrators sonque, a totes los redactors, o pas a degun?', # MODIF 'info_procedez_par_etape' => 'procedissètz estapa per estapa', 'info_procedure_maj_version' => 'Cal lançar la procedura d’actualizacion per adaptar la basa de donadas a la version novèla d’SPIP.', @@ -384,12 +318,9 @@ L’administrator del sistèma o de la ret vos deu poder fornir que lor baila un còde d’accès al sit privat. D’unes albergadors autorizan pas lo mandadís d’e-mails dempuèi lors servidors: en aquel cas, l’inscripcion automatica es impossibla.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Desiratz d’utilizar lo cercador integrat a SPIP? (lo desactivar abriva lo foncionament del sistèma.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Raiç del sit', 'info_recharger_page' => 'Volgatz tornar cargar aquela pagina dins un momenton.', - 'info_recherche_auteur_a_affiner' => 'Tròp de resultats per "@cherche_auteur@"; volgatz afinar la cèrca.', - 'info_recherche_auteur_ok' => 'Mai d’un redactor trobat per "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Pas cap de resultat trobat per « @cherche_auteur@ ».', 'info_recommencer' => 'Volgatz tornar començar.', 'info_redacteur_1' => 'Redactor', @@ -406,7 +337,6 @@ D’unes albergadors autorizan pas lo mandadís d’e-mails dempuèi lors servid 'info_rubriques' => 'Rubricas', 'info_rubriques_02' => 'rubricas', 'info_rubriques_trouvees' => 'Rubricas trobadas', - 'info_rubriques_trouvees_dans_texte' => 'Rubricas trobadas (dins lo tèxt)', 'info_sans_titre' => 'Sens títol', 'info_selection_chemin_acces' => 'Seleccionatz çai sota lo camin d’accès dins l’annuari:', 'info_signatures' => 'signaturas', @@ -419,13 +349,11 @@ D’unes albergadors autorizan pas lo mandadís d’e-mails dempuèi lors servid 'info_sites_lies_mot' => 'Los sits referenciats ligats a aquel mot clau', 'info_sites_proxy' => 'Utilizar un proxy', 'info_sites_trouves' => 'Sits trobats', - 'info_sites_trouves_dans_texte' => 'Sits trobats (dins lo tèxt)', 'info_sous_titre' => 'Sostítol:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Estatut d’aquel autor:', # MODIF 'info_statut_auteur_a_confirmer' => 'Inscripcion de confirmar', 'info_statut_auteur_autre' => 'Autre estatut :', - 'info_statut_efface' => 'Escafat', 'info_statut_redacteur' => 'Redactor', 'info_statut_utilisateurs_1' => 'Estatut predefinit dels utilizaires importats', 'info_statut_utilisateurs_2' => 'Causissètz l’estatut d’atribuir a las personas presentas dins l’annuari LDAP quora se connèctan pel primièr còp. Poiretz puèi modificar aquel estatut per cada autor un cas per un.', @@ -446,7 +374,6 @@ D’unes albergadors autorizan pas lo mandadís d’e-mails dempuèi lors servid 'info_tous_articles_en_redaction' => 'Totes los articles en cors de redaccion', 'info_tous_articles_presents' => 'Totes los articles publicats dins aquela rubrica', 'info_tous_les' => 'totes los:', - 'info_tous_redacteurs' => 'Anoncis a totes los redactors ', 'info_tout_site' => 'Tot lo sit ', 'info_tout_site2' => 'An pas revirat l’article dins aquela lenga.', 'info_tout_site3' => 'An revirat l’article dins aquela lenga, mas an portat puèi de modificacions a l’article de referéncia. Cal actualizar la revirada.', @@ -461,7 +388,6 @@ una color indica lor estat:', 'info_une_rubrique' => 'una rubrica, ', 'info_une_rubrique_02' => '1 rubrica', 'info_url' => 'URL :', - 'info_url_site' => 'URL DEL SIT :', 'info_urlref' => 'Ligam ipertèxt:', 'info_utilisation_spip' => 'Ara podètz començar d’utilizar lo sistèma de publicacion assistida...', 'info_visites_par_mois' => 'Afichatge per mes:', @@ -484,8 +410,6 @@ una color indica lor estat:', 'item_activer_messages_avertissement' => 'Activar los messatges d’avertiment', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Afichar dins lo calendièr', - 'item_autoriser_documents_joints' => 'Autorizar que se jonga de documents als articles', - 'item_autoriser_documents_joints_rubriques' => 'Autorizar los documents dins las rubricas', 'item_autoriser_syndication_integrale' => 'Difusar l’integralitat dels articles dins los fichièrs de sindicacion', 'item_choix_administrateurs' => 'los administrators', 'item_choix_generation_miniature' => 'Congrear automaticament las miniaturas dels imatges.', @@ -493,7 +417,6 @@ una color indica lor estat:', 'item_choix_redacteurs' => 'los redactors', 'item_choix_visiteurs' => 'los vesitaires del sit public', 'item_creer_fichiers_authent' => 'Crear de fichièrs .htpasswd', - 'item_limiter_recherche' => 'Limitar la cèrca a las informacions contengudas dins vòstre sit', 'item_login' => 'Login', 'item_mots_cles_association_articles' => 'als articles', 'item_mots_cles_association_rubriques' => 'a las rubricas', @@ -502,35 +425,25 @@ una color indica lor estat:', 'item_non_accepter_inscriptions' => 'Acceptar pas las inscripcions', 'item_non_activer_messages_avertissement' => 'Pas cap de messatge d’avertiment', 'item_non_afficher_calendrier' => 'De pas afichar dins lo calendièr', - 'item_non_autoriser_documents_joints' => 'Autorizar pas los documents dins los articles', - 'item_non_autoriser_documents_joints_rubriques' => 'Autorizar pas los documents dins las rubricas', 'item_non_autoriser_syndication_integrale' => 'Ne difusar pas qu’un resumit', 'item_non_creer_fichiers_authent' => 'Crear pas aqueles fichièrs', - 'item_non_gerer_statistiques' => 'Gerir pas las estadisticas', - 'item_non_limiter_recherche' => 'Alargar la cèrca al contengut dels sits referenciats', 'item_non_publier_articles' => 'Publicar pas los articles abans la data de publicacion prevista.', - 'item_non_utiliser_moteur_recherche' => 'Utilizar pas lo motor', 'item_nouvel_auteur' => 'Autor nòu', 'item_nouvelle_rubrique' => 'Rubrica nòva', 'item_oui' => 'Òc', 'item_publier_articles' => 'Publicar los articles, quina que siá sa data de publicacion', 'item_reponse_article' => 'Responsa a l’article', - 'item_utiliser_moteur_recherche' => 'Utilizar lo cercador', 'item_visiteur' => 'vesitaire', // J 'jour_non_connu_nc' => 'n.c.', // L - 'lien_ajout_destinataire' => 'Apondre aquel destinatari', 'lien_ajouter_auteur' => 'Apondre aquel autor', - 'lien_ajouter_participant' => 'Apondre un participant', 'lien_email' => 'e-mail', 'lien_nom_site' => 'NOM DEL SIT :', 'lien_retirer_auteur' => 'Levar l’autor', - 'lien_retrait_particpant' => 'Levar aquel participant', 'lien_site' => 'sit', - 'lien_supprimer_rubrique' => 'suprimir aquela rubrica', 'lien_tout_deplier' => 'O desplegar tot', 'lien_tout_replier' => 'Tornar plegar', 'lien_tout_supprimer' => 'Suprimir tot', @@ -564,13 +477,14 @@ una color indica lor estat:', 'plugin_etat_stable' => 'estable', 'plugin_etat_test' => 'a l’ensag', 'plugin_impossible_activer' => 'Impossible d’activar l’ajuston @plugin@', - 'plugin_necessite_plugin' => 'Demanda l’ajuston @plugin@ en version @version@ al mens.', + 'plugin_necessite_plugin' => 'Demanda l’ajuston @plugin@ en version @version@ al mens.', # MODIF 'plugin_necessite_spip' => 'Demanda SPIP en version @version@ al mens.', 'plugins_liste' => 'Tièra dels ajustons', 'protocole_ldap' => 'Version del protocòl :', // R 'repertoire_plugins' => 'Repertòri :', + 'required' => '[Obligatòri]', # MODIF // S 'statut_admin_restreint' => '(admin. restrench)', # MODIF @@ -594,15 +508,11 @@ una color indica lor estat:', 'texte_article_virtuel_reference' => 'Article virtual: article referenciat dins vòstre sit SPIP, mas redirigit cap a una autra URL. Per suprimir la redireccion, escafatz l’URL çai subre.', 'texte_aucun_resultat_auteur' => 'Cap de resultat per "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Aqueste sit vos pòt indicar de contunh la tièra dels redactors connectats, çò que vos permet d’escambiar de messatges en dirècte. Podètz decidir d’aparéisser pas dins aquela lista (sètz "invisible/a" pels autres utilizaires).', - 'texte_auteur_messagerie_1' => 'Aquel sit permet d’escambiar de messatges e de constituir de forums de discussion privats entre los participants del sit. Podètz decidir de participar pas a aqueles escambis.', 'texte_auteurs' => 'LOS AUTORS', 'texte_choix_base_1' => 'Causissètz vòstra basa:', 'texte_choix_base_2' => 'Lo servidor SQL conten mai d’una basa de donadas.', 'texte_choix_base_3' => 'Causissètz çai sota la que vòstre albergador vos a atribuida:', 'texte_choix_table_prefix' => 'Prefix de las taulas :', - 'texte_commande_vider_tables_indexation' => 'Utilizatz aquela comanda per vojar las taulas d’indexacion utilizadas pel cercador integrat a SPIP. Aquò permetrà - de ganhar d’espaci disc.', - 'texte_compresse_ou_non' => '(Aqueste se pòt comprimir o non)', 'texte_compte_element' => '@count@ element', 'texte_compte_elements' => '@count@ elements', 'texte_connexion_mysql' => 'Consultatz las informacions que vòstre albergador fornís: i devètz trobar los còdes de connexion al servidor SQL.', # MODIF @@ -618,10 +528,8 @@ una color indica lor estat:', 'texte_date_publication_anterieure' => 'Data de redaccion anteriora:', 'texte_date_publication_anterieure_nonaffichee' => 'Afichar pas cap de data de redaccion anteriora.', 'texte_date_publication_article' => 'DATA DE PUBLICACION EN LINHA :', - 'texte_descriptif_petition' => 'Descriptiu de la peticion', 'texte_descriptif_rapide' => 'Descriptiu rapid', 'texte_effacer_base' => 'Escafar la basa de donadas SPIP', - 'texte_effacer_donnees_indexation' => 'Escafar las donadas d’indexacion', 'texte_en_cours_validation' => 'Se prepausa de publicar los articles e brèvas çai sota. Esitetz pas de donar lo vòstre vejaire gràcias als forums que i son estacats.', # MODIF 'texte_enrichir_mise_a_jour' => 'Podètz enriquir la compaginacion del vòstre tèxt en utilizar d’"acorchas tipograficas".', 'texte_fichier_authent' => 'Deu crear, SPIP, de fichièrs especials .htpasswd @@ -636,29 +544,18 @@ una color indica lor estat:', 'texte_informations_personnelles_2' => '(Nòta: se s’agís d’una reïnstallacion, e se vòstre accès fonciona encara, podètz', # MODIF 'texte_introductif_article' => '(Tèxt introductiu de l’article.)', 'texte_jeu_caractere' => 'S’aconselha d’emplegar, sus vòstre sit, l’alfabet universal (utf-8) :permet d’afichar totas las lengas, e pausa pas pus de problèmas de compatibilitat amb los navigators modèrnes.', - 'texte_jeu_caractere_2' => 'Atencion : Aqueste reglatge convertís pas los tèxtes ja enregistrats dins la basa de donadas. ', 'texte_jeu_caractere_3' => 'Vòstre sit es per ara installat amb lo jòc de caractèrs :', 'texte_jeu_caractere_4' => 'En cas qu’aquò corresponda pas a la realitat de vòstras donadas), o que comencetz a pro pena aquel sit e desiretz causir un autre jòc de caractèrs, indicatz-lo aicí : ', - 'texte_jeu_caractere_conversion' => 'Nòta : podètz decidir de convertir un còp per totes l’ensem dels tèxtes de vòstre sit (articles, brèvas, forums, etc.) cap a l’alfabet utf-8, en anar a la pagina de conversion vèrs l’utf-8.', - 'texte_lien_hypertexte' => '(Se vòstre messatge se referís a un article publicat sul web, o a una pagina fornissent mai d’informacions, volgatz indicar çai sota lo títol de la pagina e son adreiça URL.)', 'texte_login_ldap_1' => '(Daissar vuèg per un accès anonim, o picar lo camin complet, per exemple «uid=fabre, ou=usanciers, dc=mon-domeni, dc=com».)', 'texte_login_precaution' => 'Atencion! Aquò’s lo login amb lo qual sètz ara connectat/ada. Utilizatz aqueste formulari amb precaucion...', - 'texte_message_edit' => 'Atencion: aqueste messatge, cada redactor lo pòt veire, e cada administrator del sit lo pòt modificar. Utilizatz los anoncis pas que per expausar d’eveniments importants de la vida del sit.', 'texte_mise_a_niveau_base_1' => ' Venètz d’actualizar los fichièrs SPIP. Ara cal metre a nivèl la basa de donadas del sit.', 'texte_modifier_article' => 'Modificar l’article:', - 'texte_moteur_recherche_active' => 'Lo cercador es activat. Utilizatz aquesta commanda - se volètz tornar indexar la basa rapidament (aprèp restauracion - d’una salvagarda per exemple). Notatz que los documents modificats d’un - biais normal (a partir de l’interfàcia SPIP) se tornan indexar - automaticament: donc aquesta comanda es utila pas que d’un biais excepcional.', - 'texte_moteur_recherche_non_active' => 'Lo cercador es pas activat.', 'texte_multilinguisme' => 'Se desiratz de gerir d’articles en mai d’una lenga, amb una navigacion complèxa, podètz apondre un menut per causir la lenga dels articles e/o de las rubricas, en foncion de l’organizacion de vòstre sit.', # MODIF 'texte_multilinguisme_trad' => 'Podètz tanben activar un sistèma de gestion dels ligams entre las diferentas reviradas d’un article.', # MODIF 'texte_non_compresse' => 'non comprimit (pr’amor que vòstre servidor supòrta pas aquela foncionalitat)', - 'texte_nouveau_message' => 'Messatge nòu', 'texte_nouvelle_version_spip_1' => 'Avètz installada una version novèla d’SPIP.', 'texte_nouvelle_version_spip_2' => 'Aquesta version novèla demanda una actualizacion mai completa que de costuma. Se sètz webmèstre/webmèstra del sit, volgatz escafar lo fichièr @connect@ e tornar prene l’installacion per tal d’actualizar vòstres paramètres de connexion a la basa de donadas.

    (NB: s’avètz desmembrat vòstres paramètres de connexion, espepissatz lo fichièr @connect@ abans de lo suprimir...)

    ', # MODIF 'texte_operation_echec' => 'Tornatz a la pagina precedenta, causissètz una autra basa o creatz-ne una novèla. Verificatz las informacions que vòstre albergador a fornidas.', @@ -676,7 +573,6 @@ una color indica lor estat:', 'texte_rappel_selection_champs' => '[Oblidetz pas de seleccionar aquel camp corrèctament.]', 'texte_recalcul_page' => 'Se volètz tornar calcular sonque una pagina, passatz puslèu per l’espaci public e utilizatz lo boton "tornar calcular".', - 'texte_recapitiule_liste_documents' => 'Aquesta pagina recapitula la tièra dels documents qu’avètz plaçats dins las rubricas. Per modificar las informacions de cada document, seguissètz lo ligam cap a la pagina de sa rubrica.', 'texte_recuperer_base' => 'Reparar la basa de donadas', 'texte_reference_mais_redirige' => 'article referenciat dins vòstre sit SPIP, mas redirigit cap a una autra URL.', 'texte_requetes_echouent' => 'Quora d’unas requistas SQL abocan @@ -704,7 +600,6 @@ dins l’escondedor SPIP. Aquò permet per exemple de forçar un calcul nòu de s’avètz bravament modificat lo grafisme o l’estructura del sit.', 'texte_sur_titre' => 'Subretítol', 'texte_table_ok' => ': aquesta taula es condrecha.', - 'texte_tables_indexation_vides' => 'Las taulas d’indexacion del motor son vuèjas.', 'texte_tentative_recuperation' => 'Ensag de reparacion', 'texte_tenter_reparation' => 'Ensajar de reparar la basa de donadas', 'texte_test_proxy' => 'Per ensajar aquel proxy, indicatz aicí l’adreiça d’un sit web @@ -719,26 +614,8 @@ s’avètz bravament modificat lo grafisme o l’estructura del sit.', Aquela opcion es desactivada de manièra predefinida per tal d’evitar d’afichar de messatges d’avertiment intempestius.', - 'texte_trop_resultats_auteurs' => 'Tròp de resultats per "@cherche_auteur@" ; volgatz afinar la cèrca.', - 'texte_unpack' => 'telecargament de la darrièra version', - 'texte_utilisation_moteur_syndiques' => 'Quora utilizatz lo cercador integrat - a SPIP, podètz far las cèrcas suls sits e - articles sindicats de dos biaisses - diferents.
    - Lo mai - simple consistís a recercar sonque dins los - títols e descriptius dels articles.
    - - Lo segond biais, plan mai potent, permet - a SPIP de cercar tanben dins lo tèxt dels - sits referenciats. - Se referenciatz un sit, alavetz SPIP farà la - cèrca dins lo tèxt del quite sit.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Aquel metòde obliga SPIP de vesitar - regularament los sits referenciats, - aquò pòt alentir un pauc lo vòstre quite - sit.', 'texte_vide' => 'vuèg', 'texte_vider_cache' => 'Vojar l’escondedor', - 'titre_admin_effacer' => 'Mantenença tecnica', 'titre_admin_tech' => 'Mantenença tecnica', 'titre_admin_vider' => 'Mantenença tecnica', 'titre_cadre_afficher_article' => 'Afichar los articles', @@ -758,50 +635,27 @@ s’avètz bravament modificat lo grafisme o l’estructura del sit.', 'titre_naviguer_dans_le_site' => 'Navigar pel sit...', 'titre_nouvelle_rubrique' => 'Rubrica novèla', 'titre_numero_rubrique' => 'RUBRICA NUMÈRO:', - 'titre_page_admin_effacer' => 'Mantenença tecnica: escafar la basa', 'titre_page_articles_edit' => 'Modificar: @titre@', 'titre_page_articles_page' => 'Los articles', 'titre_page_articles_tous' => 'Tot lo sit', - 'titre_page_auteurs' => 'Vesitaires', 'titre_page_calendrier' => 'Calendièr @nom_mois@ de @annee@', 'titre_page_config_contenu' => 'Configuracion del sit', - 'titre_page_config_fonctions' => 'Configuracion del sit', - 'titre_page_configuration' => 'Configuracion del sit', - 'titre_page_controle_petition' => 'Seguit de las peticions', 'titre_page_delete_all' => 'supression totala e irreversibla', - 'titre_page_documents_liste' => 'Los documents de las rubricas', - 'titre_page_index' => 'Vòstre espaci privat', - 'titre_page_message_edit' => 'Redigir un messatge', - 'titre_page_messagerie' => 'Vòstra messatjariá', 'titre_page_recherche' => 'Resultats de la cèrca @recherche@', 'titre_page_statistiques_referers' => 'Estadisticas (ligams intrants)', 'titre_page_upgrade' => 'Mesa a nivèl d’SPIP', 'titre_publication_articles_post_dates' => 'Publicacion dels articles pòstdatats', - 'titre_referencer_site' => 'Referenciar lo sit:', - 'titre_rendez_vous' => 'RENDÈTZ-VOS:', 'titre_reparation' => 'Reparacion', 'titre_suivi_petition' => 'Seguit de las peticions', 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'I a pas cap d’article que pòrte aquel numèro.', 'trad_article_traduction' => 'Totas las versions d’aquel article:', - 'trad_deja_traduit' => 'Error : impossible de religar aquel article al numèro demandat.', 'trad_delier' => 'Ligar pas mai aqueste article a sas reviradas ', # MODIF 'trad_lier' => 'Aqueste article es una revirada de l’article numèro:', 'trad_new' => 'Escriure una revirada novèla d’aqueste article', # MODIF // U - 'utf8_convert_attendez' => 'Esperatz un momenton e tornatz cargar aquesta pagina.', - 'utf8_convert_avertissement' => 'Sètz a mand de convertir lo contengut de vòstra basa de donadas (articles, brèvas, etc) del jòc de caractèrs @orig@ cap al jòc de caractèrs @charset@.', - 'utf8_convert_backup' => 'Doblidètz pas de far d’en primièr un salvament complet de vòstre sit. Vos cal tanben verificar que vòstras esqueletas e fichièrs de lenga son compatibles @charset@. ', - 'utf8_convert_erreur_deja' => 'Vòtre sit es ja en @charset@, inutil de lo convertir...', 'utf8_convert_erreur_orig' => 'Error : lo jòc de caractèrs @charset@ es pas suportat.', - 'utf8_convert_termine' => 'Es acabat !', - 'utf8_convert_timeout' => 'Important : en cas de timeout del servidor, volgatz recargar la pagina fins a çò qu’indique « acabat ».', - 'utf8_convert_verifier' => 'Vos cal ara vojar l’escondedor, e verificar que tot va plansus las paginas publicas del sit. En cas de gròs problèma, un salvament de vòstras donadas s’es realizat (de format SQL) dins lo repertòri @rep@.', - 'utf8_convertir_votre_site' => 'Convertir vòstre sit en utf-8', // V 'version' => 'Version :' ); - -?> diff --git a/www/ecrire/lang/ecrire_oc_ni.php b/www/ecrire/lang/ecrire_oc_ni.php index cdd78256..4e5427c1 100644 --- a/www/ecrire/lang/ecrire_oc_ni.php +++ b/www/ecrire/lang/ecrire_oc_ni.php @@ -1,9 +1,11 @@ 'Accès proïbit.', 'avis_article_modifie' => 'Atencion, @nom_auteur_modif@ a travalhat sus aquel article fa @date_diff@ minutas', 'avis_aucun_resultat' => 'Minga de resultat.', + 'avis_base_inaccessible' => 'Impossible de si conectar à la basa de donadas @base@.', 'avis_chemin_invalide_1' => 'Lo camin qu’avètz chausit', 'avis_chemin_invalide_2' => 'sembla pas valid. Vorgatz tornar à la pàgina anteriora e verificar li informacions fornidi.', 'avis_connexion_echec_1' => 'La conexion à la base de donadas a soït.', @@ -24,72 +27,58 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_connexion_ldap_echec_2' => 'Tornatz a la pàgina anteriora, e verificatz li informacions que nos avètz fornidi. ', 'avis_connexion_ldap_echec_3' => 'D’un biais alternatiu, utilisetz pas lo supoart LDAP per importar d’utilisaires.', 'avis_deplacement_rubrique' => 'Dàida ! Aquela rubrica conten @contient_breves@ brèva@scb@ : se la desplaçatz, vorgatz ben faire una taca dins aquela casa de confirmacion.', - 'avis_destinataire_obligatoire' => 'Devètz indicar un destinatari denant de mandar aqueu messatge.', 'avis_erreur_connexion_mysql' => 'Error de conexion SQL', - 'avis_erreur_version_archive' => 'Dàida ! Lo fichier @archive@ correspoande à una autra version de SPIP qu’aquela qu’avètz installada. Anatz vèrs de bèli dificultats : risca de destruccion de la voastra basa de donadas, disfoncionaments divèrs dau sit, eca. Non validetz aquela demanda d’importacion.

    Per mai d’informacions, veguètz la documentacion de SPIP.

    ', - 'avis_espace_interdit' => 'Espaci proïbit
    SPIP es ja installat.
    ', + 'avis_espace_interdit' => 'Espaci proïbit
    SPIP es ja installat.
    ', 'avis_lecture_noms_bases_1' => 'Lo programa d’installacion a pas poscut lièger lu noms dei basas de donadas installadi.', 'avis_lecture_noms_bases_2' => 'Sia minga de basa es pas disponibla, sia la foncion que permete d’entierar li basas es estada desactivada per de rasons de seguretat (cen qu’es lo cas de plusors aubergadors).', 'avis_lecture_noms_bases_3' => 'Dins la segonda alternativa, es probable qu’una basa que poarta lo voastre nom de connexion sigue utilisabla :', - 'avis_non_acces_message' => 'Avètz pas accès à-n-aqueu messatge.', 'avis_non_acces_page' => 'Avètz pas accès à-n-aquela pàgina.', 'avis_operation_echec' => 'L’operacion a soït.', 'avis_operation_impossible' => 'Operacion impossibla', - 'avis_probleme_archive' => 'Problèma de lectura dau fichier @archive@', 'avis_suppression_base' => 'MÈFI, la supression dei donadas es irreversibla', - 'avis_version_mysql' => 'Lo voastre servidor SQL (@version_mysql@) permete pas l’autoreparacion dei taulas de la basa.', // B 'bouton_acces_ldap' => 'Ajustar l’accès à LDAP', 'bouton_ajouter' => 'Ajustar', - 'bouton_ajouter_participant' => 'AJUSTAR UN PARTICIPANT :', - 'bouton_annonce' => 'ANONÇA', 'bouton_annuler' => 'Anular', - 'bouton_checkbox_envoi_message' => 'possibilitat de mandar un messatge', - 'bouton_checkbox_indiquer_site' => 'indicar obligatòriament un sit web', - 'bouton_checkbox_signature_unique_email' => 'una soleta signatura per adreça e-mail', - 'bouton_checkbox_signature_unique_site' => 'una soleta signatura per sit web', + 'bouton_cache_activer' => 'Tornar activar l’amagador', 'bouton_demande_publication' => 'Demandar la publicacion d’aquest article', 'bouton_desactive_tout' => 'Desactivar tot', - 'bouton_effacer_index' => 'Escaçar lu indèx', + 'bouton_desinstaller' => 'Desinstalar', 'bouton_effacer_tout' => 'Escaçar TOT', - 'bouton_envoi_message_02' => 'MANDAR UN MESSATGE', 'bouton_envoyer_message' => 'Messatge definitiu: mandar', + 'bouton_mettre_a_jour_base' => 'Metre à jorn la basa de donadas', 'bouton_modifier' => 'Modificar', - 'bouton_pense_bete' => 'NÒTA DE RENEMBRANÇA (D’USATGE PERSONAU)', - 'bouton_radio_activer_messagerie' => 'Activar la messatgeria interna', - 'bouton_radio_activer_messagerie_interne' => 'Activar la messatgeria interna', - 'bouton_radio_activer_petition' => 'Activar la peticion', 'bouton_radio_afficher' => 'Afichar', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Afichar dins la tiera dei redactors connectats', - 'bouton_radio_desactiver_messagerie' => 'Desactivar la messatgeria', 'bouton_radio_envoi_annonces_adresse' => 'Mandar li anonças à l’adreça :', 'bouton_radio_envoi_liste_nouveautes' => 'Mandar la tiera dei noveutats', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Aparéisser pas dins la tiera dei redactors', 'bouton_radio_non_envoi_annonces_editoriales' => 'Mandar pas d’anonças editoriali', - 'bouton_radio_pas_petition' => 'Minga de peticion', - 'bouton_radio_petition_activee' => 'Peticion activada', - 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', 'bouton_redirection' => 'TORNAR DIRIGIR', 'bouton_relancer_installation' => 'Tornar lançar l’installacion', 'bouton_suivant' => 'Seguent', 'bouton_tenter_recuperation' => 'Provar d’adobar', 'bouton_test_proxy' => 'Provar lo proxy', 'bouton_vider_cache' => 'Vuar l’amagador', - 'bouton_voir_message' => 'Veire aqueu messatge denant de lo validar', // C - 'cache_mode_compresse' => 'Lu fichièrs de l’amagador son registrats en mòde comprimit.', - 'cache_mode_non_compresse' => 'Lu fichièrs de l’amagador son registrats en mòde non comprimit.', 'cache_modifiable_webmestre' => 'Lo webmèstre dau sit pòu modificar aquèu paramètre.', 'calendrier_synchro' => 'S’utilisatz un logiciau d’agenda compatible iCal, lo podètz sincronisar emb li informacions d’aqueu sit.', + 'config_activer_champs' => 'Activar lu camps seguents', + 'config_choix_base_sup' => 'indicar una basa sus aquesto servidor', + 'config_erreur_base_sup' => 'SPIP a pas accès à la tièra dei basas accessibles', + 'config_info_enregistree' => 'La novèla configuracion es estada registrada', 'config_info_logos' => 'Cada element dau site paut aver un lògo, e un « lògo de sobrevòl »', 'config_info_logos_utiliser' => 'Utilisar lu lògos', 'config_info_logos_utiliser_non' => 'Non utilisar lu lògos', 'config_info_logos_utiliser_survol' => 'Utilisar lu lògos de sobrevòl', 'config_info_logos_utiliser_survol_non' => 'Non utilisar lu lògos de sobrevòl', + 'config_redirection' => 'Articles virtuaus', + 'config_titre_base_sup' => 'Declaracion d’una basa suplementàri', + 'config_titre_base_sup_choix' => 'Chausissètz una basa suplementari', 'connexion_ldap' => 'Conexion :', - 'copier_en_local' => 'Copiar localament', + 'creer_et_associer_un_auteur' => 'Crear e associar un autor', // D 'date_mot_heures' => 'oras', @@ -97,37 +86,47 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // E 'email' => 'e-mail', 'email_2' => 'e-mail:', + 'en_savoir_plus' => 'N’en saupre de mai', 'entree_adresse_annuaire' => 'Adreça de l’annuari', 'entree_adresse_email' => 'La voastra adreça e-mail', + 'entree_adresse_email_2' => 'Adreça e-mail', 'entree_base_donnee_1' => 'Adreça de la basa de donadas', 'entree_base_donnee_2' => '(Soventi fès, aquela adreça correspoande à-n-aquela dau voastre sit, de còups que li a, correspoande à la mencion "localhost", d’autres còups, es laissada vuèia completament.)', 'entree_biographie' => 'Biografia brèva, en quauqui paraulas.', 'entree_chemin_acces' => 'Ficar lo camin d’accès:', 'entree_cle_pgp' => 'La voastra clau PGP', + 'entree_cle_pgp_2' => 'Clau PGP', 'entree_contenu_rubrique' => '(Contengut de la rubrica en quauqui paraulas.)', 'entree_identifiants_connexion' => 'Voastri identificants de connexion...', + 'entree_identifiants_connexion_2' => 'Identificants de conecion', 'entree_informations_connexion_ldap' => 'Vorgatz intrar dins aqueu formulari li informacions de connexion au voastre annuari LDAD. Aqueli informacions vos devon poder èstre provesidi per l’administrator dau sistema, ò de la ret.', 'entree_infos_perso' => 'Cu siètz?', + 'entree_infos_perso_2' => 'Qu es l’autor?', 'entree_interieur_rubrique' => 'Dintre la rubrica:', 'entree_liens_sites' => 'Ligam ipertèxt (referença, sit da visitar...)', 'entree_login' => 'Lo voastre login', 'entree_login_connexion_1' => 'Lo login de connexion', 'entree_login_connexion_2' => '(Correspoande de còups au voastre login d’accès au FTP; de còups laissat vuèi)', - 'entree_login_ldap' => 'Login LDAP inicial', 'entree_mot_passe' => 'Lo voastre mòt de santa Clara', 'entree_mot_passe_1' => 'Lo mòt de santa Clara de connexion', 'entree_mot_passe_2' => '(Correspoande de còups au voastre mòt de santa Clara per lo FTP; de còups es laissat vuèi)', 'entree_nom_fichier' => 'Vorgatz intrar lo nom dau fichier @texte_compresse@:', 'entree_nom_pseudo' => 'Lo voastre nom ò lo voastre pseudonim', 'entree_nom_pseudo_1' => '(Lo voastre nom ò lo voastre pseudonim)', + 'entree_nom_pseudo_2' => 'Nom ò pseudò', 'entree_nom_site' => 'Lo nom dau voastre sit', + 'entree_nom_site_2' => 'Nom dau site de l’autor', 'entree_nouveau_passe' => 'Novèu mòt de santa Clara', 'entree_passe_ldap' => 'Mòt de santa Clara', 'entree_port_annuaire' => 'Lo número de poart de l’annuari', 'entree_signature' => 'Signatura', 'entree_titre_obligatoire' => 'Titre [Obligatòri]
    ', 'entree_url' => 'L’adreça (URL) dau voastre sit', + 'entree_url_2' => 'Adreça (URL) dau site', + 'erreur_connect_deja_existant' => 'Un servidor existisse jà m’aquesto nom', + 'erreur_email_deja_existant' => 'Aquesta adreça email es jà registrada.', + 'erreur_nom_connect_incorrect' => 'Aquesto nom de servidor es pas autorisat', 'erreur_plugin_fichier_absent' => 'Fichier assent', 'erreur_plugin_fichier_def_absent' => 'Fichier de definicion assent', 'erreur_plugin_nom_fonction_interdit' => 'Nom de foncion proïbit', @@ -136,6 +135,9 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'erreur_plugin_tag_plugin_absent' => '<plugin> mancant dins lo fichier de definicion', 'erreur_plugin_version_manquant' => 'Pas de version dau plugin', + // H + 'htaccess_inoperant' => 'htaccess inoperant', + // I 'ical_info1' => 'Aquela pàgina mòstra de metòdes diferents per restar en contacte emb la vida d’aqueu sit.', 'ical_info2' => 'Per aver mai d’informacions sobre aqueli tecnicas, esitètz pas de consultar la documentacion de SPIP.', @@ -149,31 +151,43 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'ical_titre_js' => 'Javascript', 'ical_titre_mailing' => 'Mailing_list', 'ical_titre_rss' => 'Fichiers de sindicacion', + 'icone_accueil' => 'Acuèlh', 'icone_activer_cookie' => 'Activar lo cookie de correspondença', + 'icone_activite' => 'Activitat', 'icone_admin_plugin' => 'Gestion dei plugins', + 'icone_administration' => 'Mantenança', 'icone_afficher_auteurs' => 'Faire aparèisser lu autors', 'icone_afficher_visiteurs' => 'Faire aparèisser lu visitaires', 'icone_arret_discussion' => 'Participar plus à-n-aquela discussion', 'icone_calendrier' => 'Calendier', + 'icone_configuration' => 'Configuracion', 'icone_creer_auteur' => 'Crear un novèl autor e l’associar à-n-aquel article', 'icone_creer_mot_cle' => 'Crear un novèu mòt clau e lo ligar à-n-aquel article', 'icone_creer_rubrique_2' => 'Crear una novèla rubrica', - 'icone_envoyer_message' => 'Mandar aqueu messatge', + 'icone_developpement' => 'Desfolopament', + 'icone_edition' => 'Edicion', + 'icone_ma_langue' => 'La mieu lenga', + 'icone_mes_infos' => 'Li mieui informacions', + 'icone_mes_preferences' => 'Li mieui preferenças', 'icone_modifier_article' => 'Modificar aquel article', - 'icone_modifier_message' => 'Modificar aqueu messatge', 'icone_modifier_rubrique' => 'Modificar aquela rubrica', + 'icone_publication' => 'Publicacion', 'icone_retour' => 'Tornar', 'icone_retour_article' => 'Tornar à l’article', + 'icone_squelette' => 'Esqueletas', + 'icone_suivi_publication' => 'Seguit de la publicacion', 'icone_supprimer_cookie' => 'Suprimir lo cookie de correspondença', 'icone_supprimer_rubrique' => 'Suprimir aquela rubrica', 'icone_supprimer_signature' => 'Suprimir aquela signatura', 'icone_valider_signature' => 'Validar aquela signatura', 'image_administrer_rubrique' => 'Podètz administrar aquela rubrica', 'info_1_article' => '1 article', - 'info_1_site' => '1 sit', + 'info_1_auteur' => '1 autor', + 'info_1_message' => '1 messatge', + 'info_1_mot_cle' => '1 mòt-clau', + 'info_1_rubrique' => '1 rubrica', + 'info_1_visiteur' => '1 visitator', 'info_activer_cookie' => 'Podètz activar un cookie de correspondença; aquò vos permetrà de passar facilament dau sit public au sit privat.', - 'info_admin_gere_rubriques' => 'Aquel administrator gerisse li rubricas seguentas:', - 'info_admin_gere_toutes_rubriques' => 'Aquel administrator geratoti li rubricas.', 'info_administrateur' => 'Administrator', 'info_administrateur_1' => 'Administrator', 'info_administrateur_2' => 'dau sit (d’utilisar emb precaucion)', @@ -183,13 +197,10 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_administrer_rubrique' => 'Podètz administrar aquela rubrica', 'info_adresse' => 'a l’adreça:', 'info_adresse_url' => 'Adreça (URL) dau sit public', - 'info_afficher_visites' => 'Afichar li visitas per :', 'info_aide_en_ligne' => 'Ajuda en linha SPIP', 'info_ajout_image' => 'Quora ajustatz d’imatges coma estacaments jonchs à un article, SPIP pòu crear automaticament per vautres de vinhetas (miniaturas) deis images inserits. Aquò permete per exemple de crear automaticament una galaria ò un poartfòlio.', - 'info_ajout_participant' => 'Lo participant seguent es ajustat:', 'info_ajouter_rubrique' => 'Ajustar una autra rubrica d’administrar:', 'info_annonce_nouveautes' => 'Anonça dei noveutats', - 'info_anterieur' => 'anteriora', 'info_article' => 'article', 'info_article_2' => 'articles', 'info_article_a_paraitre' => 'Lu articles poastdatats per paréisser', @@ -197,15 +208,14 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_articles_2' => 'Articles', 'info_articles_auteur' => 'Lu articles d’aquel autor', 'info_articles_trouves' => 'Articles trobats', - 'info_articles_trouves_dans_texte' => 'Articles trobats (dins lo tèxt)', 'info_attente_validation' => 'Lu voastres articles en aspèra de validacion', 'info_aujourdhui' => 'encuèi :', - 'info_auteur_message' => 'AUTOR DAU MESSATGE:', 'info_auteurs' => 'Lu autors', 'info_auteurs_par_tri' => 'autors@partri@', 'info_auteurs_trouves' => 'Autors trobats', 'info_authentification_externe' => 'Autentificacion externa', 'info_avertissement' => 'Avertiment', + 'info_barre_outils' => 'Mé la sieu barra d’autis?', 'info_base_installee' => 'L’estructura de la voastra basa de donadas es installada.', 'info_chapeau' => 'Capèu', 'info_chapeau_2' => 'Capèu :', @@ -216,11 +226,14 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_classement_1' => 'er sus @liste@', 'info_classement_2' => 'nd sus @liste@', 'info_code_acces' => 'Oblidetz pas lu voastres còdes d’accès personalisats!', - 'info_compresseur_gzip' => 'N. B. : Il est recommandé de vérifier au préalable si l’hébergeur compresse déjà systématiquement les scripts php ; pour cela, vous pouvez par exemple utiliser le service suivant : @testgzip@', # MODIF 'info_config_suivi' => 'S’aquela adreça correspoande à una mailing-list, podètz indicar çai sota l’adreça que lu participants au sit si poadon inscriure. Aquela adreça pòu èstre una URL (per exemple la pàgina d’inscripcion à la tièra per lo web), ò una adreça e-mail tenent un subjecte especific (per exemple : @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Vos podètz abonar à la mailing-list d’aqueu sit. Receberètz per corrièr electonic li anonças dei articles e brèvas prepauats à la publication.', 'info_confirmer_passe' => 'Confirmar aqueu novèu mòt de santa Clara:', + 'info_conflit_edition_differences' => 'Diferenças:', + 'info_conflit_edition_version_enregistree' => 'La version registrada:', + 'info_conflit_edition_votre_version' => 'La voastra version:', 'info_connexion_base' => 'Pròva de connexion à la basa', + 'info_connexion_base_donnee' => 'Coneccion à la voastra basa de donadas', 'info_connexion_ldap_ok' => 'La connexion LDAP a capitat.

    Podètz passar à la tapa seguenta.

    ', 'info_connexion_mysql' => 'La voastra conexion SQL', 'info_connexion_ok' => 'La connexion a capitat.', @@ -234,15 +247,13 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_date_publication_anterieure' => 'Data anteriora de redaccion:', 'info_date_referencement' => 'DATA DE REFERENÇAMENT D’AQUEU SIT :', 'info_derniere_etape' => 'Es acabat !', - 'info_derniers_articles_publies' => 'Lu voastres darriers articles publicats en linha', - 'info_desactiver_messagerie_personnelle' => 'Podètz activar ò desactivar la voastra messatgeria personala sus aqueu sit.', 'info_descriptif' => 'Descriptiu:', + 'info_desinstaller_plugin' => 'suprima li donadas e desactiva lo plugin', 'info_discussion_cours' => 'Discussions en cors', 'info_ecrire_article' => 'Denant de poder escriure d’articles, devètz aumanco crear una rubrica.', 'info_email_envoi' => 'Adreça e-mail de mandadís (opcionau)', 'info_email_envoi_txt' => 'Indicatz aquí l’adreça d’utilisar per mandar lu e-mails (a fauta d’aquò, s’utilisarà l’adreça destinatària coma adreça de mandadís):', 'info_email_webmestre' => 'Adreça e-mail dau oèbmestre', - 'info_entrer_code_alphabet' => 'Ficatz lo còde de l’alfabet d’utilisar :', 'info_envoi_email_automatique' => 'Mandadís d’e-mails automatics', 'info_envoyer_maintenant' => 'Mandar aüra', 'info_etape_suivante' => 'Passar à la tapa seguenta', @@ -252,29 +263,21 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_facilite_suivi_activite' => 'Per facilitar lo seguit de l’activitat editoriala dau sit, SPIP vos pòu fornir per e-mail, per exemple à una mailing-list dei redactors, l’anonça dei demandas de publicacion e de validacion d’articles.', 'info_fichiers_authent' => 'Fichiers d’autentificacion « .htpasswd »', 'info_forums_abo_invites' => 'Lo voastre sit web poarge de fòros per lu abonats; dins lo sit public lu visitaires son convidats de si registrar.', - 'info_gauche_admin_effacer' => 'A-n-aquela pàgina, son que lu responsables dau sit que poadon accedir.

    Dona accès ai diferenti foncions de mantenença tecnica. D’unas d’entre eli implicon un procèssus d’autentificacion especific, que necessita d’aver un accès FTP au sit web.

    ', # MODIF - 'info_gauche_admin_tech' => 'A-n-aquela pàgina, son que lu responsables dau sit que li poadon accedir.

    Dona accès ai diferenti foncions de mantenença tecnica. D’unas d’entre eli implicon un procèssus d’autentificacion especific, que - necessita d’aver un accès FTP au sit web.

    ', # MODIF - 'info_gauche_admin_vider' => 'A-n-aquela pàgina, son que lu responsables dau sit que li poadon accedir.

    Dona accès ai diferenti foncions de mantenença tecnica. D’unas d’entre eli implicon un procèssus d’autentificacion especific, que necessita d’aver un accès FTP au sit web.

    ', # MODIF + 'info_gauche_admin_tech' => 'A-n-aquela pàgina, son que lu responsables dau sit que la poadon accedir.

    Dona accès ai diferenti foncions de mantenença tecnica. D’unas d’entre eli implicon un procèssus d’autentificacion especific, que + necessita d’aver un accès FTP au sit web.

    ', + 'info_gauche_admin_vider' => 'A-n-aquela pàgina, son que lu responsables dau sit que la poadon accedir.

    Dona accès ai diferenti foncions de mantenença tecnica. D’unas d’entre eli implicon un procèssus d’autentificacion especific, que necessita d’aver un accès FTP au sit web.

    ', 'info_gauche_auteurs' => 'Trobaretz aquí toi lu autors dau sit. Lo sieu estatut es indicat per la color dei icònas sieui (administrator : verd; redactor : jaune).', - 'info_gauche_auteurs_exterieurs' => 'Lu autors exteriors, sensa accès au sit, son indicats per una icòna blu; lu autors escafats per una bordilhier.', # MODIF + 'info_gauche_auteurs_exterieurs' => 'Lu autors exteriors, sensa accès au sit, son indicats per una icòna blu; lu autors escafats per icòna grisa.', 'info_gauche_messagerie' => 'La messatgeria vos permete d’escambiar de messatges entre redactors, de conservar de nòtas de renembrança (per lo voastre usatge personau) ò d’afichar d’anoncis sus la pàgina d’acuèlh de l’espaci privat (se siètz administrator).', - 'info_gauche_numero_auteur' => 'AUTOR NÚMERO', 'info_gauche_statistiques_referers' => 'Aquela pàgina presenta la tiera dei referits, es è dire dei sits que contenon d’estacs que menon drech au voastre sit, ma unicament per ièr e encuèi : de fach aquela tiera es actualisada cada 24 oras.', 'info_gauche_visiteurs_enregistres' => 'Trobaretz aquí lu visitaires registrats dins l’espaci public dau sit (fòros sus abonament).', 'info_generation_miniatures_images' => 'Generacion de miniaturas dei imatges', - 'info_gerer_trad' => 'Gerar lu estacs de revirada?', 'info_hebergeur_desactiver_envoi_email' => 'I son d’aubergadors que desactivan lo mandadís automatic d’e-mails despi lu sieus servidors. En aqueu cas, li foncionalitats seguenti de SPIP foncionaràn pas.', 'info_hier' => 'ièr :', - 'info_historique_activer' => 'Activar lo seguiment dei revisions', - 'info_historique_affiche' => 'Afichar aquela version', - 'info_historique_comparaison' => 'comparason', - 'info_historique_desactiver' => 'Desactivar lo seguiment dei revisions', - 'info_historique_texte' => 'Lo seguiment dei revisions permet de conservar un istoric de toti li modificacions que s’es portat au contengut d’un article, e d’afichar li diferenças entre li versions successivas.', 'info_identification_publique' => 'La voastra identitat publica...', 'info_image_process' => 'Vorgatz seleccionar lo melhor metòde de fabricacion dei vinhetas en clicar sus l’imatge correspondent.', - 'info_image_process2' => 'N.B. Se minga d’imatge apareisse, alora lo servidor qu’auberga lo voastre site es pas estat configurat per utilisar de tau autis. Se desiratz utilisar aqueli foncions, contactatz lo responsable tecnic e demandatz li extensions «GD» ò «Imagick».', # MODIF + 'info_image_process2' => 'Se minga d’imatge apareisse, alora lo servidor qu’auberga lo voastre site es pas estat configurat per utilisar de tau autis. Se desiratz utilisar aqueli foncions, contactatz lo responsable tecnic e demandatz li extensions «GD» ò «Imagick».', 'info_images_auto' => 'Imagtes calculats automaticament', 'info_informations_personnelles' => 'Informacions personali', 'info_inscription_automatique' => 'Inscripcion automatica de redactors novèus', @@ -290,8 +293,6 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_logos' => 'Lu lògos', 'info_maximum' => 'maximum :', 'info_meme_rubrique' => 'Dins la mema rubrica', - 'info_message' => 'Messatge dau', - 'info_message_efface' => 'MESSATGE ESFAÇAT', 'info_message_en_redaction' => 'Lu voastres messatges en cors de redaccion', 'info_message_technique' => 'Messatge tecnic:', 'info_messagerie_interne' => 'Messatgeria interna', @@ -301,20 +302,15 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_modifier_rubrique' => 'Modificar la rubrica:', 'info_modifier_titre' => 'Modificar: @titre@', 'info_mon_site_spip' => 'Lo mieu sit SPIP', - 'info_mot_sans_groupe' => '(Mòts sensa grop...)', - 'info_moteur_recherche' => 'Motor de recerca integrat', 'info_moyenne' => 'mejana :', - 'info_multi_articles' => 'Activar lo menut de lenga per lu articles ?', 'info_multi_cet_article' => 'Lenga d’aquest article:', 'info_multi_langues_choisies' => 'Vorgatz seleccionar çai sota li lengas que son à posita dei redactors dau voastre sit. Li lengas ja emplegadi dins lo voastre sit (afichadas en promier) non si poadon desactivar.', - 'info_multi_rubriques' => 'Activar lo menut de lenga per li rubricas?', 'info_multi_secteurs' => '... solament per li rubricas à la raiç dau sit?', 'info_nom' => 'Nom', 'info_nom_destinataire' => 'Nom dau destinatari', 'info_nom_site' => 'Nom dau voastre site', 'info_nombre_articles' => '@nb_articles@ articles,', - 'info_nombre_partcipants' => 'PARTICIPANTS À LA DISCUSSION :', 'info_nombre_rubriques' => '@nb_rubriques@ rubricas,', 'info_nombre_sites' => '@nb_sites@ sits,', 'info_non_deplacer' => 'De pas desplaçar...', @@ -323,17 +319,13 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_non_modifiable' => 'pòu pas èstre modificat', 'info_non_suppression_mot_cle' => 'voali pas suprimir aqueu mòt clau.', 'info_notes' => 'Nòtas', - 'info_nouveaux_message' => 'Messatges novèus', 'info_nouvel_article' => 'Article nòu', 'info_nouvelle_traduction' => 'Novèla revirada :', 'info_numero_article' => 'ARTICLE NÚMERO', - 'info_obligatoire_02' => '[Obligatòri]', # MODIF + 'info_obligatoire_02' => '(obligatòri)', 'info_option_accepter_visiteurs' => 'Acceptar l’inscripcion dei visitaires dau sit public', - 'info_option_faire_suivre' => 'Faire sègre lu messatges dei fòros ai autors dei articles', 'info_option_ne_pas_accepter_visiteurs' => 'Refusar l’inscripcion de visitaires', 'info_options_avancees' => 'OPCIONS AVANÇADAS', - 'info_ortho_activer' => 'Activar lo verificador d’ortografia', - 'info_ortho_desactiver' => 'Desactivar lo verificador d’ortografia', 'info_ou' => 'ò... ', 'info_page_interdite' => 'Pàgina proïbida', 'info_par_nom' => 'per nom', @@ -342,20 +334,14 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_par_tri' => '’(per @tri@)’', 'info_passe_trop_court' => 'Mòt de santa Clara tròup cort.', 'info_passes_identiques' => 'Li doi mòts de santa Clara son pas identics.', - 'info_pense_bete_ancien' => 'Li voastri anciani nòtas de renembrança', # MODIF 'info_plus_cinq_car' => 'mai de 5 caractèrs', 'info_plus_cinq_car_2' => '(mai de 5 caractèrs)', 'info_plus_trois_car' => '(mai de 3 caractèrs)', 'info_popularite' => 'popularitat: @popularite@; visitas: @visites@', - 'info_popularite_4' => 'popularitat: @popularite@; visitas: @visites@', 'info_post_scriptum' => 'Post-Scriptum', 'info_post_scriptum_2' => 'Post-Scriptum :', 'info_pour' => 'per', - 'info_preview_admin' => 'Solament lu administrators poadon previsualisar lo sit', - 'info_preview_comite' => 'Toi lu redactors poadon previsualisar lo sit', - 'info_preview_desactive' => '>La previsualisacion es totalament desactivada', - 'info_preview_texte' => 'Es possible de previsualisar lo site coma se toi lu articles e brèvas (que tenon au mànco l’estatut « prepauat ») èron publicats. Aquela possibilitat deu èstre duberta ai administrators solament, à toi lu redactors, ò à degun ?', - 'info_principaux_correspondants' => 'Lu voastres correspondents principaus', + 'info_preview_texte' => 'Es possible de previsualisar lo site coma se toi lu articles e brèvas (que tenon au mànco l’estatut « prepauat ») èron publicats. Aquela possibilitat deu èstre duberta ai administrators solament, à toi lu redactors, ò à degun ?', # MODIF 'info_procedez_par_etape' => 'procedètz estapa per estapa', 'info_procedure_maj_version' => 'la procedura de mesa à jorn deu èstre lançada per adaptar la basa de donadas à la novèla version de SPIP.', 'info_proxy_ok' => 'Pròva dau proxy capitat.', @@ -364,20 +350,17 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_publies' => 'Lu voastres articles publicats en linha', 'info_question_accepter_visiteurs' => 'Se lu esquelets dau voastre site prevehon lo registrament de visitors sensa accès à l’espaci privat, vorgatz activar l’opcion seguenta :', 'info_question_inscription_nouveaux_redacteurs' => 'Acceptatz li inscripcions de novèus redactors à - partir dau sit public ? Se l’acceptatz, lu visitaires si podràn inscriure + partir dau sit public ? Se l’acceptatz, lu visitaires si podràn s’inscriure despí un formulari automatisat e accediràn alora à l’espaci privat per - prepauar lu sieus articles pròpis.
    Durant la fasa d’inscripcion, + prepauar lu sieus articles pròpis.
    Durant la fasa d’inscripcion, lu utilisaires recebon un corrier electronic automatic que li fornisse lu sieus còdes d’accès au sit privat. D’unu aubergadors desactivon lo mandadís d’e-mails despí lu sieus servidors: en aqueu cas, l’inscripcion automatica es - impossibla.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Desiratz d’utilisar lo motor de recerca integrat à SPIP? (s’es desactivat, accelèra lo foncionament dau sistema.)', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF + impossibla.
    ', + 'info_qui_edite' => '@nom_auteur_modif@ a travalhat sus aquest contengut fa @date_diff@ minutas', 'info_racine_site' => 'Raiç dau sit', 'info_recharger_page' => 'Vorgatz tornar cargar aquela pàgina dins un momenton.', - 'info_recherche_auteur_a_affiner' => 'Tròup de resultats per "@cherche_auteur@"; vorgatz afinar la recerca.', - 'info_recherche_auteur_ok' => 'Mantun redactors trobats per "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Minga de resultat trobat per "@cherche_auteur@".', 'info_recommencer' => 'Vorgatz tornar començar.', 'info_redacteur_1' => 'Redactor', @@ -394,7 +377,6 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_rubriques' => 'Rubricas', 'info_rubriques_02' => ' rubricas', 'info_rubriques_trouvees' => 'Rubricas trobadi', - 'info_rubriques_trouvees_dans_texte' => 'Rubricas trobadi (dins lo tèxt)', 'info_sans_titre' => 'Sensa titre', 'info_selection_chemin_acces' => 'Seleccionatz çai sota lo camin d’accès dins l’annuari:', 'info_signatures' => 'signaturas', @@ -402,18 +384,17 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_site_2' => 'sit : ', 'info_site_min' => 'sit', 'info_site_reference_2' => 'Sit referençat', - 'info_site_web' => 'SIT WEB :', # MODIF + 'info_site_web' => 'Sit Web :', 'info_sites' => ' sits', 'info_sites_lies_mot' => 'Lu sits referençats ligats à-n-aqueu mòt clau', 'info_sites_proxy' => 'Utilisar un proxy', 'info_sites_trouves' => 'Sits trobats', - 'info_sites_trouves_dans_texte' => 'Sits trobats (dins lo tèxt)', 'info_sous_titre' => 'Jostitre:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Estatut d’aquel autor :', + 'info_statut_auteur_2' => 'Siéu', 'info_statut_auteur_a_confirmer' => 'Inscripcion de confirmar', 'info_statut_auteur_autre' => 'Autre estatut:', - 'info_statut_efface' => 'Escaçat', 'info_statut_redacteur' => 'Redactor', 'info_statut_utilisateurs_1' => 'Estatut predefinit dei utilisaires importats', 'info_statut_utilisateurs_2' => 'Chausissètz l’estatut qu’es atribuit ai personas presenti dins l’annuari LDAP quora si connecton lo premier còup. Pi podrètz modificar aquela valor per cada autor au cas per cas.', @@ -427,14 +408,14 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_texte' => 'Tèxt', 'info_texte_explicatif' => 'Tèxt explicatiu', 'info_texte_long' => '(lo tèxt es lòng: apareisse doncas en tròç distints que si tornaràn empegar un còup validats.)', - 'info_texte_message' => 'Tèxt dau voastre messatge:', # MODIF + 'info_texte_message' => 'Tèxt dau voastre messatge', 'info_texte_message_02' => 'Tèxt dau messatge', 'info_titre' => 'Titre :', 'info_total' => 'totau : ', 'info_tous_articles_en_redaction' => 'Toi lu articles en cors de redaccion', 'info_tous_articles_presents' => 'Toi lu articles publicats dins aquela rubrica', + 'info_tous_articles_refuses' => 'Toi lu articles refudats', 'info_tous_les' => 'toi lu:', - 'info_tous_redacteurs' => 'Anonças à toi lu redactors', 'info_tout_site' => 'Tot lo sit', 'info_tout_site2' => 'An pas revirat l’article dins aquela lenga.', 'info_tout_site3' => 'Si revirèt l’article dins aquela lenga, ma si portèt puèi de modificacions à l’article de referença. Cau actualisar la revirada.', @@ -443,13 +424,14 @@ Aqueli informacions vos devon poder èstre provesidi per l’administrator dau s 'info_tout_site6' => 'Atencion: solament lu articles originaus s’afichon. Li reviradas s’assòcion à l’originau, una color indica lo sieu estat :', + 'info_traductions' => 'Reviradas', 'info_travail_colaboratif' => 'Travalh collaboratiu sus lu articles', 'info_un_article' => 'un article, ', 'info_un_site' => 'un sit, ', 'info_une_rubrique' => 'una rubrica, ', 'info_une_rubrique_02' => '1 rubrica', 'info_url' => 'URL :', - 'info_url_site' => 'URL DAU SIT:', + 'info_url_test_proxy' => 'URL de pròva', 'info_urlref' => 'Ligam ipertèxt :', 'info_utilisation_spip' => 'Aüra podètz començar d’utilisar lo sistema de publicacion assistat...', 'info_visites_par_mois' => 'Afichatge per mes:', @@ -457,18 +439,30 @@ una color indica lo sieu estat :', 'info_visiteur_2' => 'dau sit public', 'info_visiteurs' => 'Visitaires', 'info_visiteurs_02' => 'Visitaires dau sit public', + 'install_adresse_base_hebergeur' => 'Adreça de la basa de donadas atribuida da l’aubergaire', 'install_echec_annonce' => 'L’installacion capitarà mau, ò abotirà à un sit non foncionau...', 'install_extension_mbstring' => 'SPIP fonciona pas emb:', 'install_extension_php_obligatoire' => 'SPIP esige l’estension PHP:', + 'install_login_base_hebergeur' => 'Identificant de conecion atribuit da l’aubergaire', + 'install_nom_base_hebergeur' => 'Nom de la basa atribuit da l’aubergaire:', + 'install_pas_table' => 'Basa actualament sensa taulas', + 'install_pass_base_hebergeur' => 'Mòt de santa Clara de conecion atribuit da l’aubergaire', # RELIRE 'install_php_version' => 'PHP version @version@ insuffisanta (minimum = @minimum@)', 'install_select_langue' => 'Seleccionatz una lenga pi clicatz sus lo boton « seguent » per amodar la procedura d’installacion.', + 'install_select_type_db' => 'Indicar lo tipe de basa de donadas:', + 'install_select_type_mysql' => 'MySQL', + 'install_select_type_pg' => 'PostgreSQL', + 'install_select_type_sqlite2' => 'SQLite 2', + 'install_select_type_sqlite3' => 'SQLite 3', + 'install_serveur_hebergeur' => 'Servidor de basa de donadas atribuit da l’aubergaire', + 'install_tables_base' => 'Taulas de la basa', + 'instituer_erreur_statut_a_change' => 'L’estatut es jà estat modificat', + 'instituer_erreur_statut_non_autorise' => 'Podètz pas chausir aquest estatut', 'intem_redacteur' => 'redactor', 'item_accepter_inscriptions' => 'Acceptar li inscripcions', 'item_activer_messages_avertissement' => 'Activar lu messatges d’avertiment', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Far paréisser dins lo calendier', - 'item_autoriser_documents_joints' => 'Autorisar lu documents jonchs ai articles', - 'item_autoriser_documents_joints_rubriques' => 'Autorisar lu documents dins li rubricas', 'item_autoriser_syndication_integrale' => 'Difusir l’integralitat dei articles dins lu fichiers de syndicacion', 'item_choix_administrateurs' => 'lu administrators', 'item_choix_generation_miniature' => 'Generar automaticament li miniaturas dei imatges.', @@ -476,7 +470,6 @@ una color indica lo sieu estat :', 'item_choix_redacteurs' => 'lu redactors', 'item_choix_visiteurs' => 'lu visitaires dau sit public', 'item_creer_fichiers_authent' => 'Crear de fichiers .htpasswd', - 'item_limiter_recherche' => 'Limitar la recerca ai informacions contengudi dins lo voastre sit', 'item_login' => 'Login', 'item_mots_cles_association_articles' => 'ai articles', 'item_mots_cles_association_rubriques' => 'ai rubricas', @@ -485,35 +478,33 @@ una color indica lo sieu estat :', 'item_non_accepter_inscriptions' => 'Acceptar pas li inscripcions', 'item_non_activer_messages_avertissement' => 'Minga de messatge d’avertiment', 'item_non_afficher_calendrier' => 'Pas far paréisser dins lo calendier', - 'item_non_autoriser_documents_joints' => 'Autorisar pas lu documents dins lu articles', - 'item_non_autoriser_documents_joints_rubriques' => 'Autorisar pas lu documents dins li rubricas', 'item_non_autoriser_syndication_integrale' => 'Difusir ren qu’un resumit', 'item_non_creer_fichiers_authent' => 'Crear pas aquelu fichiers', - 'item_non_gerer_statistiques' => 'Pas gerar li estadisticas', - 'item_non_limiter_recherche' => 'Alargar la recerca au contengut dei sits referençats', 'item_non_publier_articles' => 'Publicar pas lus articles avans la data de publicacion prevista.', - 'item_non_utiliser_moteur_recherche' => 'Utilisar pas lo motor', 'item_nouvel_auteur' => 'Novèl autor', 'item_nouvelle_rubrique' => 'Novèla rubrica', 'item_oui' => 'Aï', 'item_publier_articles' => 'Publicar lu articles, quauque sigue la data de publicacion', 'item_reponse_article' => 'Respoasta à l’article', - 'item_utiliser_moteur_recherche' => 'Utilisar lo motor de recerca', + 'item_version_html_max_html4' => 'Si limitar au HTML4 sus lo site public', + 'item_version_html_max_html5' => 'Permetre lo HTML5', 'item_visiteur' => 'visitaire', // J 'jour_non_connu_nc' => 'n.c.', // L - 'lien_ajout_destinataire' => 'Ajustar aqueu destinatari', + 'label_bando_outils_afficher' => 'Afichar lu autis', + 'label_bando_outils_masquer' => 'Escondre lu autis', + 'label_choix_langue' => 'Selecionatz la voastra lenga', + 'label_texte_et_icones_navigation' => 'Menut de navigacion', 'lien_ajouter_auteur' => 'Ajustar aquel autor', - 'lien_ajouter_participant' => 'Ajustar un participant', 'lien_email' => 'e-mail', 'lien_nom_site' => 'NOM DAU SIT:', 'lien_retirer_auteur' => 'Retirar l’autor', - 'lien_retrait_particpant' => 'retirar aqueu participant', + 'lien_retirer_rubrique' => 'Retirar la rùbrica', + 'lien_retirer_toutes_rubriques' => 'Retirar toti li rùbricas', 'lien_site' => 'sit', - 'lien_supprimer_rubrique' => 'suprimir aquela rubrica', 'lien_tout_deplier' => 'Desplegar tot', 'lien_tout_replier' => 'Repeglar', 'lien_tout_supprimer' => 'Suprimar tot', @@ -521,12 +512,12 @@ una color indica lo sieu estat :', 'lien_trier_nombre_articles' => 'Triar per nombre d’articles', 'lien_trier_statut' => 'Triar per estatut', 'lien_voir_en_ligne' => 'VEIRE EN LINHA:', - 'logo_article' => 'LÒGO DE L’ARTICLE', # MODIF - 'logo_auteur' => 'LÒGO DE L’AUTOR', # MODIF - 'logo_rubrique' => 'LÒGO DE LA RUBRICA', # MODIF - 'logo_site' => 'LÒGO D’AQUEU SIT', # MODIF - 'logo_standard_rubrique' => 'LÒGO ESTANDARD DEI RUBRICAS', # MODIF - 'logo_survol' => 'LÒGO PER LO SUBREVÒL', # MODIF + 'logo_article' => 'Lògo de l’article', + 'logo_auteur' => 'Lògo de l’’autor', + 'logo_rubrique' => 'Lògo de la rubrica', + 'logo_site' => 'Lògo d’aqueu sit', + 'logo_standard_rubrique' => 'Lògo estandard dei rubricas', + 'logo_survol' => 'Lògo per lo subrevòl', // M 'menu_aide_installation_choix_base' => 'Chausida de la voastra basa', @@ -538,27 +529,76 @@ una color indica lo sieu estat :', 'mois_non_connu' => 'non conoissut', // O + 'onglet_contenu' => 'Contengut', + 'onglet_declarer_une_autre_base' => 'Declarar una autra basa', + 'onglet_discuter' => 'Discutre', + 'onglet_interactivite' => 'Interactivitat', 'onglet_repartition_actuelle' => 'actualament', + 'onglet_sous_rubriques' => 'Sota-rubricas', // P + 'page_pas_proxy' => 'Aquesta pàgina non dèu passar dau proxy', + 'plugin_charge_paquet' => 'Cargament dau paquet @name@', + 'plugin_charger' => 'Descargar', + 'plugin_erreur_charger' => 'error : impossible de cargar @zip@', + 'plugin_erreur_droit1' => 'Lo repertòri @dest@ es pas accessible à l’escritura.', + 'plugin_erreur_zip' => 'escac pclzip : error @status@', 'plugin_etat_developpement' => 'en desfolopament', 'plugin_etat_experimental' => 'esperimental', 'plugin_etat_stable' => 'estable', 'plugin_etat_test' => 'en test', + 'plugin_impossible_activer' => 'Impossible d’ativar lo plugin @plugin@', + 'plugin_info_automatique2' => 'crear un repertòri @rep@ ;', + 'plugin_info_automatique3' => 'verificar que lo servidor es autorisat d’escriure dins aquesto répertoire.', + 'plugin_info_automatique_creer' => 'à crear à la raiç dau site.', + 'plugin_info_automatique_exemples' => 'exemples:', + 'plugin_info_automatique_ftp' => 'Podètz instalar de plugins, da FTP, dins lo repertòri @rep@', + 'plugin_info_automatique_liste' => 'Li voastri tièras de plugins:', + 'plugin_info_automatique_liste_officielle' => 'lu plugins oficiaus', + 'plugin_info_automatique_liste_update' => 'Metre à jorn li tièras', + 'plugin_info_automatique_ou' => 'ò...', + 'plugin_info_install_ok' => 'Instalacion capitada', + 'plugin_info_necessite' => 'Necessita:', + 'plugin_info_telecharger' => 'à descargar despì @url@ et à instalar dins @rep@', + 'plugin_librairies_installees' => 'Librerìas instaladi', + 'plugin_necessite_lib' => 'Aquesto plugin demanda la librerìa @lib@', + 'plugin_necessite_plugin' => 'Demanda lo plugin @plugin@ en version @version@ minimum.', # MODIF + 'plugin_necessite_spip' => 'Demanda SPIP en version @version@ minimum.', + 'plugin_source' => 'sorgent: ', + 'plugin_titre_automatique' => 'Instalacion automatica', + 'plugin_titre_automatique_ajouter' => 'Ajustar de plugins', + 'plugin_zip_active' => 'Continuatz per l’activar', + 'plugin_zip_adresse_champ' => 'Adreça dau plugin ò de la tièra', + 'plugin_zip_installer' => 'Podètz aüra l’instalar.', + 'plugin_zip_telecharge' => 'Lo fichièr @zip@ es estat decargat', + 'plugins_compte' => '@count@ plugins', + 'plugins_disponibles' => '@count@ plugins disponibles.', + 'plugins_erreur' => 'Error dins lu plugins: @plugins@', 'plugins_liste' => 'Tiera dei plugins', + 'plugins_tous_liste' => 'Toi', + 'plugins_vue_liste' => 'Tièra', 'protocole_ldap' => 'Version dau protocòl :', + // Q + 'queue_nb_jobs_in_queue' => '@nb@ travalhs en espèra', + 'queue_no_job_in_queue' => 'Minga de travalh en espèra', + 'queue_one_job_in_queue' => '1 travalh en espèra', + 'queue_titre' => 'Tièra dei travalhs', + // R 'repertoire_plugins' => 'Repertòri:', + 'required' => '(Obligatòri)', // S - 'statut_admin_restreint' => '(admin limitat)', # MODIF + 'sans_heure' => 'sensa ora', + 'statut_admin_restreint' => 'admin limitat', + 'statut_webmestre' => 'oebmestre', // T 'taille_cache_image' => 'Lu imatges que SPIP a calculat automaticament (vinhetas dei documents, títols presentats en forma gràfica, foncions matematiqui en format TeX...) ocupon dins lo repertòri @dir@ un totau de @taille@.', 'taille_cache_infinie' => 'Aquèu site prevei pas de limitacion de talha dau repertòri de l’amagador.', 'taille_cache_maxi' => 'SPIP prova de limitar la talha dau repertòri de l’amagador d’aqueu sit à circa @octets@ de donadas.', - 'taille_cache_octets' => 'Aüra la talha de l’amagador despassa @octets@.', # MODIF + 'taille_cache_octets' => 'La talha de l’amagador es aüra de circa @octets@ .', 'taille_cache_vide' => 'L’amagador es vuèi.', 'taille_repertoire_cache' => 'Talha dau repertòri amagador', 'text_article_propose_publication' => 'Article prepauat per la publicacion.', @@ -573,14 +613,11 @@ una color indica lo sieu estat :', 'texte_article_virtuel_reference' => 'Article virtuau: article referençat dins lo voastre site SPIP, ma redirigit vèrs una autra URL. Per suprimir la redireccion, escafatz l’URL çai sobre.', 'texte_aucun_resultat_auteur' => 'Minga de resultat per \\\\\\"@cherche_auteur@\\\\\\"', 'texte_auteur_messagerie' => 'Aqueu sit vos pòu indicar en permanança la tièra dei redactors connectats, cen que vos permete d’escambiar de messatges en dirècte. Podètz decidir de pas aparéisser dins aquela tièra (siètz « invisible/a » dei autres utilisaires).', - 'texte_auteur_messagerie_1' => 'Aqueu sit permete d’escambiar de messatges e de constituir de fòros de discussion privats entre lu participants dau sit. Podètz decidir de pas participar à-n-aquelu escambis.', 'texte_auteurs' => 'LU AUTORS', 'texte_choix_base_1' => 'Chausissètz la voastra basa:', 'texte_choix_base_2' => 'Lo servidor SQL conten mai d’una basa de donadas.', 'texte_choix_base_3' => 'Chausissètz çai sota aquela que lo voastre aubergador vos a atribuida :', 'texte_choix_table_prefix' => 'Prefixe dei taulas :', - 'texte_commande_vider_tables_indexation' => 'Utilisatz aquela comanda per vuar li taulas d’indexacion utilisadi per lo motor de recerca integrat à SPIP. Aquò permetrà de ganhar d’espaci disc.', - 'texte_compresse_ou_non' => '(Aquesto pòu èstre comprimit ò non)', 'texte_compte_element' => '@count@ element', 'texte_compte_elements' => '@count@ elements', 'texte_connexion_mysql' => 'Consultatz li informacions que lo voastre aubergador fornisse : li devètz trobar lo servidor de basa de donadas que prepaua e lu identificants personaus per vos connectar.', @@ -593,52 +630,36 @@ una color indica lo sieu estat :', automatica.', 'texte_creer_rubrique' => 'Denant de poder escriure d’articles,
    devètz crear una rubrica.', 'texte_date_creation_article' => 'DATA DE CREACION DE L’ARTICLE:', + 'texte_date_creation_objet' => 'Data de creacion :', # on ajoute le ":" 'texte_date_publication_anterieure' => 'Data de redaccion anteriora :', 'texte_date_publication_anterieure_nonaffichee' => 'Faire pas aparéisser de data de redaccion anteriora.', 'texte_date_publication_article' => 'DATA DE PUBLICACION EN LINHA:', - 'texte_descriptif_petition' => 'Descriptiu de la peticion', + 'texte_date_publication_objet' => 'Data de publicacion en linha:', 'texte_descriptif_rapide' => 'Descriptiu rapid', 'texte_effacer_base' => 'Escaçar la basa de donadas SPIP', - 'texte_effacer_donnees_indexation' => 'Escaçar li donadas d’indexacion', - 'texte_en_cours_validation' => 'Si prepaua de publicar lu articles e brèvas çai sota.', # MODIF + 'texte_en_cours_validation' => 'Lu contenguts çai sota son en espèra de validacion.', 'texte_enrichir_mise_a_jour' => 'Podètz enriquir la compaginacion dau voastre tèxt en utilisant d’"escorchas tipografiqui"', - 'texte_fichier_authent' => 'Deu crear, SPIP, de fichiers especiaus .htpasswd - e .htpasswd-admin dins lo repertòri @dossier@ ?

    - Aquelu fichiers vos poadon servir per restrénher l’accès ai autors - e administrators en d’autres luècs dau voastre site - (programa extèrne d’estadisticas, per exemple).

    - Se vos sèrve pas, podètz laissar aquesta opcion - à la sieu valor predefinida (minga de creacion - de fichiers).

    ', # MODIF + 'texte_fichier_authent' => 'Deu crear, SPIP, de fichiers especiaus .htpasswd e .htpasswd-admin dins lo repertòri @dossier@ ? +

    Aquelu fichiers vos poadon servir per restrénher l’accès ai autors e administrators en d’autres luècs dau voastre site (programa extèrne d’estadisticas, per exemple).

    +

    Se vos sèrve pas, podètz laissar aquesta opcion à la sieu valor predefinida (minga de creacion de fichiers).

    ', 'texte_informations_personnelles_1' => 'Aüra lo sistema vos va crear un accès personalisat au sit.', - 'texte_informations_personnelles_2' => '(Nòta: se s’agisse d’una reïnstalacion, e se lo voastre accès fonciona encara, podètz', # MODIF + 'texte_informations_personnelles_2' => '(Nòta: s’agisse d’una reïnstalacion, se lo voastre accès fonciona encara, podètz', 'texte_introductif_article' => '(Tèxt introductiu de l’article.)', 'texte_jeu_caractere' => 'Es conselhat d’emplegar, sus lo voastre site, l’alfabet universau (utf-8) : permete d’afichar de tèxtes dins toti li lengas sensa problema de compatibilitat emb lu navigators modernes.', - 'texte_jeu_caractere_2' => 'Atencion: aquest reglatge provoca pas la conversion de tèxtos jà registrats dins la basa de donadas.', 'texte_jeu_caractere_3' => 'Lo voastre site es actualament instalat dins lo juèc de caractèrs:', 'texte_jeu_caractere_4' => 'En cas qu’aquò correspoande pas à la realitat dei voastri donadas (après, per esemple, una restauracion de basa de donadas), ò que comencetz aqueu site e desiretz chausir un autre juèc de caractèrs, indicatz-lo aicí : ', - 'texte_jeu_caractere_conversion' => 'Nòta: podètz decidir de convertir un còup per totes l’ensem dei tèxtes dau voastre sit (articles, brèvas, fòros, eca.) vèrs l’alfabet utf-8, en anant à la pàgina de conversion vèrs l’utf-8.', - 'texte_lien_hypertexte' => '(Se lo voastre messatge si referisse à un article publicat sus lo web, ò à una pàgina fornissent mai d’informacions, vorgatz indicar çai sota lo titre de la pàgina e la sieu adreça URL.)', 'texte_login_ldap_1' => '(Laissar vuèi per un accès anonim, ò picar lo camin complet, per exemple «uid=fabre, ou=usanciers, dc=mon-domeni, dc=com».)', 'texte_login_precaution' => 'Atencion! Aquò’s lo login emb lo quau siètz aüra connectat/ada. Utilisatz aquest formulari emb precaucion...', - 'texte_message_edit' => 'Atencion: aquest messatge, cada redactor lo pòu veire, e cada administrator dau sit lo pòu modificar. Utilisatz li anónças solament per expauar d’aveniments importants de la vida dau sit.', 'texte_mise_a_niveau_base_1' => 'Venètz de metre à jorn lu fichiers SPIP. Aüra cau metre à nivèu la basa de donadas dau sit.', 'texte_modifier_article' => 'Modificar l’article :', - 'texte_moteur_recherche_active' => 'Lo motor de recerca es activat. Utilisatz aquesta comanda - se volètz tornar indexar la basa rapidament (après restauracion - d’una sauvagarda per exemple). Notatz que lu documents modificats d’una - maniera normala (a partir de l’interfaça SPIP) se tornan indexar - automaticament: donc aquesta comanda es utila solament d’un biais excepcionau.', - 'texte_moteur_recherche_non_active' => 'Lo motor de recerca es pas activat.', - 'texte_multilinguisme' => 'Se desiratz gerar d’articles en mai d’una lenga, emb una navigacion complèxa, podètz apondre un menut per chausir la lenga dei articles e/ò dei rubricas, en foncion de l’organisacion dau voastre sit.', # MODIF - 'texte_multilinguisme_trad' => 'Podètz tanben activar un sistema de gestion dei ligams entre li diferentes reviradas d’un article.', # MODIF + 'texte_multilinguisme' => 'Se desiratz gerar d’objèctes en mai d’una lenga, emb una navigacion complèxa, podètz apondre un menut per chausir la lenga dei objèctes, en foncion de l’organisacion dau voastre sit.', + 'texte_multilinguisme_trad' => 'Podètz tanben activar un sistema de gestion de ligams entre li diferentas reviradas sus d’unu objèctes.', 'texte_non_compresse' => 'non comprimit (lo voastre servidor supoarta pas aquela foncionalitat)', - 'texte_nouveau_message' => 'Messatge novèu', 'texte_nouvelle_version_spip_1' => 'Avètz installat una novèla version de SPIP.', - 'texte_nouvelle_version_spip_2' => 'Aquesta version novèla demanda una actualisacion mai completa que de costuma. Se siètz webmèstre/webmèstressa dau site, vorgatz escafar lo fichier @connect@ e tornar prendre l’installacion per fin d’actualisar lu voastres paramètres de connexion à la basa de donadas.

    (NB: s’avètz denembrat lu voastres paramètres de connexion, regarjatz lo fichier @connect@ denant de lo suprimir...)

    ', # MODIF + 'texte_nouvelle_version_spip_2' => 'Aquesta version novèla demanda una actualisacion mai completa que de costuma. Se siètz webmèstre/webmèstressa dau site, vorgatz escafar lo fichier @connect@ e tornar prendre l’instalacion per fin d’actualisar lu voastres paramètres de connexion à la basa de donadas.

    (NB: s’avètz denembrat lu voastres paramètres de connexion, regarjatz lo fichier @connect@ denant de lo suprimir...)

    ', 'texte_operation_echec' => 'Tornatz à la pàgina precedenta, chausissètz una autra basa ò creatz-nen una novèla. Verificatz li informacions que lo voastre aubergador v’a fornidi.', 'texte_plus_trois_car' => 'mai de 3 caractèrs', 'texte_plusieurs_articles' => 'Mantun autor trobat per "@cherche_auteur@":', @@ -646,16 +667,13 @@ una color indica lo sieu estat :', 'texte_presente_plugin' => 'Aquela pàgina lista lu ajustons disponibles sus lo site. Podètz activar lu ajustons necessaris en marcant la casa correspondenta.', 'texte_proposer_publication' => 'Quora auretz acabat lo voastre article,
    podretz prepauar que sigue publicat.', 'texte_proxy' => 'Dins certans cas (intranet, rets protegidi...), si pòu que caugue utilisar un proxy HTTP per aténher lu sits sindicats. - En aqueu cas, marcatz çai sota la sieu adreça, sota la forma - http://proxy:8080. En generau, - laissaretz vuèia aquela casa.', # MODIF + En aqueu cas, marcatz çai sota la sieu adreça, sota la forma @proxy_en_cours@. En generau, laissaretz vuèia aquela casa.', 'texte_publication_articles_post_dates' => 'Coma SPIP si deu comportar fàça ai articles que la sieu data de publicacion es fixada à una escasença futura?', 'texte_rappel_selection_champs' => '[Oblidetz pas de seleccionar correctament aqueu camp.]', 'texte_recalcul_page' => 'Se volètz tornar calcular solament una pàgina, passatz puslèu per l’espaci public et utilisatz lo boton « tornar calcular ».', - 'texte_recapitiule_liste_documents' => 'Aquesta pàgina recapitula la tiera dei documents qu’avètz plaçats dins li rubricas. Per modificar li informacions de cada document, seguissètz lo ligam vers la pàgina de la sieua rubrica.', 'texte_recuperer_base' => 'Reparar la basa de donadas', 'texte_reference_mais_redirige' => 'article referençat dins lo voastre sit SPIP, ma redirigit vers una autra URL.', 'texte_requetes_echouent' => 'Quora certani requistas SQL s’encalon @@ -667,7 +685,7 @@ tornar calcular solament una pàgina, passatz puslèu per l’espaci public et u capita pas, servatz una còpia de l’afichatge, que conten bessai d’indicis de cen que va pas...

    Se lo problema persistisse, contactatz lo voastre - aubergador.

    ', # MODIF + aubergador.

    ', 'texte_selection_langue_principale' => 'Podètz seleccionar çai sota la "lenga principala" dau sit. Aquela chausida vos obliga pas - gauch pron que non - d’escriure lu voastres articles dins la lenga seleccionada, ma permete de determinar:
    • lo format predefinit dei datas sus lo sit public;
    • la natura dau motor tipografic que SPIP deu utilisar per lo rendut dei tèxtes;
    • @@ -683,7 +701,6 @@ dins l’amagador SPIP. Aquò permete per exemple de forçar un novèu calcul de s’avètz bravament modificat lo grafisme ò l’estructura dau sit.', 'texte_sur_titre' => 'Sobretitre', 'texte_table_ok' => ': aquesta taula es condrecha.', - 'texte_tables_indexation_vides' => 'Li taulas d’indexacion dau motor son vuèii.', 'texte_tentative_recuperation' => 'Temptativa de reparacion', 'texte_tenter_reparation' => 'Provar de reparar la basa de donadas', 'texte_test_proxy' => 'Per provar aqueu proxy, indicatz aquí l’adreça d’un sit web @@ -698,89 +715,56 @@ s’avètz bravament modificat lo grafisme ò l’estructura dau sit.', Aquela opcion es desactivada de manièra predefinida per evitar d’afichar de messatges d’avertiment intempestius.', - 'texte_trop_resultats_auteurs' => 'Tròup de resultats per "@cherche_auteur@" ; vorgatz afinar la recerca.', - 'texte_unpack' => 'Descargament de la darriera version', - 'texte_utilisation_moteur_syndiques' => 'Quora utilisatz lo motor de recerca integrat - à SPIP, podètz far li recercas sus lu sites e - articles sindicats de doi manieras - diferenti.
      - Lo mai - simple consiste de recercar ren que dins lu - titres e descriptius dei articles.
      - - La segonda maniera, ben mai potent, permete - à SPIP de recercar tambèn dins lo tèxt dei - sites referençats. Se referençatz - un site, alora SPIP farà la - recerca dins lo tèxt dau site.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Aquela metòde obliga SPIP de visitar - regularament lu sits referençats, - aquò pòu relentir un pauc lo voastre - sit.', 'texte_vide' => 'vuèi', 'texte_vider_cache' => 'Vuar l’amagador', - 'titre_admin_effacer' => 'Mantenença tecnica', 'titre_admin_tech' => 'Mantenença tecnica', 'titre_admin_vider' => 'Mantenença tecnica', + 'titre_ajouter_un_auteur' => 'Ajustar un autor', + 'titre_ajouter_un_mot' => 'Ajustar un mòt-clau', 'titre_cadre_afficher_article' => 'Afichar lu articles', 'titre_cadre_afficher_traductions' => 'Afichar l’estat dei reviradas per li lengas segenti :', 'titre_cadre_ajouter_auteur' => 'AJUSTAR UN AUTOR :', 'titre_cadre_interieur_rubrique' => 'Dintre de la rubrica', 'titre_cadre_numero_auteur' => 'AUTOR NÚMERO', 'titre_cadre_signature_obligatoire' => 'Signatura [Obligada]
      ', + 'titre_config_contenu_notifications' => 'Notificacions', + 'titre_config_contenu_prive' => 'Dins l’espàci privat', + 'titre_config_contenu_public' => 'Sus lo site public', 'titre_config_fonctions' => 'Configuracion dau sit', + 'titre_config_langage' => 'Configurar la lenga', 'titre_configuration' => 'Configuracion dau sit', + 'titre_configurer_preferences' => 'Configurar li voastri preferenças', 'titre_connexion_ldap' => 'Opcions : La voastra connexion LDAP', 'titre_groupe_mots' => 'GROP DE MÒTS :', - 'titre_langue_article' => 'LENGA DE L’ARTICLE', # MODIF - 'titre_langue_rubrique' => 'LENGA DE LA RUBRICA', # MODIF + 'titre_identite_site' => 'Identitat dau site', + 'titre_langue_article' => 'Lenga de l’article', + 'titre_langue_rubrique' => 'Lenga de la rubrica', 'titre_langue_trad_article' => 'LENGA E REVIRADAS DE L’ARTICLE', 'titre_les_articles' => 'LU ARTICLES', 'titre_naviguer_dans_le_site' => 'Navigar dins lo sit...', 'titre_nouvelle_rubrique' => 'Novèla rubrica', 'titre_numero_rubrique' => 'RUBRICA NÚMERO :', - 'titre_page_admin_effacer' => 'Mantenança tecnica : escaçar la basa', 'titre_page_articles_edit' => 'Modificar : @titre@', 'titre_page_articles_page' => 'Lu articles', 'titre_page_articles_tous' => 'Tot lo sit', - 'titre_page_auteurs' => 'Visitaires', 'titre_page_calendrier' => 'Calendier @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Configuracion dau sit', - 'titre_page_config_fonctions' => 'Configuracion dau sit', - 'titre_page_configuration' => 'Configuracion dau sit', - 'titre_page_controle_petition' => 'Seguit dei peticions', 'titre_page_delete_all' => 'supression totala e irreversibla', - 'titre_page_documents_liste' => 'Lu documents dei rubricas', - 'titre_page_index' => 'Lo voastre espaci privat', - 'titre_page_message_edit' => 'Escriure un messatge', - 'titre_page_messagerie' => 'La voastra messatgeria', 'titre_page_recherche' => 'Resultats de la recerca @recherche@', 'titre_page_statistiques_referers' => 'Estatisticas (estacs intrants)', 'titre_page_upgrade' => 'Mesa à nivèu de SPIP', 'titre_publication_articles_post_dates' => 'Publicacion dei articles poastdatats', - 'titre_referencer_site' => 'Referençar lo sit:', - 'titre_rendez_vous' => 'RENDÈTZ-VOS:', 'titre_reparation' => 'Reparacion', 'titre_suivi_petition' => 'Seguit dei peticions', 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'li a minga d’article que poarton aqueu número.', 'trad_article_traduction' => 'Toti li versions d’aquel article :', - 'trad_deja_traduit' => 'Impossible de legar aquel article au numerò demandat.', - 'trad_delier' => 'Ligar plus aquest article ai reviradas sieui', # MODIF + 'trad_delier' => 'Non ligar mai à aquesti reviradas', 'trad_lier' => 'Aquel article es una revirada de l’article número :', - 'trad_new' => 'Escriure una novèla revirada d’aquel article', # MODIF + 'trad_new' => 'Escriure una novèla revirada', // U - 'utf8_convert_attendez' => 'Esperatz un moment e tornatz cargar aquesta pàgina.', - 'utf8_convert_avertissement' => 'Siètz sus lo ponch de convertir lo contengut de voastra basa de donadas (articles, brèvas, eca.) dau juèc de caractèrs @orig@ devers lo juè de caractèrs @charset@.', - 'utf8_convert_backup' => 'Oblidètz pas de far en promièr una sauvagarda completa dau voastre site. Vos cau tanben verificar que lu voastres esqueletas e fichièrs de lenga son compatibles @charset@. N’oubliez pas de faire auparavant une sauvegarde complète de votre site. Vous devrez aussi vérifier que vos squelettes et fichiers de langue sont compatibles @charset@.', - 'utf8_convert_erreur_deja' => 'Lo voastre site es jà en @charset@, es inutile de lo convertir...', 'utf8_convert_erreur_orig' => 'Error: lo juèc de caractèrs @charset@ es pas suportat.', - 'utf8_convert_termine' => 'Es acabat!', - 'utf8_convert_timeout' => 'Important : en cas de timeout dau servidor, vorgatz tornar cargar la pàgina fins à cen qu’indique « acabat ».', - 'utf8_convert_verifier' => 'Vos cau aüra vuar l’amagador, e verificar que tot va plan sus li pàginas publicas dau site. En cas de gròs problèma, una sauvagarda de voastri donadas s’es realizada (de format SQL) dins lo repertòri @rep@.', - 'utf8_convertir_votre_site' => 'Convertir lo voastre site en utf-8', // V 'version' => 'Version:' ); - -?> diff --git a/www/ecrire/lang/ecrire_oc_ni_la.php b/www/ecrire/lang/ecrire_oc_ni_la.php index 4aa4cc43..9da9fecf 100644 --- a/www/ecrire/lang/ecrire_oc_ni_la.php +++ b/www/ecrire/lang/ecrire_oc_ni_la.php @@ -1,9 +1,11 @@ 'Minga de resultat.', 'avis_chemin_invalide_1' => 'Lo camin qu’avètz chausit', 'avis_chemin_invalide_2' => 'non sembla valid. Vorgatz tornar a la pàgina anteriora per verificar li informacions fornidi.', - 'avis_connexion_echec_1' => 'La connexion au servidor SQL s’es encalada.', # MODIF + 'avis_connexion_echec_1' => 'La conexion au servidor SQL s’es encalada.', 'avis_connexion_echec_2' => 'Tornatz a la pàgina anteriora, e verificatz li informacions qu’avètz fornidi.', 'avis_connexion_echec_3' => 'N.B. Sus tot plen de servidors, devètz demandar qu’activen lo vòstre accès a la basa SQL avans de la poder utilizar. Se non vos podètz connectar, verificatz qu’augatz ben realizat aqueu procediment.', # MODIF 'avis_connexion_ldap_echec_1' => 'La connexion au servidor LDAP s’es encalada.', 'avis_connexion_ldap_echec_2' => 'Tornatz a la pàgina anteriora, e verificatz li informacions qu’avètz fornidi. ', 'avis_connexion_ldap_echec_3' => 'Alternativament, non utilizetz lo supòrt LDAP per importar d’utilizaires.', 'avis_deplacement_rubrique' => 'Atention! Aquela rubrica conten @contient_breves@ brèvas@scb@: se la desplaçatz, vorretz ben oscar aquela casa de confirmacion.', - 'avis_destinataire_obligatoire' => 'Devètz indicar un destinatari avans de mandar aqueu messatge.', 'avis_erreur_connexion_mysql' => 'Error de connexion SQL', - 'avis_erreur_version_archive' => 'Atencion! Lo fichier @archive@ correspònde a una autra version d’SPIP qu’aquela qu’avètz installada. Anatz devèrs de dificultats grandassi: risca de destruccion de la vòstra basa de donadas, disfoncionaments divèrs dau sit, etc. Non validetz aquela demanda d’importacion.

      Per mai d’informacions, veètz - -la documentacion d’SPIP.', # MODIF - 'avis_espace_interdit' => 'Espaci proïbit

      SPIP es ja installat.', + 'avis_espace_interdit' => 'Espaci proïbit

      SPIP es ja installat.', # MODIF 'avis_lecture_noms_bases_1' => 'Lo programa d’installacion non a pas legir lu noms dei basas de donadas installadi.', 'avis_lecture_noms_bases_2' => 'Sia minga de basa es disponibla, sia la foncion que permete d’entierar li basas es estada desactivada per de rasons de seguretat (aquò es lo cas a cò de plusors aubergadors).', 'avis_lecture_noms_bases_3' => 'Dins la segonda alternativa, es probable qu’una basa que pòrta lo vòstre nom de login sia utilizabla:', - 'avis_non_acces_message' => 'Non podètz accedir a aqueu messatge.', 'avis_non_acces_page' => 'Non podètz accedir a aquela pàgina.', 'avis_operation_echec' => 'L’operacion s’es encalada.', - 'avis_probleme_archive' => 'Problèma de lectura dau fichier @archive@', 'avis_suppression_base' => 'ATENCION, suprimir li donadas es irreversible', - 'avis_version_mysql' => 'La vòstra version de SQL (@version_mysql@) non permete l’autoreparacion dei taulas de la basa.', // B 'bouton_acces_ldap' => 'Apondre l’accès a LDAP >>', 'bouton_ajouter' => 'Apondre', - 'bouton_ajouter_participant' => 'APONDRE UN PARTICIPANT:', - 'bouton_annonce' => 'ANONCI', - 'bouton_checkbox_envoi_message' => 'possibilitat de mandar un messatge', - 'bouton_checkbox_indiquer_site' => 'indicar obligatoriament un sit web', - 'bouton_checkbox_signature_unique_email' => 'basta una signatura per adreiça e-mail', - 'bouton_checkbox_signature_unique_site' => 'basta una signatura per sit web', 'bouton_demande_publication' => 'Demandar la publicacion d’aquest article', - 'bouton_effacer_index' => 'Esfaçar lu indèx', 'bouton_effacer_tout' => 'O esfaçar tot', - 'bouton_envoi_message_02' => 'MANDAR UN MESSATGE', 'bouton_envoyer_message' => 'Messatge definitiu: mandar', 'bouton_modifier' => 'Modificar', - 'bouton_pense_bete' => 'MEMENTO (D’USATGE PERSONAU)', - 'bouton_radio_activer_messagerie' => 'Activar la messatjaria intèrna', - 'bouton_radio_activer_messagerie_interne' => 'Activar la messatjaria intèrna', - 'bouton_radio_activer_petition' => 'Activar la peticion', 'bouton_radio_afficher' => 'Afichar', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Afichar dins la tiera dei redactors connectats', - 'bouton_radio_desactiver_messagerie' => 'Desactivar la messatjaria', 'bouton_radio_envoi_annonces_adresse' => 'Mandar lu anoncis a l’adreiça:', 'bouton_radio_envoi_liste_nouveautes' => 'Mandar la tiera dei novetats', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Non aparéisser dins la tiera dei redactors', 'bouton_radio_non_envoi_annonces_editoriales' => 'Non mandar d’anoncis editoriaus', - 'bouton_radio_pas_petition' => 'Minga de peticion', - 'bouton_radio_petition_activee' => 'Peticion activada', - 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', 'bouton_redirection' => 'TORNAR DIRIGIR', 'bouton_relancer_installation' => 'Tornar lançar l’installacion', 'bouton_suivant' => 'Seguent', 'bouton_tenter_recuperation' => 'Assaiar de reparar', 'bouton_test_proxy' => 'Assaiar lo proxy', 'bouton_vider_cache' => 'Vuar l’escondedor', - 'bouton_voir_message' => 'Veire aqueu messatge avans de lo validar', // C - 'cache_mode_compresse' => 'Lu fichiers de l’escondedor son registrats en mòde comprimit.', - 'cache_mode_non_compresse' => 'Lu fichiers de l’escondedor son registrats en mòde non comprimit.', 'cache_modifiable_webmestre' => 'Lo webmèstre dau sit pòu modificar aquestu paramètres.', 'calendrier_synchro' => 'S’utilizatz un logiciau d’agenda compatible iCal, lo podètz sincronizar embai informacions d’aquest sit.', @@ -104,7 +80,6 @@ L’administrator dau sistèma ò de la ret vos deu poder fornir 'entree_login' => 'Lo vòstre login', 'entree_login_connexion_1' => 'Lo login de connexion', 'entree_login_connexion_2' => '(Correspònde de còups au vòstre login d’accès a l’FTP; de còups si laissa vuei)', - 'entree_login_ldap' => 'Login LDAP iniciau', 'entree_mot_passe' => 'Lo vòstre mot de santa Clara', 'entree_mot_passe_1' => 'Mot de santa Clara per la connexion', 'entree_mot_passe_2' => '(Correspònde de còups au vòstre mot de santa Clara per l’FTP; de còups si laissa vuei)', @@ -124,7 +99,7 @@ L’administrator dau sistèma ò de la ret vos deu poder fornir 'ical_info2' => 'Per tenir mai d’informacions sobre aqueli tecnicas, non esitetz de consultar la documentacion d’SPIP.', # MODIF 'ical_info_calendrier' => 'I a doi calendiers a la vòstra disposicion. Lo primier es un plan dau sit qu’anóncia toi lu articles publicats. Lo segond conten lu anoncis editoriaus en mai dei vòstres darriers messatges privats: v’es reservat gaug a una clau personala, que la podètz modificar en tot moment en renovant lo vòstre mot de santa Clara. ', 'ical_methode_http' => 'Telecargament', - 'ical_methode_webcal' => 'Sincronizacion (webcal://)', + 'ical_methode_webcal' => 'Sincronizacion (webcal://)', # MODIF 'ical_texte_js' => 'Lu articles publicats en aqueu sit si pòdon afichar aisat, dins toi lu sits vòstres, en fent servir una linha javascript. ', 'ical_texte_prive' => 'Aqueu calendier, d’us estrictament personau, v’informa de l’activitat editoriala privada d’aqueu sit (òbras e rendètz-vos personaus, articles e brèvas prepauats...).', 'ical_texte_public' => 'Aqueu calendier vos permete de sègre l’activitat publica d’aqueu sit (articles e brèvas publicats).', @@ -140,9 +115,7 @@ L’administrator dau sistèma ò de la ret vos deu poder fornir 'icone_creer_auteur' => 'Crear un autor nòu e l’associar a aquel article', 'icone_creer_mot_cle' => 'Crear un mot clau nòu e lo ligar a aquel article', 'icone_creer_rubrique_2' => 'Crear una rubrica nòva', - 'icone_envoyer_message' => 'Mandar aqueu messatge', 'icone_modifier_article' => 'Modificar aquel article', - 'icone_modifier_message' => 'Modificar aqueu messatge', 'icone_modifier_rubrique' => 'Modificar aquela rubrica', 'icone_retour' => 'Tornar', 'icone_retour_article' => 'Tornar a l’article', @@ -152,10 +125,7 @@ L’administrator dau sistèma ò de la ret vos deu poder fornir 'icone_valider_signature' => 'Validar aquela signatura', 'image_administrer_rubrique' => 'Podètz administrar aquela rubrica', 'info_1_article' => '1 article', - 'info_1_site' => '1 sit', 'info_activer_cookie' => 'Podètz activar un cookie de correspondéncia; aquò vos permetrà de passar aisat dau sit public au sit privat.', - 'info_admin_gere_rubriques' => 'Aquel administrator gerisse li rubricas seguenti:', - 'info_admin_gere_toutes_rubriques' => 'Aquel administrator gerisse toti li rubricas.', # MODIF 'info_administrateur' => 'Administrator', 'info_administrateur_1' => 'Administrator', 'info_administrateur_2' => 'dau sit(d’utilizar emb precaucion)', @@ -165,13 +135,10 @@ L’administrator dau sistèma ò de la ret vos deu poder fornir 'info_administrer_rubrique' => 'Podètz administrar aquela rubrica', 'info_adresse' => 'a l’adreiça:', 'info_adresse_url' => 'Adreiça (URL) dau sit public', - 'info_afficher_visites' => 'Afichar li vesitas per:', 'info_aide_en_ligne' => 'Ajuda en linha SPIP', 'info_ajout_image' => 'Quand apondètz d’imatges coma estacaments jonchs a un article, SPIP pòu crear automaticament per vos de vinhetas (miniaturas) dei imatges inserits. Aquò permete per exemple de crear automaticament una galaria ò un pòrtfòlio.', - 'info_ajout_participant' => 'Lo participant seguent es apondut:', 'info_ajouter_rubrique' => 'Apondre una autra rubrica d’administrar:', 'info_annonce_nouveautes' => 'Anonci dei novetats', - 'info_anterieur' => 'anteriora', 'info_article' => 'article', 'info_article_2' => 'articles', 'info_article_a_paraitre' => 'Lu articles pòstdatats per paréisser', @@ -179,10 +146,8 @@ L’administrator dau sistèma ò de la ret vos deu poder fornir 'info_articles_2' => 'Articles', 'info_articles_auteur' => 'Lu articles d’aquel autor', 'info_articles_trouves' => 'Articles trobats', - 'info_articles_trouves_dans_texte' => 'Articles trobats (dins lo tèxt)', 'info_attente_validation' => 'Lu vòstres articles en espèra de validacion', 'info_aujourdhui' => 'ancuei:', - 'info_auteur_message' => 'AUTOR DAU MESSATGE:', 'info_auteurs' => 'Lu autors', 'info_auteurs_par_tri' => 'autors@partri@', 'info_auteurs_trouves' => 'Autors trobats', @@ -215,15 +180,12 @@ L’administrator dau sistèma ò de la ret vos deu poder fornir 'info_date_publication_anterieure' => 'Data anteriora de publicacion:', 'info_date_referencement' => 'DATA DE REFERENCIAMENT D’AQUEU SIT:', 'info_derniere_etape' => 'Darriera estapa: Es acabat!', - 'info_derniers_articles_publies' => 'Lu vòstres darriers articles publicats en linha', - 'info_desactiver_messagerie_personnelle' => 'Podètz activar ò desactivar la vòstra messatjaria personala sus aqueu sit.', 'info_descriptif' => 'Descriptiu:', 'info_discussion_cours' => 'Discussions en cors', 'info_ecrire_article' => 'Avans de poder escriure d’articles, vos cau crear aumens una rubrica.', 'info_email_envoi' => 'Adreiça e-mail de mandadís (opcionau)', 'info_email_envoi_txt' => 'Indicatz aicí l’adreiça d’utilizar per enviar lu e-mails (a fauta d’aquò, s’utilizarà l’adreiça destinatari coma adreiça de mandadís):', 'info_email_webmestre' => 'Adreiça e-mail dau responsable dau sit (opcionau)', # MODIF - 'info_entrer_code_alphabet' => 'Picatz lo còde de l’alfabet d’utilizar:', 'info_envoi_email_automatique' => 'Mandadís d’e-mails automatics', 'info_envoyer_maintenant' => 'Mandar aüra', 'info_etape_suivante' => 'Passar a l’estapa seguenta', @@ -233,27 +195,19 @@ L’administrator dau sistèma ò de la ret vos deu poder fornir 'info_facilite_suivi_activite' => 'Per facilitar lo segut de l’activitat editoriala dau sit, SPIP vos pòu fornir per e-mail, per exemple a una lista de corrier dei redactors, l’anonci dei demandas de publicacion e dei validacions d’articles.', 'info_fichiers_authent' => 'Fichiers d’autentificacion « .htpasswd »', 'info_forums_abo_invites' => 'Lo vòstre sit web pòrge de forums per lu abonats; dins lo sit public lu vesitaires son convidats a si registrar.', - 'info_gauche_admin_effacer' => 'A aquela pàgina, basta lu responsables dau sit i pòdon accedir.

      Permete de trobar li diferenti foncions de mantenença tecnica. D’uni que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.

      ', # MODIF 'info_gauche_admin_tech' => 'A aquela pàgina, basta lu responsables dau sit i pòdon accedir.

      Permete de trobar li diferenti foncions de mantenença tecnica. D’uni que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.

      ', # MODIF 'info_gauche_admin_vider' => 'A aquela pàgina, basta lu responsables dau sit i pòdon accedir.

      Permete de trobar li diferenti foncions de mantenença tecnica. D’uni que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.

      ', # MODIF 'info_gauche_auteurs' => 'Trobaretz aicí toi lu autors dau sit. La color dei icònas n’indica l’estatut (administrator = verd; redactor = jaune).', 'info_gauche_auteurs_exterieurs' => 'Lu autors exteriors, sensa accès au sit, son indicats per una icòna blava; lu autors esfaçats per un bordilhier.', # MODIF 'info_gauche_messagerie' => 'La messatjaria vos permete d’escambiar de messatges entre redactors, de servar de mementos (per lo vòstre usatge personau) o d’afichar d’anoncis sus la pàgina d’acuelh de l’espaci privat (se siatz administrator/tritz).', - 'info_gauche_numero_auteur' => 'AUTOR NÚMERO', 'info_gauche_statistiques_referers' => 'Aquela pàgina presenta la lista dei referidors, valent a dire dei sits que contenon de ligams menant vèrs lo vòstre sit pròpri, mas unicament per ièr e ancuei: aquela lista s’actualiza cada 24 oras.', 'info_gauche_visiteurs_enregistres' => 'Trobaretz aquí lu vesitaires registrats dins l’espaci public dau sit (forums emb abonament).', 'info_generation_miniatures_images' => 'Congreacion de miniaturas dei imatges', - 'info_gerer_trad' => 'Gerir lu ligams de revirada?', 'info_hebergeur_desactiver_envoi_email' => 'D’unu aubergadors desactivan lo mandadís automatic d’e-mails despí lu sieus servidors. En aqueu cas, li foncionalitats seguenti d’SPIP non foncionaràn.', 'info_hier' => 'ièr:', - 'info_historique_activer' => 'Activar lo seguiment dei revisions', - 'info_historique_affiche' => 'Afichar aquela version', - 'info_historique_comparaison' => 'comparason', - 'info_historique_desactiver' => 'Desactivar lo seguiment dei revisions', - 'info_historique_texte' => 'Lo seguiment dei revisions permete de servar un istoric de toti li modificacions que s’es portat au contengut d’un article, e d’afichar li diferéncias entre li versions successivi.', 'info_identification_publique' => 'La vòstra identitat publica...', 'info_image_process' => 'Vorgatz seleccionar lo melhor metòde de fabricacion dei vinhetas en clicant sus l’imatge correspondent.', 'info_image_process2' => 'N.B. Se minga d’imatge apareisse, alora lo servidor qu’aubèrga lo vòstre sit non l’an configurat per utilizar d’aisinas tali. Se desiratz d’utilizar aqueli foncions, contactatz lo responsable tecnic e demandatz li extensions «GD» ò «Imagick».', # MODIF @@ -271,8 +225,6 @@ L’administrator dau sistèma ò de la ret vos deu poder fornir 'info_login_trop_court' => 'Login tròup cort.', 'info_maximum' => 'maximum:', 'info_meme_rubrique' => 'Dins la meteissa rubrica', - 'info_message' => 'Messatge dau', - 'info_message_efface' => 'MESSATGE ESFAÇAT', 'info_message_en_redaction' => 'Lu vòstres messatges en cors de redaccion', 'info_message_technique' => 'Messatge tecnic:', 'info_messagerie_interne' => 'Messatjaria intèrna', @@ -285,20 +237,15 @@ L’administrator dau sistèma ò de la ret vos deu poder fornir 'info_modifier_rubrique' => 'Modificar la rubrica:', 'info_modifier_titre' => 'Modificar: @titre@', 'info_mon_site_spip' => 'Lo mieu sit SPIP', - 'info_mot_sans_groupe' => '(Mots fòra grop...)', - 'info_moteur_recherche' => 'Cercador integrat', 'info_moyenne' => 'mejana:', - 'info_multi_articles' => 'Activar lo menut de lenga per lu articles?', 'info_multi_cet_article' => 'Lenga d’aquest article:', 'info_multi_langues_choisies' => 'Vorgatz seleccionar çai sota li lengas que son a posita dei redactors dau vòstre sit. Li lengas ja emplegadi dins lo vòstre sit (afichadi d’en primier) non si pòdon desactivar.', - 'info_multi_rubriques' => 'Activar lo menut de lenga per li rubricas?', 'info_multi_secteurs' => '... basta per li rubricas a la raiç dau sit?', 'info_nom' => 'Nom', 'info_nom_destinataire' => 'Nom dau destinatari', 'info_nom_site' => 'Nom dau vòstre sit', 'info_nombre_articles' => '@nb_articles@ articles,', - 'info_nombre_partcipants' => 'PARTICIPANTS A LA DISCUSSION:', 'info_nombre_rubriques' => '@nb_rubriques@ rubricas,', 'info_nombre_sites' => '@nb_sites@ sits,', 'info_non_deplacer' => 'De non desplaçar...', @@ -308,36 +255,26 @@ L’administrator dau sistèma ò de la ret vos deu poder fornir 'info_non_modifiable' => 'non si pòu modificar', 'info_non_suppression_mot_cle' => 'non vòli suprimir aqueu mot clau.', 'info_notes' => 'Nòtas', - 'info_nouveaux_message' => 'Messatges nòus', 'info_nouvel_article' => 'Article nòu', 'info_nouvelle_traduction' => 'Revirada nòva:', 'info_numero_article' => 'ARTICLE NÚMERO:', 'info_obligatoire_02' => '[Obligatòri]', # MODIF 'info_option_accepter_visiteurs' => 'Acceptar l’inscripcion dei vesitaires dau sit public', - 'info_option_faire_suivre' => 'Faire sègre lu messatges dei forums ai autors dei articles', 'info_option_ne_pas_accepter_visiteurs' => 'Refusar l’inscripcion de vesitaires', 'info_options_avancees' => 'OPCIONS AVANÇADI', - 'info_ortho_activer' => 'Activar lo verificador d’ortografia', - 'info_ortho_desactiver' => 'Desactivar lo verificador d’ortografia', 'info_ou' => 'ò... ', 'info_page_interdite' => 'Pàgina proïbida', 'info_par_nombre_article' => '(per nombre d’articles)', 'info_passe_trop_court' => 'Mot de santa Clara tròp cort.', 'info_passes_identiques' => 'Lu doi mots de santa Clara non son identics.', - 'info_pense_bete_ancien' => 'Lu vòstres mementos ancians', # MODIF 'info_plus_cinq_car' => 'mai de 5 caractèrs', 'info_plus_cinq_car_2' => '(mai de 5 caractèrs)', 'info_plus_trois_car' => '(mai de 3 caractèrs)', 'info_popularite' => 'popularitat: @popularite@; vesitas: @visites@', - 'info_popularite_4' => 'popularitat: @popularite@; vesitas: @visites@', 'info_post_scriptum' => 'Post-scriptum', 'info_post_scriptum_2' => 'Post-scriptum:', 'info_pour' => 'per', - 'info_preview_admin' => 'Solament lu administrators pòdon previsualizar lo sit', - 'info_preview_comite' => 'Toi lu redactors pòdon previsualizar lo sit', - 'info_preview_desactive' => 'La previsualizacion es dau tot desactivada', - 'info_preview_texte' => 'Es possible de previsualizar lo sit coma s’avian publicat toi lu articles e brèvas (que tenon aumens l’estatut "prepauat"). La cau durbir, aquela possibilitat, basta ai administrators, a toi lu redactors, ò en degun?', - 'info_principaux_correspondants' => 'Lu vòstres correspondents principaus', + 'info_preview_texte' => 'Es possible de previsualizar lo sit coma s’avian publicat toi lu articles e brèvas (que tenon aumens l’estatut "prepauat"). La cau durbir, aquela possibilitat, basta ai administrators, a toi lu redactors, ò en degun?', # MODIF 'info_procedez_par_etape' => 'procedissètz estapa per estapa', 'info_procedure_maj_version' => 'Cau lançar la procedura d’actualizacion per adaptar la basa de donadas a la version novèla d’SPIP.', @@ -352,12 +289,9 @@ L’administrator dau sistèma ò de la ret vos deu poder fornir que li dona un còde d’accès au sit privat. D’unu aubergadors non autorizan lo mandadís d’e-mails despí lu sieus servidors: en aqueu cas, l’inscripcion automatica es impossibla.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Desiratz d’utilizar lo cercador integrat a SPIP? (lo desactivar abriva lo foncionament dau sistèma.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Raiç dau sit', 'info_recharger_page' => 'Vorgatz tornar cargar aquela pàgina dins un momenton.', - 'info_recherche_auteur_a_affiner' => 'Tròup de resultats per "@cherche_auteur@"; vorgatz afinar la cèrca.', - 'info_recherche_auteur_ok' => 'Plusors redactors trobats per "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Minga de resultat trobat per "@cherche_auteur@".', 'info_recommencer' => 'Vorgatz tornar començar.', 'info_redacteur_1' => 'Redactor', @@ -374,7 +308,6 @@ D’unu aubergadors non autorizan lo mandadís d’e-mails despí lu sieus servi 'info_rubriques' => 'Rubricas', 'info_rubriques_02' => 'rubricas', 'info_rubriques_trouvees' => 'Rubricas trobadi', - 'info_rubriques_trouvees_dans_texte' => 'Rubricas trobadi (dins lo tèxt)', 'info_sans_titre' => 'Sensa títol', 'info_selection_chemin_acces' => 'Seleccionatz çai sota lo camin d’accès dins l’annuari:', 'info_signatures' => 'signaturas', @@ -387,11 +320,9 @@ D’unu aubergadors non autorizan lo mandadís d’e-mails despí lu sieus servi 'info_sites_lies_mot' => 'Lu sits referenciats ligats a aqueu mot clau', 'info_sites_proxy' => 'Utilizar un proxy', 'info_sites_trouves' => 'Sits trobats', - 'info_sites_trouves_dans_texte' => 'Sits trobats (dins lo tèxt)', 'info_sous_titre' => 'Sostítol:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Estatut d’aquel autor:', # MODIF - 'info_statut_efface' => 'Esfaçat', 'info_statut_redacteur' => 'Redactor', 'info_statut_utilisateurs_1' => 'Estatut predefinit dei utilizaires importats', 'info_statut_utilisateurs_2' => 'Chausissètz l’estatut d’atribuir ai personas presenti dins l’annuari LDAP quora si connèctan per lo primier còup. Porretz pi modificar aquel estatut per cada autor un cas per un.', @@ -409,7 +340,6 @@ D’unu aubergadors non autorizan lo mandadís d’e-mails despí lu sieus servi 'info_tous_articles_en_redaction' => 'Toi lu articles en cors de redaccion', 'info_tous_articles_presents' => 'Toi lu articles publicats dins aquela rubrica', 'info_tous_les' => 'toi lu:', - 'info_tous_redacteurs' => 'Anoncis a toi lu redactors ', 'info_tout_site' => 'Tot lo sit', 'info_tout_site2' => 'Non an revirat l’article dins aquela lenga.', 'info_tout_site3' => 'An revirat l’article dins aquela lenga, mas an portat pi de modificacions a l’article de referéncia. Cau actualizar la revirada.', @@ -424,7 +354,6 @@ un color indica lo sieu estat:', 'info_une_rubrique' => 'una rubrica, ', 'info_une_rubrique_02' => '1 rubrica', 'info_url' => 'URL:', - 'info_url_site' => 'URL DAU SIT:', # MODIF 'info_urlref' => 'Ligam ipertèxt:', 'info_utilisation_spip' => 'Aüra podètz començar d’utilizar lo sistèma de publicacion assistida...', 'info_visites_par_mois' => 'Afichatge per mes:', @@ -441,15 +370,12 @@ un color indica lo sieu estat:', 'item_activer_messages_avertissement' => 'Activar lu messatges d’avertiment', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Afichar dins lo calendier', - 'item_autoriser_documents_joints' => 'Autorizar que si jonga de documents ai articles', - 'item_autoriser_documents_joints_rubriques' => 'Autorizar lu documents dins li rubricas', 'item_choix_administrateurs' => 'lu administrators', 'item_choix_generation_miniature' => 'Congrear automaticament li miniaturas dei imatges.', 'item_choix_non_generation_miniature' => 'Congrear minga de miniaturas dei imatges.', 'item_choix_redacteurs' => 'lu redactors', 'item_choix_visiteurs' => 'lu vesitaires dau sit public', 'item_creer_fichiers_authent' => 'Crear de fichiers .htpasswd', - 'item_limiter_recherche' => 'Limitar la cèrca ai informacions contengudi dins lo vòstre sit', 'item_login' => 'Login', 'item_mots_cles_association_articles' => 'ai articles', 'item_mots_cles_association_rubriques' => 'ai rubricas', @@ -458,34 +384,24 @@ un color indica lo sieu estat:', 'item_non_accepter_inscriptions' => 'Non acceptar li inscripcions', 'item_non_activer_messages_avertissement' => 'Minga de messatge d’avertiment', 'item_non_afficher_calendrier' => 'De non afichar dins lo calendier', - 'item_non_autoriser_documents_joints' => 'Non autorizar lu documents dins lu articles', - 'item_non_autoriser_documents_joints_rubriques' => 'Non autorizar lu documents dins li rubricas', 'item_non_creer_fichiers_authent' => 'Non crear aquelu fichiers', - 'item_non_gerer_statistiques' => 'Non gerir li estadisticas', - 'item_non_limiter_recherche' => 'Alargar la cèrca au contengut dei sits referenciats', 'item_non_publier_articles' => 'Non publicar lu articles avans la data de publicacion prevista.', - 'item_non_utiliser_moteur_recherche' => 'Non utilizar lo motor', 'item_nouvel_auteur' => 'Autor nòu', 'item_nouvelle_rubrique' => 'Rubrica nòva', 'item_oui' => 'Aí', 'item_publier_articles' => 'Publicar lu articles, quina que sia la sieu data de publicacion', 'item_reponse_article' => 'Respòsta a l’article', - 'item_utiliser_moteur_recherche' => 'Utilizar lo cercador', 'item_visiteur' => 'vesitaire', // J 'jour_non_connu_nc' => 'n.c.', // L - 'lien_ajout_destinataire' => 'Apondre aqueu destinatari', 'lien_ajouter_auteur' => 'Apondre aquel autor', - 'lien_ajouter_participant' => 'Apondre un participant', 'lien_email' => 'e-mail', 'lien_nom_site' => 'NOM DAU SIT:', 'lien_retirer_auteur' => 'Levar l’autor', - 'lien_retrait_particpant' => 'Levar aqueu participant', 'lien_site' => 'sit', - 'lien_supprimer_rubrique' => 'suprimir aquela rubrica', 'lien_tout_deplier' => 'Desplegar tot', 'lien_tout_replier' => 'Tornar plegar', 'lien_trier_nom' => 'Triar per nom', @@ -511,6 +427,9 @@ un color indica lo sieu estat:', // O 'onglet_repartition_actuelle' => 'd’aquesta passa', + // R + 'required' => '[Obligatòri]', # MODIF + // S 'statut_admin_restreint' => '(admin. restrench)', # MODIF @@ -533,14 +452,10 @@ un color indica lo sieu estat:', 'texte_article_virtuel_reference' => 'Article virtuau: article referenciat dins lo vòstre sit SPIP, mas redirigit vèrs una autra URL. Per suprimir la redireccion, esfaçatz l’URL çai sobre.', 'texte_aucun_resultat_auteur' => 'Minga de resultat per "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Aquest sit vos pòu indicar de contunha la tiera dei redactors connectats, cen que vos permete d’escambiar de messatges en dirècte. Podètz decidir de non aparéisser dins aquela lista (siatz "invisible/a" per lu autres utilizaires).', - 'texte_auteur_messagerie_1' => 'Aqueu sit permete d’escambiar de messatges e de constituir de forums de discussion privats entre lu participants dau sit. Podètz decidir de non participar a aquelu escambis.', 'texte_auteurs' => 'LU AUTORS', 'texte_choix_base_1' => 'Chausissètz la vòstra basa:', 'texte_choix_base_2' => 'Lo servidor SQL conten mai d’una basa de donadas.', 'texte_choix_base_3' => 'Chausissètz çai sota aquela que lo vòstre aubergador v’a atribuida:', - 'texte_commande_vider_tables_indexation' => 'Utilizatz aquela comanda per vuar li taulas d’indexacion utilizadi per lo cercador integrat a SPIP. Aquò permetrà - de ganhar d’espaci disc.', - 'texte_compresse_ou_non' => '(Aquest si pòu comprimir ò non)', 'texte_compte_element' => '@count@ element', 'texte_compte_elements' => '@count@ elements', 'texte_connexion_mysql' => 'Consultatz li informacions que lo vòstre aubergador fornisse: i devètz trobar, se lo vòstre aubergador supòrta SQL, lu còdes de connexion au servidor SQL.', # MODIF @@ -556,10 +471,8 @@ un color indica lo sieu estat:', 'texte_date_publication_anterieure' => 'DATA DE PUBLICACION ANTERIORA:', 'texte_date_publication_anterieure_nonaffichee' => 'Afichar minga de data de publicacion anteriora.', 'texte_date_publication_article' => 'DATA DE PUBLICACION EN LINHA:', - 'texte_descriptif_petition' => 'Descriptiu de la peticion', 'texte_descriptif_rapide' => 'Descriptiu rapid', 'texte_effacer_base' => 'Esfaçar la basa de donadas SPIP', - 'texte_effacer_donnees_indexation' => 'Esfaçar li donadas d’indexacion', 'texte_en_cours_validation' => 'Si prepaua de publicar lu articles e brèvas çai sota. Non esitetz de donar lo vòstre vejaire gaug ai forums que i son estacats.', # MODIF 'texte_enrichir_mise_a_jour' => 'Podètz enriquir la compaginacion dau vòstre tèxt en utilizant d’"acorchas tipografiqui".', 'texte_fichier_authent' => 'Deu crear, SPIP, de fichiers especiaus .htpasswd @@ -578,29 +491,16 @@ un color indica lo sieu estat:', En aqueu cas, cau cambiar lo reglatge predefinit per fin d’utilizar un juec de caractèrs apropriat. Non oblidetz nimai d’adaptar lo sit public en consequéncia (balisa #CHARSET).', # MODIF - 'texte_jeu_caractere_2' => 'Aquest reglatge a minga d’efiech retroactiu. Doncas - lu tèxts ja sasits si pòdon afichar - d’un biais incorrècte après que s’auga modificat lo reglatge. De tot biais - porretz tornar sensa damatge au reglatge precedent.', # MODIF - 'texte_lien_hypertexte' => '(Se lo vòstre messatge si referisse a un article publicat sus lo web, ò a una pàgina fornissent mai d’informacions, vorgatz indicar çai sota lo títol de la pàgina e la sieu adreiça URL.)', 'texte_login_ldap_1' => '(Laissar vuei per un accès anonim, ò picar lo camin complet, per exemple «uid=fabre, ou=usanciers, dc=mon-domeni, dc=com».)', 'texte_login_precaution' => 'Atencion! Aquò es lo login emb lo quau siatz aüra connectat/ada. Utilizatz aquest formulari emb precaucion...', - 'texte_message_edit' => 'Atencion: aquest messatge, cada redactor lo pòu veire, e cada administrator dau sit lo pòu modificar. Utilizatz lu anoncis basta per expausar d’eveniments importants de la vida dau sit.', 'texte_mise_a_niveau_base_1' => 'Venètz d’actualizar lu fichiers SPIP. Aüra cau metre a nivèu la basa de donadas dau sit.', 'texte_modifier_article' => 'Modificar l’article:', - 'texte_moteur_recherche_active' => 'Lo cercador es activat. Utilizatz aquesta commanda - se volètz tornar indexar la basa rapidament (après restauracion - d’una sauvagarda per exemple). Notatz que lu documents modificats d’un - biais normau (a partir de l’interfàcia SPIP) si tornan indexar - automaticament: doncas aquesta comanda es utila basta d’un biais excepcionau.', - 'texte_moteur_recherche_non_active' => 'Lo cercador non es activat.', 'texte_multilinguisme' => 'Se desiratz de gerir d’articles en plusors lengas, emb una navigacion complèxa, podètz apondre un menut per chausir la lenga dei articles e/ò dei rubricas, en foncion de l’organizacion dau vòstre sit.', # MODIF 'texte_multilinguisme_trad' => 'Podètz finda activar un sistèma de gestion dei ligams entre li diferenti reviradas d’un article.', # MODIF 'texte_non_compresse' => 'non comprimit (perque lo vòstre servidor non supòrta aquela foncionalitat)', - 'texte_nouveau_message' => 'Messatge nòu', 'texte_nouvelle_version_spip_1' => 'Avètz installada una version novèla d’SPIP.', 'texte_nouvelle_version_spip_2' => 'Aquesta version novèla demanda una actualizacion mai completa que de costuma. Se siatz webmèstre/webmèstra dau sit, vorgatz esfaçar lo fichier inc_connect.php3 dau repertòri ecrire e tornar pilhar l’installacion per fin d’actualizar lu vòstres paramètres de connexion a la basa de donadas.

      (NB: s’avètz demembrat lu vòstres paramètres de connexion, espepissatz lo fichier inc_connect.php3 avans de lo suprimir...)

      ', # MODIF 'texte_operation_echec' => 'Tornatz a la pàgina precedenta, chausissètz una autra basa ò creatz-ne’n una novèla. Verificatz li informacions que lo vòstre aubergador a fornidi.', @@ -619,7 +519,6 @@ un color indica lo sieu estat:', 'texte_rappel_selection_champs' => '[Non oblidetz de seleccionar aqueu camp correctament.]', 'texte_recalcul_page' => 'Se volètz tornar calcular basta una pàgina, passatz pusprèst per l’espaci public e utilizatz lo boton "tornar calcular".', - 'texte_recapitiule_liste_documents' => 'Aquesta pàgina recapitula la tiera dei documents qu’avètz plaçats dins li rubricas. Per modificar li informacions de cada document, seguètz lo ligam vèrs la pàgina de la sieu rubrica.', 'texte_recuperer_base' => 'Reparar la basa de donadas', 'texte_reference_mais_redirige' => 'article referenciat dins lo vòstre sit SPIP, mas redirigit vèrs una autra URL.', 'texte_requetes_echouent' => 'Quora d’uni requistas SQL s’encalan @@ -647,7 +546,6 @@ dins l’escondedor SPIP. Aquò permete per exemple de forçar un calcul nòu de s’avètz bravament modificat lo grafisme ò l’estructura dau sit.', 'texte_sur_titre' => 'Sobretítol', 'texte_table_ok' => ': aquesta taula es condrecha.', - 'texte_tables_indexation_vides' => 'Li taulas d’indexacion dau motor son vueii.', 'texte_tentative_recuperation' => 'Assai de reparacion', 'texte_tenter_reparation' => 'Assaiar de reparar la basa de donadas', 'texte_test_proxy' => 'Per assaiar aqueu proxy, indicatz aicí l’adreiça d’un sit web @@ -662,26 +560,8 @@ s’avètz bravament modificat lo grafisme ò l’estructura dau sit.', Aquela opcion es desactivada de maniera predefinida per fin d’evitar d’afichar de messatges d’avertiment intempestius.', - 'texte_trop_resultats_auteurs' => 'Tròup de resultats per "@cherche_auteur@" ; vorgatz afinar la cèrca.', - 'texte_unpack' => 'telecargament de la darriera version', - 'texte_utilisation_moteur_syndiques' => 'Quora utilizatz lo cercador integrat - a SPIP, podètz far li cèrcas sobre lu sits e - articles sindicats de doi biais - diferents.
      Lo mai - simple consistisse a cercar basta dins lu - títols e descriptius dei articles.
      - Lo segond biais, ben mai potent, permete - a SPIP de cercar finda dins lo tèxt dei - sits referenciats. - Se referenciatz un sit, alora SPIP farà la - cèrca dins lo tèxt dau sit meteis.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Aqueu metòde obliga SPIP de vesitar - regularament lu sits referenciats, - aquò pòu alentir un chico lo vòstre - sit.', 'texte_vide' => 'vuei', 'texte_vider_cache' => 'Vuar l’escondedor', - 'titre_admin_effacer' => 'Mantenença tecnica', 'titre_admin_tech' => 'Mantenença tecnica', 'titre_admin_vider' => 'Mantenença tecnica', 'titre_cadre_afficher_article' => 'Afichar lu articles', @@ -701,35 +581,20 @@ s’avètz bravament modificat lo grafisme ò l’estructura dau sit.', 'titre_naviguer_dans_le_site' => 'Navigar per lo sit...', 'titre_nouvelle_rubrique' => 'Rubrica novèla', 'titre_numero_rubrique' => 'RUBRICA NÚMERO:', - 'titre_page_admin_effacer' => 'Mantenença tecnica: esfaçar la basa', 'titre_page_articles_edit' => 'Modificar: @titre@', 'titre_page_articles_page' => 'Lu articles', 'titre_page_articles_tous' => 'Tot lo sit', - 'titre_page_auteurs' => 'Vesitaires', 'titre_page_calendrier' => 'Calendier @nom_mois@ de @annee@', 'titre_page_config_contenu' => 'Configuracion dau sit', - 'titre_page_config_fonctions' => 'Configuracion dau sit', - 'titre_page_configuration' => 'Configuracion dau sit', - 'titre_page_controle_petition' => 'Segut dei peticions', 'titre_page_delete_all' => 'supression totala e irreversibla', - 'titre_page_documents_liste' => 'Lu documents dei rubricas', - 'titre_page_index' => 'Lo vòstre espaci privat', - 'titre_page_message_edit' => 'Redigir un messatge', - 'titre_page_messagerie' => 'La vòstra messatjaria', 'titre_page_recherche' => 'Resultats de la cèrca @recherche@', 'titre_page_statistiques_referers' => 'Estadisticas (ligams intrants)', 'titre_page_upgrade' => 'Mesa a nivèu d’SPIP', 'titre_publication_articles_post_dates' => 'Publicacion dei articles pòstdatats', - 'titre_referencer_site' => 'Referenciar lo sit:', - 'titre_rendez_vous' => 'RENDÈTZ-VOS:', 'titre_reparation' => 'Reparacion', 'titre_suivi_petition' => 'Segut dei peticions', - 'trad_article_inexistant' => 'I a minga d’article que pòrte aqueu número.', 'trad_article_traduction' => 'Toti li versions d’aquel article:', - 'trad_deja_traduit' => 'Aquel article ja es una revirada de l’article present.', 'trad_delier' => 'Cessar de ligar aquest article ai sieus reviradas ', # MODIF 'trad_lier' => 'Aquest article es una revirada de l’article número:', 'trad_new' => 'Escriure una revirada novèla d’aquest article' # MODIF ); - -?> diff --git a/www/ecrire/lang/ecrire_oc_ni_mis.php b/www/ecrire/lang/ecrire_oc_ni_mis.php index b9f13b1b..f01c641f 100644 --- a/www/ecrire/lang/ecrire_oc_ni_mis.php +++ b/www/ecrire/lang/ecrire_oc_ni_mis.php @@ -1,9 +1,11 @@ 'Lou camin qu’avès chausit', 'avis_chemin_invalide_2' => 'noun sembla vàlidou. Vourguès tournà a la pàgina prechedenta e verificà li informacioun prouvedi.', 'avis_connexion_echec_1' => 'La counessioun a la basa de dounada a souhit.', - 'avis_connexion_echec_2' => 'Tournàs à la pàgina anterioura, e verificàs li informacioun qu’avès prouvedi.', - 'avis_connexion_echec_3' => 'N.B. Soubre touplen de servidou, devès demandà l’ativacioun dóu vouòstre achès a la basa de dounada denant de la poudé utilisà. Se noun vi poudès counetà, verificàs qu’avès ben realisat aquela demarcha.', + 'avis_connexion_echec_2' => 'Tournas à la pàgina anterioura, e verificas li informacioun qu’avès prouvedi.', + 'avis_connexion_echec_3' => 'N.B. Soubre touplen de servidou, devès demandà l’ativacioun dóu vouòstre achès a la basa de dounada denant de la poudé utilisà. Se noun vi poudès counetà, verificas qu’avès ben realisat aquela demarcha.', 'avis_connexion_erreur_creer_base' => 'La basa de dounada a pas pouscut estre creada.', - 'avis_connexion_erreur_nom_base' => 'Lou noum de la basa de dounada pòu countenì que dei letra, dei chifra o dei ligneta', + 'avis_connexion_erreur_nom_base' => 'Lou noum de la basa de dounada pòu countenì que de letra, de chifra o de ligneta', 'avis_connexion_ldap_echec_1' => 'La counessioun au servidou LDAP a souhit.', - 'avis_connexion_ldap_echec_2' => 'Tournàs a la pàgina prechedenta, e verificàs li infourmacioun qu’avès prouvedi. ', - 'avis_connexion_ldap_echec_3' => 'D’un biais alternatiéu, noun utilisàs lou supouart LDAP per impourtà d’utilisaire.', + 'avis_connexion_ldap_echec_2' => 'Tournas a la pàgina prechedenta, e verificas li infourmacioun qu’avès prouvedi. ', + 'avis_connexion_ldap_echec_3' => 'D’un biais alternatiéu, noun utilisas lou supouart LDAP per impourtà d’utilisaire.', 'avis_deplacement_rubrique' => 'Mèfi ! Aquela rùbrica counten @contient_breves@ brèva @scb@ : se la desplaçàs, vourguès ben entacà aquela casa de counfirmacioun.', 'avis_erreur_connexion_mysql' => 'Errour de counessioun SQL', - 'avis_espace_interdit' => 'Espaci prouhibit
      SPIP es ja instalat.
      ', + 'avis_espace_interdit' => 'Espaci prouhibit
      SPIP es ja instalat.
      ', 'avis_lecture_noms_bases_1' => 'Lou prougrama d’instalacioun a pas pouscut legì lu noum dei basa de dounada instaladi.', 'avis_lecture_noms_bases_2' => 'Sìa minga de basa es dispounibla, sìa la founcioun que permete de listà li basa es estada desativada per de rasoun de segurtà (cen qu’es lou cas de plusiur aubergadour).', @@ -54,7 +56,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_mettre_a_jour_base' => 'Metre a jou la basa de dounada', 'bouton_modifier' => 'Moudificà', 'bouton_radio_afficher' => 'Afichà', - 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Aparèisse en la lista dei redatour counectat', + 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Aparèisse en la lista dei redatour counetat', 'bouton_radio_envoi_annonces_adresse' => 'Mandà li anounça à l’adressa :', 'bouton_radio_envoi_liste_nouveautes' => 'Mandà la lista dei nouvità', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Noun aparèisse en la lista dei redatour', @@ -68,19 +70,19 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // C 'cache_modifiable_webmestre' => 'Lou webmestre dóu sit pòu modificà aquèu paramètre.', - 'calendrier_synchro' => 'S’utilisàs un lougiciau d’agènda coumpatible embé iCal, lou poudès sincronisà embé li informacioun d’estou sit.', + 'calendrier_synchro' => 'S’utilisas un lougiciau d’agènda coumpatible embé iCal, lou poudès sincronisà emb’ai informacioun d’estou sit.', 'config_activer_champs' => 'Ativà lu camp segoun', 'config_choix_base_sup' => 'endicà una basa soubre aquestou servidou', 'config_erreur_base_sup' => 'SPIP a pas achès à la lista dei basa achessibli', - 'config_info_base_sup' => 'Se avès d’autri basa de dounada da interrougà pèr SPIP, embé lou siéu servidou SQL o embé un autre, lou fourmulari aquì souta, vi permete de li declarà. Se laissàs d’uni camp vuèi, lu identificant de counessioun a la basa principala seran utilisat.', + 'config_info_base_sup' => 'S’avès d’autri basa de dounada à interrougà pèr SPIP, emb’au siéu servidou SQL o embé un autre, lou fourmulari aquì souta, vi permete de li declarà. Se laissas d’unu camp vuèi, lu identificant de counessioun a la basa principala seran utilisat.', 'config_info_base_sup_disponibles' => 'Basa suplementari jà interogable :', 'config_info_enregistree' => 'La counfiguracioun nouvela es estada registrada', 'config_info_logos' => 'Cada elemen dóu site pòu avé un logou, e un « logou de survol »', - 'config_info_logos_utiliser' => 'Utilisà lu logo', - 'config_info_logos_utiliser_non' => 'Noun utilisà lu logo', - 'config_info_logos_utiliser_survol' => 'Utilisà lu logo de survol', - 'config_info_logos_utiliser_survol_non' => 'Noun utilisà lu logo de survol', - 'config_info_redirection' => 'En ativant aquela oupcioun, poudès creà dei article virtual, simple referença d’article publicat soubre d’autre sit o fouòra de SPIP.', + 'config_info_logos_utiliser' => 'Utilisà lu logou', + 'config_info_logos_utiliser_non' => 'Noun utilisà lu logou', + 'config_info_logos_utiliser_survol' => 'Utilisà lu logou de survol', + 'config_info_logos_utiliser_survol_non' => 'Noun utilisà lu logou de survol', + 'config_info_redirection' => 'En ativant aquela oupcioun, poudès creà d’article virtual, simple referença d’article publicat soubre d’autre sit o fouòra de SPIP.', 'config_redirection' => 'Article virtual', 'config_titre_base_sup' => 'Declaracioun d’una basa suplementari', 'config_titre_base_sup_choix' => 'Chausissès una basa suplementari', @@ -93,7 +95,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // E 'ecran_securite' => ' + ecran de segurtà @version@', 'email' => 'e-mail', - 'email_2' => 'e-mail:', + 'email_2' => 'e-mail :', 'en_savoir_plus' => 'N’en saupre de mai', 'entree_adresse_annuaire' => 'Adressa de l’anuari', 'entree_adresse_email' => 'La vouòstra adressa e-mail', @@ -108,16 +110,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_identifiants_connexion' => 'Lu vouòstre identificant de counessioun...', 'entree_identifiants_connexion_2' => 'Identificant de counessioun', 'entree_informations_connexion_ldap' => 'Vourguès entrà en aqueu fourmulari li informacioun de counessioun au vouòstre anuari LDAD. -Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu sistema, o de la taragnina.', +Aqueli informacioun vi devon poudé estre prouvedi da l’aministratour dóu sistema, o de la taragnina.', 'entree_infos_perso' => 'Qu sias ?', 'entree_infos_perso_2' => 'Qu es l’autour ?', - 'entree_interieur_rubrique' => 'Dintre la rùbrica:', - 'entree_liens_sites' => 'Estac ipertèst (referença, sit da visità...)', + 'entree_interieur_rubrique' => 'Dintre la rùbrica :', + 'entree_liens_sites' => 'Estac ipertèst (referença, sit à visità...)', 'entree_login' => 'Lou vouòstre login', - 'entree_login_connexion_1' => 'Lou login de counecioun', + 'entree_login_connexion_1' => 'Lou login de counessioun', 'entree_login_connexion_2' => '(Courrespouònde de còu au vouòstre login d’accès FTP; de còu laissat vuèi)', 'entree_mot_passe' => 'Lou vouòstre mot de passa', - 'entree_mot_passe_1' => 'Lou mot de passa de counecioun', + 'entree_mot_passe_1' => 'Lou mot de passa de counessioun', 'entree_mot_passe_2' => '(Courrespouònde de còu au vouòstre mot de passa per lou FTP; de còu es laissat vuèi)', 'entree_nom_fichier' => 'Vourguès entrà lou noum dóu fichié @texte_compresse@:', 'entree_nom_pseudo' => 'Lou vouòstre noum o lou vouòstre pseudounime', @@ -127,7 +129,7 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'entree_nom_site_2' => 'Noum dóu sit de l’autour', 'entree_nouveau_passe' => 'Mot de passa novèu', 'entree_passe_ldap' => 'Mot de passa', - 'entree_port_annuaire' => 'Lou numerò de pouòrt de l’anuari', + 'entree_port_annuaire' => 'Lou nùmero de pouòrt de l’anuari', 'entree_signature' => 'Firma', 'entree_titre_obligatoire' => 'Titre [Oubligatori]
      ', 'entree_url' => 'L’adressa (URL) dóu vouòstre sit', @@ -146,16 +148,16 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'erreur_plugin_version_manquant' => 'Mìnga versioun dóu plugin', // H - 'htaccess_a_simuler' => 'Avertissamen : la counfiguracioun dóu vouòstre servidou HTTP noun ten rasoun dei fichié @htaccess@. Per poudé assegurà una bouòna segurtà, vi cóu moudificà aquela counfiguracioun soubre aqueu pounch, o que li coustanta @constantes@ (definissable en lou fichié mes_options.php) aiguon dei repertori en defouòra de @document_root@ per valour.', + 'htaccess_a_simuler' => 'Avertimen : la counfiguracioun dóu vouòstre servidou HTTP noun ten rasoun dai fichié @htaccess@. Per poudé assegurà una bouòna segurtà, vi cóu moudificà aquela counfiguracioun soubre stou pounch, o que li coustanta @constantes@ (definissable en lou fichié mes_options.php) aiguon de repertori en defouòra de @document_root@ per valour.', 'htaccess_inoperant' => 'htaccess inouperant', // I - 'ical_info1' => 'Esta pàgina presenta de metoda diferenti da restà en countat embé la vida d’estou sit.', - 'ical_info2' => 'Per avé mai d’informacioun soubre aqueli tècnica, noun esitàs de counsultà la doucumentacioun de SPIP.', + 'ical_info1' => 'Esta pàgina presenta de metoda diferenti per restà en countat embé la vida d’estou sit.', + 'ical_info2' => 'Per avé mai d’informacioun soubre aqueli tècnica, noun esitas à counsultà la doucumentacioun de SPIP.', 'ical_info_calendrier' => 'Li a doui calendari a la vouòstra dispousicioun. Lou premié es un plan dóu sit qu’anounça toui lu article publicat. Lou segount counten li anounça editoriali en mai dei vouòstre darrié message privat : v’es reservat graça a una clau persounala, que la poudès moudificà a cada moumen en renouvelant lou vouòstre mot de passa.', 'ical_methode_http' => 'Telecargamen', 'ical_methode_webcal' => 'Sincronisacioun (webcal://)', - 'ical_texte_js' => 'Una ligna de javascript vi permete d’afichà simplamen, soubre toui lu vouòstre sit, lu article rechentamen publicat soubre estou sit. ', + 'ical_texte_js' => 'Una ligna de javascript vi permete d’afichà simplamen, soubre toui lu vouòstre sit, lu article rechentamen publicat soubre stou sit. ', 'ical_texte_prive' => 'Estou calendari, d’usage estrech personal, v’infourma de l’atività editoriala privada d’estou sit (taca e apountamen persounal, article e brèva proupausat...).', 'ical_texte_public' => 'Estou calendari vi permete de sègre l’atività pùblica d’estou sit (article e brèva publicadi).', 'ical_texte_rss' => 'Poudès sindicà li nouvità d’estou sit en toui lu letour de fichié en format XML/RSS (Rich Site Summary). Es finda lou format que permete à SPIP de legì li nouvità publicadi soubre d’autre sit en utilisant un format d’escambi compatible (sit sindicat).', @@ -174,7 +176,7 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'icone_configuration' => 'Counfiguracioun', 'icone_creer_auteur' => 'Creà un nouvèl autour e l’assoucià en aquel article', 'icone_creer_mot_cle' => 'Creà un nouvèu mot clau e lou ligà en aquel article', - 'icone_creer_rubrique_2' => 'Creà una novèla rùbrica', + 'icone_creer_rubrique_2' => 'Creà una rùbrica novèla', 'icone_developpement' => 'Desfouloupamen', 'icone_edition' => 'Edicioun', 'icone_ma_langue' => 'La mieu lenga', @@ -201,17 +203,14 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'info_1_visiteur' => '1 visitour', 'info_activer_cookie' => 'Poudès ativà un cookie de courrespoundença; acò vi permeterà de passà facilamen dóu sit pùblicou au sit privat.', 'info_activer_menu_developpement' => 'Afichà lou menù Desfouloupamen', - 'info_admin_etre_webmestre' => 'Mi dounà lu drech de webmestre', - 'info_admin_gere_rubriques' => 'Aquel aministratour gèra li rùbrica seguenti:', - 'info_admin_gere_toutes_rubriques' => 'Aquel aministratour gèratouti li rùbrica.', - 'info_admin_gere_toutes_rubriques_2' => 'Gèri touti li rùbrica', - 'info_admin_je_suis_webmestre' => 'Siéu webmestre', + 'info_admin_etre_webmestre' => 'Mi dounà lu drech de webmèstre', + 'info_admin_je_suis_webmestre' => 'Siéu webmèstre', 'info_admin_statuer_webmestre' => 'Dounà en aquel aministratour lu drech de webmèstre', - 'info_admin_webmestre' => 'Aquel aministratour es webmestre', + 'info_admin_webmestre' => 'Aquel aministratour es webmèstre', 'info_administrateur' => 'Aministratour', 'info_administrateur_1' => 'Aministratour', - 'info_administrateur_2' => 'dóu sit (utilisàs embé precaucioun)', - 'info_administrateur_site_01' => 'Se siàs aministratour dóu sit, vourguès', + 'info_administrateur_2' => 'dóu sit (utilisas embé precaucioun)', + 'info_administrateur_site_01' => 'Se sias aministratour dóu sit, vourguès', 'info_administrateur_site_02' => 'clicà soubre aquel estac', 'info_administrateurs' => 'Aministratour', 'info_administrer_rubrique' => 'Poudès aministrà aquela rùbrica', @@ -220,32 +219,35 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'info_adresse_url' => 'Adressa (URL) dóu sit pùblicou', 'info_afficher_par_nb' => 'Afichà per', 'info_aide_en_ligne' => 'Ajuda en ligna SPIP', - 'info_ajout_image' => 'Quoura ajustàs d’image couma doucumen jounch a un article, - SPIP pòu creà autoumaticamen, per vautre, de vigneta (miniatura) dei - image inseridi. Acò permet per isemple de creà - autoumaticamen una galarìa o un pouòrtafoliò.', - 'info_ajouter_rubrique' => 'Ajustà un’autra rùbrica a aministrà:', + 'info_ajout_image' => 'Coura ajustas d’image couma doucumen jounch a un article, + SPIP pòu creà automaticamen, per vautre, de vigneta (miniatura) dei + image inseridi. Acò permete per isemple de creà + automaticamen una galarìa o un pouòrtafoliò.', + 'info_ajouter_rubrique' => 'Ajustà un’autra rùbrica da aministrà:', 'info_annonce_nouveautes' => 'Anounça dei nouvità', 'info_article' => 'article', 'info_article_2' => 'article', - 'info_article_a_paraitre' => 'Lu article post-datat per pareisse', + 'info_article_a_paraitre' => 'Lu article post-datat da pareisse', 'info_articles_02' => 'article', 'info_articles_2' => 'Article', 'info_articles_auteur' => 'Lu article d’aquel autour', 'info_articles_miens' => 'Lu mieu article', 'info_articles_tous' => 'Toui lu article', - 'info_articles_trouves' => 'Article troubat', + 'info_articles_trouves' => 'Article trouvat', 'info_attente_validation' => 'Lu vouòstre article en aspera de validacioun', 'info_aucun_article' => 'Mìnga article', 'info_aucun_auteur' => 'Mìnga autour', 'info_aucun_message' => 'Minga message', 'info_aucun_rubrique' => 'Mìnga rùbrica', 'info_aujourdhui' => 'Ancuei :', + 'info_auteur_gere_rubriques' => 'Aquel autour gèra li rùbrica seguenti :', + 'info_auteur_gere_toutes_rubriques' => 'Aquel autour gèra touti li rùbrica', + 'info_auteur_gere_toutes_rubriques_2' => 'Gèri touti li rùbrica', 'info_auteurs' => 'Lu autour', 'info_auteurs_par_tri' => 'autour@partri@', - 'info_auteurs_trouves' => 'Autour troubat', + 'info_auteurs_trouves' => 'Autour trouvat', 'info_authentification_externe' => 'Autentificacioun esterna', - 'info_avertissement' => 'Avertissamen', + 'info_avertissement' => 'Avertimen', 'info_barre_outils' => 'embé la siéu barra d’óutis ?', 'info_base_installee' => 'L’estrutura de la vouòstra basa de dounada es instalada.', 'info_bio' => 'Biougrafìa', @@ -253,17 +255,17 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'info_chapeau' => 'Capèu', 'info_chapeau_2' => 'Capèu :', 'info_chemin_acces_1' => 'Oupcioun : camin d’achès en l’anuari', - 'info_chemin_acces_2' => 'Devès ahura counfigurà lou camin d’accès ai infourmacioun en l’anuari. Aquela infourmacioun es necessari per legì lu proufiéu d’utilisaire amoulounat en l’anuari.', - 'info_chemin_acces_annuaire' => 'Oupcioun: camin d’accès en l’anuari', + 'info_chemin_acces_2' => 'Devès ahura counfigurà lou camin d’achès ai infourmacioun en l’anuari. Aquela infourmacioun es necessari per legì lu proufiéu d’utilisaire amoulounat en l’anuari.', + 'info_chemin_acces_annuaire' => 'Oupcioun: camin d’achès en l’anuari', 'info_choix_base' => 'Tèrsa tapa :', 'info_classement_1' => 'é sus @liste@', 'info_classement_2' => 'nt sus @liste@', - 'info_code_acces' => 'Noun denembràs lu vouòtre code d’accès persounal!', + 'info_code_acces' => 'Noun denembras lu vouòtre code d’achès persounal !', 'info_compatibilite_html' => 'Nourma HTML da sègre', 'info_config_suivi' => 'S’aquela adressa courrespouònde a una mailing-list, poudès endicà aquì souta l’adressa que lu participant au sit si pouòdon inscriéure. Aquela adressa pòu estre una URL (per isemple la pàgina d’inscricioun a la lista per web), o una adressa e-mail embé un sujet especific (per isemple : @adresse_suivi@?subject=subscribe) :', 'info_config_suivi_explication' => 'Vi poudès abounà a la mailing-list d’estou sit. Receverès per courrié eletrounic li anounça dei article e brèva proupausat a la publicacioun.', 'info_confirmer_passe' => 'Counfirmà aqueu mot de passa nouvèu :', - 'info_conflit_edition_avis_non_sauvegarde' => 'Mèfi, aquelu camp soun estat moudificat per quauqun. Vouòstri moudificacioun sus aquelu camp noun soun estadi registradi.', + 'info_conflit_edition_avis_non_sauvegarde' => 'Mèfi, aquelu camp soun estat moudificat da quauqun. Li vouòstri moudificacioun soubre aquelu camp noun soun estadi registradi.', 'info_conflit_edition_differences' => 'Diferença :', 'info_conflit_edition_version_enregistree' => 'La versioun registrada :', 'info_conflit_edition_votre_version' => 'La vouòstra versioun :', @@ -275,8 +277,8 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'info_contact' => 'Countat', 'info_contenu_articles' => 'Countengut dei article', 'info_contributions' => 'Countribucioun', - 'info_creation_paragraphe' => 'Per creà de paràgrafou, laissàs simplamen dei ligna vuèii.', - 'info_creation_rubrique' => 'Denant de poudé escrieure d’article,
      devès creà au màncou una rùbrica.
      ', + 'info_creation_paragraphe' => 'Per creà de paràgrafou, laissas simplamen de ligna vuèii.', + 'info_creation_rubrique' => 'Denant de poudé escriéure d’article,
      devès creà au màncou una rùbrica.
      ', 'info_creation_tables' => 'Creacioun dei taula de la basa', 'info_creer_base' => 'Creà una nouvela basa de dounada :', 'info_dans_rubrique' => 'En la rùbrica:', @@ -288,8 +290,8 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'info_discussion_cours' => 'Discussioun en cours', 'info_ecrire_article' => 'Denant de poudé escriéure d’article, devès au mancou creà una rùbrica.', 'info_email_envoi' => 'Adressa e-mail d’espedissioun (oupciounau)', - 'info_email_envoi_txt' => 'Endicàs aquí l’adressa da utilisà per mandà lu e-mails (en mancança, s’utiliserà l’adressa destinatàri couma adressa d’espedissioun):', - 'info_email_webmestre' => 'Adressa e-mail dau webmestre', + 'info_email_envoi_txt' => 'Endicas aquí l’adressa da utilisà per mandà lu e-mails (en mancança, s’utiliserà l’adressa destinatàri couma adressa d’espedissioun):', + 'info_email_webmestre' => 'Adressa e-mail dóu webmèstre', 'info_envoi_email_automatique' => 'Espedissioun d’e-mails autoumatic', 'info_envoyer_maintenant' => 'Mandà ahura', 'info_etape_suivante' => 'Passà a la tapa seguenta', @@ -299,59 +301,59 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'info_exportation_base' => 'Espourtacioun de la basa vers @archive@', 'info_facilite_suivi_activite' => 'Per fin de facilità lou segut de l’atività editouriala dóu sit, SPIP vi pòu fournì per e-mail, per isemple a una mailing-list dei redatour, l’anounça dei demanda de publicacioun e de validacioun d’article.', 'info_fichiers_authent' => 'Fichié d’autentificacioun « .htpasswd »', - 'info_forums_abo_invites' => 'Lou vouòstre sit web counten de fòrou per lu abounat ; lu visitaire soun counvidat de si registrà sus lou sit public.', - 'info_gauche_admin_tech' => 'Aquela pàgina es basta achessible ai respounsable dóu sit.

      Douna achès ai diferenti founcioun de mantenença tecnica. D’uni d’entre eli implicoun un prouchedimen d’autentificacion especific, que + 'info_forums_abo_invites' => 'Lou vouòstre sit web counten de fòrou per lu abounat ; lu visitaire soun counvidat da si registrà soubre lou sit pùblicou.', + 'info_gauche_admin_tech' => 'Aquela pàgina es basta achessible ai respounsable dóu sit.

      Douna achès ai diferenti founcioun de mantenença tècnica. D’uni d’entre eli implicoun un prouchedimen d’autentificacion especific, que necessita d’avé un achès FTP au sit web.

      ', 'info_gauche_admin_vider' => 'Aquela pàgina es basta achessible ai respounsable dóu sit.

      Douna achès ai diferenti founcioun de mantenença tecnica. D’uni d’entre eli implicoun un prouchedimen d’autentificacion especific, que necessita d’avé un achès FTP au sit web.

      ', - 'info_gauche_auteurs' => 'Trouberès aquì toui lu autour dóu sit. - Lou sieu estatut es endicat per la coulou de la sieu icona (aministratour : verda; redatour : jauna).', - 'info_gauche_auteurs_exterieurs' => 'Lu autour esteriour, sensa achès au sit, soun endicat per una icona blua ; lu autour escassat per una icona grìha.', - 'info_gauche_messagerie' => 'La messagerìa vi permete d’escambià de message entre redatour, de counservà de nota de renembrança (per lou vouòstre usage persounal) o d’afichà d’anounça sus la pàgina d’acuèlh de l’espaci privat (se sias aministratour).', + 'info_gauche_auteurs' => 'Trouverès aquì toui lu autour dóu sit. + Lou sieu estatut es endicat da la coulou de la sieu icona (aministratour : verda; redatour : jauna).', + 'info_gauche_auteurs_exterieurs' => 'Lu autour esteriour, sensa achès au sit, soun endicat da una icona blua ; lu autour escassat da una icona grìha.', + 'info_gauche_messagerie' => 'La messagerìa vi permete d’escambià de message tra redatour, de counservà de nota de renembrança (per lou vouòstre usage persounal) o d’afichà d’anounça sus la pàgina d’acuèlh de l’espaci privat (se sias aministratour).', 'info_gauche_statistiques_referers' => 'Aquela pàgina presenta la lista dei referit, es a dire dei sit que countenon d’estac que menon drech au vouòstre sit, ma basta per ièr e ancuèi ; aquela lista es atualisada cada 24 oura.', - 'info_gauche_visiteurs_enregistres' => 'Trouberès aquì lu visitour registrat en l’espaci public dóu sit (fòrou sus abounamen).', + 'info_gauche_visiteurs_enregistres' => 'Trouverès aquì lu visitour registrat en l’espaci public dóu sit (fòrou sus abounamen).', 'info_generation_miniatures_images' => 'Generacioun de miniatura dei image', 'info_gerer_trad_objets' => '@objets@ : gerà lu estac de traducioun', 'info_hebergeur_desactiver_envoi_email' => 'Lì soun d’aubergadour que desativon l’espedissioun autoumatica d’e-mail dai sieu servidou. En aqueu cas, li founciounalità seguenti de SPIP noun founciouneràn.', 'info_hier' => 'ièr :', - 'info_identification_publique' => 'La vouòstra identitat publica...', - 'info_image_process' => 'Vourguès seleciounà lou milhour mètodou de fabricacioun dei vigneta en clicant sus l’image courrespoundenta.', - 'info_image_process2' => 'Se minga d’image parèisse, aloura lou servidou qu’auberga lou vouòstre sit noun es estat configurat per utilisà aquelu óutis. Se vourguès utilisà aqueli founcioun, contactàs lou respounsable tecnic e demandàs li estensioun « GD » o « Imagick ».', - 'info_images_auto' => 'Image carculadi autoumaticamen', + 'info_identification_publique' => 'La vouòstra identità pùblica...', + 'info_image_process' => 'Vourguès seleciounà lou milhou mètodou de fabricacioun dei vigneta en clicant sus l’image courrespoundenta.', + 'info_image_process2' => 'Se minga d’image parèisse, aloura lou servidou qu’auberga lou vouòstre sit noun es estat configurat da utilisà aquelu óutis. Se vourguès utilisà aqueli founcioun, contatas lou respounsable tècnicou e demandas li estensioun « GD » o « Imagick ».', + 'info_images_auto' => 'Image carculadi automaticamen', 'info_informations_personnelles' => 'Infourmacioun persounali', 'info_inscription' => 'Inscricioun lou', 'info_inscription_automatique' => 'Inscricioun autoumatica de redatour novèu', - 'info_jeu_caractere' => 'Juèc de caratère dóu sit', + 'info_jeu_caractere' => 'Juèc de carater dóu sit', 'info_jours' => 'jou', - 'info_laisser_champs_vides' => 'laissà lu camp vuèi)', + 'info_laisser_champs_vides' => 'laissà aquelu camp vuèi)', 'info_langues' => 'Lenga dóu sit', 'info_ldap_ok' => 'L’autentificacioun LDAP es instalada.', 'info_lien_hypertexte' => 'Estac ipertèst :', - 'info_liste_nouveautes_envoyee' => 'La lista dei nouvità a estat mandada', - 'info_liste_redacteurs_connectes' => 'Lista dei redatour counectat', + 'info_liste_nouveautes_envoyee' => 'La lista dei nouvità es estada mandada', + 'info_liste_redacteurs_connectes' => 'Lista dei redatour counetat', 'info_login_existant' => 'Aqueu login jà esista.', 'info_login_trop_court' => 'Login tròu court.', - 'info_login_trop_court_car_pluriel' => 'Le login déu countenì au mens @nb@ caratère.', + 'info_login_trop_court_car_pluriel' => 'Lou login déu au màncou countenì @nb@ carater.', 'info_logos' => 'Lu logou', 'info_maximum' => 'massimoum :', 'info_meme_rubrique' => 'En la mema rùbrica', 'info_message_en_redaction' => 'Lu vouòstre message en cours de redacioun', 'info_message_technique' => 'Message tècnicou :', 'info_messagerie_interne' => 'Messagerìa interna', - 'info_mise_a_niveau_base' => 'Metuda à nivèu de la vouòstra basa SQL', - 'info_mise_a_niveau_base_2' => '{{Mèfi!}} Avès instalat una versioun de fichié SPIP {anterioura} en aquela que si troubava avant soubre estou sit : la vouòstra basa de dounada risca d’estre perduda e lou vouòstre sit noun founciounerà plus.
      {{Reinstalà lu fichié de SPIP.}}', - 'info_modification_enregistree' => 'La vouòtra moudificacioun a estat registrada', + 'info_mise_a_niveau_base' => 'Messa a nivèu de la vouòstra basa SQL', + 'info_mise_a_niveau_base_2' => '{{Mèfi!}} Avès instalat una versioun de fichié SPIP {anterioura} en aquela que si trouvava avant soubre stou sit : la vouòstra basa de dounada risca d’estre perduda e lou vouòstre sit noun founciounerà plus.
      {{Reinstalà lu fichié de SPIP.}}', + 'info_modification_enregistree' => 'La vouòtra moudificacioun es estada registrada', 'info_modifier_auteur' => 'Moudificà l’autour :', 'info_modifier_rubrique' => 'Moudificà la rùbrica :', - 'info_modifier_titre' => 'Moudificà: @titre@', + 'info_modifier_titre' => 'Moudificà : @titre@', 'info_mon_site_spip' => 'Lou mieu sit SPIP', 'info_moyenne' => 'mejana :', 'info_multi_cet_article' => 'Lenga d’aquest article :', 'info_multi_langues_choisies' => 'Vourguès seleciounà aquì souta li lenga que soun à dispousicioun dei redatour dóu vouòstre sit. Li lenga ja emplegadi en lou vouòstre sit (afichadi en premié) noun si pouòdon desativà.', 'info_multi_objets' => '@objets@ : ativà lou menù de lenga', - 'info_multi_secteurs' => '... basta per li rùbrica a la raïs dau sit ?', + 'info_multi_secteurs' => '... basta per li rùbrica da la raïs dóu sit ?', 'info_nb_articles' => '@nb@ article', 'info_nb_auteurs' => '@nb@ autour', 'info_nb_messages' => '@nb@ message', @@ -359,7 +361,7 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'info_nb_rubriques' => '@nb@ rùbrica', 'info_nb_visiteurs' => '@nb@ visitour', 'info_nom' => 'Noum', - 'info_nom_destinataire' => 'Noum dau destinatàri', + 'info_nom_destinataire' => 'Noum dóu destinatàri', 'info_nom_pas_conforme' => 'lu tag html noun soun autourisat', 'info_nom_site' => 'Noum dóu vouòstre site', 'info_nombre_articles' => '@nb_articles@ article,', @@ -371,49 +373,49 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'info_non_modifiable' => 'noun pòu èstre modificat', 'info_non_suppression_mot_cle' => 'noun vouòli suprimà aqueu mot clau.', 'info_notes' => 'Nota', - 'info_nouvel_article' => 'Article nòu', - 'info_nouvelle_traduction' => 'nouvela traducioun :', - 'info_numero_article' => 'ARTICLE NUMERÒ', + 'info_nouvel_article' => 'Nouvèl article', + 'info_nouvelle_traduction' => 'Nouvela traducioun :', + 'info_numero_article' => 'ARTICLE NÙMERO', 'info_obligatoire_02' => '(Oubligatori)', 'info_option_accepter_visiteurs' => 'Achetà l’inscricioun dei visitaire dóu sit public', 'info_option_ne_pas_accepter_visiteurs' => 'Refudà l’inscricioun dei visitour', 'info_options_avancees' => 'OUPCIOUN AVANÇADI', 'info_ou' => 'o... ', 'info_page_interdite' => 'Pàgina prouhibida', - 'info_par_nom' => 'per noum', - 'info_par_nombre_article' => 'per noumbre d’article', - 'info_par_statut' => 'per estatut', - 'info_par_tri' => '’(per @tri@)’', + 'info_par_nom' => 'da noum', + 'info_par_nombre_article' => 'da noumbre d’article', + 'info_par_statut' => 'da estatut', + 'info_par_tri' => '’(da @tri@)’', 'info_passe_trop_court' => 'Mot de passa tròu court.', - 'info_passe_trop_court_car_pluriel' => 'Lou mot de passa dèu countenì au mens @nb@ caratère.', + 'info_passe_trop_court_car_pluriel' => 'Lou mot de passa dèu au màncou countenì @nb@ carater.', 'info_passes_identiques' => 'Li doui mot de passa noun soun identic.', - 'info_plus_cinq_car' => 'mai de 5 caractère', - 'info_plus_cinq_car_2' => '(mai de 5 caractère)', - 'info_plus_trois_car' => '(mai de 3 caractère)', + 'info_plus_cinq_car' => 'mai de 5 caracter', + 'info_plus_cinq_car_2' => '(mai de 5 caracter)', + 'info_plus_trois_car' => '(mai de 3 caracter)', 'info_popularite' => 'poupularità : @popularite@ ; visita : @visites@', 'info_post_scriptum' => 'Post-Escrich', 'info_post_scriptum_2' => 'Post-Escrich :', 'info_pour' => 'per', - 'info_preview_texte' => 'Es poussible de previsualisà lou sit couma se toui lu article e brèva (que àugue au màncou lou statut « proupausat ») èron publicat. Dèu aquela poussibilità estre duberda basta ai aministratour, a toui lu redatour, o a degun ?', + 'info_preview_texte' => 'Es poussible de previsualisà toui lu elemen editourial dou sit que an au màncou lou statut « proupausat », couma pura lu elemen en cours de redacioun que sian l’autour. Dèu aquela poussibilità estre duberda basta ai aministratour, a toui lu redatour, o a degun ?', 'info_procedez_par_etape' => 'proucedès tapa per tapa', - 'info_procedure_maj_version' => 'la proucedura de metuda a jou dèu èstre lançada per adatà la basa de dounada a la nouvèla version de SPIP.', + 'info_procedure_maj_version' => 'la proucedura de messa a jou dèu èstre lançada per adatà la basa de dounada a la nouvèla version de SPIP.', 'info_proxy_ok' => 'Prova dóu proxy ruèisset.', 'info_ps' => 'P.-S.', 'info_publier' => 'publicà', 'info_publies' => 'Lu vouòstre article publicat en ligna', 'info_question_accepter_visiteurs' => 'Se lu esquèletrou dóu vouòstre sit prevehon lou registramen de visitour sensa achès a l’espaci privat, vourguès ativà l’oupcioun seguenta :', - 'info_question_inscription_nouveaux_redacteurs' => 'Achetàs li inscricioun de nouvèu redatour a - partì dau sit public ? Se l’achetàs, lu visitaire si pouran inscriéure + 'info_question_inscription_nouveaux_redacteurs' => 'Achetas li inscricioun de nouvèu redatour a + partì dau sit pùblicou ? Se l’achetàs, lu visitaire si pouran inscriéure da un fourmulari autoumatisat e achederan aloura a l’espaci privat per proupausà lu sieu article pròpi.
      Dóu tems de la fasa d’inscricioun, lu utilisaire recebon un courrié eletrounic automàticou que li prouvedisse lu sieu code d’achès au sit privat. D’unu aubergadour desativon l’espedissioun d’e-mails dai sieu servidou : en aqueu cas, l’inscricioun automatica es empoussibla.
      ', - 'info_qui_edite' => '@nom_auteur_modif@ a trabalhat sus aqueu countengut @date_diff@ minuta fa', + 'info_qui_edite' => '@nom_auteur_modif@ a travalhat sus aqueu countengut @date_diff@ minuta fa', 'info_racine_site' => 'Raìs dóu sit', 'info_recharger_page' => 'Vourguès recargà aquela pàgina en un moumentoun.', - 'info_recherche_auteur_zero' => 'Minga de resultat troubat per « @cherche_auteur@ ».', + 'info_recherche_auteur_zero' => 'Minga de resultat trouvat per « @cherche_auteur@ ».', 'info_recommencer' => 'Vourguès recoumençà.', 'info_redacteur_1' => 'Redatour', 'info_redacteur_2' => 'qu’a achès à l’espaci privat (recoumandat)', @@ -421,17 +423,17 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'info_redaction_en_cours' => 'EN COURS DE REDACIOUN', 'info_redirection' => 'Redirecioun', 'info_redirection_activee' => 'La redirecioun es ativada.', - 'info_redirection_boucle' => 'Prouvàs de redirigià l’article sus èu meme', - 'info_redirection_desactivee' => 'La redirecioun a estat suprimada.', + 'info_redirection_boucle' => 'Prouvas de redirigià l’article sus èu meme', + 'info_redirection_desactivee' => 'La redirecioun es estada suprimada.', 'info_refuses' => 'Lu vouòstre article refudat', 'info_reglage_ldap' => 'Oupcioun: Reglage de l’impourtacioun LDAP', - 'info_renvoi_article' => 'Redirecioun. Aquel article remandà a la pàgina:', - 'info_reserve_admin' => 'Lu aministratour soulet pouòdon moudificà aquela adressa.', + 'info_renvoi_article' => 'Redirecioun. Aquel article remanda a la pàgina:', + 'info_reserve_admin' => 'Basta lu aministratour pouòdon moudificà aquela adressa.', 'info_restreindre_rubrique' => 'Restregne la gestioun a la rùbrica :', 'info_resultat_recherche' => 'Resultat de la recerca :', 'info_rubriques' => 'Rùbrica', 'info_rubriques_02' => ' rùbrica', - 'info_rubriques_trouvees' => 'Rùbrica troubadi', + 'info_rubriques_trouvees' => 'Rùbrica trouvadi', 'info_sans_titre' => 'Sensa titre', 'info_selection_chemin_acces' => 'Seleciounàs aquì souta lou camin d’achès en l’anuari :', 'info_signatures' => 'firma', @@ -443,23 +445,23 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'info_sites' => ' sit', 'info_sites_lies_mot' => 'Lu sit referençat ligat en aqueu mot clau', 'info_sites_proxy' => 'Utilisà un proxy', - 'info_sites_trouves' => 'Sit troubat', + 'info_sites_trouves' => 'Sit trouvat', 'info_sous_titre' => 'Souta-titre :', 'info_statut_administrateur' => 'Aministratour', 'info_statut_auteur' => 'Estatut d’aquel autour :', 'info_statut_auteur_2' => 'Siéu', - 'info_statut_auteur_a_confirmer' => 'Inscricioun de counfirmà', + 'info_statut_auteur_a_confirmer' => 'Inscricioun da counfirmà', 'info_statut_auteur_autre' => 'Autre statut :', 'info_statut_redacteur' => 'Redatour', 'info_statut_utilisateurs_1' => 'Estatut predefinit dei utilisaire impourtat', - 'info_statut_utilisateurs_2' => 'Chausissès lou statut qu’es atribuit ai persouna presenti en l’anuari LDAP coura si counetoun lou premié còu. Pi pourès moudificà aquela valour per cada autour au cas per cas.', + 'info_statut_utilisateurs_2' => 'Chausissès lou statut qu’es atribuit ai persouna presenti en l’anuari LDAP lou premié còu que si counetoun. Pourès pi moudificà aquela valour per cada autour au cas per cas.', 'info_suivi_activite' => 'Segut de l’atività editouriala', - 'info_surtitre' => 'Soubretitre :', - 'info_syndication_integrale_1' => 'Lou vouòstre sit proupausat de fichié de sindicacioun (veire « @titre@ »).', - 'info_syndication_integrale_2' => 'Desiràs transmetre l’integralità dei article, o difusà lou coumpèndi de quauqui centena de caractère ?', - 'info_table_prefix' => 'Poudès moudificà lou prefisse dóu noum dei taula de dounada (acò es indispensable quoura si vòu instalà plusiur sit en la mema basa de dounada). Aqueu prefisse s’ecriéu en letra minusculi, noun acentuadi, e sensa espaci.', + 'info_surtitre' => 'Soubre-titre :', + 'info_syndication_integrale_1' => 'Lou vouòstre sit proupausa de fichié de sindicacioun (vèire « @titre@ »).', + 'info_syndication_integrale_2' => 'Desirès trasmetre l’integralità dei article, o difusà un coumpèndi de quauqui centena de caracter ?', + 'info_table_prefix' => 'Poudès moudificà lou prefisse dóu noum dei taula de dounada (acò es indispensable coura si vòu instalà mai d’un sit en la mema basa de dounada). Aqueu prefisse s’ecriéu en letra minusculi, noun acentuadi, e sensa espaci.', 'info_taille_maximale_images' => 'SPIP va prouvà la talha massimala dei image que pòu tratà (en milioun de pixel).
      Lu image mai grani noun seran reduchi.', - 'info_taille_maximale_vignette' => 'Talha massimala dei vigneta generadi per lou sistema :', + 'info_taille_maximale_vignette' => 'Talha massimala dei vigneta generadi dau sistema :', 'info_terminer_installation' => 'Ahura poudès acabà la proucedura d’instalacioun estandarda.', 'info_texte' => 'Tèstou', 'info_texte_explicatif' => 'Tèstou espligatiéu', @@ -468,68 +470,69 @@ Aqueli informacioun vi devon poudé estre prouvedi per l’aministratour dóu si 'info_texte_message_02' => 'Tèst dóu message', 'info_titre' => 'Titre :', 'info_total' => 'toutal : ', - 'info_tous_articles_en_redaction' => 'Toi lu articles en cors de redaccion', + 'info_tous_articles_en_redaction' => 'Toui lu article en cours de redacioun', 'info_tous_articles_presents' => 'Toui lu article publicat en aquela rùbrica', 'info_tous_articles_refuses' => 'Toui lu article refudat', 'info_tous_les' => 'toui lu :', 'info_tout_site' => 'Tout lou sit', - 'info_tout_site2' => 'L’article noun a estat traduch en aquela lenga.', - 'info_tout_site3' => 'L’article a estat traduch en aquela lenga, ma si pourtet puèi de moudificacioun a l’article de referença. La traducioun déu estre atualisada.', - 'info_tout_site4' => 'L’article a estat traduch en aquela lenga, e la traducioun es atualisada.', + 'info_tout_site2' => 'L’article es pas estat traduch en aquesta lenga.', + 'info_tout_site3' => 'L’article es estat traduch en aquesta lenga, mà si pourtet pi de moudificacioun a l’article de referença. La traducioun déu estre atualisada.', + 'info_tout_site4' => 'L’article es estat traduch en aquela lenga, e la traducioun es atualisada.', 'info_tout_site5' => 'Article ouriginau.', 'info_tout_site6' => 'Mèfi : soulamen lu article originau s’afichon. Li traducioun soun assouciadi a l’ouriginau, embé una coulou qu’endica lou sieu estat :', 'info_traductions' => 'Traducioun', - 'info_travail_colaboratif' => 'Trabalh coulabouratiu sus lu article', + 'info_travail_colaboratif' => 'Travai coulabouratiéu sus lu article', 'info_un_article' => 'un article, ', 'info_un_site' => 'un sit, ', 'info_une_rubrique' => 'una rùbrica, ', 'info_une_rubrique_02' => '1 rùbrica', 'info_url' => 'URL :', 'info_url_proxy' => 'URL dóu proxy', + 'info_url_proxy_pas_conforme' => 'l’URL dóu proxy es invàlida.', 'info_url_site_pas_conforme' => 'l’URL dóu sit noun es valide.', 'info_url_test_proxy' => 'URL de prova', 'info_urlref' => 'Estac ipertèst :', - 'info_utilisation_spip' => 'Ahura poudès coumençà d’utilisà lou sistema de publicacioun assistat...', + 'info_utilisation_spip' => 'Ahura poudès coumençà da utilisà lou sistema de publicacioun assistat...', 'info_visites_par_mois' => 'Afichage per mes :', 'info_visiteur_1' => 'Visitaire', 'info_visiteur_2' => 'dóu sit pùblicou', 'info_visiteurs' => 'Visitaire', 'info_visiteurs_02' => 'Visitaire dóu sit pùblicou', 'info_webmestre_forces' => 'Lu webmèstre soun atualamen definit en @file_options@.', - 'install_adresse_base_hebergeur' => 'Adressa de la basa de dounada atribuit dau aubergadour', + 'install_adresse_base_hebergeur' => 'Adressa de la basa de dounada atribuit da l’aubergadour', 'install_connect_ok' => 'La basa nova es ben estada declarada souta lou noum de servidou @connect@.', 'install_echec_annonce' => 'L’instalacioun va proubablamen souhì, o aboutì a un sit noun founciounal...', 'install_extension_mbstring' => 'SPIP noun founciouna embé :', 'install_extension_php_obligatoire' => 'SPIP esija l’estensioun PHP :', - 'install_login_base_hebergeur' => 'Login de counecioun atribuit dau aubergadour', - 'install_nom_base_hebergeur' => 'Noum de la basa atribuit dau aubergadour :', + 'install_login_base_hebergeur' => 'Login de counecioun atribuit da l’aubergadour', + 'install_nom_base_hebergeur' => 'Noum de la basa atribuit da l’aubergadour :', 'install_pas_table' => 'Basa atualamen sensa taula', - 'install_pass_base_hebergeur' => 'Mot de passa de counecioun atribuit dau aubergadour', + 'install_pass_base_hebergeur' => 'Mot de passa de counecioun atribuit da l’aubergadour', 'install_php_version' => 'PHP versioun @version@ insufisenta (minimum = @minimum@)', - 'install_select_langue' => 'Seleciounàs una lenga pi clicàs sus lou boutoun « seguent » per coumença la proucedura d’instalacioun.', - 'install_select_type_db' => 'endicà lou tipe de basa de dounada :', + 'install_select_langue' => 'Seleciounas una lenga pi clicas sus lou boutoun « seguent » per coumença la proucedura d’instalacioun.', + 'install_select_type_db' => 'Endicà lou tipe de basa de dounada :', 'install_select_type_mysql' => 'MySQL', 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', - 'install_serveur_hebergeur' => 'Servidou de basa de dounada atribuit dau aubergadour', - 'install_table_prefix_hebergeur' => 'Prefisse de taula atribuit dau aubergadour :', + 'install_serveur_hebergeur' => 'Servidou de basa de dounada atribuit da l’aubergadour', + 'install_table_prefix_hebergeur' => 'Prefisse de taula atribuit da l’aubergadour :', 'install_tables_base' => 'Taula de la basa', - 'install_types_db_connus' => 'SPIP saup d’utilisà MySQL (lou mai repandut) e SQLite.', + 'install_types_db_connus' => 'SPIP saup utilisà MySQL (lou mai repandut) e SQLite.', 'install_types_db_connus_avertissement' => 'Lou supouòrt de PostgreSQL es finda proupausat per fin d’esperimentacioun', - 'instituer_erreur_statut_a_change' => 'L’estatut a jà estat moudificat', + 'instituer_erreur_statut_a_change' => 'L’estatut es jà estat moudificat', 'instituer_erreur_statut_non_autorise' => 'Noun poudès chausì aqueu estatut', 'intem_redacteur' => 'redatour', 'intitule_licence' => 'Licença', - 'item_accepter_inscriptions' => 'Aceptà li inscricioun', - 'item_activer_messages_avertissement' => 'Ativà lu message d’avertissamen', + 'item_accepter_inscriptions' => 'Achetà li inscricioun', + 'item_activer_messages_avertissement' => 'Ativà lu message d’avertimen', 'item_administrateur_2' => 'aministratour', 'item_afficher_calendrier' => 'Afichà en lou calendari', 'item_autoriser_syndication_integrale' => 'Difusì l’integralità dei article en lu fichié de sindicacioun', 'item_choix_administrateurs' => 'lu aministratour', - 'item_choix_generation_miniature' => 'Generà autoumaticamen li miniatura dei image.', + 'item_choix_generation_miniature' => 'Generà automaticamen li miniatura dei image.', 'item_choix_non_generation_miniature' => 'Noun generà de miniatura dei image.', 'item_choix_redacteurs' => 'lu redatour', 'item_choix_visiteurs' => 'lu visitaire dóu sit pùblicou', @@ -540,8 +543,8 @@ embé una coulou qu’endica lou sieu estat :', 'item_mots_cles_association_rubriques' => 'ai rùbrica', 'item_mots_cles_association_sites' => 'ai sit referença o sindicat', 'item_non' => 'Noun', - 'item_non_accepter_inscriptions' => 'Noun aceptà li inscricioun', - 'item_non_activer_messages_avertissement' => 'Minga de message d’avertissamen', + 'item_non_accepter_inscriptions' => 'Noun achetà li inscricioun', + 'item_non_activer_messages_avertissement' => 'Minga message d’avertimen', 'item_non_afficher_calendrier' => 'Noun afichà lou calendari', 'item_non_autoriser_syndication_integrale' => 'Difondre un coumpèndi soulamen', 'item_non_creer_fichiers_authent' => 'Noun creà aquelu fichié', @@ -560,22 +563,25 @@ embé una coulou qu’endica lou sieu estat :', 'jour_non_connu_nc' => 'n.c.', // L - 'label_bando_outils' => 'Barra d’autis', - 'label_bando_outils_afficher' => 'Afichà lu autis', - 'label_bando_outils_masquer' => 'Mascà lu autis', - 'label_choix_langue' => 'Seleciounàs la vouòstra lenga', - 'label_nom_fichier_connect' => 'Endicàs lou noum utilisat per aqueu sevidour', + 'label_bando_outils' => 'Barra d’óutis', + 'label_bando_outils_afficher' => 'Afichà lu óutis', + 'label_bando_outils_masquer' => 'Escoundre lu óutis', + 'label_choix_langue' => 'Seleciounas la vouòstra lenga', + 'label_nom_fichier_connect' => 'Endicas lou noum utilisat per aqueu servidou', 'label_slogan_site' => 'Eslougan dóu sit', 'label_taille_ecran' => 'Larguessa de l’ecran', 'label_texte_et_icones_navigation' => 'Menù de navigacioun', 'label_texte_et_icones_page' => 'Afichage en la pàgina', 'ldap_correspondance' => 'eritage dóu camp @champ@', 'ldap_correspondance_1' => 'Eritage dei camp LDAP', - 'ldap_correspondance_2' => 'Per cada camp SPIP seguent, endicàs lou noum dóu camp LDAP courrespouòndant. Laissà vuèi per noun lou remplì, desseparà embé dei espaci o dei virgula per prouvà plusiur camp LDAP.', + 'ldap_correspondance_2' => 'Per cada camp SPIP seguent, endicas lou noum dóu camp LDAP courrespouòndant. Laissà vuèi per noun lou remplì, desseparà embé d’espaci o de virgula per prouvà plusiur camp LDAP.', 'lien_ajouter_auteur' => 'Ajustà aquel autour', 'lien_ajouter_une_rubrique' => 'Ajoutà aquela rùbrica', 'lien_email' => 'e-mail', 'lien_nom_site' => 'NOUM DÓU SIT:', + 'lien_rapide_contenu' => 'Anà au countengut', + 'lien_rapide_navigation' => 'Anà à la navigacioun', + 'lien_rapide_recherche' => 'Anà à la recerca', 'lien_retirer_auteur' => 'Retirà l’autour', 'lien_retirer_rubrique' => 'Retirà la rùbrica', 'lien_retirer_tous_auteurs' => 'Retirà toui lu autour', @@ -585,9 +591,9 @@ embé una coulou qu’endica lou sieu estat :', 'lien_tout_deplier' => 'Desplegà tout', 'lien_tout_replier' => 'Repeglà tout', 'lien_tout_supprimer' => 'Suprimà tout', - 'lien_trier_nom' => 'Trià per noum', - 'lien_trier_nombre_articles' => 'Trià per noumbre d’article', - 'lien_trier_statut' => 'Trià per estatut', + 'lien_trier_nom' => 'Trià da noum', + 'lien_trier_nombre_articles' => 'Trià da noumbre d’article', + 'lien_trier_statut' => 'Trià da estatut', 'lien_voir_en_ligne' => 'VEIRE EN LIGNA:', 'logo_article' => 'Logou de l’article', 'logo_auteur' => 'Logou de l’autour', @@ -601,12 +607,13 @@ embé una coulou qu’endica lou sieu estat :', 'module_fichier_langue' => 'Fichié de lenga', 'module_raccourci' => 'Escourcha', 'module_texte_affiche' => 'Tèstou afichat', - 'module_texte_explicatif' => 'Poudès inserì li escorcha seguenti en lu esquèletrou dóu vouòstre sit public. Se tradureran autoumaticamen en li diferenti lenga per de li quali esista un fichié de lenga.', + 'module_texte_explicatif' => 'Poudès inserà li escourcha seguenti en lu esquèletrou dóu vouòstre sit public. Si tradureràn automaticamen en li diferenti lenga per de li quali esista un fichié de lenga.', 'module_texte_traduction' => 'Aqueu fichié de lenga « @module@ » es dispounible en :', 'mois_non_connu' => 'noun counouissut', // N - 'nouvelle_version_spip' => 'La versioun @version@ de SPIP es dispounible', + 'nouvelle_version_spip' => 'La messa a jou @version@ de SPIP es dispounible', + 'nouvelle_version_spip_majeure' => 'Una nouvèla version de SPIP @version@ es dispounibla', // O 'onglet_contenu' => 'Countengut', @@ -618,12 +625,13 @@ embé una coulou qu’endica lou sieu estat :', 'onglet_sous_rubriques' => 'Souta-rùbrica', // P - 'page_pas_proxy' => 'Aquela pàgina noun déu passà dóu proxy', - 'pas_de_proxy_pour' => 'Poudès endicàs li machina o lu doumani doun aqueu proxy noun déu s’aplicà (per isemple: @exemple@)', + 'page_pas_proxy' => 'Aquela pàgina noun déu passà per lou proxy', + 'pas_de_proxy_pour' => 'Poudès endicas li machina o lu doumani doun aqueu proxy noun déu s’aplicà (per isemple: @exemple@)', + 'phpinfo' => 'Counfiguracioun PHP', 'plugin_charge_paquet' => 'Cargamen dóu paquet @name@', 'plugin_charger' => 'Telecargà', 'plugin_erreur_charger' => 'errour : empoussible de cargà @zip@', - 'plugin_erreur_droit1' => 'Lou repertori @dest@ noun es accessible en escritura.', + 'plugin_erreur_droit1' => 'Lou repertori @dest@ noun es achessible en escritura.', 'plugin_erreur_droit2' => 'Vourguès verificà lu drech sus aqueu repertori (e lou creà se besoun), o instalà lu fichié per FTP.', 'plugin_erreur_zip' => 'souhit pclzip : errour @status@', 'plugin_etat_developpement' => 'en desfouloupamen', @@ -631,19 +639,19 @@ embé una coulou qu’endica lou sieu estat :', 'plugin_etat_stable' => 'estable', 'plugin_etat_test' => 'en prova', 'plugin_impossible_activer' => 'Empoussible d’ativà lou plugin @plugin@', - 'plugin_info_automatique1' => 'Se souetàs autourisà l’instalacioun autoumatic dei plugin, vourguès :', - 'plugin_info_automatique1_lib' => 'Se souetàs autourisà l’instalacioun autoumatic d’aquela biblioutéca, vourguès :', + 'plugin_info_automatique1' => 'Se souetas autourisà l’instalacioun autoumatic dei plugin, vourguès :', + 'plugin_info_automatique1_lib' => 'Se souetas autourisà l’instalacioun autoumatic d’aquela biblioutéca, vourguès :', 'plugin_info_automatique2' => 'creà un repertori @rep@ ;', 'plugin_info_automatique3' => 'verifica que lou servidou es autourisat a escrieure en aqueu repertori.', 'plugin_info_automatique_creer' => 'a creà a la raìs dau sit.', 'plugin_info_automatique_exemples' => 'isemple :', - 'plugin_info_automatique_ftp' => 'Poudès instalà dei plugin, per FTP, en lou repertori @rep@', + 'plugin_info_automatique_ftp' => 'Poudès instalà de plugin, per FTP, en lou repertori @rep@', 'plugin_info_automatique_lib' => 'D’uni plugin necessiton de poudé telecargà dei fichié en lou repertori lib/, a creà se besoun a la raìs dau sit.', 'plugin_info_automatique_liste' => 'Lu vouòtre lista de plugin :', 'plugin_info_automatique_liste_officielle' => 'lu plugin óuficial', 'plugin_info_automatique_liste_update' => 'Metre a jou li lista', 'plugin_info_automatique_ou' => 'o...', - 'plugin_info_automatique_select' => 'Seleciounàs aquì souta un plugin : SPIP lou telecarguera e l’instalera en lou repertori @rep@ ; se aqueu plugin ja esistà, sera mes a jou.', + 'plugin_info_automatique_select' => 'Seleciounas aquì souta un plugin : SPIP lou telecarguera e l’instalera en lou repertori @rep@ ; se aqueu plugin ja esistà, serà mes a jou.', 'plugin_info_credit' => 'Credit', 'plugin_info_erreur_xml' => 'La declaracioun d’aqueu plugin es ?! incorrecte ?!', 'plugin_info_install_ok' => 'Instalacioun rueisseda', @@ -652,25 +660,31 @@ embé una coulou qu’endica lou sieu estat :', 'plugin_info_plugins_dist_1' => 'Lu plugin aquì souta soun cargat e ativat en lou repertori @plugins_dist@.', 'plugin_info_plugins_dist_2' => 'Noun soun deativable.', 'plugin_info_telecharger' => 'a telecargà sus @url@ e a instalà en @rep@', - 'plugin_info_upgrade_ok' => 'Metuda a jou rueisseda', + 'plugin_info_upgrade_ok' => 'Messa a jou rueisseda', 'plugin_librairies_installees' => 'Biblioutéca instaladi', - 'plugin_necessite_lib' => 'Aqueu plugin demanda la biblioutéca @lib@', - 'plugin_necessite_plugin' => 'Demanda lou plugin @plugin@ en versioun @version@ minimum.', - 'plugin_necessite_plugin_sans_version' => 'Demanda lou plugin @plugin@', - 'plugin_necessite_spip' => 'Demanda SPIP en versioun @version@ minimum.', + 'plugin_necessite_extension_php' => 'Necessita l’estensioun PHP @plugin@ en versioun @version@.', + 'plugin_necessite_extension_php_sans_version' => 'Necessita l’estencioun PHP @plugin@', + 'plugin_necessite_lib' => 'Aqueu plugin necessita la biblioutéca @lib@', + 'plugin_necessite_php' => 'Necessita @plugin@ en versioun @version@.', + 'plugin_necessite_plugin' => 'Necessita lou plugin @plugin@ en versioun @version@.', + 'plugin_necessite_plugin_sans_version' => 'Necessita lou plugin @plugin@', + 'plugin_necessite_spip' => 'Necessita SPIP en versioun @version@ minimum.', 'plugin_source' => 'source : ', 'plugin_titre_automatique' => 'Instalacioun autoumatic', 'plugin_titre_automatique_ajouter' => 'Ajustà dei plugin', 'plugin_titre_installation' => 'Instalacioun dóu plugin @plugin@', 'plugin_titre_modifier' => 'Lu miéu plugin', - 'plugin_zip_active' => 'Countinuàs per l’ativà', - 'plugin_zip_adresse' => 'endicàs aquì souta l’adressa d’un fichié zip de plugin a telecargà, o ben l’adressa d’una lista de plugin.', + 'plugin_utilise_extension_php' => 'Utilisa l’estencioun PHP @plugin@ en versioun @version@.', + 'plugin_utilise_php' => 'Utilisa @plugin@ en versioun @version@.', + 'plugin_utilise_plugin' => 'Utilisa lou plugin @plugin@ en versioun @version@.', + 'plugin_zip_active' => 'Countinuas per l’ativà', + 'plugin_zip_adresse' => 'endicas aquì souta l’adressa d’un fichié zip de plugin a telecargà, o ben l’adressa d’una lista de plugin.', 'plugin_zip_adresse_champ' => 'Adressa dóu plugin o de la lista ', 'plugin_zip_content' => 'Counten lu fichié seguent (@taille@),
      lest a instalà en lou repertori @rep@', - 'plugin_zip_installe_finie' => 'Lou fichié @zip@ a estat deserat e instalat.', + 'plugin_zip_installe_finie' => 'Lou fichié @zip@ es estat deserat e instalat.', 'plugin_zip_installe_rep_finie' => 'Lou fichié @zip@ estat deserat e instalat en lou repertori @rep@', 'plugin_zip_installer' => 'Poudès ahura l’instalà.', - 'plugin_zip_telecharge' => 'Lou fichié @zip@ a estat telecargat', + 'plugin_zip_telecharge' => 'Lou fichié @zip@ es estat telecargat', 'plugins_actif_aucun' => 'Minga plugin ativat.', 'plugins_actif_un' => 'Un plugin ativat.', 'plugins_actifs' => '@count@ plugin ativat.', @@ -688,8 +702,8 @@ embé una coulou qu’endica lou sieu estat :', 'protocole_ldap' => 'Versioun dóu proutoucole :', // Q - 'queue_executer_maintenant' => 'Eseguì ahura', - 'queue_info_purger' => 'Poudès supprimà toui lu travai en aspera et reinicialisà la lista embé lu travai periòdicou', + 'queue_executer_maintenant' => 'Esecutà ahura', + 'queue_info_purger' => 'Poudès supprimà toui lu travai en aspera et reinicialisà la lista emb’ai travai periòdicou', 'queue_nb_jobs_in_queue' => '@nb@ travai en aspera', 'queue_next_job_in_nb_sec' => 'Travai que ven en @nb@ s', 'queue_no_job_in_queue' => 'Minga travai en aspera', @@ -709,7 +723,7 @@ embé una coulou qu’endica lou sieu estat :', // T 'tache_cron_asap' => 'Tàcha CRON @function@ (ASAP)', 'tache_cron_secondes' => 'Tàcha CRON @function@ (touti li @nb@ s)', - 'taille_cache_image' => 'Lu image que SPIP a carculat autoumaticamen (vigneta dei doucumen, titre presentat en forma gràfica, founcioun matemàtiqui en forma TeX...) oucupon un toutal de @taille@ en lou repertori @dir@.', + 'taille_cache_image' => 'Lu image que SPIP a carculat automaticamen (vigneta dei doucumen, titre presentat en forma gràfica, founcioun matemàtiqui en forma TeX...) oucupon un toutal de @taille@ en lou repertori @dir@.', 'taille_cache_infinie' => 'Aqueu site noun preve de limitacioun de talha dóu repertori de l’amagadou.', 'taille_cache_maxi' => 'SPIP prouva de limità la talha dóu repertori de l’amagador d’estou sit a cìrca @octets@ de dounada.', 'taille_cache_moins_de' => 'La talha de l’amagadou es màncou de @octets@.', @@ -726,7 +740,7 @@ reinstalà SPIP per recreà una basa nouvèla couma pura un premié achès amini 'texte_annuaire_ldap_1' => 'S’avès achès a un annuari (LDAP), lou poudès utilisà per ', 'texte_article_statut' => 'Aquel article :', 'texte_article_virtuel' => 'Article virtual', - 'texte_article_virtuel_reference' => 'Article virtual : article referençat en lou vouòstre sit SPIP, mà redirigit vers una autra URL. Per suprimà la redirecioun, escassàs l’URL aquì soubre.', + 'texte_article_virtuel_reference' => 'Article virtual : article referençat en lou vouòstre sit SPIP, mà redirigit vers una autra URL. Per suprimà la redirecioun, escassas l’URL aquì soubre.', 'texte_aucun_resultat_auteur' => 'Minga resultat per « @cherche_auteur@ »', 'texte_auteur_messagerie' => 'Estou sit vi pòu endicà en permanença la lista dei redatour counetat, cen que vi permete d’escambià de message en diret. Poudès dechìdre de noun aparèisse en aquela lista (siès « invisible/a » dei autre utilisaire).', 'texte_auteurs' => 'LU AUTOUR', @@ -735,15 +749,15 @@ reinstalà SPIP per recreà una basa nouvèla couma pura un premié achès amini 'texte_choix_base_3' => 'Chausissès aquì souta aquela que lou vouòstre aubergadour v’a atribuit :', 'texte_choix_table_prefix' => 'Prefis dei taula :', 'texte_compatibilite_html' => 'Poudès demandà a SPIP de proudurre, sus lou sit pùblicou, de code coumptatible embé la norma HTML 4, o li permetre d’utilisà li poussibilità mai mouderni dóu HTML 5.', - 'texte_compatibilite_html_attention' => 'Li a minga risc a ativà l’oupcioun HTML 5>/i>, mà se lou fès, li pàgina dóu vouòstre sit deuran coumençà embé li mencioun seguent per està vàlidi : < !DOCTYPE html>.', + 'texte_compatibilite_html_attention' => 'Li a minga risc a ativà l’oupcioun HTML 5, mà se lou fès, li pàgina dóu vouòstre sit deuran coumençà emb’ai mencioun seguent per està vàlidi : < !DOCTYPE html>.', 'texte_compte_element' => '@count@ elemen', 'texte_compte_elements' => '@count@ elemen', 'texte_conflit_edition_correction' => 'Vourguès countroulà aquì souta li diferença tra li doui versioun dóu tèstou ; poudès finda coupià li vouòstri moudificacioun, pi recoumençà.', - 'texte_connexion_mysql' => 'Counsultàs li infourmacioun que lou vouòstre aubergadour fournisse : li devès troubà lou servidou de basa de dounada que proupausa e lu identificant persounal per vi counetà.', + 'texte_connexion_mysql' => 'Counsultas li infourmacioun que lou vouòstre aubergadour fournisse : li devès troubà lou servidou de basa de dounada que proupausa e lu identificant persounal per vi counetà.', 'texte_contenu_article' => '(Countengut de l’article en quauque mot.)', 'texte_contenu_articles' => 'Segoun la maqueta que lou vouòstre sit a adoutada, poudès dechidre que d’unu elemen dei article noun soun utilisat. - Utilisàs la lista aquì souta per endicà quau elemen soun dispounible.', + Utilisas la lista aquì souta per endicà quau elemen soun dispounible.', 'texte_crash_base' => 'Se la vouòstra basa de dounada s’es encalada, poudès prouvà una reparacioun autoumatica.', @@ -754,7 +768,8 @@ reinstalà SPIP per recreà una basa nouvèla couma pura un premié achès amini 'texte_date_publication_anterieure_nonaffichee' => 'Noun faire aparèisse de data de redacioun anterioura.', 'texte_date_publication_article' => 'DATA DE PUBLICACIOUN EN LIGNA:', 'texte_date_publication_objet' => 'Data de publicacioun en ligna :', - 'texte_descriptif_rapide' => 'Descritiu rapide', + 'texte_definir_comme_traduction_rubrique' => 'Aquela rùbrica es una traducioun de la rùbrica nùmero :', + 'texte_descriptif_rapide' => 'Descritiéu rapide', 'texte_effacer_base' => 'Escassà la basa de dounada SPIP', 'texte_effacer_statistiques' => 'Escassà li estatìstica', 'texte_en_cours_validation' => 'Lu countengut aquì souta asperoun d’estre validat.', @@ -766,12 +781,12 @@ reinstalà SPIP per recreà una basa nouvèla couma pura un premié achès amini 'texte_informations_personnelles_1' => 'Ahura lou sistèma vi va creà un achès persounalisat au sit.', 'texte_informations_personnelles_2' => '(Nota : es una reinstalacioun, se lou vouòstre achès marcha encara, poudès', 'texte_introductif_article' => '(Test introdutiu de l’article.)', - 'texte_jeu_caractere' => 'Es counsilhat d’emplegà, sus lou vouòstre sit, l’alfabet universal (utf-8) : permete d’afichà de tèstou en touti li lenga sensa proublema de coumpatibilitat embé lu navigatour mouderne.', + 'texte_jeu_caractere' => 'Es counsilhat d’emplegà, sus lou vouòstre sit, l’alfabet universal (utf-8) : permete d’afichà de tèstou en touti li lenga sensa proublema de coumpatibilità emb’ai navigatour mouderne.', 'texte_jeu_caractere_3' => 'Lou vouòstre sit es atualamen instalat dau juèc de carater :', - 'texte_jeu_caractere_4' => 'En cas qu’aquò noun courrespouònde a la realità dei vouòstri dounada (après, per isemple, una restouracioun de basa de dounada), o que coumencàs estou sit e desiràs chausì un autre juèc de caracter, endicàs-lou aicí : ', + 'texte_jeu_caractere_4' => 'En cas qu’acò noun courrespouònde a la realità dei vouòstri dounada (après, per isemple, una restouracioun de basa de dounada), o que coumencas estou sit e desiras chausì un autre juèc de caracter, endicas-lou aicí : ', 'texte_login_ldap_1' => '(Laissà vuèi per un achès anounime, o intrà lou camin coumplet, per isemple «uid=fabre, ou=users, dc=lou-mieu-doumìni, dc=com».)', - 'texte_login_precaution' => 'Mèfi ! Aquò es lou login embé lou qual siès ahura counetat. - Utilisàs aqueu fourmulari embé precaucioun...', + 'texte_login_precaution' => 'Mèfi ! Acò es lou login emb’au qual sias ahura counetat. + Utilisas aqueu fourmulari embé precaucioun...', 'texte_messagerie_agenda' => 'Una messagerìa permete ai redatour dóu sit de coumunicà diretamen tra elu en l’espaci privat dóu sit. Es assouciada a un agènda.', 'texte_mise_a_niveau_base_1' => 'Venès de metre a jou lu fichié SPIP. Ahura cau metre a nivèu la basa de dounada @@ -781,20 +796,20 @@ reinstalà SPIP per recreà una basa nouvèla couma pura un premié achès amini 'texte_multilinguisme_trad' => 'Poudès finda ativà un sistema de gestioun dei estac tra li diferenti traducioun sus certen ouget.', 'texte_non_compresse' => 'noun coumprimat (lou vouòstre servidou noun supouòrta aquela founciounalità)', 'texte_nouvelle_version_spip_1' => 'Avès instalat una nouvèla versioun de SPIP.', - 'texte_nouvelle_version_spip_2' => 'Aquela versioun nouvèla demanda una metuda a jou mai coumpleta qu’a l’acoustumada. Se siès webmèstre dóu sit, vourguès escassà lou fichié @connect@ e repilhà l’instalacioun per fin d’atualisà lu vouòstre parametre de counessioun a la basa de dounada.

      (NB: s’avès denembrat lu vouòstre parametre de counessioun, regarjàs lou fichié @connect@ denant de lou suprimà...)

      ', - 'texte_operation_echec' => 'Tournàs a la pàgina prechedenta, chausissès una autra basa o creàs nen una nouvèla. Verificàs li infourmacioun que lou vouòstre aubergadour v’a fournidi.', + 'texte_nouvelle_version_spip_2' => 'Aquela versioun nouvèla demanda una messa a jou mai coumpleta qu’a l’acoustumada. Se siès webmèstre dóu sit, vourguès escassà lou fichié @connect@ e repilhà l’instalacioun per fin d’atualisà lu vouòstre parametre de counessioun a la basa de dounada.

      (NB: s’avès denembrat lu vouòstre parametre de counessioun, regarjas lou fichié @connect@ denant de lou suprimà...)

      ', + 'texte_operation_echec' => 'Tournas a la pàgina prechedenta, chausissès una autra basa o creas nen una nouvèla. Verificas li infourmacioun que lou vouòstre aubergadour v’a fournidi.', 'texte_plus_trois_car' => 'mai de 3 caracter', - 'texte_plusieurs_articles' => 'Plusiur autour troubat da « @cherche_auteur@ »:', + 'texte_plusieurs_articles' => 'Plusiur autour troubat per « @cherche_auteur@ »:', 'texte_port_annuaire' => '(La valour predefinida counven generalamen.)', 'texte_presente_plugin' => 'Aquela pàgina lista lu plugin dispounible sus lou sit. Poudès ativà lu plugin necessari en entacant la casa courrespoundenta.', 'texte_proposer_publication' => 'Quoura lou vouòstre article sera acabat,
      pourès proupausà la siéu publicacioun.', - 'texte_proxy' => 'De còu que lì a (intranet, rets protegidi...), lu sit distant (doucumentacioun de SPIP, sit sindicat, eca.) soun achessible qu’ a travès un proxy. En aquèu cas, endicàs aquì souta la siéu adressa coum’acò @proxy_en_cours@. En general, laisserès aquèla casa vuèia', - 'texte_publication_articles_post_dates' => 'Couma SPIP si deu coumpourtà embé lu article que la sieu + 'texte_proxy' => 'De còu que lì a (intranet, rets protegidi...), lu sit distant (doucumentacioun de SPIP, sit sindicat, eca.) soun achessible qu’a travès un proxy. En aqueu cas, endiquès aquì souta la siéu adressa coum’acò @proxy_en_cours@. En general, laisserès aquèla casa vuèia', + 'texte_publication_articles_post_dates' => 'Couma SPIP si deu coumpourtà emb’ai article que la sieu data de publicacioun es fissada a una escadença futura ?', - 'texte_rappel_selection_champs' => '[Noun denembràs de seleciounà courretamen aqueu camp.]', + 'texte_rappel_selection_champs' => '[Noun denembras de seleciounà courretamen aqueu camp.]', 'texte_recalcul_page' => 'Se voulès -recarculà soulamen una pàgina, passàs pulèu per l’espaci public et utilisàs lou boutoun « recarculà ».', +recarculà soulamen una pàgina, passas pulèu per l’espaci public et utilisas lou boutoun « recarculà ».', 'texte_recuperer_base' => 'Reparà la basa de dounada', 'texte_reference_mais_redirige' => 'article referençat en lou vouòstre sit SPIP, ma redirigiat vèrs un’autra URL.', 'texte_requetes_echouent' => 'Quoura certeni requesta SQL souhon @@ -802,13 +817,13 @@ recarculà soulamen una pàgina, passàs pulèu per l’espaci public et utilis qu’acò vengue de la basa de dounada.

      Lou vouòstre servidou SQL a la facultà de reparà li sieu taula quoura li soun estadi degalhadi per achident. Aquì poudès prouvà aquela reparacioun ; se - noun marcha, counservàs una còpia de l’afichage, que counten bessai + noun marche, counservas una còpia de l’afichage, que counten bessai d’indìci de cen que noun marcha...

      - Se lou proublema persiste, countactàs lou vouòstre + Se lou proublema persiste, countactas lou vouòstre aubergadour.

      ', 'texte_selection_langue_principale' => 'Poudès seleciounà aquì souta la « lenga principala » dóu sit. Aquela chausida noun v’oubligia - gauch proun que noun - da escriéure lu vouòstre article en la lenga seleciounada, ma permete de determinà :
      • lou fourmat predefinit dei data soubre lou sit pùblicou ;
      • -
      • la natura dóu moutour tipougràficou que SPIP déu utilisà dau rendut dei tèstou;
      • +
      • la natura dóu moutour tipougràficou que SPIP déu utilisà per lou rendut dei tèstou;
      • la lenga utilisada en lu fourmulari dóu sit pùblicou;
      • la lenga presentada couma predefinida en l’espaci privat.
      ', 'texte_sous_titre' => 'Souta-titre', @@ -816,24 +831,24 @@ recarculà soulamen una pàgina, passàs pulèu per l’espaci public et utilis 'texte_statut_attente_validation' => 'en aspèra de validacioun', 'texte_statut_publies' => 'publicat en ligna', 'texte_statut_refuses' => 'refudat', - 'texte_suppression_fichiers' => 'Utilisàs aquela coumanda da suprimà toui lu fichié que si troubon + 'texte_suppression_fichiers' => 'Utilisas aquela coumanda per fin de suprimà toui lu fichié que si trouvon en l’amagadou SPIP. Acò permete per isemple de fourçà un nouvèu carcul de touti li pàgina s’avès fach dei moudificacioun empourtanti de grafisme o d’estrutura dóu sit.', 'texte_sur_titre' => 'Soubre-titre', 'texte_table_ok' => ': aquela taula va ben.', 'texte_tentative_recuperation' => 'Tentativa de reparacioun', 'texte_tenter_reparation' => 'Prouvà de reparà la basa de dounada', - 'texte_test_proxy' => 'Da prouvà aqueu proxy, endicàs aquì l’adressa d’un sit web + 'texte_test_proxy' => 'Per prouvà aqueu proxy, endicas aquì l’adressa d’un sit web que lou vourias prouvà.', 'texte_titre_02' => 'Titre :', 'texte_titre_obligatoire' => 'Titre [Oubligatori]', 'texte_travail_article' => '@nom_auteur_modif@ a trabalhat sus aquel article @date_diff@ minuta fa', - 'texte_travail_collaboratif' => 'Quoura es frequent que mai d’un redatour - trabalhe sus lou meme article, lou sistema + 'texte_travail_collaboratif' => 'Coura es frequent que mai d’un redatour + travalhe sus lou meme article, lou sistema pòu afichà lu article darieramen « dubèrt » - da evità li moudificacioun fach ensen. + per fin d’evità li moudificacioun fachi ensen. Aquela oupcioun es desativada de maniera predefinida - da evità d’afichà de message d’avertimen + per fin d’evità d’afichà de message d’avertimen intempestiéu.', 'texte_vide' => 'vuèi', 'texte_vider_cache' => 'Vuà l’amagadou', @@ -854,7 +869,8 @@ s’avès fach dei moudificacioun empourtanti de grafisme o d’estrutura dóu s 'titre_config_fonctions' => 'Counfiguracioun dóu sit', 'titre_config_langage' => 'Counfigurà la lenga', 'titre_configuration' => 'Counfiguracioun dóu sit', - 'titre_configurer_preferences' => 'Counfigurà li vouòstri preferença vos préférences', + 'titre_configurer_preferences' => 'Counfigurà li vouòstri preferença', + 'titre_configurer_preferences_menus' => 'Counfigurà li vouòstri preferença de menù', 'titre_conflit_edition' => 'Counflit dóu tems de l’edicioun', 'titre_connexion_ldap' => 'Oupcioun : La vouòstra counessioun LDAP', 'titre_groupe_mots' => 'GROUP DE MOT :', @@ -866,7 +882,7 @@ s’avès fach dei moudificacioun empourtanti de grafisme o d’estrutura dóu s 'titre_messagerie_agenda' => 'Messagerìa e agenda', 'titre_naviguer_dans_le_site' => 'Navigà en lou sit...', 'titre_nouvelle_rubrique' => 'Nouvèla rùbrica', - 'titre_numero_rubrique' => 'RÙBRICA NÚMERO :', + 'titre_numero_rubrique' => 'RÙBRICA NÙMERO :', 'titre_page_articles_edit' => 'Moudificà : @titre@', 'titre_page_articles_page' => 'Lu article', 'titre_page_articles_tous' => 'Tout lou sit', @@ -875,13 +891,14 @@ s’avès fach dei moudificacioun empourtanti de grafisme o d’estrutura dóu s 'titre_page_delete_all' => 'supressioun toutala e irreversibla', 'titre_page_recherche' => 'Resultat de la recerca @recherche@', 'titre_page_statistiques_referers' => 'Estatistica (estac intrant)', - 'titre_page_upgrade' => 'Metuda a nivèu de SPIP', + 'titre_page_upgrade' => 'Messa a nivèu de SPIP', + 'titre_preference_menus_favoris' => 'Menù favourit', 'titre_publication_articles_post_dates' => 'Publicacioun dei article post-datat', 'titre_reparation' => 'Reparacioun', 'titre_suivi_petition' => 'Segut dei peticioun', 'tls_ldap' => 'Transport Layer Security :', 'trad_article_traduction' => 'Touti li versioun d’aquel article :', - 'trad_delier' => 'Pus legà aquest article ai traducioun sieui', + 'trad_delier' => 'Pus legà aquel article ai traducioun sieui', 'trad_lier' => 'Aquel article es una traducioun de l’article nùmero :', 'trad_new' => 'Escrieure una nouvèla traducioun', @@ -891,5 +908,3 @@ s’avès fach dei moudificacioun empourtanti de grafisme o d’estrutura dóu s // V 'version' => 'Versioun:' ); - -?> diff --git a/www/ecrire/lang/ecrire_oc_prv.php b/www/ecrire/lang/ecrire_oc_prv.php index c39bc8b4..afdb5377 100644 --- a/www/ecrire/lang/ecrire_oc_prv.php +++ b/www/ecrire/lang/ecrire_oc_prv.php @@ -1,9 +1,11 @@ 'Tornatz a la pagina anteriora, e verificatz leis informacions qu’avètz fornidas. ', 'avis_connexion_ldap_echec_3' => 'Alternativament, utilizetz pas lo supòrt LDAP per importar d’utilizaires.', 'avis_deplacement_rubrique' => 'Atention! Aquela rubrica conten @contient_breves@ brèvas@scb@: se la desplaçatz, voudretz ben oscar aquela casa de confirmacion.', - 'avis_destinataire_obligatoire' => 'Devètz indicar un destinatari avans de mandar aqueu messatge.', 'avis_erreur_connexion_mysql' => 'Error de connexion SQL', - 'avis_erreur_version_archive' => 'Atencion! Lo fichier @archive@ correspònd a una autra version d’SPIP que la qu’avètz installada. Anatz devèrs de dificultats grandassas: risca de destruccion de vòstra basa de donadas, disfoncionaments divèrs dau sit, etc. Validetz pas aquela demanda d’importacion.

      Per mai d’informacions, vejatz - -la documentacion d’SPIP.', # MODIF - 'avis_espace_interdit' => 'Espaci proïbit

      SPIP es ja installat.', + 'avis_espace_interdit' => 'Espaci proïbit

      SPIP es ja installat.', # MODIF 'avis_lecture_noms_bases_1' => 'Lo programa d’installacion a pas pogut legir lei noms dei basas de donadas installadas.', 'avis_lecture_noms_bases_2' => 'Siá ges de basa es disponibla, siá la foncion que permet d’entierar lei basas es estada desactivada per de rasons de seguretat (aquò’s lo cas en cò de mai d’un aubergador).', 'avis_lecture_noms_bases_3' => 'Dins la segonda alternativa, es probable qu’una basa que pòrta vòstre nom de login siá utilizabla:', - 'avis_non_acces_message' => 'Podètz pas accedir a aqueu messatge.', 'avis_non_acces_page' => 'Podètz pas accedir a aquela pagina.', 'avis_operation_echec' => 'L’operacion s’es encalada.', - 'avis_probleme_archive' => 'Problèma de lectura dau fichier @archive@', 'avis_suppression_base' => 'ATENCION, suprimir lei donadas es irreversible', - 'avis_version_mysql' => 'Vòstra version de SQL (@version_mysql@) permet pas l’autoreparacion dei taulas de la basa.', // B 'bouton_acces_ldap' => 'Apondre l’accès a LDAP >>', 'bouton_ajouter' => 'Apondre', - 'bouton_ajouter_participant' => 'APONDRE UN PARTICIPANT:', - 'bouton_annonce' => 'ANONCI', - 'bouton_checkbox_envoi_message' => 'possibilitat de mandar un messatge', - 'bouton_checkbox_indiquer_site' => 'indicar obligatoriament un sit web', - 'bouton_checkbox_signature_unique_email' => 'ren qu’una signatura per adreiça e-mail', - 'bouton_checkbox_signature_unique_site' => 'ren qu’una signatura per sit web', 'bouton_demande_publication' => 'Demandar la publicacion d’aquest article', 'bouton_desactive_tout' => 'Desactivar tot', - 'bouton_effacer_index' => 'Escafar leis indèx', 'bouton_effacer_tout' => 'O escafar tot', - 'bouton_envoi_message_02' => 'MANDAR UN MESSATGE', 'bouton_envoyer_message' => 'Messatge definitiu: mandar', 'bouton_modifier' => 'Modificar', - 'bouton_pense_bete' => 'MEMENTO (D’USATGE PERSONAU)', - 'bouton_radio_activer_messagerie' => 'Activar la messatjariá intèrna', - 'bouton_radio_activer_messagerie_interne' => 'Activar la messatjariá intèrna', - 'bouton_radio_activer_petition' => 'Activar la peticion', 'bouton_radio_afficher' => 'Afichar', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Afichar dins la tiera dei redactors connectats', - 'bouton_radio_desactiver_messagerie' => 'Desactivar la messatjariá', 'bouton_radio_envoi_annonces_adresse' => 'Mandar leis anoncis a l’adreiça:', 'bouton_radio_envoi_liste_nouveautes' => 'Mandar la tiera dei novetats', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Pas aparéisser dins la tiera dei redactors', 'bouton_radio_non_envoi_annonces_editoriales' => 'Pas mandar d’anoncis editoriaus', - 'bouton_radio_pas_petition' => 'Ges de peticion', - 'bouton_radio_petition_activee' => 'Peticion activada', - 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', 'bouton_redirection' => 'TORNAR DIRIGIR', 'bouton_relancer_installation' => 'Tornar lançar l’installacion', 'bouton_suivant' => 'Seguent', 'bouton_tenter_recuperation' => 'Assajar de reparar', 'bouton_test_proxy' => 'Assajar lo proxy', 'bouton_vider_cache' => 'Vujar l’escondedor', - 'bouton_voir_message' => 'Veire aqueu messatge avans de lo validar', // C - 'cache_mode_compresse' => 'Lei fichiers de l’escondedor son registrats en mòde comprimit.', - 'cache_mode_non_compresse' => 'Lei fichiers de l’escondedor son registrats en mòde non comprimit.', 'cache_modifiable_webmestre' => 'Lo webmèstre dau sit pòt modificar aquestei paramètres.', 'calendrier_synchro' => 'S’utilizatz un logiciau d’agenda compatible iCal, lo podètz sincronizar amb leis informacions d’aquest sit.', @@ -107,7 +83,6 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'entree_login' => 'Lo vòstre login', 'entree_login_connexion_1' => 'Lo login de connexion', 'entree_login_connexion_2' => '(Correspònd de còps au vòstre login d’accès a l’FTP; de còps se laissa vuege)', - 'entree_login_ldap' => 'Login LDAP iniciau', 'entree_mot_passe' => 'Vòstre mot de santa Clara', 'entree_mot_passe_1' => 'Mot de santa Clara per la connexion', 'entree_mot_passe_2' => '(Correspònd de còps a vòstre mot de santa Clara per l’FTP; de còps se laissa vuege)', @@ -127,7 +102,7 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'ical_info2' => 'Per tenir mai d’informacions subre aquelei tecnicas, esitetz pas de consultar la documentacion d’SPIP.', # MODIF 'ical_info_calendrier' => 'I a dos calendiers a la vòstra disposicion. Lo primier es un plan dau sit qu’anóncia totei leis articles publicats. Lo segond conten leis anoncis editoriaus en mai de vòstrei darriers messatges privats: vos es reservat gràcias a una clau personala, que la podètz modificar en tot moment en renovant vòstre mot de santa Clara. ', 'ical_methode_http' => 'Telecargament', - 'ical_methode_webcal' => 'Sincronizacion (webcal://)', + 'ical_methode_webcal' => 'Sincronizacion (webcal://)', # MODIF 'ical_texte_js' => 'Leis articles publicats en aqueu sit se pòdon afichar aisat, dins totei lei sits vòstres, en fasent servir una linha javascript. ', 'ical_texte_prive' => 'Aqueu calendier, d’us estrictament personau, vos informa de l’activitat editoriala privada d’aqueu sit (òbras e rendètz-vos personaus, articles e brèvas prepausats...).', 'ical_texte_public' => 'Aqueu calendier vos permet de seguir l’activitat publica d’aqueu sit (articles e brèvas publicats).', @@ -144,9 +119,7 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'icone_creer_auteur' => 'Crear un autor nòu e l’associar a aquel article', 'icone_creer_mot_cle' => 'Crear un mot clau nòu e lo liar a aquel article', 'icone_creer_rubrique_2' => 'Crear una rubrica nòva', - 'icone_envoyer_message' => 'Mandar aqueu messatge', 'icone_modifier_article' => 'Modificar aquel article', - 'icone_modifier_message' => 'Modificar aqueu messatge', 'icone_modifier_rubrique' => 'Modificar aquela rubrica', 'icone_retour' => 'Tornar', 'icone_retour_article' => 'Tornar a l’article', @@ -156,10 +129,7 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'icone_valider_signature' => 'Validar aquela signatura', 'image_administrer_rubrique' => 'Podètz administrar aquela rubrica', 'info_1_article' => '1 article', - 'info_1_site' => '1 sit', 'info_activer_cookie' => 'Podètz activar un cookie de correspondéncia; aquò vos permetrà de passar aisat dau sit public au sit privat.', - 'info_admin_gere_rubriques' => 'Aquel administrator gerís lei rubricas seguentas:', - 'info_admin_gere_toutes_rubriques' => 'Aquel administrator gerís totei lei rubricas.', # MODIF 'info_administrateur' => 'Administrator', 'info_administrateur_1' => 'Administrator', 'info_administrateur_2' => 'dau sit(d’utilizar amb precaucion)', @@ -169,13 +139,10 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_administrer_rubrique' => 'Podètz administrar aquela rubrica', 'info_adresse' => 'a l’adreiça:', 'info_adresse_url' => 'Adreiça (URL) dau sit public', - 'info_afficher_visites' => 'Afichar lei vesitas per:', 'info_aide_en_ligne' => 'Ajuda en linha SPIP', 'info_ajout_image' => 'Quand apondètz d’imatges coma estacaments jonchs a un article, SPIP pòt crear automaticament per vos de vinhetas (miniaturas) deis imatges inserits. Aquò permet per exemple de crear automaticament una galariá o un pòrtfòlio.', - 'info_ajout_participant' => 'Lo participant seguent es apondut:', 'info_ajouter_rubrique' => 'Apondre una autra rubrica d’administrar:', 'info_annonce_nouveautes' => 'Anonci dei novetats', - 'info_anterieur' => 'anteriora', 'info_article' => 'article', 'info_article_2' => 'articles', 'info_article_a_paraitre' => 'Leis articles pòstdatats per paréisser', @@ -183,10 +150,8 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_articles_2' => 'Articles', 'info_articles_auteur' => 'Los articles d’aquel autor', 'info_articles_trouves' => 'Articles trobats', - 'info_articles_trouves_dans_texte' => 'Articles trobats (dins lo tèxt)', 'info_attente_validation' => 'Vòstreis articles en espèra de validacion', 'info_aujourdhui' => 'uei:', - 'info_auteur_message' => 'AUTOR DAU MESSATGE:', 'info_auteurs' => 'Leis autors', 'info_auteurs_par_tri' => 'autors@partri@', 'info_auteurs_trouves' => 'Autors trobats', @@ -219,15 +184,12 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_date_publication_anterieure' => 'Data anteriora de publicacion:', 'info_date_referencement' => 'DATA DE REFERENCIAMENT D’AQUEU SIT:', 'info_derniere_etape' => 'Darriera estapa: Es acabat!', - 'info_derniers_articles_publies' => 'Vòstrei darriers articles publicats en linha', - 'info_desactiver_messagerie_personnelle' => 'Podètz activar o desactivar vòstra messatjariá personala sus aqueu sit.', 'info_descriptif' => 'Descriptiu:', 'info_discussion_cours' => 'Discussions en cors', 'info_ecrire_article' => 'Avans de poder escriure d’articles, vos cau crear aumens una rubrica.', 'info_email_envoi' => 'Adreiça e-mail de mandadís (opcionau)', 'info_email_envoi_txt' => 'Indicatz aicí l’adreiça d’utilizar per enviar leis e-mails (a fauta d’aquò, s’utilizarà l’adreiça destinatari coma adreiça de mandadís):', 'info_email_webmestre' => 'Adreiça e-mail dau responsable dau sit (opcionau)', # MODIF - 'info_entrer_code_alphabet' => 'Picatz lo còde de l’alfabet d’utilizar:', 'info_envoi_email_automatique' => 'Mandadís d’e-mails automatics', 'info_envoyer_maintenant' => 'Mandar ara', 'info_etape_suivante' => 'Passar a l’estapa seguenta', @@ -237,27 +199,19 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_facilite_suivi_activite' => 'Per facilitar lo seguit de l’activitat editoriala dau sit, SPIP vos pòt fornir per e-mail, per exemple a una lista de corrier dei redactors, l’anonci dei demandas de publicacion e dei validacions d’articles.', 'info_fichiers_authent' => 'Fichiers d’autentificacion « .htpasswd »', 'info_forums_abo_invites' => 'Vòstre sit web porgís de forums per leis abonats; dins lo sit public lei vesitaires son convidats a se registrar.', - 'info_gauche_admin_effacer' => 'A aquela pagina, ren que lei responsables dau sit i pòdon accedir.

      Permet de trobar lei diferentei foncions de mantenença tecnica. D’unei que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.

      ', # MODIF 'info_gauche_admin_tech' => 'A aquela pagina, ren que lei responsables dau sit i pòdon accedir.

      Permet de trobar lei diferentei foncions de mantenença tecnica. D’unei que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.

      ', # MODIF 'info_gauche_admin_vider' => 'A aquela pagina, ren que lei responsables dau sit i pòdon accedir.

      Permet de trobar lei diferentei foncions de mantenença tecnica. D’unei que i a implican un procès d’autentificacion especific, que necessita un accès FTP au sit web.

      ', # MODIF 'info_gauche_auteurs' => 'Trobaretz aicí totei leis autors dau sit. La color deis icònas n’indica l’estatut (administrator = verd; redactor = jaune).', 'info_gauche_auteurs_exterieurs' => 'Leis autors exteriors, sens accès au sit, son indicats per una icòna blava; leis autors escafats per un bordilhier.', # MODIF 'info_gauche_messagerie' => 'La messatjariá vos permet d’escambiar de messatges entre redactors, de servar de mementos (per vòstre usatge personau) o d’afichar d’anoncis sus la pagina d’acuelh de l’espaci privat (se siatz administrator/tritz).', - 'info_gauche_numero_auteur' => 'AUTOR NUMÈRO', 'info_gauche_statistiques_referers' => 'Aquela pagina presenta la lista dei referidors, valent a dire dei sits que contenon de liames menant vèrs vòstre sit pròpri, mai unicament per ièr e uei: aquela lista s’actualiza cada 24 oras.', 'info_gauche_visiteurs_enregistres' => 'Trobaretz aquí lei vesitaires registrats dins l’espaci public dau sit (forums amb abonament).', 'info_generation_miniatures_images' => 'Congreacion de miniaturas deis imatges', - 'info_gerer_trad' => 'Gerir lei liames de revirada?', 'info_hebergeur_desactiver_envoi_email' => 'D’uneis aubergadors desactivan lo mandadís automatic d’e-mails dempuei sei servidors. En aqueu cas, lei foncionalitats seguentas d’SPIP foncionaràn pas.', 'info_hier' => 'ièr:', - 'info_historique_activer' => 'Activar lo seguiment dei revisions', - 'info_historique_affiche' => 'Afichar aquela version', - 'info_historique_comparaison' => 'comparason', - 'info_historique_desactiver' => 'Desactivar lo seguiment dei revisions', - 'info_historique_texte' => 'Lo seguiment dei revisions permet de servar un istoric de totei lei modificacions que s’es portat au contengut d’un article, e d’afichar lei diferéncias entre lei versions successivas.', 'info_identification_publique' => 'Vòstra identitat publica...', 'info_image_process' => 'Vougatz seleccionar lo melhor metòde de fabricacion dei vinhetas en clicant sus l’imatge correspondent.', 'info_image_process2' => 'N.B. Se ges d’imatge apareis, aladonc lo servidor qu’aubèrga vòstre sit l’an pas configurat per utilizar d’aisinas talas. Se desiratz d’utilizar aquelei foncions, contactatz lo responsable tecnic e demandatz leis extensions «GD» o «Imagick».', # MODIF @@ -275,8 +229,6 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_login_trop_court' => 'Login tròp cort.', 'info_maximum' => 'maximum:', 'info_meme_rubrique' => 'Dins la meteissa rubrica', - 'info_message' => 'Messatge dau', - 'info_message_efface' => 'MESSATGE ESCAFAT', 'info_message_en_redaction' => 'Vòstrei messatges en cors de redaccion', 'info_message_technique' => 'Messatge tecnic:', 'info_messagerie_interne' => 'Messatjariá intèrna', @@ -289,20 +241,15 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_modifier_rubrique' => 'Modificar la rubrica:', 'info_modifier_titre' => 'Modificar: @titre@', 'info_mon_site_spip' => 'Mon sit SPIP', - 'info_mot_sans_groupe' => '(Mots fòra grop...)', - 'info_moteur_recherche' => 'Cercador integrat', 'info_moyenne' => 'mejana:', - 'info_multi_articles' => 'Activar lo menut de lenga per leis articles?', 'info_multi_cet_article' => 'Lenga d’aquest article:', 'info_multi_langues_choisies' => 'Vougatz seleccionar çai sota lei lengas que son a posita dei redactors de vòstre sit. Lei lengas ja emplegadas dins vòstre sit (afichadas d’en primier) se pòdon pas desactivar.', - 'info_multi_rubriques' => 'Activar lo menut de lenga per lei rubricas?', 'info_multi_secteurs' => '... ren que per lei rubricas a la raiç dau sit?', 'info_nom' => 'Nom', 'info_nom_destinataire' => 'Nom dau destinatari', 'info_nom_site' => 'Nom dau vòstre sit', 'info_nombre_articles' => '@nb_articles@ articles,', - 'info_nombre_partcipants' => 'PARTICIPANTS A LA DISCUSSION:', 'info_nombre_rubriques' => '@nb_rubriques@ rubricas,', 'info_nombre_sites' => '@nb_sites@ sits,', 'info_non_deplacer' => 'De pas desplaçar...', @@ -312,36 +259,26 @@ L’administrator dau sistèma o de la ret vos deu poder fornir 'info_non_modifiable' => 'se pòt pas modificar', 'info_non_suppression_mot_cle' => 'vòli pas suprimir aqueu mot clau.', 'info_notes' => 'Nòtas', - 'info_nouveaux_message' => 'Messatges nòus', 'info_nouvel_article' => 'Article nòu', 'info_nouvelle_traduction' => 'Revirada nòva:', 'info_numero_article' => 'ARTICLE NUMÈRO:', 'info_obligatoire_02' => '[Obligatòri]', # MODIF 'info_option_accepter_visiteurs' => 'Acceptar l’inscripcion dei vesitaires dau sit public', - 'info_option_faire_suivre' => 'Faire seguir lei messatges dei forums ais autors deis articles', 'info_option_ne_pas_accepter_visiteurs' => 'Refusar l’inscripcion de vesitaires', 'info_options_avancees' => 'OPCIONS AVANÇADAS', - 'info_ortho_activer' => 'Activar lo verificador d’ortografia', - 'info_ortho_desactiver' => 'Desactivar lo verificador d’ortografia', 'info_ou' => 'o... ', 'info_page_interdite' => 'Pagina proïbida', 'info_par_nombre_article' => '(per nombre d’articles)', 'info_passe_trop_court' => 'Mot de santa Clara tròp cort.', 'info_passes_identiques' => 'Lei dos mots de santa Clara son pas identics.', - 'info_pense_bete_ancien' => 'Vòstrei mementos ancians', # MODIF 'info_plus_cinq_car' => 'mai de 5 caractèrs', 'info_plus_cinq_car_2' => '(mai de 5 caractèrs)', 'info_plus_trois_car' => '(mai de 3 caractèrs)', 'info_popularite' => 'popularitat: @popularite@; vesitas: @visites@', - 'info_popularite_4' => 'popularitat: @popularite@; vesitas: @visites@', 'info_post_scriptum' => 'Post-scriptum', 'info_post_scriptum_2' => 'Post-scriptum:', 'info_pour' => 'per', - 'info_preview_admin' => 'Solament leis administrators pòdon previsualizar lo sit', - 'info_preview_comite' => 'Totei lei redactors pòdon previsualizar lo sit', - 'info_preview_desactive' => 'La previsualizacion es dau tot desactivada', - 'info_preview_texte' => 'Es possible de previsualizar lo sit coma s’avián publicat totei leis articles e brèvas (que tenon aumens l’estatut "prepausat"). La cau dobrir, aquela possibilitat, ren qu’ais administrators, a totei lei redactors, o en degun?', - 'info_principaux_correspondants' => 'Vòstrei correspondents principaus', + 'info_preview_texte' => 'Es possible de previsualizar lo sit coma s’avián publicat totei leis articles e brèvas (que tenon aumens l’estatut "prepausat"). La cau dobrir, aquela possibilitat, ren qu’ais administrators, a totei lei redactors, o en degun?', # MODIF 'info_procedez_par_etape' => 'procedissètz estapa per estapa', 'info_procedure_maj_version' => 'Cau lançar la procedura d’actualizacion per adaptar la basa de donadas a la version novèla d’SPIP.', @@ -356,12 +293,9 @@ L’administrator dau sistèma o de la ret vos deu poder fornir que li baila un còde d’accès au sit privat. D’uneis aubergadors autorizan pas lo mandadís d’e-mails dempuei sei servidors: en aqueu cas, l’inscripcion automatica es impossibla.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Desiratz d’utilizar lo cercador integrat a SPIP? (lo desactivar abriva lo foncionament dau sistèma.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Raiç dau sit', 'info_recharger_page' => 'Vougatz tornar cargar aquela pagina dins un momenton.', - 'info_recherche_auteur_a_affiner' => 'Tròp de resultats per "@cherche_auteur@"; vougatz afinar la cèrca.', - 'info_recherche_auteur_ok' => 'Mai d’un redactor trobat per "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Ges de resultat trobat per "@cherche_auteur@".', 'info_recommencer' => 'Vougatz tornar començar.', 'info_redacteur_1' => 'Redactor', @@ -378,7 +312,6 @@ D’uneis aubergadors autorizan pas lo mandadís d’e-mails dempuei sei servido 'info_rubriques' => 'Rubricas', 'info_rubriques_02' => 'rubricas', 'info_rubriques_trouvees' => 'Rubricas trobadas', - 'info_rubriques_trouvees_dans_texte' => 'Rubricas trobadas (dins lo tèxt)', 'info_sans_titre' => 'Sensa títol', 'info_selection_chemin_acces' => 'Seleccionatz çai sota lo camin d’accès dins l’annuari:', 'info_signatures' => 'signaturas', @@ -391,13 +324,11 @@ D’uneis aubergadors autorizan pas lo mandadís d’e-mails dempuei sei servido 'info_sites_lies_mot' => 'Lei sits referenciats ligats a aqueu mot clau', 'info_sites_proxy' => 'Utilizar un proxy', 'info_sites_trouves' => 'Sits trobats', - 'info_sites_trouves_dans_texte' => 'Sits trobats (dins lo tèxt)', 'info_sous_titre' => 'Sostítol:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Estatut d’aquel autor:', # MODIF 'info_statut_auteur_a_confirmer' => 'Inscripcion de confirmar', 'info_statut_auteur_autre' => 'Autre estatut :', - 'info_statut_efface' => 'Escafat', 'info_statut_redacteur' => 'Redactor', 'info_statut_utilisateurs_1' => 'Estatut predefinit deis utilizaires importats', 'info_statut_utilisateurs_2' => 'Chausissètz l’estatut d’atribuir ai personas presentas dins l’annuari LDAP quora se connèctan per lo primier còp. Poiretz puei modificar aquel estatut per cada autor un cas per un.', @@ -415,7 +346,6 @@ D’uneis aubergadors autorizan pas lo mandadís d’e-mails dempuei sei servido 'info_tous_articles_en_redaction' => 'Totei leis articles en cors de redaccion', 'info_tous_articles_presents' => 'Totei leis articles publicats dins aquela rubrica', 'info_tous_les' => 'totei lei:', - 'info_tous_redacteurs' => 'Anoncis a totei lei redactors ', 'info_tout_site' => 'Tot lo sit', 'info_tout_site2' => 'An pas revirat l’article dins aquela lenga.', 'info_tout_site3' => 'An revirat l’article dins aquela lenga, mai an portat puei de modificacions a l’article de referéncia. Cau actualizar la revirada.', @@ -430,7 +360,6 @@ una color indica lor estat:', 'info_une_rubrique' => 'una rubrica, ', 'info_une_rubrique_02' => '1 rubrica', 'info_url' => 'URL:', - 'info_url_site' => 'URL DAU SIT:', 'info_urlref' => 'Liame ipertèxt:', 'info_utilisation_spip' => 'Ara podètz començar d’utilizar lo sistèma de publicacion assistida...', 'info_visites_par_mois' => 'Afichatge per mes:', @@ -447,15 +376,12 @@ una color indica lor estat:', 'item_activer_messages_avertissement' => 'Activar lei messatges d’avertiment', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Afichar dins lo calendier', - 'item_autoriser_documents_joints' => 'Autorizar que se jonga de documents ais articles', - 'item_autoriser_documents_joints_rubriques' => 'Autorizar lei documents dins lei rubricas', 'item_choix_administrateurs' => 'leis administrators', 'item_choix_generation_miniature' => 'Congrear automaticament lei miniaturas deis imatges.', 'item_choix_non_generation_miniature' => 'Congrear ges de miniaturas deis imatges.', 'item_choix_redacteurs' => 'lei redactors', 'item_choix_visiteurs' => 'lei vesitaires dau sit public', 'item_creer_fichiers_authent' => 'Crear de fichiers .htpasswd', - 'item_limiter_recherche' => 'Limitar la cèrca ais informacions contengudas dins vòstre sit', 'item_login' => 'Login', 'item_mots_cles_association_articles' => 'ais articles', 'item_mots_cles_association_rubriques' => 'ai rubricas', @@ -464,34 +390,24 @@ una color indica lor estat:', 'item_non_accepter_inscriptions' => 'Pas acceptar leis inscripcions', 'item_non_activer_messages_avertissement' => 'Ges de messatge d’avertiment', 'item_non_afficher_calendrier' => 'De pas afichar dins lo calendier', - 'item_non_autoriser_documents_joints' => 'Pas autorizar lei documents dins leis articles', - 'item_non_autoriser_documents_joints_rubriques' => 'Pas autorizar lei documents dins lei rubricas', 'item_non_creer_fichiers_authent' => 'Pas crear aquelei fichiers', - 'item_non_gerer_statistiques' => 'Pas gerir leis estadisticas', - 'item_non_limiter_recherche' => 'Alargar la cèrca au contengut dei sits referenciats', 'item_non_publier_articles' => 'Pas publicar leis articles avans la data de publicacion prevista.', - 'item_non_utiliser_moteur_recherche' => 'Pas utilizar lo motor', 'item_nouvel_auteur' => 'Autor nòu', 'item_nouvelle_rubrique' => 'Rubrica nòva', 'item_oui' => 'Òc', 'item_publier_articles' => 'Publicar leis articles, quina que siá sa data de publicacion', 'item_reponse_article' => 'Respònsa a l’article', - 'item_utiliser_moteur_recherche' => 'Utilizar lo cercador', 'item_visiteur' => 'vesitaire', // J 'jour_non_connu_nc' => 'n.c.', // L - 'lien_ajout_destinataire' => 'Apondre aqueu destinatari', 'lien_ajouter_auteur' => 'Apondre aquel autor', - 'lien_ajouter_participant' => 'Apondre un participant', 'lien_email' => 'e-mail', 'lien_nom_site' => 'NOM DAU SIT:', 'lien_retirer_auteur' => 'Levar l’autor', - 'lien_retrait_particpant' => 'Levar aqueu participant', 'lien_site' => 'sit', - 'lien_supprimer_rubrique' => 'suprimir aquela rubrica', 'lien_tout_deplier' => 'Desplegar tot', 'lien_tout_replier' => 'Tornar plegar', 'lien_trier_nom' => 'Triar per nom', @@ -526,6 +442,7 @@ una color indica lor estat:', // R 'repertoire_plugins' => 'Repertòri :', + 'required' => '[Obligatòri]', # MODIF // S 'statut_admin_restreint' => '(admin. restrench)', # MODIF @@ -549,14 +466,10 @@ una color indica lor estat:', 'texte_article_virtuel_reference' => 'Article virtuau: article referenciat dins vòstre sit SPIP, mai redirigit vèrs una autra URL. Per suprimir la redireccion, escafatz l’URL çai subre.', 'texte_aucun_resultat_auteur' => 'Ges de resultat per "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Aquest sit vos pòt indicar de contunha la tiera dei redactors connectats, çò que vos permet d’escambiar de messatges en dirècte. Podètz decidir de pas aparéisser dins aquela lista (siatz "invisible/a" per leis autreis utilizaires).', - 'texte_auteur_messagerie_1' => 'Aqueu sit permet d’escambiar de messatges e de constituir de forums de discussion privats entre lei participants dau sit. Podètz decidir de pas participar a aqueleis escambis.', 'texte_auteurs' => 'LEIS AUTORS', 'texte_choix_base_1' => 'Chausissètz vòstra basa:', 'texte_choix_base_2' => 'Lo servidor SQL conten mai d’una basa de donadas.', 'texte_choix_base_3' => 'Chausissètz çai sota la que vòstre aubergador vos a atribuida:', - 'texte_commande_vider_tables_indexation' => 'Utilizatz aquela comanda per vujar lei taulas d’indexacion utilizadas per lo cercador integrat a SPIP. Aquò permetrà - de ganhar d’espaci disc.', - 'texte_compresse_ou_non' => '(Aquest se pòt comprimir o non)', 'texte_compte_element' => '@count@ element', 'texte_compte_elements' => '@count@ elements', 'texte_connexion_mysql' => 'Consultatz leis informacions que vòstre aubergador fornís: i devètz trobar, se vòstre aubergador supòrta SQL, lei còdes de connexion au servidor SQL.', # MODIF @@ -572,10 +485,8 @@ una color indica lor estat:', 'texte_date_publication_anterieure' => 'DATA DE PUBLICACION ANTERIORA :', 'texte_date_publication_anterieure_nonaffichee' => 'Afichar ges de data de publicacion anteriora.', 'texte_date_publication_article' => 'DATA DE PUBLICACION EN LINHA :', - 'texte_descriptif_petition' => 'Descriptiu de la peticion', 'texte_descriptif_rapide' => 'Descriptiu rapid', 'texte_effacer_base' => 'Escafar la basa de donadas SPIP', - 'texte_effacer_donnees_indexation' => 'Escafar lei donadas d’indexacion', 'texte_en_cours_validation' => 'Se prepausa de publicar leis articles e brèvas çai sota. Esitetz pas de donar vòstre vejaire gràcias ai forums que i son estacats.', # MODIF 'texte_enrichir_mise_a_jour' => 'Podètz enriquir la compaginacion de vòstre tèxt en utilizant d’"acorchas tipograficas".', 'texte_fichier_authent' => 'Deu crear, SPIP, de fichiers especiaus .htpasswd @@ -594,30 +505,17 @@ una color indica lor estat:', En aqueu cas, cau cambiar lo reglatge predefinit per fin d’utilizar un jòc de caractèrs apropriat. Oblidetz pas tanpauc d’adaptar lo sit public en consequéncia (balisa #CHARSET).', - 'texte_jeu_caractere_2' => 'Aquest reglatge a ges d’efiech retroactiu. Adoncas - lei tèxts ja sasits se pòdon afichar - d’un biais incorrècte après que s’aga modificat lo reglatge. De tot biais - poiretz tornar sensa damatge au reglatge precedent.', 'texte_jeu_caractere_3' => 'Vòstre sit es per ara installat amb lo jòc de caractèrs :', - 'texte_lien_hypertexte' => '(Se vòstre messatge se referís a un article publicat sus lo web, o a una pagina fornissent mai d’informacions, vougatz indicar çai sota lo títol de la pagina e son adreiça URL.)', 'texte_login_ldap_1' => '(Laissar vuege per un accès anonim, o picar lo camin complet, per exemple «uid=fabre, ou=usanciers, dc=mon-domeni, dc=com».)', 'texte_login_precaution' => 'Atencion! Aquò’s lo login amb lo quau siatz ara connectat/ada. Utilizatz aquest formulari amb precaucion...', - 'texte_message_edit' => 'Atencion: aquest messatge, cada redactor lo pòt veire, e cada administrator dau sit lo pòt modificar. Utilizatz leis anoncis ren que per expausar d’eveniments importants de la vida dau sit.', 'texte_mise_a_niveau_base_1' => 'Venètz d’actualizar lei fichiers SPIP. Ara cau metre a nivèu la basa de donadas dau sit.', 'texte_modifier_article' => 'Modificar l’article:', - 'texte_moteur_recherche_active' => 'Lo cercador es activat. Utilizatz aquesta commanda - se volètz tornar indexar la basa rapidament (après restauracion - d’una sauvagarda per exemple). Notatz que lei documents modificats d’un - biais normau (a partir de l’interfàcia SPIP) se tornan indexar - automaticament: donc aquesta comanda es utila ren que d’un biais excepcionau.', - 'texte_moteur_recherche_non_active' => 'Lo cercador es pas activat.', 'texte_multilinguisme' => 'Se desiratz de gerir d’articles en mai d’una lenga, amb una navigacion complèxa, podètz apondre un menut per chausir la lenga deis articles e/o dei rubricas, en foncion de l’organizacion de vòstre sit.', # MODIF 'texte_multilinguisme_trad' => 'Podètz tanben activar un sistèma de gestion dei liames entre lei diferentei reviradas d’un article.', # MODIF 'texte_non_compresse' => 'non comprimit (per amòr que vòstre servidor supòrta pas aquela foncionalitat)', - 'texte_nouveau_message' => 'Messatge nòu', 'texte_nouvelle_version_spip_1' => 'Avètz installada una version novèla d’SPIP.', 'texte_nouvelle_version_spip_2' => 'Aquesta version novèla demanda una actualizacion mai completa que de costuma. Se siatz webmèstre/webmèstra dau sit, vougatz escafar lo fichier inc_connect.php3 dau repertòri ecrire e tornar prene l’installacion per fin d’actualizar vòstrei paramètres de connexion a la basa de donadas.

      (NB: s’avètz demembrat vòstrei paramètres de connexion, espepissatz lo fichier inc_connect.php3 avans de lo suprimir...)

      ', # MODIF 'texte_operation_echec' => 'Tornatz a la pagina precedenta, chausissètz una autra basa o creatz-ne’n una novèla. Verificatz leis informacions que vòstre aubergador a fornidas.', @@ -636,7 +534,6 @@ una color indica lor estat:', 'texte_rappel_selection_champs' => '[Oblidetz pas de seleccionar aqueu camp correctament.]', 'texte_recalcul_page' => 'Se volètz tornar calcular ren qu’una pagina, passatz puslèu per l’espaci public e utilizatz lo boton "tornar calcular".', - 'texte_recapitiule_liste_documents' => 'Aquesta pagina recapitula la tiera dei documents qu’avètz plaçats dins lei rubricas. Per modificar leis informacions de cada document, seguissètz lo liame vèrs la pagina de sa rubrica.', 'texte_recuperer_base' => 'Reparar la basa de donadas', 'texte_reference_mais_redirige' => 'article referenciat dins vòstre sit SPIP, mai redirigit vèrs una autra URL.', 'texte_requetes_echouent' => 'Quora d’unei requistas SQL s’encalan @@ -664,7 +561,6 @@ dins l’escondedor SPIP. Aquò permet per exemple de forçar un calcul nòu de s’avètz bravament modificat lo grafisme o l’estructura dau sit.', 'texte_sur_titre' => 'Subretítol', 'texte_table_ok' => ': aquesta taula es condrecha.', - 'texte_tables_indexation_vides' => 'Lei taulas d’indexacion dau motor son vuejas.', 'texte_tentative_recuperation' => 'Assai de reparacion', 'texte_tenter_reparation' => 'Assajar de reparar la basa de donadas', 'texte_test_proxy' => 'Per assajar aqueu proxy, indicatz aicí l’adreiça d’un sit web @@ -679,26 +575,8 @@ s’avètz bravament modificat lo grafisme o l’estructura dau sit.', Aquela opcion es desactivada de maniera predefinida per fin d’evitar d’afichar de messatges d’avertiment intempestius.', - 'texte_trop_resultats_auteurs' => 'Tròp de resultats per "@cherche_auteur@" ; vougatz afinar la cèrca.', - 'texte_unpack' => 'telecargament de la darriera version', - 'texte_utilisation_moteur_syndiques' => 'Quora utilizatz lo cercador integrat - a SPIP, podètz far lei cèrcas subre lei sits e - articles sindicats de dos biais - diferents.
      Lo mai - simple consistís a cercar ren que dins lei - títols e descriptius deis articles.
      - Lo segond biais, ben mai potent, permet - a SPIP de cercar tanben dins lo tèxt dei - sits referenciats. - Se referenciatz un sit, alora SPIP farà la - cèrca dins lo tèxt dau sit meteis.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Aqueu metòde obliga SPIP de vesitar - regularament lei sits referenciats, - aquò pòt alentir un pauc lo vòstre - sit.', 'texte_vide' => 'vuege', 'texte_vider_cache' => 'Vujar l’escondedor', - 'titre_admin_effacer' => 'Mantenença tecnica', 'titre_admin_tech' => 'Mantenença tecnica', 'titre_admin_vider' => 'Mantenença tecnica', 'titre_cadre_afficher_article' => 'Afichar leis articles', @@ -718,42 +596,23 @@ s’avètz bravament modificat lo grafisme o l’estructura dau sit.', 'titre_naviguer_dans_le_site' => 'Navigar per lo sit...', 'titre_nouvelle_rubrique' => 'Rubrica novèla', 'titre_numero_rubrique' => 'RUBRICA NUMÈRO:', - 'titre_page_admin_effacer' => 'Mantenença tecnica: escafar la basa', 'titre_page_articles_edit' => 'Modificar: @titre@', 'titre_page_articles_page' => 'Leis articles', 'titre_page_articles_tous' => 'Tot lo sit', - 'titre_page_auteurs' => 'Vesitaires', 'titre_page_calendrier' => 'Calendier @nom_mois@ de @annee@', 'titre_page_config_contenu' => 'Configuracion dau sit', - 'titre_page_config_fonctions' => 'Configuracion dau sit', - 'titre_page_configuration' => 'Configuracion dau sit', - 'titre_page_controle_petition' => 'Seguit dei peticions', 'titre_page_delete_all' => 'supression totala e irreversibla', - 'titre_page_documents_liste' => 'Lei documents dei rubricas', - 'titre_page_index' => 'Vòstre espaci privat', - 'titre_page_message_edit' => 'Redigir un messatge', - 'titre_page_messagerie' => 'Vòstra messatjariá', 'titre_page_recherche' => 'Resultats de la cèrca @recherche@', 'titre_page_statistiques_referers' => 'Estadisticas (liames intrants)', 'titre_page_upgrade' => 'Mesa a nivèu d’SPIP', 'titre_publication_articles_post_dates' => 'Publicacion deis articles pòstdatats', - 'titre_referencer_site' => 'Referenciar lo sit:', - 'titre_rendez_vous' => 'RENDÈTZ-VOS:', 'titre_reparation' => 'Reparacion', 'titre_suivi_petition' => 'Seguit dei peticions', - 'trad_article_inexistant' => 'I a ges d’article que pòrte aqueu numèro.', 'trad_article_traduction' => 'Totei lei versions d’aquel article:', - 'trad_deja_traduit' => 'Aquel article ja es una revirada de l’article present.', 'trad_delier' => 'Cessar de liar aquest article a sei reviradas ', # MODIF 'trad_lier' => 'Aquest article es una revirada de l’article numèro:', 'trad_new' => 'Escriure una revirada novèla d’aquest article', # MODIF - // U - 'utf8_convert_termine' => 'Es acabat !', - 'utf8_convertir_votre_site' => 'Convertir vòstre sit en utf-8', - // V 'version' => 'Version :' ); - -?> diff --git a/www/ecrire/lang/ecrire_oc_va.php b/www/ecrire/lang/ecrire_oc_va.php index 6860bee8..5d28e8f1 100644 --- a/www/ecrire/lang/ecrire_oc_va.php +++ b/www/ecrire/lang/ecrire_oc_va.php @@ -1,9 +1,11 @@ 'Tornatz a la pagina anteriora, e verificatz las informacions qu’avètz fornias. ', 'avis_connexion_ldap_echec_3' => 'Alternativament, utilizetz pas lo supòrt LDAP per importar d’utilizaires.', 'avis_deplacement_rubrique' => 'Atention! Aquela rubrica conten @contient_breves@ brèvas@scb@: se la desplaçatz, voudretz ben oschar aquela casa de confirmacion.', - 'avis_destinataire_obligatoire' => 'Devètz indicar un destinatari avans de mandar aquel messatge.', 'avis_erreur_connexion_mysql' => 'Error de connexion SQL', - 'avis_erreur_version_archive' => 'Atencion! Lo fichier @archive@ correspònd amb una autra version d’SPIP qu’aquela qu’avètz installaa. Anatz vèrs de dificultats grandassas: risca de destruccion de vòstra basa de donaas, disfoncionaments divèrses dau sit, etc. Validetz pas aquela demanda d’importacion.

      Per mai d’informacions, veètz - -la documentacion d’SPIP.', # MODIF - 'avis_espace_interdit' => 'Espaci proïbit

      SPIP es ja installat.', + 'avis_espace_interdit' => 'Espaci proïbit

      SPIP es ja installat.', # MODIF 'avis_lecture_noms_bases_1' => 'Lo programa d’installacion a pas pogut legir los noms de las basas de donaas installaas.', 'avis_lecture_noms_bases_2' => 'Siá ges de basa es pas disponibla, siá la foncion que permet d’entierar las basas es estaa desactivaa per de rasons de seguretat (aquò’s lo cas en cò de mai d’un auberjaor).', 'avis_lecture_noms_bases_3' => 'Dins la segonda alternativa, es probable qu’una basa que pòrta vòstre nom de login siá utilizabla:', - 'avis_non_acces_message' => 'Poètz pas accedir vèrs aquel messatge.', 'avis_non_acces_page' => 'Poètz pas accedir vèrs aquela pagina.', 'avis_operation_echec' => 'L’operacion a mal capitat.', - 'avis_probleme_archive' => 'Problèma de lectura dau fichier @archive@', 'avis_suppression_base' => 'ATENCION, suprimir las donaas es irreversible', - 'avis_version_mysql' => 'Vòstra version de SQL (@version_mysql@) permet pas l’autoreparacion de las taulas de la basa.', // B 'bouton_acces_ldap' => 'Apondre l’accès a LDAP >>', 'bouton_ajouter' => 'Apondre', - 'bouton_ajouter_participant' => 'APONDRE UN PARTICIPANT:', - 'bouton_annonce' => 'ANONCI', - 'bouton_checkbox_envoi_message' => 'possibilitat de mandar un messatge', - 'bouton_checkbox_indiquer_site' => 'indicar obligatoriament un sit web', - 'bouton_checkbox_signature_unique_email' => 'Mas qu’una signatura per adreiça e-mail', - 'bouton_checkbox_signature_unique_site' => 'Mas qu’una signatura per sit web', 'bouton_demande_publication' => 'Demandar la publicacion d’aquest article', - 'bouton_effacer_index' => 'Esfaçar los indèxes', 'bouton_effacer_tout' => 'Esfaçar tot', - 'bouton_envoi_message_02' => 'MANDAR UN MESSATGE', 'bouton_envoyer_message' => 'Messatge definitiu: mandar', 'bouton_modifier' => 'Modificar', - 'bouton_pense_bete' => 'MEMENTO (D’USATGE PERSONAL)', - 'bouton_radio_activer_messagerie' => 'Activar la messatjariá intèrna', - 'bouton_radio_activer_messagerie_interne' => 'Activar la messatjariá intèrna', - 'bouton_radio_activer_petition' => 'Activar la peticion', 'bouton_radio_afficher' => 'Afichar', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Afichar dins la tiera dels redactors connectats', - 'bouton_radio_desactiver_messagerie' => 'Desactivar la messatjariá', 'bouton_radio_envoi_annonces_adresse' => 'Mandar los anoncis a l’adreiça:', 'bouton_radio_envoi_liste_nouveautes' => 'Mandar la tiera de las novetats', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Pas aparéisser dins la tiera dels redactors', 'bouton_radio_non_envoi_annonces_editoriales' => 'Pas mandar d’anoncis editorials', - 'bouton_radio_pas_petition' => 'Ges de peticion', - 'bouton_radio_petition_activee' => 'Peticion activaa', - 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', 'bouton_redirection' => 'TORNAR DIRIGIR', 'bouton_relancer_installation' => 'Tornar lançar l’installacion', 'bouton_suivant' => 'Seguent', 'bouton_tenter_recuperation' => 'Assajar de reparar', 'bouton_test_proxy' => 'Assajar lo proxy', 'bouton_vider_cache' => 'Voidar l’escondeor', - 'bouton_voir_message' => 'Veire aqueu messatge avans de lo validar', // C - 'cache_mode_compresse' => 'Los fichiers de l’escondeor son registrats en mòde comprimit.', - 'cache_mode_non_compresse' => 'Los fichiers de l’escondeor son registrats en mòde non comprimit.', 'cache_modifiable_webmestre' => 'Lo webmèstre dau sit pòt modificar aquestes paramètres.', 'calendrier_synchro' => 'S’utilizatz un logicial d’agenda compatible iCal (Apple iCal, Mozilla Calendar, Ximian Evolution, KOrganizer...), lo poètz sincronizar amb l’actualitat dau sit.', @@ -104,7 +80,6 @@ L’administrator dau sistèma o de la ret vos deu poer fornir 'entree_login' => 'Vòstre login', 'entree_login_connexion_1' => 'Lo login de connexion', 'entree_login_connexion_2' => '(Correspònd de viatges a vòstre login d’accès vèrs l’FTP; de viatges se laissa voide)', - 'entree_login_ldap' => 'Login LDAP inicial', 'entree_mot_passe' => 'Vòstre mot de santa Clara', 'entree_mot_passe_1' => 'Mot de santa Clara per la connexion', 'entree_mot_passe_2' => '(Correspònd de viatges a vòstre mot de santa Clara per l’FTP; de viatges se laissa voide)', @@ -124,7 +99,7 @@ L’administrator dau sistèma o de la ret vos deu poer fornir 'ical_info2' => 'Per tenir mai d’informacions sobre aquelas tecnicas, esitetz pas de consultar la documentacion d’SPIP.', # MODIF 'ical_info_calendrier' => 'I a dos chalendiers a la vòstra disposicion. Lo primier es un plan dau sit qu’anóncia totes los articles publicats. Lo segond conten los anoncis editoriaus en mai de vòstres darriers messatges privats: vos es reservat gràcias a una clau personala, que la poètz modificar en tot moment en renovant vòstre mot de santa Clara. ', 'ical_methode_http' => 'Telecharjament', - 'ical_methode_webcal' => 'Sincronizacion (webcal://)', + 'ical_methode_webcal' => 'Sincronizacion (webcal://)', # MODIF 'ical_texte_js' => 'Los articles publicats en aqueu sit se pòon afichar aisat, dins totes los sits vòstres, en fasent servir una linha javascript. ', 'ical_texte_prive' => 'Aquel chalendier, d’us estrictament personal, vos informa de l’activitat editoriala privaa d’aquel sit (òbras e rendètz-vos personals, articles e brèvas prepausats...).', 'ical_texte_public' => 'Aquel chalendier vos permet de seguir l’activitat publica d’aquel sit (articles e brèvas publicats).', @@ -140,9 +115,7 @@ L’administrator dau sistèma o de la ret vos deu poer fornir 'icone_creer_auteur' => 'Crear un autor nòu e l’associar a aquel article', 'icone_creer_mot_cle' => 'Crear un mot clau nòu e lo liar a aquel article', 'icone_creer_rubrique_2' => 'Crear una rubrica nòva', - 'icone_envoyer_message' => 'Mandar aquel messatge', 'icone_modifier_article' => 'Modificar aquel article', - 'icone_modifier_message' => 'Modificar aquel messatge', 'icone_modifier_rubrique' => 'Modificar aquela rubrica', 'icone_retour' => 'Tornar', 'icone_retour_article' => 'Tornar a l’article', @@ -152,10 +125,7 @@ L’administrator dau sistèma o de la ret vos deu poer fornir 'icone_valider_signature' => 'Validar aquela signatura', 'image_administrer_rubrique' => 'Poètz administrar aquela rubrica', 'info_1_article' => '1 article', - 'info_1_site' => '1 sit', 'info_activer_cookie' => 'Poètz activar un cookie de correspondéncia; aquò vos permetrà de passar aisat dau sit public au sit privat.', - 'info_admin_gere_rubriques' => 'Aquel administrator gerís las rubricas seguentas:', - 'info_admin_gere_toutes_rubriques' => 'Aquel administrator gerís totas las rubricas.', # MODIF 'info_administrateur' => 'Administrator', 'info_administrateur_1' => 'Administrator', 'info_administrateur_2' => 'dau sit(d’utilizar amb precaucion)', @@ -165,13 +135,10 @@ L’administrator dau sistèma o de la ret vos deu poer fornir 'info_administrer_rubrique' => 'Poètz administrar aquela rubrica', 'info_adresse' => 'a l’adreiça:', 'info_adresse_url' => 'Adreiça (URL) dau sit public', - 'info_afficher_visites' => 'Afichar las vesitas per:', 'info_aide_en_ligne' => 'Ajua en linha SPIP', 'info_ajout_image' => 'Quand apondètz d’imatges coma estachaments jonches a un article, SPIP pòt crear automaticament per vos de vinhetas (miniaturas) dels imatges inserits. Aquò permet per exemple de crear automaticament una galariá o un pòrtfòlio.', - 'info_ajout_participant' => 'Lo participant seguent es apondut:', 'info_ajouter_rubrique' => 'Apondre una autra rubrica d’administrar:', 'info_annonce_nouveautes' => 'Anonci de las novetats', - 'info_anterieur' => 'anteriora', 'info_article' => 'article', 'info_article_2' => 'articles', 'info_article_a_paraitre' => 'Los articles pòstdatats per paréisser', @@ -179,10 +146,8 @@ L’administrator dau sistèma o de la ret vos deu poer fornir 'info_articles_2' => 'Articles', 'info_articles_auteur' => 'Los articles d’aquel autor', 'info_articles_trouves' => 'Articles trobats', - 'info_articles_trouves_dans_texte' => 'Articles trobats (dins lo tèxt)', 'info_attente_validation' => 'Vòstres articles en espèra de validacion', 'info_aujourdhui' => 'encuei:', - 'info_auteur_message' => 'AUTOR DAU MESSATGE:', 'info_auteurs' => 'Los autors', 'info_auteurs_par_tri' => 'autors@partri@', 'info_auteurs_trouves' => 'Autors trobats', @@ -215,15 +180,12 @@ L’administrator dau sistèma o de la ret vos deu poer fornir 'info_date_publication_anterieure' => 'Data anteriora de publicacion:', 'info_date_referencement' => 'DATA DE REFERENCIAMENT D’AQUEL SIT:', 'info_derniere_etape' => 'Darriera estapa: Aquò’s achabat!', - 'info_derniers_articles_publies' => 'Vòstres darriers articles publicats en linha', - 'info_desactiver_messagerie_personnelle' => 'Poètz activar o desactivar vòstra messatjariá personala sobre aqueu sit.', 'info_descriptif' => 'Descriptiu:', 'info_discussion_cours' => 'Discussions en cors', 'info_ecrire_article' => 'Avans de poer escriure d’articles, vos chau crear aumens una rubrica.', 'info_email_envoi' => 'Adreiça e-mail d’enviament (opcional)', 'info_email_envoi_txt' => 'Indicatz aicí l’adreiça d’utilizar per enviar los e-mails (a fauta d’aquò, s’utilizarà l’adreiça destinatari coma adreiça d’enviament):', 'info_email_webmestre' => 'Adreiça e-mail dau responsable dau sit (opcional)', # MODIF - 'info_entrer_code_alphabet' => 'Picatz lo còde de l’alfabet d’utilizar:', 'info_envoi_email_automatique' => 'Enviament d’e-mails automatics', 'info_envoyer_maintenant' => 'Mandar aüra', 'info_etape_suivante' => 'Passar a l’estapa seguenta', @@ -233,27 +195,19 @@ L’administrator dau sistèma o de la ret vos deu poer fornir 'info_facilite_suivi_activite' => 'Per facilitar lo seguit de l’activitat editoriala dau sit, SPIP vos pòt fornir per e-mail, per exemple a una lista de corrier dels redactors, l’anonci de las demandas de publicacion e de las validacions d’articles.', 'info_fichiers_authent' => 'Fichiers d’autentificacion « .htpasswd »', 'info_forums_abo_invites' => 'Vòstre sit web òfre de forums per los abonats; dins lo sit public los vesitaires son convidats a se registrar.', - 'info_gauche_admin_effacer' => 'A aquela pagina, mas que los responsables dau sit i pòon accedir.

      Permet de trobar las diferentas foncions de mantenença tecnica. Quauques unas implican un procès d’autentificacion especific, que necessita un accès FTP vèrs lo sit web.

      ', # MODIF 'info_gauche_admin_tech' => 'A aquela pagina, mas que los responsables dau sit i pòon accedir.

      Permet de trobar las diferentas foncions de mantenença tecnica. Quauques unas implican un procès d’autentificacion especific, que necessita un accès FTP vèrs lo sit web.

      ', # MODIF 'info_gauche_admin_vider' => 'A aquela pagina, mas que los responsables dau sit i pòon accedir.

      Permet de trobar las diferentas foncions de mantenença tecnica. Quauques unas implican un procès d’autentificacion especific, que necessita un accès FTP vèrs lo sit web.

      ', # MODIF 'info_gauche_auteurs' => 'Trobaretz aicí totes los autors dau sit. La color de las icònas n’indica l’estatut (administrator = verd; redactor = jaune).', 'info_gauche_auteurs_exterieurs' => 'Los autors exteriors, sens accès vèrs lo sit, son indicats amb una icòna blava; los autors esfaçats amb un bordilhier.', # MODIF 'info_gauche_messagerie' => 'La messatjariá vos permet d’eschambiar de mementos (per vòstre usatge personal) o d’afichar d’anoncis sus la pagina d’acuelh de l’espaci privat (se siatz administrator/tritz).', - 'info_gauche_numero_auteur' => 'AUTOR NUMÈRO', 'info_gauche_statistiques_referers' => 'Aquela pagina presenta la lista dels referiors, aquò vòu dire dels sits que contenon de liams que menan vèrs vòstre sit pròpri, mas unicament au jorn d’encuei: aquela lista s’actualiza chasca 24 oras.', 'info_gauche_visiteurs_enregistres' => 'Trobaretz aquí los vesitaires registrats dins l’espaci public dau sit (forums amb abonament).', 'info_generation_miniatures_images' => 'Congreacion de miniaturas dels imatges', - 'info_gerer_trad' => 'Gerir los liams de reviraa?', 'info_hebergeur_desactiver_envoi_email' => 'Quauques auberjaors desactivan l’enviament automatic d’e-mails dempuei lors serviors. En aqueu cas, las foncionalitats seguentas d’SPIP foncionaràn pas.', 'info_hier' => 'ièr:', - 'info_historique_activer' => 'Activar lo seguiment de las revisions', - 'info_historique_affiche' => 'Afichar aquela version', - 'info_historique_comparaison' => 'comparason', - 'info_historique_desactiver' => 'Desactivar lo seguiment de las revisions', - 'info_historique_texte' => 'Lo seguiment de las revisions permet de servar un istoric de totas las modificacions que s’es portat au contengut d’un article, e d’afichar las diferéncias entre las versions successivas.', 'info_identification_publique' => 'Vòstra identitat publica...', 'info_image_process' => 'Volhatz seleccionar lo melhor metòde de fabricacion de las vinhetas en clicar sus l’imatge correspondent.', 'info_image_process2' => 'N.B. Se ges d’imatge apareis, aladonc lo servior qu’aubèrja vòstre sit l’an pas configurat per utilizar d’aisinas talas. Se desiratz d’utilizar aquelas foncions, contactatz lo responsable tecnic e demandatz las extensions «GD» o «Imagick».', # MODIF @@ -271,8 +225,6 @@ L’administrator dau sistèma o de la ret vos deu poer fornir 'info_login_trop_court' => 'Login tròp cort.', 'info_maximum' => 'maximum:', 'info_meme_rubrique' => 'Dins la mesma rubrica', - 'info_message' => 'Messatge dau', - 'info_message_efface' => 'MESSATGE ESFAÇAT', 'info_message_en_redaction' => 'Vòstres messatges en cors de redaccion', 'info_message_technique' => 'Messatge tecnic:', 'info_messagerie_interne' => 'Messatjariá intèrna', @@ -285,20 +237,15 @@ L’administrator dau sistèma o de la ret vos deu poer fornir 'info_modifier_rubrique' => 'Modificar la rubrica:', 'info_modifier_titre' => 'Modificar: @titre@', 'info_mon_site_spip' => 'Mon sit SPIP', - 'info_mot_sans_groupe' => '(Mots fòra grop...)', - 'info_moteur_recherche' => 'Cerchaor integrat', 'info_moyenne' => 'mejana:', - 'info_multi_articles' => 'Activar lo menut de lenga per los articles?', 'info_multi_cet_article' => 'Lenga d’aquest article:', 'info_multi_langues_choisies' => 'Volhatz seleccionar çai sos las lengas que son a posita dels redactors de vòstre sit. Las lengas ja emplejaas dins vòstre sit (afichaas primieras) se pòon pas desactivar.', - 'info_multi_rubriques' => 'Activar lo menut de lenga per las rubricas?', 'info_multi_secteurs' => '... mas que per las rubricas a la raiç dau sit?', 'info_nom' => 'Nom', 'info_nom_destinataire' => 'Nom dau destinatari', 'info_nom_site' => 'Nom de vòstre sit', 'info_nombre_articles' => '@nb_articles@ articles,', - 'info_nombre_partcipants' => 'PARTICIPANTS A LA DISCUSSION:', 'info_nombre_rubriques' => '@nb_rubriques@ rubricas,', 'info_nombre_sites' => '@nb_sites@ sits,', 'info_non_deplacer' => 'De pas desplaçar...', @@ -308,36 +255,26 @@ L’administrator dau sistèma o de la ret vos deu poer fornir 'info_non_modifiable' => 'se pòt pas modificar', 'info_non_suppression_mot_cle' => 'vòlo pas suprimir aquel mot clau.', 'info_notes' => 'Nòtas', - 'info_nouveaux_message' => 'Messatges nòus', 'info_nouvel_article' => 'Article nòu', 'info_nouvelle_traduction' => 'Reviraa nòva:', 'info_numero_article' => 'ARTICLE NUMÈRO:', 'info_obligatoire_02' => '[Obligatòri]', # MODIF 'info_option_accepter_visiteurs' => 'Acceptar l’inscripcion dels vesitaires dau sit public', - 'info_option_faire_suivre' => 'Far sègre los messatges dels forums als autors dels articles', 'info_option_ne_pas_accepter_visiteurs' => 'Refusar l’inscripcion de vesitaires', 'info_options_avancees' => 'OPCIONS AVANÇAAS', - 'info_ortho_activer' => 'Activar lo verificaor d’ortografia', - 'info_ortho_desactiver' => 'Desactivar lo verificaor d’ortografia', 'info_ou' => 'o... ', 'info_page_interdite' => 'Pagina proïbia', 'info_par_nombre_article' => '(per nombre d’articles)', 'info_passe_trop_court' => 'Mot de santa Clara tròp cort.', 'info_passes_identiques' => 'Los dos mots de santa Clara son pas identics.', - 'info_pense_bete_ancien' => 'Vòstres mementos ancians ', # MODIF 'info_plus_cinq_car' => 'mai de 5 caractèrs', 'info_plus_cinq_car_2' => '(mai de 5 caractèrs)', 'info_plus_trois_car' => '(mai de 3 caractèrs)', 'info_popularite' => 'popularitat: @popularite@; vesitas: @visites@', - 'info_popularite_4' => 'popularitat: @popularite@; vesitas: @visites@', 'info_post_scriptum' => 'Post-scriptum', 'info_post_scriptum_2' => 'Post-scriptum:', 'info_pour' => 'per', - 'info_preview_admin' => 'Mas que los administrators pòon previsualizar lo sit', - 'info_preview_comite' => 'Totes los redactors pòon previsualizar lo sit', - 'info_preview_desactive' => 'La previsualizacion es dau tot desactivaa', - 'info_preview_texte' => 'Es possible de previsualizar lo sit coma s’avián publicat totes los articles e brèvas (que tenon aumens l’estatut "prepausat"). La chal dobrir, aquela possibilitat, als administrators solament, a totes los redactors, o a degun?', - 'info_principaux_correspondants' => 'Vòstres correspondents principals', + 'info_preview_texte' => 'Es possible de previsualizar lo sit coma s’avián publicat totes los articles e brèvas (que tenon aumens l’estatut "prepausat"). La chal dobrir, aquela possibilitat, als administrators solament, a totes los redactors, o a degun?', # MODIF 'info_procedez_par_etape' => 'procedissètz estapa per estapa', 'info_procedure_maj_version' => 'Chal lançar la procedura d’actualizacion per adaptar la basa de donaas a la version novèla d’SPIP.', @@ -352,12 +289,9 @@ L’administrator dau sistèma o de la ret vos deu poer fornir que lor baila un còde d’accès vèrs lo sit privat. Quauques auberjaors autorizan pas l’enviament d’e-mails dempuei lors serviors: en aqueu cas, l’inscripcion automatica es impossibla.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Desiratz d’utilizar lo cerchaor integrat a SPIP? (lo desactivar abriva lo foncionament dau sistèma.)', 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Raiç dau sit', 'info_recharger_page' => 'Volhatz tornar charjar aquela pagina dins un momenton.', - 'info_recherche_auteur_a_affiner' => 'Tròp de resultats per "@cherche_auteur@"; volhatz afinar la cèrcha.', - 'info_recherche_auteur_ok' => 'Mai d’un redactor trobat per "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Ges de resultat trobat per "@cherche_auteur@".', 'info_recommencer' => 'Volhatz tornar començar.', 'info_redacteur_1' => 'Redactor', @@ -374,7 +308,6 @@ Quauques auberjaors autorizan pas l’enviament d’e-mails dempuei lors servior 'info_rubriques' => 'Rubricas', 'info_rubriques_02' => 'rubricas', 'info_rubriques_trouvees' => 'Rubricas trobaas', - 'info_rubriques_trouvees_dans_texte' => 'Rubricas trobaas (dins lo tèxt)', 'info_sans_titre' => 'Sens títol', 'info_selection_chemin_acces' => 'Seleccionatz çai sos lo chamin d’accès dins l’annuari:', 'info_signatures' => 'signaturas', @@ -387,11 +320,9 @@ Quauques auberjaors autorizan pas l’enviament d’e-mails dempuei lors servior 'info_sites_lies_mot' => 'Los sits referenciats liats a aquel mot clau', 'info_sites_proxy' => 'Utilizar un proxy', 'info_sites_trouves' => 'Sits trobats', - 'info_sites_trouves_dans_texte' => 'Sits trobats (dins lo tèxt)', 'info_sous_titre' => 'Sostítol:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Estatut d’aquel autor:', # MODIF - 'info_statut_efface' => 'Esfaçat', 'info_statut_redacteur' => 'Redactor', 'info_statut_utilisateurs_1' => 'Estatut predefinit dels utilizaires importats', 'info_statut_utilisateurs_2' => 'Chausissètz l’estatut d’atribuir a las personas presentas dins l’annuari LDAP quand se connèctan per lo primier viatge. Poiretz puei modificar aquel estatut per chasque autor un cas per un.', @@ -409,7 +340,6 @@ Quauques auberjaors autorizan pas l’enviament d’e-mails dempuei lors servior 'info_tous_articles_en_redaction' => 'Totes los articles en cors de redaccion', 'info_tous_articles_presents' => 'Totes los articles publicats dins aquela rubrica', 'info_tous_les' => 'totes los:', - 'info_tous_redacteurs' => 'Anoncis per totes los redactors ', 'info_tout_site' => 'Tot lo sit ', 'info_tout_site2' => 'An pas revirat l’article dins aquela lenga.', 'info_tout_site3' => 'An revirat l’article dins aquela lenga, mas an portat puei de modificacions a l’article de referéncia. Chal actualizar la reviraa.', @@ -424,7 +354,6 @@ una color indica lor estat:', 'info_une_rubrique' => 'una rubrica, ', 'info_une_rubrique_02' => '1 rubrica', 'info_url' => 'URL:', - 'info_url_site' => 'URL DAU SIT:', 'info_urlref' => 'Liam ipertèxt:', 'info_utilisation_spip' => 'Aüra poètz començar d’utilizar lo sistèma de publicacion assistia...', 'info_visites_par_mois' => 'Afichatge per mes:', @@ -441,15 +370,12 @@ una color indica lor estat:', 'item_activer_messages_avertissement' => 'Activar los messatges d’avertiment', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Afichar dins lo chalendier', - 'item_autoriser_documents_joints' => 'Autorizar que se jonha de documents als articles', - 'item_autoriser_documents_joints_rubriques' => 'Autorizar los documents dins las rubricas', 'item_choix_administrateurs' => 'los administrators', 'item_choix_generation_miniature' => 'Congrear automaticament las miniaturas dels imatges.', 'item_choix_non_generation_miniature' => 'Pas congrear de miniaturas dels imatges.', 'item_choix_redacteurs' => 'los redactors', 'item_choix_visiteurs' => 'los vesitaires dau sit public', 'item_creer_fichiers_authent' => 'Crear de fichiers .htpasswd', - 'item_limiter_recherche' => 'Limitar la cèrcha a las informacions contenguas dins vòstre sit', 'item_login' => 'Login', 'item_mots_cles_association_articles' => 'als articles', 'item_mots_cles_association_rubriques' => 'a las rubricas', @@ -458,34 +384,24 @@ una color indica lor estat:', 'item_non_accepter_inscriptions' => 'Pas acceptar las inscripcions', 'item_non_activer_messages_avertissement' => 'Ges de messatge d’avertiment', 'item_non_afficher_calendrier' => 'De pas afichar dins lo chalendier', - 'item_non_autoriser_documents_joints' => 'Pas autorizar los documents dins los articles', - 'item_non_autoriser_documents_joints_rubriques' => 'Pas autorizar los documents dins las rubricas', 'item_non_creer_fichiers_authent' => 'Pas crear aqueles fichiers', - 'item_non_gerer_statistiques' => 'Pas gerir las estadisticas', - 'item_non_limiter_recherche' => 'Alarjar la cèrcha au contengut dels sits referenciats', 'item_non_publier_articles' => 'Pas publicar los articles avans la data de publicacion prevista.', - 'item_non_utiliser_moteur_recherche' => 'Pas utilizar lo motor', 'item_nouvel_auteur' => 'Autor nòu', 'item_nouvelle_rubrique' => 'Rubrica nòva', 'item_oui' => 'Òc', 'item_publier_articles' => 'Publicar los articles, quina que siá lor data de publicacion', 'item_reponse_article' => 'Respònsa a l’article', - 'item_utiliser_moteur_recherche' => 'Utilizar lo cerchaor', 'item_visiteur' => 'vesitaire', // J 'jour_non_connu_nc' => 'n.c.', // L - 'lien_ajout_destinataire' => 'Apondre aqueu destinatari', 'lien_ajouter_auteur' => 'Apondre aquel autor', - 'lien_ajouter_participant' => 'Apondre un participant', 'lien_email' => 'e-mail', 'lien_nom_site' => 'NOM DAU SIT:', 'lien_retirer_auteur' => 'Levar l’autor', - 'lien_retrait_particpant' => 'Levar aqueu participant', 'lien_site' => 'sit', - 'lien_supprimer_rubrique' => 'suprimir aquela rubrica', 'lien_tout_deplier' => 'Desplejar tot', 'lien_tout_replier' => 'Tornar plejar', 'lien_trier_nom' => 'Triar per nom', @@ -511,6 +427,9 @@ una color indica lor estat:', // O 'onglet_repartition_actuelle' => 'd’aquesta passa', + // R + 'required' => '[Obligatòri]', # MODIF + // S 'statut_admin_restreint' => '(admin. restrench)', # MODIF @@ -533,14 +452,10 @@ una color indica lor estat:', 'texte_article_virtuel_reference' => 'Article virtuau: article referenciat dins vòstre sit SPIP, mas redirigit vèrs una autra URL. Per suprimir la redireccion, esfaçatz l’URL çai sobre.', 'texte_aucun_resultat_auteur' => 'Ges de resultat per "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Aquest sit vos pòt indicar de contunha la tiera dels redactors connectats, çò que vos permet d’eschambiar de messatges en dirècte. Poètz decidir de pas aparéisser dins aquela lista (siatz "invisible/a" per los autres utilizaires).', - 'texte_auteur_messagerie_1' => 'Aqueu sit permet d’eschambiar de messatges e de constituir de forums de discussion privats entre los participants dau sit. Poètz decidir de pas participar a aqueles eschambis.', 'texte_auteurs' => 'LOS AUTORS', 'texte_choix_base_1' => 'Chausissètz vòstra basa:', 'texte_choix_base_2' => 'Lo servior SQL conten mai d’una basa de donaas.', 'texte_choix_base_3' => 'Chausissètz çai sos aquela que vòstre auberjaor vos a atribuïa:', - 'texte_commande_vider_tables_indexation' => 'Utilizatz aquela comanda per voidar las taulas d’indexacion utilizaas per lo cerchaor integrat a SPIP. Aquò permetrà - de ganhar d’espaci disc.', - 'texte_compresse_ou_non' => '(Aquest se pòt comprimir o non)', 'texte_compte_element' => '@count@ element', 'texte_compte_elements' => '@count@ elements', 'texte_connexion_mysql' => 'Consultatz las informacions que vòstre auberjaor fornís: i devètz trobar, se vòstre auberjaor supòrta SQL, los còdes de connexion au servior SQL.', # MODIF @@ -556,10 +471,8 @@ una color indica lor estat:', 'texte_date_publication_anterieure' => 'DATA DE PUBLICACION ANTERIORA', 'texte_date_publication_anterieure_nonaffichee' => 'Afichar ges de data de publicacion anteriora.', 'texte_date_publication_article' => 'DATA DE PUBLICACION EN LINHA :', - 'texte_descriptif_petition' => 'Descriptiu de la peticion', 'texte_descriptif_rapide' => 'Descriptiu rapid', 'texte_effacer_base' => 'Esfaçar la basa de donaas SPIP', - 'texte_effacer_donnees_indexation' => 'Esfaçar las donaas d’indexacion', 'texte_en_cours_validation' => 'Se prepausa de publicar los articles e brèvas çai sos. Esitetz pas per donar vòstre avís gràcias als forums que i son estachats.', # MODIF 'texte_enrichir_mise_a_jour' => 'Poètz enrichir la compaginacion de vòstre tèxt en utilizant d’"acorchas tipograficas".', 'texte_fichier_authent' => 'Deu crear, SPIP, de fichiers especiaus .htpasswd @@ -579,29 +492,16 @@ una color indica lor estat:', un juec de caractèrs apropriat. Com que siá vos conselham de far d’assais per fin de trobar una solucion satisfasenta. Se modificatz aqueu paramètre, eissublietz pas nimai d’adaptar lo sit public en consequéncia (balisa #CHARSET).', - 'texte_jeu_caractere_2' => 'Aquest reglatge a ges d’efiech retroactiu. Adoncas - los tèxtes ja sasits se pòon afichar - d’una maniera incorrècta après que s’aia modificat lo reglatge. Coma que siá - poiretz tornar sens damatge au reglatge precedent.', - 'texte_lien_hypertexte' => '(Se vòstre messatge se referís a un article publicat sus lo web, o a una pagina fornissent mai d’informacions, vougatz indicar çai sos lo títol de la pagina e son adreiça URL.)', 'texte_login_ldap_1' => '(Laissar voide per un accès anonim, o picar lo chamin complet, per exemple «uid=fabre, ou=usanciers, dc=mon-domeni, dc=com».)', 'texte_login_precaution' => 'Atencion! Aquò’s lo login amb lo quau siatz aüra connectat/aa. Utilizatz aquest formulari amb precaucion...', - 'texte_message_edit' => 'Atencion: aquest messatge, chasque redactor lo pòt veire, e chasque administrator dau sit lo pòt modificar. Utilizatz los anoncis mas que per expausar d’eveniments importants de la vita dau sit.', 'texte_mise_a_niveau_base_1' => 'Venètz d’actualizar los fichiers SPIP. Aüra chau metre a nivèu la basa de donaas dau sit.', 'texte_modifier_article' => 'Modificar l’article:', - 'texte_moteur_recherche_active' => 'Lo cerchaor es activat. Utilizatz aquesta commanda - se volètz tornar indexar la basa rapidament (après restauracion - d’una sauvagarda per exemple). Notatz que los documents modificats de - maniera normala (a partir de l’interfàcia SPIP) se tornan indexar - automaticament: donc aquesta comanda es utila solament de maniera excepcionala.', - 'texte_moteur_recherche_non_active' => 'Lo cerchaor es pas activat.', 'texte_multilinguisme' => 'Se desiratz de gerir d’articles en mai d’una lenga, amb una navigacion complèxa, poètz apondre un menut per chausir la lenga dels articles e/o de las rubricas, en foncion de l’organizacion de vòstre sit.', # MODIF 'texte_multilinguisme_trad' => 'Poètz activar pereu un sistèma de gestion dels liams entre las diferentas reviraas d’un article.', # MODIF 'texte_non_compresse' => 'non comprimit (perque vòstre servior supòrta pas aquela foncionalitat)', - 'texte_nouveau_message' => 'Messatge nòu', 'texte_nouvelle_version_spip_1' => 'Avètz installaa una version novèla d’SPIP.', 'texte_nouvelle_version_spip_2' => 'Aquesta version novèla demanda una actualizacion mai completa que de costuma. Se siatz webmèstre/webmèstra dau sit, volhatz esfaçar lo fichier inc_connect.php3 dau repertòri ecrire e tornar prene l’installacion a fin d’actualizar vòstres paramètres de connexion a la basa de donaas.

      (NB: s’avètz eissubliat vòstres paramètres de connexion, agachatz lo fichier inc_connect.php3 avans de lo suprimir...)

      ', # MODIF 'texte_operation_echec' => 'Tornatz a la pagina precedenta, chausissètz una autra basa o creatz-ne’n una novèla. Verificatz las informacions que vòstre auberjaor a fornias.', @@ -620,7 +520,6 @@ una color indica lor estat:', 'texte_rappel_selection_champs' => '[Eissublietz pas de seleccionar aqueu champ correctament.]', 'texte_recalcul_page' => 'Se volètz tornar calcular mas qu’una pagina, passatz puslèu per l’espaci public e utilizatz lo boton "tornar calcular".', - 'texte_recapitiule_liste_documents' => 'Aquesta pagina recapitula la tiera dels documents qu’avètz plaçats dins las rubricas. Per modificar las informacions de chasque document, seguètz lo liam vèrs la pagina de sa rubrica.', 'texte_recuperer_base' => 'Reparar la basa de donaas', 'texte_reference_mais_redirige' => 'article referenciat dins vòstre sit SPIP, mas redirigit vèrs una autra URL.', 'texte_requetes_echouent' => 'Quand quauques requistas SQL capitan mau @@ -648,7 +547,6 @@ dins l’escondeor SPIP. Aquò permet per exemple de forçar un calcul nòu de t s’avètz bravament modificat lo grafisme o l’estructura dau sit.', 'texte_sur_titre' => 'Sobretítol', 'texte_table_ok' => ': aquesta taula es condrecha.', - 'texte_tables_indexation_vides' => 'Las taulas d’indexacion dau motor son voidas.', 'texte_tentative_recuperation' => 'Assai de reparacion', 'texte_tenter_reparation' => 'Assajar de reparar la basa de donaas', 'texte_test_proxy' => 'Per assajar aqueu proxy, indicatz aicí l’adreiça d’un sit web @@ -663,26 +561,8 @@ s’avètz bravament modificat lo grafisme o l’estructura dau sit.', Aquela opcion es desactivaa de maniera predefinia a fin d’evitar d’afichar de messatges d’avertiment intempestius.', - 'texte_trop_resultats_auteurs' => 'Tròp de resultats per "@cherche_auteur@" ; vougatz afinar la cèrcha.', - 'texte_unpack' => 'telecharjament de la darriera version', - 'texte_utilisation_moteur_syndiques' => 'Quand utilizatz lo cerchaor integrat - a SPIP, poètz far las cèrchas sus los sits e - articles sindicats de doas manieras - diferentas.
      Lo mai - simple consistís a cerchar solament dins los - títols e descriptius dels articles.
      - La segonda maniera, ben mai potenta, permet - a SPIP de cerchar pereu dins lo tèxt dels - sits referenciats. - Se referenciatz un sit, alora SPIP farà la - cèrcha dins lo tèxt dau sit mesme.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Aqueu metòde obliga SPIP de vesitar - regularament los sits referenciats, - aquò pòt alentir un pauc vòstre sit - pròpri.', 'texte_vide' => 'voide', 'texte_vider_cache' => 'Voidar l’escondeor', - 'titre_admin_effacer' => 'Mantenença tecnica', 'titre_admin_tech' => 'Mantenença tecnica', 'titre_admin_vider' => 'Mantenença tecnica', 'titre_cadre_afficher_article' => 'Afichar los articles', @@ -702,35 +582,20 @@ s’avètz bravament modificat lo grafisme o l’estructura dau sit.', 'titre_naviguer_dans_le_site' => 'Navigar per lo sit...', 'titre_nouvelle_rubrique' => 'Rubrica novèla', 'titre_numero_rubrique' => 'RUBRICA NUMÈRO:', - 'titre_page_admin_effacer' => 'Mantenença tecnica: esfaçar la basa', 'titre_page_articles_edit' => 'Modificar: @titre@', 'titre_page_articles_page' => 'Los articles', 'titre_page_articles_tous' => 'Tot lo sit', - 'titre_page_auteurs' => 'Vesitaires', 'titre_page_calendrier' => 'Chalendier @nom_mois@ de @annee@', 'titre_page_config_contenu' => 'Configuracion dau sit', - 'titre_page_config_fonctions' => 'Configuracion dau sit', - 'titre_page_configuration' => 'Configuracion dau sit', - 'titre_page_controle_petition' => 'Seguit de las peticions', 'titre_page_delete_all' => 'supression totala e irreversibla', - 'titre_page_documents_liste' => 'Los documents de las rubricas', - 'titre_page_index' => 'Vòstre espaci privat', - 'titre_page_message_edit' => 'Redigir un messatge', - 'titre_page_messagerie' => 'Vòstra messatjariá', 'titre_page_recherche' => 'Resultats de la cèrcha @recherche@', 'titre_page_statistiques_referers' => 'Estadisticas (liams intrants)', 'titre_page_upgrade' => 'Mesa a nivèu d’SPIP', 'titre_publication_articles_post_dates' => 'Publicacion dels articles pòstdatats', - 'titre_referencer_site' => 'Referenciar lo sit:', - 'titre_rendez_vous' => 'RENDÈTZ-VOS:', 'titre_reparation' => 'Reparacion', 'titre_suivi_petition' => 'Seguit de las peticions', - 'trad_article_inexistant' => 'I a ges d’article que pòrte aqueu numèro.', 'trad_article_traduction' => 'Totas las versions d’aquel article:', - 'trad_deja_traduit' => 'Aquel article ja es una reviraa de l’article present.', 'trad_delier' => 'Pas pus liar aquest article a sas reviraas ', # MODIF 'trad_lier' => 'Aquest article es una reviraa de l’article numèro:', 'trad_new' => 'Escriure una reviraa novèla d’aquest article' # MODIF ); - -?> diff --git a/www/ecrire/lang/ecrire_pl.php b/www/ecrire/lang/ecrire_pl.php index 40adedf0..a6ad3621 100644 --- a/www/ecrire/lang/ecrire_pl.php +++ b/www/ecrire/lang/ecrire_pl.php @@ -1,9 +1,11 @@ 'Powróć do poprzedniej strony i zweryfikuj podane informacje.', 'avis_connexion_ldap_echec_3' => 'Nie używaj wsparcia LDAP do importu użytkowników.', 'avis_deplacement_rubrique' => 'Uwaga! Ten dział zawiera @contient_breves@ news@scb@: jeśli chcesz go przenieść, proszę zaznacz to okienko.', - 'avis_destinataire_obligatoire' => 'Aby wysłać tę wiadomość, musisz wybrać odbiorcę.', 'avis_erreur_connexion_mysql' => 'Błąd połączenia z SQL', # MODIF - 'avis_erreur_version_archive' => 'Ostrzeżenie! Plik @archive@ odpowiada innej wersji SPIP od tej na Twoim systemie. Wiąże się to z poważnymi trudnościami: ryzykiem zniszczenia Twojej bazy danych, zakłóceniami funkcjonowania Twojej strony, etc. Nie spełniaj żądania importu.

      Więcej informacji na w dokumentacji SPIP.

      ', # MODIF - 'avis_espace_interdit' => 'Dostęp zabroniony
      SPIP jest już zainstalowany.
      ', + 'avis_espace_interdit' => 'Dostęp zabroniony
      SPIP jest już zainstalowany.
      ', 'avis_lecture_noms_bases_1' => 'Program instalacyjny nie może odczytać nazw instalowanych baz danych.', 'avis_lecture_noms_bases_2' => 'Żadna baza danych nie jest dostępna, lub funkcja listingu baz danych nie działa ze względów bezpieczeństwa(co jest częstym przypadkiem wielu hostów).', 'avis_lecture_noms_bases_3' => 'W drugim przypadku, do użytku może nadawać się baza danych nazwana Twoim loginem :', - 'avis_non_acces_message' => 'Nie masz dostępu do tej wiadomości.', 'avis_non_acces_page' => 'Nie masz dostępu do tej strony.', 'avis_operation_echec' => 'Operacja nie powiodła się.', 'avis_operation_impossible' => 'Operacja niemożliwa', - 'avis_probleme_archive' => 'Istnieje błąd w pliku @archive@', 'avis_suppression_base' => 'OSTRZEŻENIE, usunięcie danych jest nieodwracalne', - 'avis_version_mysql' => 'Twoja wersja SQL (@version_mysql@) nie umożliwia auto-naprawy tablic baz danych.', # MODIF // B 'bouton_acces_ldap' => 'Dodaj dostęp do LDAP', 'bouton_ajouter' => 'Dodaj', - 'bouton_ajouter_participant' => 'DODAJ UCZESTNIKA:', - 'bouton_annonce' => 'ZAWIADOMIENIE', 'bouton_annuler' => 'Anuluj', - 'bouton_checkbox_envoi_message' => 'możliwość wysłania wiadomości', - 'bouton_checkbox_indiquer_site' => 'Musisz wpisać nazwę strony internetowej', - 'bouton_checkbox_signature_unique_email' => 'tylko jeden podpis na adres e-mail', - 'bouton_checkbox_signature_unique_site' => 'tylko jeden podpis na stronę internetową', 'bouton_demande_publication' => 'Prośba o publikację artykułu', 'bouton_desactive_tout' => 'Wyłącz wszystko', 'bouton_desinstaller' => 'Odinstaluj', - 'bouton_effacer_index' => 'Usuń indeksowanie', 'bouton_effacer_tout' => 'Usuń WSZYSTKO', - 'bouton_envoi_message_02' => 'WYŚLIJ WIADOMOŚĆ', 'bouton_envoyer_message' => 'Wiadomość końcowa: wysłano', 'bouton_fermer' => 'Zamknij', 'bouton_mettre_a_jour_base' => 'Aktualizuj bazę danych', 'bouton_modifier' => 'Modyfikuj', - 'bouton_pense_bete' => 'NOTATKA OSOBISTA', - 'bouton_radio_activer_messagerie' => 'Aktywuj pocztę wewnętrzną', - 'bouton_radio_activer_messagerie_interne' => 'Aktywuj pocztę wewnętrzną', - 'bouton_radio_activer_petition' => 'Aktywacja ogłoszeń', 'bouton_radio_afficher' => 'Pokaż', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Pojawić się na liście zalogowanych redaktorów', - 'bouton_radio_desactiver_messagerie' => 'Dezaktywuj pocztę', 'bouton_radio_envoi_annonces_adresse' => 'Wysyłaj ogłoszenia na adres :', 'bouton_radio_envoi_liste_nouveautes' => 'Wysyłaj najnowszą listę newsów', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Nie pokazuj w liście redaktorów', 'bouton_radio_non_envoi_annonces_editoriales' => 'Nie wysyłaj żadnych zawiadomień redakcyjnych', - 'bouton_radio_pas_petition' => 'Wyłącz ogłoszenia', - 'bouton_radio_petition_activee' => 'Ogłoszenia włączone', - 'bouton_radio_supprimer_petition' => 'Usuń ogłoszenia', 'bouton_redirection' => 'PRZEKIERUJ', 'bouton_relancer_installation' => 'Uruchom ponownie instalację', 'bouton_suivant' => 'Następny', 'bouton_tenter_recuperation' => 'Próba naprawy', 'bouton_test_proxy' => 'Test proxy', 'bouton_vider_cache' => 'Opróżnij cache', - 'bouton_voir_message' => 'Podgląd wiadomości przed zatwierdzeniem', // C - 'cache_mode_compresse' => 'Pliki cache zostały zapisane w postaci skompresowanej.', - 'cache_mode_non_compresse' => 'Pliki cache zostały zapisane w trybie nieskompresowanym', 'cache_modifiable_webmestre' => 'Te parametry może zmieniać webmaster serwisu.', 'calendrier_synchro' => 'Jeśli używasz programów - terminarzy kompatybinych z iCal, możesz go zsynchronizować z informacjami tego serwisu.', 'config_activer_champs' => 'Włącz następujące pola', @@ -106,9 +84,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_titre_base_sup' => 'Deklaracja dodatkowej bazy danych', 'config_titre_base_sup_choix' => 'Wybierz dodatkową bazę danych', 'connexion_ldap' => 'Połączenie:', - 'copier_en_local' => 'Skopiuj lokalnie', 'creer_et_associer_un_auteur' => 'Utwórz i przyłącz autora', - 'creer_et_associer_une_rubrique' => 'Utworz i połącz sekcję', // D 'date_mot_heures' => 'godz.', @@ -138,7 +114,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Twój login', 'entree_login_connexion_1' => 'Login połączenia', 'entree_login_connexion_2' => '(Czasem jest taki, jak Twój login FTP, a czasem jest pozostawiony pusty)', - 'entree_login_ldap' => 'Zaloguj do LDAP', 'entree_mot_passe' => 'Twoje hasło', 'entree_mot_passe_1' => 'Hasło połączenia', 'entree_mot_passe_2' => '(Czasem jest takie, jak Twoje hasło dostępu FTP, a czasem jest pozostawione puste)', @@ -167,7 +142,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'erreur_plugin_version_manquant' => 'Brakuje wersji rozszerzenia', // H - 'htaccess_a_simuler' => 'Avertissement: la configuration de votre serveur HTTP ne tient pas compte des fichiers @htaccess@. Pour pouvoir assurer une bonne sécurité, il faut que vous modifiez cette configuration sur ce point, ou bien que les constantes @constantes@ (définissables dans le fichier mes_options.php) aient comme valeur des répertoires en dehors de @document_root@.', # MODIF 'htaccess_inoperant' => 'htaccess nieczyny', // I @@ -175,7 +149,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'Aby przeczytać więcej na ten temat, idź na stronęla documentation de SPIP.', # MODIF 'ical_info_calendrier' => 'Do Twojej dyspozycji są dwa kalendarze. Jeden pokazuje mapę strony wraz ze wszystkimi opublikowanymi artykułami. Drugi zawiera ogłoszenia redakcyjne oraz Twoje ostatni wiadomości prywatne : tylko Ty masz do niego dostęp za hasłem.', 'ical_methode_http' => 'Ściągnij', - 'ical_methode_webcal' => 'Synchronizacja (webcal://)', + 'ical_methode_webcal' => 'Synchronizacja (webcal://)', # MODIF 'ical_texte_js' => 'Jedna linia javascript pozwala w bardzo prosty sposób, w każdym należącym do Ciebie serwisie pokazać ostatnio opublikowane w tym serwisie artykuły.', 'ical_texte_prive' => 'Ten kalendarz, wyłącznie do użytku osobistego, informuje Cię o działalności redakcyjnej w strefie prywatnej (zadania, spotkania, proponowane artykuły i newsy).', 'ical_texte_public' => 'Ten kalendarz pozawala śledzić aktywność redakcyjną serwisu (opublikowane artykuły i newsy).', @@ -195,16 +169,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_configuration' => 'Konfiguracja', 'icone_creer_auteur' => 'Stwórz nowego autora i przypisz go do tego artykułu', 'icone_creer_mot_cle' => 'Stwórz nowe słowo kluczowe i skojarz je z tym artykułem', - 'icone_creer_mot_cle_rubrique' => 'Utwórz nowe słowo kluczowe i połącz je z tym działem', - 'icone_creer_mot_cle_site' => 'Utwórz nowe słowo kluczowe i połącz je z tym linkiem ', 'icone_creer_rubrique_2' => 'Utwórz nowy dział', 'icone_edition' => 'Edytuj', - 'icone_envoyer_message' => 'Wyślij tę wiadomość', 'icone_ma_langue' => 'Mój język', 'icone_mes_infos' => 'Moje dane', 'icone_mes_preferences' => 'Preferencje', 'icone_modifier_article' => 'Zmień ten artykuł', - 'icone_modifier_message' => 'Zmień tę wiadomość', 'icone_modifier_rubrique' => 'Zmień ten dział', 'icone_publication' => 'Publikować', 'icone_relancer_signataire' => 'Skontaktuj się ponownie z sygnotariuszem', @@ -217,20 +187,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_supprimer_signature' => 'Usuń ten podpis', 'icone_valider_signature' => 'Zatwierdź ten podpis', 'image_administrer_rubrique' => 'Możesz zarządzać tym działem', - 'impossible_modifier_login_auteur' => 'Login nie może zostać zmieniony.', - 'impossible_modifier_pass_auteur' => 'Hasło nie może zostać zmienione.', 'info_1_article' => '1 artykuł', - 'info_1_article_syndique' => '1 artykuł konsorcjalny', 'info_1_auteur' => '! autor', 'info_1_message' => '1 wiadomość', 'info_1_rubrique' => '1 sekcja', - 'info_1_site' => '1 strona', 'info_1_visiteur' => '1 gość', 'info_activer_cookie' => 'Możesz uaktywnić cookies korespondecji, co ci pozwoli przechodzić łatwo pomiędzy stroną publiczną a prywatną.', 'info_admin_etre_webmestre' => 'Daj mi prawa administratora sieci', - 'info_admin_gere_rubriques' => 'Ten administrator zarządza następującymi działami:', - 'info_admin_gere_toutes_rubriques' => 'Ten administrator zarządza wszystkimi działami.', # MODIF 'info_admin_statuer_webmestre' => 'Daj webmasterowi prawo do tego administratora.', 'info_admin_webmestre' => 'Ten administrator jest webmestre', 'info_administrateur' => 'Administrator', @@ -243,16 +207,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_adresse' => 'na adres:', 'info_adresse_url' => 'URL Twojej publicznej strony', 'info_afficher_par_nb' => 'pokaż', - 'info_afficher_visites' => 'Pokaż odwiedziny dla :', 'info_aide_en_ligne' => 'SPIP Pomoc Online', 'info_ajout_image' => 'Kiedy dodajesz do artykułu obrazki jako załączniki, SPIP może automatycznie utworzyć winiety (thumbnails) ze wstawionych obrazków. Pozwoli to na, na przykład, automatyczne utworzenie galerii lub portfolio.', - 'info_ajout_participant' => 'Następujący uczestnik został dodany:', 'info_ajouter_rubrique' => 'Dodaj dział do zarządzania :', 'info_annonce_nouveautes' => 'Zapowiedzi najnowszych newsów', - 'info_anterieur' => 'poprzedni', 'info_article' => 'artykuł', 'info_article_2' => 'artykuły', 'info_article_a_paraitre' => 'Artykuły przeterminowane do opublikowania', @@ -262,17 +223,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_miens' => 'Moje artykuły', 'info_articles_tous' => 'Wszystkie artykuły', 'info_articles_trouves' => 'Artykuły znalezione', - 'info_articles_trouves_dans_texte' => 'Artykuły znalezione (w tekście)', 'info_attente_validation' => 'Twoje artykuły oczekujące zatwierdzenia', 'info_aucun_article' => 'Brak artykułów', - 'info_aucun_article_syndique' => 'Brak artykułów syndykatowych', 'info_aucun_auteur' => 'Brak autorów', 'info_aucun_message' => 'Brak wiadomości', 'info_aucun_rubrique' => 'Brak działu', - 'info_aucun_site' => 'Brak powiązanych stron', - 'info_aucun_visiteur' => 'Brak gości', 'info_aujourdhui' => 'dziś:', - 'info_auteur_message' => 'NADAWCA WIADOMOŚCI:', 'info_auteurs' => 'Autorzy', 'info_auteurs_par_tri' => 'Autorzy@partri@', 'info_auteurs_trouves' => 'Autorzy znalezieni', @@ -291,8 +247,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_2' => 'e na @liste@', 'info_code_acces' => 'Zapamiętaj swoje kody dostępu!', 'info_compatibilite_html' => 'Norma HTML do zastosowania', - 'info_compresseur_gzip' => 'N. B. : Il est recommandé de vérifier au préalable si l’hébergeur compresse déjà systématiquement les scripts php ; pour cela, vous pouvez par exemple utiliser le service suivant : @testgzip@', # MODIF - 'info_compresseur_texte' => 'Jeśli serwer nie kompresuje strony HTML przed wysłaniem, można próbować wymusić kompresję w celu zmniejszenia rozmiaru przesyłanych stron. Uwaga: to może mieć widoczny niekorzystny wpływ na działanie niektórych serwerów.', 'info_config_suivi' => 'Jeśli ten adres odpowiada liście subskrypcyjnej, możecie wpisać poniżej adres, za któego pomocą uczestnicy serwisu mogą się zapisać. Adres ten może być URL-em (np. stroną służącą do zapisywania się na listę przez internet), albo adresem e-mail opatrzonym stosownym tematem (np.: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Możesz automatycznie, za pomocą poczty elektronicznej otrzymywać ogłoszenia dotyczące aktywności redakcyjnej tego serwisu. W tym celu powinnieneś się zapisać na listę mailową.', 'info_confirmer_passe' => 'Potwierdź nowe hasło:', @@ -316,8 +270,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Data poprzedniej publikacji:', 'info_date_referencement' => 'DATA ZLINKOWANIA TEJ STRONY:', 'info_derniere_etape' => 'Zakończone z sukcesem!', - 'info_derniers_articles_publies' => 'Twoje ostatnie opublikowane artykuły', - 'info_desactiver_messagerie_personnelle' => 'Możesz włączyć lub wyłączyć wewnętrzną pocztę w tym serwisie.', 'info_descriptif' => 'Opis:', 'info_desinstaller_plugin' => 'usuń dane i wyłącz plugina', 'info_discussion_cours' => 'Dyskusja w toku', @@ -325,7 +277,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_email_envoi' => 'Adres e-mail nadawcy (nieobowiązkowo)', 'info_email_envoi_txt' => 'Wpisz adres e-maila, który będzie używany do wywyłania wiadomości (domyślnie adres odbiorcy będzie jednocześnie adresem wysyłkowym) :', 'info_email_webmestre' => 'Adres e-mail webmastera (nieobowiązkowo)', # MODIF - 'info_entrer_code_alphabet' => 'Wpisz kodowanie alfabetu :', 'info_envoi_email_automatique' => 'Automatyczna wysyłka maili', 'info_envoyer_maintenant' => 'Wyślij teraz', 'info_etape_suivante' => 'Przejdź do następnego kroku', @@ -339,7 +290,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( o sprawdzenie i publikację artykułów.', 'info_fichiers_authent' => 'Plik uwierzytelniający « .htpasswd »', 'info_forums_abo_invites' => 'Twoja strona zawiera formu dostępne po zalogowaniu, zatem odwiedzający powinni się zarejestrować na stronie publicznej.', - 'info_gauche_admin_effacer' => 'Ta strona jest dostępna jedynie dla administratorów.

      Daje ona dostęp do funkcji technicznych serwisu. Niektóre spośród nich wymagają wymagają połączenia z serwerem przez FTP.', # MODIF 'info_gauche_admin_tech' => 'Ta strona jest dostępna jedynie dla jej właścicieli.

      Daje dostęp do fukcji typowo technicznych. Niektóre spośród nich wymagają specjalnego uwierzytelnienia , które można uzyskać jedynie poprzez FTP.', # MODIF 'info_gauche_admin_vider' => 'Ta strona jest dostępna jedynie dla głównych administratorów.

      Daje dostęp do funkcji typowo technicznych. Niektóre spośród nich wymagają specjalnego uwierzytelnienia @@ -349,21 +299,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_gauche_auteurs_exterieurs' => 'Autorzy zewnętrzni, bez dostępu do strefy publicznej są zaznaczeni ikoną niebieską ; autorzy skasowani.', # MODIF 'info_gauche_messagerie' => 'Poczta wewnętrzna pozwala Ci wymieniać wiadomości z innymi redaktorami, i zapisywać notki (prywatne) lub publikować ogłoszenia na stronie głównej strefy prywatnej (jeśli jesteś administratorem).', - 'info_gauche_numero_auteur' => 'AUTOR NUMER', 'info_gauche_statistiques_referers' => 'Ta strona wyświetla listę odnośników, to znaczy stron które zawierają łącza prowadzące do Twojej strony, które ktoś użył wczoraj lub dzisiaj : lista jest zerowana co 24 godziny.', 'info_gauche_visiteurs_enregistres' => 'Znajdziesz tu gości zarejestrowanych w strefie publicznej strony (abonament forum).', 'info_generation_miniatures_images' => 'Generowanie miniaturek obrazków', - 'info_gerer_trad' => 'Zarządzać linkami do przekładu?', 'info_hebergeur_desactiver_envoi_email' => 'Niektóre serwisy hostingowe wyłączają możliwość automatycznego wywyłania emaili za pośrednictwem ich serwerów. W tym przypadku te funkcje SPIP nie będą działały.', 'info_hier' => 'wczoraj:', - 'info_historique_activer' => 'Włączyć zarządzanie poprawkami', - 'info_historique_affiche' => 'Wyświetl tę wersję', - 'info_historique_comparaison' => 'porównanie', - 'info_historique_desactiver' => 'Wyłączyć zarządzanie poprawkami', - 'info_historique_texte' => 'Zarządzanie poprawkami artykułu pozwala zachować historię wszystkich zmian dokonanych w treści artykułu i wyświetlić różnice pomiędzy kolejnymi wersjami.', 'info_identification_publique' => 'Twoja nazwa publiczna', 'info_image_process' => 'Wybierz najlepsza metode przygotowania miniaturek kilkając na odpowiednim obrazku.', 'info_image_process2' => 'N.B. Jeśli nie wyświetlił się żaden obrazek, Twój serwer nie został skonfugurowany tak, aby skorzystać z tego narzędzia. Jeśli jednak chcesz skorzystać z tych funkcji, skontaktuj się z osobą odpowiedzialną za sprawy techniczne Twojego serwisu i poproś o włączenie rozszerzeń "GD" lub "Imagick".', # MODIF @@ -384,8 +327,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_logos' => 'Logo', 'info_maximum' => 'maksimum:', 'info_meme_rubrique' => 'W tym samym dziale', - 'info_message' => 'Wiadomość od', - 'info_message_efface' => 'WIADOMOŚĆ USUNIĘTA', 'info_message_en_redaction' => 'Twoje wiadomości w trakcie tworzenia', 'info_message_technique' => 'Wiadomość techniczna:', 'info_messagerie_interne' => 'Poczta wewnętrzna', @@ -400,14 +341,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'Zmiana działu:', 'info_modifier_titre' => 'Zmiana: @titre@', 'info_mon_site_spip' => 'Moja strona SPIP', - 'info_mot_sans_groupe' => '(Słowa kluczowe bez grupy...)', - 'info_moteur_recherche' => 'Zintegrowana wyszukiwarka', 'info_moyenne' => 'średnia:', - 'info_multi_articles' => 'Aktywuj menu językowe w artykułach ?', 'info_multi_cet_article' => 'Język tego artykułu:', 'info_multi_langues_choisies' => 'Wybierz języki do dyspozycji redaktorów twojej strony. Języki już używane na twojej stronie(wyświetlane na początku) nie mogą być wyłączone.', - 'info_multi_rubriques' => 'Włącz menu językowe w działach ?', 'info_multi_secteurs' => ' ... tylko dla działów podstawowych ?', 'info_nb_articles' => '@nb@ artykuły', 'info_nb_auteurs' => '@nb@ autorzy', @@ -416,7 +353,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_nom_destinataire' => 'Nazwisko odbiorcy', 'info_nom_site' => 'Nazwa Twojej strony', 'info_nombre_articles' => '@nb_articles@ artykułów,', - 'info_nombre_partcipants' => 'UCZESTNICY DYSKUSJI:', 'info_nombre_rubriques' => '@nb_rubriques@ działu,', 'info_nombre_sites' => '@nb_sites@ stron,', 'info_non_deplacer' => 'Nie zmieniać miejsca ...', @@ -426,17 +362,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_modifiable' => 'nie może być zmienione', 'info_non_suppression_mot_cle' => 'Nie chcę usunąć tego słowa kluczowego.', 'info_notes' => 'Notatki', - 'info_nouveaux_message' => 'Nowe wiadomości', 'info_nouvel_article' => 'Nowy artykuł', 'info_nouvelle_traduction' => 'Nowy przekład :', 'info_numero_article' => 'ARTYKUŁ NUMER :', 'info_obligatoire_02' => '[Obowiązkowo]', # MODIF 'info_option_accepter_visiteurs' => 'Zaakceptuj zapisy czytelników Twojej strony', - 'info_option_faire_suivre' => 'Przesłać wiadomości tego forum do autorów artykułów', 'info_option_ne_pas_accepter_visiteurs' => 'Wyłącz zapisy czytelników serwisu', 'info_options_avancees' => 'OPCJE ZAAWANSOWANE', - 'info_ortho_activer' => 'Włącz korektor ortografii', - 'info_ortho_desactiver' => 'Wyłącz korektor ortografii', 'info_ou' => 'lub...', 'info_page_interdite' => 'Strona zabroniona', 'info_par_nom' => 'wg nazw', @@ -445,20 +377,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_par_tri' => '’(par @tri@)’', 'info_passe_trop_court' => 'Za krótkie hasło.', 'info_passes_identiques' => 'Hasła nie są identyczne.', - 'info_pense_bete_ancien' => 'Twoje stare notatki', # MODIF 'info_plus_cinq_car' => 'więcej niż 5 znaków', 'info_plus_cinq_car_2' => '(Więcej niż 5 znaków)', 'info_plus_trois_car' => '(Więcej niż 3 znaki)', 'info_popularite' => 'popularność: @popularite@; odwiedziny: @visites@', - 'info_popularite_4' => 'popularność: @popularite@; odwiedziny: @visites@', 'info_post_scriptum' => 'Postscriptum', 'info_post_scriptum_2' => 'Postscriptum:', 'info_pour' => 'dla', - 'info_preview_admin' => 'Jedynie administratorzy mogą włączyć podgląd artykułu', - 'info_preview_comite' => 'Wszyscy redaktorzy mogą włączyć podgląd artykułu', - 'info_preview_desactive' => 'Podgląd artykułów jest całkiem wyłączony', - 'info_preview_texte' => 'Istnieje możliwość włączania podglądu nieopublikowanych artykułów i newsów (muszą być "zaproponowane do oceny"). Czy chcesz, żeby ta funkcja była dostępna dla administratorów, redaktorów czy dla nikogo ? ', - 'info_principaux_correspondants' => 'Wasi główni korespondenci', + 'info_preview_texte' => 'Istnieje możliwość włączania podglądu nieopublikowanych artykułów i newsów (muszą być "zaproponowane do oceny"). Czy chcesz, żeby ta funkcja była dostępna dla administratorów, redaktorów czy dla nikogo ? ', # MODIF 'info_procedez_par_etape' => 'etap za etapem', 'info_procedure_maj_version' => 'powinna zostać procedura uaktualniania w celu dostosowania bazy danych do nowej wersji SPIP.', @@ -476,14 +402,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( wyłączają możliwość wysyłania maili z ich serwerów : w tym przypadku automatyczne zapisanie się jest niemożliwe.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Czy życzysz sobie skorzystać z wyszukiwarki wewnętrznej SPIP ? - (jej wyłączenie przyspiesza funkcjonowanie systemu.)', - 'info_question_vignettes_referer_non' => 'Nie pokazuj zrzutów ekranu z odwiedzanych stron', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Rdzeń strony', 'info_recharger_page' => 'Proszę za chwilę ponownie załadować tę stronę.', - 'info_recherche_auteur_a_affiner' => 'Zbyt dużo rezultatów w "@cherche_auteur@" ; spróbuj sprecyzować poszukiwania.', - 'info_recherche_auteur_ok' => 'Kilkunastu redaktorów zostało znalezionych dla "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Żadnych wyników dla " @cherche_auteur@ ".', 'info_recommencer' => 'Proszę spróbować ponownie.', 'info_redacteur_1' => 'Redaktor', @@ -500,7 +420,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'Działy', 'info_rubriques_02' => 'działy', 'info_rubriques_trouvees' => 'Odnalezione działy', - 'info_rubriques_trouvees_dans_texte' => 'Odnalezione działy (w tekście)', 'info_sans_titre' => 'Bez tytułu', 'info_selection_chemin_acces' => 'Wybierz poniżej ścieżkę dostępu w katalogu:', 'info_signatures' => 'podpisy', @@ -513,14 +432,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_sites_lies_mot' => 'Zlinkowane strony związane z tymi słowami kluczowymi', 'info_sites_proxy' => 'Użyj proxy', 'info_sites_trouves' => 'Znalezione strony', - 'info_sites_trouves_dans_texte' => 'Strony znalezione (w tekście)', 'info_sous_titre' => 'Podtytuł:', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Status tego autora:', # MODIF 'info_statut_auteur_2' => 'Jestem', 'info_statut_auteur_a_confirmer' => 'Potwierdzenie subskrypcji', 'info_statut_auteur_autre' => 'Inny status :', - 'info_statut_efface' => 'Usunięto', 'info_statut_redacteur' => 'Redaktor', 'info_statut_utilisateurs_1' => 'Domyślny status zaiportowanych użytkowników', 'info_statut_utilisateurs_2' => 'Wybierz status, który zostanie przyznany osobom występującym w katalogu LDAP, kiedy połączą się po raz pierwszy. Możesz zmieniać tę wartość w zależności od autora. ', @@ -542,7 +459,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_presents' => 'Wszystkie artykuły opublikowane w tym dziale', 'info_tous_articles_refuses' => 'Wszystkie odrzucone teksty', 'info_tous_les' => 'każdy:', - 'info_tous_redacteurs' => 'Ogłoszenia dla wszystkich redaktorów', 'info_tout_site' => 'Cała strona', 'info_tout_site2' => 'Artykuł nie został jeszcze przetłumaczony na ten język.', 'info_tout_site3' => 'Artykuł został przetłumaczony na ten język, ale po dokonaniu przekładu zostały wprowadzone zmiany do artykułu źródłowego. Przekład powinien zostać uaktualniony.', @@ -558,7 +474,6 @@ Przekłady są połączone z oryginałem, za pomocą koloru wskazującego na ich 'info_une_rubrique_02' => '1 dział', 'info_url' => 'URL:', 'info_url_proxy' => 'Upoważnienie URL', - 'info_url_site' => 'URL STRONY:', 'info_urlref' => 'Łącze hipertekstowe :', 'info_utilisation_spip' => 'SPIP jest już gotowy do użytku...', 'info_visites_par_mois' => 'Wizyt miesięcznie:', @@ -588,8 +503,6 @@ Przekłady są połączone z oryginałem, za pomocą koloru wskazującego na ich 'item_activer_messages_avertissement' => 'Aktywuj komunikaty ostrzegawcze', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Wyświetl kalendarz', - 'item_autoriser_documents_joints' => 'Autoryzuj załączniki do artykułów', - 'item_autoriser_documents_joints_rubriques' => 'Autoryzacja dokumentów w działach', 'item_autoriser_syndication_integrale' => 'Wysyłanie pełnej treści artykułów w pliku syndykacji', 'item_choix_administrateurs' => 'administratorzy', 'item_choix_generation_miniature' => 'Generuj automatycznie miniaturki obrazków.', @@ -597,7 +510,6 @@ Przekłady są połączone z oryginałem, za pomocą koloru wskazującego na ich 'item_choix_redacteurs' => 'redaktorzy', 'item_choix_visiteurs' => 'odwiedzający stronę publiczną', 'item_creer_fichiers_authent' => 'Utwórz pliki .htpasswd', - 'item_limiter_recherche' => 'Ogranicz szukanie do informacji zawartych na Twojej stronie', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Aktywuj system wiadomości i kalendarzy', 'item_mots_cles_association_articles' => 'artykuły', @@ -607,22 +519,15 @@ Przekłady są połączone z oryginałem, za pomocą koloru wskazującego na ich 'item_non_accepter_inscriptions' => 'Nie akceptuj zapisów', 'item_non_activer_messages_avertissement' => 'Wyłącz komunikaty ostrzeżeń', 'item_non_afficher_calendrier' => 'Nie wyświetlaj kalendarza', - 'item_non_autoriser_documents_joints' => 'Nie autoryzuj dokumentów w artykułach', - 'item_non_autoriser_documents_joints_rubriques' => 'Nie autoryzuj dokumentów w działach', 'item_non_autoriser_syndication_integrale' => 'Wysyłanie podsumowania', - 'item_non_compresseur' => 'Wyłącz kompresję', 'item_non_creer_fichiers_authent' => 'Nie twórz tych plików', - 'item_non_gerer_statistiques' => 'Nie zarządzaj statystykami', - 'item_non_limiter_recherche' => 'Szukaj także w treści stron, które są zlinkowane w systemie', 'item_non_messagerie_agenda' => 'Wyłącz system komunikacji i kalendarze oprogramowania', 'item_non_publier_articles' => 'Nie publikuj artykułów przed datą ich publikacji.', - 'item_non_utiliser_moteur_recherche' => 'Nie używaj wyszukiwarki', 'item_nouvel_auteur' => 'Nowy autor', 'item_nouvelle_rubrique' => 'Nowy dział', 'item_oui' => 'Tak', 'item_publier_articles' => 'Publikuj artykuły bez względu na datę ich publikacji.', 'item_reponse_article' => 'Odpowiedz na artykuł', - 'item_utiliser_moteur_recherche' => 'Używaj wyszukiwarki', 'item_visiteur' => 'odwiedzający', // J @@ -635,12 +540,10 @@ Przekłady są połączone z oryginałem, za pomocą koloru wskazującego na ich 'label_choix_langue' => 'Wybierz swój język', 'label_nom_fichier_connect' => 'Podaj nazwę dla tego serwera', 'label_slogan_site' => 'Slogan witryny internetowej', - 'label_taille_ecran' => 'Szerokość ekranu', + 'label_taille_ecran' => 'Szerokość ekranu', # MODIF 'label_texte_et_icones_navigation' => 'Menu nawigacyjne', 'label_texte_et_icones_page' => 'Wyświetlanie stron', - 'lien_ajout_destinataire' => 'Dodaj odbiorcę', 'lien_ajouter_auteur' => 'Dodaj autora', - 'lien_ajouter_participant' => 'Dodaj uczestnika', 'lien_ajouter_une_rubrique' => 'Dodaj tą sekcję', 'lien_email' => 'e-mail', 'lien_nom_site' => 'NAZWA STRONY:', @@ -648,9 +551,7 @@ Przekłady są połączone z oryginałem, za pomocą koloru wskazującego na ich 'lien_retirer_rubrique' => 'Usuń sekcję', 'lien_retirer_tous_auteurs' => 'Usuń wszystkich autorów', 'lien_retirer_toutes_rubriques' => 'Usuń wszystkie sekcje', - 'lien_retrait_particpant' => 'usuń uczestnika', 'lien_site' => 'strona', - 'lien_supprimer_rubrique' => 'usuń ten dział', 'lien_tout_deplier' => 'Zwiń wszystko', 'lien_tout_replier' => 'Rozwiń wszystko', 'lien_tout_supprimer' => 'Usuń wszystko', @@ -678,7 +579,6 @@ Przekłady są połączone z oryginałem, za pomocą koloru wskazującego na ich 'onglet_contenu' => 'Treść', 'onglet_declarer_une_autre_base' => 'Oświadcz inną bazę danych', 'onglet_discuter' => 'Dyskutuj', - 'onglet_documents' => 'Dokumenty', 'onglet_interactivite' => 'Interaktywacja', 'onglet_proprietes' => 'Właściwości', 'onglet_repartition_actuelle' => 'teraz', @@ -711,7 +611,7 @@ Przekłady są połączone z oryginałem, za pomocą koloru wskazującego na ich 'plugin_info_plugins_dist_2' => 'Nie mogą zostać wyłączone.', 'plugin_librairies_installees' => 'Biblioteka programistyczna została zainstalowana', 'plugin_necessite_lib' => 'Ta wtyczka wymaga biblioteki programistycznej @lib@', - 'plugin_necessite_plugin' => 'Potrzeba pluginu @plugin@ co najmniej w wersji @version@.', + 'plugin_necessite_plugin' => 'Potrzeba pluginu @plugin@ co najmniej w wersji @version@.', # MODIF 'plugin_necessite_spip' => 'Potrzeba co minimum wersji SPIP @version@ .', 'plugin_source' => 'źródło:', 'plugin_titre_automatique' => 'Instalacja automatyczna ', @@ -735,7 +635,7 @@ Przekłady są połączone z oryginałem, za pomocą koloru wskazującego na ich // Q 'queue_executer_maintenant' => 'Uruchom teraz', - 'queue_info_purger' => 'Możesz usunąć wszystkie zadania w toku i zresetować listę zadań okresowych', + 'queue_info_purger' => 'Możesz usunąć wszystkie zadania w toku i zresetować listę zadań okresowych', # MODIF 'queue_nb_jobs_in_queue' => '@nb@ zadania w kolejce', 'queue_next_job_in_nb_sec' => 'Następne zadanie w @nb@ S', 'queue_no_job_in_queue' => 'Brak zadań w toku', @@ -745,6 +645,7 @@ Przekłady są połączone z oryginałem, za pomocą koloru wskazującego na ich // R 'repertoire_plugins' => 'Katalog :', + 'required' => '[Obowiązkowo]', # MODIF // S 'sans_heure' => 'Czas nie określony', @@ -771,16 +672,11 @@ zreinstalować SPIP w celu utworzenia nowej bazy danych i dostępu pierwszego ad 'texte_article_virtuel_reference' => 'Artykuł wirtualny : artykuł zlinkowany w Twoim serwisie SPIP ale przekierowujący do innego URL-a. Aby usunąć to przekierowanie, wymaż URL powyżej.', 'texte_aucun_resultat_auteur' => 'Żadnych wyników dla "@cherche_auteur@".', 'texte_auteur_messagerie' => 'Na tej stronie może wyświetlać się bez przerwy lista zalogowanych redaktorów, co pozwoli Ci bezpośrednio wymieniać z nimi wiadomości. Możesz także zdecydować o nie pojawianiu się na tej liście (jesteś wówczas "niewidzialny" dla innych użytkowników)', - 'texte_auteur_messagerie_1' => 'Na tej stronie możesz wymieniać wiadomości i tworzyć prywatne fora dyskusyjne pomiędzy użytkownikami strony. Możesz nie brać udziału w tych wymianach.', 'texte_auteurs' => 'AUTORZY', 'texte_choix_base_1' => 'Wybierz bazę danych:', 'texte_choix_base_2' => 'Serwer SQL zawiera kilka baz danych.', # MODIF 'texte_choix_base_3' => 'Wybierz, jaka została Ci przyznana przez Twój serwis hostingowy:', 'texte_choix_table_prefix' => 'Prefix tablic:', - 'texte_commande_vider_tables_indexation' => 'Skorzystaj z tego polecenia w celu opróżnienia tabeli indeksujących, które używane są - przez zintegrowaną wyszukiwarkę SPIP. - Pozwoli to oszczędzić przestrzeń dysku twardego.', - 'texte_compresse_ou_non' => '(może być skompresowany lub nie)', 'texte_compte_element' => '@count@ element', 'texte_compte_elements' => '@count@ elementy', 'texte_conflit_edition_correction' => 'Proszę porównać różnice między obiema wersjami. Możesz również skopiować zmiany i zacząć od nowa.', @@ -798,10 +694,8 @@ zreinstalować SPIP w celu utworzenia nowej bazy danych i dostępu pierwszego ad 'texte_date_publication_anterieure_nonaffichee' => 'Ukryj datę poprzedniej publikacji.', 'texte_date_publication_article' => 'DATA PUBLIKACJI ONLINE:', 'texte_date_publication_objet' => 'Opublikowane na:', - 'texte_descriptif_petition' => 'Opis ogłoszenia', 'texte_descriptif_rapide' => 'Krótki opis', 'texte_effacer_base' => 'Usuń bazę danych SPIP', - 'texte_effacer_donnees_indexation' => 'Wymaż dane pochodzące z indeksowania', 'texte_effacer_statistiques' => 'Usuń statystyki', 'texte_en_cours_validation' => 'Następujące artykuły i newsy zostały zatwierdzone do publikacji. Nie wahaj się wyrazić swoją opinię na dołączonych do nich forach.', # MODIF 'texte_enrichir_mise_a_jour' => 'Możesz wzbogacić układ Twojego tekstu « skrótami typograficznymi ».', @@ -816,29 +710,19 @@ zreinstalować SPIP w celu utworzenia nowej bazy danych i dostępu pierwszego ad 'texte_informations_personnelles_2' => '(Informacja: jeśli jest to reinstalacja, a Twój dostęp wciąż działa, możesz', # MODIF 'texte_introductif_article' => '(Tekst wprowadzający do artykułu.)', 'texte_jeu_caractere' => 'Zaleca się używania uniwersalnego kodowania (utf-8), co pozwala na wyświetlanie tekstów we wszystkich językach i jest kompatybilne ze wszystkimi współczesnymi przeglądarkami.', - 'texte_jeu_caractere_2' => 'Uwaga: te ustawienia nie powodują konwersji tekstów już zapisanych w bazie danych.', 'texte_jeu_caractere_3' => 'Twoja strona pracuje obecnie w kodowaniu :', 'texte_jeu_caractere_4' => 'Jeśli to nie odpowiada aktualnemu kodowaniu Twoich danych (np. po odtworzeniu bazy danych), lub jeśli uruchamiasz stronę i chcesz ustamić inne kodowanie, wpisz je tutaj:', - 'texte_jeu_caractere_conversion' => 'Wskazówka : możesz chcieć przekonwertować swoje dane z całego serwisu (artykuły, aktualności, fora, itd) na kodowanie utf-8, udając się na stronę konwertera utf-8.', - 'texte_lien_hypertexte' => '(Jeśli Twoja wiadomość odnosi się do jakiegoś artykułu opublikowanego w internecie, albo do strony, na której można znaleźć dodatkowe informacje, wpisz tytuł strony i jej adres URL.)', 'texte_login_ldap_1' => '(Pozostaw puste przy dostępie anonimowym, lub wpisz pełną ścieżkę, np. « uid=dupont, ou=users, dc=mon-domaine, dc=com ».)', 'texte_login_precaution' => 'Uwaga ! To jest login, z którego pomocą jesteś teraz połączony. Używaj tego formularza ostrożnie...', - 'texte_message_edit' => 'Ostrzeżenie: ta wiadomość może być zmieniana przez wszystkich administratorów strony i jest widoczna dla wszystkich redaktorów. Używaj zawiadomień jedynie, aby podkreślić ważne wydarzenia w życiu strony.', 'texte_messagerie_agenda' => 'System komunikacji umożliwia autorów na tej stronie do bezpośredniego komunikowania się na terenie prywatnym. Jest to związane z kalendarzem.', 'texte_mise_a_niveau_base_1' => 'Właśnie zaktualizowałeś pliki SPIP. Teraz należy uaktualnić bazę danych Twojego serwisu.', 'texte_modifier_article' => 'Edytuj artykuł', - 'texte_moteur_recherche_active' => 'Wyszukiwarka jest włączona Użyj tego polecenia - jeśli życzysz sobie szybkiej reindeksacji (np. po odtworzeniu - kopii bezpieczeństwa). Pamiętaj, że dokumenty zmodyfikowane - w normalny sposób (za pomocą interfejsu SPIP) są automatycznie reindeksowane : dlatego to polecenie jest rzadko stosowane.', - 'texte_moteur_recherche_non_active' => 'Wyszukiwarka nie jest włączona.', 'texte_multilinguisme' => 'Jeśli planujesz edytować artykuły w wielu językach, ze złożoną nawigacją, możesz dołożyć do artykułu lub działu, menu wyboru języka, jako element organizacyjny Twojej strony.', # MODIF 'texte_multilinguisme_trad' => 'Możesz także włączyć system zarządzania linkami pomiędzy przekładami artykułów.', # MODIF 'texte_non_compresse' => 'nie skompresowany (twój serwer nie posiada tej funkcji)', - 'texte_nouveau_message' => 'Nowa wiadomość', 'texte_nouvelle_version_spip_1' => 'Nowa wersja SPIP została zainstalowana.', 'texte_nouvelle_version_spip_2' => 'Nowa wersja wymaga bardziej kompletnego dostosowania niż zwykle. Jeśli jesteś administratorem strony wykasuj plik @connect@ z katalogu ecrire i powtórz instalację w celu uaktualnienia Twoich parametrów połączenia z bazą danych .

      (NB. : jeśli zapomniałeś parametry połączenia, rzuć okiem do pliku @connect@ zanim go skasujesz...)', # MODIF 'texte_operation_echec' => 'Powróć do poprzedniej strony, wybierz inną bazę danych lub stwórz nową. Sprawdź informacje podane przez twój serwis hostingowy.', @@ -858,7 +742,6 @@ zreinstalować SPIP w celu utworzenia nowej bazy danych i dostępu pierwszego ad 'texte_rappel_selection_champs' => '[Nie zapomnij wybrać poprawnych pól.]', 'texte_recalcul_page' => 'Jeśli chcesz odświeżyć tylko jedną stronę, zrób to z obszaru publicznego, używając przycisku « odśwież ».', - 'texte_recapitiule_liste_documents' => 'Ta strona wyświetla w postaci listy dokumenty które umieściłeś w działach. Aby zmienić informacje o danym dokumencie, kliknij na łącze prowadzące do strony danego działu.', 'texte_recuperer_base' => 'Napraw bazę danych', 'texte_reference_mais_redirige' => 'linki z artykułów w twoim serwisie SPIP, przekierowujące do innych URL-i.', 'texte_requetes_echouent' => 'Jeśli pewne zapytania SQL nie udają się @@ -883,7 +766,6 @@ odświeżyć tylko jedną stronę, zrób to z obszaru publicznego, używając pr w cache SPIP. Pozwoli to na odświeżenie wszystkich stron, jeśli dokonaliści poważniejszych modyfikacji w układzie graficznym lub strukturze strony.', 'texte_sur_titre' => 'Nadtytuł', 'texte_table_ok' => ': ta tabela działa poprawnie.', - 'texte_tables_indexation_vides' => 'Tabele indeksowania wyszukiwarki są puste.', 'texte_tentative_recuperation' => 'Próba naprawy', 'texte_tenter_reparation' => 'Spróbuj naprawić bazę danych', 'texte_test_proxy' => 'Aby wypróbować proxy, wpisz tutaj adres strony internetowej @@ -897,28 +779,12 @@ odświeżyć tylko jedną stronę, zrób to z obszaru publicznego, używając pr aby uniknąć jednoczesnego edytowania. Domyślnie ta opcja jest wyłączona w celu wyeliminowania niepotrzebnych komunikatów.', - 'texte_trop_resultats_auteurs' => 'Zbyt dużo rezultatów dla "@cherche_auteur@" ; spróbuj sprecyzować kryteria wyszukiwania.', - 'texte_unpack' => 'ściąganie najnowszej wersji', - 'texte_utilisation_moteur_syndiques' => 'Jeśli korzystasz z wyszukiwarki zintegrowanej ze SPIP, możesz dokonywać przeszukiwania - dołączonych artykułów na dwa sposoby. -
      - Najprostszy - polega na wyszukiwaniu jedynie - w tytułach i skrótach artykułów.
      - - Druga, o wiele potężniejsza metoda, pozwala - SPIP w tekstach stron, których linki są dołączone . Jeśli - zatem dołączacie link do jakiejś strony, SPIP dokona automatycznie -wyszukiwania w dołączonej stronie.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Ta metoda sprawia, że SPIP musi - regularnie odwiedzać strony, których linki są dołączone, - co może spowodować lekkie spowolnienie Twojej strony.', 'texte_vide' => 'pusty', 'texte_vider_cache' => 'Opróżnij cache', - 'titre_admin_effacer' => 'Konserwacja techniczna', 'titre_admin_tech' => 'Konserwacja techniczna', 'titre_admin_vider' => 'Konserwacja techniczna', 'titre_ajouter_un_auteur' => 'Dodaj autora', 'titre_ajouter_un_mot' => 'Dodaj słowo kluczowe', - 'titre_ajouter_une_rubrique' => 'Dodaj sekcję', 'titre_cadre_afficher_article' => 'Pokaż artykuły:', 'titre_cadre_afficher_traductions' => 'Wyświetl stan przekładów dla następujących języków:', 'titre_cadre_ajouter_auteur' => 'DODAJ ARTYKUŁY:', @@ -945,54 +811,27 @@ wyszukiwania w dołączonej stronie.', # MODIF 'titre_naviguer_dans_le_site' => 'Przeglądaj stronę...', 'titre_nouvelle_rubrique' => 'Nowy dział', 'titre_numero_rubrique' => 'DZIAŁ NUMER :', - 'titre_page_admin_effacer' => 'Konserwacja techniczna : wyczyść bazę', 'titre_page_articles_edit' => 'Edytuj: @titre@', 'titre_page_articles_page' => 'Artykuły', 'titre_page_articles_tous' => 'Cała strona', - 'titre_page_auteurs' => 'Odwiedzający', 'titre_page_calendrier' => 'Kalendarz @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Konfiguracja strony', - 'titre_page_config_fonctions' => 'Konfiguracja strony', - 'titre_page_configuration' => 'Konfiguracja strony', - 'titre_page_controle_petition' => 'Archiwum ogłoszeń', 'titre_page_delete_all' => 'całkowite i nieodwracalne usunięcie', - 'titre_page_documents_liste' => 'Załączniki', - 'titre_page_index' => 'Twój obszar prywatny', - 'titre_page_message_edit' => 'Napisz wiadomość', - 'titre_page_messagerie' => 'Twoje wiadomości', 'titre_page_recherche' => 'Wyniki wyszukiwania @recherche@', 'titre_page_statistiques_referers' => 'Statystyki (linki wchodzące)', - 'titre_page_statistiques_signatures_jour' => 'Pospisy przeliczane dziennie', - 'titre_page_statistiques_signatures_mois' => 'Pospisy przeliczane miesięcznie', 'titre_page_upgrade' => 'Dostosowanie SPIP', 'titre_publication_articles_post_dates' => 'Publikacja post-datowanych artykułów', - 'titre_referencer_site' => 'Dodaj link do strony :', - 'titre_rendez_vous' => 'SPOTKANIA:', 'titre_reparation' => 'Napraw', 'titre_suivi_petition' => 'Archiwum ogłoszeń', 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'Nie ma artykułu o tym numerze.', 'trad_article_traduction' => 'Wszystkie wersje tego artykułu:', - 'trad_deja_traduit' => 'Błąd: nie można połączyć tego artykułu z wybranym numerem.', 'trad_delier' => 'Nie łączyć artykułu z tym przekładem', # MODIF 'trad_lier' => 'Ten artykuł jest przekładem artykułu numer', 'trad_new' => 'Napisz nowe tłumaczenie artykułu', # MODIF // U - 'upload_info_mode_document' => 'Umieść to zdjęcie w portfelu', - 'upload_info_mode_image' => 'Usuń ten plik z portfela', - 'utf8_convert_attendez' => 'Poczekaj chwilę i odśwież stronę.', - 'utf8_convert_avertissement' => 'Zamierzasz przekonwertować zawartość Twojej bazy danych (artykuły, aktualności, etc.) z kodowania @orig@ na kodowanie @charset@.', - 'utf8_convert_backup' => 'Nie zapomnij wykonać wcześniej kopii bezpieczeństwa Twojej strony. Powinieneś także zweryfikować czy Twoje szkielety i pliki językowe są zgodne z @charset@. W innym wypadku przegląd zmian - jeśli jest aktywny - zostanie zniszczony.', - 'utf8_convert_erreur_deja' => 'Twoja strona już jest w kodowaniu @charset@, nie ma potrzeby konwertowania...', 'utf8_convert_erreur_orig' => 'Błąd : kodowanie @charset@ nie jest wspierane.', - 'utf8_convert_termine' => 'Zakończone !', - 'utf8_convert_timeout' => 'Ważne : w przypadu timeout serwera, odśwież stronę aż wyświetlenia się "Zakończone".', - 'utf8_convert_verifier' => 'Teraz powineneś opróżnić CACHE i sprawdzić, czy wszystko przebiegło dobrze. W przypadku jakichkolwiek problemów pamiętaj, że zawsze masz w odwodzie kopię bazy dancyh (w formacie SQL) w katalogu @rep@.', - 'utf8_convertir_votre_site' => 'Konwertuj stronę na utf-8.', // V 'version' => 'Wersja :' ); - -?> diff --git a/www/ecrire/lang/ecrire_pt.php b/www/ecrire/lang/ecrire_pt.php index ebd6b846..1dd41499 100644 --- a/www/ecrire/lang/ecrire_pt.php +++ b/www/ecrire/lang/ecrire_pt.php @@ -1,9 +1,11 @@ 'Volte à página anterior e verifique as informações que forneceu ', 'avis_connexion_ldap_echec_3' => 'Alternativamente, não utilize o suporte LDAP para importar utilizadores.', 'avis_deplacement_rubrique' => 'Atenção ! Esta rubrica contém @contient_breves@ informação@scb@ : se a deslocar, por favor confirme-o nesta caixa.', - 'avis_destinataire_obligatoire' => 'Deve indicar um destinatário antes de enviar esta mensagem.', 'avis_erreur_connexion_mysql' => 'Erro de ligação SQL', - 'avis_erreur_version_archive' => 'Atenção! O ficheiro @archive@ corresponde a - uma versão de SPIP diferente da que - tem instalada. Enfrentará grandes - dificuldades: risco de destruição da sua - base de dados, mau funcionamento - generalizado do sítio etc. - Não valide este pedido de importação. -

      Para mais informações, leia - a documentação do SPIP.

      ', - 'avis_espace_interdit' => 'Espaço interdito

      SPIP já está instalado.', + 'avis_espace_interdit' => 'Espaço interdito

      SPIP já está instalado.', # MODIF 'avis_lecture_noms_bases_1' => 'O programa de instalação não conseguiu ler os nomes das bases de dados instaladas. ', 'avis_lecture_noms_bases_2' => 'Ou nenhuma base de dados está disponível, ou a função que permite listá-las foi desactivada por razões de segurança (o que é o caso em muitos serviços de hospedagem). ', 'avis_lecture_noms_bases_3' => 'Na segunda alternativa, é provável que uma base tendo o seu nome de login seja utilizável :', - 'avis_non_acces_message' => 'Não tem acesso a esta mensagem. ', 'avis_non_acces_page' => 'Não tem acesso a esta página. ', 'avis_operation_echec' => 'A operação falhou. ', 'avis_operation_impossible' => 'Operação impossivel', - 'avis_probleme_archive' => 'Erro na leitura do ficheiro @archive@', 'avis_suppression_base' => 'Atenção, a supressão dos dados é irreversível', - 'avis_version_mysql' => 'A sua versão de SQL (@version_mysql@) não permite a auto-reparação das tabelas da base de dados.', // B 'bouton_acces_ldap' => 'Acrescentar o acesso a LDAP >>', 'bouton_ajouter' => 'Acrescentar ', - 'bouton_ajouter_participant' => 'ACRESCENTAR UM PARTICIPANTE :', - 'bouton_annonce' => 'ANÚNCIO', 'bouton_annuler' => 'Cancelar', 'bouton_cache_activer' => 'Reactivar a cache', 'bouton_cache_desactiver' => 'Desactivar temporariamente a cache', - 'bouton_checkbox_envoi_message' => 'possibilidade de enviar uma mensagem', - 'bouton_checkbox_indiquer_site' => 'indicar obrigatoriamente um sítio Web', - 'bouton_checkbox_signature_unique_email' => 'uma única assinatura por endereço email', - 'bouton_checkbox_signature_unique_site' => 'uma única assinatura por sítio Web', 'bouton_demande_publication' => 'Pedir a publicação deste artigo ', 'bouton_desactive_tout' => 'Desactivar tudo', 'bouton_desinstaller' => 'Desinstalar', - 'bouton_effacer_index' => 'Apagar os índices', 'bouton_effacer_tout' => 'Apagar TUDO', - 'bouton_envoi_message_02' => 'ENVIAR UMA MENSAGEM', 'bouton_envoyer_message' => 'Mensagem definitiva: enviar', 'bouton_fermer' => 'Fechar', 'bouton_mettre_a_jour_base' => 'Actualizar a base de dados', 'bouton_modifier' => 'Modificar', - 'bouton_pense_bete' => 'MEMORANDO DE USO PESSOAL', - 'bouton_radio_activer_messagerie' => 'Activar a caixa do correio interno', - 'bouton_radio_activer_messagerie_interne' => 'Activar a caixa de correio interno', - 'bouton_radio_activer_petition' => 'Activar a petição', 'bouton_radio_afficher' => 'Exibir', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Aparecer na lista dos redactores ligados', - 'bouton_radio_desactiver_messagerie' => 'Desactivar a caixa de correio', 'bouton_radio_envoi_annonces_adresse' => 'Enviar os anúncios para o endereço:', 'bouton_radio_envoi_liste_nouveautes' => 'Enviar a lista das novidades', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Não aparecer na lista dos redactores online', 'bouton_radio_non_envoi_annonces_editoriales' => 'Não enviar anúncios editoriais', - 'bouton_radio_pas_petition' => 'Sem petição', - 'bouton_radio_petition_activee' => 'Petição activada', - 'bouton_radio_supprimer_petition' => 'Suprimir a petição', 'bouton_redirection' => 'REDIRECCIONAR', 'bouton_relancer_installation' => 'Recomeçar a instalação', 'bouton_suivant' => 'Seguinte', 'bouton_tenter_recuperation' => 'Tentar uma reparação', 'bouton_test_proxy' => 'Testar o proxy', 'bouton_vider_cache' => 'Esvaziar a cache', - 'bouton_voir_message' => 'Ver esta mensagem antes de validar', // C - 'cache_mode_compresse' => 'Os ficheiros da cache são gravados em modo comprimido.', - 'cache_mode_non_compresse' => 'Os ficheiros da cache são gravados em modo não comprimido.', 'cache_modifiable_webmestre' => 'Este parâmetro é modificável pelo webmaster do site.', 'calendrier_synchro' => 'Se utilizar um software de agenda compatível iCal, pode sincronizá-lo com as informações deste sítio.', 'config_activer_champs' => 'Activar os campos seguintes', @@ -116,9 +86,7 @@ por razões de segurança (o que é o caso em muitos serviços de hospedagem). 'config_titre_base_sup' => 'Declaração de uma base de dados suplementar', 'config_titre_base_sup_choix' => 'Escolher uma base de dados suplementar', 'connexion_ldap' => 'Conexão:', - 'copier_en_local' => 'Copiar para o sítio local', 'creer_et_associer_un_auteur' => 'Criar e associar um autor', - 'creer_et_associer_une_rubrique' => 'Criar e associar uma rubrica', // D 'date_mot_heures' => 'horas', @@ -149,7 +117,6 @@ Essas informações devem poder ser fornecidas pelo administrador do sistema ou 'entree_login' => 'O seu login', 'entree_login_connexion_1' => 'O login de ligação', 'entree_login_connexion_2' => '(Corresponde às vezes ao seu login de acesso ao FTP; outras vezes deixado vazio.)', - 'entree_login_ldap' => 'Login LDAP inicial', 'entree_mot_passe' => 'A sua palavra-passe', 'entree_mot_passe_1' => 'A palavra-passe de ligação', 'entree_mot_passe_2' => '(Corresponde, às vezes, à sua palavra-passe para o FTP; outras vezes fica vazio)', @@ -186,7 +153,7 @@ Essas informações devem poder ser fornecidas pelo administrador do sistema ou 'ical_info2' => 'Para mais informações sobre estas técnicas, consultar a documentação de SPIP.', 'ical_info_calendrier' => 'Estão disponíveis dois calendários. O primeiro é uma planta do sítio anunciando todos os artigos publicados. O segundo é pessoal e contém os anúncios editoriais assim como as últimas mensagens privadas : está reservado para si graças a uma chave pessoal, que pode modificar a qualquer momento com a renovação da sua palavra-passe.', 'ical_methode_http' => 'Download', - 'ical_methode_webcal' => 'Sincronização (webcal://)', + 'ical_methode_webcal' => 'Sincronização (webcal://)', # MODIF 'ical_texte_js' => 'Uma linha de javascript permite-lhe facilmente exibir, em qualquer sítio que lhe pertença, os artigos recentes publicados neste sítio.', 'ical_texte_prive' => 'Este calendário, de uso estritamente pessoal, informa sobre a actividade editorial privada deste sítio (tarefas e encontros pessoais, artigos e notícias propostos...).', 'ical_texte_public' => 'Este calendário permite acompanhar a actividade pública deste sítio (artigos e notícias publicados).', @@ -206,16 +173,12 @@ Essas informações devem poder ser fornecidas pelo administrador do sistema ou 'icone_configuration' => 'Configuração', 'icone_creer_auteur' => 'Criar um novo autor e associá-lo a este artigo', 'icone_creer_mot_cle' => 'Criar uma nova palavra-chave e vinculá-la a este artigo', - 'icone_creer_mot_cle_rubrique' => 'Criar uma nova palavra-chave e ligá-la a esta rubrica', - 'icone_creer_mot_cle_site' => 'Criar uma nova palavra-chave e ligá-la a este sítio', 'icone_creer_rubrique_2' => 'Criar uma nova rubrica', 'icone_edition' => 'Editar', - 'icone_envoyer_message' => 'Enviar esta mensagem', 'icone_ma_langue' => 'Idioma', 'icone_mes_infos' => 'Minhas informações', 'icone_mes_preferences' => 'Preferências', 'icone_modifier_article' => 'Modificar este artigo', - 'icone_modifier_message' => 'Modificar esta mensagem', 'icone_modifier_rubrique' => 'Modificar esta rubrica', 'icone_publication' => 'Publicação', 'icone_relancer_signataire' => 'Contactar o signatário novamente', @@ -228,22 +191,15 @@ Essas informações devem poder ser fornecidas pelo administrador do sistema ou 'icone_supprimer_signature' => 'Suprimir esta assinatura', 'icone_valider_signature' => 'Validar esta assinatura', 'image_administrer_rubrique' => 'Pode administrar esta rubrica', - 'impossible_modifier_login_auteur' => 'Impossível alterar o login.', - 'impossible_modifier_pass_auteur' => 'Impossível alterar a palavra-passe.', 'info_1_article' => '1 artigo', - 'info_1_article_syndique' => '1 artigo redifundido', 'info_1_auteur' => '1 autor', 'info_1_message' => '1 mensagem', 'info_1_mot_cle' => '1 palavra-chave', 'info_1_rubrique' => '1 rubrica', - 'info_1_site' => '1 sítio', 'info_1_visiteur' => '1 visitante', 'info_activer_cookie' => 'Pode activar um cookie de correspondência, o que lhe permitirá passar facilmente do sítio público ao sítio privado ', 'info_admin_etre_webmestre' => 'Conceder-me os direitos de webmaster', - 'info_admin_gere_rubriques' => 'Este administrador gere as seguintes rubricas:', - 'info_admin_gere_toutes_rubriques' => 'Este administrador gere todas as rubricas.', - 'info_admin_gere_toutes_rubriques_2' => 'Eu administro todas as rubricas', 'info_admin_je_suis_webmestre' => 'Eu sou webmaster', 'info_admin_statuer_webmestre' => 'Conceder ao administrador os direitos de webmaster', 'info_admin_webmestre' => 'Este administrador é webmaster', @@ -257,16 +213,13 @@ Essas informações devem poder ser fornecidas pelo administrador do sistema ou 'info_adresse' => 'ao endereço :', 'info_adresse_url' => 'Endereço (URL) do sítio público', 'info_afficher_par_nb' => 'Exibir', - 'info_afficher_visites' => 'Exibir as visitas para :', 'info_aide_en_ligne' => 'Ajuda online SPIP', 'info_ajout_image' => 'Quando acrescentar imagens como documentos ligados a um artigo, SPIP pode criar para si, automaticamente, vinhetas (miniaturas) das imagens inseridas. Isso permite por exemplo criar automaticamente uma galeria ou um portfolio.', - 'info_ajout_participant' => 'O seguinte participante foi acrescentado :', 'info_ajouter_rubrique' => 'Acrescentar uma rubrica a administrar :', 'info_annonce_nouveautes' => 'Anúncio das novidades', - 'info_anterieur' => 'anterior', 'info_article' => 'artigo', 'info_article_2' => 'artigos', 'info_article_a_paraitre' => 'Os artigos pós-datados a publicar', @@ -276,17 +229,13 @@ Essas informações devem poder ser fornecidas pelo administrador do sistema ou 'info_articles_miens' => 'Os meus artigos', 'info_articles_tous' => 'Todos os artigos', 'info_articles_trouves' => 'Artigos encontrados', - 'info_articles_trouves_dans_texte' => 'Artigos encontrados (no texto)', 'info_attente_validation' => 'Os seus artigos à espera de validação', 'info_aucun_article' => 'Nenhum artigo', - 'info_aucun_article_syndique' => 'Sem artigos redifundidos', 'info_aucun_auteur' => 'Nenhum autor', 'info_aucun_message' => 'Sem mensagens', 'info_aucun_rubrique' => 'Sem rubricas', - 'info_aucun_site' => 'Nenhum sítio ', - 'info_aucun_visiteur' => 'Sem visitantes', 'info_aujourdhui' => 'hoje :', - 'info_auteur_message' => 'AUTOR DA MENSAGEM', + 'info_auteur_gere_toutes_rubriques_2' => 'Eu administro todas as rubricas', # MODIF 'info_auteurs' => 'Os autores', 'info_auteurs_par_tri' => 'Autores@partri@', 'info_auteurs_trouves' => 'Autores encontrados', @@ -306,8 +255,6 @@ Essas informações devem poder ser fornecidas pelo administrador do sistema ou 'info_classement_2' => 'e no @liste@', 'info_code_acces' => 'Não se esqueça dos seus próprios códigos de acesso !', 'info_compatibilite_html' => 'Norma HTML a aplicar', - 'info_compresseur_gzip' => 'N. B. : Recomenda-se que verifique primeiro se o seu fornecedor comprime sistematicamente linguagem PHP. Para isso, pode usar um serviço como @testgzip@', - 'info_compresseur_texte' => 'Se o seu servidor não comprime as páginas HTML antes de as enviar, você pode tentar forçar a compressão, para reduzir o tamanho das páginas carregadas. Atenção : isso pode tornar certos servidores consideravelmente mais lentos.', 'info_config_suivi' => 'Se este endereço corresponder a uma mailing-list, pode indicar, a seguir, o endereço no qual os participantes no sítio podem inscrever-se. Este endereço pode ser uma URL (por exemplo a página de inscrição na lista pela Web), ou um endereço email com um assunto específico (por exemplo: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => ' Pode assinar a mailing-list deste sítio. Receberá então, por correio electrónico, os anúncios de artigos e de notícias propostos para publicação.', 'info_confirmer_passe' => 'Confirmar esta nova palavra-passe', @@ -331,8 +278,6 @@ Essas informações devem poder ser fornecidas pelo administrador do sistema ou 'info_date_publication_anterieure' => 'Data de publicação anterior:', 'info_date_referencement' => 'DATA DE REFERENCIAMENTO DESTE SÍTIO :', 'info_derniere_etape' => 'Última etapa : Terminou !', - 'info_derniers_articles_publies' => 'Os seus últimos artigos publicados online', - 'info_desactiver_messagerie_personnelle' => 'Pode activar ou desactivar o seu correio pessoal neste sítio.', 'info_descriptif' => 'Descrição:', 'info_desinstaller_plugin' => 'elimina os dados e desactiva o plugin', 'info_discussion_cours' => 'Discussões em curso', @@ -340,7 +285,6 @@ Essas informações devem poder ser fornecidas pelo administrador do sistema ou 'info_email_envoi' => 'Endereço de email de envio (opcional)', 'info_email_envoi_txt' => 'Indique aqui o endereço a utilizar para enviar os emails (se não for o caso, o endereço do destinatário será utilizado como endereço de envio) :', 'info_email_webmestre' => 'Endereço e-mail do webmaster ', - 'info_entrer_code_alphabet' => 'Insira o código do alfabeto a utilizar :', 'info_envoi_email_automatique' => 'Envio automático de mails', 'info_envoyer_maintenant' => 'Enviar agora', 'info_etape_suivante' => 'Passar para a seguinte etapa', @@ -354,7 +298,6 @@ Essas informações devem poder ser fornecidas pelo administrador do sistema ou publicação e das validações de artigos.', 'info_fichiers_authent' => 'Ficheiros de autenticação « .htpasswd »', 'info_forums_abo_invites' => 'O seu sítio contém fóruns por assinatura; os visitantes são convidados a registar-se no sítio público.', - 'info_gauche_admin_effacer' => 'Esta página é acessível apenas aos responsáveis pelo site.

      Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao website.

      ', 'info_gauche_admin_tech' => 'Esta página está acessível apenas aos responsáveis pelo site.

      Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao sítio.

      ', 'info_gauche_admin_vider' => 'Esta página é acessível apenas aos responsáveis pelo sítio.

      Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao sítio web

      ', 'info_gauche_auteurs' => 'Encontrará aqui todos os autores do sítio. @@ -362,22 +305,15 @@ Os estatuto dos autores é indicado pela cor dos ícones (administrador = verde; 'info_gauche_auteurs_exterieurs' => 'Os autores externos, sem acesso ao sítio, são indicados por um ícone azul; os autores apagados, por um ícone cinzento.', 'info_gauche_messagerie' => 'A caixa de correio permite-lhe trocar mensagens entre redactores, conservar memorandos (para o seu uso pessoal) ou exibir anúncios na página de abertura do espaço privado (se for administrador).', - 'info_gauche_numero_auteur' => 'AUTOR NÚMERO', 'info_gauche_statistiques_referers' => 'Esta página apresenta a lista dos referers, ou seja, dos sítios que contêm links para o seu sítio, unicamente para ontem e hoje; esta lista é actualizada a cada 24 horas.', 'info_gauche_visiteurs_enregistres' => 'Encontrará aqui os visitantes registados no espaço público do sítio (fóruns por assinatura).', 'info_generation_miniatures_images' => 'Geração de miniaturas das imagens', - 'info_gerer_trad' => 'Gerir as ligações de tradução?', 'info_gerer_trad_objets' => '@objets@ : gerir as ligações de tradução', 'info_hebergeur_desactiver_envoi_email' => 'Alguns serviços de hospedagem desactivam o envio automático de e-mails a partir dos seus servidores. Nesse caso, as seguintes funcionalidades de SPIP não funcionarão.', 'info_hier' => 'ontem :', - 'info_historique_activer' => 'Activar o acompanhamento das revisões', - 'info_historique_affiche' => 'Visualizar esta versão', - 'info_historique_comparaison' => 'comparação', - 'info_historique_desactiver' => 'Desactivar o acompanhamento das revisões', - 'info_historique_texte' => 'O acompanhamento das revisões permite conservar um histórico de todas as alterações realizadas ao conteúdo de um artigo, e visualizar as diferenças entre as sucessivas versões', 'info_identification_publique' => 'A sua identidade pública...', 'info_image_process' => 'Seleccione o melhor método para criar as vinhetas clicando sobre a imagem correspondente.', 'info_image_process2' => 'N.B. Se nenhuma imagem aparece, então o servidor que alberga o seu sítio não foi configurado para utilizar tais ferramentas. Se deseja utilizar essas funções, contacte o responsavel técnico e peça as extensões «GD» ou «Imagick».', @@ -398,8 +334,6 @@ os autores apagados, por um ícone cinzento.', 'info_logos' => 'Os logos', 'info_maximum' => 'máximo :', 'info_meme_rubrique' => 'Na mesma rubrica', - 'info_message' => 'Mensagem de', - 'info_message_efface' => 'MENSAGEM APAGADA', 'info_message_en_redaction' => 'As suas mensagens em rascunho', 'info_message_technique' => 'Mensagem técnica:', 'info_messagerie_interne' => 'Correio interno', @@ -414,30 +348,23 @@ os autores apagados, por um ícone cinzento.', 'info_modifier_rubrique' => 'Modificar a rubrica :', 'info_modifier_titre' => 'Modificar : @titre@', 'info_mon_site_spip' => 'O meu sítio SPIP', - 'info_mot_sans_groupe' => '(Palavras sem grupo...)', - 'info_moteur_recherche' => 'Motor integrado de pesquisa', 'info_moyenne' => 'média :', - 'info_multi_articles' => 'Activar o menu de idioma para os artigos?', 'info_multi_cet_article' => 'Idioma deste artigo :', 'info_multi_langues_choisies' => 'Por favor seleccione a seguir os idiomas à disposição dos redactores do seu sítio. Os idiomas já utilizados no seu sítio (exibidos em primeiro lugar) não podem ser desactivados.', 'info_multi_objets' => '@objets@ : activar o menu de idioma', - 'info_multi_rubriques' => 'Activar o menu de idioma para as rubricas? ', 'info_multi_secteurs' => '... só para as rubricas situadas na raíz ?', 'info_nb_articles' => '@nb@ artigos', - 'info_nb_articles_syndiques' => '@nb@ artigos redifundidos', 'info_nb_auteurs' => '@nb@ autores', 'info_nb_messages' => '@nb@ mensagens', 'info_nb_mots_cles' => '@nb@ palavras-chave', 'info_nb_rubriques' => '@nb@ rubricas', - 'info_nb_sites' => '@nb@ sítios', 'info_nb_visiteurs' => '@nb@ visitantes', 'info_nom' => 'Nome', 'info_nom_destinataire' => 'Nome do destinatário', 'info_nom_pas_conforme' => 'as tags html não são autorizadas', 'info_nom_site' => 'Nome do seu sítio', 'info_nombre_articles' => '@nb_articles@ artigos,', - 'info_nombre_partcipants' => 'PARTICIPANTES NA DISCUSSÃO :', 'info_nombre_rubriques' => '@nb_rubriques@ rubricas,', 'info_nombre_sites' => '@nb_sites@ sítios,', 'info_non_deplacer' => 'Não deslocar...', @@ -446,19 +373,14 @@ os autores apagados, por um ícone cinzento.', 'info_non_envoi_liste_nouveautes' => 'Não enviar a lista das novidades', 'info_non_modifiable' => 'não pode ser modificado', 'info_non_suppression_mot_cle' => 'Não quero suprimir esta palavra-chave.', - 'info_note_numero' => 'Nota @numero@', 'info_notes' => 'Notas', - 'info_nouveaux_message' => 'Novas mensagens', 'info_nouvel_article' => 'Novo artigo', 'info_nouvelle_traduction' => 'Nova tradução :', 'info_numero_article' => 'ARTIGO NÚMERO :', 'info_obligatoire_02' => '[Obigatório]', 'info_option_accepter_visiteurs' => 'Aceitar a inscrição de visitantes do sítio público', - 'info_option_faire_suivre' => 'Encaminhar as mensagens dos fóruns para os autores dos artigos', 'info_option_ne_pas_accepter_visiteurs' => 'Recusar a inscrição de visitantes', 'info_options_avancees' => 'OPÇÕES AVANÇADAS', - 'info_ortho_activer' => 'Activar o corrector ortográfico', - 'info_ortho_desactiver' => 'Desactivar o corrector ortográfico', 'info_ou' => 'ou...', 'info_page_interdite' => 'Página proibida', 'info_par_nom' => 'por nome', @@ -468,20 +390,14 @@ os autores apagados, por um ícone cinzento.', 'info_passe_trop_court' => 'Palavra-passe demasiado curta.', 'info_passe_trop_court_car_pluriel' => 'A palavra-passe deve conter pelo menos @nb@ caracteres.', 'info_passes_identiques' => 'As duas palavras-passe não são idênticas.', - 'info_pense_bete_ancien' => 'Os seus antigos memorandos', 'info_plus_cinq_car' => 'mais de 5 caracteres', 'info_plus_cinq_car_2' => '(Mais de 5 caracteres)', 'info_plus_trois_car' => '(Mais de 3 caracteres)', 'info_popularite' => 'popularidade : @popularite@ ; visitas : @visites@', - 'info_popularite_4' => 'popularidade : @popularite@ ; visitas : @visites@', 'info_post_scriptum' => 'Post-Scriptum', 'info_post_scriptum_2' => 'Post-scriptum :', 'info_pour' => 'para', - 'info_preview_admin' => 'Apenas os administradores podem pré-visualizar o sítio', - 'info_preview_comite' => 'Todos os redactores podem pré-visualizar o sítio', - 'info_preview_desactive' => 'A pré-visualização está totalmente desactivada', - 'info_preview_texte' => 'É possível pré-visualizar o site como se todas os artigos e notas (tendo pelo menos o estatuto de «proposta») estivessem publicados. Esta possibilidade deve estar disponível apenas para os administradores, para todos os redactores, ou para ninguém?', - 'info_principaux_correspondants' => 'Os seus principais correspondentes', + 'info_preview_texte' => 'É possível pré-visualizar o site como se todas os artigos e notas (tendo pelo menos o estatuto de «proposta») estivessem publicados. Esta possibilidade deve estar disponível apenas para os administradores, para todos os redactores, ou para ninguém?', # MODIF 'info_procedez_par_etape' => 'proceder etapa por etapa', 'info_procedure_maj_version' => 'o procedimento de actualização deve ser lançado para adaptar a base de dados à nova versão de SPIP.', @@ -497,14 +413,9 @@ propor os seus próprios artigos.
      Durante a fase de inscrição, fornecendo-lhes os seus códigos de acesso ao sítio privado. Alguns serviços de hospedagem desactivam o envio de e-mails a partir dos seus servidores: nesse caso, a inscrição automática é impossível.', - 'info_question_utilisation_moteur_recherche' => 'Deseja utilizar o motor integrado de pesquisa a SPIP ? -(desactivá-lo acelera o funcionamento do sistema)', - 'info_question_vignettes_referer_non' => 'Não exibir imagens dos sítios de origem das visitas', 'info_qui_edite' => '@nom_auteur_modif@ modificou o conteúdo há @date_diff@ minutos', 'info_racine_site' => 'Raiz do sítio', 'info_recharger_page' => 'Por favor volte a carregar esta página daqui a pouco.', - 'info_recherche_auteur_a_affiner' => 'Demasiados resultados para "@cherche_auteur@" ; por favor afine a pesquisa.', - 'info_recherche_auteur_ok' => 'Muitos redactores encontrados para "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Nenhum resultado para "@cherche_auteur@".', 'info_recommencer' => 'Por favor tente de novo.', 'info_redacteur_1' => 'Redactor', @@ -523,7 +434,6 @@ serviços de hospedagem desactivam o envio de e-mails a partir dos seus 'info_rubriques' => 'Rubricas', 'info_rubriques_02' => 'rubricas', 'info_rubriques_trouvees' => 'Rubricas encontradas', - 'info_rubriques_trouvees_dans_texte' => 'Rubricas encontradas (no texto)', 'info_sans_titre' => 'Sem título', 'info_selection_chemin_acces' => 'Seleccione a seguir o caminho de acesso no anuário :', 'info_signatures' => 'assinaturas', @@ -536,14 +446,12 @@ serviços de hospedagem desactivam o envio de e-mails a partir dos seus 'info_sites_lies_mot' => 'Os sítios referenciados ligados a esta palavra-chave', 'info_sites_proxy' => 'Utilizar um proxy', 'info_sites_trouves' => 'Sítios encontrados', - 'info_sites_trouves_dans_texte' => 'Sítios encontrados (no texto)', 'info_sous_titre' => 'Sub-título :', 'info_statut_administrateur' => 'Administrador', 'info_statut_auteur' => 'Estatuto deste autor :', 'info_statut_auteur_2' => 'Eu sou', 'info_statut_auteur_a_confirmer' => 'Registo a confirmar', 'info_statut_auteur_autre' => 'Outro estado:', - 'info_statut_efface' => 'Apagado', 'info_statut_redacteur' => 'Redactor', 'info_statut_utilisateurs_1' => 'Estatuto por defeito dos utilizadores importados', 'info_statut_utilisateurs_2' => 'Escolha o estatuto atribuído às pessoas presentes no anuário LDAP quando elas se ligam pela primeira vez. Poderá depois modificar este valor para cada autor, caso a caso.', @@ -566,7 +474,6 @@ serviços de hospedagem desactivam o envio de e-mails a partir dos seus 'info_tous_articles_presents' => 'Todos os artigos publicados nesta rubrica', 'info_tous_articles_refuses' => 'Todos os artigos rejeitados', 'info_tous_les' => 'todos os', - 'info_tous_redacteurs' => 'Anúncios a todos os redactores', 'info_tout_site' => 'Todo o sítio', 'info_tout_site2' => 'O artigo não está traduzido neste idioma.', 'info_tout_site3' => 'O artigo foi traduzido neste idioma, mas foram feitas modificações ao artigo original. A tradução necessita ser actualizada.', @@ -583,7 +490,6 @@ numa cor que indica o seu estado:', 'info_une_rubrique_02' => '1 rubrica', 'info_url' => 'URL :', 'info_url_proxy' => 'URL do proxy', - 'info_url_site' => 'URL do sítio :', 'info_url_test_proxy' => 'URL de teste', 'info_urlref' => 'Ligação hipertexto :', 'info_utilisation_spip' => 'Pode começar agora a utilizar o sistema de publicação assistida...', @@ -594,7 +500,6 @@ numa cor que indica o seu estado:', 'info_visiteurs_02' => 'Visitantes do sítio público', 'info_webmestre_forces' => 'Os webmasters são actualmente definidos em @file_options@.', 'install_adresse_base_hebergeur' => 'Endereço da base de dados atribuído pelo serviço de hospedagem', - 'install_base_ok' => 'A base @base@ foi identificada', 'install_connect_ok' => 'A nova base de dados foi declarada usando o nome de servidor @connect@.', 'install_echec_annonce' => 'A instalação vai provavelmente falhar,ou criar um sítio não funcional', 'install_extension_mbstring' => 'O SPIP não funciona com :', @@ -607,7 +512,6 @@ numa cor que indica o seu estado:', 'install_select_langue' => 'Seleccione um idioma e depois clique no botão " seguinte " para lançar o procedimento de instalação.', 'install_select_type_db' => 'Indicar o tipo de base de dados :', 'install_select_type_mysql' => 'MySQL', - 'install_select_type_mysqli' => 'MySQLi', 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', @@ -624,8 +528,6 @@ numa cor que indica o seu estado:', 'item_activer_messages_avertissement' => 'Activar as mensagens de aviso', 'item_administrateur_2' => 'administrador', 'item_afficher_calendrier' => 'Exibir o calendário', - 'item_autoriser_documents_joints' => 'Autorizar os documentos juntos dos artigos', - 'item_autoriser_documents_joints_rubriques' => 'Autorizar os documentos nas rubricas', 'item_autoriser_syndication_integrale' => 'Incluir artigos completos nos ficheiros de redifusão', 'item_choix_administrateurs' => 'os administradores', 'item_choix_generation_miniature' => 'Gerar automaticamente as miniaturas das imagens.', @@ -633,7 +535,6 @@ numa cor que indica o seu estado:', 'item_choix_redacteurs' => 'os redactores', 'item_choix_visiteurs' => 'os visitadores do sítio público', 'item_creer_fichiers_authent' => 'Criar os ficheiros .htpasswd', - 'item_limiter_recherche' => 'Limitar a pesquisa às informações contidas no seu sítio', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Activar as mensagens e a agenda', 'item_mots_cles_association_articles' => 'aos artigos', @@ -643,22 +544,15 @@ numa cor que indica o seu estado:', 'item_non_accepter_inscriptions' => 'Não aceitar as inscrições', 'item_non_activer_messages_avertissement' => 'Não há mensagens de aviso', 'item_non_afficher_calendrier' => 'Não exibir no calendário', - 'item_non_autoriser_documents_joints' => 'Não autorizar os documentos nos artigos', - 'item_non_autoriser_documents_joints_rubriques' => 'Não autorizar os documentos nas rubricas', 'item_non_autoriser_syndication_integrale' => 'Enviar apenas um resumo', - 'item_non_compresseur' => 'Desactivar a compressão', 'item_non_creer_fichiers_authent' => 'Não criar estes ficheiros', - 'item_non_gerer_statistiques' => 'Não gerir as estatísticas', - 'item_non_limiter_recherche' => 'Alargar a pesquisa ao conteúdo dos sítios referenciados', 'item_non_messagerie_agenda' => 'Desactivar as mensagens e a agenda', 'item_non_publier_articles' => 'Não publicar os artigos antes da data de publicação fixada.', - 'item_non_utiliser_moteur_recherche' => 'Não utilizar o motor', 'item_nouvel_auteur' => 'Novo autor', 'item_nouvelle_rubrique' => 'Nova rubrica', 'item_oui' => 'Sim', 'item_publier_articles' => 'Publicar os artigos, seja qual for a sua data de publicação.', 'item_reponse_article' => 'Resposta ao artigo', - 'item_utiliser_moteur_recherche' => 'Utilizar o motor de pesquisa', 'item_version_html_max_html4' => 'Usar apenas HTML4 no sítio público', 'item_version_html_max_html5' => 'Permitir HTML5', 'item_visiteur' => 'visitante', @@ -673,15 +567,13 @@ numa cor que indica o seu estado:', 'label_choix_langue' => 'Seleccione o seu idioma', 'label_nom_fichier_connect' => 'Indique o nome para este servidor', 'label_slogan_site' => 'Slogan do sítio', - 'label_taille_ecran' => 'Largura do ecrã', + 'label_taille_ecran' => 'Largura do ecrã', # MODIF 'label_texte_et_icones_navigation' => 'Menu de navegação', 'label_texte_et_icones_page' => 'Exibição da página', 'ldap_correspondance' => 'sucessão do campo @champ@', 'ldap_correspondance_1' => 'Sucessão dos campos LDAP', 'ldap_correspondance_2' => 'Para cada um destes campos SPIP, indique o nome do campo LDAP correspondente. Deixe em branco se não o deseja preenchido. Separe com espaços ou vírgulas, para tentar vários campos LDAP.', - 'lien_ajout_destinataire' => 'Acrescentar este destinatário', 'lien_ajouter_auteur' => 'Acrescentar este autor', - 'lien_ajouter_participant' => 'Acrescentar um participante', 'lien_ajouter_une_rubrique' => 'Adicionar esta rubrica', 'lien_email' => 'email', 'lien_nom_site' => 'NOME DO SÍTIO', @@ -689,9 +581,7 @@ numa cor que indica o seu estado:', 'lien_retirer_rubrique' => 'Eliminar a rubrica', 'lien_retirer_tous_auteurs' => 'Eliminar todos os autores', 'lien_retirer_toutes_rubriques' => 'Remover todas as rubricas', - 'lien_retrait_particpant' => 'remover este participante', 'lien_site' => 'sítio', - 'lien_supprimer_rubrique' => 'suprimir esta rubrica', 'lien_tout_deplier' => 'Expandir tudo', 'lien_tout_replier' => 'Recolher tudo', 'lien_tout_supprimer' => 'Eliminar tudo', @@ -716,13 +606,12 @@ numa cor que indica o seu estado:', 'mois_non_connu' => 'não conhecido', // N - 'nouvelle_version_spip' => 'A versão @version@ de SPIP está disponível', + 'nouvelle_version_spip' => 'A versão @version@ de SPIP está disponível', # MODIF // O 'onglet_contenu' => 'Conteúdo', 'onglet_declarer_une_autre_base' => 'Declarar outra base de dados', 'onglet_discuter' => 'Discussão', - 'onglet_documents' => 'Documentos', 'onglet_interactivite' => 'Interactividade', 'onglet_proprietes' => 'Propriedades', 'onglet_repartition_actuelle' => 'actualmente', @@ -766,7 +655,7 @@ numa cor que indica o seu estado:', 'plugin_info_upgrade_ok' => 'Actualizado com sucesso', 'plugin_librairies_installees' => 'Bibliotecas instaladas', 'plugin_necessite_lib' => 'Este plugin requer a biblioteca @lib@', - 'plugin_necessite_plugin' => 'Requer o plugin @plugin@ em versão @version@ ou mais recente.', + 'plugin_necessite_plugin' => 'Requer o plugin @plugin@ em versão @version@ ou mais recente.', # MODIF 'plugin_necessite_plugin_sans_version' => 'Requer o plugin @plugin@', 'plugin_necessite_spip' => 'Requer SPIP em version @version@ ou mais recente.', 'plugin_source' => 'fonte: ', @@ -800,7 +689,7 @@ numa cor que indica o seu estado:', // Q 'queue_executer_maintenant' => 'Executar agora', - 'queue_info_purger' => 'Pode eliminar todas as tarefas em espera e pôr a zeros a lista de tarefas periódicas', + 'queue_info_purger' => 'Pode eliminar todas as tarefas em espera e pôr a zeros a lista de tarefas periódicas', # MODIF 'queue_nb_jobs_in_queue' => '@nb@ tarefas em espera', 'queue_next_job_in_nb_sec' => 'Próxima tarefa em @nb@ s', 'queue_no_job_in_queue' => 'Sem tarefas em espera', @@ -810,6 +699,7 @@ numa cor que indica o seu estado:', // R 'repertoire_plugins' => 'Directório :', + 'required' => '[Obigatório]', // S 'sans_heure' => 'tempo não especificado', @@ -839,17 +729,13 @@ reinstalar SPIP para recriar uma nova base assim como uma primeira conta de admi 'texte_article_virtuel_reference' => 'Artigo virtual : artigo referenciado no seu sítio SPIP, mas redirigido para uma outra URL. Para suprimir a redirecção, apague a URL acima.', 'texte_aucun_resultat_auteur' => 'Nenhum resultado para "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Este site pode indicar permanentemente a lista dos redactores ligados, o que lhe permite trocar mensagens em directo ( quando o correio está desactivado mais acima, a lista dos redactores está desactivada). Pode decidir não aparecer nesta lista (estando « invisível » para os outros utilizadores).', - 'texte_auteur_messagerie_1' => 'Este sítio permite a troca de mensagens e a constituição de fóruns de discussão privados entre os participantes do sítio. Pode decidir não participar nessas trocas.', 'texte_auteurs' => 'OS AUTORES', 'texte_choix_base_1' => 'Escolha a sua base de dados :', 'texte_choix_base_2' => 'O servidor SQL contém várias bases de dados.', 'texte_choix_base_3' => 'Seleccione a seguir a que lhe foi atribuida pelo seu serviço de hospedagem.', 'texte_choix_table_prefix' => 'Prefixo das tabelas:', - 'texte_commande_vider_tables_indexation' => 'Utilize este comando para esvaziar as tabelas de indexação utilizadas - pelo motor integrado de pesquisa em SPIP. Isso permitir-lhe-á ganhar espaço em disco.', 'texte_compatibilite_html' => 'Pode requerer a SPIP que produza, no sítio público, código compatível com a norma HTML4, ou que permita usar código compatível mais moderno HTML5.', 'texte_compatibilite_html_attention' => 'Não existe risco por activar a opção HTML5, mas se o fizer, as páginas do seu sítio devem começar com o seguinte código para serem válidas: <!DOCTYPE html>.', - 'texte_compresse_ou_non' => '(este pode ser comprimido ou não)', 'texte_compte_element' => '@count@ elemento', 'texte_compte_elements' => '@count@ elementos', 'texte_conflit_edition_correction' => 'Por favor compare as diferenças entre as duas versões. Pode também copiar as suas alterações e recomeçar.', @@ -868,10 +754,8 @@ que alguns elementos dos artigos não são utilizados. 'texte_date_publication_anterieure_nonaffichee' => 'Não exibir a data de redacção anterior', 'texte_date_publication_article' => 'DATA DE PUBLICAÇÃO ONLINE:', 'texte_date_publication_objet' => 'Data de publicação online:', - 'texte_descriptif_petition' => 'Descrição do abaixo-assinado', 'texte_descriptif_rapide' => 'Descrição rápida', 'texte_effacer_base' => 'Apagar a base de dados SPIP', - 'texte_effacer_donnees_indexation' => 'Apagar os dados de indexação', 'texte_effacer_statistiques' => 'Apagar as estatísticas', 'texte_en_cours_validation' => 'Os artigos e notícias seguintes estão propostos para publicação. Não hesite em dar a sua opinião graças aos fóruns que lhes estão ligados.', 'texte_enrichir_mise_a_jour' => 'Pode enriquecer a paginação do seu texto, utilizando « atalhos tipográficos ».', @@ -883,29 +767,18 @@ Se não utilizar os ficheiros especiais, pode deixar esta opção no seu valor p 'texte_informations_personnelles_2' => '(Nota : se se tratar de uma reinstalação e se o seu acesso continua funcional, pode', 'texte_introductif_article' => '(Texto introdutório do artigo.)', 'texte_jeu_caractere' => 'Esta opção é útil se o seu sítio precisa de exibir alfabetos diferentes do alfabeto romano (ou «ocidental») e seus derivados. Nesse caso, pode ser preferível mudar a definição por defeito para utilizar um conjunto de carácteres adequado; aconselhamos, em todos os casos, a proceder a experiências a fim de encontrar uma solução satisfatória. Se modificar este parâmetro, não esqueça também de adaptar o sítio público (balisa#CHARSET).', - 'texte_jeu_caractere_2' => 'Esta definição não tem efeito retroactivo. Portanto, não converte os textos já presentes na base de dados. Em todo o caso, poderá voltar à definição anterior sem prejuízo.', 'texte_jeu_caractere_3' => 'O seu sítio usa actualmente o conjunto de caracteres:', 'texte_jeu_caractere_4' => 'Se não corresponde aos seus dados actuais (pode ocorrer após restaurar a base de dados a partir de uma cópia de segurança), ou se estiver a configurar este sítio e deseja usar um conjunto diferente de caracteres, por favor indique-o aqui :', - 'texte_jeu_caractere_conversion' => 'Nota :pode decidir converter definitivamente todo o texto no seu sítio (artigos, notícias, fórums, etc.) para o conjunto de caracteres utf-8. Para tal, aceda à página de conversão para utf-8.', - 'texte_lien_hypertexte' => '(Se a sua mensagem se refere a um artigo publicado na Web, ou a uma página que fornece mais informações, favor indicar a seguir o título da página e o endereço URL.)', 'texte_login_ldap_1' => '(Deixar vazio para um acesso anónimo, ou introduzir o caminho completo, por exemplo, « uid=silva, ou=users, dc=meu-dominio, dc=com ».)', 'texte_login_precaution' => 'Atenção ! Isto é o login sob o qual está ligado actualmente. Utilize este formulário com precaução...', - 'texte_message_edit' => 'Atenção : esta mensagem pode ser modificada por todos os administradores do sítio, e é visível por todos os redactores. Utilizar os anúncios apenas para exibir acontecimentos importantes da vida do sítio.', 'texte_messagerie_agenda' => 'Um sistema de mensagens permite aos redactores deste sítio comunicar directamente entre si na área privada. Está associado a uma agenda.', 'texte_mise_a_niveau_base_1' => 'Acaba de actualizar os ficheiros SPIP. Agora é preciso pôr a nível a base de dados do sítio. ', 'texte_modifier_article' => 'Modificar o artigo :', - 'texte_moteur_recherche_active' => 'O motor de pesquisa está activado. Utilize este comando - se desejar proceder a uma reindexação rápida (após restauro -de uma salvaguarda por exemplo). Note que os documentos modificados de - maneira normal (a partir da interface SPIP) são automaticamente - reindexados : este comando portanto só é útil de maneira excepcional', - 'texte_moteur_recherche_non_active' => 'O motor de pesquisa não está activado.', 'texte_multilinguisme' => 'Se desejar gerir artigos em muitos idiomas, com uma navegação complexa, pode acrescentar um menu de idioma aos artigos e/ou às rubricas, em função da organização do seu sítio.', 'texte_multilinguisme_trad' => 'Pode também activar um sistema de gestão de ligações entre as diferentes traduções de um artigo.', 'texte_non_compresse' => 'não comprimido ( o seu servidor não suporta esta funcionalidade)', - 'texte_nouveau_message' => 'Nova mensagem', 'texte_nouvelle_version_spip_1' => 'Instalou uma nova versão de SPIP.', 'texte_nouvelle_version_spip_2' => 'Esta nova versão precisa de uma actualização mais completa do que o normal. Se é o webmaster do sítio, por favor, apague o ficheiro inc_connect.php3 do directório ecrire e retome a instalação de modo a incluir os seus parâmetros de ligação à base de dados.

      (NB.: se não se lembra dos seus parâmetros de ligação, consulte o arquivo @connect@ antes de o apagar...)

      ', 'texte_operation_echec' => 'Volte à página anterior, seleccione uma outra base de dados ou crie uma nova. Verifique as informações fornecidas pelo seu serviço de hospedagem.', @@ -924,7 +797,6 @@ de uma salvaguarda por exemplo). Note que os documentos modificados de 'texte_rappel_selection_champs' => '[Não esquecer de seleccionar correctamente este campo.]', 'texte_recalcul_page' => 'Se quiser recompor uma única página, passe pelo espaço público e utilize o botão «recompor».', - 'texte_recapitiule_liste_documents' => 'Esta página recapitula a lista dos documentos que colocou nas rubricas. Para modificar as informações de cada documento, siga o link para a página da rubrica.', 'texte_recuperer_base' => 'Reparar a base de dados', 'texte_reference_mais_redirige' => 'artigo referenciado no seu sítio SPIP, mas redirigido para uma outra URL.', 'texte_requetes_echouent' => 'Quando algumas consultas SQL falharem sistematicamente e sem razão aparente, é possível que seja por causa da própria base de dados @@ -947,7 +819,6 @@ na cache SPIP. Isso permite, por exemplo, obrigar uma recomposição de todas as fez modificações importantes de grafismo ou de estrutura do sítio.', 'texte_sur_titre' => 'Supra-título', 'texte_table_ok' => ': esta tabela está OK.', - 'texte_tables_indexation_vides' => 'As tabelas de indexação do motor estão vazias.', 'texte_tentative_recuperation' => 'Tentativa de reparação', 'texte_tenter_reparation' => 'Tentar uma reparação da base de dados', 'texte_test_proxy' => 'Para experimentar este proxy, indique aqui o endereço de um sítio Web @@ -962,27 +833,12 @@ a fim de evitar as modificações simultâneas. Esta opção está desactivada por defeito a fim de evitar exibir mensagens de aviso intempestivas.', - 'texte_trop_resultats_auteurs' => 'Demasiados resultados para "@cherche_auteur@" ; por favor afine a pesquisa.', - 'texte_unpack' => 'telecarregamento da última versão', - 'texte_utilisation_moteur_syndiques' => 'Quando utilizar o motor integrado de pesquisa em SPIP, pode efectuar as pesquisas nos sítios e nos artigos vinculados de duas maneiras - diferentes.
      A mais - simples consiste em pesquisar unicamente nos títulos e descrições dos artigos. -
      - Um segundo método, muito mais poderoso, permite ao SPIP pesquisar igualmente no texto dos - sítios referenciados. Se referenciar - um sítio, SPIP vai então efectuar a - pesquisa no texto do próprio sítio.', - 'texte_utilisation_moteur_syndiques_2' => 'Este método obriga SPIP a visitar - regularmente os sítios referenciados, - o que pode provocar uma pequena desaceleração do seu próprio sítio.', 'texte_vide' => 'vazio', 'texte_vider_cache' => 'Esvaziar a cache', - 'titre_admin_effacer' => 'Manutenção técnica', 'titre_admin_tech' => 'Manutenção técnica', 'titre_admin_vider' => 'Manutenção técnica', 'titre_ajouter_un_auteur' => 'Adicionar um autor', 'titre_ajouter_un_mot' => 'Adicionar uma palavra-chave', - 'titre_ajouter_une_rubrique' => 'Adicionar uma rubrica', 'titre_cadre_afficher_article' => 'Exibir os artigos', 'titre_cadre_afficher_traductions' => 'Exibir o estado das traduções para estes idiomas:', 'titre_cadre_ajouter_auteur' => 'ACRESCENTAR UM AUTOR :', @@ -1009,54 +865,27 @@ a fim de evitar as modificações simultâneas. 'titre_naviguer_dans_le_site' => 'Navegar no sítio', 'titre_nouvelle_rubrique' => 'Nova rubrica', 'titre_numero_rubrique' => 'RUBRICA NÚMERO :', - 'titre_page_admin_effacer' => 'Manutenção técnica : apagar a base de dados', 'titre_page_articles_edit' => 'Modificar : @titre@', 'titre_page_articles_page' => 'Os artigos', 'titre_page_articles_tous' => 'Todo o sítio', - 'titre_page_auteurs' => 'Visitantes', 'titre_page_calendrier' => 'Calendário @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Configuração do sítio', - 'titre_page_config_fonctions' => 'Configuração do sítio', - 'titre_page_configuration' => 'Configuração do sítio', - 'titre_page_controle_petition' => 'Acompanhamento dos abaixo-assinados', 'titre_page_delete_all' => 'Supressão total e irreversível', - 'titre_page_documents_liste' => 'Os documentos das rubricas', - 'titre_page_index' => 'O seu espaço privado', - 'titre_page_message_edit' => 'Redigir uma mensagem', - 'titre_page_messagerie' => 'O seu correio', 'titre_page_recherche' => 'Resultados da pesquisa @recherche@', 'titre_page_statistiques_referers' => 'Estatísticas (ligações de entrada)', - 'titre_page_statistiques_signatures_jour' => 'Número de assinaturas por dia', - 'titre_page_statistiques_signatures_mois' => 'Número de assinaturas por mês', 'titre_page_upgrade' => 'Reactualização de SPIP', 'titre_publication_articles_post_dates' => 'Publicação dos artigos pós-datados', - 'titre_referencer_site' => 'Referenciar o sítio', - 'titre_rendez_vous' => 'ENCONTROS', 'titre_reparation' => 'Reparação', 'titre_suivi_petition' => 'Seguimento dos abaixo-assinados', 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'Não há artigo com este número', 'trad_article_traduction' => 'Todas as versões deste artigo :', - 'trad_deja_traduit' => 'Erro: impossível ligar este artigo ao número solicitado.', 'trad_delier' => 'Não voltar a ligar este artigo a estas traduções', 'trad_lier' => 'Este artigo é uma tradução do artigo número :', 'trad_new' => 'Escrever uma nova tradução deste artigo', // U - 'upload_info_mode_document' => 'Colocar esta imagem no portfolio', - 'upload_info_mode_image' => 'Remover esta imagem do portfolio', - 'utf8_convert_attendez' => 'Aguarde uns instantes e recarregue esta página.', - 'utf8_convert_avertissement' => 'Está prestes a converter o conteúdo da sua base de dados (artigos, notícias, etc.) do conjunto de caracteres @orig@ para o conjunto de caracteres @charset@.', - 'utf8_convert_backup' => 'Não esqueça de primeiro fazer uma cópia de segurança completa do seu sítio. Precisa também de verificar se os seus modelos e ficheiros de idioma são compatíveis com @charset@.', - 'utf8_convert_erreur_deja' => 'O seu sítio está já em @charset@, é inútil converter.', 'utf8_convert_erreur_orig' => 'Erro : o conjunto de caracteres @charset@ não é suportado.', - 'utf8_convert_termine' => 'Terminou!', - 'utf8_convert_timeout' => 'Importante : Se o servidor indicar timeout , por favor recarregue a página até que ela indique « Terminou! ».', - 'utf8_convert_verifier' => 'Agora precisa de esvaziar a cache do sítio e depois verificar se está tudo bem nas páginas públicas do sítio. Se ocorrer um problema grave, cria-se uma cópia de segurança dos seus dados originais (em formato SQL) no directório @rep@.', - 'utf8_convertir_votre_site' => 'Converter o seu sítio em utf-8', // V 'version' => 'Versão:' ); - -?> diff --git a/www/ecrire/lang/ecrire_pt_br.php b/www/ecrire/lang/ecrire_pt_br.php index 76a6b49a..6636796a 100644 --- a/www/ecrire/lang/ecrire_pt_br.php +++ b/www/ecrire/lang/ecrire_pt_br.php @@ -1,9 +1,11 @@ 'Ativar o plugin', 'affichage' => 'Exibição', 'aide_non_disponible' => 'Esta parte da ajuda online ainda não está disponível neste idioma.', - 'annuler_recherche' => 'Cancelar a pesquisa', + 'annuler_recherche' => 'Cancelar a busca', 'auteur' => 'Autor:', 'avis_acces_interdit' => 'Acesso negado.', 'avis_article_modifie' => 'Atenção, @nom_auteur_modif@ editou esta matéria há @date_diff@ minutos', @@ -22,73 +24,52 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_connexion_echec_1' => 'A conexão com a base de dados falhou.', 'avis_connexion_echec_2' => 'Volte para a página anterior e verifique as informações que você forneceu.', 'avis_connexion_echec_3' => 'N.B. Em diversos servidores, você precisa solicitar a ativação do seu acesso à base de dados antes de poder utilizá-la. Se você não consegue se conectar, verifique se você efetuou esse pedido.', + 'avis_connexion_erreur_creer_base' => 'Não foi possível criar a base de dados.', 'avis_connexion_erreur_nom_base' => 'O nome da base só pode conter letras, números e traços', - 'avis_connexion_ldap_echec_1' => 'A conexão ao servidorLDAP falhou.', + 'avis_connexion_ldap_echec_1' => 'A conexão ao servidor LDAP falhou.', 'avis_connexion_ldap_echec_2' => 'Volte para a página anterior e verifique as informações que você forneceu.', 'avis_connexion_ldap_echec_3' => 'Opcionalmente, não use o suporte LDAP para importar os usuários.', 'avis_deplacement_rubrique' => 'Atenção! Esta seção contém @contient_breves@ nota@scb@: se você a transferir, por favor, marque este quadrado.', - 'avis_destinataire_obligatoire' => 'Você deve informar um destinatário antes de enviar esta mensagem.', 'avis_erreur_connexion_mysql' => 'Erro de conexão SQL', - 'avis_erreur_version_archive' => 'Atenção! O arquivo @archive@ corresponde a uma versão de SPIP diferente da que você tem instalada. Você enfrentará grandes dificuldades: -risco de destruição da sua base de dados, mal funcionamento generalizado do site etc. Não valide este pedido de importação.

      Para mais informações, leia - a documentação do SPIP.

      ', - 'avis_espace_interdit' => 'Área interdita
      O SPIP já está instalado.
      ', + 'avis_espace_interdit' => 'Área interdita
      O SPIP já está instalado.
      ', 'avis_lecture_noms_bases_1' => 'O programa de instalação não pôde ler os nomes das bases de dados instaladas.', 'avis_lecture_noms_bases_2' => 'Ou nenhuma base de dados esta disponível, ou a função que permite listar as bases foi desativada por razões de segurança (o que é o caso de diversos provedores de hospedagem).', 'avis_lecture_noms_bases_3' => 'No segundo caso, é provável que uma base de dados com o nome do seu login possa ser utilizada:', - 'avis_non_acces_message' => 'Você não tem acesso a esta mensagem.', - 'avis_non_acces_page' => 'Você não tem acessoa a esta página.', + 'avis_non_acces_page' => 'Você não tem acesso a esta página.', 'avis_operation_echec' => 'A operação falhou.', 'avis_operation_impossible' => 'Operação impossível', - 'avis_probleme_archive' => 'Problema de leitura do arquivo @archive@', 'avis_suppression_base' => 'ATENÇÃO, a supressão dos dados é irreversível', - 'avis_version_mysql' => 'A versão do seu servidor SQL (@version_mysql@) não permite a auto-reparação das tabelas da base de dados.', // B 'bouton_acces_ldap' => 'Incluir o acesso ao LDAP', 'bouton_ajouter' => 'Incluir', - 'bouton_ajouter_participant' => 'INCLUIR UM PARTICIPANTE:', - 'bouton_annonce' => 'AVISO', 'bouton_annuler' => 'Anular', - 'bouton_checkbox_envoi_message' => 'possibilidade de enviar uma mensagem', - 'bouton_checkbox_indiquer_site' => 'informar obrigatoriamente um website', - 'bouton_checkbox_signature_unique_email' => 'uma única assinatura por endereço de e-mail', - 'bouton_checkbox_signature_unique_site' => 'uma única assinatura por website', + 'bouton_cache_activer' => 'Reativar o cache', + 'bouton_cache_desactiver' => 'Desativar temporariamente o cache', 'bouton_demande_publication' => 'Solicitar a publicação desta matéria', 'bouton_desactive_tout' => 'Desativar tudo', 'bouton_desinstaller' => 'Desinstalar', - 'bouton_effacer_index' => 'Apagar os índices', 'bouton_effacer_tout' => 'Apagar TUDO', - 'bouton_envoi_message_02' => 'ENVIAR UMA MENSAGEM', 'bouton_envoyer_message' => 'Mensagem definitiva: enviar', 'bouton_fermer' => 'Fechar', 'bouton_mettre_a_jour_base' => 'Atualizar a base de dados', 'bouton_modifier' => 'Alterar', - 'bouton_pense_bete' => 'LEMBRETE DE USO PESSOAL', - 'bouton_radio_activer_messagerie' => 'Ativar o sistema interno de mensagem', - 'bouton_radio_activer_messagerie_interne' => 'Ativar o sistema interno de mensagens', - 'bouton_radio_activer_petition' => 'Ativar a petição', 'bouton_radio_afficher' => 'Exibir', - 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Aparecer nas listas de redatores conectados', - 'bouton_radio_desactiver_messagerie' => 'desativar o sistema interno de mensagens', + 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Exibir nas listas de redatores conectados', 'bouton_radio_envoi_annonces_adresse' => 'Enviar os avisos para o endereço:', 'bouton_radio_envoi_liste_nouveautes' => 'Enviar a lista de novidades', - 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Não aparecer na lista de redatores', + 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Não exibir na lista de redatores', 'bouton_radio_non_envoi_annonces_editoriales' => 'Não enviar os avisos editoriais', - 'bouton_radio_pas_petition' => 'Sem petição', - 'bouton_radio_petition_activee' => 'Petição ativada', - 'bouton_radio_supprimer_petition' => 'Excluir a petição', 'bouton_redirection' => 'REDIRECIONAMENTO', + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Reiniciar aos valores padrão', 'bouton_relancer_installation' => 'Reiniciar a instalação', + 'bouton_reset_password' => 'Criar uma nova senha e enviá-la por e-mail', 'bouton_suivant' => 'Avançar', 'bouton_tenter_recuperation' => 'Tentar uma reparação', 'bouton_test_proxy' => 'Testar o proxy', 'bouton_vider_cache' => 'Limpar o cache', - 'bouton_voir_message' => 'Visualizar esta mensagem antes de validar', // C - 'cache_mode_compresse' => 'Os arquivos do cache são gravados em modo compactado.', - 'cache_mode_non_compresse' => 'Os arquivos do cache são gravados em modo não compactado.', 'cache_modifiable_webmestre' => 'Este parâmetro é modificável pelo webmaster do site.', 'calendrier_synchro' => 'Se você usa um programa de agenda compatível com iCal, você pode sincronizá-lo com as informações deste site.', 'config_activer_champs' => 'Ativar os campos a seguir', @@ -107,9 +88,7 @@ risco de destruição da sua base de dados, mal funcionamento generalizado do si 'config_titre_base_sup' => 'Configuração de uma base suplementar', 'config_titre_base_sup_choix' => 'Escolha uma base suplementar', 'connexion_ldap' => 'Conexão:', - 'copier_en_local' => 'Copiar localmente', - 'creer_et_associer_un_auteur' => 'Criar e associar um autor', - 'creer_et_associer_une_rubrique' => 'Criar e associar uma seção', + 'creer_et_associer_un_auteur' => 'Criar e vincular um autor', // D 'date_mot_heures' => 'horas', @@ -123,15 +102,15 @@ risco de destruição da sua base de dados, mal funcionamento generalizado do si 'entree_adresse_email' => 'Seu endereço de e-mail', 'entree_adresse_email_2' => 'Endereço de e-mail', 'entree_base_donnee_1' => 'Endereço da base de dados', - 'entree_base_donnee_2' => '(Frequentemente este endereço corresponde ao do seu site, às vezes ele corresponde ao nome «localhost», algumas vezes ele deve ser deixado completamente em branco.)', + 'entree_base_donnee_2' => '(Frequentemente este endereço corresponde ao do seu site, às vezes ele corresponde ao nome «localhost», algumas vezes ele pode ser deixado completamente em branco.)', 'entree_biographie' => 'Biografia curta em poucas palavras.', 'entree_chemin_acces' => 'Informe o caminho de acesso:', 'entree_cle_pgp' => 'Sua chave PGP', 'entree_cle_pgp_2' => 'Chave PGP', 'entree_contenu_rubrique' => '(Conteúdo da seção em poucas palavras.)', - 'entree_identifiants_connexion' => 'Seus identificadores de conexão...', + 'entree_identifiants_connexion' => 'Seus dados de conexão...', 'entree_identifiants_connexion_2' => 'Dados de conexão', - 'entree_informations_connexion_ldap' => 'Informe os seus dados de conexão ao seu catálogo LDAP. + 'entree_informations_connexion_ldap' => 'Informe neste formulário os dados de conexão ao seu catálogo LDAP. Estas informações deverão ser fornecidas pelo administrador do sistema ou da rede.', 'entree_infos_perso' => 'Quem é você?', 'entree_infos_perso_2' => 'Quem é o autor?', @@ -139,12 +118,11 @@ Estas informações deverão ser fornecidas pelo administrador do sistema ou da 'entree_liens_sites' => 'Link hipertexto (referência, site a visitar...)', 'entree_login' => 'Seu login', 'entree_login_connexion_1' => 'O login de conexão', - 'entree_login_connexion_2' => '(Frequentemente corresponde ao seu login para acesso por FTP; às vezes pode ficar em branco)', - 'entree_login_ldap' => 'Login LDAP inicial', + 'entree_login_connexion_2' => '(Frequentemente corresponde ao seu login para acesso por FTP; às vezes pode ser deixado em branco)', 'entree_mot_passe' => 'Sua senha', 'entree_mot_passe_1' => 'A senha de conexão', - 'entree_mot_passe_2' => '(Frequentemente corresponde à sua senha para acesso por FTP; às vezes é deixado em branco)', - 'entree_nom_fichier' => 'Por favor, entre o nome do arquivo @texte_compresse@:', + 'entree_mot_passe_2' => '(Frequentemente corresponde à sua senha para acesso por FTP; às vezes pode ser deixado em branco)', + 'entree_nom_fichier' => 'Por favor, informe o nome do arquivo @texte_compresse@:', 'entree_nom_pseudo' => 'Seu nome ou apelido', 'entree_nom_pseudo_1' => '(Seu nome ou apelido)', 'entree_nom_pseudo_2' => 'Nome ou apelido', @@ -158,7 +136,9 @@ Estas informações deverão ser fornecidas pelo administrador do sistema ou da 'entree_url' => 'O endereço (URL) do seu site', 'entree_url_2' => 'Endereço (URL) do site', 'erreur_connect_deja_existant' => 'Já existe um servidor com esse nome', + 'erreur_email_deja_existant' => 'Esse endereço de email já está em uso.', 'erreur_nom_connect_incorrect' => 'Este nome de servidor não é autorizado', + 'erreur_plugin_attribut_balise_manquant' => 'Atributo @attribut@ faltando no tag @balise@.', 'erreur_plugin_desinstalation_echouee' => 'A desinstalação do plugin falhou. No entanto, você pode desativá-lo.', 'erreur_plugin_fichier_absent' => 'Arquivo ausente', 'erreur_plugin_fichier_def_absent' => 'Arquivo de definição ausente', @@ -173,7 +153,7 @@ Estas informações deverão ser fornecidas pelo administrador do sistema ou da 'htaccess_inoperant' => 'htaccess inoperante', // I - 'ical_info1' => 'Esta página apresenta diversos métodos para se manter em contato com a vida deste site.', + 'ical_info1' => 'Esta página apresenta diversos métodos para se manter a par da atividade deste site.', 'ical_info2' => 'Para mais informações sobre todas estas técnicas, não deixe de consultar a documentação do SPIP.', 'ical_info_calendrier' => 'Dois calendários estão à sua disposição. O primeiro é um mapa do site anunciando todas as matérias publicadas. O segundo contém os avisos editoriais bem como suas últimas mensagens privadas: ele lhe é reservado graças a uma chave pessoal, que você pode alterar a qualquer momento ao renovar a sua senha.', 'ical_methode_http' => 'Transferência', @@ -181,7 +161,7 @@ Estas informações deverão ser fornecidas pelo administrador do sistema ou da 'ical_texte_js' => 'Uma linha de javascript permite-lhe exibir de forma simples, em qualquer site que lhe pertença, as matérias recentemente publicadas neste site.', 'ical_texte_prive' => 'Este calendário, de uso estritamente pessoal, o informa sobre a atividade editorial privada deste site (tarefas e encontros pessoais, matérias e notas propostas...).', 'ical_texte_public' => 'Este calendário permite-lhe acompanhar a atividade pública deste site (matérias e notas publicadas).', - 'ical_texte_rss' => 'Você pode sindicar as novidades deste site em qualquer leitor de arquivos em formato XML/RSS (Rich Site Summary). É também o formato que permite ao SPIP ler as novidades publicadas em outros sites que utilizen um formato de troca de informações compatível (sites sindicados).', + 'ical_texte_rss' => 'Você pode sindicar as novidades deste site em qualquer leitor de arquivos em formato XML/RSS (Rich Site Summary). É também o formato que permite ao SPIP ler as novidades publicadas em outros sites que utilizem um formato de troca de informações compatível (sites sindicados).', 'ical_titre_js' => 'Javascript', 'ical_titre_mailing' => 'Mailing-list', 'ical_titre_rss' => 'Arquivos de sindicação', @@ -195,18 +175,15 @@ Estas informações deverão ser fornecidas pelo administrador do sistema ou da 'icone_arret_discussion' => 'Não participar mais desta discussão', 'icone_calendrier' => 'Calendário', 'icone_configuration' => 'Configuração', - 'icone_creer_auteur' => 'Criar um novo autor e associá-lo a esta matéria', - 'icone_creer_mot_cle' => 'Criar uma nova palavra-chave e ligá-la a esta matéria', - 'icone_creer_mot_cle_rubrique' => 'Criar uma nova palavra-chave e associá-la a esta seção', - 'icone_creer_mot_cle_site' => 'Criar uma nova palavra-chave e associá-la a este site', + 'icone_creer_auteur' => 'Criar um novo autor e vinculá-lo a esta matéria', + 'icone_creer_mot_cle' => 'Criar uma nova palavra-chave e vinculá-la a esta matéria', 'icone_creer_rubrique_2' => 'Criar uma nova seção', + 'icone_developpement' => 'Desenvolvimento', 'icone_edition' => 'Edição', - 'icone_envoyer_message' => 'Enviar esta mensagem', 'icone_ma_langue' => 'Meu idioma', 'icone_mes_infos' => 'Minhas informações', 'icone_mes_preferences' => 'Minhas preferências', 'icone_modifier_article' => 'Editar esta matéria', - 'icone_modifier_message' => 'Editar esta mensagem', 'icone_modifier_rubrique' => 'Editar esta seção', 'icone_publication' => 'Publicação', 'icone_relancer_signataire' => 'Reconfirmar o assinante', @@ -214,46 +191,38 @@ Estas informações deverão ser fornecidas pelo administrador do sistema ou da 'icone_retour_article' => 'Voltar para a matéria', 'icone_squelette' => 'Templates', 'icone_suivi_publication' => 'Acompanhamento da publicação', - 'icone_supprimer_cookie' => 'Suprimir o cookie de correspondência', - 'icone_supprimer_rubrique' => 'Suprimir esta seção', - 'icone_supprimer_signature' => 'Suprimir esta assinatura', + 'icone_supprimer_cookie' => 'Excluir o cookie de correspondência', + 'icone_supprimer_rubrique' => 'Excluir esta seção', + 'icone_supprimer_signature' => 'Excluir esta assinatura', 'icone_valider_signature' => 'Validar esta assinatura', 'image_administrer_rubrique' => 'Você pode administrar esta seção', - 'impossible_modifier_login_auteur' => 'Não foi possível alterar o login.', - 'impossible_modifier_pass_auteur' => 'Não foi possível alterar a senha.', 'info_1_article' => '1 matéria', - 'info_1_article_syndique' => '1 matéria sindicada', 'info_1_auteur' => '1 autor', 'info_1_message' => '1 mensagem', 'info_1_mot_cle' => '1 palavra-chave', 'info_1_rubrique' => '1 seção', - 'info_1_site' => '1 site', 'info_1_visiteur' => '1 visitante', 'info_activer_cookie' => 'Você pode ativar um cookie de correspondência, que lhe permitirá passar facilmente do site público para o site privado.', + 'info_activer_menu_developpement' => 'Exibir o menu Desenvolvimento', 'info_admin_etre_webmestre' => 'Me conceder direitos de webmaster', - 'info_admin_gere_rubriques' => 'este administrador gerencia as seguintes seções:', - 'info_admin_gere_toutes_rubriques' => 'Este administrador gerencia todas as seções', - 'info_admin_gere_toutes_rubriques_2' => 'Eu gerencio todas as seções', 'info_admin_je_suis_webmestre' => 'Eu sou webmaster', 'info_admin_statuer_webmestre' => 'Dar a este administrador os direitos de webmaster', 'info_admin_webmestre' => 'Este administrador é webmaster', 'info_administrateur' => 'Administrador', 'info_administrateur_1' => 'Administrador', - 'info_administrateur_2' => 'do site (utilize com cuidado)', + 'info_administrateur_2' => 'do site (use com cuidado)', 'info_administrateur_site_01' => 'Se você é administrador do site, por favor,', 'info_administrateur_site_02' => 'clique neste link', 'info_administrateurs' => 'Administradores', 'info_administrer_rubrique' => 'Você pode administrar esta seção', 'info_adresse' => 'no endereço:', + 'info_adresse_desinscription' => 'Endereço da desinscrição:', 'info_adresse_url' => 'Endereço (URL) do site público', 'info_afficher_par_nb' => 'Exibir por', - 'info_afficher_visites' => 'Exibir as visitas para:', 'info_aide_en_ligne' => 'Ajuda online SPIP', 'info_ajout_image' => 'Assim que você incluir imagens e documentos anexados a uma matéria, o SPIP pode criar para você, automaticamente, ícones (miniaturas) das imagens inseridas. Isto permite, por exemplo, criar automaticamente uma galeria ou um portfólio.', - 'info_ajout_participant' => 'O participante a seguir foi incluído:', 'info_ajouter_rubrique' => 'Incluir outra seção para administrar:', 'info_annonce_nouveautes' => 'Aviso das novidades', - 'info_anterieur' => 'anterior', 'info_article' => 'matéria', 'info_article_2' => 'matérias', 'info_article_a_paraitre' => 'As matérias pós-datadas para exibição', @@ -263,25 +232,24 @@ Estas informações deverão ser fornecidas pelo administrador do sistema ou da 'info_articles_miens' => 'Minhas matérias', 'info_articles_tous' => 'Todas as matérias', 'info_articles_trouves' => 'Matérias encontradas', - 'info_articles_trouves_dans_texte' => 'Matérias encontradas (no texto)', 'info_attente_validation' => 'Suas matérias aguardando validação', 'info_aucun_article' => 'Nenhuma matéria', - 'info_aucun_article_syndique' => 'Nenhuma matéria sindicada', 'info_aucun_auteur' => 'Nenhum autor', 'info_aucun_message' => 'Nenhuma mensagem', 'info_aucun_rubrique' => 'Nenhuma seção', - 'info_aucun_site' => 'Nenhum site', - 'info_aucun_visiteur' => 'Nenhum visitante', 'info_aujourdhui' => 'Hoje:', - 'info_auteur_message' => 'AUTOR DA MENSAGEM:', + 'info_auteur_gere_rubriques' => 'Este autor gerencia as seções a seguir:', + 'info_auteur_gere_toutes_rubriques' => 'Este autor gerencia todas as seções', + 'info_auteur_gere_toutes_rubriques_2' => 'Eu gerencio todas as seções', 'info_auteurs' => 'Os autores', 'info_auteurs_par_tri' => 'Autores@partri@', 'info_auteurs_trouves' => 'Autores encontrados', - 'info_authentification_externe' => 'Autentificação externa', + 'info_authentification_externe' => 'Autenticação externa', 'info_avertissement' => 'Aviso', 'info_barre_outils' => 'com sua barra de ferramentas?', 'info_base_installee' => 'A estrutura da sua base de dados foi instalada.', 'info_bio' => 'Biografia', + 'info_cache_desactive' => 'O cache está temporariamente desativado.', 'info_chapeau' => 'Introdução', 'info_chapeau_2' => 'Introdução:', 'info_chemin_acces_1' => 'Opções: Caminho de acesso no diretório', @@ -290,10 +258,8 @@ Estas informações deverão ser fornecidas pelo administrador do sistema ou da 'info_choix_base' => 'Terceiro passo:', 'info_classement_1' => 'o em @liste@', 'info_classement_2' => 'a em @liste@', - 'info_code_acces' => 'Não se esqueça dos seus códigos de acesso!', + 'info_code_acces' => 'Não se esqueça dos seus dados de conexão!', 'info_compatibilite_html' => 'Norma HTML a ser seguida', - 'info_compresseur_gzip' => 'É recomendavel que se verifique previamente se o serviço de hospedagem já comprime sistematicamente os scripts php; para isso, você pode, por exemplo, usar o serviço a seguir: @testgzip@', - 'info_compresseur_texte' => 'Se o seu servidor não comprime automaticamente as páginas html para enviá-las aos internautas, você pode tentar forçar esta compressão diminuindo o peso das páginas transferidas. Atenção: isto pode retardar consideravelmente alguns servidores.', 'info_config_suivi' => 'Se este endereço corresponde a uma mailing-list, você pode informar abaixo o endereço onde os participantes do site podem se inscrever. Este endereço pode ser um URL (por exemplo a página de inscrição na lista pela Web), ou um endereço de e-mail dotado de um assunto específico (par exemple: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Voce pode assinar a mailing-list deste site. Você irá receber por e-mail, os avisos de matérias e notas propostos para publicação.', 'info_confirmer_passe' => 'Confirmar a nova senha:', @@ -317,8 +283,6 @@ Estas informações deverão ser fornecidas pelo administrador do sistema ou da 'info_date_publication_anterieure' => 'Data de redação anterior:', 'info_date_referencement' => 'DATA DE REFERENCIAMENTO DESTE SITE:', 'info_derniere_etape' => 'Terminou!', - 'info_derniers_articles_publies' => 'Suas últimas matérias publicadas online', - 'info_desactiver_messagerie_personnelle' => 'Você pode ativar ou desativar o seu sistema pessoal de mensagens neste site.', 'info_descriptif' => 'Descrição:', 'info_desinstaller_plugin' => 'exclui os dados e desativa o plugin', 'info_discussion_cours' => 'Discussões em andamento', @@ -326,7 +290,6 @@ Estas informações deverão ser fornecidas pelo administrador do sistema ou da 'info_email_envoi' => 'Endereço de e-mail de envio (opcional)', 'info_email_envoi_txt' => 'Informe aqui o endereço a ser utilizado para enviar os e-mails (por padrão, o endereço de destino será usado como endereço de envio):', 'info_email_webmestre' => 'Endereço de e-mail do webmaster', - 'info_entrer_code_alphabet' => 'Informe o código de alfabeto a ser usado:', 'info_envoi_email_automatique' => 'Envio automático de e-mails', 'info_envoyer_maintenant' => 'Enviar agora', 'info_etape_suivante' => 'Avançar para a próxima etapa', @@ -337,32 +300,25 @@ Estas informações deverão ser fornecidas pelo administrador do sistema ou da 'info_facilite_suivi_activite' => 'Para facilitar o acompanhamento da atividade editorial do site, o SPIP pode enviar por e-mail, por exemplo a uma mailing-list de redatores, avisos dos pedidos de publicação e das validações das matérias.', 'info_fichiers_authent' => 'Arquivos de autenticação «.htpasswd»', 'info_forums_abo_invites' => 'O seu site comporta fóruns por assinatura; os visitantes são convidados a se registrar no site público.', - 'info_gauche_admin_effacer' => 'Esta página é acessível apenas aos responsáveis pelo site.

      Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao website.

      ', 'info_gauche_admin_tech' => 'Esta página é acessível apenas aos responsáveis pelo site.

      Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao website.

      ', 'info_gauche_admin_vider' => 'Esta página é acessível apenas aos responsáveis pelo site.

      Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao website.

      ', 'info_gauche_auteurs' => 'Aqui, você encontra todos os autores do site. Os status dos autores é indicado pela côr dos ícones (administrador = verde; redator = amarelo).', 'info_gauche_auteurs_exterieurs' => 'Os autores externos, sem acesso ao site, são indicados por um ícone azul; os autores excluídos por um ícone cinza.', - 'info_gauche_messagerie' => 'O sistema interno de mensagens permite a troca de mensagens entre redatores, a criação de lembretes (para seu uso pessoal) ou de exibir anúncios na página de entrada da área privada (se você fôr administrador).', - 'info_gauche_numero_auteur' => 'AUTOR NÚMERO', + 'info_gauche_messagerie' => 'O sistema interno de mensagens permite a troca de mensagens entre redatores, a criação de lembretes (para seu uso pessoal) ou exibir anúncios na página de entrada da área privada (se você for administrador).', 'info_gauche_statistiques_referers' => 'Esta página apresenta a lista dos referers, ou seja, dos sites que contêm links para o seu site, unicamente para ontem e hoje; esta lista é zerada a cada 24 horas.', 'info_gauche_visiteurs_enregistres' => 'Você encontrará aqui os visitantes registrados na área pública do site (fóruns por assinatura).', 'info_generation_miniatures_images' => 'Geração de miniaturas das imagens', - 'info_gerer_trad' => 'Gerenciar os links de tradução?', 'info_gerer_trad_objets' => '@objets@ : gerenciar os links de tradução', 'info_hebergeur_desactiver_envoi_email' => 'Alguns serviços de hospedagem desativam o envio automático de e-mails a partir dos seus servidores. Neste caso, as funcionalidades a seguir não funcionarão.', 'info_hier' => 'ontem:', - 'info_historique_activer' => 'Ativar o acompanhamento de versões', - 'info_historique_affiche' => 'Exibir esta versão', - 'info_historique_comparaison' => 'comparação', - 'info_historique_desactiver' => 'Desativar o acompanhamento de versões', - 'info_historique_texte' => 'O acompanhamento de versões permite conservar um histórico de todas as modificações feitas ao conteúdo de uma matéria, e de exibir as diferenças entre as versões sucessivas.', 'info_identification_publique' => 'Sua identificação pública...', 'info_image_process' => 'Por favor, selecione o melhor método de criação dos ícones, clicando na imagem correspondente.', 'info_image_process2' => 'Se nenhuma imagem está sendo exibida, o servidor que hospeda o seu site não foi configurado para utilizar essas ferramentas. Se você deseja usar essas funções, contate o responsável técnico e solicite as extensões «GD» ou «Imagick».', 'info_images_auto' => 'Imagens calculadas automaticamente', 'info_informations_personnelles' => 'Informações pessoais', + 'info_inscription' => 'Inscrição online', 'info_inscription_automatique' => 'Inscrição automática de novos redatores', 'info_jeu_caractere' => 'Conjunto de caracteres do site', 'info_jours' => 'dias', @@ -378,41 +334,33 @@ os autores excluídos por um ícone cinza.', 'info_logos' => 'Os ícones', 'info_maximum' => 'máximo:', 'info_meme_rubrique' => 'Na mesma seção', - 'info_message' => 'Mensagem de', - 'info_message_efface' => 'MENSAGEM APAGADA', 'info_message_en_redaction' => 'Suas mensagens em fase de redação', 'info_message_technique' => 'Mensagem técnica:', - 'info_messagerie_interne' => 'Mensagem interna', + 'info_messagerie_interne' => 'Mensageria interna', 'info_mise_a_niveau_base' => 'atualização da sua base SQL', 'info_mise_a_niveau_base_2' => '{{Atenção!}} Você instalou uma versão de arquivos SPIP {anterior} à que estava instalada no site: a sua base de dados corre o risco de se corromper e o seu site não funcionar mais.
      {{Reinstale os arquivos SPIP.}}', 'info_modification_enregistree' => 'Sua alteração foi gravada', - 'info_modifier_auteur' => 'Alterar o autor:', + 'info_modifier_auteur' => 'Editar o autor:', 'info_modifier_rubrique' => 'Editar a seção:', 'info_modifier_titre' => 'Editar: @titre@', 'info_mon_site_spip' => 'Meu site SPIP', - 'info_mot_sans_groupe' => '(Palavras-chave sem grupo...)', - 'info_moteur_recherche' => 'Motor de busca integrado', 'info_moyenne' => 'média:', - 'info_multi_articles' => 'Ativar o menu de idioma para as matérias?', 'info_multi_cet_article' => 'Idioma desta matéria:', 'info_multi_langues_choisies' => 'Por favor, selecione a seguir os idiomas à disposição dos redatores do seu site. Os idiomas já utilizados no site (no topo da lista) não podem ser desativados.', 'info_multi_objets' => '@objets@ : ativar o menu de idioma', - 'info_multi_rubriques' => 'Ativar o menu de idiomas nas seções?', 'info_multi_secteurs' => '... apenas para as seções situadas na raiz?', 'info_nb_articles' => '@nb@ matérias', - 'info_nb_articles_syndiques' => '@nb@ matérias sindicadas', 'info_nb_auteurs' => '@nb@ autores', 'info_nb_messages' => '@nb@ mensagens', 'info_nb_mots_cles' => '@nb@ palavras-chave', 'info_nb_rubriques' => '@nb@ seções', - 'info_nb_sites' => '@nb@ sites', 'info_nb_visiteurs' => '@nb@ visitantes', 'info_nom' => 'Nome', 'info_nom_destinataire' => 'Nome do destinatário', + 'info_nom_pas_conforme' => 'tags HTML não são permitidas', 'info_nom_site' => 'Nome do seu site', 'info_nombre_articles' => '@nb_articles@ matérias,', - 'info_nombre_partcipants' => 'PARTICIPANTES DA DISCUSSÃO:', 'info_nombre_rubriques' => '@nb_rubriques@ seções,', 'info_nombre_sites' => '@nb_sites@ sites,', 'info_non_deplacer' => 'Não mover...', @@ -420,19 +368,14 @@ Os idiomas já utilizados no site (no topo da lista) não podem ser desativados. 'info_non_envoi_liste_nouveautes' => 'Não enviar a lista de novidades', 'info_non_modifiable' => 'não pode ser modificado', 'info_non_suppression_mot_cle' => 'Eu não quero excluir esta palavra-chave.', - 'info_note_numero' => 'Nota @numero@', 'info_notes' => 'Observações', - 'info_nouveaux_message' => 'Novas mensagens', 'info_nouvel_article' => 'Nova matéria', 'info_nouvelle_traduction' => 'Nova tradução:', 'info_numero_article' => 'MATÉRIA NÚMERO:', 'info_obligatoire_02' => '(obrigatório)', 'info_option_accepter_visiteurs' => 'Aceitar a inscrição de visitantes do site público', - 'info_option_faire_suivre' => 'Encaminhar as mensagens dos fóruns aos autores das matérias', 'info_option_ne_pas_accepter_visiteurs' => 'Recusar a inscrição dos visitantes', 'info_options_avancees' => 'OPÇÕES AVANÇADAS', - 'info_ortho_activer' => 'Ativar o corretor ortográfico', - 'info_ortho_desactiver' => 'Desativar o corretor ortográfico', 'info_ou' => 'ou...', 'info_page_interdite' => 'Página não autorizada', 'info_par_nom' => 'por nome', @@ -442,36 +385,26 @@ Os idiomas já utilizados no site (no topo da lista) não podem ser desativados. 'info_passe_trop_court' => 'Senha muito curta.', 'info_passe_trop_court_car_pluriel' => 'A senha deve conter pelo menos @nb@ caracteres.', 'info_passes_identiques' => 'As duas senhas não são idênticas.', - 'info_pense_bete_ancien' => 'Seus lembretes antigos', 'info_plus_cinq_car' => 'mais de 5 caracteres', 'info_plus_cinq_car_2' => '(Mais de 5 caracteres)', 'info_plus_trois_car' => '(Mais de 3 caracteres)', 'info_popularite' => 'popularidade: @popularite@; visitas: @visites@', - 'info_popularite_4' => 'popularidade: @popularite@ ; visitas: @visites@', 'info_post_scriptum' => 'Rodapé', 'info_post_scriptum_2' => 'Rodapé:', 'info_pour' => 'para', - 'info_preview_admin' => 'Apenas os administradores podem visualizar o site', - 'info_preview_comite' => 'Todos os redatores podem visualizar o site', - 'info_preview_desactive' => 'A visualização está totalmente desativada', - 'info_preview_texte' => 'É possível visualizar o site como se todas as matérias e notas (tendo pelo menos o status de «proposta») estivessem publicadas. Esta possibilidade deve estar disponível apenas para os administradores, para todos os redatores, ou para ninguém?', - 'info_principaux_correspondants' => 'Seus correspondentes principais', + 'info_preview_texte' => 'É possível visualizar os diferentes elementos editoriais do site que tenham pelo menos o status de «proposto», bem como os elementos em fase de redação de que se é autor. Esta funcionalidade deve estar disponível para os administradores, para os redatores, ou para ninguém?', 'info_procedez_par_etape' => 'proceder passo-a-passo', 'info_procedure_maj_version' => 'o procedimento de atualização deve ser rodado para adaptar a base de dados à nova versão do SPIP.', - 'info_proxy_ok' => 'Teste do proxy com sucesso', + 'info_proxy_ok' => 'Proxy testado com sucesso', 'info_ps' => 'P.S.', 'info_publier' => 'publicar', 'info_publies' => 'Suas matérias publicadas online', 'info_question_accepter_visiteurs' => 'Se os templates do seu site prevêem o cadastramento de visitantes sem acesso à área privada, por favor, ative a opção abaixo:', 'info_question_inscription_nouveaux_redacteurs' => 'Você quer aceitar inscrições de novos redatores a partir do site público? Se você aceitar, os visitantes poderão se cadastrar através de um formulário automatizado, tendo acesso à área privada para propôr as suas próprias matérias.
      Durante a fase de inscrição, os usuários recebem um e-mail automático, fornecendo-lhes os seus códigos de acesso à área privada. Alguns serviços de hospedagem desativam o envio de e-mails a partir dos seus servidores: nesse caso, a inscrição automática é impossível.
      ', - 'info_question_utilisation_moteur_recherche' => 'Você deseja usar o motor de busca integrado ao SPIP? (desativá-lo acelera o funcionamento do sistema.)', - 'info_question_vignettes_referer_non' => 'Não exibir as capturas dos sites de origem das visitas', 'info_qui_edite' => '@nom_auteur_modif@ trabalhou neste conteúdo há @date_diff@ minutos', 'info_racine_site' => 'Raiz do site', 'info_recharger_page' => 'Por favor, atualize esta página em alguns instantes.', - 'info_recherche_auteur_a_affiner' => 'Demasiados resultados para "@cherche_auteur@"; por favor, refine a consulta.', - 'info_recherche_auteur_ok' => 'Demasiados redatores encontrados para "@cherche_auteur@":', - 'info_recherche_auteur_zero' => 'Nenhum resultado para « @cherche_auteur@ ».', + 'info_recherche_auteur_zero' => 'Nenhum resultado para «@cherche_auteur@».', 'info_recommencer' => 'Por favor, recomece.', 'info_redacteur_1' => 'Redator', 'info_redacteur_2' => 'com acesso à área privada (recomendado)', @@ -479,17 +412,17 @@ Os idiomas já utilizados no site (no topo da lista) não podem ser desativados. 'info_redaction_en_cours' => 'EM FASE DE REDAÇÃO', 'info_redirection' => 'Redirecionamento', 'info_redirection_activee' => 'O redirecionamento foi ativado.', + 'info_redirection_boucle' => 'Você tentou redirecionar a matéria para ela mesma.', 'info_redirection_desactivee' => 'O redirecionamento foi excluído.', 'info_refuses' => 'Suas matérias recusadas', 'info_reglage_ldap' => 'Opções: Configuração da importação LDAP', 'info_renvoi_article' => 'Redirecionamento. Esta matéria redireciona para a página:', 'info_reserve_admin' => 'Apenas os administradores podem alterar este endereço.', 'info_restreindre_rubrique' => 'Restringir o gerenciamento à seção:', - 'info_resultat_recherche' => 'Resultados da pesquisa:', + 'info_resultat_recherche' => 'Resultados da busca:', 'info_rubriques' => 'Seções', 'info_rubriques_02' => 'seções', 'info_rubriques_trouvees' => 'Seções encontradas', - 'info_rubriques_trouvees_dans_texte' => 'Seções encontradas (no texto)', 'info_sans_titre' => 'Sem título', 'info_selection_chemin_acces' => 'Selecione a seguir o caminho para acessar o diretório:', 'info_signatures' => 'assinaturas', @@ -499,23 +432,21 @@ Os idiomas já utilizados no site (no topo da lista) não podem ser desativados. 'info_site_reference_2' => 'Site referenciado', 'info_site_web' => 'Website:', 'info_sites' => 'sites', - 'info_sites_lies_mot' => 'Os sites referenciados ligados a esta palavra-chave', + 'info_sites_lies_mot' => 'Os sites referenciados vinculados a esta palavra-chave', 'info_sites_proxy' => 'Utilizar um proxy', 'info_sites_trouves' => 'Sites encontrados', - 'info_sites_trouves_dans_texte' => 'Sites encontrados (no texto)', 'info_sous_titre' => 'Subtítulo:', 'info_statut_administrateur' => 'Administrador', 'info_statut_auteur' => 'Status deste autor:', 'info_statut_auteur_2' => 'Eu sou', 'info_statut_auteur_a_confirmer' => 'Inscrição a confirmar', 'info_statut_auteur_autre' => 'Outro status:', - 'info_statut_efface' => 'Excluído', 'info_statut_redacteur' => 'Redator', 'info_statut_utilisateurs_1' => 'Status padrão dos usuários importados', 'info_statut_utilisateurs_2' => 'Escolha o status atribuído às pessoas que constam do diretório LDAP, quando elas se conectarem pela primeira vêz. Você poderá, em seguida, alterar caso a caso este valor para cada autor.', 'info_suivi_activite' => 'Acompanhamento da atividade editorial', 'info_surtitre' => 'Sobretítulo:', - 'info_syndication_integrale_1' => 'O seu site propõe arquivos de sindicação (ver « @titre@ »).', + 'info_syndication_integrale_1' => 'O seu site propõe arquivos de sindicação (ver «@titre@»).', 'info_syndication_integrale_2' => 'Você deseja transmitir as matérias integralmente, ou difundir apenas um resumo de algumas centenas de caracteres?', 'info_table_prefix' => 'Você pode alterar o prefixo do nome das tabelas de dados (indispensável no caso de pretender instalar diversos sites na mesma base de dados). Este prefixo deve estar em minúsculas, não acentuadas, e sem espaços.', 'info_taille_maximale_images' => 'SPIP irá testar o tamanho máximo das imagens que o sistema pode tratar (em milhões de pixels).
      As imagens muito grandes não serão reduzidas.', @@ -532,7 +463,6 @@ Os idiomas já utilizados no site (no topo da lista) não podem ser desativados. 'info_tous_articles_presents' => 'Todas as matérias publicadas nesta seção', 'info_tous_articles_refuses' => 'Todas as matérias recusadas', 'info_tous_les' => 'todos os:', - 'info_tous_redacteurs' => 'Anúncios para todos os redatores', 'info_tout_site' => 'Todo o site', 'info_tout_site2' => 'A matéria não foi traduzida para este idioma.', 'info_tout_site3' => 'A matéria foi traduzida para este idioma, mas foram feitas alterações na matéria de referência. A tradução procisa ser atualizada.', @@ -548,7 +478,8 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'info_une_rubrique_02' => '1 seção', 'info_url' => 'URL:', 'info_url_proxy' => 'URL do proxy', - 'info_url_site' => 'URL DO SITE:', + 'info_url_proxy_pas_conforme' => 'O URL do proxy não é válido.', + 'info_url_site_pas_conforme' => 'O URL do site não é válido.', 'info_url_test_proxy' => 'URL de teste', 'info_urlref' => 'Link hipertexto:', 'info_utilisation_spip' => 'Você pode agora começar a utilizar o sistema de publicação assistida...', @@ -559,7 +490,6 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'info_visiteurs_02' => 'Visitantes do site público', 'info_webmestre_forces' => 'Os webmasters são definidos em @file_options@.', 'install_adresse_base_hebergeur' => 'Endereço da base de dados atribuído pelo serviço de hospedagem:', - 'install_base_ok' => 'A base @base@ foi reconhecida', 'install_connect_ok' => 'A nova base de dados foi corretamente declarada sob o nome de servidor @connect@.', 'install_echec_annonce' => 'A instalação irá, provavelmente, falhar, ou levar a um site que não funciona...', 'install_extension_mbstring' => 'O SPIP não funciona com:', @@ -588,8 +518,6 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'item_activer_messages_avertissement' => 'Ativar as mensagens de aviso', 'item_administrateur_2' => 'administrador', 'item_afficher_calendrier' => 'Exibir no calendário', - 'item_autoriser_documents_joints' => 'Autorizar os documentos anexos às matérias', - 'item_autoriser_documents_joints_rubriques' => 'Autorizar os documentos nas seções', 'item_autoriser_syndication_integrale' => 'Difundir a íntegra das matérias nos arquivos de sindicação', 'item_choix_administrateurs' => 'os administradores', 'item_choix_generation_miniature' => 'Gerar automaticamente as miniaturas das imagens.', @@ -597,7 +525,6 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'item_choix_redacteurs' => 'os redatores', 'item_choix_visiteurs' => 'os visitantes do site público', 'item_creer_fichiers_authent' => 'Criar os arquivos .htpasswd', - 'item_limiter_recherche' => 'Limitar a busca às informações contida no seu site', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Ativar as mesagens internas e a agenda', 'item_mots_cles_association_articles' => 'às matérias', @@ -607,22 +534,15 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'item_non_accepter_inscriptions' => 'Não aceitar inscrições', 'item_non_activer_messages_avertissement' => 'Sem mensagens de aviso', 'item_non_afficher_calendrier' => 'Não exibir no calendário', - 'item_non_autoriser_documents_joints' => 'Não permitir os documentos nas matérias', - 'item_non_autoriser_documents_joints_rubriques' => 'Não autorizar os documentos nas seções', 'item_non_autoriser_syndication_integrale' => 'Difundir apenas um resumo', - 'item_non_compresseur' => 'Desativar a compressão', 'item_non_creer_fichiers_authent' => 'Não criar os arquivos', - 'item_non_gerer_statistiques' => 'Não gerenciar as estatísticas', - 'item_non_limiter_recherche' => 'Extender a busca ao conteúdo dos sites referenciados', 'item_non_messagerie_agenda' => 'Desativar as mensagens internas e a agenda', 'item_non_publier_articles' => 'Não publicar as matérias antes da data de publicação fixada.', - 'item_non_utiliser_moteur_recherche' => 'Não utilizar o motor de busca', 'item_nouvel_auteur' => 'Novo autor', 'item_nouvelle_rubrique' => 'Nova seção', 'item_oui' => 'Sim', 'item_publier_articles' => 'Publicar as matérias seja qual for a sua data de publicação.', 'item_reponse_article' => 'Resposta à matéria', - 'item_utiliser_moteur_recherche' => 'Utilizar o motor de busca', 'item_version_html_max_html4' => 'Limitar-se ao HTML4 no site público', 'item_version_html_max_html5' => 'Permitir o HTML5', 'item_visiteur' => 'Visitante', @@ -635,7 +555,7 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'label_bando_outils_afficher' => 'Exibir as ferramentas', 'label_bando_outils_masquer' => 'Esconder as ferramentas', 'label_choix_langue' => 'Escolha o seu idioma', - 'label_nom_fichier_connect' => 'IInforme o nome usado por este servidor', + 'label_nom_fichier_connect' => 'Informe o nome usado por este servidor', 'label_slogan_site' => 'Slogan do site', 'label_taille_ecran' => 'Largura da tela', 'label_texte_et_icones_navigation' => 'Menu de navegação', @@ -643,19 +563,19 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'ldap_correspondance' => 'herança do campo @champ@', 'ldap_correspondance_1' => 'Herança dos campos LDAP', 'ldap_correspondance_2' => 'Para cada um dos campos SPIP a seguir, indique o nome do campo LDAP correspondente. Deixe em branco para não preencher, separe por espaços ou vírgulas para tentar vários campos LDAP.', - 'lien_ajout_destinataire' => 'Incluir este destinatário', 'lien_ajouter_auteur' => 'Incluir este autor', - 'lien_ajouter_participant' => 'Incluir um participante', 'lien_ajouter_une_rubrique' => 'Incluir esta seção', 'lien_email' => 'e-mail', 'lien_nom_site' => 'NOME DO SITE:', + 'lien_rapide_contenu' => 'Ir para o conteúdo', + 'lien_rapide_navigation' => 'Ir para a navegação', + 'lien_rapide_recherche' => 'Ir para a busca', 'lien_retirer_auteur' => 'Retirar o autor', 'lien_retirer_rubrique' => 'Excluir a seção', 'lien_retirer_tous_auteurs' => 'Retirar todos os autores', - 'lien_retirer_toutes_rubriques' => 'Excluir todas as seções', - 'lien_retrait_particpant' => 'excluir este participante', + 'lien_retirer_toutes_rubriques' => 'Retirar todas as seções', 'lien_site' => 'site', - 'lien_supprimer_rubrique' => 'excluir esta seção', + 'lien_tout_decocher' => 'Desmarcar tudo', 'lien_tout_deplier' => 'Expandir tudo', 'lien_tout_replier' => 'Retrair tudo', 'lien_tout_supprimer' => 'Excluir tudo', @@ -663,12 +583,12 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'lien_trier_nombre_articles' => 'Ordenar por número de matérias', 'lien_trier_statut' => 'Ordenar pelo status', 'lien_voir_en_ligne' => 'VER ONLINE:', - 'logo_article' => 'Logo da matéria', - 'logo_auteur' => 'Logo do autor', - 'logo_rubrique' => 'Logo da seção', - 'logo_site' => 'Logo deste site', - 'logo_standard_rubrique' => 'Logo padrão das seções', - 'logo_survol' => 'Logo para mouseOver', + 'logo_article' => 'Ícone da matéria', + 'logo_auteur' => 'Ícone do autor', + 'logo_rubrique' => 'Ícone da seção', + 'logo_site' => 'Ícone deste site', + 'logo_standard_rubrique' => 'Ícone padrão das seções', + 'logo_survol' => 'Ícone para mouseOver', // M 'menu_aide_installation_choix_base' => 'Seleção da sua base', @@ -676,17 +596,17 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'module_raccourci' => 'Atalho', 'module_texte_affiche' => 'Texto exibido', 'module_texte_explicatif' => 'Você pode inserir os atalhos a seguir nos templates do seu site público. Eles serão traduzidos automaticamente para os idiomas para os quais exista um arquivo de idioma.', - 'module_texte_traduction' => 'O arquivo de idioma « @module@ » está disponível em:', + 'module_texte_traduction' => 'O arquivo de idioma «@module@» está disponível em:', 'mois_non_connu' => 'desconhecido', // N - 'nouvelle_version_spip' => 'A versão @version@ do SPIP está disponível.', + 'nouvelle_version_spip' => 'A versão @version@ do SPIP está disponível', + 'nouvelle_version_spip_majeure' => 'Uma nova versão SPIP @version@ está disponível', // O 'onglet_contenu' => 'Conteúdo', 'onglet_declarer_une_autre_base' => 'Configurar outra base', 'onglet_discuter' => 'Discutir', - 'onglet_documents' => 'Documentos', 'onglet_interactivite' => 'Interatividade', 'onglet_proprietes' => 'Propriedades', 'onglet_repartition_actuelle' => 'atualmente', @@ -695,6 +615,7 @@ As traduções estão associadas ao original, numa côr que indica o seu status: // P 'page_pas_proxy' => 'Esta página não deve passar pelo proxy', 'pas_de_proxy_pour' => 'Se necessário, indique as máquinas ou domínios para os quais este proxy não se aplica (por exemplo: @exemple@)', + 'phpinfo' => 'Configuração PHP', 'plugin_charge_paquet' => 'Carregamento do pacote @name@', 'plugin_charger' => 'Transferir', 'plugin_erreur_charger' => 'erro: não foi possível carregar @zip@', @@ -727,9 +648,13 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'plugin_info_plugins_dist_1' => 'Os plugins abaixo são carregados e ativados no diretório @plugins_dist@.', 'plugin_info_plugins_dist_2' => 'Eles não são desativáveis.', 'plugin_info_telecharger' => 'transferir de @url@ e instalar em @rep@', + 'plugin_info_upgrade_ok' => 'Atualização bem sucedida', 'plugin_librairies_installees' => 'Bibliotecas instaladas', + 'plugin_necessite_extension_php' => 'Requer a extensão PHP @plugin@ na versão @version@.', + 'plugin_necessite_extension_php_sans_version' => 'Requer a extensão PHP @plugin@', 'plugin_necessite_lib' => 'Este plugin precisa da biblioteca @lib@', - 'plugin_necessite_plugin' => 'É necessário o plugin @plugin@ na versão @version@, pelo menos.', + 'plugin_necessite_php' => 'Requer @plugin@ na versão @version@.', + 'plugin_necessite_plugin' => 'Precisa do plugin @plugin@, na versão @version@.', 'plugin_necessite_plugin_sans_version' => 'Precisa do plugin @plugin@', 'plugin_necessite_spip' => 'É necessário o SPIP na versão @version@, pelo menos.', 'plugin_source' => 'fonte: ', @@ -737,8 +662,11 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'plugin_titre_automatique_ajouter' => 'Incluir plugins', 'plugin_titre_installation' => 'Instalação do plugin @plugin@', 'plugin_titre_modifier' => 'Meus plugins', + 'plugin_utilise_extension_php' => 'Utiliza a extensão PHP @plugin@ na versão @version@.', + 'plugin_utilise_php' => 'Utiliza @plugin@ na versão @version@.', + 'plugin_utilise_plugin' => 'Utiliza o plugin @plugin@ na versão @version@.', 'plugin_zip_active' => 'Continue para o ativar', - 'plugin_zip_adresse' => 'Indique abaixo o endereço de uma arquivo zip de plugin a ser transferido, ou ainda o endereço de uma lista de plugins.', + 'plugin_zip_adresse' => 'Indique abaixo o endereço de um arquivo zip de plugin a ser transferido, ou ainda o endereço de uma lista de plugins.', 'plugin_zip_adresse_champ' => 'Endereço do plugin ou da lista', 'plugin_zip_content' => 'Ele contém os arquivos a seguir (@taille@),
      prontos para serem instalados no diretório @rep@', 'plugin_zip_installe_finie' => 'O arquivo @zip@ foi descompactado e instalado.', @@ -756,7 +684,7 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'plugins_liste' => 'Lista dos plugins', 'plugins_liste_dist' => 'Plugins bloqueados', 'plugins_recents' => 'Plugins recentes.', - 'plugins_tous_liste' => 'Todas', + 'plugins_tous_liste' => 'Todos', 'plugins_vue_hierarchie' => 'Hierarquia', 'plugins_vue_liste' => 'Lista', 'protocole_ldap' => 'Versão do protocolo:', @@ -773,10 +701,12 @@ As traduções estão associadas ao original, numa côr que indica o seu status: // R 'repertoire_plugins' => 'Diretório:', + 'required' => '(obrigatório)', // S 'sans_heure' => 'sem hora', - 'statut_admin_restreint' => '(admin limitado)', # MODIF + 'statut_admin_restreint' => '(admin limitado)', + 'statut_webmestre' => 'webmaster', // T 'tache_cron_asap' => 'Tarefa CRON @function@ (ASAP)', @@ -799,22 +729,19 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'texte_article_virtuel_reference' => 'Matéria virtual: matéria referenciada no seu site SPIP, mas redirecionada para um outro URL. Para cancelar o redirecionamento, apague o URL abaixo.', 'texte_aucun_resultat_auteur' => 'Nenhum resultado para "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Este site pode monitorar permanentemente a lista de editores conectados, permitindo-lhe trocar mensagens em tempo real. Você pode decidir não aparecer nessa lista (ficando "invisível" para os outros usuários).', - 'texte_auteur_messagerie_1' => 'Este site permite a troca de mensagens e o estabelecimento de fóruns de discussão privados entre os participantes do site. Você pode decidir não participar dessas trocas.', 'texte_auteurs' => 'OS AUTORES', 'texte_choix_base_1' => 'Escolha a sua base:', 'texte_choix_base_2' => 'O servidor SQL contém várias bases de dados.', 'texte_choix_base_3' => 'Escolha abaixo a que lhe foi atribuída pelo seu serviço de hospedagem:', 'texte_choix_table_prefix' => 'Prefixo das tabelas:', - 'texte_commande_vider_tables_indexation' => 'Use este comando para esvaziar as tabelas de indexação usadas pelo motor de busca integrado ao SPIP. Isto permitirá ganhar espaço em disco.', 'texte_compatibilite_html' => 'Você pode solicitar ao SPIP que gere, no site público, código compatível com o padrão HTML4, ou permitir que ele use as possibilidades mais modernas do HTML5.', 'texte_compatibilite_html_attention' => 'Não há nenhum risco em ativar a opção HTML5 mas, se você o fizer, as páginas do seu site deverão começar com o código a seguir, para continuarem válidas: .', - 'texte_compresse_ou_non' => '(pode ser compactado ou não)', 'texte_compte_element' => '@count@ elemento', 'texte_compte_elements' => '@count@ elementos', 'texte_conflit_edition_correction' => 'Por favor, controle abaixo as diferenças entre as duas versões do texto; você pode também copiar as suas modificações e depois recomeçar.', 'texte_connexion_mysql' => 'Consulte as informações fornecidas pelo seu serviço de hospedagem: nelas, você deverá encontrar o servidor de base de dados fornecido e os seus dados de conexão ao servidor SQL.', 'texte_contenu_article' => '(Conteúdo da matéria em poucas palavras.)', - 'texte_contenu_articles' => 'De acoordo com o layout adotado pelo seu site, você poderá decidir se certos elementos das matérias serão utilizados. Use a listagem abaixo para indicar quais elementos estão disponíveis.', + 'texte_contenu_articles' => 'De acordo com o layout adotado pelo seu site, você poderá decidir se certos elementos das matérias serão utilizados. Use a listagem abaixo para indicar quais elementos estão disponíveis.', 'texte_crash_base' => 'Se a sua base de dados se corrompeu, você poderá tentar uma reparação automática.', 'texte_creer_rubrique' => 'Antes de poder escrever matérias, você precisa criar uma seção.', 'texte_date_creation_article' => 'DATA DE CRIAÇÃO DA MATÉRIA:', @@ -823,38 +750,30 @@ As traduções estão associadas ao original, numa côr que indica o seu status: 'texte_date_publication_anterieure_nonaffichee' => 'Não exibir a data de redação anterior.', 'texte_date_publication_article' => 'DATA DE PUBLICAÇÃO ONLINE:', 'texte_date_publication_objet' => 'Data de publicação online:', - 'texte_descriptif_petition' => 'Descrição da petição', + 'texte_definir_comme_traduction_rubrique' => 'Esta seção é uma tradução da seção número:', 'texte_descriptif_rapide' => 'Descrição rápida', 'texte_effacer_base' => 'Apagar a base de dados do SPIP', - 'texte_effacer_donnees_indexation' => 'Apagar os dados de indexação', 'texte_effacer_statistiques' => 'Apagar as estatísticas', 'texte_en_cours_validation' => 'Os conteúdos abaixo estão propostos para publicação.', 'texte_enrichir_mise_a_jour' => 'Você pode enriquecer a diagramação do seu texto usando «atalhos tipográficos».', 'texte_fichier_authent' => 'O SPIP pode criar os arquivos especiais .htpasswd e .htpasswd-admin no diretório @dossier@?

      Estes arquivos podem servir para restringir o acesso aos autores e administradores em outras áreas do seu site (programas externos de estatísticas, por exemplo).

      -Se eles não forem úteis, você poderá deixar esta opção com o seu valor padrão (sem criar os arquivos).

      ', # MODIF +Se eles não forem úteis, você poderá deixar esta opção com o seu valor padrão (sem criar os arquivos).

      ', 'texte_informations_personnelles_1' => 'O sistema vai criar agora um acesso personalizado ao site.', 'texte_informations_personnelles_2' => '(Nota: trata-se de uma reinstalação, se o seu acesso funciona corretamente, você pode', 'texte_introductif_article' => '(Texto introdutório da matéria.)', 'texte_jeu_caractere' => 'É aconselhável usar no seu site o alfabeto universal (utf-8): ele permite a exibição de textos em todos os idiomas, e não tem problemas de compatibilidade com os navegadores modernos.', - 'texte_jeu_caractere_2' => 'Atenção: esta opção não provoca a conversão dos textos já gravados na base de dados.', 'texte_jeu_caractere_3' => 'O seu site está configurado atualmente com o conjunto de caracteres:', 'texte_jeu_caractere_4' => 'Se isso não corresponde à realidade dos seus dados (por ex., em seguimento a um restauro da base de dados), ou se você lançou este site e deseja utilizar um outro conjunto de caracteres, por favor, indique-o aqui:', - 'texte_jeu_caractere_conversion' => 'Note: você pode decidir converter de uma vez todo o conjunto de textos do seu site (matérias, notas, fóruns etc.) para o alfabeto utf-8, indo para a página de conversão para utf-8.', - 'texte_lien_hypertexte' => '(Se a sua mensagem se refere a uma matéria publicada na web, ou a uma página fornecendo informações adicionais, por favor, informe o título da página e respectivo URL.)', 'texte_login_ldap_1' => '(Deixe em branco para acesso anônimo, ou informe o caminho completo, por exemplo «uid=dupont, ou=users, dc=mon-domaine, dc=com».)', - 'texte_login_precaution' => 'Atenção! Este é o login com o qual você está conectado agora. Use este formulário com precaução...', - 'texte_message_edit' => 'Atenção: esta mensagem pode ser alterada por todos os administradores do site, e é visívell para todos os redatores. Use os avisos apenas para difundir os eventos importantes da vida do site.', + 'texte_login_precaution' => 'Atenção! Este é o login com o qual você está conectado agora. Use este formulário com cautela...', 'texte_messagerie_agenda' => 'As mensagens internas permitem que os redatores se comuniquem entre si, diretamente da área privada do site. Elas estão associadas a uma agenda.', 'texte_mise_a_niveau_base_1' => 'Você acabou de atualizar os arquivos do SPIP. Agora é necessário atualizar a base de dados do site.', 'texte_modifier_article' => 'Editar a matéria:', - 'texte_moteur_recherche_active' => 'O motor de busca foi ativado. Use este comando se quiser proceder a uma reindexação rápida (após restauração de uma cópia de segurança, por exemplo). Note que os documentos modificados de modo normal (através da interface do SPIP) são automaticamente reindexados: este comando só tem utilidade pontual.', - 'texte_moteur_recherche_non_active' => 'O motor de busca não está ativado.', 'texte_multilinguisme' => 'Se você deseja gerar objetos em diversos idiomas, com uma navegação complexa, você pode incluir um menu de seleção de idioma nesses objetos, de acordo com a estrutura do seu site.', 'texte_multilinguisme_trad' => 'Você pode, igualmente, ativar um sistema de gerenciamento de links entre as diferentes traduções em certos objetos.', - 'texte_non_compresse' => 'nã compactado (seu servidor não suporta esta funcionalidade)', - 'texte_nouveau_message' => 'Nova mensagem', + 'texte_non_compresse' => 'não compactado (seu servidor não suporta esta funcionalidade)', 'texte_nouvelle_version_spip_1' => 'Você instalou uma nova versão do SPIP.', 'texte_nouvelle_version_spip_2' => 'Esta nova versão precisa de uma atualização mais completa do que o normal. Se você é o webmaster do site, por favor, apague o arquivo @connect@ e retome a instalação de forma a incluir os seus parâmetros de conexão à base de dados.

      (NB.: se você não se lembra dos seus parâmetros de conexão, consulte o arquivo @connect@ antes de apagá-lo...)

      ', 'texte_operation_echec' => 'Volte à página anterior, escolha uma outra base de dados ou crie uma nova. Verifique as informações fornecidas pelo seu serviço de hospedagem.', @@ -867,7 +786,6 @@ Agora é necessário atualizar a base de dados do site.', 'texte_publication_articles_post_dates' => 'Que comportamento o SPIP deve adotar face às matérias em que a data de publicação está pré-datada?', 'texte_rappel_selection_champs' => '[Não se esqueça de selecionar corretamente este campo.]', 'texte_recalcul_page' => 'Se você quiser recalcular uma única página, passe para a área pública e clique no botão «atualizar».', - 'texte_recapitiule_liste_documents' => 'Esta página compila a lista de documentos que você anexou às seções. Para modificar as informações de cada documento, siga o link para a página da respectiva seção.', 'texte_recuperer_base' => 'Reparar a base de dados', 'texte_reference_mais_redirige' => 'matéria referenciada no seu site em SPIP, mas redirecionada para outro URL.', 'texte_requetes_echouent' => 'Já que certas solicitações SQL falharam sistematicamente e sem razão aparente, é possível que a causa esteja na base de dados em si.

      @@ -882,30 +800,23 @@ Se o problema persistir, contate o seu serviço de hospedagem.

      ', 'texte_statistiques_visites' => '(barras escuras: domingo / curva escura: evolução da média)', 'texte_statut_attente_validation' => 'aguardando validação', 'texte_statut_publies' => 'publicadas online', - 'texte_statut_refuses' => 'recusados', + 'texte_statut_refuses' => 'recusadas', 'texte_suppression_fichiers' => 'Use este comando para excluir todos os arquivos que constam do cache do SPIP. Isto permite, por exemplo, forçar a reconstrução de todas as páginas, caso você tenha feito alterações importantes no layout ou na estrutura do site.', 'texte_sur_titre' => 'Sobretítulo', 'texte_table_ok' => ': esta tabela está OK.', - 'texte_tables_indexation_vides' => 'As tabelas de indexação do motor de busca estão vazias.', 'texte_tentative_recuperation' => 'Tentativa de reparação', 'texte_tenter_reparation' => 'Tentar uma reparação da base de dados', 'texte_test_proxy' => 'Para testar este proxy, informe aqui o endereço de um website que você deseje testar.', 'texte_titre_02' => 'Título:', 'texte_titre_obligatoire' => 'Título [obrigatório]', 'texte_travail_article' => '@nom_auteur_modif@ trabalhou nesta matéria há @date_diff@ minutos', - 'texte_travail_collaboratif' => 'Se é frequente acontecer de mais de um redator trabalhar em uma mesma matéria, o sistema pode exibir as matérias recentemente «abertas», de modo a evitar modificações concorrentes.Esta opção está desativada por padrão para evitar a exibição de mensagens de aviso intempestivas.', - 'texte_trop_resultats_auteurs' => 'Demasiados resultados para "@cherche_auteur@"; por favor, refine a pesquisa.', - 'texte_unpack' => 'transferência da última versão', - 'texte_utilisation_moteur_syndiques' => 'Ao utilizar o motor de busca integrado ao SPIP, você poderá efetuar buscas nos sites e nas matérias sindicadas de dois modos diferentes.
      - A mais simples consiste em procurar unicamente nos títulos e nas descrições das matérias.
      - O outro método, muito mais potente, permite ao SPIP procurar no texto dos sites referenciados. Se você referenciar um site, o SPIP irá efetuar a busca no próprio texto do site.', - 'texte_utilisation_moteur_syndiques_2' => 'Este método obriga o SPIP a visitar regularmente os sites referenciados, o que pode provocar um ligeiro retardamento do seu próprio site.', + 'texte_travail_collaboratif' => 'Se é frequente acontecer de mais de um redator trabalhar em uma mesma matéria, o sistema pode exibir as matérias recentemente "abertas", de modo a evitar modificações concorrentes. Esta opção está desativada por padrão, para evitar a exibição de mensagens de aviso desnecessárias.', 'texte_vide' => 'vazia', 'texte_vider_cache' => 'Esvaziar o cache', - 'titre_admin_effacer' => 'Manutenção técnica', 'titre_admin_tech' => 'Manutenção técnica', 'titre_admin_vider' => 'Manutenção técnica', 'titre_ajouter_un_auteur' => 'Incluir um autor', 'titre_ajouter_un_mot' => 'Incluir uma palavra-chave', - 'titre_ajouter_une_rubrique' => 'Incluir uma seção', 'titre_cadre_afficher_article' => 'Exibir as matérias', 'titre_cadre_afficher_traductions' => 'Exibir o status das traduções para os idiomas a seguir:', 'titre_cadre_ajouter_auteur' => 'INCLUIR UM AUTOR:', @@ -920,6 +831,7 @@ Se o problema persistir, contate o seu serviço de hospedagem.

      ', 'titre_config_langage' => 'Configurar o idioma', 'titre_configuration' => 'Configuração do site', 'titre_configurer_preferences' => 'Configurar as suas preferências', + 'titre_configurer_preferences_menus' => 'Configurar as suas preferências de menus', 'titre_conflit_edition' => 'Conflito durante a edição', 'titre_connexion_ldap' => 'Opções: Sua conexão LDAP', 'titre_groupe_mots' => 'GRUPO DE PALAVRAS-CHAVE:', @@ -932,54 +844,28 @@ Se o problema persistir, contate o seu serviço de hospedagem.

      ', 'titre_naviguer_dans_le_site' => 'Navegar no site...', 'titre_nouvelle_rubrique' => 'Nova seção', 'titre_numero_rubrique' => 'SEÇÃO NÚMERO:', - 'titre_page_admin_effacer' => 'Manutenção técnica: apagar a base', 'titre_page_articles_edit' => 'Editar: @titre@', 'titre_page_articles_page' => 'As matérias', 'titre_page_articles_tous' => 'Todo o site', - 'titre_page_auteurs' => 'Visitantes', 'titre_page_calendrier' => 'Calendário @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Configuração do site', - 'titre_page_config_fonctions' => 'Configuração do site', - 'titre_page_configuration' => 'Configuração do site', - 'titre_page_controle_petition' => 'Acompanhamento das petições', 'titre_page_delete_all' => 'supressão total e irreversível', - 'titre_page_documents_liste' => 'Os documentos das seções', - 'titre_page_index' => 'Sua área privada', - 'titre_page_message_edit' => 'Escrever uma mensagem', - 'titre_page_messagerie' => 'Seu sistema de mensagens', 'titre_page_recherche' => 'Resultados da busca por @recherche@', 'titre_page_statistiques_referers' => 'Estatísticas (links de entrada)', - 'titre_page_statistiques_signatures_jour' => 'Número de assinaturas por dia', - 'titre_page_statistiques_signatures_mois' => 'Número de assinaturas por mês', 'titre_page_upgrade' => 'Atualização do SPIP', + 'titre_preference_menus_favoris' => 'Menus favoritos', 'titre_publication_articles_post_dates' => 'Publicação de matérias pós-datadas', - 'titre_referencer_site' => 'Referenciar o site:', - 'titre_rendez_vous' => 'ENCONTRO:', 'titre_reparation' => 'Reparação', 'titre_suivi_petition' => 'Acompanhamento das petições', 'tls_ldap' => 'Transport Layer Security:', - 'trad_article_inexistant' => 'Não há nenhuma matéria com este número.', 'trad_article_traduction' => 'Todas as versões desta matéria:', - 'trad_deja_traduit' => 'Erro: é impossível ligar esta matéria ao número indicado.', 'trad_delier' => 'Desvincular destas traduções', 'trad_lier' => 'Esta matéria é uma tradução da matéria número:', 'trad_new' => 'Escrever uma nova tradução', // U - 'upload_info_mode_document' => 'Gravar esta imagem no portfolio', - 'upload_info_mode_image' => 'Retirar esta imagem do portfolio', - 'utf8_convert_attendez' => 'Aguarde alguns instantes e atualize esta página.', - 'utf8_convert_avertissement' => 'Você está prestes a converter o conteúdo da sua base de dados(matérias, notas etc) do conjunto de caracteres @orig@ para o conjunto de caracteres @charset@.', - 'utf8_convert_backup' => 'Não se esqueça de fazer primeiro uma cópia de segurança completa do seu site. Você deve também verificar se os seus templates e arquivos de idioma são compatíveis com @charset@.', - 'utf8_convert_erreur_deja' => 'O seu site já está em @charset@, a conversão não ocorreu...', 'utf8_convert_erreur_orig' => 'Erro: o conjunto de caracteres @charset@ não é suportado.', - 'utf8_convert_termine' => 'Terminou!', - 'utf8_convert_timeout' => 'Importante: em caso de timeout do servidor, por favor,atualize a página até que ela indique que «terminou».', - 'utf8_convert_verifier' => 'Você deve agora esvaziar o cache, e verificar se está tudo bem com as páginas públicas do site. No caso de apresentarem problemas, uma cópia de segurança dos seus dados foi feita (no formato SQL) no diretório @rep@.', - 'utf8_convertir_votre_site' => 'Converter o seu site para utf-8', // V 'version' => 'Versão:' ); - -?> diff --git a/www/ecrire/lang/ecrire_ro.php b/www/ecrire/lang/ecrire_ro.php index de242d55..ab401de1 100644 --- a/www/ecrire/lang/ecrire_ro.php +++ b/www/ecrire/lang/ecrire_ro.php @@ -1,9 +1,11 @@ 'Reveniţi la pagina anterioară şi verificaţi datele completate.', 'avis_connexion_ldap_echec_3' => 'Ca alternativă, importaţi utilizatorii fără să folosiţi suportul LDAP.', 'avis_deplacement_rubrique' => 'Atenţie! În această rubrică se găsesc @contient_breves@ ştiri@scb@: dacă o deplasaţi, bifaţi această casetă de confirmare.', - 'avis_destinataire_obligatoire' => 'Trebuie sa indicaţi un destinatar înainte de a trimite mesajul', 'avis_erreur_connexion_mysql' => 'Eroare de conexiune SQL', - 'avis_erreur_version_archive' => 'Atenţie! Fişierul @archive@ corespunde unei alte versiuni de SPIP faţă de cea pe care aţi instalat-o. Veţi întâmpina dificultăţi serioase: risc de distrugere a bazei de date, defecte în funcţionarea site-ului, ş.a.m.d. Nu validaţi importarea. Pentru informaţii suplimentare, consultaţi documentaţia SPIP..', - 'avis_espace_interdit' => 'Spaţiu interzis
      SPIP este déjà instalat
      .', + 'avis_espace_interdit' => 'Spaţiu interzis
      SPIP este déjà instalat
      .', 'avis_lecture_noms_bases_1' => 'Programul de instalare nu a putut citi numele bazelor de date instalate.', 'avis_lecture_noms_bases_2' => 'Fie nici o bază de date nu este disponibilă, fie funcţia de listare a bazelor de date a fost dezactivată pentru motive de securitate (cei mai mulţi furnizori procedează astfel).', 'avis_lecture_noms_bases_3' => 'Cu cea de-a doua alternativă, este probabil că o bază de date cu un nume la fel ca login-ul dumneavoastră este disponibilă :', - 'avis_non_acces_message' => 'Nu aveţi acces la acest mesaj.', 'avis_non_acces_page' => 'Nu aveţi acces la această pagină.', 'avis_operation_echec' => 'Operaţia a eşuat.', 'avis_operation_impossible' => 'Operaţie imposibilă', - 'avis_probleme_archive' => 'Problemă la citirea fişierului @archive@', 'avis_suppression_base' => 'ATENŢIE, suprimarea datelor este ireversibilă', - 'avis_version_mysql' => 'Server-ul dumneavoastră SQL (@version_mysql@) nu permite repararea automată a tabelelor din baza de date.', // B 'bouton_acces_ldap' => 'Adăugaţi accesul la LDAP', 'bouton_ajouter' => 'Adăugaţi', - 'bouton_ajouter_participant' => 'ADĂUGAŢI UN PARTICIPANT :', - 'bouton_annonce' => 'ANUNŢ', 'bouton_annuler' => 'Anulaţi', - 'bouton_checkbox_envoi_message' => 'posibilitate de trimitere mesaj', - 'bouton_checkbox_indiquer_site' => 'indicare obligatorie a unui site Web', - 'bouton_checkbox_signature_unique_email' => 'o singură semnătura pe adresă email', - 'bouton_checkbox_signature_unique_site' => 'o singură semnătură pe site Web', + 'bouton_cache_activer' => 'Reativar o cache', + 'bouton_cache_desactiver' => 'Desativar temporariamente o cache', 'bouton_demande_publication' => 'Cereţi publicarea articolului', 'bouton_desactive_tout' => 'Dezactivaţi totul', 'bouton_desinstaller' => 'Dezinstalaţi', - 'bouton_effacer_index' => 'Ştergeţi indecşii', 'bouton_effacer_tout' => 'Ştergeţi TOTUL', - 'bouton_envoi_message_02' => 'TRIMITEŢI UN MESAJ', 'bouton_envoyer_message' => 'Mesajul definitiv: trimiteţi', 'bouton_fermer' => 'Închideţi', 'bouton_mettre_a_jour_base' => 'Aduceţi la zi baza de date', 'bouton_modifier' => 'Modificaţi', - 'bouton_pense_bete' => 'CIORNĂ PENTRU UZ PERSONAL', - 'bouton_radio_activer_messagerie' => 'Activaţi mesageria internă', - 'bouton_radio_activer_messagerie_interne' => 'Activaţi mesageria internă', - 'bouton_radio_activer_petition' => 'Activaţi petiţia', 'bouton_radio_afficher' => 'Afişaţi', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Apariţie în lista redactorilor conectaţi', - 'bouton_radio_desactiver_messagerie' => 'Dezactivaţi mesageria', 'bouton_radio_envoi_annonces_adresse' => 'Trimiteţi anunţurile la adresa :', 'bouton_radio_envoi_liste_nouveautes' => 'Trimiteţi lista de noutăţi', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Nu apăreţi în lista redactorilor', 'bouton_radio_non_envoi_annonces_editoriales' => 'Nu trimiteţi anunţuri editoriale', - 'bouton_radio_pas_petition' => 'Fără petiţie', - 'bouton_radio_petition_activee' => 'Petiţie activată', - 'bouton_radio_supprimer_petition' => 'Ştergeţi petiţia', 'bouton_redirection' => 'REDIRIJARE', 'bouton_relancer_installation' => 'Relansaţi instalarea', 'bouton_suivant' => 'Următorul', 'bouton_tenter_recuperation' => 'Încercaţi o reparare', 'bouton_test_proxy' => 'Încercaţi proxy-ul', 'bouton_vider_cache' => 'Goliţi memoria tampon', - 'bouton_voir_message' => 'Vedeţi mesajul înainte să-l validaţi', // C - 'cache_mode_compresse' => 'Fişierele de tampon sunt înregistrate în mod comprimat.', - 'cache_mode_non_compresse' => 'Fişierele de tampon sunt înregistrate în mod necomprimat.', 'cache_modifiable_webmestre' => 'Acest parametru est modificabil de către webmaster-ul acestui site.', 'calendrier_synchro' => 'Dacă folosiţi un soft de agendă compatibil iCal, puteţi să-l sincronizaţi cu informaţiile de pe site.', 'config_activer_champs' => 'Activaţi câmpurile următoare', @@ -103,7 +83,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_titre_base_sup' => 'Declararea unei baze de date suplimentare', 'config_titre_base_sup_choix' => 'Alegeţi o bază de date suplimentară', 'connexion_ldap' => 'Conexiune :', - 'copier_en_local' => 'Copiaţi în local', // D 'date_mot_heures' => 'ore', @@ -130,7 +109,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Login-ul dumneavoastră', 'entree_login_connexion_1' => 'Login-ul de conectare', 'entree_login_connexion_2' => '(Corespunde câteodată cu login-ul de acces FTP; uneori este lăsat gol)', - 'entree_login_ldap' => 'Login iniţial LDAP', 'entree_mot_passe' => 'Parola dumneavoatră', 'entree_mot_passe_1' => 'Parola conexiunii', 'entree_mot_passe_2' => '(Corespunde câteodată cu parola de acces FTP; uneori este vidă)', @@ -156,7 +134,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'erreur_plugin_version_manquant' => 'Versiunea plugin-ului lipsă', // H - 'htaccess_a_simuler' => 'Avertissement: la configuration de votre serveur HTTP ne tient pas compte des fichiers @htaccess@. Pour pouvoir assurer une bonne sécurité, il faut que vous modifiez cette configuration sur ce point, ou bien que les constantes @constantes@ (définissables dans le fichier mes_options.php) aient comme valeur des répertoires en dehors de @document_root@.', # MODIF 'htaccess_inoperant' => 'htaccess nu funcţionează', // I @@ -164,7 +141,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'Pentru mai multe detalii asupra acestor tehnici, nu ezitaţi să consultaţi documentaţia SPIP.', 'ical_info_calendrier' => 'Două calendare vă sunt la dispoziţie: Primul este un plan al site-ului care anunţă toate articolele publicate. Al doilea conţine atât anunţurile editoriale cât şi ultimele mesaje private : acesta vă este rezervat graţie unei chei personale pe care o puteţi modifica oricând prin simpla schimbare a parolei dumneavoastră. ', 'ical_methode_http' => 'Descărcare', - 'ical_methode_webcal' => 'Sincronizare (webcal://)', + 'ical_methode_webcal' => 'Sincronizare (webcal://)', # MODIF 'ical_texte_js' => 'O linie de cod javascript vă permite să afişaţi de o manieră simplă, pe orice site care vă aparţine, articolele recente publicate pe aceste site.', 'ical_texte_prive' => 'Acest calendar, pentru o folosire strict personală, vă informează despre activitatea editorială a acestui site (sarcini şi întâlniri personale, articole şi ştiri propuse spre publicare...)', 'ical_texte_public' => 'Acest calendar vă permite să urmăriţi activitatea publică a acestui site (articole şi ştiri publicate).', @@ -184,16 +161,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_configuration' => 'Configurare', 'icone_creer_auteur' => 'Creaţi un nou autor şi atribuiţi-i articolul.', 'icone_creer_mot_cle' => 'Creaţi un nou cuvânt-cheie şi legaţi-l de acest articol.', - 'icone_creer_mot_cle_rubrique' => 'Creaţi un nou cuvânt-cheie şi legaţi-l de această rubrică', - 'icone_creer_mot_cle_site' => 'Creaţi un nou cuvânt-cheie şi legaţi-l de acest site', 'icone_creer_rubrique_2' => 'Creaţi o nouă rubrică', 'icone_edition' => 'Editare', - 'icone_envoyer_message' => 'Trimiteţi acest mesaj', 'icone_ma_langue' => 'Limba mea', 'icone_mes_infos' => 'Informaţiile mele', 'icone_mes_preferences' => 'Preferinţele mele', 'icone_modifier_article' => 'Modificaţi acest articol', - 'icone_modifier_message' => 'Modificaţi acest mesaj', 'icone_modifier_rubrique' => 'Modificaţi această rubrică', 'icone_publication' => 'Publicare', 'icone_relancer_signataire' => 'Relansaţi semnatarul', @@ -207,18 +180,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'Validaţi această semnătură', 'image_administrer_rubrique' => 'Puteţi administra această rubrică', 'info_1_article' => '1 articol', - 'info_1_article_syndique' => '1 articol sindicat', 'info_1_auteur' => '1 autor', 'info_1_message' => '1 mesaj', 'info_1_mot_cle' => '1 cuvânt-cheie', 'info_1_rubrique' => '1 rubrică', - 'info_1_site' => '1 site', 'info_1_visiteur' => '1 vizitator', 'info_activer_cookie' => 'Puteţi să activaţi un cookie de corespondenţă, ceea ce vă va permite să treceţi cu uşurinţă de la site-ul public la site-ul privat.', 'info_admin_etre_webmestre' => 'Daţi-mi drepturi de webmaster', - 'info_admin_gere_rubriques' => 'Acest administrator gestionează rubricile următoare :', - 'info_admin_gere_toutes_rubriques' => 'Acest administrator gestionează toate rubricile.', # MODIF 'info_admin_je_suis_webmestre' => 'Sunt webmaster', 'info_admin_statuer_webmestre' => 'Daţi acestui administrator drepturi de webmaster', 'info_admin_webmestre' => 'Acest administrator este webmaster', @@ -231,13 +200,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => 'Puteţi administra această rubrică', 'info_adresse' => 'la adresa :', 'info_adresse_url' => 'Adresa (URL) a site-ului public', - 'info_afficher_visites' => 'Afişează vizitele pentru :', 'info_aide_en_ligne' => 'Ajutor SPIP în linie', 'info_ajout_image' => 'Când adăugaţi imagini ca documente ataşate unui articol, SPIP poate crea pentru dvs. viniéte ale imaginilor introduse. Aceasta permite de exemplu crearea automată a unei galerii sau a unui portofoliu.', - 'info_ajout_participant' => 'Participantul următor a fost adăugat :', 'info_ajouter_rubrique' => 'Adăugaţi o altă rubrică de administrat :', 'info_annonce_nouveautes' => 'Anunţul noutăţilor', - 'info_anterieur' => 'anterior', 'info_article' => 'articol', 'info_article_2' => 'articole', 'info_article_a_paraitre' => 'Articolele post-datate care urmează să fie publicate', @@ -247,17 +213,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_miens' => 'Articolele mele', 'info_articles_tous' => 'Toate articolele', 'info_articles_trouves' => 'Articole găsite', - 'info_articles_trouves_dans_texte' => 'Articole găsite (în text)', 'info_attente_validation' => 'Articolele dumneavoastră în curs de validare', 'info_aucun_article' => 'Nici un articol', - 'info_aucun_article_syndique' => 'Nici un articol sindicalizat', 'info_aucun_auteur' => 'Nici un autor', 'info_aucun_message' => 'Nici un mesaj', 'info_aucun_rubrique' => 'Nici o rubrică', - 'info_aucun_site' => 'Nici un site', - 'info_aucun_visiteur' => 'Nici un vizitator', 'info_aujourdhui' => 'astăzi :', - 'info_auteur_message' => 'AUTORUL MESAJULUI :', 'info_auteurs' => 'Autorii', 'info_auteurs_par_tri' => 'Autori @partri@', 'info_auteurs_trouves' => 'Autori găsiţi', @@ -265,6 +226,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_avertissement' => 'Avertisment', 'info_barre_outils' => 'cu toolbar-ul său ?', 'info_base_installee' => 'Structura bazei dumneavoastră de date a fost instalată.', + 'info_cache_desactive' => 'Cache temporariamente desativado.', 'info_chapeau' => 'Introducere', 'info_chapeau_2' => 'Introducere :', 'info_chemin_acces_1' => 'Opţiuni: Calea de acces în anuar', @@ -275,8 +237,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_2' => 'pe @liste@', 'info_code_acces' => 'Nu uitaţi propriile dumeavoastră coduri de acces !', 'info_compatibilite_html' => 'Normă HTML de urmat', - 'info_compresseur_gzip' => 'N. B. : Este recomandabil să verificaţi în prealabil dacă server-ul comprimă în mod sistematic scripturile php ; pentru a face acest test, puteţi să folosiţi de exemplu serviciul următor : @testgzip@', # MODIF - 'info_compresseur_texte' => 'Dacă server-ul dumneavoastră nu comprimă în mod automat paginile html când acestea sunt trimise pe internet, puteţi încerca să forţaţi această compresie pentru a diminua mărimea paginilor încărcate. Atenţie : această operaţie poate încetini considerabil anumite servere.', 'info_config_suivi' => 'Dacă această adresă corespunde unei liste de email-uri, puteţi indica mai jos adresa la care participanţii la site se pot înscrie. Această adresă poate fi un URL (de exemplu adresa paginii de însriere la listă pe Web) sau o adresă de email dotată cu un subiect specific (de exemplu: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Puteţi să vă abonaţi la lista de email-uri a acestui site. Veţi primi ca urmare anunţuri de ştiri sau articole propuse spre publicare.', 'info_confirmer_passe' => 'Confirmaţi această nouă parolă :', @@ -299,8 +259,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Data redactării anterioare :', 'info_date_referencement' => 'DATA DE REFERENŢIERE A ACESTUI SITE :', 'info_derniere_etape' => 'Gata !', - 'info_derniers_articles_publies' => 'Articolele dumneavoastră publicate recent', - 'info_desactiver_messagerie_personnelle' => 'Puteţi să activaţi sau dezactivaţi mesageria personală pe acest site.', 'info_descriptif' => 'Descriere :', 'info_desinstaller_plugin' => 'şterge datele şi dezactivează plugin-ul', 'info_discussion_cours' => 'Discuţii în desfăşurare', @@ -308,7 +266,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_email_envoi' => 'Adresa email de trimitere (opţional)', 'info_email_envoi_txt' => 'Indicaţi aici adresa care va fi folosită pentru a trimite email-uri (dacă nu furnizaţi o adresă, este adresa destinatarului care va fi folosită în mod implicit) :', 'info_email_webmestre' => 'Adresa de email a webmaster-ului (opţional)', # MODIF - 'info_entrer_code_alphabet' => 'Introduceţi codul de alfabet care va fi utilizat :', 'info_envoi_email_automatique' => 'Trimitere automată de email-uri', 'info_envoyer_maintenant' => 'Trimiteţi acum', 'info_etape_suivante' => 'Treceţi la etapa următoare', @@ -318,7 +275,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_facilite_suivi_activite' => 'Pentru a uşura urmărirea activităţii editoriale a site-ului, SPIP poate trimite prin email cererile de publicare şi de validare a articolelor. De exemplu, destinatarul poate fi o listă de distribuţie a redacţiei.', 'info_fichiers_authent' => 'Fişiere de autentificare « .htpasswd »', 'info_forums_abo_invites' => 'Site-ul dumneavoastră are forum-uri cu abonament ; vizitatorii sunt, aşadar, invitaţi să se înregistreze pe site-ul public.', - 'info_gauche_admin_effacer' => 'Această pagină este accesibilă doar responsabililor acestui site
      Ea dă acces la diverse funcţii de întreţinere tehnică. Unele dintre aceste funcţii cer un proces de autentificare specific, de exemplu să aveţi un acces FTP la site-ul Web.', # MODIF 'info_gauche_admin_tech' => 'Această pagină este accesibilă doar responsabililor acestui site
      Ea dă acces la diverse funcţii de întreţinere tehnică. Unele dintre aceste funcţii cer un proces de autentificare specific, de exemplu să aveţi un acces FTP la site-ul Web.', # MODIF 'info_gauche_admin_vider' => 'Această pagină este accesibilă doar responsabililor acestui site
      Ea dă acces la diverse funcţii de întreţinere tehnică. Unele dintre aceste funcţii cer un proces de autentificare specific, de exemplu să aveţi un acces FTP la site-ul Web.', # MODIF 'info_gauche_auteurs' => 'Găsiţi aici toţi autorii acestui site. @@ -326,21 +282,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_gauche_auteurs_exterieurs' => 'Autorii existenţi, fără acces la site, sunt indicaţi cu ajutorul unei iconiţe albastre ; iar autorii şterşi - printr-o iconiţă ce simbolizează un coş de gunoi.', # MODIF 'info_gauche_messagerie' => 'Mesageria vă permite să schimbaţi mesaje între redactori, să conservaţi ciorne (pentru folosul dumneavoastră personal) sau pentru a afişa anunţuri pe pagina de gardă a spaţiului privat (dacă sunteţi administrator).', - 'info_gauche_numero_auteur' => 'AUTORUL NUMĂRUL', 'info_gauche_statistiques_referers' => 'Această pagină prezintă lista referers, adică a site-urilor care conţin legături către acest site, doar pentru ieri şi astăzi ; această listă este re-iniţializată la fiecare 24 de ore.', 'info_gauche_visiteurs_enregistres' => 'Veţi găsi aici vizitatorii înregistraţi în spaţiul public al site-ului (forum-urile pe bază de abonament).', 'info_generation_miniatures_images' => 'Generarea de miniaturi ale imaginilor', - 'info_gerer_trad' => 'Gestionaţi legăturile de traducere ?', 'info_hebergeur_desactiver_envoi_email' => 'Anumiţi furnizori de servicii de hosting dezactivează trimiterea automată de email-uri de pe server-ele lor. În acest caz, funcţiile următoare din SPIP nu sunt disponibile.', 'info_hier' => 'ieri :', - 'info_historique_activer' => 'Activaţi urmărirea reviziilor', - 'info_historique_affiche' => 'Afişaţi această versiune', - 'info_historique_comparaison' => 'comparaţie', - 'info_historique_desactiver' => 'Dezactivaţi urmărirea reviziilor', - 'info_historique_texte' => 'Urmărirea reviziilor permite să conservaţi un istoric al tuturor modificărilor aduse conţinutului unui articol şi să afişaţi diferenţele între versiunile succesive.', 'info_identification_publique' => 'Identitatea dumneavoastră publică...', 'info_image_process' => 'Vă rugăm să selecţionaţi cea mai bună metodă de generare a viniételor făcând click pe imaginea corespunzătoare.', 'info_image_process2' => 'Nota Bene Dacă nici o imagine nu este afişată, înseamnă ca server-ul care găzduieşte site-ul dumneavoastră nu a fost configurat să folosească unelte de acest tip. Dacă doriţi să folosiţi aceste funcţii, vă rugăm să-l contactaţi pe responsabilul tehnic şi să îi cereţi instalarea extensiilor «GD» sau «Imagick».', # MODIF @@ -359,8 +308,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_logos' => 'Logo-urile', 'info_maximum' => 'maxim :', 'info_meme_rubrique' => 'În aceeaşi rubrică', - 'info_message' => 'Mesaj de la', - 'info_message_efface' => 'MESAJ ŞTERS', 'info_message_en_redaction' => 'Mesajele dumneavoastră în curs de redactare', 'info_message_technique' => 'Mesaj tehnic :', 'info_messagerie_interne' => 'Mesagerie internă', @@ -374,20 +321,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'Modificaţi rubrica :', 'info_modifier_titre' => 'Modificaţi : @titre@', 'info_mon_site_spip' => 'Site-ul meu SPIP', - 'info_mot_sans_groupe' => '(Cuvinte fără grup...)', - 'info_moteur_recherche' => 'Motorul de căutare integrat', 'info_moyenne' => 'medie :', - 'info_multi_articles' => 'Activaţi meniul de limbă în cadrul articolelor ?', 'info_multi_cet_article' => 'Limba acestui articol :', 'info_multi_langues_choisies' => 'Vă rugăm să selecţionaţi aici limbile aflate la dispoziţia redactorilor site-ului dumneavoastră. Limbile deja folosite în cadrul site-ului (afişate primele) nu pot fi dezactivate.', - 'info_multi_rubriques' => 'Activaţi meniul de limbă în cadrul rubricilor ?', 'info_multi_secteurs' => '... doar pentru rubricile situate sub rădăcină ?', 'info_nom' => 'Nume', 'info_nom_destinataire' => 'Numele destinatarului', 'info_nom_site' => 'Numele site-ului dumneavoastră', 'info_nombre_articles' => '@nb_articles@ articole,', - 'info_nombre_partcipants' => 'PARTICIPANŢII LA DISCUŢIE :', 'info_nombre_rubriques' => '@nb_rubriques@ rubrici,', 'info_nombre_sites' => '@nb_sites@ site-uri,', 'info_non_deplacer' => 'Nu deplasaţi...', @@ -396,17 +338,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_modifiable' => 'nu poate fi modificat(ă)', 'info_non_suppression_mot_cle' => 'nu doresc să şterg acest cuvânt-cheie.', 'info_notes' => 'Note', - 'info_nouveaux_message' => 'Mesaje noi', 'info_nouvel_article' => 'Articol nou', 'info_nouvelle_traduction' => 'Traducere nouă :', 'info_numero_article' => 'ARTICOL NUMĂRUL :', 'info_obligatoire_02' => '[Obligatorie]', # MODIF 'info_option_accepter_visiteurs' => 'Acceptaţi înscrierea vizitatorilor site-ului public', - 'info_option_faire_suivre' => 'Faceţi ca mesajele forum-urilor să fie trimise autorilor articolelor', 'info_option_ne_pas_accepter_visiteurs' => 'Refuzaţi înscrierea vizitatorilor', 'info_options_avancees' => 'OPŢIUNI AVANSATE', - 'info_ortho_activer' => 'Activaţi verificatorul ortografic', - 'info_ortho_desactiver' => 'Dezactivaţi verificatorul ortografic', 'info_ou' => 'sau...', 'info_page_interdite' => 'Pagină interzisă', 'info_par_nom' => 'după nume', @@ -415,20 +353,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_par_tri' => '’(după @tri@)’', 'info_passe_trop_court' => 'Parolă prea scurtă.', 'info_passes_identiques' => 'Cele două parole nu sunt identice.', - 'info_pense_bete_ancien' => 'Vechile dumneavoastră ciorne', # MODIF 'info_plus_cinq_car' => 'mai mult de 5 caractere', 'info_plus_cinq_car_2' => '(Mai mult de 5 caractere)', 'info_plus_trois_car' => '(Mai mult de 3 caractere)', 'info_popularite' => 'popularitate : @popularite@ ; vizite : @visites@', - 'info_popularite_4' => 'popularitate : @popularite@ ; vizites : @visites@', 'info_post_scriptum' => 'Post-Scriptum', 'info_post_scriptum_2' => 'Post-scriptum :', 'info_pour' => 'pentru', - 'info_preview_admin' => 'Doar administratorii pot previzualiza site-ul', - 'info_preview_comite' => 'Toţi redactorii pot previzualiza site-ul', - 'info_preview_desactive' => 'Previzualizarea este complet dezactivată', - 'info_preview_texte' => 'Este posibilă previzualizarea site-ului ca şi cum toate articolele şi ştirile (care au cel puţin starea « propus ») ar fi fost deja publicate. Această posibilitate trebuie să fie disponibilă doar pentru administratori, la toţi redactorii, sau nimănui ?', - 'info_principaux_correspondants' => 'Corespondenţii dumneavoastră principali', + 'info_preview_texte' => 'Este posibilă previzualizarea site-ului ca şi cum toate articolele şi ştirile (care au cel puţin starea « propus ») ar fi fost deja publicate. Această posibilitate trebuie să fie disponibilă doar pentru administratori, la toţi redactorii, sau nimănui ?', # MODIF 'info_procedez_par_etape' => 'procedaţi etapă cu etapă', 'info_procedure_maj_version' => 'procedura de aducere la zi trebuie lansată pentru a adapta baza de date la noua versiune SPIP.', @@ -446,14 +378,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( furnizori de hosting dezactivează trimiterea de email-uri de pe server-ele lor : în acest caz înscrierea automatică este imposibilă.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Doriţi să utilizaţi motorul de căutare integrat în SPIP ? - (funcţionarea sistemului este mai rapidă fără activarea motorului de căutare.)', - 'info_question_vignettes_referer_non' => 'Nu afişati capturile site-urilor de unde vin vizitele', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Rădăcina site-ului', 'info_recharger_page' => 'Vă rugăm să reîncărcaţi această pagină în câteva momente.', - 'info_recherche_auteur_a_affiner' => 'Prea multe rezultate pentru "@cherche_auteur@" ; vă rugăm să rafinaţi termenii căutării.', - 'info_recherche_auteur_ok' => 'Mai mulţi redactori găsiţi pentru "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Nici un rezultat pentru « @cherche_auteur@ ».', 'info_recommencer' => 'Vă rugăm să reîncepeţi.', 'info_redacteur_1' => 'Redactor', @@ -470,7 +396,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'Rubrici', 'info_rubriques_02' => 'rubrici', 'info_rubriques_trouvees' => 'Rubrici găsite', - 'info_rubriques_trouvees_dans_texte' => 'Rubrici găsite (în text)', 'info_sans_titre' => 'Fără titlu', 'info_selection_chemin_acces' => 'Selecţionaţi aici calea de acces în anuar :', 'info_signatures' => 'semnături', @@ -478,18 +403,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_site_2' => 'site :', 'info_site_min' => 'site', 'info_site_reference_2' => 'Site referenţiat', - 'info_site_web' => 'SITE WEB :', # MODIF 'info_sites' => 'site-uri', 'info_sites_lies_mot' => 'Site-urile referenţiate legate la acest cuvânt-cheie', 'info_sites_proxy' => 'Utilizaţi un proxy', 'info_sites_trouves' => 'Site-uri găsite', - 'info_sites_trouves_dans_texte' => 'Site-uri găsite (în text)', 'info_sous_titre' => 'Subtitlu :', 'info_statut_administrateur' => 'Administrator', 'info_statut_auteur' => 'Starea acestui autor :', 'info_statut_auteur_a_confirmer' => 'Inscriere de confirmat', 'info_statut_auteur_autre' => 'Alt statut :', - 'info_statut_efface' => 'Şters', 'info_statut_redacteur' => 'Redactor', 'info_statut_utilisateurs_1' => 'Starea implicită a utilizatorilor importaţi', 'info_statut_utilisateurs_2' => 'Alegeţi starea implicită care este atribuită persoanelor care sunt prezente în anuarul LDAP atunci când se vor conecta pentru prima dată. Veţi putea modifica mai târziu această valoare caz după caz, pentru fiecare autor.', @@ -512,7 +434,6 @@ Imaginile cu dimensiuni mai mari nu vor fi reduse.', 'info_tous_articles_en_redaction' => 'Toate articolele în curs de redactare', 'info_tous_articles_presents' => 'Toate articolele publicate în această rubrică', 'info_tous_les' => 'toate :', - 'info_tous_redacteurs' => 'Anunţuri către toţi redactorii', 'info_tout_site' => 'Tot site-ul', 'info_tout_site2' => 'Articolul nu a fost tradus în această limbă.', 'info_tout_site3' => 'Articolul a fost tradus în această limbă, dar există modificări ale articolului de referinţă. Traducerea trebuie adusă la zi.', @@ -527,7 +448,6 @@ cu o culoare care le indică starea :', 'info_une_rubrique' => 'o rubrică,', 'info_une_rubrique_02' => '1 rubrică', 'info_url' => 'URL :', - 'info_url_site' => 'URL SITE :', 'info_urlref' => 'Legătură hipertext :', 'info_utilisation_spip' => 'Puteţi începe acum să folosiţi sistemul de publicare asistată...', 'info_visites_par_mois' => 'Afişare pe lună :', @@ -536,7 +456,6 @@ cu o culoare care le indică starea :', 'info_visiteurs' => 'Vizitatori', 'info_visiteurs_02' => 'Vizitatorii site-ului public', 'install_adresse_base_hebergeur' => 'Adresa bazei de date furnizată de provider', - 'install_base_ok' => 'Baza @base@ fost recunoscută', 'install_echec_annonce' => 'Instalarea va eşua probabil sau va conduce la un site nefuncţional...', 'install_extension_mbstring' => 'SPIP nu foncţionează cu :', 'install_extension_php_obligatoire' => 'SPIP are nevoie de extensia php :', @@ -561,8 +480,6 @@ cu o culoare care le indică starea :', 'item_activer_messages_avertissement' => 'Activaţi mesajele de avertisment', 'item_administrateur_2' => 'administrator', 'item_afficher_calendrier' => 'Afişaţi în calendar', - 'item_autoriser_documents_joints' => 'Autorizaţi documentele ataşate în articole', - 'item_autoriser_documents_joints_rubriques' => 'Autorizaţi documentele ataşate în rubrici', 'item_autoriser_syndication_integrale' => 'Difuzaţi integralitatea articolelor în fişierele de sindicalizare', 'item_choix_administrateurs' => 'administratorii', 'item_choix_generation_miniature' => 'Generaţi în mod automat miniaturile imaginilor.', @@ -570,7 +487,6 @@ cu o culoare care le indică starea :', 'item_choix_redacteurs' => 'redactorii', 'item_choix_visiteurs' => 'vizitatorii site-ului public', 'item_creer_fichiers_authent' => 'Creaţi fişierele .htpasswd', - 'item_limiter_recherche' => 'Limitaţi căutarea la informaţille conţinute pe site-ul dumneavoastră', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Activaţi mesageria şi agenda', 'item_mots_cles_association_articles' => 'articolelor', @@ -580,37 +496,26 @@ cu o culoare care le indică starea :', 'item_non_accepter_inscriptions' => 'Nu acceptaţi înscrierile', 'item_non_activer_messages_avertissement' => 'Fără mesaje de avertisment', 'item_non_afficher_calendrier' => 'Nu afişaţi în calendar', - 'item_non_autoriser_documents_joints' => 'Nu autorizaţi documentele în articole', - 'item_non_autoriser_documents_joints_rubriques' => 'Nu autorizaţi documentele în rubrici', 'item_non_autoriser_syndication_integrale' => 'Difuzaţi doar un rezumat', - 'item_non_compresseur' => 'Dezactivaţi compresia', 'item_non_creer_fichiers_authent' => 'Nu creaţi aceste fişiere', - 'item_non_gerer_statistiques' => 'Nu gestionaţi statisticile', - 'item_non_limiter_recherche' => 'Măriţi zona de căutare la conţinutul site-urilor referenţiate', 'item_non_messagerie_agenda' => 'Dezactivaţi mesageria şi agenda', 'item_non_publier_articles' => 'Nu publicaţi articolele înaintea datei de publicare fixată.', - 'item_non_utiliser_moteur_recherche' => 'Nu folosiţi motorul', 'item_nouvel_auteur' => 'Autor nou', 'item_nouvelle_rubrique' => 'Rubrică nouă', 'item_oui' => 'Da', 'item_publier_articles' => 'Publicaţi articolele indiferent de data lor de publicare.', 'item_reponse_article' => 'Răspuns la articolul', - 'item_utiliser_moteur_recherche' => 'Utilizaţi motorul de căutare', 'item_visiteur' => 'vizitator', // J 'jour_non_connu_nc' => 'necunoscut', // L - 'lien_ajout_destinataire' => 'Adăugaţi acest destinatar', 'lien_ajouter_auteur' => 'Adăugaţi acest autor', - 'lien_ajouter_participant' => 'Adăugaţi un participant', 'lien_email' => 'email', 'lien_nom_site' => 'NUME SITE :', 'lien_retirer_auteur' => 'Retrageţi autorul', - 'lien_retrait_particpant' => 'retrageţi acest participant', 'lien_site' => 'site', - 'lien_supprimer_rubrique' => 'ştergeţi această rubrică', 'lien_tout_deplier' => 'Desfăşuraţi totul', 'lien_tout_replier' => 'Strângeţi totul', 'lien_tout_supprimer' => 'Ştergeţi totul', @@ -638,7 +543,6 @@ cu o culoare care le indică starea :', 'onglet_contenu' => 'Conţinut', 'onglet_declarer_une_autre_base' => 'Declaraţi o altă bază de date', 'onglet_discuter' => 'Discutaţi', - 'onglet_documents' => 'Documente', 'onglet_interactivite' => 'Interactivitate', 'onglet_proprietes' => 'Proprietăţi', 'onglet_repartition_actuelle' => 'actuală', @@ -672,7 +576,7 @@ cu o culoare care le indică starea :', 'plugin_info_telecharger' => 'de descărcat de la @url@ şi de instalat în @rep@', 'plugin_librairies_installees' => 'Librăriile instalate', 'plugin_necessite_lib' => 'Acest plug-in are nevoie de librăria @lib@', - 'plugin_necessite_plugin' => 'Necesită plugin-ul @plugin@ cu versiunea @version@ minim.', + 'plugin_necessite_plugin' => 'Necesită plugin-ul @plugin@ cu versiunea @version@ minim.', # MODIF 'plugin_necessite_spip' => 'Are nevoie de SPIP cu versiunea @version@ minim.', 'plugin_source' => 'sursa: ', 'plugin_titre_automatique' => 'Instalare automatică', @@ -686,7 +590,6 @@ cu o culoare care le indică starea :', 'plugin_zip_installer' => 'Puteţi acum să îl instalaţi.', 'plugin_zip_telecharge' => 'Fişierul @zip@ a fost descărcat', 'plugins_actifs' => '@count@ plug-in-uri activate.', - 'plugins_actifs_liste' => 'Plugins actifs', # MODIF 'plugins_compte' => '@count@ plug-in-uri', 'plugins_disponibles' => '@count@ plug-in-uri disponibile.', 'plugins_erreur' => 'Eroare în plug-in-urile : @plugins@', @@ -695,11 +598,9 @@ cu o culoare care le indică starea :', 'plugins_vue_liste' => 'Listă', 'protocole_ldap' => 'Versiunea protocolului :', - // Q - 'queue_titre' => 'Liste de travaux', # MODIF - // R 'repertoire_plugins' => 'Director :', + 'required' => '[Obligatorie]', # MODIF // S 'sans_heure' => 'fără oră', @@ -725,16 +626,11 @@ reinstalare a SPIP pentru a recrea o nouă bază de date cât şi un nou acces a 'texte_article_virtuel_reference' => 'Articol virtual : articol referenţiat pe site-ul dumneavoastră SPIP, dar redirijat către un alt URL. Pentru a şterge redirijarea, ştergeţi URL-ul.', 'texte_aucun_resultat_auteur' => 'Nici un rezultat pentru "@cherche_auteur@"', 'texte_auteur_messagerie' => 'Acest site vă poate indica în permanenţă lista redactorilor conectaţi, ceea ce vă permite schimbul de mesaje în direct. Puteţi decide să nu apăreţi în această listă (sunteţi « invizibil » pentru ceilalţi utilizatori).', - 'texte_auteur_messagerie_1' => 'Acest site permite schimbul de mesaje şi constituirea de forum-uri de discuţii private între participanţii la acest site. Puteţi decide să nu participaţi la aceste schimburi.', 'texte_auteurs' => 'AUTORII', 'texte_choix_base_1' => 'Alegeţi baza dumneavoastră :', 'texte_choix_base_2' => 'Server-ul SQL conţine mai multe baze de date.', 'texte_choix_base_3' => 'Selecţionaţi aici aceea care v-a fost atribuită de către furnizorul dumneavoastră de internet:', 'texte_choix_table_prefix' => 'Prefixul tabelelor :', - 'texte_commande_vider_tables_indexation' => 'Utilizaţi această comandă pentru a goli tabelele de indexare utilizate - de către motorul de căutare integrat în SPIP. Această operaţie vă va permite să - câştigaţi spaţiu pe disc.', - 'texte_compresse_ou_non' => '(acesta poate fi comprimat sau nu)', 'texte_compte_element' => '@count@ element(e)', 'texte_compte_elements' => '@count@ element(e)', 'texte_conflit_edition_correction' => 'Vă rugăm să controlaţi mai jos diferenţele între cele două versiuni ale textului; puteţi de asemenea să copiaţi modificările dumneavoastră, pentru a reîncepe.', @@ -750,10 +646,8 @@ reinstalare a SPIP pentru a recrea o nouă bază de date cât şi un nou acces a 'texte_date_publication_anterieure' => 'DATA REDACTĂRII ANTERIOARE :', 'texte_date_publication_anterieure_nonaffichee' => 'Nu afişaţi data redactării anterioare.', 'texte_date_publication_article' => 'DATA PUBLICĂRII ÎN LINIE :', - 'texte_descriptif_petition' => 'Descrierea petiţiei', 'texte_descriptif_rapide' => 'Descriere pe scurt', 'texte_effacer_base' => 'Ştergeţi baza de date SPIP', - 'texte_effacer_donnees_indexation' => 'Ştergeţi datele de indexare', 'texte_effacer_statistiques' => 'Ştergeţi statisticile', 'texte_en_cours_validation' => 'Articolele şi ştirile de mai jos sunt propuse pentru publicare.', # MODIF 'texte_enrichir_mise_a_jour' => 'Puteţi îmbogăţi aranjarea în pagină a textului dumneavoastră prin folosirea « scurtăturilor tipografice ».', @@ -767,27 +661,18 @@ reinstalare a SPIP pentru a recrea o nouă bază de date cât şi un nou acces a 'texte_informations_personnelles_2' => '(Notă : dacă este vorba de o reinstalare, şi dacă accesul dumneavoastră merge încă, puteţi', # MODIF 'texte_introductif_article' => '(Text introductiv al articolului.)', 'texte_jeu_caractere' => 'Este recomandabil să folosiţi, pentru site-ul dumneavoastră, alfabetul universal (utf-8) : acesta permite afişarea textelor în toate limbile şi nu pune probleme de compatibilitate navigatoarelor moderne.', - 'texte_jeu_caractere_2' => 'Atenţie: acest reglaj reglaj nu are efect retroactiv şi nu converteşte textele deja înregistrate în baza de date.', 'texte_jeu_caractere_3' => 'Site-ul dumneavoastră este, actualmente, configurat să folosească codarea:', 'texte_jeu_caractere_4' => 'Dacă această setare nu corespunde realităţii datelor dumneavoastră (de exemplu ca urmare a unei restaurări a bazei de date) sau dacă tocmai demaraţi acest site şi doriţi să porniţi cu o altă codare, specificaţi aici alegerea dumneavoastră :', - 'texte_jeu_caractere_conversion' => 'Notă : puteţi să hotărâţi să convertiţi ansamblul textelor de pe site (articole, ştiri, forum-uri, etc.) către codarea utf-8, dacă vizitaţi pagina de convertire către utf-8.', - 'texte_lien_hypertexte' => '(Dacă mesajul dumneavoastră se referă la un articol publicat pe Web sau la o pagină furnizând mai multe informaţii, vă rugăm să indicaţi aici titlul si adresa URL corespunzătoare.)', 'texte_login_ldap_1' => '(Lăsaţi gol pentru un acces anonim, sau introduceţi o cale completă, de exemplu: « uid=ionescu, ou=utilizatori, dc=domeniul-meu, dc=ro ».)', 'texte_login_precaution' => 'Atenţie ! Acesta este login-ul cu care sunteţi conectat acum. Utilizaţi acest formular cu precauţie...', - 'texte_message_edit' => 'Atenţie ! acest mesaj poate fi modificat de către toţi administratorii site-ului, şi este vizibil la toţi redactorii. Nu utilizaţi anunţurile decât pentru a expune evenimente importante din viaţa site-ului.', 'texte_messagerie_agenda' => 'O mesagerie permite redactorilor site-ului să comunice între ei direct în spaţiul privat al site-ului. O mesagerie este asociată unei agende.', 'texte_mise_a_niveau_base_1' => 'Tocmai aţi adus la zi fişierele SPIP. Trebuie ca acum să aduceţi la zi şi baza de date a site-ului.', 'texte_modifier_article' => 'Modificaţi articolul :', - 'texte_moteur_recherche_active' => 'Motorul de căutare este activat. Utilizaţi această comandă dacă doriţi să faceţi o reindexare rapidă (de exemplu, după o restaurare dintr-o salvare). Vă rugăm să luaţi aminte că documentele - modificate în mod normal (adică cu ajutorul interfeţei SPIP) sunt în mod automat - reindexate : aşadar, această comandă nu este utilă decât în mod excepţional.', - 'texte_moteur_recherche_non_active' => 'Motorul de căutare nu este activat.', 'texte_multilinguisme' => 'Dacă doriţi să gestionaţi articole în mai multe limbi, cu o navigare complexă, puteţi să adăugaţi un meniu de selectare a limbii pentru articole şi/sau rubrici, în funcţie de organizarea site-ului dumneavoastră.', # MODIF 'texte_multilinguisme_trad' => 'Puteţi, de asemenea, să activaţi sistemul de gestiune a legăturilor între diferitele traduceri ale unui articol.', # MODIF 'texte_non_compresse' => 'necomprimat (server-ul dumneavoastră nu suportă această funcţionalitate)', - 'texte_nouveau_message' => 'Mesaj nou', 'texte_nouvelle_version_spip_1' => 'Aţi instalat o nouă versiune SPIP.', 'texte_nouvelle_version_spip_2' => 'Această nouă versiune necesită o aducere la zi mai completă decât în mod obişnuit. Dacă sunteţi webmaster-ul site-ului, vă rugam să ştergeţi fişierul @connect@ şi să reluaţi instalarea de la capăt pentru a permite aducerea la zi a parametrilor dumneavoastră de conectare la baza de date. (Nota Bene : dacă cumva aţi uitat parametrii de conectare, aruncaţi o privire la fişierul @connect@ înainte de a-l şterge...)', # MODIF @@ -803,7 +688,6 @@ reinstalare a SPIP pentru a recrea o nouă bază de date cât şi un nou acces a 'texte_rappel_selection_champs' => '[Nu uitaţi să selecţionaţi corect acest câmp.]', 'texte_recalcul_page' => 'Dacă doriţi recalcularea unei singure pagini treceţi mai degrabă în spaţiul public şi utilizaţi butonul « recalculează ».', - 'texte_recapitiule_liste_documents' => 'Această pagină recapitulează lista documentelor pe care le-aţi plasat direct în interiorul rubricilor. Pentru a modifica informaţiile fiecărui document, urmăriţi legătura către pagina rubricii corespunzătoare.', 'texte_recuperer_base' => 'Reparaţi baza de date', 'texte_reference_mais_redirige' => 'articol referenţiat în site-ul dumneavoastră, dar redirijat către un alt URL.', 'texte_requetes_echouent' => 'Atunci când anumite cereri SQL eşuează în mod sistematic şi fără un motiv evident, este posibil ca baza de date însăşi să fie cauza. @@ -824,7 +708,6 @@ Dacă problema persistă, vă rugăm să-l contactaţi pe furnizorul dumneavoast avez fait des modifications importantes de graphisme ou de structure du site.', 'texte_sur_titre' => 'Supra-titlu', 'texte_table_ok' => ': această tabelă este OK.', - 'texte_tables_indexation_vides' => 'Tabelele de indexare ale motorului sunt goale.', 'texte_tentative_recuperation' => 'Tentativă de recuperare', 'texte_tenter_reparation' => 'Încercaţi o reparare a bazei de date', 'texte_test_proxy' => 'Pentru a încerca acest proxy, indicaţi aici adresa unui site Web @@ -838,18 +721,8 @@ avez fait des modifications importantes de graphisme ou de structure du site.', pentru a evita modificări simultane ale aceluiaşi articol. Această opţiune este dezactivată în mod implicit pentru a evita afişarea de mesaje intempensive de avertisment.', - 'texte_trop_resultats_auteurs' => 'Prea multe rezultate pentru "@cherche_auteur@" ; vă rugăm să rafinaţi termenii căutării.', - 'texte_unpack' => 'descărcarea ultimei versiuni', - 'texte_utilisation_moteur_syndiques' => 'Atunci când folosiţi motorul de căutare integrat -în SPIP, puteţi efectua căutari în articolele şi site-urile sindicalizate cu două metode diferite - - Prima şi cea mai simplă consistă în căutarea doar în titlurile şi descrierile articolelor. - - A doua metodă, mult mai puternică, permite lui SPIP să caute deasemenea în textul site-urilor referenţiate. Când referenţiati un site, SPIP va efectua căutarea în chiar textul site-ului respectiv.', - 'texte_utilisation_moteur_syndiques_2' => 'Această metodă forţează SPIP să viziteze - de o maniera regulată site-urile referenţiate, - ceea ce poate provoca o uşoară încetinire a propriului dumneavoastră site.', 'texte_vide' => 'gol', 'texte_vider_cache' => 'Goliţi tamponul', - 'titre_admin_effacer' => 'Întreţinere tehnică', 'titre_admin_tech' => 'Întreţinere tehnică', 'titre_admin_vider' => 'Întreţinere tehnică', 'titre_cadre_afficher_article' => 'Afişaţi articolele', @@ -875,54 +748,27 @@ avez fait des modifications importantes de graphisme ou de structure du site.', 'titre_naviguer_dans_le_site' => 'Navigaţi în structura site-ului...', 'titre_nouvelle_rubrique' => 'Rubrică nouă', 'titre_numero_rubrique' => 'RUBRICA NUMĂRUL :', - 'titre_page_admin_effacer' => 'Întreţinere tehnică : ştergeţi baza de date', 'titre_page_articles_edit' => 'Modificaţi : @titre@', 'titre_page_articles_page' => 'Articolele', 'titre_page_articles_tous' => 'Tot site-ul', - 'titre_page_auteurs' => 'Vizitatori', 'titre_page_calendrier' => 'Calendar @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Configuraţia site-ului', - 'titre_page_config_fonctions' => 'Configuraţia site-ului', - 'titre_page_configuration' => 'Configuraţia site-ului', - 'titre_page_controle_petition' => 'Urmărirea petiţiilor', 'titre_page_delete_all' => 'ştergere totală şi ireversibilă', - 'titre_page_documents_liste' => 'Documentele rubricilor', - 'titre_page_index' => 'Spaţiul dumneavoastră privat', - 'titre_page_message_edit' => 'Scrieţi un mesaj', - 'titre_page_messagerie' => 'Mesageria dumneavoastră', 'titre_page_recherche' => 'Rezultatele căutării @recherche@', 'titre_page_statistiques_referers' => 'Statistici (legături în intrare)', - 'titre_page_statistiques_signatures_jour' => 'Număr de semnături pe zi', - 'titre_page_statistiques_signatures_mois' => 'Număr de semnături pe lună', 'titre_page_upgrade' => 'Actualizaţi SPIP', 'titre_publication_articles_post_dates' => 'Publicarea articolelor post-datate', - 'titre_referencer_site' => 'Referenţiaţi site-ul :', - 'titre_rendez_vous' => 'ÎNTÂLNIRE :', 'titre_reparation' => 'Reparare', 'titre_suivi_petition' => 'Urmărirea petiţiilor', 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'Nu există un articol care să aibă acest numar.', 'trad_article_traduction' => 'Toate versiunile acestui articol :', - 'trad_deja_traduit' => 'Eroare: nu se poate lega acest articol la numărul cerut.', 'trad_delier' => 'Nu mai legaţi articolul de aceste traduceri', # MODIF 'trad_lier' => 'Acest articol este o traducere a articolului cu numărul :', 'trad_new' => 'Scrieţi o nouă traducere a acestui articol', # MODIF // U - 'upload_info_mode_document' => 'Depuneţi această imagine în portofoliu', - 'upload_info_mode_image' => 'Retrageţi această imagine din portofoliu', - 'utf8_convert_attendez' => 'Aşteptaţi câteva momente şi reîncărcaţi această pagină.', - 'utf8_convert_avertissement' => 'Puteţi să convertiţi conţinutul bazei dumneavoastră de date (articole, ştiri, etc.) din codarea @orig@ catre codarea @charset@.', - 'utf8_convert_backup' => 'Nu uitaţi să faceţi înainte de orice o copie de siguranţă a totalităţii site-ului dumneavoastră. Va trebui, de asemenea, să verificaţi că scheletele şi fişierele de limbă sunt compatibile @charset@.', - 'utf8_convert_erreur_deja' => 'Site-ul dumneavoastră este deja în @charset@, conversia e inutilă ...', 'utf8_convert_erreur_orig' => 'Eroare : codarea @charset@ nu este suportată.', - 'utf8_convert_termine' => 'Gata !', - 'utf8_convert_timeout' => 'Important : în caz de timeout al server-ului de web, vă rugăm să reîncărcaţi această pagină până când aceasta vă va indica « terminat ».', - 'utf8_convert_verifier' => 'Va trebui ca acum să goliţi memoria tampon şi să verificaţi că totul se petrece bine în cadrul site-ului public. În caz de probleme majore, o copie de siguranţă a fost efectuată (în format SQL) în directorul @rep@.', - 'utf8_convertir_votre_site' => 'Convertiţi site-ul dumneavoastră în utf-8', // V 'version' => 'Versiune :' ); - -?> diff --git a/www/ecrire/lang/ecrire_ru.php b/www/ecrire/lang/ecrire_ru.php index 3efe288d..3e5c4b7d 100644 --- a/www/ecrire/lang/ecrire_ru.php +++ b/www/ecrire/lang/ecrire_ru.php @@ -1,9 +1,11 @@ 'Внимание: @nom_auteur_modif@ вносил изменения в эту статью @date_diff@ минут назад', 'avis_aucun_resultat' => 'Ничего не найдено', 'avis_base_inaccessible' => 'Невозможно подключиться к базе @base@.', - 'avis_chemin_invalide_1' => 'Выбранный Вами путь', + 'avis_chemin_invalide_1' => 'Выбранный вами путь', 'avis_chemin_invalide_2' => 'похоже не верно. Пожалуйста, вернитесь на предыдущую страницу и проверьте предоставленную информацию.', 'avis_connexion_echec_1' => 'Не удалось подключится к SQL серверу.', 'avis_connexion_echec_2' => 'Пожалуйста, вернитесь на предыдущую страницу и проверьте внесенную информацию.', - 'avis_connexion_echec_3' => 'N.B. На многих серверах, Вы должны сделать запрос для включения Вашего доступа к базе данных SQL перед тем как использовать её. Если Вы не можете установить соединение, убедитесь, что этот запрос действительно был сделан.', + 'avis_connexion_echec_3' => 'N.B. На многих серверах вы должны сделать запрос для включения вашего доступа к базе данных SQL перед тем, как использовать её. Если вы не можете установить соединение, убедитесь, что такой запрос действительно был сделан.', + 'avis_connexion_erreur_creer_base' => 'База данных не может быть создана.', 'avis_connexion_erreur_nom_base' => 'Название базы может состоять только из латинских букв, цифр и знака нижнего подчеркивания.', 'avis_connexion_ldap_echec_1' => 'Не удалось подключиться к LDAP.', - 'avis_connexion_ldap_echec_2' => 'Вернитесь на предыдущую страницу, и проверьте внесенную Вами информацию.', + 'avis_connexion_ldap_echec_2' => 'Вернитесь на предыдущую страницу и проверьте введенную вами информацию.', 'avis_connexion_ldap_echec_3' => 'Кроме того, не используйте поддержку LDAP для импорта пользователей.', - 'avis_deplacement_rubrique' => 'Внимание! В этом разделе находится @contient_breves@ новостей@scb@:: если Вы перемещаете его, пожалуйста, поставьте отметку для подтверждения операции.', - 'avis_destinataire_obligatoire' => 'Вы должны выбрать получателя перед отправкой этого сообщения.', + 'avis_deplacement_rubrique' => 'Внимание! В этом разделе находится @contient_breves@ новостей@scb@: если вы перемещаете его, пожалуйста, поставьте отметку для подтверждения операции.', 'avis_erreur_connexion_mysql' => 'Ошибка соединения с SQL ', - 'avis_erreur_version_archive' => 'Внимание! Файл @archive@ создан в другой версии SPIP, отличной от версии на вашем сайте Есть риск повреждения Вашей базы данных или - возникновения сбоев в работе Вашего сайта. -Не стоит восстанавливать резервную версию. - .

      Для получения дополнительной информации -обратитесь к . документации по SPIP .', - 'avis_espace_interdit' => ' SPIP уже установлен.', + 'avis_espace_interdit' => ' Запрещенная зона

      SPIP уже установлен.
      ', 'avis_lecture_noms_bases_1' => 'Программа установки не может прочитать названия установленных баз данных.', - 'avis_lecture_noms_bases_2' => 'Ни одна из баз данных не доступна, или функция позволяющая внесение в список баз данных было выведена из строя - в целях безопасности (лучше иметь большее количество хостов).', + 'avis_lecture_noms_bases_2' => 'Ни одна из баз данных не доступна или функция, позволяющая внесение в список баз данных, была отключена в целях безопасности (лучше иметь большее количество хостов).', 'avis_lecture_noms_bases_3' => 'В случае, если второй выбор был верен, возможно, что база данных, названная за Вашим логином, может быть использована:', - 'avis_non_acces_message' => 'У Вас нет доступа к этому сообщению.', - 'avis_non_acces_page' => 'У Вас нет доступа к этой странице.', + 'avis_non_acces_page' => 'У вас нет доступа к этой странице.', 'avis_operation_echec' => 'Не удалось выполнить операцию.', 'avis_operation_impossible' => 'Невозможно выполнить операцию', - 'avis_probleme_archive' => 'Ошибка чтения файла @archive@', 'avis_suppression_base' => 'ВНИМАНИЕ: удаление данных необратимо', - 'avis_version_mysql' => 'Ваша версия SQL (@version_mysql@) не позволяет восстановить таблицы базы данных.', // B 'bouton_acces_ldap' => 'Добавить доступ к LDAP >>', 'bouton_ajouter' => 'Добавить', - 'bouton_ajouter_participant' => 'ДОБАВИТЬ УЧАСТНИКА:', - 'bouton_annonce' => 'ОБЪЯВЛЕНИЕ', 'bouton_annuler' => 'Отмена', 'bouton_cache_activer' => 'Включить кеширование', 'bouton_cache_desactiver' => 'Временно отключить кеширование', - 'bouton_checkbox_envoi_message' => 'возможность отправки сообщения', - 'bouton_checkbox_indiquer_site' => 'Вы должны ввести название вебсайта', - 'bouton_checkbox_signature_unique_email' => 'только одна подпись за адрес электронной почты', - 'bouton_checkbox_signature_unique_site' => 'только одна подпись за вебсайт', 'bouton_demande_publication' => 'Запрос на публикацию этой статьи', 'bouton_desactive_tout' => 'Отключить все', 'bouton_desinstaller' => 'Удалить', - 'bouton_effacer_index' => 'Удалить индексацию', 'bouton_effacer_tout' => 'Удалить ВСЕ', - 'bouton_envoi_message_02' => 'ОТПРАВИТЬ СООБЩЕНИЕ', 'bouton_envoyer_message' => 'Отправить сообщение', 'bouton_fermer' => 'Закрыть', 'bouton_mettre_a_jour_base' => 'Обновить базу данных', 'bouton_modifier' => 'Изменить', - 'bouton_pense_bete' => 'ЛИЧНАЯ ЗАПИСКА', - 'bouton_radio_activer_messagerie' => 'Включить внутреннюю передачу сообщений', - 'bouton_radio_activer_messagerie_interne' => 'Включить внутреннюю передачу сообщений', - 'bouton_radio_activer_petition' => 'Включить комментарии', 'bouton_radio_afficher' => 'Показать', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Показывать в списке находящихся на сайте редакторов', - 'bouton_radio_desactiver_messagerie' => 'Выключить передачу сообщений', 'bouton_radio_envoi_annonces_adresse' => 'Отправить объявления на адрес:', 'bouton_radio_envoi_liste_nouveautes' => 'Отправить список последних новостей', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Не показывать в списке находящихся на сайте редакторов', 'bouton_radio_non_envoi_annonces_editoriales' => 'Не отправлять никаких редакционных объявлений', - 'bouton_radio_pas_petition' => 'Отключить комментарии', - 'bouton_radio_petition_activee' => 'Включить комментарии', - 'bouton_radio_supprimer_petition' => 'Удалить комментарии', 'bouton_redirection' => 'ПЕРЕАДРЕСОВЫВАТЬ', + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Восстановить значения по умолчанию', 'bouton_relancer_installation' => 'перезапуск установки', + 'bouton_reset_password' => 'Создать новый пароль и отправить по e-mail', 'bouton_suivant' => 'Следующий', 'bouton_tenter_recuperation' => 'Пробуем отремонтировать базу', 'bouton_test_proxy' => 'Проверить прокси', - 'bouton_vider_cache' => 'Очистить кэш', - 'bouton_voir_message' => 'Предварительный просмотр сообщения перед утверждением', + 'bouton_vider_cache' => 'Очистить кеш', // C - 'cache_mode_compresse' => 'Файлы кэш сохранены в сжатом режиме.', - 'cache_mode_non_compresse' => 'Файлы кэш записаны в несжатом режиме.', 'cache_modifiable_webmestre' => 'Этот параметр может быть изменен только вебмастером.', - 'calendrier_synchro' => 'Если Вы используете календарь, совместимый с iCal , Вы можете согласовать его с данными сайта.', + 'calendrier_synchro' => 'Если вы используете календарь, совместимый с iCal, вы можете синхронизировать его с сайтом.', 'config_activer_champs' => 'Включить следующие поля', 'config_choix_base_sup' => 'Выберите базу на этом сервере', 'config_erreur_base_sup' => 'SPIP не может отобразить список доступных баз данных', - 'config_info_base_sup' => 'Если Вам необходим запрос других баз данных, используя SPIP, не зависимо от того находятся ли они на том же SQL сервере или где-нибудь еще, используйте форму показанную ниже для их описания. Если Вы оставите некоторые поля пустыми, то связанные детали будут использоваться с основной базой данных.', + 'config_info_base_sup' => 'Если вам необходим запрос других баз данных используя SPIP, независимо от того, находятся ли они на том же SQL сервере или где-нибудь еще, используйте форму, показанную ниже, для их описания. Если вы оставите некоторые поля пустыми, то связанные детали будут использоваться с основной базой данных.', 'config_info_base_sup_disponibles' => 'Дополнительные базы данных для которых могут быть отправлены запросы:', 'config_info_enregistree' => 'Новые настройки сохранены', - 'config_info_logos' => 'Каждому элементу сайта можно установить свой логотип и также логотип для отображения "при наведении мышки" ', + 'config_info_logos' => 'Каждому элементу сайта можно установить свой логотип и также логотип для отображения «при наведении мыши» ', 'config_info_logos_utiliser' => 'Включить загрузку логотипов к материалам', 'config_info_logos_utiliser_non' => 'Отключить загрузку логотипов к материалам', - 'config_info_logos_utiliser_survol' => 'Разрешить добавлять логотип для отображения "при наведении мышкой" ', - 'config_info_logos_utiliser_survol_non' => 'Запретить добавлять логотип для отображения "при наведении мышкой" ', - 'config_info_redirection' => 'Виртуальная статья - это возможность перенаправлять посетителей на по произвольному URL, как другую страницу этого сайта, так и на любую ссылку в интернете.', + 'config_info_logos_utiliser_survol' => 'Разрешить добавлять логотип для отображения «при наведении мыши»', + 'config_info_logos_utiliser_survol_non' => 'Запретить добавлять логотип для отображения «при наведении мыши»', + 'config_info_redirection' => 'Виртуальная статья - это возможность перенаправлять посетителей по произвольному URL, как на другую страницу этого сайта, так и на любую ссылку в интернете.', 'config_redirection' => 'Виртуальные статьи (редирект)', 'config_titre_base_sup' => 'Описание дополнительной базы данных', 'config_titre_base_sup_choix' => 'Выберите дополнительную базу данных', 'connexion_ldap' => 'Соединение:', - 'copier_en_local' => 'Скопировать для локального сайта', 'creer_et_associer_un_auteur' => 'Создать и добавить автора', - 'creer_et_associer_une_rubrique' => 'Создать и добавить раздел', // D 'date_mot_heures' => ':', @@ -128,31 +102,30 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_adresse_email' => 'E-mail', 'entree_adresse_email_2' => 'E-mail', 'entree_base_donnee_1' => 'Сервер базы данных', - 'entree_base_donnee_2' => '(Обычно - "localhost", но вы можете уточнить в настройках хостинга)', - 'entree_biographie' => 'О авторе', - 'entree_chemin_acces' => 'Войти в путь:', + 'entree_base_donnee_2' => '(Обычно - «localhost», но вы можете уточнить в настройках хостинга)', + 'entree_biographie' => 'Об авторе (краткая биография)', + 'entree_chemin_acces' => 'Войти по пути:', 'entree_cle_pgp' => 'Ваш PGP ключ', 'entree_cle_pgp_2' => 'Ключ PGP ', 'entree_contenu_rubrique' => '(Краткое содержание раздела.)', 'entree_identifiants_connexion' => 'Логин и пароль', 'entree_identifiants_connexion_2' => 'Информация о подключении', 'entree_informations_connexion_ldap' => 'Пожалуйста укажите параметры подключения к LDAP. Вы можете получить эту информацию у вашего системного администратора.', - 'entree_infos_perso' => 'О авторе', - 'entree_infos_perso_2' => 'Кто автор ?', + 'entree_infos_perso' => 'Об авторе', + 'entree_infos_perso_2' => 'Кто автор?', 'entree_interieur_rubrique' => 'В разделе:', - 'entree_liens_sites' => 'Гипрссылка (ссылка, сайт для посещения ...)', + 'entree_liens_sites' => 'Гиперссылка (ссылка, сайт для посещения ...)', 'entree_login' => 'Ваш логин', 'entree_login_connexion_1' => 'Логин соединения', - 'entree_login_connexion_2' => '(Иногда соответствует Вашему логину FTP доступа и иногда остается пустым)', - 'entree_login_ldap' => 'Начальный LDAP логин ', + 'entree_login_connexion_2' => '(Иногда соответствует вашему логину FTP доступа и иногда остается пустым)', 'entree_mot_passe' => 'Ваш пароль', 'entree_mot_passe_1' => 'Пароль', - 'entree_mot_passe_2' => '(Иногда соответствует Вашему паролю FTP доступа и иногда остается пустым)', + 'entree_mot_passe_2' => '(Иногда соответствует вашему паролю FTP доступа и иногда остается пустым)', 'entree_nom_fichier' => 'Пожалуйста, выберите файл с резервной копией @texte_compresse@:', 'entree_nom_pseudo' => 'Ваше имя или псевдоним', 'entree_nom_pseudo_1' => '(Ваше имя или псевдоним)', 'entree_nom_pseudo_2' => 'Имя или псевдоним', - 'entree_nom_site' => 'Название Вашего сайта', + 'entree_nom_site' => 'Название вашего сайта', 'entree_nom_site_2' => 'Название сайта', 'entree_nouveau_passe' => 'Новый пароль', 'entree_passe_ldap' => 'Пароль', @@ -162,7 +135,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_url' => 'Адрес Вашего сайта', 'entree_url_2' => 'URL', 'erreur_connect_deja_existant' => 'Уже существует сервер с таким названием', + 'erreur_email_deja_existant' => 'Это email уже зарегистрирован.', 'erreur_nom_connect_incorrect' => 'Недопустимое имя сервера', + 'erreur_plugin_attribut_balise_manquant' => 'Атрибут @attribut@ отсутствует в теге @balise@.', 'erreur_plugin_desinstalation_echouee' => 'Не удалось удалить плагин, но вы можете отключить его.', 'erreur_plugin_fichier_absent' => 'Не хватает файла(ов)', 'erreur_plugin_fichier_def_absent' => 'Отсутствует описание файла ', @@ -174,19 +149,19 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // H 'htaccess_a_simuler' => 'Внимание: в настройках веб-сервера отключено использование @htaccess@ файлов. Для обеспечение достаточного уровня безопасности внесите изменения в настройки сервера самостоятельно или обратитесь в техническую поддержку хостинга. -Так же вы можете задать константы @constantes@ (в файле mes_options.php) так, что бы эти файлы находились все папки @document_root@.', +Также вы можете задать константы @constantes@ (в файле mes_options.php) так, чтобы эти файлы находились вне папки @document_root@.', 'htaccess_inoperant' => 'htaccess не рабочий', // I 'ical_info1' => 'Эта страница представляет Вам несколько методов для поддержки связи с деятельностью этого сайта', 'ical_info2' => 'Вы можете узнать больше в документации о SPIP .', - 'ical_info_calendrier' => 'В Вашем распоряжении есть два календаря. Первый - это карта сайта, показывающая все опубликованные статьи. Второй содержит редакторские объявления точно также, как и Ваши последние личные сообщения: он сохранен для Вас, благодаря ключу, который Вы можете изменить в любое время подтвердив свой пароль.', + 'ical_info_calendrier' => 'В вашем распоряжении есть два календаря. Первый - это карта сайта, показывающая все опубликованные статьи. Второй содержит редакторские объявления, а также ваши личные сообщения: он сохранен для вас, благодаря ключу, который вы можете изменить в любое время, подтвердив свой пароль.', 'ical_methode_http' => 'Загрузить', 'ical_methode_webcal' => 'Синхронизация (webcal://)', 'ical_texte_js' => 'Вы можете вставить этот javascript код на любой сайт для того, что бы отображать последние опубликованные статьи и материалы вашего сайта.', - 'ical_texte_prive' => 'Этот календарь является строго личным, он информирует Вас о работе со статьями на этом сайте (задачи, персональные настройки, отправленные статьи и новости дня ...).', + 'ical_texte_prive' => 'Этот календарь является строго личным, он информирует вас о работе со статьями на этом сайте (задачи, персональные настройки, отправленные статьи и новости дня ...).', 'ical_texte_public' => 'Этот календарь позволяет Вам следить за основной деятельностью этого сайта (публикация статей и новостей).', - 'ical_texte_rss' => 'Вы можете экспортировать последние обновления на вашем сайте в формате XML/RSS (Rich Site Summary). Так же, благодаря этому формату данных, вы можете импортировать информацию с других сайтов в Интернете. ', + 'ical_texte_rss' => 'Вы можете экспортировать последние обновления на вашем сайте в формате XML/RSS (Rich Site Summary). Также этот формат данных позволяет импортировать информацию с других сайтов в Интернете (создавать синдицированные сайты). ', 'ical_titre_js' => 'Javascript', 'ical_titre_mailing' => 'Список адресатов', 'ical_titre_rss' => 'Получение статей и новостей с других сайтов по RSS', @@ -202,16 +177,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_configuration' => 'Настройки', 'icone_creer_auteur' => 'Создать автора и добавить к статье', 'icone_creer_mot_cle' => 'Создать ключ и добавить к статье', - 'icone_creer_mot_cle_rubrique' => 'Создать ключ и добавить к разделу', - 'icone_creer_mot_cle_site' => 'Создать ключ и добавить к сайту', 'icone_creer_rubrique_2' => 'Новый раздел', + 'icone_developpement' => 'Разработка', 'icone_edition' => 'Сайт', - 'icone_envoyer_message' => 'Отправить сообщение', 'icone_ma_langue' => 'Язык', 'icone_mes_infos' => 'Профиль', 'icone_mes_preferences' => 'Мои настройки', 'icone_modifier_article' => 'Изменить статью', - 'icone_modifier_message' => 'Изменить это сообщение', 'icone_modifier_rubrique' => 'Изменить этот раздел', 'icone_publication' => 'Публикации', 'icone_relancer_signataire' => 'Опять связаться с подписавшимся', @@ -222,47 +194,35 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_supprimer_cookie' => 'Удалить cookie', 'icone_supprimer_rubrique' => 'Удалить этот раздел', 'icone_supprimer_signature' => 'Удалить эту подпись', - 'icone_valider_signature' => 'Утвердить эту подпись', + 'icone_valider_signature' => 'Подтвердить эту подпись', 'image_administrer_rubrique' => 'Вы можете управлять этим разделом', - 'impossible_modifier_login_auteur' => 'Невозможно изменить логин.', - 'impossible_modifier_pass_auteur' => 'Невозможно изменить пароль.', 'info_1_article' => '1 статья', - 'info_1_article_syndique' => '1 загруженная статья', 'info_1_auteur' => '1 автор', 'info_1_message' => '1 сообщение', 'info_1_mot_cle' => '1 ключ', 'info_1_rubrique' => '1 раздел', - 'info_1_site' => '1 сайт', 'info_1_visiteur' => '1 посетитель', - 'info_activer_cookie' => 'Вы можете включитьадминистраторский cookie, который позволяет Вам - легко переключаться между основной и административной частью сайта ..', + 'info_activer_cookie' => 'Вы можете включить администраторский cookie, который позволяет вам легко переключаться между основной и административной частью сайта.', + 'info_activer_menu_developpement' => 'Показать меню Développement', 'info_admin_etre_webmestre' => 'Предоставить мне права вебмастера', - 'info_admin_gere_rubriques' => 'Этот администратор управляет следующими разделами:', - 'info_admin_gere_toutes_rubriques' => 'Администратор управляет всеми разделами.', - 'info_admin_gere_toutes_rubriques_2' => 'Я управляю всеми разделами', 'info_admin_je_suis_webmestre' => 'Я вебмастер', 'info_admin_statuer_webmestre' => 'Сделать администратора вебмастером сайта', 'info_admin_webmestre' => 'Администратор является вебмастером', 'info_administrateur' => 'Администратор', 'info_administrateur_1' => 'Aдминистратор', - 'info_administrateur_2' => 'на этом сайте(использовать с предостережением)', + 'info_administrateur_2' => 'на этом сайте (использовать с осторожностью)', 'info_administrateur_site_01' => 'Если Вы администратор сайта, пожалуйста', 'info_administrateur_site_02' => 'нажмите на эту ссылку', 'info_administrateurs' => 'Администраторы', 'info_administrer_rubrique' => 'Вы можете управлять этим разделом', 'info_adresse' => 'на адрес:', + 'info_adresse_desinscription' => 'Отменить подписку по адресу:', 'info_adresse_url' => 'Адрес сайта (URL)', 'info_afficher_par_nb' => 'Показать', - 'info_afficher_visites' => 'Показать посещения для:', 'info_aide_en_ligne' => 'SPIP Oнлайн Помощь', - 'info_ajout_image' => 'Когда Вы добавляете изображения как прикрепленные документы к статье, - SPIP может автоматически создать уменьшенную копию - вставленных изображений. Это позволит,например,автоматически - создавать галерею или портфолио.', - 'info_ajout_participant' => 'Был добавлен следующий участник:', + 'info_ajout_image' => 'Когда вы добавляете изображения как прикрепленные документы к статье, SPIP может автоматически создать уменьшенную копию вставленных изображений. Это позволит, например, автоматически создавать галерею или портфолио.', 'info_ajouter_rubrique' => 'Добавить другой раздел для управления:', 'info_annonce_nouveautes' => 'Анонсы последних новостей', - 'info_anterieur' => 'предыдущий', 'info_article' => 'статья', 'info_article_2' => 'статьи', 'info_article_a_paraitre' => 'Статьи, которые будут опубликованы в будущем', @@ -272,71 +232,64 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_miens' => 'Мои статьи', 'info_articles_tous' => 'Все статьи', 'info_articles_trouves' => 'Найденные статьи', - 'info_articles_trouves_dans_texte' => 'Статьи найденные в тексте', 'info_attente_validation' => 'Ваши статьи на утверждении', 'info_aucun_article' => 'Нет статей', - 'info_aucun_article_syndique' => 'Нет загруженных статей', 'info_aucun_auteur' => 'Нет авторов', 'info_aucun_message' => 'Нет сообщений', 'info_aucun_rubrique' => 'Нет разделов', - 'info_aucun_site' => 'Нет сайтов', - 'info_aucun_visiteur' => 'Нет посетителей', 'info_aujourdhui' => 'сегодня:', - 'info_auteur_message' => 'ОТПРАВИТЕЛЬ СООБЩЕНИЯ:', - 'info_auteurs' => 'Автора', - 'info_auteurs_par_tri' => 'Автора@partri@', - 'info_auteurs_trouves' => 'Найденные автора', + 'info_auteur_gere_rubriques' => 'Этот автор управляет следующими рубриками:', + 'info_auteur_gere_toutes_rubriques' => 'Этот автор управляет всеми разделами', + 'info_auteur_gere_toutes_rubriques_2' => 'Я управляю всеми разделами', + 'info_auteurs' => 'Авторы', + 'info_auteurs_par_tri' => 'Авторы@partri@', + 'info_auteurs_trouves' => 'Найденные авторы', 'info_authentification_externe' => 'Внешнее подтверждение подлинности', 'info_avertissement' => 'Предупреждение', 'info_barre_outils' => 'с панелью инструментов?', - 'info_base_installee' => 'Структура Вашей базы данных установлена.', - 'info_bio' => 'Био', + 'info_base_installee' => 'Структура вашей базы данных установлена.', + 'info_bio' => 'Биография', 'info_cache_desactive' => 'Кеширование временно отключено.', - 'info_chapeau' => 'Вводная', + 'info_chapeau' => 'Введение', 'info_chapeau_2' => 'Введение:', 'info_chemin_acces_1' => 'Опции: Путь доступа к каталогу', - 'info_chemin_acces_2' => 'Теперь Вы должны настроить путь доступа к каталогу информации. Эта информация необходима для просмотра профилей пользователей, хранящихся в каталоге.', + 'info_chemin_acces_2' => 'Теперь вы должны настроить путь доступа к каталогу информации. Эта информация необходима для просмотра профилей пользователей, хранящихся в каталоге.', 'info_chemin_acces_annuaire' => 'Опции: Путь доступа к каталогу', 'info_choix_base' => 'Третий этап:', 'info_classement_1' => ' из @liste@', 'info_classement_2' => ' из @liste@', 'info_code_acces' => 'Не забудьте свой пароль!', 'info_compatibilite_html' => 'Использовать стандартный HTML ', - 'info_compresseur_gzip' => 'Убедитесь, что настройки хостинга поддерживают сжатие HTML. Для этого воспользуйтесь этим сайтом: @testgzip@', - 'info_compresseur_texte' => 'Если Ваш сервер автоматически не сжимает HTML страницы при их отправке, Вы можете попробывать вынужденное сжатие для уменьшения размера передаваемых страниц. Внимание: это может иметь заметный негативный эффект на производительность некоторых серверов, ', - 'info_config_suivi' => 'Если этот адрес соответствует списку адресатов, Вы можете указать ниже адрес, где участники сайта могут зарегистрироваться. Этим адресом может быть адрес сайта(например страница списка регистрации через сеть), или адрес электронной почты с определенным предметом (например: @adresse_suivi@?subject=subscribe):', - 'info_config_suivi_explication' => 'Вы можете подписаться на почтовую рассылку этого сайта. Тогда Вы будете получать на email информацию по статьям и новостям, отправленных для публикации.', + 'info_config_suivi' => 'Если этот адрес соответствует списку e-mail рассылки, вы можете указать ниже адрес, по которому участники сайта могут зарегистрироваться. Этим адресом может быть адрес сайта (например страница списка регистрации через сеть) или адрес электронной почты с определенной темой (например: @adresse_suivi@?subject=subscribe):', + 'info_config_suivi_explication' => 'Вы можете подписаться на почтовую рассылку этого сайта. Тогда вы будете получать на email информацию о статьях и новостях, отправленных для публикации.', 'info_confirmer_passe' => 'Подтвердите новый пароль:', - 'info_conflit_edition_avis_non_sauvegarde' => 'Внимание: следующие поля были изменены в другом месте. Поэтому Ваши изменения в этих полях не были сохранены.', + 'info_conflit_edition_avis_non_sauvegarde' => 'Внимание: следующие поля были изменены в другом месте. Поэтому ваши изменения в этих полях не были сохранены.', 'info_conflit_edition_differences' => 'Различия:', 'info_conflit_edition_version_enregistree' => 'Сохраненная версия:', 'info_conflit_edition_votre_version' => 'Ваша версия:', 'info_connexion_base' => 'Второй этап: подключение к базе данных', 'info_connexion_base_donnee' => 'Параметры подключение к базе данных', - 'info_connexion_ldap_ok' => 'Cоединение c LDAP установлено.

      Вы можете перейти к следующему шагу.

      ', + 'info_connexion_ldap_ok' => 'Cоединение c LDAP установлено.

      Вы можете перейти к следующему шагу.

      ', 'info_connexion_mysql' => 'Подключение к SQL', 'info_connexion_ok' => 'Соединение установлено.', 'info_contact' => 'Контакт', 'info_contenu_articles' => 'Содержание статей', 'info_contributions' => 'Contributions', 'info_creation_paragraphe' => '(Разделяйте абзацы пустыми строками)', - 'info_creation_rubrique' => 'Создай те хотя бы один раздел, для того, что бы создавать статьи.
      ', + 'info_creation_rubrique' => 'Создайте хотя бы один раздел для того, чтобы создавать статьи.
      ', 'info_creation_tables' => 'Четвертый этап: Создание таблиц базы данных', 'info_creer_base' => 'Создать новую базу данных:', 'info_dans_rubrique' => 'В разделе:', 'info_date_publication_anterieure' => 'Дополнительная дата:', 'info_date_referencement' => 'ДАТА ССЫЛКИ НА ЭТОТ САЙТ:', - 'info_derniere_etape' => 'Следующий этап: Готово!', - 'info_derniers_articles_publies' => 'Ваши последние опубликованные статьи', - 'info_desactiver_messagerie_personnelle' => 'Вы можете включать и отключать Ваши персональные сообщения на этом сайте.', + 'info_derniere_etape' => 'Готово!', 'info_descriptif' => 'Описание:', 'info_desinstaller_plugin' => 'удалить файлы и отключить плагин', 'info_discussion_cours' => 'Текущие обсуждения', - 'info_ecrire_article' => 'Перед тем как написать статью, Вы должны создать хотя бы один раздел.', + 'info_ecrire_article' => 'Перед тем как написать статью, вы должны создать хотя бы один раздел.', 'info_email_envoi' => 'Адрес электронной почты отправителя (дополнительно)', 'info_email_envoi_txt' => 'Введите используемый адрес электронной почты отправителя, посылая электронные письма (по умолчанию, адрес получателя используется как адрес отправителя), :', 'info_email_webmestre' => 'E-mail веб-мастера', - 'info_entrer_code_alphabet' => 'Введите код используемого набора символов', 'info_envoi_email_automatique' => 'Автоматическая рассылка', 'info_envoyer_maintenant' => 'Отправить сейчас', 'info_etape_suivante' => 'Перейти к следующему этапу', @@ -347,36 +300,28 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_facilite_suivi_activite' => 'Для облегчения проверки исполнения редактирования сайта; SPIP может рассылать уведомления по электронной почте, для редакторской почтовой рассылки например, прошение о публикации и утверждение статьи.', - 'info_fichiers_authent' => 'Файл подтверждения подлинности ".htpasswd"', - 'info_forums_abo_invites' => 'Ваш сайт содержит форумы по подписке; посетители могут зарегистрироваться к ним на основном сайте.', - 'info_gauche_admin_effacer' => 'Только администраторы имеют доступ к этой странице.

      Она обеспечивает доступ к ряду функциям по обслуживанию сайта. Некоторые из них требуют прав доступа к FTP сайта.

      ', - 'info_gauche_admin_tech' => 'Страница только для вебмастера сайта.

      Вы можете выполнять задачи по эксплуатации сайта. Часть из них может потребовать FTP доступа к сайту.

      ', - 'info_gauche_admin_vider' => 'Только вебмастера имеют доступ к этой странице.

      Тут есть возможность выполнять разные задачи по обслуживанию сайта. Для выполнения отдельных задач необходима доступ к сайту по FTP.

      ', + 'info_fichiers_authent' => 'Файл подтверждения подлинности «.htpasswd»', + 'info_forums_abo_invites' => 'Ваш сайт содержит форумы по подписке; посетители могут зарегистрироваться на них на основном сайте.', + 'info_gauche_admin_tech' => 'Страница только для вебмастера сайта.

      Вы можете выполнять задачи по эксплуатации сайта. Часть из них может потребовать FTP доступа к сайту.

      ', + 'info_gauche_admin_vider' => 'Только вебмастера имеют доступ к этой странице.

      Тут есть возможность выполнять разные задачи по обслуживанию сайта. Для выполнения отдельных задач необходима доступ к сайту по FTP.

      ', 'info_gauche_auteurs' => 'Список всех авторов сайта. Статус автора обозначен цветом (администратор = зеленый; автор = желтый).', - 'info_gauche_auteurs_exterieurs' => 'Зарегистрировавшиеся пользователи обозначены синим цвета, а удаленные пользователи - иконкой корзины.', - 'info_gauche_messagerie' => 'Передача сообщений позволяет обмениваться сообщениями между редакторами, сохранять записки (для Вашего личного использования) или показывать объявления на основной странице административной части (если Вы - администратор).', - 'info_gauche_numero_auteur' => 'НОМЕР АВТОРА:', - 'info_gauche_statistiques_referers' => 'Эта страница показывает список ссылок , то есть сайты, содержащие ссылки к Вашему личному сайту, только для вчера и сегодня: фактически этот список обновляется каждые 24 часа.', - 'info_gauche_visiteurs_enregistres' => 'Вы найдете здесь зарегистрированных посетителей - в основной части сайта (форумы по подписке).', + 'info_gauche_auteurs_exterieurs' => 'Зарегистрированные пользователи обозначены синим цветом, а удаленные пользователи - иконкой корзины.', + 'info_gauche_messagerie' => 'Передача сообщений позволяет обмениваться сообщениями между редакторами, сохранять записки (для вашего личного использования) или показывать объявления на основной странице административной части (если вы - администратор).', + 'info_gauche_statistiques_referers' => 'Эта страница показывает список ссылок, то есть сайты, содержащие ссылки на ваш личный сайт, только для вчера и сегодня: фактически этот список обновляется каждые 24 часа.', + 'info_gauche_visiteurs_enregistres' => 'Вы найдете здесь пользователей, зарегистрированных в основной части сайта (форумы по подписке).', 'info_generation_miniatures_images' => 'Создание уменьшенных изображений', - 'info_gerer_trad' => 'Включить перевод ссылок?', 'info_gerer_trad_objets' => '@objets@ : управление переводами', 'info_hebergeur_desactiver_envoi_email' => 'Некоторые хосты отключают автоматизированную отправку писем на своих серверах. В этом случае следующие возможности SPIP не могут быть осуществлены.', 'info_hier' => 'вчера:', - 'info_historique_activer' => 'Вести историю изменений', - 'info_historique_affiche' => 'Показать эту версию', - 'info_historique_comparaison' => 'сравнить', - 'info_historique_desactiver' => 'Отключить историю изменений', - 'info_historique_texte' => 'История изменений это функция, которая ведет перечень всех правок, которые были внесены в статью или другую часть контента. Это дает вам возможность вернуться к более ранней версии документа или отменить часть правок.', 'info_identification_publique' => 'Ваша публичная идентификация...', 'info_image_process' => 'Выберите лучший метод для создания уменьшенной копии, нажимая на соответствующую картинку.', - 'info_image_process2' => 'Если картинки не отображаются, это значит, что ваш хостинг не поддерживает разширения по работе с изображениями. Уточните в тех. поддержке хостинга о возможности использовать библиотеки "GD" или "Imagemagic".', - 'info_images_auto' => 'Кэш файлов изображений', + 'info_image_process2' => 'Если картинки не отображаются -значит ваш хостинг не поддерживает расширения по работе с изображениями. Уточните в тех. поддержке хостинга о возможности использовать библиотеки «GD» или «Imagemagic».', + 'info_images_auto' => 'Кеш файлов изображений', 'info_informations_personnelles' => 'Настройки профиля', + 'info_inscription' => 'Зарегистрирован', 'info_inscription_automatique' => 'Автоматическая регистрация новых авторов', 'info_jeu_caractere' => 'Кодировка сайта', 'info_jours' => 'дни', @@ -385,15 +330,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_ldap_ok' => 'Установление подлинности LDAP.', 'info_lien_hypertexte' => 'Гиперссылка:', 'info_liste_nouveautes_envoyee' => 'Информация о последних обновлениях отправлена', - 'info_liste_redacteurs_connectes' => 'Автора онлайн', + 'info_liste_redacteurs_connectes' => 'Авторы онлайн', 'info_login_existant' => 'Этот логин уже используется.', 'info_login_trop_court' => 'Слишком короткий логин.', 'info_login_trop_court_car_pluriel' => 'Логин должен состоять минимум из @nb@ символов.', 'info_logos' => 'Логотипы', 'info_maximum' => 'максимум:', 'info_meme_rubrique' => 'В этом разделе:', - 'info_message' => 'Сообщение от', - 'info_message_efface' => 'СООБЩЕНИЕ УДАЛЕНО', 'info_message_en_redaction' => 'Ваше сообщение в ходе работы', 'info_message_technique' => 'Техническое сообщение:', 'info_messagerie_interne' => 'Внутренняя передача сообщений', @@ -408,29 +351,23 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => 'Изменить раздел:', 'info_modifier_titre' => 'Изменить: @titre@', 'info_mon_site_spip' => 'Мой сайт ', - 'info_mot_sans_groupe' => '(Ключи вне групп...)', - 'info_moteur_recherche' => 'Встроенный поиск', 'info_moyenne' => 'в среднем:', - 'info_multi_articles' => 'Включить языковое меню для статей?', 'info_multi_cet_article' => 'Язык этой статьи:', 'info_multi_langues_choisies' => 'Выберите языки для материалов на сайте. Вы не можете отключить уже используемые языки. Языки, уже используемые Вашим сайтом(в верху списка) не могут быть отключены.', 'info_multi_objets' => '@objets@ : включить языковое меню', - 'info_multi_rubriques' => 'Включить выбор языка в разделе?', 'info_multi_secteurs' => '... только для разделов в корне сайта?', 'info_nb_articles' => '@nb@ статей', - 'info_nb_articles_syndiques' => '@nb@ RSS статей', 'info_nb_auteurs' => '@nb@ авторов', 'info_nb_messages' => '@nb@ сообщений', 'info_nb_mots_cles' => '@nb@ ключей', 'info_nb_rubriques' => '@nb@ разделов', - 'info_nb_sites' => '@nb@ сайтов', 'info_nb_visiteurs' => '@nb@ посетителей', 'info_nom' => 'Имя', 'info_nom_destinataire' => 'Имя получателя', + 'info_nom_pas_conforme' => 'нельзя использовать html теги', 'info_nom_site' => 'Название Вашего сайта', 'info_nombre_articles' => '@nb_articles@ статьи,', - 'info_nombre_partcipants' => 'УЧАСТНИКИ ОБСУЖДЕНИЯ:', 'info_nombre_rubriques' => '@nb_rubriques@ разделы,', 'info_nombre_sites' => '@nb_sites@ сайты,', 'info_non_deplacer' => 'Не перемещать ...', @@ -438,20 +375,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( (недавно изданные статьи и новости).', 'info_non_envoi_liste_nouveautes' => 'Не отправлять список последних новостей', 'info_non_modifiable' => 'не может быть изменен', - 'info_non_suppression_mot_cle' => 'Я не хочу удалить этот ключ.', - 'info_note_numero' => 'Заметка @numero@', + 'info_non_suppression_mot_cle' => 'Я не хочу удалять этот ключ.', 'info_notes' => 'Примечания', - 'info_nouveaux_message' => 'Новые сообщения', 'info_nouvel_article' => 'Новая статья', 'info_nouvelle_traduction' => 'Новый перевод:', 'info_numero_article' => 'НОМЕР СТАТЬИ:', 'info_obligatoire_02' => '(обязательно)', 'info_option_accepter_visiteurs' => 'Включить регистрацию посетителей на сайте', - 'info_option_faire_suivre' => 'Отправлять авторам комментарии к их статьям', 'info_option_ne_pas_accepter_visiteurs' => 'Отключить регистрацию посетителей на сайте', 'info_options_avancees' => 'ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ', - 'info_ortho_activer' => 'Включить проверку орфографии', - 'info_ortho_desactiver' => 'Отключить проверку орфографии.', 'info_ou' => 'или...', 'info_page_interdite' => 'Запрещенная страница', 'info_par_nom' => 'по названию', @@ -461,43 +393,34 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_passe_trop_court' => 'Пароль слишком короткий.', 'info_passe_trop_court_car_pluriel' => 'Пароль должен содержать минимум @nb@ символов.', 'info_passes_identiques' => 'Два пароля не совпадают.', - 'info_pense_bete_ancien' => 'Ваши старые заметки', 'info_plus_cinq_car' => 'более 5 символов', 'info_plus_cinq_car_2' => '(Более 5 символов)', 'info_plus_trois_car' => '(Более 3 символов)', 'info_popularite' => 'популярность: @popularite@; посещения: @visites@', - 'info_popularite_4' => 'популярность: @popularite@; посещения: @visites@', 'info_post_scriptum' => 'Постскриптум', 'info_post_scriptum_2' => 'Постскриптум: ', 'info_pour' => 'для', - 'info_preview_admin' => 'Разрешить пред.просмотр только администраторам', - 'info_preview_comite' => 'Разрешить пред. просмотр всем авторам', - 'info_preview_desactive' => 'Режим предварительного просмотра отключен', - 'info_preview_texte' => 'Настройки пред. просмотра. Вы можете посмотреть как выглядят на сайте материалы со статусом "на утверждении". Включить эту возможность для всех авторов, только для администраторов или отключить вообще?', - 'info_principaux_correspondants' => 'Ваши основные корреспонденты', - 'info_procedez_par_etape' => 'пожалуйста выполняйте шаг за шагом', + 'info_preview_texte' => 'Использование предварительного просмотра. Вы можете посмотреть как выглядят на сайте материалы со статусом «утверждается». Включить эту возможность для всех авторов, только для администраторов или отключить вообще?', + 'info_procedez_par_etape' => 'пожалуйста, выполняйте шаг за шагом', 'info_procedure_maj_version' => 'необходимо запустить процедуру обновления текущей базы данных для новой версии SPIP.', 'info_proxy_ok' => 'Прокси сервер работает.', 'info_ps' => 'P.S.', 'info_publier' => 'опубликовать', 'info_publies' => 'Ваши статьи, опубликованные на сайте:', 'info_question_accepter_visiteurs' => 'Если шаблоны Вашего сайта позволяют посетителям регистрироваться, не входя в административную часть, пожалуйста включите следующую опцию:', - 'info_question_inscription_nouveaux_redacteurs' => 'Вы хотите разрешить регистрацию новых пользователей на сайте? Если да, то посетители смогут регистрироваться самостоятельно, используя стандартную форму. Так же у них будет доступ в административную часть сайта и возможность создавать новые материалы.
      Пароль для доступа будет отправлен пользователю по email автоматически. Если ваш хостинг не поддерживает отправку писем, то эта опция будет бесполезна.
      ', - 'info_question_utilisation_moteur_recherche' => 'Использовать внутренний поиск SPIP? (Его отключение ускоряет работу системы.)', - 'info_question_vignettes_referer_non' => 'Не показывать изображения главной страницы', + 'info_question_inscription_nouveaux_redacteurs' => 'Вы хотите разрешить посетилям регистрироваться на сайте? Если да, то они смогут регистрироваться самостоятельно, используя стандартную форму. Они также получат доступ в административную часть сайта и возможность создавать новые материалы.
      Пароль для входа будет отправлен новому пользователю автоматически, на его email адрес. Если ваш хостинг не поддерживает отправку писем, то автоматическая регистрация не будет работать.
      ', 'info_qui_edite' => '@nom_auteur_modif@ работал над этим материалом @date_diff@ минут назад', 'info_racine_site' => 'Корень сайта', 'info_recharger_page' => 'Пожалуйста перезагрузите эту страницу через несколько минут.', - 'info_recherche_auteur_a_affiner' => 'Слишком много результатов для "@cherche_auteur"; пожалуйста уточните запрос.', - 'info_recherche_auteur_ok' => 'Несколько редакторов были найдены для "@cherche_auteur":', - 'info_recherche_auteur_zero' => 'Ничего не найдено по запросу "@cherche_auteur@".', + 'info_recherche_auteur_zero' => 'Ничего не найдено по запросу «@cherche_auteur@».', 'info_recommencer' => 'Пожалуйста попробуйте еще раз.', 'info_redacteur_1' => 'Автор', 'info_redacteur_2' => 'имея доступ к административной части( рекомендовал ), ', - 'info_redacteurs' => 'Автора', + 'info_redacteurs' => 'Авторы', 'info_redaction_en_cours' => 'РЕДАКТИРУЕТСЯ', 'info_redirection' => 'Перенаправление', 'info_redirection_activee' => 'Перенаправление включено.', + 'info_redirection_boucle' => 'Вы пытаетесь перенаправить статью саму на себя.', 'info_redirection_desactivee' => 'Перенаправление удалено.', 'info_refuses' => 'Ваши отклоненные статьи', 'info_reglage_ldap' => 'Опции Настройка импорта LDAP', @@ -508,7 +431,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => 'Разделы', 'info_rubriques_02' => 'разделы', 'info_rubriques_trouvees' => 'Найденные разделы', - 'info_rubriques_trouvees_dans_texte' => 'Найденные разделы (в тексте)', 'info_sans_titre' => 'Без названия', 'info_selection_chemin_acces' => 'Выберите путь доступа к каталогу:', 'info_signatures' => 'подписи', @@ -518,23 +440,21 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_site_reference_2' => 'Ссылающийся сайт', 'info_site_web' => 'САЙТ:', 'info_sites' => 'сайты', - 'info_sites_lies_mot' => 'Сайты с этим ключем', + 'info_sites_lies_mot' => 'Сайты с этим ключом', 'info_sites_proxy' => 'Использовать прокси', 'info_sites_trouves' => 'Найденные сайты', - 'info_sites_trouves_dans_texte' => 'Найденные сайты(в тексте)', 'info_sous_titre' => 'Подзаголовок:', 'info_statut_administrateur' => 'Администратор', 'info_statut_auteur' => 'Права доступа:', 'info_statut_auteur_2' => 'Я', 'info_statut_auteur_a_confirmer' => 'Регистрация будет подтверждена', 'info_statut_auteur_autre' => 'Другой статус:', - 'info_statut_efface' => 'Удалено', 'info_statut_redacteur' => 'Автор', 'info_statut_utilisateurs_1' => 'Статус по умолчанию для импортированных пользователей', 'info_statut_utilisateurs_2' => 'Выберите статус, характерный для присутствующих людей в каталоге LDAP, когда они подключаются впервые. Позже, Вы можете изменить это значение для каждого автора индивидуально.', 'info_suivi_activite' => 'Работа с материалами', - 'info_surtitre' => 'Главное название:', - 'info_syndication_integrale_1' => 'Ваш сайт предлагает объединенные файлы (смотрите “@titre@”).', + 'info_surtitre' => 'Надзаголовок:', + 'info_syndication_integrale_1' => 'Ваш сайт предлагает объединенные файлы (смотрите «@titre@»).', 'info_syndication_integrale_2' => 'Отправить статью полностью или только первые абзацы?', 'info_table_prefix' => 'Вы можете задать свой префикс для имен таблиц базы данных (благодаря этому вы можете установить несколько сайтов на одну базу данных). Для написания префикса используйте только прописные латинские буквы и цифры.', 'info_taille_maximale_images' => 'Максимальный размер картинок, с которыми может работать SPIP. Размер в картинок в пикселях.
      SPIP не сможет пережимать картинки большего размера.', @@ -551,7 +471,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_presents' => 'Все статьи в этом разделе', 'info_tous_articles_refuses' => 'Все отклоненные статьи', 'info_tous_les' => 'каждый:', - 'info_tous_redacteurs' => 'Объявление для всех редакторов', 'info_tout_site' => 'Весь сайт', 'info_tout_site2' => 'Статья не была переведена на этот язык.', 'info_tout_site3' => 'Статья была переведена на этот язык, но с тех пор в оригинал внесли изменения. Необходимо обновить перевод.', @@ -568,7 +487,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_une_rubrique_02' => '1 раздел', 'info_url' => 'Адрес:', 'info_url_proxy' => 'URL прокси', - 'info_url_site' => 'АДРЕС САЙТА:', + 'info_url_proxy_pas_conforme' => 'URL прокси указан неверно.', + 'info_url_site_pas_conforme' => 'неправильный URL сайта.', 'info_url_test_proxy' => 'URL для проверки', 'info_urlref' => 'Гиперссылка:', 'info_utilisation_spip' => 'SPIP готов к работе', @@ -579,7 +499,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_visiteurs_02' => 'Посетители основной части сайта', 'info_webmestre_forces' => 'Список вебмастеров содержится в @file_options@.', 'install_adresse_base_hebergeur' => 'Адрес сервера базы данных вы можете узнать у своего хостера', - 'install_base_ok' => 'База @base@ была распознана', 'install_connect_ok' => 'Была объявлена новая база на сервере @connect@.', 'install_echec_annonce' => 'Эта установка вероятно не будет работать, или приведет к неустойчивой работе сайта...', 'install_extension_mbstring' => 'SPIP не работает с:', @@ -589,10 +508,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'install_pas_table' => 'В базе данных еще нет таблиц', 'install_pass_base_hebergeur' => 'Вы можете установить пароль через контрольную панель хостинга или запросить его в службе поддержки вашего хостинга.', 'install_php_version' => 'Версия PHP @version@ слишком старая (минимум = @minimum@)', - 'install_select_langue' => 'Выберите язык, потом нажмите на кнопку "далее", чтобы начать процедуру установки.', + 'install_select_langue' => 'Выберите язык, потом нажмите кнопку «далее», чтобы начать процедуру установки.', 'install_select_type_db' => 'Укажите тип базы данных:', 'install_select_type_mysql' => 'MySQL', - 'install_select_type_mysqli' => 'MySQLi', 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', @@ -609,8 +527,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_activer_messages_avertissement' => 'Предупреждать о совместной работе', 'item_administrateur_2' => 'администратор', 'item_afficher_calendrier' => 'Показывать в календаре', - 'item_autoriser_documents_joints' => 'Разрешить прикреплять документы к статьям', - 'item_autoriser_documents_joints_rubriques' => 'Разрешить документы в разделах', 'item_autoriser_syndication_integrale' => 'Включать целые статьи в объединенные файлы ', 'item_choix_administrateurs' => 'администраторы', 'item_choix_generation_miniature' => 'Создавать уменьшенные копии автоматически.', @@ -618,7 +534,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_choix_redacteurs' => 'редакторы', 'item_choix_visiteurs' => 'посетители сайта', 'item_creer_fichiers_authent' => 'Создать .htpasswd файлы', - 'item_limiter_recherche' => 'Ограничить поиск информации, содержащейся на Вашем сайте', 'item_login' => 'Логин', 'item_messagerie_agenda' => 'Включить систему обмена сообщениями и календарь', 'item_mots_cles_association_articles' => 'статьи', @@ -628,22 +543,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_non_accepter_inscriptions' => 'Не разрешать регистрацию', 'item_non_activer_messages_avertissement' => 'НЕ предупреждать о совместной работе', 'item_non_afficher_calendrier' => 'Не показывать календарь', - 'item_non_autoriser_documents_joints' => 'Запретить добавление файлов к статьям', - 'item_non_autoriser_documents_joints_rubriques' => 'Не разрешать документов в разделах', 'item_non_autoriser_syndication_integrale' => 'Отправка только краткого изложения', - 'item_non_compresseur' => 'Отключить сжатие', 'item_non_creer_fichiers_authent' => 'Не создавать эти файлы', - 'item_non_gerer_statistiques' => 'Не вести статистику', - 'item_non_limiter_recherche' => 'Расширить поиск до содержания сайтов, на которые ссылаются', 'item_non_messagerie_agenda' => 'Отключить систему обмена сообщениями и календарь', 'item_non_publier_articles' => 'Публиковать статьи только после указанной даты публикации.', - 'item_non_utiliser_moteur_recherche' => 'Не использовать систему', 'item_nouvel_auteur' => 'Новый автор', 'item_nouvelle_rubrique' => 'Новый раздел', 'item_oui' => 'Да', 'item_publier_articles' => 'Немедленно публиковать статьи, вне зависимости от даты публикации', 'item_reponse_article' => 'Ответить на статью', - 'item_utiliser_moteur_recherche' => 'Использовать поисковую систему', 'item_version_html_max_html4' => 'Использовать только HTML4 на сайте', 'item_version_html_max_html5' => 'Разрешить HTML5', 'item_visiteur' => 'посетитель', @@ -654,7 +562,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // L 'label_bando_outils' => 'Панель инструментов', 'label_bando_outils_afficher' => 'Показать инструменты', - 'label_bando_outils_masquer' => 'Спрятать инструменты', + 'label_bando_outils_masquer' => 'Скрыть инструменты', 'label_choix_langue' => 'Язык интерфейса', 'label_nom_fichier_connect' => 'Отображать имя сервера', 'label_slogan_site' => 'Слоган сайта', @@ -663,20 +571,20 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'label_texte_et_icones_page' => 'Отображение страницы', 'ldap_correspondance' => 'наследовать поле @champ@', 'ldap_correspondance_1' => 'Наследовать поля LDAP', - 'ldap_correspondance_2' => 'Укажите соответствующей LDAP поле для каждого из данных полей. Оставьте их пустыми, если вы не хотите, что бы они заполнялись. Несколько LDAP полей разделяются пробелом или запятой.', - 'lien_ajout_destinataire' => 'Добавить этого получателя', + 'ldap_correspondance_2' => 'Укажите соответствующее LDAP поле для каждого из данных полей. Оставьте их пустыми, если вы не хотите, чтобы они заполнялись. Несколько LDAP полей разделяются пробелом или запятой.', 'lien_ajouter_auteur' => 'Добавить этого автора', - 'lien_ajouter_participant' => 'Добавить участника', 'lien_ajouter_une_rubrique' => 'Добавить раздел', 'lien_email' => 'Электронная почта', 'lien_nom_site' => 'НАЗВАНИЕ САЙТА:', + 'lien_rapide_contenu' => 'Перейти к информации', + 'lien_rapide_navigation' => 'Перейти к навигации', + 'lien_rapide_recherche' => 'Перейти к поиску', 'lien_retirer_auteur' => 'Убрать автора', 'lien_retirer_rubrique' => 'Убрать раздел', 'lien_retirer_tous_auteurs' => 'Убрать всех авторов', 'lien_retirer_toutes_rubriques' => 'Убрать все разделы', - 'lien_retrait_particpant' => 'удалить этого участника', 'lien_site' => 'сайт', - 'lien_supprimer_rubrique' => 'удалить этот раздел', + 'lien_tout_decocher' => 'Снять все', 'lien_tout_deplier' => 'Развернуть все ', 'lien_tout_replier' => 'Свернуть все', 'lien_tout_supprimer' => 'Удалить все', @@ -696,18 +604,18 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'module_fichier_langue' => 'Языковой файл', 'module_raccourci' => 'Ярлык', 'module_texte_affiche' => 'Показанный текст', - 'module_texte_explicatif' => 'Вы можете вставить следующие ярлыки в шаблон Вашего сайта. Они будут автоматически переведены на разные языки, для которых существует языковой файл.', - 'module_texte_traduction' => 'Языковой файл « @модуль » является доступным в:', + 'module_texte_explicatif' => 'Вы можете вставить следующие ярлыки в шаблон вашего сайта. Они будут автоматически переведены на те языки, для которых существует языковой файл.', + 'module_texte_traduction' => 'Языковой файл «@module@» является доступным в:', 'mois_non_connu' => 'неизвестный', // N - 'nouvelle_version_spip' => 'Доступна новая версия SPIP @version@ ', + 'nouvelle_version_spip' => 'Доступно обновление - версия SPIP @version@ ', + 'nouvelle_version_spip_majeure' => 'Доступна новая версия SPIP @version@ ', // O 'onglet_contenu' => 'Содержания', 'onglet_declarer_une_autre_base' => 'Объявить другую базу данных', 'onglet_discuter' => 'Обсудить', - 'onglet_documents' => 'Документы', 'onglet_interactivite' => 'Интерактивность', 'onglet_proprietes' => 'Свойства', 'onglet_repartition_actuelle' => 'сейчас', @@ -716,6 +624,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // P 'page_pas_proxy' => 'Эта страница не должна проходить через прокси', 'pas_de_proxy_pour' => 'Если необходимо, укажите для каких компьютеров или доменов не следует применять прокси (например: @exemple@) ', + 'phpinfo' => 'Настройки PHP', 'plugin_charge_paquet' => 'Загрузка архива файла @имя@', 'plugin_charger' => 'Скачать', 'plugin_erreur_charger' => 'ошибка: невозможно загрузить @zip@', @@ -727,19 +636,19 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'plugin_etat_stable' => 'стабильный', 'plugin_etat_test' => 'тестируется', 'plugin_impossible_activer' => 'Невозможно включить плагин @plugin@', - 'plugin_info_automatique1' => 'Для того, что бы разрешить автоматическую установку плагинов:', + 'plugin_info_automatique1' => 'Для того, чтобы разрешить автоматическую установку плагинов:', 'plugin_info_automatique1_lib' => 'Если вы хотите разрешить автоматическую установку этой библиотеки, то:', 'plugin_info_automatique2' => 'Создать папку @rep@ ;', 'plugin_info_automatique3' => 'Установите права доступа на каталог (755 или 777).', 'plugin_info_automatique_creer' => 'для создания в корне вебсайта.', 'plugin_info_automatique_exemples' => 'Официальные RSS листы с плагинами:', 'plugin_info_automatique_ftp' => 'Вы можете установить плагины по FTP в каталог @rep@ ', - 'plugin_info_automatique_lib' => 'Некоторые плагины должны иметь возможность загружать файлы в каталог lib/. Возможно ее необходимо создать самостоятельно.', + 'plugin_info_automatique_lib' => 'Некоторые плагины должны иметь возможность загружать файлы в каталог lib/. Возможно, его необходимо создать самостоятельно.', 'plugin_info_automatique_liste' => 'Ваши плагины:', 'plugin_info_automatique_liste_officielle' => 'официальные плагины', 'plugin_info_automatique_liste_update' => 'Обновить списки', 'plugin_info_automatique_ou' => 'или...', - 'plugin_info_automatique_select' => 'Выберите плагин, SPIP скачает и установит его в каталог @rep@.Если плагин уже установлен существует, он будет обновлен.', + 'plugin_info_automatique_select' => 'Выберите плагин, SPIP скачает и установит его в каталог @rep@. Если плагин уже установлен, он будет обновлен.', 'plugin_info_credit' => 'Авторская информация', 'plugin_info_erreur_xml' => 'Неправильная декларация плагина', 'plugin_info_install_ok' => 'Установка прошла успешно', @@ -750,7 +659,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'plugin_info_telecharger' => 'загрузите с @url@ и установить в @rep@', 'plugin_info_upgrade_ok' => 'Обновление прошло успешно', 'plugin_librairies_installees' => 'Установленные библиотеки', + 'plugin_necessite_extension_php' => 'Требуется PHP-расширение @plugin@ версии @version@.', + 'plugin_necessite_extension_php_sans_version' => 'Требуется PHP-расширение @plugin@', 'plugin_necessite_lib' => 'Для этого плагина необходима библиотека @lib@', + 'plugin_necessite_php' => 'Требуется @plugin@ версии @version@.', 'plugin_necessite_plugin' => 'Для этого плагина необходим @plugin@ @version@ или новее.', 'plugin_necessite_plugin_sans_version' => 'Требуется плагин @plugin@', 'plugin_necessite_spip' => 'Для этого плагина требуется SPIP @version@ или новее.', @@ -759,13 +671,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'plugin_titre_automatique_ajouter' => 'Добавить плагин', 'plugin_titre_installation' => 'Установить плагин @plugin@ ', 'plugin_titre_modifier' => 'Мои плагины', + 'plugin_utilise_extension_php' => 'Используется PHP-расширение @plugin@ версии @version@.', + 'plugin_utilise_php' => 'Используется @plugin@ версии @version@.', + 'plugin_utilise_plugin' => 'Используйте плагин @plugin@ версии @version@.', 'plugin_zip_active' => 'Продолжить для активации', 'plugin_zip_adresse' => 'Укажите ссылку на zip файла плагина для скачки, либо адрес RSS листа плагинов.', 'plugin_zip_adresse_champ' => 'URL плагина (zip file) или RSS листа ', - 'plugin_zip_content' => 'Он содержит следующие файлы(@taille@),
      готовые к установке в каталоге @rep@', + 'plugin_zip_content' => 'Он содержит следующие файлы (@taille@),
      готовые к установке в каталоге @rep@', 'plugin_zip_installe_finie' => 'Файл @zip@ был распакован и установлен.', 'plugin_zip_installe_rep_finie' => 'Файл @zip@ был распакован и установлен в каталоге @rep@ ', - 'plugin_zip_installer' => 'Теперь Вы можете установить.', + 'plugin_zip_installer' => 'Теперь вы можете установить.', 'plugin_zip_telecharge' => 'Файл @zip@ был скачан', 'plugins_actif_aucun' => 'Нет включенных плагинов.', 'plugins_actif_un' => 'Включен один плагин', @@ -785,7 +700,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // Q 'queue_executer_maintenant' => 'Запустить', - 'queue_info_purger' => 'Вы можете удалить все текущие задачи и обнулить всю очередь задач', + 'queue_info_purger' => 'Вы можете удалить все текущие задачи и очистить всю очередь задач', 'queue_nb_jobs_in_queue' => 'В очереди @nb@ задач', 'queue_next_job_in_nb_sec' => 'Следующая задача через @nb@ s', 'queue_no_job_in_queue' => 'Список задач пуст', @@ -795,166 +710,133 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // R 'repertoire_plugins' => 'Папка:', + 'required' => '(обязательно)', // S 'sans_heure' => 'время неопределено', - 'statut_admin_restreint' => '(ограниченный администратор)', # MODIF + 'statut_admin_restreint' => '(ограниченный администратор)', + 'statut_webmestre' => 'вебмастер', // T 'tache_cron_asap' => 'CRON @function@ (ASAP)', 'tache_cron_secondes' => 'CRON @function@ (каждые @nb@ с)', - 'taille_cache_image' => 'Кэш файлов изображений ( автоматически пережатые картинки, изображения формул и текста, трасформированного в графику) занимает @taille@ в каталоге @dir@.', - 'taille_cache_infinie' => 'На вашем сайте нет ограничений на размер кэша.', - 'taille_cache_maxi' => 'Заданный максимальный размер файлов кэша составляет приблизительно @octets@ .', + 'taille_cache_image' => 'Кеш файлов изображений (автоматически пережатые картинки, изображения формул и текста, трасформированного в графику) занимает @taille@ в каталоге @dir@.', + 'taille_cache_infinie' => 'На вашем сайте нет ограничений на размер кеша.', + 'taille_cache_maxi' => 'Заданный максимальный размер файлов кеша составляет приблизительно @octets@ .', 'taille_cache_moins_de' => 'Размер кеша меньше @octets@.', 'taille_cache_octets' => 'Приблизительный размер кеша @octets@.', - 'taille_cache_vide' => 'Кэш пуст.', - 'taille_repertoire_cache' => 'Текущий размер кэша', + 'taille_cache_vide' => 'Кеш пуст.', + 'taille_repertoire_cache' => 'Текущий размер кеша', 'text_article_propose_publication' => 'Статья отправлена на утверждение администратору.', - 'texte_acces_ldap_anonyme_1' => 'Некоторые серверы LDAP не позволяют анонимного доступа. В этом случае Вы должны указать исходный идентификатор доступа, чтобы впоследствии иметь возможность искать информацию в каталоге. Однако, в большинстве случаев следующие поля можно оставить пустыми.', - 'texte_admin_effacer_01' => 'Эта команда удаляет все содержание базы данных, -включая все параметры доступа для редакторов и администраторов. После выполнения этого, Вы должны + 'texte_acces_ldap_anonyme_1' => 'Некоторые серверы LDAP не позволяют анонимного доступа. В этом случае вы должны указать исходный идентификатор доступа, чтобы впоследствии иметь возможность искать информацию в каталоге. Однако, в большинстве случаев следующие поля можно оставить пустыми.', + 'texte_admin_effacer_01' => 'Эта команда удаляет всё содержание базы данных, +включая все параметры доступа для редакторов и администраторов. После её выполнения вы должны переустановить SPIP, чтобы восстановить новую базу данных и доступ первого администратора.', - 'texte_adresse_annuaire_1' => '( Если Ваш каталог установлен на том же компьютере, что Ваш вебсайт, это вероятно «локальный хост».)', + 'texte_adresse_annuaire_1' => '(Если ваш каталог установлен на том же компьютере, что ваш вебсайт, это вероятно «localhost».)', 'texte_ajout_auteur' => 'Следующий автор был добавлен к статье:', - 'texte_annuaire_ldap_1' => 'Если Вы имеете доступ к каталогу(LDAP), Вы можете использовать его, для автоматического импорта пользователей под SPIP.', + 'texte_annuaire_ldap_1' => 'Если вы имеете доступ к каталогу (LDAP), вы можете использовать его, для автоматического импорта пользователей под SPIP.', 'texte_article_statut' => 'Статус статьи:', 'texte_article_virtuel' => 'Виртуальная статья', - 'texte_article_virtuel_reference' => 'Виртуальная статья: статья, на которую ссылаются, в Вашем SPIP сайте, но переадресованная на другой адрес. Чтобы удалить перенаправление, удалите вышеупомянутый адрес.', - 'texte_aucun_resultat_auteur' => 'Нет результатов для "@cherche_auteur@".', - 'texte_auteur_messagerie' => 'Этот сайт может постоянно контролировать список редакторов,находящихся он-лайн, который позволяет Вам обмениваться сообщениями в реальном времени. Вы можете решить не появляться в этом списке (тогда Вы будете "невидимыми" для других пользователей).', - 'texte_auteur_messagerie_1' => 'Этот сайт позволяет обмениваться сообщениями и создавать административные форумы обсуждения между участниками сайта. Вы можете решить не участвовать в этом обмене.', - 'texte_auteurs' => 'АВТОРА', + 'texte_article_virtuel_reference' => 'Виртуальная статья: статья, на которую ссылаются на вашем SPIP сайте, но переадресованная на другой адрес. Чтобы удалить перенаправление, удалите вышеупомянутый адрес.', + 'texte_aucun_resultat_auteur' => 'Нет результатов для «@cherche_auteur@».', + 'texte_auteur_messagerie' => 'Этот сайт может постоянно контролировать список редакторов, находящихся он-лайн, который позволяет вам обмениваться сообщениями в реальном времени. Вы можете решить не появляться в этом списке (тогда вы будете «невидимы» для других пользователей).', + 'texte_auteurs' => 'АВТОРЫ', 'texte_choix_base_1' => 'Выбрать Вашу базу данных:', 'texte_choix_base_2' => 'SQL сервер содержит несколько баз данных.', - 'texte_choix_base_3' => 'Выберите ниже ту, которую Ваш интернет провайдер может отнести к Вам:', + 'texte_choix_base_3' => 'Выберите ниже ту, которую ваш интернет провайдер может отнести к вам:', 'texte_choix_table_prefix' => 'Префикс для таблиц БД:', - 'texte_commande_vider_tables_indexation' => 'Использовать эту команду для очистки индексации таблиц -с помощью поисковой системы, интегрированной в SPIP. Это позволит Вам - освободить немного места на диске.', 'texte_compatibilite_html' => 'Вы можете установить настройки SPIP так, что бы он генерировал код, совместимый с HTML4, или же с поддержкой HTML5.', - 'texte_compatibilite_html_attention' => 'В случае включения поддержки HTML5 проблемы не ожидаются, но в этом случае необходимо добавить следующую строку кода на все страницы сайта: .', - 'texte_compresse_ou_non' => '(файл может быть архивом)', + 'texte_compatibilite_html_attention' => 'При включении поддержки HTML5 проблем не ожидается, но в этом случае необходимо добавить следующую строку кода на все страницы сайта: .', 'texte_compte_element' => '@count@ элемент', 'texte_compte_elements' => '@count@ элементы', - 'texte_conflit_edition_correction' => 'Пожалуйста, проверьте ниже разницу между двумя версиями. Таким образом Вы можете копировать Ваши изменения и начать заново.', + 'texte_conflit_edition_correction' => 'Пожалуйста, проверьте ниже разницу между двумя версиями. Вы также можете скопировать ваши изменения и начать всё заново.', 'texte_connexion_mysql' => 'Параметры доступа к базе данных задаются в контрольной панели хостинга. Если у вас нет возможности управлять вашими базами данных вы можете запросить помощь в службе поддержки хостинга.', 'texte_contenu_article' => '(Краткое содержание статьи.)', - 'texte_contenu_articles' => 'Выбрать дополнительные информационные поля для статей. В зависимости от того, как запрограммирован ваш сайт они могут отображаться или не отображаться в общем доступе. ', - 'texte_crash_base' => 'Если Ваша - база данных повреждена, Вы можете попробовать восстановить ее - автоматически.', - 'texte_creer_rubrique' => 'Создайте хотя бы один раздел, для того, что бы писать статьи.
      ', + 'texte_contenu_articles' => 'Выбрать дополнительные информационные поля для статей. В зависимости от того, как запрограммирован ваш сайт, они могут отображаться или не отображаться в общем доступе. ', + 'texte_crash_base' => 'Если ваша база данных повреждена, вы можете попробовать восстановить ее автоматически.', + 'texte_creer_rubrique' => 'Создайте хотя бы один раздел, чтобы писать статьи.
      ', 'texte_date_creation_article' => 'ДАТА СОЗДАНИЯ СТАТЬИ:', 'texte_date_creation_objet' => 'Дата создания :', # on ajoute le ":" 'texte_date_publication_anterieure' => 'Дополнительная дата:', 'texte_date_publication_anterieure_nonaffichee' => 'Скрыть дату более ранней публикации.', 'texte_date_publication_article' => 'ДАТА ОНЛАЙН ПУБЛИКАЦИИ:', 'texte_date_publication_objet' => 'Дата публикации :', - 'texte_descriptif_petition' => 'Описание комментария', + 'texte_definir_comme_traduction_rubrique' => 'Этот раздел является переводом раздела с номером:', 'texte_descriptif_rapide' => 'Краткое описание', 'texte_effacer_base' => 'Удалить базу данных SPIP', - 'texte_effacer_donnees_indexation' => 'Удалить индексацию данных', 'texte_effacer_statistiques' => 'Удалить статистику', 'texte_en_cours_validation' => 'Материалы, требующие проверки. ', 'texte_enrichir_mise_a_jour' => '', - 'texte_fichier_authent' => 'Должен ли SPIP создавать .htpasswd -и .htpasswd-admin файлы в папке @dossier@?

      -Эти файлы используются для ограничения доступа авторов и администраторов -к другим частям сайта (например, к папке с серверной статистикой).

      -

      Если у вас нет необходимости в таких действиях, то оставьте это значение по умолчанию.

      ', # MODIF + 'texte_fichier_authent' => 'Должен ли SPIP создавать .htpasswd и .htpasswd-admin файлы в папке @dossier@?

      Эти файлы используются для ограничения доступа авторов и администраторов к другим частям сайта (например, к папке с серверной статистикой).

      +

      Если у вас нет необходимости в таких действиях, то оставьте значение по умолчанию.

      ', 'texte_informations_personnelles_1' => 'Теперь система создаст вашу учетную запись на сайте.', - 'texte_informations_personnelles_2' => '(Примечание: если вы переустанавливаете SPIP и ваш старый логин и пароль все еще работает, вы можете', + 'texte_informations_personnelles_2' => '(Примечание: если вы переустанавливаете SPIP и ваш старый логин и пароль всё еще работают, вы можете', 'texte_introductif_article' => '(Вступительный текст к статье)', - 'texte_jeu_caractere' => 'Рекомендуется использовать кодировку (utf-8) на Вашем сайте. Это сделает возможным отображать текст на любом языке. ', - 'texte_jeu_caractere_2' => 'Этот параметр не будет преобразовывать текст, который был сохранен в базе данных.', + 'texte_jeu_caractere' => 'Рекомендуется использовать кодировку (utf-8) на вашем сайте. Это сделает возможным отображать текст на любом языке. ', 'texte_jeu_caractere_3' => 'Текущая кодировка:', - 'texte_jeu_caractere_4' => 'Если это не соответствует ситуации, которую Вы имеете с данными (например, после восстановления базы данных с резервной копии), или если Вы создаете этот сайт и хотите использовать разные наборы символов, пожалуйста, укажите набор символов здесь:', - 'texte_jeu_caractere_conversion' => 'Примечание: Вы можете решить преобразовать все тексты (статьи, новости, форумы, и т.д.) Вашего сайта и для всех наборов символов utf-8. Чтобы сделать это, перейдите на страницу конвертации в UTF-8 .', - 'texte_lien_hypertexte' => '(Если ваше сообщение обращается к статье, опубликованной в сети, или к странице, обеспечивающей больше информации, пожалуйста введите здесь название страницы и ее адрес.)', - 'texte_login_ldap_1' => '(Держите пустым для анонимного доступа или войдите в полную дорожку, например « uid=smith, ou=users, dc=my-domain, dc=com ».)', + 'texte_jeu_caractere_4' => 'Если это не соответствует ситуации, которую вы имеете с данными (например, после восстановления базы данных с резервной копии), или если вы создаете этот сайт и хотите использовать разные наборы символов, пожалуйста, укажите набор символов здесь:', + 'texte_login_ldap_1' => '(Держите пустым для анонимного доступа или введите полный путь, например «uid=smith, ou=users, dc=my-domain, dc=com».)', 'texte_login_precaution' => 'Внимание! Это ваш текущий логин на сайте, меняйте вдумчиво.', - 'texte_message_edit' => 'Предупреждение: это сообщение увидят все редакторы. Используйте объявления только для важных событий в жизни сайта.', 'texte_messagerie_agenda' => 'Система отправки сообщений позволяет авторам сайта общаться непосредственно в редакторской части сайта. Она связана с календарем.', 'texte_mise_a_niveau_base_1' => 'Вы только что обновили файлы SPIP - Теперь Вы должны обновить - базу данных сайта.', + Теперь вы должны обновить базу данных сайта.', 'texte_modifier_article' => 'Изменить статью:', - 'texte_moteur_recherche_active' => 'Поисковая система включена. используйте эту команду - если Вы желаете выполнить быструю переиндексацию (после восстановления - резервной копи, например). Вы должны отметить, что документы изменены в - обычном порядке (от интерфейса SPIP) - автоматически - индексированы снова: поэтому эта команда полезна только в особых случаях.', - 'texte_moteur_recherche_non_active' => 'Поисковая система не включена.', - 'texte_multilinguisme' => 'Если на сайте будут размещаться материалы на нескольких языках, вы можете добавить "меню выбора языка" для этих материалов.', - 'texte_multilinguisme_trad' => 'Так же вы можете разрешить объединять разные переводы одного и того же материала. ', + 'texte_multilinguisme' => 'Если на сайте будут размещаться материалы на нескольких языках, вы можете добавить «меню выбора языка» для этих материалов.', + 'texte_multilinguisme_trad' => 'Вы также можете разрешить объединять разные переводы одного и того же материала. ', 'texte_non_compresse' => 'распаковать (Ваш сервер не поддерживает эту функцию)', - 'texte_nouveau_message' => 'Новое сообщение', 'texte_nouvelle_version_spip_1' => 'Вы только что установили новую версию SPIP.', - 'texte_nouvelle_version_spip_2' => 'Что бы обновить сайт до новой версии, то если Вы вебмастер этого сайта, пожалуйста удалите файл @connect@, и повторно начните установку для того, что бы обновить настройки подключения к базе данных.

      (NB.: если Вы забыли свои параметры соединения, то они хранятся в файле @connect@

      ', - 'texte_operation_echec' => 'Вернитесь к предыдущей странице, выберите другую базу данных или создайте новую. Проверьте информацию, предоставленную Вашим хостом.', - 'texte_plus_trois_car' => 'более 3 сомволов', - 'texte_plusieurs_articles' => 'Несколько авторов были найдены для "@cherche_auteur@":', + 'texte_nouvelle_version_spip_2' => 'Чтобы обновить сайт до новой версии, то, если вы - вебмастер этого сайта, пожалуйста, удалите файл @connect@ и повторно начните установку, чтобы обновить настройки подключения к базе данных.

      (NB.: если вы забыли свои параметры соединения, то они хранятся в файле @connect@

      ', + 'texte_operation_echec' => 'Вернитесь к предыдущей странице, выберите другую базу данных или создайте новую. Проверьте информацию, предоставленную вашим хостом.', + 'texte_plus_trois_car' => 'более 3 символов', + 'texte_plusieurs_articles' => 'Несколько авторов были найдены для «@cherche_auteur@»:', 'texte_port_annuaire' => '(Значение по умолчанию является подходящим.)', 'texte_presente_plugin' => 'На этой странице перечень плагинов, доступных на вашем сайте. Включите плагин, отметив соответствующий квадратик.', - 'texte_proposer_publication' => 'Когда Ваша статья закончена,
      , Вы можете представить ее для публикации.', + 'texte_proposer_publication' => 'Когда ваша статья закончена,
      вы можете представить ее для публикации.', 'texte_proxy' => 'В некоторых случаях (внутренний интернет, защищенные сети ...), - необходимо использовать HTTP прокси, чтобы добраться до внешней части сайтов (SPIP документация, объединенные сайты и т. д.). - В этом случае, введите его адрес ниже в форму - http: // proxy:8080 . В большинстве случаев Вы можете оставить это поле пустым.', + необходимо использовать HTTP прокси, чтобы добраться до внешней части сайтов (SPIP документация, объединенные сайты и т. д.). В этом случае, введите его адрес ниже в форме @proxy_en_cours@. В большинстве случаев вы можете оставить это поле пустым.', 'texte_publication_articles_post_dates' => 'Когда публиковать статьи с датой публикации в будущем?', 'texte_rappel_selection_champs' => '[Не забудьте правильно выбрать поле.]', - 'texte_recalcul_page' => 'Если Вы хотите -обновить только одну страницу, Вы можете сделать это с основной части, используя кнопку, "обновить".', - 'texte_recapitiule_liste_documents' => 'Эта страница содержит в себе список документов, которые Вы поместили в разделе. Чтобы изменить информацию каждого документа, следуйте ссылке на страницу соответствующего раздела.', + 'texte_recalcul_page' => 'Если вы хотите обновить только одну страницу, вы можете сделать это в основной части, используя кнопку, «обновить».', 'texte_recuperer_base' => 'Востановить базу данных', - 'texte_reference_mais_redirige' => 'ссылка на статью Вашего SPIP сайта, но переадресована на другой адрес.', + 'texte_reference_mais_redirige' => 'ссылка на статью вашего SPIP сайта, но переадресованная на другой адрес.', 'texte_requetes_echouent' => 'В случае, если при выполнении SQL запросов часто появляются сообщения об ошибках, вполне возможно что повреждена сама база данных.

      В SQL встроенна функция ремонта и восстановления поврежденных таблиц. Вы можете попробовать выполнить процедуру восстановления или ремонта сейчас.

      ', - 'texte_selection_langue_principale' => 'Вы можете выбрать "главный язык" сайта. Он задаёт: + 'texte_selection_langue_principale' => 'Вы можете выбрать «главный язык» сайта. Он задаёт: +
        +
      • формат вывода даты по умолчанию;
      • -
        • формат вывода даты по умолчанию
        • +
        • язык, используемый по умолчанию на сайте;
        • -
        • язык, используемый по умолчанию на сайте
        • - -
        • язык ,по умолчанию, для административной части.
        ', +
      • язык по умолчанию для административной части.
      ', 'texte_sous_titre' => 'Подзаголовок', 'texte_statistiques_visites' => '(темные штрихи: воскресенье / темная кривая: средний уровень)', 'texte_statut_attente_validation' => 'в ожидании утверждения', 'texte_statut_publies' => 'опубликованы на сайте', 'texte_statut_refuses' => 'отклонено', - 'texte_suppression_fichiers' => 'Используйте команду для удаления всех файлов из кэша SPIP. Это позволит обновить все страницы сайта. Это очень удобно если вы изменили шаблоны или обновили значительное количество информации на сайте.', - 'texte_sur_titre' => 'Главное название', - 'texte_table_ok' => ': Эта таблица готова.', - 'texte_tables_indexation_vides' => 'Индексированные таблицы системы пусты.', + 'texte_suppression_fichiers' => 'Используйте команду для удаления всех файлов из кеша SPIP. Это позволит обновить все страницы сайта. Это очень удобно, если вы изменили шаблоны или обновили значительное количество информации на сайте.', + 'texte_sur_titre' => 'Надзаголовок', + 'texte_table_ok' => ': эта таблица готова.', 'texte_tentative_recuperation' => 'Попытка восстановления ', 'texte_tenter_reparation' => 'Попытка восстановления базы данных', - 'texte_test_proxy' => 'Чтобы попробовать прокси, введите здесь адрес - вебсайта, который Вы хотите проверить.', - 'texte_titre_02' => 'Предмет:', - 'texte_titre_obligatoire' => 'Название [обязательно]', + 'texte_test_proxy' => 'Чтобы попробовать прокси, введите здесь адрес вебсайта, который вы хотите проверить.', + 'texte_titre_02' => 'Заглавие:', + 'texte_titre_obligatoire' => 'Заглавие [обязательно]', 'texte_travail_article' => '@nom_auteur_modif@ работал над этой статьей @date_diff@ минут назад', - 'texte_travail_collaboratif' => 'Если несколько авторов редактируют одну и ту же статью, то система отмечает ее как "в работе" и ограничивает доступ к ней, что бы избежать потери информации в следствии одновременного редактирования материала. По умолчанию эта возможность отключена.', - 'texte_trop_resultats_auteurs' => 'Слишком много результатов для "@cherche_auteur"; пожалуйста очистите поиск', - 'texte_unpack' => 'скачать последнюю версию', - 'texte_utilisation_moteur_syndiques' => 'Когда Вы используете поисковую систему SPIP, Вы можете выполнить поиск по сайтам и статьям, объединенных двумя разными способами.
      Самый простой заключается в том, чтобы искать только в названиях и описаниях статей.
      Второй способ, намного сильнее, позволяет SPIP искать также в текстах ссылочных сайтов. Если Вы ссылаетесь на сайт, то SPIP выполнит поиск непосредственно в тексте сайта.', - 'texte_utilisation_moteur_syndiques_2' => 'Этот метод способствует тому, что SPIP регулярно посещает ссылочные сайты, которые могут привести к снижению эффективности работы Вашего собственного сайта.', + 'texte_travail_collaboratif' => 'Если несколько авторов редактируют одну и ту же статью, то система отмечает ее как «в работе» и ограничивает доступ к ней, чтобы избежать потери информации вследствие одновременного редактирования материала. По умолчанию эта возможность отключена.', 'texte_vide' => 'очистить', - 'texte_vider_cache' => 'Очистить кэш', - 'titre_admin_effacer' => 'Техническое обслуживание', + 'texte_vider_cache' => 'Очистить кеш', 'titre_admin_tech' => 'Техническое обслуживание', 'titre_admin_vider' => 'Техническое обслуживание', 'titre_ajouter_un_auteur' => 'Добавить автора', 'titre_ajouter_un_mot' => 'Добавить ключ', - 'titre_ajouter_une_rubrique' => 'Добавить раздел', 'titre_cadre_afficher_article' => 'Показать статьи:', 'titre_cadre_afficher_traductions' => 'Показать состояние перевода для следующих языков:', 'titre_cadre_ajouter_auteur' => 'ДОБАВИТЬ АВТОРА:', 'titre_cadre_interieur_rubrique' => 'В разделе', - 'titre_cadre_numero_auteur' => 'Номер АВТОРА', + 'titre_cadre_numero_auteur' => 'НОМЕР АВТОРА', 'titre_cadre_numero_objet' => '@objet@ НОМЕР:', - 'titre_cadre_signature_obligatoire' => 'Подпись [Обязательно]
      ', + 'titre_cadre_signature_obligatoire' => 'Подпись [обязательно]
      ', 'titre_config_contenu_notifications' => 'Уведомления', 'titre_config_contenu_prive' => 'В редакторской части', 'titre_config_contenu_public' => 'В основном сайте', @@ -962,8 +844,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_config_langage' => 'Выбор языка интерфейса', 'titre_configuration' => 'Настройка сайта', 'titre_configurer_preferences' => 'Изменить настройки', - 'titre_conflit_edition' => 'Противоречие в процессе изменения', - 'titre_connexion_ldap' => 'Опции: Ваше LDAP соединение', + 'titre_configurer_preferences_menus' => 'Установите настройки меню', # RELIRE + 'titre_conflit_edition' => 'Конфликт в процессе изменения', + 'titre_connexion_ldap' => 'Опции: ваше LDAP соединение', 'titre_groupe_mots' => 'ГРУППА КЛЮЧЕЙ:', 'titre_identite_site' => 'Информация о сайте', 'titre_langue_article' => 'Язык статьи', @@ -974,54 +857,28 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_naviguer_dans_le_site' => 'Просмотр сайта...', 'titre_nouvelle_rubrique' => 'Новый раздел', 'titre_numero_rubrique' => 'НОМЕР РАЗДЕЛА:', - 'titre_page_admin_effacer' => 'Техническое обслуживание: удаление базы данных', 'titre_page_articles_edit' => 'Изменить: @titre@', 'titre_page_articles_page' => 'Статьи', 'titre_page_articles_tous' => 'Весь сайт', - 'titre_page_auteurs' => 'Посетители', 'titre_page_calendrier' => 'Календарь @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Настройка сайта', - 'titre_page_config_fonctions' => 'Настройка сайта', - 'titre_page_configuration' => 'Настройка сайта', - 'titre_page_controle_petition' => 'Дополнительные комментарии', 'titre_page_delete_all' => 'полное и необратимое удаление', - 'titre_page_documents_liste' => 'Прилагаемые документы', - 'titre_page_index' => 'Ваша административная часть', - 'titre_page_message_edit' => 'Написать сообщение', - 'titre_page_messagerie' => 'Ваша передача сообщений', 'titre_page_recherche' => 'Результаты поиска @recherche@', 'titre_page_statistiques_referers' => 'Статистика (входящие ссылки)', - 'titre_page_statistiques_signatures_jour' => 'Подсчет подписей за день', - 'titre_page_statistiques_signatures_mois' => 'Подсчет подписей за месяц', 'titre_page_upgrade' => 'SPIP обновления', + 'titre_preference_menus_favoris' => 'Меню Избранные ', 'titre_publication_articles_post_dates' => 'Отложенная публикация статей', - 'titre_referencer_site' => 'Ссылка на сайт:', - 'titre_rendez_vous' => 'СРОКИ:', 'titre_reparation' => 'Восстановить', - 'titre_suivi_petition' => 'Дополнительные комментарии', - 'tls_ldap' => 'Transport Layer Security :', - 'trad_article_inexistant' => 'Нет статьи с таким номером', - 'trad_article_traduction' => 'Все версии этой статьи:', - 'trad_deja_traduit' => 'Ошибка: невозможно связать эту статью с запрашиваемым номером.', + 'titre_suivi_petition' => 'Отслеживание обращений (петиций)', + 'tls_ldap' => 'Transport Layer Security:', + 'trad_article_traduction' => 'Эта статья на разных языках:', 'trad_delier' => 'Удалить связь с этим переводом', - 'trad_lier' => 'Эта статья является переводом статьи с номером:', + 'trad_lier' => 'Эта статья - перевод статьи с номером:', 'trad_new' => 'Добавить новый перевод', // U - 'upload_info_mode_document' => 'Поместить это изображение в галерею', - 'upload_info_mode_image' => 'Удалить это изображение с галереи', - 'utf8_convert_attendez' => 'Подождите несколько секунд, а затем перезагрузите страницу.', - 'utf8_convert_avertissement' => 'Вы собираетесь преобразовать содержание Вашей базы данных (новости, статьи и т. д.) с набора символов @orig@ в набор символов @charset@.', - 'utf8_convert_backup' => 'Не забудьте вначале сделать полную резервную копию Вашего сайта. Вам также нужно проверить, что Ваши шаблоны и языковые файлы совместимы с @charset@.', - 'utf8_convert_erreur_deja' => 'Ваш сайт уже в @charset@, нет смысла в преобразовании.', 'utf8_convert_erreur_orig' => 'Ошибка: набор символов @charset@ не поддерживается.', - 'utf8_convert_termine' => 'Готово!', - 'utf8_convert_timeout' => 'Важно: Если сервер указывает timeout, пожалуйста, продолжите перезагрузку страницы до тех пор, пока Вы не получите сообщение «Готово!».', - 'utf8_convert_verifier' => 'Теперь Вам необходимо очистить кэш сайта и проверить все ли хорошо на основных страницах сайта. Если Вы не можете справиться с одной из главных проблем, резервная копия Ваших исходных данных (в формате SQL) была сделана в @rep@ каталоге.', - 'utf8_convertir_votre_site' => 'Конвертировать сайт в utf-8', // V 'version' => 'Версия:' ); - -?> diff --git a/www/ecrire/lang/ecrire_sk.php b/www/ecrire/lang/ecrire_sk.php index 2fe90c33..924ed1a2 100644 --- a/www/ecrire/lang/ecrire_sk.php +++ b/www/ecrire/lang/ecrire_sk.php @@ -1,9 +1,11 @@ 'Pripojenie k serveru SQL zlyhalo.', 'avis_connexion_echec_2' => 'Vráťte sa na predchádzajúcu stránku a skontrolujte údaje, ktoré ste uviedli.', 'avis_connexion_echec_3' => 'Pozn. Na mnohých serveroch musíte požiadať o aktiváciu prístupu k databáze SQL predtým, ako ho budete môcť využívať. Ak sa nemôžete pripojiť, zistite, či táto aktivácia prebehla.', + 'avis_connexion_erreur_creer_base' => 'Databázu sa nepodarilo vytvoriť.', 'avis_connexion_erreur_nom_base' => 'V názve databázy môžu byť len písmená, čísla a spojovníky', 'avis_connexion_ldap_echec_1' => 'Pripojenie k serveru LDAP zlyhalo.', 'avis_connexion_ldap_echec_2' => 'Vráťte sa na predchádzajúcu stránku a skontrolujte údaje, ktoré ste uviedli.', 'avis_connexion_ldap_echec_3' => 'Prípadne nevyužívajte podporu LDAP na import používateľov.', 'avis_deplacement_rubrique' => 'Pozor! V tejto rubrike je @contient_breves@ novinka @scb@: ak ju presuniete, potvrďte to, prosím, označením tohto políčka.', - 'avis_destinataire_obligatoire' => 'Ak chcete poslať správu, musíte vybrať príjemcu.', 'avis_erreur_connexion_mysql' => 'Chyba pripojenia k SQL', - 'avis_erreur_version_archive' => 'Pozor! Súbor @archive@ bol vytvorený - v inej verzii SPIPu ako je tá, ktorú máte - nainštalovanú. Môže to mať za následok vážne - problémy, vrátane zničenia databázy, - nefunkčnosti rôznych častí webu atď. Neposielajte - túto požiadavku na nahrávanie.

      Bližšie informácie - nájdete - v dokumentácii k SPIPu.

      ', - 'avis_espace_interdit' => 'Zakázaná zóna
      SPIP je už nainštalovaný.
      ', + 'avis_espace_interdit' => 'Zakázaná zóna
      SPIP je už nainštalovaný.
      ', 'avis_lecture_noms_bases_1' => 'Inštalátor nevedel prečítať názov žiadnej z nainštalovaných databáz.', 'avis_lecture_noms_bases_2' => 'Buď nie je dostupná žiadna databáza, alebo bola funkcia, ktorá umožňuje vymenovanie databáz, deaktivovaná z bezpečnostných dôvodov (čo je prípad mnohých hostingov).', 'avis_lecture_noms_bases_3' => 'V druhom prípade je možné, že by sa dala použiť databáza uvedená po prihlasovacom mene:', - 'avis_non_acces_message' => 'K tejto správe nemáte prístup.', 'avis_non_acces_page' => 'K tejto stránke nemáte prístup.', 'avis_operation_echec' => 'Operácia sa nepodarila.', 'avis_operation_impossible' => 'Operácia sa nedá vykonať', - 'avis_probleme_archive' => 'Chyba pri čítaní v súbore @archive@', 'avis_suppression_base' => 'UPOZORNENIE: vymazanie údajov sa nedá vrátiť späť', - 'avis_version_mysql' => 'Verzia vášho SQL (@version_mysql@) neumožňuje automatickú opravu databázových tabuliek.', // B 'bouton_acces_ldap' => 'Pridať prístup k LDAP', 'bouton_ajouter' => 'Pridať', - 'bouton_ajouter_participant' => 'PRIDAŤ ÚČASTNÍKA:', - 'bouton_annonce' => 'OZNAM', 'bouton_annuler' => 'Zrušiť', 'bouton_cache_activer' => 'Zapnúť cache', 'bouton_cache_desactiver' => 'Dočasne vypnúť cache', - 'bouton_checkbox_envoi_message' => 'možnosť poslať správu', - 'bouton_checkbox_indiquer_site' => 'Musíte zadať názov webstránky', - 'bouton_checkbox_signature_unique_email' => 'na 1 e-mailovú adresu iba 1 podpis', - 'bouton_checkbox_signature_unique_site' => 'iba 1 podpis na webstránku', 'bouton_demande_publication' => 'Požiadať o publikovanie tohto článku', 'bouton_desactive_tout' => 'Deaktivovať všetko', 'bouton_desinstaller' => 'Odinštalovať', - 'bouton_effacer_index' => 'Odstrániť indexovanie', 'bouton_effacer_tout' => 'Zmazať VŠETKO', - 'bouton_envoi_message_02' => 'POSLAŤ SPRÁVU', 'bouton_envoyer_message' => 'Správa dokončená: poslať', 'bouton_fermer' => 'Zatvoriť', 'bouton_mettre_a_jour_base' => 'Aktualizovať databázu', 'bouton_modifier' => 'Zmeniť', - 'bouton_pense_bete' => 'PRIPOMIENKA NA SÚKROMNÉ POUŽITIE', - 'bouton_radio_activer_messagerie' => 'Povoliť interný odkazovač', - 'bouton_radio_activer_messagerie_interne' => 'Aktivovať interný odkazovač', - 'bouton_radio_activer_petition' => 'Aktivovať petíciu', 'bouton_radio_afficher' => 'Zobraziť', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Zobraziť v zozname redaktorov online', - 'bouton_radio_desactiver_messagerie' => 'Deaktivovať odkazovač', 'bouton_radio_envoi_annonces_adresse' => 'Poslať oznamy na adresu:', 'bouton_radio_envoi_liste_nouveautes' => 'Poslať zoznam aktualizácií noviniek', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Nezobraziť v zozname redaktorov online', 'bouton_radio_non_envoi_annonces_editoriales' => 'Neposielať oznamy z redakcie', - 'bouton_radio_pas_petition' => 'Žiadne petície', - 'bouton_radio_petition_activee' => 'Petícia aktivovaná', - 'bouton_radio_supprimer_petition' => 'Odstrániť petíciu', 'bouton_redirection' => 'PRESMEROVANIE', + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Obnoviť predvolené nastavenia', 'bouton_relancer_installation' => 'Znova spustiť inštaláciu', + 'bouton_reset_password' => 'Vytvoriť nové heslo a poslať ho e-mailom', 'bouton_suivant' => 'Ďalej', 'bouton_tenter_recuperation' => 'Pokus o opravu', 'bouton_test_proxy' => 'Otestovať proxy', 'bouton_vider_cache' => 'Vyprázdniť cache', - 'bouton_voir_message' => 'Zobraziť správu pred schválením', // C - 'cache_mode_compresse' => 'Súbory cache sa ukladajú v komprimovanom režime.', - 'cache_mode_non_compresse' => 'Do súborov cache sa zapisuje v rozbalenom režime.', 'cache_modifiable_webmestre' => 'Tento parameter môže webmaster zmeniť.', 'calendrier_synchro' => 'Ak používate aplikáciu kalendá­ra kompatibilnú s iCalom, môžete ju synchronizovať s údajmi z tejto stránky.', 'config_activer_champs' => 'Aktivovať nasledujúce polia', @@ -115,9 +89,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'config_titre_base_sup' => 'Deklarácia ďalšej databázy', 'config_titre_base_sup_choix' => 'Vyberte si doplnkovú databázu', 'connexion_ldap' => 'Pripojenie:', - 'copier_en_local' => 'Skopírovať na lokálnu stránku', 'creer_et_associer_un_auteur' => 'Zapísať a priradiť autora', - 'creer_et_associer_une_rubrique' => 'Vytvoriť a priradiť rubriku', // D 'date_mot_heures' => 'hodín/hodiny', @@ -147,7 +119,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => 'Prihlasovacie meno', 'entree_login_connexion_1' => 'Prihlasovacie meno', 'entree_login_connexion_2' => '(Niekedy sa zhoduje s prihlasovacím menom na účet FTP a niekedy sa nevypĺňa)', - 'entree_login_ldap' => 'Prvé prihlásenie cez LDAP', 'entree_mot_passe' => 'Vaše heslo', 'entree_mot_passe_1' => 'Heslo', 'entree_mot_passe_2' => '(Niekedy sa zhoduje s prístupovým heslom na FTP a niekedy sa nevypĺňa)', @@ -165,7 +136,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_url' => 'Adresa vašej stránky', 'entree_url_2' => 'Adresa stránky (URL)', 'erreur_connect_deja_existant' => 'Server s týmto názvom už existuje', + 'erreur_email_deja_existant' => 'Táto e-mailová adresa je už za­re­gis­tro­va­ná.', 'erreur_nom_connect_incorrect' => 'Nepovolený názov servera', + 'erreur_plugin_attribut_balise_manquant' => 'V tagu chýba @balise@ atribút @attribut@.', 'erreur_plugin_desinstalation_echouee' => 'Odinštalovanie zásuvného modulu sa nepodarilo. Môžete ho však deaktivovať.', 'erreur_plugin_fichier_absent' => 'Súbor chýba', 'erreur_plugin_fichier_def_absent' => 'Chýba definičný súbor', @@ -184,7 +157,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => 'Pre viac informácii neváhajte siahnuť po dokumentácii k SPIPu.', 'ical_info_calendrier' => 'K dispozícii máte dva kalendáre. Prvý je mapa stránky, kde sú uvedené všetky publikované články. V druhom nájdete oznamy z redakcie, ako aj najnovšie súkromné odkazy: je pre vás vyhradený cez osobný kľúč, ktorý môžete kedykoľvek upraviť tak, že si zmeníte heslo.', 'ical_methode_http' => 'Stiahnuť', - 'ical_methode_webcal' => 'Synchronizovať (webcal://)', + 'ical_methode_webcal' => 'Synchronizácia (webcal://)', 'ical_texte_js' => 'Riadok javascriptu vám umožní zobraziť najnovšie publikované články z tejto stránky na hocijakej inej vašej stránke.', 'ical_texte_prive' => 'Tento kalendár, ktorý je striktne osobný, vás poinformuje o vašej redakčnej činnosti na tejto stránke (úlohy, osobné stretnutia, odoslané články a novinky, atď.).', 'ical_texte_public' => 'Tento kalendár vám umožní sledovať publikačnú činnosť tejto stránky (najnovšie publikované články a novinky).', @@ -204,16 +177,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_configuration' => 'Konfigurácia', 'icone_creer_auteur' => 'Zapísať nového autora a priradiť ho k tomuto článku', 'icone_creer_mot_cle' => 'Vytvoriť nové kľúčové slovo a priradiť ho k tomuto článku', - 'icone_creer_mot_cle_rubrique' => 'Vytvoriť nové kľúčové slovo a pripojiť ho k tejto rubrike', - 'icone_creer_mot_cle_site' => 'Vytvoriť nové kľúčové slovo a priradiť ho k tejto stránke', 'icone_creer_rubrique_2' => 'Vytvoriť novú rubriku', + 'icone_developpement' => 'Vývoj', 'icone_edition' => 'Upraviť', - 'icone_envoyer_message' => 'Poslať túto správu', 'icone_ma_langue' => 'Môj jazyk', 'icone_mes_infos' => 'Moje údaje', 'icone_mes_preferences' => 'Moje predvoľby', 'icone_modifier_article' => 'Upraviť tento článok', - 'icone_modifier_message' => 'Upraviť túto správu', 'icone_modifier_rubrique' => 'Upraviť túto rubriku', 'icone_publication' => 'Publikovanie', 'icone_relancer_signataire' => 'Znova začať podpisovanie', @@ -226,22 +196,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_supprimer_signature' => 'Odstrániť tento podpis', 'icone_valider_signature' => 'Potvrdiť tento podpis', 'image_administrer_rubrique' => 'Môžete riadiť túto rubriku', - 'impossible_modifier_login_auteur' => 'Prihlasovacie meno sa nedá zmeniť.', - 'impossible_modifier_pass_auteur' => 'Heslo sa nedá zmeniť.', 'info_1_article' => '1 článok', - 'info_1_article_syndique' => '1 syndikovaný článok', 'info_1_auteur' => '1 autor', 'info_1_message' => '1 správa', 'info_1_mot_cle' => '1 kľúčové slovo', 'info_1_rubrique' => '1 rubrika', - 'info_1_site' => '1 stránka', 'info_1_visiteur' => '1 návštevník', 'info_activer_cookie' => 'Môžete aktivovať svoju cookie, ktorá vám umožní jednoducho prechádzať medzi verejne prístupnou stránkou a súkromnou zónou.', + 'info_activer_menu_developpement' => 'Zobraziť menu Vývoj', 'info_admin_etre_webmestre' => 'Prideliť mi práva administrátora webu', - 'info_admin_gere_rubriques' => 'Tento administrátor riadi tieto rubriky:', - 'info_admin_gere_toutes_rubriques' => 'Tento administrátor riadi všetky rubriky', - 'info_admin_gere_toutes_rubriques_2' => 'Ja riadim všetky rubriky', 'info_admin_je_suis_webmestre' => 'Som webmaster', 'info_admin_statuer_webmestre' => 'Dať tomuto administrátorovi práva webmastera', 'info_admin_webmestre' => 'Tento administrátor je webmaster', @@ -253,18 +217,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrateurs' => 'Administrátori', 'info_administrer_rubrique' => 'Môžete riadiť túto rubriku', 'info_adresse' => 'na túto adresu:', + 'info_adresse_desinscription' => 'Adresa na odhlásenie', 'info_adresse_url' => 'URL verejne prístupnej stránky', 'info_afficher_par_nb' => 'Zobraziť po', - 'info_afficher_visites' => 'Zobraziť návštevy pre:', 'info_aide_en_ligne' => 'Online pomoc k SPIPu', 'info_ajout_image' => 'Ak obrázky pridáte k článku ako pripojené súbory, SPIP môže z takto vložených obrázkov automaticky vytvoriť miniatúry. To umožní napríklad automaticky vytvoriť galériu alebo portfólio.', - 'info_ajout_participant' => 'Boli pridaní títo účastníci:', 'info_ajouter_rubrique' => 'Pridať ďalšiu rubriku na riadenie:', 'info_annonce_nouveautes' => 'Posledné oznámenia o novinkách', - 'info_anterieur' => 'Predchádzajúca', 'info_article' => 'článok', 'info_article_2' => 'články', 'info_article_a_paraitre' => 'Postdatované články nastavené na publikovanie', @@ -274,17 +236,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_miens' => 'Moje články', 'info_articles_tous' => 'Všetky články', 'info_articles_trouves' => 'Nájdené články', - 'info_articles_trouves_dans_texte' => 'Nájdené články (v texte)', 'info_attente_validation' => 'Vaše články, ktoré čakajú na schválenie', 'info_aucun_article' => 'Žiadne články', - 'info_aucun_article_syndique' => 'Žiadne syndikované články', 'info_aucun_auteur' => 'Žiadni autori', 'info_aucun_message' => 'Žiadne správy', 'info_aucun_rubrique' => 'Žiadne rubriky', - 'info_aucun_site' => 'Žiadne odkazy na stránky', - 'info_aucun_visiteur' => 'Žiadni návštevníci', 'info_aujourdhui' => 'dnes:', - 'info_auteur_message' => 'AUTOR SPRÁVY:', + 'info_auteur_gere_rubriques' => 'Autor riadi tieto rubriky:', + 'info_auteur_gere_toutes_rubriques' => 'Tento autor riadi všetky rubriky', + 'info_auteur_gere_toutes_rubriques_2' => 'Radim všetky rubriky', 'info_auteurs' => 'Autori', 'info_auteurs_par_tri' => 'Authori@partri@', 'info_auteurs_trouves' => 'Nájdení autori', @@ -304,8 +264,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_classement_2' => '. do @liste@', 'info_code_acces' => 'Nezabudnite vlastné prístupové kódy!', 'info_compatibilite_html' => 'Štandard HTML, ktorý sa má použiť', - 'info_compresseur_gzip' => 'Predtým sa odporúča skontrolovať, či poskytovateľ webhostingu systematicky komprimuje PHP skripty; na to môžete využiť napr. túto službu: @testgzip@', - 'info_compresseur_texte' => 'Ak váš server nekomprimuje HTML stránky pred ich odoslaním, môžete sa pokúsiť nanútiť mu kompresiu, aby sa zmenšila veľkosť stránok. Varovanie: na niektorých serveroch to môže mať zjavný vedľajší efekt', 'info_config_suivi' => 'Ak táto adresa patrí elektronickej konferencii, môžete zadať registračnú adresu tejto konferencie. Môže to byť adresa stránky (napr. stránka, ktorá umožňuje prihlásenie online), alebo e-mailová adresa so špeciálnym predmetom (napr. @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Môžete sa prihlásiť do elektronickej konferencie tejto stránky. Mejlom budete dostávať oznamy o článkoch a novinkách odoslaných na publikovanie.', 'info_confirmer_passe' => 'Potvrďte nové heslo:', @@ -329,8 +287,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => 'Dátum predchádzajúceho publikovania:', 'info_date_referencement' => 'DÁTUM VYTVORENIA ODKAZU NA TÚTO STRÁNKU:', 'info_derniere_etape' => 'Hotovo!', - 'info_derniers_articles_publies' => 'Vaše najnovšie publikované články', - 'info_desactiver_messagerie_personnelle' => 'Odkazovač môžete na tejto stránke aktivovať alebo deaktivovať.', 'info_descriptif' => 'Opis:', 'info_desinstaller_plugin' => ' deaktivuje zásuvný modul a odstráni údaje', 'info_discussion_cours' => 'Aktuálne diskusie', @@ -338,7 +294,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_email_envoi' => 'E-mailová adresa odosielateľa (nepovinné)', 'info_email_envoi_txt' => 'Zadajte e-mailovú adresu odosielateľa, ktorá sa bude používať pri posielaní mejlov (podľa pôvodného nastavenia sa adresa príjemcu používa ako adresa odosielateľa):', 'info_email_webmestre' => 'E-mailová adresa webmastera', - 'info_entrer_code_alphabet' => 'Zadajte kód znakovej sady, ktorá sa má použiť:', 'info_envoi_email_automatique' => 'Posielanie automatických e-mailov', 'info_envoyer_maintenant' => 'Poslať teraz', 'info_etape_suivante' => 'Prejsť na ďalší krok', @@ -351,7 +306,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( o požiadavkách na publikovanie a schválení článkov, napr. do elektronickej konferencie redaktorov.', 'info_fichiers_authent' => 'Autentifikačný súbor „.htpasswd“', 'info_forums_abo_invites' => 'Na vašej stránke sú diskusné fóra, ktoré vyžadujú registráciu. Návštevníci sa môžu zaregistrovať na verejne prístupnej stránke.', - 'info_gauche_admin_effacer' => 'Na túto stránku majú prístup iba webmasteri.

      Poskytuje prístup k rôznym funkciám údržby. Niektoré z nich si vyžadujú špeciálne prihlásenie cez FTP.

      ', 'info_gauche_admin_tech' => 'K tejto stránke majú prístup len webmasteri.

      Poskytuje prístup k rôznym funkciám údržby. Niektoré z nich si vyžadujú špeciálne prihlásenie cez FTP.

      ', @@ -362,21 +316,14 @@ cez FTP.

      ', Funkcia každého z nich je označená farbou ikony (administrátor = zelená, redaktor = žltá).', 'info_gauche_auteurs_exterieurs' => 'Externí autori bez prístupu na stránku sú označení modrou ikonou, odstránení autori sivou ikonou.', 'info_gauche_messagerie' => 'Odkazovač vám umožní posielať správy v rámci redakcie, ukladať si pri­pomienky (pre osobnú potrebu) alebo zobrazovať oznamy na úvodnej stránke súkromnej zóny (ak ste administrátor).', - 'info_gauche_numero_auteur' => 'AUTOR ČÍSLO', 'info_gauche_statistiques_referers' => 'Na tejto stránke je zoznam refererov, t.j. stránok, na ktorých sú odkazy na vašu vlastnú stránku zo včerajška a dneška. Tento zoznam sa obnovuje každých 24 hodín.', 'info_gauche_visiteurs_enregistres' => 'tu nájdete návštevníkov zaregistrovaných v súkromnej zóne stránky (diskusné fóra vyžadujúce registráciu).', 'info_generation_miniatures_images' => 'Generovanie obrázkov miniatúr', - 'info_gerer_trad' => 'Povoliť odkazy na preklady?', 'info_gerer_trad_objets' => '@objets@: riadiť odkazy na preklady', 'info_hebergeur_desactiver_envoi_email' => 'Niektorí poskytovatelia webhostingu deaktivujú posielanie automatických e-mailov na svojich serveroch. V takom prípade sa tieto funkcie SPIPu nedajú zaviesť.', 'info_hier' => 'včera:', - 'info_historique_activer' => 'Povoliť sledovanie opráv', - 'info_historique_affiche' => 'Zobraziť túto verziu', - 'info_historique_comparaison' => 'Porovnať', - 'info_historique_desactiver' => 'Deaktivovať sledovanie opráv', - 'info_historique_texte' => 'Sledovanie opráv vám umožňuje vidieť zmeny vykonané v článku a rozdiely medzi verziami, ktoré nasledujú za sebou.', 'info_identification_publique' => 'Vaša verejná identita...', 'info_image_process' => 'Kliknutím na príslušný obrázok si vyberte najlepší spôsob vytvorenia miniatúr.', 'info_image_process2' => 'Ak nevidíte žiadne obrázky, potom váš server nie je na používanie takýchto nástrojov nastavený. Ak chcete využívať takéto funkcie, kontaktujte technickú podporu svojho poskytovateľa a požiadajte o nainštalovanie rozšírení GD alebo Imagick.', @@ -398,8 +345,6 @@ cez FTP.

      ', 'info_logos' => 'Logá', 'info_maximum' => 'maximum:', 'info_meme_rubrique' => 'V tejto rubrike', - 'info_message' => 'Správa od', - 'info_message_efface' => 'PRÍSPEVOK ODSTRÁNENÝ', 'info_message_en_redaction' => 'Vaše koncepty', 'info_message_technique' => 'Technický odkaz:', 'info_messagerie_interne' => 'Interný odkazovač', @@ -414,30 +359,23 @@ cez FTP.

      ', 'info_modifier_rubrique' => 'Upraviť rubriku:', 'info_modifier_titre' => 'Upraviť: @titre@', 'info_mon_site_spip' => 'Moja stránka', - 'info_mot_sans_groupe' => '(Kľúčové slová bez skupiny...)', - 'info_moteur_recherche' => 'Integrovaný vyhľadávač', 'info_moyenne' => 'priemer:', - 'info_multi_articles' => 'Povoliť jazykové menu pre články?', 'info_multi_cet_article' => 'Jazyk tohto článku:', 'info_multi_langues_choisies' => 'Prosím, vyberte jazyky, ktoré majú byť dostupné pre redaktorov vašej stránky. Jazyky, ktoré sa už na vašej stránke používajú (v hornej časti zoznamu), sa nedajú deaktivovať.', 'info_multi_objets' => '@objets@: aktivovať menu pre jazyky', - 'info_multi_rubriques' => 'Povoliť jazykové menu pre rubriky?', 'info_multi_secteurs' => '... iba pre rubriky v koreňovom adresári?', 'info_nb_articles' => 'Článkov: @nb@ ', - 'info_nb_articles_syndiques' => 'syndikovaných článkov: @nb@', 'info_nb_auteurs' => 'autorov: @nb@ ', 'info_nb_messages' => 'správ: @nb@', 'info_nb_mots_cles' => 'kľúčových slov: @nb@', 'info_nb_rubriques' => 'rubrík: @nb@', - 'info_nb_sites' => 'stránok: @nb@ ', 'info_nb_visiteurs' => 'návštevníkov: @nb@', 'info_nom' => 'Meno', 'info_nom_destinataire' => 'Meno príjemcu', 'info_nom_pas_conforme' => 'tagy html nie sú povolené', 'info_nom_site' => 'Názov vašej stránky', 'info_nombre_articles' => 'článkov: @nb_articles@,', - 'info_nombre_partcipants' => 'ÚČASTNÍCI TEJTO DISKUSIE:', 'info_nombre_rubriques' => '@nb_rubriques@ rubrík,', 'info_nombre_sites' => '@nb_sites@ stránok,', 'info_non_deplacer' => 'Nepresúvať...', @@ -445,19 +383,14 @@ cez FTP.

      ', 'info_non_envoi_liste_nouveautes' => 'Neposielať bulletin', 'info_non_modifiable' => 'nedá sa zmeniť', 'info_non_suppression_mot_cle' => 'Nechcem odstrániť toto kľúčové slovo.', - 'info_note_numero' => 'Poznámka @numero@', 'info_notes' => 'Poznámky', - 'info_nouveaux_message' => 'Nové správy', 'info_nouvel_article' => 'Nový článok', 'info_nouvelle_traduction' => 'Nový preklad:', 'info_numero_article' => 'ČLÁNOK ČÍSLO:', 'info_obligatoire_02' => ' (povinné)', 'info_option_accepter_visiteurs' => 'Povoliť registráciu návštevníkov cez verejne prístupnú stránku', - 'info_option_faire_suivre' => 'Posielať príspevky z diskusného fóra autorom článkov', 'info_option_ne_pas_accepter_visiteurs' => 'Deaktivovať registráciu návštevníkov', 'info_options_avancees' => 'ROZŠÍRENÉ MOŽNOSTI', - 'info_ortho_activer' => 'Povoliť kontrolu preklepov.', - 'info_ortho_desactiver' => 'Deaktivovať kontrolu preklepov.', 'info_ou' => 'alebo...', 'info_page_interdite' => 'Zakázaná stránka', 'info_par_nom' => 'podľa mena', @@ -467,20 +400,14 @@ cez FTP.

      ', 'info_passe_trop_court' => 'Heslo je príliš krátke.', 'info_passe_trop_court_car_pluriel' => 'Heslo musí mať aspoň @nb@ znakov.', 'info_passes_identiques' => 'Tieto dve heslá sa nezhodujú.', - 'info_pense_bete_ancien' => 'Vaše staré pripomienky', 'info_plus_cinq_car' => 'viac ako 5 znakov', 'info_plus_cinq_car_2' => '(Viac ako 5 znakov)', 'info_plus_trois_car' => '(Viac ako 3 znaky)', 'info_popularite' => 'popularita: @popularite@; návštev: @visites@', - 'info_popularite_4' => 'popularita: @popularite@, návštev: @visites@', 'info_post_scriptum' => 'Post scriptum', 'info_post_scriptum_2' => 'Post scriptum:', 'info_pour' => 'pre', - 'info_preview_admin' => 'K režimu ukážky majú prístup iba administrátori', - 'info_preview_comite' => 'K režimu ukážky majú prístup všetci autori', - 'info_preview_desactive' => 'Režim ukážky je deaktivovaný', - 'info_preview_texte' => 'Stránka sa dá prezrieť tak, akoby už všetky články a novinky, (ktoré boli aspoň „odoslané“) boli publikované. Má byť tento režim ukážky vyhradený pre administrátorov, otvorený pre všetkých autorov, alebo úplne deaktivovaný?', - 'info_principaux_correspondants' => 'Vaši hlavní spoludiskutujúci', + 'info_preview_texte' => 'Môžete si pozrieť ukážky rôznych redakčných objektov stránky v štádiu „návrhu“, ako aj tie, ktoré sa upravujú, pokiaľ ste ich autorom. Má byť táto funkcia vyhradená pre administrátorov, redaktorov alebo má byť dostupná pre všetkých?', 'info_procedez_par_etape' => 'prosím, postupujte krok za krokom', 'info_procedure_maj_version' => 'Na prispôsobenie databázy SPIPu novej verzii sa musí spustiť upgrade.', 'info_proxy_ok' => 'Test proxy úspešný.', @@ -494,14 +421,9 @@ cez verejne prístupnú stránku? Ak s tým súhlasíte, návštevníci sa bud dostanú používatelia automatický e-mail, ktorý im poskytne prístupový kód do súkromnej zóny. Niektorí poskytovatelia webhostingu zakazujú posielanie e-mailov zo svojich serverov. V takom prípade sa automatická registrácia nedá zaviesť.
    ', - 'info_question_utilisation_moteur_recherche' => 'Chcete využívať vyhľadávač integrovaný v SPIPe? - (Jeho vypnutie zvýši výkon systému.)', - 'info_question_vignettes_referer_non' => 'Nezobrazovať obrázky odkazujúcich stránok', 'info_qui_edite' => '@nom_auteur_modif@ pracoval(a) na tomto texte @date_diff@ minút(y)', 'info_racine_site' => 'Koreňový adresár stránky', 'info_recharger_page' => 'Prosím, počkajte chvíľu a potom spustite túto stránku znova.', - 'info_recherche_auteur_a_affiner' => 'Priveľa výsledkov pre "@cherche_auteur@", prosím, upresnite svoje vyhľadávanie.', - 'info_recherche_auteur_ok' => 'K reťazcu "@cherche_auteur@" sa našlo niekoľko redaktorov:', 'info_recherche_auteur_zero' => 'Žiadne výsledky pre „@cherche_auteur@“.', 'info_recommencer' => 'Prosím, skúste to znova.', 'info_redacteur_1' => 'Redaktor', @@ -510,6 +432,7 @@ cez verejne prístupnú stránku? Ak s tým súhlasíte, návštevníci sa bud 'info_redaction_en_cours' => 'UPRAVUJE SA', 'info_redirection' => 'Presmerovanie', 'info_redirection_activee' => 'Presmerovanie je aktivované.', + 'info_redirection_boucle' => 'Môžete skúsiť presmerovať samotný článok.', 'info_redirection_desactivee' => 'Presmerovanie bolo odstránené.', 'info_refuses' => 'Vaše zamietnuté články', 'info_reglage_ldap' => 'Možnosti: Prispôsobenie importu LDAP', @@ -520,7 +443,6 @@ cez verejne prístupnú stránku? Ak s tým súhlasíte, návštevníci sa bud 'info_rubriques' => 'Rubriky', 'info_rubriques_02' => 'rubriky', 'info_rubriques_trouvees' => 'Nájdené rubriky', - 'info_rubriques_trouvees_dans_texte' => 'Nájdené rubriky (v texte)', 'info_sans_titre' => 'Bez titulku', 'info_selection_chemin_acces' => 'Vyberte prístupovú cestu do priečinka:', 'info_signatures' => 'podpisy', @@ -533,14 +455,12 @@ cez verejne prístupnú stránku? Ak s tým súhlasíte, návštevníci sa bud 'info_sites_lies_mot' => 'Odkazované stránky s týmto kľúčovým slovom', 'info_sites_proxy' => 'Pomocou proxy', 'info_sites_trouves' => 'Nájdené stránky', - 'info_sites_trouves_dans_texte' => 'Nájdené stránky (v texte)', 'info_sous_titre' => 'Podtitulok:', 'info_statut_administrateur' => 'Administrátor', 'info_statut_auteur' => 'Funkcia tohto autora:', 'info_statut_auteur_2' => 'Som', 'info_statut_auteur_a_confirmer' => 'Registrácia na potvrdenie', 'info_statut_auteur_autre' => 'Iná funkcia:', - 'info_statut_efface' => 'Odstránené', 'info_statut_redacteur' => 'Redaktor', 'info_statut_utilisateurs_1' => 'Predvolená funkcia importovaných používateľov', 'info_statut_utilisateurs_2' => 'Vyberte funkciu, ktorá sa má priradiť ľuďom v priečinku LDAP, keď sa pripoja prvýkrát. Túto hodnotu môžete neskôr zmeniť pre každého jedného autora.', @@ -563,7 +483,6 @@ cez verejne prístupnú stránku? Ak s tým súhlasíte, návštevníci sa bud 'info_tous_articles_presents' => 'Všetky články publikované v tejto rubrike', 'info_tous_articles_refuses' => 'Všetky zamietnuté články', 'info_tous_les' => 'každých:', - 'info_tous_redacteurs' => 'Oznamy všetkým redaktorom', 'info_tout_site' => 'Celá stránka', 'info_tout_site2' => 'Článok nebol preložený do tohto jazyka.', 'info_tout_site3' => 'Článok bol preložený do tohto jazyka, ale odvtedy sa zmenil článok, na ktorý tento článok odkazuje. Preklad preto treba aktualizovať.', @@ -580,7 +499,7 @@ a stav ich spracovania je označený farbou:', 'info_une_rubrique_02' => '1 rubrika', 'info_url' => 'URL:', 'info_url_proxy' => 'Adresa proxy', - 'info_url_site' => 'ADRESA STRÁNKY:', + 'info_url_proxy_pas_conforme' => 'Adresa proxy je neplatná.', 'info_url_site_pas_conforme' => 'Adresa stránky nie je platná.', 'info_url_test_proxy' => 'Otestovať URL', 'info_urlref' => 'Hypertextový odkaz:', @@ -592,7 +511,6 @@ a stav ich spracovania je označený farbou:', 'info_visiteurs_02' => 'Návštevníci verejne prístupnej stránky', 'info_webmestre_forces' => 'Správcovia webu sú momentálne zapísaní v súbore @file_options@.', 'install_adresse_base_hebergeur' => 'Adresa databázy priradená poskytovateľom hostingu', - 'install_base_ok' => 'Databáza @base@ bola identifikovaná', 'install_connect_ok' => 'Nová databáza bola deklarovaná pomocou názvu servera @connect@.', 'install_echec_annonce' => 'Táto inštalácia sa pravdepodobne nepodarí, alebo poškodí vašu stránku.', 'install_extension_mbstring' => 'SPIP nespolupracuje s:', @@ -605,7 +523,6 @@ a stav ich spracovania je označený farbou:', 'install_select_langue' => 'Vyberte si jazyk a potom kliknite na tlačidlo „Ďalej“, aby sa mohla spustiť inštalácia.', 'install_select_type_db' => 'Uveďte typ databázy:', 'install_select_type_mysql' => 'MySQL', - 'install_select_type_mysqli' => 'MySQLi', 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', @@ -622,8 +539,6 @@ a stav ich spracovania je označený farbou:', 'item_activer_messages_avertissement' => 'Aktivovať správy s upozorneniami', 'item_administrateur_2' => 'administrátor', 'item_afficher_calendrier' => 'Zobraziť v kalendári', - 'item_autoriser_documents_joints' => 'Povoliť pripájanie súborov k článkom', - 'item_autoriser_documents_joints_rubriques' => 'Povoliť súbory v rubrikách', 'item_autoriser_syndication_integrale' => 'Do syndikačných kanálov zaradiť celé články', 'item_choix_administrateurs' => 'administrátorov', 'item_choix_generation_miniature' => 'Generovať miniatúry automaticky.', @@ -631,7 +546,6 @@ a stav ich spracovania je označený farbou:', 'item_choix_redacteurs' => 'redaktori', 'item_choix_visiteurs' => 'návštevníci verejne prístupnej stránky', 'item_creer_fichiers_authent' => 'Vytvoriť súbory .htpasswd', - 'item_limiter_recherche' => 'Obmedziť vyhľadávanie na vašu stránku', 'item_login' => 'Používateľské meno', 'item_messagerie_agenda' => 'Aktivovať odkazovač a kalendáre', 'item_mots_cles_association_articles' => 'články', @@ -641,22 +555,15 @@ a stav ich spracovania je označený farbou:', 'item_non_accepter_inscriptions' => 'Deaktivovať registráciu', 'item_non_activer_messages_avertissement' => 'Žiadne správy s upozorneniami', 'item_non_afficher_calendrier' => 'Nezobrazovať v kalendári', - 'item_non_autoriser_documents_joints' => 'Nepovoliť súbory v článkoch', - 'item_non_autoriser_documents_joints_rubriques' => 'Nepovoliť súbory v rubrikách', 'item_non_autoriser_syndication_integrale' => 'Poslať len zhrnutie', - 'item_non_compresseur' => 'Deaktivovať kompresiu', 'item_non_creer_fichiers_authent' => 'Nevytvárať tieto súbory', - 'item_non_gerer_statistiques' => 'Nerobiť štatistiky', - 'item_non_limiter_recherche' => 'Rozšíriť vyhľadávanie o obsah odkazovaných stránok', 'item_non_messagerie_agenda' => 'Deaktivovať odkazovač a kalendáre', 'item_non_publier_articles' => 'Nepublikovať články pred dátumom publikovania.', - 'item_non_utiliser_moteur_recherche' => 'Nepoužívať vyhľadávač', 'item_nouvel_auteur' => 'Nový autor', 'item_nouvelle_rubrique' => 'Nová rubrika', 'item_oui' => 'Áno', 'item_publier_articles' => 'Publikovať články bez ohľadu na ich dátum publikovania.', 'item_reponse_article' => 'Odpovedať na článok', - 'item_utiliser_moteur_recherche' => 'Používať vyhľadávač', 'item_version_html_max_html4' => 'Na verejne prístupnej stránke používať iba HTML4', 'item_version_html_max_html5' => 'Povoliť HTML5', 'item_visiteur' => 'návštevník', @@ -677,19 +584,19 @@ a stav ich spracovania je označený farbou:', 'ldap_correspondance' => 'dediť pole @champ@', 'ldap_correspondance_1' => 'Dediť polia LDAP', 'ldap_correspondance_2' => 'Pre každé z týchto polí SPIPu zadajte názov príslušného poľa LDAP. Nevypĺňajte, ak ho nechcete mať vyplnené; ak chcete vyskúšať niekoľko polí LDAP, oddeľte ich medzerami alebo bodkami.', - 'lien_ajout_destinataire' => 'Pridať tohto príjemcu', 'lien_ajouter_auteur' => 'Pridať tohto autora', - 'lien_ajouter_participant' => 'Pridať účastníka', 'lien_ajouter_une_rubrique' => 'Pridať túto rubriku', 'lien_email' => 'e-mail', 'lien_nom_site' => 'NÁZOV STRÁNKY:', + 'lien_rapide_contenu' => 'Prejsť na obsah', + 'lien_rapide_navigation' => 'Prejsť na navigáciu', + 'lien_rapide_recherche' => 'Prejsť na vyhľadávanie', 'lien_retirer_auteur' => 'Odstrániť autora', 'lien_retirer_rubrique' => 'Odstrániť rubriku', 'lien_retirer_tous_auteurs' => 'Odstrániť všetkých autorov', 'lien_retirer_toutes_rubriques' => 'Odstrániť všetky rubriky', - 'lien_retrait_particpant' => 'Odstrániť tohto účastníka', 'lien_site' => 'stránka', - 'lien_supprimer_rubrique' => 'Odstrániť túto rubriku', + 'lien_tout_decocher' => 'Odznačiť všetko', 'lien_tout_deplier' => 'Rozšíriť všetko', 'lien_tout_replier' => 'Stiahnuť všetko', 'lien_tout_supprimer' => 'Odstrániť všetko', @@ -714,13 +621,13 @@ a stav ich spracovania je označený farbou:', 'mois_non_connu' => 'neznámy', // N - 'nouvelle_version_spip' => 'K dispozícii je SPIP verzia @version@', + 'nouvelle_version_spip' => 'K dispozícii je verzia SPIPu @version@', + 'nouvelle_version_spip_majeure' => 'K dispozícii je nová verzia SPIPu @version@', // O 'onglet_contenu' => 'Obsah', 'onglet_declarer_une_autre_base' => 'Zaviesť ďalšiu databázu', 'onglet_discuter' => 'Diskutovať', - 'onglet_documents' => 'Dokumenty', 'onglet_interactivite' => 'Interaktívnosť', 'onglet_proprietes' => 'Vlastnosti', 'onglet_repartition_actuelle' => 'teraz', @@ -729,6 +636,7 @@ a stav ich spracovania je označený farbou:', // P 'page_pas_proxy' => 'Táto stránka sa nesmie spúšťať cez proxy', 'pas_de_proxy_pour' => 'Ak treba, určte, na ktoré počítače alebo domény sa tento proxy nemá použiť (napríklad @exemple@)', + 'phpinfo' => 'Nastavenie PHP', 'plugin_charge_paquet' => 'Spúšťa sa archívny súbor @name@', 'plugin_charger' => 'Stiahnuť', 'plugin_erreur_charger' => 'chyba: nedá sa spustiť @zip@', @@ -763,8 +671,11 @@ a stav ich spracovania je označený farbou:', 'plugin_info_telecharger' => 'spustiť z @url@ a nainštalovať na @rep@', 'plugin_info_upgrade_ok' => 'Úspešná aktualizácia', 'plugin_librairies_installees' => 'Nainštalované knižnice', + 'plugin_necessite_extension_php' => 'Vyžaduje rozšírenie PHP @plugin@ verziu @version@.', + 'plugin_necessite_extension_php_sans_version' => 'Vyžaduje rozšírenie PHP @plugin@', 'plugin_necessite_lib' => 'Tento zásuvný modul potrebuje knižnicu @lib@', - 'plugin_necessite_plugin' => 'Vyžaduje sa verzia @version@ alebo novšia verzia zásuvného modulu @plugin@.', + 'plugin_necessite_php' => 'Vyžaduje @plugin@ verziu @version@.', + 'plugin_necessite_plugin' => 'Potrebuje zásuvný modul @plugin@ vo verzii @version@.', 'plugin_necessite_plugin_sans_version' => 'Potrebuje zásuvný modul @plugin@', 'plugin_necessite_spip' => 'Vyžaduje sa SPIP, verzia @version@ alebo novšia.', 'plugin_source' => 'zdroj: ', @@ -772,6 +683,9 @@ a stav ich spracovania je označený farbou:', 'plugin_titre_automatique_ajouter' => 'Pridať zásuvné moduly', 'plugin_titre_installation' => 'Inštalácia zásuvného modulu @plugin@', 'plugin_titre_modifier' => 'Moje zásuvné moduly', + 'plugin_utilise_extension_php' => 'Využíva rozšírenie PHP @plugin@ verziu @version@.', + 'plugin_utilise_php' => 'Využíva @plugin@ verziu @version@.', + 'plugin_utilise_plugin' => 'Využíva zásuvný modul @plugin@ vo verzii @version@.', 'plugin_zip_active' => 'Pokračujte, aby sa aktivoval', 'plugin_zip_adresse' => 'Ak chcete spustiť zazipovaný súbor zásuvného modulu alebo zoznam zásuvných modulov, zadajte toto umiestnenie.', 'plugin_zip_adresse_champ' => 'Umiestnenie zásuvného modulu alebo zoznamu ', @@ -798,7 +712,7 @@ a stav ich spracovania je označený farbou:', // Q 'queue_executer_maintenant' => 'Spustiť teraz', - 'queue_info_purger' => 'Môžete vymazať všetky čakajúce úlohy a zaplniť zoznam pravidelnými úlohami', + 'queue_info_purger' => 'Môžete vymazať všetky čakajúce úlohy a zobraziť zoznam pravidelných úloh', 'queue_nb_jobs_in_queue' => '@nb@ úloh v rade', 'queue_next_job_in_nb_sec' => 'Ďalšia úloha o @nb@ s.', 'queue_no_job_in_queue' => 'Žiadne nevykonané úlohy', @@ -808,6 +722,7 @@ a stav ich spracovania je označený farbou:', // R 'repertoire_plugins' => 'Priečinok:', + 'required' => ' (povinné)', // S 'sans_heure' => 'neurčený čas', @@ -837,18 +752,13 @@ preinštalovať SPIP, vytvoriť novú databázu a nový účet pre administrát 'texte_article_virtuel_reference' => 'Virtuálny článok: článok na vašej stránke v SPIPe, ktorý presmeruje na inú internetovú adresu. Ak chcete odstrániť presmerovanie, odstráňte internetovú adresu.', 'texte_aucun_resultat_auteur' => 'Žiadne výsledky pre reťazec „@cherche_auteur@“.', 'texte_auteur_messagerie' => 'Táto stránka dokáže aktualizovať zoznam redaktorov online v reálnom čase, čo umožňuje ostatným používateľom kontaktovať vás. Môžete sa rozhodnúť, že sa v tomto zozname neobjavíte (potom budete pre ostatných „neviditeľný“).', - 'texte_auteur_messagerie_1' => 'Táto stránka umožňuje výmenu odkazov a vytváranie súkromných diskusných fór medzi prispievateľmi na stránku. Môžete sa rozhodnúť aj tak, že sa na týchto aktivitách nebudete zúčastňovať.', 'texte_auteurs' => 'AUTORI', 'texte_choix_base_1' => 'Vyberte si databázu:', 'texte_choix_base_2' => 'Server SQL obsahuje niekoľko databáz.', 'texte_choix_base_3' => 'Vyberte tú, ktorú vám priradil poskytovateľ hostingu:', 'texte_choix_table_prefix' => 'Predpona tabuliek:', - 'texte_commande_vider_tables_indexation' => 'Použite tento príkaz na vymazanie indexovacích tabuliek, ktoré - používa vyhľadávač integrovaný v SPIPe. Umožní vám to - ušetriť trochu miesta na disku.', 'texte_compatibilite_html' => 'Môžete žiadať, aby SPIP vytváral kód kompatibilný so štandardom HTML4 alebo mu povoliť, aby používal modernejší kód, kompatibilný s HTML5.', 'texte_compatibilite_html_attention' => 'Pri aktivovaní možnosti HTML5 nehrozí žiadne nebezpečenstvo. Ak to však urobíte, stránky vášho webu sa musia začínať týmto kódom, aby boli platné: <!DOCTYPE html>.', - 'texte_compresse_ou_non' => '(voliteľná kompresia)', 'texte_compte_element' => '@count@ prvok', 'texte_compte_elements' => '@count@ prvkov', 'texte_conflit_edition_correction' => 'Prosím, porovnajte rozdiely medzi týmito dvoma verziami. Môžete si tiež skopírovať svoje zmeny a začať odznova.', @@ -867,10 +777,9 @@ preinštalovať SPIP, vytvoriť novú databázu a nový účet pre administrát 'texte_date_publication_anterieure_nonaffichee' => 'Skryť dátum predchádzajúceho publikovania.', 'texte_date_publication_article' => 'PUBLIKOVANÝ DŇA:', 'texte_date_publication_objet' => 'Dátum publikovania online:', - 'texte_descriptif_petition' => 'Opis petície', + 'texte_definir_comme_traduction_rubrique' => 'Táto rubrika je preklad rubriky číslo:', 'texte_descriptif_rapide' => 'Stručný opis', 'texte_effacer_base' => 'Vymazať databázu SPIPu', - 'texte_effacer_donnees_indexation' => 'Zmazať údaje o indexovaní', 'texte_effacer_statistiques' => 'Vymazať štatistiky', 'texte_en_cours_validation' => 'Tieto veci čakajú na schválenie.', 'texte_enrichir_mise_a_jour' => 'Vzhľad svojho textu môžete obohatiť pomocou klávesových skratiek.', @@ -886,30 +795,19 @@ preinštalovať SPIP, vytvoriť novú databázu a nový účet pre administrát 'texte_informations_personnelles_2' => '(Poznámka: ide o preinštaláciu, ak vám stále funguje prístup ', 'texte_introductif_article' => '(Úvodný text článku.)', 'texte_jeu_caractere' => 'Na stránke sa odporúča používať „univerzálnu abecedu“ (utf-8). To umožní zobraziť text v hocijakom jazyku. Všetky moderné prehliadače sú s touto znakovou sadou úplne kompatibilné.', - 'texte_jeu_caractere_2' => 'Pozn.: Týmto nastavením neskonvertujete text, ktorý sa už nachádza v databáze.', 'texte_jeu_caractere_3' => 'Vaša stránka momentálne používa túto znakovú sadu:', 'texte_jeu_caractere_4' => 'Ak sa vaše dáta nezobrazujú správne (to sa môže stať po obnovení databázy zo zálohy), alebo ak nastavujete túto stránku a chcete použiť inú znakovú sadu, prosím, uveďte ju tu:', - 'texte_jeu_caractere_conversion' => 'Poznámka: Môžete sa rozhodnúť skonvertovať všetky texty (články, novinky, diskusné fóra, atď.) na svojej stránke navždy do znakovej sady utf-8. Ak to chcete urobiť, prejdite na stránku konverzie na UTF-8.', - 'texte_lien_hypertexte' => '(Ak sa váš príspevok týka článku publikovaného na internete, alebo stránky, na ktorej je viac informácií, prosím, zadajte sem jej titulok a adresu.)', 'texte_login_ldap_1' => '(Nevypĺňajte pri anonymnom prístupe alebo zadajte celé umiestnenie, napr. „uid=smith, ou=používatelia, dc=moja-doména, dc=com“.)', 'texte_login_precaution' => 'Pozor! Toto je prihlasovacie meno, ktoré momentálne používate. Používajte tento formulár obozretne.', - 'texte_message_edit' => 'Pozor: túto správu môžu upravovať všetci administrátori stránky a uvidia ju všetci redaktori. Na oznámenie dôležitých informácií, ktoré sa týkajú stránky, používajte, prosím, iba oznamy.', 'texte_messagerie_agenda' => 'Odkazovač umožňuje autorom tejto stránky komunikovať priamo v súkromnej zóne. Je prepojený s kalendárom.', 'texte_mise_a_niveau_base_1' => 'Práve ste aktualizovali súbory SPIPu. Teraz musíte aktualizovať databázu stránky.', 'texte_modifier_article' => 'Upraviť tento článok:', - 'texte_moteur_recherche_active' => 'Vyhľadávač je aktivovaný. Použite tento príkaz, - ak chcete spustiť jeho rýchle preindexovanie (napr. po obnovení - zálohy). Mali by ste mať na pamäti, že súbory zmenené - bežným spôsobom (cez rozhranie SPIPu) sa automaticky - preindexujú. Preto je tento príkaz užitočný iba za zvláštnych okolností.', - 'texte_moteur_recherche_non_active' => 'Vyhľadávač nie je aktivovaný.', 'texte_multilinguisme' => 'Ak chcete mať redakčné objekty v rôznych jazykoch, môžete do nich pridať menu na výber jazyka v závislosti od organizácie vašej stránky.', 'texte_multilinguisme_trad' => 'Môžete tiež aktivovať systém na správu prepojení medzi rôznymi prekladmi niektorých objektov.', 'texte_non_compresse' => 'rozbalené (váš server nepodporuje túto funkciu)', - 'texte_nouveau_message' => 'Nová správa', 'texte_nouvelle_version_spip_1' => 'Práve ste nainštalovali novú verziu SPIPu.', 'texte_nouvelle_version_spip_2' => 'Táto nová verzia si vyžaduje rozsiahlejšiu aktualizáciu ako obyčajne. Ak ste webmasterom tejto stránky, prosím, odstráňte súbor @connect@ a reštartujte inštaláciu, aby sa aktualizovali údaje na pripojenie k vašej databáze.

    (P.S.: ak ste zabudli údaje na pripojenie, pozrite sa do súboru @connect@ predtým, ako ho odstránite!)

    ', 'texte_operation_echec' => 'Vráťte sa na predchádzajúcu stránku, vyberte inú databázu, alebo vytvorte novú. Skontrolujte údaje, ktoré poskytuje vaša hostingová služba.', @@ -925,7 +823,6 @@ preinštalovať SPIP, vytvoriť novú databázu a nový účet pre administrát 'texte_rappel_selection_champs' => '[Pamätajte si, že toto pole treba označiť správne.]', 'texte_recalcul_page' => 'Ak chcete obnoviť iba jednu stránku, je jednoduchšie zobraziť si túto stránku z verejne prístupnej stránky a kliknúť na "Obnoviť túto stránku".', - 'texte_recapitiule_liste_documents' => 'Na tejto stránke nájdete zoznam súborov, ktoré ste umiestnili do rubrík. Ak chcete upraviť údaje nejakého súboru, kliknite na odkaz na príslušnú rubriku.', 'texte_recuperer_base' => 'Opraviť databázu', 'texte_reference_mais_redirige' => 'odkazovaný článok na vašej stránke, ale presmerovaný na inú www adresu.', 'texte_requetes_echouent' => 'Keď sú niektoré požiadavky na SQL stále neúspešné @@ -953,7 +850,6 @@ obnoviť iba jednu stránku, je jednoduchšie zobraziť si túto stránku z ver v cache SPIPu. To si vynúti obnovenie každej stránky vášho webu, čo je užitočné po veľkých zmenách v grafike alebo štruktúre stránky.', 'texte_sur_titre' => 'Nadtitulok', 'texte_table_ok' => ': táto tabuľka je v poriadku.', - 'texte_tables_indexation_vides' => 'Indexovacie tabuľky vyhľadávača sú prázdne.', 'texte_tentative_recuperation' => 'Pokus o opravu', 'texte_tenter_reparation' => 'Pokus o opravu databázy', 'texte_test_proxy' => 'Ak chcete vyskúšať tento proxy, zadajte sem adresu stránky, @@ -964,27 +860,12 @@ v cache SPIPu. To si vynúti obnovenie každej stránky vášho webu, čo je u 'texte_travail_collaboratif' => 'Ak niekoľko redaktorov často (spolu)pracuje na rovnakom článku, systém môže označiť nedávno „otvorené“ články, aby sa predišlo tomu, že ich budú upravovať v tom istom čase viacerí ľudia. Táto možnosť je v prvotných nastaveniach vypnutá, aby sa predišlo zbytočným správam s varovaniami.', - 'texte_trop_resultats_auteurs' => 'Priveľa výsledkov pre reťazec "@cherche_auteur@"; prosím, upresnite svoje vyhľadávanie.', - 'texte_unpack' => 'Sťahuje sa najnovšia verzia', - 'texte_utilisation_moteur_syndiques' => 'Keď budete používať vyhľadávač integrovaný v SPIPe, - syndikované stránky a články - môžete prehľadávať rôznymi spôsobmi.
    - Najjednoduchší spôsob vyhľadávania je - podľa názvov a opisov článkov.
    - Druhý, rýchlejší, umožňuje -SPIPu vyhľadávať aj na stránkach, - na ktoré sa odkazuje. Ak odkazujete - na stránku, SPIP prehľadá text tejto stránky - samostatne.', - 'texte_utilisation_moteur_syndiques_2' => 'Tento spôsob prinúti SPIP pravidelne navštevovať stránky, na ktoré sa odkazuje, čo môže spôsobiť spomalenie rýchlosti vašej vlastnej stránky.', 'texte_vide' => 'prázdny ', 'texte_vider_cache' => 'Vyprázdniť cache', - 'titre_admin_effacer' => 'Technická údržba', 'titre_admin_tech' => 'Technická údržba', 'titre_admin_vider' => 'Technická údržba', 'titre_ajouter_un_auteur' => 'Pridať autora', 'titre_ajouter_un_mot' => 'Pridať kľúčové slovo', - 'titre_ajouter_une_rubrique' => 'Pridať rubriku', 'titre_cadre_afficher_article' => 'Zobraziť články:', 'titre_cadre_afficher_traductions' => 'Zobraziť stav prekladu pre tieto jazyky:', 'titre_cadre_ajouter_auteur' => 'PRIDAŤ AUTORA:', @@ -1011,54 +892,28 @@ SPIPu vyhľadávať aj na stránkach, 'titre_naviguer_dans_le_site' => 'Prehľadávať stránku...', 'titre_nouvelle_rubrique' => 'Nová rubrika', 'titre_numero_rubrique' => 'RUBRIKA ČÍSLO:', - 'titre_page_admin_effacer' => 'Technická údržba: vymazanie databázy', 'titre_page_articles_edit' => 'Zmeniť: @titre@', 'titre_page_articles_page' => 'Články', 'titre_page_articles_tous' => 'Celá stránka', - 'titre_page_auteurs' => 'Návštevníci', 'titre_page_calendrier' => 'Kalendár na @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Nastavenia stránky', - 'titre_page_config_fonctions' => 'Nastavenia stránky', - 'titre_page_configuration' => 'Nastavenia stránky', - 'titre_page_controle_petition' => 'Sledovanie petícií', 'titre_page_delete_all' => 'úplné a nezvratné odstránenie', - 'titre_page_documents_liste' => 'Pripojené súbory', - 'titre_page_index' => 'Vaša súkromná zóna', - 'titre_page_message_edit' => 'Napísať správu', - 'titre_page_messagerie' => 'Váš odkazovač', 'titre_page_recherche' => 'Výsledky vyhľadávania @recherche@', 'titre_page_statistiques_referers' => 'Štatistika (prichádzajúce odkazy)', - 'titre_page_statistiques_signatures_jour' => 'Počet podpisov podľa dní', - 'titre_page_statistiques_signatures_mois' => 'Počet podpisov podľa mesiacov', 'titre_page_upgrade' => 'Upgrade SPIPU', + 'titre_preference_menus_favoris' => 'Obľúbené menu', 'titre_publication_articles_post_dates' => 'Publikovanie postdatovaných článkov', - 'titre_referencer_site' => 'Vložiť odkaz na stránku:', - 'titre_rendez_vous' => 'STRETNUTIA:', 'titre_reparation' => 'Opraviť', 'titre_suivi_petition' => 'Sledovanie petícií', 'tls_ldap' => 'Zabezpečenie transportnej vrstvy:', - 'trad_article_inexistant' => 'V tomto čísle nie je žiaden článok', 'trad_article_traduction' => 'Všetky verzie tohto článku:', - 'trad_deja_traduit' => 'Chyba: tento článok sa nedá prepojiť s požadovaným číslom.', 'trad_delier' => 'Na tieto preklady už neodkazovať', 'trad_lier' => 'Tento článok je prekladom článku číslo:', 'trad_new' => 'Napísať nový preklad', // U - 'upload_info_mode_document' => 'Umiestniť tento obrázok do portfólia', - 'upload_info_mode_image' => 'Odstrániť tento obrázok z portfólia', - 'utf8_convert_attendez' => 'Počkajte niekoľko sekúnd a potom znova spustite túto stránku.', - 'utf8_convert_avertissement' => 'Chystáte sa skontertovať obsah svojej databázy (články, novinky, atď.) zo znakovej sady @orig@ do znakovej sady @charset@.', - 'utf8_convert_backup' => 'Nezabudnite najprv urobiť kompletnú zálohu svojej stránky. Treba tiež skontrolovať, či sú vaše šablóny a jazykové súbory kompatibilné s @charset@.', - 'utf8_convert_erreur_deja' => 'Vaša stránka je už v @charset@, nemá zmysel ju konvertovať.', 'utf8_convert_erreur_orig' => 'Chyba: znaková sada @charset@ nie je podporovaná.', - 'utf8_convert_termine' => 'Hotovo!', - 'utf8_convert_timeout' => 'Dôležité: Ak server hlási timeout (vypršanie časového limitu), prosím, pokračujte a znova načítajte stránku, až kým sa vám neobjaví správa "Hotovo!".', - 'utf8_convert_verifier' => 'Teraz treba vyprázdniť cache stránky a potom skontrolovať, či je na verejne prístupnej stránke všetko v poriadku. Pre prípad, že by sa objavil veľký problém, bola v priečinku @rep@ vytvorená záloha pôvodných dát (vo formáte SQL).', - 'utf8_convertir_votre_site' => 'Konvertovať stránku na utf-8', // V 'version' => 'Verzia:' ); - -?> diff --git a/www/ecrire/lang/ecrire_sv.php b/www/ecrire/lang/ecrire_sv.php index 376940b9..c831266c 100644 --- a/www/ecrire/lang/ecrire_sv.php +++ b/www/ecrire/lang/ecrire_sv.php @@ -1,9 +1,11 @@ 'Återgå till den föregående sidan och kontrollera informationen du angivit.', 'avis_connexion_ldap_echec_3' => 'Alternativt kan du välja att inte använda LDAP stöd för att importera användare.', 'avis_deplacement_rubrique' => 'Varning! Den här avdelningen innehåller @contient_breves@ notiser@scb@: om du flyttar den, markera i kryssrutan för att bekräfta.', - 'avis_destinataire_obligatoire' => 'Du måste ange en mottagare innan du skickar meddelandet.', 'avis_erreur_connexion_mysql' => 'Fel på SQL-förbindelsen', - 'avis_erreur_version_archive' => 'Varning! Filen @archive@ motsvarar en - annan SPIP-version än den du instellerad - Du står inför stora svårigheter: risken att -förstöra din databas, tekniska fel för din - webbplats, etc. Skicka inte den här begäran -om import.

    För mer information se SPIP-dokumentationen (På engelska).', # MODIF - 'avis_espace_interdit' => 'Förbjudet område

    SPIP är redan installerat.', + 'avis_espace_interdit' => 'Förbjudet område

    SPIP är redan installerat.', # MODIF 'avis_lecture_noms_bases_1' => 'Installerings-scriptet kunde inte läsa namnen på de installerade databaserna.', 'avis_lecture_noms_bases_2' => 'Antingen finns det ingen tillgänglig databas eller så är funktionen som listar databaser inaktiverad av säkerhetsskäl (det är fallet hos många webbvärdar).', 'avis_lecture_noms_bases_3' => 'I fråga om det andra alternativet är det möjligt att en databas med ditt användarnamn kan användas:', - 'avis_non_acces_message' => 'Du har inte tillgång till det här meddelandet.', 'avis_non_acces_page' => 'Du har inte tillgång till den här sidan.', 'avis_operation_echec' => 'Operationen misslyckades.', 'avis_operation_impossible' => 'Operationen omöjlig att genomföra', - 'avis_probleme_archive' => 'Läsfel i filen @archive@', 'avis_suppression_base' => 'OBS! Radering av data är permanent och kan inte göras ogjord.', - 'avis_version_mysql' => 'Din version av MySql (@version_mysql@) stöder inte automatisk reparation av databas-tabeller.', // B 'bouton_acces_ldap' => 'Lägg till en LDAP-katalog >>', 'bouton_ajouter' => 'Lägg till', - 'bouton_ajouter_participant' => 'LÄGG TILL EN DELTAGARE', - 'bouton_annonce' => 'MEDDELANDE', 'bouton_annuler' => 'Avbryt', - 'bouton_checkbox_envoi_message' => 'möjlighet att skicka ett meddelande', - 'bouton_checkbox_indiquer_site' => 'Du måste ange ett namn på en webbplats', - 'bouton_checkbox_signature_unique_email' => 'endast en signatur per e-postadress', - 'bouton_checkbox_signature_unique_site' => 'endast en signatur per webbplats', 'bouton_demande_publication' => 'Begär att den här artikeln ska publiceras', 'bouton_desactive_tout' => 'Avaktivera alla', 'bouton_desinstaller' => 'Avinstallera', - 'bouton_effacer_index' => 'Radera index', 'bouton_effacer_tout' => 'Radera ALLA', - 'bouton_envoi_message_02' => 'SKICKA ETT MEDDELANDE', 'bouton_envoyer_message' => 'Färdigt meddelande: skicka', 'bouton_modifier' => 'Ändra', - 'bouton_pense_bete' => 'PERSONLIG MINNESANTECKNING', - 'bouton_radio_activer_messagerie' => 'Möjliggör interna meddlanden', - 'bouton_radio_activer_messagerie_interne' => 'möjliggör interna meddelanden', - 'bouton_radio_activer_petition' => 'Aktivera namninsamlingen', 'bouton_radio_afficher' => 'Visa', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Synas i listan över anslutna redaktörere', - 'bouton_radio_desactiver_messagerie' => 'Stäng av meddelandefunktionen', 'bouton_radio_envoi_annonces_adresse' => 'Skicka meddelanden till adressen:', 'bouton_radio_envoi_liste_nouveautes' => 'Skicka lista över senaste notiser', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Inte synas i listan över anslutna redaktörere', 'bouton_radio_non_envoi_annonces_editoriales' => 'Skicka inga redaktionella meddelanden', - 'bouton_radio_pas_petition' => 'Inga namninsamlingar', - 'bouton_radio_petition_activee' => 'Namninsamling aktiverad', - 'bouton_radio_supprimer_petition' => 'Radera namninsamlingen', 'bouton_redirection' => 'OMPEKA', 'bouton_relancer_installation' => 'Kör installationen igen', 'bouton_suivant' => 'Nästa', 'bouton_tenter_recuperation' => 'Försök till reparation', 'bouton_test_proxy' => 'Testa proxyn', 'bouton_vider_cache' => 'Töm cachen', - 'bouton_voir_message' => 'Förhandsgranska meddelandet innan det godkänns', // C - 'cache_mode_compresse' => 'Cachefilerna sparas komprimerade.', - 'cache_mode_non_compresse' => 'Cachefilerna sparas utan komprimering.', 'cache_modifiable_webmestre' => 'Den här parametern kan ändras av den webbansvariga.', 'calendrier_synchro' => 'Om du använder ett kalenderprogram som är kompatibelt med iCal kan du synkronisera det med informationen på den här webbplatsen.', 'config_activer_champs' => 'Aktivera följande fält', @@ -104,7 +77,6 @@ om import.

    För mer information se SPIP-dokumentationen 'Konfigurera ytterligare en databas', 'config_titre_base_sup_choix' => 'Välj ytterligare en databas', 'connexion_ldap' => 'ldapuppkoppling:', - 'copier_en_local' => 'Kopiera till den lokala sajten', // D 'date_mot_heures' => 'h', @@ -154,7 +126,7 @@ om import.

    För mer information se SPIP-dokumentationen 'För mer information, tveka inte om att besöka SPIP’s dokumentation.', # MODIF 'ical_info_calendrier' => 'Du kan använda två kalendrar. En är en sajtkarta med alla publicerade artiklar. Den andra innehåller redaktionella meddelanden och dina senaste privata meddelanden: Den är personlig, tack vare en genererad nyckel som du kan förändra när som helst genom att byta lösenord.', 'ical_methode_http' => 'Nerladdning', - 'ical_methode_webcal' => 'Synkronisering (webcal://)', + 'ical_methode_webcal' => 'Synkronisering (webcal://)', # MODIF 'ical_texte_js' => 'En rad javascript tillåter dig att, väldigt enkelt och på vilken sajt du vill, visa en lista på de senaste artiklarna publicerade på den här sajten.', 'ical_texte_prive' => 'Den här kalendern som är personlig, innnehåller dina egna redaktionella händelser på den här sajten (uppgifter, egna möten, inlämnade artiklar och nyheter...).', 'ical_texte_public' => 'Den här kalendern låter dig följa den publika aktiviteten på sajten (publicerade artiklar och nyheter).', @@ -170,12 +142,8 @@ om import.

    För mer information se SPIP-dokumentationen 'Kalender', 'icone_creer_auteur' => 'Skapa en ny redaktör och koppla honom (henne) till den här artikeln', 'icone_creer_mot_cle' => 'Skapa ett nytt nyckelord och länka det till artikeln', - 'icone_creer_mot_cle_rubrique' => 'Skapa ett nytt nyckelord och koppla det till den här avdelningen', - 'icone_creer_mot_cle_site' => 'Skapa ett nytt nyckelord och koppla det till den här sajten', 'icone_creer_rubrique_2' => 'Skapa en ny avdelning', - 'icone_envoyer_message' => 'Sänd detta meddelande', 'icone_modifier_article' => 'Editera artikeln', - 'icone_modifier_message' => 'Editera meddelandet', 'icone_modifier_rubrique' => 'Editera avdelningen', 'icone_relancer_signataire' => 'Kontakta personen igen', 'icone_retour' => 'Tillbaka', @@ -186,11 +154,8 @@ om import.

    För mer information se SPIP-dokumentationen 'Validera signaturen', 'image_administrer_rubrique' => 'Du kan hantera den här avdelningen', 'info_1_article' => '1 artikel', - 'info_1_site' => '1 sajt', 'info_activer_cookie' => 'Du kan aktivera en administrationscookie, som tillåter dig att enkelt växla mellan den publika och den privata delen.', - 'info_admin_gere_rubriques' => 'Den här administratören hanterar följande avdelningar:', - 'info_admin_gere_toutes_rubriques' => 'Den här administratören hanterar alla avdelningar.', # MODIF 'info_administrateur' => 'Administratör', 'info_administrateur_1' => 'Administratör', 'info_administrateur_2' => 'på sajten (använd med försiktighet)', @@ -200,16 +165,13 @@ om import.

    För mer information se SPIP-dokumentationen 'Du kan hantera den här avdelningen', 'info_adresse' => 'till adressen:', 'info_adresse_url' => 'Din sajts publika URL', - 'info_afficher_visites' => 'Visa besök till:', 'info_aide_en_ligne' => 'SPIP Online Hjälp', 'info_ajout_image' => 'När du lägget till filer som bifogade dokument till en artikel, kan SPIP automatiskt skapa miniatyrer av de inlagda bilderna. Det tillåter till exempel att man automatiskt skapar ett galleri eller en portfolio.', - 'info_ajout_participant' => 'Följande deltagare har lagts till:', 'info_ajouter_rubrique' => 'lägg till en annan avdelning:', 'info_annonce_nouveautes' => 'Senaste nyheterna', - 'info_anterieur' => 'föregående', 'info_article' => 'artikel', 'info_article_2' => 'artiklar', 'info_article_a_paraitre' => 'Fördaterade artiklar som kommer att publiceras', @@ -217,10 +179,8 @@ om import.

    För mer information se SPIP-dokumentationen 'Artiklar', 'info_articles_auteur' => 'Den här redaktörens artiklar', 'info_articles_trouves' => 'Artiklar hittade', - 'info_articles_trouves_dans_texte' => 'Artiklar hittade (i texten)', 'info_attente_validation' => 'Dina artiklar som väntar på validering', 'info_aujourdhui' => 'idag:', - 'info_auteur_message' => 'AVSÄNDARE:', 'info_auteurs' => 'Redaktörer', 'info_auteurs_par_tri' => 'Redaktörer@partri@', 'info_auteurs_trouves' => 'Redaktörer funna', @@ -235,7 +195,6 @@ om import.

    För mer information se SPIP-dokumentationen 'Inställningar: Sökväg i katalogen', 'info_choix_base' => 'Tredje steget:', 'info_code_acces' => 'Glöm inte ditt eget lösenord!', - 'info_compresseur_gzip' => 'N. B. : Il est recommandé de vérifier au préalable si l’hébergeur compresse déjà systématiquement les scripts php ; pour cela, vous pouvez par exemple utiliser le service suivant : @testgzip@', # MODIF 'info_config_suivi' => 'Om den här adressen är en mailing lista, kan du under adressen visa var man kan registrera sig. Det kan vara en URL (till exempel en webbsida där man kan registrera sig), eller en e-postadress med en speciell ärenderad (till exempel: @adresse_suivi@?subject=subscribe):', 'info_config_suivi_explication' => 'Du kan anmäla dig till sajtens nyhetsbrev. Du kommer då att automatiskt få meddelanden om artiklar och nyheter som laddats upp för publicering.', 'info_confirmer_passe' => 'Bekräfta ditt nya lösenord:', @@ -253,8 +212,6 @@ om import.

    För mer information se SPIP-dokumentationen 'Datum för tidigare publicering:', 'info_date_referencement' => 'DATUM DÅ SAJTEN LÄNKADES:', 'info_derniere_etape' => 'Klart!', - 'info_derniers_articles_publies' => 'Dina senaste publicerade artiklar', - 'info_desactiver_messagerie_personnelle' => 'Du kan aktivera eller avaktivera dina personliga meddelanden på den här sajten.', 'info_descriptif' => 'Beskrivning:', 'info_desinstaller_plugin' => 'raderar data och avaktiverar tillägget', 'info_discussion_cours' => 'Pågående diskussion', @@ -262,7 +219,6 @@ om import.

    För mer information se SPIP-dokumentationen 'Avsändaren mailadress (frivilligt)', 'info_email_envoi_txt' => 'Skriv in avsändarens e-postadress som används när man sänder mejlen (som default används mottagarens adress som avsändaradress) :', 'info_email_webmestre' => 'Webmasterns mejladress (frivillig)', # MODIF - 'info_entrer_code_alphabet' => 'Skriv in koden för teckenuppsättningen som skall användas:', 'info_envoi_email_automatique' => 'Automatisk e-post', 'info_envoyer_maintenant' => 'Skicka nu', 'info_etape_suivante' => 'Gå till nästa steg', @@ -273,28 +229,14 @@ om import.

    För mer information se SPIP-dokumentationen 'Lösenordsfil ".htpasswd"', - 'info_gauche_admin_effacer' => 'Endast administratörer har tillgång till denna sida.

    Den ger tillgång till tekniska underhållsrutiner av olika slag. En del av dem kommer, om de används, att kräva FTP-tillgång till Webservern för autentifiering.

    ', # MODIF - 'info_gauche_admin_tech' => 'Cette page est uniquement accessible aux responsables du site.

    Elle donne accès aux différentes -fonctions de maintenance technique. Certaines d’entre elles donnent lieu à un processus d’authentification spécifique, qui -exige d’avoir un accès FTP au site Web.

    ', # MODIF - 'info_gauche_admin_vider' => 'Cette page est uniquement accessible aux responsables du site.

    Elle donne accès aux différentes -fonctions de maintenance technique. Certaines d’entre elles donnent lieu à un processus d’authentification spécifique, qui -exige d’avoir un accès FTP au site Web.

    ', # MODIF 'info_gauche_auteurs' => 'Här hittar du alla redaktörer på sajten. Status på var och en av dem visas av färgen på ikonen (administratör = grön; redaktör = gul).', 'info_gauche_auteurs_exterieurs' => 'Externa redaktörer utan behörighet på sajten, visas med en blå ikon; raderade redaktörer med en soptunna.', # MODIF - 'info_gauche_numero_auteur' => 'REDAKTÖR NUMMER:', 'info_generation_miniatures_images' => 'Skapande av tumnagelbilder.', - 'info_gerer_trad' => 'Aktivera översättningslänkar?', 'info_hebergeur_desactiver_envoi_email' => 'Vissa webhotell avaktiverar automatisk mejl på deras servrar. Om så är fallet kan följande funktioner hos SPIP inte användas.', 'info_hier' => 'I går:', - 'info_historique_activer' => 'Aktivera versionshantering', - 'info_historique_affiche' => 'Visa denna version', - 'info_historique_comparaison' => 'jämför', - 'info_historique_desactiver' => 'Avaktivera versionshantering', - 'info_historique_texte' => 'Versionshantering tillåter dig att se förändringar i och tillägg till en artikel och visar skillnader mellan versioner.', 'info_identification_publique' => 'Din publika identitet...', 'info_image_process' => 'Välj den bästa metoden för att skapa miniatyrer genom att klicka på motsvarande bild.', 'info_image_process2' => 'OBS!. Om du inte kan se någon bild, så är din server inte konfigurerad för att använda sådana verktyg. Om du vill använda dessa finesser så kontakta din leverantörs tekniska support och be dem installera utökningarna för «GD» eller «Imagick».', # MODIF @@ -311,8 +253,6 @@ funktioner hos SPIP inte användas.', 'info_logos' => 'Logotyperna', 'info_maximum' => 'maximum:', 'info_meme_rubrique' => 'I samma avdelning', - 'info_message' => 'Meddelande från', - 'info_message_efface' => 'MEDDELANDET RADERAT', 'info_message_en_redaction' => 'utkorg', 'info_message_technique' => 'Tekniskt meddelande:', 'info_messagerie_interne' => 'Internmeddelande', @@ -326,20 +266,15 @@ funktioner hos SPIP inte användas.', 'info_modifier_rubrique' => 'Editera avdelningen:', 'info_modifier_titre' => 'Editera: @titre@', 'info_mon_site_spip' => 'Min SPIP-sajt', - 'info_mot_sans_groupe' => '(Nyckelord utan en grupp...)', - 'info_moteur_recherche' => 'Integrerad sökmotor', 'info_moyenne' => 'genomsnitt:', - 'info_multi_articles' => 'Aktivera språkmenyen för artiklar?', 'info_multi_cet_article' => 'Den här artikelns språk:', 'info_multi_langues_choisies' => 'Var vänlig, välj tillgängliga språk för redaktörerna bland språken nedan. Språk som redan används på din sajt (högst upp på listan) kan inte avaktiveras.', - 'info_multi_rubriques' => 'Aktivera språkmenyn för avdelningar?', 'info_multi_secteurs' => '... bara för avdelningarna i roten?', 'info_nom' => 'Namn', 'info_nom_destinataire' => 'Mottagarens namn', 'info_nom_site' => 'Din sajts namn', 'info_nombre_articles' => '@nb_articles@ artiklar,', - 'info_nombre_partcipants' => 'DELTAGARE I DISKUSSIONEN:', 'info_nombre_rubriques' => '@nb_rubriques@ avdelningar,', 'info_nombre_sites' => '@nb_sites@ sajter,', 'info_non_deplacer' => 'Flytta inte...', @@ -347,17 +282,13 @@ funktioner hos SPIP inte användas.', 'info_non_modifiable' => 'kan inte förändras', 'info_non_suppression_mot_cle' => 'Jag vill inte radera nyckelordet.', 'info_notes' => 'Fotnoter', - 'info_nouveaux_message' => 'Nya meddelanden', 'info_nouvel_article' => 'Ny artikel', 'info_nouvelle_traduction' => 'Ny översättning:', 'info_numero_article' => 'ARTIKEL NUMMER:', 'info_obligatoire_02' => '[Krävs]', # MODIF 'info_option_accepter_visiteurs' => 'Tillåt besökare registrera sig på den publika delen', - 'info_option_faire_suivre' => 'Vidarebefordra forummeddelanden till artikelredaktören', 'info_option_ne_pas_accepter_visiteurs' => 'Avvisa besökarregistrering', 'info_options_avancees' => 'AVANCERADE INSTÄLLNINGAR', - 'info_ortho_activer' => 'Aktivera stavningskontrollen.', - 'info_ortho_desactiver' => 'Avaktivera stavningskontrollen.', 'info_ou' => 'eller...', 'info_page_interdite' => 'Förbjuden sida', 'info_par_nom' => 'efter namn', @@ -366,18 +297,13 @@ funktioner hos SPIP inte användas.', 'info_par_tri' => '’(efter @tri@)’', 'info_passe_trop_court' => 'lösenordet är för kort.', 'info_passes_identiques' => 'De två lösenorden är inte identiska.', - 'info_pense_bete_ancien' => 'Dina gamla meddelanden', # MODIF 'info_plus_cinq_car' => 'mer än 5 tecken', 'info_plus_cinq_car_2' => '(Mer än 5 tecken)', 'info_plus_trois_car' => '(Mer än 3 tecken)', 'info_popularite' => 'popularitet: @popularite@; besök: @visites@', - 'info_popularite_4' => 'popularitet: @popularite@; besök: @visites@', 'info_post_scriptum' => 'Postscript', 'info_post_scriptum_2' => 'PS:', 'info_pour' => 'för', - 'info_preview_admin' => 'Endast administratörer har tillgång till förhandsvisning', - 'info_preview_comite' => 'Alla redaktörer har tillgång till förhandsvisning', - 'info_preview_desactive' => 'Förhandsvisning är avaktiverad', 'info_procedez_par_etape' => 'Var vänlig, fortsätt steg för steg', 'info_procedure_maj_version' => 'Uppdateringsproceduren skall köras för att anpassa databasen till den nya versionen av SPIP.', @@ -386,22 +312,8 @@ funktioner hos SPIP inte användas.', 'info_publier' => 'publicera', 'info_publies' => 'Dina onlinepublicerade artiklar', 'info_question_accepter_visiteurs' => 'Om sajtens template tillåter besökare att registrera sig utan att gå in i den privata delen, var vänlig och aktivera följande option:', - 'info_question_inscription_nouveaux_redacteurs' => 'Acceptez-vous les inscriptions de nouveaux rédacteurs à - partir du site public ? Si vous acceptez, les visiteurs pourront s’inscrire - depuis un formulaire automatisé et accéderont alors à l’espace privé pour - proposer leurs propres articles.
    Lors de la phase d’inscription, - les utilisateurs reçoivent un courrier électronique automatique - leur fournissant leurs codes d’accès au site privé. Certains - hébergeurs désactivent l’envoi de mails depuis leurs - serveurs : dans ce cas, l’inscription automatique est - impossible.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Vill du använda SPIPŽs integrerade sökfunktion? - (Att stänga av den ökar systemets prestanda.)', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Sajtens bas', 'info_recharger_page' => 'Var vänlig och uppdatera sidan om en liten stund.', - 'info_recherche_auteur_a_affiner' => 'För många resultat för "@cherche_auteur@"; Var vänlig och avgränsa sökningen mer.', - 'info_recherche_auteur_ok' => 'Flera redaktörer hittades för "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Inga resultat hittades för "@cherche_auteur@".', 'info_recommencer' => 'Var vänlig och försök igen.', 'info_redacteur_1' => 'Redaktör', @@ -418,7 +330,6 @@ funktioner hos SPIP inte användas.', 'info_rubriques' => 'Avdelningar', 'info_rubriques_02' => 'avdelningar', 'info_rubriques_trouvees' => 'Hittade avdelningar', - 'info_rubriques_trouvees_dans_texte' => 'Avdelningar funna (i texten)', 'info_sans_titre' => 'Utan titel', 'info_selection_chemin_acces' => 'Välj åtkomstväg i katalogen:', 'info_signatures' => 'underskrifter', @@ -431,13 +342,11 @@ funktioner hos SPIP inte användas.', 'info_sites_lies_mot' => 'Länkade sajter knutna till detta nyckelord', 'info_sites_proxy' => 'Använder en proxy', 'info_sites_trouves' => 'Hittade sajter', - 'info_sites_trouves_dans_texte' => 'Hittade sajter (i texten)', 'info_sous_titre' => 'Undertitel:', 'info_statut_administrateur' => 'Administratör', 'info_statut_auteur' => 'Redaktörens status:', # MODIF 'info_statut_auteur_a_confirmer' => 'Registreringar som skall godkännas', 'info_statut_auteur_autre' => 'Annan status:', - 'info_statut_efface' => 'Raderad', 'info_statut_redacteur' => 'Redaktör', 'info_statut_utilisateurs_1' => 'Startinställningar för importerade användare', 'info_suivi_activite' => 'Följ upp aktiviteten på sajten', @@ -457,7 +366,6 @@ funktioner hos SPIP inte användas.', 'info_tous_articles_en_redaction' => 'Alla artiklar under arbete', 'info_tous_articles_presents' => 'Alla artiklar som publicerats i den här avdelningen', 'info_tous_les' => 'alla:', - 'info_tous_redacteurs' => 'meddelande till alla redaktörer', 'info_tout_site' => 'Hela sajten', 'info_tout_site2' => 'Artikeln har inte blivit översatt till det här språket.', 'info_tout_site3' => 'Artikeln har blivit översatt till det hör språket men vissa förändringar har gjorts senare i orginalartikeln. Översättningen behöver uppdateras.', @@ -472,7 +380,6 @@ med en färg som visar deras status:', 'info_une_rubrique' => 'en avdelning,', 'info_une_rubrique_02' => '1 avdelning', 'info_url' => 'URL:', - 'info_url_site' => 'SAJTEN’S URL:', 'info_urlref' => 'Hyperlänk:', 'info_utilisation_spip' => 'SPIP är nu färdig att användas..', 'info_visites_par_mois' => 'Besökare per månad:', @@ -501,8 +408,6 @@ med en färg som visar deras status:', 'item_activer_messages_avertissement' => 'Aktivera varningsmeddelanden', 'item_administrateur_2' => 'administratör', 'item_afficher_calendrier' => 'Visa i kalendern', - 'item_autoriser_documents_joints' => 'Tillåt dokument bifogade till artiklarna', - 'item_autoriser_documents_joints_rubriques' => 'Tillåt dokument i avdelningarna', 'item_autoriser_syndication_integrale' => 'Inkludera hela artiklar i syndikeringsfilerna', 'item_choix_administrateurs' => 'administratörer', 'item_choix_generation_miniature' => 'Generera miniatyrer automatiskt.', @@ -510,7 +415,6 @@ med en färg som visar deras status:', 'item_choix_redacteurs' => 'redaktörer', 'item_choix_visiteurs' => 'besökare till den publika delen', 'item_creer_fichiers_authent' => 'Skapa .htpasswd filer', - 'item_limiter_recherche' => 'Begränsa sökningen till information i din sajt', 'item_login' => 'Login', 'item_messagerie_agenda' => 'Aktivera meddelandesystemet och kalendern', 'item_mots_cles_association_articles' => 'artiklar', @@ -520,37 +424,26 @@ med en färg som visar deras status:', 'item_non_accepter_inscriptions' => 'Tillåt inte registreringar', 'item_non_activer_messages_avertissement' => 'Inga varningsmeddelanden', 'item_non_afficher_calendrier' => 'Visa inte i kalendern', - 'item_non_autoriser_documents_joints' => 'Tillåt inte dokument i artiklarna', - 'item_non_autoriser_documents_joints_rubriques' => 'Tillåt inte dokument i avdelningarna', 'item_non_autoriser_syndication_integrale' => 'Skicka bara en sammanfattning', - 'item_non_compresseur' => 'Avaktivera komprimering', 'item_non_creer_fichiers_authent' => 'Skapa inte dessa filer', - 'item_non_gerer_statistiques' => 'Hantera inte statistik', - 'item_non_limiter_recherche' => 'Utöka indexeringen till att omfatta innehåll på länkade sajter', 'item_non_messagerie_agenda' => 'Avaktivera meddelandesystemet och kalendern', 'item_non_publier_articles' => 'Publicera inte artiklar innan deras publiceringsdatum.', - 'item_non_utiliser_moteur_recherche' => 'Använd inte sökmotorn', 'item_nouvel_auteur' => 'Ny redaktör', 'item_nouvelle_rubrique' => 'Ny avdelning', 'item_oui' => 'Ja', 'item_publier_articles' => 'Publicera artiklarna utan att ta hänsyn till publiceringsdatum.', 'item_reponse_article' => 'Svara på artikeln', - 'item_utiliser_moteur_recherche' => 'Använd sökmotorn', 'item_visiteur' => 'besökare', // J 'jour_non_connu_nc' => 'okänd', // L - 'lien_ajout_destinataire' => 'Lägg till som mottagare', 'lien_ajouter_auteur' => 'Lätt till redaktören', - 'lien_ajouter_participant' => 'Lägg till en deltagare', 'lien_email' => 'e-post', 'lien_nom_site' => 'SAJTENS NAMN:', 'lien_retirer_auteur' => 'Ta bort redaktören', - 'lien_retrait_particpant' => 'ta bort deltagaren', 'lien_site' => 'sajt', - 'lien_supprimer_rubrique' => 'ta bort den här avdelningen', 'lien_tout_deplier' => 'Expandera alla', 'lien_tout_replier' => 'Kollapsa alla', 'lien_tout_supprimer' => 'Radera alla', @@ -576,7 +469,6 @@ med en färg som visar deras status:', 'onglet_contenu' => 'Innehåll', 'onglet_declarer_une_autre_base' => 'Ange en annan databas', 'onglet_discuter' => 'Diskutera', - 'onglet_documents' => 'Dokument', 'onglet_interactivite' => 'Interaktivitet', 'onglet_proprietes' => 'Egenskaper', 'onglet_repartition_actuelle' => 'nu', @@ -587,7 +479,7 @@ med en färg som visar deras status:', 'plugin_etat_stable' => 'Stabil', 'plugin_etat_test' => 'under test', 'plugin_impossible_activer' => 'Omöjligt att aktivera pluginen @plugin@', - 'plugin_necessite_plugin' => 'Version @version@ eller nyare av pluginen @plugin@ krävs.', + 'plugin_necessite_plugin' => 'Version @version@ eller nyare av pluginen @plugin@ krävs.', # MODIF 'plugin_zip_active' => 'Fortsätt för att aktivera', 'plugin_zip_installe_finie' => 'Filen @zip@ har packats upp och installerats.', 'plugin_zip_installe_rep_finie' => 'Filen @zip@ har packats upp och installerats i katalogen @rep@', @@ -598,6 +490,9 @@ med en färg som visar deras status:', 'plugins_erreur' => 'Fel i följande plugin: @plugins@', 'plugins_liste' => 'Lista över plugins', + // R + 'required' => '[Krävs]', # MODIF + // T 'taille_cache_vide' => 'Cachen är tom.', 'text_article_propose_publication' => 'Artikel inlämnad för publicering. tveka inte att säga din mening i forumet längst ned på sidan.', # MODIF @@ -616,51 +511,21 @@ installera om SPIP för att skapa en ny databas och den första administratören 'texte_choix_base_2' => 'Databasservern innehåller flera databaser.', 'texte_choix_base_3' => 'Välj den som din leverantör har gett dig:', 'texte_choix_table_prefix' => 'Prefix för tabeller:', - 'texte_compresse_ou_non' => '(Den kan vara komprimerad eller inte.)', 'texte_compte_element' => '@count@ objekt', 'texte_compte_elements' => '@count@ element', - 'texte_connexion_mysql' => 'Consult the information provided by your service provider. It should contain the connection codes for the SQL server.', # MODIF - 'texte_en_cours_validation' => 'The following articles and news are submitted for publication. Do not hesitate to give your opinion through the forums attached to them.', # MODIF - 'texte_fichier_authent' => 'Should SPIP create the .htpasswd - and .htpasswd-admin files in the directory @dossier@?

    - These files can be used to restrict access to authors - and administrators in other parts of your site - (for instance, external statistical programme).

    - If you have no need of such files, you can leave this option - with its default value (no files - creation).

    ', # MODIF 'texte_jeu_caractere_3' => 'Din sajt använder följande teckenuppsättning:', 'texte_mise_a_niveau_base_1' => 'Du har just uppdaterat filerna i SPIP. Nu måste du uppgradera sajtens databas.', 'texte_modifier_article' => 'Redigera artikeln:', - 'texte_moteur_recherche_active' => 'Sökmotorn är aktiverad. använd det här kommandot - om du vill utföra en snabb omindexering (t.ex efter - att ha tagit tillbaka data från en backup). Kom ihåg att dokument som skapats på - det normala sättet (från gränssnittet i SPIP ) automatiskt - indexeras igen: därför är kommandot bara användbart i speciella omständigheter.', - 'texte_moteur_recherche_non_active' => 'Sökfunktionen är inte aktiverad.', 'texte_multilinguisme' => 'Om du vill hantera artiklar på flera språk, med en avancerad navigering, kan du lägga till en option för språkval i artiklar och avdelningar, i enlighet med sajtens struktur.', # MODIF 'texte_multilinguisme_trad' => 'Dessutom kan du aktivera ett system för länkhantering av de olika översättningarna av en artikel.', # MODIF 'texte_non_compresse' => 'okomprimerad (din server stöder inte denna funktion)', - 'texte_nouveau_message' => 'Nytt meddelande', 'texte_nouvelle_version_spip_1' => 'Du har installerat en ny version av SPIP.', - 'texte_nouvelle_version_spip_2' => 'Cette nouvelle version nécessite une mise à jour plus complète qu’à l’accoutumée. Si vous êtes webmestre du site, veuillez effacer le fichier @connect@ et reprendre l’installation afin de mettre à jour vos paramètres de connexion à la base de données.

    (NB. : si vous avez oublié vos paramètres de connexion, jetez un œil au fichier @connect@ avant de le supprimer...)

    ', # MODIF 'texte_plus_trois_car' => 'mer än tre tecken', 'texte_plusieurs_articles' => 'Flera redaktörer hittades för "@cherche_auteur@":', 'texte_recalcul_page' => 'Om du vill uppdatera enbart en sida, är det bäst att göra det från den publika delen genom att klicka på « Ladda om sidan ».', 'texte_recuperer_base' => 'Reparera databasen', - 'texte_requetes_echouent' => 'Lorsque certaines requêtes SQL échouent - systématiquement et sans raison apparente, il est possible - que ce soit à cause de la base de données - elle-même.

    - Votre serveur SQL dispose d’une faculté de réparation de ses - tables lorsqu’elles ont été endommagées par - accident. Vous pouvez ici tenter cette réparation ; en - cas d’échec, conservez une copie de l’affichage, qui contient - peut-être des indices de ce qui ne va pas...

    - Si le problème persiste, prenez contact avec votre - hébergeur.

    ', # MODIF 'texte_sous_titre' => 'Undertitel', 'texte_statistiques_visites' => '(mörka staplar: Söndag / mörk linje: genomsnittlig nivå)', 'texte_statut_attente_validation' => 'väntar på godkännande', @@ -671,26 +536,13 @@ i SPIP’s cache. Det gör det möjligt att tvinga fram en uppdatering av alla s gjort viktiga förändringar i sajtens utseende eller struktur.', 'texte_sur_titre' => 'Övertitel', 'texte_table_ok' => ': den här tabellen är OK.', - 'texte_tables_indexation_vides' => 'Indextabellerna är tomma.', 'texte_tentative_recuperation' => 'Reparationsförsök', 'texte_tenter_reparation' => 'Försök att reparera databasen', 'texte_titre_02' => 'Ärenderad:', 'texte_titre_obligatoire' => 'Titel [Krävs]', 'texte_travail_article' => '@nom_auteur_modif@ arbetade med den här artikeln för @date_diff@ minuter sedan', - 'texte_trop_resultats_auteurs' => 'För många resultat för "@cherche_auteur@"; Var vänlig att smalna av frågan.', - 'texte_utilisation_moteur_syndiques' => 'When you use SPIP’s integrated search engine, -you can perform searches on sites and - articles syndicated in two different ways.
    - The simplest - way is to search only in the - titles and descriptions of the articles.
    - - A second, much more powerful, method allows - SPIP to search also in the text - of the referenced sites. If you - reference a site, SPIP will perform - the search in the site’s text itself.', # MODIF 'texte_vide' => 'tom', 'texte_vider_cache' => 'töm cachen', - 'titre_admin_effacer' => 'Tekniskt underhåll', 'titre_admin_tech' => 'Tekniskt underhåll', 'titre_admin_vider' => 'Tekniskt underhåll', 'titre_cadre_afficher_article' => 'Visa artiklarna:', @@ -710,46 +562,26 @@ you can perform searches on sites and 'titre_naviguer_dans_le_site' => 'Navigera i sajten...', 'titre_nouvelle_rubrique' => 'Ny avdelning', 'titre_numero_rubrique' => 'AVDELNING NUMMER:', - 'titre_page_admin_effacer' => 'Tekniskt underhåll: raderar databasen', 'titre_page_articles_edit' => 'Editera: @titre@', 'titre_page_articles_page' => 'Artiklar', 'titre_page_articles_tous' => 'Hela sajten', - 'titre_page_auteurs' => 'Besökare', 'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Sajtens inställningar', - 'titre_page_config_fonctions' => 'Sajtens inställningare', - 'titre_page_configuration' => 'Sajtens inställningar', 'titre_page_delete_all' => 'total och oåterkallelig radering', - 'titre_page_documents_liste' => 'Bifogade dokument', - 'titre_page_index' => 'Din privata del', 'titre_page_recherche' => 'Sökresultat @recherche@', 'titre_page_statistiques_referers' => 'Statistik (inkommande länkar)', 'titre_page_upgrade' => 'Uppgradera SPIP', 'titre_publication_articles_post_dates' => 'Tidsstyrd publicering av artiklar', - 'titre_referencer_site' => 'Referera webbplatsen:', - 'titre_rendez_vous' => 'MÖTEN:', 'titre_reparation' => 'Reparera', 'titre_suivi_petition' => 'Uppföljning av namninasamlingar', - 'trad_article_inexistant' => 'Det finns ingen artikel med det här numret', 'trad_article_traduction' => 'Alla versioner av den här artikeln:', - 'trad_deja_traduit' => 'Den här artikeln är i sig en översättning av den nuvarande artikeln.', # MODIF 'trad_delier' => 'Sluta länka den här artikeln till dess översättningar', # MODIF 'trad_lier' => 'Den här artikeln är en översättning av artikel nummer:', 'trad_new' => 'Skriv en ny översättning av den här artikeln', # MODIF // U - 'utf8_convert_attendez' => 'Vänta några sekunder och ladda sedan om den här sidan.', - 'utf8_convert_avertissement' => 'Du håller på att konvertera innehållet i din databas (artiklar, notiser, etc) från teckenkodningen @orig@ till teckenkodningen @charset@', - 'utf8_convert_backup' => 'Glöm inte bort att göra en fullständig säkerhetskopia av din webbplats. Du behöver också kontrollera att dina dokumentmallar och språkfiler är kompatibla med @charset@. Om spårning av revideringar är påslaget kommer den hur som helst att bli skadad.', # MODIF - 'utf8_convert_erreur_deja' => 'Din webbplats är redan i @charset@, det är ingen mening med att konvertera.', 'utf8_convert_erreur_orig' => 'Fel: teckenkodningen @charset@ stöds inte.', - 'utf8_convert_termine' => 'Klart!', - 'utf8_convert_timeout' => 'Viktigt: Om servern svarar med timeout, ladda om sidan tills du får meddelandet "Klart!".', - 'utf8_convert_verifier' => 'Nu behöver du tömma webbplatsens cache och sedan kontrollera att allt är bra med de offentliga delarna av webbplatsen. Om du upplever allvarliga problem har en säkerhetskopia av ditt ursprungliga data (i SQL-format) placerats i @rep@-katalogen.', - 'utf8_convertir_votre_site' => 'Konvertera din webbplats till utf-8', // V 'version' => 'Version:' ); - -?> diff --git a/www/ecrire/lang/ecrire_tr.php b/www/ecrire/lang/ecrire_tr.php index c0d75728..f5f61f15 100644 --- a/www/ecrire/lang/ecrire_tr.php +++ b/www/ecrire/lang/ecrire_tr.php @@ -1,9 +1,11 @@ 'Bir önceki sayfaya dönüp verdiğiniz bilgileri kontrol edin.', 'avis_connexion_ldap_echec_3' => 'Buna alternatif olarak, kullanıcı ithal etmek için LDAP sunucusunu kullanmayın.', 'avis_deplacement_rubrique' => 'Dikkat ! Bu bölüm @contient_breves@ kısa haber @scb@ içeriyor: eğer yerini değiştiriyorsanız (taşıyorsanız) lütfen bu onay kutucuğunu işaretleyin.', - 'avis_destinataire_obligatoire' => 'Bu iletiyi yollamadan önce kime yollamak istediğinizi belirmelisiniz.', 'avis_erreur_connexion_mysql' => 'SQL bağlantısı hatası', - 'avis_erreur_version_archive' => 'Dikkat! @archive@ dosyası kullandığınız -SPIP sürümüne uymuyor. Büyük zorluklarla - karşılaşabilirsiniz: veritabanınızın kaybı, - sitenin düzgün çalışmaması vb. -Bu ithal istemini onaylamayın. -

    Daha fazla bilgi için SPIP kullanma kılavuzuna bakın.', # MODIF - 'avis_espace_interdit' => 'Yasak alan

    SPIP zaten kurulu.
    ', + 'avis_espace_interdit' => 'Yasak alan
    SPIP zaten kurulu.
    ', 'avis_lecture_noms_bases_1' => 'Kurulum yazılımı mevcut veritabanlarının isimlerini okuyamadı.', 'avis_lecture_noms_bases_2' => 'Ya mevcut veritabanı yok, ya da veritabanlarının listesini almaya yarayan komut güvenlik nedeniyle kullanıma kapatılmış (bir çok barındırma şirketinde alınan bir tedbir).', 'avis_lecture_noms_bases_3' => 'İkinci durumda, büyük olasılıkla kullanıcı isminizle aynı isimde bir veritabanı var :', - 'avis_non_acces_message' => 'Bu iletiye erişiminiz yok.', 'avis_non_acces_page' => 'Bu sayfaya erişiminiz yok.', 'avis_operation_echec' => 'İşlem başarısız.', 'avis_operation_impossible' => 'Olanaksız işlem', - 'avis_probleme_archive' => '@archive@ dosyasını okurken sorun çıktı', 'avis_suppression_base' => 'DİKKAT, verileri silme işlemi geri alınamaz', - 'avis_version_mysql' => 'Kullandığınız (@version_mysql@) SQL sürümü veritabanı tablolarının otomatik onarımına izin vermiyor.', // B 'bouton_acces_ldap' => 'LDAP’a erişim ekle >>', 'bouton_ajouter' => 'Ekle', - 'bouton_ajouter_participant' => 'BİR KATILIMCI EKLE :', - 'bouton_annonce' => 'DUYURU', 'bouton_annuler' => 'İptal', - 'bouton_checkbox_envoi_message' => 'ileti gönderme olanağı', - 'bouton_checkbox_indiquer_site' => 'bir Web sitesi belirtmek zorundasınız', - 'bouton_checkbox_signature_unique_email' => 'e-posta adresi başına sadece bir imza', - 'bouton_checkbox_signature_unique_site' => 'site başına sadece bir imza', 'bouton_demande_publication' => 'Bu makalenin yayınlanmasını iste', 'bouton_desactive_tout' => 'Hepsinin etkinliğini durdur ', 'bouton_desinstaller' => 'Sil', - 'bouton_effacer_index' => 'Endeksleri sil', 'bouton_effacer_tout' => 'HEPSİNİ sil', - 'bouton_envoi_message_02' => 'İLETİ YOLLA', 'bouton_envoyer_message' => 'İletinin son hali : yolla', 'bouton_modifier' => 'Değiştir', - 'bouton_pense_bete' => 'KiŞiSEL NOT DEFTERi', - 'bouton_radio_activer_messagerie' => 'Sitenin iç ileti sistemini aç', - 'bouton_radio_activer_messagerie_interne' => 'Sitenin iç ileti sistemini etkinleştir', - 'bouton_radio_activer_petition' => 'İmza kampanyasını aç', 'bouton_radio_afficher' => 'Göster ', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Bağlı yazarlar listesinde görün', - 'bouton_radio_desactiver_messagerie' => 'İleti sistemini kapat', 'bouton_radio_envoi_annonces_adresse' => 'Duyuruları bu adrese yolla :', 'bouton_radio_envoi_liste_nouveautes' => 'Yenilikler listesini yolla ', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Yazarlar listesinde görünme', 'bouton_radio_non_envoi_annonces_editoriales' => 'Editör duyurularını gönderme', - 'bouton_radio_pas_petition' => 'Dilekçe yok', - 'bouton_radio_petition_activee' => 'Etkinleştirilmiş dilekçe', - 'bouton_radio_supprimer_petition' => 'Dilekçeyi sil', 'bouton_redirection' => 'YÖNLENDİRME', 'bouton_relancer_installation' => 'Kurulumu tekrar başlat', 'bouton_suivant' => 'Bir sonraki ', 'bouton_tenter_recuperation' => 'Onarmayı dene', 'bouton_test_proxy' => 'Vekili dene', 'bouton_vider_cache' => 'Önbelleği boşalt', - 'bouton_voir_message' => 'Bu iletiyi onaylamadan önce görüntüle', // C - 'cache_mode_compresse' => 'Önbellek dosyaları sıkıştırılmış kipte saklanıyor. ', - 'cache_mode_non_compresse' => 'Önbellek dosyaları sıkıştırılmamış kipte saklanıyor.', 'cache_modifiable_webmestre' => 'Bu parametreler site yöneticisi tarafından değiştirilebilir.', 'calendrier_synchro' => 'iCal uyumlu bir günlük uygulama yazılımı kullanıyorsanız onu bu sitedeki bilgilerle eşzamanlaştırabilirsiniz. ', 'config_activer_champs' => 'Şu alanları aktive et', @@ -105,7 +78,6 @@ Bu ithal istemini onaylamayın. 'config_titre_base_sup' => 'Ek bir veri tabanının tanımlanması', 'config_titre_base_sup_choix' => 'Ek bir veri tabanı seçiniz', 'connexion_ldap' => 'Bağlantı :', - 'copier_en_local' => 'Yerel olarak kopyala', // D 'date_mot_heures' => 'saat ', @@ -129,7 +101,6 @@ Bu ithal istemini onaylamayın. 'entree_login' => 'Kullanıcı isminiz', 'entree_login_connexion_1' => 'Bağlantı için kullanıcı ismi', 'entree_login_connexion_2' => '(Bazen FTP’ye bağlandığınız kullanıcı isminizdir bazen boş bırakılır) ', - 'entree_login_ldap' => 'Başlangıçtaki LDAP girişi', 'entree_mot_passe' => 'Şifreniz', 'entree_mot_passe_1' => 'Bağlantı şifreniz', 'entree_mot_passe_2' => '(Bazen FTP şifrenize karşı düşer; bazen boş bırakılır)', @@ -143,6 +114,7 @@ Bu ithal istemini onaylamayın. 'entree_signature' => 'İmza', 'entree_titre_obligatoire' => 'Başlık [Zorunlu]', 'entree_url' => 'Sitenizin adresi (URL)', + 'erreur_plugin_desinstalation_echouee' => 'Eklenti kaldırma başarısız oldu. Ancak bunu devre dışı bırakabilirsiniz.', # RELIRE 'erreur_plugin_fichier_absent' => 'Dosya eksik', 'erreur_plugin_fichier_def_absent' => 'Tanımlama dosyası eksik', 'erreur_plugin_nom_fonction_interdit' => 'Yasaklanmış işlev ismi', @@ -164,35 +136,35 @@ Bu ithal istemini onaylamayın. 'ical_titre_js' => 'Javascript', 'ical_titre_mailing' => 'E-posta listesi', 'ical_titre_rss' => 'Paylaşım dosyaları', + 'icone_accueil' => 'Giriş', # RELIRE 'icone_activer_cookie' => 'Yazışma çerezini etkinleştir', 'icone_admin_plugin' => 'Plugin’lerin yönetimi', + 'icone_administration' => 'Bakım işlemleri', # RELIRE 'icone_afficher_auteurs' => 'Yazarları göster', 'icone_afficher_visiteurs' => 'Ziyaretçileri görüntüle', 'icone_arret_discussion' => 'Artık bu sohbete katılma', 'icone_calendrier' => 'Takvim', + 'icone_configuration' => 'Ayarlar', # RELIRE 'icone_creer_auteur' => 'Yeni bir yazar oluştur ve bu makaleye bağla', 'icone_creer_mot_cle' => 'Yeni bir anahtar sözcük yarat ve bu makaleye bağla', - 'icone_creer_mot_cle_rubrique' => 'Yeni bir anahtar sözcük oluştur ve bu başlığa bağla', - 'icone_creer_mot_cle_site' => 'Yeni bir anahtar sözcük oluştur ve bu siteye bağla', 'icone_creer_rubrique_2' => 'Yeni bir bölüm oluştur', - 'icone_envoyer_message' => 'Bu iletiyi gönder', 'icone_modifier_article' => 'Bu makaleyi değiştir', - 'icone_modifier_message' => 'Bu iletiyi değiştir', 'icone_modifier_rubrique' => 'Bu bölümü değiştir', + 'icone_publication' => 'Yayın', # RELIRE 'icone_relancer_signataire' => 'İmzalayanı tekrar başlat', 'icone_retour' => 'Geri dön', 'icone_retour_article' => 'Makaleye geri dön', + 'icone_suivi_publication' => 'Yayın izleme', # RELIRE 'icone_supprimer_cookie' => 'Yazışma çerezini sil', 'icone_supprimer_rubrique' => 'Bu bölümü sil', 'icone_supprimer_signature' => 'Bu imzayı sil', 'icone_valider_signature' => 'Bu imzayı onayla', 'image_administrer_rubrique' => 'Bu bölümü yönetebilirsiniz', 'info_1_article' => '1 makale', - 'info_1_site' => '1 site', 'info_activer_cookie' => 'Bir yazışma kurabiyesi çalıştırabilirsiniz, bu sizin kolayca kamu sitesinden özel siteye geçmenizi sağlar.', - 'info_admin_gere_rubriques' => 'Bu yönetici şu bölümleri yönetiyor :', - 'info_admin_gere_toutes_rubriques' => 'Bu yönetici tüm bölümleri yönetiyor.', # MODIF + 'info_admin_etre_webmestre' => 'Kendime webmaster yetkileri ver', # RELIRE + 'info_admin_statuer_webmestre' => 'Bu yönetici’ne webmaster yetkileri ver', # RELIRE 'info_administrateur' => 'Yönetici', 'info_administrateur_1' => 'Yönetici', 'info_administrateur_2' => 'sitenindir (dikkatli kullanınız)', @@ -202,16 +174,13 @@ Bu ithal istemini onaylamayın. 'info_administrer_rubrique' => 'Bu bölümü yönetebilirsiniz', 'info_adresse' => 'şu adresteki :', 'info_adresse_url' => 'Kamusal sitenin adresi (URL) ', - 'info_afficher_visites' => 'Şu adrese yapılan ziyaretlerin gösterileceği yer :', 'info_aide_en_ligne' => 'SPIP çevrimiçi yardım', 'info_ajout_image' => 'Bir makalenin eki olarak resim eklediğinizde, SPIP sizin için otomatik olarak eklenen resimlerin ikonlarını (minyatürlerini) yaratabilir. Bu da otomatik olarak bir galeri ya da bir portföy oluşturmaya yarar.', - 'info_ajout_participant' => 'Eklenen katılımcı :', 'info_ajouter_rubrique' => 'Yönetecek başka bir bölüm ekle:', 'info_annonce_nouveautes' => 'Yenilik duyurusu', - 'info_anterieur' => 'Bir önceki', 'info_article' => 'makale ', 'info_article_2' => 'makale', 'info_article_a_paraitre' => 'Yayınlanacak ileri tarihli makaleler', @@ -219,10 +188,11 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_articles_2' => 'Makaleler', 'info_articles_auteur' => 'Bu yazarın makaleleri', 'info_articles_trouves' => 'Bulunan makaleler', - 'info_articles_trouves_dans_texte' => '(metin içerisinde) bulunan makeleler ', 'info_attente_validation' => 'Onay bekleyen makaleleriniz', 'info_aujourdhui' => 'Bugün :', - 'info_auteur_message' => 'İLETİNİN YAZARI :', + 'info_auteur_gere_rubriques' => 'Bu yazar aşağıdaki bölümleri yönetir :', # RELIRE + 'info_auteur_gere_toutes_rubriques' => 'Bu yazar bütün bölümler yönetir', # RELIRE + 'info_auteur_gere_toutes_rubriques_2' => 'Bütün bölümler yönetiyorum', # RELIRE 'info_auteurs' => 'Yazarlar', 'info_auteurs_par_tri' => 'yazarlar@partri@', 'info_auteurs_trouves' => 'Bulunan yazarlar', @@ -230,6 +200,8 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_avertissement' => 'Uyarı', 'info_barre_outils' => 'alet çubuğuyla birlikte mi ?', 'info_base_installee' => 'Veritabanınızın yapısı kuruldu.', + 'info_bio' => 'Biyografi', # RELIRE + 'info_cache_desactive' => 'Önbellek, geçici olarak devre dışı bırakıldı.', # RELIRE 'info_chapeau' => 'Giriş', 'info_chapeau_2' => 'Giriş :', 'info_chemin_acces_1' => 'Seçenekler : Rehbere erişim yolu', @@ -239,8 +211,7 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_classement_1' => '@liste@’den inci', 'info_classement_2' => '@liste@’den inci', 'info_code_acces' => 'Kendi erişim şifrelerinizi unutmayınız !', - 'info_compresseur_gzip' => 'N. B. : Önce, barındırma servisinin php skriptlerini sistematik olarak sıkıştırıp sıkıştırmadığının kontrol edilmesi önerilir ; bunun için, örneğin şu hizmeti kullanabilirsiniz : @testgzip@', # MODIF - 'info_compresseur_texte' => 'Eğer sunucunuz html sayfaları otomatik olarak sıkıştırmıyorsa, yüklenen sayfa ağırlıklarını düşürmek için bu işlemi yapmaya zorlayabilirsiniz. Dikkat : bu işlem bazı sunucuları gözle görülür şekilde yavaşlatabilir.', + 'info_compatibilite_html' => 'Takıp edilmesi HTML normu', # RELIRE 'info_config_suivi' => 'Eğer bu adres bir gönderi listesi (mailing-list)’ne karşı düşüyorsa, aşağıya site katılımcılarının hangi adrese kaydolabileceklerini yazabilirsiniz. Bu adres URL (örneğin listeye Web ile kaydolma sayfası), veya özel bir konu içeren (örneğin: @adresse_suivi@?subject=subscribe) bir e-posta adresi olabilir:', 'info_config_suivi_explication' => 'Bu sitenin gönderi listesi (mailing-list)’ne abone olabilirsiniz. O takdirde yayınlanması önerilen makale ve haber ilanları e-posta yoluyla elinize geçecektir. ', 'info_confirmer_passe' => 'Yeni şifrenin teyid edilmesi :', @@ -250,12 +221,13 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_conflit_edition_votre_version' => 'Sizin sürümünüz :', 'info_connexion_base' => 'Veritabanına bağlanma denemesi', 'info_connexion_base_donnee' => 'Veri tabanınıza bağlantı', - 'info_connexion_ldap_ok' => 'LDAP bağlantısı başarılı. Diğer aşamaya geçebilirsiniz.', # MODIF + 'info_connexion_ldap_ok' => 'LDAP bağlantısı başarılı. Sonraki aşamaya geçebilirsiniz.', 'info_connexion_mysql' => 'SQL bağlantınız', 'info_connexion_ok' => 'Bağlantı başarılı. ', 'info_contact' => 'İletişim', 'info_contenu_articles' => 'Makalelerin içeriği', - 'info_creation_paragraphe' => '(Paragraf yaratmak için sadece boş bir kaç satır bırakınız.)', # MODIF + 'info_contributions' => 'Katkılar', # RELIRE + 'info_creation_paragraphe' => 'Paragraf yaratmak için sadece boş bir satır bırakınız.', 'info_creation_rubrique' => 'Makale yazmadan önce en az bir bölüm yaratmanız gerekir.', 'info_creation_tables' => 'Veritabanı tablolarının yaratılması', 'info_creer_base' => 'Yeni bir veritabanı yaratılması :', @@ -263,53 +235,45 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_date_publication_anterieure' => 'Daha önceki yayınlanma tarihi :', 'info_date_referencement' => 'BU SİTEYE ATIFTA BULUNULMA TARİHİ :', 'info_derniere_etape' => 'Tamamlandı !', - 'info_derniers_articles_publies' => 'Çevrimiçi yayınlanan son makaleleriniz', - 'info_desactiver_messagerie_personnelle' => 'Bu sitedeki kişisel mesajlaşmanızı çalıştırabilir veya durdurabilirsiniz.', 'info_descriptif' => 'Tanım :', 'info_desinstaller_plugin' => 'verileri sil ve plugin’i pasif kıl', 'info_discussion_cours' => 'Süren sohbetler', 'info_ecrire_article' => 'Makale yazmadam önce en az bir bölüm yaratmanız gerekir.', 'info_email_envoi' => 'Gönderi e-posta adresi (seçimlik)', 'info_email_envoi_txt' => 'E-postaları göndermek için kullanılacak adresi burada belirtiniz (yoksa, gönderi adresi olarak alıcı adresi kullanılacaktır) :', - 'info_email_webmestre' => 'Ağ Yöneticisinin e-posta adresi (seçimlik)', # MODIF - 'info_entrer_code_alphabet' => 'Kullanılacak alfabenin kodunu giriniz :', + 'info_email_webmestre' => 'Webmaster e-posta adresi', # RELIRE 'info_envoi_email_automatique' => 'Otomatik e-posta gönderme', 'info_envoyer_maintenant' => 'Şimdi gönder', 'info_etape_suivante' => 'Bir sonraki aşamaya geç', 'info_etape_suivante_1' => 'Bir sonraki aşamaya geçebilirsiniz', 'info_etape_suivante_2' => 'Bir sonraki aşamaya geçebilirsiniz', + 'info_exceptions_proxy' => 'Vekil sunucu istisnaları', # RELIRE 'info_exportation_base' => 'tabanın @archive@’e doğru ihracı', 'info_facilite_suivi_activite' => 'Sitenin editör etkinliğinin izlenmesini kolaylaştırmak üzere, SPIP, e-posta ile, örneğin, yayınlama taleplerinin ve makale onaylarının duyurusunu editörlerin bir gönderi listesine yollayabilir.', 'info_fichiers_authent' => ' « .htpasswd » tasdik dosyaları', 'info_forums_abo_invites' => 'Siteniz abone yöntemiyle çalışan forumlar bulunduruyor ; dolayısıyla ziyaretçiler kamu sitesine kaydolmaya davet edilirler.', - 'info_gauche_admin_effacer' => 'Bu sayfa sadece site yetkililerinin erişimine izin verir. Çeşitli teknik bakım işlevlerine erişim vermektedir. Bunlardan bazıları, Web sitesine bir FTP erişimi gerektiren özel bir tasdik sürecine yol açar.', # MODIF - 'info_gauche_admin_tech' => 'Bu sayfa sadece site yetkililerinin erişimine izin verir. Çeşitli teknik bakım işlevlerine erişim vermektedir. Bunlardan bazıları, Web sitesine bir FTP erişimi gerektiren özel bir tasdik sürecine yol açar.', # MODIF + 'info_gauche_admin_tech' => 'Bu sayfa sadece site yetkililerinin erişimine izin verir. ', 'info_gauche_admin_vider' => 'Bu sayfa sadece site yetkililerinin erişimine izin verir. Çeşitli teknik bakım işlevlerine erişim vermektedir. Bunlardan bazıları, Web sitesine bir FTP erişimi gerektiren, özel bir tasdik sürecine yol açar.', # MODIF 'info_gauche_auteurs' => 'Burada tüm site yazarlarını bulacaksınız. Statüleri simgelerinin rengi ile belirtilmiştir (yönetici = yeşil; yazı işleri = sarı).', - 'info_gauche_auteurs_exterieurs' => 'Siteye erişimi olmayan dış yazarlar, mavi bir simgeyle belirtilmiştir ; silinen yazarlar ise bir çöp kutusu ile belirtilmiştir.', # MODIF + 'info_gauche_auteurs_exterieurs' => 'Siteye erişimi olmayan dış yazarlar, mavi bir simgeyle belirtilmiştir ; silinen yazarlar ise gri bir simgeyle belirtilmiştir.', 'info_gauche_messagerie' => 'Mesajlaşma sizin yazarlar ile ileti alışverişinde bulunmanızı, hatırlatmaları saklamanızı (kişisel amaçlı) veya özel alanın erişim sayfasına duyuru koymanızı sağlar (yöneticiyseniz).', - 'info_gauche_numero_auteur' => 'YAZAR NUMARASI', 'info_gauche_statistiques_referers' => 'Bu sayfa atıflar listesini, yani sizin sitenize yönlendiren bağlar bulunduran sitelerin listesini sunar, ancak sadece dün ve bugün içindir ; bu liste her 24 saatte bir sıfırlanır.', 'info_gauche_visiteurs_enregistres' => 'Burada sitenin kamu alanına kaydolan ziyaretçileri bulacaksınız (abonelik yöntemiyle yönetilen forumlar).', 'info_generation_miniatures_images' => 'Mevcut resimlerin minyatürlerinin üretilmesi', - 'info_gerer_trad' => 'Çeviri bağlantıları yönetilsin mi ?', + 'info_gerer_trad_objets' => '@objets@ : çeviri bağlantıları yönet', # RELIRE 'info_hebergeur_desactiver_envoi_email' => 'Bazı Hizmet bilgisayarları kendi sunucularından otomatik e-posta gönderisini durduruyorlar. Bu durumda SPIP’in şu işlevleri çalışmaz :', 'info_hier' => 'Dün :', - 'info_historique_activer' => 'Gözden geçirmelerin izlenmesini başlat', - 'info_historique_affiche' => 'Bu uyarlamayı göster', - 'info_historique_comparaison' => 'Karşılaştırma', - 'info_historique_desactiver' => 'Gözden geçirmelerin izlenmesini durdur', - 'info_historique_texte' => 'Gözden geçirmeleri izleme bir makalenin içeriğine getirilen tüm değişikliklerin bir tarihçesini saklamaya yarar ve de birbirini izleyen uyarlamalar arasındaki farkları gösterir. ', 'info_identification_publique' => 'Kamu kimliğiniz ...', 'info_image_process' => 'Lütfen, uygun resme tıklayarak en iyi ikon üretim yöntemini seçiniz. ', - 'info_image_process2' => 'NOT: Hiç resim çıkmıyorsa, sitenizi yayınlayan sunucu bu tür araçlar kullanmak için konfifüre edilmemiş demektir. Eğer bu işlevleri kullanmak istiyorsanız teknik yetkiliye başvurun ve «GD» ya da «Imagick» aksesuarlarını isteyin.', # MODIF + 'info_image_process2' => 'Hiç resim çıkmıyorsa, sitenizi yayınlayan sunucu bu tür araçlar kullanmak için konfigüre edilmemiş demektir. Eğer bu işlevleri kullanmak istiyorsanız teknik yetkiliye başvurun ve «GD» ya da «Imagick» aksesuarlarını isteyin.', 'info_images_auto' => 'Otomatik olarak hesaplanan resimler', 'info_informations_personnelles' => 'Kişisel bilgiler', + 'info_inscription' => 'Kayıt tarihi', # RELIRE 'info_inscription_automatique' => 'Yeni yazarların otomatik kaydı', 'info_jeu_caractere' => 'Sitedeki yazı tipi', 'info_jours' => 'Günler', @@ -320,11 +284,10 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_liste_redacteurs_connectes' => 'Bağlanan yazarlar', 'info_login_existant' => 'Bu kullanıcı ismi zaten var.', 'info_login_trop_court' => 'Kullanıcı ismi çok kısa.', + 'info_login_trop_court_car_pluriel' => 'Kullanıcı adı en az @nb@ karakter olmalıdır.', # RELIRE 'info_logos' => 'Logolar', 'info_maximum' => 'En fazla :', 'info_meme_rubrique' => 'Aynı bölümde', - 'info_message' => 'İletiyi gönderen', - 'info_message_efface' => 'İLETİ SİLİNDİ', 'info_message_en_redaction' => 'Yazılmakta olan mesajlarınız', 'info_message_technique' => 'Teknik ileti :', 'info_messagerie_interne' => 'İç mesajlaşma', @@ -334,24 +297,26 @@ yaratabilir. Bu da otomatik olarak bir galeri sürümünü yüklediniz: veritabanınız kaybolabilir ve siteniz işlemez hale gelebilir. {{SPIP dosyalarını tekrar kurunuz.}}', + 'info_modification_enregistree' => 'Değişiklikleriniz kaydedildi', # RELIRE 'info_modifier_auteur' => 'Yazarı değiştir :', 'info_modifier_rubrique' => 'Bölümü değiştir :', 'info_modifier_titre' => 'Değiştir : @titre@', 'info_mon_site_spip' => 'Benim SPIP sitem', - 'info_mot_sans_groupe' => '(Grupsuz sözcükler...)', - 'info_moteur_recherche' => 'Entegre arama motoru', 'info_moyenne' => 'Ortalama :', - 'info_multi_articles' => 'Makalelerin dil mönüsü çalıştırılsın mı ?', 'info_multi_cet_article' => 'Bu makalenin dili :', 'info_multi_langues_choisies' => 'Lütfen aşağıda sitenizdeki yazarların kullanabileceği dilleri seçiniz. Sitenizde daha önce kullanılan (ve görüntülenen) diller iptal edilemez. ', - 'info_multi_rubriques' => 'Bölümlerde dil mönüsü çalışsın mı ?', + 'info_multi_objets' => '@objets@ : dil menüsünü etkinleştir', # RELIRE 'info_multi_secteurs' => 'Sadece kök dizinde yer alan bölümler için mi ?', + 'info_nb_articles' => '@nb@ makale', # RELIRE + 'info_nb_auteurs' => '@nb@ yazar', # RELIRE + 'info_nb_messages' => '@nb@ mesaj', # RELIRE + 'info_nb_mots_cles' => '@nb@ anahtar kelime', # RELIRE + 'info_nb_visiteurs' => '@nb@ ziyaretçi', # RELIRE 'info_nom' => 'İsim', 'info_nom_destinataire' => 'Alıcının ismi', 'info_nom_site' => 'Sitenizin ismi', 'info_nombre_articles' => '@nb_articles@ makale,', - 'info_nombre_partcipants' => 'TARTIŞMAYA KATILANLAR :', 'info_nombre_rubriques' => '@nb_rubriques@ bölüm,', 'info_nombre_sites' => '@nb_sites@ site,', 'info_non_deplacer' => 'Yerini değiştirmeyin...', @@ -361,17 +326,13 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_non_modifiable' => 'Değiştirilemez', 'info_non_suppression_mot_cle' => 'Bu anahtar sözcüğün silinmesini istemiyorum.', 'info_notes' => 'Notlar', - 'info_nouveaux_message' => 'Yeni iletiler', 'info_nouvel_article' => 'Yeni makale', 'info_nouvelle_traduction' => 'Yeni çeviri :', 'info_numero_article' => 'MAKALE N° :', - 'info_obligatoire_02' => '[Zorunlu]', # MODIF + 'info_obligatoire_02' => '(Zorunlu)', 'info_option_accepter_visiteurs' => 'Kamu sitesi ziyaretçilerinin kaydını kabul et', - 'info_option_faire_suivre' => 'Forum iletilerinin makale yazarlarına gönderilmesi', 'info_option_ne_pas_accepter_visiteurs' => 'Ziyaretçi kayıdını reddet', 'info_options_avancees' => 'GELİŞMİŞ SEÇENEKLER', - 'info_ortho_activer' => 'İmlâ kontrolünü çalıştır', - 'info_ortho_desactiver' => 'İmlâ kontrolünü durdur', 'info_ou' => 'Veya ...', 'info_page_interdite' => 'Yasaklanmış sayfa', 'info_par_nom' => 'isme göre', @@ -379,21 +340,16 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_par_statut' => 'duruma göre', 'info_par_tri' => '’(@tri@ sıralamasına göre) ’', 'info_passe_trop_court' => 'Şifre çok kısa.', + 'info_passe_trop_court_car_pluriel' => 'Şifre en az @nb@ karakter olmalıdır.', # RELIRE 'info_passes_identiques' => 'İki şifre aynı değil.', - 'info_pense_bete_ancien' => 'Eski hatırlatmalarınız', # MODIF 'info_plus_cinq_car' => '5 karakterden fazla', 'info_plus_cinq_car_2' => '(5 karakterden fazla)', 'info_plus_trois_car' => '(3 karakterden fazla)', 'info_popularite' => 'popülerlik : @popularite@ ; ziyaretler : @visites@', - 'info_popularite_4' => 'popülerlik : @popularite@ ; ziyaretler : @visites@', 'info_post_scriptum' => ' Not :', 'info_post_scriptum_2' => ' Not :', 'info_pour' => ' Için', - 'info_preview_admin' => 'Siteyi ancak yöneticiler ön izleyebilir', - 'info_preview_comite' => 'Siteyi tüm yazarlar ön izleyebilir', - 'info_preview_desactive' => 'Önizleme kipi tamamen iptal edildi', - 'info_preview_texte' => 'Siteyi sanki (en azından « önerildi » statüsüne sahip) tüm makale ve haberler yayınlanmış gibi önizlemeye almak olanaklıdır. Bu olanak sadece yöneticilere mi, tüm yazarlara mı, açık olmalı yoksa hiç kimseye açık olmamalı mı ?', - 'info_principaux_correspondants' => 'Başlıca yazışmacılarınız', + 'info_preview_texte' => 'Siteyi en azından « önerildi » statüsüne sahip olan tüm makale ve haberler yayınlanmış gibi önizlemeye almak olanaklıdır. Bu olanak sadece yöneticilere mi, tüm yazarlara mı, açık olmalı yoksa hiç kimseye açık olmamalı mı ?', # RELIRE 'info_procedez_par_etape' => 'Aşama aşama ilerleyiniz', 'info_procedure_maj_version' => 'Veritabanını yeni SPIP sürümüne uyarlamak için seviye yükseltme işlemi başlatılmalı.', @@ -406,17 +362,12 @@ yaratabilir. Bu da otomatik olarak bir galeri Eğer kabul ediyorsanız, ziyaretçiler otomatik bir form ile kaydolabilecek ve kendi makalelerini önermek üzere özel alana erişeceklerdir. -
    Kayıt aşamasında, kullanıcılara, özel siteye erişim şifresi veren bir otomatik +
    Kayıt aşamasında, kullanıcılara, özel siteye erişim şifresi veren bir otomatik e-posta gönderilir. Bazı Hizmet bilgisayarları kendi sunucularından - e-posta yollanmasını durduruyorlar : bu durumda otomatik kayıt olanaksızdır.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'SPIP’in entegre arama motorunu kullanmak istiyor musunuz ? - (onu durdurmak sistemin işleyişini hızlandırır)', - 'info_question_vignettes_referer_non' => 'Ziyaretlerin yapıldığı kaynak sitelerden alıntıları gösterme', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF + e-posta yollanmasını durduruyorlar : bu durumda otomatik kayıt olanaksızdır.
    ', # MODIF + 'info_qui_edite' => '@nom_auteur_modif@ @date_diff@ dakika önce bu içeriği üzerine çalıştı', # RELIRE 'info_racine_site' => 'Sitenin kökü', 'info_recharger_page' => 'Lütfen bu sayfayı az sonra tekrar yükleyiniz.', - 'info_recherche_auteur_a_affiner' => '"@cherche_auteur@" için çok fazla sonuç alındı ; lütfen aramayı ayrıntılayınız.', - 'info_recherche_auteur_ok' => ' "@cherche_auteur@" için birçok editör bulundu :', 'info_recherche_auteur_zero' => ' "@cherche_auteur@" için hiç bir sonuç elde edilemedi.', 'info_recommencer' => 'Lütfen baştan başlayınız.', 'info_redacteur_1' => 'Editör', @@ -424,6 +375,9 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_redacteurs' => 'Editörler', 'info_redaction_en_cours' => 'YAZIM AŞAMASINDA', 'info_redirection' => 'Yönlendirme', + 'info_redirection_activee' => 'Yönlendirme etkindir.', # RELIRE + 'info_redirection_boucle' => 'Makaleyi kendisine yönlendirmeye çalışıyorsunuz.', # RELIRE + 'info_redirection_desactivee' => 'Yönlendirme silindi.', # RELIRE 'info_refuses' => 'Reddedilen makaleleriniz', 'info_reglage_ldap' => 'Seçenekler : LDAP ithalinin ayarlanması.', 'info_renvoi_article' => 'Yönlendirme. Bu makalenin bizi şu sayfaya yönlendirir:', @@ -433,7 +387,6 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_rubriques' => 'Bölümler', 'info_rubriques_02' => 'bölüm', 'info_rubriques_trouvees' => 'Bulunan bölümler', - 'info_rubriques_trouvees_dans_texte' => 'Bulunan bölümler (metnin içinde)', 'info_sans_titre' => 'Başlıksız', 'info_selection_chemin_acces' => 'Rehbere erişim yolunu seçiniz :', 'info_signatures' => 'İmzalar', @@ -446,13 +399,11 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_sites_lies_mot' => 'Bu anahtar sözcüğe bağlı atıfta bulunulan siteler', 'info_sites_proxy' => 'Vekil kullan', 'info_sites_trouves' => 'Bulunan siteler', - 'info_sites_trouves_dans_texte' => 'Bulunan siteler (metnin içinde)', 'info_sous_titre' => 'Alt-başlık :', 'info_statut_administrateur' => 'Yönetici', 'info_statut_auteur' => 'Bu yazarın statüsü :', 'info_statut_auteur_a_confirmer' => 'Onaylanacak kayıt', 'info_statut_auteur_autre' => 'Diğer statü :', - 'info_statut_efface' => 'Silindi', 'info_statut_redacteur' => 'Yazar', 'info_statut_utilisateurs_1' => 'İthal edilen kullanıcıların varsayılan statüsü', 'info_statut_utilisateurs_2' => 'LDAP dizininde mevcut olan kişilere ilk defa bağlantı kurduklarında verilen statüyü seçiniz. Sonradan bu statüyü her bir yazar için tek tek değiştirebilirsiniz.', @@ -473,8 +424,8 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_total' => 'toplam :', 'info_tous_articles_en_redaction' => 'Yazılmakta olan tüm makaleler', 'info_tous_articles_presents' => 'Bu bölümde yayınlanan tüm makaleler', + 'info_tous_articles_refuses' => 'Reddedilen tüm makaleler', # RELIRE 'info_tous_les' => 'her bir :', - 'info_tous_redacteurs' => 'Tüm yazarlara duyuru', 'info_tout_site' => 'Tüm siteyi', 'info_tout_site2' => 'Makale bu dile çevrilmedi.', 'info_tout_site3' => 'Makale bu dile çevrildi ancak sonradan atıfta bulunulan makalede değişiklikler yapıldı. Çeviri güncellenmeli.', @@ -483,13 +434,16 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_tout_site6' => 'Dikkat : sadece orijinal makaleler görüntüleniyor. Orijinale bağlı çeviriler durumlarını belirten bir renkle belirtilmiştir :', + 'info_traductions' => 'Çevirmeler', # RELIRE 'info_travail_colaboratif' => 'Makalelerde işbirliği', 'info_un_article' => 'bir makale,', 'info_un_site' => 'bir site,', 'info_une_rubrique' => 'bir bölüm,', 'info_une_rubrique_02' => '1 bölüm', 'info_url' => 'URL :', - 'info_url_site' => 'SİTE’nin URL’si :', + 'info_url_proxy' => 'Vekil sunucu URL', # RELIRE + 'info_url_site_pas_conforme' => 'Site URL geçersiz.', # RELIRE + 'info_url_test_proxy' => 'Site URL geçersiz.', # RELIRE 'info_urlref' => 'Hipermetin bağı :', 'info_utilisation_spip' => 'SPIP artık kullanılmaya hazırdır...', 'info_visites_par_mois' => 'Ay olarak görüntüleme :', @@ -497,8 +451,9 @@ yaratabilir. Bu da otomatik olarak bir galeri 'info_visiteur_2' => 'ziyaretçisi', 'info_visiteurs' => 'Ziyaretçiler', 'info_visiteurs_02' => 'Kamu sitesi ziyaretçileri ', + 'info_webmestre_forces' => 'Webmasterler @file_options@ dosyasında tanımlanır.', # RELIRE 'install_adresse_base_hebergeur' => 'Barındırma firması tarafından atanmış veritabanının adresi', - 'install_base_ok' => '@base@ veri tabanı tanındı', + 'install_connect_ok' => 'Yeni veri tabanı @connect@ adı olara tanımlanmış.', # RELIRE 'install_echec_annonce' => 'Kurulum büyük olasılıkla başarısız olacak veya site çalışmayacak...', 'install_extension_mbstring' => 'SPIP belirtilen programla çalışamaz :', 'install_extension_php_obligatoire' => 'SPIP için php uzantısı zorunludur :', @@ -510,21 +465,21 @@ yaratabilir. Bu da otomatik olarak bir galeri 'install_select_langue' => 'Bir dil seçiniz, sonra « bir sonraki » düğmesini tıklayıp yükleme işlemini başlatınız.', 'install_select_type_db' => 'Veri tabanının tipini belirtiniz :', 'install_select_type_mysql' => 'MySQL', + 'install_select_type_pg' => 'PostgreSQL', 'install_select_type_sqlite2' => 'SQLite 2', 'install_select_type_sqlite3' => 'SQLite 3', 'install_serveur_hebergeur' => 'Servis sağlayıcı tarafından sağlanan veri tabanı sunucusu', 'install_table_prefix_hebergeur' => 'Barındırma firması tarafından atanmış tablo ön eki', 'install_tables_base' => 'Veri tabanı tabloları', - 'install_types_db_connus' => 'SPIP MySQL (en yaygın), PostgreSQL ve SQLite kullanmayı bilir.', # MODIF - 'install_types_db_connus_avertissement' => 'Dikkat : bir çok eklenti sadece MySQL ile çalışır', # MODIF + 'install_types_db_connus' => 'SPIP MySQL (en yaygın), ve SQLite kullanmayı bilir.', + 'install_types_db_connus_avertissement' => 'PostgresSQL desteği da deneysel olarak verilmiştir', # RELIRE + 'instituer_erreur_statut_a_change' => 'Durum zaten değiştirildi', # RELIRE 'intem_redacteur' => 'Yazar', 'intitule_licence' => 'Lisans', 'item_accepter_inscriptions' => 'Kayıtları kabul et', 'item_activer_messages_avertissement' => 'Uyarı iletilerini etkinleştir', 'item_administrateur_2' => 'yönetici', 'item_afficher_calendrier' => 'Takvimde görüntüle', - 'item_autoriser_documents_joints' => 'Makalelere doküman eklenmesine izin ver', - 'item_autoriser_documents_joints_rubriques' => 'Bölümlerde dokümanlara izin ver', 'item_autoriser_syndication_integrale' => 'Makaleleri paylaşım dosyalarında oldukları gibi yayınla', 'item_choix_administrateurs' => 'Yöneticiler ', 'item_choix_generation_miniature' => 'Resimlerin minyatürlerini otomatik olarak üret', @@ -532,7 +487,6 @@ yaratabilir. Bu da otomatik olarak bir galeri 'item_choix_redacteurs' => 'Yazarlar', 'item_choix_visiteurs' => 'Kamu sitesi ziyaretçileri', 'item_creer_fichiers_authent' => '.htpasswd dosyalarını yarat', - 'item_limiter_recherche' => 'Aramayı sitenizde yer alan bilgilerle sınırla', 'item_login' => 'Kullanıcı ismi', 'item_messagerie_agenda' => 'Mesajlaşmayı ve ajandayı aktive et', 'item_mots_cles_association_articles' => 'Makalelere ', @@ -542,37 +496,42 @@ yaratabilir. Bu da otomatik olarak bir galeri 'item_non_accepter_inscriptions' => 'Kayıtları reddet', 'item_non_activer_messages_avertissement' => 'Uyarı iletisi yok', 'item_non_afficher_calendrier' => 'Takvimde gösterme', - 'item_non_autoriser_documents_joints' => 'Makalelerde dokümana izin verme', - 'item_non_autoriser_documents_joints_rubriques' => 'Bölümlerde dokümanlara izin verme', 'item_non_autoriser_syndication_integrale' => 'Sadece özet yayınla', - 'item_non_compresseur' => 'Sıkıştırmayı dezaktive et', 'item_non_creer_fichiers_authent' => 'Bu dosyaların yaratma', - 'item_non_gerer_statistiques' => 'İstatistikleri yönetme', - 'item_non_limiter_recherche' => 'Aramayı atıfta bulunulan sitelere genişlet', 'item_non_messagerie_agenda' => 'Mesajlaşmayı ve ajandayı dezaktive et', 'item_non_publier_articles' => 'Makaleleri yayın tarihinden önce yayınlama', - 'item_non_utiliser_moteur_recherche' => 'Motoru kullanma', 'item_nouvel_auteur' => 'Yeni yazar ', 'item_nouvelle_rubrique' => 'Yeni bölüm ', 'item_oui' => 'Evet ', 'item_publier_articles' => 'Makaleleri yayın tarihlerine bakmadan yayınla', 'item_reponse_article' => 'Makaleye yanıt ', - 'item_utiliser_moteur_recherche' => 'Arama motorunu kullan', + 'item_version_html_max_html5' => 'HTML5 etkinleştir', # RELIRE 'item_visiteur' => 'Ziyaretçi ', // J 'jour_non_connu_nc' => 'Bilinmeyen ', // L - 'lien_ajout_destinataire' => 'Bu alıcıyı ekle', + 'label_bando_outils' => 'Araç çubuğu', # RELIRE + 'label_bando_outils_afficher' => 'Araçları göster', # RELIRE + 'label_bando_outils_masquer' => 'Araçları gizle', # RELIRE + 'label_nom_fichier_connect' => 'Bu sunucunun adını girin', # RELIRE + 'label_slogan_site' => ' +Site sloganı', # RELIRE + 'label_texte_et_icones_navigation' => 'Navigasyon menüsü', # RELIRE 'lien_ajouter_auteur' => 'Bu yazarın ekle', - 'lien_ajouter_participant' => 'Bir katılımcıyı ekle', + 'lien_ajouter_une_rubrique' => 'Bu bölüm ekle', # RELIRE 'lien_email' => 'e-posta ', 'lien_nom_site' => 'SİTENİN ADI : ', + 'lien_rapide_contenu' => 'İçeriğe git', # RELIRE + 'lien_rapide_navigation' => 'Navigasyona git', # RELIRE + 'lien_rapide_recherche' => 'Navigasyon’a git', # RELIRE 'lien_retirer_auteur' => 'Yazarı sil', - 'lien_retrait_particpant' => 'bu katılımcıyı sil', + 'lien_retirer_rubrique' => 'Bölümü çıkar', # RELIRE + 'lien_retirer_tous_auteurs' => 'Tüm yazarlar çıkar', # RELIRE + 'lien_retirer_toutes_rubriques' => 'Tüm bölümler çıkar', # RELIRE 'lien_site' => 'site', - 'lien_supprimer_rubrique' => 'bu bölümü sil', + 'lien_tout_decocher' => 'Tüm işarelteri kaldır', # RELIRE 'lien_tout_deplier' => 'Tümünün katlarını aç', 'lien_tout_replier' => 'Tümünü geri katla', 'lien_tout_supprimer' => 'Hepsini sil', @@ -580,12 +539,12 @@ yaratabilir. Bu da otomatik olarak bir galeri 'lien_trier_nombre_articles' => 'Makale sayısına göre sırala', 'lien_trier_statut' => 'Duruma göre sırala', 'lien_voir_en_ligne' => 'ÇEVRİMİÇİ GÖSTER :', - 'logo_article' => 'MAKALE LOGOSU', # MODIF - 'logo_auteur' => 'YAZAR LOGOSU', # MODIF - 'logo_rubrique' => 'BÖLÜM LOGOSU', # MODIF - 'logo_site' => 'SİTE LOGOSU', # MODIF - 'logo_standard_rubrique' => 'STANDART BÖLÜM LOGOSU', # MODIF - 'logo_survol' => 'ÜZERİNDEN GEÇME LOGOSU', # MODIF + 'logo_article' => 'Makale logosu', + 'logo_auteur' => 'Yazar logosu', + 'logo_rubrique' => 'Bölüm logosu', + 'logo_site' => 'Siste logosu', + 'logo_standard_rubrique' => 'Standart bölüm logosu', + 'logo_survol' => 'Üzerinden geçme logosu', # RELIRE // M 'menu_aide_installation_choix_base' => 'Veritabanınızın seçimi', @@ -596,11 +555,14 @@ yaratabilir. Bu da otomatik olarak bir galeri 'module_texte_traduction' => '« @module@ » dil dosyasının bulunduğu yer :', 'mois_non_connu' => 'Bilinmiyor ', + // N + 'nouvelle_version_spip' => 'Güncelleştirme SPIP @version@ mevcuttur', # RELIRE + 'nouvelle_version_spip_majeure' => 'SPIP yeni bir sürümü mecvuttur @version@ ', # RELIRE + // O 'onglet_contenu' => 'İçerik', 'onglet_declarer_une_autre_base' => 'Başka bir veri tabanı bildirin', 'onglet_discuter' => 'Tartışma', - 'onglet_documents' => 'Belgeler', 'onglet_interactivite' => 'Etkileşimlilik', 'onglet_proprietes' => 'Özellikler', 'onglet_repartition_actuelle' => 'Şu anda ', @@ -609,7 +571,9 @@ yaratabilir. Bu da otomatik olarak bir galeri // P 'page_pas_proxy' => 'Bu sayfa velilden (proxy) geçmemeli', 'pas_de_proxy_pour' => 'Gerekirse, bu vekilin uygulanmayacağı makineleri veya alanları belirtiniz (örneğin : @ornek@)', + 'phpinfo' => 'PHP ayarları', # RELIRE 'plugin_charge_paquet' => '@name@ paketinin yüklenmesi', + 'plugin_charger' => 'İndir', # RELIRE 'plugin_erreur_charger' => 'hata : @zip@ yüklenmesi olanaksız', 'plugin_erreur_droit1' => '@dest@ dizini yazmak için izinli değil.', 'plugin_erreur_droit2' => 'Bu dizindeki hakları kontrol ediniz (ve hata durumunda oluşturunuz) veya dosyaları FTP ile kurunuz.', @@ -620,6 +584,7 @@ yaratabilir. Bu da otomatik olarak bir galeri 'plugin_etat_test' => 'test aşamasında', 'plugin_impossible_activer' => '@plugin@ plugin’ini aktive etmek olanaksız', 'plugin_info_automatique1' => 'Eklentilerin otomatik yüklenmesini istiyorsanız, lütfen :', + 'plugin_info_automatique1_lib' => 'Bu kütüphanenin otomatik olarak yüklenmesini izin vermek istiyorsanız, lütfen:', # RELIRE 'plugin_info_automatique2' => '@rep@ isimli bir dizin oluşturun ;', 'plugin_info_automatique3' => 'sunucunun bu dizine yazma hakkı olduğunu kontrol ediniz', 'plugin_info_automatique_creer' => 'sitenin kök dizinini oluşturma', @@ -631,14 +596,22 @@ yaratabilir. Bu da otomatik olarak bir galeri 'plugin_info_automatique_liste_update' => 'Listeleri güncelle', 'plugin_info_automatique_ou' => 'veya...', 'plugin_info_automatique_select' => 'Aşağıdan bir eklenti seçiniz : SPIP o eklentiyi indirecek ve @rep@ dizinine kuracaktır ; eğer bu eklenti zaten kurulu ise güncellenecektir.', + 'plugin_info_credit' => 'Kredi', # RELIRE + 'plugin_info_erreur_xml' => 'Bu plugin beyanı yanlış', # RELIRE + 'plugin_info_install_ok' => 'Kurulum başarılı', # RELIRE + 'plugin_info_necessite' => 'İstiyor :', # RELIRE 'plugin_info_telecharger' => '@url@ adresinden indirmeye ve @rep@ dizinine yüklemeye', 'plugin_librairies_installees' => 'Kurulu kütüphaneler', 'plugin_necessite_lib' => 'Bu eklenti @lib@ kütüphanesini gerektirir', 'plugin_necessite_plugin' => '@plugin@ plugin’inin en az @version@ sürümünü gerektirir.', + 'plugin_necessite_plugin_sans_version' => 'Plugin @plugin@ isteniyor', # RELIRE 'plugin_necessite_spip' => 'SPIP’in en az @version@ sürümünü gerektirir.', 'plugin_source' => 'kaynak: ', 'plugin_titre_automatique' => 'Otomatik kurulum', 'plugin_titre_automatique_ajouter' => 'Eklenti ekleyiniz', + 'plugin_titre_installation' => 'Plugin @plugin@ yüklemesi', # RELIRE + 'plugin_titre_modifier' => 'Pluginlerim', # RELIRE + 'plugin_utilise_plugin' => 'plugin @plugin@ @version@ kullanıyor', # RELIRE 'plugin_zip_active' => 'Aktive etmek için devam ediniz', 'plugin_zip_adresse' => 'aşağıda indirilecek eklentiye ait zip dosyasının adresini veya bir çok eklentinin adres listesini belirtiniz.', 'plugin_zip_adresse_champ' => 'Eklentinin veya listenin adresi ', @@ -647,27 +620,44 @@ yaratabilir. Bu da otomatik olarak bir galeri 'plugin_zip_installe_rep_finie' => '@zip@ dosyası açıldı ve @rep@ dizinine yüklendi.', 'plugin_zip_installer' => 'Şimdi yükleyebilirsiniz.', 'plugin_zip_telecharge' => '@zip@ dosyası bilgisayara indirildi', + 'plugins_actif_aucun' => 'Hiç etkin plugini yok', # RELIRE + 'plugins_actif_un' => 'Bir tane plugin etkin.', # RELIRE 'plugins_actifs' => '@count@ eklenti etkinleştirildi.', 'plugins_compte' => '@count@ eklenti', + 'plugins_disponible_un' => 'Bİr tane plugin mecvuttur.', # RELIRE 'plugins_disponibles' => '@count@ eklenti kullanılabilir durumda.', 'plugins_erreur' => 'Eklentilerde hata var : @plugins@', 'plugins_liste' => 'Plugin listesi', + 'plugins_liste_dist' => 'Kilitli pluginler', # RELIRE + 'plugins_recents' => 'Son pluginleri.', # RELIRE + 'plugins_tous_liste' => 'Hepsi', # RELIRE 'plugins_vue_hierarchie' => 'Hiyerarşi', 'plugins_vue_liste' => 'Liste', 'protocole_ldap' => 'Protokol sürümü :', + // Q + 'queue_info_purger' => 'Bekleyen tüm işleri silip periyodik işler listesi sıfırlayabilirsiniz', # RELIRE + 'queue_next_job_in_nb_sec' => 'Sonraki iş @nb@ s ’den sonra', # RELIRE + 'queue_no_job_in_queue' => 'Bekleyen iş yok', # RELIRE + 'queue_one_job_in_queue' => '1 bekleyen iş var', # RELIRE + 'queue_purger_queue' => 'İş listesini sıfırla', # RELIRE + 'queue_titre' => 'İş listesi', # RELIRE + // R 'repertoire_plugins' => 'Dizin :', + 'required' => '[Zorunlu]', # MODIF // S 'sans_heure' => 'saatsiz', - 'statut_admin_restreint' => '(sınırlı yönetici)', # MODIF + 'statut_admin_restreint' => 'sınırlı yönetici', + 'statut_webmestre' => 'webmaster', # RELIRE // T 'taille_cache_image' => 'SPIP tarafından otomatik olarak hesaplanan resimler (doküman ikonları, grafik olarak gösterilen başlıklar, TeX biçimindeki matematik işlevler...) @dir@ dizininde toplam @taille@ yer tutuyor.', 'taille_cache_infinie' => 'Bu site önbellek (CACHE) dizininin boyutu için herhangi bir sınır öngörmüyor.', 'taille_cache_maxi' => 'SPIP, bu sitenin önbellek (CACHE) dizininin boyutunu yaklaşık @octets@ lik veriyle sınırlamaya çalışıyor.', - 'taille_cache_octets' => 'Önbelleğin ölçüsü şu anda @octets@ dir.', # MODIF + 'taille_cache_moins_de' => 'Önbellek boyutu @octets@ altında.', # RELIRE + 'taille_cache_octets' => 'Önbelleğin ölçüsü şu anda @octets@ dir.', 'taille_cache_vide' => 'Ön bellek boş.', 'taille_repertoire_cache' => 'Ön bellek dizininin boyutu', 'text_article_propose_publication' => 'Yayın için önerilen makale. ', @@ -685,16 +675,11 @@ yaratabilir. Bu da otomatik olarak bir galeri 'texte_article_virtuel_reference' => 'Sanal makale : SPIP sitenizde atıfta bulunulan ancak başka bir URL’ye yönlendirilmiş bir makaledir. Yeniden yönlendirmeyi iptâl etmek için yukarıdaki URL’yi siliniz.', 'texte_aucun_resultat_auteur' => '"@cherche_auteur@" için hiçbir sonuç yok.', 'texte_auteur_messagerie' => 'Bu site size bağlı olan yazarların listesini sürekli olarak belirtebilir, bu da sizin doğrudan ileti alışverişinde bulunmanızı sağlar. Bu listede görünmemeyi seçebilirsiniz (bu durumda diğer kullanıcılara « görünmez »sinizdir).', - 'texte_auteur_messagerie_1' => 'Bu site ileti alışverişini ve site katılımcıları arasında özel sohbet forumları oluşturmayı sağlar. Bunlara katılmamayı tercih edebilirsiniz. ', 'texte_auteurs' => 'YAZARLAR', 'texte_choix_base_1' => 'Veritabanınızı seçiniz :', 'texte_choix_base_2' => 'SQL sunucusu bir çok veritabanı içeriyor.', 'texte_choix_base_3' => 'Aşağıda servis sağlayıcınız tarafından size ayrılmış olanı seçiniz.', 'texte_choix_table_prefix' => 'Tablo ön-ekleri :', - 'texte_commande_vider_tables_indexation' => 'Bu komutu SPIP’teki arama motoru tarafından - kullanılan endeksleme çizelgelerini boşaltmak için kullanınız. - Diskteki alanı boşa harcamamış olursunuz.', - 'texte_compresse_ou_non' => '(bu, sıkıştırılmış ya da sıkıştırılmamış olabilir)', 'texte_compte_element' => '@count@ eleman', 'texte_compte_elements' => '@count@ eleman', 'texte_conflit_edition_correction' => 'Lütfen aşağıdaki 2 metin arasındaki farkları kontrol edin ; değişikliklerinizi kopyalayıp devam da edebilirsiniz.', @@ -707,41 +692,36 @@ yaratabilir. Bu da otomatik olarak bir galeri otomatik tamiri deneyebilirsiniz. ', 'texte_creer_rubrique' => 'Makale yazabilmek için önce bir bölüm yaratmanız gerekmektedir.', 'texte_date_creation_article' => 'MAKALENİN YAYIN TARİHİ :', + 'texte_date_creation_objet' => 'Oluşturulma tarihi :', # on ajoute le ":" RELIRE 'texte_date_publication_anterieure' => 'Bir önceki düzeltme tarihi :', 'texte_date_publication_anterieure_nonaffichee' => 'Yayın tarihini görüntüleme', 'texte_date_publication_article' => 'ÇEVRİMİÇİ YAYINLANMA TARİHİ:', - 'texte_descriptif_petition' => 'Dilekçenin tanımı', + 'texte_date_publication_objet' => 'Online yayınlama tarihi :', # RELIRE 'texte_descriptif_rapide' => 'Hızlı tanım', 'texte_effacer_base' => 'SPIP veritabanını sil', - 'texte_effacer_donnees_indexation' => 'Endeksleme verilerini sil', 'texte_effacer_statistiques' => 'İstatistikleri sil', - 'texte_en_cours_validation' => 'Aşağıdaki makale ve kısa haberler yayın için önerilmiştir. ', # MODIF + 'texte_en_cours_validation' => 'Aşağıdaki makale ve kısa haberler yayın için önerilmiştir. ', 'texte_enrichir_mise_a_jour' => 'Metninizin sayfa düzenini « tipografi kısaltmaları » kullanarak zenginleştirebilirsiniz.', - 'texte_fichier_authent' => 'SPIP’in, .htpasswd ve .htpasswd-admin özel dosyalarını @dossier@ dizininde yaratması gerekir mi ? Bu dosyalar sizin, sitenizin başka yerlerine sadece yazar ve yöneticilerin erişmesini sınırlamanızı sağlayabilir (örneğin, dışsal istatistik programı). Bunun bir yararı olmadığını düşünüyorsanız bu seçeneği varsayılan değerinde bırakabilirsiniz (dosya yaratma işlemi yapılmaz).', # MODIF + 'texte_fichier_authent' => 'SPIP’in, .htpasswd ve .htpasswd-admin özel dosyalarını @dossier@ dizininde yaratması gerekir mi? +

    Bu dosyalar sizin, sitenizin başka yerlerine sadece yazar ve yöneticilerin erişmesini sınırlamanızı sağlayabilir (örneğin, dışsal istatistik programı).

    +

    Bunun bir yararı olmadığını düşünüyorsanız bu seçeneği varsayılan değerinde bırakabilirsiniz (dosya yaratma işlemi yapılmaz).

    ', 'texte_informations_personnelles_1' => 'Sistem şimdi size kişiselleştirilmiş bir erişim (hesap) yaratacaktır.', - 'texte_informations_personnelles_2' => '(Not : eğer yeniden kurulum sözkonusu ise ve erişiminiz halen çalışıyorsa, yapabileceğiniz :', # MODIF + 'texte_informations_personnelles_2' => '(Not : eğer yeniden kurulum sözkonusu ise ve erişiminiz halen çalışıyorsa, yapabileceğiniz :', 'texte_introductif_article' => '(Makalenin giriş metni.)', 'texte_jeu_caractere' => 'Sitenizde evrensel alfabe (utf-8) kullanmanız önerilir: bu alfabe metinlerin tüm dillerde görüntülenmesine olanak tanır ve modern web tarayıcılarında hiç sorun yaratmaz.', - 'texte_jeu_caractere_2' => 'Dikkat : bu ayar veritabanına önceden kaydedilmiş metinleri dönüştürmez.', 'texte_jeu_caractere_3' => 'Sitenizin şu anda kurulu olan karakter seti :', 'texte_jeu_caractere_4' => 'Eğer bu verilerinize uymazsa (örneğin bir veritabanı kurtarma işleminden sonra) veya siteyi yeni kuruyorsanız ve başka bir karakter setiyle devam etmek istiyorsanız bunu belirtmeyi unutmayınız :', - 'texte_jeu_caractere_conversion' => 'Not : tüm siteyi (makaleler, kısa haberler, forumlar vs.) utf-8’e dönüştürme sayfasına giderek bir kerede utf-8’ye dönüştürmek isteyebilirsiniz.', - 'texte_lien_hypertexte' => '(Eğer iletiniz Web’de yayınlanan bir makaleye, ya da daha fazla bilgi veren bir sayfaya atıfta bulunuyorsa, lütfen buraya sayfanın başlığını ve URL adresini belirtiniz.)', 'texte_login_ldap_1' => '(Ya anonim bir erişim için boş bırakınız ya da tüm yolu belirtiniz, örneğin; « uid=dupont, ou=users, dc=mon-domaine, dc=com ».)', 'texte_login_precaution' => 'Dikkat ! Bu şu anki bağlantı için kullanılan kullanıcı ismidir. Bu formu dikkatli kullanınız...', - 'texte_message_edit' => 'Dikkat : bu ileti sitenin tüm yöneticileri tarafından değiştirilebilir ve tüm yazarlar tarafından görülebilir. Duyuruları sadece site yaşamının önemli olaylarını ortaya koymak için kullanınız.', 'texte_messagerie_agenda' => 'Mesajlaşma, site yazarlarına özel alanda kendi aralarında direkt olarak haberleşme olnağı tanır. Mesajlaşma bir ajandaya bağlıdır.', 'texte_mise_a_niveau_base_1' => 'SPIP dosyalarını güncelleştirmiş bulunuyorsunuz. Şimdi sitenin veritabanını aynı seviyeye yükseltmeniz gerekir.', 'texte_modifier_article' => 'Makaleyi değiştir :', - 'texte_moteur_recherche_active' => 'Arama motoru etkin. Bu komutu, eğer (örneğin bir yedeklemeyi geri yükledikten sonra) tekrar hızlı bir endeksleme yapmak istiyorsanız kullanın. Normal bir şekilde (SPIP arayüzünden) değiştirilen dokümanların otomatik olarak tekrar endekslendiğine dikkatinizi çekeriz : dolayısıyla bu komut ancak istisnai olarak faydalıdır.', - 'texte_moteur_recherche_non_active' => 'Arama motoru aktif değil.', - 'texte_multilinguisme' => 'Eğer karmaşık gezintili, bir kaç dilde makaleler yönetmek istiyorsanız makalelere ve/veya bölümlere sitenizin düzenine göre bir dil seçeneği mönüsü ekleyebilirsiniz.', # MODIF - 'texte_multilinguisme_trad' => 'Ayrıca, bir makalenin çeşitli çevirileri arasında bir bağlantı yönetme sistemi de çalıştırabilirsiniz. ', # MODIF + 'texte_multilinguisme' => 'Eğer karmaşık gezintili, bir kaç dilde makaleler yönetmek istiyorsanız makalelere ve/veya bölümlere sitenizin düzenine göre bir dil seçeneği mönüsü ekleyebilirsiniz.', + 'texte_multilinguisme_trad' => 'Ayrıca, bir makalenin çeşitli çevirileri arasında bir bağlantı yönetme sistemi de çalıştırabilirsiniz. ', 'texte_non_compresse' => 'Sıkıştırılmamış (sunucunuz bu özniteliği taşıyamıyor). ', - 'texte_nouveau_message' => 'Yeni ileti', 'texte_nouvelle_version_spip_1' => 'SPIP’in yeni bir sürümünü yüklediniz.', - 'texte_nouvelle_version_spip_2' => 'Bu yeni uyarlama alışılana göre daha eksiksiz bir güncelleştirme gerektirir. Eğer siz bu sitenin Ağ Yöneticisi iseniz lütfen @connect@ dosyasını ecrire dizininden siliniz ve veritabanına bağlantı parametrelerinizi güncelleştirmek amacıyla yüklemeyi tekrar yapınız.

    (Not : bağlantı parametrelerinizi unuttuysanız, silmeden önce @connect@ dosyasına bir göz atınız...)

    ', # MODIF + 'texte_nouvelle_version_spip_2' => 'Bu yeni uyarlama alışılana göre daha eksiksiz bir güncelleştirme gerektirir. Eğer siz bu sitenin webmaster iseniz lütfen @connect@ dosyasını ecrire dizininden siliniz ve veritabanına bağlantı parametrelerinizi güncelleştirmek amacıyla yüklemeyi tekrar yapınız.

    (Not : bağlantı parametrelerinizi unuttuysanız, silmeden önce @connect@ dosyasına bir göz atınız...)

    ', 'texte_operation_echec' => 'Bir önceki sayfaya geri dönüp başka bir veri tabanı seçiniz ya da yeni bir tane yaratınız. Ana bilgisayarınız tarafından verilen bilgilerden emin olunuz. ', 'texte_plus_trois_car' => '3 karakterden fazla', 'texte_plusieurs_articles' => '"@cherche_auteur@" için bir kaç yazar bulundu : ', @@ -752,11 +732,10 @@ yaratabilir. Bu da otomatik olarak bir galeri 'texte_publication_articles_post_dates' => 'Yayınlanması ileri bir tarihe saptanan makaleler karşısında SPIP ne gibi bir tavır almalı ?', 'texte_rappel_selection_champs' => '[Bu alanı doğru olarak seçmeyi unutmayınız.] ', 'texte_recalcul_page' => 'Sadece bir tek sayfayı yenilemek istiyorsanız, daha ziyade kamu sitesinden geçiniz ve orada « yenileme » düğmesini seçiniz.', - 'texte_recapitiule_liste_documents' => 'Bu sayfa bölümlere yerleştirdiğiniz dokümanların listesini özetler. Her bir dokümanın bilgilerini değiştirmek için o bölümün sayfasına giden bağı izleyiniz. ', 'texte_recuperer_base' => 'Veritabanını tamir et', 'texte_reference_mais_redirige' => 'SPIP sitenizde atıfta bulunulan ve başka bir URL’ye yönlendirilmiş makale.', 'texte_requetes_echouent' => 'Bazı SQL talepleri sistematik olarak ve görünürde bir neden olmaksızın başarısız oluyorsa bunun nedeni veri tabanının kendisi olabilir.

    -SQL’in, kazayla zarar gören tablolarını onarma yeteneği vardır. Burada bu onarımı deneyebilirsiniz ; başarısızlık durumunda, görüntünün bir kopyasını saklayınız, belki orada aksayan şeylerin ipuçlarını bulabilirsiniz... Eğer sorun devam ederse servis sağlayıcınızla temasa geçiniz.

    ', # MODIF +SQL’in, kazayla zarar gören tablolarını onarma yeteneği vardır. Burada bu onarımı deneyebilirsiniz ; başarısızlık durumunda, görüntünün bir kopyasını saklayınız, belki orada aksayan şeylerin ipuçlarını bulabilirsiniz... Eğer sorun devam ederse servis sağlayıcınızla temasa geçiniz.

    ', 'texte_selection_langue_principale' => 'Aşağıda sitenin « başlıca dil » ini seçebilirsiniz. Bu seçim, sizin makalelerinizi seçilen dilde yazmanızı gerektirmez, buna karşılık :
    • kamu sitesindeki tarihlerin varsayılan formatını ;
    • SPIP’in metinler için kullanacağı tipografi motorunun cinsini ;
    • @@ -770,7 +749,6 @@ SQL’in, kazayla zarar gören tablolarını onarma yeteneği vardır. Burada bu 'texte_suppression_fichiers' => 'Bu komutu SPIP önbelleğinde bulunan tüm dosyaları yok etmek için kullanınız. Örneğin grafiklerde ya da site yapısında önemli değişiklikler yaptıysanız tüm sayfaları yeniden oluşturulmaya zorlamanızı sağlar.', 'texte_sur_titre' => 'Üst başlık ', 'texte_table_ok' => ': bu tablo tamam.', - 'texte_tables_indexation_vides' => 'Motorun endeksleme tabloları boş.', 'texte_tentative_recuperation' => 'Tamir denemesi', 'texte_tenter_reparation' => 'Veritabanının tamirini dene', 'texte_test_proxy' => 'Bu vekili denemek için buraya test etmek istediğiniz bir Web sitesinin adresini belirtiniz. ', @@ -778,85 +756,59 @@ SQL’in, kazayla zarar gören tablolarını onarma yeteneği vardır. Burada bu 'texte_titre_obligatoire' => 'Başlık [Zorunlu]', 'texte_travail_article' => '@nom_auteur_modif@ bu makale üzerinde @date_diff@ dakika önce çalıştı', 'texte_travail_collaboratif' => 'Bir kaç yazarın aynı makalede çalışıyor olması sıkça rastlansa da, sistem eşzamanlı değişiklikleri önlemek amacıyla yeni « açılmış » olan makaleleri görüntüleyebilir. Bu seçenek geçici uyarı iletilerinin görüntülenmesine engel olmak üzere başlangıçta engellenmiştir.', - 'texte_trop_resultats_auteurs' => '"@cherche_auteur@" için fazla sonuç çıktı ; lütfen aramayı detaylandırın', - 'texte_unpack' => 'Son sürümün indirilmesi', - 'texte_utilisation_moteur_syndiques' => 'SPIP’le bütünleşik arama motorunu kullandığınızda paylaşımlı site ve makalelerde aramalarınızı iki farklı şekilde yapabilirsiniz.
      En basit yöntem sadece makalelerin başlık ve tanımlarında arama yapmaktır. Diğer bir yöntem ise çok daha güçlü olup, SPIP’in atıfta bulunulan sitelerin metinlerinde de arama yapmasını sağlar. Eğer bir siteye atıfta bulunursanız, SPIP aramayı o sitenin metninde yapacaktır. ', - 'texte_utilisation_moteur_syndiques_2' => 'Bu yöntem SPIP’i atıfta bulunulan sitelere düzenli olarak ziyarette bulunmaya zorlar, bu da sizin kendi sitenizde hafif bir yavaşlamaya neden olabilir. ', 'texte_vide' => 'Boş ', 'texte_vider_cache' => 'Önbelleği boşalt', - 'titre_admin_effacer' => 'Teknik bakım ', 'titre_admin_tech' => 'Teknik bakım ', 'titre_admin_vider' => 'Teknik bakım ', + 'titre_ajouter_un_auteur' => 'Yazar ekle', # RELIRE + 'titre_ajouter_un_mot' => 'Anahtar kelime ekle', # RELIRE 'titre_cadre_afficher_article' => 'Makaleleri göster', 'titre_cadre_afficher_traductions' => 'Aşağıdaki dillerin çevirilerinin durumunu göster :', 'titre_cadre_ajouter_auteur' => 'BİR YAZAR EKLE :', 'titre_cadre_interieur_rubrique' => 'Bölüm içinde', 'titre_cadre_numero_auteur' => 'YAZAR NO', + 'titre_cadre_numero_objet' => '@objet@ NUMARA :', # RELIRE 'titre_cadre_signature_obligatoire' => 'İmza [Zorunlu]
      ', 'titre_config_contenu_notifications' => 'Notlama', 'titre_config_contenu_prive' => 'Özel alanda', 'titre_config_contenu_public' => 'Kamusal sitede', 'titre_config_fonctions' => 'Site konfigürasyonu', + 'titre_config_langage' => 'Dil ayarları', # RELIRE 'titre_configuration' => 'Site konfigürasyonu', + 'titre_configurer_preferences' => 'Tercihlerinizi ayarları', # RELIRE 'titre_conflit_edition' => 'Düzenleme esnasında çakışma', 'titre_connexion_ldap' => 'Seçenekler : LDAP bağlantılarınız', 'titre_groupe_mots' => 'SÖZCÜK GRUBU:', - 'titre_langue_article' => 'MAKALENİN DİLİ ', # MODIF - 'titre_langue_rubrique' => 'BÖLÜMÜN DİLİ', # MODIF + 'titre_identite_site' => 'Site kimliği', # RELIRE + 'titre_langue_article' => 'Makalenin dili', + 'titre_langue_rubrique' => 'Bölümün dili', 'titre_langue_trad_article' => 'MAKALENİN DİLİ VE ÇEVİRİLERİ ', 'titre_les_articles' => 'MAKALELER', 'titre_messagerie_agenda' => 'Mesajlaşma ve Ajanda', 'titre_naviguer_dans_le_site' => 'Sitede gezin...', 'titre_nouvelle_rubrique' => 'Yeni bölüm', 'titre_numero_rubrique' => 'BÖLÜM NO :', - 'titre_page_admin_effacer' => 'Teknik bakım : veritabanını sil', 'titre_page_articles_edit' => 'Değiştir : @titre@', 'titre_page_articles_page' => 'Makaleler ', 'titre_page_articles_tous' => 'Tüm site', - 'titre_page_auteurs' => 'Ziyaretçiler', 'titre_page_calendrier' => 'Takvim @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Site konfigürasyonu', - 'titre_page_config_fonctions' => 'Site konfigürasyonu', - 'titre_page_configuration' => 'Site konfigürasyonu', - 'titre_page_controle_petition' => 'Dilekçelerin izlenmesi', 'titre_page_delete_all' => 'tamamen ve geri alınamaz biçimde silinmesi', - 'titre_page_documents_liste' => 'Bölümlere ait dokümanlar', - 'titre_page_index' => 'Özel alanınız', - 'titre_page_message_edit' => 'Bir ileti oluştur', - 'titre_page_messagerie' => 'İletileriniz', 'titre_page_recherche' => 'Arama sonuçları @recherche@ ', 'titre_page_statistiques_referers' => 'İstatistikler (giriş bağları)', - 'titre_page_statistiques_signatures_jour' => 'Günlük imza sayısı', - 'titre_page_statistiques_signatures_mois' => 'Aylık imza sayısı', 'titre_page_upgrade' => 'SPIP seviyesinin yükseltilmesi ', 'titre_publication_articles_post_dates' => 'İleri tarihli makalelerin yayınlanması ', - 'titre_referencer_site' => 'Atıfta bulunulacak site : ', - 'titre_rendez_vous' => 'RANDEVU :', 'titre_reparation' => 'Onarım', 'titre_suivi_petition' => 'Dilekçelerin izlenmesi', 'tls_ldap' => 'Taşıma Katmanı Güvenliği (TLS) :', - 'trad_article_inexistant' => 'Bu numaralı bir makale yok.', 'trad_article_traduction' => 'Bu makalenin tüm sürümleri :', - 'trad_deja_traduit' => 'Bu makalenin istenen numaraya bağlanması olanaksız.', 'trad_delier' => 'Bu makaleyi artık şu çevirilere bağlama', # MODIF 'trad_lier' => 'Bu makale şu nolu makalenin çevirisidir :', 'trad_new' => 'Bu makalenin yeni bir çevirisini yaz', # MODIF // U - 'upload_info_mode_document' => 'Bu resmi portföye ekle', - 'upload_info_mode_image' => 'Bu resmi portföyden çıkar', - 'utf8_convert_attendez' => 'Bir süre bekleyip sayfayı yeniden yükleyiniz.', - 'utf8_convert_avertissement' => 'Veritabanınızın içeriğini (makaleler, kısa haberler vs.) @orig@ karakter setinden @charset@ karakter setine dönüştürmektesiniz .', - 'utf8_convert_backup' => 'Önceden sitenizin tam bir yedeğini almayı unutmayınız. Ayrıca iskeletlerinizin ve dil dosyalarınızın @charset@ karakter setiyle uyumlu olup olmadığını doğrulamalısınız. ', - 'utf8_convert_erreur_deja' => 'Siteniz zaten @charset@ karakter setinde, dönüştürmeniz gereksiz...', 'utf8_convert_erreur_orig' => 'Hata : @charset@ karakter seti desteklenmiyor.', - 'utf8_convert_termine' => 'Tamamlandı !', - 'utf8_convert_timeout' => 'Önemli : sunucuda zaman aşımı oluşursa sayfayı « tamamlandı » yazana kadar tekrar yükleyiniz.', - 'utf8_convert_verifier' => 'Şimdi önbelleği boşaltmalı ve sitenin kamusal sayfalarında herşeyin yolunda olduğunu doğrulamalısınız. Büyük bir soun varsa, @rep@ dizininde verilerinizin bir yedeği (SQL formatında) alınmıştır.', - 'utf8_convertir_votre_site' => 'Sitenizi utf-8’e dönüştürmek', // V 'version' => 'Sürüm :' ); - -?> diff --git a/www/ecrire/lang/ecrire_uk.php b/www/ecrire/lang/ecrire_uk.php new file mode 100644 index 00000000..0f8ec13e --- /dev/null +++ b/www/ecrire/lang/ecrire_uk.php @@ -0,0 +1,863 @@ + 'Активувати плагін', + 'affichage' => 'Показати', + 'aide_non_disponible' => 'Цей розділ он-лайн допомоги ще не перекладено українською.', + 'annuler_recherche' => 'Відмінити пошук', + 'auteur' => 'Автор:', + 'avis_acces_interdit' => 'Доступ заборонено.', + 'avis_article_modifie' => 'Увага: @nom_auteur_modif@ вносив зміни в цю статтю @date_diff@ хвилин тому', + 'avis_aucun_resultat' => 'Нічого не знайдено', + 'avis_base_inaccessible' => 'Неможливо підключитися до бази @base@.', + 'avis_chemin_invalide_1' => 'Шлях, що ви вибрали', + 'avis_chemin_invalide_2' => 'схоже, що не вірно. Будь ласка, поверніться на попередню сторінку і перевірте надану інформацію.', + 'avis_connexion_echec_1' => 'Не вдалося підключится до SQL серверу.', + 'avis_connexion_echec_2' => 'Будь ласка, поверніться на попередню сторінку і перевірте внесену інформацію.', + 'avis_connexion_echec_3' => 'N.B. На багатьох серверах ви повинні зробити запит для включення вашого доступу до бази даних SQL перед тим, як використовувати її. Якщо ви не можете встановити з’єднання, упевніться, що цей запит дійсно було зроблено.', + 'avis_connexion_erreur_creer_base' => 'База даних не може бути створена.', + 'avis_connexion_erreur_nom_base' => 'Назва бази може складатися тільки з латинських букв, цифр і знаків нижнього підкреслювання.', + 'avis_connexion_ldap_echec_1' => 'Не вдалося подключитися до LDAP.', + 'avis_connexion_ldap_echec_2' => 'Поверніться на попередню сторінку і перевірте внесену вами інформацію.', + 'avis_connexion_ldap_echec_3' => 'Крім того, не використовуйте підтримку LDAP для імпорту користувачів.', + 'avis_deplacement_rubrique' => 'Увага! В цій рубриці знаходиться @contient_breves@ новин@scb@: якщо ви переміщуєте її, будь ласка, поставьте відмітку для підтвердження операції.', + 'avis_erreur_connexion_mysql' => 'Помилка з’єднання з SQL ', + 'avis_espace_interdit' => 'Заборонений простір
      SPIP вже встановлено.
      ', + 'avis_lecture_noms_bases_1' => 'Програма установки не змогла прочитати імена встановлених баз даних .', + 'avis_lecture_noms_bases_2' => 'Жодна з баз даних не є доступною або функцію, що дозволяє вносити до списку бази даних, було вимкнено з метою безпеки (забагато послуг хостингу).', + 'avis_lecture_noms_bases_3' => 'В другому випадку можливо, що база даних, названа за вашим логіном, может бути використана:', + 'avis_non_acces_page' => 'У вас нема доступу до цієї сторінки.', + 'avis_operation_echec' => 'Не вдалося виконати операцію.', + 'avis_operation_impossible' => 'Неможливо виконати операцію', + 'avis_suppression_base' => 'Увага: видалення даних неможливо відмінити', + + // B + 'bouton_acces_ldap' => 'Додати доступ до LDAP', + 'bouton_ajouter' => 'Додати', + 'bouton_annuler' => 'Відмінити', + 'bouton_cache_activer' => 'Увімкнути кешування', + 'bouton_cache_desactiver' => 'Виключити кешування', + 'bouton_demande_publication' => 'Запитати публікацію цієї статті', + 'bouton_desactive_tout' => 'Усе відключити', + 'bouton_desinstaller' => 'Видалити', + 'bouton_effacer_tout' => 'Видалити УСЕ', + 'bouton_envoyer_message' => 'Заключне повідомлення: Надіслати', + 'bouton_fermer' => 'Закрити', + 'bouton_mettre_a_jour_base' => 'Оновити базу даних', + 'bouton_modifier' => 'Змінити', + 'bouton_radio_afficher' => 'Показати', + 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Показувати у переліку авторів, що знаходяться на сайті', + 'bouton_radio_envoi_annonces_adresse' => 'Відправити оголошення на адресу:', + 'bouton_radio_envoi_liste_nouveautes' => 'Відправити список останніх новин', + 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Не показувати у переліку авторів, що знаходяться на сайті', + 'bouton_radio_non_envoi_annonces_editoriales' => 'Не відправляти ніяких редакційних оголошень', + 'bouton_redirection' => 'ПЕРЕНАПРАВЛЕННЯ', + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Відновити початкові значення', + 'bouton_relancer_installation' => 'Перезапустити установку', + 'bouton_reset_password' => 'Створити новий пароль і відправити по e-mail', + 'bouton_suivant' => 'Наступний', + 'bouton_tenter_recuperation' => 'Спробуємо відремонтувати базу', + 'bouton_test_proxy' => 'Перевірити проксі', + 'bouton_vider_cache' => 'Очистити кеш', + + // C + 'cache_modifiable_webmestre' => 'Цей параметр може бути змінений тільки вебмастером.', + 'calendrier_synchro' => 'Якщо ви використовуєте календар, сумісний з iCal, ви можете узгодити його з даними сайту.', + 'config_activer_champs' => 'Увімкнути наступні поля', + 'config_choix_base_sup' => 'Виберіть базу на цьому сервері', + 'config_erreur_base_sup' => 'SPIP не може відобразити список доступних баз даних', + 'config_info_base_sup' => 'Якщо вам потрібний запит інших баз даних, використовуючи SPIP, незалежно від того, чи знаходяться вони на тому ж SQL сервері або де-інде, використовуйте форму, що показана нижче для їх опису. Якщо ви залишите деякі поля пустими, то пов’язані деталі будуть використовуватися з основною базой даних.', + 'config_info_base_sup_disponibles' => 'Додаткові бази даних, до яких можна відправити запити:', + 'config_info_enregistree' => 'Нові налаштування збережено', + 'config_info_logos' => 'Кожному елементу сайту можна встановити свій логотип і також логотип для відображення «при наведенні миші»', + 'config_info_logos_utiliser' => 'Використовувати логотипи', + 'config_info_logos_utiliser_non' => 'Не використовувати логотипи', + 'config_info_logos_utiliser_survol' => 'Дозволити додавати логотип для відображення «при наведенні миші»', + 'config_info_logos_utiliser_survol_non' => 'Заборонити додавати логотип для відображення «при наведенні миші»', + 'config_info_redirection' => 'Віртуальна стаття - це можливість перенаправляти відвідувачів по довільному URL, як на іншу сторінку цього сайта, так і на будь-яке посилання в інтернеті.', + 'config_redirection' => 'Віртуальні статті (редирект)', + 'config_titre_base_sup' => 'Опис додаткової бази даних', + 'config_titre_base_sup_choix' => 'Виберіть додаткову базу даних', + 'connexion_ldap' => 'З’єднання:', + 'creer_et_associer_un_auteur' => 'Створити і додати автора', + + // D + 'date_mot_heures' => ':', + + // E + 'ecran_securite' => ' + сервіс безпеки @version@', + 'email' => 'email', + 'email_2' => 'email:', + 'en_savoir_plus' => 'Детальніше', + 'entree_adresse_annuaire' => 'Довідник адрес', + 'entree_adresse_email' => 'Ваша адреса електронної пошти', + 'entree_adresse_email_2' => 'E-mail', + 'entree_base_donnee_1' => 'Адреса серверу бази даних', + 'entree_base_donnee_2' => '(Зазвичай це «localhost», але ви можете уточнити в налаштуваннях хостінгу)', + 'entree_biographie' => 'Коротка біографія на декілька слів.', + 'entree_chemin_acces' => 'Ввести шлях доступу:', + 'entree_cle_pgp' => 'Ваш ключ PGP', + 'entree_cle_pgp_2' => 'Ключ PGP ', + 'entree_contenu_rubrique' => '(Короткий зміст рубрики.)', + 'entree_identifiants_connexion' => 'Логін і пароль', + 'entree_identifiants_connexion_2' => 'Інформація про підключення', + 'entree_informations_connexion_ldap' => 'Будь ласка, вкажіть параметри підключення до LDAP. Ви можете отримати цю інформацію у вашого системного адміністратора.', + 'entree_infos_perso' => 'Хто ви?', + 'entree_infos_perso_2' => 'Хто автор?', + 'entree_interieur_rubrique' => 'В розділі:', + 'entree_liens_sites' => 'Гіперпосилання (посилання, сайт для відвідування...)', + 'entree_login' => 'Ваш логін', + 'entree_login_connexion_1' => 'Логін з’єднання', + 'entree_login_connexion_2' => '(Іноді відповідає вашому логіну FTP доступу, а іноді залишається порожнім)', + 'entree_mot_passe' => 'Ваш пароль', + 'entree_mot_passe_1' => 'Пароль', + 'entree_mot_passe_2' => '(Іноді відповідає вашому паролю FTP доступу, а іноді залишається порожнім)', + 'entree_nom_fichier' => 'Будь ласка, виберіть файл з резервною копією @texte_compresse@:', + 'entree_nom_pseudo' => 'Ваше ім’я або псевдонім', + 'entree_nom_pseudo_1' => '(Ваше ім’я або псевдонім)', + 'entree_nom_pseudo_2' => 'Ім’я або псевдонім', + 'entree_nom_site' => 'Назва вашого сайту', + 'entree_nom_site_2' => 'Назва сайту', + 'entree_nouveau_passe' => 'Новий пароль', + 'entree_passe_ldap' => 'Пароль', + 'entree_port_annuaire' => 'Номер порту каталогу', + 'entree_signature' => 'Підпис', + 'entree_titre_obligatoire' => 'Заголовок [обов’язково]
      ', + 'entree_url' => 'Адреса (URL) вашого сайту', + 'entree_url_2' => 'URL', + 'erreur_connect_deja_existant' => 'Сервер з такою назвою вже існує', + 'erreur_email_deja_existant' => 'Ця адреса електронної пошти вже зареєстрована.', + 'erreur_nom_connect_incorrect' => 'Неприпустиме ім’я серверу', + 'erreur_plugin_attribut_balise_manquant' => 'Атрибут @attribut@ відсутній в тезі @balise@.', + 'erreur_plugin_desinstalation_echouee' => 'Не вдалося видалити плагін, але ви можете відключити його.', + 'erreur_plugin_fichier_absent' => 'Відсутній файл', + 'erreur_plugin_fichier_def_absent' => 'Файл визначення відсутній', + 'erreur_plugin_nom_fonction_interdit' => 'Ім´я функції заборонено', + 'erreur_plugin_nom_manquant' => 'Відсутня назва плагіну ', + 'erreur_plugin_prefix_manquant' => 'Простір імен плагіна невизначений', + 'erreur_plugin_tag_plugin_absent' => '<plugin> відсутнє в файлі опису', + 'erreur_plugin_version_manquant' => 'Відсутня версія плагіну', + + // H + 'htaccess_a_simuler' => 'Увага: в налаштуваннях веб-серверу відключено використання @htaccess@ файлів. Для забезпечення достатнього рівня безпеки внесіть зміни до налаштувань серверу самостійно або зверніться до технічної підтримки хостінгу. Ви також можете задати константи @constantes@ (в файлі mes_options.php) так, щоб ці Файли знаходились поза папкою @document_root@.', + 'htaccess_inoperant' => 'htaccess не робочий', + + // I + 'ical_info1' => 'Ця сторінка надає вам декілька методів для підтримки зв’язку з діяльністю цього сайту', + 'ical_info2' => 'Ви можете дізнатися більше в документації про SPIP.', + 'ical_info_calendrier' => 'В вашему розпорядженні є два календарі. Перший - це карта сайту, що відображає всі опубліковані статті. Другий містить редакторські оголошення, а також ваші останні особисті повідомлення: його збережено для вас завдяки ключу, який ви можете змінити будь-коли, підтвердивши свій пароль.', + 'ical_methode_http' => 'Завантаження', + 'ical_methode_webcal' => 'Синхронізація (webcal://)', + 'ical_texte_js' => 'Ви можете вставити цей javascript код на будь-який сайт, щоб відображати останні опубліковані статті і матеріали вашого сайту.', + 'ical_texte_prive' => 'Цей календар є строго особистим, він інформує вас про роботу зі статтями на цьому сайті (завдання, персональні налаштування, відправлені статті і новини дня...).', + 'ical_texte_public' => 'Цей календар дозволяє вам слідкувати за основною діяльністю цього сайту (публікація статтей і новин).', + 'ical_texte_rss' => 'Ви можете експортувати останні поновлення на вашому сайті в форматі XML/RSS (Rich Site Summary). Також, завдяки цьому формату даних, ви можете імпортувати інформацію з інших сайтів в ІнтерНемаі.', + 'ical_titre_js' => 'Javascript', + 'ical_titre_mailing' => 'Список адресатів', + 'ical_titre_rss' => 'Отримання статей і новин з інших сайтов по RSS', + 'icone_accueil' => 'Головна', + 'icone_activer_cookie' => 'Помістити cookie', + 'icone_activite' => 'Зворотній зв’язок', + 'icone_admin_plugin' => 'Плагіни', + 'icone_administration' => 'Обслуговування', + 'icone_afficher_auteurs' => 'Показати авторів', + 'icone_afficher_visiteurs' => 'Показати відвідувачів', + 'icone_arret_discussion' => 'Припинити участь в цьому обговоренні', + 'icone_calendrier' => 'Календар', + 'icone_configuration' => 'Конфігурація', + 'icone_creer_auteur' => 'Створити автора і додати до статті', + 'icone_creer_mot_cle' => 'Створити нове ключове слово і пов’язати його із цією статтею.', + 'icone_creer_rubrique_2' => 'Створити нову рубрику', + 'icone_developpement' => 'У розвитку', + 'icone_edition' => 'Редагувати', + 'icone_ma_langue' => 'Моя мова', + 'icone_mes_infos' => 'Моя інформація', + 'icone_mes_preferences' => 'Мої уподобання', + 'icone_modifier_article' => 'Змінити статтю', + 'icone_modifier_rubrique' => 'Змінити розділ', + 'icone_publication' => 'Публікації', + 'icone_relancer_signataire' => 'Відновити підпис', + 'icone_retour' => 'Назад', + 'icone_retour_article' => 'Назад до статті', + 'icone_squelette' => 'Шаблони', + 'icone_suivi_publication' => 'Моніторинг публікації', + 'icone_supprimer_cookie' => 'Видалити cookie', + 'icone_supprimer_rubrique' => 'Видалити розділ', + 'icone_supprimer_signature' => 'Видалити підпис', + 'icone_valider_signature' => 'Затвердити підпис', + 'image_administrer_rubrique' => 'Ви можете керувати цим розділом', + 'info_1_article' => '1 стаття', + 'info_1_auteur' => '1 автор', + 'info_1_message' => '1 повідомлення', + 'info_1_mot_cle' => '1 ключове слово', + 'info_1_rubrique' => '1 розділ', + 'info_1_visiteur' => '1 відвідувач', + 'info_activer_cookie' => 'Ви можете увімкнути адміністративні cookie, що дозволить вам легко перемикатися між основною і адміністративною частиною сайту.', + 'info_activer_menu_developpement' => 'Показати меню розвитку', + 'info_admin_etre_webmestre' => 'Надати мені права вебмастера', + 'info_admin_je_suis_webmestre' => 'Я вебмастер', + 'info_admin_statuer_webmestre' => 'Надати цьому адміністратору права веб-майстра', + 'info_admin_webmestre' => 'Адміністратор є вебмастером', + 'info_administrateur' => 'Адміністратор', + 'info_administrateur_1' => 'Адміністратор', + 'info_administrateur_2' => 'на цьому сайті (використовувати з пересторогою)', + 'info_administrateur_site_01' => 'Якщо ви адміністратор сайта, будь ласка', + 'info_administrateur_site_02' => 'натисніть тут', + 'info_administrateurs' => 'Адміністратори', + 'info_administrer_rubrique' => 'Ви можете управляти цією рубрикою', + 'info_adresse' => 'за адресою:', + 'info_adresse_desinscription' => 'Адреса щоб відписатися:', + 'info_adresse_url' => 'Адреса (URL) загального сайту', + 'info_afficher_par_nb' => 'Показати', + 'info_aide_en_ligne' => 'SPIP Oнлайн Допомога', + 'info_ajout_image' => 'Коли ви додаєте зображення як прикріплені документи до статті, SPIP може автоматично створити зменшену копію цих зображень. Це дозволить, наприклад, автоматично створювати галерею чи портфоліо.', + 'info_ajouter_rubrique' => 'Додати іншу рубрику для управління:', + 'info_annonce_nouveautes' => 'Анонси останніх новин', + 'info_article' => 'стаття', + 'info_article_2' => 'статті', + 'info_article_a_paraitre' => 'статті, які будуть опубліковані в майбутньому', + 'info_articles_02' => 'статті', + 'info_articles_2' => 'Статті', + 'info_articles_auteur' => 'Статті автора', + 'info_articles_miens' => 'Мої статті', + 'info_articles_tous' => 'Усі статті', + 'info_articles_trouves' => 'Знайдені статті', + 'info_attente_validation' => 'Ваші статті на затвердженні', + 'info_aucun_article' => 'Нема статтей', + 'info_aucun_auteur' => 'Нема авторів', + 'info_aucun_message' => 'Нема повідомлень', + 'info_aucun_rubrique' => 'Нема розділів', + 'info_aujourdhui' => 'сьогодні:', + 'info_auteur_gere_rubriques' => 'Автор керує наступними розділами:', + 'info_auteur_gere_toutes_rubriques' => 'Автор керує всіма рубриками', + 'info_auteur_gere_toutes_rubriques_2' => 'Я керую всіма розділами', + 'info_auteurs' => 'Автори', + 'info_auteurs_par_tri' => 'Автори@partri@', + 'info_auteurs_trouves' => 'Знайдені автори', + 'info_authentification_externe' => 'Зовнішня аутентифікація', + 'info_avertissement' => 'Попередження', + 'info_barre_outils' => 'з панеллю інструментів?', + 'info_base_installee' => 'Структуру вашої бази даних встановлено.', + 'info_bio' => 'Біографія', + 'info_cache_desactive' => 'Кешування вимкнено.', + 'info_chapeau' => 'Вступ', + 'info_chapeau_2' => 'Вступ:', + 'info_chemin_acces_1' => 'Опції: Шлях доступу до каталогу', + 'info_chemin_acces_2' => 'Тепер ви повинні налаштувати шлях доступу до інформації в довіднику. Ця інформація необхідна для перегляду профілів користувачів, записаних в довіднику.', + 'info_chemin_acces_annuaire' => 'Опції: Шлях доступу к каталогу', + 'info_choix_base' => 'Третій етап:', + 'info_classement_1' => ' з @liste@', + 'info_classement_2' => ' з @liste@', + 'info_code_acces' => 'Не забудьте ваші власні коди доступу!', + 'info_compatibilite_html' => 'Стандарт HTML, якому слідувати', + 'info_config_suivi' => 'Якщо ця адреса відповідає списку адресатів, ви можете вказати нижче адресу, за якою учасники сайту можуть зареєструватися. Цією адресою може бути адреса сайту (наприклад сторінка списка реєстрації через мережу) або адреса електронної пошти з певною темою (наприклад: @adresse_suivi@?subject=subscribe):', + 'info_config_suivi_explication' => 'Ви можете підписатися на почтову розсилку цього сайту і отримувати на email інформацію про статті та новини, відправлені для публікації.', + 'info_confirmer_passe' => 'Підтвердіть новий пароль:', + 'info_conflit_edition_avis_non_sauvegarde' => 'Увага! Наступні поля були змінені. Ваші внесені зміни в цих полях не були враховані.', + 'info_conflit_edition_differences' => 'Відмінності:', + 'info_conflit_edition_version_enregistree' => 'Зареєстрована версія:', + 'info_conflit_edition_votre_version' => 'Ваша версія:', + 'info_connexion_base' => 'Спроба з’єднання з базою даних', + 'info_connexion_base_donnee' => 'Підключення до бази даних', + 'info_connexion_ldap_ok' => 'З’єднання з LDAP встановлено.

      Ви можете перейти до наступного кроку.

      ', + 'info_connexion_mysql' => 'Ваше з’єднання з SQL', + 'info_connexion_ok' => 'З’єднання встановлено.', + 'info_contact' => 'Контакт', + 'info_contenu_articles' => 'Зміст статтей', + 'info_contributions' => 'Внески', + 'info_creation_paragraphe' => '(Розділяйте абзаци порожніми строками)', + 'info_creation_rubrique' => 'Перед тим, як писати статті, необхідно створити хоча б одну рубрику. ', + 'info_creation_tables' => 'Створення таблиць бази даних', + 'info_creer_base' => 'Створити нову базу даних:', + 'info_dans_rubrique' => 'У рубриці :', + 'info_date_publication_anterieure' => 'Дата попередньої редакції :', + 'info_date_referencement' => 'ДАТА ПОСИЛАННЯ НА ЦЕЙ САЙТ:', + 'info_derniere_etape' => 'Готово!', + 'info_descriptif' => 'Опис:', + 'info_desinstaller_plugin' => 'видаляє дані і відключає плагін', + 'info_discussion_cours' => 'Поточні обговорення', + 'info_ecrire_article' => 'Перед тим, як писати статті, необхідно створити хоча б одну рубрику.', + 'info_email_envoi' => ' Адреса електронної пошти (необов’язково)', + 'info_email_envoi_txt' => 'Введіть e-mail адресу відправника, що використовується для відправлення електронних листів (зазвичай адреса користувача використовується як адреса відправника):', + 'info_email_webmestre' => 'E-mail веб-мастера', + 'info_envoi_email_automatique' => 'Автоматична відправка повідомлення електронної пошти ', + 'info_envoyer_maintenant' => 'Відправити зараз', + 'info_etape_suivante' => 'Перейти до наступного етапу', + 'info_etape_suivante_1' => 'Ви можете перейти до наступного етапу.', + 'info_etape_suivante_2' => 'Ви можете перейти до наступного етапу.', + 'info_exceptions_proxy' => 'Винятки для проксі', + 'info_exportation_base' => 'експортувати базу даних в @archive@', + 'info_facilite_suivi_activite' => 'Для полегшення моніторингу діяльності редакційних SPIP сайт може відправити його поштою, наприклад, на список розсилки редакторів, бізнес-додатки публікації та перевірки статей.', + 'info_fichiers_authent' => 'Файл аутентифікації «.htpasswd»', + 'info_forums_abo_invites' => 'Ваш сайт має форуми за підпискою; відвідувачі можуть зареєструватися на них на основному сайті.', + 'info_gauche_admin_tech' => 'Сторінка тільки для вебмастера сайта.

      Ви можете виконувати завдання щодо експлуатації сайту. Частина з них може потребувати FTP-доступу до сайту.

      ', + 'info_gauche_admin_vider' => 'Тільки вебмастери мають доступ до цієї сторінки.

      Тут є можливість виконувати різні завдання по обслуговуванню сайта. Для виконання окремих завдань необхідний доступ до сайту по FTP.

      ', + 'info_gauche_auteurs' => 'Перелік всіх авторів сайту. Статус автора позначений кольором (адміністратор = зелений; автор = жовтий).', + 'info_gauche_auteurs_exterieurs' => 'Користувачі, що зареєструвалися, позначені синім кольором, а видалені користувачі - іконкою кошика.', + 'info_gauche_messagerie' => 'Передача повідомлень дозволяє обмінюватися повідомленнями між редакторами, зберигати нотатки (для вашого особистого використання) або показувати оголошення на основній сторінці адміністративної частини (якщо ви - адміністратор).', + 'info_gauche_statistiques_referers' => 'Ця сторінка показує список посилань, тобто ті сайти, які мають посилання на ваш сайт, тільки для вчора і сьогодні: фактично цей список поновлюється кожні 24 години.', + 'info_gauche_visiteurs_enregistres' => 'Ви знайдете тут зареєстрованних відвідувачів основноі частини сайту (форуми за підпискою).', + 'info_generation_miniatures_images' => 'Створення зменшених зображень', + 'info_gerer_trad_objets' => '@objets@ : управління перекладами', + 'info_hebergeur_desactiver_envoi_email' => 'Деякі хости відключають автоматизовану відправку листів на своих серверах. В цьому випадку наступні можливості SPIP не можуть бути здійснені.', + 'info_hier' => 'вчора:', + 'info_identification_publique' => 'Ваша публична ідентифікація...', + 'info_image_process' => 'Виберіть кращий метод для створення зменшеної копії, натиснувши на відповідну картинку.', + 'info_image_process2' => 'Якщо картинки не відображаються, це значить, що ваш хостінг не підтримує розширения по роботі з зображеннями. Уточніть в технічній підтримці хостінгу про можливості використовувати бібліотеки «GD» або «Imagemagic».', + 'info_images_auto' => 'Кеш файлів зображень', + 'info_informations_personnelles' => 'Налаштування профиля', + 'info_inscription' => 'Реєстрація', + 'info_inscription_automatique' => 'Автоматична реєстрація нових авторів', + 'info_jeu_caractere' => 'Кодування сайту', + 'info_jours' => 'дні', + 'info_laisser_champs_vides' => 'залиште ці поля порожніми)', + 'info_langues' => 'Мови сайту', + 'info_ldap_ok' => 'Встанослення справжності LDAP.', + 'info_lien_hypertexte' => 'Гиперпосилання:', + 'info_liste_nouveautes_envoyee' => 'Інформацію про останні оновлення відправлено', + 'info_liste_redacteurs_connectes' => 'Автори онлайн', + 'info_login_existant' => 'Цей логін вже використовується.', + 'info_login_trop_court' => 'Занадто короткий логін.', + 'info_login_trop_court_car_pluriel' => 'Логін повинен складатися мінімум з @nb@ символів.', + 'info_logos' => 'Логотипи', + 'info_maximum' => 'максимум:', + 'info_meme_rubrique' => 'В розділі:', + 'info_message_en_redaction' => 'Ваше повідомлення в роботі', + 'info_message_technique' => 'Технічене повідомлення:', + 'info_messagerie_interne' => 'Внутрішня передача повідомлень', + 'info_mise_a_niveau_base' => 'оновлення бази даних SQL', + 'info_mise_a_niveau_base_2' => '{{Попередження!}} Ви встановили версію SPIP файлів {старіше} ніж та, яку було попередньо встановлено на цьому сайті: ви ризикуєте втратити базу даних, і тоді ваш сайт не зможе працювати належним чином.
      {{Перевстановіть SPIP файли.}}', + 'info_modification_enregistree' => 'Ваши зміни збережено', + 'info_modifier_auteur' => 'Змінити автора:', + 'info_modifier_rubrique' => 'Змінити розділ:', + 'info_modifier_titre' => 'Змінити: @titre@', + 'info_mon_site_spip' => 'Мій сайт ', + 'info_moyenne' => 'в средньому:', + 'info_multi_cet_article' => 'Мова статті:', + 'info_multi_langues_choisies' => 'Виберіть мови для редагування матеріалів на сайті. Мови, які вже використовує ваш сайт (наверху списку) не можуть бути вимкнені.', + 'info_multi_objets' => '@objets@ : увімкнути мовне меню', + 'info_multi_secteurs' => '... тільки для розділів в корені сайту?', + 'info_nb_articles' => '@nb@ статтей', + 'info_nb_auteurs' => '@nb@ авторів', + 'info_nb_messages' => '@nb@ повідомлень', + 'info_nb_mots_cles' => '@nb@ ключових слів', + 'info_nb_rubriques' => '@nb@ розділ(ів)', + 'info_nb_visiteurs' => '@nb@ відвідувачів', + 'info_nom' => 'Ім’я', + 'info_nom_destinataire' => 'Ім’я користувача', + 'info_nom_pas_conforme' => 'HTML теги не допускаються', + 'info_nom_site' => 'Назва вашого сайта', + 'info_nombre_articles' => '@nb_articles@ статті,', + 'info_nombre_rubriques' => '@nb_rubriques@ рубрики,', + 'info_nombre_sites' => '@nb_sites@ сайти,', + 'info_non_deplacer' => 'Не переміщувати...', + 'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP может регулярно відправляти новини, оголошення сайта + (недавно опубліковані статті і новини).', + 'info_non_envoi_liste_nouveautes' => 'Не відправляти список останніх новин', + 'info_non_modifiable' => 'не может бути змінено', + 'info_non_suppression_mot_cle' => 'Я НЕ хочу видаляти це ключове слово.', + 'info_notes' => 'Примітки', + 'info_nouvel_article' => 'Новая стаття', + 'info_nouvelle_traduction' => 'Новий переклад:', + 'info_numero_article' => 'НОМЕР СТАТТІ:', + 'info_obligatoire_02' => '(обов’язково)', + 'info_option_accepter_visiteurs' => 'Увімкнути реєстрацію відвідувачів на сайті', + 'info_option_ne_pas_accepter_visiteurs' => 'Відключити реєстрацію відвідувачів на сайті', + 'info_options_avancees' => 'ДОДАТКОВІ НАЛАШТУВАННЯ', + 'info_ou' => 'або...', + 'info_page_interdite' => 'Заборонена сторінка', + 'info_par_nom' => 'за назвою', + 'info_par_nombre_article' => 'за номерами статтей', + 'info_par_statut' => 'за статусом', + 'info_par_tri' => '’(за @tri@)’', + 'info_passe_trop_court' => 'Пароль надто короткий.', + 'info_passe_trop_court_car_pluriel' => 'Пароль повинен мати мінімум @nb@ символів.', + 'info_passes_identiques' => 'Два паролі не співпадають.', + 'info_plus_cinq_car' => 'понад 5 символів', + 'info_plus_cinq_car_2' => '(Понад 5 символів)', + 'info_plus_trois_car' => '(Понад 3 символи)', + 'info_popularite' => 'популярність: @popularite@; відвідання: @visites@', + 'info_post_scriptum' => 'Постскриптум', + 'info_post_scriptum_2' => 'Постскриптум: ', + 'info_pour' => 'для', + 'info_preview_texte' => 'Налаштування попереднього перегляду. Ви можете подивитися, як виглядають на сайті матеріали зі статусом «представлено». Увімкнути цю можливість для усіх авторів, тільки для адміністраторов або відключити взагалі?', + 'info_procedez_par_etape' => 'Будь ласка, виконуйте покроково', + 'info_procedure_maj_version' => 'необхідно запустити процедуру оновлення поточної бази даних для новоі версії SPIP.', + 'info_proxy_ok' => 'Проксі сервер працює.', + 'info_ps' => 'P.S.', + 'info_publier' => 'опублікувати', + 'info_publies' => 'Ваші статті, опубліковані на сайті:', + 'info_question_accepter_visiteurs' => 'Якщо шаблони вашого сайту дозволяють відвідувачам реєструватися, не входячи в адміністративну частину, будь ласка, включіть наступну опцію:', + 'info_question_inscription_nouveaux_redacteurs' => 'Ви хочете дозволити реєстрацію нових користувачів на сайті? Якщо так, то відвідувачі зможуть реєструватися самостійно, використовуючи стандартну форму. Також у них буде доступ в адміністративну частину сайту і можливість створювати нові матеріали.
      Пароль для доступу буде відправлено користувачу email’ом автоматично. Якщо ваш хостінг не підтримує відправку листів, то ця опція буде марна.
      ', + 'info_qui_edite' => '@nom_auteur_modif@ працював над цим матеріалом @date_diff@ хвилин назад', + 'info_racine_site' => 'Корінь сайту', + 'info_recharger_page' => 'Будь ласка перезавантажте цю сторінку через декілька хвилин.', + 'info_recherche_auteur_zero' => 'Нічого не знайдено на запит «@cherche_auteur@».', + 'info_recommencer' => 'Будь ласка, спопробуйте ще раз.', + 'info_redacteur_1' => 'Автор', + 'info_redacteur_2' => 'маючи доступ до адміністративної частини (рекомендував), ', + 'info_redacteurs' => 'Автори', + 'info_redaction_en_cours' => 'РЕДАГУЄТЬСЯ', + 'info_redirection' => 'Перенаправлення', + 'info_redirection_activee' => 'Перенаправлення включено.', + 'info_redirection_boucle' => 'Ви намагаєтеся перенаправити статтю саму на себе.', + 'info_redirection_desactivee' => 'Перенаправлення видалено.', + 'info_refuses' => 'Ваші відхилені статті', + 'info_reglage_ldap' => 'Опції налаштування імпорту LDAP', + 'info_renvoi_article' => 'Відвідувач будет перенаправлений за наступним посиланням', + 'info_reserve_admin' => 'Тільки адміністратори можуть змінити цю адресу.', + 'info_restreindre_rubrique' => 'Надати права управління розділами:', + 'info_resultat_recherche' => 'Результати пошуку:', + 'info_rubriques' => 'Розділи', + 'info_rubriques_02' => 'розділи', + 'info_rubriques_trouvees' => 'Знайдені розділи', + 'info_sans_titre' => 'Без назви', + 'info_selection_chemin_acces' => 'Виберіть шлях доступу до каталогу:', + 'info_signatures' => 'підписи', + 'info_site' => 'Сайт', + 'info_site_2' => 'Сайт:', + 'info_site_min' => 'сайт', + 'info_site_reference_2' => 'Сайт, що реферується (Referenced site)', + 'info_site_web' => 'САЙТ:', + 'info_sites' => 'сайти', + 'info_sites_lies_mot' => 'Сайти з цим ключовим словом', + 'info_sites_proxy' => 'Використовувати проксі', + 'info_sites_trouves' => 'знайдені сайти', + 'info_sous_titre' => 'Підзаголовок:', + 'info_statut_administrateur' => 'Адміністратор', + 'info_statut_auteur' => 'Статус автора:', + 'info_statut_auteur_2' => 'Я', + 'info_statut_auteur_a_confirmer' => 'Реєстрація буде підтверджена', + 'info_statut_auteur_autre' => 'Інший статус:', + 'info_statut_redacteur' => 'Автор', + 'info_statut_utilisateurs_1' => 'Усталений (default) статус для імпортованих користувачів', + 'info_statut_utilisateurs_2' => 'Виберіть статус, що буде використовуватися для людей з каталогу LDAP, коли вони підключаться вперше. Пізніше ви зможете змінити це значення для кожного автора індивідуально.', + 'info_suivi_activite' => 'Відстежування роботи редакторів', + 'info_surtitre' => 'Топ-заголовок:', + 'info_syndication_integrale_1' => 'Ваш сайт пропонує об’єднані файли (див. «@titre@»).', + 'info_syndication_integrale_2' => 'Відправити статтю повністю чи тільки перші абзаци?', + 'info_table_prefix' => 'Ви можете задати свій префікс для імен таблиць бази даних (завдяки цьому ви можете встановити декілька сайтів на одну базу даних). Для написання префіксу використовуйте лише маленькі латинські букви і цифри.', + 'info_taille_maximale_images' => 'Максимальний розмір картинок, з якими може працювати SPIP (у мільйонах пікселів).
      SPIP не зможет стискати картинки більшого розміру.', + 'info_taille_maximale_vignette' => 'Максимальний розмір зображень, створенних системою:', + 'info_terminer_installation' => 'Теперь ви можете закінчити стандартний процес встановлення.', + 'info_texte' => 'Текст', + 'info_texte_explicatif' => 'Пояснювальний текст', + 'info_texte_long' => '(Довгий текст: він з’явиться в декількох частинах, які будуть повторно зібрані після затвердження.)', + 'info_texte_message' => 'Текст повідомлення:', + 'info_texte_message_02' => 'Текст повідомлення', + 'info_titre' => 'Заголовок:', + 'info_total' => 'всього:', + 'info_tous_articles_en_redaction' => 'Усі статті, що редагуються', + 'info_tous_articles_presents' => 'Усі статті в розділі', + 'info_tous_articles_refuses' => 'Усі відхилені статті', + 'info_tous_les' => 'кожен:', + 'info_tout_site' => 'Весь сайт', + 'info_tout_site2' => 'Статтю не було перекладено на цю мову.', + 'info_tout_site3' => 'Статтю було перекладено на цю мову, але з того часу в оригінал внесено зміни. Необхідно поновити переклад.', + 'info_tout_site4' => 'Статтю було перекладено на цю мову, і переклад актуальний.', + 'info_tout_site5' => 'Вихідна стаття.', + 'info_tout_site6' => 'Попередження: відображаються лише вихідні статті. Переклади, пов’язані з оригіналом, - в кольорі, що вказує їхній статус:', + 'info_traductions' => 'Переклади', + 'info_travail_colaboratif' => 'Сумісна робота над статтями', + 'info_un_article' => 'стаття,', + 'info_un_site' => 'сайт,', + 'info_une_rubrique' => 'розділ,', + 'info_une_rubrique_02' => '1 розділ', + 'info_url' => 'Адреса:', + 'info_url_proxy' => 'URL проксі', + 'info_url_proxy_pas_conforme' => 'Невірний URL проксі серверу.', + 'info_url_site_pas_conforme' => 'URL сайту не є валідним.', + 'info_url_test_proxy' => 'URL для перевірки', + 'info_urlref' => 'Гиперпосилання:', + 'info_utilisation_spip' => 'SPIP готовий до роботи', + 'info_visites_par_mois' => 'Щомісячний показ:', + 'info_visiteur_1' => 'Відвідувач', + 'info_visiteur_2' => 'з основної частини сайту', + 'info_visiteurs' => 'Відвідувачі', + 'info_visiteurs_02' => 'Відвідувачі основної частини сайту', + 'info_webmestre_forces' => 'Список вебмастерів міститься в @file_options@.', + 'install_adresse_base_hebergeur' => 'Адресу серверу бази даних ви можете дізнатися у свого хостера', + 'install_connect_ok' => 'Була оголошена нова база на сервері @connect@.', + 'install_echec_annonce' => 'Ця інсталяция, напевне, не буде працювати або приведе до нестійкої роботи сайту...', + 'install_extension_mbstring' => 'SPIP не пращює з:', + 'install_extension_php_obligatoire' => 'SPIP вимагає php розширень:', + 'install_login_base_hebergeur' => 'Логін визначається постачальником послуг', + 'install_nom_base_hebergeur' => 'Ім’я бази даних визначається постачальником послуг:', + 'install_pas_table' => 'В базе даних ще нема таблиць', + 'install_pass_base_hebergeur' => 'Ви можете встановити пароль через контрольну панель хостінгу або запитати його в службі підтримки вашого хостінгу.', + 'install_php_version' => 'Версія PHP @version@ надто стара (мінімум = @minimum@)', + 'install_select_langue' => 'Виберіть мову, потім натисніть кнопку «далі», щоб начати процедуру встановлення.', + 'install_select_type_db' => 'Вкажіть тип бази даних:', + 'install_select_type_mysql' => 'MySQL', + 'install_select_type_pg' => 'PostgreSQL', + 'install_select_type_sqlite2' => 'SQLite 2', + 'install_select_type_sqlite3' => 'SQLite 3', + 'install_serveur_hebergeur' => 'Сервер бази даних визначається постачальником послуг', + 'install_table_prefix_hebergeur' => 'Префікс таблиці бази даних:', + 'install_tables_base' => 'Таблиці баз даних', + 'install_types_db_connus' => 'SPIP працює з MySQL і SQLite.', + 'install_types_db_connus_avertissement' => 'Підтримка PostgreSQL поки на експеріментальному рівні. ', + 'instituer_erreur_statut_a_change' => 'Статус вже був змінений', + 'instituer_erreur_statut_non_autorise' => 'Ви не можете вибрати цей статус', + 'intem_redacteur' => 'редактор', + 'intitule_licence' => 'Дозвіл', + 'item_accepter_inscriptions' => 'Дозволити реєстрацію', + 'item_activer_messages_avertissement' => 'Попереджати про сумісну роботу', + 'item_administrateur_2' => 'адміністратор', + 'item_afficher_calendrier' => 'показувати в календарі', + 'item_autoriser_syndication_integrale' => 'Включати цілі статті в об’єднані файли ', + 'item_choix_administrateurs' => 'адміністратори', + 'item_choix_generation_miniature' => 'Створювати зменшені копії автоматично.', + 'item_choix_non_generation_miniature' => 'Не створювати зменшені копії.', + 'item_choix_redacteurs' => 'редактори', + 'item_choix_visiteurs' => 'відвідувачі сайту', + 'item_creer_fichiers_authent' => 'Створити .htpasswd файли', + 'item_login' => 'Логін', + 'item_messagerie_agenda' => 'Увімкнути систему обміну повідомленнями і календар', + 'item_mots_cles_association_articles' => 'статті', + 'item_mots_cles_association_rubriques' => 'розділи', + 'item_mots_cles_association_sites' => 'зробити посилання або об’єднати сайти.', + 'item_non' => 'Ні', + 'item_non_accepter_inscriptions' => 'Не дозволяти реєстрацію', + 'item_non_activer_messages_avertissement' => 'НЕ попереджати про сумісну роботу', + 'item_non_afficher_calendrier' => 'Не показувати календар', + 'item_non_autoriser_syndication_integrale' => 'Відправляти лише короткий виклад', + 'item_non_creer_fichiers_authent' => 'Не створювати ці файли', + 'item_non_messagerie_agenda' => 'Відключити систему обміну повідомленнями і календар', + 'item_non_publier_articles' => 'Публікувати статті тільки після вказаної дати публікації.', + 'item_nouvel_auteur' => 'Новий автор', + 'item_nouvelle_rubrique' => 'Новий розділ', + 'item_oui' => 'Так', + 'item_publier_articles' => 'Негайно публіковати статті, не дивлячись на дату публікації', + 'item_reponse_article' => 'Відповісти на статтю', + 'item_version_html_max_html4' => 'Використовувати тільки HTML4 на сайті', + 'item_version_html_max_html5' => 'Дозволити HTML5', + 'item_visiteur' => 'відвідувач', + + // J + 'jour_non_connu_nc' => 'невідомий', + + // L + 'label_bando_outils' => 'Панель інструментів', + 'label_bando_outils_afficher' => 'Показати інструменти', + 'label_bando_outils_masquer' => 'Сховати інструменти', + 'label_choix_langue' => 'Мова інтерфейсу', + 'label_nom_fichier_connect' => 'Відображати ім’я серверу', + 'label_slogan_site' => 'Слоган сайту', + 'label_taille_ecran' => 'Ширина робочої області', + 'label_texte_et_icones_navigation' => 'Головне меню', + 'label_texte_et_icones_page' => 'Відоображення сторінки', + 'ldap_correspondance' => 'наслідувати поле @champ@', + 'ldap_correspondance_1' => 'Наслідувати поля LDAP', + 'ldap_correspondance_2' => 'Вкажіть відповідне LDAP поле для кожного з даних полей. Залиште їх порожніми, якщо ви не хочете, щоб вони заповнювались. Декілька LDAP полей розділяються пробілом або комою.', + 'lien_ajouter_auteur' => 'Додати автора', + 'lien_ajouter_une_rubrique' => 'Додати розділ', + 'lien_email' => 'Електронна пошта', + 'lien_nom_site' => 'НАЗВА САЙТУ:', + 'lien_rapide_contenu' => 'Перейти до змісту', + 'lien_rapide_navigation' => 'Перейти до навігації', + 'lien_rapide_recherche' => 'Перейти до пошуку', + 'lien_retirer_auteur' => 'Видалити автора', + 'lien_retirer_rubrique' => 'Видалити розділ', + 'lien_retirer_tous_auteurs' => 'Видалити усіх авторів', + 'lien_retirer_toutes_rubriques' => 'Видалити всі розділи', + 'lien_site' => 'сайт', + 'lien_tout_decocher' => 'Зніміть', + 'lien_tout_deplier' => 'Развернуть усі ', + 'lien_tout_replier' => 'Згорнути усе', + 'lien_tout_supprimer' => 'Видалити усе', + 'lien_trier_nom' => 'Сортирувати за ім´ям', + 'lien_trier_nombre_articles' => 'Сортирувати за номерами статтей', + 'lien_trier_statut' => 'Сортирувати за статусом', + 'lien_voir_en_ligne' => 'ПЕРЕГЛЯД ОНЛАЙН:', + 'logo_article' => 'ЛОГОТИП СТАТТІ', + 'logo_auteur' => 'ЛОГОТИП АВТОРА', + 'logo_rubrique' => 'ЛОГОТИП РОЗДІЛУ', + 'logo_site' => 'ЛОГОТИП САЙТУ', + 'logo_standard_rubrique' => 'Стандартний логотип розділу', + 'logo_survol' => 'При наведенні миші', + + // M + 'menu_aide_installation_choix_base' => 'Виберіть вашу базу даних', + 'module_fichier_langue' => 'Мовний файл', + 'module_raccourci' => 'Ярлик', + 'module_texte_affiche' => 'Показаний текст', + 'module_texte_explicatif' => 'Ви можете вставити наступні ярлики в шаблон вашого сайту. Їх будє автоматично перекладено на різні мови, для яких існує мовний файл.', + 'module_texte_traduction' => 'Мовний файл «@module@» є доступним в:', + 'mois_non_connu' => 'невідомий', + + // N + 'nouvelle_version_spip' => 'Доступне оновлення версії SPIP @version@ ', + 'nouvelle_version_spip_majeure' => 'Доступна нова версія SPIP @version@ ', + + // O + 'onglet_contenu' => 'Зміст', + 'onglet_declarer_une_autre_base' => 'Об´явити іншу базу даних', + 'onglet_discuter' => 'Обговорити', + 'onglet_interactivite' => 'Інтерактивність', + 'onglet_proprietes' => 'Властивості', + 'onglet_repartition_actuelle' => 'зараз', + 'onglet_sous_rubriques' => 'Підрубрики', + + // P + 'page_pas_proxy' => 'Ця сторінка не повинна проходити через проксі', + 'pas_de_proxy_pour' => 'Якщо необхідно, вкажіть для яких комп’ютерів або доменів не треба застосовувати проксі (наприклад: @exemple@) ', + 'phpinfo' => 'Конфігурація PHP', + 'plugin_charge_paquet' => 'Завантаження архиву файлу @name@', + 'plugin_charger' => 'Завантажити', + 'plugin_erreur_charger' => 'Помилка: неможливо завантажити @zip@', + 'plugin_erreur_droit1' => 'Нема прав для запису в папку @dest@.', + 'plugin_erreur_droit2' => 'Будь ласка, перевірте права на запис для цієї папки (і за необхідності створіть її). Або перепишіть файли по FTP.', + 'plugin_erreur_zip' => 'pclzip збій: помилка @status@', + 'plugin_etat_developpement' => 'у розробці', + 'plugin_etat_experimental' => 'експериментальний', + 'plugin_etat_stable' => 'стабільний', + 'plugin_etat_test' => 'тестується', + 'plugin_impossible_activer' => 'Неможливо увімкнути плагін @plugin@', + 'plugin_info_automatique1' => 'щоб дозволити автоматичну установку плагінів:', + 'plugin_info_automatique1_lib' => 'Якщо ви хочете дозволити автоматичну установку цієї бібліотеки, то:', + 'plugin_info_automatique2' => 'Створіть папку @rep@ ;', + 'plugin_info_automatique3' => 'Встановіть права доступу до каталогу (755 або 777).', + 'plugin_info_automatique_creer' => 'для створення в корені вебсайту.', + 'plugin_info_automatique_exemples' => 'Офіціальні RSS аркуші з плагінами:', + 'plugin_info_automatique_ftp' => 'Ви можете встановити плагіни по FTP в каталог @rep@ ', + 'plugin_info_automatique_lib' => 'Деякі плагіни повинні мати можливість завантажувати файли в каталог lib/. Можливо, його необхідно створити самостійно.', + 'plugin_info_automatique_liste' => 'Ваші плагіни:', + 'plugin_info_automatique_liste_officielle' => 'офіційні плагіни', + 'plugin_info_automatique_liste_update' => 'Поновити списки', + 'plugin_info_automatique_ou' => 'або...', + 'plugin_info_automatique_select' => 'виберіть плагін, SPIP завантажить і встановить його в каталог @rep@. Якщо плагін вже встановлений, його буде оновлено.', + 'plugin_info_credit' => 'Авторська інформація', + 'plugin_info_erreur_xml' => 'Неправильна декларація плагіна', + 'plugin_info_install_ok' => 'Встановлення пройшло успішно', + 'plugin_info_necessite' => 'Необхідно:', + 'plugin_info_non_compatible_spip' => 'Плагін несумісний з поточною версією SPIP', + 'plugin_info_plugins_dist_1' => 'Ці плагіни завантажені і встановлені в папці @plugins_dist@.', + 'plugin_info_plugins_dist_2' => 'Їх не можна відключити.', + 'plugin_info_telecharger' => 'завантажити с @url@ і встановити в @rep@', + 'plugin_info_upgrade_ok' => 'Обновлення пройшло успішно', + 'plugin_librairies_installees' => 'Встановлені бібліотеки', + 'plugin_necessite_extension_php' => 'Необхідно PHP-розширення @plugin@ версії @version@.', + 'plugin_necessite_extension_php_sans_version' => 'Необхідно PHP-розширення @plugin@', + 'plugin_necessite_lib' => 'Для цього плагіна необхідна бібліотека @lib@', + 'plugin_necessite_php' => 'Необхідно @plugin@ версії @version@.', + 'plugin_necessite_plugin' => 'Для цього плагіна необхідний @plugin@ @version@ або новіший.', + 'plugin_necessite_plugin_sans_version' => 'Потрібний плагін @plugin@', + 'plugin_necessite_spip' => 'Для цього плагіна потрібний SPIP @version@ або новіший.', + 'plugin_source' => 'джерело: ', + 'plugin_titre_automatique' => 'Автоматичне встановлення', + 'plugin_titre_automatique_ajouter' => 'Додати плагін', + 'plugin_titre_installation' => 'Встановити плагін @plugin@ ', + 'plugin_titre_modifier' => 'Мої плагіни', + 'plugin_utilise_extension_php' => 'Використовується PHP-розширення @plugin@ версії @version@.', + 'plugin_utilise_php' => 'Використовується @plugin@ версії @version@.', + 'plugin_utilise_plugin' => 'Використовуйте плагін @plugin@ en версії @version@.', + 'plugin_zip_active' => 'Продовжити для активації', + 'plugin_zip_adresse' => 'Вкажіть посилання на zip файла плагіна для завантаження або адресу RSS листа плагінів.', + 'plugin_zip_adresse_champ' => 'URL плагіна (zip file) або RSS листа', + 'plugin_zip_content' => 'Він містить наступні файли(@taille@),
      готові до встановлення в каталозі @rep@', + 'plugin_zip_installe_finie' => 'Файл @zip@ распакований і встановлений.', + 'plugin_zip_installe_rep_finie' => 'Файл @zip@ распакований і встановлений в каталозі @rep@ ', + 'plugin_zip_installer' => 'Теперь ви можете встановити.', + 'plugin_zip_telecharge' => 'Файл @zip@ було завантажено', + 'plugins_actif_aucun' => 'Нема вимкенених плагінів.', + 'plugins_actif_un' => 'Включений один плагін', + 'plugins_actifs' => '@count@ плагінів включено.', + 'plugins_actifs_liste' => 'Включені ', + 'plugins_compte' => '@count@ плагіни', + 'plugins_disponible_un' => 'Доступний один плагін', + 'plugins_disponibles' => 'доступно @count@ плагінів.', + 'plugins_erreur' => 'Помилка в плагінах: @plugins@', + 'plugins_liste' => 'Встановлені плагіни', + 'plugins_liste_dist' => 'Захищені плагіни', + 'plugins_recents' => 'останні плагіни', + 'plugins_tous_liste' => 'Усі', + 'plugins_vue_hierarchie' => 'Ієрархія', + 'plugins_vue_liste' => 'Список', + 'protocole_ldap' => 'Версія протоколу:', + + // Q + 'queue_executer_maintenant' => 'Запустити', + 'queue_info_purger' => 'Ви можете видалити усі поточні завдання і очистити всю чергу завдань', + 'queue_nb_jobs_in_queue' => 'В черзі @nb@ завдань', + 'queue_next_job_in_nb_sec' => 'Наступне завдання через @nb@ s', + 'queue_no_job_in_queue' => 'Список завдань пустий', + 'queue_one_job_in_queue' => '1 завдання в черзі', + 'queue_purger_queue' => 'Очистити список завдань', + 'queue_titre' => 'Список завдань', + + // R + 'repertoire_plugins' => 'Репозиторій:', + 'required' => '(обов’язково)', + + // S + 'sans_heure' => 'час невизначений', + 'statut_admin_restreint' => '(обмежений адміністратор)', + 'statut_webmestre' => 'веб-майстер', + + // T + 'tache_cron_asap' => 'Завдання CRON @function@ (ASAP)', + 'tache_cron_secondes' => 'Завдання CRON @function@ (кожні @nb@ с)', + 'taille_cache_image' => 'Кеш файлів зображень (автоматично стиснені картинки, зображення формул в форматі TeX і текст, трасформований в графіку) займає @taille@ в каталозі @dir@.', + 'taille_cache_infinie' => 'На вашому сайті нема обмежень на розмір кеша.', + 'taille_cache_maxi' => 'Заданий максимальний розмір файлів кеша складає приблизно @octets@ .', + 'taille_cache_moins_de' => 'Розмір кеша менше @octets@.', + 'taille_cache_octets' => 'Приблизний розмір кеша @octets@.', + 'taille_cache_vide' => 'Кеш очищено.', + 'taille_repertoire_cache' => 'Поточний розмір кеша', + 'text_article_propose_publication' => 'Статтю представлено до публікації.', + 'texte_acces_ldap_anonyme_1' => 'Деякі сервери LDAP не дозволяють анонімного доступу. В цьому випадку ви повинні вказати вихідний ідентифікатор доступу, щоб згодом мати можливість шукати інформацію в каталозі. Але в більшості випадків наступні поля можна залишити порожніми.', + 'texte_admin_effacer_01' => 'Ця команда видаляє увесь вміст бази даних, включаючи усі параметри доступу для редакторів і адміністраторів. Після її виконання ви повинні перевстановити SPIP, щоб відновити нову базу даних і доступ першого адміністратора.', + 'texte_adresse_annuaire_1' => '(Якщо ваш каталог установлено на тому ж самому комп’ютері, що і ваш вебсайт, це, напевно, - «localhost».)', + 'texte_ajout_auteur' => 'Наступний автор був доданий до статті:', + 'texte_annuaire_ldap_1' => 'Якщо ви маєте доступ до каталогу(LDAP), то можете використовувати його для автоматичного імпорту користувачів SPIP.', + 'texte_article_statut' => 'Статус статті:', + 'texte_article_virtuel' => 'Віртуальна стаття', + 'texte_article_virtuel_reference' => 'Віртуальна стаття: стаття, на яку є посилання на вашому SPIP сайті, але яка насправді знаходиться на іншому URL. Щоб видалити перенаправлення, видаліть адресу, яку наведено вище.', + 'texte_aucun_resultat_auteur' => 'Нема результатів для «@cherche_auteur@».', + 'texte_auteur_messagerie' => 'Цей сайт може постійнно контролювати список редакторів, які знаходяться он-лайн, що дозволяє вам обмінюватися повідомленнями в реальному часі. Ви можете вирішити не з’являтися в цьому списку (тоді вас «не побачать» інші користувачі).', + 'texte_auteurs' => 'АВТОРИ', + 'texte_choix_base_1' => 'Вибрати вашу базу даних:', + 'texte_choix_base_2' => 'SQL сервер містить декілька баз даних.', + 'texte_choix_base_3' => 'Виберіть нижче ту, яку ваш інтернет провайдер може віднести до вас:', + 'texte_choix_table_prefix' => 'Префікс для таблиць БД:', + 'texte_compatibilite_html' => 'Ви можете встановити налаштування SPIP так, щоб він генерував код, сумісний з HTML4, або ж в стандарті HTML5.', + 'texte_compatibilite_html_attention' => 'У випадку включення підтримки HTML5 проблем не очікується, але в цьому випадку необхідно додати наступний рядок коду на усі сторінки сайту: < !DOCTYPE html>.', + 'texte_compte_element' => '@count@ елемент', + 'texte_compte_elements' => '@count@ елементи', + 'texte_conflit_edition_correction' => 'Будь ласка, перевірте нижче різницю між двома версіями. Таким чином ви можете зкопіювати ваші зміни і почати спочатку.', + 'texte_connexion_mysql' => 'Параметри доступу до бази даних задаются в контрольній панелі хостінга. Якщо у вас нема можливості управляти вашими базами даних, ви можете запитати про допомогу в службі підтримки хостінгу.', + 'texte_contenu_article' => '(Короткий зміст статті.)', + 'texte_contenu_articles' => 'Вибрати додаткові інформаційні поля для статтей. В залежності від того, як запрограмовано ваш сайт, вони можуть відображатися або не відображатися в загальному доступі. ', + 'texte_crash_base' => 'Якщо ваша база даних пошкоджена, ви можете спробувати відновити її автоматично.', + 'texte_creer_rubrique' => 'Створіть хоча б одну рубрику,
      щоб писати статті.', + 'texte_date_creation_article' => 'ДАТА створення статті:', + 'texte_date_creation_objet' => 'Дата створення:', # on ajoute le ":" + 'texte_date_publication_anterieure' => 'Додаткова дата:', + 'texte_date_publication_anterieure_nonaffichee' => 'Приховати дату більш ранньої публікації.', + 'texte_date_publication_article' => 'ДАТА ОНЛАЙН ПУБЛИКАЦІИ:', + 'texte_date_publication_objet' => 'Дата публікації:', + 'texte_definir_comme_traduction_rubrique' => 'Ця рубрика є перекладом рубрики за номером:', + 'texte_descriptif_rapide' => 'Короткий опис', + 'texte_effacer_base' => 'Видалити базу даних SPIP', + 'texte_effacer_statistiques' => 'Видалити статистику', + 'texte_en_cours_validation' => 'Матеріали, що потребують перевірки. ', + 'texte_enrichir_mise_a_jour' => 'Ви можете покращити свій текст, користуючись «типографськими скороченнями»', + 'texte_fichier_authent' => 'Чи повинен SPIP створювати .htpasswd і .htpasswd-admin файли у папці @dossier@?

      Ці файли використовуються для обмеження доступу авторів і адміністраторов до інших частин сайту (наприклад, до папки з серверною статистикою).

      Якщо у вас нема необхідності в таких діях, то залиште це значення як усталено (default).

      ', + 'texte_informations_personnelles_1' => 'Теперь система створить ваш обліковий запис на сайті.', + 'texte_informations_personnelles_2' => '(Примітка: Якщо ви перевстановлюєте SPIP і ваш старий логін і пароль як і раніше працюють, ви можете', + 'texte_introductif_article' => '(Вступний текст до статті)', + 'texte_jeu_caractere' => 'Рекомендуємо використовувати кодування (utf-8) на вашому сайті. Це дасть можливість відображати текст будь-якою мовою. ', + 'texte_jeu_caractere_3' => 'Поточне кодування:', + 'texte_jeu_caractere_4' => 'Якщо це не відповідає ситуації з вашими даними (наприклад, після відновлення бази даних з резервної копії), або якщо ви створюєте цей сайт і хочете використовувати різні набори символів, будь ласка, вкажіть набор символів тут:', + 'texte_login_ldap_1' => '(Залиште порожнім для анонімного доступу або введіть повний шлях, наприклад «uid=smith, ou=users, dc=my-domain, dc=com ».)', + 'texte_login_precaution' => 'Увага! Це ваш поточний логін на сайті, міняйте вдумливо.', + 'texte_messagerie_agenda' => 'Система відправлення повідомлень дозволяє авторам сайту спілкуватися безпосередньо в редакційній частині сайту. Вона пов’язана з календарем.', + 'texte_mise_a_niveau_base_1' => 'Ви тільки но поновили файли SPIP. Теперь ви повинні поновити базу даних сайту.', + 'texte_modifier_article' => 'Змінити статтю:', + 'texte_multilinguisme' => 'Якщо на сайті будуть розміщуватися матеріали деякільками мовами, ви можете додати «меню вибору мови» для цих матеріалів.', + 'texte_multilinguisme_trad' => 'Також ви можете дозволити об’єднувати різні переклади одного і того ж матеріалу. ', + 'texte_non_compresse' => 'розпакувати (ваш сервер не підтримує цю функцію)', + 'texte_nouvelle_version_spip_1' => 'Ви встановили нову версію SPIP.', + 'texte_nouvelle_version_spip_2' => 'Щоб поновити сайт до нової версії, якщо ви вебмастер цього сайту, будь ласка, видаліть файл @connect@ і повторно почніть установку, щоб поновити налаштування підключення до бази даних.

      (PS: Якщо ви забули свої параметри з’єднання, то вони зберігаються в файлі @connect@

      ', + 'texte_operation_echec' => 'Поверніться до попередньої сторінки, виберіть іншу базу даних або створіть нову. Перевірте інформацію, надану вашим хостом.', + 'texte_plus_trois_car' => 'понад 3 символи', + 'texte_plusieurs_articles' => 'Декілька авторів було знайдено для «@cherche_auteur@»:', + 'texte_port_annuaire' => '(Усталене (default) значення є підходящим.)', + 'texte_presente_plugin' => 'На цій сторінці перелік плагінів, доступних на вашому сайті. Включіть плагін, відзначивши відповідний квадратик.', + 'texte_proposer_publication' => 'Коли ви закінчите роботу над статтею,
      ви можете представити її до публікації.', + 'texte_proxy' => 'В деяких випадках (внутрішні або захищені мережі...) необхідно використовувати proxy HTTP, щоб дістатися віддалених сайтів (SPIP документація, сайти, що реферуються і т.д.). В такому разі введіть його адресу нижче в форму http://proxy:8080 (@proxy_en_cours@). В більшості випадків ви можете залишити це поле порожнім.', + 'texte_publication_articles_post_dates' => 'Коли публікувати статті з датою публікації в майбутньому?', + 'texte_rappel_selection_champs' => '[Не забудьте правильно обрати поле.]', + 'texte_recalcul_page' => 'Якщо ви хочете поновити тільки одну сторінку, то можете зробити це в основній частині, використовуючи кнопку «Поновити сторінку».', + 'texte_recuperer_base' => 'Відновити базу даних', + 'texte_reference_mais_redirige' => 'посилання на статтю вашого SPIP сайту, але переадресоване на іншу адресу.', + 'texte_requetes_echouent' => 'Якщо при виконанні SQL запитів часто з’являються повідомлення про помилки, цілком можливо, що пошкоджено саму базу даних.

      В SQL вбудовано функцію ремонту і відновлення пошкоджених таблиць. Ви можете спробувати виконати процедуру відновлення або ремонту зараз.

      ', + 'texte_selection_langue_principale' => 'Ви можете вибрати «головну мову» сайту. Вона задає: +
        +
      • усталений формат виведення дати
      • +
      • усталену мову для використання на сайті
      • +
      • усталену мову для адміністративной частини.
      • +
      ', + 'texte_sous_titre' => 'Підзаголовок', + 'texte_statistiques_visites' => '(темні штрихи: неділя / темна крива: середній рівень)', + 'texte_statut_attente_validation' => 'очікує затвердження', + 'texte_statut_publies' => 'опубліковані на сайті', + 'texte_statut_refuses' => 'відхилено', + 'texte_suppression_fichiers' => 'використовуйте команду для видалення усіх файлів з кеша SPIP. Це дозволить поновити усі сторінки сайту. Це дуже зручно, якщо ви змінили шаблони або поновили значну кількість інформації на сайті.', + 'texte_sur_titre' => 'Топ-заголовок', + 'texte_table_ok' => ': таблиця ОК.', + 'texte_tentative_recuperation' => 'Спроба відновлення ', + 'texte_tenter_reparation' => 'Спроба відновлення бази даних', + 'texte_test_proxy' => 'Щоб спробувати проксі, введіть тут адрес вебсайта, який ви хочете перевірити.', + 'texte_titre_02' => 'Заголовок:', + 'texte_titre_obligatoire' => 'Заголовок [обов’язково]', + 'texte_travail_article' => '@nom_auteur_modif@ роботав над цією статтею @date_diff@ хвилин тому', + 'texte_travail_collaboratif' => 'Якщо декілька авторів редагують одну і ту ж саму статтю, то система позначає її як «в роботі» і обмежує доступ до неї, щоб уникнути втрат інформації внаслідок одночасного редагування матеріалу. Зазвичай цю можливість відключено.', + 'texte_vide' => 'очистити', + 'texte_vider_cache' => 'Очистити кеш', + 'titre_admin_tech' => 'Технічне обслуговування', + 'titre_admin_vider' => 'Технічне обслуговування', + 'titre_ajouter_un_auteur' => 'Додати автора', + 'titre_ajouter_un_mot' => 'Додати ключове слово', + 'titre_cadre_afficher_article' => 'Показати статті:', + 'titre_cadre_afficher_traductions' => 'Показати стан перекладу для наступних мов:', + 'titre_cadre_ajouter_auteur' => 'ДОДАТИ АВТОРА:', + 'titre_cadre_interieur_rubrique' => 'В розділі', + 'titre_cadre_numero_auteur' => 'НОМЕР АВТОРА', + 'titre_cadre_numero_objet' => '@objet@ НОМЕР:', + 'titre_cadre_signature_obligatoire' => 'Підпис [обов’язково]
      ', + 'titre_config_contenu_notifications' => 'Повідомлення', + 'titre_config_contenu_prive' => 'У редакційній частині', + 'titre_config_contenu_public' => 'В публічній частині', + 'titre_config_fonctions' => 'Налаштування сайту', + 'titre_config_langage' => 'Вибір мови інтерфейсу', + 'titre_configuration' => 'Налаштування сайту', + 'titre_configurer_preferences' => 'Змінити налаштування', + 'titre_configurer_preferences_menus' => 'Налаштування меню', + 'titre_conflit_edition' => 'Протиріччя в процесі зміни', + 'titre_connexion_ldap' => 'Опції: ваше LDAP з’єднання', + 'titre_groupe_mots' => 'ГРУППА КЛЮЧОВИХ СЛІВ:', + 'titre_identite_site' => 'Інформація про сайт', + 'titre_langue_article' => 'Мова статті', + 'titre_langue_rubrique' => 'МОВА РОЗДІЛУ', + 'titre_langue_trad_article' => 'МОВА та ПЕРЕКЛАДИ СТАТТІ', + 'titre_les_articles' => 'СТАТТІ', + 'titre_messagerie_agenda' => 'Система обміну повідомленнями і календар', + 'titre_naviguer_dans_le_site' => 'Перегляд сайту...', + 'titre_nouvelle_rubrique' => 'Новий розділ', + 'titre_numero_rubrique' => 'НОМЕР РОЗДІЛУ:', + 'titre_page_articles_edit' => 'Змінити: @titre@', + 'titre_page_articles_page' => 'Статті', + 'titre_page_articles_tous' => 'Весь сайт', + 'titre_page_calendrier' => 'Календар @nom_mois@ @annee@', + 'titre_page_config_contenu' => 'Налаштування сайту', + 'titre_page_delete_all' => 'повне і незворотне видалення ', + 'titre_page_recherche' => 'Результати пошуку @recherche@', + 'titre_page_statistiques_referers' => 'Статистика (вхідні посилання)', + 'titre_page_upgrade' => 'SPIP оновлення', + 'titre_preference_menus_favoris' => 'Обране меню', + 'titre_publication_articles_post_dates' => 'Відкладена публікація статтей', + 'titre_reparation' => 'Відновити', + 'titre_suivi_petition' => 'Відстеження звернень (петицій)', + 'tls_ldap' => 'Transport Layer Security :', + 'trad_article_traduction' => 'Усі версії цієї статті:', + 'trad_delier' => 'Видалити зв’язок з цим перекладом', + 'trad_lier' => 'Ця стаття є перекладом статті за номером:', + 'trad_new' => 'Додати новий переклад', + + // U + 'utf8_convert_erreur_orig' => 'Помилка: набір символів @charset@ не підтримується.', + + // V + 'version' => 'Версія:' +); diff --git a/www/ecrire/lang/ecrire_vi.php b/www/ecrire/lang/ecrire_vi.php index fd9d1fac..7af06354 100644 --- a/www/ecrire/lang/ecrire_vi.php +++ b/www/ecrire/lang/ecrire_vi.php @@ -1,9 +1,11 @@ 'Trở lại trang trước và xem lại các dữ kiện đã cung cấp.', 'avis_connexion_ldap_echec_3' => 'Một cách khác, đừng dùng LDAP support để đem tên người dùng vào.', 'avis_deplacement_rubrique' => 'LƯU Ý! Đề mục này chứa @contient_breves@ các tin ngắn @scb@: nếu bạn dời nó đi, xin đánh dấu vào ô này để xác nhận.', - 'avis_destinataire_obligatoire' => 'Phải chọn một người nhận trước khi gửi thư tín này đi.', 'avis_erreur_connexion_mysql' => 'Có Lỗi-không nối với SQL', - 'avis_erreur_version_archive' => 'Báo động! Hồ sơ @archive@ thuộc dạng SPIP khác với dạng mà bạn có. - Bạn sẽ gặp rất nhiều rắc rối: có thể database bị tiêu hủy, website bị trắc trở, v.v... - Xin đừng nộp bài này vào.

      Để biết thêm chi tiết, xem bài -Hồ sơ SPIP.', # MODIF - 'avis_espace_interdit' => 'Vùng cấm địa

      SPIP đã được thiết trí rồi.', + 'avis_espace_interdit' => 'Vùng cấm địa

      SPIP đã được thiết trí rồi.', # MODIF 'avis_lecture_noms_bases_1' => 'Nhu liệu thiết trí không đọc được tên của database thiết trí.', 'avis_lecture_noms_bases_2' => 'Không có database nào hết, hoặc đặc điểm cho phép liệt kê tên database bị tắt đi vì lý do an ninh (thường là như vậy cho nhiều máy chủ)', 'avis_lecture_noms_bases_3' => 'Trong trường hợp lựa chọn thứ nhì xảy ra, sau khi bạn login vào, có thể một database có tên lúc đó có thể dùng được: ', - 'avis_non_acces_message' => 'Bạn không có quyền xem thư tín này.', 'avis_non_acces_page' => 'Bạn không có quyền vào trang này.', 'avis_operation_echec' => 'Thao tác thất bại.', - 'avis_probleme_archive' => 'Có lỗi khi đọc hồ sơ @archive@', 'avis_suppression_base' => 'BÁO ĐỘNG, xóa dữ kiện rồi sẽ không lấy lại được', - 'avis_version_mysql' => 'Ấn bản SQL này (@version_mysql@) không cho phép sửa chữa tự động các bản trong database.', // B 'bouton_acces_ldap' => 'Thêm hồ sơ vào LDAP >>', 'bouton_ajouter' => 'Thêm', - 'bouton_ajouter_participant' => 'THÊM MỘT THAM DỰ VIÊN:', - 'bouton_annonce' => 'THÔNG BÁO', - 'bouton_checkbox_envoi_message' => 'Có thể viết vài chữ ', - 'bouton_checkbox_indiquer_site' => 'Qúy vị phải ghi tên một trang Web', - 'bouton_checkbox_signature_unique_email' => 'Chỉ một chữ ký cho một địa chỉ email ', - 'bouton_checkbox_signature_unique_site' => 'Chỉ một chữ ký cho một địa chỉ Web', 'bouton_demande_publication' => 'Đề nghị bài này cho ban biên tập', - 'bouton_effacer_index' => 'Xoá bản index', 'bouton_effacer_tout' => 'Xoá TẤT CẢ', - 'bouton_envoi_message_02' => 'GỬI THƯ TÍN', 'bouton_envoyer_message' => 'Tin thư đầy đủ: Gửi đi ', 'bouton_modifier' => 'Thay đổi', - 'bouton_pense_bete' => 'GHI NHỚ CÁ NHÂN', - 'bouton_radio_activer_messagerie' => 'Sử dụng thư tín nội bộ ', - 'bouton_radio_activer_messagerie_interne' => 'Sử dụng thư tín nội bộ', - 'bouton_radio_activer_petition' => 'Dùng thỉnh nguyện thư ', 'bouton_radio_afficher' => 'Hiển thị', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Hiện tên ra', - 'bouton_radio_desactiver_messagerie' => 'Không sử dụng thư tín nội bộ', 'bouton_radio_envoi_annonces_adresse' => 'Gửi thông báo đến địa chỉ:', 'bouton_radio_envoi_liste_nouveautes' => 'Gửi các tin tức mới nhất', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Không hiện tên ra ', 'bouton_radio_non_envoi_annonces_editoriales' => 'Đừng gửi bất cứ thông báo xã luận nào', - 'bouton_radio_pas_petition' => 'Không dùng', - 'bouton_radio_petition_activee' => 'Thỉnh nguyện thư được mở lên', - 'bouton_radio_supprimer_petition' => 'Xóa thỉnh nguyện thư', 'bouton_redirection' => 'CHUYỂN TỚI', 'bouton_relancer_installation' => 'Thiết trí lại', 'bouton_suivant' => 'Kế tiếp', 'bouton_tenter_recuperation' => 'Tìm cách sửa chữa', 'bouton_test_proxy' => 'Thử nghiệm proxy', 'bouton_vider_cache' => 'Làm sạch cache', - 'bouton_voir_message' => 'Xem lại trước khi gửi', // C - 'cache_mode_compresse' => 'Hồ sơ cache được lưu trữ trong dạng nén/ép.', - 'cache_mode_non_compresse' => 'Hồ sơ cache được giữ nguyên dạng, không nén.', 'cache_modifiable_webmestre' => 'Webmaster có thể điều chỉnh các thông số này.', 'calendrier_synchro' => 'Nếu bạn có thiết trí nhu liệu nhật ký tương ứng với iCal, bạn có thể đồng bộ hóa nó với trang web.', @@ -103,7 +78,6 @@ Hồ sơ SPIP.', # MODIF 'entree_login' => 'Login của bạn', 'entree_login_connexion_1' => 'Nối vào', 'entree_login_connexion_2' => '(Đôi khi giống với ký danh FTP của bạn và đôi khi để trống)', - 'entree_login_ldap' => 'Nối sơ khởi vào LDAP', 'entree_mot_passe' => 'Mật mã của bạn', 'entree_mot_passe_1' => 'Mật mã để nối vào', 'entree_mot_passe_2' => '(Đôi khi giống mật mã FTP của bạn và đôi khi để trống)', @@ -123,7 +97,7 @@ Hồ sơ SPIP.', # MODIF 'ical_info2' => 'Để biết thêm chi tiết xin vào xem trang web SPIP’s documentation.', # MODIF 'ical_info_calendrier' => 'Bạn có 2 thời biểu để sử dụng. Thời biểu thứ nhất liệt kê tất cả các bài viết được đăng. Thời biểu thứ hai liệt kê các thông báo của Ban Biên Tập và những thông tin cá nhân của bạn. Phần này được dành cho bạn qua một mật mã riêng mà bạn có thể thay đổi bằng cách thay đổi mật mã của mình.', 'ical_methode_http' => 'Đang tải xuống', - 'ical_methode_webcal' => 'Đồng bộ hoá (webcal://)', + 'ical_methode_webcal' => 'Đồng bộ hoá (webcal://)', # MODIF 'ical_texte_js' => 'Một mệnh lệnh javascript có thể được sử dụng để hiển thị những bài vỡ mới nhất được đăng của trang web này trên bất kỳ trang web nào của bạn một cách rất dễ dàng.', 'ical_texte_prive' => 'Thời biểu này, với tính cách cá nhân, sẽ cho bạn biết các hoạt động cá nhân của Ban Biên Tập (công việc, các cuộc hẹn, các bài đã nộp và các tin tức...).', 'ical_texte_public' => 'Thời biểu này giúp bạn theo dõi các hoạt động chung của trang web (các bài viết và các tin tức đã được đăng).', @@ -139,9 +113,7 @@ Hồ sơ SPIP.', # MODIF 'icone_creer_auteur' => 'Thêm tên một tác giả mới và ghi vào bài này', 'icone_creer_mot_cle' => 'Thêm một từ then chốt mới và ghi vào bài này', 'icone_creer_rubrique_2' => 'Thêm một đề mục mới ', - 'icone_envoyer_message' => 'Gửi thư tín này', 'icone_modifier_article' => 'Sửa bài này', - 'icone_modifier_message' => 'Sửa thư tín này', 'icone_modifier_rubrique' => 'Sửa đề mục này', 'icone_retour' => 'Trở lại', 'icone_retour_article' => 'Trở về bài trước', @@ -151,10 +123,7 @@ Hồ sơ SPIP.', # MODIF 'icone_valider_signature' => 'Chấp thuận', 'image_administrer_rubrique' => 'Bạn có thể quản trị đề mục này', 'info_1_article' => '1 bài', - 'info_1_site' => '1 trang web', 'info_activer_cookie' => 'Bạn có thể cho chạy administration cookie để bạn có thể qua lại giữa trang web công cộng và khu vực riêng.', - 'info_admin_gere_rubriques' => 'Nhân vật này có quyền quản trị các đề mục sau đây:', - 'info_admin_gere_toutes_rubriques' => 'Nhân vật này có quyền quản trị tất cả các đề mục.', # MODIF 'info_administrateur' => 'Quản lý', 'info_administrateur_1' => 'Quản lý', 'info_administrateur_2' => 'của trang web (sử dụng cẩn thận)', @@ -164,13 +133,10 @@ Hồ sơ SPIP.', # MODIF 'info_administrer_rubrique' => 'Bạn có thể quản trị đề mục này', 'info_adresse' => 'đến địa chỉ:', 'info_adresse_url' => 'Địa chỉ trang web của bạn', - 'info_afficher_visites' => 'Liệt kê những lần viếng thăm cho:', 'info_aide_en_ligne' => 'Giúp đỡ SPIP online', 'info_ajout_image' => 'Khi bạn đính kèm hình (trong dạng hồ sơ) vào một bài, SPIP có thể tự động chế ra các hình mẫu để xem trước (tức thumbnails) từ tấm hình nguyên thủy. Với đặc điểm này có thể tự động thiết lập ra một tập/bộ hình ảnh, album.', - 'info_ajout_participant' => 'Những tham dự viên sau đây đã được thêm vào:', 'info_ajouter_rubrique' => 'Thêm một đề mục khác để quản trị:', 'info_annonce_nouveautes' => 'Thông tin mới nhất', - 'info_anterieur' => 'trước đó', 'info_article' => 'bài', 'info_article_2' => 'bài', 'info_article_a_paraitre' => 'Những bài đã đề ngày để phát hành', @@ -178,10 +144,8 @@ Hồ sơ SPIP.', # MODIF 'info_articles_2' => 'Bài', 'info_articles_auteur' => 'Bài của tác giả này', 'info_articles_trouves' => 'Những bài tìm thấy', - 'info_articles_trouves_dans_texte' => 'Những bài tìm thấy (trong văn bản)', 'info_attente_validation' => 'Bài vở của bạn đang chờ thông qua', 'info_aujourdhui' => 'hôm nay:', - 'info_auteur_message' => 'NGƯỜI GỬI:', 'info_auteurs' => 'Tác giả', 'info_auteurs_par_tri' => 'Tác giả@partri@', 'info_auteurs_trouves' => 'Những tác giả tìm thấy', @@ -214,15 +178,12 @@ Hồ sơ SPIP.', # MODIF 'info_date_publication_anterieure' => 'Ngày tháng của bài đã đăng:', 'info_date_referencement' => 'NGÀY NỐI KẾT WEBSITE NÀY:', 'info_derniere_etape' => 'Bước chót: Hoàn tất!', - 'info_derniers_articles_publies' => 'Những bài phát hành mới nhất của bạn', - 'info_desactiver_messagerie_personnelle' => 'Bạn có thể tắt/mở hộp thư tín cá nhân của bạn.', 'info_descriptif' => 'Tóm lược:', 'info_discussion_cours' => 'Đang trao đổi', 'info_ecrire_article' => 'Để có thể soạn một bài vở, bạn phải lập ra một đề mục trước đã. 'Địa chỉ email của người gửi (không bắt buộc)', 'info_email_envoi_txt' => 'Đánh vào địa chỉ người gửi để gửi email (theo định sẵn, thì địa chỉ người nhận sẽ được dùng làm địa chỉ gửi) :', 'info_email_webmestre' => 'Địa chỉ email của webmaster (không bắt buộc) ', # MODIF - 'info_entrer_code_alphabet' => 'Cho biết bảng mã sử dụng: ', 'info_envoi_email_automatique' => 'Gửi email tự động', 'info_envoyer_maintenant' => 'Gửi bây giờ', 'info_etape_suivante' => 'Qua bước kế', @@ -232,24 +193,16 @@ Hồ sơ SPIP.', # MODIF 'info_facilite_suivi_activite' => 'Để làm nhẹ công việc của Ban Biên Tập, SPIP gửi bằng email các thông báo xin phép đăng và chấp thuận bài vở (đến mailing list của chủ bút chẳng hạn) ', 'info_fichiers_authent' => 'Hồ sơ xác nhận ".htpasswd"', 'info_forums_abo_invites' => 'Trang web có các diễn đàn cần ghi danh; khách có thể vào ghi danh ở trang công cộng.', - 'info_gauche_admin_effacer' => 'Chỉ có quản trị viên được phép vào trang này.

      Nơi đây cho phép bạn thực hiện một số việc quản trị kỹ thuật. Một số việc đòi hỏi phải có chứng nhận đặc biệt, và cần phải dùng FTP để vào trang web.

      ', # MODIF 'info_gauche_admin_tech' => 'Chỉ có quản trị viên được phép vào trang này.

      Nơi đây cho phép bạn thực hiện một số công việc bảo trì. Một số việc cần phải có chứng nhận đặc biệt, cần phải dùng FTP để vào trang web.

      ', # MODIF 'info_gauche_admin_vider' => 'Chỉ có quản trị viên được phép vào trang này.

      Nơi đây cho phép bạn thực hiện một số công việc bảo trì. Một số việc cần phải có chứng nhận đặc biệt, và cần phải dùng FTP để vào trang web.

      ', # MODIF 'info_gauche_auteurs' => 'Danh sách tất cả tác giả được liệt kê nơi đây. Trách nhiệm của mỗi người được biểu hiện qua màu của icon (chủ bút=màu xanh lá cây; quản lý=màu vàng).', 'info_gauche_auteurs_exterieurs' => 'Các tác giả bên ngoài (không được phép vào trang web) được biểu hiện bằng icon màu xanh dương; Tác giả nào bị xóa tên được biểu hiện bằng icon thùng rác.', # MODIF 'info_gauche_messagerie' => 'Phương tiện thư tín cho phép bạn trao đổi thư tín giữa các chủ bút với nhau, lưu trữ bản ghi nhớ (để sử dụng riêng) hoặc hiển thị thông báo trên trang nhà của vùng riêng (nếu bạn là người quản trị).', - 'info_gauche_numero_auteur' => 'SỐ THỨ TỰ TÁC GIẢ:', 'info_gauche_statistiques_referers' => 'Trang này liệt kê danh sách referrers, tức là các trang có chứa điểm nối đến trang của bạn, chỉ cho hôm nay mà thôi: thật ra danh sách này được soạn mỗi 24 giờ.', 'info_gauche_visiteurs_enregistres' => 'Danh sách những người khách ghi danh trong vùng công cộng của trang web (theo diễn đàn)', 'info_generation_miniatures_images' => 'Hình mẫu xem trước (thumbnail)', - 'info_gerer_trad' => 'Quản trị phần nối dịch thuật?', 'info_hebergeur_desactiver_envoi_email' => 'Một số máy chủ không cho phép gửi email tự động từ server. Trong trường hợp này, những đặc điểm sau đây của SPIP không thể thiết lập được.', 'info_hier' => 'hôm qua: ', - 'info_historique_activer' => 'Cho phép tiếp tục sửa đổi', - 'info_historique_affiche' => 'Hiển thị ấn bản này', - 'info_historique_comparaison' => 'so sánh', - 'info_historique_desactiver' => 'Đóng việc nối tiếp sửa đổi', - 'info_historique_texte' => 'Nối tiếp sửa đổi cho phép bạn theo dõi những sửa đổi của một bài và cho thấy sự khác biệt giữa các ấn bản được sửa.', 'info_identification_publique' => 'Danh tánh công cộng của bạn...', 'info_image_process' => 'Xin chọn cách tạo ra hình trang trí bằng bấm trên hình đẹp nhất.', 'info_image_process2' => 'N.B. Nếu bạn không thấy hình nào cả có nghĩa là máy chủ chưa được thiết trí để sử dụng hình. Nếu bạn muốn dùng hình, liên lạc với nhóm phụ trách kỹ thuật của công ty cung cấp dịch vụ để yêu cầu có extension «GD» hay «Imagick».', # MODIF @@ -267,8 +220,6 @@ Hồ sơ SPIP.', # MODIF 'info_login_trop_court' => 'Login ngắn quá.', 'info_maximum' => 'tối đa:', 'info_meme_rubrique' => 'Cũng đề mục', - 'info_message' => 'Thư tín từ ', - 'info_message_efface' => 'THƯ TÍN ĐƯỢC XÓA', 'info_message_en_redaction' => 'Thư tín đang soạn', 'info_message_technique' => 'Thư tín kỹ thuật:', 'info_messagerie_interne' => 'Tin tức nội bộ', @@ -277,20 +228,15 @@ Hồ sơ SPIP.', # MODIF 'info_modifier_rubrique' => 'Sửa đổi đề mục:', 'info_modifier_titre' => 'Sửa đổi: @titre@', 'info_mon_site_spip' => 'Website SPIP của tôi', - 'info_mot_sans_groupe' => '(Từ then chốt không thuộc một nhóm...)', - 'info_moteur_recherche' => 'Cơ phận tìm kiếm', 'info_moyenne' => 'trung bình: ', - 'info_multi_articles' => 'Cho phép dụng nhiều thứ tiếng trong những bài ?', 'info_multi_cet_article' => 'Bài tiếng:', 'info_multi_langues_choisies' => 'Xin chọn ngôn ngữ có sẵn cho các chủ bút. Ngôn ngữ đã dùng cho trang web thì không tắt được.', - 'info_multi_rubriques' => 'Cho phép dụng nhiều thứ tiếng trong những đề mục ?', 'info_multi_secteurs' => '... chỉ dành cho các đề mục ở gốc trang web ?', 'info_nom' => 'Tên', 'info_nom_destinataire' => 'Tên người nhận', 'info_nom_site' => 'Tên website của bạn', 'info_nombre_articles' => '@nb_articles@ bài,', - 'info_nombre_partcipants' => 'THAM DỰ VIÊN VÀO CUỘC THẢO LUẬN:', 'info_nombre_rubriques' => '@nb_rubriques@ đề mục, ', 'info_nombre_sites' => '@nb_sites@ website, ', 'info_non_deplacer' => 'Đừng dời...', @@ -299,36 +245,26 @@ Hồ sơ SPIP.', # MODIF 'info_non_modifiable' => 'không thể sửa đổi được', 'info_non_suppression_mot_cle' => 'Tôi không muốn xóa từ then chốt này.', 'info_notes' => 'Chú thích', - 'info_nouveaux_message' => 'Thư tín mới', 'info_nouvel_article' => 'Bài mới', 'info_nouvelle_traduction' => 'Bản dịch mới:', 'info_numero_article' => 'SỐ THỨ TỰ BÀI:', 'info_obligatoire_02' => '[Bắt buộc] ', # MODIF 'info_option_accepter_visiteurs' => 'Cho phép khách ghi danh từ trang công cộng', - 'info_option_faire_suivre' => 'Chuyển thư tín trong diễn đàn đến tác giả bài', 'info_option_ne_pas_accepter_visiteurs' => 'Từ chối khách ghi danh', 'info_options_avancees' => 'ĐẶC TÍNH PHỤ TRỘI', - 'info_ortho_activer' => 'Mở lên cơ phận xét lỗi chính tả', - 'info_ortho_desactiver' => 'Tắt cơ phận xét lỗi chính tả', 'info_ou' => 'hoặc... ', 'info_page_interdite' => 'Trang cấm vào', 'info_par_nombre_article' => '(theo số lượng bài) ', 'info_passe_trop_court' => 'Mật mã ngắn quá.', 'info_passes_identiques' => 'Hai mật mã không giống hệt nhau.', - 'info_pense_bete_ancien' => 'Bản ghi nhớ cũ của bạn', # MODIF 'info_plus_cinq_car' => 'hơn 5 mẫu tự', 'info_plus_cinq_car_2' => '(Hơn 5 mẫu tự) ', 'info_plus_trois_car' => '(Hơn 3 mẫu tự) ', 'info_popularite' => 'Mức phổ thông: @popularite@; lần viếng: @visites@', - 'info_popularite_4' => 'Mức phổ thông: @popularite@; lần viếng: @visites@', 'info_post_scriptum' => 'Tái bút', 'info_post_scriptum_2' => 'Tái bút:', 'info_pour' => 'cho', - 'info_preview_admin' => 'Chỉ có quản trị viên được phép dùng dạng xem trước', - 'info_preview_comite' => 'Tất cả tác giả có thể dùng dạng xem trước.', - 'info_preview_desactive' => 'Dạng xem trước chưa mở lên', - 'info_preview_texte' => 'Bạn có thể xem trước trang web mà các bài vở, tin ngắn (với tình trạng "được đăng") trong đó như đã được cho đăng lên chính thức. Dạng xem trước này chỉ nên giới hạn cho quản trị viên, cho tất cả các tác giả, hay hoàn toàn tắt nó đi ?', - 'info_principaux_correspondants' => 'Những người liên lạc chính', + 'info_preview_texte' => 'Bạn có thể xem trước trang web mà các bài vở, tin ngắn (với tình trạng "được đăng") trong đó như đã được cho đăng lên chính thức. Dạng xem trước này chỉ nên giới hạn cho quản trị viên, cho tất cả các tác giả, hay hoàn toàn tắt nó đi ?', # MODIF 'info_procedez_par_etape' => 'Xin tiếp diễn từng bước một', 'info_procedure_maj_version' => 'Quy trình nâng cấp cần được chạy để database thích ứng với ấn bản SPIP mới.', 'info_ps' => 'Tái bút.', # MODIF @@ -336,12 +272,8 @@ Hồ sơ SPIP.', # MODIF 'info_publies' => 'Bài của bạn được đăng online', 'info_question_accepter_visiteurs' => 'Nếu trang web cho phép khách ghi danh mà không cần phải vào vùng riêng, thì xin hãy mở lên những chọn lựa sau:', 'info_question_inscription_nouveaux_redacteurs' => 'Bạn có cho phép ghi danh các chủ bút mới từ website công cộng không? Nếu đồng ý, khách có thể ghi danh qua một mẫu tự động, và sẽ được phép vào vùng riêng của họ để soạn bài.
      Trong quá trình ghi danh, người dùng sẽ nhận được email cho biết login/mật mã vào chỗ riêng của họ. Một số máy chủ tắt đặc điểm này: trong trường hợp đó, ghi danh tự động không dùng được.', # MODIF - 'info_question_utilisation_moteur_recherche' => 'Bạn có muốn dùng cơ phận tìm kiếm có sẵn của SPIP? (Nếu tắt nó đi sẽ làm hệ thống chạy lẹ hơn) ', - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF 'info_racine_site' => 'Gốc của website', 'info_recharger_page' => 'Xin nạp lại trang này trong giây lát.', - 'info_recherche_auteur_a_affiner' => 'Quá nhiều kết quả cho "@cherche_auteur@"; Xin lọc lựa lại việc tìm kiếm.', - 'info_recherche_auteur_ok' => 'Tìm thấy một số chủ bút cho "@cherche_auteur@":', 'info_recherche_auteur_zero' => 'Không có kết quả cho "@cherche_auteur@".', 'info_recommencer' => 'Xin thử lại.', 'info_redacteur_1' => 'Tác giả', @@ -358,7 +290,6 @@ Hồ sơ SPIP.', # MODIF 'info_rubriques' => 'Đề mục', 'info_rubriques_02' => 'đề mục', 'info_rubriques_trouvees' => 'Tìm thấy đề mục', - 'info_rubriques_trouvees_dans_texte' => 'Tìm thấy đề mục (trong văn tư)', 'info_sans_titre' => 'Không tựa đề', 'info_selection_chemin_acces' => 'Chọn dưới đây đường vào trong thư mục:', 'info_signatures' => 'chữ ký', @@ -371,11 +302,9 @@ Hồ sơ SPIP.', # MODIF 'info_sites_lies_mot' => 'Những website nối kết liên đới với từ then chốt này', 'info_sites_proxy' => 'Dùng một proxy', 'info_sites_trouves' => 'Tìm thấy website', - 'info_sites_trouves_dans_texte' => 'Tìm thấy website (trong văn tự)', 'info_sous_titre' => 'Tựa đề phụ:', 'info_statut_administrateur' => 'Quản trị viên', 'info_statut_auteur' => 'Quyền hạn của tác giả:', # MODIF - 'info_statut_efface' => 'Xóa', 'info_statut_redacteur' => 'Chủ bút', 'info_statut_utilisateurs_1' => 'Trạng thái định sẵn của người dùng được đưa vào', 'info_statut_utilisateurs_2' => 'Chọn trạng thái cho những người liệt kê trong thư mục LDAP khi họ nối vào lần đầu. Về sau, bạn có thể sửa đổi trị giá này cho từng tác giả theo từng trường hợp một.', @@ -393,7 +322,6 @@ Hồ sơ SPIP.', # MODIF 'info_tous_articles_en_redaction' => 'Tất cả bài vở đang được soạn', 'info_tous_articles_presents' => 'Tất cả bài vở đã phát hành trong đề mục này', 'info_tous_les' => 'mỗi:', - 'info_tous_redacteurs' => 'Thông báo đến tất cả chủ bút', 'info_tout_site' => 'Toàn bộ website', 'info_tout_site2' => 'Bài nầy chưa được dịch qua ngôn ngữ nầy.', 'info_tout_site3' => 'Bài nầy đã được dịch qua ngôn ngữ nầy rồi, nhưng bài gốc đã được sửa. Các bản dịch cần được cập nhật. ', @@ -408,7 +336,6 @@ và hiển ra với những màu khác nhau tùy theo tình trạng bài vở : 'info_une_rubrique' => 'một đề mục, ', 'info_une_rubrique_02' => '1 đề mục', 'info_url' => 'URL:', # MODIF - 'info_url_site' => 'URL CỦA WEBSITE:', # MODIF 'info_urlref' => 'Nối kết:', 'info_utilisation_spip' => 'SPIP sẵn sàng để sử dụng...', 'info_visites_par_mois' => 'Hiển thị hàng tháng:', @@ -425,15 +352,12 @@ và hiển ra với những màu khác nhau tùy theo tình trạng bài vở : 'item_activer_messages_avertissement' => 'Cho phép cảnh báo', 'item_administrateur_2' => 'quản lý', 'item_afficher_calendrier' => 'Hiện ra trong lịch', - 'item_autoriser_documents_joints' => 'Cho phép đính kèm tài liệu vào bài vở', - 'item_autoriser_documents_joints_rubriques' => 'Cho phép đính kèm tài liệu trong đề mục', 'item_choix_administrateurs' => 'quản trị viên', 'item_choix_generation_miniature' => 'Tự động tạo ra các hình mẫu.', 'item_choix_non_generation_miniature' => 'Đừng tạo ra hình mẫu.', 'item_choix_redacteurs' => 'chủ bút', 'item_choix_visiteurs' => 'Khách của website công', 'item_creer_fichiers_authent' => 'Lập ra hồ sơ .htpasswd', - 'item_limiter_recherche' => 'Giới hạn việc tìm kiếm trong khối lượng tin của website bạn', 'item_login' => 'Login', 'item_mots_cles_association_articles' => 'bài vở', 'item_mots_cles_association_rubriques' => 'các đề mục', @@ -442,34 +366,24 @@ và hiển ra với những màu khác nhau tùy theo tình trạng bài vở : 'item_non_accepter_inscriptions' => 'Không cho phép ghi danh', 'item_non_activer_messages_avertissement' => 'Không cần cảnh báo', 'item_non_afficher_calendrier' => 'Không hiện ra trong lịch', - 'item_non_autoriser_documents_joints' => 'Không cho phép đính kèm tài liệu vào bài vở', - 'item_non_autoriser_documents_joints_rubriques' => 'Không cho phép đính kèm tài liệu trong đề mục', 'item_non_creer_fichiers_authent' => 'Đừng lập ra các hồ sơ này', - 'item_non_gerer_statistiques' => 'Không quản trị các thống kê', - 'item_non_limiter_recherche' => 'Nới rộng việc tìm kiếm qua đến nội dung của các website nối kết', 'item_non_publier_articles' => 'Không đăng tải bài trước ngày được phép đăng.', - 'item_non_utiliser_moteur_recherche' => 'Đừng dùng', 'item_nouvel_auteur' => 'Tác giả mới', 'item_nouvelle_rubrique' => 'Đề mục mới', 'item_oui' => 'Dùng', 'item_publier_articles' => 'Cứ đăng tải bài bất kể ngày ghi.', 'item_reponse_article' => 'Hồi đáp bài ', - 'item_utiliser_moteur_recherche' => 'Dùng cơ phận tìm kiếm', 'item_visiteur' => 'khách', // J 'jour_non_connu_nc' => 'k.b.', // L - 'lien_ajout_destinataire' => 'Thêm người nhận này', 'lien_ajouter_auteur' => 'Thêm tác giả này', - 'lien_ajouter_participant' => 'Thêm một tham dự viên', 'lien_email' => 'email', 'lien_nom_site' => 'TÊN WEBSITE:', 'lien_retirer_auteur' => 'Loại bỏ tác giả', - 'lien_retrait_particpant' => 'Loại bỏ tham dự viên này', 'lien_site' => 'website', - 'lien_supprimer_rubrique' => 'xóa đề mục này', 'lien_tout_deplier' => 'Mở ra tất cả', 'lien_tout_replier' => 'Gộp tất cả lại', 'lien_trier_nom' => 'Xếp theo tên', @@ -495,6 +409,9 @@ và hiển ra với những màu khác nhau tùy theo tình trạng bài vở : // O 'onglet_repartition_actuelle' => 'hiện nay', + // R + 'required' => '[Bắt buộc] ', # MODIF + // S 'statut_admin_restreint' => '(Quản trị viên có giới hạn)', # MODIF @@ -516,13 +433,10 @@ và hiển ra với những màu khác nhau tùy theo tình trạng bài vở : 'texte_article_virtuel_reference' => 'Bài ảo: chỉ vào một bài khác trong SPIP của bạn, nhưng chuyển qua một địa chỉ khác. Để loại bỏ việc chuyển qua, xóa địa chỉ URL trên.', 'texte_aucun_resultat_auteur' => 'Không có kết quả cho "@cherche_auteur@".', 'texte_auteur_messagerie' => 'Website này có thể giám sát liên tục danh sách những chủ bút đang vào, và cho phép bạn trao đổi thư tín ngay lập tức (nếu hệ thư tín bị tắt thì danh sách các chủ bút đang vào cũng bị tắt theo). Bạn có thể chọn không xuất hiện trong danh sách này (đối với những người khác, bạn sẽ «vô hình»).', - 'texte_auteur_messagerie_1' => 'Website này cho phép trao đổi thư tín và cho lập ra những diễn đàn trao đổi riêng tư của các tham dự viên. Bạn có thể chọn không tham gia vào sự trao đổi này. ', 'texte_auteurs' => 'TÁC GIẢ', 'texte_choix_base_1' => 'Chọn database của bạn:', 'texte_choix_base_2' => 'Server SQL chứa nhiều database.', 'texte_choix_base_3' => 'Chọn một trong số dưới đây thuộc về bạn:', - 'texte_commande_vider_tables_indexation' => 'Dùng mệnh lệnh này để dọn sạch bản index dùng bởi cơ phận tìm kiếm của SPIP. Làm thế để tiết kiệm được một số chỗ trống trong dĩa.', - 'texte_compresse_ou_non' => '(có thể trong dạng nén hoặc dạng thường) ', 'texte_compte_element' => '@count@ món', 'texte_compte_elements' => '@count@ món', 'texte_connexion_mysql' => 'Xem lại tài liệu cung cấp bởi máy chủ: nếu dùng SQL, máy chủ cho bạn mã số ra vào server SQL. ', # MODIF @@ -534,10 +448,8 @@ và hiển ra với những màu khác nhau tùy theo tình trạng bài vở : 'texte_date_publication_anterieure' => 'Ngày phát hành truớc đó :', 'texte_date_publication_anterieure_nonaffichee' => 'Dấu ngày phát hành trước đó.', 'texte_date_publication_article' => 'NGÀY ĐĂNG TẢI ONLINE :', - 'texte_descriptif_petition' => 'Mô tả Thỉnh nguyện thư', 'texte_descriptif_rapide' => 'Tóm lược', 'texte_effacer_base' => 'Xóa database SPIP', - 'texte_effacer_donnees_indexation' => 'Xóa dữ kiện indexing', 'texte_en_cours_validation' => 'Bài vở và tin ngắn sau đây được nộp để chờ phát hành. Xin góp ý qua diễn đàn đính kèm. ', # MODIF 'texte_enrichir_mise_a_jour' => 'Bạn có thể trình bày văn bản gọn đẹp hơn bằng cách dùng những «lối xếp bài tắt».', 'texte_fichier_authent' => 'SPIP có nên lập ra hồ sơ đặc biệt .htpasswd và .htpasswd-admin trong thư mục @dossier@?

      Hai hồ sơ này dùng để giới hạn các tác giả và quản lý viên ra/vào các nơi khác trong website.

      Nếu bạn chưa từng sử dụng đặc tính này, hãy để nguyên lựa chọn này với các giá trị định sẵn (không lập ra hồ sơ). ', # MODIF @@ -546,19 +458,13 @@ và hiển ra với những màu khác nhau tùy theo tình trạng bài vở : 'texte_introductif_article' => '(Lời mở đầu cho bài viết.) ', 'texte_jeu_caractere' => 'Chọn lựa này thích hợp nếu website bạn dùng ngôn ngữ khác với mẫu tự latinh (tức "western") và các ngôn ngữ cùng hệ. Trong trường hợp này, phải chọn một bộ mã khác. Và cũng nên nhớ sửa đổi website để thích ứng (#CHARSET tag).', # MODIF - 'texte_jeu_caractere_2' => 'Sửa đổi này không có hiệu lực trở về trước. Do đó, bài vở đã cho vào có thể hiện ra không đúng sau khi sửa bảng mã lại. Tuy nhiên, bạn vẫn có thể chọn trở lại bảng mã trước đó. ', # MODIF - 'texte_lien_hypertexte' => '(Nếu thư tín có đề cập đến bài đã đăng tải trên web, hay đề cập đến một trang web có thêm dữ kiện, xin điền vào đây tựa đề và địa chỉ.)', 'texte_login_ldap_1' => '(Để trống nếu muốn ra/vào ẩn danh hoặc cho biết trọn vẹn lộ tuyến, lấy thí dụ «uid=smith, ou=users, dc=my-domain, dc=com».)', 'texte_login_precaution' => 'Cảnh báo! Đây là login bạn dùng để vào. Dùng mẫu này cẩn thận...', - 'texte_message_edit' => 'Cảnh báo: thư tín này có thể được sửa bởi bất cứ người quản lý nào, và mọi chủ bút đều xem được. Chỉ nên thông báo để nhấn mạnh những việc quan trọng đối với website.', 'texte_mise_a_niveau_base_1' => 'Bạn vừa cập nhật hồ sơ SPIP. Bây giờ bạn phải nâng cấp database của website.', 'texte_modifier_article' => 'Sửa bài:', - 'texte_moteur_recherche_active' => 'Cơ phận tìm kiếm được chạy. Dùng mệnh lệnh này nếu bạn muốn re-indexing cho lẹ (sau khi phục hồi các hồ sơ dự trữ chẳng hạn). Lưu ý là trong trường hợp bài được sửa đổi một cách bình thường (dùng giao diện SPIP) thì bài đó được tự động đánh chỉ số (index) lần nữa: do đó mệnh lệnh này chỉ hữu dụng trong trường hợp rất ư đặc biệt. ', - 'texte_moteur_recherche_non_active' => 'Cơ phận tìm kiếm đã bị tắt, không được phép chạy.', 'texte_multilinguisme' => 'Nếu bạn muốn quản trị các bài vỡ này trong nhiều ngôn ngữ, bạn có thể thêm vào bài/đề mục một mục lục chọn ngôn ngữ.', # MODIF 'texte_multilinguisme_trad' => 'Đồng thời, bạn có thể mở lên một hệ thống quản trị cho các bản dịch của một bài.', # MODIF 'texte_non_compresse' => 'Giản ra (server của bạn không dùng đặc tính này)', - 'texte_nouveau_message' => 'Thư tín mới', 'texte_nouvelle_version_spip_1' => 'Bạn vừa thiết trí ấn bản mới của SPIP.', 'texte_nouvelle_version_spip_2' => 'Ấn bản mới này cần cập nhật kỹ lưởng hơn bình thường. @@ -579,7 +485,6 @@ và hiển ra với những màu khác nhau tùy theo tình trạng bài vở : 'texte_publication_articles_post_dates' => 'SPIP sẽ làm gì khi một bài viết có đề ngày đăng tải sắp tới (trong tương lai)?', 'texte_rappel_selection_champs' => '[Nhớ chọn phần này cho đúng]', 'texte_recalcul_page' => 'Nếu bạn chỉ muốn làm mới lại một trang thôi, thì nên làm lại từ vùng công cộng và bấm vào nút «refresh» hay «reload».', - 'texte_recapitiule_liste_documents' => 'Trang này tóm tắt danh sách các tài liệu bạn để trong các đề mục. Để tu sửa dữ kiện của mỗi tài liệu, theo điểm nối để đến trang của đề mục đó.', 'texte_recuperer_base' => 'Sữa chữa database', 'texte_reference_mais_redirige' => 'Bài nối kết trong website SPIP, nhưng chuyển hướng qua địa chỉ URL khác.', 'texte_requetes_echouent' => 'Khi một số hỏi-đáp SQL trượt hàng loạt và có vẻ như không có lý do gì cả, điều đó cho thấy có thể chính database là thủ phạm.

      SQL có một đặc điểm sửa chữa các bản của nó khi chúng bị hư hại. Bạn có thể thử dùng đặc điểm sửa chữa này, trong trường hợp thất bại, bạn nên giữ lại một bản sao của màn ảnh để giúp soi sáng vấn đề ...

      Nếu vấn đề vẫn tiếp tục xảy ra, liên lạc với chủ nhân của máy.', # MODIF @@ -598,7 +503,6 @@ và hiển ra với những màu khác nhau tùy theo tình trạng bài vở : 'texte_suppression_fichiers' => 'Dùng mệnh lệnh này để xóa tất cả hồ sơ trong SPIP cache. Làm vậy để buộc làm mới lại mọi trang web, trong trường hợp bạn vừa có một số thay đổi về đồ họa hay cấu trúc của website.', 'texte_sur_titre' => 'Đầu đề', 'texte_table_ok' => ': bản này OK.', - 'texte_tables_indexation_vides' => 'Bản indexing của máy trống rỗng. ', 'texte_tentative_recuperation' => 'Tìm cách sửa chữa', 'texte_tenter_reparation' => 'Tìm cách sửa chữa database', 'texte_test_proxy' => 'Để thử proxy này, đánh vào địa chỉ một website bạn muốn thử.', @@ -607,13 +511,8 @@ và hiển ra với những màu khác nhau tùy theo tình trạng bài vở : 'texte_travail_article' => '@nom_auteur_modif@ đã soạn/bổ túc bài này cách đây @date_diff@ phút', 'texte_travail_collaboratif' => 'Nếu có nhiều người cùng soạn/sửa đổi một bài, hệ thống có thể cho thấy những bài đang được «làm việc» để tránh trường hợp sửa đổi cùng một lúc. Bạn có thể cho phép cảnh báo hay không:', - 'texte_trop_resultats_auteurs' => 'Quá nhiều kết quả khi tìm "@cherche_auteur@"; hãy duyệt lại việc tìm kiếm.', - 'texte_unpack' => 'Đang tải xuống ấn bản mới nhất', - 'texte_utilisation_moteur_syndiques' => 'Nếu bạn dùng cơ phận tìm kiếm của SPIP, bạn có thể tìm trong webiste và bài vở syndicated bằng nhiều cách khác nhau.
      Cách đơn giản nhất là tìm trong tựa đề và phần mô tả bài.
      Cách thứ nhất, mạnh hơn, cho phép SPIP tìm kiếm trong văn bản của website nối kết. Nếu bạn nối kết một website, SPIP sẽ tìm trong văn bản của website đó. ', # MODIF - 'texte_utilisation_moteur_syndiques_2' => 'Phương pháp này buộc SPIP đến viếng thường xuyên những website kết nối; việc này có thể làm giảm hiệu suất của website bạn.', 'texte_vide' => 'Trống rỗng', 'texte_vider_cache' => 'Dọn sạch cache', - 'titre_admin_effacer' => 'Bảo trì kỹ thuật', 'titre_admin_tech' => 'Bảo trì kỹ thuật', 'titre_admin_vider' => 'Bảo trì kỹ thuật', 'titre_cadre_afficher_article' => 'Liệt kê những bài', @@ -633,35 +532,20 @@ Bạn có thể cho phép cảnh báo hay không:', 'titre_naviguer_dans_le_site' => 'Xem trang web...', 'titre_nouvelle_rubrique' => 'Đề mục mới', 'titre_numero_rubrique' => 'SỐ THỨ TỰ ĐỀ MỤC:', - 'titre_page_admin_effacer' => 'Bảo trì kỹ thuật: xóa database', 'titre_page_articles_edit' => 'Bổ túc: @titre@', 'titre_page_articles_page' => 'Bài vỡ', 'titre_page_articles_tous' => 'Toàn bộ trang web', - 'titre_page_auteurs' => 'Khách', 'titre_page_calendrier' => 'Lịch @nom_mois@ @annee@', 'titre_page_config_contenu' => 'Cấu hình website', - 'titre_page_config_fonctions' => 'Cấu hình website', - 'titre_page_configuration' => 'Cấu hình website', - 'titre_page_controle_petition' => 'Tiếp theo Thỉnh nguyện thư', 'titre_page_delete_all' => 'xóa luôn và không lấy lại được', - 'titre_page_documents_liste' => 'Tài liệu của đề mục', - 'titre_page_index' => 'Vùng riêng của bạn', - 'titre_page_message_edit' => 'Viết thư tín', - 'titre_page_messagerie' => 'Thư tín của bạn', 'titre_page_recherche' => 'Kết quả tìm kiếm @recherche@', 'titre_page_statistiques_referers' => 'Thống kê (các điểm nối vào)', 'titre_page_upgrade' => 'nâng cấp SPIP', 'titre_publication_articles_post_dates' => 'Đăng tải bài vở có đề ngày', - 'titre_referencer_site' => 'Nối qua website:', - 'titre_rendez_vous' => 'VÔ SỔ LỊCH:', 'titre_reparation' => 'Sửa chữa', 'titre_suivi_petition' => 'Quản trị Thỉnh nguyện thư', - 'trad_article_inexistant' => 'Không có bài nào với số này', 'trad_article_traduction' => 'Tất cả ấn bản của bài này:', - 'trad_deja_traduit' => 'Bài này là bản dịch của bài hiện thời', 'trad_delier' => 'Đừng nối bài này qua bản dịch', # MODIF 'trad_lier' => 'Bài này là bản dịch của bài số', 'trad_new' => 'Dịch bài này' # MODIF ); - -?> diff --git a/www/ecrire/lang/ecrire_zh.php b/www/ecrire/lang/ecrire_zh.php index a3ff3ef7..d413bc55 100644 --- a/www/ecrire/lang/ecrire_zh.php +++ b/www/ecrire/lang/ecrire_zh.php @@ -1,9 +1,11 @@ '返回前页校验您所提供的信息.', 'avis_connexion_ldap_echec_3' => '请勿使用LDAP支持导入用户.', 'avis_deplacement_rubrique' => '注意! 该专栏包含 @contient_breves@ 简要@scb@: 如果您要移动它,请选择该确认框.', - 'avis_destinataire_obligatoire' => '发送消息前请选择接收者.', 'avis_erreur_connexion_mysql' => 'SQL连接失败', - 'avis_erreur_version_archive' => '注意! 文件 @archive@ 与您已安装的SPIP版本不一致 - 您面临一个大问题: 极有可能破坏数据库, - 引起站点的各种故障. 请勿提交您的导入请求. -

      - 详细信息,请看 - SPIP 文档.', # MODIF 'avis_espace_interdit' => '禁止区

      SPIP已安装.', # MODIF 'avis_lecture_noms_bases_1' => '安装程序无法读取已安装的数据库的名称.', 'avis_lecture_noms_bases_2' => '要么是数据库不可用,要么数据库的允许特性因安全原因被禁止 (这是多主机的的一个例子).', 'avis_lecture_noms_bases_3' => '第二种情况为使用您的用户名登录后的数据库是可用的:', - 'avis_non_acces_message' => '您无权查看此消息.', 'avis_non_acces_page' => '您无权查看此页.', 'avis_operation_echec' => '操作失败.', - 'avis_probleme_archive' => '读取文件@archive@失败 ', 'avis_suppression_base' => '注意, 数据删除不可挽回', - 'avis_version_mysql' => 'SQL (@version_mysql@) 版本不允许数据库表格的自动修复.', // B 'bouton_acces_ldap' => '添加LDAP访问 >>', # MODIF 'bouton_ajouter' => '添加', - 'bouton_ajouter_participant' => '添加参与者:', - 'bouton_annonce' => '声明', - 'bouton_checkbox_envoi_message' => '可以发消息', - 'bouton_checkbox_indiquer_site' => '您必须输入站点的名字', - 'bouton_checkbox_signature_unique_email' => '一个邮件地址只能有一个签名', - 'bouton_checkbox_signature_unique_site' => '一个站点只能有一个签名', 'bouton_demande_publication' => '请求发表文章', - 'bouton_effacer_index' => '删除索引', 'bouton_effacer_tout' => '删除所有', - 'bouton_envoi_message_02' => '发消息', 'bouton_envoyer_message' => '最后消息:发送', 'bouton_modifier' => '修改', - 'bouton_pense_bete' => '个人备注', - 'bouton_radio_activer_messagerie' => '激活内部消息', - 'bouton_radio_activer_messagerie_interne' => '激活内部消息', - 'bouton_radio_activer_petition' => '激活请求', 'bouton_radio_afficher' => '显示', 'bouton_radio_apparaitre_liste_redacteurs_connectes' => '显示在已连接的编辑者列表中', - 'bouton_radio_desactiver_messagerie' => '停用消息', 'bouton_radio_envoi_annonces_adresse' => '发送声明给下列地址:', 'bouton_radio_envoi_liste_nouveautes' => '发送最近新闻列表', 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => '不要出现在连接编辑者列表中', 'bouton_radio_non_envoi_annonces_editoriales' => '不发送任何编辑的声明', - 'bouton_radio_pas_petition' => '没有请求', - 'bouton_radio_petition_activee' => '激活请求', - 'bouton_radio_supprimer_petition' => '删除请求', 'bouton_redirection' => '重定向', 'bouton_relancer_installation' => '重新安装', 'bouton_suivant' => '下一步', 'bouton_tenter_recuperation' => '试图修复', 'bouton_test_proxy' => '测试代理', 'bouton_vider_cache' => '清空缓存', - 'bouton_voir_message' => '确认前预览', // C - 'cache_mode_compresse' => '缓存中的文件是以压缩方式存储。', - 'cache_mode_non_compresse' => '缓存中的文件是以非压缩方式存储。', 'cache_modifiable_webmestre' => '这些参数可以被管理员修改。', # MODIF 'calendrier_synchro' => '如果您使用的日历软件与iCal兼容, 您可以同步站点信息.', @@ -106,7 +79,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'entree_login' => '登录用户名', 'entree_login_connexion_1' => '连接登录', 'entree_login_connexion_2' => '(有时对应您的FTP登录用户名;有时留空)', - 'entree_login_ldap' => '初始LDAP登录', 'entree_mot_passe' => '密码', 'entree_mot_passe_1' => '连接密码', 'entree_mot_passe_2' => '(有时对应您的FTP登录用户名;有时留空)', @@ -126,7 +98,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'ical_info2' => '要得到更多的信息, 请访问 SPIP 文档.', # MODIF 'ical_info_calendrier' => '在您的配置中有两个日历. 第一个是站点地图,它显示所有已发布的文章. 第二个包含了可编辑的声明,作为您最后的私有消息: 由于您可以随时通过更新密码来更改您的个人钥匙,它总是为您保留的.', 'ical_methode_http' => '下载', - 'ical_methode_webcal' => '同步 (webcal://)', + 'ical_methode_webcal' => '同步 (webcal://)', # MODIF 'ical_texte_js' => '一行javascript语句允许在任何您参与的站点显示您在本站最新发表的文章.', 'ical_texte_prive' => '该日历严格限于个人使用, 提醒您在该站点上的个人活动 (任务,个人约会,提交的文章和简要...).', 'ical_texte_public' => '该日历允许您追踪站点的公共活动 (发布的文章和简要).', @@ -142,9 +114,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_creer_auteur' => '新建一个作者并与该文章关联', 'icone_creer_mot_cle' => '新建一个关键词并与该文章关联', 'icone_creer_rubrique_2' => '新建专栏', - 'icone_envoyer_message' => '发送这个消息', 'icone_modifier_article' => '修改文章', - 'icone_modifier_message' => '修改消息', 'icone_modifier_rubrique' => '修改此栏', 'icone_retour' => '返回', 'icone_retour_article' => '返回文章', @@ -154,10 +124,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => '使签名有效', 'image_administrer_rubrique' => '您可以管理该栏', 'info_1_article' => '1篇文章', - 'info_1_site' => '1个站点', 'info_activer_cookie' => '您可以激活相应的cookie,以便让您轻松转换公共站点为私私人站点.', - 'info_admin_gere_rubriques' => '该管理员管理以下专栏:', - 'info_admin_gere_toutes_rubriques' => '该管理员管理 所有专栏.', # MODIF 'info_administrateur' => '管理员', 'info_administrateur_1' => '管理员', 'info_administrateur_2' => '站点 (谨慎使用)', @@ -167,15 +134,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_administrer_rubrique' => '您可以管理该栏', 'info_adresse' => '给地址:', 'info_adresse_url' => '您的公众站点URL地址', - 'info_afficher_visites' => '显示访问者:', 'info_aide_en_ligne' => 'SPIP在线帮助', 'info_ajout_image' => '当您添加图像作为文章的附加文档, SPIP 能根据插入的图片自动创建缩略图. 这将允许, 例如, 自动创建 画廊或相册.', - 'info_ajout_participant' => '下列参考者已经加入:', 'info_ajouter_rubrique' => '加入其它专栏进行管理:', 'info_annonce_nouveautes' => '最近的新闻声明', - 'info_anterieur' => '返回', 'info_article' => '文章', 'info_article_2' => '文章', 'info_article_a_paraitre' => '过期文章发表', @@ -183,10 +147,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_articles_2' => '文章', 'info_articles_auteur' => '该作者的文章', 'info_articles_trouves' => '找到的文章', - 'info_articles_trouves_dans_texte' => '找到的文章 (文本)', 'info_attente_validation' => '您的文章正在等候确认中', 'info_aujourdhui' => '今天:', - 'info_auteur_message' => '消息发送者:', 'info_auteurs' => '作者', 'info_auteurs_par_tri' => '作者 @partri@', 'info_auteurs_trouves' => '找到的作者', @@ -219,15 +181,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_date_publication_anterieure' => '更早出版的日期:', # MODIF 'info_date_referencement' => '参考站点日期:', 'info_derniere_etape' => '最后一步: 完成了!', # MODIF - 'info_derniers_articles_publies' => '你最近出版的文章', - 'info_desactiver_messagerie_personnelle' => '你可激活或使站点个人消息不可用.', 'info_descriptif' => '描述:', 'info_discussion_cours' => '讨论进展中', 'info_ecrire_article' => '在能够发表文章之前,您必须建立至少一个专栏.', 'info_email_envoi' => '发送者电子邮件地址 (可选)', 'info_email_envoi_txt' => '输入发送者电子邮件地址,发送电子邮件将用这个地址, 接收者的地址将做为发送者的地址 :', 'info_email_webmestre' => 'Web站点管理员的电子邮件地址 (可选)', # MODIF - 'info_entrer_code_alphabet' => '输入要用的字符集:', 'info_envoi_email_automatique' => '自动邮寄', 'info_envoyer_maintenant' => '现在发送', 'info_etape_suivante' => '到下一步', @@ -240,7 +199,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 确认的声明.', 'info_fichiers_authent' => '认证文件 ".htpasswd"', 'info_forums_abo_invites' => '您的网站包含要求注册的公共论坛;所以公共网站的访客将被要求注册。', - 'info_gauche_admin_effacer' => '只有管理员才有权访问该页.

      它提供访问不同的技术维护任务. 其中有些需要特殊认证,必须通过FTP访问站点.', # MODIF 'info_gauche_admin_tech' => '只有管理者才有权访问这页.

      它提供多种多种 维护任务. 它们有一些需更高的认证 (通过FTP访问站点).', # MODIF @@ -251,21 +209,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 每一个的状态用路标的颜色标识(作者 = 绿色; 管理员 = 黄色).', # MODIF 'info_gauche_auteurs_exterieurs' => '外部作者用蓝色图标标识, 不能访问站点; 通过垃圾箱删除作者.', # MODIF 'info_gauche_messagerie' => '消息允许你在作者中交换消息, 为保护备忘录(给个人用的) 或在主页私有区上显示声明(如果你是管理者).', - 'info_gauche_numero_auteur' => '作者号:', 'info_gauche_statistiques_referers' => '页面显示 引用列表, 例如. 包含你站点的链接, 只有今天: 列表每24小时都要更新.', # MODIF 'info_gauche_visiteurs_enregistres' => '在这儿你将找到在站点公共区 注册的访问者(订阅论坛).', 'info_generation_miniatures_images' => '产生像册', - 'info_gerer_trad' => '管理翻译连接?', 'info_hebergeur_desactiver_envoi_email' => '一些主机禁止自动邮件发送 . 这种情况下SPIP的 以下特性不能用.', 'info_hier' => '昨天:', - 'info_historique_activer' => '使用修订跟踪功能。', - 'info_historique_affiche' => '显示这一版本。', - 'info_historique_comparaison' => '比较', - 'info_historique_desactiver' => '不使用修订跟踪功能', - 'info_historique_texte' => '修订跟踪功能可以保存对一篇文章内容所做的所有的修改,并且显示前后不同版本之间的区别。', 'info_identification_publique' => '你的公开标识...', 'info_image_process' => '点击相关图片选取最佳的标志制作方法.', 'info_image_process2' => '注意 如果没有任何图片显示,那么储存您的网站的服务器不支持该工具。如果您希望使用这些功能,请联系您的服务器的技术支持,请他们安装《GD》或者《Imagick》扩展。', # MODIF @@ -282,8 +233,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_login_trop_court' => '登录名太短.', 'info_maximum' => '最大:', 'info_meme_rubrique' => '在同一栏目', - 'info_message' => '消息来自', - 'info_message_efface' => '删除的消息', 'info_message_en_redaction' => '你的进展中的消息', 'info_message_technique' => '技术消息:', 'info_messagerie_interne' => '内部消息', @@ -296,20 +245,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_modifier_rubrique' => '修改专栏:', 'info_modifier_titre' => '修改: @titre@', 'info_mon_site_spip' => '我的 SPIP 站点', - 'info_mot_sans_groupe' => '(不在组中的关键词...)', - 'info_moteur_recherche' => '集成的搜索引擎', 'info_moyenne' => '平均:', - 'info_multi_articles' => '使文章的语言菜单可用?', 'info_multi_cet_article' => '文章的语言:', 'info_multi_langues_choisies' => '请在站点中选择以下语言使它们对编辑者可用. 你的站点已经用了如下语言(在顶端列表),它们不能设为未激活.', - 'info_multi_rubriques' => '激活专栏中的语言菜单?', 'info_multi_secteurs' => '... 只为站点根目录下的专栏?', 'info_nom' => '名字', 'info_nom_destinataire' => '接收者名字', 'info_nom_site' => '你的站点名', 'info_nombre_articles' => '@nb_articles@ 文章,', - 'info_nombre_partcipants' => '讨论的参考者:', 'info_nombre_rubriques' => '专栏@nb_rubriques@,', 'info_nombre_sites' => '@nb_sites@ 站点,', 'info_non_deplacer' => '不要移动...', @@ -319,36 +263,26 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_non_modifiable' => '不能修改', 'info_non_suppression_mot_cle' => '我不想删除关键词.', 'info_notes' => '脚注', - 'info_nouveaux_message' => '新消息', 'info_nouvel_article' => '新文章', 'info_nouvelle_traduction' => '新译文:', 'info_numero_article' => '文章号:', 'info_obligatoire_02' => '[必须的]', # MODIF 'info_option_accepter_visiteurs' => '允许公共网站访问者注册。', - 'info_option_faire_suivre' => '转寄论坛消息给作者', 'info_option_ne_pas_accepter_visiteurs' => '拒绝公共网站访问者注册。', 'info_options_avancees' => '高级选项', - 'info_ortho_activer' => '使用拼写检查功能', - 'info_ortho_desactiver' => '不使用拼写检查功能', 'info_ou' => '或...', 'info_page_interdite' => '禁止页', 'info_par_nombre_article' => '(按文章数)', # MODIF 'info_passe_trop_court' => '密码过短.', 'info_passes_identiques' => '两个密码不一致.', - 'info_pense_bete_ancien' => '你的旧备忘', # MODIF 'info_plus_cinq_car' => '多于5 字符', 'info_plus_cinq_car_2' => '(多于 5 字符)', 'info_plus_trois_car' => '(多于 3 字符)', 'info_popularite' => '流行: @popularite@; 访问: @visites@', - 'info_popularite_4' => '流行: @popularite@; 访问: @visites@', 'info_post_scriptum' => '后记', 'info_post_scriptum_2' => '后记:', 'info_pour' => '为', - 'info_preview_admin' => '只有管理员可以预览网站', - 'info_preview_comite' => '所有的编辑均可预览网站', - 'info_preview_desactive' => '完全关闭预览功能', - 'info_preview_texte' => '可以预览整个网站,就像所有的文章和短消息(至少有 « 建议发表 »资格)都被发表了一样。向管理员,编辑开放这一功能,还是不向任何人开放?', - 'info_principaux_correspondants' => '你主要的通讯者', + 'info_preview_texte' => '可以预览整个网站,就像所有的文章和短消息(至少有 « 建议发表 »资格)都被发表了一样。向管理员,编辑开放这一功能,还是不向任何人开放?', # MODIF 'info_procedez_par_etape' => '请一步步进行下去', 'info_procedure_maj_version' => '升级过程应该适应 SPIP的新版本的数据库运行.', @@ -364,12 +298,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 这样, 自动注册将 不生效.', # MODIF - 'info_question_utilisation_moteur_recherche' => '你希望SPIP集成搜索引擎吗? - (使它不可用能加速系统的性能.)', 'info_racine_site' => '站点根', 'info_recharger_page' => '请重新载入该页.', - 'info_recherche_auteur_a_affiner' => '太多结果"@cherche_auteur@"; 请重定义搜索.', - 'info_recherche_auteur_ok' => '几个编辑者找到了 "@cherche_auteur@":', 'info_recherche_auteur_zero' => ' "@cherche_auteur@"没有结果.', # MODIF 'info_recommencer' => '请再试.', 'info_redacteur_1' => 'Rédacteur', @@ -386,7 +316,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_rubriques' => '专栏', 'info_rubriques_02' => '专栏', 'info_rubriques_trouvees' => '找到的专栏', - 'info_rubriques_trouvees_dans_texte' => '找到的专栏(在文章中)', 'info_sans_titre' => '无标题', 'info_selection_chemin_acces' => '从目录的访问路径选择 :', 'info_signatures' => '签名', @@ -399,11 +328,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_sites_lies_mot' => '与关键词关联的参考站点', 'info_sites_proxy' => '使用代理', 'info_sites_trouves' => '站点找到了', - 'info_sites_trouves_dans_texte' => '站点找到了 (在正文)', 'info_sous_titre' => '子标题:', 'info_statut_administrateur' => '管理者', 'info_statut_auteur' => '作者状态:', # MODIF - 'info_statut_efface' => '删除', 'info_statut_redacteur' => '编辑者', 'info_statut_utilisateurs_1' => '导入用户的缺省状态', 'info_statut_utilisateurs_2' => 'Choose the status that is attributed to the persons present in the LDAP directory when they connect for the first time. Later, you can modify this value for each author on a case by case basis.', @@ -421,7 +348,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_tous_articles_en_redaction' => '进展中的所有文章', 'info_tous_articles_presents' => '该专栏中所有发表的文章', 'info_tous_les' => '每一个:', - 'info_tous_redacteurs' => '对所有编辑者的声明', 'info_tout_site' => '整个站点', 'info_tout_site2' => '该文章尚未译成中文.', 'info_tout_site3' => '文章已经译为本语言,但由参考文章带来一些变动.译文应更新.', @@ -436,7 +362,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_une_rubrique' => '一个专栏,', 'info_une_rubrique_02' => '1个专栏', 'info_url' => 'URL:', # MODIF - 'info_url_site' => '站点 URL:', # MODIF 'info_urlref' => '超链接:', 'info_utilisation_spip' => 'SPIP 准备使用...', 'info_visites_par_mois' => '每月显示:', @@ -450,15 +375,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_activer_messages_avertissement' => '激活警告消息', 'item_administrateur_2' => '管理者', 'item_afficher_calendrier' => '在日历中显示', - 'item_autoriser_documents_joints' => '认证文章附加的文档', - 'item_autoriser_documents_joints_rubriques' => '认证专栏中的文档', 'item_choix_administrateurs' => '管理者', 'item_choix_generation_miniature' => '自动产生像片册.', 'item_choix_non_generation_miniature' => '不产生像片册.', 'item_choix_redacteurs' => '编辑者', 'item_choix_visiteurs' => '公共站点的访问者', 'item_creer_fichiers_authent' => '创建 .htpasswd 文件', - 'item_limiter_recherche' => '限制搜索你站点包括的内容', 'item_login' => '登录', 'item_mots_cles_association_articles' => '文章', 'item_mots_cles_association_rubriques' => '相关专栏', @@ -467,34 +389,24 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_non_accepter_inscriptions' => '不允许注册', 'item_non_activer_messages_avertissement' => '没有警告信息', 'item_non_afficher_calendrier' => '在日历中不显示', - 'item_non_autoriser_documents_joints' => '不论证文章中文档', - 'item_non_autoriser_documents_joints_rubriques' => '不认证专栏中的文档', 'item_non_creer_fichiers_authent' => '不创建这些文件', - 'item_non_gerer_statistiques' => '不管理统计表', - 'item_non_limiter_recherche' => '扩充搜索到参考站点', 'item_non_publier_articles' => '不发表出版日期前的文章.', - 'item_non_utiliser_moteur_recherche' => '不使用引擎', 'item_nouvel_auteur' => '新作者', 'item_nouvelle_rubrique' => '新专栏', 'item_oui' => '是', 'item_publier_articles' => '忽略出版日期出版文章.', 'item_reponse_article' => '回复文章', - 'item_utiliser_moteur_recherche' => '使用搜索引擎', 'item_visiteur' => '访问者', // J 'jour_non_connu_nc' => '不知道', // L - 'lien_ajout_destinataire' => '加接收者', 'lien_ajouter_auteur' => '加作者', - 'lien_ajouter_participant' => '添加一个新的参与者', 'lien_email' => '电子邮件', 'lien_nom_site' => '站点名:', 'lien_retirer_auteur' => '移去作者', - 'lien_retrait_particpant' => '移去参与者', 'lien_site' => '站点', - 'lien_supprimer_rubrique' => '删除此栏', 'lien_tout_deplier' => '展开所有', 'lien_tout_replier' => '伸缩所有', 'lien_trier_nom' => '按名字排序', @@ -520,6 +432,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // O 'onglet_repartition_actuelle' => '现在', + // R + 'required' => '[必须的]', # MODIF + // S 'statut_admin_restreint' => '(受限制的管理)', # MODIF @@ -542,15 +457,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_article_virtuel_reference' => '虚文章 :在SPIP中引用文档, 但是重定向到其它的URL. 移去链接, 删除以下 URL.', 'texte_aucun_resultat_auteur' => '"@cherche_auteur@"没有结果.', 'texte_auteur_messagerie' => '站点能连续监控连接编辑列表, 它允许实时交换信息 (如果以上消息被禁, 连接编辑列表自身禁用). 你能决定不出现在列表中 (其他用户在列表中" 无法 "看到你)', # MODIF - 'texte_auteur_messagerie_1' => '本站点开放注册会员的短消息及私人论坛的交流.您可以选择不参与讨论交流.', 'texte_auteurs' => '作者', 'texte_choix_base_1' => '选择你的数据库:', 'texte_choix_base_2' => 'SQL 服务器包括几个数据库.', 'texte_choix_base_3' => '选择 以下主机给你提供的这个:', # MODIF - 'texte_commande_vider_tables_indexation' => '使用命令清空被SPIP集成的搜索引擎用到的索引表 - . 它将允许你保留磁盘空间 - .', - 'texte_compresse_ou_non' => '(这个被压缩或没有)', 'texte_compte_element' => '@count@ 元素', 'texte_compte_elements' => '@count@ 元素', 'texte_connexion_mysql' => '根据你主机提到的信息: 它将给你, 如果你的主机支持 SQL,SQL 服务器的连接码.', # MODIF @@ -566,10 +476,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_date_publication_anterieure' => '更早的出版日期', # MODIF 'texte_date_publication_anterieure_nonaffichee' => '隐藏更早的出版日期.', # MODIF 'texte_date_publication_article' => '在线出版日期:', # MODIF - 'texte_descriptif_petition' => '请求说明', 'texte_descriptif_rapide' => '主要描述', 'texte_effacer_base' => '删除SPIP 数据库', - 'texte_effacer_donnees_indexation' => '删除索引文件', 'texte_en_cours_validation' => '下列文章和新闻提交出版. 请不要犹豫通过论坛发表您的观点.', # MODIF 'texte_enrichir_mise_a_jour' => '你可以丰富你的文本,通过«文字快捷方式».', 'texte_fichier_authent' => '让SPIP创建特殊的.htpasswd @@ -589,29 +497,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( ; 无论如何, 我们建议你试试不同的字符符集 . 如果你修改参数, 不要忘记, 根据 (#CHARSET 标记)协调公共站点.', # MODIF - 'texte_jeu_caractere_2' => '设置没有生效. - 因此, 已输入的文本可能不能正常显示 - 在修改设置后. 无论如何, - 你可返回到以前的设置.', # MODIF - 'texte_lien_hypertexte' => '(如果消息引用了一个WEB站点的文章, 或页面, 请提供页面标题和 URL.)', 'texte_login_ldap_1' => '(匿名访问留空或输入完整路径, 例如 «uid=smith, ou=users, dc=my-domain, dc=com».)', 'texte_login_precaution' => '警告 ! 这是你正连接的登录. 小心使用这个表单...', - 'texte_message_edit' => '警告: 消息可被所有站点管理员管理, 对所有编辑显示. 使用声明只加重了站点的重要事件.', 'texte_mise_a_niveau_base_1' => '你已更新 SPIP 文件. 现在你必须更新站点 数据库.', 'texte_modifier_article' => '修改文章:', - 'texte_moteur_recherche_active' => '搜索引擎激活了. - 如果你执行快速索引使用这个命令 (例如恢复 - 备份后). 你应注意文章用正常方式修改 - (从SPIP界面) 被重新正常索引 - : 因此这个命令只在异常情况下有用.', - 'texte_moteur_recherche_non_active' => '搜索引擎未激活.', 'texte_multilinguisme' => '如果您希望用复杂导航管理多语言文章, 您可以根据站点的组织, 在文章及/或专栏中添加语言选择菜单.', # MODIF 'texte_multilinguisme_trad' => '同样,在不同的文章翻译中你可以激活连接管理系统.', # MODIF 'texte_non_compresse' => '未解压 (你的服务器不支持)', - 'texte_nouveau_message' => '新消息', 'texte_nouvelle_version_spip_1' => '您已经安装了新版SPIP.', 'texte_nouvelle_version_spip_2' => '新版本需要比通常更彻底的更新. 如果你是站点管理员, 请删除目录中 ecrire文件 inc_connect.php3 并重新安装更新你的数据库连接参数.

      (NB.: 如果你忘记了连接参数, 在删除前看看inc_connect.php3 ...)', # MODIF 'texte_operation_echec' => '返回前页,选择另一个数据库或新建一个. 确认你主机提供的信息.', @@ -630,7 +525,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_rappel_selection_champs' => '[记住正确选择区域.]', 'texte_recalcul_page' => '如果你只要刷新 这页, 最好在公共区做,使用按钮 « refresh ».', - 'texte_recapitiule_liste_documents' => '该页将汇总各专栏中的文档. 如需修改各个文档的信息, 单击所属专栏页面的链接.', 'texte_recuperer_base' => '修复数据库', 'texte_reference_mais_redirige' => '你的SPIP参考的文章, 但是重定向到别的 URL.', 'texte_requetes_echouent' => '当一些 SQL 查询失败并且没有任何原因显示 @@ -663,7 +557,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 强制你刷新所有的页面.', 'texte_sur_titre' => '顶标题', 'texte_table_ok' => ': 表好了.', - 'texte_tables_indexation_vides' => '引擎的索引表为空.', 'texte_tentative_recuperation' => '试图修复', 'texte_tenter_reparation' => '试图修复数据库', 'texte_test_proxy' => '若使用代理, 输入要测试的 @@ -678,13 +571,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 该选项为避免不合时宜的警告信息缺省 设定为 不可用.', - 'texte_trop_resultats_auteurs' => '搜索到 "@cherche_auteur@"太多结果; 请重新定义搜索.', - 'texte_unpack' => '正下载最新版本', - 'texte_utilisation_moteur_syndiques' => '当你使用集成到SPIP的搜索引擎, 你可以执行搜索携带站点和不同方式联合的文章.
      最简单的是只搜索文章的标题和描述.
      第二种方法, 更强有力, 允许SPIP搜索参考站点的文本. 如果你引用了站点, SPIP 将执行搜索站点的文本.', # MODIF - 'texte_utilisation_moteur_syndiques_2' => '该方法强制 SPIP 定期访问参考站点,这将使你自己的站点性能降低.', 'texte_vide' => '清空', 'texte_vider_cache' => '清空缓存', - 'titre_admin_effacer' => '技术维护', 'titre_admin_tech' => '技术维护', 'titre_admin_vider' => '技术维护', 'titre_cadre_afficher_article' => '显示文章:', @@ -704,35 +592,20 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_naviguer_dans_le_site' => '浏览站点...', 'titre_nouvelle_rubrique' => '新专栏', 'titre_numero_rubrique' => '专栏编号:', - 'titre_page_admin_effacer' => '技术维护:删除数据库', 'titre_page_articles_edit' => '修改: @titre@', 'titre_page_articles_page' => '文章', 'titre_page_articles_tous' => '整个站点', - 'titre_page_auteurs' => '访问者', 'titre_page_calendrier' => '日历 @nom_mois@ @annee@', 'titre_page_config_contenu' => '站点配置', - 'titre_page_config_fonctions' => '站点配置', - 'titre_page_configuration' => '站点配置', - 'titre_page_controle_petition' => '跟踪请求', 'titre_page_delete_all' => '所有和不能撤回的删除', - 'titre_page_documents_liste' => '专栏文档', - 'titre_page_index' => '您的私有区', - 'titre_page_message_edit' => '写消息', - 'titre_page_messagerie' => '您的消息', 'titre_page_recherche' => '搜索结果@recherche@', 'titre_page_statistiques_referers' => '统计(引入链接)', 'titre_page_upgrade' => 'SPIP升级 ', 'titre_publication_articles_post_dates' => '发表日期文章的出版物', - 'titre_referencer_site' => '参考站点:', - 'titre_rendez_vous' => '约会:', 'titre_reparation' => '修复', 'titre_suivi_petition' => '跟踪请求', - 'trad_article_inexistant' => '没有文章为该号', 'trad_article_traduction' => '这篇文章的所有版本:', - 'trad_deja_traduit' => '该文是一篇译文', # MODIF 'trad_delier' => '取消这篇文章到它的译文的链接', # MODIF 'trad_lier' => '该篇文章译自文章No.', 'trad_new' => '为该篇文章写一篇新译文' # MODIF ); - -?> diff --git a/www/ecrire/lang/public.xml b/www/ecrire/lang/public.xml index 005b7f1c..2d8f265e 100644 --- a/www/ecrire/lang/public.xml +++ b/www/ecrire/lang/public.xml @@ -1,185 +1,204 @@ - - - + + + - - + + - + - - + + - + - + + - + - - + + + - - + + - + - + - + - + - - + + - - - + + + - - - - - + + + + + - - + + - - + + - - - - + + + + - + - - + + - - + + - + + - + - + - - - + - - - - + + + - + + + + - - + - + + - + - + + - + - - + - + + - - + - + + - + - + - - + - - + + - + + + - + - - - - + - + + + + + - + - + - + - - + - + + - + - + + - - + - - + - - + + - - + + - - + + + + - + + - - + + - + - + + + - - + - + - + + - + - + - + - + - + - + + - - + + + + + + + + + + diff --git a/www/ecrire/lang/public_ar.php b/www/ecrire/lang/public_ar.php index a82ca522..1d499ef2 100644 --- a/www/ecrire/lang/public_ar.php +++ b/www/ecrire/lang/public_ar.php @@ -1,9 +1,11 @@ 'عرض مباشر', 'voir_squelette' => 'عرض الصفحة النموذجية لهذه الصفحة' ); - -?> diff --git a/www/ecrire/lang/public_ast.php b/www/ecrire/lang/public_ast.php index fc3d0ec6..dfcd9579 100644 --- a/www/ecrire/lang/public_ast.php +++ b/www/ecrire/lang/public_ast.php @@ -1,9 +1,11 @@ 'Velo en llínia', 'voir_squelette' => 'ver la cadarma d’esta páxina' ); - -?> diff --git a/www/ecrire/lang/public_ay.php b/www/ecrire/lang/public_ay.php index 7f44f98d..e59839a1 100644 --- a/www/ecrire/lang/public_ay.php +++ b/www/ecrire/lang/public_ay.php @@ -1,9 +1,11 @@ 'Naktata uñjaña', 'voir_squelette' => 'Aka laphi uñnaqan ch’aka ch’aka uñjaña' ); - -?> diff --git a/www/ecrire/lang/public_bg.php b/www/ecrire/lang/public_bg.php index 1a9ed83c..4bb6619e 100644 --- a/www/ecrire/lang/public_bg.php +++ b/www/ecrire/lang/public_bg.php @@ -1,9 +1,11 @@ 'Виж как ще изглежда', 'voir_squelette' => 'Изтеглете шаблона на тази страница' ); - -?> diff --git a/www/ecrire/lang/public_br.php b/www/ecrire/lang/public_br.php old mode 100755 new mode 100644 index 133bb008..d8dea13e --- a/www/ecrire/lang/public_br.php +++ b/www/ecrire/lang/public_br.php @@ -1,15 +1,18 @@ 'Degemer al lec’hienn', # MODIF - 'articles' => 'Pennadoù', + 'accueil_site' => 'Degemer al lec’hienn', + 'article' => 'Pennad-skrid', + 'articles' => '@nb@ pennad', 'articles_auteur' => 'Pennadoù all ar skridaozer-mañ', 'articles_populaires' => 'Pennadoù lennet ar muiañ', 'articles_rubrique' => 'Pennadoù ar rubrikenn-mañ', @@ -18,6 +21,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'aucun_site' => 'N’eus lec’hienn ebet er chomlec’h-mañ', 'aucune_breve' => 'N’eus berrskrid ebet er chomlec’h-mañ', 'aucune_rubrique' => 'N’eus rubrikenn ebet er chomlec’h-mañ', + 'auteur' => 'Aozer', 'autres' => 'Re all', 'autres_breves' => 'Berrskridoù all', 'autres_groupes_mots_clefs' => 'Strolladoù gerioù-stur all', @@ -28,6 +32,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // C 'commenter_site' => 'Ober evezhiadennoù diwar-benn al lec’hienn-mañ', + 'contact' => 'Darempred', 'copie_document_impossible' => 'N’eo ket posupl eilañ an teul', // D @@ -62,8 +67,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'meme_rubrique' => 'Er rubrikenn-mañ', 'memes_auteurs' => 'Gant ar skridaozerien-mañ', 'message' => 'Kemennadenn', - 'messages_forum' => 'Kemennadennoù forom', # MODIF + 'messages_forum' => 'Kemennadennoù', 'messages_recents' => 'Kemennadennoù forom diwezhañ', + 'mots_clef' => 'Ger-alc’hwez', 'mots_clefs' => 'Gerioù-stur', 'mots_clefs_meme_groupe' => 'Gerioù-stur er strollad-mañ', @@ -106,12 +112,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // T 'texte_lettre_information' => 'Setu lizher kelaouiñ al lec’hienn', - 'texte_lettre_information_2' => 'Enni emañ ar pennadoù hag ar berrskridoù embannet abaoe', # MODIF + 'texte_lettre_information_2' => 'El lizher-mañ emañ ar pennadoù hag ar berrskridoù embannet abaoe', // V 'ver_imprimer' => 'Stumm da voullañ', 'voir_en_ligne' => 'Gwelet enlinenn', 'voir_squelette' => 'Gwelet framm ar bajenn-mañ' ); - -?> diff --git a/www/ecrire/lang/public_bs.php b/www/ecrire/lang/public_bs.php index 4d663916..786895ab 100644 --- a/www/ecrire/lang/public_bs.php +++ b/www/ecrire/lang/public_bs.php @@ -1,9 +1,11 @@ 'Verzija za printanje', 'voir_en_ligne' => 'Pogledati online' ); - -?> diff --git a/www/ecrire/lang/public_ca.php b/www/ecrire/lang/public_ca.php index 50b1e912..40c4b374 100644 --- a/www/ecrire/lang/public_ca.php +++ b/www/ecrire/lang/public_ca.php @@ -1,14 +1,16 @@ 'Arrel de la web', # MODIF + 'accueil_site' => 'Inici', 'article' => 'Article', 'articles' => 'Articles', 'articles_auteur' => 'Articles d’aquest autor', @@ -117,5 +119,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'voir_en_ligne' => 'Veure en línia', 'voir_squelette' => 'descarregar l’esquelet d’aquesta pàgina' ); - -?> diff --git a/www/ecrire/lang/public_co.php b/www/ecrire/lang/public_co.php index d68fd964..dd36a582 100644 --- a/www/ecrire/lang/public_co.php +++ b/www/ecrire/lang/public_co.php @@ -1,9 +1,11 @@ 'Vede in ligna', 'voir_squelette' => 'vede u mudellu di sta pàgina' ); - -?> diff --git a/www/ecrire/lang/public_cpf.php b/www/ecrire/lang/public_cpf.php index 5b103196..7dd375c9 100644 --- a/www/ecrire/lang/public_cpf.php +++ b/www/ecrire/lang/public_cpf.php @@ -1,9 +1,11 @@ 'Anon vwar an liyn', 'voir_squelette' => 'Apiy po télésarz léskélet lapaz-la' ); - -?> diff --git a/www/ecrire/lang/public_cpf_hat.php b/www/ecrire/lang/public_cpf_hat.php index 811009d2..79fb1879 100644 --- a/www/ecrire/lang/public_cpf_hat.php +++ b/www/ecrire/lang/public_cpf_hat.php @@ -1,9 +1,11 @@ 'Gad an liy', 'voir_squelette' => 'kou je sou léskelèt paj-la' ); - -?> diff --git a/www/ecrire/lang/public_cs.php b/www/ecrire/lang/public_cs.php index 462d8baa..42cc7a33 100644 --- a/www/ecrire/lang/public_cs.php +++ b/www/ecrire/lang/public_cs.php @@ -1,9 +1,11 @@ 'Podívejte se online', 'voir_squelette' => 'Zobrazit šablonu této stránky' ); - -?> diff --git a/www/ecrire/lang/public_da.php b/www/ecrire/lang/public_da.php index 13cda2b6..ab5ee903 100644 --- a/www/ecrire/lang/public_da.php +++ b/www/ecrire/lang/public_da.php @@ -1,9 +1,11 @@ 'Se online', 'voir_squelette' => 'Hent skabelonen til denne side' ); - -?> diff --git a/www/ecrire/lang/public_de.php b/www/ecrire/lang/public_de.php index c1f35556..aab86edc 100644 --- a/www/ecrire/lang/public_de.php +++ b/www/ecrire/lang/public_de.php @@ -1,9 +1,11 @@ 'Online ansehen', 'voir_squelette' => 'Layoutvorlage dieser Seite ansehen' ); - -?> diff --git a/www/ecrire/lang/public_en.php b/www/ecrire/lang/public_en.php index 60457075..ad0b75ef 100644 --- a/www/ecrire/lang/public_en.php +++ b/www/ecrire/lang/public_en.php @@ -1,9 +1,11 @@ 'View online', 'voir_squelette' => 'show the template of this page' ); - -?> diff --git a/www/ecrire/lang/public_eo.php b/www/ecrire/lang/public_eo.php index b811c3ab..d28dbb1c 100644 --- a/www/ecrire/lang/public_eo.php +++ b/www/ecrire/lang/public_eo.php @@ -1,9 +1,11 @@ 'Vidi konektite', 'voir_squelette' => 'vidi la skeleton de tiu paĝo' ); - -?> diff --git a/www/ecrire/lang/public_es.php b/www/ecrire/lang/public_es.php index 4bdff39c..9db91462 100644 --- a/www/ecrire/lang/public_es.php +++ b/www/ecrire/lang/public_es.php @@ -1,9 +1,11 @@ 'Ver en línea', 'voir_squelette' => 'ver el esqueleto de esta página' ); - -?> diff --git a/www/ecrire/lang/public_eu.php b/www/ecrire/lang/public_eu.php index 9eeedb89..dd312442 100644 --- a/www/ecrire/lang/public_eu.php +++ b/www/ecrire/lang/public_eu.php @@ -1,9 +1,11 @@ 'Linean ikusi', 'voir_squelette' => 'Orri hunen eskeletoa ikusi' ); - -?> diff --git a/www/ecrire/lang/public_fa.php b/www/ecrire/lang/public_fa.php index 91d3c80a..926e1a09 100644 --- a/www/ecrire/lang/public_fa.php +++ b/www/ecrire/lang/public_fa.php @@ -1,9 +1,11 @@ 'آنلاين بنگريد', 'voir_squelette' => 'اسكلت اين صفحه را ببينيد' ); - -?> diff --git a/www/ecrire/lang/public_fon.php b/www/ecrire/lang/public_fon.php index 2b39b7e9..aae712b4 100644 --- a/www/ecrire/lang/public_fon.php +++ b/www/ecrire/lang/public_fon.php @@ -1,9 +1,11 @@ 'kpɔn Gblogbloji', 'voir_squelette' => 'Sɛ titomɛ wema élɔ tɔn do ' ); - -?> diff --git a/www/ecrire/lang/public_fr.php b/www/ecrire/lang/public_fr.php index 5b5a5e59..a464586c 100644 --- a/www/ecrire/lang/public_fr.php +++ b/www/ecrire/lang/public_fr.php @@ -1,7 +1,9 @@ 'Voir en ligne', 'voir_squelette' => 'voir le squelette de cette page' ); - -?> diff --git a/www/ecrire/lang/public_fr_fem.php b/www/ecrire/lang/public_fr_fem.php old mode 100755 new mode 100644 index 641ae2c9..b150221c --- a/www/ecrire/lang/public_fr_fem.php +++ b/www/ecrire/lang/public_fr_fem.php @@ -1,9 +1,11 @@ 'Accueil', 'article' => 'Article', 'articles' => 'Articles', - 'articles_auteur' => 'Articles de cette auteure', + 'articles_auteur' => 'Articles de cette autrice', 'articles_populaires' => 'Articles les plus populaires', 'articles_rubrique' => 'Articles de cette rubrique', 'aucun_article' => 'Il n’y a pas d’article à cette adresse', - 'aucun_auteur' => 'Il n’y a pas d’auteure à cette adresse', + 'aucun_auteur' => 'Il n’y a pas d’autrice à cette adresse', 'aucun_site' => 'Il n’y a pas de site à cette adresse', 'aucune_breve' => 'Il n’y a pas de brève à cette adresse', 'aucune_rubrique' => 'Il n’y a pas de rubrique à cette adresse', - 'auteur' => 'Auteure', + 'auteur' => 'Autrice', 'autres' => 'Autres', 'autres_breves' => 'Autres brèves', 'autres_groupes_mots_clefs' => 'Autres groupes de mots-clés', @@ -61,9 +63,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'lien_connecter' => 'Se connecter', // M - 'meme_auteur' => 'De la même auteure', + 'meme_auteur' => 'De la même autrice', 'meme_rubrique' => 'Dans la même rubrique', - 'memes_auteurs' => 'Des mêmes auteures', + 'memes_auteurs' => 'Des mêmes autrices', 'message' => 'Message', 'messages_forum' => 'Messages', 'messages_recents' => 'Messages de forums les plus récents', @@ -117,5 +119,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'voir_en_ligne' => 'Voir en ligne', 'voir_squelette' => 'voir le squelette de cette page' ); - -?> diff --git a/www/ecrire/lang/public_gl.php b/www/ecrire/lang/public_gl.php index 8a0b45f9..a54f6f28 100644 --- a/www/ecrire/lang/public_gl.php +++ b/www/ecrire/lang/public_gl.php @@ -1,9 +1,11 @@ 'Ver en liña', 'voir_squelette' => 'ver o esqueleto desta páxina' ); - -?> diff --git a/www/ecrire/lang/public_he.php b/www/ecrire/lang/public_he.php index a5f700b5..73c5d719 100644 --- a/www/ecrire/lang/public_he.php +++ b/www/ecrire/lang/public_he.php @@ -1,9 +1,11 @@ 'לתוכן מקוון', 'voir_squelette' => 'לראות את השלד של דף זה' ); - -?> diff --git a/www/ecrire/lang/public_hr.php b/www/ecrire/lang/public_hr.php index e15f7d9b..ece4b091 100644 --- a/www/ecrire/lang/public_hr.php +++ b/www/ecrire/lang/public_hr.php @@ -1,9 +1,11 @@ 'Vidjeti on-line', 'voir_squelette' => 'Pogledati kostur ovih stranica' ); - -?> diff --git a/www/ecrire/lang/public_hu.php b/www/ecrire/lang/public_hu.php index 1eaff03d..c24ae660 100644 --- a/www/ecrire/lang/public_hu.php +++ b/www/ecrire/lang/public_hu.php @@ -1,9 +1,11 @@ 'Nyomtatható változat', 'voir_en_ligne' => 'Látni élőben' ); - -?> diff --git a/www/ecrire/lang/public_id.php b/www/ecrire/lang/public_id.php index adc36945..65a42f86 100644 --- a/www/ecrire/lang/public_id.php +++ b/www/ecrire/lang/public_id.php @@ -1,9 +1,11 @@ 'Lihat secara online', 'voir_squelette' => 'ٍTampilkan templat halaman ini' ); - -?> diff --git a/www/ecrire/lang/public_it.php b/www/ecrire/lang/public_it.php index bf0d97f7..8ccaafb1 100644 --- a/www/ecrire/lang/public_it.php +++ b/www/ecrire/lang/public_it.php @@ -1,9 +1,11 @@ 'Vedi on line', 'voir_squelette' => 'visualizza il modello di questa pagina' ); - -?> diff --git a/www/ecrire/lang/public_it_fem.php b/www/ecrire/lang/public_it_fem.php index 65e3d130..3cd2621b 100644 --- a/www/ecrire/lang/public_it_fem.php +++ b/www/ecrire/lang/public_it_fem.php @@ -1,9 +1,11 @@ 'Vedi on line', 'voir_squelette' => 'download del modello di questa pagina' ); - -?> diff --git a/www/ecrire/lang/public_ja.php b/www/ecrire/lang/public_ja.php index 8310fcc3..037e7078 100644 --- a/www/ecrire/lang/public_ja.php +++ b/www/ecrire/lang/public_ja.php @@ -1,9 +1,11 @@ 'オンラインを見る', 'voir_squelette' => '???????????????' # MODIF ); - -?> diff --git a/www/ecrire/lang/public_km.php b/www/ecrire/lang/public_km.php index 1f12854f..0e971d8a 100644 --- a/www/ecrire/lang/public_km.php +++ b/www/ecrire/lang/public_km.php @@ -1,9 +1,11 @@ '​អាន លើអិនរើណែត', 'voir_squelette' => 'មើលគ្រោងឆ្អឹង នៃទំព័រនេះ' ); - -?> diff --git a/www/ecrire/lang/public_lb.php b/www/ecrire/lang/public_lb.php index 5deaef75..1c3fa98c 100644 --- a/www/ecrire/lang/public_lb.php +++ b/www/ecrire/lang/public_lb.php @@ -1,9 +1,11 @@ 'Online gesinn', 'voir_squelette' => 'd’Skelett vun dëser Säit weisen' ); - -?> diff --git a/www/ecrire/lang/public_my.php b/www/ecrire/lang/public_my.php index 047c057b..e4d9a3b6 100644 --- a/www/ecrire/lang/public_my.php +++ b/www/ecrire/lang/public_my.php @@ -1,9 +1,11 @@ 'အွန်လိုင်းတွင် ကြည့်ပါ', 'voir_squelette' => 'ٍဤစာမျက်နှာ ပုံစံခွက်ကိုပြပါ' ); - -?> diff --git a/www/ecrire/lang/public_nl.php b/www/ecrire/lang/public_nl.php index a260b145..d4bd275a 100644 --- a/www/ecrire/lang/public_nl.php +++ b/www/ecrire/lang/public_nl.php @@ -1,19 +1,21 @@ 'Homepagina', 'article' => 'Artikel', - 'articles' => 'Artikels', - 'articles_auteur' => 'Artikels van deze auteur', - 'articles_populaires' => 'Meest bekeken artikels', - 'articles_rubrique' => 'Artikels van deze rubriek', + 'articles' => 'Artikelen', + 'articles_auteur' => 'Artikelen van deze auteur', + 'articles_populaires' => 'Meest bekeken artikelen', + 'articles_rubrique' => 'Artikelen in deze rubriek', 'aucun_article' => 'Op dit adres is geen artikel te vinden', 'aucun_auteur' => 'Op dit adres is geen auteur te vinden', 'aucun_site' => 'Op dit adres is geen site te vinden', @@ -29,27 +31,27 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bonjour' => 'Hallo', // C - 'commenter_site' => 'Commentaar geven op de site', + 'commenter_site' => 'Reageren op de site', 'contact' => 'Contact', - 'copie_document_impossible' => 'Onmogelijk om het document te kopiëren', + 'copie_document_impossible' => 'Het is niet mogelijk het document te kopiëren', // D 'date' => 'Datum', 'dernier_ajout' => 'Laatste toevoeging', 'dernieres_breves' => 'Laatste nieuwsberichten', - 'derniers_articles' => 'Laatste artikels', + 'derniers_articles' => 'Laatste artikelen', 'derniers_commentaires' => 'Laatste commentaren', 'derniers_messages_forum' => 'Laatst gepubliceerde berichten in het forum', // E 'edition_mode_texte' => 'Uitgave in tekstmodus van', - 'en_reponse' => 'Als antwoord op :', + 'en_reponse' => 'Als antwoord op:', 'en_resume' => 'Samengevat', 'envoyer_message' => 'Een bericht sturen', - 'espace_prive' => 'Privé-site', + 'espace_prive' => 'Privé-gedeelte', // F - 'formats_acceptes' => 'Aanvaarde formaten : @formats@.', + 'formats_acceptes' => 'Toegelaten formaten: @formats@.', // H 'hierarchie_site' => 'Structuur van de site', @@ -58,7 +60,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'jours' => 'dagen', // L - 'lien_connecter' => 'Zich aansluiten', + 'lien_connecter' => 'Aanmelden', // M 'meme_auteur' => 'Van dezelfde auteur', @@ -66,7 +68,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'memes_auteurs' => 'Van dezelfde auteurs', 'message' => 'Bericht', 'messages_forum' => 'Berichten', - 'messages_recents' => 'Meest recente berichten van de forums', + 'messages_recents' => 'Meest recente forumberichten', 'mots_clef' => 'Trefwoord', 'mots_clefs' => 'Trefwoorden', 'mots_clefs_meme_groupe' => 'Trefwoorden van dezelfde groep', @@ -76,18 +78,18 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'nom' => 'Naam', 'nouveautes' => 'Nieuwigheden', 'nouveautes_web' => 'Nieuwigheden op het Web', - 'nouveaux_articles' => 'Nieuwe artikels', + 'nouveaux_articles' => 'Nieuwe artikelen', 'nouvelles_breves' => 'Nieuwe nieuwsberichten', // P 'page_precedente' => 'vorige pagina', 'page_suivante' => 'volgende pagina', 'par_auteur' => 'door ', - 'participer_site' => 'Je kan bijdragen tot deze site door je eigen artikels voor te stellen als je je hieronder inschrijft. Je krijgt meteen een e-mail met daarin de toegangscode voor het privé-deel van de site.', + 'participer_site' => 'Wanneer je je hieronder inschrijft, kun je zelf een bijdrage leveren aan deze site door je eigen artikelen voor te stellen. Je ontvangt meteen een e-mail met daarin de toegangscode voor het privé-gedeelte van de site.', 'plan_site' => 'Overzicht van de site', 'popularite' => 'Populariteit', 'poster_message' => 'Een bericht plaatsen', - 'proposer_site' => 'Je kan voorstellen een site in deze rubriek op te nemen :', + 'proposer_site' => 'Je kan voorstellen een site in deze rubriek op te nemen:', // R 'repondre_article' => 'Dit artikel beantwoorden', @@ -98,7 +100,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'rubriques' => 'Rubrieken', // S - 'signatures_petition' => 'Handtekeningen', + 'signatures_petition' => 'Ondertekeningen', 'site_realise_avec_spip' => 'Site gebouwd met SPIP', 'sites_web' => 'Websites', 'sous_rubriques' => 'Subrubrieken', @@ -109,13 +111,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'syndiquer_site' => 'Nieuws overnemen van de hele site', // T - 'texte_lettre_information' => 'Ziehier de nieuwsbrief van de site', - 'texte_lettre_information_2' => 'Deze brief geeft de laatste gepubliceerde sinds', + 'texte_lettre_information' => 'Dit is de nieuwsbrief van de site', + 'texte_lettre_information_2' => 'Deze nieuwsbrief toont de publicaties vanaf', // V 'ver_imprimer' => 'Afdrukversie', 'voir_en_ligne' => 'Online bekijken', - 'voir_squelette' => 'het skelet van deze bladzijde zien' + 'voir_squelette' => 'het skelet van deze bladzijde bekijken' ); - -?> diff --git a/www/ecrire/lang/public_oc_auv.php b/www/ecrire/lang/public_oc_auv.php index e0d6a2dd..376d018d 100644 --- a/www/ecrire/lang/public_oc_auv.php +++ b/www/ecrire/lang/public_oc_auv.php @@ -1,9 +1,11 @@ 'Vejatz en linha', 'voir_squelette' => 'telecharjar l’esqueleta d’aquela pagina' ); - -?> diff --git a/www/ecrire/lang/public_oc_gsc.php b/www/ecrire/lang/public_oc_gsc.php index f9aeae2d..175144cf 100644 --- a/www/ecrire/lang/public_oc_gsc.php +++ b/www/ecrire/lang/public_oc_gsc.php @@ -1,9 +1,11 @@ 'Vedetz en linha', 'voir_squelette' => 'telecargar l’esqueleta d’aquera pagina' ); - -?> diff --git a/www/ecrire/lang/public_oc_lms.php b/www/ecrire/lang/public_oc_lms.php index 67e7b785..6e7846af 100644 --- a/www/ecrire/lang/public_oc_lms.php +++ b/www/ecrire/lang/public_oc_lms.php @@ -1,9 +1,11 @@ 'Version d’estampar', 'voir_en_ligne' => 'Vesetz en linha' ); - -?> diff --git a/www/ecrire/lang/public_oc_lnc.php b/www/ecrire/lang/public_oc_lnc.php index 6f7666bd..819b60ea 100644 --- a/www/ecrire/lang/public_oc_lnc.php +++ b/www/ecrire/lang/public_oc_lnc.php @@ -1,9 +1,11 @@ 'Vejatz en linha', 'voir_squelette' => 'veire l’esqueleta d’aquela pagina' ); - -?> diff --git a/www/ecrire/lang/public_oc_ni.php b/www/ecrire/lang/public_oc_ni.php index 85de543c..e3de2156 100644 --- a/www/ecrire/lang/public_oc_ni.php +++ b/www/ecrire/lang/public_oc_ni.php @@ -1,14 +1,16 @@ 'Acuèlh dau sit', # MODIF + 'accueil_site' => 'Acuèlh', 'article' => 'Article', 'articles' => 'Articles', 'articles_auteur' => 'Articles d’aquel autor', @@ -117,5 +119,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'voir_en_ligne' => 'Vejatz en linha', 'voir_squelette' => 'Veire l’esqueleta d’aquela pàgina' ); - -?> diff --git a/www/ecrire/lang/public_oc_ni_la.php b/www/ecrire/lang/public_oc_ni_la.php index 09327a30..7d64623f 100644 --- a/www/ecrire/lang/public_oc_ni_la.php +++ b/www/ecrire/lang/public_oc_ni_la.php @@ -1,9 +1,11 @@ 'Veètz en linha', 'voir_squelette' => 'telecargar l’esqueleta d’aquela pàgina' ); - -?> diff --git a/www/ecrire/lang/public_oc_ni_mis.php b/www/ecrire/lang/public_oc_ni_mis.php index eb30e075..47959ba9 100644 --- a/www/ecrire/lang/public_oc_ni_mis.php +++ b/www/ecrire/lang/public_oc_ni_mis.php @@ -1,9 +1,11 @@ 'Noum', 'nouveautes' => 'Li nouvità', 'nouveautes_web' => 'Nouvità soubre lou web', - 'nouveaux_articles' => 'Article nòu', + 'nouveaux_articles' => 'Nouvèl article', 'nouvelles_breves' => 'Brèva nouvèli', // P 'page_precedente' => 'pàgina anterioura', 'page_suivante' => 'pàgina seguenta', - 'par_auteur' => 'per ', + 'par_auteur' => 'da', 'participer_site' => 'Poudès participà a la vida d’estou sit e proupausà lu vouòstre article en v’inscrivant aquì souta. Receverès un e-mail que v’endiquerà lu vouòstre code d’achès a l’espaci privat dóu sit.', 'plan_site' => 'Plan dóu sit', 'popularite' => 'Poupularità', @@ -93,7 +95,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'repondre_article' => 'Respouòndre en aquel article', 'repondre_breve' => 'Respouòndre en aquela brèva', 'resultats_recherche' => 'Resultat de la recerca', - 'retour_debut_forums' => 'Retour au principi dei fòrou', + 'retour_debut_forums' => 'Retour au principi dai fòrou', 'rubrique' => 'Rùbrica', 'rubriques' => 'Rùbrica', @@ -117,5 +119,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'voir_en_ligne' => 'Veire en ligna', 'voir_squelette' => 'Veire l’esquelètrou d’aquela pàgina' ); - -?> diff --git a/www/ecrire/lang/public_oc_prv.php b/www/ecrire/lang/public_oc_prv.php index 285356c7..a92c01c1 100644 --- a/www/ecrire/lang/public_oc_prv.php +++ b/www/ecrire/lang/public_oc_prv.php @@ -1,9 +1,11 @@ 'Vejatz en linha', 'voir_squelette' => 'telecargar l’esqueleta d’aquela pagina' ); - -?> diff --git a/www/ecrire/lang/public_oc_va.php b/www/ecrire/lang/public_oc_va.php index 69148281..f8183a36 100644 --- a/www/ecrire/lang/public_oc_va.php +++ b/www/ecrire/lang/public_oc_va.php @@ -1,9 +1,11 @@ 'Version d’estampar', 'voir_en_ligne' => 'Veètz en linha' ); - -?> diff --git a/www/ecrire/lang/public_pl.php b/www/ecrire/lang/public_pl.php index 00ff2de2..e49a395b 100644 --- a/www/ecrire/lang/public_pl.php +++ b/www/ecrire/lang/public_pl.php @@ -1,9 +1,11 @@ 'Zobacz on-line', 'voir_squelette' => 'zobacz szkielet/template strony' ); - -?> diff --git a/www/ecrire/lang/public_pt.php b/www/ecrire/lang/public_pt.php index 6c7a0f15..6f2f5a8f 100644 --- a/www/ecrire/lang/public_pt.php +++ b/www/ecrire/lang/public_pt.php @@ -1,9 +1,11 @@ 'Ver online', 'voir_squelette' => 'exibir o modelo desta página' ); - -?> diff --git a/www/ecrire/lang/public_pt_br.php b/www/ecrire/lang/public_pt_br.php index dcf65b4b..ae387fa6 100644 --- a/www/ecrire/lang/public_pt_br.php +++ b/www/ecrire/lang/public_pt_br.php @@ -1,9 +1,11 @@ 'Novas notas', // P - 'page_precedente' => 'pagina anterior', + 'page_precedente' => 'página anterior', 'page_suivante' => 'página seguinte', 'par_auteur' => 'por ', 'participer_site' => 'Você pode participar da vida deste site e propor as suas próprias matérias ao se inscrever abaixo. Você receberá imediatamente um e-mail informando os seus códigos de acesso ao espaço privado do site.', @@ -92,7 +94,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // R 'repondre_article' => 'Responder a esta matéria', 'repondre_breve' => 'Responder a esta nota', - 'resultats_recherche' => 'Resultados da pesquisa', + 'resultats_recherche' => 'Resultados da busca', 'retour_debut_forums' => 'Voltar ao início dos fóruns', 'rubrique' => 'Seção', 'rubriques' => 'Seções', @@ -117,5 +119,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'voir_en_ligne' => 'Ver online', 'voir_squelette' => 'visualizar o template desta página' ); - -?> diff --git a/www/ecrire/lang/public_ro.php b/www/ecrire/lang/public_ro.php index 0bc6b7fb..fba62045 100644 --- a/www/ecrire/lang/public_ro.php +++ b/www/ecrire/lang/public_ro.php @@ -1,9 +1,11 @@ 'Vedeţi în direct', 'voir_squelette' => 'vedeţi scheletul acestei pagini' ); - -?> diff --git a/www/ecrire/lang/public_ru.php b/www/ecrire/lang/public_ru.php index 6aa23243..20cb7787 100644 --- a/www/ecrire/lang/public_ru.php +++ b/www/ecrire/lang/public_ru.php @@ -1,9 +1,11 @@ 'Привет', // C - 'commenter_site' => 'Коментарии к этому сайту', + 'commenter_site' => 'Комментарии к этому сайту', 'contact' => 'Контакты', 'copie_document_impossible' => 'Невозможно скопировать документ', @@ -83,11 +85,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'page_precedente' => 'предыдущая страница', 'page_suivante' => 'следующая страница', 'par_auteur' => ' ', - 'participer_site' => 'Вы можете принять активное участие в жизни этого сайта и писать ваши собственные статьи. Все, что надо сделать - зарегистрироваться.', + 'participer_site' => 'Вы можете принять активное участие в жизни этого сайта и писать ваши собственные статьи. Все, что надо сделать, - зарегистрироваться.', 'plan_site' => 'Карта сайта', 'popularite' => 'Популярность', 'poster_message' => 'Отправить сообщение', - 'proposer_site' => 'Вы можете предложить добавить сайт к этому разделу:', + 'proposer_site' => 'Вы можете добавить ссылку на сайт в этот раздел:', // R 'repondre_article' => 'Оставить комментарий ', @@ -103,7 +105,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'sites_web' => 'Сайты', 'sous_rubriques' => 'Подразделы', 'spam' => 'Спам', - 'suite' => 'далее', + 'suite' => 'продолжить', 'sur_web' => 'В интернете', 'syndiquer_rubrique' => 'RSS этого раздела', 'syndiquer_site' => 'RSS всего сайта', @@ -115,7 +117,5 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // V 'ver_imprimer' => 'Версия для печати', 'voir_en_ligne' => 'См. онлайн', - 'voir_squelette' => 'Показать шаблон этой страницы' + 'voir_squelette' => 'показать шаблон этой страницы' ); - -?> diff --git a/www/ecrire/lang/public_sk.php b/www/ecrire/lang/public_sk.php index e3bac8b4..3605d454 100644 --- a/www/ecrire/lang/public_sk.php +++ b/www/ecrire/lang/public_sk.php @@ -1,9 +1,11 @@ 'Zobraziť online', 'voir_squelette' => 'Zobraziť šablónu tejto stránky' ); - -?> diff --git a/www/ecrire/lang/public_sv.php b/www/ecrire/lang/public_sv.php index 7f78638c..149349d2 100644 --- a/www/ecrire/lang/public_sv.php +++ b/www/ecrire/lang/public_sv.php @@ -1,9 +1,11 @@ 'Se online', 'voir_squelette' => 'visa sidans mall' ); - -?> diff --git a/www/ecrire/lang/public_tr.php b/www/ecrire/lang/public_tr.php index 6c2b8328..9d2dc28b 100644 --- a/www/ecrire/lang/public_tr.php +++ b/www/ecrire/lang/public_tr.php @@ -1,9 +1,11 @@ 'Çevrimiçi görüntüle', 'voir_squelette' => 'bu sayfanın iskeletini göster' ); - -?> diff --git a/www/ecrire/lang/public_uk.php b/www/ecrire/lang/public_uk.php new file mode 100644 index 00000000..fc20993d --- /dev/null +++ b/www/ecrire/lang/public_uk.php @@ -0,0 +1,121 @@ + 'Головна', + 'article' => 'Стаття', + 'articles' => 'Статті', + 'articles_auteur' => 'Статті автора', + 'articles_populaires' => 'Статті, що найчастіше читають', + 'articles_rubrique' => 'Статті розділу', + 'aucun_article' => 'Статей немає', + 'aucun_auteur' => 'Авторів немає', + 'aucun_site' => 'Сайтів немає', + 'aucune_breve' => 'Новин немає', + 'aucune_rubrique' => 'Розділів немає', + 'auteur' => 'Автор', + 'autres' => 'Інші', + 'autres_breves' => 'Інші новини', + 'autres_groupes_mots_clefs' => 'Інші групи ключових слів', + 'autres_sites' => 'Інші сайти', + + // B + 'bonjour' => 'Привіт', + + // C + 'commenter_site' => 'Коментарі до сайту', + 'contact' => 'Контакти', + 'copie_document_impossible' => 'Неможливо скопіювати документ', + + // D + 'date' => 'Дата', + 'dernier_ajout' => 'Останнє оновлення', + 'dernieres_breves' => 'Свіжі новини', + 'derniers_articles' => 'Нові статті', + 'derniers_commentaires' => 'Нові коментарі', + 'derniers_messages_forum' => 'Нові повідомлення на форумі', + + // E + 'edition_mode_texte' => 'Текстовий режим', + 'en_reponse' => 'Коментар до:', + 'en_resume' => 'Підсумки', + 'envoyer_message' => 'Відправити повідомлення', + 'espace_prive' => 'Адміністративна частина', + + // F + 'formats_acceptes' => 'Припустимі формати: @formats@.', + + // H + 'hierarchie_site' => 'Карта сайту', + + // J + 'jours' => 'дні', + + // L + 'lien_connecter' => 'Увійти', + + // M + 'meme_auteur' => 'Цього автора', + 'meme_rubrique' => 'Ще в розділі', + 'memes_auteurs' => 'Тими самими авторами', + 'message' => 'Повідомлення', + 'messages_forum' => 'Повідомлення форуму', + 'messages_recents' => 'Нові повідомлення форуму', + 'mots_clef' => 'Ключове слово', + 'mots_clefs' => 'Ключові слова', + 'mots_clefs_meme_groupe' => 'Ключові слова з групи', + + // N + 'navigation' => 'Дивитись', + 'nom' => 'Ім’я', + 'nouveautes' => 'Що є нове', + 'nouveautes_web' => 'Що є нове в сайтах', + 'nouveaux_articles' => 'Нові статті', + 'nouvelles_breves' => 'Свіжі новини', + + // P + 'page_precedente' => 'попередня сторінка', + 'page_suivante' => 'наступна сторінка', + 'par_auteur' => ' ', + 'participer_site' => 'Ви можете прийняти активну участь в житті цього сайту і писати свої статті. Усе, що потрібно зробити, - зареєструватися.', + 'plan_site' => 'Карта сайту', + 'popularite' => 'Популярність', + 'poster_message' => 'Відправити повідомлення', + 'proposer_site' => 'Ви можете запропонувати додати сайт до цього рубрику:', + + // R + 'repondre_article' => 'Залишити коментар ', + 'repondre_breve' => 'Залишити коментар ', + 'resultats_recherche' => 'Результати пошуку', + 'retour_debut_forums' => 'Усі форуми', + 'rubrique' => 'Розділ', + 'rubriques' => 'Розділи', + + // S + 'signatures_petition' => 'Підписи', + 'site_realise_avec_spip' => 'Сайт працює на SPIP', + 'sites_web' => 'Сайти', + 'sous_rubriques' => 'Підрубрики', + 'spam' => 'Спам', + 'suite' => 'далі', + 'sur_web' => 'В інтернеті', + 'syndiquer_rubrique' => 'RSS цього рубрику', + 'syndiquer_site' => 'RSS всього сайту', + + // T + 'texte_lettre_information' => 'Інформаційний бюлетень сайту', + 'texte_lettre_information_2' => 'Матеріали на сайті розміщуються з', + + // V + 'ver_imprimer' => 'Версія для друку', + 'voir_en_ligne' => 'Див. онлайн', + 'voir_squelette' => 'Показати шаблон сторінки' +); diff --git a/www/ecrire/lang/public_vi.php b/www/ecrire/lang/public_vi.php index 7d4cc32d..b991304c 100644 --- a/www/ecrire/lang/public_vi.php +++ b/www/ecrire/lang/public_vi.php @@ -1,9 +1,11 @@ 'Kiểu dể in', 'voir_en_ligne' => 'Xem online' ); - -?> diff --git a/www/ecrire/lang/public_zh.php b/www/ecrire/lang/public_zh.php index 9c43aafd..5f886430 100644 --- a/www/ecrire/lang/public_zh.php +++ b/www/ecrire/lang/public_zh.php @@ -1,9 +1,11 @@ '打印版本', 'voir_en_ligne' => '在线预览' ); - -?> diff --git a/www/ecrire/lang/spip.xml b/www/ecrire/lang/spip.xml index d85dcc0e..f7ccd4b3 100644 --- a/www/ecrire/lang/spip.xml +++ b/www/ecrire/lang/spip.xml @@ -1,184 +1,227 @@ - - - + + + + + + - - + + + + + + + + + - - + + - + + + - + + + - + + - - + + - - + - + - + + + + + + + - + + + + - + + + + + + + + + - - - - + - - - - + + - - - - - - - - + + + + + + + - + + + - - + + + - - - - - + + - - + - - + - + + + + + + - + + + + + + + - - - + + - - - - - - + + + - - + - - - + + - + + - - + - + + + + + - + - - - + + + - + - - + + + - + + - - - + + - + + - - + + - - + + + + + + - - + - - - - + - + - + - + + + - + - - + + - + - + - + + - - + + + - - - + + + + + + - - - + + - - + - + + + - - + + - - + + + - - - + - + - + + + + - + - - + + - - + + diff --git a/www/ecrire/lang/spip_ar.php b/www/ecrire/lang/spip_ar.php index c6567a02..b9496bff 100644 --- a/www/ecrire/lang/spip_ar.php +++ b/www/ecrire/lang/spip_ar.php @@ -1,9 +1,11 @@ 'إلغاء', 'antispam_champ_vide' => 'الرجاء الإبقاء على هذا الحقل فارغاً:', 'articles_recents' => 'أحدث المقالات', + 'avis_1_erreur_saisie' => 'هناك خطأ في إدخالك، الرجاء التدقيق في المعلومات.', 'avis_archive_incorrect' => 'ملف الأرشيف ليس ملف SPIP', 'avis_archive_invalide' => 'ملف الأرشيف غير صالح', 'avis_attention' => 'تحذير!', @@ -43,6 +46,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_erreur_mysql' => 'خطأ SQL ', 'avis_erreur_sauvegarde' => 'خطأ في النسخة الاحتياطية (@type@ @id_objet@)!', 'avis_erreur_visiteur' => 'هناك مشكلة في الدخول إلى المجال الخاص', + 'avis_nb_erreurs_saisie' => 'هناك @nb@ خطأ في إدخالك، الرجاء التدقيق في المعلومات.', // B 'barre_a_accent_grave' => 'إدراج حرف A كبير مع نبر الإطالة', @@ -111,7 +115,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ الساعة @heure@', 'date_fmt_jour_heure_debut_fin' => 'في @jour@ من @heure_debut@ الى @heure_fin@', - 'date_fmt_jour_heure_debut_fin_abbr' => 'في @dtstart@@jour@ من @heure_debut@@dtabbr@ الى @dtstart@@heure_fin@@dtend@', + 'date_fmt_jour_heure_debut_fin_abbr' => 'في @dtstart@@jour@ من @heure_debut@@dtabbr@ الى @dtend@@heure_fin@@dtabbr@', 'date_fmt_jour_mois' => '@jour@ @nommois@', 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@', 'date_fmt_mois_annee' => '@nommois@ @annee@', @@ -121,6 +125,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_periode_abbr' => 'من @dtart@@date_debut@@dtabbr@ الى @dtend@@date_fin@@dtabbr@', 'date_fmt_periode_from' => 'من', 'date_fmt_periode_to' => 'الى', + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'ساعة', 'date_hier' => 'البارحة', 'date_il_y_a' => 'منذ @delai@', @@ -156,7 +161,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_jnum8' => '8', 'date_jnum9' => '9', 'date_jour_1' => 'الأحد', - 'date_jour_1_abbr' => 'الأحد', + 'date_jour_1_abbr' => 'أحد', 'date_jour_1_initiale' => 'أحد', 'date_jour_2' => 'الاثنين', 'date_jour_2_abbr' => 'اثنين', @@ -284,6 +289,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'form_prop_non_enregistre' => 'لم يتم تسجيل اقتراحك.', 'form_prop_sujet' => 'الموضوع', 'form_prop_url_site' => 'عنوان الموقع', + 'format_date_incorrecte' => 'التاريخ او تنسيقه غير صحيح', + 'format_heure_incorrecte' => 'الساعة او تنسيقها غير صحيح', 'forum_non_inscrit' => 'إما انك غير مسجل أو هناك خطأ في العنوان أو كلمة السر.', 'forum_par_auteur' => 'من @auteur@', 'forum_titre_erreur' => 'خطأ...', @@ -454,7 +461,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( ----------', 'info_rechercher' => 'بحث', 'info_rechercher_02' => 'بحث:', - 'info_remplacer_vignette' => 'استبدال المصغر الافتراضي بشعار شخصي:', + 'info_remplacer_vignette' => 'استبدال المصغر الافتراضي برمز شخصي:', 'info_rubriques_nb' => '@nb@ قسم', 'info_rubriques_un' => 'قسم واحد', 'info_sans_titre_2' => 'بدون عنوان', @@ -466,7 +473,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_symbole_bleu' => 'الرمز أزرق يرمز إلى مذكرة: أي رسالة لاستخدامك الشخصي.', 'info_symbole_jaune' => 'الرمز أصفر يرمز إلى إعلان لجميع المحررين: يمكن لجميع المدراء تحريره وهو ظاهر لجميع المحررين.', 'info_symbole_vert' => 'الرمز أخضر يرمز إلى الرسائل المتبادلة بين مستخدمي الموقع.', - 'info_telecharger_nouveau_logo' => 'تحميل شعار جديد:', + 'info_telecharger_nouveau_logo' => 'تحميل رمز جديد:', 'info_telecharger_ordinateur' => 'تحميل من جهازك:', 'info_tous_resultats_enregistres' => '[تم تسجيل كل النتائج]', 'info_tout_afficher' => 'إظهار الكل', @@ -530,7 +537,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'login_retour_public' => 'عودة إلى الموقع العام', 'login_retour_site' => 'عودة إلى الموقع العام', 'login_retoursitepublic' => 'عودة إلى الموقع العام', - 'login_sans_cookiie' => 'تعريف بدون الكعكة', + 'login_sans_cookie' => 'تعريف بدون الكعكة', 'login_securise' => 'تعريف مؤمّن', 'login_sinscrire' => 'تسجيل', 'login_test_navigateur' => 'تجربة المتصفح/إعادة الاتصال', @@ -539,6 +546,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // M 'masquer_colonne' => 'حجب هذا العمود', 'masquer_trad' => 'حجب الترجمات', + 'message_nouveaux_identifiants_echec' => 'لا يمكن إنشاء معرف وكلمة سر جديدين.', + 'message_nouveaux_identifiants_echec_envoi' => 'مشكلة في إرسال المعرف وكلمة السر الجديدين.', + 'message_nouveaux_identifiants_ok' => 'تم إرسال المعرف وكلمة السر الجديدين الى @email@.', 'module_fichiers_langues' => 'ملفات اللغة', // N @@ -594,7 +604,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'pass_nouveau_pass' => 'كلمة السر الجديدة', 'pass_ok' => 'موافق', 'pass_oubli_mot' => 'نسيان كلمة السر', - 'pass_procedure_changer' => 'من أجل تغيير كلمة السر يتحتم اولاً التأكد من هويتك. لذلك، قم بأدخال عنوان البريد الالكتروني المرتبط بهذا الحساب.', + 'pass_procedure_changer' => 'من أجل تغيير كلمة السر، قم بأدخال عنوان البريد الالكتروني المرتبط بحسابك.', 'pass_quitter_fenetre' => 'إقفال هذه النافذة', 'pass_rappel_login' => 'تذكير: معرّفك هو «@login@».', 'pass_recevoir_mail' => 'ستحصل على رسالة تفسر لك كيف تستعيد دخولك إلى الموقع.', @@ -674,6 +684,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_statistiques' => 'إحصاءات الموقع', 'titre_titre_document' => 'اسم المستند: ', 'todo' => 'قريباً', + 'trad_definir_reference' => 'اختيار "@titre@" كمرجع للترجمات', 'trad_reference' => '(مرجع الترجمات)', // Z @@ -687,6 +698,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'zbug_champ_hors_motif' => 'الحقل @champ@ خارج سياق @motif@', 'zbug_code' => 'الرموز البرمجية', 'zbug_critere_inconnu' => 'معيار غير معروف @critere@', + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} على جدول دون مفتاح اساسي افرادي', 'zbug_distant_interdit' => 'عملية خارجية ممنوعة', 'zbug_doublon_table_sans_cle_primaire' => 'قيمة مكررة في جدول لا يملك مفتاح أساسي', 'zbug_doublon_table_sans_index' => 'تكرار في جدول غير مفهرس', @@ -725,5 +737,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'zxml_vide_balise' => 'علامة فارغة', 'zxml_vu' => 'ظهر مسبقاً' ); - -?> diff --git a/www/ecrire/lang/spip_ast.php b/www/ecrire/lang/spip_ast.php index 39e3d885..41a5e7c8 100644 --- a/www/ecrire/lang/spip_ast.php +++ b/www/ecrire/lang/spip_ast.php @@ -1,9 +1,11 @@ 'Tornar pal sitiu públicu', 'login_retour_site' => 'Tornar pal sitiu públicu', 'login_retoursitepublic' => 'tornar pal sitiu públicu', - 'login_sans_cookiie' => 'Identificación ensin cookie', 'login_securise' => 'Conexón asegurada', 'login_sinscrire' => 'inscribise', 'login_test_navigateur' => 'preba de ñavegador/reconexón', @@ -694,5 +695,3 @@ Intenta', 'zxml_vide_balise' => 'etiqueta vacía', 'zxml_vu' => 'visto enantes' ); - -?> diff --git a/www/ecrire/lang/spip_ay.php b/www/ecrire/lang/spip_ay.php index 49076cb1..e0ff2563 100644 --- a/www/ecrire/lang/spip_ay.php +++ b/www/ecrire/lang/spip_ay.php @@ -1,9 +1,11 @@ 'Jach’a qamaw utar kuttaña', 'login_retour_site' => 'Jach’a qamaw utar kuttaña', 'login_retoursitepublic' => 'jach’a qamaw uta', - 'login_sans_cookiie' => 'Uñicht’aw jan \\"cookie\\"', 'login_sinscrire' => 'qillqayasiña', 'login_test_navigateur' => 'tuyur yant’a/mayamp yatiyt’awi', 'login_verifiez_navigateur' => '(Tuyurimax janiw imt’atam sum katkiti uk qhanstayam...)', @@ -617,5 +618,3 @@ Sitix uka arunak ajlltax.Walja sapa mayanaka jach’a qamawita (urunaka, phuqañ 'zxml_vide_balise' => 'ch’usa chimpu', 'zxml_vu' => 'nayra uñjata ' ); - -?> diff --git a/www/ecrire/lang/spip_bg.php b/www/ecrire/lang/spip_bg.php index 4c2c63ea..995ecc20 100644 --- a/www/ecrire/lang/spip_bg.php +++ b/www/ecrire/lang/spip_bg.php @@ -1,9 +1,11 @@ 'Обратно към публичния сайт', 'login_retour_site' => 'Обратно към публичния сайт', 'login_retoursitepublic' => 'обратно към публичния сайт', - 'login_sans_cookiie' => 'Идентификация без cookie', 'login_sinscrire' => 'регистрирация', 'login_test_navigateur' => 'тест на навигатор/повторно свързване', 'login_verifiez_navigateur' => '(Въпреки това, убедете се, че навигаторът не е запаметил Вашата парола...)', @@ -593,5 +594,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'zbug_serveur_indefini' => 'неопределен сървър SQL', # MODIF 'zbug_table_inconnue' => 'Непозната таблица от типа SQL: "@table@"' ); - -?> diff --git a/www/ecrire/lang/spip_br.php b/www/ecrire/lang/spip_br.php index 64d1e860..de82332f 100644 --- a/www/ecrire/lang/spip_br.php +++ b/www/ecrire/lang/spip_br.php @@ -1,9 +1,11 @@ 'Kemmañ ar ger-stur-mañ', 'admin_modifier_rubrique' => 'Kemmañ ar rubrikenn-mañ', 'admin_recalculer' => 'Hizivaat ar bajenn', + 'afficher_calendrier' => 'Kinnig an deiziater', 'afficher_trad' => 'diskouez an troidigezhioù', 'alerte_maj_impossible' => 'Diwallit ! N’eus ket tu da hizivaat an diaz SQL etrezek ar stumm @version@, marteze abalamour d’ur gudenn aotre evit kemmañ an diaz titouroù. Mar plij kit e darempred gant ho herberc’hier.', 'alerte_modif_info_concourante' => 'DIWALLIT : Kemmet eo bet an titour-mañ en ul lec’h all. Setu an talvoud nevez :', @@ -63,7 +66,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_changer' => 'Kemmañ', 'bouton_chercher' => 'Klask', 'bouton_choisir' => 'Dibab', - 'bouton_download' => 'Pellgargañ', # MODIF + 'bouton_download' => 'Pellgargañ', 'bouton_enregistrer' => 'Enrollañ', 'bouton_radio_desactiver_messagerie_interne' => 'Diweredekaat ar postelerezh diabarzh', 'bouton_radio_envoi_annonces' => 'Kas ar c’hemennoù embann', @@ -71,7 +74,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_radio_non_envoi_liste_nouveautes' => 'Chom hep kas roll an nevezinti', 'bouton_recharger_page' => 'adkargañ ar bajenn-mañ', 'bouton_telecharger' => 'Pellgargañ', - 'bouton_upload' => 'Pellgargañ', # MODIF + 'bouton_upload' => 'Pellgas', 'bouton_valider' => 'Kadarnaat', // C @@ -105,11 +108,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_de_mois_9' => '@j@ @nommois@', 'date_demain' => 'warc’hoazh', 'date_fmt_heures_minutes' => '@h@eur@m@munut', + 'date_fmt_heures_minutes_court' => '@h@h@m@', 'date_fmt_jour_heure' => '@jour@ da @heure@', 'date_fmt_jour_mois' => '@jour@ a viz @nommois@', 'date_fmt_jour_mois_annee' => '@jour@ a viz @nommois@ @annee@', 'date_fmt_mois_annee' => '@nommois@ @annee@', 'date_fmt_nomjour_date' => '@nomjour@ @date@', + 'date_fmt_periode_from' => 'Adalek', + 'date_fmt_periode_to' => 'betek', 'date_heures' => 'eur', 'date_hier' => 'dec’h', 'date_il_y_a' => '@delai@ zo', @@ -170,16 +176,24 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_mois' => 'miz', 'date_mois_1' => 'Genver', 'date_mois_10' => 'Here', + 'date_mois_10_abbr' => 'here.', 'date_mois_11' => 'Du', + 'date_mois_11_abbr' => 'du.', 'date_mois_12' => 'Kerzu', + 'date_mois_12_abbr' => 'kerzu.', + 'date_mois_1_abbr' => 'genver.', 'date_mois_2' => 'C’hwevrer', + 'date_mois_2_abbr' => 'c’hevrer.', 'date_mois_3' => 'Meurzh', 'date_mois_4' => 'Ebrel', + 'date_mois_4_abbr' => 'ebrel.', 'date_mois_5' => 'Mae', 'date_mois_6' => 'Mezheven', 'date_mois_7' => 'Gouere', + 'date_mois_7_abbr' => 'gouere.', 'date_mois_8' => 'Eost', 'date_mois_9' => 'Gwengolo', + 'date_mois_9_abbr' => 'gweng.', 'date_saison_1' => 'Goañv', 'date_saison_2' => 'nevez-amzer', 'date_saison_3' => 'hañv', @@ -210,15 +224,29 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'envoi_via_le_site' => 'Kas dre al lec’hienn', 'erreur' => 'Fazi', 'erreur_balise_non_fermee' => 'Balizenn ziwezhañ chomet digor :', + 'erreur_technique_enregistrement_champs' => 'Miret eo bet enrolliñ mat al heuliad-gerioù @champs@ abalamour d’ur fazi teknikel.', + 'erreur_technique_enregistrement_impossible' => 'Miret eo bet an enrolladenn abalamour d’ur fazi teknikel.', 'erreur_texte' => 'fazi', 'etape' => 'Pazenn', // F 'fichier_introuvable' => 'Restr @fichier@ dibosupl da gavout', + 'form_auteur_confirmation' => 'Gwirekait ho postel', + 'form_auteur_email_modifie' => 'Ho postel a zo bet kemmet.', + 'form_auteur_envoi_mail_confirmation' => 'Ur postel a wiriekadur a zo paouez bezañ kaset da @email@. Ret eo deoc’h mont da welet ar chomlec’h merket e-barzh al lizher-se evit gwiriekaat ho postel.', + 'form_auteur_mail_confirmation' => 'Demat, + +Goulennet ho peus cheñch ho postel. +Evit gwiriekaat ho postel nevez, n’ho peus nemet kevreañ d’ar chomlec’h amañ dindan (e-giz-all e vo dianavezet ho koulenn) : + + @url@ +', 'form_deja_inscrit' => 'Enskrivet oc’h c’hoazh.', 'form_email_non_valide' => 'N’eo ket reizh ho postel.', 'form_forum_access_refuse' => 'N’oc’h ket aotreet da vont war al lec’hienn-mañ ken.', 'form_forum_bonjour' => 'Demat @nom@,', + 'form_forum_confirmer_email' => 'Evit gwiriekaat ho postel, mont d’ar chomlec’h : +@url_confirm@', 'form_forum_email_deja_enregistre' => 'Enrollet eo ar postel-se dija. Gallout a rit ober gant ho ker-tremen boas neuze.', 'form_forum_identifiant_mail' => 'Emañ ho kod moned nevez o paouez bezañ kaset deoc’h dre bostel.', 'form_forum_identifiants' => 'Titouroù hiniennel', @@ -237,14 +265,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'form_prop_confirmer_envoi' => 'Kadarnaat ar c’has', 'form_prop_description' => 'Deskrivadur/evezhiadenn', 'form_prop_enregistre' => 'Enrollet eo bet ho kinnig. Embannet e vo goude bezañ bet asantet gant tud e-karg eus al lec’hienn-mañ.', - 'form_prop_envoyer' => 'Kas ur gemennadenn', + 'form_prop_envoyer' => 'Kas ur gemenadenn', 'form_prop_indiquer_email' => 'Merkit ur postel reizh mar plij', 'form_prop_indiquer_nom_site' => 'Merkit anv al lec’hienn.', 'form_prop_indiquer_sujet' => 'Merkit ur sujed', 'form_prop_message_envoye' => 'Kaset eo bet ar gemennadenn', 'form_prop_non_enregistre' => 'N’eo ket bet enrollet ho kinnig', 'form_prop_sujet' => 'Sujed', - 'form_prop_url_site' => 'Chomlec’h (URL) al lec’hienn', # MODIF + 'form_prop_url_site' => 'Chomlec’h (URL) al lec’hienn', 'forum_non_inscrit' => 'N’oc’h ket enskrivet, pe direizh eo ar ger-tremen pe ar chomlec’h.', 'forum_par_auteur' => 'gant @auteur@', 'forum_titre_erreur' => 'Fazi...', @@ -290,7 +318,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_supprimer_image' => 'Diverkañ ar skeudenn-mañ', 'icone_tous_articles' => 'Ho holl bennadoù', 'icone_tous_auteur' => 'An holl skridaozerien', - 'icone_visiter_site' => 'Gweladenniñ', # MODIF + 'icone_tous_visiteur' => 'An holl gweladerien', + 'icone_visiter_site' => 'Gweladenniñ al lec’hienn foran', 'icone_voir_en_ligne' => 'Gwelet enlinenn', 'img_indisponible' => 'skeudenn dibosupl da gaout', 'impossible' => 'dibosupl', @@ -315,12 +344,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_auteurs_nombre' => 'skridaozer(ien) :', 'info_authentification_ftp' => 'Gwiriañ (dre FTP).', 'info_breves_2' => 'berrskridoù', + 'info_breves_nb' => '@nb@ pennadoù-berr', 'info_connexion_refusee' => 'Kevreañ nac’het', 'info_contact_developpeur' => 'Kit e darempred gant un diorroer.', 'info_contenance' => 'El lec’hienn-mañ ez eus :', - 'info_contribution' => 'kemennadenn er forom', # MODIF + 'info_contribution' => 'kenaozadurioù', 'info_copyright' => 'Ur meziant dieub eo @spip@, dasparzhet @lien_gpl@.', - 'info_copyright_doc' => 'Evit titouroù ouzhpenn, gwelet al lec’hienn http://www.spip.net/fr.', # MODIF + 'info_copyright_doc' => 'Evit titouroù ouzhpenn, gwelet al lec’hienn @spipnet_affiche@.', 'info_copyright_gpl' => 'dindan aotre implijout GPL', 'info_cours_edition' => 'Ar pennadoù emaoc’h o skrivañ', 'info_creer_repertoire' => 'Krouit ur restr pe ur c’havlec’h anvet :', @@ -331,6 +361,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_description' => 'Deskrivadur :', 'info_description_2' => 'Deskrivadur :', 'info_dimension' => 'Ment :', + 'info_documents_un' => '1 diell', 'info_ecire_message_prive' => 'Skrivañ ur gerig prevez;', 'info_email_invalide' => 'Postel direizh.', 'info_en_cours_validation' => 'Ar pennadoù emaoc’h o skrivañ', @@ -369,12 +400,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_mail_fournisseur' => 'hoc’hanv@herberc’hier.com', 'info_message_2' => 'KEMENNADENN', 'info_message_supprime' => 'KEMENNADENN BET DIVERKET', + 'info_messages_nb' => '@nb@ kemennadennoù', 'info_mise_en_ligne' => 'Lakaet war ar rouedad d’an :', 'info_modification_parametres_securite' => 'kemm an arventennoù surentez', 'info_mois_courant' => 'E-kerzh ar miz :', 'info_mot_cle_ajoute' => 'Ar ger-stur-mañ zo bet ouzhpennet', 'info_multi_herit' => 'Yezh dre ziouer', - 'info_multi_langues_soulignees' => 'Ar yezhoù islinennet zo bet troet holl destennoù an etrefas enne. Ma tibabit ar yezhoù-se e vo troet o-unan ul lodenn vat eus elfennoù al lec’hienn (deiziadoù, furmskridoù, hag all). Evit ar yezhoù n’int ket islinennet e vo an elfennoù-se e yezh pennañ al lec’hienn.', # MODIF + 'info_multi_langues_soulignees' => 'Ar yezhoù islinennet zo bet troet holl destennoù an etrefas enne. Ma tibabit ar yezhoù-se e vo troet ul lodenn vat eus elfennoù al lec’hienn (deiziadoù, furmskridoù, hag all) en un doare otomatek. Evit ar yezhoù n’int ket islinennet e vo an elfennoù-se e yezh pennañ al lec’hienn.', 'info_multilinguisme' => 'Liesyezhegezh', 'info_nom_non_utilisateurs_connectes' => 'N’emañ ket hoc’h anv war roll an implijerien kevreet.', 'info_nom_utilisateurs_connectes' => 'Gwelet e vez hoc’h anv war roll an implijerien kevreet.', @@ -427,14 +459,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_vignette_personnalisee' => 'skeudennig personelaet', 'info_visite' => 'gweladenn :', 'info_vos_rendez_vous' => 'Hoc’h emgavioù da zont', - 'infos_vos_pense_bete' => 'Ho notennigoù-eñvor', # MODIF + 'infos_vos_pense_bete' => 'Ho notennigoù-eñvor', // L + 'label_ajout_id_rapide' => 'Ouzhpennet buan', 'lien_afficher_icones_seuls' => 'Diskouez ar skeudennigoù hepken', 'lien_afficher_texte_icones' => 'Diskouez ar skeudennigoù hag an destenn', 'lien_afficher_texte_seul' => 'Diskouez an destenn hepken', 'lien_liberer' => 'dieubiñ', - 'lien_liberer_tous' => 'dieubiñ ar pennadoù-mañ', # MODIF + 'lien_liberer_tous' => 'Dinaskañ an holl', 'lien_nouvea_pense_bete' => 'NOTENNIG-EÑVOR NEVEZ', 'lien_nouveau_message' => 'KEMENNADENN NEVEZ', 'lien_nouvelle_annonce' => 'KEMENN NEVEZ', @@ -459,7 +492,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'login_espace_prive' => 'lodenn brevez', 'login_identifiant_inconnu' => 'N’eo ket anavezet ar c’hoad anaout « @login@ ».', 'login_login' => 'Kod kevreañ :', - 'login_login2' => 'Kod kevreañ (kod anaout evit kevreañ ouzh al lec’hienn) :', # MODIF + 'login_login2' => 'Login pe postel :', 'login_login_pass_incorrect' => '(direizh eo ar c’hod kevreañ pe ar ger-tremen)', 'login_motpasseoublie' => 'ankouaet ho ker-tremen ganeoc’h ?', 'login_non_securise' => 'Diwallit, n’eo ket suraet ar furmskrid-mañ. @@ -474,7 +507,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'login_retour_public' => 'Distreiñ d’al lodenn foran', 'login_retour_site' => 'Distreiñ d’al lodenn foran', 'login_retoursitepublic' => 'distreiñ d’al lodenn foran', - 'login_sans_cookiie' => 'Kevreañ hep toupinoù', + 'login_securise' => 'Login diogelet', 'login_sinscrire' => 'en em enskrivañ', 'login_test_navigateur' => 'taol-arnod merdeer/adkevreañ', 'login_verifiez_navigateur' => '(Gwiriit memes tra n’eo ket bet memoret ho ker-tremen gant ar merdeer...)', @@ -532,6 +565,7 @@ kevreañ en-dro ouzh al lec’hienn. 'pass_nouveau_pass' => 'Ger-tremen nevez', 'pass_ok' => 'MAT EO', 'pass_oubli_mot' => 'Ankouaet ar ger-tremen', + 'pass_procedure_changer' => 'Evit kemmañ ho ker-tremen, ez eo ret deomp gwiriekaat piv oc’h. Evit en ober diskouezit deomp ar postel liammet gant ho kont.', # MODIF 'pass_quitter_fenetre' => 'Kuitaat ar prenestr-mañ', 'pass_rappel_login' => 'Dalc’hit soñj : « @login@ » eo ho anv-tremen (login).', 'pass_recevoir_mail' => 'Ur postel a vo kaset deoc’h, ennañ an titouroù ret da c’hallout tizhout al lec’hienn en-dro.', @@ -604,7 +638,7 @@ Aliet oc’h da chom hep kemmañ tra ebet e-keit ha n’oc’h ket boas ouzh SPI 'titre_statistiques' => 'Stadegoù al lec’hienn', # Stadegoù, termen skoueriekaet gant TermBret evit Statistiques. 'titre_titre_document' => 'Titl an teul :', 'todo' => 'da zont', - 'trad_reference' => '(pennad orin)', # MODIF + 'trad_reference' => '(Pennad diazez evit an troidigezhioù)', // Z 'zbug_balise_b_aval' => ' : balizenn B en ardraoñ', @@ -655,5 +689,3 @@ Aliet oc’h da chom hep kemmañ tra ebet e-keit ha n’oc’h ket boas ouzh SPI 'zxml_vide_balise' => 'balizenn c’houllo', 'zxml_vu' => 'bet gwelet a-raok' ); - -?> diff --git a/www/ecrire/lang/spip_bs.php b/www/ecrire/lang/spip_bs.php index d9a0398f..b272122a 100644 --- a/www/ecrire/lang/spip_bs.php +++ b/www/ecrire/lang/spip_bs.php @@ -1,9 +1,11 @@ 'Potvrdi posiljku', 'form_prop_description' => 'Opis/komentar', 'form_prop_enregistre' => 'Vas prijedlog je registrovan i bice postavljen nakon ovjere od strane odgovornih osoba ove stranice.', - 'form_prop_envoyer' => 'Posalji poruku', + 'form_prop_envoyer' => 'Pošaljite poruku', 'form_prop_indiquer_email' => 'Naznacite vazecu e-mail adresu', 'form_prop_indiquer_nom_site' => 'Naznacite ime strancie.', 'form_prop_indiquer_sujet' => 'Naznacite temu', @@ -345,6 +347,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_nouveau_message' => 'NEMATE NOVIH PORUKA', 'info_nouveaux_messages' => 'IMATE @total_messages@ NOVIH PORUKA', 'info_numero_abbreviation' => 'N°', + 'info_obligatoire' => 'Ovaj podatak je obavezan', 'info_pense_bete' => 'BILJESKA', 'info_petit_ecran' => 'Mali prikaz', 'info_pixels' => 'piksela', @@ -430,7 +433,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'login_retour_public' => 'Nazad na javnu stranicu', 'login_retour_site' => 'Nazad na javnu stranicu', 'login_retoursitepublic' => 'nazad na javnu stranicu', - 'login_sans_cookiie' => 'Identifikacija bez cookie', 'login_sinscrire' => 'registruj se', 'login_test_navigateur' => 'test navigatora/ponovna konekcija', 'login_verifiez_navigateur' => '(Svakako se uvjerite da vas navigator nije zapamtio vasu lozinku...)', @@ -568,5 +570,3 @@ Obratite paznu na ovu referencu, ponovo pokusajte nadogradnju i na kraju provjer 'zbug_serveur_indefini' => 'nedefinisan SQL server', # MODIF 'zbug_table_inconnue' => 'Nedefinisana SQL tabela « @table@ »' ); - -?> diff --git a/www/ecrire/lang/spip_ca.php b/www/ecrire/lang/spip_ca.php index c90b1435..cab1af15 100644 --- a/www/ecrire/lang/spip_ca.php +++ b/www/ecrire/lang/spip_ca.php @@ -1,9 +1,11 @@ 'Anul·lar', 'antispam_champ_vide' => 'Si us plau, deixeu aquest camp buit:', 'articles_recents' => 'Els articles més recents', + 'avis_1_erreur_saisie' => 'Hi ha una errada en la vostra entrada, comprobe les dades.', # MODIF 'avis_archive_incorrect' => 'el fitxer no és pas un fitxer SPIP', 'avis_archive_invalide' => 'el fitxer no és pas vàlid', 'avis_attention' => 'ATENCIÓ !', @@ -43,6 +46,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_erreur_mysql' => 'Error SQL', 'avis_erreur_sauvegarde' => ' Error al desar (@type@ @id_objet@) !', 'avis_erreur_visiteur' => 'Problema d’accés a l’espai privat', + 'avis_nb_erreurs_saisie' => 'Hi ha @nb@ errors en la vostra entrada, comprobe les dades.', // B 'barre_a_accent_grave' => 'Inserir una A majúscula amb accent greu', @@ -108,13 +112,20 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_demain' => 'demà', 'date_fmt_heures_minutes' => '@h@h@m@min', 'date_fmt_heures_minutes_court' => '@h@h@m@', + 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ a les @heure@', + 'date_fmt_jour_heure_debut_fin' => '@jour@ de @heure_debut@ fins @heure_fin@', + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ de @heure_debut@@dtabbr@ a @dtend@@heure_fin@@dtabbr@', 'date_fmt_jour_mois' => '@jourmois@', 'date_fmt_jour_mois_annee' => '@jourmois@ de @annee@', 'date_fmt_mois_annee' => '@nommois@ de @annee@', + 'date_fmt_nomjour' => '@nomjour@ @date@', 'date_fmt_nomjour_date' => 'el @nomjour@ @date@', + 'date_fmt_periode' => 'Del @date_debut@ fins @date_fin@', # RELIRE + 'date_fmt_periode_abbr' => 'Del @dtart@@date_debut@@dtabbr@ fins @dtend@@date_fin@@dtabbr@', 'date_fmt_periode_from' => 'Del', 'date_fmt_periode_to' => 'al', + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'hores', 'date_hier' => 'ahir', 'date_il_y_a' => 'fa @delai@', @@ -224,6 +235,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'envoi_via_le_site' => 'Enviament per mitjà del lloc Web', 'erreur' => 'Error', 'erreur_balise_non_fermee' => 'última etiqueta sense tancar:', + 'erreur_technique_ajaxform' => 'Ooops. Una errada inesperada ha impedit enviar el formulari. Pot tornar a intentar-ho.', + 'erreur_technique_enregistrement_impossible' => 'Una errada tècnica ha impedit l’enregistrament.', 'erreur_texte' => 'error(s)', 'etape' => 'Etapa', @@ -357,6 +370,7 @@ Per confirmar la nova adreça, només heu de connectar-vos a l’adreça que hi 'info_creer_repertoire' => 'Creeu un fitxer o un directori anomenat:', 'info_creer_repertoire_2' => 'a l’interior del subdirectori @repertoire@, després:', 'info_creer_vignette' => 'creació automàtica de la miniatura', + 'info_creerdansrubrique_non_autorise' => 'No té autorització per a crear contingut dins d’aquesta secció', 'info_deplier' => 'Desplegar', 'info_descriptif_nombre' => 'descripció(ns):', 'info_description' => 'Descripció:', @@ -409,7 +423,7 @@ Per confirmar la nova adreça, només heu de connectar-vos a l’adreça que hi 'info_mois_courant' => 'Durant aquest mes:', 'info_mot_cle_ajoute' => 'La paraula clau següent ha estat afegida', 'info_multi_herit' => 'Idioma per defecte', - 'info_multi_langues_soulignees' => 'Les llengües subratllades es beneficien d’una traducció de tots els textos de la interfície. Si seleccioneu aquestes llengües, molts elements del lloc públic (dates, formularis) es traduiran automàticament. En les llengües no subratllades, aquests elements es mostraran en la llengua principal del lloc.', # MODIF + 'info_multi_langues_soulignees' => 'Les llengües subratllades es beneficien d’una traducció de tots els textos de la interfície. Si seleccioneu aquestes llengües, molts elements del lloc públic (dates, formularis) es traduiran automàticament. En les llengües no subratllades, aquests elements es mostraran en la llengua principal del lloc.', 'info_multilinguisme' => 'Multilingüisme', 'info_nom_non_utilisateurs_connectes' => 'El vostre nom no apareix a la llista d’usuaris/àries connectats/des.', 'info_nom_utilisateurs_connectes' => 'El vostre nom apareix a la llista dels usuaris connectats.', @@ -513,7 +527,6 @@ Per confirmar la nova adreça, només heu de connectar-vos a l’adreça que hi 'login_retour_public' => 'Tornar al lloc públic', 'login_retour_site' => 'Tornar al lloc públic', 'login_retoursitepublic' => 'tornar al lloc públic', - 'login_sans_cookiie' => 'Identificació sense galeta', 'login_securise' => 'Inici de sessió segur', 'login_sinscrire' => 'inscriure’s', 'login_test_navigateur' => 'prova de navegador/tornar a connectar', @@ -570,7 +583,7 @@ i tornar-vos a connectar al lloc. 'pass_nouveau_pass' => 'Nova contrasenya', 'pass_ok' => 'D’acord', 'pass_oubli_mot' => 'Oblit de la contrasenya', - 'pass_procedure_changer' => 'Per canviar la contrasenya, hem de verificar primerament la vostra identitat. Per això, indiqueu-nos el correu electrònic associat al vostre compte.', + 'pass_procedure_changer' => 'Per canviar la contrasenya, hem de verificar primerament la vostra identitat. Per això, indiqueu-nos el correu electrònic associat al vostre compte.', # MODIF 'pass_quitter_fenetre' => 'Tancar aquesta finestra', 'pass_rappel_login' => 'Recordatori: la vostra identificació (usuari) és " @login@".', 'pass_recevoir_mail' => 'Voleu rebre un correu electrònic indicant com recuperar l’accés al lloc.', @@ -632,6 +645,7 @@ i tornar-vos a connectar al lloc. 'titre_image_auteur_supprime' => 'Autor/a suprimit/da', 'titre_image_redacteur' => 'Redactor/a sense accés', 'titre_image_redacteur_02' => 'Redactor/a', + 'titre_image_selecteur' => 'Afegir la llista', 'titre_image_visiteur' => 'Visitant', 'titre_joindre_document' => 'INTRODUIR UN DOCUMENT', 'titre_mots_cles' => 'PARAULES CLAU', @@ -642,6 +656,7 @@ i tornar-vos a connectar al lloc. 'titre_statistiques' => 'Estadistiques de la pàgina', 'titre_titre_document' => 'Títol del document:', 'todo' => 'pròximament ', + 'trad_definir_reference' => 'Triar "@titre@" com referència de les traduccions', 'trad_reference' => '(article de referència)', // Z @@ -693,5 +708,3 @@ i tornar-vos a connectar al lloc. 'zxml_vide_balise' => 'etiqueta buida', 'zxml_vu' => 'vist abans' ); - -?> diff --git a/www/ecrire/lang/spip_co.php b/www/ecrire/lang/spip_co.php index f5addea8..67f687e1 100644 --- a/www/ecrire/lang/spip_co.php +++ b/www/ecrire/lang/spip_co.php @@ -1,9 +1,11 @@ '@j@ di @nommois@', 'date_demain' => 'dumane', 'date_fmt_heures_minutes' => '@h@h@m@min', + 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ à @heure@', - 'date_fmt_jour_heure_debut_fin' => 'u @jour@ da @heure_debut@ à @heure_fin@', - 'date_fmt_jour_heure_debut_fin_abbr' => 'u @dtstart@@jour@ da @heure_debut@@dtabbr@ à @dtstart@@heure_fin@@dtend@', + 'date_fmt_jour_heure_debut_fin' => '@jour@ de @heure_debut@ a @heure_fin@', + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ da @heure_debut@@dtabbr@ a @dtstart@@heure_fin@@dtend@', 'date_fmt_jour_mois' => '@jour@ @nommois@', 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ di u @annee@', 'date_fmt_mois_annee' => '@nommois@ di u @annee@', + 'date_fmt_nomjour' => '@nomjour@ @date@', 'date_fmt_nomjour_date' => 'u @nomjour@ @date@', 'date_fmt_periode' => 'Da u @date_debut@ à u @date_fin@', 'date_fmt_periode_abbr' => 'Da u @dtart@@date_debut@@dtabbr@ à u @dtend@@date_fin@@dtabbr@', @@ -513,7 +517,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'login_retour_public' => 'Ritornu à u situ pùbblicu', 'login_retour_site' => 'Ritornu à u situ pùbblicu', 'login_retoursitepublic' => 'ritornu à u situ pùbblicu', - 'login_sans_cookiie' => 'Identificazione senza cookie', 'login_sinscrire' => 'iscrive si', 'login_test_navigateur' => 'prova navigatore/ricunnessione', 'login_verifiez_navigateur' => '(Verificate quantunque chì u vostru navigatore ùn abbia memurizatu u vostru password...)', @@ -697,5 +700,3 @@ Puderete tandu inserisce un nuvellu password 'zxml_vide_balise' => 'balisa viota', 'zxml_vu' => 'vistu prima' ); - -?> diff --git a/www/ecrire/lang/spip_cpf.php b/www/ecrire/lang/spip_cpf.php index 4443086c..a0a6c93a 100644 --- a/www/ecrire/lang/spip_cpf.php +++ b/www/ecrire/lang/spip_cpf.php @@ -1,9 +1,11 @@ '@j@ @nommois@', 'date_demain' => 'domin', 'date_fmt_heures_minutes' => '@h@èr@m@min', + 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ a @heure@', 'date_fmt_jour_mois' => '@jour@ @nommois@', 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@', 'date_fmt_mois_annee' => '@nommois@ @annee@', + 'date_fmt_nomjour' => '@nomjour@ @date@', 'date_fmt_nomjour_date' => 'lo @nomjour@ @date@', 'date_heures' => 'èr', 'date_hier' => 'yèr', @@ -473,7 +477,6 @@ dann out navigatèr é', 'login_retour_public' => 'Artourn sir figirwèb', 'login_retour_site' => 'Artourn sir figirwèb', 'login_retoursitepublic' => 'artourn sir figirwèb', - 'login_sans_cookiie' => 'Lidantifikasyon san lo gatomakro', 'login_sinscrire' => 'inskri aou', 'login_test_navigateur' => 'test navigatèr/nouvo lakostaz', 'login_verifiez_navigateur' => '(Somansa gét byin out navigatèr la pa gardantèt out modpass...)', @@ -623,5 +626,3 @@ aou lès lazéstyon do bann paz-la pou lo wèbmèt prinsipal.
      ', # MODIF 'zbug_serveur_indefini' => 'servèr SQL la lé pa défini', # MODIF 'zbug_table_inconnue' => 'Lo tab SQL « @table@ » la , li lé pa konu' ); - -?> diff --git a/www/ecrire/lang/spip_cpf_hat.php b/www/ecrire/lang/spip_cpf_hat.php index e0969bf6..a3aed5f3 100644 --- a/www/ecrire/lang/spip_cpf_hat.php +++ b/www/ecrire/lang/spip_cpf_hat.php @@ -1,9 +1,11 @@ '@j@ @nommois@', 'date_demain' => 'demen', 'date_fmt_heures_minutes' => '@h@h@m@min', + 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ a @heure@', + 'date_fmt_jour_heure_debut_fin' => '@jour@ de @heure_debut@ a @heure_fin@', + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ de @heure_debut@@dtabbr@ a @dtend@@heure_fin@@dtabbr@', 'date_fmt_jour_mois' => '@jour@ @nommois@', 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@', 'date_fmt_mois_annee' => '@nommois@ @annee@', + 'date_fmt_nomjour' => '@nomjour@ @date@', 'date_fmt_nomjour_date' => 'nan jou ki te @nomjour@ @date@ -a', + 'date_fmt_periode' => 'Del @date_debut@ fins @date_fin@', + 'date_fmt_periode_abbr' => 'Del @dtart@@date_debut@@dtabbr@ fins @dtend@@date_fin@@dtabbr@', 'date_heures' => 'èr (yo)', 'date_hier' => 'yè', 'date_il_y_a' => ' genyen @delai@', @@ -456,7 +464,6 @@ sit "@nom_site_spip@" (@adresse_login@) :', # MODIF 'login_retour_public' => 'Tounyen sou sit piblik', 'login_retour_site' => 'Tounyen sou sit piblik', 'login_retoursitepublic' => 'tounyen dèyè sou sit piblik', - 'login_sans_cookiie' => 'Idantifikasyon ki gen pa pa oken gatomakro', 'login_sinscrire' => 'enskri w', 'login_test_navigateur' => 'test navigatè/rekoneksyon', 'login_verifiez_navigateur' => '(Gad pou si navigatè ou li te pa raple modpas ou...)', @@ -613,5 +620,3 @@ lès plitò jestyon paj sa-yo pou wèbmèt prensipal sou sit-la.
      ', # MODIF 'zbug_serveur_indefini' => 'sèvè SQL ki pa defini', # MODIF 'zbug_table_inconnue' => 'Tab SQL « @table@ » se pa koni' ); - -?> diff --git a/www/ecrire/lang/spip_cs.php b/www/ecrire/lang/spip_cs.php index 41b8ccd6..78040696 100644 --- a/www/ecrire/lang/spip_cs.php +++ b/www/ecrire/lang/spip_cs.php @@ -1,9 +1,11 @@ 'Zpět na veřejné stránky', 'login_retour_site' => 'Zpět na veřejné stránky', 'login_retoursitepublic' => 'zpět na veřejné stránky', - 'login_sans_cookiie' => 'Identifikace bez použití cookies', 'login_sinscrire' => 'registrovat', 'login_test_navigateur' => 'test prohlížeče/opakované připojení', 'login_verifiez_navigateur' => '(Přesvědčte se však, zda si prohlížeč nezapamatoval vaše heslo...)', @@ -620,5 +621,3 @@ a znovu se ke stránkám připojíte. 'zbug_serveur_indefini' => 'Nedefinovaný server SQL', # MODIF 'zbug_table_inconnue' => 'Neznámá tabulka SQL "@table@"' ); - -?> diff --git a/www/ecrire/lang/spip_da.php b/www/ecrire/lang/spip_da.php index 1c2a46a1..dc9c3e33 100644 --- a/www/ecrire/lang/spip_da.php +++ b/www/ecrire/lang/spip_da.php @@ -1,9 +1,11 @@ 'Tilbage til det offentlige websted', 'login_retour_site' => 'Tilbage til den offentlige websted', 'login_retoursitepublic' => 'tilbage til den offentlige websted', - 'login_sans_cookiie' => 'Identifikation uden cookie', 'login_sinscrire' => 'tilmelding', 'login_test_navigateur' => 'test af browser/nyt login', 'login_verifiez_navigateur' => '(Men kontroller, at din browser ikke har gemt adgangskoden...)', @@ -576,5 +577,3 @@ og igen få adgang til webstedet.', # MODIF 'zbug_parametres_inclus_incorrects' => 'Paramètres d’inclusion incorrects', # MODIF 'zbug_serveur_indefini' => 'serveur SQL indéfini' # MODIF ); - -?> diff --git a/www/ecrire/lang/spip_de.php b/www/ecrire/lang/spip_de.php index 8b4a18d4..11e78803 100644 --- a/www/ecrire/lang/spip_de.php +++ b/www/ecrire/lang/spip_de.php @@ -1,9 +1,11 @@ 'Abbrechen', 'antispam_champ_vide' => 'Bitte lassen Sie dieses Feld leer:', 'articles_recents' => 'Die neuesten Artikel', + 'avis_1_erreur_saisie' => 'Ihre Eingabe enthält einen Fehler, bitte überprüfen Sie die Informationen.', 'avis_archive_incorrect' => 'Die archivierte Datei ist keine SPIP-Datei', 'avis_archive_invalide' => 'Die archivierte Datei ist keine SPIP-Datei', 'avis_attention' => 'ACHTUNG!', @@ -43,6 +46,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_erreur_mysql' => 'SQL-Fehler', 'avis_erreur_sauvegarde' => 'Fehler in der Sicherung (@type@ @id_objet@) ! ', 'avis_erreur_visiteur' => 'Ein Problem beim Zugang zum Redaktionssystem ist aufgetreten.', + 'avis_nb_erreurs_saisie' => 'Ihre Eingabe enthält @nb@ Fehler, bitte überprüfen Sie die Informationen.', // B 'barre_a_accent_grave' => 'Grosses A mit accent grave einfügen', @@ -110,8 +114,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_heures_minutes_court' => '@h@:@m@', 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ um @heure@', - 'date_fmt_jour_heure_debut_fin' => 'am @jour@ von @heure_debut@ bis @heure_fin@', - 'date_fmt_jour_heure_debut_fin_abbr' => 'am @dtstart@@jour@ von @heure_debut@@dtabbr@ bis @dtstart@@heure_fin@@dtend@', + 'date_fmt_jour_heure_debut_fin' => '@jour@ von @heure_debut@ bis @heure_fin@', + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ von @heure_debut@@dtabbr@ bis @dtend@@heure_fin@@dtabbr@', 'date_fmt_jour_mois' => '@jour@. @nommois@', 'date_fmt_jour_mois_annee' => '@jour@. @nommois@ @annee@', 'date_fmt_mois_annee' => '@nommois@ @annee@', @@ -121,6 +125,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_periode_abbr' => 'Vom @dtart@@date_debut@@dtabbr@ bis zum @dtend@@date_fin@@dtabbr@', 'date_fmt_periode_from' => 'Von', 'date_fmt_periode_to' => 'bis', + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'Stunden', 'date_hier' => 'gestern', 'date_il_y_a' => 'vor @delai@', @@ -173,7 +178,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_jour_6' => 'Freitag', 'date_jour_6_abbr' => 'Fr.', 'date_jour_6_initiale' => 'F', - 'date_jour_7' => 'Sonnabend', + 'date_jour_7' => 'Samstag', 'date_jour_7_abbr' => 'Sa.', 'date_jour_7_initiale' => 'S', 'date_jours' => 'Tagen', @@ -233,6 +238,7 @@ Verzeichnisse zu setzen.Die Installationsanleitung erläutert die Details dazu.< 'envoi_via_le_site' => 'Gesendet über Website ', 'erreur' => 'Fehler', 'erreur_balise_non_fermee' => 'Letzter Tag nicht geschlossen:', + 'erreur_technique_ajaxform' => 'Ups. Das Formular wurde aufgrund eines technischen Fehlers nicht abgeschickt. Sie können es erneut versuchen.', 'erreur_technique_enregistrement_champs' => 'Das Feld @champs@ konnte aufgrund eines technischen Problems nicht gespeichert werden.', 'erreur_technique_enregistrement_impossible' => 'Technisches Prolem: Speichern nicht möglich.', 'erreur_texte' => 'Fehler', @@ -271,7 +277,7 @@ wird Ihre Adresse beibehalten): 'form_indiquer_nom_site' => 'Bitte geben Sie den Namen Ihrer Website an.', 'form_pet_deja_enregistre' => 'Diese Website wurde bereits erfasst', 'form_pet_signature_pasprise' => 'Ihre Signatur wird nicht berücksichtigt.', - 'form_prop_confirmer_envoi' => 'Senden', + 'form_prop_confirmer_envoi' => 'Endgültig senden', 'form_prop_description' => 'Beschreibung/Kommentar', 'form_prop_enregistre' => 'Ihr Vorschlag wurde gespeichert und wird nach Freigabe durch die Redaktion der Website angezeigt.', 'form_prop_envoyer' => 'Nachricht senden', @@ -525,7 +531,7 @@ wird Ihre Adresse beibehalten): 'login_retour_public' => 'Zurück zur öffentlichen Website', 'login_retour_site' => 'Zurück zur öffentlichen Website', 'login_retoursitepublic' => 'Zurück zur öffentlichen Website', - 'login_sans_cookiie' => 'Anmeldung ohne Cookies', + 'login_sans_cookie' => 'Login ohne Cookie', 'login_securise' => 'Sicheres Login', 'login_sinscrire' => 'anmelden', 'login_test_navigateur' => 'Test Webbrowser/Verbindung', @@ -580,7 +586,7 @@ Sie können auf dieser Seite ein neues Passwort eingeben und sich wieder bei der 'pass_nouveau_pass' => 'Neues Passwort', 'pass_ok' => 'O.K.', 'pass_oubli_mot' => 'Passwort vergessen', - 'pass_procedure_changer' => 'Um Ihr Paßwort zu ändern, müssen wir zunächst Ihre Identität prüfen. Bitte geben Sie die Mailadresse Ihres Accounts an.', + 'pass_procedure_changer' => 'Um Ihr Paßwort zu ändern, geben Sie bitte die Mailadresse Ihres Accounts an.', 'pass_quitter_fenetre' => 'Dieses Fenster verlassen', 'pass_rappel_login' => 'Erinnerung: Ihr Login ist «@login@».', 'pass_recevoir_mail' => 'Sie erhalten eine E-Mail mit allen Informationen um wieder Zugang zur Website zu erhalten.', @@ -638,6 +644,7 @@ Sie können auf dieser Seite ein neues Passwort eingeben und sich wieder bei der 'titre_image_auteur_supprime' => 'gelöschter Autor', 'titre_image_redacteur' => 'Redakteur ohne Systemzugang', 'titre_image_redacteur_02' => 'Redakteur', + 'titre_image_selecteur' => 'Liste anzeigen', 'titre_image_visiteur' => 'Besucher', 'titre_joindre_document' => 'DOKUMENT ANFÜGEN', 'titre_mots_cles' => 'SCHLAGWORTE', @@ -648,6 +655,7 @@ Sie können auf dieser Seite ein neues Passwort eingeben und sich wieder bei der 'titre_statistiques' => 'Statistiken', 'titre_titre_document' => 'Titel des Dokuments:', 'todo' => 'demnächst', + 'trad_definir_reference' => 'Wählen Sie "@titre@" als Referenz für Übersetzungen', 'trad_reference' => '(Referenzartikel)', // Z @@ -661,6 +669,7 @@ Sie können auf dieser Seite ein neues Passwort eingeben und sich wieder bei der 'zbug_champ_hors_motif' => 'Feld @champ@ befindet sich ausserhalb eines Kontexts @motif@', 'zbug_code' => 'Code', 'zbug_critere_inconnu' => 'Unbekanntes Kriterium @critere@', + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} für eine Tabelle ohne eindeutigen Schlüssel', 'zbug_distant_interdit' => 'Extern unzulässig', 'zbug_doublon_table_sans_cle_primaire' => 'Dublette in einer Tabelle ohne eindeutigen Primärschlüssel', 'zbug_doublon_table_sans_index' => 'Dublette in Tabelle ohne Index', @@ -699,5 +708,3 @@ Sie können auf dieser Seite ein neues Passwort eingeben und sich wieder bei der 'zxml_vide_balise' => 'leerer Tag', 'zxml_vu' => 'bereits gesehen' ); - -?> diff --git a/www/ecrire/lang/spip_en.php b/www/ecrire/lang/spip_en.php index e4ca3710..dcdd08bf 100644 --- a/www/ecrire/lang/spip_en.php +++ b/www/ecrire/lang/spip_en.php @@ -1,9 +1,11 @@ 'Cancel', 'antispam_champ_vide' => 'Please leave this field empty:', 'articles_recents' => 'Most recent articles', + 'avis_1_erreur_saisie' => 'Your entry contains an error, please check your information.', 'avis_archive_incorrect' => 'archive is not a valid SPIP file', 'avis_archive_invalide' => 'archive file is not valid', 'avis_attention' => 'CAUTION!', @@ -43,6 +46,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_erreur_mysql' => 'SQL error', 'avis_erreur_sauvegarde' => 'Error in backup (@type@ @id_objet@)!', 'avis_erreur_visiteur' => 'Problem entering the private area', + 'avis_nb_erreurs_saisie' => 'Your entry contains @nb@ errors, please check your information.', // B 'barre_a_accent_grave' => 'Insert a capital A with grave accent', @@ -111,7 +115,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ at @heure@', 'date_fmt_jour_heure_debut_fin' => '@jour@ from @heure_debut@ to @heure_fin@', - 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ from @heure_debut@@dtabbr@ to @dtstart@@heure_fin@@dtend@', + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ from @heure_debut@@dtabbr@ to @dtend@@heure_fin@@dtabbr@', 'date_fmt_jour_mois' => '@jourmois@', 'date_fmt_jour_mois_annee' => '@jourmois@ @annee@', 'date_fmt_mois_annee' => '@nommois@ @annee@', @@ -121,6 +125,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_periode_abbr' => 'From @dtart@@date_debut@@dtabbr@ to @dtend@@date_fin@@dtabbr@', 'date_fmt_periode_from' => 'From', 'date_fmt_periode_to' => 'to', + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'hours', 'date_hier' => 'yesterday', 'date_il_y_a' => '@delai@ ago', @@ -285,6 +290,8 @@ the site "@nom_site_spip@" (@adresse_login@):', 'form_prop_non_enregistre' => 'Your suggestion has not been recorded.', 'form_prop_sujet' => 'Subject', 'form_prop_url_site' => 'Site URL', + 'format_date_incorrecte' => 'The date or its format is incorrect.', + 'format_heure_incorrecte' => 'The hour or its format is incorrect.', 'forum_non_inscrit' => 'Either you are not registered, or the address or password are wrong.', 'forum_par_auteur' => 'by @auteur@', 'forum_titre_erreur' => 'Error...', @@ -531,7 +538,7 @@ the site "@nom_site_spip@" (@adresse_login@):', 'login_retour_public' => 'Back to the public site', 'login_retour_site' => 'Back to the public site', 'login_retoursitepublic' => 'back to the public site', - 'login_sans_cookiie' => 'Identification without cookie', + 'login_sans_cookie' => 'Identification without cookie', 'login_securise' => 'Secure login', 'login_sinscrire' => 'register', 'login_test_navigateur' => 'testing browser/reconnection', @@ -540,6 +547,9 @@ the site "@nom_site_spip@" (@adresse_login@):', // M 'masquer_colonne' => 'Hide this column', 'masquer_trad' => 'hide translations', + 'message_nouveaux_identifiants_echec' => 'New identifiers could not be created.', + 'message_nouveaux_identifiants_echec_envoi' => 'The new connection identifiers could not be sent.', + 'message_nouveaux_identifiants_ok' => 'The new connection identifiers were sent to @email@.', 'module_fichiers_langues' => 'Language files', // N @@ -674,6 +684,7 @@ and log in to the site. 'titre_statistiques' => 'Site statistics', 'titre_titre_document' => 'Document title:', 'todo' => 'to come', + 'trad_definir_reference' => 'Choose "@titre@" as a reference for translations', 'trad_reference' => '(reference for translations)', // Z @@ -687,6 +698,7 @@ and log in to the site. 'zbug_champ_hors_motif' => 'Field @champ@ outside context @motif@', 'zbug_code' => 'code', 'zbug_critere_inconnu' => 'Unknown criterion @critere@', + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} on a table without atomic primary key', 'zbug_distant_interdit' => 'External data forbidden', 'zbug_doublon_table_sans_cle_primaire' => 'Duplicate entries on a table which does not have a simple primary key', 'zbug_doublon_table_sans_index' => 'Duplicate entries on a table without an index', @@ -725,5 +737,3 @@ and log in to the site. 'zxml_vide_balise' => 'empty tag', 'zxml_vu' => 'seen before' ); - -?> diff --git a/www/ecrire/lang/spip_eo.php b/www/ecrire/lang/spip_eo.php index f6e87a81..37401b32 100644 --- a/www/ecrire/lang/spip_eo.php +++ b/www/ecrire/lang/spip_eo.php @@ -1,9 +1,11 @@ '@h@h@m@', 'date_fmt_jour' => '@nomjour@ la @jour@a', 'date_fmt_jour_heure' => '@jour@ je la @heure@', - 'date_fmt_jour_heure_debut_fin' => 'la @jour@ de @heure_debut@ ĝis @heure_fin@', - 'date_fmt_jour_heure_debut_fin_abbr' => 'la @dtstart@@jour@a de @heure_debut@@dtabbr@ ĝis @dtstart@@heure_fin@@dtend@', + 'date_fmt_jour_heure_debut_fin' => 'la @jour@ de @heure_debut@ ĝis @heure_fin@', # MODIF + 'date_fmt_jour_heure_debut_fin_abbr' => 'la @dtstart@@jour@a de @heure_debut@@dtabbr@ ĝis @dtstart@@heure_fin@@dtend@', # MODIF 'date_fmt_jour_mois' => '@jour@a @nommois@', 'date_fmt_jour_mois_annee' => '@jour@a @nommois@ @annee@', 'date_fmt_mois_annee' => '@nommois@ @annee@', @@ -529,7 +531,6 @@ aŭ kontaktu vian retgastiganton.', 'login_retour_public' => 'Reen al la publika spaco', 'login_retour_site' => 'Reen al la publika spaco', 'login_retoursitepublic' => 'reen al la publika spaco', - 'login_sans_cookiie' => 'Ensaluto sen kuketo', 'login_securise' => 'Sekura salutnomo', 'login_sinscrire' => 'registriĝi', 'login_test_navigateur' => 'testo retumilo/rekonektiĝo', @@ -593,7 +594,7 @@ kaj ensaluti. 'pass_nouveau_pass' => 'Nova pasvorto', 'pass_ok' => 'JES', 'pass_oubli_mot' => 'Pasvorto-forgeso', - 'pass_procedure_changer' => 'Por ŝanĝi vian pasvorton, ni unue devas kontroli vian identecon. Por tio, specifu al ni la asociitan retpoŝtadreson el via konto.', + 'pass_procedure_changer' => 'Por ŝanĝi vian pasvorton, ni unue devas kontroli vian identecon. Por tio, specifu al ni la asociitan retpoŝtadreson el via konto.', # MODIF 'pass_quitter_fenetre' => 'Forlasi tiun fenestron', 'pass_rappel_login' => 'Memoru : via ensalutilo (salutnomo) estas « @login@ ».', 'pass_recevoir_mail' => 'Vi ricevos retmesaĝon indikantan al vi kiel retrovi vian aliron al la retejo.', @@ -723,5 +724,3 @@ sub la respondeco de la ĉefa retejestro .
      ', 'zxml_vide_balise' => 'malplena marko', 'zxml_vu' => 'antaŭe vidita' ); - -?> diff --git a/www/ecrire/lang/spip_es.php b/www/ecrire/lang/spip_es.php index f7ca8f2a..146ef2bd 100644 --- a/www/ecrire/lang/spip_es.php +++ b/www/ecrire/lang/spip_es.php @@ -1,9 +1,11 @@ 'Cancelar', 'antispam_champ_vide' => 'Por favor, deje este campo vacío :', 'articles_recents' => 'Los artículos más recientes', + 'avis_1_erreur_saisie' => 'Hay 1 error en su entrada, verifique por favor la información.', 'avis_archive_incorrect' => 'El archivo de respaldo no es un archivo SPIP.', 'avis_archive_invalide' => 'el archivo de respaldo no es válido', 'avis_attention' => '¡ATENCIÓN!', @@ -43,6 +46,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_erreur_mysql' => 'Error SQL', 'avis_erreur_sauvegarde' => 'Error al hacer la copia de respaldo (@type@ @id_objet@)!', 'avis_erreur_visiteur' => 'Probleme de acceso al espacio privado', + 'avis_nb_erreurs_saisie' => 'Hay @nb@ errores en su entrada, verifique por favor la información.', // B 'barre_a_accent_grave' => 'Insertar una A mayúscula con acento grave', @@ -110,8 +114,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_heures_minutes_court' => '@h@h@m@', 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ a las @heure@', - 'date_fmt_jour_heure_debut_fin' => 'el @jour@ de las @heure_debut@ a las @heure_fin@', - 'date_fmt_jour_heure_debut_fin_abbr' => 'el @dtstart@@jour@ de las @heure_debut@@dtabbr@ a las @dtstart@@heure_fin@@dtend@', + 'date_fmt_jour_heure_debut_fin' => '@jour@ de las @heure_debut@ a las @heure_fin@', + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ de las @heure_debut@@dtabbr@ a las @dtend@@heure_fin@@dtabbr@', 'date_fmt_jour_mois' => '@jour@ de @nommois@', 'date_fmt_jour_mois_annee' => '@jour@ de @nommois@ de @annee@', 'date_fmt_mois_annee' => '@nommois@ de @annee@', @@ -121,6 +125,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_periode_abbr' => 'Del @dtart@@date_debut@@dtabbr@ al @dtend@@date_fin@@dtabbr@', 'date_fmt_periode_from' => 'Del', 'date_fmt_periode_to' => 'al', + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'horas', 'date_hier' => 'ayer', 'date_il_y_a' => 'hace @delai@', @@ -528,7 +533,7 @@ en el sitio "@nom_site_spip@" (@adresse_login@):', 'login_retour_public' => 'Volver al sitio público', 'login_retour_site' => 'Volver al sitio público', 'login_retoursitepublic' => 'volver al sitio público', - 'login_sans_cookiie' => 'Identificación sin "cookie"', + 'login_sans_cookie' => 'Identificación sin "cookie"', 'login_securise' => 'Conexión segura', 'login_sinscrire' => 'inscribirse', 'login_test_navigateur' => 'prueba de navegador/reconexión', @@ -586,7 +591,7 @@ volver a conectarte al sitio. 'pass_nouveau_pass' => 'Nueva contraseña', 'pass_ok' => 'OK', 'pass_oubli_mot' => 'Contraseña olvidada', - 'pass_procedure_changer' => 'Para cambiar tu contraseña, primero es necesario verificar tu identidad. Para eso, indica la dirección email asociada a tu cuenta.', + 'pass_procedure_changer' => 'Para cambiar su contraseña, indique por favor el correo electrónico asociado a su cuenta.', 'pass_quitter_fenetre' => 'Abandonar esta ventana', 'pass_rappel_login' => 'Recuerda: tu identificador (login) es «@login@».', 'pass_recevoir_mail' => 'Recibirás un mensaje de correo electrónico indicando como recuperar tu acceso al sitio.', @@ -656,6 +661,7 @@ Intenta', 'titre_statistiques' => 'Estadísticas del sitio', 'titre_titre_document' => 'Título del documento', 'todo' => 'a continuación', + 'trad_definir_reference' => 'Elegir "@titre@" como referencia de las traducciones', 'trad_reference' => '(referencia de las traducciones)', // Z @@ -669,6 +675,7 @@ Intenta', 'zbug_champ_hors_motif' => 'El campo @champ@ está fuera de contexto @motif@', 'zbug_code' => 'código', 'zbug_critere_inconnu' => 'Criterio @critere@ desconocido ', + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} en una tabla sin clave primaria simple', 'zbug_distant_interdit' => 'Acceso externo prohibido', 'zbug_doublon_table_sans_cle_primaire' => 'Doublons en una tabla sin clave primaria simple', 'zbug_doublon_table_sans_index' => 'Doublons en una tabla sin índice', @@ -707,5 +714,3 @@ Intenta', 'zxml_vide_balise' => 'baliza vacía', 'zxml_vu' => 'visto antes' ); - -?> diff --git a/www/ecrire/lang/spip_eu.php b/www/ecrire/lang/spip_eu.php index 86f8fd0f..58b8a5bd 100644 --- a/www/ecrire/lang/spip_eu.php +++ b/www/ecrire/lang/spip_eu.php @@ -1,9 +1,11 @@ '@h@h@m@', 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@@heure@-etan', - 'date_fmt_jour_heure_debut_fin' => '@jour@-an @heure_debut@-tik @heure_fin@-ra', - 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@-an @heure_debut@@dtabbr@-tik @dtstart@@heure_fin@@dtend@-ra', + 'date_fmt_jour_heure_debut_fin' => '@jour@-an @heure_debut@-tik @heure_fin@-ra', # MODIF + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@-an @heure_debut@@dtabbr@-tik @dtstart@@heure_fin@@dtend@-ra', # MODIF 'date_fmt_jour_mois' => '@nommois@ren @jour@a', - 'date_fmt_jour_mois_annee' => '@annee@-ko @nommois@ren @jour@a', + 'date_fmt_jour_mois_annee' => '@annee@(e)ko @nommois@ren @jour@a', 'date_fmt_mois_annee' => '@annee@-ko @nommois@', 'date_fmt_nomjour' => '@nomjour@ @date@', 'date_fmt_nomjour_date' => '@nomjour@ @date@-a', @@ -528,7 +530,6 @@ Zure pasahitza sarean atzeman ahal izatea nahi ez baduzu, JavaScript-a aktibatu 'login_retour_public' => 'Eremu publikora itzuli', 'login_retour_site' => 'Eremu publikora itzuli', 'login_retoursitepublic' => 'eremu publikora itzuli', - 'login_sans_cookiie' => 'Identifikazioa "cookie" barik', 'login_securise' => 'Login segurua', 'login_sinscrire' => 'inskribatu', 'login_test_navigateur' => 'nabigatzaile proba/berkonexioa', @@ -581,7 +582,7 @@ Orduan pasahitza berri bat jarri eta gunera berriz konektatzen ahalko zara. ', 'pass_nouveau_pass' => 'Pasahitz berria', 'pass_ok' => 'OK', 'pass_oubli_mot' => 'Pasahitza ahaztu dut', - 'pass_procedure_changer' => 'Pasahitza aldatu aitzin, zure nortasuna baieztatu behar dugu. Horregatik zure kontuari lotutako helbide elektronikoa jakinarazi behar diguzu.', + 'pass_procedure_changer' => 'Pasahitza aldatu aitzin, zure nortasuna baieztatu behar dugu. Horregatik zure kontuari lotutako helbide elektronikoa jakinarazi behar diguzu.', # MODIF 'pass_quitter_fenetre' => 'Leiho honetatik irten', 'pass_rappel_login' => 'Gogoan izan: zure identifikatzailea (logina) hau da : «@login@».', 'pass_recevoir_mail' => 'Gunerako sarbidea nola berreskuratzen ahal duzun zehazten duen mezu bat jasoko duzu.', @@ -702,5 +703,3 @@ Modu orokorrean, orrialde hauetako kudeaketa zure guneko web arduradun nagusiari 'zxml_vide_balise' => 'etiketa hutsa', 'zxml_vu' => 'jadanik ikusia' ); - -?> diff --git a/www/ecrire/lang/spip_fa.php b/www/ecrire/lang/spip_fa.php index eec8a361..44b06e5a 100644 --- a/www/ecrire/lang/spip_fa.php +++ b/www/ecrire/lang/spip_fa.php @@ -1,9 +1,11 @@ 'باطل شود', 'antispam_champ_vide' => 'خواهشمند است اين قسمت را خالى بگذاريد:', 'articles_recents' => 'تازه ترين مقاله ها', + 'avis_1_erreur_saisie' => 'يك خطا در حساب شما هست، دوست داريد اطلاعات را تأييد كنيد.', 'avis_archive_incorrect' => 'فايل بايگاني فايل اسپيپ نيست', 'avis_archive_invalide' => 'فايل بايگانى معتبر نميباشد', 'avis_attention' => 'توجه !', @@ -108,13 +111,20 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_demain' => 'فردا', 'date_fmt_heures_minutes' => '@h@h@m@min', 'date_fmt_heures_minutes_court' => '@h@h@m@', + 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => ' @heure@ @jour@ ', + 'date_fmt_jour_heure_debut_fin' => ' @jour@ از @heure_debut@ تا @heure_fin@', # MODIF + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ از @heure_debut@@dtabbr@ تا @dtstart@@heure_fin@@dtend@', # MODIF 'date_fmt_jour_mois' => '@jour@ @nommois@', 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@', 'date_fmt_mois_annee' => '@nommois@ @annee@', + 'date_fmt_nomjour' => '@nomjour@ @date@', 'date_fmt_nomjour_date' => '@nomjour@ @date@', + 'date_fmt_periode' => 'از @date_debut@ تا @date_fin@', + 'date_fmt_periode_abbr' => ' از @dtart@@date_debut@@dtabbr@ تا@dtend@@date_fin@@dtabbr@', 'date_fmt_periode_from' => 'از ', 'date_fmt_periode_to' => 'تا', + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'ساعت', 'date_hier' => 'ديروز', 'date_il_y_a' => '@delai@ پيش', @@ -222,6 +232,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'envoi_via_le_site' => 'ارسال از طريق سايت', 'erreur' => 'اشتباه', 'erreur_balise_non_fermee' => 'آخرین برچسب (Tag) بسته نشده:', + 'erreur_technique_ajaxform' => 'واي! يك خطاي غيرمنتظره مانع از ارايه اين فرم مي‌شود. دوباره سعي كنيد. ', 'erreur_technique_enregistrement_champs' => 'يك خطاي فني از حق ثبت نام ميدان @champs@ جلوگيري كرده است.', 'erreur_technique_enregistrement_impossible' => 'يك خطاي فني مانع از ثبت نام است. ', 'erreur_texte' => 'اشتباه', @@ -372,8 +383,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_erreur_requete' => ': اشتباه در درخواست', 'info_erreur_squelette2' => 'هيچ اسكلتي @fichier@در دسترس نميباشد', 'info_erreur_systeme' => 'اشتباه در سيستم(errno @errsys@)', - 'info_erreur_systeme2' => 'يا ديسك رايانه پر شده يا پایگاه داده‌ها صدمه ديده اند.
      -يا پایگاه داده‌ها را درست كنيد, يا با ميزبانتان تماس بگيريد.', # MODIF + 'info_erreur_systeme2' => 'شايد هارد ديسك پر شده باشد، يا پايگاه داده‌ها آسيب ديده باشد
      +سعي كنيد پايگاه داده‌ها را تعمير كنيد base, يا با ميزبان خود تماس بگيريد.', 'info_fini' => 'پايان!', 'info_format_image' => 'اندازه هاى تصاويرى كه ميتوانند براى ساختن همان تصاوير ولى بصورت كوچك مورد استفاده قرار بگيرند: @gd_formats@.', 'info_format_non_defini' => 'اندازه مشخص نشده', @@ -409,7 +420,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_mois_courant' => ':در ماه جارى', 'info_mot_cle_ajoute' => 'كليد-واژه بعدى اضافه شده به', 'info_multi_herit' => ' زبان اصلی', - 'info_multi_langues_soulignees' => 'نماى سايت بطور كامل به زبانهاى مشخص شده, ترجمه شده. هنگامي كه شما اين زبانها را انتخاب مي‌كنيد شمارى از اجزاى سايت مانند تاريخ, بطور خودكار برگردان ميشوند. براى زبانهاى مشخص نشده اين اجزا به زبان اصلى سايت نمايان خواهند شد.', # MODIF + 'info_multi_langues_soulignees' => 'زبان‌هاي مشخص شده ترجمه تمام يا بخشي از متن‌هاي نرم‌افزار واسط را ارايه مي‌دهد. اگر اين زبان‌ها را انتخاب كنيد، بعضي از عناصر سايت عمومي (تاريخ‌ها، فرم‌ها) به صورت خود به خودي ترجمه مي‌شود. براي زبان‌هايي كه مشخص نشده‌اند، اين عناصر باز زبان پيش‌گزيده سايت نمايش داده مي‌شوند. ', 'info_multilinguisme' => 'چند زبانه گى', 'info_nom_non_utilisateurs_connectes' => 'نامتان در فهرست كاربران متصل به تارنما نميباشد', 'info_nom_utilisateurs_connectes' => 'نامتان در فهرست كاربران متصل به تارنما ميباشد', @@ -513,7 +524,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'login_retour_public' => 'بازگشت به سايت همگانى', 'login_retour_site' => 'بازگشت به سايت همگانى', 'login_retoursitepublic' => 'بازگشت به سايت همگانى', - 'login_sans_cookiie' => 'شناسائى بدون كوكى cookie', 'login_securise' => 'لاگين امن ', 'login_sinscrire' => 'ثبت نام ', 'login_test_navigateur' => 'آزمايش مرورگر/ ارتباط دوباره', @@ -560,7 +570,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'pass_nouveau_pass' => 'كلمه ورودى جديد', 'pass_ok' => 'OK', 'pass_oubli_mot' => 'فراموشى كلمه ورودى ', - 'pass_procedure_changer' => 'براي تغيير گذرواژه‌ي خود، ما بايد اول شما را شناسايي كنيم. براي اين كار نشاني ايميل مربوط به حساب خود را به ما اعلام كنيد. ', + 'pass_procedure_changer' => 'براي تغيير گذرواژه‌ي خود، ما بايد اول شما را شناسايي كنيم. براي اين كار نشاني ايميل مربوط به حساب خود را به ما اعلام كنيد. ', # MODIF 'pass_quitter_fenetre' => 'اين پنجره را ترك كنيد', 'pass_rappel_login' => '(login)شما : « @login@ ».', 'pass_recevoir_mail' => ' شما ايميلى دريافت خواهيد كرد كه شامل راهنماى ورودتان به سايت ميباشد', @@ -618,6 +628,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_image_auteur_supprime' => 'نويسنده حذف شده', 'titre_image_redacteur' => 'نويسنده بدون حق دسترسى', 'titre_image_redacteur_02' => 'نويسنده', + 'titre_image_selecteur' => 'نشان دادن ليست', 'titre_image_visiteur' => 'بازديد كننده', 'titre_joindre_document' => 'يك سند اضافه كنيد', 'titre_mots_cles' => 'واژه-كليدها', @@ -679,5 +690,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'zxml_vide_balise' => 'TAG خالی', 'zxml_vu' => 'قبلأ دیده شده' ); - -?> diff --git a/www/ecrire/lang/spip_fon.php b/www/ecrire/lang/spip_fon.php index 971dd985..46c28eb0 100644 --- a/www/ecrire/lang/spip_fon.php +++ b/www/ecrire/lang/spip_fon.php @@ -1,9 +1,11 @@ 'Mi lɛkɔ yì gblogblojí ɔ ', 'login_retour_site' => 'Mi lɛkɔ yì gblogblojí ɔ ', 'login_retoursitepublic' => 'Mi lɛkɔ yì gblogblojí ɔ ', - 'login_sans_cookiie' => 'Mi sɔ xlɛ bó jò koki lɛ ɖó', 'login_sinscrire' => 'Ná nyíkɔ ', 'login_test_navigateur' => 'ɖèxlɛtɔ/àlɔwlí ɖévó', 'login_verifiez_navigateur' => '(mi kpɔn ɖɔ ɖèxlɛtɔ yí gbètákɛn à jí ...)', @@ -549,5 +550,3 @@ Nú mi ná ɖó mɔ nɔtɛn gblogblojí é lɔ tɔn mi yì 'zbug_serveur_indefini' => 'Mɔxwìtíxwìtítàtɔ SQL tɔn ê mà tɛɖɛ é jì a ', # MODIF 'zbug_table_inconnue' => 'Tìtòmɛ SQL « @table@ »yè mà tùn' ); - -?> diff --git a/www/ecrire/lang/spip_fr.php b/www/ecrire/lang/spip_fr.php index dc1fc6f9..6d8ceb6a 100644 --- a/www/ecrire/lang/spip_fr.php +++ b/www/ecrire/lang/spip_fr.php @@ -1,7 +1,9 @@ 'Annuler', 'antispam_champ_vide' => 'Veuillez laisser ce champ vide :', 'articles_recents' => 'Articles les plus récents', + 'avis_1_erreur_saisie' => 'Il y a 1 erreur dans votre saisie, veuillez vérifier les informations.', 'avis_archive_incorrect' => 'le fichier archive n’est pas un fichier SPIP', 'avis_archive_invalide' => 'le fichier archive n’est pas valide', 'avis_attention' => 'ATTENTION !', @@ -41,6 +44,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_erreur_mysql' => 'Erreur SQL', 'avis_erreur_sauvegarde' => 'Erreur dans la sauvegarde (@type@ @id_objet@) !', 'avis_erreur_visiteur' => 'Problème d’accès à l’espace privé', + 'avis_nb_erreurs_saisie' => 'Il y a @nb@ erreurs dans votre saisie, veuillez vérifier les informations.', // B 'barre_a_accent_grave' => 'Insérer un A accent grave majuscule', @@ -119,7 +123,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_periode_abbr' => 'Du @dtart@@date_debut@@dtabbr@ au @dtend@@date_fin@@dtabbr@', 'date_fmt_periode_from' => 'Du', 'date_fmt_periode_to' => 'au', - 'date_fmt_saison_annee' => '@saison@ @annee@', // Retour du filtre saison_annee "été 2014", reçoit comme argument 'saison' (string) et année (int) + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'heures', 'date_hier' => 'hier', 'date_il_y_a' => 'il y a @delai@', @@ -284,6 +288,8 @@ le site "@nom_site_spip@" (@adresse_login@) :', 'form_prop_non_enregistre' => 'Votre proposition n’a pas été enregistrée.', 'form_prop_sujet' => 'Sujet', 'form_prop_url_site' => 'Adresse URL du site', + 'format_date_incorrecte' => 'La date ou son format est incorrect', + 'format_heure_incorrecte' => 'L’heure ou son format est incorrect', 'forum_non_inscrit' => 'Vous n’êtes pas inscrit, ou l’adresse ou le mot de passe sont erronés.', 'forum_par_auteur' => 'par @auteur@', 'forum_titre_erreur' => 'Erreur...', @@ -530,7 +536,7 @@ le site "@nom_site_spip@" (@adresse_login@) :', 'login_retour_public' => 'Retour au site public', 'login_retour_site' => 'Retour au site public', 'login_retoursitepublic' => 'retour au site public', - 'login_sans_cookiie' => 'Identification sans cookie', + 'login_sans_cookie' => 'Identification sans cookie', 'login_securise' => 'Login sécurisé', 'login_sinscrire' => 's’inscrire', 'login_test_navigateur' => 'test navigateur/reconnexion', @@ -539,6 +545,9 @@ le site "@nom_site_spip@" (@adresse_login@) :', // M 'masquer_colonne' => 'Masquer cette colonne', 'masquer_trad' => 'masquer les traductions', + 'message_nouveaux_identifiants_echec' => 'Impossible de générer de nouveaux identifiants.', + 'message_nouveaux_identifiants_echec_envoi' => 'Les nouveaux identifiants de connexion n’ont pas pu être envoyés.', + 'message_nouveaux_identifiants_ok' => 'Les nouveaux identifiants de connexion ont été envoyés à @email@.', 'module_fichiers_langues' => 'Fichiers de langue', // N @@ -594,7 +603,7 @@ et vous reconnecter au site. 'pass_nouveau_pass' => 'Nouveau mot de passe', 'pass_ok' => 'OK', 'pass_oubli_mot' => 'Oubli du mot de passe', - 'pass_procedure_changer' => 'Pour changer votre mot de passe, nous devons d’abord vérifier votre identité. Pour cela indiquez-nous l’adresse email associée à votre compte.', + 'pass_procedure_changer' => 'Pour modifier votre mot de passe, merci d’indiquer l’adresse email associée à votre compte.', 'pass_quitter_fenetre' => 'Quitter cette fenêtre', 'pass_rappel_login' => 'Rappel : votre identifiant (login) est « @login@ ».', 'pass_recevoir_mail' => 'Vous allez recevoir un email vous indiquant comment retrouver votre accès au site.', @@ -674,8 +683,8 @@ et vous reconnecter au site. 'titre_statistiques' => 'Statistiques du site', 'titre_titre_document' => 'Titre du document :', 'todo' => 'à venir', - 'trad_reference' => '(référence des traductions)', 'trad_definir_reference' => 'Choisir "@titre@" comme référence des traductions', + 'trad_reference' => '(référence des traductions)', // Z 'zbug_balise_b_aval' => ' : balise B en aval', @@ -727,5 +736,3 @@ et vous reconnecter au site. 'zxml_vide_balise' => 'balise vide', 'zxml_vu' => 'vu auparavant' ); - -?> diff --git a/www/ecrire/lang/spip_fr_fem.php b/www/ecrire/lang/spip_fr_fem.php old mode 100755 new mode 100644 index b38a904b..323f9856 --- a/www/ecrire/lang/spip_fr_fem.php +++ b/www/ecrire/lang/spip_fr_fem.php @@ -1,9 +1,11 @@ 'Afficher l’interface textuelle simplifiée', 'admin_debug' => 'debug', 'admin_modifier_article' => 'Modifier cet article', - 'admin_modifier_auteur' => 'Modifier cette auteure', + 'admin_modifier_auteur' => 'Modifier cette autrice', 'admin_modifier_breve' => 'Modifier cette brève', 'admin_modifier_mot' => 'Modifier ce mot-clé', 'admin_modifier_rubrique' => 'Modifier cette rubrique', @@ -31,6 +33,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'annuler' => 'Annuler', 'antispam_champ_vide' => 'Veuillez laisser ce champ vide :', 'articles_recents' => 'Articles les plus récents', + 'avis_1_erreur_saisie' => 'Il y a 1 erreur dans votre saisie, veuillez vérifier les informations.', 'avis_archive_incorrect' => 'le fichier archive n’est pas un fichier SPIP', 'avis_archive_invalide' => 'le fichier archive n’est pas valide', 'avis_attention' => 'ATTENTION !', @@ -43,6 +46,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_erreur_mysql' => 'Erreur SQL', 'avis_erreur_sauvegarde' => 'Erreur dans la sauvegarde (@type@ @id_objet@) !', 'avis_erreur_visiteur' => 'Problème d’accès à l’espace privé', + 'avis_nb_erreurs_saisie' => 'Il y a @nb@ erreurs dans votre saisie, veuillez vérifier les informations.', // B 'barre_a_accent_grave' => 'Insérer un A accent grave majuscule', @@ -110,8 +114,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_heures_minutes_court' => '@h@h@m@', 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ à @heure@', - 'date_fmt_jour_heure_debut_fin' => 'le @jour@ de @heure_debut@ à @heure_fin@', - 'date_fmt_jour_heure_debut_fin_abbr' => 'le @dtstart@@jour@ de @heure_debut@@dtabbr@ à @dtstart@@heure_fin@@dtend@', + 'date_fmt_jour_heure_debut_fin' => '@jour@ de @heure_debut@ à @heure_fin@', + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ de @heure_debut@@dtabbr@ à @dtend@@heure_fin@@dtabbr@', 'date_fmt_jour_mois' => '@jour@ @nommois@', 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@', 'date_fmt_mois_annee' => '@nommois@ @annee@', @@ -121,6 +125,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_periode_abbr' => 'Du @dtart@@date_debut@@dtabbr@ au @dtend@@date_fin@@dtabbr@', 'date_fmt_periode_from' => 'Du', 'date_fmt_periode_to' => 'au', + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'heures', 'date_hier' => 'hier', 'date_il_y_a' => 'il y a @delai@', @@ -298,11 +303,11 @@ le site "@nom_site_spip@" (@adresse_login@) :', 'icone_agenda' => 'Agenda', 'icone_aide_ligne' => 'Aide', 'icone_articles' => 'Articles', - 'icone_auteurs' => 'Auteures', + 'icone_auteurs' => 'Autrices', 'icone_brouteur' => 'Navigation rapide', 'icone_configuration_site' => 'Configuration', 'icone_configurer_site' => 'Configurer votre site', - 'icone_creer_nouvel_auteur' => 'Créer une nouvelle auteure', + 'icone_creer_nouvel_auteur' => 'Créer une nouvelle autrice', 'icone_creer_rubrique' => 'Créer une rubrique', 'icone_creer_sous_rubrique' => 'Créer une sous-rubrique', 'icone_deconnecter' => 'Se déconnecter', @@ -329,7 +334,7 @@ le site "@nom_site_spip@" (@adresse_login@) :', 'icone_supprimer_document' => 'Supprimer ce document', 'icone_supprimer_image' => 'Supprimer cette image', 'icone_tous_articles' => 'Tous vos articles', - 'icone_tous_auteur' => 'Toutes les auteures', + 'icone_tous_auteur' => 'Toutes les autrices', 'icone_tous_visiteur' => 'Toutes les visiteuses', 'icone_visiter_site' => 'Voir le site public', 'icone_voir_en_ligne' => 'Voir en ligne', @@ -355,7 +360,7 @@ le site "@nom_site_spip@" (@adresse_login@) :', 'info_articles_nb' => '@nb@ articles', 'info_articles_proposes' => 'Articles proposés', 'info_articles_un' => '1 article', - 'info_auteurs_nombre' => 'auteure(s) :', + 'info_auteurs_nombre' => 'autrice(s) :', 'info_authentification_ftp' => 'Authentification (par FTP).', 'info_breves_2' => 'brèves', 'info_breves_nb' => '@nb@ brèves', @@ -383,7 +388,7 @@ le site "@nom_site_spip@" (@adresse_login@) :', 'info_email_invalide' => 'Adresse email invalide.', 'info_en_cours_validation' => 'Vos articles en cours de rédaction', 'info_en_ligne' => 'Actuellement en ligne :', - 'info_envoyer_message_prive' => 'Envoyer un message privé à cette auteure', + 'info_envoyer_message_prive' => 'Envoyer un message privé à cette autrice', 'info_erreur_requete' => 'Erreur dans la requête :', 'info_erreur_squelette2' => 'Aucun squelette @fichier@ n’est disponible...', 'info_erreur_systeme' => 'Erreur système (errno @errsys@)', @@ -503,7 +508,7 @@ le site "@nom_site_spip@" (@adresse_login@) :', 'lien_tout_afficher' => 'Tout afficher', 'lien_visite_site' => 'visiter ce site', 'lien_visites' => '@visites@ visites', - 'lien_voir_auteur' => 'Voir cette auteure', + 'lien_voir_auteur' => 'Voir cette autrice', 'ligne' => 'Ligne', 'login' => 'Connexion', 'login_acces_prive' => 'accès à l’espace privé', @@ -531,7 +536,7 @@ le site "@nom_site_spip@" (@adresse_login@) :', 'login_retour_public' => 'Retour au site public', 'login_retour_site' => 'Retour au site public', 'login_retoursitepublic' => 'retour au site public', - 'login_sans_cookiie' => 'Identification sans cookie', + 'login_sans_cookie' => 'Identification sans cookie', 'login_securise' => 'Login sécurisé', 'login_sinscrire' => 's’inscrire', 'login_test_navigateur' => 'test navigateur/reconnexion', @@ -549,7 +554,7 @@ le site "@nom_site_spip@" (@adresse_login@) :', // O 'occurence' => 'Occurrence', 'onglet_affacer_base' => 'Effacer la base', - 'onglet_auteur' => 'L’auteure', + 'onglet_auteur' => 'L’autrice', 'onglet_contenu_site' => 'Contenu du site', 'onglet_evolution_visite_mod' => 'Évolution', 'onglet_fonctions_avances' => 'Fonctions avancées', @@ -595,7 +600,7 @@ et vous reconnecter au site. 'pass_nouveau_pass' => 'Nouveau mot de passe', 'pass_ok' => 'OK', 'pass_oubli_mot' => 'Oubli du mot de passe', - 'pass_procedure_changer' => 'Pour changer votre mot de passe, nous devons d’abord vérifier votre identité. Pour cela indiquez-nous l’adresse email associée à votre compte.', + 'pass_procedure_changer' => 'Pour modifier votre mot de passe, merci d’indiquer l’adresse email associée à votre compte.', 'pass_quitter_fenetre' => 'Quitter cette fenêtre', 'pass_rappel_login' => 'Rappel : votre identifiant (login) est « @login@ ».', 'pass_recevoir_mail' => 'Vous allez recevoir un email vous indiquant comment retrouver votre accès au site.', @@ -661,7 +666,7 @@ et vous reconnecter au site. 'titre_image_admin_article' => 'Vous pouvez administrer cet article', 'titre_image_administrateur' => 'Administratrice', 'titre_image_aide' => 'De l’aide sur cet élément', - 'titre_image_auteur_supprime' => 'Auteure supprimée', + 'titre_image_auteur_supprime' => 'Autrice supprimée', 'titre_image_redacteur' => 'Rédactrice sans accès', 'titre_image_redacteur_02' => 'Rédactrice', 'titre_image_selecteur' => 'Afficher la liste', @@ -675,6 +680,7 @@ et vous reconnecter au site. 'titre_statistiques' => 'Statistiques du site', 'titre_titre_document' => 'Titre du document :', 'todo' => 'à venir', + 'trad_definir_reference' => 'Choisir "@titre@" comme référence des traductions', 'trad_reference' => '(référence des traductions)', // Z @@ -688,6 +694,7 @@ et vous reconnecter au site. 'zbug_champ_hors_motif' => 'Champ @champ@ hors d’un contexte @motif@', 'zbug_code' => 'code', 'zbug_critere_inconnu' => 'Critère inconnu @critere@', + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} sur une table sans clef primaire atomique', 'zbug_distant_interdit' => 'Externe interdit', 'zbug_doublon_table_sans_cle_primaire' => 'Doublons sur une table sans clef primaire atomique', 'zbug_doublon_table_sans_index' => 'Doublons sur une table sans index', @@ -726,5 +733,3 @@ et vous reconnecter au site. 'zxml_vide_balise' => 'balise vide', 'zxml_vu' => 'vu auparavant' ); - -?> diff --git a/www/ecrire/lang/spip_gl.php b/www/ecrire/lang/spip_gl.php index c236003f..3f54a959 100644 --- a/www/ecrire/lang/spip_gl.php +++ b/www/ecrire/lang/spip_gl.php @@ -1,9 +1,11 @@ 'Volver ao web público', 'login_retour_site' => 'Volver ao web público', 'login_retoursitepublic' => 'volver ao web público', - 'login_sans_cookiie' => 'Identificación sen cookie', 'login_securise' => 'Inicio de sesión securizado', 'login_sinscrire' => 'Inscribirse', 'login_test_navigateur' => 'proba navegador/reconexión', @@ -704,5 +705,3 @@ e reconectar co web. 'zxml_vide_balise' => 'baliza baleira', 'zxml_vu' => 'vista previa' ); - -?> diff --git a/www/ecrire/lang/spip_he.php b/www/ecrire/lang/spip_he.php index 5cf0b951..0ed2476d 100644 --- a/www/ecrire/lang/spip_he.php +++ b/www/ecrire/lang/spip_he.php @@ -1,9 +1,11 @@ 'חזור לאתר הציבורי', 'login_retour_site' => 'חזור לאתר הציבורי', 'login_retoursitepublic' => 'חזור לאתר הציבורי', - 'login_sans_cookiie' => 'חיובר ללא עוגיה', 'login_sinscrire' => 'הרשמה', 'login_test_navigateur' => 'מבחן הדפדפן /חיבור מחדש', 'login_verifiez_navigateur' => '(בכל זאת נא לבדוק שהדפדפן שלך לא זכר את הסיסמה...)', @@ -672,5 +673,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'zxml_vide_balise' => 'סימן עריכה ריק', 'zxml_vu' => 'נראה קודם' ); - -?> diff --git a/www/ecrire/lang/spip_hr.php b/www/ecrire/lang/spip_hr.php index 754294a0..ca611468 100644 --- a/www/ecrire/lang/spip_hr.php +++ b/www/ecrire/lang/spip_hr.php @@ -1,9 +1,11 @@ 'natrag u javni dio weba', 'login_retour_site' => 'natrag u javni dio weba', 'login_retoursitepublic' => 'natrag u javni dio weba', - 'login_sans_cookiie' => 'identifikacija bez cookie', 'login_securise' => 'Sigurnosna prijava', 'login_sinscrire' => 'prijava', 'login_test_navigateur' => 'ispitivanje browsera / ponovno spajanje', @@ -591,7 +592,7 @@ ponovo dobiti pristup web stranicama. 'pass_nouveau_pass' => 'nova lozinka', 'pass_ok' => 'OK', 'pass_oubli_mot' => 'lozinka zaboravljena', - 'pass_procedure_changer' => 'Kako bismo promjenili vašu lozinku, moramo prvo provjeriti vaš identitet. Stoga nam morate navesti mail adresu pridruženu vašem korisničkom računu.', + 'pass_procedure_changer' => 'Kako bismo promjenili vašu lozinku, moramo prvo provjeriti vaš identitet. Stoga nam morate navesti mail adresu pridruženu vašem korisničkom računu.', # MODIF 'pass_quitter_fenetre' => 'napustiti ovaj prozor', 'pass_rappel_login' => 'podsjetnik: Vaše korisničko ime za prijavu (login) je "@login@".', 'pass_recevoir_mail' => 'Primit ćete mail sa uputama za povrat pristupa web stranicama.', @@ -715,5 +716,3 @@ SPIP.

      Uopćeno rečeno, izričito vam savjetujemo da izmjene prep 'zxml_vide_balise' => 'prazna oznaka', 'zxml_vu' => 'već viđeno' ); - -?> diff --git a/www/ecrire/lang/spip_hu.php b/www/ecrire/lang/spip_hu.php index 182ced0e..ac86cb51 100644 --- a/www/ecrire/lang/spip_hu.php +++ b/www/ecrire/lang/spip_hu.php @@ -1,9 +1,11 @@ 'Módosítás', 'bouton_chercher' => 'Keresés', 'bouton_choisir' => 'Kiválasztás', - 'bouton_download' => 'Download', # MODIF + 'bouton_download' => 'Letöltés', 'bouton_enregistrer' => 'Mentés', 'bouton_radio_desactiver_messagerie_interne' => 'Belső üzenetek letiltása', 'bouton_radio_envoi_annonces' => 'Szerkesztői közlemény küldése', @@ -466,7 +468,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'login_retour_public' => 'Vissza a nyilvános honlapra', 'login_retour_site' => 'Vissza a nyilvános honlapra', 'login_retoursitepublic' => 'vissza a nyilvános honlapra', - 'login_sans_cookiie' => 'Süti (cookie) nélküli azonosítás', 'login_sinscrire' => 'beíratkozás', 'login_test_navigateur' => 'böngésző teszt/újracsatlakozás', 'login_verifiez_navigateur' => '(Azonban ellenőrizze, hogy a bongészó nem memorizálta-e a jelszót...)', @@ -649,5 +650,3 @@ Próbáljon', # MODIF 'zxml_vide_balise' => 'üres tag', 'zxml_vu' => 'látva ezelőtt:' ); - -?> diff --git a/www/ecrire/lang/spip_id.php b/www/ecrire/lang/spip_id.php index 91746c06..539437fb 100644 --- a/www/ecrire/lang/spip_id.php +++ b/www/ecrire/lang/spip_id.php @@ -1,9 +1,11 @@ 'Kembali ke situs umum', 'login_retour_site' => 'Kembali ke situs umum', 'login_retoursitepublic' => 'kembali ke situs umum', - 'login_sans_cookiie' => 'Identifikasi tanpa cookie', 'login_sinscrire' => 'daftar', 'login_test_navigateur' => 'mencoba browser/koneksi', 'login_verifiez_navigateur' => '(Bagaimana pun, verifikasi bahwasanya browser anda tidak menyimpan kata sandi anda...)', @@ -646,5 +647,3 @@ dan mengakses situs kembali. 'zxml_vide_balise' => 'tag kosong', 'zxml_vu' => 'dilihat sebelumnya' ); - -?> diff --git a/www/ecrire/lang/spip_it.php b/www/ecrire/lang/spip_it.php index 61d2ef47..ca43fefe 100644 --- a/www/ecrire/lang/spip_it.php +++ b/www/ecrire/lang/spip_it.php @@ -1,9 +1,11 @@ 'Annulla', 'antispam_champ_vide' => 'Si prega di lasciare vuoto questo campo:', 'articles_recents' => 'Articoli più recenti', + 'avis_1_erreur_saisie' => 'C’è un errore nell’input, verificare le informazioni.', 'avis_archive_incorrect' => 'il file archivio non è un file SPIP', 'avis_archive_invalide' => 'il file archivio non è valido', 'avis_attention' => 'ATTENZIONE!', - 'avis_champ_incorrect_type_objet' => 'Nome di campo errato @name@ per oggetto di tipo ', + 'avis_champ_incorrect_type_objet' => 'Nome di campo errato @name@ per oggetto di tipo @type@', 'avis_colonne_inexistante' => 'La colonna @col@ non esiste', 'avis_erreur' => 'Errore: vedi sopra', 'avis_erreur_connexion' => 'Errore di connessione', @@ -43,6 +46,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_erreur_mysql' => 'Errore SQL ', 'avis_erreur_sauvegarde' => 'Errore nel salvataggio (@type@ @id_objet@)! ', 'avis_erreur_visiteur' => 'Problema di accesso all’area riservata', + 'avis_nb_erreurs_saisie' => 'Ci sono @nb@ errori nell’input, verificare le informazioni.', // B 'barre_a_accent_grave' => 'Inserire una A maiscola con accento grave', @@ -111,7 +115,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ ore @heure@', 'date_fmt_jour_heure_debut_fin' => 'Il @jour@ dalle @heure_debut@ alle @heure_fin@', - 'date_fmt_jour_heure_debut_fin_abbr' => 'Il @dtstart@@jour@ dalle @heure_debut@@dtabbr@ al @dtstart@@heure_fin@@dtend@', + 'date_fmt_jour_heure_debut_fin_abbr' => 'Il @dtstart@@jour@ dalle @heure_debut@@dtabbr@ alle @dtstart@@heure_fin@@dtend@', 'date_fmt_jour_mois' => '@jourmois@', 'date_fmt_jour_mois_annee' => '@jourmois@ @annee@', 'date_fmt_mois_annee' => '@nommois@ @annee@', @@ -121,6 +125,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_periode_abbr' => 'Dal @dtart@@date_debut@@dtabbr@ al @dtend@@date_fin@@dtabbr@', 'date_fmt_periode_from' => 'Dal', 'date_fmt_periode_to' => 'a', + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'ore', 'date_hier' => 'ieri', 'date_il_y_a' => '@delai@ fa', @@ -285,6 +290,8 @@ indirizzo qui sotto. (Altrimenti la tua richiesta sarà ignorata.): 'form_prop_non_enregistre' => 'La tua proposta non è stata registrata.', 'form_prop_sujet' => 'Argomento', 'form_prop_url_site' => 'Indirizzo (URL) del sito', + 'format_date_incorrecte' => 'La data (o il suo formato) non è corretta', + 'format_heure_incorrecte' => 'L’ora (o il suo formato) non è corretta', 'forum_non_inscrit' => 'Non sei iscritto, oppure l’indirizzo o la password inseriti non sono corretti.', 'forum_par_auteur' => 'di @auteur@', 'forum_titre_erreur' => 'Errore...', @@ -532,7 +539,7 @@ devi attivare Javascript nel tuo browser e', 'login_retour_public' => 'Ritorna al sito pubblico', 'login_retour_site' => 'Ritorna al sito pubblico', 'login_retoursitepublic' => 'ritorna al sito pubblico', - 'login_sans_cookiie' => 'Identificazione senza cookie', + 'login_sans_cookie' => 'Identificazione senza cookie', 'login_securise' => 'Accesso protetto', 'login_sinscrire' => 'registrati', 'login_test_navigateur' => 'test browser/riconnessione', @@ -541,6 +548,9 @@ devi attivare Javascript nel tuo browser e', // M 'masquer_colonne' => 'Nascondi questa colonna', 'masquer_trad' => 'nascondere le traduzioni', + 'message_nouveaux_identifiants_echec' => 'Impossibile generare nuovi identificativi', + 'message_nouveaux_identifiants_echec_envoi' => 'Le nuove credenziali di accesso non possono essere inviate.', + 'message_nouveaux_identifiants_ok' => 'Le nuove credenziali di accsso sono state inviate a @email@.', 'module_fichiers_langues' => 'File lingua', // N @@ -670,6 +680,7 @@ funzionamento del sito. Non intervenire finché non conosci bene i meccanismi de 'titre_statistiques' => 'Statistiche del sito', 'titre_titre_document' => 'Titolo del documento:', 'todo' => 'prossimo', + 'trad_definir_reference' => 'Scegliere "@titre@" come riferimento per le traduzioni', 'trad_reference' => '(articolo di riferimento)', // Z @@ -683,6 +694,7 @@ funzionamento del sito. Non intervenire finché non conosci bene i meccanismi de 'zbug_champ_hors_motif' => 'Campo @champ@ fuori da un contesto @motif@', 'zbug_code' => 'codice', 'zbug_critere_inconnu' => 'criterio sconosciuto @critere@', + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} su una tabella senza una chiave primaria atomica', 'zbug_distant_interdit' => 'esterno non accessibile', 'zbug_doublon_table_sans_cle_primaire' => 'doppioni su una tabella senza chiave primaria atomica', 'zbug_doublon_table_sans_index' => 'doppioni su una tabella senza indice', @@ -721,5 +733,3 @@ funzionamento del sito. Non intervenire finché non conosci bene i meccanismi de 'zxml_vide_balise' => 'tag vuoto', 'zxml_vu' => 'visto in precedenza' ); - -?> diff --git a/www/ecrire/lang/spip_it_fem.php b/www/ecrire/lang/spip_it_fem.php index 3959af19..0a87452f 100644 --- a/www/ecrire/lang/spip_it_fem.php +++ b/www/ecrire/lang/spip_it_fem.php @@ -1,9 +1,11 @@ 'Ritorna al sito pubblico', 'login_retour_site' => 'Ritorna al sito pubblico', 'login_retoursitepublic' => 'ritorna al sito pubblico', - 'login_sans_cookiie' => 'Identificazione senza cookie', 'login_sinscrire' => 'registrati', 'login_test_navigateur' => 'test browser/riconnessione', 'login_verifiez_navigateur' => '(Verifica comunque se il tuo browser ha memorizzato la password...)', @@ -657,5 +658,3 @@ funzionamento del sito. Non intervenire finché non conosci bene i meccanismi de 'zxml_vide_balise' => 'tag vuoto', 'zxml_vu' => 'visto in precedenza' ); - -?> diff --git a/www/ecrire/lang/spip_ja.php b/www/ecrire/lang/spip_ja.php index 7fe853ab..08ecf128 100644 --- a/www/ecrire/lang/spip_ja.php +++ b/www/ecrire/lang/spip_ja.php @@ -1,9 +1,11 @@ '修正する', 'bouton_chercher' => '検索', 'bouton_choisir' => '選択', - 'bouton_download' => 'Télécharger', # MODIF + 'bouton_download' => 'ダウンロード', # MODIF 'bouton_enregistrer' => '保存', 'bouton_radio_desactiver_messagerie_interne' => '内部のメッセージ交換を停止', 'bouton_radio_envoi_annonces' => '編集の発表を送る', @@ -143,26 +145,26 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_jnum8' => '8', 'date_jnum9' => '9', 'date_jour_1' => '日曜日', - 'date_jour_1_abbr' => '???', - 'date_jour_1_initiale' => '?', + 'date_jour_1_abbr' => '日', + 'date_jour_1_initiale' => '日', 'date_jour_2' => '月曜日', - 'date_jour_2_abbr' => '??', - 'date_jour_2_initiale' => 'ŒŽ', + 'date_jour_2_abbr' => '月', + 'date_jour_2_initiale' => '月', 'date_jour_3' => '火曜日', - 'date_jour_3_abbr' => '‰Î', - 'date_jour_3_initiale' => '‰Î', + 'date_jour_3_abbr' => '火', + 'date_jour_3_initiale' => '火', 'date_jour_4' => '水曜日', - 'date_jour_4_abbr' => '…', - 'date_jour_4_initiale' => '…', + 'date_jour_4_abbr' => '水', + 'date_jour_4_initiale' => '水', 'date_jour_5' => '木曜日', - 'date_jour_5_abbr' => '–Ø', - 'date_jour_5_initiale' => '–Ø', + 'date_jour_5_abbr' => '木', + 'date_jour_5_initiale' => '木', 'date_jour_6' => '金曜日', - 'date_jour_6_abbr' => '??', - 'date_jour_6_initiale' => '?', + 'date_jour_6_abbr' => '金', + 'date_jour_6_initiale' => '金', 'date_jour_7' => '土曜日', - 'date_jour_7_abbr' => '“y', - 'date_jour_7_initiale' => '“y', + 'date_jour_7_abbr' => '土', + 'date_jour_7_initiale' => '土', 'date_jours' => '日', 'date_minutes' => '分', 'date_mois' => 'ヶ月', @@ -471,7 +473,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'login_retour_public' => 'パブリックなサイトへ戻る', 'login_retour_site' => 'パブリックなサイトへ戻る', 'login_retoursitepublic' => 'パブリックなサイトへ戻る', - 'login_sans_cookiie' => 'クッキーなしで認証', 'login_sinscrire' => '登録', 'login_test_navigateur' => 'ブラウザが再接続を試みている', 'login_verifiez_navigateur' => '(しかし、あなたのブラウザがあなたのパスワードを記憶しなかったかどうか確かめて下さい...)', @@ -625,5 +626,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'zbug_serveur_indefini' => '未定義のSQL server', # MODIF 'zbug_table_inconnue' => 'SQLテーブル "@table@" は見つからない' ); - -?> diff --git a/www/ecrire/lang/spip_km.php b/www/ecrire/lang/spip_km.php index b4c07692..c279dd03 100644 --- a/www/ecrire/lang/spip_km.php +++ b/www/ecrire/lang/spip_km.php @@ -1,9 +1,11 @@ 'ត្រលប់ទៅ វ៉ែបសៃថ៍ សាធារណៈ', 'login_retour_site' => 'ត្រលប់ទៅ វ៉ែបសៃថ៍ សាធារណៈ', 'login_retoursitepublic' => 'ត្រលប់ទៅ វ៉ែបសៃថ៍ សាធារណៈ', - 'login_sans_cookiie' => 'ការសំគាល់ អត្ដសញា គ្មានខូកឃី', 'login_sinscrire' => 'ចុះ​ឈ្មោះ', 'login_test_navigateur' => 'សា​ល្បង​ឧបកររាវរក​/​​ភ្ជាប់​ឡើង​វិញ', 'login_verifiez_navigateur' => '(ផ្ទៀងផ្ទាត់​ គ្រប់ពេល ដែលឧបកររាវរក របស់អ្នក មិនបាន​ចង​ចាំ ពាក្យសំងាត់ របស់​អ្នក...)', @@ -634,5 +635,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'zxml_vide_balise' => 'ប្លាក​ទទេ', 'zxml_vu' => 'បានឃើញ ​ពី​មុន' ); - -?> diff --git a/www/ecrire/lang/spip_lb.php b/www/ecrire/lang/spip_lb.php index b3cdcf09..492c0e5c 100644 --- a/www/ecrire/lang/spip_lb.php +++ b/www/ecrire/lang/spip_lb.php @@ -1,9 +1,11 @@ '@h@h@m@', 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ um @heure@', - 'date_fmt_jour_heure_debut_fin' => '@jour@ vu @heure_debut@ bis @heure_fin@ Auer', - 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ vu @heure_debut@@dtabbr@ bis @dtstart@@heure_fin@@dtend@', + 'date_fmt_jour_heure_debut_fin' => '@jour@ vu @heure_debut@ bis @heure_fin@ Auer', # MODIF + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ vu @heure_debut@@dtabbr@ bis @dtend@@heure_fin@@dtabbr@', # MODIF 'date_fmt_jour_mois' => '@jour@. @nommois@', 'date_fmt_jour_mois_annee' => '@jour@. @nommois@ @annee@', 'date_fmt_mois_annee' => '@nommois@ @annee@', @@ -121,6 +123,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_periode_abbr' => 'Vum @dtart@@date_debut@@dtabbr@. bis den @dtend@@date_fin@@dtabbr@.', 'date_fmt_periode_from' => 'Vum', 'date_fmt_periode_to' => 'bis den', + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'Stonnen', 'date_hier' => 'gëschter', 'date_il_y_a' => 'virun @delai@', @@ -191,7 +194,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_mois_2_abbr' => 'Feb.', 'date_mois_3' => 'März', 'date_mois_3_abbr' => 'März', - 'date_mois_4' => 'Abrël', + 'date_mois_4' => 'Abrëll', 'date_mois_4_abbr' => 'Abr.', 'date_mois_5' => 'Mee', 'date_mois_5_abbr' => 'Mee', @@ -233,7 +236,7 @@ Dës Prozedur ass am Detail am Installatiouns-Guide beschriwwen.

      'envoi_via_le_site' => 'Via äre Site schécken', 'erreur' => 'Fehler', 'erreur_balise_non_fermee' => 'Läschten Tag dee net zou ass:', - 'erreur_technique_ajaxform' => 'Oeps. Een onverwachte fout weerhield hem van het formulier indienen. U kunt het opnieuw proberen.', # RELIRE + 'erreur_technique_ajaxform' => 'Oups. E Fehler verhennert d’Fortschécke vum Formulaire. Probéiert nach eng Kéier.', 'erreur_technique_enregistrement_champs' => 'En technesche Problem verhënnert d’Späichere vum Feld @champs@.', 'erreur_technique_enregistrement_impossible' => 'En technesche Problem verhënnert d’Späicheren.', 'erreur_texte' => 'Fehler(en)', @@ -524,11 +527,10 @@ Wann dir net wëllt dat äert Passwuert ka um Internet ofgefaange ginn, aktivéi 'login_pass2' => 'Passwuert:', 'login_preferez_refuser' => 'Wann dir kee Cookie wëllt, hei ass eng aner (manner sécher) Umeldungs-Method:', 'login_recharger' => 'dës Säit nei lueden', - 'login_rester_identifie' => 'E puer Deo ugemellt bleiwen', + 'login_rester_identifie' => 'E puer Deg ugemellt bleiwen', 'login_retour_public' => 'Zeréck op den ëffentleche Site', 'login_retour_site' => 'Zeréck op de Site', 'login_retoursitepublic' => 'zeréck op den ëffentleche Site', - 'login_sans_cookiie' => 'Umeldung ouni Cookie', 'login_securise' => 'Séchere Login', 'login_sinscrire' => 'sech aschreiwen', 'login_test_navigateur' => 'Browser/Login-Test', @@ -583,7 +585,7 @@ Dir kënnt do e neit Passwuert aginn an Iech um Site umellen. 'pass_nouveau_pass' => 'Neit Passwuert', 'pass_ok' => 'OK', 'pass_oubli_mot' => 'Vergiessen vum Passwuert', - 'pass_procedure_changer' => 'Mir mussen är Identitéit kontrolléieren fir äert Passwuert ze änneren. Dofir gitt ons d’Email-Adress un déi zu ärem Login gehéiert.', + 'pass_procedure_changer' => 'Mir mussen är Identitéit kontrolléieren fir äert Passwuert ze änneren. Dofir gitt ons d’Email-Adress un déi zu ärem Login gehéiert.', # MODIF 'pass_quitter_fenetre' => 'Dës Fënster zoumaachen', 'pass_rappel_login' => 'Rappel: äre Login ass "@login@".', 'pass_recevoir_mail' => 'Dir kritt e Message mat Instruktiounen fir den Zougang zum Site erëm ze kréien.', @@ -665,6 +667,7 @@ Probéiert ', 'zbug_champ_hors_motif' => 'Feld @champ@ ausserhalb vun engem Kontext @motif@', 'zbug_code' => '-Code-', 'zbug_critere_inconnu' => 'Onbekannte Critère @critere@', + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} ob enger Tafel ouni atomare Primärschlessel', 'zbug_distant_interdit' => 'Extern verbueden', 'zbug_doublon_table_sans_cle_primaire' => 'Duebel Valeuren an enger Tabell ouni atomare primäre Schlëssel', 'zbug_doublon_table_sans_index' => 'Verdueblung an enger Tabell ouni Index', @@ -703,5 +706,3 @@ Probéiert ', 'zxml_vide_balise' => 'Eidelen Tag', 'zxml_vu' => 'virdru gesinn' ); - -?> diff --git a/www/ecrire/lang/spip_my.php b/www/ecrire/lang/spip_my.php index c315976d..3a70c854 100644 --- a/www/ecrire/lang/spip_my.php +++ b/www/ecrire/lang/spip_my.php @@ -1,9 +1,11 @@ 'ပြုပြင်ရန်', 'bouton_chercher' => 'ရှာဖွေရန်', 'bouton_choisir' => 'ရွေးချယ်ရန်', - 'bouton_download' => 'Télécharger', # MODIF 'bouton_enregistrer' => 'သိမ်းဆည်းရန်', 'bouton_radio_desactiver_messagerie_interne' => 'အတွင်းသတင်းစကား ပေးပို့ခြင်းတားမြစ်ရန်', 'bouton_radio_envoi_annonces' => 'အယ်ဒီတာ့ ပြန်ကြားချက်များ ပေးပို့ရန်', @@ -88,18 +89,18 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_aujourdhui' => 'ဒီနေ့', 'date_avant_jc' => 'B.C.', 'date_dans' => '@delai@ထဲမှာ', - 'date_de_mois_1' => '@nommois@ @j@', - 'date_de_mois_10' => '@nommois@ @j@', - 'date_de_mois_11' => '@nommois@ @j@', - 'date_de_mois_12' => '@nommois@ @j@', - 'date_de_mois_2' => '@nommois@ @j@', - 'date_de_mois_3' => '@nommois@ @j@', - 'date_de_mois_4' => '@nommois@ @j@', - 'date_de_mois_5' => '@nommois@ @j@', - 'date_de_mois_6' => '@nommois@ @j@', - 'date_de_mois_7' => '@nommois@ @j@', - 'date_de_mois_8' => '@nommois@ @j@', - 'date_de_mois_9' => '@nommois@ @j@', + 'date_de_mois_1' => '@j@ @nommois@', + 'date_de_mois_10' => '@j@ @nommois@', + 'date_de_mois_11' => '@j@ @nommois@', + 'date_de_mois_12' => '@j@ @nommois@', + 'date_de_mois_2' => '@j@ @nommois@', + 'date_de_mois_3' => '@j@ @nommois@', + 'date_de_mois_4' => '@j@ @nommois@', + 'date_de_mois_5' => '@j@ @nommois@', + 'date_de_mois_6' => '@j@ @nommois@', + 'date_de_mois_7' => '@j@ @nommois@', + 'date_de_mois_8' => '@j@ @nommois@', + 'date_de_mois_9' => '@j@ @nommois@', 'date_demain' => 'မနက်ဖြန်', 'date_fmt_heures_minutes' => '@h@:@m@', 'date_fmt_jour_heure' => '@jour@ မှ @heure@', @@ -141,54 +142,41 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_jnum7' => '၇', 'date_jnum8' => '၈', 'date_jnum9' => '၉', - 'date_jour_1' => 'တနဂၤေႏြွေ', - 'date_jour_1_abbr' => 'ေႏြေ', + 'date_jour_1' => 'တနင်္ဂနွေ', + 'date_jour_1_abbr' => 'နွေ', 'date_jour_1_initiale' => 'န', - 'date_jour_2' => 'တနလၤာ', + 'date_jour_2' => '​တနင်္လာ', 'date_jour_2_abbr' => 'လာ', 'date_jour_2_initiale' => 'လ', - 'date_jour_3' => 'အဂၤါ', + 'date_jour_3' => 'အင်္ဂါ', 'date_jour_3_abbr' => 'ဂါ', 'date_jour_3_initiale' => 'ဂ', - 'date_jour_4' => 'ဗုဒၶဟူး', + 'date_jour_4' => '​ဗုဒ္ဓဟူး', 'date_jour_4_abbr' => 'ဟူး', 'date_jour_4_initiale' => 'ဟ', - 'date_jour_5' => 'ကၾကာသပေတး', - 'date_jour_5_abbr' => 'ၾကာ', + 'date_jour_5' => 'ကြာတပတေး', + 'date_jour_5_abbr' => 'ကြာ', 'date_jour_5_initiale' => 'က', - 'date_jour_6' => 'ေသာၾကာ', - 'date_jour_6_abbr' => 'ေသာ', + 'date_jour_6' => 'သောကြာ', + 'date_jour_6_abbr' => 'သော', 'date_jour_6_initiale' => 'သ', - 'date_jour_7' => 'စေန', - 'date_jour_7_abbr' => 'ေန', + 'date_jour_7' => 'စနေ', + 'date_jour_7_abbr' => 'နေ', 'date_jour_7_initiale' => 'စ', 'date_jours' => 'ရက်များ', 'date_minutes' => 'မိနစ်များ', 'date_mois' => 'လများ', - 'date_mois_1' => 'ျပာသုိ', - 'date_mois_10' => 'သီတင္းကြ်တ္', - 'date_mois_10_abbr' => 'ကြ်တ္', + 'date_mois_1' => ' ျပာသုိ', + 'date_mois_10' => ' ျပာသုိ', 'date_mois_11' => 'တန္ေဆာင္မုန္း', - 'date_mois_11_abbr' => 'မုန္း', - 'date_mois_12' => 'နတ္ေတာ္', - 'date_mois_12_abbr' => 'နတ္', - 'date_mois_1_abbr' => 'ျပာ', - 'date_mois_2' => 'တပုိ႔တြဲ', - 'date_mois_2_abbr' => 'တြဲ', - 'date_mois_3' => 'တန္ေပါင္း', - 'date_mois_3_abbr' => 'ေပါင္း', - 'date_mois_4' => 'တန္ခူး', - 'date_mois_4_abbr' => 'ခူး', - 'date_mois_5' => 'ကဆုန္', - 'date_mois_5_abbr' => 'ဆုန္', - 'date_mois_6' => 'နယုန္', - 'date_mois_6_abbr' => 'ယုန္', - 'date_mois_7' => 'ဝါဆုိ', - 'date_mois_7_abbr' => 'ဝါဆုိ', - 'date_mois_8' => 'ဝါေခါင္', - 'date_mois_8_abbr' => 'ဝါေခါင္', - 'date_mois_9' => 'ေတာ္သလင္း', - 'date_mois_9_abbr' => 'ေတာ္', + 'date_mois_12' => 'တန္ေပါင္း', + 'date_mois_2' => 'တပုိတ႔ ဲြ', + 'date_mois_3' => 'နယုန္', + 'date_mois_4' => 'ဝါဆုိ', + 'date_mois_6' => ' ေတာ္သလင္း', + 'date_mois_7' => 'သီတင္းကြ်တ္', + 'date_mois_8' => 'တန္ေဆာင္မုန္း', + 'date_mois_9' => 'နတ္ေတာ္', 'date_saison_1' => 'ဆောင်းရာသီ', 'date_saison_2' => 'နွေဦးရာသီ', 'date_saison_3' => 'နွေရာသီ', @@ -464,7 +452,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'login_retour_public' => 'အများဆိုင် စာမျက်နှာသို့ ပြန်သွားရန်', 'login_retour_site' => 'အများဆိုင် စာမျက်နှာသို့ ပြန်သွားရန်', 'login_retoursitepublic' => 'အများဆိုင် စာမျက်နှာသို့ ပြန်သွားရန်', - 'login_sans_cookiie' => 'cookie မပါအမှတ်အသား', 'login_sinscrire' => 'မှတ်ပုံတင်ရန်', 'login_test_navigateur' => 'စမ်းသပ်ရန်', 'login_verifiez_navigateur' => '(သင့် browser မှ သင့်စကားဝှက်ကို မမှတ်မိပါ)', @@ -570,24 +557,19 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // Z 'zbug_balise_b_aval' => ': B tag too late in loop', 'zbug_boucle' => 'loop', - 'zbug_boucle_recursive_undef' => 'undefined recursive loop', # MODIF 'zbug_champ_hors_boucle' => 'Field @champ@ outside loop', - 'zbug_champ_hors_motif' => 'Field @champ@ outside loop tagged @motif@', # MODIF 'zbug_code' => 'ကုဒ်', 'zbug_critere_inconnu' => 'အမည်မသိ စံညွှန်း @critere@', # MODIF 'zbug_distant_interdit' => 'ပြင်ပ ​အချက်အလက် တားမြစ်ထားသည်', # MODIF 'zbug_doublon_table_sans_index' => 'စာညွှန်းတွင်မပါဘဲနှင့် ဇယားတွင် နှစ်ခါပါဝင်သည်', # MODIF 'zbug_erreur_boucle_double' => 'BOUCLE@id@ နှစ်ခါထပ်နေသော အဓိပ္ပါယ်ဖွင့်ဆိုချက်', # MODIF 'zbug_erreur_boucle_fermant' => 'BOUCLE@id@: အပိတ်တေးမှတ်ချက် မရှိဖြစ်ခြင်း', # MODIF - 'zbug_erreur_boucle_syntaxe' => 'Incorrect loop (BOUCLE) syntax ', # MODIF 'zbug_erreur_compilation' => 'စုဆောင်းမှု အမှားအယွင်း', 'zbug_erreur_execution_page' => 'စာမျက်နှာတွက်ချက်မှု အမှားအယွင်း', # MODIF - 'zbug_erreur_filtre' => 'အမှားအယွင်း၊ ဖော်ပြမထားသော စမ်းစစ်ချက် \\"@filtre@\\"', # MODIF - 'zbug_erreur_meme_parent' => '{meme_parent} only applies to loops (FORUMS) and (RUBRIQUES)', # MODIF + 'zbug_erreur_filtre' => 'အမှားအယွင်း၊ ဖော်ပြမထားသော စမ်းစစ်ချက် @filtre@', # MODIF 'zbug_erreur_squelette' => 'စာမျက်နှာ ပုံစံခွက်ထဲမှ အမှားအယွင်းများ', 'zbug_info_erreur_squelette' => 'ُဆိုက်ထဲအမှားအယွင်း', 'zbug_inversion_ordre_inexistant' => 'မရှိဘူး​​​သော စာစဉ်မှု', # MODIF - 'zbug_pagination_sans_critere' => '#PAGINATION tag without {pagination} criterion, or used in a recursive loop', # MODIF 'zbug_parametres_inclus_incorrects' => 'ထပ်မံဖြည့်စွပ်ချက် အမှား', # MODIF 'zbug_resultat' => 'ရှာဖွေမှု ရလဒ်', 'zbug_serveur_indefini' => 'ဖော်ပြခြင်းမရှိသော SQL ဆာဗာ', # MODIF @@ -609,5 +591,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'zxml_vide_balise' => 'တေးမှတ်ချက် မရှိပါ', 'zxml_vu' => 'တွေ့ရှိပြီးပြီ' ); - -?> diff --git a/www/ecrire/lang/spip_nl.php b/www/ecrire/lang/spip_nl.php index fd1ebe9e..f12c6791 100644 --- a/www/ecrire/lang/spip_nl.php +++ b/www/ecrire/lang/spip_nl.php @@ -1,9 +1,11 @@ 'Terug naar de volledig grafische interface', - 'access_mode_texte' => 'Vereenvoudigde tekst interface weergeven', + 'access_mode_texte' => 'Vereenvoudigde tekstinterface weergeven', 'admin_debug' => 'debug', 'admin_modifier_article' => 'Artikel wijzigen', 'admin_modifier_auteur' => 'Auteur wijzigen', @@ -24,25 +26,27 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'admin_modifier_rubrique' => 'Rubriek wijzigen', 'admin_recalculer' => 'Pagina vernieuwen', 'afficher_calendrier' => 'Toon kalender', - 'afficher_trad' => 'Vertalingen weergeven', - 'alerte_maj_impossible' => 'Waarshuwing ! Het updaten van de SQL-gegevensbank naar versie @version@ is niet mogelijk. Misschien wegens een probleem van wijzigingsrecht op de gegevensbank. Gelieve contact op te nemen met je leverancier.', - 'alerte_modif_info_concourante' => 'OPGELET : Deze informatie werd elders gewijzigd. De huidige waarde is :', + 'afficher_trad' => 'vertalingen weergeven', + 'alerte_maj_impossible' => 'Let op! Het updaten van de SQL-database naar versie @version@ is niet mogelijk. Misschien wegens een probleem van wijzigingsrecht op de database. Neem contact op met je provider.', + 'alerte_modif_info_concourante' => 'OPGELET! Deze informatie werd elders gewijzigd. De huidige waarde is:', 'analyse_xml' => 'XML Analyse', 'annuler' => 'Annuleren', - 'antispam_champ_vide' => 'Gelieve dit veld leeg te laten :', - 'articles_recents' => 'Meest recente artikels', - 'avis_archive_incorrect' => 'Het bewaarde bestand is geen SPIP-bestand', - 'avis_archive_invalide' => 'Het bewaarde bestand is niet bruikbaar', + 'antispam_champ_vide' => 'Gelieve dit veld leeg te laten:', + 'articles_recents' => 'Meest recente artikelen', + 'avis_1_erreur_saisie' => 'Er zit één fout in de ingevoerde gegevens, controleren a.u.b.', + 'avis_archive_incorrect' => 'het bewaarde bestand is geen SPIP-bestand', + 'avis_archive_invalide' => 'het bewaarde bestand is niet bruikbaar', 'avis_attention' => 'OPGELET!', - 'avis_champ_incorrect_type_objet' => 'Veldnaam @name@ is onjuist voor object van het type @type@', + 'avis_champ_incorrect_type_objet' => 'Veldnaam @name@ is onjuist voor een object van het type @type@', 'avis_colonne_inexistante' => 'De kolom @col@ bestaat niet', - 'avis_erreur' => 'Fout : zie hieronder', + 'avis_erreur' => 'Fout: zie hieronder', 'avis_erreur_connexion' => 'Verbinding mislukt', - 'avis_erreur_cookie' => 'Probleem met koekie', + 'avis_erreur_cookie' => 'Probleem met cookie', 'avis_erreur_fonction_contexte' => 'Programmafout. Deze functie kan niet worden opgeroepen in deze context.', 'avis_erreur_mysql' => 'SQL fout', 'avis_erreur_sauvegarde' => 'Backup fout (@type@ @id_objet@) !', - 'avis_erreur_visiteur' => 'Probleem met toegang tot het private gedeelden.', + 'avis_erreur_visiteur' => 'Probleem met toegang tot het privé gedeelte.', + 'avis_nb_erreurs_saisie' => 'Er zitten @nb@ fouten in de ingevoerde gegevens, controleren a.u.b.', // B 'barre_a_accent_grave' => 'Hoofdletter A met accent grave toevoegen', @@ -57,7 +61,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'barre_intertitre' => 'Omzetten naar {{{tussentitel}}}', 'barre_italic' => '{cursief} zetten', 'barre_lien' => 'Omzetten naar [hypertekst verwijzing->http://...]', - 'barre_lien_input' => 'Gelieve hier het adres van de koppeling op te geven. Je kan naar een webpagina verwijzen onder de vorm http://www.mijnsite.com ofwel het nummer van een artikel van deze site invullen.', + 'barre_lien_input' => 'Geef hier het adres van de koppeling op. Je kan naar een webpagina verwijzen in de vorm http://www.mijnsite.com ofwel het nummer van een artikel op deze site invullen.', 'barre_note' => 'Omzetten naar een [[Voetnoot]]', 'barre_paragraphe' => 'Een paragraaf toevoegen', 'barre_quote' => 'een bericht citeren', @@ -66,8 +70,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_choisir' => 'Selecteren', 'bouton_deplacer' => 'Verplaatsen', 'bouton_download' => 'Download', - 'bouton_enregistrer' => 'Behouden', - 'bouton_radio_desactiver_messagerie_interne' => 'Intern berichtensysteem desactiveren', + 'bouton_enregistrer' => 'Opslaan', + 'bouton_radio_desactiver_messagerie_interne' => 'Intern berichtensysteem uitschakelen', 'bouton_radio_envoi_annonces' => 'Versturen van editoriale aankondigingen', 'bouton_radio_non_envoi_annonces' => 'Geen aankondigingen versturen', 'bouton_radio_non_envoi_liste_nouveautes' => 'De lijst met nieuwe bijdragen niet versturen', @@ -86,7 +90,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'choix_couleur_interface' => 'kleur', 'choix_interface' => 'keuze van de interface', 'colonne' => 'Kolom', - 'confirm_changer_statut' => 'Opgelet. Je hebt gevraagd de status van dit element te wijzigen. Wil je verdergaan ?', + 'confirm_changer_statut' => 'Opgelet. Je hebt gevraagd de status van dit element te wijzigen. Wil je verder gaan?', 'correcte' => 'juist', // D @@ -106,8 +110,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_de_mois_8' => '@j@ augustus', 'date_de_mois_9' => '@j@ september', 'date_demain' => 'morgen', - 'date_fmt_heures_minutes' => '@h@h@m@min', - 'date_fmt_heures_minutes_court' => '@h@h@m@', + 'date_fmt_heures_minutes' => '@h@:@m@uur', + 'date_fmt_heures_minutes_court' => '@h@:@m@', 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ om @heure@', 'date_fmt_jour_heure_debut_fin' => 'op @jour@ vanaf @heure_debut@ tot @heure_fin@', @@ -121,6 +125,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_periode_abbr' => 'Van @dtart@@date_debut@@dtabbr@ tot @dtend@@date_fin@@dtabbr@', 'date_fmt_periode_from' => 'Van', 'date_fmt_periode_to' => 'tot', + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'uren', 'date_hier' => 'gisteren', 'date_il_y_a' => '@delai@ geleden', @@ -163,13 +168,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_jour_2_initiale' => 'm.', 'date_jour_3' => 'dinsdag', 'date_jour_3_abbr' => 'din.', - 'date_jour_3_initiale' => 'd.', + 'date_jour_3_initiale' => 'di', 'date_jour_4' => 'woensdag', 'date_jour_4_abbr' => 'woe.', 'date_jour_4_initiale' => 'w.', 'date_jour_5' => 'donderdag', 'date_jour_5_abbr' => 'don.', - 'date_jour_5_initiale' => 'd.', + 'date_jour_5_initiale' => 'do', 'date_jour_6' => 'vrijdag', 'date_jour_6_abbr' => 'vrij.', 'date_jour_6_initiale' => 'v.', @@ -179,25 +184,25 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_jours' => 'dagen', 'date_minutes' => 'minuten', 'date_mois' => 'maanden', - 'date_mois_1' => 'Januari', - 'date_mois_10' => 'Oktober', + 'date_mois_1' => 'januari', + 'date_mois_10' => 'oktober', 'date_mois_10_abbr' => 'okt.', - 'date_mois_11' => 'November', + 'date_mois_11' => 'november', 'date_mois_11_abbr' => 'nov.', - 'date_mois_12' => 'December', + 'date_mois_12' => 'december', 'date_mois_12_abbr' => 'dec.', - 'date_mois_1_abbr' => 'janu.', - 'date_mois_2' => 'Februari', + 'date_mois_1_abbr' => 'jan.', + 'date_mois_2' => 'februari', 'date_mois_2_abbr' => 'febr.', - 'date_mois_3' => 'Maart', - 'date_mois_3_abbr' => 'mart', - 'date_mois_4' => 'April', + 'date_mois_3' => 'maart', + 'date_mois_3_abbr' => 'mrt.', + 'date_mois_4' => 'april', 'date_mois_4_abbr' => 'apr.', - 'date_mois_5' => 'Mei', + 'date_mois_5' => 'mei', 'date_mois_5_abbr' => 'mei', - 'date_mois_6' => 'Juni', + 'date_mois_6' => 'juni', 'date_mois_6_abbr' => 'juni', - 'date_mois_7' => 'Juli', + 'date_mois_7' => 'juli', 'date_mois_7_abbr' => 'juli', 'date_mois_8' => 'augustus', 'date_mois_8_abbr' => 'aug.', @@ -217,22 +222,23 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dirs_commencer' => 'alvorens de installatie te beginnen', 'dirs_preliminaire' => 'Vooraf: Toegangsrechten regelen', 'dirs_probleme_droits' => 'Probleem met toegangsrechten', - 'dirs_repertoires_absents' => '

      De volgende mappen werden niet gevonden :

        @bad_dirs@.
      + 'dirs_repertoires_absents' => '

      De volgende mappen werden niet gevonden:

        @bad_dirs@.

      Waarschijnlijk is dit te wijten aan het door elkaar halen van hoofd- en kleine letters. Kijk na of kleine en hoofdletters van deze mappen overeenstemmen met wat hieronder getoond wordt; is dit niet het geval, hernoem dan de mappen met je FTP-programma om de fout zo te herstellen.

      -

      Eenmaal deze bewerking uitgevoerd is, kan je', - 'dirs_repertoires_suivants' => '

      Je hebt geen schrijfrechten op de volgende mappen :

        @bad_dirs@.
      +

      Wanneer deze bewerking uitgevoerd is, kan je', + 'dirs_repertoires_suivants' => '

      Je hebt geen schrijfrechten voor de volgende mappen:

        @bad_dirs@.

      Om dit te wijzigen, log je in met een FTP programma en wijzig je de toegangsrechten van elk van de genoemde mappen De procedure is gedetailleerd uitgelegd in de installatiehandleiding.

      -

      Eenmaal deze wijziging doorgevoerd, kan je ', +

      Wanneer deze wijziging is doorgevoerd, kan je ', 'double_occurrence' => 'Dubbele vermelding van @balise@', // E 'en_cours' => 'bezig', 'envoi_via_le_site' => 'Verzending via de site', 'erreur' => 'Fout', - 'erreur_balise_non_fermee' => 'laatste haakje niet opnieuw gesloten :', + 'erreur_balise_non_fermee' => 'laatste haakje niet opnieuw gesloten:', + 'erreur_technique_ajaxform' => 'Ooops. Door een onvoorziene fout kan het formulier niet worden getoond. Probeer het opnieuw.', 'erreur_technique_enregistrement_champs' => 'Een technische fout verhinderde een correcte registratie van het veld @champs@.', 'erreur_technique_enregistrement_impossible' => 'Een technische fout verhinderde de registratie.', 'erreur_texte' => 'fout(en)', @@ -242,61 +248,63 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'fichier_introuvable' => 'Bestand @fichier@ onvindbaar', 'form_auteur_confirmation' => 'Gelieve je e-mail adres te bevestigen', 'form_auteur_email_modifie' => 'Je e-mail adres is veranderd', - 'form_auteur_envoi_mail_confirmation' => 'Een besvestigingsmail werd verstuurd naar @email@. Gelieve de url in de e-mail aan te klikken om je e-mail adres te bevestigen.', - 'form_auteur_mail_confirmation' => 'Goeiedag, + 'form_auteur_envoi_mail_confirmation' => 'Een bevestigingsmail werd verstuurd naar @email@. Klik op de URL in de e-mail om je e-mailadres te bevestigen.', + 'form_auteur_mail_confirmation' => 'Hallo, -Je vroeg je e-mail adres te veranderen. +Je vroeg je e-mailadres te veranderen. Om je nieuwe adres te bevestigen, dien je op onderstaande link te klikken -(zoniet zal je aanvraag vervallen) : +(anders zal je aanvraag vervallen): @url@ ', - 'form_deja_inscrit' => 'Je bent reeds ingeschreven.', + 'form_deja_inscrit' => 'Je bent al ingeschreven.', 'form_email_non_valide' => 'Je e-mailadres is niet geldig.', 'form_forum_access_refuse' => 'Je hebt geen toegang meer tot deze website.', 'form_forum_bonjour' => 'Hallo @nom@,', - 'form_forum_confirmer_email' => 'Klik op de volgende link om je e-mail adres te bevestigen : @url_confirm@', - 'form_forum_email_deja_enregistre' => 'Dit e-mailadres is reeds geregistreerd. Je kan inloggen met je gebruikelijke paswoord.', + 'form_forum_confirmer_email' => 'Klik op de volgende link om je e-mailadres te bevestigen: @url_confirm@', + 'form_forum_email_deja_enregistre' => 'Dit e-mailadres is al geregistreerd. Je kan inloggen met je gebruikelijke wachtwoord.', 'form_forum_identifiant_mail' => 'Je nieuwe logingegevens werden je zonet via e-mail toegestuurd.', - 'form_forum_identifiants' => 'Persoonlijke logins', - 'form_forum_indiquer_nom_email' => 'Vul hier je naam en e-mailadres in. Je persoonlijke login zal je meteen toegestuurd worden via e-mail.', - 'form_forum_login' => 'login :', + 'form_forum_identifiants' => 'Persoonlijke inloggegevens', + 'form_forum_indiquer_nom_email' => 'Vul hier je naam en e-mailadres in. Je persoonlijke login zal je meteen per e-mail toegestuurd worden.', + 'form_forum_login' => 'login:', 'form_forum_message_auto' => '(Dit is een automatisch verzonden bericht)', - 'form_forum_pass' => 'paswoord :', + 'form_forum_pass' => 'wachtwoord:', 'form_forum_probleme_mail' => 'Probleem met e-mail: de logingegevens konden niet worden verstuurd.', - 'form_forum_voici1' => 'Zie hier je nieuwe logingegevens om een bijdrage te kunnen leveren aan de website - "@nom_site_spip@" (@adresse_site@) :', - 'form_forum_voici2' => 'Hierbij je logingegevens om artikels voor te stellen op -de website "@nom_site_spip@" (@adresse_login@) :', + 'form_forum_voici1' => 'Dit zijn je nieuwe logingegevens om een bijdrage te kunnen leveren aan de website + "@nom_site_spip@" (@adresse_site@):', + 'form_forum_voici2' => 'Hierbij je logingegevens om artikelen voor te kunnen stellen op +de website "@nom_site_spip@" (@adresse_login@):', 'form_indiquer_email' => 'Vul hier je e-mailadres in.', 'form_indiquer_nom' => 'Vul hier je naam in.', - 'form_indiquer_nom_site' => 'Gelieve de naam van je site op te geven.', - 'form_pet_deja_enregistre' => 'Deze website is reeds geregistreerd', + 'form_indiquer_nom_site' => 'Geef de naam van je site op.', + 'form_pet_deja_enregistre' => 'Deze website is al geregistreerd', 'form_pet_signature_pasprise' => 'Met je naam wordt geen rekening gehouden.', 'form_prop_confirmer_envoi' => 'Bevestig de verzending', 'form_prop_description' => 'Beschrijving / commentaar', - 'form_prop_enregistre' => 'Je voorstel is geregistreerd. Het zal online verschijnen nadat de eindredacteur van de website het heeft goedgekeurd.', + 'form_prop_enregistre' => 'Je voorstel is geregistreerd. Het zal online verschijnen nadat de beheerder van de website het heeft goedgekeurd.', 'form_prop_envoyer' => 'Een bericht verzenden', - 'form_prop_indiquer_email' => 'Gelieve een geldig e-mailadres op te geven', - 'form_prop_indiquer_nom_site' => 'Gelieve de naam van de site in te vullen', - 'form_prop_indiquer_sujet' => 'Gelieve een onderwerp in te vullen', + 'form_prop_indiquer_email' => 'Geef een geldig e-mailadres op', + 'form_prop_indiquer_nom_site' => 'Vul de naam van de website in', + 'form_prop_indiquer_sujet' => 'Vul een onderwerp in', 'form_prop_message_envoye' => 'Bericht verzonden', 'form_prop_non_enregistre' => 'Je voorstel is niet geregistreerd', 'form_prop_sujet' => 'Onderwerp', 'form_prop_url_site' => 'URL van de site', - 'forum_non_inscrit' => 'Je bent niet ingeschreven, ofwel is je adres of paswoord niet correct.', + 'format_date_incorrecte' => 'De datum of het formaat is incorrect', + 'format_heure_incorrecte' => 'De tijd of het formaat is incorrect', + 'forum_non_inscrit' => 'Je bent niet ingeschreven, ofwel is je adres of wachtwoord niet correct.', 'forum_par_auteur' => 'door @auteur@', 'forum_titre_erreur' => 'Fout ...', // I - 'ical_texte_rss_articles' => 'Het «backend» bestand van de artikels bevindt zich op dit adres:', - 'ical_texte_rss_articles2' => 'Je kan eveneens de «backend» bestanden bekomen voor de artikels van elke rubriek van deze site:', + 'ical_texte_rss_articles' => 'Het «backend» bestand van de artikelen bevindt zich op dit adres:', + 'ical_texte_rss_articles2' => 'Je kan eveneens de «backend» bestanden aanvragen voor de artikelen van iedere rubriek van deze site:', 'ical_texte_rss_breves' => 'Daarnaast bestaat ook een bestand met de nieuwsberichten van de site. Door het nummer van de rubriek op te geven, ontvang je automatisch de berichten van deze rubriek.', 'icone_a_suivre' => 'Taken', 'icone_admin_site' => 'Beheer van de site', 'icone_agenda' => 'Agenda', 'icone_aide_ligne' => 'Help', - 'icone_articles' => 'Artikels', + 'icone_articles' => 'Artikelen', 'icone_auteurs' => 'Auteurs', 'icone_brouteur' => 'Snelle navigatie', 'icone_configuration_site' => 'Configuratie', @@ -304,7 +312,7 @@ de website "@nom_site_spip@" (@adresse_login@) :', 'icone_creer_nouvel_auteur' => 'Een nieuwe auteur aanmaken', 'icone_creer_rubrique' => 'Een rubriek aanmaken', 'icone_creer_sous_rubrique' => 'Een subrubriek aanmaken', - 'icone_deconnecter' => 'Uitloggen', + 'icone_deconnecter' => 'Afmelden', 'icone_discussions' => 'Discussies', 'icone_doc_rubrique' => 'Bijlagen van de rubrieken', 'icone_ecrire_article' => 'Een nieuw artikel schrijven', @@ -324,23 +332,23 @@ de website "@nom_site_spip@" (@adresse_login@) :', 'icone_suivi_activite' => 'De activiteit van de site opvolgen', 'icone_suivi_actualite' => 'Evolutie van de site', 'icone_suivi_pettions' => 'Petities opvolgen/beheren', - 'icone_suivi_revisions' => 'Wijzigingen van de artikels', + 'icone_suivi_revisions' => 'Wijzigingen van de artikelen', 'icone_supprimer_document' => 'Deze bijlage wissen', 'icone_supprimer_image' => 'Deze afbeelding wissen', - 'icone_tous_articles' => 'Al je artikels', + 'icone_tous_articles' => 'Al je artikelen', 'icone_tous_auteur' => 'Alle auteurs', 'icone_tous_visiteur' => 'Alle bezoekers', 'icone_visiter_site' => 'Bekijk publieke site', 'icone_voir_en_ligne' => 'Online bekijken', - 'img_indisponible' => 'beeld onbeschikbaar', + 'img_indisponible' => 'geen afbeelding beschikbaar', 'impossible' => 'onmogelijk', 'info_a_suivre' => 'TAKEN»', 'info_acces_interdit' => 'Geen toegang', 'info_acces_refuse' => 'Toegang geweigerd', - 'info_action' => 'Actie : @action@', - 'info_administrer_rubriques' => 'Je kan deze rubriek en haar subrubrieken beheren', + 'info_action' => 'Actie: @action@', + 'info_administrer_rubriques' => 'Je kunt deze rubriek en haar subrubrieken beheren', 'info_adresse_non_indiquee' => 'Je hebt geen adres opgegeven om te testen!', - 'info_aide' => 'HELP:', + 'info_aide' => 'HULP:', 'info_ajouter_mot' => 'Dit trefwoord toevoegen', 'info_annonce' => 'AANKONDIGING', 'info_annonces_generales' => 'Algemene aankondigingen:', @@ -348,16 +356,16 @@ de website "@nom_site_spip@" (@adresse_login@) :', 'info_article_publie' => 'Gepubliceerd artikel', 'info_article_redaction' => 'Artikel in redactie', 'info_article_refuse' => 'Artikel geweigerd', - 'info_article_supprime' => 'Artikel geschrapt', - 'info_articles' => 'Artikels', - 'info_articles_a_valider' => 'Artikels ter goedkeuring', - 'info_articles_nb' => '@nb@ artikels', - 'info_articles_proposes' => 'Voorgestelde artikels', + 'info_article_supprime' => 'Artikel verwijderd', + 'info_articles' => 'Artikelen', + 'info_articles_a_valider' => 'Artikelen ter goedkeuring', + 'info_articles_nb' => '@nb@ artikelen', + 'info_articles_proposes' => 'Voorgestelde artikelen', 'info_articles_un' => '1 artikel', 'info_auteurs_nombre' => 'auteur(s):', 'info_authentification_ftp' => 'Authenticatie (via FTP).', 'info_breves_2' => 'nieuwsberichten', - 'info_breves_nb' => '@nb@ berichten', + 'info_breves_nb' => '@nb@ nieuwsberichten', 'info_breves_un' => '1 bericht', 'info_connexion_refusee' => 'Verbinding geweigerd', 'info_contact_developpeur' => 'Gelieve een ontwikkelaar te contacteren.', @@ -367,63 +375,63 @@ de website "@nom_site_spip@" (@adresse_login@) :', 'info_copyright_doc' => 'Voor meer informatie, bezoek @spipnet_affiche@.', 'info_copyright_gpl' => 'onder GPL licentie', 'info_cours_edition' => 'In voorbereiding', - 'info_creer_repertoire' => 'Gelieve een bestand of map aan te maken met de volgende naam:', - 'info_creer_repertoire_2' => 'binnen in de submap @repertoire@, vervolgens :', + 'info_creer_repertoire' => 'Maak een bestand of map aan met de volgende naam:', + 'info_creer_repertoire_2' => 'in de submap @repertoire@, vervolgens:', 'info_creer_vignette' => 'automatische aanmaak miniatuur-afbeeldingen', 'info_creerdansrubrique_non_autorise' => 'Je hebt onvoldoende rechten om nieuwe inhoud in deze rubriek te plaatsen.', - 'info_deplier' => 'Uitvouwen', - 'info_descriptif_nombre' => 'Beschrijving(en):', + 'info_deplier' => 'Openvouwen', + 'info_descriptif_nombre' => 'beschrijving(en):', 'info_description' => 'Beschrijving:', 'info_description_2' => 'Beschrijving:', 'info_dimension' => 'Afmetingen:', 'info_documents_nb' => '@nb@ documenten', 'info_documents_un' => '1 document', 'info_ecire_message_prive' => 'Een privé-bericht schrijven', - 'info_email_invalide' => 'Fout e-mailadres.', - 'info_en_cours_validation' => 'Je artikels in redactie', + 'info_email_invalide' => 'Ongeldig e-mailadres.', + 'info_en_cours_validation' => 'Je artikelen in redactie', 'info_en_ligne' => 'Momenteel online:', 'info_envoyer_message_prive' => 'Een privé-bericht sturen naar deze auteur', - 'info_erreur_requete' => 'Fout bij uitvoering van de opdracht :', - 'info_erreur_squelette2' => 'Geen sjabloon @fichier@ is beschikbaar...', - 'info_erreur_systeme' => 'Systeemfout (errno @errsys@)', - 'info_erreur_systeme2' => 'Misschien is de harde schijf vol of de gegevensbank beschadigd.
      -Probeer de de gegevensbank te herstellen, of neem contact op met je provider.', - 'info_fini' => 'Het is gedaan !', + 'info_erreur_requete' => 'Fout bij uitvoering van de opdracht:', + 'info_erreur_squelette2' => 'Geen enkel skelet @fichier@ is beschikbaar...', + 'info_erreur_systeme' => 'Systeemfout (error @errsys@)', + 'info_erreur_systeme2' => 'Misschien is de harde schijf vol of de database beschadigd.
      +Probeer de database te herstellen, of neem contact op met je provider.', + 'info_fini' => 'Het is klaar!', 'info_format_image' => 'Beeldformaten die gebruikt kunnen worden om vignettes (miniatuurafbeeldingen) aan te maken: @gd_formats@.', 'info_format_non_defini' => 'Ongedefinieerd formaat', 'info_grand_ecran' => 'Groot scherm', - 'info_image_aide' => 'HELP', + 'info_image_aide' => 'HULP', 'info_image_process_titre' => 'Methode voor aanmaak van miniatuurafbeeldingen', - 'info_impossible_lire_page' => 'Fout ! Kan de pagina @test_proxy@ niet lezen via de proxy', + 'info_impossible_lire_page' => 'Fout! Kan de pagina @test_proxy@ niet lezen via de proxy', 'info_installation_systeme_publication' => 'Installatie van het publicatiesysteem...', 'info_installer_documents' => 'Je kan alle documenten in de map @upload@ automatisch toevoegen.', 'info_installer_ftp' => 'Een beheerder kan (via FTP) bestanden in de map @upload@ bewaren en ze vervolgens hier meteen selecteren.', - 'info_installer_images' => 'Afbeelden kunnen toegevoegd worden in JPEG, GIF en PNG formaat.', + 'info_installer_images' => 'Afbeelden kunnen toegevoegd worden in JPG, GIF en PNG formaat.', 'info_installer_images_dossier' => 'Afbeeldingen bewaren in de map @upload@ om ze hier te selecteren.', 'info_interface_complete' => 'Volledige interface', 'info_interface_simple' => 'Vereenvoudigde interface', 'info_joindre_document_article' => 'Aan dit artikel kan je een bijlage toevoegen van het type', 'info_joindre_document_rubrique' => 'In deze rubriek kan je bijlagen toevoegen van het type', - 'info_joindre_documents_article' => 'Bij je artikels kan je bijlagen voegen van het type:', + 'info_joindre_documents_article' => 'Bij je artikel kan je bijlagen voegen van het type:', 'info_l_article' => 'het artikel', 'info_la_breve' => 'het bericht', 'info_la_rubrique' => 'de rubriek', - 'info_langue_principale' => 'Hoofdtaal', + 'info_langue_principale' => 'Hoofdtaal van de site', 'info_largeur_vignette' => '@largeur_vignette@ x @hauteur_vignette@ pixels', 'info_les_auteurs_1' => 'door @les_auteurs@', - 'info_logo_format_interdit' => 'Enkel logo’s van het formaat @formats@ worden toegestaan.', + 'info_logo_format_interdit' => 'Alleen logo’s van het formaat @formats@ zijn toegestaan.', 'info_logo_max_poids' => 'Logo’s mogen maximaal @maxi@ zijn (dit bestand is @actuel@).', - 'info_mail_fournisseur' => 'jullie@provider.be', + 'info_mail_fournisseur' => 'jullie@provider.com', 'info_message_2' => 'BERICHT', 'info_message_supprime' => 'VERWIJDERD BERICHT', 'info_messages_nb' => '@nb@ berichten', 'info_messages_un' => '1 boodschap', 'info_mise_en_ligne' => 'Datum van online publicatie:', - 'info_modification_parametres_securite' => 'Wijzigingen aan de veiligheidsinstellingen', - 'info_mois_courant' => 'Gedurende de maand :', + 'info_modification_parametres_securite' => 'wijzigingen van de veiligheidsinstellingen', + 'info_mois_courant' => 'Gedurende de maand:', 'info_mot_cle_ajoute' => 'Het volgende trefwoord is toegevoegd aan ', 'info_multi_herit' => 'Standaardtaal', - 'info_multi_langues_soulignees' => 'In de onderlijnde talen zijn de teksten van de interface gedeeltelijk of volledig vertaald. Als je een van deze talen kiest, worden heel wat gegevens (data, formulieren) van de publieke site automatisch vertaald . Voor de niet-onderlijnde talen zullen deze gegevens in de hoofdtaal van de site verschijnen.', + 'info_multi_langues_soulignees' => 'In de onderstreepte talen zijn de teksten van de interface gedeeltelijk of volledig vertaald. Als je een van deze talen kiest, worden heel wat gegevens (data, formulieren) van de publieke site automatisch vertaald. Voor de niet-onderstreepte talen zullen deze gegevens in de hoofdtaal van de site verschijnen.', 'info_multilinguisme' => 'Meertaligheid', 'info_nom_non_utilisateurs_connectes' => 'Je naam komt niet in de lijst van de redacteuren die online zijn.', 'info_nom_utilisateurs_connectes' => 'Je naam komt in de lijst van de redacteuren die online zijn.', @@ -432,7 +440,7 @@ de website "@nom_site_spip@" (@adresse_login@) :', 'info_non_utilisation_messagerie' => 'Je gebruikt het interne berichtensysteem van deze site niet.', 'info_nouveau_message' => 'JE HEBT EEN NIEUW BERICHT', 'info_nouveaux_messages' => 'JE HEBT @total_messages@ NIEUWE BERICHTEN', - 'info_numero_abbreviation' => 'N° ', + 'info_numero_abbreviation' => 'Nr ', 'info_obligatoire' => 'Deze informatie is verplicht', 'info_pense_bete' => 'MEMO', 'info_petit_ecran' => 'Klein scherm', @@ -440,15 +448,15 @@ de website "@nom_site_spip@" (@adresse_login@) :', 'info_pixels' => 'pixels', 'info_plusieurs_mots_trouves' => 'Meerdere trefwoorden gevonden voor "@cherche_mot@":', 'info_portfolio_automatique' => 'Automatische portfolio:', - 'info_premier_resultat' => '[@debut_limit@ eerste resultaten op @total@]', - 'info_premier_resultat_sur' => '[@debut_limit@ eerste resultaten op @total@]', - 'info_propose_1' => '[@nom_site_spip@] voorgesteld: @titre@', + 'info_premier_resultat' => '[@debut_limit@ eerste resultaten van de @total@]', + 'info_premier_resultat_sur' => '[@debut_limit@ eerste resultaten van de @total@]', + 'info_propose_1' => '[@nom_site_spip@] voorgesteld: @titre@', 'info_propose_2' => 'Voorgesteld artikel -------------------', 'info_propose_3' => 'Het artikel "@titre@" werd voorgesteld voor publicatie', - 'info_propose_4' => 'Je bent uitgenodigd om ze te raadplegen en je mening te geven', - 'info_propose_5' => 'in het forum daaraan verbonden : het is bereikbaar op het adres :', + 'info_propose_4' => 'Je wordt gevraagd het te bekijken en je mening te geven', + 'info_propose_5' => 'in het daaraan verbonden forum. Het is bereikbaar op het adres:', 'info_publie_01' => 'Het artikel "@titre@" werd goedgekeurd door @connect_nom@.', 'info_publie_1' => '[@nom_site_spip@] GEPUBLICEERD : @titre@', 'info_publie_2' => 'Gepubliceerd artikel @@ -471,9 +479,9 @@ de website "@nom_site_spip@" (@adresse_login@) :', 'info_telecharger_ordinateur' => 'Opladen vanaf je computer:', 'info_tous_resultats_enregistres' => '[alle resultaten zijn opgenomen]', 'info_tout_afficher' => 'Alles tonen', - 'info_travaux_texte' => 'Deze site is nog niet geconfigureerd...Kom later eens terug...', + 'info_travaux_texte' => 'Deze site is nog niet geconfigureerd. Kom later nog eens terug...', 'info_travaux_titre' => 'Site in opbouw', - 'info_trop_resultat' => 'Teveel resultaten voor "@cherche_mot@" ; gelieve de opzoeking te verfijnen.', + 'info_trop_resultat' => 'Teveel resultaten voor "@cherche_mot@"; gelieve de zoekopdracht te verfijnen.', 'info_utilisation_messagerie_interne' => 'Je gebruikt het intern berichtensysteem van de site.', 'info_valider_lien' => 'deze link goedkeuren', 'info_verifier_image' => ' , gelieve na te gaan of je afbeeldingen correct zijn overgezet.', @@ -481,15 +489,15 @@ de website "@nom_site_spip@" (@adresse_login@) :', 'info_vignette_personnalisee' => 'gepersonaliseerde afbeelding', 'info_visite' => 'bezoek:', 'info_vos_rendez_vous' => 'Je komende afspraken', - 'infos_vos_pense_bete' => 'Uw herinneringen', + 'infos_vos_pense_bete' => 'Je herinneringen', // L - 'label_ajout_id_rapide' => 'Quick Add', + 'label_ajout_id_rapide' => 'Snelle toevoeging', 'label_poids_fichier' => 'Omvang', 'lien_afficher_icones_seuls' => 'Toon alleen icoontjes', 'lien_afficher_texte_icones' => 'Toon icoontjes en tekst', 'lien_afficher_texte_seul' => 'Toon alleen tekst', - 'lien_liberer' => 'Uitgave', + 'lien_liberer' => 'vrijgeven', 'lien_liberer_tous' => 'Alles vrijgeven', 'lien_nouvea_pense_bete' => 'NIEUWE MEMO', 'lien_nouveau_message' => 'NIEUW BERICHT', @@ -501,52 +509,53 @@ de website "@nom_site_spip@" (@adresse_login@) :', 'lien_repondre_message' => 'Beantwoord dit bericht', 'lien_supprimer' => 'verwijderen', 'lien_tout_afficher' => 'Toon alles', - 'lien_visite_site' => 'Bezoek de site', + 'lien_visite_site' => 'deze site bezoeken', 'lien_visites' => '@visites@ bezoeken', - 'lien_voir_auteur' => 'Auteur nakijken', + 'lien_voir_auteur' => 'Deze auteur bekijken', 'ligne' => 'Lijn', 'login' => 'Verbinding', - 'login_acces_prive' => 'Toegang tot het private deel', + 'login_acces_prive' => 'Toegang tot het privé deel', 'login_autre_identifiant' => 'Verbinden met een andere inlognaam', - 'login_cookie_accepte' => 'Stel je bladerprogramma zo in dat het koekies aanvaardt (tenminste voor deze site).', + 'login_cookie_accepte' => 'Stel je browser zo in dat ze cookies aanvaardt (tenminste voor deze site).', 'login_cookie_oblige' => 'Om jezelf veilig aan te melden, dien je cookies te aanvaarden.', 'login_deconnexion_ok' => 'Verbinding verbroken.', - 'login_erreur_pass' => 'Foutief paswoord.', - 'login_espace_prive' => 'Privaat gedeelte', + 'login_erreur_pass' => 'Foutief wachtwoord.', + 'login_espace_prive' => 'privé gedeelte', 'login_identifiant_inconnu' => 'Loginnaam « @login@ » is niet bekend.', - 'login_login' => 'Login :', - 'login_login2' => 'Login of e-mail adres :', - 'login_login_pass_incorrect' => '(Foutieve loginnaam of paswoord).', - 'login_motpasseoublie' => 'paswoord vergeten?', - 'login_non_securise' => 'Opgepast, dit formuilier is niet beveiligd. - - Als je wil dat derden je paswoord niet kunnen onderscheppen + 'login_login' => 'Login:', + 'login_login2' => 'Login of e-mail adres:', + 'login_login_pass_incorrect' => '(Foutieve loginnaam of wachtwoord.)', + 'login_motpasseoublie' => 'wachtwoord vergeten?', + 'login_non_securise' => 'Opgepast, dit formulier is niet beveiligd. + Als je wil dat derden je wachtwoord niet kunnen onderscheppen op het net, activeer dan Javascript - - in je bladerprogramma en ', + in je browser en', 'login_nouvelle_tentative' => 'Nieuwe poging', 'login_par_ici' => 'Je bent registreerd ... zo ...', - 'login_pass2' => 'Paswoord:', - 'login_preferez_refuser' => 'Als je verkiest om koekies te weigeren, is een andere (minder veilige) methode voor verbinding mogelijk :', - 'login_recharger' => 'Pagina hernieuwen', + 'login_pass2' => 'Wachtwoord:', + 'login_preferez_refuser' => 'Als je verkiest om cookies te blokkeren, is een andere (minder veilige) methode voor verbinding mogelijk:', + 'login_recharger' => 'Pagina vernieuwen', 'login_rester_identifie' => 'Enkele dagen aangemeld blijven', 'login_retour_public' => 'Terug naar de publieke site', 'login_retour_site' => 'Terug naar de publieke site', 'login_retoursitepublic' => 'terug naar de publieke site', - 'login_sans_cookiie' => 'Aanmelden zonder koekie', + 'login_sans_cookie' => 'Aanmelden zonder cookie', 'login_securise' => 'Secure Login', 'login_sinscrire' => 'Registreren', - 'login_test_navigateur' => 'Testen van browser/opnieuw verbinden', - 'login_verifiez_navigateur' => '(Kijk niettemin na dat je bladerprogramma je paswoord niet heeft onthouden...)', + 'login_test_navigateur' => 'testen van browser/opnieuw verbinden', + 'login_verifiez_navigateur' => '(Controleer toch of je browser je wachtwoord niet heeft onthouden...)', // M 'masquer_colonne' => 'Deze kolom verbergen', - 'masquer_trad' => 'Vertalingen verbergen', + 'masquer_trad' => 'vertalingen verbergen', + 'message_nouveaux_identifiants_echec' => 'Er kunnen geen nieuwe identificaties worden aanmaken.', + 'message_nouveaux_identifiants_echec_envoi' => 'De nieuwe identificaties konden niet worden verstuurd.', + 'message_nouveaux_identifiants_ok' => 'De nieuwe identificaties werden verstuurd naar @email@.', 'module_fichiers_langues' => 'Taalbestanden', // N - 'navigateur_pas_redirige' => 'Wanneer je bladerprogramma niet doorverwijst, klik dan hier om verder te gaan.', + 'navigateur_pas_redirige' => 'Wanneer je niet wordt doorverwezen, klik dan hier om verder te gaan.', 'numero' => 'Nummer', // O @@ -560,25 +569,23 @@ de website "@nom_site_spip@" (@adresse_login@) :', 'onglet_interactivite' => 'Interactiviteit', 'onglet_messagerie' => 'Berichtensysteem', 'onglet_repartition_rubrique' => 'Verdeling per rubriek', - 'onglet_save_restaur_base' => 'Backup/terugzetten van de databank', + 'onglet_save_restaur_base' => 'Backup/terugzetten van de database', 'onglet_vider_cache' => 'Cache leegmaken', // P - 'pass_choix_pass' => 'Kies je nieuwe paswoord:', + 'pass_choix_pass' => 'Kies je nieuwe wachtwoord:', 'pass_erreur' => 'Fout', 'pass_erreur_acces_refuse' => 'Fout: je hebt geen toegang meer tot deze site.', 'pass_erreur_code_inconnu' => 'Fout: deze code komt niet overeen met die van een bezoeker met toegangsrechten tot deze site.', - 'pass_erreur_non_enregistre' => 'Fout : het adres @email_oubli@ is niet geregistreerd in deze site.', - 'pass_erreur_non_valide' => 'Fout : het e-mailadres @email_oubli@ is niet geldig !', - 'pass_erreur_probleme_technique' => 'Fout : de e-mail kon niet worden verzonden wegens een technisch probleem.', - 'pass_espace_prive_bla' => 'Het private deel van deze site is enkel + 'pass_erreur_non_enregistre' => 'Fout: het adres @email_oubli@ is niet geregistreerd op deze site.', + 'pass_erreur_non_valide' => 'Fout: het e-mailadres @email_oubli@ is niet geldig!', + 'pass_erreur_probleme_technique' => 'Fout: de e-mail kon niet worden verzonden wegens een technisch probleem.', + 'pass_espace_prive_bla' => 'Het privé gedeelte van deze site is alleen toegankelijk voor bezoekers na registratie. Eenmaal geregistreerd, -kan je artikels ter redactie inzien, zelf artikels toevoegen en deelnemen aan de forums.', - 'pass_forum_bla' => 'Je hebt gevraagd om deel te nemen aan een forum -dat gereserveerd is voor geregistreerde gebruikers.', - 'pass_indiquez_cidessous' => 'Vul hieronder het e-mailadres in waarmee je je eerder -hebt geregistreerd. Je -zal een e-mail ontvangen met uitleg over hoe je opnieuw toegang kan verwerven tot de site.', +kan je artikelen ter redactie inzien, zelf artikelen toevoegen en deelnemen aan de forums.', + 'pass_forum_bla' => 'Je hebt gevraagd om deel te nemen aan een forum dat gereserveerd is voor geregistreerde gebruikers.', + 'pass_indiquez_cidessous' => 'Vul hieronder het e-mailadres in waarmee je je eerder hebt geregistreerd. Je +zult een e-mail ontvangen met uitleg over hoe je opnieuw toegang kan krijgen tot de site.', 'pass_mail_passcookie' => '(dit is een automatisch gegenereerd bericht) Om opnieuw toegang te krijgen tot de site @nom_site_spip@ (@adresse_site@) @@ -587,22 +594,22 @@ Ga naar het volgende adres: @sendcookie@ -Je kan er een nieuw paswoord invoegen en +Je kan er een nieuw wachtwoord invoeren en opnieuw verbinding maken met de site ', - 'pass_mot_oublie' => 'Paswoord vergeten ?', - 'pass_nouveau_enregistre' => 'Je nieuwe paswoord is genoteerd.', - 'pass_nouveau_pass' => 'Nieuw paswoord', + 'pass_mot_oublie' => 'Wachtwoord vergeten?', + 'pass_nouveau_enregistre' => 'Je nieuwe wachtwoord is genoteerd.', + 'pass_nouveau_pass' => 'Nieuw wachtwoord', 'pass_ok' => 'OK', - 'pass_oubli_mot' => 'Paswoord vergeten', - 'pass_procedure_changer' => 'Om je wachtwoord te wijzigen, moeten we eerst uw identiteit controleren. Geef hiervoor het e-mailadres gekoppeld aan je account.', + 'pass_oubli_mot' => 'Wachtwoord vergeten', + 'pass_procedure_changer' => 'Om je wachtwoord te wijzigen, moeten we eerst je identiteit controleren. Geef hiervoor het e-mailadres dat is gekoppeld aan je account.', 'pass_quitter_fenetre' => 'Venster sluiten', - 'pass_rappel_login' => 'Herinnering : je aanmeldingsnaam (login) is "@login@".', + 'pass_rappel_login' => 'Herinnering: je aanmeldingsnaam (login) is "@login@".', 'pass_recevoir_mail' => 'Je zal een e-mail ontvangen waarin uitgelegd staat hoe je opnieuw toegang krijgt tot de site.', - 'pass_retour_public' => 'Terrug aan publiek site', + 'pass_retour_public' => 'Terug naar de publiek site', 'pass_rien_a_faire_ici' => 'Niets te zoeken hier.', - 'pass_vousinscrire' => 'U inschrijven in de site', + 'pass_vousinscrire' => 'Je inschrijven op de site', 'precedent' => 'vorige', 'previsualisation' => 'Schermweergave', 'previsualiser' => 'Vooraf tonen', @@ -611,54 +618,48 @@ opnieuw verbinding maken met de site 'retour' => 'Terugkeren', // S - 'spip_conforme_dtd' => 'SPIP beschouwt dit document als conform met zijn DOCTYPE :', - 'squelette' => 'sjabloon', - 'squelette_inclus_ligne' => 'sjabloon inbegrepen, lijn', - 'squelette_ligne' => 'sjabloon, lijn', + 'spip_conforme_dtd' => 'SPIP beschouwt dit document als conform met zijn DOCTYPE:', + 'squelette' => 'skelet', + 'squelette_inclus_ligne' => 'skelet inbegrepen, lijn', + 'squelette_ligne' => 'skelet, lijn', 'stats_visites_et_popularite' => '@visites@ bezoeken; populariteit: @popularite@', 'suivant' => 'volgende', // T - 'taille_go' => '@taille@ Go', + 'taille_go' => '@taille@ GB', 'taille_ko' => '@taille@ kB', 'taille_mo' => '@taille@ MB', 'taille_octets' => '@taille@ bytes', - 'texte_actualite_site_1' => 'Eenmaal je vertrouwd bent met de interface, kan je klikken op «', - 'texte_actualite_site_2' => 'Volledige interface', + 'texte_actualite_site_1' => 'Wanneer je vertrouwd bent met de interface, kan je klikken op «', + 'texte_actualite_site_2' => 'volledige interface', 'texte_actualite_site_3' => '» om meer mogelijkheden te openen.', - 'texte_creation_automatique_vignette' => 'Op deze site is de automatische aanmaak van miniaturen (vignettes) geactiveerd. Als je vanop dit forumulier afbeeldingen oplaadt van het formaat @gd_formats@, zullen miniaturen aangemaakt worden met een maximale grootte van @taille_preview@ pixels.', - 'texte_documents_associes' => 'Volgende documenten zijn bij het artikel gevoegd, - maar zijn niet rechtstreeks in de tekst opgenomen. - Naargelang de opmaak van de publieke website - zullen ze als bijlage verschijnen.', - 'texte_erreur_mise_niveau_base' => 'Fout met de databank bij het updaten. + 'texte_creation_automatique_vignette' => 'Op deze site is de automatische aanmaak van miniaturen (vignettes) geactiveerd. Als je via dit formulier afbeeldingen oplaadt van het formaat @gd_formats@, zullen miniaturen aangemaakt worden met een maximale grootte van @taille_preview@ pixels.', + 'texte_documents_associes' => 'De volgende documenten zijn bij het artikel gevoegd, maar zijn niet rechtstreeks in de tekst opgenomen. + Naargelang de opmaak van de publieke website zullen ze als bijlage verschijnen.', + 'texte_erreur_mise_niveau_base' => 'Databasefout bij het updaten. De afbeelding @fichier@ werd niet opgeladen (artikel @id_article@). - Noteer deze referentie en probeer andermaal het opladen - van de afbeelding. Kijk vervolgens na of de afbeeldingen - correct verschijnen in het artikel.', - 'texte_erreur_visiteur' => 'U probeerde toegang te krijgen tot het privé-gedeelte met een login die hiervoor geen machtiging heeft.', - 'texte_inc_auth_1' => 'U bent aangemeld als - @auth_login@, maar deze naam komt niet (meer) voor in de databank. - Probeert van u', - 'texte_inc_auth_2' => 'Opnieuw verbinden', + Noteer deze referentie en probeer nogmaals het opladen van de afbeelding. Kijk vervolgens na of de afbeeldingen correct verschijnen in het artikel.', + 'texte_erreur_visiteur' => 'Je probeerde toegang te krijgen tot het privé-gedeelte met een login die hiervoor geen rechten heeft.', + 'texte_inc_auth_1' => 'Je bent aangemeld als + @auth_login@, maar deze naam komt niet (meer) voor in de database. + Probeer je', + 'texte_inc_auth_2' => 'opnieuw aan te melden', 'texte_inc_auth_3' => ', nadat je je browser eventueel gesloten en opnieuw herstart hebt.', 'texte_inc_config' => 'De wijzigingen die op deze pagina worden aangebracht, beïnvloeden grondig de werking van de volledige website. We raden je aan hier niets aan te wijzigen tot je voldoende bekend bent met het functioneren van het SPIP systeem. -

      Algemeen gesproken laat je het - beheer van deze pagina best over aan de webmaster van je - site.', +

      Laat het beheer van deze pagina over aan de webmaster van de site.', 'texte_inc_meta_1' => 'Het systeem merkt een fout bij het wegschrijven van het bestand @fichier@. Gelieve, als beheerder van de site,', 'texte_inc_meta_2' => 'de schrijfrechten na te kijken', 'texte_inc_meta_3' => 'op de map @repertoire@.', 'texte_statut_en_cours_redaction' => 'in redactie', 'texte_statut_poubelle' => 'in de vuilnisbak', - 'texte_statut_propose_evaluation' => 'voorgesteld voor evaluatie', + 'texte_statut_propose_evaluation' => 'ter evaluatie', 'texte_statut_publie' => 'online geplaatst', 'texte_statut_refuse' => 'geweigerd', - 'titre_ajouter_mot_cle' => 'TREFWOORD TOEVOEGEN :', - 'titre_cadre_raccourcis' => 'SNELKOPPELINGEN :', + 'titre_ajouter_mot_cle' => 'TREFWOORD TOEVOEGEN:', + 'titre_cadre_raccourcis' => 'SNELKOPPELINGEN:', 'titre_changer_couleur_interface' => 'Kleur van de interface wijzigen', 'titre_image_admin_article' => 'Je kan dit artikel beheren', 'titre_image_administrateur' => 'Beheerder', @@ -666,46 +667,49 @@ opnieuw verbinding maken met de site 'titre_image_auteur_supprime' => 'Auteur gewist', 'titre_image_redacteur' => 'Redacteur zonder toegang', 'titre_image_redacteur_02' => 'Redacteur', + 'titre_image_selecteur' => 'Toon de lijst', 'titre_image_visiteur' => 'Bezoeker', - 'titre_joindre_document' => 'Document toevoegen', + 'titre_joindre_document' => 'DOCUMENT TOEVOEGEN', 'titre_mots_cles' => 'TREFWOORDEN', - 'titre_probleme_technique' => 'Opgelet : een technisch probleem (SQL server) verhindert de toegang tot dit deel van de site. Dank voor uw begrip.', + 'titre_probleme_technique' => 'Opgelet: een technisch probleem (SQL server) verhindert de toegang tot dit deel van de site. Dank voor je begrip.', 'titre_publier_document' => 'EEN DOCUMENT PUBLICEREN IN DEZE RUBRIEK', - 'titre_signatures_attente' => 'Handtekeningen in wachten van validatie', - 'titre_signatures_confirmees' => 'Bevestigde handtekeningen', + 'titre_signatures_attente' => 'Ondertekeningen wachtend op validatie', + 'titre_signatures_confirmees' => 'Bevestigde ondertekeningen', 'titre_statistiques' => 'Statistieken van de site', 'titre_titre_document' => 'Titel van het document:', 'todo' => 'binnenkort beschikbaar', + 'trad_definir_reference' => 'Kies "@titre@" als referentie voor vertalingen', 'trad_reference' => '(verwijzing naar vertalingen)', // Z - 'zbug_balise_b_aval' => ' : komende opmaakcode B', - 'zbug_balise_inexistante' => 'Baken @balise@ die slecht voor @from@ wordt verklaard', + 'zbug_balise_b_aval' => ': komende opmaakcode B', + 'zbug_balise_inexistante' => 'Slecht verklaard baken @balise@ voor @from@', 'zbug_balise_sans_argument' => 'Argument niet inbegrepen in het baken @balise@', 'zbug_boucle' => 'lus', - 'zbug_boucle_recursive_undef' => 'Niet bepaalde recursieve gesp : @nom@', + 'zbug_boucle_recursive_undef' => 'Niet bepaalde recursieve lus: @nom@', 'zbug_calcul' => 'berekening', 'zbug_champ_hors_boucle' => 'Veld @champ@ buiten de lus', 'zbug_champ_hors_motif' => 'Veld @champ@ buiten een context @motif@', 'zbug_code' => 'code', 'zbug_critere_inconnu' => 'Onbekend criterium @critere@', + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} op een tabel zonder automische primaire sleutel', 'zbug_distant_interdit' => 'Extern verboden', - 'zbug_doublon_table_sans_cle_primaire' => 'Dubbele ingegaan op een tafel zonder primaire atoomsleutel', - 'zbug_doublon_table_sans_index' => '"Doublons" op een tafel zonder indexcijfers', + 'zbug_doublon_table_sans_cle_primaire' => 'Doublon op een tabel zonder primaire sleutel', + 'zbug_doublon_table_sans_index' => '"Doublon" op een tabel zonder index', 'zbug_erreur_boucle_double' => 'Dubbele definitie van de @id@ lus', 'zbug_erreur_boucle_fermant' => 'Lus @id@ niet gesloten ', - 'zbug_erreur_boucle_syntaxe' => 'Syntaxis van de gesp @id@ incorrecte ', + 'zbug_erreur_boucle_syntaxe' => 'Incorrecte syntax van de lus @id@ incorrecte ', 'zbug_erreur_compilation' => 'Compilatiefout', - 'zbug_erreur_execution_page' => 'Fout van uitvoering', + 'zbug_erreur_execution_page' => 'Uitvoeringsfout', 'zbug_erreur_filtre' => 'Filter @filtre@ niet bepaald ', - 'zbug_erreur_meme_parent' => 'Het criterium "dezelfde ouder" {meme_parent} van toepassing is slechts op de lussen (FORUMS) of (RUBRIQUES)', - 'zbug_erreur_squelette' => 'Fout(en) in het sjabloon', + 'zbug_erreur_meme_parent' => 'Het criterium {meme_parent} is uitsluitend van toepassing op de lussen (FORUMS) en (RUBRIQUES)', + 'zbug_erreur_squelette' => 'Fout(en) in het skelet', 'zbug_hors_compilation' => 'Buiten Compilatie', 'zbug_info_erreur_squelette' => 'Fout op de site', - 'zbug_inversion_ordre_inexistant' => 'Omzetting van onbestaande aard', - 'zbug_pagination_sans_critere' => 'Baken #PAGINATION zonder criterium {pagination} of werknemer in een recursieve lus', - 'zbug_parametres_inclus_incorrects' => 'Incorrecte parameter van insluitsel : @param@', - 'zbug_profile' => 'Berekeningstijd : @time@', + 'zbug_inversion_ordre_inexistant' => 'Omzetting van niet-bestaande aard', + 'zbug_pagination_sans_critere' => 'Baken #PAGINATION zonder criterium {pagination} of toegepast in een recursieve lus', + 'zbug_parametres_inclus_incorrects' => 'Incorrecte parameter: @param@', + 'zbug_profile' => 'Berekeningstijd: @time@', 'zbug_resultat' => 'resultaat', 'zbug_serveur_indefini' => 'SQL server niet gedefinieerd', 'zbug_statistiques' => 'Statistieken van de SQL verzoeken, gerangschikt volgens tijdsduur', @@ -717,15 +721,13 @@ opnieuw verbinding maken met de site 'zxml_inconnu_entite' => 'onbekende entiteit', 'zxml_inconnu_id' => 'onbekende ID', 'zxml_mais_de' => 'maar van', - 'zxml_non_conforme' => 'is niet in overeenstemming met de reden', + 'zxml_non_conforme' => 'is niet in overeenstemming met', 'zxml_non_fils' => 'is geen zoon van ', 'zxml_nonvide_balise' => 'niet leeg baken', - 'zxml_obligatoire_attribut' => 'verplichte eigenschap maar afwezig in', + 'zxml_obligatoire_attribut' => 'verplichte eigenschap, maar afwezig in', 'zxml_succession_fils_incorrecte' => 'incorrecte opeenvolging van de zonen', - 'zxml_survoler' => 'overzien voor de juistheid', + 'zxml_survoler' => 'beweeg hierover voor de correcties', 'zxml_valeur_attribut' => 'waarde van de eigenschap', 'zxml_vide_balise' => 'leeg baken', 'zxml_vu' => 'eerder gezien' ); - -?> diff --git a/www/ecrire/lang/spip_oc_auv.php b/www/ecrire/lang/spip_oc_auv.php index 6dd54814..6d4db262 100644 --- a/www/ecrire/lang/spip_oc_auv.php +++ b/www/ecrire/lang/spip_oc_auv.php @@ -1,9 +1,11 @@ 'Tornar au sit public', 'login_retour_site' => 'Tornar au sit public', 'login_retoursitepublic' => 'tornar au sit public', - 'login_sans_cookiie' => 'Identificacion sens cookie', 'login_sinscrire' => 's’inscriure', 'login_test_navigateur' => 'Assai navigador/tornar connectar', 'login_verifiez_navigateur' => '(pasmens verificatz que vòstre navigador aja pas servat vòstre mot de santa Clara en memòria...)', @@ -585,5 +586,3 @@ e vos tornar connectar au sit. 'zbug_serveur_indefini' => 'servidor SQL indefinit', # MODIF 'zbug_table_inconnue' => 'Taula SQL «@table@» desconeguda' ); - -?> diff --git a/www/ecrire/lang/spip_oc_gsc.php b/www/ecrire/lang/spip_oc_gsc.php index 2bc5258e..2303a0a1 100644 --- a/www/ecrire/lang/spip_oc_gsc.php +++ b/www/ecrire/lang/spip_oc_gsc.php @@ -1,9 +1,11 @@ 'Tornar au sit public', 'login_retour_site' => 'Tornar au sit public', 'login_retoursitepublic' => 'tornar au sit public', - 'login_sans_cookiie' => 'Identificacion shens cookie', 'login_sinscrire' => 'inscrive’s', 'login_test_navigateur' => 'Ensai navigader/tornar connectar', 'login_verifiez_navigateur' => '(totun verificatz que lo vòste navigader n’aja pas servat lo vòste mot de santa Clara en memòria...)', @@ -587,5 +588,3 @@ e tornar connectà’vs au sit. 'zbug_serveur_indefini' => 'servidor SQL indefinit', # MODIF 'zbug_table_inconnue' => 'Taula SQL «@table@» inconeguda' ); - -?> diff --git a/www/ecrire/lang/spip_oc_lms.php b/www/ecrire/lang/spip_oc_lms.php index 967c00dc..5e1eccfc 100644 --- a/www/ecrire/lang/spip_oc_lms.php +++ b/www/ecrire/lang/spip_oc_lms.php @@ -1,9 +1,11 @@ 'Tornar au sit public', 'login_retour_site' => 'Tornar au sit public', 'login_retoursitepublic' => 'tornar au sit public', - 'login_sans_cookiie' => 'Identificacion sens cookie', 'login_sinscrire' => 's’inscriure', 'login_test_navigateur' => 'Assai navigador/tornar connectar', 'login_verifiez_navigateur' => '(pasmens verificatz que vòstre navigador aja pas servat vòstre mot de santa Clara en memòria...)', @@ -584,5 +585,3 @@ e vos tornar connectar au sit. 'zbug_serveur_indefini' => 'servidor SQL indefinit', # MODIF 'zbug_table_inconnue' => 'Taula SQL «@table@» inconeguda' ); - -?> diff --git a/www/ecrire/lang/spip_oc_lnc.php b/www/ecrire/lang/spip_oc_lnc.php index a2aaebfd..7ec28a79 100644 --- a/www/ecrire/lang/spip_oc_lnc.php +++ b/www/ecrire/lang/spip_oc_lnc.php @@ -1,9 +1,11 @@ 'Tornar al sit public', 'login_retour_site' => 'Tornar al sit public', 'login_retoursitepublic' => 'tornar al sit public', - 'login_sans_cookiie' => 'Identificacion sens cookie', 'login_sinscrire' => 's’inscriure', 'login_test_navigateur' => 'Ensag navigador/tornar connectar', 'login_verifiez_navigateur' => '(ça que la verificatz que vòstre navigador aja pas servat vòstre mot de santa Clara en memòria...)', @@ -644,5 +645,3 @@ e vos tornar connectar al sit. 'zxml_vide_balise' => 'balise voida', 'zxml_vu' => 'vist aperavant' ); - -?> diff --git a/www/ecrire/lang/spip_oc_ni.php b/www/ecrire/lang/spip_oc_ni.php index ebad7d87..5eb9219b 100644 --- a/www/ecrire/lang/spip_oc_ni.php +++ b/www/ecrire/lang/spip_oc_ni.php @@ -1,9 +1,11 @@ 'Tornar au sit public', 'login_retour_site' => 'Tornar au sit public', 'login_retoursitepublic' => 'tornar au sit public', - 'login_sans_cookiie' => 'Identificacion sensa cookie', 'login_sinscrire' => 's’inscriure', 'login_test_navigateur' => 'test navigador/tornar connectar', 'login_verifiez_navigateur' => '(verificatz pura que lo voastre navigador a pas conservat lo mòt de santa Clara en memòria...)', @@ -651,5 +652,3 @@ e vos tornar connectar au sit. 'zxml_vide_balise' => 'balise vuèia', 'zxml_vu' => 'vist adés' ); - -?> diff --git a/www/ecrire/lang/spip_oc_ni_la.php b/www/ecrire/lang/spip_oc_ni_la.php index 39c24680..7f865d0f 100644 --- a/www/ecrire/lang/spip_oc_ni_la.php +++ b/www/ecrire/lang/spip_oc_ni_la.php @@ -1,9 +1,11 @@ 'Tornar au sit public', 'login_retour_site' => 'Tornar au sit public', 'login_retoursitepublic' => 'tornar au sit public', - 'login_sans_cookiie' => 'Identificacion sensa cookie', 'login_sinscrire' => 's’inscriure', 'login_test_navigateur' => 'Assai navigador/tornar connectar', 'login_verifiez_navigateur' => '(totun verificatz que lo vòstre navigador non auga servat lo vòstre mot de santa Clara en memòria...)', @@ -584,5 +585,3 @@ e vos tornar connectar au sit. 'zbug_serveur_indefini' => 'servidor SQL indefinit', # MODIF 'zbug_table_inconnue' => 'Taula SQL «@table@» inconeguda' ); - -?> diff --git a/www/ecrire/lang/spip_oc_ni_mis.php b/www/ecrire/lang/spip_oc_ni_mis.php index c4271d48..e3f12258 100644 --- a/www/ecrire/lang/spip_oc_ni_mis.php +++ b/www/ecrire/lang/spip_oc_ni_mis.php @@ -1,9 +1,11 @@ 'Recarculà aquela pàgina', 'afficher_calendrier' => 'Afichà lou calendari', 'afficher_trad' => 'afichà li traducioun', - 'alerte_maj_impossible' => 'Alèrta ! La metuda a jou de la basa SQL vers la versioun @version@ es empoussible ; magara que lì a un proublema relatiéu au drech de moudificà la basa de dounada. Vourguès countatà lou vouòstre aubergadour.', + 'alerte_maj_impossible' => 'Alèrta ! La messa a jou de la basa SQL vers la versioun @version@ es empoussible ; magara que lì a un proublema relatiéu au drech de moudificà la basa de dounada. Vourguès countatà lou vouòstre aubergadour.', 'alerte_modif_info_concourante' => 'MÈFI : Aquela infourmacioun es estada moudificada d’un autre bias. La valour atuala es :', 'analyse_xml' => 'Analisa XML', 'annuler' => 'Anulà', @@ -44,11 +46,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_erreur_mysql' => 'Errour SQL ', 'avis_erreur_sauvegarde' => 'Errour en la sauvagarda (@type@ @id_objet@) ! ', 'avis_erreur_visiteur' => 'Proublèma d’achès a l’espaci privat', - 'avis_nb_erreurs_saisie' => 'Lì a @nb@ errour en la vouòstra sesìda, vourguès verificà li infourmacioun.', + 'avis_nb_erreurs_saisie' => 'Lì soun @nb@ errour en la vouòstra sesìda, vourguès verificà li infourmacioun.', // B 'barre_a_accent_grave' => 'Inscrì una A achèntou grave maiùscoula', - 'barre_aide' => 'Utilisà li escourcha tipougràfiqui da enriquì la vouòstra coumpaginacioun', + 'barre_aide' => 'Utilisà li escourcha tipougràfiqui per enriquì la vouòstra coumpaginacioun', 'barre_e_accent_aigu' => 'Inscrì una E achèntou agut maiùscoula', 'barre_eo' => 'Inscrì una E en l’O', 'barre_eo_maj' => 'Inscrì una E en l’O maiùscoula', @@ -59,7 +61,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'barre_intertitre' => 'Trasfourmà en {{{intertitre}}}', 'barre_italic' => 'Metre en {itàlicou}', 'barre_lien' => 'Trasfourmà en [estac ipertèst->http://...]', - 'barre_lien_input' => 'Vourguès endicà l’adressa dóu vouòstre estac (poudès endicà una adressa web souta la forma http://www.loumieusit.com o simplamen endicà lou número d’un article d’aqueu sit).', + 'barre_lien_input' => 'Vourguès endicà l’adressa dóu vouòstre estac (poudès endicà un’adressa web souta la forma http://www.loumieusit.com o simplamen endicà lou número d’un article d’aqueu sit).', 'barre_note' => 'Trasfourmà en [[Nota de bas de pàgina]]', 'barre_paragraphe' => 'Creà un paràgrafou', 'barre_quote' => 'Cità un message', @@ -88,7 +90,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'choix_couleur_interface' => 'coulou ', 'choix_interface' => 'chausida de l’interfaça', 'colonne' => 'Coulòna', - 'confirm_changer_statut' => 'Mèfi, avès demandat de cambià l’estatut d’aquel elemen. Desiràs countinuà ?', + 'confirm_changer_statut' => 'Mèfi, avès demandat de cambià l’estatut d’aquel elemen. Desiras countinuà ?', 'correcte' => 'courret', # chaine utilisée dans le debugueur : "validation .. impossible" ou "validation .. correcte" // D @@ -220,13 +222,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dirs_commencer' => ' per fin de coumençà vertadieramen l’instalacioun', 'dirs_preliminaire' => 'Preliminari : Reglà lu drech d’achès', 'dirs_probleme_droits' => 'Proublèma de drech d’achès', - 'dirs_repertoires_absents' => '

      Lu repertori seguent noun soun estat troubat :

        @bad_dirs@.
      -

      Si pòu que vengue d’un proublema de maiùscoula o minùscula mau metuda. - Verificàs que li minùscula e maiùscoula d’aquelu repertori courrespouòndon ben embé cen qu’es afichat - aquì soubre ; s’es pas lou cas, renoumàs lu repertori embé lou vouòstre lougiciau FTP per courregì l’errour.

      + 'dirs_repertoires_absents' => '

      Lu repertori seguent noun soun estat trouvat :

        @bad_dirs@.
      +

      Si pòu que vengue d’un proublema de maiùscoula o minùscula mau messa. + Verificas que li minùscula e maiùscoula d’aquelu repertori courrespouòndon ben embé cen qu’es afichat + aquì soubre ; noun sigue lou cas, renoumas lu repertori emb’au vouòstre lougiciau FTP per courregì l’errour.

      Un còu qu’aurès fach acò, pourès ', 'dirs_repertoires_suivants' => '

      Lu repertori seguent noun soun achessible en escritura :

        @bad_dirs@.
      -

      Per lì remedià, utilisàs lou vouòstre client FTP per fin de reglà lu drech d’achès de cadun +

      Per lì remedià, utilisas lou vouòstre client FTP per fin de reglà lu drech d’achès de cadun d’aquelu repertori. La guida d’instalacioun espliga en detalh couma prouchedre.

      Un còu aquesta manipulacioun facha, pourès ', 'double_occurrence' => 'Doubla ocurença de @balise@', @@ -236,21 +238,21 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'envoi_via_le_site' => 'Manda vìa lou sit web', 'erreur' => 'Errour', 'erreur_balise_non_fermee' => 'darrièra balisa noun clàusa :', - 'erreur_technique_ajaxform' => 'Achident ! Una errour emprouvisa a empedit de soumetre lou fourmulari. Poudès encara prouvà.', + 'erreur_technique_ajaxform' => 'Achident ! Un’errour emprouvisa a empedit de soumetre lou fourmulari. Poudès mai prouvà.', 'erreur_technique_enregistrement_champs' => 'Una errour tecnicala a empedit de ben registrà lou camp @champs@.', - 'erreur_technique_enregistrement_impossible' => 'Una errour tecnicala a empedit lou registramen.', + 'erreur_technique_enregistrement_impossible' => 'Un’errour tecnicala a empedit lou registramen.', 'erreur_texte' => 'errour', 'etape' => 'Tapa', // F 'fichier_introuvable' => 'Fichié @fichier@ introuvable', - 'form_auteur_confirmation' => 'Counfirmàs la vouòstra adressa email', + 'form_auteur_confirmation' => 'Counfirmas la vouòstra adressa email', 'form_auteur_email_modifie' => 'La vouòstra adressa email a estada moudificada.', - 'form_auteur_envoi_mail_confirmation' => 'Un courrié electrònicou de counfirmacioun a estat mandat a @email@. Deurès visità l’adressa Web menciounada en aqueu courrié pèr validà la vouòstra adressa mail.', + 'form_auteur_envoi_mail_confirmation' => 'Un courrié electrònicou de counfirmacioun es estat mandat a @email@. Deurès visità l’adressa Web menciounada en aqueu courrié per validà la vouòstra adressa mail.', 'form_auteur_mail_confirmation' => 'Bouònjou, Avès demandat à changà la vouòstra adressa e-mail. -Pèr counfirmà la vouòstra adressa nova, devès vi counetà pèr +Per counfirmà la vouòstra adressa nova, devès vi counetà à l’adressa aquì souta (senoun la vouòstra demanda sera ignourada) : @@ -259,14 +261,14 @@ sera ignourada) : 'form_deja_inscrit' => 'Sias ja inscrich.', 'form_email_non_valide' => 'La vouòstra adressa e-mail noun es valida.', 'form_forum_access_refuse' => 'Poudès pu achèdre en estou sit.', - 'form_forum_bonjour' => 'Bouònjou,', - 'form_forum_confirmer_email' => 'Pèr counfirmà la vouòstra adressa e-mail, anàs en aquela adressa : @url_confirm@', + 'form_forum_bonjour' => 'Bouònjou @nom@,', + 'form_forum_confirmer_email' => 'Pèr counfirmà la vouòstra adressa e-mail, anas en aquela adressa : @url_confirm@', 'form_forum_email_deja_enregistre' => 'Aquela adressa e-mail es ja registrada, poudès dounca utilisà lou vouòstre mot de passa abitual.', - 'form_forum_identifiant_mail' => 'Lou vouòstre nouvèl identificant ven de v’èstre mandat da e-mail.', + 'form_forum_identifiant_mail' => 'Lou vouòstre nouvèl identificant ven de v’èstre mandat per e-mail.', 'form_forum_identifiants' => 'Identificant persounal', - 'form_forum_indiquer_nom_email' => 'Endicàs aquí lou vouòstre noum e la vouòstra adressa e-mail. Lou vouòstre identificant persounal arriberà rapidamen, da courrié electrònicou.', + 'form_forum_indiquer_nom_email' => 'Endicas aquí lou vouòstre noum e la vouòstra adressa e-mail. Lou vouòstre identificant persounal arriberà rapidamen, per courrié electrònicou.', 'form_forum_login' => 'login :', - 'form_forum_message_auto' => '(aquò es un message automatic)', + 'form_forum_message_auto' => '(acò es un message automàticou)', 'form_forum_pass' => 'mot de passa :', 'form_forum_probleme_mail' => 'Proublèma d’e-mail : l’identificant noun pòu estre mandat.', 'form_forum_voici1' => 'Vèqui lu vouòstre identificant pèr poudé participà à la vida dóu sit "@nom_site_spip@" (@adresse_site@) :', @@ -293,9 +295,9 @@ sera ignourada) : 'forum_titre_erreur' => 'Errour...', // I - 'ical_texte_rss_articles' => 'Lou fichié « backend » dei article d’estou sit si troba a l’adressa :', + 'ical_texte_rss_articles' => 'Lou fichié « backend » dei article d’estou sit si trova a l’adressa :', 'ical_texte_rss_articles2' => 'Poudès finda outenì de fichié « backend » per lu article de cada rùbrica dóu sit :', - 'ical_texte_rss_breves' => 'Esìsta de mai un fichié countenant li brèva dóu sit. En prechisant un nùmero de rùbrica, outendrès basta li brèva d’aquela rùbrica.', + 'ical_texte_rss_breves' => 'Esìsta de mai un fichié que counten li brèva dóu sit. En prechisant un nùmero de rùbrica, outendrès basta li brèva d’aquela rùbrica.', 'icone_a_suivre' => 'Da sègre', 'icone_admin_site' => 'Aministracioun dóu sit', 'icone_agenda' => 'Agenda', @@ -311,7 +313,7 @@ sera ignourada) : 'icone_deconnecter' => 'Si descounetà', 'icone_discussions' => 'Discussioun', 'icone_doc_rubrique' => 'Doucumen dei rùbrica', - 'icone_ecrire_article' => 'Escrieure un novèl article', + 'icone_ecrire_article' => 'Escriéure un nouvèl article', 'icone_edition_site' => 'Edicioun', 'icone_gestion_langues' => 'Gestioun dei lenga', 'icone_informations_personnelles' => 'Infourmacioun persounali', @@ -343,8 +345,8 @@ sera ignourada) : 'info_acces_refuse' => 'Achès refudat', 'info_action' => 'Acioun : @action@', 'info_administrer_rubriques' => 'Poudès aministrà aquela rùbrica e li sieu souta-rùbrica', - 'info_adresse_non_indiquee' => 'Noun avès endicat d’adressa a prouvà !', - 'info_aide' => 'AJUDA:', + 'info_adresse_non_indiquee' => 'Noun avès endicat d’adressa à prouvà !', + 'info_aide' => 'AJUDA :', 'info_ajouter_mot' => 'Ajustà aqueu mot', 'info_annonce' => 'ANOUNCI', 'info_annonces_generales' => 'Anounci general :', @@ -354,12 +356,12 @@ sera ignourada) : 'info_article_refuse' => 'Article refudat', 'info_article_supprime' => 'Article suprimat', 'info_articles' => 'Article', - 'info_articles_a_valider' => 'Lu article a validà', + 'info_articles_a_valider' => 'Lu article da validà', 'info_articles_nb' => '@nb@ article', 'info_articles_proposes' => 'Article proupausat', 'info_articles_un' => '1 article', 'info_auteurs_nombre' => 'autour', - 'info_authentification_ftp' => 'autentificacioun (da FTP).', + 'info_authentification_ftp' => 'autentificacioun (per FTP).', 'info_breves_2' => 'brèva', 'info_breves_nb' => '@nb@ brèva', 'info_breves_un' => '1 brèva', @@ -371,10 +373,10 @@ sera ignourada) : 'info_copyright_doc' => 'Per mai d’infourmacioun, veire lou sit @spipnet_affiche@.', 'info_copyright_gpl' => 'souta lichença GPL', 'info_cours_edition' => 'Lu vouòstre article en cours de redacioun', - 'info_creer_repertoire' => 'Vourguès creà un fichié o un repertori noumat', + 'info_creer_repertoire' => 'Vourguès creà un fichié o un repertori noumat :', 'info_creer_repertoire_2' => 'en dintre dóu souta-repertori @repertoire@, pi :', 'info_creer_vignette' => 'creacioun autoumatica de la vigneta', - 'info_creerdansrubrique_non_autorise' => 'Noun avès lu drech suficient pèr creà un countegut en aquela rùbrica', + 'info_creerdansrubrique_non_autorise' => 'Noun avès lu drech suficient per creà un countegut en aquela rùbrica', 'info_deplier' => 'Desplegà', 'info_descriptif_nombre' => 'descritiéu :', 'info_description' => 'Descricioun :', @@ -391,16 +393,16 @@ sera ignourada) : 'info_erreur_squelette2' => 'Minga d’esquèletrou @fichier@ es dispounibla...', 'info_erreur_systeme' => 'Errour sistèma (errno @errsys@)', 'info_erreur_systeme2' => 'Bessai que lou disc dur es plen, o la basa de dounada es degalhada.
      -Prouvàs de reparà la basa, o countatàs lou vouòstre aubergadour.', +Prouvas de reparà la basa, o countatas lou vouòstre aubergadour.', 'info_fini' => 'Es acabat !', - 'info_format_image' => 'Fourmat d’image que pouòdon èstre utilisat pèr creà de vigneta : @gd_formats@.', + 'info_format_image' => 'Fourmat d’image que pouòdon èstre utilisat per creà de vigneta : @gd_formats@.', 'info_format_non_defini' => 'fourmat noun definit', 'info_grand_ecran' => 'Gran ecran', 'info_image_aide' => 'AJUDA', 'info_image_process_titre' => 'Mètodou de fabricacioun dei vigneta', 'info_impossible_lire_page' => 'Errour ! Empoussible de legì la pàgina @test_proxy@ pèr lou proxy ', 'info_installation_systeme_publication' => 'Instalacioun dóu sistema de publicacioun...', - 'info_installer_documents' => 'Poudès instalà autoumaticamen toui lu doucumen contengut en lou doussié @upload@.', + 'info_installer_documents' => 'Poudès instalà automaticamen toui lu doucumen contengut en lou doussié @upload@.', 'info_installer_ftp' => 'En la mesura doun sias aministratour, poudès instalà (per FTP) de fichié en lou doussié @upload@ pi lu seleciounà aquì.', 'info_installer_images' => 'Poudès instalà d’image ai fourmat JPEG, GIF e PNG.', 'info_installer_images_dossier' => 'Instalà d’image en lou doussié @upload@ per lu poudé seleciounà aquí.', @@ -414,7 +416,7 @@ sera ignourada) : 'info_la_rubrique' => 'la rùbrica', 'info_langue_principale' => 'Lenga principala dóu sit', 'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixel', - 'info_les_auteurs_1' => 'per @les_auteurs@ ', + 'info_les_auteurs_1' => 'da @les_auteurs@ ', 'info_logo_format_interdit' => 'Basta lu logo de fourmat @formats@ soun autourisat.', 'info_logo_max_poids' => 'Lu logo devon oubligatoriamen faire mens de @maxi@ (aquèu fichié fa @actuel@).', 'info_mail_fournisseur' => 'vous@fournissur.com', @@ -422,18 +424,18 @@ sera ignourada) : 'info_message_supprime' => 'MESSAGE SUPRIMAT', 'info_messages_nb' => '@nb@ message', 'info_messages_un' => '1 message', - 'info_mise_en_ligne' => 'Data de metuda en ligna :', + 'info_mise_en_ligne' => 'Data de messa en ligna :', 'info_modification_parametres_securite' => 'modificacioun dei parametre de segurtà', 'info_mois_courant' => 'En cours de mes:', 'info_mot_cle_ajoute' => 'Lou mot clau seguent es estat ajustat a ', 'info_multi_herit' => 'Lenga predefinida', - 'info_multi_langues_soulignees' => 'Li lenga soulignada beneficioun d’una traducioun toutala o partiala dei test de l’interfaça. Se seleciounàs aqueli lenga, touplen d’elemen dóu sit public (data, fourmulari) seran traduch autoumaticamen. Per li lenga noun soulinhadi, aquelu elemen apareisseran en la lenga principala dóu sit.', + 'info_multi_langues_soulignees' => 'Li lenga soulignadi beneficioun d’una traducioun toutala o parciala dei test de l’interfaça. Se seleciounès aqueli lenga, touplen d’elemen dóu sit public (data, fourmulari) seran traduch automaticamen. Per li lenga noun soulignadi, aquelu elemen apareisseran en la lenga principala dóu sit.', 'info_multilinguisme' => 'Multilenguisme', 'info_nom_non_utilisateurs_connectes' => 'Lou vouòstre noum noun aparèisse en la lista dei utilisaire counetat.', 'info_nom_utilisateurs_connectes' => 'Lou vouòstre noum aparèisse en la lista dei utilisaire counetat.', 'info_nombre_en_ligne' => 'Ahura en ligna :', 'info_non_resultat' => 'Minga de resultat per "@cherche_mot@"', - 'info_non_utilisation_messagerie' => 'Noun utilisàs la messagerìa interna d’estou sit.', + 'info_non_utilisation_messagerie' => 'Noun utilisas la messagerìa interna d’estou sit.', 'info_nouveau_message' => 'AVÈS UN NOUVÈU MESSAGE', 'info_nouveaux_messages' => 'AVÈS @total_messages@ NOUVÈU MESSAGE', 'info_numero_abbreviation' => 'N° ', @@ -452,7 +454,7 @@ sera ignourada) : 'info_propose_3' => 'L’article "@titre@" es proupausat a la publicacioun.', 'info_propose_4' => 'Sias counvidat a lou venì counsultà e a dounà la vouòstra oupinioun', 'info_propose_5' => 'en lou fòrou que li es estacat. Es dispounibla a l’adressa :', - 'info_publie_01' => 'L’article "@titre@" es estat validat per @connect_nom@.', + 'info_publie_01' => 'L’article "@titre@" es estat validat da @connect_nom@.', 'info_publie_1' => '[@nom_site_spip@] PUBLICA : @titre@', 'info_publie_2' => 'Article publicat ----------------', @@ -467,7 +469,7 @@ sera ignourada) : 'info_sites_nb' => '@nb@ sit', 'info_sites_un' => '1 sit', 'info_supprimer_vignette' => 'suprimà la vigneta', - 'info_symbole_bleu' => 'Lou sìmbolou blu marca una nota de renembrança : es a dire un message dóu vouòstre usage persounal.', + 'info_symbole_bleu' => 'Lou sìmbolou blu marca una nota de renembrança : es a dire un message dau vouòstre usage persounal.', 'info_symbole_jaune' => 'Lou sìmbolou jaune marca un anounci per toui lu redatour : lu aministratour la pouòdon moudificà, cada redatour la pòu veire.', 'info_symbole_vert' => 'Lou sìmbolou vert marca lu message cambiat embé d’autre utilisaire dóu sit.', 'info_telecharger_nouveau_logo' => 'Telecargà un nouvèu logo :', @@ -477,7 +479,7 @@ sera ignourada) : 'info_travaux_texte' => 'Estou sit es pas encara counfigurat. Tournès pu tardi...', 'info_travaux_titre' => 'Sit en obra', 'info_trop_resultat' => 'Tròu de resultat per "@cherche_mot@" ; vourguès afinà la recercà.', - 'info_utilisation_messagerie_interne' => 'Utilisàs la messagerìa interna d’estou sit.', + 'info_utilisation_messagerie_interne' => 'Utilisas la messagerìa interna d’estou sit.', 'info_valider_lien' => 'validà aquel estac', 'info_verifier_image' => ', vourguès verificà que li vouòstri image soun estadi trasferidi courretamen.', 'info_vignette_defaut' => 'Vigneta predefinida', @@ -496,7 +498,7 @@ sera ignourada) : 'lien_liberer_tous' => 'Liberà tout', 'lien_nouvea_pense_bete' => 'NOUVÈLA NOTA DE RENEMBRANÇA ', 'lien_nouveau_message' => 'NOVÈU MESSAGE', - 'lien_nouvelle_annonce' => 'NOVÈL ANOUNCI', + 'lien_nouvelle_annonce' => 'NOUVÈL ANOUNCI', 'lien_petitions' => 'PETICIOUN', 'lien_popularite' => 'poupularità : @popularite@%', 'lien_racine_site' => 'RAÏS DÓU SIT', @@ -512,7 +514,7 @@ sera ignourada) : 'login_acces_prive' => 'achès a l’espaci privat', 'login_autre_identifiant' => 'si counetà embé un autre identificant', 'login_cookie_accepte' => 'Vourguès counfigurà lou vouòstre navigatour per que lu acheta (au màncou per estou sit).', - 'login_cookie_oblige' => 'Per v’identificà d’una manièra segura soubre estou sit, vi còu achetà lu cookie.', + 'login_cookie_oblige' => 'Per v’identificà d’una manièra segura soubre stou sit, vi còu achetà lu cookie.', 'login_deconnexion_ok' => 'Descounessioun efetuada', 'login_erreur_pass' => 'Errour de mot de passa.', 'login_espace_prive' => 'espaci privat', @@ -525,7 +527,7 @@ sera ignourada) : Se noun voulès que lou vouòstre mot de passa sigue interchetat sus la taragnina, vourguès ativà Javascript en lou vouòstre navigatour e', - 'login_nouvelle_tentative' => 'nouvèla tentativa', + 'login_nouvelle_tentative' => 'Tentativa nouvèla', 'login_par_ici' => 'Sias registrat... per aquì...', 'login_pass2' => 'Mot de passa :', 'login_preferez_refuser' => 'Se preferas refudà lu cookie, un autre mètodou de counessioun (mens securisat) es a la vouòstra dispousicioun :', @@ -534,7 +536,7 @@ sera ignourada) : 'login_retour_public' => 'Retour au sit pùblicou', 'login_retour_site' => 'Retour au sit pùblicou', 'login_retoursitepublic' => 'retour au sit pùblicou', - 'login_sans_cookiie' => 'Identificacioun sensa cookie', + 'login_sans_cookie' => 'Identificacioun sensa cookie', 'login_securise' => 'Login securisat', 'login_sinscrire' => 's’inscriéure', 'login_test_navigateur' => 'prouva navigatour/recounessioun', @@ -546,7 +548,7 @@ sera ignourada) : 'module_fichiers_langues' => 'Fichié de lenga', // N - 'navigateur_pas_redirige' => 'Se lou vouòstre navigatour noun es redirigiat, clicàs aquí per continuà.', + 'navigateur_pas_redirige' => 'Se lou vouòstre navigatour noun es redirigiat, clicas aquí per continuà.', 'numero' => 'Nùmero', // O @@ -568,7 +570,7 @@ sera ignourada) : 'pass_erreur' => 'Errour', 'pass_erreur_acces_refuse' => 'Errour : poudès plus achèdre en aqueu sit.', 'pass_erreur_code_inconnu' => 'Errour : aquestou code courrespouònde a mìnga de visitaire qu’an achès en estou sit.', - 'pass_erreur_non_enregistre' => 'Errour : l’adressa @email_oubli@ noun es registrada soubre estou sit.', + 'pass_erreur_non_enregistre' => 'Errour : l’adressa @email_oubli@ noun es registrada soubre stou sit.', 'pass_erreur_non_valide' => 'Errour : aquel e-mail @email_oubli@ noun es valid !', 'pass_erreur_probleme_technique' => 'Errour : per l’encausa d’un proublema tècnicou, l’e-mail noun si pòu estre mandat. ', 'pass_espace_prive_bla' => 'L’espaci privat d’estou sit es dubèrt ai @@ -598,8 +600,8 @@ e vi recounetà au sit. 'pass_nouveau_pass' => 'Mot de passa nouvèu', 'pass_ok' => 'OK', 'pass_oubli_mot' => 'Denembrança dóu mot de passa', - 'pass_procedure_changer' => 'Per changà lou vouòstre mot de passa, deven en premié verificà la vouòstra identità. Per acò, endicàs l’adressa e-mail assouciada au vouòstre conte.', - 'pass_quitter_fenetre' => 'Quitar aquesta fenèstra ', + 'pass_procedure_changer' => 'Per changà lou vouòstre mot de passa, endicàs l’adressa email assouciada au vouòstre conte.', + 'pass_quitter_fenetre' => 'Quità aquesta fenèstra ', 'pass_rappel_login' => 'Renembrança: lo voastre identificant (login) es « @login@ ».', 'pass_recevoir_mail' => 'Receverès un e-mail que v’espliquerà couma retroubà lou vouòstre achès au sit.', 'pass_retour_public' => 'Retour soubre lou sit pùblicou', @@ -625,23 +627,23 @@ e vi recounetà au sit. 'taille_ko' => '@taille@ Ko', 'taille_mo' => '@taille@ Mo', 'taille_octets' => '@taille@ octet', - 'texte_actualite_site_1' => 'Quoura serès familharisat embé l’interfaça, pourès clicà sus « ', + 'texte_actualite_site_1' => 'Coura serès familharisat embé l’interfaça, pourès clicà sus « ', 'texte_actualite_site_2' => 'interfaça coumpleta', 'texte_actualite_site_3' => '» per avé mai de poussibilità.', - 'texte_creation_automatique_vignette' => 'La creacioun autoumatica de vigneta de previsualisacioun es ativada soubre estou sit. S’instalàs d’image ai fourmat @gd_formats@ a partì d’estou fourmulari, seràn acoumpagnadi d’una vinheta d’una talha massimala de @taille_preview@ pixel.', + 'texte_creation_automatique_vignette' => 'La creacioun autoumatica de vigneta de previsualisacioun es ativada soubre estou sit. S’instalas d’image ai fourmat @gd_formats@ a partì d’estou fourmulari, seràn acoumpagnadi d’una vinheta d’una talha massimala de @taille_preview@ pixel.', 'texte_documents_associes' => 'Lu doucumen seguent soun assouciat dau article, mà soun pas estat diretamen inserat. Segoun la coumpaginacioun dóu sit public, pouran aparèisse souta fourma de doucumen jounch.', - 'texte_erreur_mise_niveau_base' => 'Errour de basa de dounada dóu tems de la metuda a nivèu. + 'texte_erreur_mise_niveau_base' => 'Errour de basa de dounada dóu tems de la messa a nivèu. L’image @fichier@ es pas passada (article @id_article@). - Noutàs ben aquela referença, reprouvàs la metuda a - nivèu, e verificàs pi que lu image aparèisson + Noutas ben aquela referença, reprouvas la messa a + nivèu, e verificas pi que lu image aparèisson encara en lu article.', - 'texte_erreur_visiteur' => 'Avès prouvat d’achèdre a l’espaci privat emb’un identificant que noun lou permete.', + 'texte_erreur_visiteur' => 'Avès prouvat d’achèdre à l’espaci privat emb’un identificant que noun lou permete.', 'texte_inc_auth_1' => 'Sias identificat couma @auth_login@, ma aquèu login noun esista o esista plus en la basa. - Prouvàs de vi', + Prouvas de vi', 'texte_inc_auth_2' => 'recounetà', 'texte_inc_auth_3' => ', après avé eventualamen quitat pi relançat lou vouòstre navigatour.', @@ -677,7 +679,7 @@ e vi recounetà au sit. 'titre_signatures_confirmees' => 'Firma counfirmadi', 'titre_statistiques' => 'Estatistica dóu sit', 'titre_titre_document' => 'Titre dóu doucumen :', - 'todo' => 'De venì', + 'todo' => 'Da venì', 'trad_definir_reference' => 'Chausì "@titre@" couma referença dei traducioun', 'trad_reference' => '(referença dei traducioun)', @@ -731,5 +733,3 @@ e vi recounetà au sit. 'zxml_vide_balise' => 'balisa vuèia', 'zxml_vu' => 'vist adé' ); - -?> diff --git a/www/ecrire/lang/spip_oc_prv.php b/www/ecrire/lang/spip_oc_prv.php index 3076e693..2feee4b5 100644 --- a/www/ecrire/lang/spip_oc_prv.php +++ b/www/ecrire/lang/spip_oc_prv.php @@ -1,9 +1,11 @@ 'Tornar au sit public', 'login_retour_site' => 'Tornar au sit public', 'login_retoursitepublic' => 'tornar au sit public', - 'login_sans_cookiie' => 'Identificacion sensa cookie', 'login_sinscrire' => 's’inscriure', 'login_test_navigateur' => 'Assai navigador/tornar connectar', 'login_verifiez_navigateur' => '(pasmens verificatz que vòstre navigador aga pas servat vòstre mot de santa Clara en memòria...)', @@ -588,5 +589,3 @@ e vos tornar connectar au sit. 'zbug_serveur_indefini' => 'servidor SQL indefinit', # MODIF 'zbug_table_inconnue' => 'Taula SQL «@table@» inconeguda' ); - -?> diff --git a/www/ecrire/lang/spip_oc_va.php b/www/ecrire/lang/spip_oc_va.php index 5e5938a4..9bf1ee88 100644 --- a/www/ecrire/lang/spip_oc_va.php +++ b/www/ecrire/lang/spip_oc_va.php @@ -1,9 +1,11 @@ 'Tornar au sit public', 'login_retour_site' => 'Tornar au sit public', 'login_retoursitepublic' => 'tornar au sit public', - 'login_sans_cookiie' => 'Identificacion sensa cookie', 'login_sinscrire' => 's’inscriure', 'login_test_navigateur' => 'Assai navigaor/tornar connectar', 'login_verifiez_navigateur' => '(pasmens verificatz que vòstre navigaor aia pas servat vòstre mot de santa Clara en memòria...)', @@ -584,5 +585,3 @@ e vos tornar connectar au sit. 'zbug_serveur_indefini' => 'servior SQL indefinit', # MODIF 'zbug_table_inconnue' => 'Taula SQL «@table@» inconegua' ); - -?> diff --git a/www/ecrire/lang/spip_pl.php b/www/ecrire/lang/spip_pl.php index cc4b0e7b..1a0bfeab 100644 --- a/www/ecrire/lang/spip_pl.php +++ b/www/ecrire/lang/spip_pl.php @@ -1,9 +1,11 @@ 'Powrót do strony publicznej', 'login_retour_site' => 'Powrót do strony publicznej', 'login_retoursitepublic' => 'Powrót do strony publicznej', - 'login_sans_cookiie' => 'Identyfikacja bez cookie', 'login_sinscrire' => 'rejestracja', 'login_test_navigateur' => 'test przeglądarki/łącz ponownie', 'login_verifiez_navigateur' => '(Sprawdź czy Twoja przeglądarka nie zapamiętała hasła...)', @@ -685,5 +686,3 @@ a następnie sprawdź czy obrazki pojawiają się zawsze w artykułach.', 'zxml_vide_balise' => 'pusty znacznik', 'zxml_vu' => 'widziany wcześniej' ); - -?> diff --git a/www/ecrire/lang/spip_pt.php b/www/ecrire/lang/spip_pt.php index 1c76001c..1d0d26df 100644 --- a/www/ecrire/lang/spip_pt.php +++ b/www/ecrire/lang/spip_pt.php @@ -1,9 +1,11 @@ '@h@:@m@', 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ a @heure@', - 'date_fmt_jour_heure_debut_fin' => '@jour@ de @heure_debut@ a @heure_fin@', - 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ de @heure_debut@@dtabbr@ a @dtstart@@heure_fin@@dtend@', + 'date_fmt_jour_heure_debut_fin' => '@jour@ de @heure_debut@ a @heure_fin@', # MODIF + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ de @heure_debut@@dtabbr@ a @dtstart@@heure_fin@@dtend@', # MODIF 'date_fmt_jour_mois' => '@jour@ de @nommois@', 'date_fmt_jour_mois_annee' => '@jour@ de @nommois@ de @annee@', 'date_fmt_mois_annee' => '@nommois@ de @annee@', @@ -529,7 +531,6 @@ Pediu para alterar o seu endereço e-mail. Para confirmar o seu novo endereço, 'login_retour_public' => 'Regresso ao sítio público', 'login_retour_site' => 'Regresso ao sítio público', 'login_retoursitepublic' => 'Regresso ao sítio público', - 'login_sans_cookiie' => 'identificação sem cookie', 'login_securise' => 'Login seguro', 'login_sinscrire' => 'inscrever-se', 'login_test_navigateur' => 'teste navegação/nova ligação', @@ -589,7 +590,7 @@ Poderá então introduzir uma nova palavra-passe e reconectar-se ao sítio. 'pass_nouveau_pass' => 'Nova palavra-passe', 'pass_ok' => 'OK', 'pass_oubli_mot' => 'Palavra-passe esquecida', - 'pass_procedure_changer' => 'Para alterar a sua palavra-passe, temos primeiro de verificar a sua identidade. Por favor escreva o endereço e-mail associado a esta conta.', + 'pass_procedure_changer' => 'Para alterar a sua palavra-passe, temos primeiro de verificar a sua identidade. Por favor escreva o endereço e-mail associado a esta conta.', # MODIF 'pass_quitter_fenetre' => 'Fechar esta janela', 'pass_rappel_login' => 'Recorde : o seu identificador (login) é « @login@ ».', 'pass_recevoir_mail' => 'Vai receber um email que indica como recuperar o seu acesso ao sítio.', @@ -717,5 +718,3 @@ Poderá então introduzir uma nova palavra-passe e reconectar-se ao sítio. 'zxml_vide_balise' => 'tag vazia', 'zxml_vu' => 'visualizado antes' ); - -?> diff --git a/www/ecrire/lang/spip_pt_br.php b/www/ecrire/lang/spip_pt_br.php index 93275c46..d89a0970 100644 --- a/www/ecrire/lang/spip_pt_br.php +++ b/www/ecrire/lang/spip_pt_br.php @@ -1,9 +1,11 @@ 'Atualizar esta página', 'afficher_calendrier' => 'Exibir o calendário', 'afficher_trad' => 'exibir as traduções', - 'alerte_maj_impossible' => 'Atenção! A atualização da base de dados SQL para a versão @version@ não é possível, provavelmente por problema de direitos de edição na base de dados. Por favor, contate o seu provedor de hospedagem.', + 'alerte_maj_impossible' => 'Atenção! A atualização da base de dados SQL para a versão @version@ não é possível, provavelmente por problema de direitos de edição na base de dados. Por favor, contate o seu provedor de hospedagem.', 'alerte_modif_info_concourante' => 'ATENÇÃO: Esta informação foi alterada por outra pessoa. O valor atual é:', 'analyse_xml' => 'Analisar XML', 'annuler' => 'Cancelar', - 'antispam_champ_vide' => 'Deixe, por favor, este campo vazio:', + 'antispam_champ_vide' => 'Por favor, deixe este campo vazio:', 'articles_recents' => 'Matérias mais recentes', + 'avis_1_erreur_saisie' => 'Há um erro nos dados informados. Por favor, verifique.', 'avis_archive_incorrect' => 'a cópia de segurança não é um arquivo do SPIP', 'avis_archive_invalide' => 'a cópia de segurança não é válida', 'avis_attention' => 'ATENÇÃO!', - 'avis_champ_incorrect_type_objet' => 'Nome de campo incorreto @name@ para objeto do tipo @type@', + 'avis_champ_incorrect_type_objet' => 'Nome de campo @name@ incorreto para objeto do tipo @type@', 'avis_colonne_inexistante' => 'A coluna @col@ não existe', 'avis_erreur' => 'Erro: ver abaixo', 'avis_erreur_connexion' => 'Erro de conexão', @@ -43,6 +46,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_erreur_mysql' => 'Erro SQL', 'avis_erreur_sauvegarde' => 'Erro na cópia de segurança (@type@ @id_objet@) !', 'avis_erreur_visiteur' => 'Problema de acesso ao espaço privado', + 'avis_nb_erreurs_saisie' => 'Há @nb@ erros nos dados informados. Por favor, verifique.', // B 'barre_a_accent_grave' => 'Inserir um A maiúsculo com acento grave', @@ -65,7 +69,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_chercher' => 'Procurar', 'bouton_choisir' => 'Escolher', 'bouton_deplacer' => 'Deslocar', - 'bouton_download' => 'Download', + 'bouton_download' => 'Baixar', 'bouton_enregistrer' => 'Gravar', 'bouton_radio_desactiver_messagerie_interne' => 'Desativar o sistema interno de mensagens', 'bouton_radio_envoi_annonces' => 'Enviar os avisos editoriais', @@ -121,6 +125,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_periode_abbr' => 'De @dtart@@date_debut@@dtabbr@ a @dtend@@date_fin@@dtabbr@', 'date_fmt_periode_from' => 'De', 'date_fmt_periode_to' => 'para', + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'horas', 'date_hier' => 'ontem', 'date_il_y_a' => 'à @delai@', @@ -231,6 +236,7 @@ Verifique se as maiúsculas e minúsuculas destes diretórios coincidem exatamen 'envoi_via_le_site' => 'Envio pelo site', 'erreur' => 'Erro', 'erreur_balise_non_fermee' => 'Última tag em aberto:', + 'erreur_technique_ajaxform' => 'Ooops. Um erro inesperado impediu o envio do formulário. Você pode tentar novamente.', 'erreur_technique_enregistrement_champs' => 'Um erro técnico impediu a gravação correta do campo @champs@.', 'erreur_technique_enregistrement_impossible' => 'Um erro técnico impediu a gravação.', 'erreur_texte' => 'erro(s)', @@ -279,6 +285,8 @@ Para confirmar o seu novo endereço, basta acessar o endereço abaixo (cas contr 'form_prop_non_enregistre' => 'Sua proposta não foi cadastrada.', 'form_prop_sujet' => 'Assunto', 'form_prop_url_site' => 'Endereço URL do site', + 'format_date_incorrecte' => 'A data e o seu formato está incorreta', + 'format_heure_incorrecte' => 'A hora e o seu formato está incorreta', 'forum_non_inscrit' => 'Você não está inscrito, ou o endereço ou a senha estão errados.', 'forum_par_auteur' => 'por @auteur@', 'forum_titre_erreur' => 'Erro...', @@ -507,7 +515,7 @@ Para confirmar o seu novo endereço, basta acessar o endereço abaixo (cas contr 'login_deconnexion_ok' => 'Desconexão efetuada.', 'login_erreur_pass' => 'Erro de senha.', 'login_espace_prive' => 'espaço privado', - 'login_identifiant_inconnu' => 'O identificador « @login@ » não está cadastrado.', + 'login_identifiant_inconnu' => 'O identificador «@login@» não está cadastrado.', 'login_login' => 'Login:', 'login_login2' => 'Login', 'login_login_pass_incorrect' => '(Login ou senha incorreta.)', @@ -523,7 +531,7 @@ Se você não quiser que a sua senha possa ser interceptada na rede, por favor a 'login_retour_public' => 'Voltar ao site público', 'login_retour_site' => 'Voltar ao site público', 'login_retoursitepublic' => 'voltar ao site público', - 'login_sans_cookiie' => 'Identificação sem cookie', + 'login_sans_cookie' => 'Identificação sem cookie', 'login_securise' => 'Login seguro', 'login_sinscrire' => 'cadastrar-se', 'login_test_navigateur' => 'testar navegador/reconexão', @@ -532,6 +540,9 @@ Se você não quiser que a sua senha possa ser interceptada na rede, por favor a // M 'masquer_colonne' => 'Ocultar esta coluna', 'masquer_trad' => 'esconder as traduções', + 'message_nouveaux_identifiants_echec' => 'Impossível criar novos logins.', + 'message_nouveaux_identifiants_echec_envoi' => 'Os novos logins de conexão não puderam ser enviados.', + 'message_nouveaux_identifiants_ok' => 'Os novos logins de conexão foram enviados para @email@.', 'module_fichiers_langues' => 'Arquivos de idioma', // N @@ -580,7 +591,7 @@ e reconectar-se com o site. 'pass_nouveau_pass' => 'Nova senha', 'pass_ok' => 'OK', 'pass_oubli_mot' => 'Esquecimento de senha', - 'pass_procedure_changer' => 'Para alterar a sua senha, é necessário verificar a sua identidade. Para isso, informe o endereço de e-mail associado a esta sua conta.', + 'pass_procedure_changer' => 'Para alterar a sua senha, por favor informe o endereço de e-mail associado à sua conta.', 'pass_quitter_fenetre' => 'Fechar esta janela', 'pass_rappel_login' => 'Lembrete: seu login é «@login@».', 'pass_recevoir_mail' => 'Você receberá um e-mail explicando como você pode recuperar o acesso ao site.', @@ -639,16 +650,18 @@ Tente se', 'titre_image_auteur_supprime' => 'Autor excluído', 'titre_image_redacteur' => 'Redator sem acesso', 'titre_image_redacteur_02' => 'Redator', + 'titre_image_selecteur' => 'Ver a lista', 'titre_image_visiteur' => 'Visitante', 'titre_joindre_document' => 'INCLUIR UM DOCUMENTO', 'titre_mots_cles' => 'PALAVRAS-CHAVE', - 'titre_probleme_technique' => 'Atenção: um problema técnico (servidor SQL) impede o acesso a esta parte do site. Obrigado por sua compreenção.', + 'titre_probleme_technique' => 'Atenção: um problema técnico (servidor SQL) impede o acesso a esta parte do site. Agradecemos sua compreensão.', 'titre_publier_document' => 'PUBLICAR UM DOCUMENTO NESTA SEÇÃO', 'titre_signatures_attente' => 'Assinaturas aguardando validação', 'titre_signatures_confirmees' => 'Assinaturas confirmadas', 'titre_statistiques' => 'Estatísticas do site', 'titre_titre_document' => 'Título do documento:', 'todo' => 'breve', + 'trad_definir_reference' => 'Escolher "@titre@" como referência das traduções', 'trad_reference' => '(matéria das traduções)', // Z @@ -662,6 +675,7 @@ Tente se', 'zbug_champ_hors_motif' => 'Campo @champ@ fora de um contexto @motif@', 'zbug_code' => 'código', 'zbug_critere_inconnu' => 'Critério @critere@ desconhecido', + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} em uma tabela sem chave primária atômica', 'zbug_distant_interdit' => 'Externa interdita', 'zbug_doublon_table_sans_cle_primaire' => 'Duplicação em tabela sem chave primária atômica', 'zbug_doublon_table_sans_index' => 'Doublons em uma tabela sem index', @@ -700,5 +714,3 @@ Tente se', 'zxml_vide_balise' => 'tag vazia', 'zxml_vu' => 'previsualização' ); - -?> diff --git a/www/ecrire/lang/spip_ro.php b/www/ecrire/lang/spip_ro.php index feb3fb80..548ffe52 100644 --- a/www/ecrire/lang/spip_ro.php +++ b/www/ecrire/lang/spip_ro.php @@ -1,9 +1,11 @@ 'Înapoi la site-ul public', 'login_retour_site' => 'Înapoi la site-ul public', 'login_retoursitepublic' => 'înapoi la site-ul public', - 'login_sans_cookiie' => 'Identificare fără cookie', 'login_securise' => 'Login securizat', 'login_sinscrire' => 'înscrieţi-vă', 'login_test_navigateur' => 'test de navigator/reconectare', @@ -702,5 +703,3 @@ Veţi putea după aceea alege o nouă parolă şi veţi putea să vă reconecta 'zxml_vide_balise' => 'baliză (tag) vidă', 'zxml_vu' => 'văzut înainte' ); - -?> diff --git a/www/ecrire/lang/spip_ru.php b/www/ecrire/lang/spip_ru.php index 04064b2a..feb21deb 100644 --- a/www/ecrire/lang/spip_ru.php +++ b/www/ecrire/lang/spip_ru.php @@ -1,9 +1,11 @@ 'http://listes.rezo.net/mailman/listinfo/spip-dev', '0_langue' => 'Русский [ru]', '0_liste' => 'spip-ru@rezo.net', - '0_mainteneur' => '2009-2012 Serge Markitanenko (ss1945@gmail.com).2005-2007 Vitali Zhulkovsky (vzhulkovsky@cmp.com)upd. Maxim Krioukov (krumax@mail.ru)', + '0_mainteneur' => '2009-2016 Serge Markitanenko (ss1945@gmail.com). +2005-2007 Vitali Zhulkovsky (vzhulkovsky@cmp.com) upd. Maxim Krioukov (krumax@mail.ru)', // A 'access_interface_graphique' => 'Возврат к полному интерфейсу', @@ -31,6 +34,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'annuler' => 'Отмена', 'antispam_champ_vide' => 'Оставьте это поле пустым:', 'articles_recents' => 'Свежие статьи', + 'avis_1_erreur_saisie' => 'Имеется 1 ошибка в записи, проверьте информацию.', 'avis_archive_incorrect' => 'это неправильный архивный файл SPIP', 'avis_archive_invalide' => 'этот архивный файл не может быть использован', 'avis_attention' => 'Внимание!', @@ -43,6 +47,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_erreur_mysql' => 'Ошибка SQL ', 'avis_erreur_sauvegarde' => 'Ошибка в бэкапе (@type@ @id_objet@)!', 'avis_erreur_visiteur' => 'Ошибка при входе в администрирование сайта', + 'avis_nb_erreurs_saisie' => 'Обнаружено @nb@ ошибок в вашей записи, проверьте информацию.', // B 'barre_a_accent_grave' => 'Прописное A с пимпочкой вверху', @@ -52,7 +57,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'barre_eo_maj' => 'Вставить дифтонг EO', 'barre_euro' => 'Вставить символ € (евро)', 'barre_gras' => 'Выделить {{полужирным}}', - 'barre_guillemets' => 'Разместить между "двойными кавычками"', + 'barre_guillemets' => 'Разместить между “двойными кавычками”', 'barre_guillemets_simples' => 'Разместить между ‘одинарными кавычками’', 'barre_intertitre' => '{{{Подзаголовок}}}', 'barre_italic' => 'Выделить {курсивом}', @@ -69,7 +74,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_enregistrer' => 'Сохранить', 'bouton_radio_desactiver_messagerie_interne' => 'Отключить приватную переписку', 'bouton_radio_envoi_annonces' => 'Отправить оповещение', - 'bouton_radio_non_envoi_annonces' => 'Отключить отправку внутрених сообщений', + 'bouton_radio_non_envoi_annonces' => 'Отключить отправку внутренних сообщений', 'bouton_radio_non_envoi_liste_nouveautes' => 'Не отправлять список последних новостей', 'bouton_recharger_page' => 'перезагрузить страницу', 'bouton_telecharger' => 'Загрузить', @@ -91,7 +96,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // D 'date_aujourdhui' => 'сегодня', - 'date_avant_jc' => 'До н.э.', + 'date_avant_jc' => 'до н.э.', 'date_dans' => 'в @delai@', 'date_de_mois_1' => '@j@ января', 'date_de_mois_10' => '@j@ октября', @@ -107,20 +112,21 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_de_mois_9' => '@j@ сентября', 'date_demain' => 'завтра', 'date_fmt_heures_minutes' => '@h@:@m@', - 'date_fmt_heures_minutes_court' => '@h@h@m@', + 'date_fmt_heures_minutes_court' => '@h@:@m@', 'date_fmt_jour' => '@nomjour@ @jour@', - 'date_fmt_jour_heure' => '@jour@ до @heure@', - 'date_fmt_jour_heure_debut_fin' => '@jour@ с @heure_debut@ по @heure_fin@', - 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ с @heure_debut@@dtabbr@ по @dtstart@@heure_fin@@dtend@', - 'date_fmt_jour_mois' => '@jourmois@', - 'date_fmt_jour_mois_annee' => '@jourmois@ @annee@', + 'date_fmt_jour_heure' => '@jour@ в @heure@', + 'date_fmt_jour_heure_debut_fin' => '@jour@ с @heure_debut@ до @heure_fin@', + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ с @heure_debut@@dtabbr@ до @dtstart@@heure_fin@@dtend@', + 'date_fmt_jour_mois' => '@jour@ @nommois@', + 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@', 'date_fmt_mois_annee' => '@nommois@ @annee@', 'date_fmt_nomjour' => '@nomjour@ @date@', 'date_fmt_nomjour_date' => 'от @nomjour@ @date@', - 'date_fmt_periode' => 'С @date_debut@ по @date_fin@', - 'date_fmt_periode_abbr' => 'С @dtart@@date_debut@@dtabbr@ по @dtend@@date_fin@@dtabbr@', + 'date_fmt_periode' => 'С @date_debut@ до @date_fin@', + 'date_fmt_periode_abbr' => 'С @dtart@@date_debut@@dtabbr@ до @dtend@@date_fin@@dtabbr@', 'date_fmt_periode_from' => 'С', - 'date_fmt_periode_to' => 'по', + 'date_fmt_periode_to' => 'до', + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'час', 'date_hier' => 'вчера', 'date_il_y_a' => '@delai@ назад', @@ -217,14 +223,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dirs_commencer' => 'для того, чтобы начать установку', 'dirs_preliminaire' => 'Подготовка: Настройки прав доступа', 'dirs_probleme_droits' => 'Проблема в правах доступа', - 'dirs_repertoires_absents' => 'Следующие директории не найдены:

        @bad_dirs@.
      -

      Возможная причина - неправильное положение строчных и прописных букв в названиях директорий. - Пожалуйста удостоверьтесь, что регистр букв в именах директорий соответствует тому, что выводится выше; если это не так, переименуйте директории, используя FTP-клиент, чтобы исправить ошибку. -

      Как только это сделано, все заработает

      ', - 'dirs_repertoires_suivants' => 'К следующим директориям не правильно прописаны права доступа
        @bad_dirs@.
      + 'dirs_repertoires_absents' => 'Следующие папки не найдены:
        @bad_dirs@.
      +

      Возможная причина - использование строчных и прописных букв в названии папок. Пожалуйста, проверьте соответствие регистра букв в названиях папок тому, что выводится выше; если есть несовпадения, переименуйте папки используя FTP-клиент, чтобы исправить ошибку. +

      Как только это будет сделано, всё заработает

      ', + 'dirs_repertoires_suivants' => 'У следующих папок нет прав на запись: +
        @bad_dirs@.
      -

      Для изменений прав доступа воспользуйтесь FTP клиентом. - Процедура описана в инструкции по установке.

      +

      Для изменений прав доступа воспользуйтесь FTP клиентом и задайте права "777" или "ххх-ххх-ххх". +

      ', 'double_occurrence' => 'Тег @balise@ встречается дважды', @@ -233,7 +239,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'en_cours' => 'выполняется', 'envoi_via_le_site' => 'Отправить при помощи сайта', 'erreur' => 'Ошибка', - 'erreur_balise_non_fermee' => 'последний тэг не закрыт:', + 'erreur_balise_non_fermee' => 'последний тег не закрыт:', + 'erreur_technique_ajaxform' => 'Непонятная ошибка не дает отправить эту форму. Попробуйте еще раз.', 'erreur_technique_enregistrement_champs' => 'Из-за технической ошибки не удалось правильно зарегистрировать поле @champs@.', 'erreur_technique_enregistrement_impossible' => 'Не удается зарегистрировать из-за технической ошибки.', 'erreur_texte' => 'Ошибка(и)', @@ -241,20 +248,20 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // F 'fichier_introuvable' => 'Файл не найден: @fichier@', - 'form_auteur_confirmation' => 'Пожалуйста, подтвердите ваш емейл', - 'form_auteur_email_modifie' => 'Ваш емейл был изменен.', - 'form_auteur_envoi_mail_confirmation' => 'Письмо о подтверждении было отправлено по адресу @email@. Вам необходимо будет перейти по ссылке в письме, что бы подтвердить ваш почтовый адрес.', + 'form_auteur_confirmation' => 'Пожалуйста, подтвердите ваш email', + 'form_auteur_email_modifie' => 'Ваш email был изменен.', + 'form_auteur_envoi_mail_confirmation' => 'Письмо о подтверждении было отправлено по адресу @email@. Вам необходимо будет перейти по ссылке в письме, чтобы подтвердить свой почтовый адрес.', 'form_auteur_mail_confirmation' => 'Добрый день, Вы запросили смену вашего почтового адреса. -Что бы подтвердить ваш новый адрес перейдите по ссылке: +Чтобы подтвердить ваш новый адрес перейдите по ссылке: @url@ - (В противном случае ваш запрос не будет выполнен): + (Если вы этого не сделаете, то адрес не изменится): ', 'form_deja_inscrit' => 'Вы уже зарегистрированы.', 'form_email_non_valide' => 'Указан неправильный e-mail адрес.', - 'form_forum_access_refuse' => 'У Вас больше нет доступа к этому сайту.', + 'form_forum_access_refuse' => 'У вас больше нет доступа к этому сайту.', 'form_forum_bonjour' => 'Приветствуем @nom@,', 'form_forum_confirmer_email' => 'Для подтверждения регистрации на сайте перейдите по ссылке: @url_confirm@', 'form_forum_email_deja_enregistre' => 'Этот адрес электронной почты уже зарегистрирован. Попробуйте использовать ваш обычный пароль.', @@ -266,10 +273,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'form_forum_pass' => 'пароль:', 'form_forum_probleme_mail' => 'Ошибка почты: не удалось выслать идентификатор.', 'form_forum_voici1' => 'Данные для доступа к сайту -"@nom_site_spip@" (@adresse_site@):', +«@nom_site_spip@» (@adresse_site@):', 'form_forum_voici2' => 'Данные для доступа на сайт -(возможность отправлять свои статьи) -"@nom_site_spip@" (@adresse_login@):', +(возможность отправлять свои статьи) «@nom_site_spip@» +(@adresse_login@):', 'form_indiquer_email' => 'Пожалуйста, укажите ваш e-mail.', 'form_indiquer_nom' => 'Введите ваше имя.', 'form_indiquer_nom_site' => 'Пожалуйста, введите название вашего сайта.', @@ -286,7 +293,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'form_prop_non_enregistre' => 'Ваше предложение не было записано.', 'form_prop_sujet' => 'Тема', 'form_prop_url_site' => 'URL сайта', - 'forum_non_inscrit' => 'Или Вы не регистрированы, или адрес или пароль неправильны.', + 'forum_non_inscrit' => 'Либо вы не зарегистрированы, либо адрес или пароль неправильны.', 'forum_par_auteur' => ' @auteur@', 'forum_titre_erreur' => 'Ошибка...', @@ -299,7 +306,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_agenda' => 'Календарь', 'icone_aide_ligne' => 'Помощь', 'icone_articles' => 'Статьи', - 'icone_auteurs' => 'Автора', + 'icone_auteurs' => 'Авторы', 'icone_brouteur' => 'Быстрый переход', 'icone_configuration_site' => 'Настройка', 'icone_configurer_site' => 'Настройте ваш сайт', @@ -325,12 +332,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_statistiques' => 'Статистика сайта', 'icone_suivi_activite' => 'RSS и iCal', 'icone_suivi_actualite' => 'Статистика сайта', - 'icone_suivi_pettions' => 'Комментарии', + 'icone_suivi_pettions' => 'Отслеживание/управление петициями', 'icone_suivi_revisions' => 'Версии статьи', 'icone_supprimer_document' => 'Удалить документ', 'icone_supprimer_image' => 'Удалить изображение', 'icone_tous_articles' => 'Ваши статьи', - 'icone_tous_auteur' => 'Все автора', + 'icone_tous_auteur' => 'Все авторы', 'icone_tous_visiteur' => 'Все посетили', 'icone_visiter_site' => 'Посетить сайт', 'icone_voir_en_ligne' => 'Смотреть online', @@ -361,7 +368,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_breves_2' => 'новости', 'info_breves_nb' => '@nb@ новостей', 'info_breves_un' => '1 новость', - 'info_connexion_refusee' => 'Подключение запрещенно', + 'info_connexion_refusee' => 'Подключение запрещено', 'info_contact_developpeur' => 'Свяжитесь с разработчиками.', 'info_contenance' => 'Этот сайт содержит:', 'info_contribution' => 'вложения в форум', @@ -372,7 +379,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_creer_repertoire' => 'Создайте файл или папку с названием:', 'info_creer_repertoire_2' => 'в подразделе @repertoire@, затем ', 'info_creer_vignette' => 'автоматическое создание миниатюр изображений', - 'info_creerdansrubrique_non_autorise' => 'У вас недостаточно прав чтобы создавать материалы в этом разделе', + 'info_creerdansrubrique_non_autorise' => 'У вас недостаточно прав, чтобы создавать материалы в этом разделе', 'info_deplier' => 'Откройте', 'info_descriptif_nombre' => 'описание(я):', 'info_description' => 'Описание:', @@ -392,15 +399,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( Попробуйте восстановить базу данных или обратитесь к вашему хостинг-провайдеру.', 'info_fini' => 'Готово!', - 'info_format_image' => 'Формат, который используется для автоматического уменьшения изображений @gd_formats@.', + 'info_format_image' => 'Формат, используемый для автоматического уменьшения изображений @gd_formats@.', 'info_format_non_defini' => 'неопределенный формат', 'info_grand_ecran' => 'Большой экран', 'info_image_aide' => 'ПОМОЩЬ', 'info_image_process_titre' => 'Как создавать миниатюры', 'info_impossible_lire_page' => 'Ошибка! Страницу @test_proxy@ нельзя получить через прокси сервер', 'info_installation_systeme_publication' => 'Установка SPIP ...', - 'info_installer_documents' => 'Вы можете разместить файлы в папку @upload@ и они будут добавлены автоматически.', - 'info_installer_ftp' => 'Вы можете переписать файлы по FTP в папку @upload@, что бы использовать их в дальнейшей работе. ', + 'info_installer_documents' => 'Вы можете разместить файлы в папку @upload@, и они будут добавлены автоматически.', + 'info_installer_ftp' => 'Вы можете переписать файлы по FTP в папку @upload@, чтобы использовать их в дальнейшей работе. ', 'info_installer_images' => 'Вы можете добавлять изображения в форматах JPEG, GIF или PNG.', 'info_installer_images_dossier' => 'Добавьте изображения в папку @upload@ для использования их в этом меню.', 'info_interface_complete' => 'полный интерфейс', @@ -426,38 +433,38 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_mois_courant' => 'На протяжении месяца:', 'info_mot_cle_ajoute' => 'Ключ был добавлен к', 'info_multi_herit' => 'Язык по умолчанию', - 'info_multi_langues_soulignees' => 'Если название языка подчеркнуто, то это значит, что есть перевод административной части SPIP на этот язык. При выборе других языков все системные сообщения будут выводится на основном языке сайта.', + 'info_multi_langues_soulignees' => 'Если название языка подчеркнуто, то это значит, что есть перевод административной части SPIP на этот язык. При выборе других языков все системные сообщения будут выводиться на основном языке сайта.', 'info_multilinguisme' => 'Многоязычность', 'info_nom_non_utilisateurs_connectes' => 'Не показывать меня в списке пользователей online.', 'info_nom_utilisateurs_connectes' => 'Показывать меня в списке пользователей online.', 'info_nombre_en_ligne' => 'Сейчас на сайте:', - 'info_non_resultat' => 'Ничего не найдено по запросу "@cherche_mot@"', - 'info_non_utilisation_messagerie' => 'Система приватных сообщений отключена на этом сайте.', + 'info_non_resultat' => 'Ничего не найдено по запросу «@cherche_mot@»', + 'info_non_utilisation_messagerie' => 'Система личных сообщений отключена на этом сайте.', 'info_nouveau_message' => 'ПОЛУЧЕНО НОВОЕ СООБЩЕНИЕ', 'info_nouveaux_messages' => 'У ВАС @total_messages@ НОВОЕ(ЫХ) СООБЩЕНИЕ(Й):', 'info_numero_abbreviation' => '№', 'info_obligatoire' => 'Обязательные поля', 'info_pense_bete' => 'ЗАМЕТКА', 'info_petit_ecran' => 'Маленький экран', - 'info_petition_close' => 'Комментарий закрыт', + 'info_petition_close' => 'Петиция закрыта', 'info_pixels' => 'пиксели', - 'info_plusieurs_mots_trouves' => 'По запросу "@cherche_mot@" были найдены такие ключи:', + 'info_plusieurs_mots_trouves' => 'По запросу «@cherche_mot@» были найдены такие ключи:', 'info_portfolio_automatique' => 'Автоматизированное портфолио:', 'info_premier_resultat' => '[@debut_limit@ из @total@]', 'info_premier_resultat_sur' => '[@debut_limit@ из @total@]', - 'info_propose_1' => '[@nom_site_spip@] Отправленные: @titre@', - 'info_propose_2' => 'Статья отправлена на проверку + 'info_propose_1' => '[@nom_site_spip@] Предложенные: @titre@', + 'info_propose_2' => 'Статья предложена -----------------', - 'info_propose_3' => 'Статья "@titre@" отправлена для публикации.', + 'info_propose_3' => 'Статья «@titre@» предложена для публикации.', 'info_propose_4' => 'Вы приглашены для рецензирования. Выскажите свое мнение', 'info_propose_5' => 'на связанном с этим форуме, расположенном по адресу:', - 'info_publie_01' => 'Статья "@titre@" была одобрена @connect_nom@.', + 'info_publie_01' => 'Статья «@titre@» была одобрена @connect_nom@.', 'info_publie_1' => '[@nom_site_spip@] ОПУБЛИКОВАНО: @titre@', - 'info_publie_2' => 'Опубликована статья + 'info_publie_2' => 'Статья опубликована -----------------', 'info_rechercher' => 'Поиск', 'info_rechercher_02' => 'Поиск:', - 'info_remplacer_vignette' => 'Заменить миниатюру своим уменьшеным изображением:', + 'info_remplacer_vignette' => 'Заменить миниатюру своим уменьшенным изображением:', 'info_rubriques_nb' => '@nb@ раздела(ов)', 'info_rubriques_un' => '1 раздел', 'info_sans_titre_2' => 'без названия', @@ -468,19 +475,19 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_supprimer_vignette' => 'удалить миниатюру', 'info_symbole_bleu' => 'Синий символ указывает на заметку - сообщение для вашего личного использования.', 'info_symbole_jaune' => 'Желтый символ - объявление всем редакторам : объявление может редактировать любой администратор и его видят все редактора.', - 'info_symbole_vert' => 'Зеленый символ - переписка с другими польвователями сайта.', + 'info_symbole_vert' => 'Зеленый символ - переписка с другими пользователями сайта.', 'info_telecharger_nouveau_logo' => 'Загрузить новое лого:', 'info_telecharger_ordinateur' => 'Загрузить с вашего компьютера:', 'info_tous_resultats_enregistres' => '[все результаты записаны]', 'info_tout_afficher' => 'Показать все', 'info_travaux_texte' => 'Ведутся работы по настройке сайта, скоро мы начнем работу.', 'info_travaux_titre' => 'Сайт еще не работает', - 'info_trop_resultat' => 'Слишком много результатов по запросу "@cherche_mot@"; пожалуйста, уточните запрос.', + 'info_trop_resultat' => 'Слишком много результатов по запросу «@cherche_mot@»; пожалуйста, уточните запрос.', 'info_utilisation_messagerie_interne' => 'Сервис внутренних приватных сообщений включен.', 'info_valider_lien' => 'подтвердить ссылку', 'info_verifier_image' => ', проверьте, что ваши изображения были переданы правильно.', 'info_vignette_defaut' => 'Миниатюра по умолчанию', - 'info_vignette_personnalisee' => 'Ваша миниаюра (уменьшенное изображение)', + 'info_vignette_personnalisee' => 'Ваша миниатюра (уменьшенное изображение)', 'info_visite' => 'посещение:', 'info_vos_rendez_vous' => 'Ваши будущие задачи', 'infos_vos_pense_bete' => 'Ваши заметки', @@ -496,7 +503,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'lien_nouvea_pense_bete' => 'НОВАЯ ЗАМЕТКА', 'lien_nouveau_message' => 'НОВОЕ СООБЩЕНИЕ', 'lien_nouvelle_annonce' => 'НОВОЕ ОБЪЯВЛЕНИЕ', - 'lien_petitions' => 'КОММЕНТАРИЙ', + 'lien_petitions' => 'ПЕТИЦИЯ', 'lien_popularite' => 'популярность: @popularite@%', 'lien_racine_site' => 'КОРЕНЬ САЙТА', 'lien_reessayer' => 'попробуйте еще раз', @@ -511,29 +518,27 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'login_acces_prive' => 'доступ к административной части', 'login_autre_identifiant' => 'изменить логин', 'login_cookie_accepte' => 'Пожалуйста, настройте ваш браузер для приема cookies (по крайней мере для этого сайта).', - 'login_cookie_oblige' => 'В вашем броузере должны быть включены cookies.', + 'login_cookie_oblige' => 'В вашем браузере должны быть включены cookies.', 'login_deconnexion_ok' => 'Вышел из системы.', 'login_erreur_pass' => 'Пароль введен неправильно.', 'login_espace_prive' => 'административная часть', - 'login_identifiant_inconnu' => 'Логин "@login@" неизвестен.', + 'login_identifiant_inconnu' => 'Логин «@login@» неизвестен.', 'login_login' => 'Логин:', 'login_login2' => 'Логин или email:', 'login_login_pass_incorrect' => '(Неправильный логин или пароль).', 'login_motpasseoublie' => 'забыли пароль?', - 'login_non_securise' => 'Внимание, эта форма не безопасна - Если Вы не хотите, чтобы ваш пароль был открытым для - перехват в сети, активизируйте Javascript - в вашем браузере и', + 'login_non_securise' => 'Внимание, эта форма небезопасна! +Если вы не хотите, чтобы ваш пароль был открыт для перехвата в сети, активизируйте Javascript в вашем браузере и ', 'login_nouvelle_tentative' => 'Попробовать еще раз', - 'login_par_ici' => 'Вы зарегистрированы ... вам сюда...', + 'login_par_ici' => 'Вы зарегистрированы... вам сюда...', 'login_pass2' => 'Пароль:', - 'login_preferez_refuser' => 'Если Вы хотите отказываться от cookies , есть другой метод входа на сайт (менее безопасный):', + 'login_preferez_refuser' => 'Если Вы хотите отказаться от cookies , есть другой метод входа на сайт (менее безопасный):', 'login_recharger' => 'перегрузить страницу', - 'login_rester_identifie' => 'Не спрашивать в течение нескольких дней', + 'login_rester_identifie' => 'Запомнить логин на несколько дней', 'login_retour_public' => 'На главную страницу сайта', 'login_retour_site' => 'На главную страницу сайта', 'login_retoursitepublic' => 'на главную страницу сайта', - 'login_sans_cookiie' => 'Идентификация без cookie', + 'login_sans_cookie' => 'Идентификация без cookie', 'login_securise' => 'Безопасный вход', 'login_sinscrire' => 'регистрация', 'login_test_navigateur' => 'проверка браузера/(пере)подключения', @@ -560,7 +565,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'onglet_messagerie' => 'Сообщения', 'onglet_repartition_rubrique' => 'Посещения по разделам', 'onglet_save_restaur_base' => 'Резервная копия/востановление базы данных', - 'onglet_vider_cache' => 'Очистить кэш', + 'onglet_vider_cache' => 'Очистить кеш', // P 'pass_choix_pass' => 'Введите новый пароль:', @@ -576,13 +581,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( и участвовать во всех обсуждениях.', 'pass_forum_bla' => 'Вы отправили запрос для участия в форуме, который доступен только для зарегистрированных пользователей.', - 'pass_indiquez_cidessous' => 'Введите ниже адрес электронной почты с который вы - использовали для регистрации. Вам -будет отправленно письмо с дальнейшими инструкциями.', - 'pass_mail_passcookie' => '(это письмо отправленно автоматически) + 'pass_indiquez_cidessous' => 'Введите ниже адрес электронной почты, который вы использовали для регистрации. Вам будет отправлено письмо с дальнейшими инструкциями.', + 'pass_mail_passcookie' => '(это письмо отправлено автоматически) -Для того, что бы восстановить ваш пароль к сайту -@nom_site_spip (@adresse_site) +Для того, что бы восстановить ваш пароль для входа на сайт @nom_site_spip@ (@adresse_site@) перейдите по следующей ссылке: @sendcookie@ @@ -606,9 +608,9 @@ and connect again to the site. 'pass_nouveau_pass' => 'Новый пароль', 'pass_ok' => 'OK', 'pass_oubli_mot' => 'Забытый пароль', - 'pass_procedure_changer' => 'Введите e-mail, который вы указали при регистрации.', + 'pass_procedure_changer' => 'Чтобы изменить пароль введите, пожалуйста, e-mail, который вы указали при регистрации.', 'pass_quitter_fenetre' => 'Закрыть окно', - 'pass_rappel_login' => 'Напоминаем: ваш логин "@login@".', + 'pass_rappel_login' => 'Напоминаем: ваш логин «@login@».', 'pass_recevoir_mail' => 'Вы получите письмо, в котором будут дальнейшие инструкции по регистрации на сайте.', 'pass_retour_public' => 'Назад к основному сайту', 'pass_rien_a_faire_ici' => 'Нечего здесь делать', @@ -640,29 +642,25 @@ and connect again to the site. 'texte_documents_associes' => 'Следующие документы связаны со статьей, но они не были вставлены. На сайте они могут отображаться как прикрепленные документы (в зависимости от дизайна).', - 'texte_erreur_mise_niveau_base' => 'Ошибка базы данных в процессе апгрейда - Изображение @fichier нельзя передать (статьёй @id_article).

      - Еще раз нажмите на ссылку, повторите процедуру апгрейда - и удостоверьтесь что изображение есть в статьях.', + 'texte_erreur_mise_niveau_base' => 'Ошибка базы данных в процессе апгрейда. Изображение @fichier@ нельзя передать (статья @id_article@).

      Еще раз нажмите на ссылку, повторите процедуру апгрейда и удостоверьтесь, что изображения есть в статьях.', 'texte_erreur_visiteur' => 'Вы пробовали получить доступ к административной части сайта с использованием логина, который не имеет достаточно прав для такой операции.', 'texte_inc_auth_1' => 'Вы ввели логин @auth_login@. Такого пользователя нет в базе данных. Пробуйте еще раз', 'texte_inc_auth_2' => '(пере)подключиться', - 'texte_inc_auth_3' => 'выйдете и - перезагрузите ваш браузер в случае необходимости.', + 'texte_inc_auth_3' => ', выйдите и перезагрузите ваш браузер в случае необходимости.', 'texte_inc_config' => 'Изменение настроек сайта очень сильно влияет на его работу. Настоятельно рекомендуем менять настройки только в том случае, если вы четко представляете, какие изменения это повлечет. Вы можете запросить консультацию у разработчика Вашего сайта по настройкам системы.', - 'texte_inc_meta_1' => 'Система вызвала ошибку,при попытки записи в файл @fichier@. Обратитесь к администратору сайта, что бы', + 'texte_inc_meta_1' => 'Система вызвала ошибку при попытке записи в файл @fichier@. Обратитесь к администратору сайта, чтобы', 'texte_inc_meta_2' => 'проверить права доступа на запись', 'texte_inc_meta_3' => ' в папке @repertoire@.', 'texte_statut_en_cours_redaction' => 'готовится', - 'texte_statut_poubelle' => 'удалить', + 'texte_statut_poubelle' => 'удалена', 'texte_statut_propose_evaluation' => 'утверждается', 'texte_statut_publie' => 'опубликована', - 'texte_statut_refuse' => 'не утверждено ', - 'titre_ajouter_mot_cle' => 'ДОБАВИТЬ КЛЮЧЕВОЕ СЛОВО:', + 'texte_statut_refuse' => 'отклонена', + 'titre_ajouter_mot_cle' => 'ДОБАВИТЬ КЛЮЧ:', 'titre_cadre_raccourcis' => 'БЫСТРЫЙ ПЕРЕХОД:', 'titre_changer_couleur_interface' => 'Изменение цвета интерфейса', 'titre_image_admin_article' => 'Вы можете администрировать эту статью ', @@ -671,6 +669,7 @@ and connect again to the site. 'titre_image_auteur_supprime' => 'Автор удален', 'titre_image_redacteur' => 'Редактор без доступа', 'titre_image_redacteur_02' => 'Редактор', + 'titre_image_selecteur' => 'Показать список', 'titre_image_visiteur' => 'Посетитель', 'titre_joindre_document' => 'ПРИЛОЖИТЬ ДОКУМЕНТ', 'titre_mots_cles' => 'КЛЮЧИ', @@ -681,23 +680,25 @@ and connect again to the site. 'titre_statistiques' => 'Статистика сайта', 'titre_titre_document' => 'Название документа:', 'todo' => 'сделать', + 'trad_definir_reference' => 'Выберите «@titre@» как источник перевода', 'trad_reference' => '(источник для переводов)', // Z 'zbug_balise_b_aval' => ': B tag too late in loop', - 'zbug_balise_inexistante' => 'Тег #@balise@ не корректно указан для @from@ ', + 'zbug_balise_inexistante' => 'Тег #@balise@ некорректно указан для @from@ ', 'zbug_balise_sans_argument' => 'Не хватает аргумента в теге @balise@', 'zbug_boucle' => 'цикл (boucle)', - 'zbug_boucle_recursive_undef' => 'неопределен рекурсивный цикл (boucle): @nom@', + 'zbug_boucle_recursive_undef' => 'не определен рекурсивный цикл (boucle): @nom@', 'zbug_calcul' => 'вычисления', 'zbug_champ_hors_boucle' => 'Поле @champ@ находится вне цикла (boucle)', 'zbug_champ_hors_motif' => 'Поле @champ@ находится вне контекста @motif@', 'zbug_code' => 'код ', 'zbug_critere_inconnu' => 'Неизвестный критерий @critere@', + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} таблица без первичного ключа ', 'zbug_distant_interdit' => 'Внешние данные запрещены', 'zbug_doublon_table_sans_cle_primaire' => 'Дубликаты записей в таблице, не имеющей простого первичного ключа', 'zbug_doublon_table_sans_index' => 'Дубликаты записей в таблице без индекса', - 'zbug_erreur_boucle_double' => 'Цикл @id@: двойное определение', + 'zbug_erreur_boucle_double' => 'Цикл @id@ указан дважды в одном шаблоне', 'zbug_erreur_boucle_fermant' => 'Цикл @id@: отсутствует закрывающий тег', 'zbug_erreur_boucle_syntaxe' => 'Синтаксическая ошибка в цикле @id@', 'zbug_erreur_compilation' => 'Ошибка компиляции', @@ -708,29 +709,27 @@ and connect again to the site. 'zbug_hors_compilation' => 'Не скомпилировано', 'zbug_info_erreur_squelette' => 'Ошибка на сайте', 'zbug_inversion_ordre_inexistant' => 'Реверсия несуществующего порядка', - 'zbug_pagination_sans_critere' => 'Используется тег #PAGINATION но в цикле не указан критерий {pagination}. Возможно это рекурсивный цикл.', + 'zbug_pagination_sans_critere' => 'Используется тег #PAGINATION но в цикле не указан критерий {pagination} или тег используется в рекурсивном цикле.', 'zbug_parametres_inclus_incorrects' => 'Неверный включающий параметр: @param@', 'zbug_profile' => 'Время вычисления: @time@', 'zbug_resultat' => 'результат', 'zbug_serveur_indefini' => 'Не определен SQL сервер', 'zbug_statistiques' => 'Информация о SQL запросах (отсортировано по времени выполнения) ', - 'zbug_table_inconnue' => 'Неизвестная SQL таблица "@table@"', + 'zbug_table_inconnue' => 'Неизвестная SQL таблица «@table@»', 'zxml_connus_attributs' => 'известные атрибуты', 'zxml_de' => 'из', 'zxml_inconnu_attribut' => 'неизвестный атрибут', - 'zxml_inconnu_balise' => 'неизвестный тэг', + 'zxml_inconnu_balise' => 'неизвестный тег', 'zxml_inconnu_entite' => 'неизвестная запись', 'zxml_inconnu_id' => 'неизвестный ID', 'zxml_mais_de' => 'но из', 'zxml_non_conforme' => 'не соответствует принципу', 'zxml_non_fils' => 'не является дочерним по отношению к', - 'zxml_nonvide_balise' => 'таг не пуст', + 'zxml_nonvide_balise' => 'тег не пуст', 'zxml_obligatoire_attribut' => 'требуется атрибут, отсутствующий в', 'zxml_succession_fils_incorrecte' => 'неверное дочернее наследование', 'zxml_survoler' => 'чтобы увидеть правильные, наведите курсор', 'zxml_valeur_attribut' => 'значение атрибута', - 'zxml_vide_balise' => 'пустой таг', + 'zxml_vide_balise' => 'пустой тег', 'zxml_vu' => 'уже просматривалось' ); - -?> diff --git a/www/ecrire/lang/spip_sk.php b/www/ecrire/lang/spip_sk.php index c4721126..64465951 100644 --- a/www/ecrire/lang/spip_sk.php +++ b/www/ecrire/lang/spip_sk.php @@ -1,9 +1,11 @@ 'Zrušiť', 'antispam_champ_vide' => 'Toto pole, prosím, nevypĺňajte:', 'articles_recents' => 'Najnovšie články', + 'avis_1_erreur_saisie' => 'Vo vašich údajoch je 1 chyba, prosím, skontrolujte ich.', 'avis_archive_incorrect' => 'archívny súbor nie je platný súbor SPIPu', 'avis_archive_invalide' => 'archívny súbor nie je platný', 'avis_attention' => 'POZOR!', @@ -43,6 +46,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_erreur_mysql' => 'Chyba SQL', 'avis_erreur_sauvegarde' => 'Chyba v zálohe (@type@ @id_objet@)!', 'avis_erreur_visiteur' => 'Problém pri vstupe do súkromnej zóny', + 'avis_nb_erreurs_saisie' => 'Vo vašom zadaní je @nb@ chýb, skontrolujte si údaje.', // B 'barre_a_accent_grave' => 'Vložiť veľké A s opačným dĺžňom', @@ -110,8 +114,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_heures_minutes_court' => '@h@h:@m@', 'date_fmt_jour' => '@nomjour@ @jour@', 'date_fmt_jour_heure' => '@jour@ o @heure@', - 'date_fmt_jour_heure_debut_fin' => '@jour@ od @heure_debut@ do @heure_fin@', - 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ od @heure_debut@@dtabbr@ do @dtstart@@heure_fin@@dtend@', + 'date_fmt_jour_heure_debut_fin' => '@jour@ o @heure_debut@ do @heure_fin@', + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ o @heure_debut@@dtabbr@ do @dtend@@heure_fin@@dtabbr@', 'date_fmt_jour_mois' => '@jour@ @nommois@', 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@', 'date_fmt_mois_annee' => '@nommois@ @annee@', @@ -121,6 +125,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'date_fmt_periode_abbr' => 'Od @dtart@@date_debut@@dtabbr@ do @dtend@@date_fin@@dtabbr@', 'date_fmt_periode_from' => 'Od', 'date_fmt_periode_to' => 'do', + 'date_fmt_saison_annee' => '@saison@ @annee@', 'date_heures' => 'hodinami', 'date_hier' => 'včera', 'date_il_y_a' => 'pred @delai@', @@ -285,6 +290,8 @@ stránku "@nom_site_spip@" (@adresse_login@):', 'form_prop_non_enregistre' => 'Váš návrh nebol uložený.', 'form_prop_sujet' => 'Predmet', 'form_prop_url_site' => 'Adresa stránky', + 'format_date_incorrecte' => 'Dátum alebo jeho formát nie je správny', + 'format_heure_incorrecte' => 'Čas alebo jeho formát nie je správny', 'forum_non_inscrit' => 'Buď ste sa nezaregistrovali, alebo sú adresa či heslo nesprávne.', 'forum_par_auteur' => 'napísal(a) @auteur@', 'forum_titre_erreur' => 'Chyba...', @@ -531,7 +538,7 @@ stránku "@nom_site_spip@" (@adresse_login@):', 'login_retour_public' => 'Späť na verejne prístupnú stránku', 'login_retour_site' => 'Späť na verejne prístupnú stránku', 'login_retoursitepublic' => 'Späť na verejne prístupnú stránku', - 'login_sans_cookiie' => 'Identifikácia bez cookie', + 'login_sans_cookie' => 'Identifikácia bez cookie', 'login_securise' => 'Zabezpečené prihlásenie', 'login_sinscrire' => 'Zaregistrovať sa', 'login_test_navigateur' => 'Testuje sa prehliadač/nové pripojenie', @@ -540,6 +547,9 @@ stránku "@nom_site_spip@" (@adresse_login@):', // M 'masquer_colonne' => 'Schovať tento stĺpec', 'masquer_trad' => 'Schovať preklady', + 'message_nouveaux_identifiants_echec' => 'Nie je možné vytvoriť mové prihlasovacie údaje.', + 'message_nouveaux_identifiants_echec_envoi' => 'Nepodarilo sa poslať nové prihlasovacie údaje.', + 'message_nouveaux_identifiants_ok' => 'Nové prihlasovacie údaje boli odoslané na adresu @email@.', 'module_fichiers_langues' => 'Jazykové súbory', // N @@ -594,7 +604,7 @@ a znova sa prihlásiť na stránku. 'pass_nouveau_pass' => 'Nové heslo', 'pass_ok' => 'OK', 'pass_oubli_mot' => 'Zabudnuté heslo', - 'pass_procedure_changer' => 'Ak si chcete zmeniť heslo, musíme overiť vašu identitu. Použijeme na to e-mailovú adresu priradenú k vášmu účtu.', + 'pass_procedure_changer' => 'Ďakujeme, že pri zmene hesla zadáte e-mailovú adresu priradenú k svojmu účtu.', 'pass_quitter_fenetre' => 'Zatvoriť toto okno', 'pass_rappel_login' => 'Na pripomenutie: váš identifikátor (prihlasovacie meno) je "@login@".', 'pass_recevoir_mail' => 'Dostanete e-mail, ktorý vám vysvetlí, ako znova získať prístup na stránku.', @@ -674,6 +684,7 @@ a znova sa prihlásiť na stránku. 'titre_statistiques' => 'Štatistiky stránok', 'titre_titre_document' => 'Názov dokumentu:', 'todo' => 'nasleduje', + 'trad_definir_reference' => 'Vybrať "@titre@" ako referenciu pre preklady', 'trad_reference' => '(referencia pre preklady)', // Z @@ -687,6 +698,7 @@ a znova sa prihlásiť na stránku. 'zbug_champ_hors_motif' => 'Pole @champ@ mimo kontextu @motif@', 'zbug_code' => 'kód', 'zbug_critere_inconnu' => 'neznáme kritérium @critere@', + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} v tabuľke bez je­di­neč­né­ho pri­már­ne­ho kľúča', 'zbug_distant_interdit' => 'Externé dáta sú zakázané', 'zbug_doublon_table_sans_cle_primaire' => 'V tabuľke, ktorá nemá jednoduchý primárny kľúč, sú duplicitné položky', 'zbug_doublon_table_sans_index' => 'Duplicitné údaje v tabuľke bez indexu', @@ -725,5 +737,3 @@ a znova sa prihlásiť na stránku. 'zxml_vide_balise' => 'prázdny tag', 'zxml_vu' => 'zobrazené predtým' ); - -?> diff --git a/www/ecrire/lang/spip_sv.php b/www/ecrire/lang/spip_sv.php index 1c429028..0d340859 100644 --- a/www/ecrire/lang/spip_sv.php +++ b/www/ecrire/lang/spip_sv.php @@ -1,9 +1,11 @@ 'Tillbaka till den publika delen', 'login_retour_site' => 'Tillbaka till den publika delen', 'login_retoursitepublic' => 'Tillbaka till den publika delen', - 'login_sans_cookiie' => 'Logga in utan cookie', 'login_securise' => 'Säker inloggning', 'login_sinscrire' => 'registrera dig', 'login_test_navigateur' => 'testar webbläsare/återuppkoppling', @@ -683,5 +684,3 @@ och koppla upp dig mot sajten igen. 'zxml_vide_balise' => 'tom tagg', 'zxml_vu' => 'tidigare sedd' ); - -?> diff --git a/www/ecrire/lang/spip_tr.php b/www/ecrire/lang/spip_tr.php index 238d5b0c..a20983ff 100644 --- a/www/ecrire/lang/spip_tr.php +++ b/www/ecrire/lang/spip_tr.php @@ -1,9 +1,11 @@ 'Kamusal siteye dön', 'login_retour_site' => 'Kamusal siteye dön', 'login_retoursitepublic' => 'Kamusal siteye dön', - 'login_sans_cookiie' => 'Çerezsiz tanımlanma', 'login_sinscrire' => 'Kayıt ol', 'login_test_navigateur' => 'Gezgini dene / Tekrar bağlan', 'login_verifiez_navigateur' => '(Ancak gezginin şifrenizi belleğe almadığından emin olunuz...)', @@ -643,5 +644,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'zxml_vide_balise' => 'boş etiket', 'zxml_vu' => 'önceden görülen' ); - -?> diff --git a/www/ecrire/lang/spip_uk.php b/www/ecrire/lang/spip_uk.php new file mode 100644 index 00000000..a1763170 --- /dev/null +++ b/www/ecrire/lang/spip_uk.php @@ -0,0 +1,724 @@ + 'http://listes.rezo.net/mailman/listinfo/spip-dev', + '0_langue' => 'Українська [uk]', + '0_liste' => 'spip-uk@rezo.net', + '0_mainteneur' => '2015 Olga Karpenko (olly.olga@gmail.com) +2017 Serge Markitanenko +(ss1945@gmail.com)', + + // A + 'access_interface_graphique' => 'Повернення до повного інтерфейсу', + 'access_mode_texte' => 'Спрощений текстовий інтерфейс', + 'admin_debug' => 'налагодження', + 'admin_modifier_article' => 'Змінити статтю', + 'admin_modifier_auteur' => 'Змінити автора', + 'admin_modifier_breve' => 'Змінити новину', + 'admin_modifier_mot' => 'Змінити ключове слово', + 'admin_modifier_rubrique' => 'Змінити розділ', + 'admin_recalculer' => 'Поновити сторінку', + 'afficher_calendrier' => 'Показати календар', + 'afficher_trad' => 'показати переклади', + 'alerte_maj_impossible' => 'Увага! Не вдалося поновити базу SQL до версії @version@. Можливо, неправильно вказано параметри доступу до бази.', + 'alerte_modif_info_concourante' => 'Увага: ця сторінка редагується ще кимось на сайті. Поточне значення:', + 'analyse_xml' => 'XML парсинг', + 'annuler' => 'Відміна', + 'antispam_champ_vide' => 'Залиште це поле пустим:', + 'articles_recents' => 'Свіжі статті', + 'avis_1_erreur_saisie' => 'Існує 1 помилка в записі, перевірте інформацію.', + 'avis_archive_incorrect' => 'це неправильний архівний файл SPIP', + 'avis_archive_invalide' => 'цей архівний файл не можна використати', + 'avis_attention' => 'Увага!', + 'avis_champ_incorrect_type_objet' => 'Неправильне поле @name@ для об’єкту типу @type@', + 'avis_colonne_inexistante' => 'Колонки @col@ не існує', + 'avis_erreur' => 'Помилка: див. нижче', + 'avis_erreur_connexion' => 'Помилка сполучення', + 'avis_erreur_cookie' => 'проблема з cookie ', + 'avis_erreur_fonction_contexte' => 'Помилка програми. Цю функцію не можна викликати в цьому контексті.', + 'avis_erreur_mysql' => 'Помилка SQL ', + 'avis_erreur_sauvegarde' => 'Помилка в бекапі (@type@ @id_objet@)!', + 'avis_erreur_visiteur' => 'Помилка при вході в адміністрування сайту', + 'avis_nb_erreurs_saisie' => 'Є @nb@ помилок у вашому записі, перевірте інформацію.', + + // B + 'barre_a_accent_grave' => 'Велике A з відміткою зверху', + 'barre_aide' => 'Використовуйте кнопки для швидкого форматування тексту', + 'barre_e_accent_aigu' => 'Велике E, acute accent', + 'barre_eo' => 'Вставити дифтонг oe', + 'barre_eo_maj' => 'Вставити дифтонг EO', + 'barre_euro' => 'Вставити символ € (євро)', + 'barre_gras' => 'Виділити {{жирним}}', + 'barre_guillemets' => 'Розмістити між “подвійними лапками”', + 'barre_guillemets_simples' => 'Розмістити між ‘одинарними лапками’', + 'barre_intertitre' => '{{{Підзаголовок}}}', + 'barre_italic' => 'Виділити {курсивом}', + 'barre_lien' => 'Поставити посилання [посилання->http://...]', + 'barre_lien_input' => 'будь ласка, введіть об’єкт, на який вказує гіперпосилання (можна вказати URL як http://www.mysite.com або просто номер однієї з статей цього сайту).', + 'barre_note' => 'Додати [[Виноску]]', + 'barre_paragraphe' => 'Абзац', + 'barre_quote' => 'Цитування', + 'bouton_changer' => 'Змінити', + 'bouton_chercher' => 'Пошук', + 'bouton_choisir' => 'Вибрати', + 'bouton_deplacer' => 'Перемістити', + 'bouton_download' => 'Завантажити', + 'bouton_enregistrer' => 'Зберегти', + 'bouton_radio_desactiver_messagerie_interne' => 'Відключити приватне листування', + 'bouton_radio_envoi_annonces' => 'Відправити повідомлення', + 'bouton_radio_non_envoi_annonces' => 'Відключити відправлення внутрішніх повідомлень', + 'bouton_radio_non_envoi_liste_nouveautes' => 'Не відправляти список останніх новин', + 'bouton_recharger_page' => 'перезавантажити сторінку', + 'bouton_telecharger' => 'Завантажити', + 'bouton_upload' => 'Завантажити', + 'bouton_valider' => 'Відправити', + + // C + 'cal_apresmidi' => 'друга половина дня (p.m.)', + 'cal_jour_entier' => 'увесь день', + 'cal_matin' => 'утро (a.m.)', + 'cal_par_jour' => 'календар - день', + 'cal_par_mois' => 'календар - місяць', + 'cal_par_semaine' => 'календар - тиждень', + 'choix_couleur_interface' => 'колір', + 'choix_interface' => 'вибір інтерфейсу', + 'colonne' => 'Колонка', + 'confirm_changer_statut' => 'Увага: ви змінюєте статус статті. Змінити?', + 'correcte' => 'виправити', + + // D + 'date_aujourdhui' => 'сьогодні', + 'date_avant_jc' => 'До н.е.', + 'date_dans' => 'в @delai@', + 'date_de_mois_1' => '@j@ січня', + 'date_de_mois_10' => '@j@ жовтня', + 'date_de_mois_11' => '@j@ листопада', + 'date_de_mois_12' => '@j@ грудня', + 'date_de_mois_2' => '@j@ лютого', + 'date_de_mois_3' => '@j@ березня', + 'date_de_mois_4' => '@j@ квітня', + 'date_de_mois_5' => '@j@ травня', + 'date_de_mois_6' => '@j@ червня', + 'date_de_mois_7' => '@j@ липня', + 'date_de_mois_8' => '@j@ серпня', + 'date_de_mois_9' => '@j@ вересня', + 'date_demain' => 'завтра', + 'date_fmt_heures_minutes' => '@h@:@m@', + 'date_fmt_heures_minutes_court' => '@h@h@m@', + 'date_fmt_jour' => '@nomjour@ @jour@', + 'date_fmt_jour_heure' => '@jour@ до @heure@', + 'date_fmt_jour_heure_debut_fin' => '@jour@ с @heure_debut@ по @heure_fin@', + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ с @heure_debut@@dtabbr@ по @dtstart@@heure_fin@@dtend@', + 'date_fmt_jour_mois' => '@jourmois@', + 'date_fmt_jour_mois_annee' => '@jourmois@ @annee@', + 'date_fmt_mois_annee' => '@nommois@ @annee@', + 'date_fmt_nomjour' => '@nomjour@ @date@', + 'date_fmt_nomjour_date' => 'Від @nomjour@ @date@', + 'date_fmt_periode' => 'З @date_debut@ по @date_fin@', + 'date_fmt_periode_abbr' => 'З @dtart@@date_debut@@dtabbr@ по @dtend@@date_fin@@dtabbr@', + 'date_fmt_periode_from' => 'З', + 'date_fmt_periode_to' => 'по', + 'date_fmt_saison_annee' => '@saison@ @annee@', + 'date_heures' => 'година', + 'date_hier' => 'вчора', + 'date_il_y_a' => '@delai@ назад', + 'date_jnum1' => '1', + 'date_jnum10' => '10', + 'date_jnum11' => '11', + 'date_jnum12' => '12', + 'date_jnum13' => '13', + 'date_jnum14' => '14', + 'date_jnum15' => '15', + 'date_jnum16' => '16', + 'date_jnum17' => '17', + 'date_jnum18' => '18', + 'date_jnum19' => '19', + 'date_jnum2' => '2', + 'date_jnum20' => '20', + 'date_jnum21' => '21', + 'date_jnum22' => '22', + 'date_jnum23' => '23', + 'date_jnum24' => '24', + 'date_jnum25' => '25', + 'date_jnum26' => '26', + 'date_jnum27' => '27', + 'date_jnum28' => '28', + 'date_jnum29' => '29', + 'date_jnum3' => '3', + 'date_jnum30' => '30', + 'date_jnum31' => '31', + 'date_jnum4' => '4', + 'date_jnum5' => '5', + 'date_jnum6' => '6', + 'date_jnum7' => '7', + 'date_jnum8' => '8', + 'date_jnum9' => '9', + 'date_jour_1' => 'неділя', + 'date_jour_1_abbr' => 'Нд.', + 'date_jour_1_initiale' => 'Н.', + 'date_jour_2' => 'понеділок', + 'date_jour_2_abbr' => 'Пн.', + 'date_jour_2_initiale' => 'П.', + 'date_jour_3' => 'вівторок', + 'date_jour_3_abbr' => 'Вт.', + 'date_jour_3_initiale' => 'В.', + 'date_jour_4' => 'середа', + 'date_jour_4_abbr' => 'Ср.', + 'date_jour_4_initiale' => 'С.', + 'date_jour_5' => 'четвер', + 'date_jour_5_abbr' => 'Чт.', + 'date_jour_5_initiale' => 'Ч.', + 'date_jour_6' => 'п’ятниця', + 'date_jour_6_abbr' => 'Пт.', + 'date_jour_6_initiale' => 'П.', + 'date_jour_7' => 'субота', + 'date_jour_7_abbr' => 'Сб.', + 'date_jour_7_initiale' => 'С.', + 'date_jours' => 'день', + 'date_minutes' => 'хвилини', + 'date_mois' => 'місяці', + 'date_mois_1' => 'Січень', + 'date_mois_10' => 'Жовтень', + 'date_mois_10_abbr' => 'Жов', + 'date_mois_11' => 'Листопад', + 'date_mois_11_abbr' => 'Лис', + 'date_mois_12' => 'Грудень', + 'date_mois_12_abbr' => 'Гру', + 'date_mois_1_abbr' => 'Січ', + 'date_mois_2' => 'Лютий', + 'date_mois_2_abbr' => 'Лют', + 'date_mois_3' => 'Березень', + 'date_mois_3_abbr' => 'Бер', + 'date_mois_4' => 'Квітень', + 'date_mois_4_abbr' => 'Кві', + 'date_mois_5' => 'Травень', + 'date_mois_5_abbr' => 'Тра', + 'date_mois_6' => 'Червень', + 'date_mois_6_abbr' => 'Чер', + 'date_mois_7' => 'Липень', + 'date_mois_7_abbr' => 'Лип', + 'date_mois_8' => 'Серпень', + 'date_mois_8_abbr' => 'Сер', + 'date_mois_9' => 'Вересень', + 'date_mois_9_abbr' => 'Вер', + 'date_saison_1' => 'зима', + 'date_saison_2' => 'весна', + 'date_saison_3' => 'літо', + 'date_saison_4' => 'осінь', + 'date_secondes' => 'секунд', + 'date_semaines' => 'тиждні', + 'date_un_mois' => 'місяць', + 'date_une_heure' => 'годин(а)', + 'date_une_minute' => 'хвилин(а)', + 'date_une_seconde' => 'секунда', + 'date_une_semaine' => 'тиждень', + 'dirs_commencer' => 'щоб почати установку', + 'dirs_preliminaire' => 'Підготовка: Налаштування прав доступу', + 'dirs_probleme_droits' => 'Проблема в правах доступу', + 'dirs_repertoires_absents' => 'Не знайдено такі директорії:

        @bad_dirs@.

      Можлива причина - неправильне поєднання малих та великих літер у назвах директорій. Будь ласка, упевніться, що регістр літер в назвах директорій відповідає тому, що виведено вище; якщо це не так, змініть назви директорій, використовуючи FTP-клієнт, щоб виправити помилку.

      Щойно це буде зроблено, усе запрацює

      ', + 'dirs_repertoires_suivants' => 'До наступних директорій неправильно прописано права доступу
        @bad_dirs@.
      + +

      Щоб змінити права доступу використайте FTP-клієнт. + Процедуру описано в інструкції по установці.

      + +', + 'double_occurrence' => 'Тег @balise@ зустрічається два рази', + + // E + 'en_cours' => 'виконується', + 'envoi_via_le_site' => 'Відправити за допомогою сайту', + 'erreur' => 'Помилка', + 'erreur_balise_non_fermee' => 'останній тег не закрито:', + 'erreur_technique_ajaxform' => 'Непередбачена помилка завадила відправці форми. Можна спробувати ще раз.', + 'erreur_technique_enregistrement_champs' => 'Із-за технічної помилки не вдалось правильно зареєструвати поле @champs@.', + 'erreur_technique_enregistrement_impossible' => 'Не вдалося зареєструвати із-за технічної помилки.', + 'erreur_texte' => 'Помилка(и)', + 'etape' => 'етап', + + // F + 'fichier_introuvable' => 'Файл не знайдено: @fichier@', + 'form_auteur_confirmation' => 'Будь ласка, підтвердіть ваш e-mail', + 'form_auteur_email_modifie' => 'Ваш e-mail було змінено.', + 'form_auteur_envoi_mail_confirmation' => 'Листа про підтвердження було відправлено за адресою @email@. Вам необхідно буде перейти за посиланням в листі, щоб підтвердити вашу поштову адресу.', + 'form_auteur_mail_confirmation' => 'Доброго дня, + +Ви попросили змінити вашу поштову адресу. +Щоб підтвердити вашу нову адресу перейдіть за посиланням: + @url@ +(В іншому разі ваш запит не буде виконано): + +', + 'form_deja_inscrit' => 'Ви вже зареєстровані.', + 'form_email_non_valide' => 'Вказано невірну e-mail адресу.', + 'form_forum_access_refuse' => 'У вас більше немає доступу до цього сайту.', + 'form_forum_bonjour' => 'Hello @nom@,', + 'form_forum_confirmer_email' => 'Для підтвердження реєстрації на сайті перейдіть за посиланням: @url_confirm@', + 'form_forum_email_deja_enregistre' => 'цю адресу електронної пошти вже зареєстровано. Спробуйте використати ваш звичайний пароль.', + 'form_forum_identifiant_mail' => 'Інформацію про параметри входу на сайт було відправлено на вашу пошту.', + 'form_forum_identifiants' => 'Параметри входу на сайт', + 'form_forum_indiquer_nom_email' => 'Введіть ваше ім’я та адресу електронної пошти. Ви отримаєте параметри доступу до сайту електронною поштою.', + 'form_forum_login' => 'логін:', + 'form_forum_message_auto' => '(це автоматичне повідомлення)', + 'form_forum_pass' => 'пароль:', + 'form_forum_probleme_mail' => 'Помилка пошти: не вдалося вислати ідентифікатор.', + 'form_forum_voici1' => 'Дані для доступу до сайту „@nom_site_spip@” (@adresse_site@):', + 'form_forum_voici2' => 'Дані для доступу до сайту (можливість відправляти свої статті) „@nom_site_spip@” (@adresse_login@):', + 'form_indiquer_email' => 'Будь ласка, вкажіть свій e-mail.', + 'form_indiquer_nom' => 'Введіть ваше ім’я.', + 'form_indiquer_nom_site' => 'Будь ласка, введіть назву вашого сайту.', + 'form_pet_deja_enregistre' => 'Цей сайт вже зареєстровано', + 'form_pet_signature_pasprise' => 'Ваш підпис проігноровано.', + 'form_prop_confirmer_envoi' => 'Підтвердити відправлення', + 'form_prop_description' => 'Опис/коментар', + 'form_prop_enregistre' => 'Вашу пропозиція було записано і вона з’явиться online після підтвердження адміністраторами сайту.', + 'form_prop_envoyer' => 'Відправити повідомлення', + 'form_prop_indiquer_email' => 'Будь ласка, вкажіть коректну e-mail адресу', + 'form_prop_indiquer_nom_site' => 'Вкажіть назву сайту.', + 'form_prop_indiquer_sujet' => 'Вкажіть тему', + 'form_prop_message_envoye' => 'Повідомлення відправлено', + 'form_prop_non_enregistre' => 'Вашу пропозицію не було записано.', + 'form_prop_sujet' => 'Тема', + 'form_prop_url_site' => 'URL сайту', + 'format_date_incorrecte' => 'Дата або її формат некоректні', + 'format_heure_incorrecte' => 'Час або його формат некоректні', + 'forum_non_inscrit' => 'Або ви не зареєстровані, або адреса чи пароль неправильні.', + 'forum_par_auteur' => ' @auteur@', + 'forum_titre_erreur' => 'Помилка...', + + // I + 'ical_texte_rss_articles' => 'RSS стрічка сайту:', + 'ical_texte_rss_articles2' => 'RSS розділів сайту:', + 'ical_texte_rss_breves' => 'Ще є файл, що містить новини сайту. Вибираючи різні розділи, ви можете отримувати новини тільки з них.', + 'icone_a_suivre' => 'Панель управління', + 'icone_admin_site' => 'Адміністратор сайту', + 'icone_agenda' => 'Календар', + 'icone_aide_ligne' => 'Допомога', + 'icone_articles' => 'Статті', + 'icone_auteurs' => 'Автори', + 'icone_brouteur' => 'Швидкий перехід', + 'icone_configuration_site' => 'Налаштування', + 'icone_configurer_site' => 'Налаштуйте ваш сайт', + 'icone_creer_nouvel_auteur' => 'Новий автор', + 'icone_creer_rubrique' => 'Нова розділ', + 'icone_creer_sous_rubrique' => 'Нова підрубрика', + 'icone_deconnecter' => 'Вийти', + 'icone_discussions' => 'Обговорення', + 'icone_doc_rubrique' => 'Додані документи', + 'icone_ecrire_article' => 'Нова стаття', + 'icone_edition_site' => 'Змінити сайт', + 'icone_gestion_langues' => 'Мовні налаштування', + 'icone_informations_personnelles' => 'Персональна інформація', + 'icone_interface_complet' => 'Повний інтерфейс', + 'icone_interface_simple' => 'Спрощений інтерфейс', + 'icone_maintenance_site' => 'Обслуговування сайту', + 'icone_messagerie_personnelle' => 'Особисті повідомлення', + 'icone_repartition_debut' => 'Розподіл показів з початку', + 'icone_rubriques' => 'Розділ', + 'icone_sauver_site' => 'Резервна копія сайту', + 'icone_site_entier' => 'Увесь сайт', + 'icone_sites_references' => 'Каталог сайтів', + 'icone_statistiques' => 'Статистика сайту', + 'icone_suivi_activite' => 'RSS та iCal', + 'icone_suivi_actualite' => 'Статистика сайту', + 'icone_suivi_pettions' => 'Відстежування/управління петиціями', + 'icone_suivi_revisions' => 'Версії статті', + 'icone_supprimer_document' => 'Видалити документ', + 'icone_supprimer_image' => 'Видалити зображення', + 'icone_tous_articles' => 'Ваші статті', + 'icone_tous_auteur' => 'Усі автори', + 'icone_tous_visiteur' => 'Усі відвідувачі', + 'icone_visiter_site' => 'Відвідати сайт', + 'icone_voir_en_ligne' => 'Дивитись online', + 'img_indisponible' => 'зображення недосяжне', + 'impossible' => 'неможливо', + 'info_a_suivre' => 'ПАНЕЛЬ УПРАВЛІННЯ', + 'info_acces_interdit' => 'Доступ заборонено', + 'info_acces_refuse' => 'У доступі відмовлено', + 'info_action' => 'Дія: @action@', + 'info_administrer_rubriques' => 'Ви можете управляти цією рубрикою та її підрубриками', + 'info_adresse_non_indiquee' => 'Не вказано адресу для перевірки!', + 'info_aide' => 'ДОПОМОГА:', + 'info_ajouter_mot' => 'Додати ключове слово', + 'info_annonce' => 'ОГОЛОШЕННЯ', + 'info_annonces_generales' => 'Загальні об’яви:', + 'info_article_propose' => 'Статтю відправлено', + 'info_article_publie' => 'Статтю опубліковано', + 'info_article_redaction' => 'Стаття редагується', + 'info_article_refuse' => 'Статтю відхилено', + 'info_article_supprime' => 'Статтю видалено', + 'info_articles' => 'Статті', + 'info_articles_a_valider' => 'Статті для затвердження', + 'info_articles_nb' => '@nb@ статей', + 'info_articles_proposes' => 'Відправлені статті', + 'info_articles_un' => '1 стаття', + 'info_auteurs_nombre' => 'автор(и):', + 'info_authentification_ftp' => 'FTP авторизація.', + 'info_breves_2' => 'новини', + 'info_breves_nb' => '@nb@ новин', + 'info_breves_un' => '1 новина', + 'info_connexion_refusee' => 'Підключення заборонено', + 'info_contact_developpeur' => 'Зв’яжіться з розробниками.', + 'info_contenance' => 'На цьому сайті є:', + 'info_contribution' => 'додатки до форуму', + 'info_copyright' => '@spip@ - це безплатне програмне забезпечення, що розповсюджується @lien_gpl@.', + 'info_copyright_doc' => 'Більше інформації про SPIP @spipnet_affiche@.', + 'info_copyright_gpl' => 'за ліцензією GPL', + 'info_cours_edition' => 'В роботі', + 'info_creer_repertoire' => 'Створіть файл або папку з назвою:', + 'info_creer_repertoire_2' => 'в підкаталозі @repertoire@, потім: ', + 'info_creer_vignette' => 'автоматичне створення мініатюр зображень', + 'info_creerdansrubrique_non_autorise' => 'У вас недостатньо прав, щоб створювати матеріали в цій рубриці', + 'info_deplier' => 'Відкрийте', + 'info_descriptif_nombre' => 'опис(и):', + 'info_description' => 'Опис:', + 'info_description_2' => 'Опис:', + 'info_dimension' => 'Розмір:', + 'info_documents_nb' => '@nb@ файлів', + 'info_documents_un' => '1 файл', + 'info_ecire_message_prive' => 'Написати особисте повідомлення', + 'info_email_invalide' => 'Неправильна e-mail адреса', + 'info_en_cours_validation' => 'Ваші неопубліковані статті', + 'info_en_ligne' => 'Зараз on-line:', + 'info_envoyer_message_prive' => 'Відправити особисте повідомлення автору', + 'info_erreur_requete' => 'Помилка у запиті:', + 'info_erreur_squelette2' => 'Файл шаблону @fichier@ недосяжний', + 'info_erreur_systeme' => 'Помилка системи (errno @errsys@)', + 'info_erreur_systeme2' => 'Закінчилося місце на диску або пошкоджено базу даних.
      Спробуйте відновити базу даних або зверніться до вашого хостинг-провайдера.', + 'info_fini' => 'Готово!', + 'info_format_image' => 'Формат, який використовується для автоматичного зменшення зображень @gd_formats@.', + 'info_format_non_defini' => 'невизначений формат', + 'info_grand_ecran' => 'Великий екран', + 'info_image_aide' => 'ДОПОМОГА', + 'info_image_process_titre' => 'Як створювати мініатюри', + 'info_impossible_lire_page' => 'Помилка! Сторінку @test_proxy@ не можна отримати через проксі сервер', + 'info_installation_systeme_publication' => 'Установка SPIP ...', + 'info_installer_documents' => 'Ви можете розмістити файли в папку @upload@ і вони будуть добавлені автоматично.', + 'info_installer_ftp' => 'Ви можете переписати файли по FTP в папку @upload@, щоб використовувати їх в подальшій роботі.', + 'info_installer_images' => 'Ви можете додавати зображення в форматах JPEG, GIF або PNG.', + 'info_installer_images_dossier' => 'Додайте зображення в папку @upload@ для використання їх в цьому меню.', + 'info_interface_complete' => 'Повний інтерфейс', + 'info_interface_simple' => 'Спрощений інтерфейс', + 'info_joindre_document_article' => 'Ви можете добавити до вашої статті документи', + 'info_joindre_document_rubrique' => 'Ви можете добавити документи в цю рубрику', + 'info_joindre_documents_article' => 'Ви можете прикріпити до вашої статті документи:', + 'info_l_article' => 'стаття', + 'info_la_breve' => 'новина', + 'info_la_rubrique' => 'розділ', + 'info_langue_principale' => 'Головна мова сайту', + 'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ px', + 'info_les_auteurs_1' => ' @les_auteurs@ ', + 'info_logo_format_interdit' => 'Дозволено використовувати логотипи тільки в форматах @formats@.', + 'info_logo_max_poids' => 'Логотип повинен бути менше, ніж @maxi@ (розмір цього файлу @actuel@).', + 'info_mail_fournisseur' => 'you@isp.com', + 'info_message_2' => 'ПОВІДОМЛЕННЯ', + 'info_message_supprime' => 'ПОВІДОМЛЕННЯ ВИДАЛЕНО', + 'info_messages_nb' => '@nb@ повідомлень', + 'info_messages_un' => '1 повідомлення', + 'info_mise_en_ligne' => 'Опубліковано:', + 'info_modification_parametres_securite' => 'Змінити налаштування безпеки', + 'info_mois_courant' => 'Впродовж місяця:', + 'info_mot_cle_ajoute' => 'Ключове слово було додано до', + 'info_multi_herit' => 'Усталена (default) мова', + 'info_multi_langues_soulignees' => 'Якщо назву мови підкреслено, це означає, що є повний або частковий переклад інтерфейсу SPIP цією мовою. Якщо ви оберете таку мову, більшість елементів загального сайту (дати, форми) буде автоматично переведено. При виборі інших мов усі системні повідомлення будуть виводитися основною мовою сайту.', + 'info_multilinguisme' => 'Багатомовність', + 'info_nom_non_utilisateurs_connectes' => 'Не показувати мене в списку користувачів online.', + 'info_nom_utilisateurs_connectes' => 'Показувати мене в списку користувачів online.', + 'info_nombre_en_ligne' => 'Зараз на сайті:', + 'info_non_resultat' => 'Нічого не знайдено на запит „@cherche_mot@”', + 'info_non_utilisation_messagerie' => 'Систему приватних повідомлень відключено на цьому сайті.', + 'info_nouveau_message' => 'ОТРИМАНО НОВЕ ПОВІДОМЛЕННЯ', + 'info_nouveaux_messages' => 'У ВАС @total_messages@ НОВИХ ПОВІДОМЛЕНЬ:', + 'info_numero_abbreviation' => '№', + 'info_obligatoire' => 'Обов’язкові поля', + 'info_pense_bete' => 'ЗАМЕТКА', + 'info_petit_ecran' => 'Маленький екран', + 'info_petition_close' => 'Петицію закрито', + 'info_pixels' => 'пікселі', + 'info_plusieurs_mots_trouves' => 'На запит „@cherche_mot@” було знайдено такі ключові слова:', + 'info_portfolio_automatique' => 'Автоматизоване портфоліо:', + 'info_premier_resultat' => '[@debut_limit@ из @total@]', + 'info_premier_resultat_sur' => '[@debut_limit@ из @total@]', + 'info_propose_1' => '[@nom_site_spip@] Відправлені: @titre@', + 'info_propose_2' => 'Статтю відправлено +-----------------', + 'info_propose_3' => 'Статтю „@titre@” відправлено для публікації.', + 'info_propose_4' => 'Вас запросили до рецензування. Висловіть свою думку', + 'info_propose_5' => 'на пов’язаному з цим форумі, що розташований за адресою:', + 'info_publie_01' => 'Статтю „@titre@” було погоджено @connect_nom@.', + 'info_publie_1' => '[@nom_site_spip@] ОПУБЛІКОВАНО: @titre@', + 'info_publie_2' => 'Опублікована стаття +-----------------', + 'info_rechercher' => 'Пошук', + 'info_rechercher_02' => 'Пошук:', + 'info_remplacer_vignette' => 'Замінити мініатюру своїм зменшеним зображенням:', + 'info_rubriques_nb' => '@nb@ рубрик(и)', + 'info_rubriques_un' => '1 розділ', + 'info_sans_titre_2' => 'без назви', + 'info_selectionner_fichier' => 'Ви можете вибрати файл з папки @upload@', + 'info_selectionner_fichier_2' => 'Вибрати файл:', + 'info_sites_nb' => '@nb@ сайтів', + 'info_sites_un' => '1 сайт', + 'info_supprimer_vignette' => 'видалити мініатюру', + 'info_symbole_bleu' => 'Синій символ вказує на нотатку - повідомлення для вашого особистого використання.', + 'info_symbole_jaune' => 'Жовтий символ - оголошення всім редакторам : оголошення може редагувати будь-хто з адміністраторів і його бачать усі редактори.', + 'info_symbole_vert' => 'Зелений символ - листування з іншими користувачами сайту.', + 'info_telecharger_nouveau_logo' => 'Завантажити нове лого:', + 'info_telecharger_ordinateur' => 'Завантажити з вашого комп’ютера:', + 'info_tous_resultats_enregistres' => '[усі результати записано]', + 'info_tout_afficher' => 'Показати все', + 'info_travaux_texte' => 'Ведуться роботи по налаштуванню сайту, скоро ми почнемо роботу.', + 'info_travaux_titre' => 'Сайт ще не працює', + 'info_trop_resultat' => 'Надто багато результатів на запит „@cherche_mot@”; будь ласка, деталізуйте запит.', + 'info_utilisation_messagerie_interne' => 'Ви використовуєте внутрішню систему повідомлень цього сайту.', + 'info_valider_lien' => 'підтвердити посилання', + 'info_verifier_image' => ', впевніться, що ваші зображення було передано правильно.', + 'info_vignette_defaut' => 'Мініатюра як усталено (default)', + 'info_vignette_personnalisee' => 'Ваша мініатюра (зменшене зображення)', + 'info_visite' => 'відвідання:', + 'info_vos_rendez_vous' => 'Ваші майбутні завдання', + 'infos_vos_pense_bete' => 'Ваші нотатки', + + // L + 'label_ajout_id_rapide' => 'Швидке додання', + 'label_poids_fichier' => 'Розмір', + 'lien_afficher_icones_seuls' => 'Показувати тільки іконки', + 'lien_afficher_texte_icones' => 'Показувати іконки і текст', + 'lien_afficher_texte_seul' => 'Показувати тільки текст', + 'lien_liberer' => 'версія', + 'lien_liberer_tous' => 'звільнити ці статті', + 'lien_nouvea_pense_bete' => 'НОВА НОТАТКА', + 'lien_nouveau_message' => 'НОВЕ ПОВІДОМЛЕННЯ', + 'lien_nouvelle_annonce' => 'НОВЕ ОГОЛОШЕННЯ', + 'lien_petitions' => 'ПЕТИЦІЯ', + 'lien_popularite' => 'популярність: @popularite@%', + 'lien_racine_site' => 'КОРІНЬ САЙТУ', + 'lien_reessayer' => 'спробуйте ще раз', + 'lien_repondre_message' => 'Відповісти на повідомлення', + 'lien_supprimer' => 'видалити', + 'lien_tout_afficher' => 'Показати все', + 'lien_visite_site' => 'відвідати цей сайт', + 'lien_visites' => '@visites@ відвідувань', + 'lien_voir_auteur' => 'Перевірити автора', + 'ligne' => 'Лінія', + 'login' => 'Підключення', + 'login_acces_prive' => 'доступ до адміністративної частини', + 'login_autre_identifiant' => 'Змінити логін', + 'login_cookie_accepte' => 'Будь ласка, налаштуйте ваш браузер для прийому cookies (принаймні для цього сайту).', + 'login_cookie_oblige' => 'У вашому браузері повинні бути включені cookies.', + 'login_deconnexion_ok' => 'Вийшов з системи.', + 'login_erreur_pass' => 'Пароль введено неправильно.', + 'login_espace_prive' => 'адміністративна частина', + 'login_identifiant_inconnu' => 'Логін „@login@” невідомий.', + 'login_login' => 'Логін:', + 'login_login2' => 'Логін або email:', + 'login_login_pass_incorrect' => '(Неправильний логін або пароль).', + 'login_motpasseoublie' => 'забули пароль?', + 'login_non_securise' => 'Увага, ця форма не є безпечною. Якщо ви не хочете, аби ваш пароль був відкритий для перехвату в мережі, активізуйте Javascript в вашому браузері та', + 'login_nouvelle_tentative' => 'Спробувати ще раз', + 'login_par_ici' => 'Ви зареєстровані ... вам сюди...', + 'login_pass2' => 'Пароль:', + 'login_preferez_refuser' => 'Якщо ви бажаєте відмовитись від cookies , є інший метод входу на сайт (менш безпечний):', + 'login_recharger' => 'перезавантажити сторінку', + 'login_rester_identifie' => 'Не питати декілька днів', + 'login_retour_public' => 'На головну сторінку сайту', + 'login_retour_site' => 'На головну сторінку сайту', + 'login_retoursitepublic' => 'на головну сторінку сайту', + 'login_sans_cookie' => 'Ідентифікація без cookie', + 'login_securise' => 'Безпечний вхід', + 'login_sinscrire' => 'реєстрація', + 'login_test_navigateur' => 'перевірка браузера/(пере)підключення', + 'login_verifiez_navigateur' => '(перевірте, що ваш браузер не запам’ятовує ваш пароль ...), ', + + // M + 'masquer_colonne' => 'Сховати колонку', + 'masquer_trad' => 'сховати переклад(и)', + 'message_nouveaux_identifiants_echec' => 'Не вдалося створити нові ідентифікатори.', + 'message_nouveaux_identifiants_echec_envoi' => 'Нові ідентифікатори зв’язку не можуть бути відправлені.', + 'message_nouveaux_identifiants_ok' => 'Нові ідентифікатори зв’язку були відправлені на @email@.', + 'module_fichiers_langues' => 'Мовні файли', + + // N + 'navigateur_pas_redirige' => 'Якщо ваш браузер не переходить автоматично, натисніть тут, щоб продовжити.', + 'numero' => 'Номер', + + // O + 'occurence' => 'Приклад', + 'onglet_affacer_base' => 'Видалити базу даних', + 'onglet_auteur' => 'Автор', + 'onglet_contenu_site' => 'Зміст сайту', + 'onglet_evolution_visite_mod' => 'Історія відвідань', + 'onglet_fonctions_avances' => 'Додаткові налаштування', + 'onglet_informations_personnelles' => 'Персональна інформація', + 'onglet_interactivite' => 'Реєстрація, розсилки', + 'onglet_messagerie' => 'Повідомлення', + 'onglet_repartition_rubrique' => 'Відвідання за рубриками', + 'onglet_save_restaur_base' => 'Резервна копія/відновлення бази даних', + 'onglet_vider_cache' => 'Очистити кеш', + + // P + 'pass_choix_pass' => 'Введіть новий пароль:', + 'pass_erreur' => 'Помилка', + 'pass_erreur_acces_refuse' => 'Помилка: у вас більше нема доступу до цього сайту.', + 'pass_erreur_code_inconnu' => 'Помилка: цей код не дає прав на доступ до цієї частини сайту.', + 'pass_erreur_non_enregistre' => 'Помилка: адрес @email_oubli@ не зареєстрований на цьому сайті.', + 'pass_erreur_non_valide' => 'Помилка: e-mail @email_oubli@ неправильний!', + 'pass_erreur_probleme_technique' => 'Помилка: цей лист не може бути відправлений по технічним причинам.', + 'pass_espace_prive_bla' => 'Ви можете увійти до адміністративної (приватної) частини сайту після реєстрації. Після реєстрації ви можете створювати статті та приймати участь в усіх обговореннях.', + 'pass_forum_bla' => 'Ви відправили запит для участі в форумі, який є доступний лише для зареєстрованих користувачів.', + 'pass_indiquez_cidessous' => 'Введіть нижче адресу електронної пошти, яку ви використовували для реєстрації. Вам буде відправлено листа з подальшими інструкціями.', + 'pass_mail_passcookie' => '(цей лист відправлений автоматично) + +Щоб відновити ваш пароль до сайту +@nom_site_spip (@adresse_site) + +перейдіть за таким посиланням: + @sendcookie@ + +Введіть новий пароль і спробуйте знову зайти на сайт + + +(this is an automated message) + +To retrieve your access to the site +@nom_site_spip@ (@adresse_site@) + +Please go to the following address: + @sendcookie@ + +You can then enter a new password +and connect again to the site. +', + 'pass_mot_oublie' => 'забутий пароль', + 'pass_nouveau_enregistre' => 'Новий пароль збережено.', + 'pass_nouveau_pass' => 'Новий пароль', + 'pass_ok' => 'OK', + 'pass_oubli_mot' => 'Забутий пароль', + 'pass_procedure_changer' => 'Щоб змінити пароль, будь ласка, ведіть e-mail, який ви вказали при реєстрації.', + 'pass_quitter_fenetre' => 'Закрити вікно', + 'pass_rappel_login' => 'Нагадуємо: ваш логін „@login@”.', + 'pass_recevoir_mail' => 'Ви одержите листа, в якому будуть подальші інструкції з реєстрації на сайті.', + 'pass_retour_public' => 'Назад до основного сайту', + 'pass_rien_a_faire_ici' => 'Нема чого тут робити', + 'pass_vousinscrire' => 'Реєстрація з сайту', + 'precedent' => 'попередній', + 'previsualisation' => 'Попередній перегляд', + 'previsualiser' => 'Попередній перегляд', + + // R + 'retour' => 'Повернутися', + + // S + 'spip_conforme_dtd' => 'SPIP виявив, що дана сторінка відповідає своєму DOCTYPE:', + 'squelette' => 'шаблон', + 'squelette_inclus_ligne' => 'включений шаблон, рядок', + 'squelette_ligne' => 'шаблон, рядок', + 'stats_visites_et_popularite' => '@visites@ відвідань; популярність: @popularite@', + 'suivant' => 'наступний', + + // T + 'taille_go' => '@taille@ Гб', + 'taille_ko' => '@taille@ кб', + 'taille_mo' => '@taille@ Mb', + 'taille_octets' => '@taille@ bytes', + 'texte_actualite_site_1' => 'Коли ви звикнете до інтерфейсу, натисніть “', + 'texte_actualite_site_2' => 'повний інтерфейс', + 'texte_actualite_site_3' => '”, який зробить більше функцій доступними.', + 'texte_creation_automatique_vignette' => 'Для кожного файлу (в форматі @gd_formats@), доданого через форму, автоматично буде створена зменшена версія - мініатюра (максимальний розмір @taille_preview@ пікселів).', + 'texte_documents_associes' => 'Наступні документи пов’язані зі статтею, але вони не були вставлені. На сайті вони можуть відображатися як прикріплені документи (в залежності від дизайну).', + 'texte_erreur_mise_niveau_base' => 'Помилка бази даних під час апгрейду. + Зображення @fichier не можна передати (статтею @id_article).

      Ще раз натисніть на посилання, повторіть процедуру апгрейду і впевніться, що зображення є в статтях.', + 'texte_erreur_visiteur' => 'Ви спробували отримати доступ до адміністративної частини сайту з використанням логіну, який не має достатньо прав для такої операції.', + 'texte_inc_auth_1' => 'Ви ввели логін @auth_login@. Такого користувача немає в базі даних. Спробуйте ще раз', + 'texte_inc_auth_2' => '(пере)підключитися', + 'texte_inc_auth_3' => 'вийдіть і перезавантажте ваш браузер у випадку необхідності.', + 'texte_inc_config' => 'Зміна налаштувань сайту дуже сильно впливає на його роботу. Настійливо рекомендуємо змінювати налаштування тільки в тому випадку, коли ви чітко передбачаєте, які зміни це викличе. Ви можете попросити консультацію щодо налаштувань системи у розробника вашого сайту.', + 'texte_inc_meta_1' => 'Система викликала помилку при спробі запису в файл @fichier@. Зверніться до адміністратора сайту, щоб', + 'texte_inc_meta_2' => 'перевірити права доступу на запис', + 'texte_inc_meta_3' => ' в папці @repertoire@.', + 'texte_statut_en_cours_redaction' => 'редагується', + 'texte_statut_poubelle' => 'видалено', + 'texte_statut_propose_evaluation' => 'представлено', + 'texte_statut_publie' => 'опубліковано', + 'texte_statut_refuse' => 'відхилено', + 'titre_ajouter_mot_cle' => 'ДОДАТИ КЛЮЧОВЕ СЛОВО:', + 'titre_cadre_raccourcis' => 'ШВИДКИЙ ПЕРЕХІД:', + 'titre_changer_couleur_interface' => 'Зміна кольору інтерфейсу', + 'titre_image_admin_article' => 'Ви можете адмініструвати цю статтю ', + 'titre_image_administrateur' => 'Адміністратор', + 'titre_image_aide' => 'Допомога', + 'titre_image_auteur_supprime' => 'Автора видалено', + 'titre_image_redacteur' => 'Редактор без доступу', + 'titre_image_redacteur_02' => 'Редактор', + 'titre_image_selecteur' => 'Переглянути список', + 'titre_image_visiteur' => 'Відвідувач', + 'titre_joindre_document' => 'ДОДАТИ ДОКУМЕНТ', + 'titre_mots_cles' => 'КЛЮЧОВІ СЛОВА', + 'titre_probleme_technique' => 'Увага: неможливо підключитися до SQL серверу, сайт не працює. Ми намагаємось оперативно розв’язати проблему. Дякуємо за розуміння.', + 'titre_publier_document' => 'ОПУБЛІКУВАТИ ДОКУМЕНТ В ЦІЙ РУБРИЦІ', + 'titre_signatures_attente' => 'Підписи чекають схвалення', + 'titre_signatures_confirmees' => 'Підписи підтверджено', + 'titre_statistiques' => 'Статистика сайту', + 'titre_titre_document' => 'Назва документу:', + 'todo' => 'зробити', + 'trad_definir_reference' => 'Виберіть "@titre@" як джерело для перекладу', + 'trad_reference' => '(джерело для перекладів)', + + // Z + 'zbug_balise_b_aval' => ': B tag too late in loop', + 'zbug_balise_inexistante' => 'Тег #@balise@ не коректно вказано для @from@ ', + 'zbug_balise_sans_argument' => 'Не вистачає аргументу в тезі @balise@', + 'zbug_boucle' => 'цикл (boucle)', + 'zbug_boucle_recursive_undef' => 'невизначений рекурсивний цикл (boucle): @nom@', + 'zbug_calcul' => 'обчислення', + 'zbug_champ_hors_boucle' => 'Поле @champ@ знаходиться поза циклом (boucle)', + 'zbug_champ_hors_motif' => 'Поле @champ@ знаходиться поза контекстом @motif@', + 'zbug_code' => 'код ', + 'zbug_critere_inconnu' => 'Невідомий критерій @critere@', + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} в таблиці без первинного ключа', + 'zbug_distant_interdit' => 'Зовнішні дані заборонено', + 'zbug_doublon_table_sans_cle_primaire' => 'Дублікати записів в таблиці, що не має простого первинного ключа', + 'zbug_doublon_table_sans_index' => 'Дублікати записів в таблиці без індексу', + 'zbug_erreur_boucle_double' => 'Цикл @id@: подвійне визначення', + 'zbug_erreur_boucle_fermant' => 'Цикл @id@: відсутній тег, що закриває', + 'zbug_erreur_boucle_syntaxe' => 'Синтаксична помилка в циклі @id@', + 'zbug_erreur_compilation' => 'Помилка компіляції', + 'zbug_erreur_execution_page' => 'Помилка виконання', + 'zbug_erreur_filtre' => 'Невизначений фільтр @filtre@', + 'zbug_erreur_meme_parent' => 'Критерій {meme_parent} може бути використаний лише в циклах (FORUMS) і (RUBRIQUES)', + 'zbug_erreur_squelette' => 'Помилка(и) в шаблоні', + 'zbug_hors_compilation' => 'Не скомпільовано', + 'zbug_info_erreur_squelette' => 'Помилка на сайті', + 'zbug_inversion_ordre_inexistant' => 'Реверсія неіснуючого порядку', + 'zbug_pagination_sans_critere' => 'Використано тег #PAGINATION, але в циклі не вказаний критерій {pagination}. Можливо це рекурсивний цикл.', + 'zbug_parametres_inclus_incorrects' => 'Невірний параметр, що включає: @param@', + 'zbug_profile' => 'Час розрахунку: @time@', + 'zbug_resultat' => 'результат', + 'zbug_serveur_indefini' => 'Не визначений SQL сервер', + 'zbug_statistiques' => 'Інформація про SQL запроси (відсортовано за часом виконання) ', + 'zbug_table_inconnue' => 'Невідома SQL таблиця "@table@"', + 'zxml_connus_attributs' => 'відомі атрибути', + 'zxml_de' => 'з', + 'zxml_inconnu_attribut' => 'невідомий атрибут', + 'zxml_inconnu_balise' => 'невідомий тег', + 'zxml_inconnu_entite' => 'невідомий запис', + 'zxml_inconnu_id' => 'невідомий ID', + 'zxml_mais_de' => 'але з', + 'zxml_non_conforme' => 'не відповідає принципу', + 'zxml_non_fils' => 'не є дочірнім по відношенню до', + 'zxml_nonvide_balise' => 'тег не пустий', + 'zxml_obligatoire_attribut' => 'потрібний атрибут, що відсутній в', + 'zxml_succession_fils_incorrecte' => 'невірне дочірнє наслідування', + 'zxml_survoler' => 'щоб побачити правильні, наведіть курсор', + 'zxml_valeur_attribut' => 'значення атрибута', + 'zxml_vide_balise' => 'пустий тег', + 'zxml_vu' => 'вже проглядалося' +); diff --git a/www/ecrire/lang/spip_vi.php b/www/ecrire/lang/spip_vi.php index 261e77a1..e1ea4b62 100644 --- a/www/ecrire/lang/spip_vi.php +++ b/www/ecrire/lang/spip_vi.php @@ -1,9 +1,11 @@ 'Trở lại trang web công cộng', 'login_retour_site' => 'Trở lại trang web công cộng', 'login_retoursitepublic' => 'trở lại trang web công cộng', - 'login_sans_cookiie' => 'Nhận diện không cần cookie', 'login_sinscrire' => 'ghi danh', 'login_test_navigateur' => 'thá»­ browser/nối lại', 'login_verifiez_navigateur' => '(Tuy nhiên, kiểm lại để biết là browser không có nhớ mật mã của bạn...)', @@ -609,5 +610,3 @@ Nếu bạn đem vào những hình ảnh trong dạng @gd_formats@, chúng s 'zxml_survoler' => 'để xem chi tiết đúng, di chuyển con chuột lên trên', 'zxml_vu' => 'đã thấy trước đây' ); - -?> diff --git a/www/ecrire/lang/spip_zh.php b/www/ecrire/lang/spip_zh.php index 843f9b80..f43a83a2 100644 --- a/www/ecrire/lang/spip_zh.php +++ b/www/ecrire/lang/spip_zh.php @@ -1,9 +1,11 @@ '返回公共站点', 'login_retour_site' => '返回公共站点', 'login_retoursitepublic' => '返回公共站点', - 'login_sans_cookiie' => '无COOKIE的标识', 'login_sinscrire' => '注册', 'login_test_navigateur' => '测试浏览/重新连接', 'login_verifiez_navigateur' => '(无论如何, 请确认你的浏览器不会记住你的密码...)', @@ -608,5 +609,3 @@ Zhen QIN (zhen_q@21cn.com)', 'zbug_info_erreur_squelette' => '站点错误', 'zbug_table_inconnue' => 'SQL表格 « @table@ » 未知' ); - -?> diff --git a/www/ecrire/maj/svn10000.php b/www/ecrire/maj/svn10000.php index b458dc25..b09918ea 100644 --- a/www/ecrire/maj/svn10000.php +++ b/www/ecrire/maj/svn10000.php @@ -3,18 +3,25 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des mises à jour de SPIP, version >= 10000 + * + * Gestion des mises à jour du cœur de SPIP par un tableau global `maj` + * indexé par le numero SVN du changement + * + * @package SPIP\Core\SQL\Upgrade + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -/*--------------------------------------------------------------------- */ -/* Gestion des MAJ par tableau indexe par le numero SVN du chgt */ -/*--------------------------------------------------------------------- */ // Type cls et sty pour LaTeX $GLOBALS['maj'][10990] = array(array('upgrade_types_documents')); @@ -32,39 +39,54 @@ $GLOBALS['maj'][11171] = array( array('spip_query', "UPDATE spip_types_documents SET upload='oui' WHERE upload IS NULL OR upload!='non'") ); +/** + * Mise à jour 11268 : renommer spip_recherches la mal nommée en spip_resultats + **/ function maj_11268() { global $tables_auxiliaires; include_spip('base/auxiliaires'); - $v = $tables_auxiliaires[$k='spip_resultats']; + $v = $tables_auxiliaires[$k = 'spip_resultats']; sql_create($k, $v['field'], $v['key'], false, false); } -$GLOBALS['maj'][11268] = array(array('maj_11268')); +$GLOBALS['maj'][11268] = array(array('maj_11268')); -function maj_11276 () { +/** + * Mise à jour 11276 : réparer les éventuelles tables spip_documents + * en se fondant sur l'extension de la colonne fichier + * + * @uses maj_1_938() + **/ +function maj_11276() { include_spip('maj/v019'); maj_1_938(); } + $GLOBALS['maj'][11276] = array(array('maj_11276')); -// reparer les referers d'article, qui sont vides depuis [10572] -function maj_11388 () { +/** + * Mise à jour 11388 : réparer les referers d'article, qui sont vides depuis r10572 + */ +function maj_11388() { $s = sql_select('referer_md5', 'spip_referers_articles', "referer='' OR referer IS NULL"); while ($t = sql_fetch($s)) { - $k = sql_fetsel('referer', 'spip_referers', 'referer_md5='.sql_quote($t['referer_md5'])); + $k = sql_fetsel('referer', 'spip_referers', 'referer_md5=' . sql_quote($t['referer_md5'])); if ($k['referer']) { spip_query('UPDATE spip_referers_articles - SET referer='.sql_quote($k['referer']).' - WHERE referer_md5='.sql_quote($t['referer_md5']) - ." AND (referer='' OR referer IS NULL)" + SET referer=' . sql_quote($k['referer']) . ' + WHERE referer_md5=' . sql_quote($t['referer_md5']) + . " AND (referer='' OR referer IS NULL)" ); } } } + $GLOBALS['maj'][11388] = array(array('maj_11388')); -// reparer spip_mots.type = titre du groupe -function maj_11431 () { +/** + * Mise à jour 11431 : réparer spip_mots.type = titre du groupe + */ +function maj_11431() { // mysql only // spip_query("UPDATE spip_mots AS a LEFT JOIN spip_groupes_mots AS b ON (a.id_groupe = b.id_groupe) SET a.type=b.titre"); @@ -74,17 +96,19 @@ function maj_11431 () { array("spip_mots AS a LEFT JOIN spip_groupes_mots AS b ON (a.id_groupe = b.id_groupe)"), array("a.type != b.titre")); // mise a jour de ces mots la - if ($res){ - while ($r = sql_fetch($res)){ - sql_updateq('spip_mots', array('type'=>$r['type']), 'id_mot='.sql_quote($r['id_mot'])); + if ($res) { + while ($r = sql_fetch($res)) { + sql_updateq('spip_mots', array('type' => $r['type']), 'id_mot=' . sql_quote($r['id_mot'])); } } } + $GLOBALS['maj'][11431] = array(array('maj_11431')); -// reparer spip_types_documents.id_type -// qui est parfois encore present -function maj_11778 () { +/** + * Mise à jour 11778 : réparer spip_types_documents.id_type qui est parfois encore présent + */ +function maj_11778() { // si presence id_type $s = sql_showtable('spip_types_documents'); if (isset($s['field']['id_type'])) { @@ -93,10 +117,13 @@ function maj_11778 () { sql_alter('TABLE spip_types_documents ADD PRIMARY KEY (extension)'); } } + $GLOBALS['maj'][11778] = array(array('maj_11778')); -// Optimisation des forums -function maj_11790 () { +/** + * Mise à jour 11790 : Optimisation des forums + */ +function maj_11790() { # sql_alter('TABLE spip_forum DROP INDEX id_message id_message'); sql_alter('TABLE spip_forum ADD INDEX id_parent (id_parent)'); sql_alter('TABLE spip_forum ADD INDEX id_auteur (id_auteur)'); @@ -108,32 +135,47 @@ $GLOBALS['maj'][11790] = array(array('maj_11790')); $GLOBALS['maj'][11794] = array(); // ajout de spip_documents_forum - $GLOBALS['maj'][11961] = array( -array('sql_alter',"TABLE spip_groupes_mots CHANGE `tables` tables_liees text DEFAULT '' NOT NULL AFTER obligatoire"), // si tables a ete cree on le renomme -array('sql_alter',"TABLE spip_groupes_mots ADD tables_liees text DEFAULT '' NOT NULL AFTER obligatoire"), // sinon on l'ajoute -array('sql_update','spip_groupes_mots',array('tables_liees'=>"''"),"articles REGEXP '.*'"), // si le champ articles est encore la, on reinit la conversion -array('sql_update','spip_groupes_mots',array('tables_liees'=>"concat(tables_liees,'articles,')"),"articles='oui'"), // sinon ces 4 requetes ne feront rien -array('sql_update','spip_groupes_mots',array('tables_liees'=>"concat(tables_liees,'breves,')"),"breves='oui'"), -array('sql_update','spip_groupes_mots',array('tables_liees'=>"concat(tables_liees,'rubriques,')"),"rubriques='oui'"), -array('sql_update','spip_groupes_mots',array('tables_liees'=>"concat(tables_liees,'syndic,')"),"syndic='oui'"), + array('sql_alter', "TABLE spip_groupes_mots CHANGE `tables` tables_liees text DEFAULT '' NOT NULL AFTER obligatoire"), + // si tables a ete cree on le renomme + array('sql_alter', "TABLE spip_groupes_mots ADD tables_liees text DEFAULT '' NOT NULL AFTER obligatoire"), + // sinon on l'ajoute + array('sql_update', 'spip_groupes_mots', array('tables_liees' => "''"), "articles REGEXP '.*'"), + // si le champ articles est encore la, on reinit la conversion + array( + 'sql_update', + 'spip_groupes_mots', + array('tables_liees' => "concat(tables_liees,'articles,')"), + "articles='oui'" + ), + // sinon ces 4 requetes ne feront rien + array('sql_update', 'spip_groupes_mots', array('tables_liees' => "concat(tables_liees,'breves,')"), "breves='oui'"), + array( + 'sql_update', + 'spip_groupes_mots', + array('tables_liees' => "concat(tables_liees,'rubriques,')"), + "rubriques='oui'" + ), + array('sql_update', 'spip_groupes_mots', array('tables_liees' => "concat(tables_liees,'syndic,')"), "syndic='oui'"), ); - -// Reunir en une seule table les liens de documents -// spip_documents_articles et spip_documents_forum -function maj_12008 () { +/** + * Mise à jour 12008 : Réunir en une seule table les liens de documents + * spip_documents_articles et spip_documents_forum + */ +function maj_12008() { // Creer spip_documents_liens global $tables_auxiliaires; include_spip('base/auxiliaires'); - $v = $tables_auxiliaires[$k='spip_documents_liens']; + $v = $tables_auxiliaires[$k = 'spip_documents_liens']; sql_create($k, $v['field'], $v['key'], false, false); // Recopier les donnees foreach (array('article', 'breve', 'rubrique', 'auteur', 'forum') as $l) { - if ($s = sql_select('*', 'spip_documents_'.$l.'s') - OR $s = sql_select('*', 'spip_documents_'.$l)) { + if ($s = sql_select('*', 'spip_documents_' . $l . 's') + or $s = sql_select('*', 'spip_documents_' . $l) + ) { $tampon = array(); while ($t = sql_fetch($s)) { // transformer id_xx=N en (id_objet=N, objet=xx) @@ -142,8 +184,8 @@ function maj_12008 () { unset($t["id_$l"]); unset($t['maj']); $tampon[] = $t; - if (count($tampon)>10000) { - sql_insertq_multi('spip_documents_liens',$tampon); + if (count($tampon) > 10000) { + sql_insertq_multi('spip_documents_liens', $tampon); $tampon = array(); } } @@ -156,42 +198,70 @@ function maj_12008 () { $GLOBALS['maj'][12008] = array( //array('sql_drop_table',"spip_documents_liens"), // tant pis pour ceux qui ont joue a 11974 -array('sql_alter',"TABLE spip_documents_liens DROP PRIMARY KEY"), -array('sql_alter',"TABLE spip_documents_liens ADD id_objet bigint(21) DEFAULT '0' NOT NULL AFTER id_document"), -array('sql_alter',"TABLE spip_documents_liens ADD objet VARCHAR (25) DEFAULT '' NOT NULL AFTER id_objet"), -array('sql_update','spip_documents_liens',array('id_objet'=>"id_article",'objet'=>"'article'"),"id_article IS NOT NULL AND id_article>0"), -array('sql_update','spip_documents_liens',array('id_objet'=>"id_rubrique",'objet'=>"'rubrique'"),"id_rubrique IS NOT NULL AND id_rubrique>0"), -array('sql_update','spip_documents_liens',array('id_objet'=>"id_breve",'objet'=>"'breve'"),"id_breve IS NOT NULL AND id_breve>0"), -array('sql_update','spip_documents_liens',array('id_objet'=>"id_auteur",'objet'=>"'auteur'"),"id_auteur IS NOT NULL AND id_auteur>0"), -array('sql_update','spip_documents_liens',array('id_objet'=>"id_forum",'objet'=>"'forum'"),"id_forum IS NOT NULL AND id_forum>0"), -array('sql_alter',"TABLE spip_documents_liens ADD PRIMARY KEY (id_document,id_objet,objet)"), -array('sql_alter',"TABLE spip_documents_liens DROP id_article"), -array('sql_alter',"TABLE spip_documents_liens DROP id_rubrique"), -array('sql_alter',"TABLE spip_documents_liens DROP id_breve"), -array('sql_alter',"TABLE spip_documents_liens DROP id_auteur"), -array('sql_alter',"TABLE spip_documents_liens DROP id_forum"), -array('maj_12008'), + array('sql_alter', "TABLE spip_documents_liens DROP PRIMARY KEY"), + array('sql_alter', "TABLE spip_documents_liens ADD id_objet bigint(21) DEFAULT '0' NOT NULL AFTER id_document"), + array('sql_alter', "TABLE spip_documents_liens ADD objet VARCHAR (25) DEFAULT '' NOT NULL AFTER id_objet"), + array( + 'sql_update', + 'spip_documents_liens', + array('id_objet' => "id_article", 'objet' => "'article'"), + "id_article IS NOT NULL AND id_article>0" + ), + array( + 'sql_update', + 'spip_documents_liens', + array('id_objet' => "id_rubrique", 'objet' => "'rubrique'"), + "id_rubrique IS NOT NULL AND id_rubrique>0" + ), + array( + 'sql_update', + 'spip_documents_liens', + array('id_objet' => "id_breve", 'objet' => "'breve'"), + "id_breve IS NOT NULL AND id_breve>0" + ), + array( + 'sql_update', + 'spip_documents_liens', + array('id_objet' => "id_auteur", 'objet' => "'auteur'"), + "id_auteur IS NOT NULL AND id_auteur>0" + ), + array( + 'sql_update', + 'spip_documents_liens', + array('id_objet' => "id_forum", 'objet' => "'forum'"), + "id_forum IS NOT NULL AND id_forum>0" + ), + array('sql_alter', "TABLE spip_documents_liens ADD PRIMARY KEY (id_document,id_objet,objet)"), + array('sql_alter', "TABLE spip_documents_liens DROP id_article"), + array('sql_alter', "TABLE spip_documents_liens DROP id_rubrique"), + array('sql_alter', "TABLE spip_documents_liens DROP id_breve"), + array('sql_alter', "TABLE spip_documents_liens DROP id_auteur"), + array('sql_alter', "TABLE spip_documents_liens DROP id_forum"), + array('maj_12008'), ); // destruction des tables spip_documents_articles etc, cf. 12008 $GLOBALS['maj'][12009] = array( -array('sql_drop_table',"spip_documents_articles"), -array('sql_drop_table',"spip_documents_breves"), -array('sql_drop_table',"spip_documents_rubriques"), -array('sql_drop_table',"spip_documents_auteurs"), # plugin #FORMULAIRE_UPLOAD -array('sql_drop_table',"spip_documents_syndic") # plugin podcast_client + array('sql_drop_table', "spip_documents_articles"), + array('sql_drop_table', "spip_documents_breves"), + array('sql_drop_table', "spip_documents_rubriques"), + array('sql_drop_table', "spip_documents_auteurs"), # plugin #FORMULAIRE_UPLOAD + array('sql_drop_table', "spip_documents_syndic") # plugin podcast_client ); // destruction des champs articles breves rubriques et syndic, cf. 11961 $GLOBALS['maj'][12010] = array( -array('sql_alter',"TABLE spip_groupes_mots DROP articles"), -array('sql_alter',"TABLE spip_groupes_mots DROP breves"), -array('sql_alter',"TABLE spip_groupes_mots DROP rubriques"), -array('sql_alter',"TABLE spip_groupes_mots DROP syndic"), + array('sql_alter', "TABLE spip_groupes_mots DROP articles"), + array('sql_alter', "TABLE spip_groupes_mots DROP breves"), + array('sql_alter', "TABLE spip_groupes_mots DROP rubriques"), + array('sql_alter', "TABLE spip_groupes_mots DROP syndic"), ); -function maj_13135 () { +/** + * Mise à jour 13135 : réparer le calcul des rubriques ayant des articles postdatés + */ +function maj_13135() { include_spip('inc/rubriques'); calculer_prochain_postdate(); @@ -208,20 +278,25 @@ $GLOBALS['maj'][13333] = array(array('upgrade_types_documents')); // http://archives.rezo.net/spip-zone.mbox/200903.mbox/%3Cbfc33ad70903141606q2e4c53f2k4fef6b45e611a04f@mail.gmail.com%3E $GLOBALS['maj'][13833] = array( -array('sql_alter',"TABLE spip_documents_liens ADD INDEX objet(id_objet,objet)")) -; + array('sql_alter', "TABLE spip_documents_liens ADD INDEX objet(id_objet,objet)") +); // Fin upgrade commun branche 2.0 $GLOBALS['maj'][13904] = array( -array('sql_alter',"TABLE spip_auteurs ADD webmestre varchar(3) DEFAULT 'non' NOT NULL"), -array('sql_update','spip_auteurs',array('webmestre'=>"'oui'"),sql_in("id_auteur",defined('_ID_WEBMESTRES')?explode(':',_ID_WEBMESTRES):(autoriser('configurer')?array($GLOBALS['visiteur_session']['id_auteur']):array(0)))) // le webmestre est celui qui fait l'upgrade si rien de defini -) -; + array('sql_alter', "TABLE spip_auteurs ADD webmestre varchar(3) DEFAULT 'non' NOT NULL"), + array( + 'sql_update', + 'spip_auteurs', + array('webmestre' => "'oui'"), + sql_in("id_auteur", defined('_ID_WEBMESTRES') ? explode(':', + _ID_WEBMESTRES) : (autoriser('configurer') ? array($GLOBALS['visiteur_session']['id_auteur']) : array(0))) + ) // le webmestre est celui qui fait l'upgrade si rien de defini +); // sites plantes en mode "'su" au lieu de "sus" $GLOBALS['maj'][13929] = array( - array('sql_update',"spip_syndic",array('syndication'=>"'sus'"),"syndication LIKE '\\'%'") + array('sql_update', "spip_syndic", array('syndication' => "'sus'"), "syndication LIKE '\\'%'") ); // Types de fichiers m4a/m4b/m4p/m4u/m4v/dv @@ -230,7 +305,7 @@ $GLOBALS['maj'][14558] = array(array('upgrade_types_documents')); // refaire les upgrade dont les numeros sont inferieurs a ceux de la branche 2.0 // etre sur qu'ils sont bien unipotents(?)... -$GLOBALS['maj'][14559] = $GLOBALS['maj'][13904]+$GLOBALS['maj'][13929]+$GLOBALS['maj'][14558]; +$GLOBALS['maj'][14559] = $GLOBALS['maj'][13904] + $GLOBALS['maj'][13929] + $GLOBALS['maj'][14558]; // La version 14588 etait une mauvaise piste: // Retour en arriere pour ceux qui l'ont subi, ne rien faire sinon @@ -238,16 +313,22 @@ if (@$GLOBALS['meta']['version_installee'] >= 14588) { // "mode" est un mot-cle d'Oracle $GLOBALS['maj'][14588] = array( - array('sql_alter',"TABLE spip_documents DROP INDEX mode"), - array('sql_alter',"TABLE spip_documents CHANGE mode genre ENUM('vignette', 'image', 'document') DEFAULT 'document' NOT NULL"), - array('sql_alter',"TABLE spip_documents ADD INDEX genre(genre)") - ); + array('sql_alter', "TABLE spip_documents DROP INDEX mode"), + array( + 'sql_alter', + "TABLE spip_documents CHANGE mode genre ENUM('vignette', 'image', 'document') DEFAULT 'document' NOT NULL" + ), + array('sql_alter', "TABLE spip_documents ADD INDEX genre(genre)") + ); // solution moins intrusive au pb de mot-cle d'Oracle, retour avant 14588 $GLOBALS['maj'][14598] = array( - array('sql_alter',"TABLE spip_documents DROP INDEX genre"), - array('sql_alter',"TABLE spip_documents CHANGE genre mode ENUM('vignette', 'image', 'document') DEFAULT 'document' NOT NULL"), - array('sql_alter',"TABLE spip_documents ADD INDEX mode(mode)") - ); + array('sql_alter', "TABLE spip_documents DROP INDEX genre"), + array( + 'sql_alter', + "TABLE spip_documents CHANGE genre mode ENUM('vignette', 'image', 'document') DEFAULT 'document' NOT NULL" + ), + array('sql_alter', "TABLE spip_documents ADD INDEX mode(mode)") + ); } // Restauration correcte des types mime des fichiers Ogg @@ -260,215 +341,289 @@ $GLOBALS['maj'][15676] = array(array('upgrade_types_documents')); $GLOBALS['maj'][15827] = array(array('upgrade_types_documents')); $GLOBALS['maj'][16428] = array( - array('maj_liens','auteur'), // creer la table liens - array('maj_liens','auteur','article'), - array('sql_drop_table',"spip_auteurs_articles"), - array('maj_liens','auteur','rubrique'), - array('sql_drop_table',"spip_auteurs_rubriques"), - array('maj_liens','auteur','message'), - array('sql_drop_table',"spip_auteurs_messages"), + array('maj_liens', 'auteur'), // creer la table liens + array('maj_liens', 'auteur', 'article'), + array('sql_drop_table', "spip_auteurs_articles"), + array('maj_liens', 'auteur', 'rubrique'), + array('sql_drop_table', "spip_auteurs_rubriques"), + array('maj_liens', 'auteur', 'message'), + array('sql_drop_table', "spip_auteurs_messages"), ); -// Reunir en une seule table les liens de documents -// spip_documents_articles et spip_documents_forum -function maj_liens($pivot,$l='') { - - @define('_LOG_FILTRE_GRAVITE',8); - - $exceptions_pluriel = array('forum'=>'forum','syndic'=>'syndic'); - - $pivot = preg_replace(',[^\w],','',$pivot); // securite - $pivots = (isset($exceptions_pluriel[$pivot])?$exceptions_pluriel[$pivot]:$pivot."s"); - $liens = "spip_".$pivots."_liens"; - $id_pivot = "id_".$pivot; +/** + * Mise à jour des tables de liens + * + * Crée la table de lien au nouveau format (spip_xx_liens) ou insère + * les données d'ancien format dans la nouveau format. + * + * Par exemple pour réunir en une seule table les liens de documents, + * spip_documents_articles et spip_documents_forum + * + * Supprime la table au vieux format une fois les données transférées. + * + * @uses creer_ou_upgrader_table() + * @uses maj_liens_insertq_multi_check() + * + * @param string $pivot + * Nom de la table pivot, tel que `auteur` + * @param string $l + * Vide : crée la table de lien pivot. + * Sinon, nom de la table à lier, tel que `article`, et dans ce cas là, + * remplit spip_auteurs_liens à partir de spip_auteurs_articles. + */ +function maj_liens($pivot, $l = '') { + + @define('_LOG_FILTRE_GRAVITE', 8); + + $exceptions_pluriel = array('forum' => 'forum', 'syndic' => 'syndic'); + + $pivot = preg_replace(',[^\w],', '', $pivot); // securite + $pivots = (isset($exceptions_pluriel[$pivot]) ? $exceptions_pluriel[$pivot] : $pivot . "s"); + $liens = "spip_" . $pivots . "_liens"; + $id_pivot = "id_" . $pivot; // Creer spip_auteurs_liens global $tables_auxiliaires; if (!$l) { include_spip('base/auxiliaires'); include_spip('base/create'); creer_ou_upgrader_table($liens, $tables_auxiliaires[$liens], false); - } - else { + } else { // Preparer - $l = preg_replace(',[^\w],','',$l); // securite + $l = preg_replace(',[^\w],', '', $l); // securite $primary = "id_$l"; - $objet = ($l=='syndic'?'site':$l); - $ls = (isset($exceptions_pluriel[$l])?$exceptions_pluriel[$l]:$l."s"); - $ancienne_table = 'spip_'.$pivots.'_'.$ls; + $objet = ($l == 'syndic' ? 'site' : $l); + $ls = (isset($exceptions_pluriel[$l]) ? $exceptions_pluriel[$l] : $l . "s"); + $ancienne_table = 'spip_' . $pivots . '_' . $ls; $pool = 400; - $trouver_table = charger_fonction('trouver_table','base'); - if (!$desc = $trouver_table($ancienne_table)) + $trouver_table = charger_fonction('trouver_table', 'base'); + if (!$desc = $trouver_table($ancienne_table)) { return; + } // securite pour ne pas perdre de donnees - if (!$trouver_table($liens)) + if (!$trouver_table($liens)) { return; + } $champs = $desc['field']; - if (isset($champs['maj'])) unset($champs['maj']); - if (isset($champs[$primary])) unset($champs[$primary]); + if (isset($champs['maj'])) { + unset($champs['maj']); + } + if (isset($champs[$primary])) { + unset($champs[$primary]); + } $champs = array_keys($champs); // ne garder que les champs qui existent sur la table destination - if ($desc_cible = $trouver_table($liens)){ - $champs = array_intersect($champs,array_keys($desc_cible['field'])); + if ($desc_cible = $trouver_table($liens)) { + $champs = array_intersect($champs, array_keys($desc_cible['field'])); } $champs[] = "$primary as id_objet"; $champs[] = "'$objet' as objet"; - $champs = implode(', ',$champs); + $champs = implode(', ', $champs); // Recopier les donnees $sub_pool = 100; - while ($ids = array_map('reset',sql_allfetsel("$primary",$ancienne_table,'','','',"0,$sub_pool"))){ + while ($ids = array_map('reset', sql_allfetsel("$primary", $ancienne_table, '', '', '', "0,$sub_pool"))) { $insert = array(); - foreach($ids as $id){ - $n = sql_countsel($liens,"objet='$objet' AND id_objet=".intval($id)); - while ($t = sql_allfetsel($champs, $ancienne_table,"$primary=".intval($id),'',$id_pivot,"$n,$pool")) { - $n+=count($t); + foreach ($ids as $id) { + $n = sql_countsel($liens, "objet='$objet' AND id_objet=" . intval($id)); + while ($t = sql_allfetsel($champs, $ancienne_table, "$primary=" . intval($id), '', $id_pivot, "$n,$pool")) { + $n += count($t); // empiler en s'assurant a minima de l'unicite - while ($r = array_shift($t)) - $insert[$r[$id_pivot].':'.$r['id_objet']] = $r; - if (count($insert)>=$sub_pool){ - maj_liens_insertq_multi_check($liens,$insert,$tables_auxiliaires[$liens]); + while ($r = array_shift($t)) { + $insert[$r[$id_pivot] . ':' . $r['id_objet']] = $r; + } + if (count($insert) >= $sub_pool) { + maj_liens_insertq_multi_check($liens, $insert, $tables_auxiliaires[$liens]); $insert = array(); } // si timeout, sortir, la relance nous ramenera dans cette fonction // et on verifiera/repartira de la - if (time() >= _TIME_OUT) return; + if (time() >= _TIME_OUT) { + return; + } } - if (time() >= _TIME_OUT) return; + if (time() >= _TIME_OUT) { + return; + } + } + if (count($insert)) { + maj_liens_insertq_multi_check($liens, $insert, $tables_auxiliaires[$liens]); } - if (count($insert)) - maj_liens_insertq_multi_check($liens,$insert,$tables_auxiliaires[$liens]); - sql_delete ($ancienne_table, sql_in($primary,$ids)); + sql_delete($ancienne_table, sql_in($primary, $ids)); } } } -function maj_liens_insertq_multi_check($table,$couples,$desc=array()){ + +/** + * Insère des données dans une table de liaison de façon un peu sécurisée + * + * Si une insertion multiple échoue, on réinsère ligne par ligne. + * + * @param string $table Table de liaison + * @param array $couples Tableau de couples de données à insérer + * @param array $desc Description de la table de liaison + * @return void + **/ +function maj_liens_insertq_multi_check($table, $couples, $desc = array()) { $n_before = sql_countsel($table); - sql_insertq_multi($table,$couples,$desc); + sql_insertq_multi($table, $couples, $desc); $n_after = sql_countsel($table); - if (($n_after-$n_before)==count($couples)) + if (($n_after - $n_before) == count($couples)) { return; + } // si ecart, on recommence l'insertion ligne par ligne... // moins rapide mais secure : seul le couple en doublon echouera, et non toute la serie - foreach($couples as $c) - sql_insertq($table,$c,$desc); + foreach ($couples as $c) { + sql_insertq($table, $c, $desc); + } } $GLOBALS['maj'][17311] = array( - array('ecrire_meta',"multi_objets",implode(',', - array_diff( - array($GLOBALS['meta']['multi_rubriques']=='oui'?'spip_rubriques':'',$GLOBALS['meta']['multi_articles']=='oui'?'spip_articles':''), - array('') - ))), - array('ecrire_meta',"gerer_trad_objets",implode(',', - array_diff( - array($GLOBALS['meta']['gerer_trad']=='oui'?'spip_articles':''), - array('') - ))), + array( + 'ecrire_meta', + "multi_objets", + implode(',', + array_diff( + array( + (isset($GLOBALS['meta']['multi_rubriques']) and $GLOBALS['meta']['multi_rubriques'] == 'oui') + ? 'spip_rubriques' : '', + (isset($GLOBALS['meta']['multi_articles']) and $GLOBALS['meta']['multi_articles'] == 'oui') + ? 'spip_articles' : '' + ), + array('') + )) + ), + array( + 'ecrire_meta', + "gerer_trad_objets", + implode(',', + array_diff( + array( + (isset($GLOBALS['meta']['gerer_trad']) and $GLOBALS['meta']['gerer_trad'] == 'oui') + ? 'spip_articles' : '' + ), + array('') + )) + ), ); $GLOBALS['maj'][17555] = array( - array('sql_alter',"TABLE spip_resultats ADD table_objet varchar(30) DEFAULT '' NOT NULL"), - array('sql_alter',"TABLE spip_resultats ADD serveur char(16) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_resultats ADD table_objet varchar(30) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_resultats ADD serveur char(16) DEFAULT '' NOT NULL"), ); $GLOBALS['maj'][17563] = array( - array('sql_alter',"TABLE spip_articles ADD virtuel VARCHAR(255) DEFAULT '' NOT NULL"), - array('sql_update','spip_articles',array('virtuel'=>'SUBSTRING(chapo,2)','chapo'=>"''"),"chapo LIKE '=_%'"), + array('sql_alter', "TABLE spip_articles ADD virtuel VARCHAR(255) DEFAULT '' NOT NULL"), + array('sql_update', 'spip_articles', array('virtuel' => 'SUBSTRING(chapo,2)', 'chapo' => "''"), "chapo LIKE '=_%'"), ); $GLOBALS['maj'][17577] = array( - array('maj_tables',array('spip_jobs','spip_jobs_liens')), + array('maj_tables', array('spip_jobs', 'spip_jobs_liens')), ); $GLOBALS['maj'][17743] = array( - array('sql_update','spip_auteurs',array('prefs'=>'bio','bio'=>"''"),"statut='nouveau' AND bio<>''"), + array('sql_update', 'spip_auteurs', array('prefs' => 'bio', 'bio' => "''"), "statut='nouveau' AND bio<>''"), ); $GLOBALS['maj'][18219] = array( - array('sql_alter',"TABLE spip_rubriques DROP id_import"), - array('sql_alter',"TABLE spip_rubriques DROP export"), + array('sql_alter', "TABLE spip_rubriques DROP id_import"), + array('sql_alter', "TABLE spip_rubriques DROP export"), ); $GLOBALS['maj'][18310] = array( - array('sql_alter',"TABLE spip_auteurs_liens CHANGE vu vu VARCHAR(6) DEFAULT 'non' NOT NULL"), + array('sql_alter', "TABLE spip_auteurs_liens CHANGE vu vu VARCHAR(6) DEFAULT 'non' NOT NULL"), ); $GLOBALS['maj'][18597] = array( - array('sql_alter',"TABLE spip_rubriques ADD profondeur smallint(5) DEFAULT '0' NOT NULL"), + array('sql_alter', "TABLE spip_rubriques ADD profondeur smallint(5) DEFAULT '0' NOT NULL"), array('maj_propager_les_secteurs'), ); $GLOBALS['maj'][18955] = array( - array('sql_alter',"TABLE spip_auteurs_liens ADD INDEX id_objet (id_objet)"), - array('sql_alter',"TABLE spip_auteurs_liens ADD INDEX objet (objet)"), + array('sql_alter', "TABLE spip_auteurs_liens ADD INDEX id_objet (id_objet)"), + array('sql_alter', "TABLE spip_auteurs_liens ADD INDEX objet (objet)"), ); - -function maj_propager_les_secteurs(){ +/** + * Mise à jour pour recalculer les secteurs des rubriques + * + * @uses propager_les_secteurs() + **/ +function maj_propager_les_secteurs() { include_spip('inc/rubriques'); propager_les_secteurs(); } - -function maj_collation_sqlite(){ +/** + * Mise à jour des bdd SQLite pour réparer les collation des champs texte + * pour les passer en NOCASE + * + * @uses base_lister_toutes_tables() + * @uses _sqlite_remplacements_definitions_table() + **/ +function maj_collation_sqlite() { include_spip('base/dump'); $tables = base_lister_toutes_tables(); // rien a faire si base non sqlite - if (strncmp($GLOBALS['connexions'][0]['type'],'sqlite',6)!==0) + if (strncmp($GLOBALS['connexions'][0]['type'], 'sqlite', 6) !== 0) { return; + } - $trouver_table = charger_fonction('trouver_table','base'); + $trouver_table = charger_fonction('trouver_table', 'base'); // forcer le vidage de cache $trouver_table(''); // cas particulier spip_auteurs : retablir le collate binary sur le login $desc = $trouver_table("spip_auteurs"); - spip_log("spip_auteurs : ".var_export($desc['field'],true),"maj."._LOG_INFO_IMPORTANTE); - if (stripos($desc['field']['login'],"BINARY")===false){ - spip_log("Retablir champ login BINARY sur table spip_auteurs","maj"); + spip_log("spip_auteurs : " . var_export($desc['field'], true), "maj." . _LOG_INFO_IMPORTANTE); + if (stripos($desc['field']['login'], "BINARY") === false) { + spip_log("Retablir champ login BINARY sur table spip_auteurs", "maj"); sql_alter("table spip_auteurs change login login VARCHAR(255) BINARY"); $trouver_table(''); $new_desc = $trouver_table("spip_auteurs"); - spip_log("Apres conversion spip_auteurs : ".var_export($new_desc['field'],true),"maj."._LOG_INFO_IMPORTANTE); + spip_log("Apres conversion spip_auteurs : " . var_export($new_desc['field'], true), "maj." . _LOG_INFO_IMPORTANTE); } - foreach ($tables as $table){ - if (time() >= _TIME_OUT) return; - if ($desc = $trouver_table($table)){ + foreach ($tables as $table) { + if (time() >= _TIME_OUT) { + return; + } + if ($desc = $trouver_table($table)) { $desc_collate = _sqlite_remplacements_definitions_table($desc['field']); - if ($d=array_diff($desc['field'],$desc_collate)){ - spip_log("Table $table COLLATE incorrects","maj"); + if ($d = array_diff($desc['field'], $desc_collate)) { + spip_log("Table $table COLLATE incorrects", "maj"); // cas particulier spip_urls : // supprimer les doublons avant conversion sinon echec (on garde les urls les plus recentes) - if ($table=='spip_urls'){ + if ($table == 'spip_urls') { // par date DESC pour conserver les urls les plus recentes - $data = sql_allfetsel("*","spip_urls",'','','date DESC'); + $data = sql_allfetsel("*", "spip_urls", '', '', 'date DESC'); $urls = array(); - foreach ($data as $d){ - $key = $d['id_parent']."::".strtolower($d['url']); - if (!isset($urls[$key])) + foreach ($data as $d) { + $key = $d['id_parent'] . "::" . strtolower($d['url']); + if (!isset($urls[$key])) { $urls[$key] = true; - else { - spip_log("Suppression doublon dans spip_urls avant conversion : ".serialize($d),"maj."._LOG_INFO_IMPORTANTE); - sql_delete("spip_urls","id_parent=".sql_quote($d['id_parent'])." AND url=".sql_quote($d['url'])); + } else { + spip_log("Suppression doublon dans spip_urls avant conversion : " . serialize($d), + "maj." . _LOG_INFO_IMPORTANTE); + sql_delete("spip_urls", "id_parent=" . sql_quote($d['id_parent']) . " AND url=" . sql_quote($d['url'])); } } } - foreach ($desc['field'] as $field=>$type){ - if ($desc['field'][$field]!==$desc_collate[$field]){ - spip_log("Conversion COLLATE table $table","maj."._LOG_INFO_IMPORTANTE); - sql_alter("table $table change $field $field ".$desc_collate[$field]); + foreach ($desc['field'] as $field => $type) { + if ($desc['field'][$field] !== $desc_collate[$field]) { + spip_log("Conversion COLLATE table $table", "maj." . _LOG_INFO_IMPORTANTE); + sql_alter("table $table change $field $field " . $desc_collate[$field]); $trouver_table(''); $new_desc = $trouver_table($table); - spip_log("Apres conversion $table : ".var_export($new_desc['field'],true),"maj."._LOG_INFO_IMPORTANTE); + spip_log("Apres conversion $table : " . var_export($new_desc['field'], true), + "maj." . _LOG_INFO_IMPORTANTE); continue 2; // inutile de continuer pour cette table : un seul alter remet tout a jour en sqlite } } @@ -483,8 +638,8 @@ function maj_collation_sqlite(){ $GLOBALS['maj'][19236] = array( - array('sql_updateq','spip_meta',array('impt'=>'oui'),"nom='version_installee'"), // version base principale - array('sql_updateq','spip_meta',array('impt'=>'oui'),"nom LIKE '%_base_version'"), // version base plugins + array('sql_updateq', 'spip_meta', array('impt' => 'oui'), "nom='version_installee'"), // version base principale + array('sql_updateq', 'spip_meta', array('impt' => 'oui'), "nom LIKE '%_base_version'"), // version base plugins array('maj_collation_sqlite'), ); @@ -492,14 +647,60 @@ $GLOBALS['maj'][19268] = array( array('supprimer_toutes_sessions'), ); - +/** + * Supprime toutes les sessions des auteurs + * + * Obligera tous les auteurs à se reconnecter ! + **/ function supprimer_toutes_sessions() { spip_log("supprimer sessions auteur"); - $dir = opendir(_DIR_SESSIONS); - while(($f = readdir($dir)) !== false) { - spip_unlink(_DIR_SESSIONS . $f); - if (time() >= _TIME_OUT) return; + if ($dir = opendir(_DIR_SESSIONS)) { + while (($f = readdir($dir)) !== false) { + spip_unlink(_DIR_SESSIONS . $f); + if (time() >= _TIME_OUT) { + return; + } + } } } -?> +$GLOBALS['maj'][21676] = array( + array('ranger_cache_gd2'), +); + +/** + * Ranger les images de local/cache-gd2 dans des sous-rep + * + * http://core.spip.net/issues/3277 + */ +function ranger_cache_gd2() { + spip_log("ranger_cache_gd2"); + $base = _DIR_VAR . "cache-gd2/"; + if (is_dir($base) and is_readable($base)) { + if ($dir = opendir($base)) { + while (($f = readdir($dir)) !== false) { + if (!is_dir($base . $f) and strncmp($f, ".", 1) !== 0 + and preg_match(",[0-9a-f]{32}\.\w+,", $f) + ) { + $sub = substr($f, 0, 2); + $sub = sous_repertoire($base, $sub); + @rename($base . $f, $sub . substr($f, 2)); + @unlink($base . $f); // au cas ou le rename a foire (collision) + } + if (time() >= _TIME_OUT) { + return; + } + } + } + } +} + + +$GLOBALS['maj'][21742] = array( + array('sql_alter', "TABLE spip_articles CHANGE url_site url_site text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_articles CHANGE virtuel virtuel text DEFAULT '' NOT NULL"), +); + +$GLOBALS['maj'][23375] = array( + array('sql_alter', "TABLE spip_auteurs CHANGE prefs prefs text"), +); diff --git a/www/ecrire/maj/v009.php b/www/ecrire/maj/v009.php index 425d6e27..807b056c 100644 --- a/www/ecrire/maj/v009.php +++ b/www/ecrire/maj/v009.php @@ -3,17 +3,29 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des mises à jour de SPIP, versions 0.9* + * + * @package SPIP\Core\SQL\Upgrade + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function maj_v009_dist($version_installee, $version_cible) -{ +/** + * Mises à jour de SPIP n°009 + * + * @param float $version_installee Version actuelle + * @param float $version_cible Version de destination + **/ +function maj_v009_dist($version_installee, $version_cible) { if (upgrade_vers(0.98, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles ADD maj TIMESTAMP"); @@ -29,34 +41,38 @@ function maj_v009_dist($version_installee, $version_cible) spip_query("ALTER TABLE spip_auteurs ADD pgp BLOB NOT NULL"); spip_query("ALTER TABLE spip_auteurs_articles ADD INDEX id_auteur (id_auteur), ADD INDEX id_article (id_article)"); - + spip_query("ALTER TABLE spip_rubriques ADD maj TIMESTAMP"); spip_query("ALTER TABLE spip_rubriques ADD export VARCHAR(10) DEFAULT 'oui', ADD id_import BIGINT DEFAULT '0'"); - + spip_query("ALTER TABLE spip_breves ADD maj TIMESTAMP"); spip_query("ALTER TABLE spip_breves DROP INDEX id_breve"); spip_query("ALTER TABLE spip_breves DROP INDEX id_breve_2"); spip_query("ALTER TABLE spip_breves ADD INDEX id_rubrique (id_rubrique)"); - + spip_query("ALTER TABLE spip_forum ADD ip VARCHAR(16)"); spip_query("ALTER TABLE spip_forum ADD maj TIMESTAMP"); spip_query("ALTER TABLE spip_forum DROP INDEX id_forum"); spip_query("ALTER TABLE spip_forum ADD INDEX id_parent (id_parent), ADD INDEX id_rubrique (id_rubrique), ADD INDEX id_article(id_article), ADD INDEX id_breve(id_breve)"); - maj_version (0.98); + maj_version(0.98); } if (upgrade_vers(0.99, $version_installee, $version_cible)) { - + $result = spip_query("SELECT DISTINCT id_article FROM spip_forum WHERE id_article!=0 AND id_parent=0"); while ($row = sql_fetch($result)) { unset($forums_article); $id_article = $row['id_article']; $result2 = spip_query("SELECT id_forum FROM spip_forum WHERE id_article=$id_article"); - for (;;) { + for (; ;) { unset($forums); - while ($row2 = sql_fetch($result2)) $forums[] = $row2['id_forum']; - if (!$forums) break; + while ($row2 = sql_fetch($result2)) { + $forums[] = $row2['id_forum']; + } + if (!$forums) { + break; + } $forums = join(',', $forums); $forums_article[] = $forums; $result2 = spip_query("SELECT id_forum FROM spip_forum WHERE id_parent IN ($forums)"); @@ -64,17 +80,21 @@ function maj_v009_dist($version_installee, $version_cible) $forums_article = join(',', $forums_article); spip_query("UPDATE spip_forum SET id_article=$id_article WHERE id_forum IN ($forums_article)"); } - + $result = spip_query("SELECT DISTINCT id_breve FROM spip_forum WHERE id_breve!=0 AND id_parent=0"); while ($row = sql_fetch($result)) { unset($forums_breve); $id_breve = $row['id_breve']; $result2 = spip_query("SELECT id_forum FROM spip_forum WHERE id_breve=$id_breve"); - for (;;) { + for (; ;) { unset($forums); - while ($row2 = sql_fetch($result2)) $forums[] = $row2['id_forum']; - if (!$forums) break; + while ($row2 = sql_fetch($result2)) { + $forums[] = $row2['id_forum']; + } + if (!$forums) { + break; + } $forums = join(',', $forums); $forums_breve[] = $forums; $result2 = spip_query("SELECT id_forum FROM spip_forum WHERE id_parent IN ($forums)"); @@ -82,18 +102,22 @@ function maj_v009_dist($version_installee, $version_cible) $forums_breve = join(',', $forums_breve); spip_query("UPDATE spip_forum SET id_breve=$id_breve WHERE id_forum IN ($forums_breve)"); } - + $result = spip_query("SELECT DISTINCT id_rubrique FROM spip_forum WHERE id_rubrique!=0 AND id_parent=0"); while ($row = sql_fetch($result)) { unset($forums_rubrique); $id_rubrique = $row['id_rubrique']; $result2 = spip_query("SELECT id_forum FROM spip_forum WHERE id_rubrique=$id_rubrique"); - for (;;) { + for (; ;) { unset($forums); - while ($row2 = sql_fetch($result2)) $forums[] = $row2['id_forum']; - if (!$forums) break; + while ($row2 = sql_fetch($result2)) { + $forums[] = $row2['id_forum']; + } + if (!$forums) { + break; + } $forums = join(',', $forums); $forums_rubrique[] = $forums; $result2 = spip_query("SELECT id_forum FROM spip_forum WHERE id_parent IN ($forums)"); @@ -102,12 +126,12 @@ function maj_v009_dist($version_installee, $version_cible) spip_query("UPDATE spip_forum SET id_rubrique=$id_rubrique WHERE id_forum IN ($forums_rubrique)"); } - maj_version (0.99); + maj_version(0.99); } if (upgrade_vers(0.997, $version_installee, $version_cible)) { spip_query("DROP TABLE spip_index"); - maj_version (0.997); + maj_version(0.997); } if (upgrade_vers(0.999, $version_installee, $version_cible)) { @@ -116,13 +140,11 @@ function maj_v009_dist($version_installee, $version_cible) spip_query("ALTER TABLE spip_auteurs ADD htpass tinyblob NOT NULL"); $result = spip_query("SELECT id_auteur, pass FROM spip_auteurs WHERE pass!=''"); - while ($r= sql_fetch($result)) { + while ($r = sql_fetch($result)) { $htpass = generer_htpass($r['pass']); $pass = md5($pass); spip_query("UPDATE spip_auteurs SET pass='$pass', htpass='$htpass' WHERE id_auteur=" . $r['id_auteur']); } - maj_version (0.999); + maj_version(0.999); } } - -?> diff --git a/www/ecrire/maj/v010.php b/www/ecrire/maj/v010.php index c3429f0c..4aeb93ee 100644 --- a/www/ecrire/maj/v010.php +++ b/www/ecrire/maj/v010.php @@ -3,44 +3,54 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des mises à jour de SPIP, versions 1.0* + * + * @package SPIP\Core\SQL\Upgrade + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +/** + * Mises à jour de SPIP n°010 + * + * @param float $version_installee Version actuelle + * @param float $version_cible Version de destination + **/ +function maj_v010_dist($version_installee, $version_cible) { -function maj_v010_dist($version_installee, $version_cible) -{ - if (upgrade_vers(1.01, $version_installee, $version_cible)) { spip_query("UPDATE spip_forum SET statut='publie' WHERE statut=''"); - maj_version (1.01); + maj_version(1.01); } - + if (upgrade_vers(1.02, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_forum ADD id_auteur BIGINT DEFAULT '0' NOT NULL"); - maj_version (1.02); + maj_version(1.02); } if (upgrade_vers(1.03, $version_installee, $version_cible)) { spip_query("DROP TABLE spip_maj"); - maj_version (1.03); + maj_version(1.03); } if (upgrade_vers(1.04, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles ADD accepter_forum VARCHAR(3)"); - maj_version (1.04); + maj_version(1.04); } if (upgrade_vers(1.05, $version_installee, $version_cible)) { spip_query("DROP TABLE spip_petition"); spip_query("DROP TABLE spip_signatures_petition"); - maj_version (1.05); + maj_version(1.05); } } - - -?> diff --git a/www/ecrire/maj/v011.php b/www/ecrire/maj/v011.php index 68d5f991..1acaca24 100644 --- a/www/ecrire/maj/v011.php +++ b/www/ecrire/maj/v011.php @@ -3,25 +3,33 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; - +/** + * Gestion des mises à jour de SPIP, versions 1.1* + * + * @package SPIP\Core\SQL\Upgrade + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function maj_v011_dist($version_installee, $version_cible) -{ +/** + * Mises à jour de SPIP n°011 + * + * @param float $version_installee Version actuelle + * @param float $version_cible Version de destination + **/ +function maj_v011_dist($version_installee, $version_cible) { if (upgrade_vers(1.1, $version_installee, $version_cible)) { spip_query("DROP TABLE spip_petition"); spip_query("DROP TABLE spip_signatures_petition"); - maj_version (1.1); + maj_version(1.1); } } - - -?> diff --git a/www/ecrire/maj/v012.php b/www/ecrire/maj/v012.php index 4aed6a11..7edf8cd0 100644 --- a/www/ecrire/maj/v012.php +++ b/www/ecrire/maj/v012.php @@ -3,17 +3,29 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des mises à jour de SPIP, versions 1.2* + * + * @package SPIP\Core\SQL\Upgrade + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function maj_v012_dist($version_installee, $version_cible) -{ +/** + * Mises à jour de SPIP n°012 + * + * @param float $version_installee Version actuelle + * @param float $version_cible Version de destination + **/ +function maj_v012_dist($version_installee, $version_cible) { // Correction de l'oubli des modifs creations depuis 1.04 if (upgrade_vers(1.204, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles ADD accepter_forum VARCHAR(3) NOT NULL"); @@ -22,7 +34,7 @@ function maj_v012_dist($version_installee, $version_cible) spip_query("ALTER TABLE spip_auteurs ADD en_ligne datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"); spip_query("ALTER TABLE spip_auteurs ADD imessage VARCHAR(3) not null"); spip_query("ALTER TABLE spip_auteurs ADD messagerie VARCHAR(3) not null"); - maj_version (1.204); + maj_version(1.204); } if (upgrade_vers(1.207, $version_installee, $version_cible)) { @@ -32,7 +44,7 @@ function maj_v012_dist($version_installee, $version_cible) // Declencher le calcul des rubriques publiques include_spip('inc/rubriques'); calculer_rubriques(); - maj_version (1.207); + maj_version(1.207); } if (upgrade_vers(1.208, $version_installee, $version_cible)) { @@ -50,14 +62,14 @@ function maj_v012_dist($version_installee, $version_cible) } spip_query("ALTER TABLE spip_auteurs_messages DROP statut"); - maj_version (1.208); + maj_version(1.208); } if (upgrade_vers(1.209, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_syndic ADD maj TIMESTAMP"); spip_query("ALTER TABLE spip_syndic_articles ADD maj TIMESTAMP"); spip_query("ALTER TABLE spip_messages ADD maj TIMESTAMP"); - maj_version (1.209); + maj_version(1.209); } if (upgrade_vers(1.210, $version_installee, $version_cible)) { @@ -74,9 +86,6 @@ function maj_v012_dist($version_installee, $version_cible) stripslashes_base('spip_signatures', array('nom_email', 'nom_site', 'message')); stripslashes_base('spip_syndic', array('nom_site', 'descriptif')); stripslashes_base('spip_syndic_articles', array('titre', 'lesauteurs')); - maj_version (1.210); + maj_version(1.210); } } - - -?> diff --git a/www/ecrire/maj/v013.php b/www/ecrire/maj/v013.php index efbf3628..bb13333f 100644 --- a/www/ecrire/maj/v013.php +++ b/www/ecrire/maj/v013.php @@ -3,18 +3,29 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; - +/** + * Gestion des mises à jour de SPIP, versions 1.3* + * + * @package SPIP\Core\SQL\Upgrade + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function maj_v013_dist($version_installee, $version_cible) -{ +/** + * Mises à jour de SPIP n°013 + * + * @param float $version_installee Version actuelle + * @param float $version_cible Version de destination + **/ +function maj_v013_dist($version_installee, $version_cible) { if (upgrade_vers(1.3, $version_installee, $version_cible)) { // Modifier la syndication (pour liste de sites) spip_query("ALTER TABLE spip_syndic ADD syndication VARCHAR(3) NOT NULL"); @@ -25,12 +36,12 @@ function maj_v013_dist($version_installee, $version_cible) // Statut pour articles syndication, pour pouvoir desactiver un article spip_query("ALTER TABLE spip_syndic_articles ADD statut VARCHAR(10) NOT NULL"); spip_query("UPDATE spip_syndic_articles SET statut='publie'"); - maj_version (1.3); + maj_version(1.3); } if (upgrade_vers(1.301, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_forum ADD id_syndic bigint(21) DEFAULT '0' NOT NULL"); - maj_version (1.301); + maj_version(1.301); } if (upgrade_vers(1.302, $version_installee, $version_cible)) { @@ -38,28 +49,25 @@ function maj_v013_dist($version_installee, $version_cible) # spip_query("ALTER TABLE spip_forum_cache DROP INDEX fichier"); # spip_query("ALTER TABLE spip_forum_cache ADD PRIMARY KEY (fichier, id_forum, id_article, id_rubrique, id_breve, id_syndic)"); spip_query("ALTER TABLE spip_forum ADD INDEX id_syndic (id_syndic)"); - maj_version (1.302); + maj_version(1.302); } if (upgrade_vers(1.303, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_rubriques ADD date datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"); spip_query("ALTER TABLE spip_syndic ADD date_syndic datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"); spip_query("UPDATE spip_syndic SET date_syndic=date"); - maj_version (1.303); + maj_version(1.303); } if (upgrade_vers(1.306, $version_installee, $version_cible)) { spip_query("DROP TABLE spip_index_syndic_articles"); spip_query("ALTER TABLE spip_syndic ADD date_index datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"); spip_query("ALTER TABLE spip_syndic ADD INDEX date_index (date_index)"); - maj_version (1.306); + maj_version(1.306); } if (upgrade_vers(1.307, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_syndic_articles ADD descriptif blob NOT NULL"); - maj_version (1.307); + maj_version(1.307); } } - - -?> diff --git a/www/ecrire/maj/v014.php b/www/ecrire/maj/v014.php index fb6a9060..4edc3dd0 100644 --- a/www/ecrire/maj/v014.php +++ b/www/ecrire/maj/v014.php @@ -3,45 +3,55 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; - - +/** + * Gestion des mises à jour de SPIP, versions 1.4* + * + * @package SPIP\Core\SQL\Upgrade + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function maj_v014_dist($version_installee, $version_cible) -{ +/** + * Mises à jour de SPIP n°014 + * + * @param float $version_installee Version actuelle + * @param float $version_cible Version de destination + **/ +function maj_v014_dist($version_installee, $version_cible) { if (upgrade_vers(1.404, $version_installee, $version_cible)) { spip_query("UPDATE spip_mots SET type='Mots sans groupe...' WHERE type=''"); $result = spip_query("SELECT * FROM spip_mots GROUP BY type"); - while($row = sql_fetch($result)) { - $type = addslashes($row['type']); - // Old style, doit echouer - spip_log('ne pas tenir compte de l erreur spip_groupes_mots ci-dessous:', 'mysql'); - spip_query("INSERT INTO spip_groupes_mots (titre, unseul, obligatoire, articles, breves, rubriques, syndic, 0minirezo, 1comite, 6forum) VALUES (\"$type\", 'non', 'non', 'oui', 'oui', 'non', 'oui', 'oui', 'oui', 'non')"); - // New style, devrait marcher - spip_query("INSERT INTO spip_groupes_mots (titre, unseul, obligatoire, articles, breves, rubriques, syndic, minirezo, comite, forum) VALUES (\"$type\", 'non', 'non', 'oui', 'oui', 'non', 'oui', 'oui', 'oui', 'non')"); + while ($row = sql_fetch($result)) { + $type = addslashes($row['type']); + // Old style, doit echouer + spip_log('ne pas tenir compte de l erreur spip_groupes_mots ci-dessous:', 'mysql'); + spip_query("INSERT INTO spip_groupes_mots (titre, unseul, obligatoire, articles, breves, rubriques, syndic, 0minirezo, 1comite, 6forum) VALUES (\"$type\", 'non', 'non', 'oui', 'oui', 'non', 'oui', 'oui', 'oui', 'non')"); + // New style, devrait marcher + spip_query("INSERT INTO spip_groupes_mots (titre, unseul, obligatoire, articles, breves, rubriques, syndic, minirezo, comite, forum) VALUES (\"$type\", 'non', 'non', 'oui', 'oui', 'non', 'oui', 'oui', 'oui', 'non')"); } sql_delete("spip_mots", "titre='kawax'"); - maj_version (1.404); + maj_version(1.404); } if (upgrade_vers(1.405, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_mots ADD id_groupe bigint(21) NOT NULL"); - + $result = spip_query("SELECT * FROM spip_groupes_mots"); - while($row = sql_fetch($result)) { - $id_groupe = addslashes($row['id_groupe']); - $type = addslashes($row['titre']); - spip_query("UPDATE spip_mots SET id_groupe = '$id_groupe' WHERE type='$type'"); + while ($row = sql_fetch($result)) { + $id_groupe = addslashes($row['id_groupe']); + $type = addslashes($row['titre']); + spip_query("UPDATE spip_mots SET id_groupe = '$id_groupe' WHERE type='$type'"); } - maj_version (1.405); + maj_version(1.405); } if (upgrade_vers(1.408, $version_installee, $version_cible)) { @@ -68,8 +78,8 @@ function maj_v014_dist($version_installee, $version_cible) $fichier = _DIR_IMG . $fichier; $taille = @filesize($fichier); // ici on n'a pas les fonctions absctract ! - $s = spip_query("INSERT INTO spip_documents (titre, id_type, fichier, mode, largeur, hauteur, taille) VALUES ('image $largeur x $hauteur', $id_type, '$fichier', 'vignette', '$largeur', '$hauteur', '$taille')"); - $id_document = mysql_insert_id($s); + spip_query("INSERT INTO spip_documents (titre, id_type, fichier, mode, largeur, hauteur, taille) VALUES ('image $largeur x $hauteur', $id_type, '$fichier', 'vignette', '$largeur', '$hauteur', '$taille')"); + $id_document = mysqli_insert_id(_mysql_link()); if ($id_document > 0) { spip_query("INSERT INTO spip_documents_articles (id_document, id_article) VALUES ($id_document, $id_article)"); $replace = "REPLACE($replace, ' non, prio (priori), pos (posteriori), abo (abonnement) - $accepter_forum = substr($GLOBALS['meta']["forums_publics"],0,3) ; + $accepter_forum = substr($GLOBALS['meta']["forums_publics"], 0, 3); $result = spip_query("ALTER TABLE spip_articles CHANGE accepter_forum accepter_forum CHAR(3) NOT NULL"); $result = spip_query("UPDATE spip_articles SET accepter_forum='$accepter_forum' WHERE accepter_forum != 'non'"); - maj_version (1.414); + maj_version(1.414); } /* @@ -110,7 +120,7 @@ function maj_v014_dist($version_installee, $version_cible) if (upgrade_vers(1.417, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_syndic_articles DROP date_index"); - maj_version (1.417); + maj_version(1.417); } if (upgrade_vers(1.418, $version_installee, $version_cible)) { @@ -119,49 +129,49 @@ function maj_v014_dist($version_installee, $version_cible) if ($webmaster = sql_fetch($result)) { ecrire_meta('email_webmaster', $webmaster['email']); } - maj_version (1.418); + maj_version(1.418); } if (upgrade_vers(1.419, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_auteurs ADD alea_actuel TINYTEXT DEFAULT ''"); spip_query("ALTER TABLE spip_auteurs ADD alea_futur TINYTEXT DEFAULT ''"); spip_query("UPDATE spip_auteurs SET alea_futur = FLOOR(32000*RAND())"); - maj_version (1.419); + maj_version(1.419); } if (upgrade_vers(1.420, $version_installee, $version_cible)) { spip_query("UPDATE spip_auteurs SET alea_actuel='' WHERE statut='nouveau'"); - maj_version (1.420); + maj_version(1.420); } - + if (upgrade_vers(1.421, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles ADD auteur_modif bigint(21) DEFAULT '0' NOT NULL"); spip_query("ALTER TABLE spip_articles ADD date_modif datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"); - maj_version (1.421); + maj_version(1.421); } if (upgrade_vers(1.432, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles DROP referers"); spip_query("ALTER TABLE spip_articles ADD referers INTEGER DEFAULT '0' NOT NULL"); spip_query("ALTER TABLE spip_articles ADD popularite INTEGER DEFAULT '0' NOT NULL"); - maj_version (1.432); + maj_version(1.432); } if (upgrade_vers(1.436, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_documents ADD date datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"); - maj_version (1.436); + maj_version(1.436); } if (upgrade_vers(1.437, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_visites ADD maj TIMESTAMP"); spip_query("ALTER TABLE spip_visites_referers ADD maj TIMESTAMP"); - maj_version (1.437); + maj_version(1.437); } if (upgrade_vers(1.438, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles ADD INDEX id_secteur (id_secteur)"); spip_query("ALTER TABLE spip_articles ADD INDEX statut (statut, date)"); - maj_version (1.438); + maj_version(1.438); } if (upgrade_vers(1.439, $version_installee, $version_cible)) { @@ -169,24 +179,24 @@ function maj_v014_dist($version_installee, $version_cible) spip_query("ALTER TABLE spip_syndic_articles ADD INDEX statut (statut)"); spip_query("ALTER TABLE spip_syndic_articles CHANGE url url VARCHAR(255) NOT NULL"); spip_query("ALTER TABLE spip_syndic_articles ADD INDEX url (url)"); - maj_version (1.439); + maj_version(1.439); } if (upgrade_vers(1.440, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_visites_temp CHANGE ip ip INTEGER UNSIGNED NOT NULL"); - maj_version (1.440); + maj_version(1.440); } if (upgrade_vers(1.441, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_visites_temp CHANGE date date DATE NOT NULL"); spip_query("ALTER TABLE spip_visites CHANGE date date DATE NOT NULL"); spip_query("ALTER TABLE spip_visites_referers CHANGE date date DATE NOT NULL"); - maj_version (1.441); + maj_version(1.441); } if (upgrade_vers(1.442, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_auteurs ADD prefs TINYTEXT NOT NULL"); - maj_version (1.442); + maj_version(1.442); } if (upgrade_vers(1.443, $version_installee, $version_cible)) { @@ -194,12 +204,12 @@ function maj_v014_dist($version_installee, $version_cible) spip_query("ALTER TABLE spip_auteurs CHANGE statut statut VARCHAR(255) NOT NULL"); spip_query("ALTER TABLE spip_auteurs ADD INDEX login (login)"); spip_query("ALTER TABLE spip_auteurs ADD INDEX statut (statut)"); - maj_version (1.443); + maj_version(1.443); } if (upgrade_vers(1.444, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_syndic ADD moderation VARCHAR(3) NOT NULL"); - maj_version (1.444); + maj_version(1.444); } if (upgrade_vers(1.457, $version_installee, $version_cible)) { @@ -207,12 +217,12 @@ function maj_v014_dist($version_installee, $version_cible) spip_query("DROP TABLE spip_visites_temp"); spip_query("DROP TABLE spip_visites_referers"); creer_base(); // crade, a ameliorer :-(( - maj_version (1.457); + maj_version(1.457); } if (upgrade_vers(1.458, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_auteurs ADD cookie_oubli TINYTEXT NOT NULL"); - maj_version (1.458); + maj_version(1.458); } if (upgrade_vers(1.459, $version_installee, $version_cible)) { @@ -221,13 +231,14 @@ function maj_v014_dist($version_installee, $version_cible) $type = addslashes($row['type']); $res = spip_query("SELECT * FROM spip_groupes_mots WHERE titre='$type'"); if (sql_count($res) == 0) { - $s = spip_query("INSERT INTO spip_groupes_mots (titre, unseul, obligatoire, articles, breves, rubriques, syndic, minirezo, comite, forum) VALUES ('$type', 'non', 'non', 'oui', 'oui', 'non', 'oui', 'oui', 'oui', 'non')"); - if ($id_groupe = mysql_insert_id($s)) + spip_query("INSERT INTO spip_groupes_mots (titre, unseul, obligatoire, articles, breves, rubriques, syndic, minirezo, comite, forum) VALUES ('$type', 'non', 'non', 'oui', 'oui', 'non', 'oui', 'oui', 'oui', 'non')"); + if ($id_groupe = mysqli_insert_id(_mysql_link())) { spip_query("UPDATE spip_mots SET id_groupe = '$id_groupe' WHERE type='$type'"); + } } } spip_query("UPDATE spip_articles SET popularite=0"); - maj_version (1.459); + maj_version(1.459); } if (upgrade_vers(1.460, $version_installee, $version_cible)) { @@ -237,66 +248,66 @@ function maj_v014_dist($version_installee, $version_cible) $result = spip_query("SELECT * FROM spip_groupes_mots ORDER BY id_groupe"); while ($row = sql_fetch($result)) { $titre = addslashes($row['titre']); - if (! $vu[$titre] ) { + if (!$vu[$titre]) { $vu[$titre] = true; $id_groupe = $row['id_groupe']; spip_query("UPDATE spip_mots SET id_groupe=$id_groupe WHERE type='$titre'"); sql_delete("spip_groupes_mots", "titre='$titre' AND id_groupe<>$id_groupe"); } } - maj_version (1.460); + maj_version(1.460); } if (upgrade_vers(1.462, $version_installee, $version_cible)) { spip_query("UPDATE spip_types_documents SET inclus='embed' WHERE inclus!='non' AND extension IN ('aiff', 'asf', 'avi', 'mid', 'mov', 'mp3', 'mpg', 'ogg', 'qt', 'ra', 'ram', 'rm', 'swf', 'wav', 'wmv')"); - maj_version (1.462); + maj_version(1.462); } if (upgrade_vers(1.463, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles CHANGE popularite popularite DOUBLE"); spip_query("ALTER TABLE spip_visites_temp ADD maj TIMESTAMP"); spip_query("ALTER TABLE spip_referers_temp ADD maj TIMESTAMP"); - maj_version (1.463); + maj_version(1.463); } // l'upgrade < 1.462 ci-dessus etait fausse, d'ou correctif - if (upgrade_vers(1.464, $version_installee, $version_cible) AND ($version_installee >= 1.462)) { + if (upgrade_vers(1.464, $version_installee, $version_cible) and ($version_installee >= 1.462)) { $res = spip_query("SELECT id_type, extension FROM spip_types_documents WHERE id_type NOT IN (1,2,3)"); while ($row = sql_fetch($res)) { $extension = $row['extension']; $id_type = $row['id_type']; spip_query("UPDATE spip_documents SET id_type=$id_type WHERE fichier like '%.$extension'"); } - maj_version (1.464); + maj_version(1.464); } if (upgrade_vers(1.465, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles CHANGE popularite popularite DOUBLE NOT NULL"); - maj_version (1.465); + maj_version(1.465); } if (upgrade_vers(1.466, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_auteurs ADD source VARCHAR(10) DEFAULT 'spip' NOT NULL"); - maj_version (1.466); + maj_version(1.466); } if (upgrade_vers(1.468, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_auteurs ADD INDEX en_ligne (en_ligne)"); spip_query("ALTER TABLE spip_forum ADD INDEX statut (statut, date_heure)"); - maj_version (1.468); + maj_version(1.468); } if (upgrade_vers(1.470, $version_installee, $version_cible)) { - if ($version_installee >= 1.467) { // annule les "listes de diff" + if ($version_installee >= 1.467) { // annule les "listes de diff" spip_query("DROP TABLE spip_listes"); spip_query("ALTER TABLE spip_auteurs DROP abonne"); spip_query("ALTER TABLE spip_auteurs DROP abonne_pass"); } - maj_version (1.470); + maj_version(1.470); } if (upgrade_vers(1.471, $version_installee, $version_cible)) { - if ($version_installee >= 1.470) { // annule les "maj" + if ($version_installee >= 1.470) { // annule les "maj" spip_query("ALTER TABLE spip_auteurs_articles DROP maj TIMESTAMP"); spip_query("ALTER TABLE spip_auteurs_rubriques DROP maj TIMESTAMP"); spip_query("ALTER TABLE spip_auteurs_messages DROP maj TIMESTAMP"); @@ -309,20 +320,17 @@ function maj_v014_dist($version_installee, $version_cible) spip_query("ALTER TABLE spip_mots_syndic DROP maj TIMESTAMP"); spip_query("ALTER TABLE spip_mots_forum DROP maj TIMESTAMP"); } - maj_version (1.471); + maj_version(1.471); } if (upgrade_vers(1.472, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_referers ADD visites_jour INTEGER UNSIGNED NOT NULL"); - maj_version (1.472); + maj_version(1.472); } if (upgrade_vers(1.473, $version_installee, $version_cible)) { spip_query("UPDATE spip_syndic_articles SET url = REPLACE(url, '&', '&')"); spip_query("UPDATE spip_syndic SET url_site = REPLACE(url_site, '&', '&')"); - maj_version (1.473); + maj_version(1.473); } } - - -?> diff --git a/www/ecrire/maj/v015.php b/www/ecrire/maj/v015.php index eb56c9c3..b3675c75 100644 --- a/www/ecrire/maj/v015.php +++ b/www/ecrire/maj/v015.php @@ -3,17 +3,27 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; - -function maj_v015_dist($version_installee, $version_cible) -{ +/** + * Gestion des mises à jour de SPIP, versions 1.5* + * + * @package SPIP\Core\SQL\Upgrade + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; } -?> +/** + * Mises à jour de SPIP n°015 + * + * @param float $version_installee Version actuelle + * @param float $version_cible Version de destination + **/ +function maj_v015_dist($version_installee, $version_cible) { +} diff --git a/www/ecrire/maj/v016.php b/www/ecrire/maj/v016.php index 964b03cf..99ce6189 100644 --- a/www/ecrire/maj/v016.php +++ b/www/ecrire/maj/v016.php @@ -3,29 +3,41 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des mises à jour de SPIP, versions 1.6* + * + * @package SPIP\Core\SQL\Upgrade + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function maj_v016_dist($version_installee, $version_cible) -{ +/** + * Mises à jour de SPIP n°016 + * + * @param float $version_installee Version actuelle + * @param float $version_cible Version de destination + **/ +function maj_v016_dist($version_installee, $version_cible) { if (upgrade_vers(1.600, $version_installee, $version_cible)) { #8/08/07 plus d'indexation dans le core # include_spip('inc/indexation'); # purger_index(); # creer_liste_indexation(); - maj_version (1.600); + maj_version(1.600); } if (upgrade_vers(1.601, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_forum ADD INDEX id_syndic (id_syndic)"); - maj_version (1.601); + maj_version(1.601); } if (upgrade_vers(1.603, $version_installee, $version_cible)) { @@ -33,7 +45,7 @@ function maj_v016_dist($version_installee, $version_cible) spip_unlink('inc_meta_cache.php'); spip_unlink('inc_meta_cache.php3'); spip_unlink('data/engines-list.ini'); - maj_version (1.603); + maj_version(1.603); } if (upgrade_vers(1.604, $version_installee, $version_cible)) { @@ -42,13 +54,10 @@ function maj_v016_dist($version_installee, $version_cible) while ($row = sql_fetch($u)) { $prefs = unserialize($row['prefs']); $l = $prefs['spip_lang']; - unset ($prefs['spip_lang']); - spip_query("UPDATE spip_auteurs SET lang=" . _q($l) . ", prefs='".addslashes(serialize($prefs))."' WHERE id_auteur=".$row['id_auteur']); + unset($prefs['spip_lang']); + spip_query("UPDATE spip_auteurs SET lang=" . _q($l) . ", prefs='" . addslashes(serialize($prefs)) . "' WHERE id_auteur=" . $row['id_auteur']); } $u = spip_query("SELECT lang FROM spip_auteurs"); - maj_version (1.604, $u); + maj_version(1.604, $u); } } - - -?> diff --git a/www/ecrire/maj/v017.php b/www/ecrire/maj/v017.php index 31b65852..db56cd69 100644 --- a/www/ecrire/maj/v017.php +++ b/www/ecrire/maj/v017.php @@ -3,17 +3,29 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des mises à jour de SPIP, versions 1.7* + * + * @package SPIP\Core\SQL\Upgrade + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function maj_v017_dist($version_installee, $version_cible) -{ +/** + * Mises à jour de SPIP n°017 + * + * @param float $version_installee Version actuelle + * @param float $version_cible Version de destination + **/ +function maj_v017_dist($version_installee, $version_cible) { if (upgrade_vers(1.702, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles ADD extra longblob NULL"); spip_query("ALTER TABLE spip_auteurs ADD extra longblob NULL"); @@ -34,32 +46,32 @@ function maj_v017_dist($version_installee, $version_cible) spip_query("UPDATE spip_mots SET extra = supplement"); spip_query("ALTER TABLE spip_mots DROP supplement"); } - + $u = spip_query("SELECT extra FROM spip_articles"); - $u&= spip_query("SELECT extra FROM spip_auteurs"); - $u&= spip_query("SELECT extra FROM spip_breves"); - $u&= spip_query("SELECT extra FROM spip_rubriques"); - $u&= spip_query("SELECT extra FROM spip_mots"); - maj_version (1.702,$u); + $u &= spip_query("SELECT extra FROM spip_auteurs"); + $u &= spip_query("SELECT extra FROM spip_breves"); + $u &= spip_query("SELECT extra FROM spip_rubriques"); + $u &= spip_query("SELECT extra FROM spip_mots"); + maj_version(1.702, $u); } if (upgrade_vers(1.703, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles ADD lang VARCHAR(10) DEFAULT '' NOT NULL"); spip_query("ALTER TABLE spip_rubriques ADD lang VARCHAR(10) DEFAULT '' NOT NULL"); - maj_version (1.703); + maj_version(1.703); } if (upgrade_vers(1.704, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles ADD INDEX lang (lang)"); spip_query("ALTER TABLE spip_auteurs ADD INDEX lang (lang)"); spip_query("ALTER TABLE spip_rubriques ADD INDEX lang (lang)"); - maj_version (1.704); + maj_version(1.704); } if (upgrade_vers(1.705, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles ADD langue_choisie VARCHAR(3) DEFAULT 'non'"); spip_query("ALTER TABLE spip_rubriques ADD langue_choisie VARCHAR(3) DEFAULT 'non'"); - maj_version (1.705); + maj_version(1.705); } if (upgrade_vers(1.707, $version_installee, $version_cible)) { @@ -67,31 +79,31 @@ function maj_v017_dist($version_installee, $version_cible) spip_query("UPDATE spip_articles SET lang=MID(lang,2,8) WHERE langue_choisie = 'non'"); spip_query("UPDATE spip_rubriques SET langue_choisie='oui' WHERE MID(lang,1,1) != '.' AND lang != ''"); spip_query("UPDATE spip_rubriques SET lang=MID(lang,2,8) WHERE langue_choisie = 'non'"); - maj_version (1.707); + maj_version(1.707); } if (upgrade_vers(1.708, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_breves ADD lang VARCHAR(10) DEFAULT '' NOT NULL"); spip_query("ALTER TABLE spip_breves ADD langue_choisie VARCHAR(3) DEFAULT 'non'"); - maj_version (1.708); + maj_version(1.708); } if (upgrade_vers(1.709, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles ADD id_trad bigint(21) DEFAULT '0' NOT NULL"); spip_query("ALTER TABLE spip_articles ADD INDEX id_trad (id_trad)"); - maj_version (1.709); + maj_version(1.709); } if (upgrade_vers(1.717, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles ADD INDEX date_modif (date_modif)"); - maj_version (1.717); + maj_version(1.717); } if (upgrade_vers(1.718, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_referers DROP domaine"); spip_query("ALTER TABLE spip_referers_articles DROP domaine"); spip_query("ALTER TABLE spip_referers_temp DROP domaine"); - maj_version (1.718); + maj_version(1.718); } if (upgrade_vers(1.722, $version_installee, $version_cible)) { @@ -103,7 +115,7 @@ function maj_v017_dist($version_installee, $version_cible) spip_query("ALTER TABLE spip_articles DROP INDEX url_ref"); spip_query("ALTER TABLE spip_articles DROP url_ref"); } - maj_version (1.722); + maj_version(1.722); } if (upgrade_vers(1.723, $version_installee, $version_cible)) { @@ -112,17 +124,17 @@ function maj_v017_dist($version_installee, $version_cible) spip_query("ALTER TABLE spip_articles DROP INDEX url_site;"); spip_query("ALTER TABLE spip_articles ADD INDEX url_site (url_site);"); } - maj_version (1.723); + maj_version(1.723); } if (upgrade_vers(1.724, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_messages ADD date_fin datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"); - maj_version (1.724); + maj_version(1.724); } if (upgrade_vers(1.726, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_auteurs ADD low_sec tinytext NOT NULL"); - maj_version (1.726); + maj_version(1.726); } if (upgrade_vers(1.727, $version_installee, $version_cible)) { @@ -131,13 +143,13 @@ function maj_v017_dist($version_installee, $version_cible) spip_query("UPDATE spip_rubriques SET lang=REPLACE(lang,'oci_', 'oc_') WHERE lang LIKE 'oci_%'"); spip_query("UPDATE spip_articles SET lang=REPLACE(lang,'oci_', 'oc_') WHERE lang LIKE 'oci_%'"); spip_query("UPDATE spip_breves SET lang=REPLACE(lang,'oci_', 'oc_') WHERE lang LIKE 'oci_%'"); - maj_version (1.727); + maj_version(1.727); } // Ici version 1.7 officielle if (upgrade_vers(1.728, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_articles ADD id_version int unsigned DEFAULT '0' NOT NULL"); - maj_version (1.728); + maj_version(1.728); } if (upgrade_vers(1.730, $version_installee, $version_cible)) { @@ -157,7 +169,7 @@ function maj_v017_dist($version_installee, $version_cible) spip_query("ALTER TABLE spip_forum ADD INDEX idx (idx)"); spip_query("ALTER TABLE spip_signatures ADD idx ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL"); spip_query("ALTER TABLE spip_signatures ADD INDEX idx (idx)"); - maj_version (1.730); + maj_version(1.730); } if (upgrade_vers(1.731, $version_installee, $version_cible)) { @@ -165,12 +177,13 @@ function maj_v017_dist($version_installee, $version_cible) spip_query("UPDATE spip_rubriques SET idx='1' where lang IN ('de','vi')"); spip_query("UPDATE spip_breves SET idx='1' where lang IN ('de','vi')"); spip_query("UPDATE spip_auteurs SET idx='1' where lang IN ('de','vi')"); - maj_version (1.731); + maj_version(1.731); } - if (upgrade_vers(1.732, $version_installee, $version_cible)) { // en correction d'un vieux truc qui avait fait sauter le champ inclus sur les bases version 1.415 + if (upgrade_vers(1.732, $version_installee, + $version_cible)) { // en correction d'un vieux truc qui avait fait sauter le champ inclus sur les bases version 1.415 spip_query("ALTER TABLE spip_documents ADD inclus VARCHAR(3) DEFAULT 'non'"); - maj_version (1.732); + maj_version(1.732); } if (upgrade_vers(1.733, $version_installee, $version_cible)) { @@ -187,6 +200,3 @@ function maj_v017_dist($version_installee, $version_cible) # maj_version(1.734); #} } - - -?> diff --git a/www/ecrire/maj/v018.php b/www/ecrire/maj/v018.php index 8bc746ad..769cda72 100644 --- a/www/ecrire/maj/v018.php +++ b/www/ecrire/maj/v018.php @@ -3,17 +3,29 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des mises à jour de SPIP, versions 1.8* + * + * @package SPIP\Core\SQL\Upgrade + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function maj_v018_dist($version_installee, $version_cible) -{ +/** + * Mises à jour de SPIP n°018 + * + * @param float $version_installee Version actuelle + * @param float $version_cible Version de destination + **/ +function maj_v018_dist($version_installee, $version_cible) { if (upgrade_vers(1.801, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_rubriques ADD statut_tmp VARCHAR(10) NOT NULL, ADD date_tmp datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"); include_spip('inc/rubriques'); @@ -41,9 +53,9 @@ function maj_v018_dist($version_installee, $version_cible) } if (upgrade_vers(1.803, $version_installee, $version_cible)) { - # 27 AOUT 2004 : conservons cette table pour autoriser les retours - # de SPIP 1.8a6 CVS vers 1.7.2 - # spip_query("DROP TABLE spip_forum_cache"); + # 27 AOUT 2004 : conservons cette table pour autoriser les retours + # de SPIP 1.8a6 CVS vers 1.7.2 + # spip_query("DROP TABLE spip_forum_cache"); spip_query("DROP TABLE spip_inclure_caches"); maj_version(1.803); @@ -55,23 +67,28 @@ function maj_v018_dist($version_installee, $version_cible) maj_version(1.804); } - // - // Recalculer tous les threads - // function du plugin forum recopiee ici pour assurer la montee de version dans tous les cas de figure + /** + * Recalculer tous les threads + * + * Fonction du plugin forum recopiee ici pour assurer la montee + * de version dans tous les cas de figure + **/ function maj_v018_calculer_threads() { // fixer les id_thread des debuts de discussion - sql_update('spip_forum', array('id_thread'=>'id_forum'), "id_parent=0"); + sql_update('spip_forum', array('id_thread' => 'id_forum'), "id_parent=0"); // reparer les messages qui n'ont pas l'id_secteur de leur parent do { $discussion = "0"; $precedent = 0; - $r = sql_select("fille.id_forum AS id, maman.id_thread AS thread", 'spip_forum AS fille, spip_forum AS maman', "fille.id_parent = maman.id_forum AND fille.id_thread <> maman.id_thread",'', "thread"); + $r = sql_select("fille.id_forum AS id, maman.id_thread AS thread", 'spip_forum AS fille, spip_forum AS maman', + "fille.id_parent = maman.id_forum AND fille.id_thread <> maman.id_thread", '', "thread"); while ($row = sql_fetch($r)) { - if ($row['thread'] == $precedent) + if ($row['thread'] == $precedent) { $discussion .= "," . $row['id']; - else { - if ($precedent) + } else { + if ($precedent) { sql_updateq("spip_forum", array("id_thread" => $precedent), "id_forum IN ($discussion)"); + } $precedent = $row['thread']; $discussion = $row['id']; } @@ -79,6 +96,7 @@ function maj_v018_dist($version_installee, $version_cible) sql_updateq("spip_forum", array("id_thread" => $precedent), "id_forum IN ($discussion)"); } while ($discussion != "0"); } + if (upgrade_vers(1.805, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_forum ADD id_thread bigint(21) DEFAULT '0' NOT NULL"); maj_v018_calculer_threads(); @@ -133,7 +151,7 @@ function maj_v018_dist($version_installee, $version_cible) spip_query("ALTER TABLE spip_syndic ADD extra longblob NULL"); maj_version(1.811); } - + if (upgrade_vers(1.812, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_documents ADD idx ENUM('', '1', 'non', 'oui', 'idx') DEFAULT '' NOT NULL"); maj_version(1.812); @@ -219,6 +237,3 @@ function maj_v018_dist($version_installee, $version_cible) maj_version(1.826); } } - - -?> diff --git a/www/ecrire/maj/v019.php b/www/ecrire/maj/v019.php index 6f25476f..126cbc16 100644 --- a/www/ecrire/maj/v019.php +++ b/www/ecrire/maj/v019.php @@ -3,74 +3,92 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; - -/*--------------------------------------------------------------------- */ -/* Nouvelle gestion des MAJ (par tableau) */ -/*--------------------------------------------------------------------- */ +/** + * Gestion des mises à jour de SPIP, versions >= 1.9.3-dev + * + * Cette version de SPIP introduit une nouvelle gestion des + * mises à jour par tableau + * + * On la fait coincider rétroactivement avec l'état de la 1.9.2 + * L'index numérique entier est multiplié par 1000 (resultat < SVN c'est ok) + * + * @package SPIP\Core\SQL\Upgrade + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -// on la fait coincider retroactivement avec l'etat de la 1.9.2 -// => l'index numerique entier est la * par 1000 (resultat < SVN c'est ok) - // FLV est incrustable, la MAJ precedente l'avait oublie +// FLV est incrustable, la MAJ precedente l'avait oublie $GLOBALS['maj'][1931] = array( array('spip_query', "UPDATE spip_types_documents SET `inclus`='embed' WHERE `extension`='flv'") - ); +); - // Ajout de spip_forum.date_thread, et on essaie de le remplir - // a coup de table temporaire (est-ce autorise partout... sinon - // tant pis, ca ne marchera que pour les forums recemment modifies) +// Ajout de spip_forum.date_thread, et on essaie de le remplir +// a coup de table temporaire (est-ce autorise partout... sinon +// tant pis, ca ne marchera que pour les forums recemment modifies) $GLOBALS['maj'][1932] = array( array('sql_alter', "TABLE spip_forum ADD `date_thread` datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"), array('sql_alter', "TABLE spip_forum ADD INDEX `date_thread` (`date_thread`)"), array('spip_query', "DROP TABLE IF EXISTS spip_tmp"), - array('spip_query', "CREATE TABLE spip_tmp SELECT `id_thread`,MAX(`date_heure`) AS dt FROM spip_forum GROUP BY `id_thread`"), + array( + 'spip_query', + "CREATE TABLE spip_tmp SELECT `id_thread`,MAX(`date_heure`) AS dt FROM spip_forum GROUP BY `id_thread`" + ), array('sql_alter', "TABLE spip_tmp ADD INDEX `p` (`id_thread`)"), array('spip_query', "UPDATE spip_forum AS F JOIN spip_tmp AS T ON F.id_thread=T.id_thread SET F.date_thread=T.dt"), array('spip_query', "DROP TABLE spip_tmp"), - ); - +); -// Retrait de _DIR_IMG dans le champ fichier de la table des doc -function maj_1_934 () { - // attention, en cas de mutualisation _DIR_IMG contient quelque chose comme sites/urldusite/IMG/ - // essayons en ne prenant que le dernier segment - $dir_img = basename(_DIR_IMG).'/'; - $res = spip_query("SELECT fichier FROM spip_documents WHERE fichier LIKE " . _q($dir_img . '%') . " LIMIT 0,1"); - if (!$row = spip_fetch_array($res)){ - //Êsinon on essaye avec le chemin complet - // il faut donc verifier qu'on a bien le bon nom de repertoire - $dir_img = substr(_DIR_IMG,strlen(_DIR_RACINE)); - } - $n = strlen($dir_img) + 1; - spip_query("UPDATE spip_documents SET `fichier`=substring(fichier,$n) WHERE `fichier` LIKE " . _q($dir_img . '%')); +/** + * Mise à jour 1_934 : Retrait de `_DIR_IMG` dans le champ fichier de la table des doc + **/ +function maj_1_934() { + // attention, en cas de mutualisation _DIR_IMG contient quelque chose comme sites/urldusite/IMG/ + // essayons en ne prenant que le dernier segment + $dir_img = basename(_DIR_IMG) . '/'; + $res = spip_query("SELECT fichier FROM spip_documents WHERE fichier LIKE " . _q($dir_img . '%') . " LIMIT 0,1"); + if (!$row = spip_fetch_array($res)) { + //Êsinon on essaye avec le chemin complet + // il faut donc verifier qu'on a bien le bon nom de repertoire + $dir_img = substr(_DIR_IMG, strlen(_DIR_RACINE)); + } + $n = strlen($dir_img) + 1; + spip_query("UPDATE spip_documents SET `fichier`=substring(fichier,$n) WHERE `fichier` LIKE " . _q($dir_img . '%')); } $GLOBALS['maj'][1934] = array(array('maj_1_934')); -function maj_1_935 () { +/** + * Mise à jour 1_935 : calcul du nouveau champ 'vu' sur les associations documents_xx + **/ +function maj_1_935() { include_spip('inc/texte'); - foreach(array('article'=>'id_article','rubrique'=>'id_rubrique','breve'=>'id_breve') as $type => $id_table_objet){ - $table_objet = "$type"."s"; - $chapo = $type=='article' ? ",a.chapo":""; + foreach (array( + 'article' => 'id_article', + 'rubrique' => 'id_rubrique', + 'breve' => 'id_breve' + ) as $type => $id_table_objet) { + $table_objet = "$type" . "s"; + $chapo = $type == 'article' ? ",a.chapo" : ""; $res = spip_query("SELECT a.$id_table_objet,a.texte $chapo FROM spip_documents_$table_objet AS d JOIN spip_$table_objet AS a ON a.$id_table_objet=d.$id_table_objet GROUP BY $id_table_objet"); - while ($row = sql_fetch($res)){ + while ($row = sql_fetch($res)) { $GLOBALS['doublons_documents_inclus'] = array(); - traiter_modeles(($chapo?$row['chapo']:"").$row['texte'],true); // detecter les doublons - if (count($GLOBALS['doublons_documents_inclus'])){ - $id = $row[$id_table_objet]; - $liste = "(".implode(",$id,'oui'),(",$GLOBALS['doublons_documents_inclus']).",$id,'oui')"; - spip_query("REPLACE INTO spip_documents_$table_objet (`id_document`,`$id_table_objet`,`vu`) VALUES $liste"); - } + traiter_modeles(($chapo ? $row['chapo'] : "") . $row['texte'], true); // detecter les doublons + if (count($GLOBALS['doublons_documents_inclus'])) { + $id = $row[$id_table_objet]; + $liste = "(" . implode(",$id,'oui'),(", $GLOBALS['doublons_documents_inclus']) . ",$id,'oui')"; + spip_query("REPLACE INTO spip_documents_$table_objet (`id_document`,`$id_table_objet`,`vu`) VALUES $liste"); } + } } } @@ -79,68 +97,79 @@ $GLOBALS['maj'][1935] = array( array('sql_alter', "TABLE spip_documents_rubriques ADD `vu` ENUM('non', 'oui') DEFAULT 'non' NOT NULL"), array('sql_alter', "TABLE spip_documents_breves ADD `vu` ENUM('non', 'oui') DEFAULT 'non' NOT NULL"), array('maj_1_935') - ); +); -// http://doc.spip.org/@convertir_un_champ_blob_en_text -function convertir_un_champ_blob_en_text($table,$champ,$type){ +/** + * Convertit un champ de type `blob` en champ de type `text` + * + * @param string $table Nom de la table + * @param string $champ Nom du champ dans la table + * @param string $type Type de champ de destination, par exemple `LONGTEXT` + **/ +function convertir_un_champ_blob_en_text($table, $champ, $type) { // precaution : definir le charset par defaut de la table, car c'est lui qui prevaut // et il faut qu'il corresponde au charset de la connexion qui est celui // dans lequel on a ecrit le champ en blob - if ($charset = sql_getfetsel('@@character_set_connection')){ - sql_alter("TABLE $table DEFAULT CHARACTER SET ".$charset); + if ($charset = sql_getfetsel('@@character_set_connection')) { + sql_alter("TABLE $table DEFAULT CHARACTER SET " . $charset); } $res = spip_query("SHOW FULL COLUMNS FROM $table LIKE '$champ'"); - if ($row = sql_fetch($res)){ - if (strtolower($row['Type'])!=strtolower($type)) { - $default = $row['Default']?(" DEFAULT ".sql_quote($row['Default'])):""; - $notnull = ($row['Null']=='YES')?"":" NOT NULL"; + if ($row = sql_fetch($res)) { + if (strtolower($row['Type']) != strtolower($type)) { + $default = $row['Default'] ? (" DEFAULT " . sql_quote($row['Default'])) : ""; + $notnull = ($row['Null'] == 'YES') ? "" : " NOT NULL"; sql_alter("TABLE $table CHANGE $champ $champ $type $default $notnull"); } } } $GLOBALS['maj'][1937] = array( - // convertir les champs blob des tables spip en champs texte - array('convertir_un_champ_blob_en_text',"spip_articles","texte","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_articles","extra","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_auteurs","extra","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_breves","texte","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_breves","extra","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_messages","texte","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_mots","texte","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_mots","extra","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_groupes_mots","texte","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_rubriques","texte","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_rubriques","extra","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_syndic","nom_site","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_syndic","descriptif","TEXT"), - array('convertir_un_champ_blob_en_text',"spip_syndic","extra","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_syndic_articles","descriptif","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_petitions","texte","LONGTEXT"), - array('convertir_un_champ_blob_en_text',"spip_ortho_cache","suggest","TEXT"), - ); - + // convertir les champs blob des tables spip en champs texte + array('convertir_un_champ_blob_en_text', "spip_articles", "texte", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_articles", "extra", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_auteurs", "extra", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_breves", "texte", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_breves", "extra", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_messages", "texte", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_mots", "texte", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_mots", "extra", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_groupes_mots", "texte", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_rubriques", "texte", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_rubriques", "extra", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_syndic", "nom_site", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_syndic", "descriptif", "TEXT"), + array('convertir_un_champ_blob_en_text', "spip_syndic", "extra", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_syndic_articles", "descriptif", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_petitions", "texte", "LONGTEXT"), + array('convertir_un_champ_blob_en_text', "spip_ortho_cache", "suggest", "TEXT"), +); -function maj_1_938 () { - $res = sql_select('extension','spip_documents',"extension='' OR extension is NULL"); +/** + * Mise à jour 1_938 : suppression des id_type de documents, remplacés par extension + **/ +function maj_1_938() { + $res = sql_select('extension', 'spip_documents', "extension='' OR extension is NULL"); if ($n = sql_count($res)) { $repli = false; // verifier que la colonne id_type est toujours la (update post 1.938) $desc = sql_showtable('spip_documents'); - if (!$desc OR !isset($desc['field']['id_type'])) + if (!$desc or !isset($desc['field']['id_type'])) { $repli = true; - - $s = sql_select('extension'.($repli?'':',id_type'),'spip_types_documents'); + } + + $s = sql_select('extension' . ($repli ? '' : ',id_type'), 'spip_types_documents'); while ($t = sql_fetch($s)) { - if (isset($t['id_type'])) - spip_query("UPDATE spip_documents SET `extension`="._q($t['extension']) ." WHERE `id_type`="._q($t['id_type'])); - else - spip_query("UPDATE spip_documents SET `extension`="._q($t['extension']) ." WHERE fichier LIKE "._q("%." . $t['extension'])); + if (isset($t['id_type'])) { + spip_query("UPDATE spip_documents SET `extension`=" . _q($t['extension']) . " WHERE `id_type`=" . _q($t['id_type'])); + } else { + spip_query("UPDATE spip_documents SET `extension`=" . _q($t['extension']) . " WHERE fichier LIKE " . _q("%." . $t['extension'])); + } } - $res = sql_select('extension','spip_documents',"extension='' OR extension is NULL"); - if ($n = sql_count($res)) + $res = sql_select('extension', 'spip_documents', "extension='' OR extension is NULL"); + if ($n = sql_count($res)) { spip_log("Table spip_documents : Colonne extension incomplete : $n lignes vides"); + } } } @@ -153,15 +182,15 @@ $GLOBALS['maj'][1938] = array( array('maj_1_938'), array('sql_alter', "TABLE spip_documents DROP INDEX `id_type`, DROP `id_type`"), - ## supprimer l'autoincrement avant de supprimer la PRIMARY KEY - array('sql_alter', "TABLE spip_types_documents CHANGE `id_type` `id_type` BIGINT( 21 ) NOT NULL ") , + ## supprimer l'autoincrement avant de supprimer la PRIMARY KEY + array('sql_alter', "TABLE spip_types_documents CHANGE `id_type` `id_type` BIGINT( 21 ) NOT NULL "), array('sql_alter', "TABLE spip_types_documents DROP PRIMARY KEY"), array('sql_alter', "TABLE spip_types_documents DROP `id_type`"), array('sql_alter', "TABLE spip_types_documents DROP INDEX `extension`"), - ## recreer la PRIMARY KEY sur spip_types_documents.extension + ## recreer la PRIMARY KEY sur spip_types_documents.extension array('sql_alter', "TABLE spip_types_documents ADD PRIMARY KEY (`extension`)"), - ); +); $GLOBALS['maj'][1939] = array( array('sql_alter', "TABLE spip_visites CHANGE `visites` `visites` INT UNSIGNED DEFAULT '0' NOT NULL"), @@ -170,18 +199,21 @@ $GLOBALS['maj'][1939] = array( array('sql_alter', "TABLE spip_referers CHANGE `visites_jour` `visites_jour` INT UNSIGNED DEFAULT '0' NOT NULL"), array('sql_alter', "TABLE spip_referers CHANGE `visites_veille` `visites_veille` INT UNSIGNED DEFAULT '0' NOT NULL"), array('sql_alter', "TABLE spip_referers_articles CHANGE `visites` `visites` INT UNSIGNED DEFAULT '0' NOT NULL") - ); +); $GLOBALS['maj'][1940] = array( - array('spip_query', "DROP TABLE spip_caches"), - ); + array('spip_query', "DROP TABLE spip_caches"), +); $GLOBALS['maj'][1941] = array( array('spip_query', "UPDATE spip_meta SET `valeur` = '' WHERE `nom`='preview' AND `valeur`='non' "), - array('spip_query', "UPDATE spip_meta SET `valeur` = ',0minirezo,1comite,' WHERE `nom`='preview' AND `valeur`='1comite' "), + array( + 'spip_query', + "UPDATE spip_meta SET `valeur` = ',0minirezo,1comite,' WHERE `nom`='preview' AND `valeur`='1comite' " + ), array('spip_query', "UPDATE spip_meta SET `valeur` = ',0minirezo,' WHERE `nom`='preview' AND `valeur`='oui' "), - ); +); $GLOBALS['maj'][1942] = array( array('sql_alter', "TABLE spip_auteurs CHANGE `statut` `statut` varchar(255) DEFAULT '0' NOT NULL"), @@ -193,10 +225,10 @@ $GLOBALS['maj'][1942] = array( array('sql_alter', "TABLE spip_syndic_articles CHANGE `statut` `statut` varchar(10) DEFAULT '0' NOT NULL"), array('sql_alter', "TABLE spip_forum CHANGE `statut` `statut` varchar(8) DEFAULT '0' NOT NULL"), array('sql_alter', "TABLE spip_signatures CHANGE `statut` `statut` varchar(10) DEFAULT '0' NOT NULL") - ); +); - // suppression de l'indexation dans la version standard +// suppression de l'indexation dans la version standard $GLOBALS['maj'][1943] = array( array('sql_alter', "TABLE spip_articles DROP KEY `idx`"), array('sql_alter', "TABLE spip_articles DROP `idx`"), @@ -219,155 +251,175 @@ $GLOBALS['maj'][1943] = array( array('spip_query', "DROP TABLE spip_index"), array('spip_query', "DROP TABLE spip_index_dico"), - ); +); $GLOBALS['maj'][1944] = array( - array('sql_alter', "TABLE spip_documents CHANGE `taille` `taille` integer"), - array('sql_alter', "TABLE spip_documents CHANGE `largeur` `largeur` integer"), - array('sql_alter', "TABLE spip_documents CHANGE `hauteur` `hauteur` integer") - ); + array('sql_alter', "TABLE spip_documents CHANGE `taille` `taille` integer"), + array('sql_alter', "TABLE spip_documents CHANGE `largeur` `largeur` integer"), + array('sql_alter', "TABLE spip_documents CHANGE `hauteur` `hauteur` integer") +); $GLOBALS['maj'][1945] = array( - array('sql_alter', "TABLE spip_petitions CHANGE `email_unique` `email_unique` CHAR (3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_petitions CHANGE `site_obli` `site_obli` CHAR (3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_petitions CHANGE `site_unique` `site_unique` CHAR (3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_petitions CHANGE `message` `message` CHAR (3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_petitions CHANGE `texte` `texte` LONGTEXT DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_articles CHANGE `surtitre` `surtitre` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_articles CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_articles CHANGE `soustitre` `soustitre` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_articles CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_articles CHANGE `chapo` `chapo` mediumtext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_articles CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_articles CHANGE `ps` `ps` mediumtext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_articles CHANGE `accepter_forum` `accepter_forum` CHAR(3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_articles CHANGE `nom_site` `nom_site` tinytext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_articles CHANGE `url_site` `url_site` VARCHAR(255) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_articles CHANGE `url_propre` `url_propre` VARCHAR(255) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_auteurs CHANGE `nom` `nom` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_auteurs CHANGE `bio` `bio` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_auteurs CHANGE `email` `email` tinytext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_auteurs CHANGE `nom_site` `nom_site` tinytext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_auteurs CHANGE `url_site` `url_site` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_auteurs CHANGE `pass` `pass` tinytext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_auteurs CHANGE `low_sec` `low_sec` tinytext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_auteurs CHANGE `pgp` `pgp` TEXT DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_auteurs CHANGE `htpass` `htpass` tinytext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_breves CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_breves CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_breves CHANGE `lien_titre` `lien_titre` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_breves CHANGE `lien_url` `lien_url` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_messages CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_messages CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_messages CHANGE `type` `type` varchar(6) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_messages CHANGE `rv` `rv` varchar(3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_mots CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_mots CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_mots CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_mots CHANGE `type` `type` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_mots CHANGE `url_propre` `url_propre` VARCHAR(255) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_groupes_mots CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_groupes_mots CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_groupes_mots CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_groupes_mots CHANGE `unseul` `unseul` varchar(3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_groupes_mots CHANGE `obligatoire` `obligatoire` varchar(3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_groupes_mots CHANGE `articles` `articles` varchar(3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_groupes_mots CHANGE `breves` `breves` varchar(3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_groupes_mots CHANGE `rubriques` `rubriques` varchar(3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_groupes_mots CHANGE `syndic` `syndic` varchar(3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_groupes_mots CHANGE `minirezo` `minirezo` varchar(3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_groupes_mots CHANGE `comite` `comite` varchar(3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_groupes_mots CHANGE `forum` `forum` varchar(3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_rubriques CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_rubriques CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_rubriques CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_rubriques CHANGE `url_propre` `url_propre` VARCHAR(255) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_documents CHANGE `extension` `extension` VARCHAR(10) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_documents CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_documents CHANGE `date` `date` datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"), - array('sql_alter', "TABLE spip_documents CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_documents CHANGE `fichier` `fichier` varchar(255) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_types_documents CHANGE `extension` `extension` varchar(10) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_types_documents CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_types_documents CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_types_documents CHANGE `mime_type` `mime_type` varchar(100) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_syndic CHANGE `nom_site` `nom_site` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_syndic CHANGE `url_site` `url_site` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_syndic CHANGE `url_syndic` `url_syndic` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_syndic CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_syndic CHANGE `url_propre` `url_propre` VARCHAR(255) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_syndic CHANGE `syndication` `syndication` VARCHAR(3) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_syndic_articles CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_syndic_articles CHANGE `url` `url` VARCHAR(255) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_syndic_articles CHANGE `lesauteurs` `lesauteurs` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_syndic_articles CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_forum CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_forum CHANGE `texte` `texte` mediumtext DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_forum CHANGE `auteur` `auteur` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_forum CHANGE `email_auteur` `email_auteur` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_forum CHANGE `nom_site` `nom_site` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_forum CHANGE `url_site` `url_site` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_forum CHANGE `ip` `ip` varchar(16) DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_signatures CHANGE `nom_email` `nom_email` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_signatures CHANGE `ad_email` `ad_email` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_signatures CHANGE `nom_site` `nom_site` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_signatures CHANGE `url_site` `url_site` text DEFAULT '' NOT NULL"), - array('sql_alter', "TABLE spip_signatures CHANGE `message` `message` mediumtext DEFAULT '' NOT NULL") - ); + array('sql_alter', "TABLE spip_petitions CHANGE `email_unique` `email_unique` CHAR (3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_petitions CHANGE `site_obli` `site_obli` CHAR (3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_petitions CHANGE `site_unique` `site_unique` CHAR (3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_petitions CHANGE `message` `message` CHAR (3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_petitions CHANGE `texte` `texte` LONGTEXT DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_articles CHANGE `surtitre` `surtitre` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_articles CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_articles CHANGE `soustitre` `soustitre` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_articles CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_articles CHANGE `chapo` `chapo` mediumtext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_articles CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_articles CHANGE `ps` `ps` mediumtext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_articles CHANGE `accepter_forum` `accepter_forum` CHAR(3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_articles CHANGE `nom_site` `nom_site` tinytext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_articles CHANGE `url_site` `url_site` VARCHAR(255) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_articles CHANGE `url_propre` `url_propre` VARCHAR(255) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_auteurs CHANGE `nom` `nom` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_auteurs CHANGE `bio` `bio` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_auteurs CHANGE `email` `email` tinytext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_auteurs CHANGE `nom_site` `nom_site` tinytext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_auteurs CHANGE `url_site` `url_site` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_auteurs CHANGE `pass` `pass` tinytext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_auteurs CHANGE `low_sec` `low_sec` tinytext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_auteurs CHANGE `pgp` `pgp` TEXT DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_auteurs CHANGE `htpass` `htpass` tinytext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_breves CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_breves CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_breves CHANGE `lien_titre` `lien_titre` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_breves CHANGE `lien_url` `lien_url` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_messages CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_messages CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_messages CHANGE `type` `type` varchar(6) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_messages CHANGE `rv` `rv` varchar(3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_mots CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_mots CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_mots CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_mots CHANGE `type` `type` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_mots CHANGE `url_propre` `url_propre` VARCHAR(255) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_groupes_mots CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_groupes_mots CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_groupes_mots CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_groupes_mots CHANGE `unseul` `unseul` varchar(3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_groupes_mots CHANGE `obligatoire` `obligatoire` varchar(3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_groupes_mots CHANGE `articles` `articles` varchar(3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_groupes_mots CHANGE `breves` `breves` varchar(3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_groupes_mots CHANGE `rubriques` `rubriques` varchar(3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_groupes_mots CHANGE `syndic` `syndic` varchar(3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_groupes_mots CHANGE `minirezo` `minirezo` varchar(3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_groupes_mots CHANGE `comite` `comite` varchar(3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_groupes_mots CHANGE `forum` `forum` varchar(3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_rubriques CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_rubriques CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_rubriques CHANGE `texte` `texte` longtext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_rubriques CHANGE `url_propre` `url_propre` VARCHAR(255) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_documents CHANGE `extension` `extension` VARCHAR(10) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_documents CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_documents CHANGE `date` `date` datetime DEFAULT '0000-00-00 00:00:00' NOT NULL"), + array('sql_alter', "TABLE spip_documents CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_documents CHANGE `fichier` `fichier` varchar(255) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_types_documents CHANGE `extension` `extension` varchar(10) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_types_documents CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_types_documents CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_types_documents CHANGE `mime_type` `mime_type` varchar(100) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_syndic CHANGE `nom_site` `nom_site` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_syndic CHANGE `url_site` `url_site` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_syndic CHANGE `url_syndic` `url_syndic` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_syndic CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_syndic CHANGE `url_propre` `url_propre` VARCHAR(255) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_syndic CHANGE `syndication` `syndication` VARCHAR(3) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_syndic_articles CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_syndic_articles CHANGE `url` `url` VARCHAR(255) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_syndic_articles CHANGE `lesauteurs` `lesauteurs` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_syndic_articles CHANGE `descriptif` `descriptif` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_forum CHANGE `titre` `titre` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_forum CHANGE `texte` `texte` mediumtext DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_forum CHANGE `auteur` `auteur` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_forum CHANGE `email_auteur` `email_auteur` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_forum CHANGE `nom_site` `nom_site` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_forum CHANGE `url_site` `url_site` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_forum CHANGE `ip` `ip` varchar(16) DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_signatures CHANGE `nom_email` `nom_email` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_signatures CHANGE `ad_email` `ad_email` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_signatures CHANGE `nom_site` `nom_site` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_signatures CHANGE `url_site` `url_site` text DEFAULT '' NOT NULL"), + array('sql_alter', "TABLE spip_signatures CHANGE `message` `message` mediumtext DEFAULT '' NOT NULL") +); $GLOBALS['maj'][1946] = array( - array('sql_alter', "TABLE spip_forum DROP INDEX `id_parent`"), - array('sql_alter', "TABLE spip_forum DROP INDEX `id_article`"), - array('sql_alter', "TABLE spip_forum DROP INDEX `id_breve`"), - array('sql_alter', "TABLE spip_forum DROP INDEX `id_syndic`"), - array('sql_alter', "TABLE spip_forum DROP INDEX `id_rubrique`"), - array('sql_alter', "TABLE spip_forum DROP INDEX `date_thread`"), - array('sql_alter', "TABLE spip_forum DROP INDEX `statut`"), - array('sql_alter', "TABLE spip_forum ADD INDEX `optimal` (`statut`,`id_parent`,`id_article`,`date_heure`,`id_breve`,`id_syndic`,`id_rubrique`)") - ); + array('sql_alter', "TABLE spip_forum DROP INDEX `id_parent`"), + array('sql_alter', "TABLE spip_forum DROP INDEX `id_article`"), + array('sql_alter', "TABLE spip_forum DROP INDEX `id_breve`"), + array('sql_alter', "TABLE spip_forum DROP INDEX `id_syndic`"), + array('sql_alter', "TABLE spip_forum DROP INDEX `id_rubrique`"), + array('sql_alter', "TABLE spip_forum DROP INDEX `date_thread`"), + array('sql_alter', "TABLE spip_forum DROP INDEX `statut`"), + array( + 'sql_alter', + "TABLE spip_forum ADD INDEX `optimal` (`statut`,`id_parent`,`id_article`,`date_heure`,`id_breve`,`id_syndic`,`id_rubrique`)" + ) +); $GLOBALS['maj'][1947] = array( - array('sql_alter', "TABLE spip_articles DROP INDEX `url_site`"), - array('sql_alter', "TABLE spip_articles DROP INDEX `date_modif`"), - array('sql_alter', "TABLE spip_auteurs DROP INDEX `lang`") - ); + array('sql_alter', "TABLE spip_articles DROP INDEX `url_site`"), + array('sql_alter', "TABLE spip_articles DROP INDEX `date_modif`"), + array('sql_alter', "TABLE spip_auteurs DROP INDEX `lang`") +); - // mauvaise manip +// mauvaise manip $GLOBALS['maj'][1949] = array( - array('sql_alter', "TABLE spip_versions DROP INDEX `date`"), - array('sql_alter', "TABLE spip_versions DROP INDEX `id_auteur`") - ); - + array('sql_alter', "TABLE spip_versions DROP INDEX `date`"), + array('sql_alter', "TABLE spip_versions DROP INDEX `id_auteur`") +); +/** + * Mise à jour 1_950 : Gestion du prefixe pour la table des urls + * + * @param float $installee Numéro de version actuellement installée + **/ function maj_1_950($installee) { - // oubli de gerer le prefixe lors l'introduction de l'abstraction - // => Relancer les MAJ concernees si la version dont on part les avait fait - if ($installee >= 1.946) serie_alter('950a', $GLOBALS['maj'][1946]); - if ($installee >= 1.947) serie_alter('950b', $GLOBALS['maj'][1947]); - if ($installee >= 1.949) @serie_alter('950c', $GLOBALS['maj'][1949]); + // oubli de gerer le prefixe lors l'introduction de l'abstraction + // => Relancer les MAJ concernees si la version dont on part les avait fait + if ($installee >= 1.946) { + serie_alter('950a', $GLOBALS['maj'][1946]); + } + if ($installee >= 1.947) { + serie_alter('950b', $GLOBALS['maj'][1947]); + } + if ($installee >= 1.949) { + @serie_alter('950c', $GLOBALS['maj'][1949]); + } global $tables_auxiliaires; include_spip('base/auxiliaires'); - $v = $tables_auxiliaires[$k='spip_urls']; + $v = $tables_auxiliaires[$k = 'spip_urls']; sql_create($k, $v['field'], $v['key'], false, false); - foreach(array('article'=>'id_article', - 'rubrique'=>'id_rubrique', - 'breve'=>'id_breve', - 'auteur' => 'id_auteur', - 'mot' => 'id_mot', - 'syndic' => 'id_syndic') as $type => $id_objet){ - $table = ($type == 'syndic') ? $type : ($type ."s"); + foreach (array( + 'article' => 'id_article', + 'rubrique' => 'id_rubrique', + 'breve' => 'id_breve', + 'auteur' => 'id_auteur', + 'mot' => 'id_mot', + 'syndic' => 'id_syndic' + ) as $type => $id_objet) { + $table = ($type == 'syndic') ? $type : ($type . "s"); $date = ($type == 'breve') ? 'date_heure' : - (($type == 'auteur') ? 'maj' : - (($type == 'mot') ? 'maj' : 'date')); - $q = @sql_select("url_propre AS url, $id_objet AS id_objet, '$type' AS type, $date as date", "spip_$table", "url_propre<>''"); - if (!$q) return; // anormal, mais ne pas boucler en erreur - while ($r = sql_fetch($q)) sql_replace('spip_urls', $r); + (($type == 'auteur') ? 'maj' : + (($type == 'mot') ? 'maj' : 'date')); + $q = @sql_select("url_propre AS url, $id_objet AS id_objet, '$type' AS type, $date as date", "spip_$table", + "url_propre<>''"); + if (!$q) { + return; + } // anormal, mais ne pas boucler en erreur + while ($r = sql_fetch($q)) { + sql_replace('spip_urls', $r); + } spip_log("table $table : " . sql_count($q) . " urls propres copiees"); sql_alter("TABLE spip_$table DROP INDEX `url_propre`"); sql_alter("TABLE spip_$table DROP `url_propre`"); @@ -376,7 +428,7 @@ function maj_1_950($installee) { // Donner a la fonction ci-dessus le numero de version installee // AVANT que la mise a jour ait commencee -$GLOBALS['maj'][1950] = array(array('maj_1_950', $GLOBALS['meta']['version_installee'] )); +$GLOBALS['maj'][1950] = array(array('maj_1_950', $GLOBALS['meta']['version_installee'])); // Erreur dans maj_1_948(): // // http://trac.rezo.net/trac/spip/changeset/10194 @@ -384,30 +436,37 @@ $GLOBALS['maj'][1950] = array(array('maj_1_950', $GLOBALS['meta']['version_inst $GLOBALS['maj'][1951] = array( - array('sql_alter', "TABLE spip_versions CHANGE `id_version` `id_version` bigint(21) DEFAULT 0 NOT NULL") - ); - + array('sql_alter', "TABLE spip_versions CHANGE `id_version` `id_version` bigint(21) DEFAULT 0 NOT NULL") +); -// Transformation des documents : -// - image => mode=image -// - vignette => mode=vignette +/** + * Mise à jour 1_952 : Transformation des documents + * + * - image => mode=image + * - vignette => mode=vignette + **/ function maj_1_952() { $ok = sql_alter("TABLE spip_documents CHANGE `mode` `mode` enum('vignette','image','document') DEFAULT NULL"); - if($ok) { + if ($ok) { - $s = sql_select("v.id_document as id_document", "spip_documents as d join spip_documents as v ON d.id_vignette=v.id_document"); + $s = sql_select("v.id_document as id_document", + "spip_documents as d join spip_documents as v ON d.id_vignette=v.id_document"); $vignettes = array(); - while ($t = sql_fetch($s)) + while ($t = sql_fetch($s)) { $vignettes[] = intval($t['id_document']); + } $ok &= spip_query("UPDATE spip_documents SET `mode`='image' WHERE `mode`='vignette'"); - $ok &= spip_query("UPDATE spip_documents SET `mode`='vignette' WHERE `mode`='image' AND ".sql_in('id_document', $vignettes)); + $ok &= spip_query("UPDATE spip_documents SET `mode`='vignette' WHERE `mode`='image' AND " . sql_in('id_document', + $vignettes)); + } + if (!$ok) { + die('echec sur maj_1_952()'); } - if (!$ok) die('echec sur maj_1_952()'); } $GLOBALS['maj'][1952] = array(array('maj_1_952')); @@ -416,30 +475,49 @@ $GLOBALS['maj'][1953] = array(array('upgrade_types_documents')); $GLOBALS['maj'][1954] = array( - //pas de psd en - array('spip_query', "UPDATE spip_types_documents SET `inclus`='non' WHERE `extension`='psd'"), - //ajout csv - array('spip_query', "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`) VALUES ('csv', 'CSV')"), - array('spip_query', "UPDATE spip_types_documents SET `mime_type`='text/csv' WHERE `extension`='csv'"), - //ajout mkv - array('spip_query', "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`, `inclus`) VALUES ('mkv', 'Matroska Video', 'embed')"), - array('spip_query', "UPDATE spip_types_documents SET `mime_type`='video/x-mkv' WHERE `extension`='mkv'"), - //ajout mka - array('spip_query', "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`, `inclus`) VALUES ('mka', 'Matroska Audio', 'embed')"), - array('spip_query', "UPDATE spip_types_documents SET `mime_type`='audio/x-mka' WHERE `extension`='mka'"), - //ajout kml - array('spip_query', "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`) VALUES ('kml', 'Keyhole Markup Language')"), - array('spip_query', "UPDATE spip_types_documents SET `mime_type`='application/vnd.google-earth.kml+xml' WHERE `extension`='kml'"), - //ajout kmz - array('spip_query', "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`) VALUES ('kmz', 'Google Earth Placemark File')"), - array('spip_query', "UPDATE spip_types_documents SET `mime_type`='application/vnd.google-earth.kmz' WHERE `extension`='kmz'") - ); - -if ($GLOBALS['meta']['version_installee'] > 1.950) - // 1.950 lisait un bug dans auxiliaires.php corrige a present + //pas de psd en + array('spip_query', "UPDATE spip_types_documents SET `inclus`='non' WHERE `extension`='psd'"), + //ajout csv + array('spip_query', "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`) VALUES ('csv', 'CSV')"), + array('spip_query', "UPDATE spip_types_documents SET `mime_type`='text/csv' WHERE `extension`='csv'"), + //ajout mkv + array( + 'spip_query', + "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`, `inclus`) VALUES ('mkv', 'Matroska Video', 'embed')" + ), + array('spip_query', "UPDATE spip_types_documents SET `mime_type`='video/x-mkv' WHERE `extension`='mkv'"), + //ajout mka + array( + 'spip_query', + "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`, `inclus`) VALUES ('mka', 'Matroska Audio', 'embed')" + ), + array('spip_query', "UPDATE spip_types_documents SET `mime_type`='audio/x-mka' WHERE `extension`='mka'"), + //ajout kml + array( + 'spip_query', + "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`) VALUES ('kml', 'Keyhole Markup Language')" + ), + array( + 'spip_query', + "UPDATE spip_types_documents SET `mime_type`='application/vnd.google-earth.kml+xml' WHERE `extension`='kml'" + ), + //ajout kmz + array( + 'spip_query', + "INSERT IGNORE INTO spip_types_documents (`extension`, `titre`) VALUES ('kmz', 'Google Earth Placemark File')" + ), + array( + 'spip_query', + "UPDATE spip_types_documents SET `mime_type`='application/vnd.google-earth.kmz' WHERE `extension`='kmz'" + ) +); + +if ($GLOBALS['meta']['version_installee'] > 1.950) // 1.950 lisait un bug dans auxiliaires.php corrige a present +{ $GLOBALS['maj'][1955] = array( - array('sql_alter', "TABLE spip_urls CHANGE `maj` date DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL") - ); + array('sql_alter', "TABLE spip_urls CHANGE `maj` date DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL") + ); +} // la mise a jour vers 1.938 contient une erreur // il faut supprimer l'autoincrement avant de supprimer la PRIMARY KEY @@ -453,11 +531,11 @@ $GLOBALS['maj'][1938] = array( # supprimer l'ancien champ et son index array('sql_alter', "TABLE spip_documents DROP INDEX `id_type`, DROP `id_type`"), ## supprimer l'autoincrement avant de supprimer la PRIMARY KEY - array('sql_alter', "TABLE spip_types_documents CHANGE `id_type` `id_type` BIGINT( 21 ) NOT NULL ") , + array('sql_alter', "TABLE spip_types_documents CHANGE `id_type` `id_type` BIGINT( 21 ) NOT NULL "), # le champ id_type devient superflu array('sql_alter', "TABLE spip_types_documents DROP `id_type`"), array('sql_alter', "TABLE spip_types_documents ADD PRIMARY KEY (`extension`)") - ); +); // PG veut une valeur par defaut a l'insertion @@ -465,11 +543,13 @@ $GLOBALS['maj'][1938] = array( $GLOBALS['maj'][1957] = array( array('sql_alter', "TABLE spip_mots CHANGE `id_groupe` `id_groupe` bigint(21) DEFAULT 0 NOT NULL"), - array('sql_alter', "TABLE spip_documents CHANGE `mode` `mode` ENUM('vignette', 'image', 'document') DEFAULT 'document' NOT NULL") - ); + array( + 'sql_alter', + "TABLE spip_documents CHANGE `mode` `mode` ENUM('vignette', 'image', 'document') DEFAULT 'document' NOT NULL" + ) +); // Ce champ est inutile et provoque une erreur a l'insertion qui l'oublie $GLOBALS['maj'][1958] = array( array('sql_alter', "TABLE spip_referers_articles DROP date") ); -?> diff --git a/www/ecrire/maj/v019_pre193.php b/www/ecrire/maj/v019_pre193.php index 0c47a243..7182c700 100644 --- a/www/ecrire/maj/v019_pre193.php +++ b/www/ecrire/maj/v019_pre193.php @@ -3,17 +3,29 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des mises à jour de SPIP, versions 1.9* + * + * @package SPIP\Core\SQL\Upgrade + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function v019_pre193($version_installee, $version_cible) -{ +/** + * Mises à jour de SPIP n°019 + * + * @param float $version_installee Version actuelle + * @param float $version_cible Version de destination + **/ +function v019_pre193($version_installee, $version_cible) { // Syndication : ajout de l'option resume=oui/non et de la langue if (upgrade_vers(1.901, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_syndic ADD `resume` VARCHAR(3) DEFAULT 'oui'"); @@ -55,47 +67,47 @@ function v019_pre193($version_installee, $version_cible) spip_query("ALTER TABLE spip_meta CHANGE `valeur` `valeur` TEXT"); // table des correspondances table->id_table $liste_tables = array(); - $liste_tables[1]='spip_articles'; - $liste_tables[2]='spip_auteurs'; - $liste_tables[3]='spip_breves'; - $liste_tables[4]='spip_documents'; - $liste_tables[5]='spip_forum'; - $liste_tables[6]='spip_mots'; - $liste_tables[7]='spip_rubriques'; - $liste_tables[8]='spip_signatures'; - $liste_tables[9]='spip_syndic'; + $liste_tables[1] = 'spip_articles'; + $liste_tables[2] = 'spip_auteurs'; + $liste_tables[3] = 'spip_breves'; + $liste_tables[4] = 'spip_documents'; + $liste_tables[5] = 'spip_forum'; + $liste_tables[6] = 'spip_mots'; + $liste_tables[7] = 'spip_rubriques'; + $liste_tables[8] = 'spip_signatures'; + $liste_tables[9] = 'spip_syndic'; ecrire_meta('index_table', serialize($liste_tables)); ## devenu inutile car suppression totale de l'indexation -/* - spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_article` as id_objet,'1' as id_table FROM spip_index_articles"); - spip_query("DROP TABLE IF EXISTS spip_index_articles"); + /* + spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_article` as id_objet,'1' as id_table FROM spip_index_articles"); + spip_query("DROP TABLE IF EXISTS spip_index_articles"); - spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_auteur` as id_objet,'2' as id_table FROM spip_index_auteurs"); - spip_query("DROP TABLE IF EXISTS spip_index_auteurs"); + spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_auteur` as id_objet,'2' as id_table FROM spip_index_auteurs"); + spip_query("DROP TABLE IF EXISTS spip_index_auteurs"); - spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_breve` as id_objet,'3' as id_table FROM spip_index_breves"); - spip_query("DROP TABLE IF EXISTS spip_index_breves"); + spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_breve` as id_objet,'3' as id_table FROM spip_index_breves"); + spip_query("DROP TABLE IF EXISTS spip_index_breves"); - spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_document` as id_objet,'4' as id_table FROM spip_index_documents"); - spip_query("DROP TABLE IF EXISTS spip_index_documents"); + spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_document` as id_objet,'4' as id_table FROM spip_index_documents"); + spip_query("DROP TABLE IF EXISTS spip_index_documents"); - spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_forum` as id_objet,'5' as id_table FROM spip_index_forum"); - spip_query("DROP TABLE IF EXISTS spip_index_forum"); + spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_forum` as id_objet,'5' as id_table FROM spip_index_forum"); + spip_query("DROP TABLE IF EXISTS spip_index_forum"); - spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_mot` as id_objet,'6' as id_table FROM spip_index_mots"); - spip_query("DROP TABLE IF EXISTS spip_index_mots"); + spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_mot` as id_objet,'6' as id_table FROM spip_index_mots"); + spip_query("DROP TABLE IF EXISTS spip_index_mots"); - spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_rubrique` as id_objet,'7' as id_table FROM spip_index_rubriques"); - spip_query("DROP TABLE IF EXISTS spip_index_rubriques"); + spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_rubrique` as id_objet,'7' as id_table FROM spip_index_rubriques"); + spip_query("DROP TABLE IF EXISTS spip_index_rubriques"); - spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_signature` as id_objet,'8' as id_table FROM spip_index_signatures"); - spip_query("DROP TABLE IF EXISTS spip_index_signatures"); + spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_signature` as id_objet,'8' as id_table FROM spip_index_signatures"); + spip_query("DROP TABLE IF EXISTS spip_index_signatures"); - spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_syndic` as id_objet,'9' as `id_table FROM spip_index_syndic"); - spip_query("DROP TABLE IF EXISTS spip_index_syndic"); -*/ + spip_query("INSERT INTO spip_index (`hash`,`points`,`id_objet`,`id_table`) SELECT `hash`,`points`,`id_syndic` as id_objet,'9' as `id_table FROM spip_index_syndic"); + spip_query("DROP TABLE IF EXISTS spip_index_syndic"); + */ maj_version(1.905); } @@ -155,12 +167,12 @@ function v019_pre193($version_installee, $version_cible) // Le logo du site n'est plus le logo par defaut des rubriques // mais pour assurer la compatibilite ascendante, on le duplique if (upgrade_vers(1.912, $version_installee, $version_cible)) { - @copy(_DIR_LOGOS.'rubon0.gif', _DIR_LOGOS.'siteon0.gif'); - @copy(_DIR_LOGOS.'ruboff0.gif', _DIR_LOGOS.'siteoff0.gif'); - @copy(_DIR_LOGOS.'rubon0.jpg', _DIR_LOGOS.'siteon0.jpg'); - @copy(_DIR_LOGOS.'ruboff0.jpg', _DIR_LOGOS.'siteoff0.jpg'); - @copy(_DIR_LOGOS.'rubon0.png', _DIR_LOGOS.'siteon0.png'); - @copy(_DIR_LOGOS.'ruboff0.png', _DIR_LOGOS.'siteoff0.png'); + @copy(_DIR_LOGOS . 'rubon0.gif', _DIR_LOGOS . 'siteon0.gif'); + @copy(_DIR_LOGOS . 'ruboff0.gif', _DIR_LOGOS . 'siteoff0.gif'); + @copy(_DIR_LOGOS . 'rubon0.jpg', _DIR_LOGOS . 'siteon0.jpg'); + @copy(_DIR_LOGOS . 'ruboff0.jpg', _DIR_LOGOS . 'siteoff0.jpg'); + @copy(_DIR_LOGOS . 'rubon0.png', _DIR_LOGOS . 'siteon0.png'); + @copy(_DIR_LOGOS . 'ruboff0.png', _DIR_LOGOS . 'siteoff0.png'); maj_version(1.912); } @@ -220,18 +232,44 @@ function v019_pre193($version_installee, $version_cible) } if (upgrade_vers(1.922, $version_installee, $version_cible)) { spip_query("ALTER TABLE spip_meta ADD `impt` ENUM('non', 'oui') DEFAULT 'oui' NOT NULL AFTER `valeur`"); - $meta_serveur = array('version_installee','adresse_site','alea_ephemere_ancien','alea_ephemere','alea_ephemere_date','langue_site','langues_proposees','date_calcul_rubriques','derniere_modif','optimiser_table','drapeau_edition','creer_preview','taille_preview','creer_htpasswd','creer_htaccess','gd_formats_read','gd_formats', - 'netpbm_formats','formats_graphiques','image_process','plugin_header','plugin'); - foreach($meta_serveur as $nom) - spip_query("UPDATE spip_meta SET `impt`='non' WHERE `nom`="._q($nom)); + $meta_serveur = array( + 'version_installee', + 'adresse_site', + 'alea_ephemere_ancien', + 'alea_ephemere', + 'alea_ephemere_date', + 'langue_site', + 'langues_proposees', + 'date_calcul_rubriques', + 'derniere_modif', + 'optimiser_table', + 'drapeau_edition', + 'creer_preview', + 'taille_preview', + 'creer_htpasswd', + 'creer_htaccess', + 'gd_formats_read', + 'gd_formats', + 'netpbm_formats', + 'formats_graphiques', + 'image_process', + 'plugin_header', + 'plugin' + ); + foreach ($meta_serveur as $nom) { + spip_query("UPDATE spip_meta SET `impt`='non' WHERE `nom`=" . _q($nom)); + } maj_version('1.922'); } if (upgrade_vers(1.923, $version_installee, $version_cible)) { - if (isset($GLOBALS['meta']['IMPORT_tables_noimport'])){ + if (isset($GLOBALS['meta']['IMPORT_tables_noimport'])) { $IMPORT_tables_noimport = unserialize($GLOBALS['meta']['IMPORT_tables_noimport']); - foreach ($IMPORT_tables_noimport as $key=>$table) - if ($table=='spip_meta') unset($IMPORT_tables_noimport[$key]); - ecrire_meta('IMPORT_tables_noimport',serialize($IMPORT_tables_noimport),'non'); + foreach ($IMPORT_tables_noimport as $key => $table) { + if ($table == 'spip_meta') { + unset($IMPORT_tables_noimport[$key]); + } + } + ecrire_meta('IMPORT_tables_noimport', serialize($IMPORT_tables_noimport), 'non'); } maj_version('1.923'); } @@ -246,49 +284,51 @@ function v019_pre193($version_installee, $version_cible) /* deplacement des sessions */ $f_session = preg_files('data', 'session_'); $repertoire = _DIR_SESSIONS; - if(!@file_exists($repertoire)) { - $repertoire = preg_replace(','._DIR_TMP.',', '', $repertoire); + if (!@file_exists($repertoire)) { + $repertoire = preg_replace(',' . _DIR_TMP . ',', '', $repertoire); $repertoire = sous_repertoire(_DIR_TMP, $repertoire); } - foreach($f_session as $f) { + foreach ($f_session as $f) { $d = basename($f); - @copy($f, $repertoire.$d); + @copy($f, $repertoire . $d); } /* deplacement des visites */ $f_visites = preg_files('data/visites'); $repertoire = sous_repertoire(_DIR_TMP, 'visites'); - foreach($f_visites as $f) { + foreach ($f_visites as $f) { $d = basename($f); - @copy($f, $repertoire.$d); + @copy($f, $repertoire . $d); } /* deplacement des upload */ $auteurs = array(); $req = spip_query("SELECT `login` FROM spip_auteurs WHERE `statut` = '0minirezo'"); - while($row = sql_fetch($req)) - $auteurs[] = $row['login']; + while ($row = sql_fetch($req)) { + $auteurs[] = $row['login']; + } $f_upload = preg_files('upload', -1, 10000, $auteurs); $repertoire = _DIR_TRANSFERT; - if(!@file_exists($repertoire)) { - $repertoire = preg_replace(','._DIR_TMP.',', '', $repertoire); + if (!@file_exists($repertoire)) { + $repertoire = preg_replace(',' . _DIR_TMP . ',', '', $repertoire); $repertoire = sous_repertoire(_DIR_TMP, $repertoire); } - foreach($auteurs as $login) { - if(is_dir('upload/'.$login)) + foreach ($auteurs as $login) { + if (is_dir('upload/' . $login)) { $sous_repertoire = sous_repertoire(_DIR_TRANSFERT, $login); + } } - foreach($f_upload as $f) { - @copy($f, _DIR_TMP.$f); + foreach ($f_upload as $f) { + @copy($f, _DIR_TMP . $f); } /* deplacement des dumps */ $f_session = preg_files('data', 'dump'); $repertoire = _DIR_DUMP; - if(!@file_exists($repertoire)) { - $repertoire = preg_replace(','._DIR_TMP.',', '', $repertoire); + if (!@file_exists($repertoire)) { + $repertoire = preg_replace(',' . _DIR_TMP . ',', '', $repertoire); $repertoire = sous_repertoire(_DIR_TMP, $repertoire); } - foreach($f_session as $f) { + foreach ($f_session as $f) { $d = basename($f); - @copy($f, $repertoire.$d); + @copy($f, $repertoire . $d); } maj_version('1.925'); } @@ -299,4 +339,3 @@ function v019_pre193($version_installee, $version_cible) maj_version('1.926'); } } -?> diff --git a/www/ecrire/notifications/instituerarticle.php b/www/ecrire/notifications/instituerarticle.php index daba95bc..c7718107 100644 --- a/www/ecrire/notifications/instituerarticle.php +++ b/www/ecrire/notifications/instituerarticle.php @@ -7,48 +7,54 @@ */ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} // Fonction appelee par divers pipelines -// http://doc.spip.org/@notifications_instituerarticle_dist +// http://code.spip.net/@notifications_instituerarticle_dist function notifications_instituerarticle_dist($quoi, $id_article, $options) { // ne devrait jamais se produire if ($options['statut'] == $options['statut_ancien']) { - spip_log("statut inchange",'notifications'); + spip_log('statut inchange', 'notifications'); + return; } include_spip('inc/texte'); - $modele = ""; + $modele = ''; if ($options['statut'] == 'publie') { - if ($GLOBALS['meta']["post_dates"]=='non' - AND strtotime($options['date'])>time()) - $modele = "notifications/article_valide"; - else - $modele = "notifications/article_publie"; + if ($GLOBALS['meta']['post_dates'] == 'non' + and strtotime($options['date']) > time() + ) { + $modele = 'notifications/article_valide'; + } else { + $modele = 'notifications/article_publie'; + } } - if ($options['statut'] == 'prop' AND $options['statut_ancien'] != 'publie') - $modele = "notifications/article_propose"; + if ($options['statut'] == 'prop' and $options['statut_ancien'] != 'publie') { + $modele = 'notifications/article_propose'; + } - if ($modele){ + if ($modele) { $destinataires = array(); - if ($GLOBALS['meta']["suivi_edito"] == "oui") - $destinataires = explode(',',$GLOBALS['meta']["adresse_suivi"]); + if ($GLOBALS['meta']['suivi_edito'] == 'oui') { + $destinataires = explode(',', $GLOBALS['meta']['adresse_suivi']); + } - $destinataires = pipeline('notifications_destinataires', + $destinataires = pipeline( + 'notifications_destinataires', array( - 'args'=>array('quoi'=>$quoi,'id'=>$id_article,'options'=>$options) - , - 'data'=>$destinataires) + 'args' => array('quoi' => $quoi, 'id' => $id_article, 'options' => $options), + 'data' => $destinataires + ) ); $texte = email_notification_article($id_article, $modele); notifications_envoyer_mails($destinataires, $texte); } } - -?> diff --git a/www/ecrire/oo/index.php b/www/ecrire/oo/index.php deleted file mode 100644 index cde596ce..00000000 --- a/www/ecrire/oo/index.php +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/www/ecrire/paquet.xml b/www/ecrire/paquet.xml index 78e71af6..0c263c80 100644 --- a/www/ecrire/paquet.xml +++ b/www/ecrire/paquet.xml @@ -1,17 +1,17 @@ + schema="23375" + documentation="https://www.spip.net" + demonstration="https://demo.spip.net" + developpement="https://core.spip.net/projects/spip/" +> SPIP - + Arnaud Martin Antoine Pitrou @@ -73,20 +73,21 @@ - - + + + - + - + @@ -119,6 +120,7 @@ + @@ -134,8 +136,9 @@ - - + + +

      @@ -152,6 +155,7 @@ + @@ -160,6 +164,7 @@ + diff --git a/www/ecrire/plugins/afficher_liste.php b/www/ecrire/plugins/afficher_liste.php index c1046ee0..421350ee 100644 --- a/www/ecrire/plugins/afficher_liste.php +++ b/www/ecrire/plugins/afficher_liste.php @@ -3,19 +3,21 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/charsets'); /** * Afficher une liste de plugins dans l'interface - * http://doc.spip.org/@affiche_liste_plugins + * http://code.spip.net/@affiche_liste_plugins * * @param string $url_page * @param array $liste_plugins @@ -25,30 +27,37 @@ include_spip('inc/charsets'); * @param string $afficher_un * @return string */ -function plugins_afficher_liste_dist($url_page,$liste_plugins, $liste_plugins_checked, $liste_plugins_actifs, $dir_plugins=_DIR_PLUGINS,$afficher_un = 'afficher_plugin'){ - $get_infos = charger_fonction('get_infos','plugins'); - $ligne_plug = charger_fonction($afficher_un,'plugins'); +function plugins_afficher_liste_dist( + $url_page, + $liste_plugins, + $liste_plugins_checked, + $liste_plugins_actifs, + $dir_plugins = _DIR_PLUGINS, + $afficher_un = 'afficher_plugin' +) { + $get_infos = charger_fonction('get_infos', 'plugins'); + $ligne_plug = charger_fonction($afficher_un, 'plugins'); $all_infos = $get_infos($liste_plugins, false, $dir_plugins); $all_infos = pipeline('filtrer_liste_plugins', - array( - 'args'=>array( - 'liste_plugins'=>$liste_plugins, - 'liste_plugins_checked'=>$liste_plugins_checked, - 'liste_plugins_actifs'=>$liste_plugins_actifs, - 'dir_plugins'=>$dir_plugins), - 'data'=>$all_infos - ) - ); + array( + 'args' => array( + 'liste_plugins' => $liste_plugins, + 'liste_plugins_checked' => $liste_plugins_checked, + 'liste_plugins_actifs' => $liste_plugins_actifs, + 'dir_plugins' => $dir_plugins + ), + 'data' => $all_infos + ) + ); $liste_plugins = array_flip($liste_plugins); - foreach($liste_plugins as $chemin => $v) { + foreach ($liste_plugins as $chemin => $v) { // des plugins ont pu etre enleves de la liste par le pipeline. On en tient compte. - if (isset($all_infos[$chemin])){ + if (isset($all_infos[$chemin])) { $liste_plugins[$chemin] = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($all_infos[$chemin]['nom'])))))); - } - else { + } else { unset($liste_plugins[$chemin]); } } @@ -58,18 +67,20 @@ function plugins_afficher_liste_dist($url_page,$liste_plugins, $liste_plugins_ch $block_par_lettre = false;//count($liste_plugins)>10; $fast_liste_plugins_actifs = array(); $fast_liste_plugins_checked = array(); - if (is_array($liste_plugins_actifs)) + if (is_array($liste_plugins_actifs)) { $fast_liste_plugins_actifs = array_flip($liste_plugins_actifs); - if (is_array($liste_plugins_checked)) + } + if (is_array($liste_plugins_checked)) { $fast_liste_plugins_checked = array_flip($liste_plugins_checked); + } $res = ''; $block = ''; $initiale = ''; $block_actif = false; - foreach($liste_plugins as $plug => $nom){ - if (($i=substr($nom,0,1))!==$initiale){ - $res .= $block_par_lettre ? affiche_block_initiale($initiale,$block,$block_actif): $block; + foreach ($liste_plugins as $plug => $nom) { + if (($i = substr($nom, 0, 1)) !== $initiale) { + $res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block; $initiale = $i; $block = ''; $block_actif = false; @@ -78,26 +89,27 @@ function plugins_afficher_liste_dist($url_page,$liste_plugins, $liste_plugins_ch $actif = isset($fast_liste_plugins_actifs[$plug]); $checked = isset($fast_liste_plugins_checked[$plug]); $block_actif = $block_actif | $actif; - $expose = ($exposed AND ($exposed==$plug OR $exposed==$dir_plugins . $plug OR $exposed==substr($dir_plugins,strlen(_DIR_RACINE)) . $plug)); - $block .= $ligne_plug($url_page, $plug, $checked, $actif, $expose, "item", $dir_plugins)."\n"; + $expose = ($exposed and ($exposed == $plug or $exposed == $dir_plugins . $plug or $exposed == substr($dir_plugins, + strlen(_DIR_RACINE)) . $plug)); + $block .= $ligne_plug($url_page, $plug, $checked, $actif, $expose, "item", $dir_plugins) . "\n"; } - $res .= $block_par_lettre ? affiche_block_initiale($initiale,$block,$block_actif): $block; + $res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block; $class = basename($dir_plugins); + return $res ? "
        $res
      " : ""; } -// http://doc.spip.org/@affiche_block_initiale -function affiche_block_initiale($initiale,$block,$block_actif){ - if (strlen($block)){ +// http://code.spip.net/@affiche_block_initiale +function affiche_block_initiale($initiale, $block, $block_actif) { + if (strlen($block)) { return "
    • " - . bouton_block_depliable($initiale,$block_actif?true:false) - . debut_block_depliable($block_actif) - . "
        $block
      " - . fin_block() - . "
    • "; + . bouton_block_depliable($initiale, $block_actif ? true : false) + . debut_block_depliable($block_actif) + . "
        $block
      " + . fin_block() + . ""; } + return ""; } - -?> diff --git a/www/ecrire/plugins/afficher_nom_plugin.php b/www/ecrire/plugins/afficher_nom_plugin.php index fdbecadb..c260865b 100644 --- a/www/ecrire/plugins/afficher_nom_plugin.php +++ b/www/ecrire/plugins/afficher_nom_plugin.php @@ -3,39 +3,50 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/charsets'); include_spip('inc/texte'); include_spip('plugins/afficher_plugin'); -// http://doc.spip.org/@ligne_plug -function plugins_afficher_nom_plugin_dist($url_page, $plug_file, $checked, $actif, $expose=false, $class_li="item", $dir_plugins=_DIR_PLUGINS){ - static $id_input=0; +// http://code.spip.net/@ligne_plug +function plugins_afficher_nom_plugin_dist( + $url_page, + $plug_file, + $checked, + $actif, + $expose = false, + $class_li = "item", + $dir_plugins = _DIR_PLUGINS +) { + static $id_input = 0; static $versions = array(); $erreur = false; $s = ""; - $get_infos = charger_fonction('get_infos','plugins'); + $get_infos = charger_fonction('get_infos', 'plugins'); $info = $get_infos($plug_file, false, $dir_plugins); // numerotons les occurences d'un meme prefix $versions[$info['prefix']] = isset($versions[$info['prefix']]) ? $versions[$info['prefix']] + 1 : ''; $id = $info['prefix'] . $versions[$info['prefix']]; - + $class = $class_li; - $class .= $actif?" actif":""; - $class .= $expose?" on":""; + $class .= $actif ? " actif" : ""; + $class .= $expose ? " on" : ""; $erreur = isset($info['erreur']); - if ($erreur) + if ($erreur) { $class .= " error"; + } $s .= "
    • "; // Cartouche Resume @@ -44,19 +55,18 @@ function plugins_afficher_nom_plugin_dist($url_page, $plug_file, $checked, $acti $prefix = $info['prefix']; $dir = "$dir_plugins$plug_file/lang/$prefix"; $desc = plugin_propre($info['description'], $dir); - $url_stat = parametre_url($url_page, "plugin",$dir_plugins.$plug_file); + $url_stat = parametre_url($url_page, "plugin", $dir_plugins . $plug_file); - $s .= "".typo($info['nom']).""; - $s .= " ".$info['version'].""; - $s .= " - ".plugin_etat_en_clair($info['etat']).""; + $s .= "" . typo($info['nom']) . ""; + $s .= " " . $info['version'] . ""; + $s .= " - " . plugin_etat_en_clair($info['etat']) . ""; $s .= ""; - if ($erreur){ + if ($erreur) { $s .= "
      " . join('
      ', $info['erreur']) . "
      "; } $s .= "
    • "; + return $s; } - -?> diff --git a/www/ecrire/plugins/afficher_plugin.php b/www/ecrire/plugins/afficher_plugin.php index 7ae782a9..45ca2408 100644 --- a/www/ecrire/plugins/afficher_plugin.php +++ b/www/ecrire/plugins/afficher_plugin.php @@ -3,197 +3,242 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Fonctions pour l'affichage des informations de plugins + * + * @package SPIP\Core\Plugins + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/charsets'); include_spip('inc/texte'); include_spip('inc/plugin'); // pour plugin_est_installe -// http://doc.spip.org/@ligne_plug -function plugins_afficher_plugin_dist($url_page, $plug_file, $checked, $actif, $expose=false, $class_li="item", $dir_plugins=_DIR_PLUGINS) { +// http://code.spip.net/@ligne_plug +function plugins_afficher_plugin_dist( + $url_page, + $plug_file, + $checked, + $actif, + $expose = false, + $class_li = "item", + $dir_plugins = _DIR_PLUGINS +) { static $id_input = 0; static $versions = array(); - $force_reload = (_request('var_mode')=='recalcul'); - $get_infos = charger_fonction('get_infos','plugins'); + $force_reload = (_request('var_mode') == 'recalcul'); + $get_infos = charger_fonction('get_infos', 'plugins'); $info = $get_infos($plug_file, $force_reload, $dir_plugins); $prefix = $info['prefix']; $cfg = ""; - $checkable = ($dir_plugins!==_DIR_PLUGINS_DIST); - $nom = plugin_nom($info,$dir_plugins,$plug_file); + $checkable = ($dir_plugins !== _DIR_PLUGINS_DIST); + $nom = plugin_nom($info, $dir_plugins, $plug_file); + $erreur = ""; - if (!plugin_version_compatible($info['compatibilite'], $GLOBALS['spip_version_branche'],'spip')){ + if (!plugin_version_compatible($info['compatibilite'], $GLOBALS['spip_version_branche'], 'spip')) { $info['slogan'] = _T('plugin_info_non_compatible_spip'); - $erreur = http_img_pack("plugin-dis-32.png",_T('plugin_info_non_compatible_spip')," class='picto_err'",_T('plugin_info_non_compatible_spip')); + $erreur = http_img_pack("plugin-dis-32.png", _T('plugin_info_non_compatible_spip'), " class='picto_err'", + _T('plugin_info_non_compatible_spip')); $class_li .= " disabled"; $checkable = false; - } - elseif (isset($info['erreur'])) { + } elseif (isset($info['erreur'])) { $class_li .= " error"; - $erreur = http_img_pack("plugin-err-32.png",_T('plugin_info_erreur_xml')," class='picto_err'",_T('plugin_info_erreur_xml')) - . "
      " . join('
      ', $info['erreur']) . "
      "; + $erreur = http_img_pack("plugin-err-32.png", _T('plugin_info_erreur_xml'), " class='picto_err'", + _T('plugin_info_erreur_xml')) + . "
      " . join('
      ', $info['erreur']) . "
      "; $checkable = false; - } - elseif (isset($GLOBALS['erreurs_activation_raw'][$dir_plugins.$plug_file])){ + } elseif (isset($GLOBALS['erreurs_activation_raw'][$dir_plugins . $plug_file])) { $class_li .= " error"; - $erreur = http_img_pack("plugin-err-32.png",_T('plugin_impossible_activer', array('plugin' => $nom))," class='picto_err'",_T('plugin_impossible_activer', array('plugin' => $nom))) - . "
      " . implode("
      ",$GLOBALS['erreurs_activation_raw'][$dir_plugins.$plug_file]) . "
      "; + $erreur = http_img_pack("plugin-err-32.png", _T('plugin_impossible_activer', array('plugin' => $nom)), + " class='picto_err'", _T('plugin_impossible_activer', array('plugin' => $nom))) + . "
      " . implode("
      ", + $GLOBALS['erreurs_activation_raw'][$dir_plugins . $plug_file]) . "
      "; + } else { + $cfg = $actif ? plugin_bouton_config($plug_file, $info, $dir_plugins) : ""; } - else - $cfg = $actif ? plugin_bouton_config($plug_file,$info,$dir_plugins) : ""; // numerotons les occurrences d'un meme prefix $versions[$prefix] = $id = isset($versions[$prefix]) ? $versions[$prefix] + 1 : ''; - $class_li .= ($actif?" actif":"") . ($expose?" on":""); + $class_li .= ($actif ? " actif" : "") . ($expose ? " on" : ""); + return "
    • " - . ((!$checkable AND !$checked) - ? '': plugin_checkbox(++$id_input, $dir_plugins.$plug_file, $checked)) - . plugin_resume($info, $dir_plugins, $plug_file, $url_page) + . ((!$checkable and !$checked) + ? '' : plugin_checkbox(++$id_input, $dir_plugins . $plug_file, $checked)) + . plugin_resume($info, $dir_plugins, $plug_file, $url_page) . $cfg . $erreur - . (($dir_plugins!==_DIR_PLUGINS_DIST AND plugin_est_installe($plug_file)) - ? plugin_desintalle($plug_file,$nom,$dir_plugins) : '') + . (($dir_plugins !== _DIR_PLUGINS_DIST and plugin_est_installe($plug_file)) + ? plugin_desintalle($plug_file, $nom, $dir_plugins) : '') . "
      " // pour l'ajax de exec/info_plugin . (!$expose ? '' : affiche_bloc_plugin($plug_file, $info, $dir_plugins)) . "
      " - ."
    • "; + . ""; } -function plugin_bouton_config($nom, $infos, $dir) -{ +function plugin_bouton_config($nom, $infos, $dir) { // la verification se base sur le filesystem // il faut donc n'utiliser que des minuscules, par convention $prefix = strtolower($infos['prefix']); // si plugin.xml fournit un squelette, le prendre - if ($infos['config']) + if (isset($infos['config']) and $infos['config']) { return recuperer_fond("$dir$nom/" . $infos['config'], - array('script' => 'configurer_' . $prefix, - 'nom' => $nom)); + array( + 'script' => 'configurer_' . $prefix, + 'nom' => $nom + )); + } // si le plugin CFG est la, l'essayer - if (defined('_DIR_PLUGIN_CFG')) { + if (defined('_DIR_PLUGIN_CFG')) { if (include_spip('inc/cfg')) // test CFG version >= 1.0.5 - if ($cfg = icone_lien_cfg("$dir$nom", "cfg")) + { + if ($cfg = icone_lien_cfg("$dir$nom", "cfg")) { return ""; + } + } } // sinon prendre le squelette std sur le nom std return recuperer_fond("prive/squelettes/inclure/cfg", - array('script' => 'configurer_' . $prefix, - 'nom' => $nom)); + array( + 'script' => 'configurer_' . $prefix, + 'nom' => $nom + )); } // checkbox pour activer ou desactiver // si ce n'est pas une extension -function plugin_checkbox($id_input, $file, $actif) -{ - $name = substr(md5($file),0,16); +function plugin_checkbox($id_input, $file, $actif) { + $name = substr(md5($file), 0, 16); return "
      \n" . "" - . "\n" + . "\n" . "
      "; } -function plugin_nom($info, $dir_plugins, $plug_file){ +function plugin_nom($info, $dir_plugins, $plug_file) { $prefix = $info['prefix']; $dir = "$dir_plugins$plug_file"; // Si dtd paquet, on traite le nom soit par son item de langue soit par sa valeur immediate a l'index "nom" if ($info['dtd'] == "paquet") { $nom = PtoBR(plugin_propre("{$prefix}_nom", "$dir/lang/paquet-$prefix")); - if (!$nom) + if (!$nom) { $nom = PtoBR(propre($info['nom'])); - } - else + } + } else { $nom = typo(attribut_html($info['nom'])); + } return trim($nom); } // Cartouche Resume -function plugin_resume($info, $dir_plugins, $plug_file, $url_page){ +function plugin_resume($info, $dir_plugins, $plug_file, $url_page) { $prefix = $info['prefix']; $dir = "$dir_plugins$plug_file"; $slogan = PtoBR(plugin_propre($info['slogan'], "$dir/lang/paquet-$prefix")); // une seule ligne dans le slogan : couper si besoin - if (($p=strpos($slogan, "
      "))!==FALSE) - $slogan = substr($slogan, 0,$p); + if (($p = strpos($slogan, "
      ")) !== false) { + $slogan = substr($slogan, 0, $p); + } // couper par securite $slogan = couper($slogan, 80); $nom = plugin_nom($info, $dir_plugins, $plug_file); - $url = parametre_url($url_page, "plugin", substr($dir,strlen(_DIR_RACINE))); + $url = parametre_url($url_page, "plugin", substr($dir, strlen(_DIR_RACINE))); if (isset($info['logo']) and $i = trim($info['logo'])) { include_spip("inc/filtres_images_mini"); - $i = inserer_attribut(image_reduire("$dir/$i", 32),'alt',''); + $i = inserer_attribut(image_reduire("$dir/$i", 32), 'alt', ''); $i = ""; - } else $i = ''; + } else { + $i = ''; + } return "
      " . "

      " . $nom . "

      " - . " ".$info['version']."" + . " " . $info['version'] . "" . " - " . plugin_etat_en_clair($info['etat']) . "" - . "
      ".$slogan."
      " + . "
      " . $slogan . "
      " . $i . "
      "; } -function plugin_desintalle($plug_file, $nom, $dir_plugins=null){ - if (!$dir_plugins) +function plugin_desintalle($plug_file, $nom, $dir_plugins = null) { + if (!$dir_plugins) { $dir_plugins = _DIR_PLUGINS; + } - $action = redirige_action_auteur('desinstaller_plugin',"$dir_plugins::$plug_file",'admin_plugin'); + $action = redirige_action_auteur('desinstaller_plugin', "$dir_plugins::$plug_file", 'admin_plugin'); $text = _T('bouton_desinstaller'); $text2 = _T('info_desinstaller_plugin'); $file = basename($plug_file); - return "" ; + . $text + . "]"; } -function plugin_etat_en_clair($etat){ - if (!in_array($etat,array('stable','test','experimental'))) +/** + * Traduit un type d'état de plugin + * + * Si l'état n'existe pas, prendra par défaut 'developpement' + * + * @param string $etat + * Le type d'état (stable, test, ...) + * @return string + * Traduction de l'état dans la langue en cours + **/ +function plugin_etat_en_clair($etat) { + if (!in_array($etat, array('stable', 'test', 'experimental'))) { $etat = 'developpement'; - return _T('plugin_etat_'.$etat); + } + + return _T('plugin_etat_' . $etat); } -// http://doc.spip.org/@plugin_propre -function plugin_propre($texte, $module='') { +// http://code.spip.net/@plugin_propre +function plugin_propre($texte, $module = '') { // retirer le retour a la racine du module, car le find_in_path se fait depuis la racine - if (_DIR_RACINE AND strncmp($module,_DIR_RACINE,strlen(_DIR_RACINE))==0) - $module = substr($module,strlen(_DIR_RACINE)); + if (_DIR_RACINE and strncmp($module, _DIR_RACINE, strlen(_DIR_RACINE)) == 0) { + $module = substr($module, strlen(_DIR_RACINE)); + } if (preg_match("|^\w+_[\w_]+$|", $texte)) { $texte = _T(($module ? "$module:" : '') . $texte, array(), array('force' => false)); } + return propre($texte); } - -// http://doc.spip.org/@affiche_bloc_plugin -function affiche_bloc_plugin($plug_file, $info, $dir_plugins=null) { - if (!$dir_plugins) +// http://code.spip.net/@affiche_bloc_plugin +function affiche_bloc_plugin($plug_file, $info, $dir_plugins = null) { + if (!$dir_plugins) { $dir_plugins = _DIR_PLUGINS; + } $prefix = $info['prefix']; $dir = "$dir_plugins$plug_file/lang/paquet-$prefix"; @@ -202,38 +247,48 @@ function affiche_bloc_plugin($plug_file, $info, $dir_plugins=null) { // TODO: le traiter_multi ici n'est pas beau // cf. description du plugin/_stable_/ortho/plugin.xml $description = ""; - if (isset($info['description'])) + if (isset($info['description'])) { $description = plugin_propre($info['description'], $dir); + } if (isset($info['documentation']) - AND $lien = $info['documentation']){ - $description .= "

      " . _T('en_savoir_plus') .'

      '; + and $lien = $info['documentation'] + ) { + $description .= "

      " . _T('en_savoir_plus') . '

      '; } - $s .= "
      ".$description."
      \n"; + $s .= "
      " . $description . "
      \n"; - if (isset($info['auteur'])){ - if (is_array($info['auteur'])) + if (isset($info['auteur'])) { + if (is_array($info['auteur'])) { $a = formater_credits($info['auteur'], ', '); - // pour compat mais ne doit plus arriver - else + } // pour compat mais ne doit plus arriver + else { $a = trim($info['auteur']); - if ($a) - $s .= "
      " . _T('public:par_auteur') ."
      ". PtoBR(propre($a, $dir)) . "
      \n"; + } + if ($a) { + $s .= "
      " . _T('public:par_auteur') . "
      " . PtoBR(propre($a, + $dir)) . "
      \n"; + } } - if (isset($info['credit'])){ - if ($a = formater_credits($info['credit'], ', ')) - $s .= "
      " . _T('plugin_info_credit') ."
      ". PtoBR(propre($a, $dir)) . "
      \n"; + if (isset($info['credit'])) { + if ($a = formater_credits($info['credit'], ', ')) { + $s .= "
      " . _T('plugin_info_credit') . "
      " . PtoBR(propre($a, + $dir)) . "
      \n"; + } } if (isset($info['licence'])) { - if (is_array($info['licence'])) + if (is_array($info['licence'])) { $a = formater_credits($info['licence'], ', '); - // pour compat mais ne doit plus arriver - else + } // pour compat mais ne doit plus arriver + else { $a = trim($info['licence']); - if ($a) - $s .= "
      " . _T('intitule_licence') ."
      ". PtoBR(propre($a, $dir)) . "
      \n"; + } + if ($a) { + $s .= "
      " . _T('intitule_licence') . "
      " . PtoBR(propre($a, + $dir)) . "
      \n"; + } } $s = "
      $s
      "; @@ -243,46 +298,47 @@ function affiche_bloc_plugin($plug_file, $info, $dir_plugins=null) { // $infotech = array(); - $version = "
      "._T('version')."
      ".$info['version']; + $version = "
      " . _T('version') . "
      " . $info['version']; // Version SVN - if ($svn_revision = version_svn_courante($dir_plugins.$plug_file)) - $version .= ($svn_revision<0 ? ' SVN':'').' ['.abs($svn_revision).']'; - $version .="
      "; + if ($svn_revision = version_svn_courante($dir_plugins . $plug_file)) { + $version .= ($svn_revision < 0 ? ' SVN' : '') . ' [' . abs($svn_revision) . ']'; + } + $version .= ""; $infotech[] = $version; - $infotech[] = "
      "._T('repertoire_plugins')."
      ".joli_repertoire("$dir_plugins$plug_file")."
      "; + $infotech[] = "
      " . _T('repertoire_plugins') . "
      " . joli_repertoire("$dir_plugins$plug_file") . "
      "; // source zip le cas echeant - $infotech[] = (lire_fichier($dir_plugins.$plug_file.'/install.log', $log) - AND preg_match(',^source:(.*)$,m', $log, $r)) - ? '
      '._T('plugin_source').'
      '.trim($r[1])."
      " - :''; + $infotech[] = (lire_fichier($dir_plugins . $plug_file . '/install.log', $log) + and preg_match(',^source:(.*)$,m', $log, $r)) + ? '
      ' . _T('plugin_source') . '
      ' . trim($r[1]) . "
      " + : ''; $infotech[] = !$info['necessite'] ? '' : - ('
      ' . _T('plugin_info_necessite') . '
      ' . join(' ', array_map('array_shift', $info['necessite'])) . '
      '); + ('
      ' . _T('plugin_info_necessite') . '
      ' . join(' ', + array_map('array_shift', $info['necessite'])) . '
      '); $s .= "
      " . join('', $infotech) - ."
      "; + . ""; return $s; } -function formater_credits($infos, $sep=', ') { +function formater_credits($infos, $sep = ', ') { $texte = ''; foreach ($infos as $_credit) { - if ($texte) + if ($texte) { $texte .= $sep; + } // Si le credit en cours n'est pas un array c'est donc un copyright $texte .= (!is_array($_credit)) - ? PtoBR(propre($_credit)) - : ($_credit['url'] ? '' : '') . - $_credit['nom'] . - ($_credit['url'] ? '' : ''); + ? PtoBR(propre($_credit)) + : ($_credit['url'] ? '' : '') . + $_credit['nom'] . + ($_credit['url'] ? '' : ''); } return $texte; } - -?> diff --git a/www/ecrire/plugins/afficher_repertoires.php b/www/ecrire/plugins/afficher_repertoires.php index af14268f..d232e5cd 100644 --- a/www/ecrire/plugins/afficher_repertoires.php +++ b/www/ecrire/plugins/afficher_repertoires.php @@ -3,62 +3,68 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -// http://doc.spip.org/@affiche_arbre_plugins -function plugins_afficher_repertoires_dist($url_page, $liste_plugins, $liste_plugins_actifs){ - $ligne_plug = charger_fonction('afficher_plugin','plugins'); +// http://code.spip.net/@affiche_arbre_plugins +function plugins_afficher_repertoires_dist($url_page, $liste_plugins, $liste_plugins_actifs) { + $ligne_plug = charger_fonction('afficher_plugin', 'plugins'); $racine = basename(_DIR_PLUGINS); $init_dir = $current_dir = ""; // liste des repertoires deplies : construit en remontant l'arbo de chaque plugin actif // des qu'un path est deja note deplie on s'arrete - $deplie = array($racine=>true); - $fast_liste_plugins_actifs=array(); - foreach($liste_plugins_actifs as $key=>$plug){ + $deplie = array($racine => true); + $fast_liste_plugins_actifs = array(); + foreach ($liste_plugins_actifs as $key => $plug) { $chemin_plug = chemin_plug($racine, $plug); - $fast_liste_plugins_actifs[$chemin_plug]=true; - $dir = dirname($chemin_plug);$maxiter=100; - while(strlen($dir) && !isset($deplie[$dir]) && $dir!=$racine && $maxiter-->0){ + $fast_liste_plugins_actifs[$chemin_plug] = true; + $dir = dirname($chemin_plug); + $maxiter = 100; + while (strlen($dir) && !isset($deplie[$dir]) && $dir != $racine && $maxiter-- > 0) { $deplie[$dir] = true; $dir = dirname($dir); } } // index repertoires --> plugin - $dir_index=array(); - foreach($liste_plugins as $key=>$plug){ + $dir_index = array(); + foreach ($liste_plugins as $key => $plug) { $liste_plugins[$key] = chemin_plug($racine, $plug); $dir_index[dirname($liste_plugins[$key])][] = $key; } $visible = @isset($deplie[$current_dir]); - $maxiter=1000; + $maxiter = 1000; $res = ''; - while (count($liste_plugins) && $maxiter--){ + while (count($liste_plugins) && $maxiter--) { // le rep suivant $dir = dirname(reset($liste_plugins)); - if ($dir != $current_dir) - $res .= tree_open_close_dir($current_dir,$dir,$deplie); + if ($dir != $current_dir) { + $res .= tree_open_close_dir($current_dir, $dir, $deplie); + } // d'abord tous les plugins du rep courant - if (isset($dir_index[$current_dir])) - foreach($dir_index[$current_dir] as $key){ + if (isset($dir_index[$current_dir])) { + foreach ($dir_index[$current_dir] as $key) { $plug = $liste_plugins[$key]; $actif = @isset($fast_liste_plugins_actifs[$plug]); - $id = substr(md5($plug),0,16); - $res .= $ligne_plug($url_page, str_replace(_DIR_PLUGINS, '', _DIR_RACINE.$plug), $actif, 'menu-entree') . "\n"; + $id = substr(md5($plug), 0, 16); + $res .= $ligne_plug($url_page, str_replace(_DIR_PLUGINS, '', _DIR_RACINE . $plug), $actif, + 'menu-entree') . "\n"; unset($liste_plugins[$key]); } + } } - $res .= tree_open_close_dir($current_dir,$init_dir, true); + $res .= tree_open_close_dir($current_dir, $init_dir, true); return "\n"; $output .= fin_block(); $output .= "\n"; } $chemin = ""; - if (count($tcom)) - $chemin .= implode("/",$tcom)."/"; + if (count($tcom)) { + $chemin .= implode("/", $tcom) . "/"; + } // ouvrir les repertoires jusqu'a la cible - while($open = array_shift($ttarg)){ - $visible = @isset($deplie[$chemin.$open]); + while ($open = array_shift($ttarg)) { + $visible = @isset($deplie[$chemin . $open]); $chemin .= $open . "/"; $output .= "
    • "; - $output .= bouton_block_depliable($chemin,$visible); + $output .= bouton_block_depliable($chemin, $visible); $output .= debut_block_depliable($visible); $output .= "'; + $texte .= ''; } + return $texte; } /** - * Compter les breves dans une rubrique - * - * @param array $flux - * @return array + * Compter les brèves dans une rubrique + * + * @pipeline objet_compte_enfants + * + * @param array $flux Données du pipeline + * @return array Données du pipeline */ -function breves_objet_compte_enfants($flux){ - if ($flux['args']['objet']=='rubrique' - AND $id_rubrique=intval($flux['args']['id_objet'])) { +function breves_objet_compte_enfants($flux) { + if ($flux['args']['objet'] == 'rubrique' + and $id_rubrique = intval($flux['args']['id_objet']) + ) { // juste les publies ? if (array_key_exists('statut', $flux['args']) and ($flux['args']['statut'] == 'publie')) { - $flux['data']['breve'] = sql_countsel('spip_breves', "id_rubrique=".intval($id_rubrique)." AND (statut='publie')"); + $flux['data']['breve'] = sql_countsel( + 'spip_breves', + 'id_rubrique=' . intval($id_rubrique) . " AND (statut='publie')" + ); } else { - $flux['data']['breve'] = sql_countsel('spip_breves', "id_rubrique=".intval($id_rubrique)." AND (statut='publie' OR statut='prop')"); + $flux['data']['breve'] = sql_countsel( + 'spip_breves', + 'id_rubrique=' . intval($id_rubrique) . " AND (statut='publie' OR statut='prop')" + ); } } + return $flux; } /** - * Changer la langue des breves si la rubrique change - * - * @param array $flux - * @return array + * Changer la langue des brèves si la rubrique change + * + * @pipeline trig_calculer_langues_rubriques + * + * @param array $flux Données du pipeline + * @return array Données du pipeline */ -function breves_trig_calculer_langues_rubriques($flux){ - - $s = sql_select("A.id_breve AS id_breve, R.lang AS lang", "spip_breves AS A, spip_rubriques AS R", "A.id_rubrique = R.id_rubrique AND A.langue_choisie != 'oui' AND (A.lang='' OR R.lang<>'') AND R.lang<>A.lang"); +function breves_trig_calculer_langues_rubriques($flux) { + $s = sql_select( + 'A.id_breve AS id_breve, R.lang AS lang', + 'spip_breves AS A, spip_rubriques AS R', + "A.id_rubrique = R.id_rubrique AND A.langue_choisie != 'oui' AND (A.lang='' OR R.lang<>'') AND R.lang<>A.lang" + ); while ($row = sql_fetch($s)) { $id_breve = $row['id_breve']; - sql_updateq('spip_breves', array("lang"=>$row['lang'], 'langue_choisie'=>'non'), "id_breve=$id_breve"); + sql_updateq( + 'spip_breves', + array('lang' => $row['lang'], 'langue_choisie' => 'non'), + 'id_breve='.intval($id_breve) + ); } - + return $flux; } /** - * Publier et dater les rubriques qui ont une breve publie - * - * @param array $flux - * @return array + * Publier et dater les rubriques qui ont une brève publiée + * + * @pipeline calculer_rubriques + * + * @param array $flux Données du pipeline + * @return array Données du pipeline */ -function breves_calculer_rubriques($flux){ +function breves_calculer_rubriques($flux) { + $r = sql_select( + 'R.id_rubrique AS id, max(A.date_heure) AS date_h', + 'spip_rubriques AS R JOIN spip_breves AS A ON R.id_rubrique = A.id_rubrique', + "A.date_heure>R.date_tmp AND A.statut='publie' ", + 'R.id_rubrique' + ); + while ($row = sql_fetch($r)) { + sql_updateq( + 'spip_rubriques', + array('statut_tmp' => 'publie', 'date_tmp' => $row['date_h']), + 'id_rubrique=' . intval($row['id']) + ); + } - $r = sql_select("R.id_rubrique AS id, max(A.date_heure) AS date_h", "spip_rubriques AS R, spip_breves AS A", "R.id_rubrique = A.id_rubrique AND R.date_tmp <= A.date_heure AND A.statut='publie' ", "R.id_rubrique"); - while ($row = sql_fetch($r)) - sql_updateq('spip_rubriques', array('statut_tmp'=>'publie', 'date_tmp'=>$row['date_h']), "id_rubrique=".$row['id']); - return $flux; } - - /** - * Ajouter les breves a valider sur la page d'accueil + * Ajouter les brèves à valider sur la page d'accueil * - * @param array $flux - * @return array -**/ -function breves_accueil_encours($flux){ - $lister_objets = charger_fonction('lister_objets','inc'); - + * @pipeline accueil_encours + * + * @param string $flux HTML du bloc encours sur la page d'accueil privée + * @return string HTML du bloc encours sur la page d'accueil privée + **/ +function breves_accueil_encours($flux) { + $lister_objets = charger_fonction('lister_objets', 'inc'); $flux .= $lister_objets('breves', array( - 'titre'=>afficher_plus_info(generer_url_ecrire('breves'))._T('breves:info_breves_valider'), - 'statut'=>array('prepa','prop'), - 'par'=>'date_heure')); + 'titre' => afficher_plus_info(generer_url_ecrire('breves')) . _T('breves:info_breves_valider'), + 'statut' => array('prepa', 'prop'), + 'par' => 'date_heure' + )); return $flux; } - /** - * Optimiser la base de donnee en supprimant les liens orphelins + * Optimiser la base de données en supprimant les liens de brèves orphelins * - * @param array $flux - * @return array + * @pipeline optimiser_base_disparus + * + * @param array $flux Données du pipeline + * @return array Données du pipeline */ -function breves_optimiser_base_disparus($flux){ +function breves_optimiser_base_disparus($flux) { $n = &$flux['data']; $mydate = $flux['args']['date']; # les breves qui sont dans une id_rubrique inexistante - $res = sql_select("B.id_breve AS id", - "spip_breves AS B - LEFT JOIN spip_rubriques AS R - ON B.id_rubrique=R.id_rubrique", - "R.id_rubrique IS NULL - AND B.maj < $mydate"); - - $n+= optimiser_sansref('spip_breves', 'id_breve', $res); + $res = sql_select( + 'B.id_breve AS id', + 'spip_breves AS B + LEFT JOIN spip_rubriques AS R + ON B.id_rubrique=R.id_rubrique', + 'R.id_rubrique IS NULL + AND B.maj < ' . sql_quote($mydate) + ); + $n += optimiser_sansref('spip_breves', 'id_breve', $res); // // Breves // - - sql_delete("spip_breves", "statut='refuse' AND maj < $mydate"); + sql_delete('spip_breves', "statut='refuse' AND maj < $mydate"); return $flux; - } /** - * Afficher le nombre de breves dans chaque rubrique + * Afficher le nombre de brèves dans chaque rubrique * - * @param array $flux - * @return array + * @pipeline boite_infos + * + * @param array $flux Données du pipeline + * @return array Données du pipeline */ -function breves_boite_infos($flux){ +function breves_boite_infos($flux) { if ( isset($flux['args']['type']) and $flux['args']['type'] == 'rubrique' - and isset($flux['args']['id']) and $id_rubrique = $flux['args']['id'] - ){ - if ($nb = sql_countsel('spip_breves',"statut='publie' AND id_rubrique=".intval($id_rubrique))){ - $nb = "
      ". singulier_ou_pluriel($nb, "breves:info_1_breve", "breves:info_nb_breves") . "
      "; - if ($p = strpos($flux['data'],"")) - $flux['data'] = substr_replace($flux['data'],$nb,$p,0); + and isset($flux['args']['id']) and $id_rubrique = $flux['args']['id'] + ) { + if ($nb = sql_countsel('spip_breves', "statut='publie' AND id_rubrique=" . intval($id_rubrique))) { + $nb = '
      ' . singulier_ou_pluriel($nb, 'breves:info_1_breve', 'breves:info_nb_breves') . '
      '; + if ($p = strpos($flux['data'], '')) { + $flux['data'] = substr_replace($flux['data'], $nb, $p, 0); + } } } + return $flux; } /** - * Configuration des contenus - * @param array $flux - * @return array + * Ajoute le formulaire de configuration des brèves sur la page de + * configuration des contenus + * + * @pipeline affiche_milieu + * + * @param array $flux Données du pipeline + * @return array Données du pipeline */ -function breves_affiche_milieu($flux){ - if ($flux["args"]["exec"] == "configurer_contenu") { - $flux["data"] .= recuperer_fond('prive/squelettes/inclure/configurer',array('configurer'=>'configurer_breves')); +function breves_affiche_milieu($flux) { + if ($flux['args']['exec'] == 'configurer_contenu') { + $flux['data'] .= recuperer_fond('prive/squelettes/inclure/configurer', array('configurer' => 'configurer_breves')); } + return $flux; } - - -?> diff --git a/www/plugins-dist/breves/formulaires/configurer_breves.html b/www/plugins-dist/breves/formulaires/configurer_breves.html index 1f75b4c5..41218001 100644 --- a/www/plugins-dist/breves/formulaires/configurer_breves.html +++ b/www/plugins-dist/breves/formulaires/configurer_breves.html @@ -7,10 +7,10 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
        + #ACTION_FORMULAIRE +
        #SET{name,activer_breves}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ]
        @@ -21,8 +21,8 @@
        -
      • -
      +
      + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

       

      diff --git a/www/plugins-dist/breves/formulaires/configurer_breves.php b/www/plugins-dist/breves/formulaires/configurer_breves.php index 1ad5c0ad..1637fb6a 100644 --- a/www/plugins-dist/breves/formulaires/configurer_breves.php +++ b/www/plugins-dist/breves/formulaires/configurer_breves.php @@ -10,27 +10,49 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Gestion du formulaire de configuration des brèves + * + * @package SPIP\Breves\Formulaires + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function formulaires_configurer_breves_charger_dist(){ - foreach(array( - "activer_breves", - ) as $m) +/** + * Chargement du formulaire de configuration des brèves + * + * @return array + * Environnement du formulaire + **/ +function formulaires_configurer_breves_charger_dist() { + $valeurs = array(); + foreach (array( + 'activer_breves', + ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; + } return $valeurs; } - -function formulaires_configurer_breves_traiter_dist(){ - $res = array('editable'=>true); - foreach(array( - "activer_breves", - ) as $m) - if (!is_null($v=_request($m))) - ecrire_meta($m, $v=='oui'?'oui':'non'); +/** + * Traitement du formulaire de configuration des brèves + * + * @return array + * Retours du traitement + **/ +function formulaires_configurer_breves_traiter_dist() { + $res = array('editable' => true); + foreach (array( + 'activer_breves', + ) as $m) { + if (!is_null($v = _request($m))) { + ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); + } + } $res['message_ok'] = _T('config_info_enregistree'); + return $res; } - diff --git a/www/plugins-dist/breves/formulaires/editer_breve.html b/www/plugins-dist/breves/formulaires/editer_breve.html index 54b68d89..dfa0d7bb 100644 --- a/www/plugins-dist/breves/formulaires/editer_breve.html +++ b/www/plugins-dist/breves/formulaires/editer_breve.html @@ -5,64 +5,64 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE -
        -
      • +
        +
        [ (#ENV**{erreurs}|table_valeur{titre}) ] -
      • +
      - [
    • + [
      [ (#ENV**{erreurs}|table_valeur{id_parent}) ] (#VAL|chercher_rubrique{#ENV{id_breve},#ENV{id_rubrique}|sinon{#ENV{id_parent}},'breve',#ENV{id_secteur},#ENV**{config}|table_valeur{restreint},0,form_simple}) -
    • ] + ] -
    • +
      [ (#ENV**{erreurs}|table_valeur{texte}) ][(#ENV**{_texte_trop_long,''}) ] -
    • -
    • + +

      <:entree_liens_sites:>

      -
        -
      • +
        +
        [ (#ENV**{erreurs}|table_valeur{lien_titre}) ] -
      • -
      • +
      +
      [ (#ENV**{erreurs}|table_valeur{lien_url}) ] -
    • -
    + + - + [(#SESSION{statut}|=={0minirezo}|oui) -
  • +
    -
      -
    • +
      +
      -
    • -
    +
    + -
  • + ] - + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

    diff --git a/www/plugins-dist/breves/formulaires/editer_breve.php b/www/plugins-dist/breves/formulaires/editer_breve.php index 173a7fb5..8d0f67cb 100644 --- a/www/plugins-dist/breves/formulaires/editer_breve.php +++ b/www/plugins-dist/breves/formulaires/editer_breve.php @@ -10,32 +10,116 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Gestion du formulaire de d'édition d'une brève + * + * @package SPIP\Breves\Formulaires + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/actions'); include_spip('inc/editer'); -function formulaires_editer_breve_charger_dist($id_breve='new', $id_rubrique=0, $retour='', $lier_trad=0, $config_fonc='breves_edit_config', $row=array(), $hidden=''){ - $valeurs = formulaires_editer_objet_charger('breve',$id_breve,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden); +/** + * Chargement du formulaire d'édition d'une brève + * + * @see formulaires_editer_objet_charger() + * + * @param int|string $id_breve + * Identifiant de la brève. 'new' pour une nouvelle brève. + * @param int $id_rubrique + * Identifiant de la rubrique parente (si connue) + * @param string $retour + * URL de redirection après le traitement + * @param int $lier_trad + * Identifiant de la brève que l'on cherche à traduire + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de la brève, si connue + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Environnement du formulaire + **/ +function formulaires_editer_breve_charger_dist( + $id_breve = 'new', + $id_rubrique = 0, + $retour = '', + $lier_trad = 0, + $config_fonc = 'breves_edit_config', + $row = array(), + $hidden = '' +) { + $valeurs = formulaires_editer_objet_charger( + 'breve', + $id_breve, + $id_rubrique, + $lier_trad, + $retour, + $config_fonc, + $row, + $hidden + ); // un bug a permis a un moment que des breves soient dans des sous rubriques // lorsque ce cas se presente, il faut relocaliser la breve dans son secteur, plutot que n'importe ou - if ($valeurs['id_parent']) - $valeurs['id_parent'] = sql_getfetsel('id_secteur','spip_rubriques','id_rubrique='.intval($valeurs['id_parent'])); + if ($valeurs['id_parent']) { + $valeurs['id_parent'] = sql_getfetsel( + 'id_secteur', + 'spip_rubriques', + 'id_rubrique=' . intval($valeurs['id_parent']) + ); + } + return $valeurs; } + /** - * Identifier le formulaire en faisant abstraction des parametres qui - * ne representent pas l'objet edite - */ -function formulaires_editer_breve_identifier_dist($id_breve='new', $id_rubrique=0, $retour='', $lier_trad=0, $config_fonc='breves_edit_config', $row=array(), $hidden=''){ - return serialize(array(intval($id_breve),$lier_trad)); + * Identifier le formulaire en faisant abstraction des paramètres qui + * ne representent pas l'objet édité + * + * @param int|string $id_breve + * Identifiant de la brève. 'new' pour une nouvelle brève. + * @param int $id_rubrique + * Identifiant de la rubrique parente (si connue) + * @param string $retour + * URL de redirection après le traitement + * @param int $lier_trad + * Identifiant de la brève que l'on cherche à traduire + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de la brève, si connue + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return string + * Hash du formulaire + **/ +function formulaires_editer_breve_identifier_dist( + $id_breve = 'new', + $id_rubrique = 0, + $retour = '', + $lier_trad = 0, + $config_fonc = 'breves_edit_config', + $row = array(), + $hidden = '' +) { + return serialize(array(intval($id_breve), $lier_trad)); } -// Choix par defaut des options de presentation -function breves_edit_config($row) -{ +/** + * Choix par défaut des options de présentation + * + * @param array $row + * Valeurs de la ligne SQL d'un mot, si connu + * return array + * Configuration pour le formulaire + */ +function breves_edit_config($row) { global $spip_lang; $config = $GLOBALS['meta']; @@ -43,20 +127,88 @@ function breves_edit_config($row) $config['langue'] = $spip_lang; $config['restreint'] = ($row['statut'] == 'publie'); + return $config; } -function formulaires_editer_breve_verifier_dist($id_breve='new', $id_rubrique=0, $retour='', $lier_trad=0, $config_fonc='breves_edit_config', $row=array(), $hidden=''){ +/** + * Vérification du formulaire d'édition d'une brève + * + * @see formulaires_editer_objet_verifier() + * + * @param int|string $id_breve + * Identifiant de la brève. 'new' pour une nouvelle brève. + * @param int $id_rubrique + * Identifiant de la rubrique parente (si connue) + * @param string $retour + * URL de redirection après le traitement + * @param int $lier_trad + * Identifiant de la brève que l'on cherche à traduire + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de la brève, si connue + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Tableau des erreurs + */ +function formulaires_editer_breve_verifier_dist( + $id_breve = 'new', + $id_rubrique = 0, + $retour = '', + $lier_trad = 0, + $config_fonc = 'breves_edit_config', + $row = array(), + $hidden = '' +) { // auto-renseigner le titre si il n'existe pas - titre_automatique('titre',array('texte')); + titre_automatique('titre', array('texte')); // on ne demande pas le titre obligatoire : il sera rempli a la volee dans editer_article si vide - $erreurs = formulaires_editer_objet_verifier('breve',$id_breve,array('id_parent')); + $erreurs = formulaires_editer_objet_verifier('breve', $id_breve, array('id_parent')); + return $erreurs; } -// https://code.spip.net/@inc_editer_article_dist -function formulaires_editer_breve_traiter_dist($id_breve='new', $id_rubrique=0, $retour='', $lier_trad=0, $config_fonc='breves_edit_config', $row=array(), $hidden=''){ - return formulaires_editer_objet_traiter('breve',$id_breve,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden); +/** + * Traitements du formulaire d'édition d'une brève + * + * @see formulaires_editer_objet_traiter() + * + * @param int|string $id_breve + * Identifiant de la brève. 'new' pour une nouvelle brève. + * @param int $id_rubrique + * Identifiant de la rubrique parente (si connue) + * @param string $retour + * URL de redirection après le traitement + * @param int $lier_trad + * Identifiant de la brève que l'on cherche à traduire + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de la brève, si connue + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Tableau des erreurs + */ +function formulaires_editer_breve_traiter_dist( + $id_breve = 'new', + $id_rubrique = 0, + $retour = '', + $lier_trad = 0, + $config_fonc = 'breves_edit_config', + $row = array(), + $hidden = '' +) { + return formulaires_editer_objet_traiter( + 'breve', + $id_breve, + $id_rubrique, + $lier_trad, + $retour, + $config_fonc, + $row, + $hidden + ); } - -?> diff --git a/www/plugins-dist/breves/lang/breves.xml b/www/plugins-dist/breves/lang/breves.xml index 009a958d..cc305e34 100644 --- a/www/plugins-dist/breves/lang/breves.xml +++ b/www/plugins-dist/breves/lang/breves.xml @@ -94,7 +94,7 @@ - + @@ -107,6 +107,7 @@ + @@ -122,6 +123,9 @@ + + + @@ -154,7 +158,8 @@ - + + diff --git a/www/plugins-dist/breves/lang/breves_ar.php b/www/plugins-dist/breves/lang/breves_ar.php index f41f3e20..87367f3d 100644 --- a/www/plugins-dist/breves/lang/breves_ar.php +++ b/www/plugins-dist/breves/lang/breves_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -34,7 +36,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_utiliser_breves' => 'إستخدام الأخبار', // L - 'logo_breve' => 'شعار الخبر', + 'logo_breve' => 'رمز الخبر', // T 'texte_breves' => 'الأخيار هي نصوص قصيرة تسمح @@ -48,5 +50,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'خبر جديد', 'titre_page_breves' => 'الأخبار' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_ast.php b/www/plugins-dist/breves/lang/breves_ast.php index f8178b8d..e1675f5f 100644 --- a/www/plugins-dist/breves/lang/breves_ast.php +++ b/www/plugins-dist/breves/lang/breves_ast.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=ast // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -47,5 +49,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LLINGUA DE LA BREVE', # MODIF 'titre_page_breves' => 'Breves' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_ay.php b/www/plugins-dist/breves/lang/breves_ay.php index ab2b6624..30ac3b6c 100644 --- a/www/plugins-dist/breves/lang/breves_ay.php +++ b/www/plugins-dist/breves/lang/breves_ay.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=ay // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -32,5 +34,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_breve_publiee' => 'Jisk’aptat iyaw sata', 'titre_breve_refusee' => 'Jisk’aptat janiw sata' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_bg.php b/www/plugins-dist/breves/lang/breves_bg.php index 8efa8439..a93ce59b 100644 --- a/www/plugins-dist/breves/lang/breves_bg.php +++ b/www/plugins-dist/breves/lang/breves_bg.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=bg // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'ЕЗИК НА НОВИНАТА', # MODIF 'titre_page_breves' => 'Новини' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_br.php b/www/plugins-dist/breves/lang/breves_br.php index cb7bc192..a3709347 100644 --- a/www/plugins-dist/breves/lang/breves_br.php +++ b/www/plugins-dist/breves/lang/breves_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -41,5 +43,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'YEZH AR BERRSKRID', # MODIF 'titre_page_breves' => 'Berrskridoù' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_bs.php b/www/plugins-dist/breves/lang/breves_bs.php index 23536c85..3e79444e 100644 --- a/www/plugins-dist/breves/lang/breves_bs.php +++ b/www/plugins-dist/breves/lang/breves_bs.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=bs // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -42,5 +44,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'JEZIK KRATKE PORUKE', # MODIF 'titre_page_breves' => 'Kratke poruke' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_ca.php b/www/plugins-dist/breves/lang/breves_ca.php index b3940191..a535f4d3 100644 --- a/www/plugins-dist/breves/lang/breves_ca.php +++ b/www/plugins-dist/breves/lang/breves_ca.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=ca // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -45,5 +47,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LLENGUA DEL BREU', # MODIF 'titre_page_breves' => 'Breus' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_co.php b/www/plugins-dist/breves/lang/breves_co.php index 052c4d34..29745399 100644 --- a/www/plugins-dist/breves/lang/breves_co.php +++ b/www/plugins-dist/breves/lang/breves_co.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=co // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LINGUA DI U DISPACCIU', # MODIF 'titre_page_breves' => 'Dispacci' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_cpf.php b/www/plugins-dist/breves/lang/breves_cpf.php index ca7f186a..d6a0efd7 100644 --- a/www/plugins-dist/breves/lang/breves_cpf.php +++ b/www/plugins-dist/breves/lang/breves_cpf.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=cpf // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -42,5 +44,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LANG LA TITE-NOUVEL', # MODIF 'titre_page_breves' => 'Bann tit-nouvèl' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_cpf_hat.php b/www/plugins-dist/breves/lang/breves_cpf_hat.php index 5defc886..9b029c4d 100644 --- a/www/plugins-dist/breves/lang/breves_cpf_hat.php +++ b/www/plugins-dist/breves/lang/breves_cpf_hat.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=cpf_hat // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -42,5 +44,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LALANNG TINOUVÈL-LA', # MODIF 'titre_page_breves' => 'Tinouvèl yo' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_cs.php b/www/plugins-dist/breves/lang/breves_cs.php index fdc5cc37..47b8d4e5 100644 --- a/www/plugins-dist/breves/lang/breves_cs.php +++ b/www/plugins-dist/breves/lang/breves_cs.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=cs // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'JAZYK NOVINKY', # MODIF 'titre_page_breves' => 'Novinky' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_da.php b/www/plugins-dist/breves/lang/breves_da.php index 412c4181..9605c2a3 100644 --- a/www/plugins-dist/breves/lang/breves_da.php +++ b/www/plugins-dist/breves/lang/breves_da.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=da // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -42,5 +44,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'NYHEDENS SPROG', # MODIF 'titre_page_breves' => 'Nyheder' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_de.php b/www/plugins-dist/breves/lang/breves_de.php index b1ac366a..68b038df 100644 --- a/www/plugins-dist/breves/lang/breves_de.php +++ b/www/plugins-dist/breves/lang/breves_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -46,5 +48,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'Neue Meldung', 'titre_page_breves' => 'Meldungen' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_el.php b/www/plugins-dist/breves/lang/breves_el.php index 8263ae8a..9cbdbb4c 100644 --- a/www/plugins-dist/breves/lang/breves_el.php +++ b/www/plugins-dist/breves/lang/breves_el.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=el // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -33,5 +35,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_breves' => 'Οι ειδήσεις', 'titre_page_breves' => 'Ειδήσεις' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_en.php b/www/plugins-dist/breves/lang/breves_en.php index ed8f64af..e0757f2a 100644 --- a/www/plugins-dist/breves/lang/breves_en.php +++ b/www/plugins-dist/breves/lang/breves_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -47,5 +49,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'New news item', 'titre_page_breves' => 'News' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_en_hx.php b/www/plugins-dist/breves/lang/breves_en_hx.php index 70958ceb..4a8ec711 100644 --- a/www/plugins-dist/breves/lang/breves_en_hx.php +++ b/www/plugins-dist/breves/lang/breves_en_hx.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=en_hx // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -44,5 +46,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'N3W5 173M 14NGU4G3', # MODIF 'titre_page_breves' => 'N3w5' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_eo.php b/www/plugins-dist/breves/lang/breves_eo.php index 04b2387e..2304e484 100644 --- a/www/plugins-dist/breves/lang/breves_eo.php +++ b/www/plugins-dist/breves/lang/breves_eo.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=eo // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -48,5 +50,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'Nova fulm-informo', 'titre_page_breves' => 'Fulm-informoj' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_es.php b/www/plugins-dist/breves/lang/breves_es.php index 2db6c444..dfd1521d 100644 --- a/www/plugins-dist/breves/lang/breves_es.php +++ b/www/plugins-dist/breves/lang/breves_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -46,5 +48,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'Nuevo breve', 'titre_page_breves' => 'Breves' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_eu.php b/www/plugins-dist/breves/lang/breves_eu.php index b8fd0b90..29a7b370 100644 --- a/www/plugins-dist/breves/lang/breves_eu.php +++ b/www/plugins-dist/breves/lang/breves_eu.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=eu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LABURRAREN HIZKUNTZA', # MODIF 'titre_page_breves' => 'Berri laburrak' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_fa.php b/www/plugins-dist/breves/lang/breves_fa.php index 1a59d635..eda36eee 100644 --- a/www/plugins-dist/breves/lang/breves_fa.php +++ b/www/plugins-dist/breves/lang/breves_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -46,5 +48,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'خبر جديد ', 'titre_page_breves' => 'مقالات كوتاه' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_fi.php b/www/plugins-dist/breves/lang/breves_fi.php index 05541642..8613ef51 100644 --- a/www/plugins-dist/breves/lang/breves_fi.php +++ b/www/plugins-dist/breves/lang/breves_fi.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=fi // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -27,5 +29,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'UUTISOTSIKON KIELI', # MODIF 'titre_page_breves' => 'Uutisia' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_fon.php b/www/plugins-dist/breves/lang/breves_fon.php index 770a337b..1f9e58bc 100644 --- a/www/plugins-dist/breves/lang/breves_fon.php +++ b/www/plugins-dist/breves/lang/breves_fon.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=fon // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -42,5 +44,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'Gbèzán xó kléwún ɔ tɔn', # MODIF 'titre_page_breves' => 'xó kléwún lɛ' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_fr.php b/www/plugins-dist/breves/lang/breves_fr.php index 758c81dd..8c81e696 100644 --- a/www/plugins-dist/breves/lang/breves_fr.php +++ b/www/plugins-dist/breves/lang/breves_fr.php @@ -1,7 +1,9 @@ 'Nouvelle brève', 'titre_page_breves' => 'Brèves' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_fr_fem.php b/www/plugins-dist/breves/lang/breves_fr_fem.php index 91e4d5c2..66955360 100644 --- a/www/plugins-dist/breves/lang/breves_fr_fem.php +++ b/www/plugins-dist/breves/lang/breves_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -46,5 +48,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'Nouvelle brève', 'titre_page_breves' => 'Brèves' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_fr_tu.php b/www/plugins-dist/breves/lang/breves_fr_tu.php index 45a9a40a..b0a71d63 100644 --- a/www/plugins-dist/breves/lang/breves_fr_tu.php +++ b/www/plugins-dist/breves/lang/breves_fr_tu.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=fr_tu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -46,5 +48,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'Nouvelle brève', 'titre_page_breves' => 'Brèves' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_gl.php b/www/plugins-dist/breves/lang/breves_gl.php index f89b3079..182dd326 100644 --- a/www/plugins-dist/breves/lang/breves_gl.php +++ b/www/plugins-dist/breves/lang/breves_gl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=gl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -47,5 +49,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LINGUA DA BREVE', # MODIF 'titre_page_breves' => 'Breves' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_grecgr.php b/www/plugins-dist/breves/lang/breves_grecgr.php deleted file mode 100644 index 916a2fc8..00000000 --- a/www/plugins-dist/breves/lang/breves_grecgr.php +++ /dev/null @@ -1,52 +0,0 @@ - 'Brève', # NEW - 'breves' => 'News items', # NEW - - // E - 'entree_breve_publiee' => 'Cette brève est :', # NEW - 'entree_texte_breve' => 'Texte de la brève', # NEW - - // I - 'icone_breves' => 'Brèves', # NEW - 'icone_ecrire_nouvel_article' => 'Les brèves contenues dans cette rubrique', # NEW - 'icone_modifier_breve' => 'Modifier cette brève', # NEW - 'icone_nouvelle_breve' => 'Écrire une nouvelle brève', # NEW - 'info_1_breve' => '1 brève', # NEW - 'info_aucun_breve' => 'Aucune brève', # NEW - 'info_breves' => 'Votre site utilise-t-il le système de brèves ?', # NEW - 'info_breves_02' => 'Brèves', # NEW - 'info_breves_valider' => 'Brèves à valider', # NEW - 'info_gauche_numero_breve' => 'Brève numéro', # NEW - 'info_nb_breves' => '@nb@ brèves', # NEW - 'item_breve_proposee' => 'proposée à l\'évaluation', # NEW - 'item_breve_refusee' => 'refusée', # NEW - 'item_breve_validee' => 'validée', # NEW - 'item_non_utiliser_breves' => 'Ne pas utiliser les brèves', # NEW - 'item_utiliser_breves' => 'Utiliser les brèves', # NEW - - // L - 'logo_breve' => 'Logo de la brève', # NEW - - // T - 'texte_breves' => 'Les brèves sont des textes courts et simples permettant de - mettre en ligne rapidement des informations concises, de gérer - une revue de presse, un calendrier d\'événements...', # NEW - 'titre_breve_proposee' => 'Brève proposée', # NEW - 'titre_breve_publiee' => 'Brève publiée', # NEW - 'titre_breve_refusee' => 'Brève refusée', # NEW - 'titre_breves' => 'Les brèves', # NEW - 'titre_langue_breve' => 'Langue de la brève', # NEW - 'titre_nouvelle_breve' => 'Nouvelle brève', # NEW - 'titre_page_breves' => 'Brèves' # NEW -); - -?> diff --git a/www/plugins-dist/breves/lang/breves_hac.php b/www/plugins-dist/breves/lang/breves_hac.php index 109cf119..b993c478 100644 --- a/www/plugins-dist/breves/lang/breves_hac.php +++ b/www/plugins-dist/breves/lang/breves_hac.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=hac // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -47,5 +49,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'هەۋاڵی تازە', 'titre_page_breves' => 'هەۋاڵ' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_he.php b/www/plugins-dist/breves/lang/breves_he.php index 1636087e..c82968c1 100644 --- a/www/plugins-dist/breves/lang/breves_he.php +++ b/www/plugins-dist/breves/lang/breves_he.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=he // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -39,5 +41,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_breve_publiee' => 'מבזק מפורסם', 'titre_breve_refusee' => 'מבזק מסורב' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_hr.php b/www/plugins-dist/breves/lang/breves_hr.php index 9f262e3c..8b89ca84 100644 --- a/www/plugins-dist/breves/lang/breves_hr.php +++ b/www/plugins-dist/breves/lang/breves_hr.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=hr // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -28,5 +30,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_breve_publiee' => 'objavljena vijest', 'titre_breve_refusee' => 'odbačena vijest' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_hu.php b/www/plugins-dist/breves/lang/breves_hu.php index b0eb1300..0bff5f3e 100644 --- a/www/plugins-dist/breves/lang/breves_hu.php +++ b/www/plugins-dist/breves/lang/breves_hu.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=hu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -42,5 +44,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'A HÍR NYELVE', # MODIF 'titre_page_breves' => 'Hírek' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_id.php b/www/plugins-dist/breves/lang/breves_id.php index 9f0190db..44217e65 100644 --- a/www/plugins-dist/breves/lang/breves_id.php +++ b/www/plugins-dist/breves/lang/breves_id.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=id // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'BAHASA ARTIKEL BERITA', # MODIF 'titre_page_breves' => 'Berita' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_is.php b/www/plugins-dist/breves/lang/breves_is.php index 5ffc687e..f4f8a590 100644 --- a/www/plugins-dist/breves/lang/breves_is.php +++ b/www/plugins-dist/breves/lang/breves_is.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=is // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -20,5 +22,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // L 'logo_breve' => 'TÁKN STUTTU FRÉTTARINNAR' # MODIF ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_isl.php b/www/plugins-dist/breves/lang/breves_isl.php deleted file mode 100644 index a55b1f86..00000000 --- a/www/plugins-dist/breves/lang/breves_isl.php +++ /dev/null @@ -1,52 +0,0 @@ - 'Brève', # NEW - 'breves' => ' Brèves', - - // E - 'entree_breve_publiee' => 'Cette brève est :', # NEW - 'entree_texte_breve' => 'Texte de la brève', # NEW - - // I - 'icone_breves' => 'Brèves', # NEW - 'icone_ecrire_nouvel_article' => 'Les brèves contenues dans cette rubrique', # NEW - 'icone_modifier_breve' => 'Modifier cette brève', # NEW - 'icone_nouvelle_breve' => 'Écrire une nouvelle brève', # NEW - 'info_1_breve' => '1 brève', # NEW - 'info_aucun_breve' => 'Aucune brève', # NEW - 'info_breves' => 'Votre site utilise-t-il le système de brèves ?', # NEW - 'info_breves_02' => 'Brèves', # NEW - 'info_breves_valider' => 'Brèves à valider', # NEW - 'info_gauche_numero_breve' => 'Brève numéro', # NEW - 'info_nb_breves' => '@nb@ brèves', # NEW - 'item_breve_proposee' => 'proposée à l\'évaluation', # NEW - 'item_breve_refusee' => 'refusée', # NEW - 'item_breve_validee' => 'validée', # NEW - 'item_non_utiliser_breves' => 'Ne pas utiliser les brèves', # NEW - 'item_utiliser_breves' => 'Utiliser les brèves', # NEW - - // L - 'logo_breve' => 'Logo de la brève', # NEW - - // T - 'texte_breves' => 'Les brèves sont des textes courts et simples permettant de - mettre en ligne rapidement des informations concises, de gérer - une revue de presse, un calendrier d\'événements...', # NEW - 'titre_breve_proposee' => 'Brève proposée', # NEW - 'titre_breve_publiee' => 'Brève publiée', # NEW - 'titre_breve_refusee' => 'Brève refusée', # NEW - 'titre_breves' => 'Les brèves', # NEW - 'titre_langue_breve' => 'Langue de la brève', # NEW - 'titre_nouvelle_breve' => 'Nouvelle brève', # NEW - 'titre_page_breves' => 'Brèves' # NEW -); - -?> diff --git a/www/plugins-dist/breves/lang/breves_it.php b/www/plugins-dist/breves/lang/breves_it.php index 43e3cac4..71cdbd4e 100644 --- a/www/plugins-dist/breves/lang/breves_it.php +++ b/www/plugins-dist/breves/lang/breves_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -48,5 +50,3 @@ di gestire una rassegna stampa o un calendario di eventi, ecc.', 'titre_nouvelle_breve' => 'Nuova breve', 'titre_page_breves' => 'Brevi' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_it_fem.php b/www/plugins-dist/breves/lang/breves_it_fem.php index d1d0c352..37e905ea 100644 --- a/www/plugins-dist/breves/lang/breves_it_fem.php +++ b/www/plugins-dist/breves/lang/breves_it_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=it_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -44,5 +46,3 @@ di gestire una rassegna stampa o un calendario di eventi, ecc.', 'titre_langue_breve' => 'LINGUA DELLA BREVE', # MODIF 'titre_page_breves' => 'Brevi' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_ja.php b/www/plugins-dist/breves/lang/breves_ja.php index f35efb85..ddc22adc 100644 --- a/www/plugins-dist/breves/lang/breves_ja.php +++ b/www/plugins-dist/breves/lang/breves_ja.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=ja // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -42,5 +44,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'ニュースの言語', # MODIF 'titre_page_breves' => 'ニュース' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_km.php b/www/plugins-dist/breves/lang/breves_km.php index c1311839..7fb68d30 100644 --- a/www/plugins-dist/breves/lang/breves_km.php +++ b/www/plugins-dist/breves/lang/breves_km.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=km // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'ភាសា នៃខ្ទង់ដំណឹង', # MODIF 'titre_page_breves' => 'ដំណឹង' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_la.php b/www/plugins-dist/breves/lang/breves_la.php index a67a9d29..317648bd 100644 --- a/www/plugins-dist/breves/lang/breves_la.php +++ b/www/plugins-dist/breves/lang/breves_la.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=la // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -21,5 +23,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_breve_publiee' => 'Edita pronuntiatio', 'titre_breve_refusee' => 'Recusata pronuntiatio' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_lb.php b/www/plugins-dist/breves/lang/breves_lb.php index 987bc0a5..fed156a4 100644 --- a/www/plugins-dist/breves/lang/breves_lb.php +++ b/www/plugins-dist/breves/lang/breves_lb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -46,5 +48,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'Nei Kuerzmeldung', 'titre_page_breves' => 'Kuerzmeldungen' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_lt.php b/www/plugins-dist/breves/lang/breves_lt.php index 7d8da264..1d120a65 100644 --- a/www/plugins-dist/breves/lang/breves_lt.php +++ b/www/plugins-dist/breves/lang/breves_lt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=lt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -33,5 +35,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_breve_publiee' => 'Publikuojama santrauka', 'titre_breve_refusee' => 'Atmesta santrauka' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_my.php b/www/plugins-dist/breves/lang/breves_my.php index 13b246a4..8af203c3 100644 --- a/www/plugins-dist/breves/lang/breves_my.php +++ b/www/plugins-dist/breves/lang/breves_my.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=my // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -42,5 +44,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'သတင်းအချက်အလက် ဘာသာစကား', # MODIF 'titre_page_breves' => 'သတင်းများ' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_nap.php b/www/plugins-dist/breves/lang/breves_nap.php index af226212..d5a969f5 100644 --- a/www/plugins-dist/breves/lang/breves_nap.php +++ b/www/plugins-dist/breves/lang/breves_nap.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=nap // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -28,5 +30,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_breve_refusee' => 'Nfròmma refutata', 'titre_langue_breve' => 'LINGUA DELLA BREVE' # MODIF ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_nb.php b/www/plugins-dist/breves/lang/breves_nb.php index abfa3d30..a3df3c74 100644 --- a/www/plugins-dist/breves/lang/breves_nb.php +++ b/www/plugins-dist/breves/lang/breves_nb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=nb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -28,5 +30,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'NYHETSSPRÅK', # MODIF 'titre_page_breves' => 'Nyheter' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_ne.php b/www/plugins-dist/breves/lang/breves_ne.php index 1726d86c..cba0c2f4 100644 --- a/www/plugins-dist/breves/lang/breves_ne.php +++ b/www/plugins-dist/breves/lang/breves_ne.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=ne // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -21,5 +23,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_breve_publiee' => 'खबर प्रकाशित भएको', 'titre_breve_refusee' => 'खबर अस्वीकारेको' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_nl.php b/www/plugins-dist/breves/lang/breves_nl.php index 2afd6c52..6669b2d3 100644 --- a/www/plugins-dist/breves/lang/breves_nl.php +++ b/www/plugins-dist/breves/lang/breves_nl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -21,30 +23,28 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_modifier_breve' => 'Dit bericht wijzigen', 'icone_nouvelle_breve' => 'Een nieuwsbericht schrijven', 'info_1_breve' => '1 bericht', - 'info_aucun_breve' => 'Geen nieuws', - 'info_breves' => 'Werkt je website met het systeem van berichten?', + 'info_aucun_breve' => 'Geen nieuwsbericht', + 'info_breves' => 'Werkt je website met nieuwsberichten?', 'info_breves_02' => 'nieuwsberichten', 'info_breves_valider' => 'Berichten ter goedkeuring', 'info_gauche_numero_breve' => 'Bericht nummer', 'info_nb_breves' => '@nb@ berichten', - 'item_breve_proposee' => 'ter evaluatie voorgesteld', + 'item_breve_proposee' => 'ter evaluatie', 'item_breve_refusee' => 'geweigerd', 'item_breve_validee' => 'goedgekeurd', - 'item_non_utiliser_breves' => 'Geen gebruik maken van nieuwsberichten', + 'item_non_utiliser_breves' => 'Nieuwsberichten niet gebruiken', 'item_utiliser_breves' => 'Nieuwsberichten gebruiken', // L 'logo_breve' => 'Logo van het nieuwsbericht', // T - 'texte_breves' => 'Berichten zijn korte en eenvoudige teksten die je toelaten nieuws snel online te brengen, een persbericht op te stellen, een evenementenkalender te maken, ...', + 'texte_breves' => 'Nieuwsberichten zijn korte en eenvoudige teksten die snel online geplaatst kunnen worden: een persbericht opstellen, een evenementenkalender maken, ...', 'titre_breve_proposee' => 'Voorgesteld bericht', 'titre_breve_publiee' => 'Gepubliceerd bericht', 'titre_breve_refusee' => 'Geweigerd bericht', 'titre_breves' => 'Berichten', 'titre_langue_breve' => 'Taal van het nieuwsbericht', 'titre_nouvelle_breve' => 'Nieuwe nieuwsbericht', - 'titre_page_breves' => 'Berichten' + 'titre_page_breves' => 'Nieuwsberichten' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_no.php b/www/plugins-dist/breves/lang/breves_no.php deleted file mode 100644 index 2b485dff..00000000 --- a/www/plugins-dist/breves/lang/breves_no.php +++ /dev/null @@ -1,52 +0,0 @@ - 'Brève', # NEW - 'breves' => 'Brèves', # NEW - - // E - 'entree_breve_publiee' => ' Cette brève doit-elle être publiée ?', # MODIF - 'entree_texte_breve' => ' Texte de la brève', - - // I - 'icone_breves' => ' Brèves', - 'icone_ecrire_nouvel_article' => ' Les brèves contenues dans cette rubrique', - 'icone_modifier_breve' => ' Modifier cette brève', - 'icone_nouvelle_breve' => ' Écrire une nouvelle brève', - 'info_1_breve' => ' 1 brève', - 'info_aucun_breve' => 'Aucune brève', # NEW - 'info_breves' => ' Votre site utilise-t-il le système de brèves ?', - 'info_breves_02' => ' Brèves', - 'info_breves_valider' => ' Brèves à valider', - 'info_gauche_numero_breve' => ' BRÈVE NUMÉRO', # MODIF - 'info_nb_breves' => '@nb@ brèves', # NEW - 'item_breve_proposee' => ' Brève proposée', # MODIF - 'item_breve_refusee' => ' NON - Brève refusée', # MODIF - 'item_breve_validee' => ' OUI - Brève validée', # MODIF - 'item_non_utiliser_breves' => ' Ne pas utiliser les brèves', - 'item_utiliser_breves' => ' Utiliser les brèves', - - // L - 'logo_breve' => ' LOGO DE LA BRÈVE', # MODIF - - // T - 'texte_breves' => ' Les brèves sont des textes courts et simples permettant de - mettre en ligne rapidement des informations concises, de gérer - une revue de presse, un calendrier d\'événements...', - 'titre_breve_proposee' => ' Brève proposée', - 'titre_breve_publiee' => ' Brève publiée', - 'titre_breve_refusee' => ' Brève refusée', - 'titre_breves' => ' Les brèves', - 'titre_langue_breve' => ' LANGUE DE LA BRÈVE', # MODIF - 'titre_nouvelle_breve' => 'Nouvelle brève', # NEW - 'titre_page_breves' => ' Brèves' -); - -?> diff --git a/www/plugins-dist/breves/lang/breves_oc_auv.php b/www/plugins-dist/breves/lang/breves_oc_auv.php index e4bd7348..034a3f7a 100644 --- a/www/plugins-dist/breves/lang/breves_oc_auv.php +++ b/www/plugins-dist/breves/lang/breves_oc_auv.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=oc_auv // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LENGA DE LA BRÈVA', # MODIF 'titre_page_breves' => 'Brèvas' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_oc_gsc.php b/www/plugins-dist/breves/lang/breves_oc_gsc.php index f0131211..a49e5ebc 100644 --- a/www/plugins-dist/breves/lang/breves_oc_gsc.php +++ b/www/plugins-dist/breves/lang/breves_oc_gsc.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=oc_gsc // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LENGA DE LA BRÈVA', # MODIF 'titre_page_breves' => 'Brèvas' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_oc_lms.php b/www/plugins-dist/breves/lang/breves_oc_lms.php index b4f9e3c9..f8c23b25 100644 --- a/www/plugins-dist/breves/lang/breves_oc_lms.php +++ b/www/plugins-dist/breves/lang/breves_oc_lms.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=oc_lms // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LENGA DE LA BREVA', # MODIF 'titre_page_breves' => 'Brevas' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_oc_lnc.php b/www/plugins-dist/breves/lang/breves_oc_lnc.php index 484aae6a..0595c8b1 100644 --- a/www/plugins-dist/breves/lang/breves_oc_lnc.php +++ b/www/plugins-dist/breves/lang/breves_oc_lnc.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=oc_lnc // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LENGA DE LA BRÈVA', # MODIF 'titre_page_breves' => 'Brèvas' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_oc_ni.php b/www/plugins-dist/breves/lang/breves_oc_ni.php index 30e2ec4e..0d177abf 100644 --- a/www/plugins-dist/breves/lang/breves_oc_ni.php +++ b/www/plugins-dist/breves/lang/breves_oc_ni.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=oc_ni // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LENGA DE LA BRÈVA', # MODIF 'titre_page_breves' => 'Brèvas' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_oc_ni_la.php b/www/plugins-dist/breves/lang/breves_oc_ni_la.php index 8688cd37..d1ff0858 100644 --- a/www/plugins-dist/breves/lang/breves_oc_ni_la.php +++ b/www/plugins-dist/breves/lang/breves_oc_ni_la.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=oc_ni_la // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LENGA DE LA BRÈVA', # MODIF 'titre_page_breves' => 'Brèvas' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_oc_ni_mis.php b/www/plugins-dist/breves/lang/breves_oc_ni_mis.php new file mode 100644 index 00000000..7e3b3d89 --- /dev/null +++ b/www/plugins-dist/breves/lang/breves_oc_ni_mis.php @@ -0,0 +1,50 @@ + 'Brèva', + 'breves' => 'Brèva', + + // E + 'entree_breve_publiee' => 'Aquela brèva es :', + 'entree_texte_breve' => 'Tèst de la brèva', + + // I + 'icone_breves' => 'Brèva', + 'icone_ecrire_nouvel_article' => 'Li brèva countengudi en aquesta rùbrica', + 'icone_modifier_breve' => 'Moudificà aquela brèva', + 'icone_nouvelle_breve' => 'Escriéure una nouvèla brèva', + 'info_1_breve' => '1 brèva', + 'info_aucun_breve' => 'Minga brèva', + 'info_breves' => 'Lou vouòstre sit utilisa lou sistema de brèva ?', + 'info_breves_02' => 'Brèva', + 'info_breves_valider' => 'Brèva da validà', + 'info_gauche_numero_breve' => 'Brèva nùmero', + 'info_nb_breves' => '@nb@ brèva', + 'item_breve_proposee' => 'Prepauada à la valutacioun', + 'item_breve_refusee' => 'refudada', + 'item_breve_validee' => 'validada', + 'item_non_utiliser_breves' => 'Noun utilisà li brèva', + 'item_utiliser_breves' => 'Utilisà li brèva', + + // L + 'logo_breve' => 'Logou de la brèva', + + // T + 'texte_breves' => 'Li brèva soun de tèstou court e simple que permeton de metre lèu en ligna d’infourmacioun counchisi, de gerà una revista de pressa, un calendari d’evenimen...', + 'titre_breve_proposee' => 'Breva prepauada', + 'titre_breve_publiee' => 'Breva publicada', + 'titre_breve_refusee' => 'Brèva refudada', + 'titre_breves' => 'Li brèva', + 'titre_langue_breve' => 'Lenga de la brèva', + 'titre_nouvelle_breve' => 'Nouvèla brèva', + 'titre_page_breves' => 'Brèva' +); diff --git a/www/plugins-dist/breves/lang/breves_oc_prv.php b/www/plugins-dist/breves/lang/breves_oc_prv.php index f5998d42..52815fee 100644 --- a/www/plugins-dist/breves/lang/breves_oc_prv.php +++ b/www/plugins-dist/breves/lang/breves_oc_prv.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=oc_prv // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LENGA DE LA BRÈVA', # MODIF 'titre_page_breves' => 'Brèvas' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_oc_va.php b/www/plugins-dist/breves/lang/breves_oc_va.php index 7a18fc71..2a8ea603 100644 --- a/www/plugins-dist/breves/lang/breves_oc_va.php +++ b/www/plugins-dist/breves/lang/breves_oc_va.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=oc_va // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,5 +45,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LENGA DE LA BRÈVA', # MODIF 'titre_page_breves' => 'Brèvas' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_pl.php b/www/plugins-dist/breves/lang/breves_pl.php index 7ba06cc1..55ebf318 100644 --- a/www/plugins-dist/breves/lang/breves_pl.php +++ b/www/plugins-dist/breves/lang/breves_pl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=pl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -44,5 +46,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'JĘZYK NEWSA', # MODIF 'titre_page_breves' => 'Newsy' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_pt.php b/www/plugins-dist/breves/lang/breves_pt.php index 61953c26..102738d8 100644 --- a/www/plugins-dist/breves/lang/breves_pt.php +++ b/www/plugins-dist/breves/lang/breves_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -46,5 +48,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'Nova notícia', 'titre_page_breves' => 'Notícias' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_pt_br.php b/www/plugins-dist/breves/lang/breves_pt_br.php index 950917c1..1bd21edd 100644 --- a/www/plugins-dist/breves/lang/breves_pt_br.php +++ b/www/plugins-dist/breves/lang/breves_pt_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=pt_br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -46,5 +48,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'Nova nota', 'titre_page_breves' => 'Notas' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_rn.php b/www/plugins-dist/breves/lang/breves_rn.php index 58c84442..ed7941a8 100644 --- a/www/plugins-dist/breves/lang/breves_rn.php +++ b/www/plugins-dist/breves/lang/breves_rn.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=rn // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -19,5 +21,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_modifier_breve' => 'Guhindura iyi ncamake', 'icone_nouvelle_breve' => 'Kwandika iyindi inkuru iciye bugufi' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_ro.php b/www/plugins-dist/breves/lang/breves_ro.php index 4c940c81..06414a1e 100644 --- a/www/plugins-dist/breves/lang/breves_ro.php +++ b/www/plugins-dist/breves/lang/breves_ro.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=ro // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -42,5 +44,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LIMBA ŞTIRII', # MODIF 'titre_page_breves' => 'Ştiri' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_roa.php b/www/plugins-dist/breves/lang/breves_roa.php index 4782213e..afb3935f 100644 --- a/www/plugins-dist/breves/lang/breves_roa.php +++ b/www/plugins-dist/breves/lang/breves_roa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=roa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -32,5 +34,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_breve_refusee' => 'Brève refusée', 'titre_langue_breve' => 'LANGUE DE LA BRÈVE' # MODIF ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_ru.php b/www/plugins-dist/breves/lang/breves_ru.php index 595c4cb1..4509aa39 100644 --- a/www/plugins-dist/breves/lang/breves_ru.php +++ b/www/plugins-dist/breves/lang/breves_ru.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -48,5 +50,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'Название новости', 'titre_page_breves' => 'Новости' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_sc.php b/www/plugins-dist/breves/lang/breves_sc.php index e9fa75ca..adbd069c 100644 --- a/www/plugins-dist/breves/lang/breves_sc.php +++ b/www/plugins-dist/breves/lang/breves_sc.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=sc // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -20,5 +22,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'LIMBA DE SA BREVE', # MODIF 'titre_page_breves' => 'Breves' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_sk.php b/www/plugins-dist/breves/lang/breves_sk.php index df5a068d..85365134 100644 --- a/www/plugins-dist/breves/lang/breves_sk.php +++ b/www/plugins-dist/breves/lang/breves_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -47,5 +49,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouvelle_breve' => 'Nová novinka', 'titre_page_breves' => 'Novinky' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_sq.php b/www/plugins-dist/breves/lang/breves_sq.php index ea7261db..673930a1 100644 --- a/www/plugins-dist/breves/lang/breves_sq.php +++ b/www/plugins-dist/breves/lang/breves_sq.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=sq // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -22,5 +24,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_breve_publiee' => 'Skicë e botuar', 'titre_breve_refusee' => 'Skicë e refuzuar' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_ss.php b/www/plugins-dist/breves/lang/breves_ss.php deleted file mode 100644 index 96488830..00000000 --- a/www/plugins-dist/breves/lang/breves_ss.php +++ /dev/null @@ -1,52 +0,0 @@ - 'Brève', # NEW - 'breves' => 'Nauji straipsniai', # NEW - - // E - 'entree_breve_publiee' => 'Cette brève est :', # NEW - 'entree_texte_breve' => 'Texte de la brève', # NEW - - // I - 'icone_breves' => 'Brèves', # NEW - 'icone_ecrire_nouvel_article' => 'Les brèves contenues dans cette rubrique', # NEW - 'icone_modifier_breve' => 'Modifier cette brève', # NEW - 'icone_nouvelle_breve' => 'Écrire une nouvelle brève', # NEW - 'info_1_breve' => '1 brève', # NEW - 'info_aucun_breve' => 'Aucune brève', # NEW - 'info_breves' => 'Votre site utilise-t-il le système de brèves ?', # NEW - 'info_breves_02' => 'Brèves', # NEW - 'info_breves_valider' => 'Brèves à valider', # NEW - 'info_gauche_numero_breve' => 'Brève numéro', # NEW - 'info_nb_breves' => '@nb@ brèves', # NEW - 'item_breve_proposee' => 'proposée à l\'évaluation', # NEW - 'item_breve_refusee' => 'refusée', # NEW - 'item_breve_validee' => 'validée', # NEW - 'item_non_utiliser_breves' => 'Ne pas utiliser les brèves', # NEW - 'item_utiliser_breves' => 'Utiliser les brèves', # NEW - - // L - 'logo_breve' => 'Logo de la brève', # NEW - - // T - 'texte_breves' => 'Les brèves sont des textes courts et simples permettant de - mettre en ligne rapidement des informations concises, de gérer - une revue de presse, un calendrier d\'événements...', # NEW - 'titre_breve_proposee' => 'Brève proposée', # NEW - 'titre_breve_publiee' => 'Brève publiée', # NEW - 'titre_breve_refusee' => 'Brève refusée', # NEW - 'titre_breves' => 'Les brèves', # NEW - 'titre_langue_breve' => 'Langue de la brève', # NEW - 'titre_nouvelle_breve' => 'Nouvelle brève', # NEW - 'titre_page_breves' => 'Brèves' # NEW -); - -?> diff --git a/www/plugins-dist/breves/lang/breves_sv.php b/www/plugins-dist/breves/lang/breves_sv.php index fdb8bf0a..70fd632a 100644 --- a/www/plugins-dist/breves/lang/breves_sv.php +++ b/www/plugins-dist/breves/lang/breves_sv.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=sv // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -41,5 +43,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'NYHETENS SPRÅK', # MODIF 'titre_page_breves' => 'Nyheter' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_tl.php b/www/plugins-dist/breves/lang/breves_tl.php deleted file mode 100644 index 34d67364..00000000 --- a/www/plugins-dist/breves/lang/breves_tl.php +++ /dev/null @@ -1,52 +0,0 @@ - 'Brève', # NEW - 'breves' => 'Brèves', # NEW - - // E - 'entree_breve_publiee' => 'Cette brève est :', # NEW - 'entree_texte_breve' => 'Texte de la brève', # NEW - - // I - 'icone_breves' => 'Brèves', # NEW - 'icone_ecrire_nouvel_article' => 'Les brèves contenues dans cette rubrique', # NEW - 'icone_modifier_breve' => 'Modifier cette brève', # NEW - 'icone_nouvelle_breve' => 'Écrire une nouvelle brève', # NEW - 'info_1_breve' => '1 brève', # NEW - 'info_aucun_breve' => 'Aucune brève', # NEW - 'info_breves' => 'Votre site utilise-t-il le système de brèves ?', # NEW - 'info_breves_02' => 'Brèves', # NEW - 'info_breves_valider' => 'Brèves à valider', # NEW - 'info_gauche_numero_breve' => 'Brève numéro', # NEW - 'info_nb_breves' => '@nb@ brèves', # NEW - 'item_breve_proposee' => 'proposée à l\'évaluation', # NEW - 'item_breve_refusee' => 'refusée', # NEW - 'item_breve_validee' => 'validée', # NEW - 'item_non_utiliser_breves' => 'Ne pas utiliser les brèves', # NEW - 'item_utiliser_breves' => 'Utiliser les brèves', # NEW - - // L - 'logo_breve' => 'Logo de la brève', # NEW - - // T - 'texte_breves' => 'Les brèves sont des textes courts et simples permettant de - mettre en ligne rapidement des informations concises, de gérer - une revue de presse, un calendrier d\'événements...', # NEW - 'titre_breve_proposee' => 'Brève proposée', # NEW - 'titre_breve_publiee' => 'Brève publiée', # NEW - 'titre_breve_refusee' => 'Brève refusée', # NEW - 'titre_breves' => 'Les brèves', # NEW - 'titre_langue_breve' => 'Langue de la brève', # NEW - 'titre_nouvelle_breve' => 'Nouvelle brève', # NEW - 'titre_page_breves' => 'Brèves' # NEW -); - -?> diff --git a/www/plugins-dist/breves/lang/breves_tr.php b/www/plugins-dist/breves/lang/breves_tr.php index a2a0c790..405df2f4 100644 --- a/www/plugins-dist/breves/lang/breves_tr.php +++ b/www/plugins-dist/breves/lang/breves_tr.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=tr // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -44,5 +46,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'KISA HABERİN DİLİ', # MODIF 'titre_page_breves' => 'Kısa haberler' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_tt.php b/www/plugins-dist/breves/lang/breves_tt.php deleted file mode 100644 index 34d67364..00000000 --- a/www/plugins-dist/breves/lang/breves_tt.php +++ /dev/null @@ -1,52 +0,0 @@ - 'Brève', # NEW - 'breves' => 'Brèves', # NEW - - // E - 'entree_breve_publiee' => 'Cette brève est :', # NEW - 'entree_texte_breve' => 'Texte de la brève', # NEW - - // I - 'icone_breves' => 'Brèves', # NEW - 'icone_ecrire_nouvel_article' => 'Les brèves contenues dans cette rubrique', # NEW - 'icone_modifier_breve' => 'Modifier cette brève', # NEW - 'icone_nouvelle_breve' => 'Écrire une nouvelle brève', # NEW - 'info_1_breve' => '1 brève', # NEW - 'info_aucun_breve' => 'Aucune brève', # NEW - 'info_breves' => 'Votre site utilise-t-il le système de brèves ?', # NEW - 'info_breves_02' => 'Brèves', # NEW - 'info_breves_valider' => 'Brèves à valider', # NEW - 'info_gauche_numero_breve' => 'Brève numéro', # NEW - 'info_nb_breves' => '@nb@ brèves', # NEW - 'item_breve_proposee' => 'proposée à l\'évaluation', # NEW - 'item_breve_refusee' => 'refusée', # NEW - 'item_breve_validee' => 'validée', # NEW - 'item_non_utiliser_breves' => 'Ne pas utiliser les brèves', # NEW - 'item_utiliser_breves' => 'Utiliser les brèves', # NEW - - // L - 'logo_breve' => 'Logo de la brève', # NEW - - // T - 'texte_breves' => 'Les brèves sont des textes courts et simples permettant de - mettre en ligne rapidement des informations concises, de gérer - une revue de presse, un calendrier d\'événements...', # NEW - 'titre_breve_proposee' => 'Brève proposée', # NEW - 'titre_breve_publiee' => 'Brève publiée', # NEW - 'titre_breve_refusee' => 'Brève refusée', # NEW - 'titre_breves' => 'Les brèves', # NEW - 'titre_langue_breve' => 'Langue de la brève', # NEW - 'titre_nouvelle_breve' => 'Nouvelle brève', # NEW - 'titre_page_breves' => 'Brèves' # NEW -); - -?> diff --git a/www/plugins-dist/breves/lang/breves_uk.php b/www/plugins-dist/breves/lang/breves_uk.php index d0966de8..03b9e256 100644 --- a/www/plugins-dist/breves/lang/breves_uk.php +++ b/www/plugins-dist/breves/lang/breves_uk.php @@ -3,20 +3,48 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=uk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'breve' => 'Новина', + 'breves' => 'Новини', + // E - 'entree_breve_publiee' => 'Цей коротка новина повинна бути опублікована?', # MODIF - 'entree_texte_breve' => 'Текст короткої новини', + 'entree_breve_publiee' => 'Це новина:', + 'entree_texte_breve' => 'Текст новини', // I - 'icone_ecrire_nouvel_article' => 'Зміст новин у цій рубриці', - 'icone_modifier_breve' => 'Змінити ці короткі новини', - 'info_1_breve' => '1 коротка новина', - 'info_aucun_breve' => 'Ніякої короткої новини', - 'info_breves' => 'Чи використовує ваш сайт систему новин?' -); + 'icone_breves' => 'Новини', + 'icone_ecrire_nouvel_article' => 'Новини у цій рубриці', + 'icone_modifier_breve' => 'Змінити ці новини', + 'icone_nouvelle_breve' => 'Нова новина', + 'info_1_breve' => '1 новина', + 'info_aucun_breve' => 'Новин нема', + 'info_breves' => 'Чи використовувати модуль новин?', + 'info_breves_02' => 'Новини', + 'info_breves_valider' => 'Новини на затвердженні', + 'info_gauche_numero_breve' => 'НОМЕР НОВИНИ', + 'info_nb_breves' => '@nb@ новин', + 'item_breve_proposee' => 'запропонована', + 'item_breve_refusee' => 'не опублікована', + 'item_breve_validee' => 'опублікована ', + 'item_non_utiliser_breves' => 'Не використовувати новини', + 'item_utiliser_breves' => 'Використовувати новини', -?> + // L + 'logo_breve' => 'Логотип новини', + + // T + 'texte_breves' => 'Новини - це короткі і прості тексти, які використовують онлайн публикацію стислої інформації, керують оглядом преси, календарем подій...', + 'titre_breve_proposee' => 'Новини відправлено', + 'titre_breve_publiee' => 'Новини опубліковано', + 'titre_breve_refusee' => 'Новини відхилено', + 'titre_breves' => 'Новини', + 'titre_langue_breve' => 'Мова новини', + 'titre_nouvelle_breve' => 'Назва новини', + 'titre_page_breves' => 'Новини' +); diff --git a/www/plugins-dist/breves/lang/breves_vi.php b/www/plugins-dist/breves/lang/breves_vi.php index b833d09d..df9caa9f 100644 --- a/www/plugins-dist/breves/lang/breves_vi.php +++ b/www/plugins-dist/breves/lang/breves_vi.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=vi // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -42,5 +44,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => 'NGÔN NGỮ CỦA TIN NGẮN', # MODIF 'titre_page_breves' => 'Tin ngắn' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_wo.php b/www/plugins-dist/breves/lang/breves_wo.php index 0813633e..a5bf202d 100644 --- a/www/plugins-dist/breves/lang/breves_wo.php +++ b/www/plugins-dist/breves/lang/breves_wo.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=wo // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -19,5 +21,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_breve_publiee' => 'Xibaar tuut bu ñu siiwal.', 'titre_breve_refusee' => 'Xibaar bu ñu nanguwul.' ); - -?> diff --git a/www/plugins-dist/breves/lang/breves_zh.php b/www/plugins-dist/breves/lang/breves_zh.php index ef6691c3..bb118dca 100644 --- a/www/plugins-dist/breves/lang/breves_zh.php +++ b/www/plugins-dist/breves/lang/breves_zh.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/breves?lang_cible=zh // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -44,5 +46,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_langue_breve' => '新闻语言', # MODIF 'titre_page_breves' => '新闻' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves.xml b/www/plugins-dist/breves/lang/paquet-breves.xml index 2a64f896..aa79bb7b 100644 --- a/www/plugins-dist/breves/lang/paquet-breves.xml +++ b/www/plugins-dist/breves/lang/paquet-breves.xml @@ -2,6 +2,9 @@ + + + @@ -27,15 +30,22 @@ + + + - + + + + + @@ -48,4 +58,7 @@ + + + diff --git a/www/plugins-dist/breves/lang/paquet-breves_ar.php b/www/plugins-dist/breves/lang/paquet-breves_ar.php index 77cf52a6..f9c5bc39 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_ar.php +++ b/www/plugins-dist/breves/lang/paquet-breves_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'الأخبار هي معلومات قصيرة بدون مؤلف.', 'breves_slogan' => 'إدارة الأخبار في SPIP' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_br.php b/www/plugins-dist/breves/lang/paquet-breves_br.php new file mode 100644 index 00000000..103dcc57 --- /dev/null +++ b/www/plugins-dist/breves/lang/paquet-breves_br.php @@ -0,0 +1,15 @@ + 'Ar pennadoù-berr a zo kemennadoù berr, hep aozer ebet.', + 'breves_slogan' => 'Ardeiñ ar pennadoù-berr e-barzh SPIP' +); diff --git a/www/plugins-dist/breves/lang/paquet-breves_de.php b/www/plugins-dist/breves/lang/paquet-breves_de.php index 1ac2b54d..920d6126 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_de.php +++ b/www/plugins-dist/breves/lang/paquet-breves_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'Meldungen sind kurze Informationen, deren Autor nicht gespeichert wird.', 'breves_slogan' => 'Meldungen in SPIP verwalten' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_en.php b/www/plugins-dist/breves/lang/paquet-breves_en.php index 69aa3d74..417ec046 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_en.php +++ b/www/plugins-dist/breves/lang/paquet-breves_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'News items are short informations, without authors.', 'breves_slogan' => 'Management of news items in SPIP' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_eo.php b/www/plugins-dist/breves/lang/paquet-breves_eo.php index bda65072..4ee6bb7d 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_eo.php +++ b/www/plugins-dist/breves/lang/paquet-breves_eo.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=eo // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'La fulm-informoj estas mallongaj enhavo, sen aŭtoro.', 'breves_slogan' => 'Mastrumado de fulm-informoj en SPIP' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_es.php b/www/plugins-dist/breves/lang/paquet-breves_es.php index 8d3f3975..7e1cae6f 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_es.php +++ b/www/plugins-dist/breves/lang/paquet-breves_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'Los breves son informaciones cortas sin autor.', 'breves_slogan' => 'Gestión de los breves en SPIP' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_fa.php b/www/plugins-dist/breves/lang/paquet-breves_fa.php index 809492ce..129178ff 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_fa.php +++ b/www/plugins-dist/breves/lang/paquet-breves_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'اين خبرها اطلاعات كوتاه و بدون مؤلف هستند', 'breves_slogan' => 'مديريت خبرها در اسپيپ' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_fr.php b/www/plugins-dist/breves/lang/paquet-breves_fr.php index f71ebe33..a9918a37 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_fr.php +++ b/www/plugins-dist/breves/lang/paquet-breves_fr.php @@ -1,7 +1,9 @@ 'Les brèves sont des informations courtes, sans auteur.', 'breves_slogan' => 'Gestion des brèves dans SPIP' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_fr_fem.php b/www/plugins-dist/breves/lang/paquet-breves_fr_fem.php index 20d5ee49..d810bd3f 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_fr_fem.php +++ b/www/plugins-dist/breves/lang/paquet-breves_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'Les brèves sont des informations courtes, sans auteure.', 'breves_slogan' => 'Gestion des brèves dans SPIP' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_fr_tu.php b/www/plugins-dist/breves/lang/paquet-breves_fr_tu.php index 3eab494a..cb170ffd 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_fr_tu.php +++ b/www/plugins-dist/breves/lang/paquet-breves_fr_tu.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=fr_tu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'Les brèves sont des informations courtes, sans auteur.', 'breves_slogan' => 'Gestion des brèves dans SPIP' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_hac.php b/www/plugins-dist/breves/lang/paquet-breves_hac.php new file mode 100644 index 00000000..e65761b4 --- /dev/null +++ b/www/plugins-dist/breves/lang/paquet-breves_hac.php @@ -0,0 +1,14 @@ + 'هەواڵەکۍ کوڵە زانیاریینی، بەبۍ نۋیسەر' +); diff --git a/www/plugins-dist/breves/lang/paquet-breves_it.php b/www/plugins-dist/breves/lang/paquet-breves_it.php index c925506c..ded9bf8d 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_it.php +++ b/www/plugins-dist/breves/lang/paquet-breves_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'Le brevi sono piccole fonti di informazioni, senza autori.', 'breves_slogan' => 'Gestione delle brevi in SPIP' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_lb.php b/www/plugins-dist/breves/lang/paquet-breves_lb.php index 9601f099..f52d12c7 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_lb.php +++ b/www/plugins-dist/breves/lang/paquet-breves_lb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'Kuerzmeldunge si kléng Informatiounen ouni Auteur.', 'breves_slogan' => 'Gestioun vun de Kuerzmeldungen am SPIP' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_nl.php b/www/plugins-dist/breves/lang/paquet-breves_nl.php index bfa6db4d..a66efead 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_nl.php +++ b/www/plugins-dist/breves/lang/paquet-breves_nl.php @@ -3,13 +3,13 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // B - 'breves_description' => 'Nieuwsberiechten zijn kortnieuws zonder auteur.', + 'breves_description' => 'Nieuwsberichten zijn kort nieuws zonder auteur.', 'breves_slogan' => 'Beheer van nieuwsberichten in SPIP' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_oc_ni_mis.php b/www/plugins-dist/breves/lang/paquet-breves_oc_ni_mis.php new file mode 100644 index 00000000..d22d7f22 --- /dev/null +++ b/www/plugins-dist/breves/lang/paquet-breves_oc_ni_mis.php @@ -0,0 +1,15 @@ + 'Li brèva soun de infourmacioun courti, sensa autour.', + 'breves_slogan' => 'Gestioun dei brèva en SPIP' +); diff --git a/www/plugins-dist/breves/lang/paquet-breves_pt.php b/www/plugins-dist/breves/lang/paquet-breves_pt.php index 07a9857d..dc2a4120 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_pt.php +++ b/www/plugins-dist/breves/lang/paquet-breves_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'As notícias são informações curtas, sem autor.', 'breves_slogan' => 'Gestão das notícias em SPIP' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_pt_br.php b/www/plugins-dist/breves/lang/paquet-breves_pt_br.php index e968b271..75f2a4a0 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_pt_br.php +++ b/www/plugins-dist/breves/lang/paquet-breves_pt_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=pt_br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'As notas são informações curtas, sem autor.', 'breves_slogan' => 'Gerenciamento de notas no SPIP' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_ru.php b/www/plugins-dist/breves/lang/paquet-breves_ru.php index 88bf46eb..8095e54c 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_ru.php +++ b/www/plugins-dist/breves/lang/paquet-breves_ru.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'Новость - это краткая статья без указания автора.', 'breves_slogan' => 'Настройки ленты новостей' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_sk.php b/www/plugins-dist/breves/lang/paquet-breves_sk.php index f13c7a62..03e8a545 100644 --- a/www/plugins-dist/breves/lang/paquet-breves_sk.php +++ b/www/plugins-dist/breves/lang/paquet-breves_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-breves?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'breves_description' => 'Novinky sú krátke informácie bez autora.', 'breves_slogan' => 'Správa noviniek v SPIPe' ); - -?> diff --git a/www/plugins-dist/breves/lang/paquet-breves_uk.php b/www/plugins-dist/breves/lang/paquet-breves_uk.php new file mode 100644 index 00000000..0117b2f2 --- /dev/null +++ b/www/plugins-dist/breves/lang/paquet-breves_uk.php @@ -0,0 +1,15 @@ + 'Новина - це коротка стаття без вкізівки на автора.', + 'breves_slogan' => 'Налаштування стрічки новин' +); diff --git a/www/plugins-dist/breves/paquet.xml b/www/plugins-dist/breves/paquet.xml index f39b7354..12ae8936 100644 --- a/www/plugins-dist/breves/paquet.xml +++ b/www/plugins-dist/breves/paquet.xml @@ -1,9 +1,9 @@ @@ -31,7 +31,7 @@ - +
    diff --git a/www/plugins-dist/breves/prive/objets/liste/breves.html b/www/plugins-dist/breves/prive/objets/liste/breves.html index 9446e9eb..0d3837b4 100644 --- a/www/plugins-dist/breves/prive/objets/liste/breves.html +++ b/www/plugins-dist/breves/prive/objets/liste/breves.html @@ -22,8 +22,10 @@ [(#STATUT|puce_statut{'breve',#ID_BREVE,#ID_RUBRIQUE})] - [(#LOGO_BREVE|image_reduire{20,26})]#TITRE + [(#LOGO_BREVE|image_reduire{20,26}) + ]#TITRE [(#DATE|affdate_jourcourt)] [(#AUTORISER{modifier,breve,#ID_BREVE}|?{ #ID_BREVE, diff --git a/www/plugins-dist/breves/prive/rss/a_suivre-breves.html b/www/plugins-dist/breves/prive/rss/a_suivre-breves.html index 4ac20ff2..dba98a29 100644 --- a/www/plugins-dist/breves/prive/rss/a_suivre-breves.html +++ b/www/plugins-dist/breves/prive/rss/a_suivre-breves.html @@ -1,12 +1,11 @@ -$rss['[(#DATE|date_ical)]'] .= ' - <:breves:titre_breve_proposee|texte_backendq:> : [(#TITRE|texte_backendq)] - [(#URL_ECRIRE{breve, id_breve=#ID_BREVE}|url_absolue|texte_backendq)] - [(#URL_ECRIRE{breves_voir, id_breve=#ID_BREVE}|url_absolue|texte_backendq)] + <:breves:titre_breve_proposee|texte_backend:> : [(#TITRE|texte_backend)] + [(#URL_ECRIRE{breve, id_breve=#ID_BREVE}|url_absolue|texte_backend)] + [(#URL_ECRIRE{breves_voir, id_breve=#ID_BREVE}|url_absolue|texte_backend)] [(#DATE|date_iso)] text/html - [(#LANG|texte_backendq)] - [(#TEXTE|texte_backendq)] - '; + [(#LANG|texte_backend)] + [(#TEXTE|texte_backend)] + diff --git a/www/plugins-dist/breves/prive/squelettes/contenu/breve.html b/www/plugins-dist/breves/prive/squelettes/contenu/breve.html index 4624ddb3..73e7ff5f 100644 --- a/www/plugins-dist/breves/prive/squelettes/contenu/breve.html +++ b/www/plugins-dist/breves/prive/squelettes/contenu/breve.html @@ -24,7 +24,7 @@ #PIPELINE{afficher_complement_objet,#ARRAY{args,#ARRAY{type,breve,id,#ID_BREVE},data,'
    '}} #BOITE_FERMER -[(#EVAL{_AJAX}|oui) +[(#CONST{_AJAX}|oui) diff --git a/www/plugins-dist/breves/prive/squelettes/inclure/plan-breves.html b/www/plugins-dist/breves/prive/squelettes/inclure/plan-breves.html index 1855f38d..7ec5fbea 100644 --- a/www/plugins-dist/breves/prive/squelettes/inclure/plan-breves.html +++ b/www/plugins-dist/breves/prive/squelettes/inclure/plan-breves.html @@ -1,15 +1,39 @@ -#SET{nomp,sitrub#ID_RUBRIQUE} -#SET{nb,50} - - - +] + diff --git a/www/plugins-dist/compagnon/action/compagnon.php b/www/plugins-dist/compagnon/action/compagnon.php index 6db7843e..130d6f2d 100644 --- a/www/plugins-dist/compagnon/action/compagnon.php +++ b/www/plugins-dist/compagnon/action/compagnon.php @@ -1,23 +1,33 @@ diff --git a/www/plugins-dist/compagnon/compagnon/article_redaction_redacteur.html b/www/plugins-dist/compagnon/compagnon/article_redaction_redacteur.html index 52b372d4..3dbb83eb 100644 --- a/www/plugins-dist/compagnon/compagnon/article_redaction_redacteur.html +++ b/www/plugins-dist/compagnon/compagnon/article_redaction_redacteur.html @@ -1,10 +1,10 @@ -[(#ENV{fermer}|non) -[(#BOITE_OUVRIR{<:compagnon:c_article_redaction:>,compagnon})] - -<:compagnon:c_article_redaction_texte:> - -#BOITE_PIED - - [(#BOUTON_ACTION{[(#VAL|ok_aleatoire)],#URL_ACTION_AUTEUR{compagnon,compris/#ID,#SELF|parametre_url{fermer,oui}},ajax})] -#BOITE_FERMER -] +[(#ENV{fermer}|non) +[(#BOITE_OUVRIR{<:compagnon:c_article_redaction:>,compagnon})] + +<:compagnon:c_article_redaction_redacteur_texte:> + +#BOITE_PIED + + [(#BOUTON_ACTION{[(#VAL|ok_aleatoire)],#URL_ACTION_AUTEUR{compagnon,compris/#ID,#SELF|parametre_url{fermer,oui}},ajax})] +#BOITE_FERMER +] diff --git a/www/plugins-dist/compagnon/compagnon_administrations.php b/www/plugins-dist/compagnon/compagnon_administrations.php index 2bd3578a..3a0b499b 100644 --- a/www/plugins-dist/compagnon/compagnon_administrations.php +++ b/www/plugins-dist/compagnon/compagnon_administrations.php @@ -1,10 +1,28 @@ diff --git a/www/plugins-dist/compagnon/compagnon_fonctions.php b/www/plugins-dist/compagnon/compagnon_fonctions.php index 5b38de1f..066db83f 100644 --- a/www/plugins-dist/compagnon/compagnon_fonctions.php +++ b/www/plugins-dist/compagnon/compagnon_fonctions.php @@ -1,17 +1,26 @@ diff --git a/www/plugins-dist/compagnon/compagnon_messages.php b/www/plugins-dist/compagnon/compagnon_messages.php index 9f433e37..6c4072df 100644 --- a/www/plugins-dist/compagnon/compagnon_messages.php +++ b/www/plugins-dist/compagnon/compagnon_messages.php @@ -1,44 +1,60 @@ 'accueil', 'inclure' => 'compagnon/accueil', - 'statuts'=> array('1comite', '0minirezo', 'webmestre') + 'statuts' => array('1comite', '0minirezo', 'webmestre') ); $aides[] = array( 'id' => 'accueil_configurer', 'titre' => _T('compagnon:c_accueil_configurer_site'), - 'texte' => _T('compagnon:c_accueil_configurer_site_texte', array('nom'=>$GLOBALS['meta']['nom_site'])), - 'statuts'=> array('webmestre'), + 'texte' => _T('compagnon:c_accueil_configurer_site_texte', array('nom' => $GLOBALS['meta']['nom_site'])), + 'statuts' => array('webmestre'), 'target' => '#bando_identite .nom_site_spip .nom', ); $aides[] = array( 'id' => 'accueil_publication', 'titre' => _T('compagnon:c_accueil_publication'), 'texte' => _T('compagnon:c_accueil_publication_texte'), - 'statuts'=> array('webmestre'), - 'target'=> '#bando1_menu_edition', + 'statuts' => array('webmestre'), + 'target' => '#bando1_menu_edition', ); break; - case 'rubriques': // eviter si possible une requete sql. if (!isset($vus['rubriques']) and !sql_countsel('spip_rubriques')) { @@ -46,8 +62,8 @@ function compagnon_compagnon_messages($flux) { 'id' => 'rubriques', 'titre' => _T('compagnon:c_rubriques_creer'), 'texte' => _T('compagnon:c_rubriques_creer_texte'), - 'statuts'=> array('webmestre'), - 'target'=> '#contenu .icone:first-of-type', + 'statuts' => array('webmestre'), + 'target' => '#contenu .icone:first-of-type', ); } break; @@ -56,14 +72,14 @@ function compagnon_compagnon_messages($flux) { case 'rubrique': // eviter si possible une requete sql. if (!isset($vus['rubrique'])) { - $statut = sql_getfetsel('statut', 'spip_rubriques', 'id_rubrique='.$flux['args']['id_rubrique']); + $statut = sql_getfetsel('statut', 'spip_rubriques', 'id_rubrique=' . $flux['args']['id_rubrique']); if ($statut != 'publie') { $aides[] = array( 'id' => 'rubrique', 'titre' => _T('compagnon:c_rubrique_publier'), 'texte' => _T('compagnon:c_rubrique_publier_texte'), - 'statuts'=> array('webmestre'), - 'target'=> '#contenu .icone.article-new-24' + 'statuts' => array('webmestre'), + 'target' => '#contenu .icone.article-new-24' ); } } @@ -76,7 +92,19 @@ function compagnon_compagnon_messages($flux) { 'id' => 'articles', 'titre' => _T('compagnon:c_articles_creer'), 'texte' => _T('compagnon:c_articles_creer_texte'), - 'statuts'=> array('webmestre') + 'statuts' => array('webmestre') + ); + } + break; + + case 'sites': + // eviter si possible une requete sql. + if (!isset($vus['sites']) and !sql_countsel('spip_rubriques')) { + $aides[] = array( + 'id' => 'sites', + 'titre' => _T('compagnon:c_sites_creer'), + 'texte' => _T('compagnon:c_sites_creer_texte'), + 'statuts' => array('webmestre') ); } break; @@ -85,12 +113,12 @@ function compagnon_compagnon_messages($flux) { $aides[] = array( 'id' => 'article_redaction', 'inclure' => 'compagnon/article_redaction', - 'statuts'=> array('0minirezo', 'webmestre') - ); + 'statuts' => array('0minirezo', 'webmestre') + ); $aides[] = array( 'id' => 'article_redaction_redacteur', 'inclure' => 'compagnon/article_redaction_redacteur', - 'statuts'=> array('1comite') + 'statuts' => array('1comite') ); break; } @@ -103,15 +131,12 @@ function compagnon_compagnon_messages($flux) { 'id' => 'job_queue', 'titre' => _T('compagnon:c_job'), 'texte' => _T('compagnon:c_job_texte'), - 'statuts'=> array('webmestre') + 'statuts' => array('webmestre') ); break; } break; } - return $flux; } - -?> diff --git a/www/plugins-dist/compagnon/compagnon_pipelines.php b/www/plugins-dist/compagnon/compagnon_pipelines.php index b2468cfd..3e3d4c79 100644 --- a/www/plugins-dist/compagnon/compagnon_pipelines.php +++ b/www/plugins-dist/compagnon/compagnon_pipelines.php @@ -1,49 +1,94 @@ $flux['args'], 'data' => array())); + $aides = pipeline('compagnon_messages', array('args' => $flux['args'], 'data' => array())); if (!$aides) { return $flux; } - $ajouts = ""; + $ajouts = ''; foreach ($aides as $aide) { // restreindre l'affichage par statut d'auteur @@ -69,11 +114,10 @@ function compagnonage($flux, $pipeline) { // demande d'un squelette if (isset($aide['inclure']) and $inclure = $aide['inclure']) { unset($aide['inclure']); - $ajout = recuperer_fond($inclure, array_merge($flux['args'], $aide), array('ajax'=>true)); - } - // sinon les textes sont fournis + $ajout = recuperer_fond($inclure, array_merge($flux['args'], $aide), array('ajax' => true)); + } // sinon les textes sont fournis else { - $ajout = recuperer_fond('compagnon/_boite', $aide, array('ajax'=>true)); + $ajout = recuperer_fond('compagnon/_boite', $aide, array('ajax' => true)); } $ajouts .= $ajout; @@ -83,7 +127,7 @@ function compagnonage($flux, $pipeline) { // ajout de nos trouvailles if ($ajouts) { $twinkle = find_in_path('prive/javascript/jquery.twinkle.js'); - $ajouts.=<< jQuery.getScript('$twinkle',function(){ jQuery(function(){ @@ -95,14 +139,14 @@ jQuery.getScript('$twinkle',function(){ } }; jQuery('.compagnon .target').each(function(){ - var target = jQuery(this).attr('data-target'); - var delay = 0; - jQuery(this).mousemove(function(){ - if (!delay) { - delay=1; setTimeout(function(){delay=0;}, 800); + var target = jQuery(this).attr('data-target'); + var delay = 0; + jQuery(this).mousemove(function(){ + if (!delay) { + delay=1; setTimeout(function(){delay=0;}, 800); jQuery(target).twinkle(options); - } - }); + } + }); }); }); }); @@ -111,11 +155,6 @@ JS; $flux['data'] = $ajouts . $flux['data']; } - + return $flux; } - - - - -?> diff --git a/www/plugins-dist/compagnon/formulaires/configurer_compagnon.html b/www/plugins-dist/compagnon/formulaires/configurer_compagnon.html index 16c9c26d..63f5a5c5 100644 --- a/www/plugins-dist/compagnon/formulaires/configurer_compagnon.html +++ b/www/plugins-dist/compagnon/formulaires/configurer_compagnon.html @@ -6,11 +6,11 @@ [

    (#ENV*{message_erreur})

    ]
    -#ACTION_FORMULAIRE{#ENV{action}} +#ACTION_FORMULAIRE -
      +
      #SET{name,activer}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
    • +
      <:compagnon:explication_activer_compagnon:>
      [(#GET{erreurs}) @@ -22,8 +22,8 @@
      -
    • -
    +
    +

     

    diff --git a/www/plugins-dist/compagnon/formulaires/reinitialiser_compagnon.html b/www/plugins-dist/compagnon/formulaires/reinitialiser_compagnon.html index 5be1704a..b6a3036d 100644 --- a/www/plugins-dist/compagnon/formulaires/reinitialiser_compagnon.html +++ b/www/plugins-dist/compagnon/formulaires/reinitialiser_compagnon.html @@ -6,11 +6,11 @@ [

    (#ENV*{message_erreur})

    ]
    -#ACTION_FORMULAIRE{#ENV{action}} +#ACTION_FORMULAIRE -
      +
      #SET{name,qui}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
    • +
      <:compagnon:explication_reinitialiser_compagnon:>
      [(#GET{erreurs}) @@ -22,8 +22,8 @@
      -
    • -
    +
    +

     

    diff --git a/www/plugins-dist/compagnon/formulaires/reinitialiser_compagnon.php b/www/plugins-dist/compagnon/formulaires/reinitialiser_compagnon.php index b732884f..6082374a 100644 --- a/www/plugins-dist/compagnon/formulaires/reinitialiser_compagnon.php +++ b/www/plugins-dist/compagnon/formulaires/reinitialiser_compagnon.php @@ -1,11 +1,35 @@ 'moi'); } +/** + * Traitement du formulaire de réinitialisation des messages du compagnon + * + * @return array + * Retours du traitement + **/ function formulaires_reinitialiser_compagnon_traiter() { $qui = _request('qui'); include_spip('inc/config'); @@ -17,10 +41,8 @@ function formulaires_reinitialiser_compagnon_traiter() { effacer_config('compagnon'); ecrire_config('compagnon/config', $config); } - + return array( 'message_ok' => _T('compagnon:reinitialisation_ok') ); } - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon.xml b/www/plugins-dist/compagnon/lang/compagnon.xml index 61c15e60..5dea533f 100644 --- a/www/plugins-dist/compagnon/lang/compagnon.xml +++ b/www/plugins-dist/compagnon/lang/compagnon.xml @@ -1,54 +1,75 @@ - + - - + + - + + + + + - + + + + - + - + + - + - + - + + + - + + + - + + - - + + - + + - + + + + - + - + + - + + + + diff --git a/www/plugins-dist/compagnon/lang/compagnon_ar.php b/www/plugins-dist/compagnon/lang/compagnon_ar.php index 15cd105c..f320be74 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_ar.php +++ b/www/plugins-dist/compagnon/lang/compagnon_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -43,6 +45,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'c_rubriques_creer' => 'إنشاء أول قسم!', 'c_rubriques_creer_texte' => 'الأقسام هي البنية الأساسية للموقع. يمكنك إنشاء مقالات في داخل كل منها. فابدأ بإنشاء القسم الأول.', + 'c_sites_creer' => 'كيف يتم إنشاء او اسيراد موقع؟', + 'c_sites_creer_texte' => 'لا يمكنك إنشاء او اسيتراد موقع من هذه الصفحة الا لدى وجود قسم واحد على الاقل في الموقعك. +يمكن إنشاء قسم جديد من قائمة «تحرير»، ثم «الأقسام».', // E 'explication_activer_compagnon' => 'يضيف الرفيق تعليقات على بعض صفحات @@ -72,5 +77,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_compagnon' => 'الرفيق', 'titre_page_configurer_compagnon' => 'إعداد الرفيق' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_br.php b/www/plugins-dist/compagnon/lang/compagnon_br.php new file mode 100644 index 00000000..fe993033 --- /dev/null +++ b/www/plugins-dist/compagnon/lang/compagnon_br.php @@ -0,0 +1,48 @@ + 'digemer mad @nom@', + 'c_accueil_configurer_site' => 'Frammañ ho lec’hien', # RELIRE + 'c_accueil_publication' => 'embann', + 'c_accueil_publication_texte' => 'Evit embann ur bajenn e tleoc’h sevel ur pennad. + Dav eo sevel ur rubrikenn d’an nebeutañ evit-se. Gallout a rit sevel unan e lañser "Embann" en ur klikañ war "rubrikennoù".', # RELIRE + 'c_accueil_texte_revenir' => ' Ar pajenn-mañ a ginnig ar pennadoù diwezhañ ho peus embannet war ho lec’hienn. + Gallout a rit dont en-dro d’ar pajenn-mañ pep wech ho peus c’hoant en ur klikañ war ar skeuden "ti" a-hus, dindan ho anv. + ', # RELIRE + 'c_article_redaction' => 'Ar pennad-mañ zo c’hoazh e skrivañ', # RELIRE + 'c_article_redaction_redacteur' => 'Ar pennad-mañ zo c’hoazh e skrivañ', # RELIRE + 'c_article_redaction_texte' => 'Evit embann ar pennad-mañ war al lec’hienn foran eo dav cheñj e statud dezhañ. + E lañser disachañ e tu gleiz lakait "embannet enlinenn" e plas " e skrivañ".', # RELIRE + 'c_articles_creer' => 'penaos krouin ur pennad skrid', # RELIRE + 'c_job' => 'labourioù da ober…', + 'c_rubrique_publier' => 'krouit un embann skrid', + 'c_rubriques_creer' => 'embannit ur rubrik gentañ !', + 'c_sites_creer' => 'penaos krouiñ pe emporzhiñ ul lec’h?', + + // L + 'label_reinitialiser_compagnon' => 'adreizhañ kannad ar c’hanfard ?', + + // O + 'ok_bien' => 'mad eo', + 'ok_jai_compris' => 'komprenned meus', + 'ok_merci' => 'trugarez', + 'ok_parfait' => 'mat tre', + + // R + 'reinitialisation_ok' => 'ya nemedken re meus dija lennet .', + 'reinitialiser' => 'adreizhet', + 'reinitialiser_moi' => 'ya nemedken re meus dija lennet', + 'reinitialiser_tous' => 'ya, sort pe sort vefe an aoser', + + // T + 'titre_compagnon' => 'ar genderw' +); diff --git a/www/plugins-dist/compagnon/lang/compagnon_ca.php b/www/plugins-dist/compagnon/lang/compagnon_ca.php index cc9e8184..f38243d5 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_ca.php +++ b/www/plugins-dist/compagnon/lang/compagnon_ca.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=ca // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -17,7 +19,7 @@ També cal que creïs almenys una secció per a poder fer-ho. Pots continuar fen 'c_accueil_texte' => 'Acabes d’entrar a la zona privada d’SPIP.', 'c_accueil_texte_revenir' => 'Aquesta pàgina mostra la última activitat editorial de la teva pàgina. Pots visitar aquesta pàgina en qualsevol moment fent clic al botó de la casa, -a la part superior, a sota del teu nom.', +a la part superior, a sota del teu nom.', # MODIF 'c_article_redaction' => 'L’article s’està escrivint.', 'c_article_redaction_redacteur' => 'L’edició d’aquest article està en curs.', 'c_article_redaction_redacteur_texte' => 'Per a proposar el teu article als administradors de la pàgina i als altres editors, canvia, dins el bloc de la columna del costat, "edició en curs" per "enviat per avaluar".', @@ -64,5 +66,3 @@ Voldrieu reiniciar aquests missatges?', 'titre_compagnon' => 'El Company', 'titre_page_configurer_compagnon' => 'Configura el company' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_de.php b/www/plugins-dist/compagnon/lang/compagnon_de.php index a905d859..900539bf 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_de.php +++ b/www/plugins-dist/compagnon/lang/compagnon_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -35,6 +37,8 @@ Legen Sie einen Artikel an. Sie können das auf dieser Seite unterhalb der Besch 'c_rubriques_creer' => 'Legen Sie eine erste Rubrik an!', 'c_rubriques_creer_texte' => 'Die Website setzt sich aus Rubriken zusammen. Artikel legen sie innerhalb der Rubriken an. Beginnen Sie, indem Sie eine erste Rubrik anlegen.', + 'c_sites_creer' => 'So erstellen oder importieren Sie eine Website?', + 'c_sites_creer_texte' => 'Sie können eine Website nicht erstellen oder importieren auf dieser Seite bis zu dem Moment, wo es einen Theme in Ihrer Website existiert. Sie können es aus dem Menü ’Bearbeiten’, dann ’Themen’ erstellen.', // E 'explication_activer_compagnon' => 'Der Begleiter fügt manchen internen Seiten von SPIP Erläuterungen @@ -65,5 +69,3 @@ hinzu, um Sie bei der Nutzung von SPIP zu unterstützen. 'titre_compagnon' => 'Begleiter', 'titre_page_configurer_compagnon' => 'Einstellungen des Begleiters' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_en.php b/www/plugins-dist/compagnon/lang/compagnon_en.php index 349510c0..bc4da88d 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_en.php +++ b/www/plugins-dist/compagnon/lang/compagnon_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -18,7 +20,7 @@ It is also necessary that you create at least one section to do so. You can proc 'c_accueil_texte_revenir' => 'This page shows the latest editorial activity on your site. You can visit this page at any time by clicking the "house icon", on the top, under your name.', - 'c_article_redaction' => 'L’article est en cours de rédaction', # The editing of this article is in progress + 'c_article_redaction' => 'The editing of this article is in progress', # The editing of this article is in progress 'c_article_redaction_redacteur' => 'This edition of this article is in progress', 'c_article_redaction_redacteur_texte' => 'To propose your article to the site administrators and to the other editors, within the block on the column side, change "edition in progress" to "submitted for evaluation."', @@ -35,6 +37,9 @@ In the block on the side column, change "editing in progress" by "published onli So create an article. You can do it from this page under the description of your section.', 'c_rubriques_creer' => 'Create a first section !', 'c_rubriques_creer_texte' => 'Sections are the basic structure of the site, you can create articles in each of them. Start by creating a first section.', + 'c_sites_creer' => 'How to create or import a site?', + 'c_sites_creer_texte' => 'You can only create or import a site from this page when a section already exists in your site. +You can create it from the menu "Edit", then "Sections".', // E 'explication_activer_compagnon' => 'The companion adds comments on some pages of the private area to assist in taking SPIP in hand. Would you like to activate it?', @@ -63,5 +68,3 @@ Would you like to reset these messages?', 'titre_compagnon' => 'The Companion', 'titre_page_configurer_compagnon' => 'Configure the companion' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_eo.php b/www/plugins-dist/compagnon/lang/compagnon_eo.php index 7883b75f..1299217c 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_eo.php +++ b/www/plugins-dist/compagnon/lang/compagnon_eo.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=eo // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -19,7 +21,7 @@ Por tio, estas necesa krei almenaŭ unu rubrikon. Vi povas fari tion en la menuo 'c_accueil_texte' => 'Vi ĵus eniris en la SPIP privata spaco.', 'c_accueil_texte_revenir' => 'Tiu paĝo prezentas la freŝa ĉefartikola aktiveco en via retejo. Vi povas reveni al tiu paĝo ĉiumomente klakante la domvigneton, -sur la supra parto sub via nomo.', +sur la supra parto sub via nomo.', # MODIF 'c_article_redaction' => 'La artikolo estas redaktata', 'c_article_redaction_redacteur' => 'La artikolo estas redaktata', 'c_article_redaction_redacteur_texte' => 'Por proponi vian artikolon al la retej-mastrumantoj kaj al aliaj redakantoj, en la flanka kadro, ŝanĝu « redaktataj » ĝis « proponita por taksado ». @@ -67,5 +69,3 @@ Komencu krei unuan rubrikon.', 'titre_compagnon' => 'La kompano', 'titre_page_configurer_compagnon' => 'Agordi la kompano' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_es.php b/www/plugins-dist/compagnon/lang/compagnon_es.php index c08d25cc..d153cd94 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_es.php +++ b/www/plugins-dist/compagnon/lang/compagnon_es.php @@ -3,68 +3,68 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // C 'c_accueil_bienvenue' => '¡Bienvenido/a @nom@!', - 'c_accueil_configurer_site' => 'Configurar tu sitio', - 'c_accueil_configurer_site_texte' => 'Una de las primeras cosas que hay que hacer es darle un nombre a tu sitio. - Ahora se llama «@nom@». Encuentras el nombre del sitio arriba del todo de esta página. - Pinchando encima, puedes modficarle el nombre, y también agregarle un logo y un eslogan.', + 'c_accueil_configurer_site' => 'Configurar su sitio', + 'c_accueil_configurer_site_texte' => 'Una de las primeras cosas que hay que hacer es darle un nombre a su sitio. +Ahora se llama «@nom@». Puede ver el nombre del sitio en la parte superior de esta página. +Puede modificarlo haciendo clic sobre él, así como atribuirle un logo o un eslogan.', 'c_accueil_publication' => '¡y a publicar !', 'c_accueil_publication_texte' => 'Para publicar una página, hay que crear un artículo. Para esto, es necesario crear al menos una sección. Lo puedes hacer por el menú «Edición», eligiendo la opción «Secciones».', 'c_accueil_texte' => 'Acabas de entrar en el espacio privado de SPIP.', - 'c_accueil_texte_revenir' => ' Esta página presenta la actividad editorial reciente de tu sito. - Puedes volver a esta página en cualquier momento, pinchando en el icono de menú que representa una casa, arriba de la página, bajo tu nombre.', + 'c_accueil_texte_revenir' => 'Esta página muestra la actividad editorial reciente de su sitio. +Puede volver a esta página en cualquier momento haciendo clic en el icono de la casa, en la parte superior sobre su nombre.', 'c_article_redaction' => 'El artículo está en curso de redacción', 'c_article_redaction_redacteur' => 'El artículo está en curso de redacción', - 'c_article_redaction_redacteur_texte' => 'Para proponer tu artículo a los administradores del sitio y a los demás redactores, modifica, en el cuadro aquí al lado, «en curso de redacción» por «propuesto a la publicación».', + 'c_article_redaction_redacteur_texte' => 'Para proponer su artículo a los administradores del sitio y a los demás redactores, modifique en el cuadro aquí al lado, «en curso de redacción» por «propuesto a la publicación».', 'c_article_redaction_texte' => 'Para publicar este artículo en el sitio público, hay que cambiar su estatuto. En el cuadro aquí al lado, cambia «en curso de recacción» por «publicado en línea».', 'c_articles_creer' => '¿Cómo crear un artículo?', - 'c_articles_creer_texte' => 'Sólo cuando exista una sección en tu sitio podrás crear -un artículo desde esta página. -Puedes crear una sección desde el menú «Edición», y luego «Secciones».', - 'c_job' => 'Las tareas por realizar…', + 'c_articles_creer_texte' => 'Sólo cuando exista una sección en su sitio podrá crear un artículo desde esta página. +Puede crear una sección desde el menú «Edición», y luego «Secciones».', + 'c_job' => 'Tareas a realizar…', 'c_job_texte' => 'Esta página lista las próximas tareas de mantenimiento que debe efectuar SPIP. Estas tareas se ejecutan a intervalos regulares, o puntualmente para los procesamientos pesados que puedan solicitar los plugins, como el envío masivo de correos.', - 'c_rubrique_publier' => 'Crea un artículo', - 'c_rubrique_publier_texte' => 'Una sección sólo será visible en el sitio público una vez que -contenga algo publicado, por ejemplo un artículo. -Crea entonces un artículo. Lo puedes hacer desde esta página, bajo el descriptivo de la sección.', - 'c_rubriques_creer' => '¡Crea la primer sección!', - 'c_rubriques_creer_texte' => 'Las secciones son la estrucutra de base del sitio; en cada una de ellas podrás crear artículos. - Comienza por crear una primer sección.', + 'c_rubrique_publier' => 'Cree un artículo', + 'c_rubrique_publier_texte' => 'Una sección sólo será visible en el sitio público una vez que contenga algo publicado, por ejemplo un artículo. +Cree entonces un artículo. Lo puede hacer desde esta página, bajo la descripción de la sección.', + 'c_rubriques_creer' => '¡Cree la primer sección!', + 'c_rubriques_creer_texte' => 'Las secciones son la estructura de base del sitio; en cada una de ellas podrá crear artículos. +Comience por crear una primer sección.', + 'c_sites_creer' => '¿Cómo crear o importar un sitio?', + 'c_sites_creer_texte' => 'Sólo puede crear o importar un sitio desde esta página cuando exista una sección en el sitio. +Puede crearlo desde el menú «Edición», eligiendo la opción «Secciones».', // E - 'explication_activer_compagnon' => 'El compañero agrega comentarios a ciertas páginas - dl espacio privado de SPIP para ayudar a los principiantes iniciarse a SPIP. ¿Quieres activarlo?', - 'explication_reinitialiser_compagnon' => 'Los mensajes que una autora o autor ya vio no se vuelven a mostrar. - ¿Quieres reinicializar estos mensajes?', + 'explication_activer_compagnon' => 'El compañero agrega comentarios a ciertas páginas del espacio privado de SPIP para ayudar a familiarizarse con SPIP. ¿Quiere activarlo?', + 'explication_reinitialiser_compagnon' => 'Los mensajes que una autora o autor ya ha visto no se vuelven a mostrar. +¿Quiere reiniciar estos mensajes?', // L 'label_activer_compagnon' => '¿Activar el compañero?', - 'label_reinitialiser_compagnon' => '¿Reinitializar los mensajes del compañero?', + 'label_reinitialiser_compagnon' => '¿Reinicializar los mensajes del compañero?', // O 'ok' => 'OK', 'ok_bien' => '¡Bien!', - 'ok_jai_compris' => '¡Ya entendí!', + 'ok_jai_compris' => '¡He entendido!', 'ok_merci' => 'Gracias', 'ok_parfait' => '¡Perfecto!', // R - 'reinitialisation' => 'Reinitialización', - 'reinitialisation_ok' => 'La reinicialización fue realizada.', - 'reinitialiser' => 'Reinicializar', - 'reinitialiser_moi' => 'Sí, únicamente los que ya leí.', + 'reinitialisation' => 'Reinicio', + 'reinitialisation_ok' => 'El reinicio se ha efectuado.', + 'reinitialiser' => 'Reiniciar', + 'reinitialiser_moi' => 'Sí, únicamente los que ya he leído.', 'reinitialiser_tous' => 'Sí, sea cual sea el autor', // T 'titre_compagnon' => 'El Compañero', 'titre_page_configurer_compagnon' => 'Configurar el Compañero' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_fa.php b/www/plugins-dist/compagnon/lang/compagnon_fa.php index 30d8656b..039765cf 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_fa.php +++ b/www/plugins-dist/compagnon/lang/compagnon_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -21,7 +23,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'c_accueil_texte_revenir' => 'اين صفحه فعاليت‌ سردبيري اخير سايت را نشان مي‌دهد. مي‌توانيد با كليك كردن صورتك خانه در قسمت بالاي نام خود، هر لحظه به اين صفحه بازگرديد. -', +', # MODIF 'c_article_redaction' => 'مقاله در دست نگارش است', 'c_article_redaction_redacteur' => 'مقاله‌ي در دست ترجمه', 'c_article_redaction_redacteur_texte' => 'براي اريه‌ي مقاله‌هاي خود به مديران و به نويسندگان ديگر، @@ -68,5 +70,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_compagnon' => 'همراه', 'titre_page_configurer_compagnon' => 'پيكربندي «همراه».' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_fr.php b/www/plugins-dist/compagnon/lang/compagnon_fr.php index 38abd674..32020a08 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_fr.php +++ b/www/plugins-dist/compagnon/lang/compagnon_fr.php @@ -1,7 +1,9 @@ 'Vous venez d’entrer dans l’espace privé de SPIP.', 'c_accueil_texte_revenir' => ' Cette page présente l’activité éditoriale récente sur votre site. - Vous pouvez revenir sur cette page à tout instant en cliquant l’icône de maison, + Vous pouvez revenir sur cette page à tout instant en cliquant l’icone de maison, sur la partie haute, sous votre nom.', 'c_article_redaction' => 'L’article est en cours de rédaction', 'c_article_redaction_redacteur' => 'L’article est en cours de rédaction', @@ -41,6 +43,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'c_rubriques_creer' => 'Créez une première rubrique !', 'c_rubriques_creer_texte' => 'Les rubriques sont la structure de base du site ; vous pourrez créer des articles dans chacune d’entre elles. Commencez par créer une première rubrique.', + 'c_sites_creer' => 'Comment créer ou importer un site ?', + 'c_sites_creer_texte' => 'Vous ne pourrez créer ou importer un site depuis cette page + qu’à partir du moment où il existe une rubrique dans votre site. + Vous pouvez la créer depuis le menu « Édition », puis « Rubriques ».', // E 'explication_activer_compagnon' => 'Le compagnon ajoute des commentaires sur certaines pages @@ -70,5 +76,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_compagnon' => 'Le Compagnon', 'titre_page_configurer_compagnon' => 'Configurer le Compagnon' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_fr_fem.php b/www/plugins-dist/compagnon/lang/compagnon_fr_fem.php index 5a4778ec..bcced826 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_fr_fem.php +++ b/www/plugins-dist/compagnon/lang/compagnon_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -18,7 +20,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( Il est nécessaire pour cela de créer au moins une rubrique. Vous pouvez le faire dans le menu « Édition » en cliquant « Rubriques ».', 'c_accueil_texte' => 'Vous venez d’entrer dans l’espace privé de SPIP.', 'c_accueil_texte_revenir' => ' Cette page présente l’activité éditoriale récente sur votre site. - Vous pouvez revenir sur cette page à tout instant en cliquant l’icône de maison, + Vous pouvez revenir sur cette page à tout instant en cliquant l’icone de maison, sur la partie haute, sous votre nom.', 'c_article_redaction' => 'L’article est en cours de rédaction', 'c_article_redaction_redacteur' => 'L’article est en cours de rédaction', @@ -42,11 +44,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'c_rubriques_creer' => 'Créez une première rubrique !', 'c_rubriques_creer_texte' => 'Les rubriques sont la structure de base du site ; vous pourrez créer des articles dans chacune d’entre elles. Commencez par créer une première rubrique.', + 'c_sites_creer' => 'Comment créer ou importer un site ?', + 'c_sites_creer_texte' => 'Vous ne pourrez créer ou importer un site depuis cette page + qu’à partir du moment où il existe une rubrique dans votre site. + Vous pouvez la créer depuis le menu « Édition », puis « Rubriques ».', // E 'explication_activer_compagnon' => 'Le compagnon ajoute des commentaires sur certaines pages de l’espace privé pour aider à prendre SPIP en main. Souhaitez-vous l’activer ?', - 'explication_reinitialiser_compagnon' => 'Les messages déjà vus par une auteure ne sont plus affichés ensuite. + 'explication_reinitialiser_compagnon' => 'Les messages déjà vus par une autrice ne sont plus affichés ensuite. Souhaitez-vous réinitialiser ces messages ?', // L @@ -65,11 +71,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'reinitialisation_ok' => 'La réinitialisation est effectuée.', 'reinitialiser' => 'Réinitialiser', 'reinitialiser_moi' => 'Oui, uniquement ceux que j’ai déjà lu', - 'reinitialiser_tous' => 'Oui, quelle que soit l’auteure', + 'reinitialiser_tous' => 'Oui, quelle que soit l’autrice', // T 'titre_compagnon' => 'Le Compagnon', 'titre_page_configurer_compagnon' => 'Configurer le Compagnon' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_fr_tu.php b/www/plugins-dist/compagnon/lang/compagnon_fr_tu.php index 22935fa5..f2c71d5d 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_fr_tu.php +++ b/www/plugins-dist/compagnon/lang/compagnon_fr_tu.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=fr_tu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -18,7 +20,7 @@ En cliquant dessus, tu pourras modifier son nom, mais aussi lui donner un logo e Il est nécessaire pour cela de créer au moins une rubrique. Tu peux le faire dans le menu « Édition » en cliquant « Rubriques ».', 'c_accueil_texte' => 'Tu viens d’entrer dans l’espace privé de SPIP.', 'c_accueil_texte_revenir' => 'Cette page présente l’activité éditoriale récente sur ton site. -Tu peux revenir sur cette page à tout instant en cliquant l’icône de maison, +Tu peux revenir sur cette page à tout instant en cliquant l’icone de maison, sur la partie haute, sous ton nom.', 'c_article_redaction' => 'L’article est en cours de rédaction', 'c_article_redaction_redacteur' => 'L’article est en cours de rédaction', @@ -36,6 +38,10 @@ Crée donc un article. Tu peux le faire depuis cette page, sous le descriptif de 'c_rubriques_creer' => 'Crée une première rubrique !', 'c_rubriques_creer_texte' => 'Les rubriques sont la structure de base du site ; tu pourras créer des articles dans chacune d’entre elles. Commence par créer une première rubrique.', + 'c_sites_creer' => 'Comment créer ou importer un site ?', + 'c_sites_creer_texte' => 'Tu ne peux créer ou importer un site depuis cette page + qu’à partir du moment où il existe une rubrique dans ton site. + Tu peux la créer depuis le menu « Édition », puis « Rubriques ».', // E 'explication_activer_compagnon' => 'Le compagnon ajoute des commentaires sur certaines pages @@ -65,5 +71,3 @@ Souhaites-tu réinitialiser ces messages ?', 'titre_compagnon' => 'Le Compagnon', 'titre_page_configurer_compagnon' => 'Configurer le Compagnon' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_it.php b/www/plugins-dist/compagnon/lang/compagnon_it.php index 0d1c53ff..3a165cbb 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_it.php +++ b/www/plugins-dist/compagnon/lang/compagnon_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -18,7 +20,7 @@ Facendo clic, è possibile modificare il nome, ma anche dargli un logo e uno slo È necessario che per creare almeno una rubrica. È possibile farlo nel menu "Modifica" cliccando su "Rubriche".', 'c_accueil_texte' => 'Siete appena entrati nell’area privata di SPIP.', 'c_accueil_texte_revenir' => 'Questa pagina mostra l’ultima attività editoriale sul tuo sito. -Puoi visitare questa pagina in qualsiasi momento facendo clic sull’icona home, sulla parte superiore, sotto il tuo nome.', +Puoi visitare questa pagina in qualsiasi momento facendo clic sull’icona home, sulla parte superiore, sotto il tuo nome.', # MODIF 'c_article_redaction' => 'L’articolo è in corso di redazione', 'c_article_redaction_redacteur' => 'L’articolo è in fase di redazione', 'c_article_redaction_redacteur_texte' => 'Per inviare il tuo articolo per gli amministratori del sito e di altri editori, attraverso il pulsante a lato, cambiare da "in scrittura" a "proposto per la pubblicazione."', @@ -36,6 +38,7 @@ Quindi creare un articolo. Puoi farlo da questa pagina sotto la descrizione del 'c_rubriques_creer' => 'Crea la prima rubrica!', 'c_rubriques_creer_texte' => 'Le rubriche sono la struttura di base del sito, è possibile creare elementi ciascuna. Iniziare con la creazione di una prima rubrica.', + 'c_sites_creer' => 'Come creare o importare uno sito ?', # RELIRE // E 'explication_activer_compagnon' => 'L’assistente aggiunge commenti su alcune pagine dello spazio privato per contribuire a rendere SPIP più facile da usare. Vuoi per attivarlo?', @@ -64,5 +67,3 @@ Vuoi ripristinare questi messaggi?', 'titre_compagnon' => 'L’assistente', 'titre_page_configurer_compagnon' => 'Configurare l’assistente' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_lb.php b/www/plugins-dist/compagnon/lang/compagnon_lb.php index 6c59f370..8671c9b6 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_lb.php +++ b/www/plugins-dist/compagnon/lang/compagnon_lb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -18,7 +20,7 @@ Wann dir drop klickt kënnt dir de Numm änneren, an him och e Logo oder Slogan Duerfir musst dir op mannst eng Rubrik bäiflécken. Dir kënnt dat am Menu "Editioun" maachen andeem dir op "Rubrike" klickt.', 'c_accueil_texte' => 'Dir sidd elo am privaten Deel vu SPIP.', 'c_accueil_texte_revenir' => 'Dës Säit weist déi rezent editorial Aktivitéit op ärem Site. -Dir kënnt op dës Säit zeréck andeem dir op d’Haus-Symbol, uewen ënnert ärem Numm, klickt.', +Dir kënnt op dës Säit zeréck andeem dir op d’Haus-Symbol, uewen ënnert ärem Numm, klickt.', # MODIF 'c_article_redaction' => 'Den Artikel ass an der Redaktioun', 'c_article_redaction_redacteur' => 'Den Artikel ass an der Redaktioun', 'c_article_redaction_redacteur_texte' => 'Fir ären Artikel den Administrateure vum Site an deenen anere Redakteren virzeschloën, ännert am Cadre lénks "an der Aarbecht" op "virgeschloën".', @@ -62,5 +64,3 @@ Fänkt mat enger éischter Rubrik un.', 'titre_compagnon' => 'De Compagnon', 'titre_page_configurer_compagnon' => 'De Compagnon astellen' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_nl.php b/www/plugins-dist/compagnon/lang/compagnon_nl.php index 3a138a9c..9543a3c0 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_nl.php +++ b/www/plugins-dist/compagnon/lang/compagnon_nl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,61 +13,63 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'c_accueil_bienvenue' => 'Welkom @nom@ !', 'c_accueil_configurer_site' => 'Je site configureren', 'c_accueil_configurer_site_texte' => 'Om te beginnen moet je je site een naam geven. - Momenteel is het « @nom@ » genoemd. De naam van het site wordt op het top van dit pagina aangeduid. - Klik erop om zijn naam te veranderen maar ook om er een logo en een slogan bij te geven.', - 'c_accueil_publication' => 'Publiceer !', - 'c_accueil_publication_texte' => 'Om een pagina te publiceren moet je een artikel scheppen. - Hiervoor moet je tenminste een rubriek aanmaken. Je mag dat doen in het « Uitgave » menu door op « Rubrieken » te klikken.', - 'c_accueil_texte' => 'Je bent pas in het privé-ruimte van SPIP binnengekomen.', - 'c_accueil_texte_revenir' => ' Deze pagina wijst je het laatste editoriaal activiteit op je site aan. - Je kan hier altijd terugkomen door op het huisje te klikken die zich aan de bovenkant - juist onder je naam bevindt.', - 'c_article_redaction' => 'De redactie van het artikel is aan de gang.', + Momenteel wordt hij «@nom@» genoemd. De naam van het site wordt boveaan deze pagina getoond. + Klik erop om de naam te veranderen maar ook om er een logo en een slogan aan toe te voegen.', + 'c_accueil_publication' => 'Publiceer!', + 'c_accueil_publication_texte' => 'Om een pagina te publiceren moet je een artikel maken. + Hiervoor moet je tenminste één rubriek aanmaken. Je mag dat doen in het «Items» menu door op «Rubrieken» te klikken.', + 'c_accueil_texte' => 'Je bent zojuist in het privé gedeelte van SPIP binnengekomen.', + 'c_accueil_texte_revenir' => ' Deze pagina toont je de laatste editoriaal activiteit op je site. + Je kunt hier altijd terugkomen door op het huisje te klikken dat zich aan de bovenzijde + bevindt, juist onder je naam.', + 'c_article_redaction' => 'Het artikel is in redactie.', 'c_article_redaction_redacteur' => 'De redactie van het artikel is aan de gang.', 'c_article_redaction_redacteur_texte' => 'Om je artikel aan de sitebeheerders en aan de anderen redacteurs voor te stellen, - klik op « in redactie » in het bijliggende kader en selecteer dan « voorgesteld voor evaluatie » (+ Wijzigen).', - 'c_article_redaction_texte' => 'Om het artikel op het publiek site te publiceren moet zijn statuut veranderd worden. - In het bijliggende kader, wijzig « in redactie » naar « inline geplaatst ».', - 'c_articles_creer' => 'Hoe een artikel aanmaken ?', - 'c_articles_creer_texte' => 'Je zal een artikel vanaf dit pagina kunnen aanmaken - zodra je site tenminste een rubriek zal bevatten. - Maak een rubriek aan vanaf het « Uitgave » menu, klik daar op « Rubrieken ».', - 'c_job' => 'Het lijst van werken', + klik op «in redactie» in het linkse kader en selecteer dan «ter evaluatie».', + 'c_article_redaction_texte' => 'Om het artikel op het publiek site te publiceren moet de status veranderd worden. + In het linkse kader wijzig je «in redactie» naar «online geplaatst».', + 'c_articles_creer' => 'Hoe een artikel maken?', + 'c_articles_creer_texte' => 'Je kan een artikel vanaf deze pagina aanmaken + zodra je site tenminste één rubriek bevat. + Maak een rubriek aan vanaf het «Item» menu, klik daar op «Rubrieken».', + 'c_job' => 'Het lijst van taken', 'c_job_texte' => 'Op deze pagina vind je het lijst van de volgende onderhoudstaken van SPIP. - De taken worden op regelmatige termijnen uitgevoerd of af en toe voor zwaardere onderhandelingen gevraagd door plugins, zoals het massa uitzenden van e-mails.', + De taken worden op regelmatige tijden uitgevoerd of soms voor zwaardere taken gevraagd door plugins, zoals het massaal verzenden van e-mails.', 'c_rubrique_publier' => 'Maak een artikel aan', - 'c_rubrique_publier_texte' => 'Een rubriek wordt maar op het publiek site zichtbaar op het moment waar ze tenminste een gepubliceerde element bevat. Bijvoorbeeld een gepubliceerde artikel. - Maak dus een artikel aan. Dit mag je vanaf hier beginnen, onder de beschrijving van het rubriek.', - 'c_rubriques_creer' => 'Maak een eerste rubriek aan !', - 'c_rubriques_creer_texte' => 'De rubrieken vormen het basisstructuur van je site. In ieder rubriek kan je artikels aanmaken. + 'c_rubrique_publier_texte' => 'Een rubriek wordt pas op het publiek site zichtbaar wanneer ze tenminste één gepubliceerd element bevat. Bijvoorbeeld een gepubliceerd artikel. + Maak dus een artikel aan. Je mag hier beginnen, onder de beschrijving van het rubriek.', + 'c_rubriques_creer' => 'Maak een eerste rubriek aan!', + 'c_rubriques_creer_texte' => 'De rubrieken vormen de basisstructuur van je site. In ieder rubriek kan je artikelen aanmaken. Begin met het aanmaken van een eerste rubriek.', + 'c_sites_creer' => 'Hoe je een site maakt of importeert?', + 'c_sites_creer_texte' => 'Vanaf deze pagina kun je een site maken of importeren + wanneer er tenminste één rubriek in de site bestaat. + Je kunt hem aanmaken via het menu «Items» en vervolgens «Rubrieken».', // E - 'explication_activer_compagnon' => 'De metgezel geeft raden op enkele paginas van het privé-ruimte om aan het in hand nemen van SPIP te helpen. Wil je de metzegel activeren ?', - 'explication_reinitialiser_compagnon' => 'De boodschappen al gelezen door een auteur worden daarna niet meer getoond. - Wil je die boodschappen resetten ?', + 'explication_activer_compagnon' => 'Deze metgezel geeft advies op enkele paginas van het privé gedeelte om je op weg te helpen in SPIP. Wil je de metzegel activeren?', + 'explication_reinitialiser_compagnon' => 'De uitleg die al door een auteur gelezen is, wordt daarna niet meer getoond. + Wil je die uitleg resetten?', // L - 'label_activer_compagnon' => 'De metgezel activeren ?', - 'label_reinitialiser_compagnon' => 'De boodschappen van de metgezel resetten ?', + 'label_activer_compagnon' => 'De metgezel activeren?', + 'label_reinitialiser_compagnon' => 'De uitleg van de metgezel resetten?', // O 'ok' => 'OK', 'ok_bien' => 'Goed !', - 'ok_jai_compris' => 'Ik heb begrepen !', + 'ok_jai_compris' => 'Ik heb het begrepen!', 'ok_merci' => 'Dank je', - 'ok_parfait' => 'Prima !', + 'ok_parfait' => 'Prima!', // R 'reinitialisation' => 'Reset', 'reinitialisation_ok' => 'De reset is gedaan.', 'reinitialiser' => 'Resetten', - 'reinitialiser_moi' => 'Ja, alleen die dat ik al gelezen heb.', + 'reinitialiser_moi' => 'Ja, alleen diegene die ik al gelezen heb.', 'reinitialiser_tous' => 'Ja, voor alle auteurs.', // T 'titre_compagnon' => 'De Metgezel', 'titre_page_configurer_compagnon' => 'De Metgezel configureren' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_oc_ni_mis.php b/www/plugins-dist/compagnon/lang/compagnon_oc_ni_mis.php new file mode 100644 index 00000000..b8d7a965 --- /dev/null +++ b/www/plugins-dist/compagnon/lang/compagnon_oc_ni_mis.php @@ -0,0 +1,78 @@ + 'Benvengut @nom@ !', + 'c_accueil_configurer_site' => 'Counfigurà lou vouòstre sit', + 'c_accueil_configurer_site_texte' => 'Una dei premièra caua da faire es de dounà un noum au vouòstre sit. + Si souòna atualamen « @nom@ ». Lou noum dóu sit es afichat aquì damount sus aquela pàgina. + En clicant desoubre, pourès moudificà lou siéu noum, mà finda lì douna un logou e un eslougan.', + 'c_accueil_publication' => 'Publicas !', + 'c_accueil_publication_texte' => 'Per publicà una pàgina, vi caurà creà un article. + Per acò, es nechessari de creà au màncou una rùbrica. Poudès lou faire en lou menù « Edicioun » en clicant soubre « Rùbrica ».', + 'c_accueil_texte' => 'Venès d’intrà en l’espaci privat de SPIP.', + 'c_accueil_texte_revenir' => ' Aquela pàgina presenta l’atività editouriala rechenta sus lou vouòstre sit. + Poudès sempre tournà soubre aquela pàgina en clicant sus l’icona de maioun, + dessamoun, souta lou vouòstre noum.', + 'c_article_redaction' => 'L’article es en cours de redacioun', + 'c_article_redaction_redacteur' => 'L’article es en cours de redacioun', + 'c_article_redaction_redacteur_texte' => 'Per proupausa lou vouòstre article ai aministratour dóu sit e ai autre redatour, + en lou cadre sus lou coustà, cambias « en cours de redacioun » da « proupausat da publicacioun ».', + 'c_article_redaction_texte' => 'Da publicà aquel article sus lou sit public, cau cambià lou siéu statut. + En lou cadre sus lou coustà, cambias « en cours de redacioun » da « publicat en ligna ».', + 'c_articles_creer' => 'Couma creà un article ?', + 'c_articles_creer_texte' => 'Noun poudès creà un article da aquela pàgina + que s’esista una rùbrica en lou vouòstre sit. + Poudès la creà dau menù « Edicioun », pi « Rùbrica ».', + 'c_job' => 'Lu travai da faire…', + 'c_job_texte' => 'Aquela pàgina lista li tacha de mantenença venent + que SPIP dèu efetuà. Aqueli tacha soun esecutadi da intervàlou régulié + o pountualamen dai tratamen pèuge demandat dai plugin, + couma l’espedissioun d’e-mail en massa.', + 'c_rubrique_publier' => 'Creas un article', + 'c_rubrique_publier_texte' => 'Una rùbrica es visible sus lou sit public + que coura counten au màncou un countegut publicat ; per isemple : un article publicat. + Creas pi un article. Poudès lou faire despì aquela pàgina, souta lou descritiéu de la vouòstra rùbrica.', + 'c_rubriques_creer' => 'Creas una premièra rùbrica !', + 'c_rubriques_creer_texte' => 'Li rùbrica soun la counstrutura da basa dóu sit ; pourès creà dei article en caduna tra eli. + Coumenças da creà una premièra rùbrica.', + 'c_sites_creer' => 'Couma creà o empourtà un sit ?', + 'c_sites_creer_texte' => 'Pourès creà o empourtà un sit despì esta pàgina que s’esiste una rùbrica en lou vouòstre sit. + Poudès la creà dau menù « Edicioun », pi « Rùbrica ».', + + // E + 'explication_activer_compagnon' => 'Lou coumpàgnou ajustà dei coumentari sus certeni pàgina + de l’espaci privat da ajudà a pilha SPIP en main. Vouriès l’ativà ?', + 'explication_reinitialiser_compagnon' => 'Lu message jà vist d’un autour seran plus afichat après. + Vouriès reinicialisà aquelu message ?', + + // L + 'label_activer_compagnon' => 'Ativà lou coumpàgnou ?', + 'label_reinitialiser_compagnon' => 'Reinicialisà lu message dóu coumpàgnou ?', + + // O + 'ok' => 'OK', + 'ok_bien' => 'Ben !', + 'ok_jai_compris' => 'Ai capich !', + 'ok_merci' => 'Mercì', + 'ok_parfait' => 'Perfet !', + + // R + 'reinitialisation' => 'Reinicialisacioun', + 'reinitialisation_ok' => 'La reinicialisacioun es facha.', + 'reinitialiser' => 'Reinicialisà', + 'reinitialiser_moi' => 'Ahì, basta aquelu qu’ai jà legit', + 'reinitialiser_tous' => 'Ahì, quau sigue l’autour', + + // T + 'titre_compagnon' => 'Lou Coumpàgnou', + 'titre_page_configurer_compagnon' => 'Counfigurà lou le Coumpàgnou' +); diff --git a/www/plugins-dist/compagnon/lang/compagnon_pt.php b/www/plugins-dist/compagnon/lang/compagnon_pt.php index 82a34202..73305e89 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_pt.php +++ b/www/plugins-dist/compagnon/lang/compagnon_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -16,7 +18,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'c_accueil_publication' => 'Publique !', 'c_accueil_publication_texte' => 'Para publicar uma página, precisa de criar um artigo. Para tal é necessário criar pelo menos uma rubrica. Pode fazê-lo clicando no menu "Edição" e depois em "Rubricas".', 'c_accueil_texte' => 'Acabou de entrar na área privda de SPIP.', - 'c_accueil_texte_revenir' => 'Esta página apresenta a última actividade editorial no seu sítio. Pode visitá-la a qualquer momento, clicando no "ícone casa", no topo, abaixo do seu nome de utilizador.', + 'c_accueil_texte_revenir' => 'Esta página apresenta a última actividade editorial no seu sítio. Pode visitá-la a qualquer momento, clicando no "ícone casa", no topo, abaixo do seu nome de utilizador.', # MODIF 'c_article_redaction' => 'O artigo está em edição', 'c_article_redaction_redacteur' => 'O artigo está em edição', 'c_article_redaction_redacteur_texte' => 'Para propor o seu artigo aos administradores do sítio e aos outros redactores, no bloco ao lado da coluna, altere "Redacção em curso" para "Proposto para avaliação".', @@ -56,5 +58,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_compagnon' => 'O guia', 'titre_page_configurer_compagnon' => 'Configurar o guia' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_pt_br.php b/www/plugins-dist/compagnon/lang/compagnon_pt_br.php index d1c01d11..35736a9b 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_pt_br.php +++ b/www/plugins-dist/compagnon/lang/compagnon_pt_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=pt_br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -31,6 +33,8 @@ Você pode criá-la a partir do menu « Edição » e, em seguida « Seçõe 'c_rubrique_publier_texte' => 'Uma seção só é exibida na área pública a partir do momento em que ela contenha pelo menos um conteúdo publicado. Crie então uma matéria. Você pode fazê-lo a partir desta página, abaixo da descrição da sua seção.', 'c_rubriques_creer' => 'Crie uma primeira seção!', 'c_rubriques_creer_texte' => 'As seções são a estrutura básica do site; você pode criar matérias em cada uma delas. Comece criando uma primeira seção.', + 'c_sites_creer' => 'Como criar ou importar um site?', + 'c_sites_creer_texte' => 'Você só poderá criar ou importar um site a partir desta página a partir do momento em que exista uma seção no seu site. Você poderá criá-la a partir do menu «Edição», na opção «Seções».', // E 'explication_activer_compagnon' => 'O companheiro inclui comentários em certas páginas da área restrita para ajudar a se familiarizar com o SPIP. Você quer ativá-lo?', @@ -58,5 +62,3 @@ Você pode criá-la a partir do menu « Edição » e, em seguida « Seçõe 'titre_compagnon' => 'O Companheiro', 'titre_page_configurer_compagnon' => 'Configurar o Companheiro' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_ru.php b/www/plugins-dist/compagnon/lang/compagnon_ru.php index 5cb2b58b..b0fad4a4 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_ru.php +++ b/www/plugins-dist/compagnon/lang/compagnon_ru.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,50 +13,45 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'c_accueil_bienvenue' => 'Добрый день @nom@ !', 'c_accueil_configurer_site' => 'Настроить сайт', 'c_accueil_configurer_site_texte' => 'Первое, что вы можете сделать - это изменить название вашего сайта. -Сейчас он называется « @nom@ ». Название показывается в правом верхнем углу страницы. Нажав на имя сайта, вы можете изменить его. - ', - 'c_accueil_publication' => 'Опубликовать !', - 'c_accueil_publication_texte' => 'Для того, что бы сделать новую страницу сайта вам необходимо создать новую статью. - Так же необходимо, что бы у вас был минимум один раздел сайта. Если на сайте нет ни одного раздела мы можете создать его в нажав на пункт меню "Сайт-> Разделы" в верхней панели управления.', - 'c_accueil_texte' => 'Вы только что вошли в систему управления вашими сайтом - CMS SPIP.', - 'c_accueil_texte_revenir' => ' На этой странице отображаются последние изменения, которые были выполненный на сайте. В дальнейшем вы можете вернуться на эту страницу нажав на кнопку "Главная" в левом верхнем углу страницы. - Vous pouvez revenir sur cette page à tout instant en cliquant l’icône de maison, - sur la partie haute, sous votre nom.', - 'c_article_redaction' => 'Статус статьи - "редактируется"', - 'c_article_redaction_redacteur' => 'Статус статьи - "редактируется"', - 'c_article_redaction_redacteur_texte' => 'Для того, что бы отправить статью на утверждение администратором(ами) сайта, измените статус статьи с "готовится" на "утверждается". - dans le cadre sur le côté, changez « en cours de rédaction » par « proposé à la publication ».', - 'c_article_redaction_texte' => 'Что бы статья появилась на сайты вы должны изменить ее статус. - В левой колонке изменить статус статьи с « готовится » на « опубликована ».', - 'c_articles_creer' => 'Как создать статью ?', - 'c_articles_creer_texte' => 'Вы не можете создать статью на этой странице до тех пор, пока вы не создали хотя бы один раздел сайта. Что бы создать раздел наведите мышку на кнопку "Сайт" и выберете пункт меню "Разделы". - qu’à partir du moment où il existe une rubrique dans votre site. - Vous pouvez la créer depuis le menu « Édition », puis « Rubriques ».', +Сейчас он называется «@nom@». Название показывается в правом верхнем углу страницы. Нажав на имя сайта вы можете изменить его.', + 'c_accueil_publication' => 'Опубликовать!', + 'c_accueil_publication_texte' => 'Чтобы сделать новую страницу сайта вам необходимо создать новую статью. Также необходимо, чтобы у вас была минимум одна рубрика сайта. Если на сайте нет ни одной рубрики, вы можете создать её, нажав на пункт меню «Сайт -> Рубрики» в верхней панели управления.', + 'c_accueil_texte' => 'Вы только что вошли в систему управления вашим сайтом - CMS SPIP.', + 'c_accueil_texte_revenir' => ' На этой странице отображаются последние изменения, которые были выполненный на сайте. В дальнейшем вы можете вернуться на эту страницу, нажав на кнопку «Главная» в левом верхнем углу страницы.', + 'c_article_redaction' => 'Статус статьи - «редактируется»', + 'c_article_redaction_redacteur' => 'Статус статьи - «редактируется»', + 'c_article_redaction_redacteur_texte' => 'Чтобы отправить статью на утверждение администратором(ами) сайта, измените статус статьи с «готовится» на «утверждается».', + 'c_article_redaction_texte' => 'Чтобы статья появилась на сайте, вы должны изменить ее статус. + В левой колонке изменить статус статьи с «готовится» на «опубликована».', + 'c_articles_creer' => 'Как создать статью?', + 'c_articles_creer_texte' => 'Вы не можете создать статью на этой странице до тех пор, пока не создали хотя бы одну рубрику сайта. Чтобы создать рубрику наведите мышку на кнопку «Сайт» и выберете пункт меню «Рубрики».', 'c_job' => 'Список задач', - 'c_job_texte' => 'На этой странице вы видите список задач, которые выполняет CMS SPIP. Некоторые задачи выполняются периодически, другие от случая к случаю - например отправка рассылки подписчикам.', + 'c_job_texte' => 'На этой странице вы видите список задач, которые выполняет CMS SPIP. Некоторые задачи выполняются периодически, другие от случая к случаю - например отправка рассылки подписчикам.', 'c_rubrique_publier' => 'Создайте статью', - 'c_rubrique_publier_texte' => 'Раздел появляется на сайте только тогда, когда он содержит минимум одну опубликованную статью. Если на вашем сайте в начале названия раздела указан номер, то это его номер по порядку при выводе на страницах сайта. В таком случае разделы без номера так же показываться не будут. Вы можете использовать эту особенность для того, что бы скрыть раздел. + 'c_rubrique_publier_texte' => 'Рубрика отображается на сайте только тогда, когда в ней есть хотя бы одна опубликованная статья. Если на вашем сайте в начале названия рубрики указан номер, то это её номер по порядку при выводе на страницах сайта. В таком случае рубрики без номера также показываться не будут. Вы можете использовать эту особенность, чтобы скрыть рубрику. -Итак, создайте статью. Кнопка находится на этой странице под описанием раздела.', - 'c_rubriques_creer' => 'Создайте первый раздел !', - 'c_rubriques_creer_texte' => 'Разделы - это основа структуры сайта; вы можете создавать и хранить файлы в них. Попробуйте создать первый раздел. - Commencez par créer une première rubrique.', +Итак, создайте статью. Кнопка находится на этой странице под описанием рубрики.', + 'c_rubriques_creer' => 'Создайте первую рубрику!', + 'c_rubriques_creer_texte' => 'Рубрики - это основа структуры сайта; вы можете создавать и хранить файлы в них. Попробуйте создать первую рубрику.', + 'c_sites_creer' => 'Как создать или импортировать сайт?', + 'c_sites_creer_texte' => 'Вы не можете создать или импортировать сайт с этой страницы, пока на вашем сайте нет разделов. +Вы можете создать раздел в меню «Сайт», затем «Разделы».', // E - 'explication_activer_compagnon' => '"Помощник" выводит специальные пояснения на некоторых страницах админки сайта для того, что бы пользователю было легче освоится. Вы хотите включить "Помощник"?', - 'explication_reinitialiser_compagnon' => 'Подсказки, которые пользователь уже видел не будут показываться в дальнейшем. -Показать подсказки заново ?', + 'explication_activer_compagnon' => '«Помощник» выводит специальные пояснения на некоторых страницах админки сайта, чтобы пользователю было легче освоится. Вы хотите включить «Помощника»?', + 'explication_reinitialiser_compagnon' => 'Подсказки, которые пользователь уже видел, не будут показываться в дальнейшем. +Показать подсказки заново?', // L - 'label_activer_compagnon' => 'Включить "Помощника" ?', - 'label_reinitialiser_compagnon' => 'Показать заново подсказки "Помощника" ?', + 'label_activer_compagnon' => 'Включить «Помощника»?', + 'label_reinitialiser_compagnon' => 'Показать заново подсказки «Помощника»?', // O 'ok' => 'OK', 'ok_bien' => 'ОК', - 'ok_jai_compris' => 'Есть !', + 'ok_jai_compris' => 'Есть!', 'ok_merci' => 'Спасибо', - 'ok_parfait' => 'Отлично !', + 'ok_parfait' => 'Отлично!', // R 'reinitialisation' => 'Показать заново подсказки', @@ -64,8 +61,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'reinitialiser_tous' => 'Да, для всех авторов', // T - 'titre_compagnon' => '"Помощник"', - 'titre_page_configurer_compagnon' => 'Настройки "Помощника"' + 'titre_compagnon' => '«Помощник»', + 'titre_page_configurer_compagnon' => 'Настройки «Помощника»' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_sk.php b/www/plugins-dist/compagnon/lang/compagnon_sk.php index 77c81871..e88a6ac2 100644 --- a/www/plugins-dist/compagnon/lang/compagnon_sk.php +++ b/www/plugins-dist/compagnon/lang/compagnon_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compagnon?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -17,9 +19,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'c_accueil_publication_texte' => 'Na publikovanie stránky musíte vytvoriť článok. Môžete to urobiť v menu "Upraviť stránku" kliknutím na "Rubriky".', 'c_accueil_texte' => 'Práve ste sa dostali do súkromnej zóny SPIPu.', - 'c_accueil_texte_revenir' => ' Táto stránka uvádza najnovšiu redakčnú aktivitu na vašej stránke. + 'c_accueil_texte_revenir' => ' Táto stránka predstavuje najnovšiu redakčnú aktivitu na vašej stránke. Na túto stránku sa môžete kedykoľvek vrátiť kliknutím na ikonu domčeka - na vrchu pod svojím menom.', + v hornej časti stránky pod svojím menom .', 'c_article_redaction' => 'Článok sa upravuje', 'c_article_redaction_redacteur' => 'Článok sa upravuje', 'c_article_redaction_redacteur_texte' => 'Na to, aby bol váš článok odoslaný administrátorom stránky a iným redaktorom, @@ -37,12 +39,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( ako odoslanie hromadných e-mailov.', 'c_rubrique_publier' => 'Vytvorte článok', 'c_rubrique_publier_texte' => 'Rubrika je publikovaná, keď - sa v nej nachádza aspoň jeden publikovaný text. Napríklad publikovaný článok. + sa v nej nachádza aspoň jeden publikovaný text, napríklad publikovaný článok. Takže vytvorte článok. Môžete to urobiť na tejto stránke pod opisom svojej rubriky.', 'c_rubriques_creer' => 'Vytvorte prvú rubriku!', 'c_rubriques_creer_texte' => 'Rubriky tvoria základnú štruktúru stránky. V každej z nich môžete vytvárať články. Začnite vytvárať prvú rubriku.', + 'c_sites_creer' => 'Ako vytvoriť alebo nahrať stránku?', + 'c_sites_creer_texte' => 'Vytvoriť alebo nahrať stránku nemôžete na tejto stránke, + kým na svojom webe nemáte rubriku. + Tú môžete vytvoriť pomocou menu Upraviť, potom Rubriky.', // E 'explication_activer_compagnon' => 'Asistent pridáva komentáre na niektoré stránky @@ -71,5 +77,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_compagnon' => 'Sprievodca', 'titre_page_configurer_compagnon' => 'Nastaviť Sprievodcu' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/compagnon_uk.php b/www/plugins-dist/compagnon/lang/compagnon_uk.php new file mode 100644 index 00000000..a632b449 --- /dev/null +++ b/www/plugins-dist/compagnon/lang/compagnon_uk.php @@ -0,0 +1,63 @@ + 'Доброго дня, @nom@!', + 'c_accueil_configurer_site' => 'Налаштувати сайт', + 'c_accueil_configurer_site_texte' => 'Перше, що ви можете зробити, - це змінити назву вашого сайту. +Зараз він називається „@nom@”. Назву показано в правому верхньому кутку сторінки. Ви можете змінити ім’я сайту, натиснувши на нього.', + 'c_accueil_publication' => 'Опублікувати!', + 'c_accueil_publication_texte' => 'Щоб зробити нову сторінку сайту вам необхідно створити нову статтю. Також необхідно, аби у вас була хоча б одна рубрика. Якщо на сайті нема жодної рубрики, ви можете створити першу з них, натиснувши на пункт меню „Редагувати->Рубрики” у верхній панелі управління.', + 'c_accueil_texte' => 'Ви тільки но увішли в систему управління вашими сайтом - CMS SPIP.', + 'c_accueil_texte_revenir' => 'На цій сторінці відображаються останні редагування, які були виконані на сайті. В подальшому ви можете повернутися на цю сторінку, натиснувши на кнопку «Головна» в лівому верхньому кутку сторінки.', + 'c_article_redaction' => 'Статус статті - “редагується”', + 'c_article_redaction_redacteur' => 'Ця редакція статті - “в процесі”', + 'c_article_redaction_redacteur_texte' => 'Щоб відправити статтю на затвердження адміністратором(ами) сайту, змініть статус статті з “готується” на “затверджується”.', + 'c_article_redaction_texte' => 'Щоб стаття з’явилась на сайті, ви повинні змінити її статус. У лівій колонці змініть статус статті з „редагується” на „опубликовано”.', + 'c_articles_creer' => 'Як створити статтю?', + 'c_articles_creer_texte' => 'Ви не можете створити статтю на цій сторінці доти, доки ви не створили хоча б одну рубрику сайту. Щоб створити рубрику наведіть мишку на кнопку “Редагувати” і виберіть пункт меню “Рубрики”.', + 'c_job' => 'Список завдань', + 'c_job_texte' => 'На цій сторінці ви бачите список завдань, які виконує CMS SPIP. Деякі завдання виконуються періодично, інші - час від часу, наприклад відправлення розсилки дописувачам.', + 'c_rubrique_publier' => 'Створіть статтю', + 'c_rubrique_publier_texte' => 'Рубрика з’являється на сайті тільки тоді, коли вона містить мінімум одну опубліковану статтю. Якщо на вашому сайті на початку назви рубрики вказаний номер, то це її номер по порядку при виведенні на сторінках сайту. В такому випадку рубрики без номерів також показуватися не будуть. Ви можете користатися цією особливістю, щоб сховати рубрику. +Отже, створіть статтю. Кнопка знаходиться на цій сторінці під описом рубрики.', + 'c_rubriques_creer' => 'Створіть першу рубрику!', + 'c_rubriques_creer_texte' => 'Рубрики - це основа структури сайту; ви можете створювати і зберігати файли в них. Спробуйте створити першу рубрику.', + 'c_sites_creer' => 'Як створити або імпортувати сайт?', + 'c_sites_creer_texte' => 'Ви не можете створити або імпортувати сайт з цієї сторінки доти, доки не існує рубрик на вашому сайті. +Ви можете створити рубрики в меню „Редагувати”, підменю „Рубрики”.', + + // E + 'explication_activer_compagnon' => '„Помічник” виводить спеціальні пояснення на деяких сторінках адміністративної частини сайту, щоб користувачу було легше почати роботу. Чи бажаєте ви увімкнути „Помічника”?', + 'explication_reinitialiser_compagnon' => 'Підказки, які користувач вже бачив, не будуть показуватися надалі. Показати підказки знову?', + + // L + 'label_activer_compagnon' => 'Включити „Помічника”?', + 'label_reinitialiser_compagnon' => 'Показати знову підказки „Помічника”?', + + // O + 'ok' => 'OK', + 'ok_bien' => 'Добре!', + 'ok_jai_compris' => 'Готово!', + 'ok_merci' => 'Дякую', + 'ok_parfait' => 'Чудово!', + + // R + 'reinitialisation' => 'Показати знову підказки', + 'reinitialisation_ok' => 'Виконується...', + 'reinitialiser' => 'Скинути', + 'reinitialiser_moi' => 'Так, лише для мене', + 'reinitialiser_tous' => 'Так, для всіх авторів', + + // T + 'titre_compagnon' => '„Помічник”', + 'titre_page_configurer_compagnon' => 'Налаштування „Помічника”' +); diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon.xml b/www/plugins-dist/compagnon/lang/paquet-compagnon.xml index d29d28bf..cf7e5374 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon.xml +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon.xml @@ -23,15 +23,21 @@ + + + - + + + + @@ -44,4 +50,7 @@ + + + diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_ar.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_ar.php index 7b1633b0..046a0b94 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_ar.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -13,5 +15,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compagnon_nom' => 'الرفيق', 'compagnon_slogan' => 'مرافق الخطوات الأولى في SPIP' # مرافق الخطوات الأولى في SPIP ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_de.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_de.php index ad506610..66440dc3 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_de.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,5 +14,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compagnon_nom' => 'Begleiter', 'compagnon_slogan' => 'Assistent für die ersten Schritte mit SPIP' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_en.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_en.php index 5180dc10..e529b5e3 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_en.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -13,5 +15,3 @@ during their first visit to the backoffice of SPIP.', 'compagnon_nom' => 'Companion', 'compagnon_slogan' => 'First steps wizard with SPIP' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_eo.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_eo.php index 68b9849a..a162ca99 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_eo.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_eo.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=eo // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,5 +14,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compagnon_nom' => 'Kompano', 'compagnon_slogan' => 'Helpanto por SPIP-komencantoj' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_es.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_es.php index 213f5ead..7a58f104 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_es.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,5 +14,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compagnon_nom' => 'Compañero', 'compagnon_slogan' => 'Asistente para dar los primeros pasos con SPIP' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_fa.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_fa.php index 437ed197..5d363427 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_fa.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,5 +14,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compagnon_nom' => 'همراه ', 'compagnon_slogan' => 'همراه اول با اسپيپ نيست' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_fr.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_fr.php index 08b9382f..38a2d585 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_fr.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_fr.php @@ -1,7 +1,9 @@ 'Compagnon', 'compagnon_slogan' => 'Assistant de premiers pas avec SPIP' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_fr_fem.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_fr_fem.php index 7de2b72b..f90d332a 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_fr_fem.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -13,5 +15,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compagnon_nom' => 'Compagnon', 'compagnon_slogan' => 'Assistant de premiers pas avec SPIP' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_fr_tu.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_fr_tu.php new file mode 100644 index 00000000..0d6d8085 --- /dev/null +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_fr_tu.php @@ -0,0 +1,17 @@ + 'Le compagnon offre une aide aux utilisateurs + lors de leur première visite dans l’espace privé de SPIP.', + 'compagnon_nom' => 'Compagnon', + 'compagnon_slogan' => 'Assistant de premiers pas avec SPIP' +); diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_it.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_it.php index 5c656c54..b70bc1b2 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_it.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,5 +14,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compagnon_nom' => 'Assistente', 'compagnon_slogan' => 'Assistente per il primo utilizzo di SPIP' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_lb.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_lb.php index 08cf9c40..030d2d30 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_lb.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_lb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,5 +14,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compagnon_nom' => 'Compagnon', 'compagnon_slogan' => 'Assistent fir déi éischt Schrëtt mat SPIP' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_nl.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_nl.php index af8c49d1..6f64a409 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_nl.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_nl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -13,5 +15,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compagnon_nom' => 'Metgezel', 'compagnon_slogan' => 'Assistent van de eerste steppen met SPIP' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_oc_ni_mis.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_oc_ni_mis.php new file mode 100644 index 00000000..436ec554 --- /dev/null +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_oc_ni_mis.php @@ -0,0 +1,17 @@ + 'Lou coumpàgnou fournisse una adjuda ai utilisaire + per la siéu premièra vìsita en l’espaci privat de SPIP.', + 'compagnon_nom' => 'Coumpàgnou', + 'compagnon_slogan' => 'Assistant de premié pas embé SPIP' +); diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_pt.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_pt.php index 85301787..65fc3a52 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_pt.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,5 +14,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compagnon_nom' => 'Guia', 'compagnon_slogan' => 'Assistente de iniciação a SPIP' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_pt_br.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_pt_br.php index e387666e..93675a4b 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_pt_br.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_pt_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=pt_br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,5 +14,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compagnon_nom' => 'Companheiro', 'compagnon_slogan' => 'Assistente de primeiros passos do SPIP' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_ru.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_ru.php index c660caa4..f9a18020 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_ru.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_ru.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,5 +14,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compagnon_nom' => 'Помощник (Companion)', 'compagnon_slogan' => 'Начальная помощь при работе со SPIP' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_sk.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_sk.php index 43862510..b89297cb 100644 --- a/www/plugins-dist/compagnon/lang/paquet-compagnon_sk.php +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compagnon?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -13,5 +15,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compagnon_nom' => 'Compagnon', 'compagnon_slogan' => 'Sprievodca pri prvých krokoch so SPIPom' ); - -?> diff --git a/www/plugins-dist/compagnon/lang/paquet-compagnon_uk.php b/www/plugins-dist/compagnon/lang/paquet-compagnon_uk.php new file mode 100644 index 00000000..7621f0ab --- /dev/null +++ b/www/plugins-dist/compagnon/lang/paquet-compagnon_uk.php @@ -0,0 +1,16 @@ + 'Плагін виводить довідку про систему управління при першому вході користувача до адміністративної частини.', + 'compagnon_nom' => 'Помічник (Companion)', + 'compagnon_slogan' => 'Допомога на початку роботи зі SPIP' +); diff --git a/www/plugins-dist/compagnon/paquet.xml b/www/plugins-dist/compagnon/paquet.xml index e2db7462..231e2f23 100644 --- a/www/plugins-dist/compagnon/paquet.xml +++ b/www/plugins-dist/compagnon/paquet.xml @@ -1,12 +1,12 @@ +> Compagnon Matthieu Marcillaud @@ -15,12 +15,10 @@ Paul Viluda (Logo, icones) - + - - diff --git a/www/plugins-dist/compagnon/prive/javascript/jquery.twinkle.js b/www/plugins-dist/compagnon/prive/javascript/jquery.twinkle.js index 227cd253..536924c9 100644 --- a/www/plugins-dist/compagnon/prive/javascript/jquery.twinkle.js +++ b/www/plugins-dist/compagnon/prive/javascript/jquery.twinkle.js @@ -1,710 +1,972 @@ -/* - * jQuery.twinkle 0.2 - * http://larsjung.de/twinkle - * - * provided under the terms of the MIT License - */ +/* jQuery.twinkle 0.8.0 - http://larsjung.de/jquery-twinkle/ */ +(function () { +'use strict'; -( function( $ ) { +var $ = jQuery; +var defaults = { + widthRatio: 0.5, + heightRatio: 0.5, + delay: 0, + gap: 0, + effect: 'splash', + effectOptions: undefined, + callback: undefined + }; - var TwinkleEvent = function ( offX, offY, element, posX, posY ) { +var stopDefaults = { + id: undefined, + effectOptions: undefined, + callback: undefined + }; - this.offset = { "left": offX, "top": offY }; - this.element = element; - this.position = { "left": posX, "top": posY }; - }; +function TwinkleEvent(offX, offY, element, posX, posY) { - var Twinkler = function () { + this.offset = {left: offX, top: offY}; + this.element = element; + this.position = {left: posX, top: posY}; +} - this.defaults = { - "widthRatio": 0.5, - "heightRatio": 0.5, - "delay": 0, - "gap": 0, - "effect": "splash", - "effectOptions": undefined - }; - this.effects = {}; +function StopEvent(element) { - this.twinkle = function ( event, options ) { + this.element = element; +} - var settings = $.extend( {}, this.defaults, options ); - var effect = this.effects[settings.effect]; - if ( effect !== undefined ) { - event.element = event.element || "body"; - effect.run( event, settings.effectOptions ); - }; - }; +function Twinkler() { + var effects = {}; + var running = {}; // element => {id: handle} - this.twinkleAtElement = function ( htmlElement, options ) { + function effectStarted(element, id, handle) {} + function effectStopped(element, id) {} - var settings = $.extend( {}, this.defaults, options ); - - var $ele = $( htmlElement ); - - var off = $ele.offset(); - var offX = off.left + $ele.outerWidth( true ) * settings.widthRatio; - var offY = off.top + $ele.outerHeight( true ) * settings.heightRatio; + this.add = function (effect) { - var pos = $ele.position(); - var posX = pos.left + $ele.outerWidth( true ) * settings.widthRatio; - var posY = pos.top + $ele.outerHeight( true ) * settings.heightRatio; + if (!effects[effect.id]) { + effects[effect.id] = effect; + } + return this; + }; - var event = new TwinkleEvent( offX, offY, htmlElement, posX, posY ); + this.remove = function (effect) { - this.twinkle( event, options ); - }; + if (effects[effect]) { + delete effects[effect]; + } else if (effect.id && effects[effect.id]) { + delete effects[effect.id]; + } + return this; + }; - - this.twinkleAtElements = function ( htmlElements, options ) { + this.twinkle = function (event, options) { - var THIS = this; - var settings = $.extend( {}, this.defaults, options ); + var settings = $.extend({}, defaults, options); + var effect = effects[settings.effect]; - var delay = settings.delay; - $( htmlElements ).each( function () { - var htmlElement = this; - setTimeout( function () { - THIS.twinkleAtElement( htmlElement, options ); - }, delay ); - delay += settings.gap; - } ); - }; - }; - + if (effect) { + event.element = event.element || 'body'; + effect.run(event, settings.effectOptions, function () { + if ($.isFunction(settings.callback)) { + settings.callback(); + } + }); + } + return this; + }; - var twinkler = new Twinkler(); - var namespace = "twinkle"; + this.stop = function (event, options) { + var settings = $.extend({}, stopDefaults, options); + var effect = effects[settings.effect]; - var globals = { + if (effect) { + event.element = event.element || 'body'; + effect.stop(event, settings.effectOptions, settings.callback); + } + return this; + }; + + this.twinkleAtElement = function (htmlElement, options) { + + var settings = $.extend({}, defaults, options); + var $htmlElement = $(htmlElement); + var offset = $htmlElement.offset(); + var position = $htmlElement.position(); + var width = $htmlElement.outerWidth(true); + var height = $htmlElement.outerHeight(true); + var offX = offset.left + width * settings.widthRatio; + var offY = offset.top + height * settings.heightRatio; + var posX = position.left + width * settings.widthRatio; + var posY = position.top + height * settings.heightRatio; + + return this.twinkle(new TwinkleEvent(offX, offY, htmlElement, posX, posY), options); + }; + + this.twinkleAtElements = function (htmlElements, options) { + + var self = this; + var settings = $.extend({}, defaults, options); + var delay = settings.delay; + var $htmlElements = $(htmlElements); + var size = $htmlElements.size(); - twinkle: function ( element, left, top, options ) { + $htmlElements.each(function (idx) { + + var htmlElement = this; + var opts = $.extend({}, options); - var event = new TwinkleEvent( 0, 0, element, left, top ); - twinkler.twinkle( event, options ); - return globals; + if (idx !== size - 1) { + delete opts.callback; + } + + setTimeout(function () { + self.twinkleAtElement(htmlElement, opts); + }, delay); + + delay += settings.gap; + }); + return this; + }; + + this.stopAtElement = function (htmlElement, options) { + + var settings = $.extend({}, defaults, options); + var $htmlElement = $(htmlElement); + var offset = $htmlElement.offset(); + var position = $htmlElement.position(); + var width = $htmlElement.outerWidth(true); + var height = $htmlElement.outerHeight(true); + var offX = offset.left + width * settings.widthRatio; + var offY = offset.top + height * settings.heightRatio; + var posX = position.left + width * settings.widthRatio; + var posY = position.top + height * settings.heightRatio; + + return this.twinkle(new TwinkleEvent(offX, offY, htmlElement, posX, posY), options); + }; + + this.stopAtElements = function (htmlElements, options) { + + var self = this; + var settings = $.extend({}, stopDefaults, options); + var delay = settings.delay; + var $htmlElements = $(htmlElements); + var size = $htmlElements.size(); + + $htmlElements.each(function (idx) { + + var htmlElement = this, + opts = $.extend({}, options); + + if (idx !== size - 1) { + delete opts.callback; + } + + self.stopAtElement(htmlElement, opts); + }); + return this; + }; +} + + + +/*! +modplug 1.0 +http://larsjung.de/modplug +MIT License +*/ + +// This function is ment to be copied into your plugin file as a local +// variable. +// +// `modplug` expects a string `namespace` and a configuration object +// `options`. +// +// options = { +// statics: hash of functions, +// methods: hash of functions, +// defaultStatic: String/function, +// defaultMethod: String/function +// } +// +// For more details see . +var modplug = function (namespace, options) { + 'use strict'; + /*global jQuery: true */ + + // Some references to enhance minification. + var slice = [].slice, + $ = jQuery, + extend = $.extend, + isFn = $.isFunction, + + // Save the initial settings. + settings = extend({}, options), + + // Helper function to apply default methods. + applyMethod = function (obj, args, methodName, methods) { + + // If `methodName` is a function apply it to get the actual + // method name. + methodName = isFn(methodName) ? methodName.apply(obj, args) : methodName; + + // If method exists then apply it and return the result ... + if (isFn(methods[methodName])) { + return methods[methodName].apply(obj, args); + } + + // ... otherwise raise an error. + $.error('Method "' + methodName + '" does not exist on jQuery.' + namespace); }, - add: function ( effect ) { - - if ( twinkler.effects[effect.id] === undefined ) { - twinkler.effects[effect.id] = effect; - }; - return globals; - }, + // This function gets exposed as `$.`. + statics = function () { - remove: function ( effect ) { - - if ( twinkler.effects[effect.id] !== undefined ) { - delete twinkler.effects[effect.id]; - }; - return globals; - } - }; + // Try to apply a default method. + return applyMethod(this, slice.call(arguments), settings.defaultStatic, statics); + }, + // This function gets exposed as `$(selector).`. + methods = function (method) { - var methods = { + // If `method` exists then apply it ... + if (isFn(methods[method])) { + return methods[method].apply(this, slice.call(arguments, 1)); + } - twinkle: function ( options ) { - - twinkler.twinkleAtElements( this, options ); - return this; - } - }; + // ... otherwise try to apply a default method. + return applyMethod(this, slice.call(arguments), settings.defaultMethod, methods); + }, + // Adds/overwrites plugin methods. This function gets exposed as + // `$..modplug` to make the plugin extendable. + plug = function (options) { - $[namespace] = globals; - $.fn[namespace] = function( method ) { + if (options) { + extend(statics, options.statics); + extend(methods, options.methods); + } - if ( methods[method] ) { - return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ) ); - } else if ( method === undefined || method instanceof Object ) { - return methods.twinkle.apply( this, arguments ); - } else { - $.error( "Method " + method + " does not exist on jQuery." + namespace ); + // Make sure that `$..modplug` points to this function + // after adding new methods. + statics.modplug = plug; }; + + // Save objects or methods previously registered to the desired namespace. + // They are available via `$..modplug.prev`. + plug.prev = { + statics: $[namespace], + methods: $.fn[namespace] }; + // Init the plugin by adding the specified statics and methods. + plug(options); + + // Register the plugin. + $[namespace] = statics; + $.fn[namespace] = methods; +}; + + +var twinkler = new Twinkler(); +modplug('twinkle', { + statics: { + twinkle: function (element, left, top, options) { + + twinkler.twinkle(new TwinkleEvent(0, 0, element, left, top), options); + return this; + }, + add: function (effect) { + + twinkler.add(effect); + return this; + }, + remove: function (effect) { + + twinkler.remove(effect); + return this; + } + }, + methods: { + twinkle: function (options) { + + twinkler.twinkleAtElements(this, options); + return this; + }, + stop: function (options) { + + twinkler.stopAtElements(this, options); + return this; + } + }, + defaultStatic: 'twinkle', + defaultMethod: 'twinkle' +}); + +}()); + +(function () { +'use strict'; +/* CSS Effects */ + +var $ = jQuery; + +function blockEvents(event) { + + event.stopImmediatePropagation(); + event.preventDefault(); + return false; +} + +function animation(css, event, settings, callback) { + + var $dot; + + function cleanUp() { + + $dot.remove(); + if (callback instanceof Function) { + callback(); + } + } + + function fadeOut() { + + $dot.animate( + { + left: event.position.left - settings.radius, + top: event.position.top - settings.radius, + width: settings.radius * 2, + height: settings.radius * 2, + opacity: 0 + }, + settings.duration * 0.5, + 'linear', + cleanUp + ); + } + + function fadeIn() { + + $dot = $('
    ') + .css(css) + .on('click dblclick mousedown mouseenter mouseover mousemove', blockEvents); + $(event.element).after($dot); + $dot.animate( + { + left: event.position.left - settings.radius * 0.5, + top: event.position.top - settings.radius * 0.5, + width: settings.radius, + height: settings.radius, + opacity: 1 + }, + settings.duration * 0.5, + 'linear', + fadeOut + ); + } + + function stop() {} + + fadeIn(); + + return { + stop: stop + }; +} + +var splashDefaults = { + color: 'rgba(255,0,0,0.5)', + radius: 300, + duration: 1000 + }; + +function SplashEffect() { + + this.id = 'splash-css'; + + this.run = function (event, options, callback) { + + var settings = $.extend({}, splashDefaults, options); + var css = { + position: 'absolute', + zIndex: 1000, + display: 'block', + borderRadius: settings.radius, + backgroundColor: settings.color, + boxShadow: '0 0 30px ' + settings.color, + left: event.position.left, + top: event.position.top, + width: 0, + height: 0, + opacity: 0.4 + }; -} )( jQuery ); + animation(css, event, settings, callback); + }; +} + +var dropsDefaults = { + color: 'rgba(255,0,0,0.5)', + radius: 300, + duration: 1000, + width: 2, + count: 3, + delay: 300 + }; + +function DropsEffect() { + + this.id = 'drops-css'; + + this.run = function (event, options, callback) { + + var settings = $.extend({}, dropsDefaults, options); + var css = { + position: 'absolute', + zIndex: 1000, + display: 'block', + borderRadius: settings.radius, + border: settings.width + 'px solid ' + settings.color, + left: event.position.left, + top: event.position.top, + width: 0, + height: 0, + opacity: 0.4 + }; + + function setTimer(delay, callback) { + setTimeout(function () { + animation(css, event, settings, callback); + }, delay); + } + var delay = 0; + var i; -/* - * jQuery.twinkle 0.2 - * CSS Effects - * http://larsjung.de/twinkle - * - * provided under the terms of the MIT License - */ + for (i = 0; i < settings.count; i += 1) { + setTimer(delay, i === settings.count - 1 ? callback : undefined); + delay += settings.delay; + } + }; +} -( function( $ ) { +function DropEffect() { - - function animation( css, event, settings ) { + var drops = new DropsEffect(); - var $dot = $( "
    " ).css( css ).appendTo( event.element ); + this.id = 'drop-css'; - var fadeIn = function() { - $dot.animate( - { - "left": event.position.left - settings.radius * 0.5, - "top": event.position.top - settings.radius * 0.5, - "width": settings.radius, - "height": settings.radius, - "opacity": 1 - }, - settings.duration * 0.5, - "linear", - fadeOut - ); - }; - var fadeOut = function () { - $dot.animate( - { - "left": event.position.left - settings.radius, - "top": event.position.top - settings.radius, - "width": settings.radius * 2, - "height": settings.radius * 2, - "opacity": 0 - }, - settings.duration * 0.5, - "linear", - cleanUp - ); - }; - var cleanUp = function () { - $dot.remove(); - }; + this.run = function (event, options, callback) { - fadeIn(); - }; + drops.run(event, $.extend(options, { count: 1 }), callback); + }; +} - - var SplashEffect = function () { +$.twinkle.add(new SplashEffect()).add(new DropEffect()).add(new DropsEffect()); - var defaults = { - "color": "rgba(255,0,0,0.5)", - "radius": 300, - "duration": 1000 - }; +}()); - this.id = "splash-css"; - - this.run = function ( event, options ) { - - var settings = $.extend( {}, defaults, options ); - var css = { - "position": "absolute", - "z-index": 1000, - "display": "block", - "border-radius": settings.radius, - "background-color": settings.color, - "box-shadow": "0 0 30px " + settings.color, - "left": event.position.left, - "top": event.position.top, - "width": 0, - "height": 0, - "opacity": 0.4 - }; - - animation( css, event, settings ); - }; - }; +(function () { +'use strict'; +/* Canvas Effects */ +var $ = jQuery; +var Objects = {}; - var DropEffect = function () { +(function () { - var drops = new DropsEffect(); +function Interpolator(values) { - this.id = "drop-css"; + var points; - this.run = function ( event, options ) { - - drops.run( event, $.extend( options, { count: 1 } ) ); - }; - }; + function equiDist(values) { + var dist = 1 / (values.length - 1); + var points = []; + var i; - var DropsEffect = function () { + for (i = 0; i < values.length; i += 1) { + points.push({ x: dist * i , y: values[i] }); + } + return points; + } - var defaults = { - "color": "rgba(255,0,0,0.5)", - "radius": 300, - "duration": 1000, - "width": 2, - "count": 3, - "delay": 300 - }; + function interpolate(p1, p2, x) { - this.id = "drops-css"; - - this.run = function ( event, options ) { - - var settings = $.extend( {}, defaults, options ); - var css = { - "position": "absolute", - "z-index": 1000, - "display": "block", - "border-radius": settings.radius, - "border": "" + settings.width + "px solid " + settings.color, - "left": event.position.left, - "top": event.position.top, - "width": 0, - "height": 0, - "opacity": 0.4 - }; - - var delay = 0; - for ( var i = 0; i < settings.count; i++ ) { - setTimeout( function () { - animation( css, event, settings ); - }, delay ); - delay += settings.delay; - }; - }; - }; + var m = (p2.y - p1.y) / (p2.x - p1.x); + var y = p1.y + m * (x - p1.x); + return y; + } - $.twinkle.add( new SplashEffect() ); - $.twinkle.add( new DropEffect() ); - $.twinkle.add( new DropsEffect() ); + function findSection(x) { + var i, prev, current; -} )( jQuery ); + for (i = 1; i < points.length; i += 1) { + prev = points[i-1]; + current = points[i]; + if (x >= prev.x && x <= current.x) { + return [ prev, current ]; + } + } + return undefined; + } -/* - * jQuery.twinkle 0.2 - * Canvas Effects - * http://larsjung.de/twinkle - * - * provided under the terms of the MIT License - */ + points = equiDist(values); -( function( $ ) { + this.get = function (x) { + var secPts; - var Interpolator = function ( values ) { + x = Math.max(0, Math.min(1, x)); + secPts = findSection(x); + return interpolate(secPts[0], secPts[1], x); + }; +} - var equiDist = function( values ) { +function scaleit(x, scale, offset) { - var dist = 1 / ( values.length - 1 ); - var points = []; - for ( var i = 0; i < values.length; i++ ) { - points.push( { x: dist * i , y: values[i] } ); - }; - return points; - }; + scale = scale || 1; + offset = offset || 0; + x = (x - offset) / scale; + return x >= 0 && x <= 1 ? x : undefined; +} - var interpolate = function ( p1, p2, x ) { - - var m = ( p2.y - p1.y ) / ( p2.x - p1.x ); - var y = p1.y + m * ( x - p1.x ); - return y; - }; - - var findSection = function ( x ) { - - for ( var i = 0; i < points.length; i++ ) { - - if ( i === 0 ) { - continue; - }; - - var prev = points[i-1]; - var current = points[i]; - if ( x >= prev.x && x <= current.x ) { - return [ prev, current ]; - }; - }; - return undefined; - }; +Objects.Interpolator = Interpolator; +Objects.Interpolator.scale = scaleit; - var points = equiDist( values ); - - this.get = function ( x ) { +}()); - x = Math.max( 0, Math.min( 1, x ) ); - var secPts = findSection( x ); - return interpolate( secPts[0], secPts[1], x ); - }; - - }; - Interpolator.scale = function ( x, scale, offset ) { - - scale = scale || 1; - offset = offset || 0; - x = ( x - offset ) / scale; - return x >= 0 && x <= 1 ? x : undefined; - }; +(function () { +var $ = jQuery; - var FrameEvent = function ( ctx, frac, millis ) { +function Path(ctx) { - this.ctx = ctx; - this.frac = frac; - this.millis = millis; - }; + var context = ctx.getContext(); + context.beginPath(); - var CanvasEffect = function ( twinkleEvent, width, height, frame ) { - - this.element = twinkleEvent.element; - this.x = twinkleEvent.position.left; - this.y = twinkleEvent.position.top; - this.width = width; - this.height = height; - this.frame = frame; - this.$canvas = undefined; - this.ctx = undefined; - - this.init = function () { - - var css = { - "position": "absolute", - "z-index": 1000, - "display": "block", - "left": this.x - this.width * 0.5, - "top": this.y - this.height * 0.5, - "width": this.width, - "height": this.height - }; - - this.$canvas = $( "" ).css( css ).appendTo( this.element ); - this.ctx = new Ctx( this.$canvas.get( 0 ).getContext( "2d" ) ); - }; + this.fill = function (fillStyle) { - this.destroy = function () { + context.fillStyle = fillStyle; + context.fill(); + return ctx; + }; - this.$canvas.remove(); - this.$canvas = undefined; - this.ctx = undefined; - }; + this.stroke = function (lineWidth, strokeStyle) { - this.run = function ( duration, fps ) { + context.lineWidth = lineWidth; + context.strokeStyle = strokeStyle; + context.stroke(); + return ctx; + }; - this.init(); + this.draw = function (lineWidth, strokeStyle, fillStyle) { - var THIS = this; - var frameCount = duration / 1000 * fps; - var delta = 1 / frameCount; - for ( var i = 0; i < frameCount + 1; i++ ) { - ( function ( frac ) { - setTimeout( function () { - if ( THIS.ctx ) { - THIS.frame( new FrameEvent( THIS.ctx, frac, duration * frac ) ); - }; - }, duration * frac ); - } )( i * delta ); - }; + this.fill(fillStyle); + this.stroke(lineWidth, strokeStyle); + return ctx; + }; - setTimeout( $.proxy( this.destroy, this ), duration ); - }; + this.circle = function (x, y, radius) { - }; + context.arc(x, y, radius, 0, 2 * Math.PI, false); + return this; + }; +} - - var Path = function ( ctx ) { +function Ctx(context) { - var context = ctx.context; - context.beginPath(); + if (!context || !context.canvas) { + return undefined; + } else if (!(this instanceof Ctx)) { + return new Ctx(context); + } - this.circle = function ( x, y, radius ) { - - context.arc( x, y, radius, 0, 2 * Math.PI, false ); - return this; - }; + var width = $(context.canvas).width(); + var height = $(context.canvas).height(); - this.stroke = function ( strokeWidth, strokeStyle ) { + this.getContext = function () { - context.lineWidth = strokeWidth; - context.strokeStyle = strokeStyle; - context.stroke(); - return ctx; - }; - - this.fill = function ( fillStyle ) { + return context; + }; - context.fillStyle = fillStyle; - context.fill(); - return ctx; - }; - - this.draw = function ( strokeWidth, strokeStyle, fillStyle ) { + this.getWidth = function () { - this.stroke( strokeWidth, strokeStyle ); - this.fill( fillStyle ); - return ctx; - }; - }; + return width; + }; + this.getHeight = function () { - var Ctx = function ( context ) { - - this.context = context; - this.width = $( context.canvas ).width(); - this.height = $( context.canvas ).height(); - - this.clear = function () { + return height; + }; - this.resetTransform(); - this.context.clearRect( 0, 0, this.width, this.height ); - return this; - }; + this.clear = function () { - this.resetTransform = function () { - - this.context.setTransform( 1, 0, 0, 1, 0, 0 ); - return this; - }; - - this.translate = function ( x, y ) { + this.resetTransform(); + context.clearRect(0, 0, width, height); + return this; + }; - this.context.translate( x, y ); - return this; - }; + this.resetTransform = function () { - this.rotate = function ( alpha ) { - - this.context.rotate( Math.PI * alpha / 180 ); - return this; - }; + context.setTransform(1, 0, 0, 1, 0, 0); + return this; + }; - this.opacity = function ( opacity ) { - - this.context.globalAlpha = opacity; - return this; - }; + this.translate = function (x, y) { - this.path = function () { - - return new Path( this ); - }; - }; + context.translate(x, y); + return this; + }; + this.rotate = function (alpha) { + context.rotate(Math.PI * alpha / 180); + return this; + }; - var SplashEffect = function () { + this.opacity = function (opacity) { - var defaults = { - "color": "rgba(255,0,0,0.5)", - "radius": 300, - "duration": 1000 - }; + context.globalAlpha = opacity; + return this; + }; - this.id = "splash"; - - this.run = function ( twinkleEvent, options ) { - - var settings = $.extend( {}, defaults, options ); - var size = settings.radius * 2; - var opacityIpl = new Interpolator( [ 0.4, 1, 0 ] ); - var radiusIpl = new Interpolator( [ 0, settings.radius ] ); - var frame = function ( frameEvent ) { - - var radius = radiusIpl.get( frameEvent.frac ); - var opacity = opacityIpl.get( frameEvent.frac ); - - this.ctx - .clear() - .opacity( opacity ) - .path() - .circle( this.width * 0.5, this.height * 0.5, radius ) - .fill( settings.color ); - }; - - new CanvasEffect( twinkleEvent, size, size, frame ).run( settings.duration, 25 ); - }; - }; + this.path = function () { - $.twinkle.add( new SplashEffect() ); + return new Path(this); + }; +} +Objects.Ctx = Ctx; +}()); - var DropEffect = function () { +(function () { - var defaults = { - "color": "rgba(255,0,0,0.5)", - "radius": 300, - "duration": 1000, - "width": 2 - }; +function CanvasEffect(twinkleEvent, width, height, frame, callback) { - this.id = "drop"; - - this.run = function ( twinkleEvent, options ) { - - var settings = $.extend( {}, defaults, options ); - var size = settings.radius * 2; - var opacityIpl = new Interpolator( [ 0.4, 1, 0 ] ); - var radiusIpl = new Interpolator( [ 0, settings.radius ] ); - var frame = function ( frameEvent ) { - - var radius = radiusIpl.get( frameEvent.frac ); - var opacity = opacityIpl.get( frameEvent.frac ); - - this.ctx - .clear() - .opacity( opacity ) - .path() - .circle( this.width * 0.5, this.height * 0.5, radius ) - .stroke( settings.width, settings.color ); - }; - - new CanvasEffect( twinkleEvent, size, size, frame ).run( settings.duration, 25 ); - }; - }; + if (!(this instanceof Objects.CanvasEffect)) { + return new Objects.CanvasEffect(twinkleEvent, width, height, frame, callback); + } - $.twinkle.add( new DropEffect() ); + var element = twinkleEvent.element; + var x = twinkleEvent.position.left; + var y = twinkleEvent.position.top; + var css = { + position: 'absolute', + zIndex: 1000, + display: 'block', + left: x - width * 0.5, + top: y - height * 0.5, + width: width, + height: height + }; + this.run = function (duration, fps) { + var $canvas, ctx, i; + var frameCount = duration / 1000 * fps; + var delta = 1 / frameCount; - var DropsEffect = function () { + function setFrameTimer(fraction) { - var defaults = { - "color": "rgba(255,0,0,0.5)", - "radius": 300, - "duration": 1000, - "width": 2, - "count": 3, - "delay": 100 - }; + setTimeout(function () { - this.id = "drops"; - - this.run = function ( twinkleEvent, options ) { - - var settings = $.extend( {}, defaults, options ); - var size = settings.radius * 2; - var opacityIpl = new Interpolator( [ 0.4, 1, 0 ] ); - var radiusIpl = new Interpolator( [ 0, settings.radius ] ); - var scale = ( settings.duration - ( settings.count - 1 ) * settings.delay ) / settings.duration; - var offset = settings.delay / settings.duration; - - var frame = function ( frameEvent ) { - - this.ctx.clear(); - for ( var i = 0; i < settings.count; i++ ) { - var frac = Interpolator.scale( frameEvent.frac, scale, offset * i ); - - if ( frac !== undefined ) { - var radius = radiusIpl.get( frac ); - var opacity = opacityIpl.get( frac ); - this.ctx - .opacity( opacity ) - .path() - .circle( this.width * 0.5, this.height * 0.5, radius ) - .stroke( settings.width, settings.color ); - }; - }; - }; - - new CanvasEffect( twinkleEvent, size, size, frame ).run( settings.duration, 25 ); - }; - }; + if (ctx) { + frame({ + ctx: ctx, + frac: fraction, + millis: duration * fraction + }); + } + }, duration * fraction); + } - $.twinkle.add( new DropsEffect() ); + function cleanUp() { + $canvas.remove(); + $canvas = undefined; + ctx = undefined; + if (callback instanceof Function) { + callback(); + } + } + function blockEvents(event) { - var PulseEffect = function () { + event.stopImmediatePropagation(); + event.preventDefault(); + return false; + } - var defaults = { - "color": "rgba(255,0,0,0.5)", - "radius": 100, - "duration": 3000 - }; + $canvas = jQuery('').attr('width', width).attr('height', height).css(css); + jQuery(element).after($canvas); + $canvas.on('click dblclick mousedown mouseenter mouseover mousemove', blockEvents); + ctx = new Objects.Ctx($canvas.get(0).getContext('2d')); - this.id = "pulse"; - - this.run = function ( twinkleEvent, options ) { - - var settings = $.extend( {}, defaults, options ); - var size = settings.radius * 2; - var opacityIpl = new Interpolator( [ 0, 1, 0.6, 1, 0.6, 1, 0 ] ); - var radiusIpl = new Interpolator( [ 0, settings.radius, settings.radius * 0.6, settings.radius, settings.radius * 0.6, settings.radius, 0 ] ); - var frame = function ( frameEvent ) { - - var x = this.width * 0.5; - var y = this.height * 0.5; - var radius = radiusIpl.get( frameEvent.frac ); - var opacity = opacityIpl.get( frameEvent.frac ); - - this.ctx - .clear() - .opacity( opacity ) - .path() - .circle( this.width * 0.5, this.height * 0.5, radius ) - .fill( settings.color ); - }; - - new CanvasEffect( twinkleEvent, size, size, frame ).run( settings.duration, 25 ); - }; - }; + for (i = 0; i <= frameCount; i += 1) { + setFrameTimer(i * delta); + } - $.twinkle.add( new PulseEffect() ); + setTimeout(cleanUp, duration); + }; +} +Objects.CanvasEffect = CanvasEffect; +}()); - var OrbitEffect = function () { +(function () { - var defaults = { - "color": "rgba(255,0,0,0.5)", - "radius": 100, - "duration": 3000, - "satellites": 10, - "satellitesRadius": 10, - "circulations": 1.5 - }; +var $ = jQuery; - this.id = "orbit"; - - this.run = function ( twinkleEvent, options ) { - - var settings = $.extend( {}, defaults, options ); - var size = settings.radius * 2; - var opacityIpl = new Interpolator( [ 0.4, 1, 1, 0.4 ] ); - var r = settings.radius - settings.satellitesRadius; - var radiusIpl = new Interpolator( [ 0, r, r, 0 ] ); - var frame = function ( frameEvent ) { - - var radius = radiusIpl.get( frameEvent.frac ); - var opacity = opacityIpl.get( frameEvent.frac ); - var bog = Math.PI * 2 * settings.circulations * frameEvent.frac; - - this.ctx - .clear() - .opacity( opacity ) - .translate( this.width * 0.5, this.height * 0.5 ); - - var path = this.ctx.path(); - for ( var i = 0; i < settings.satellites; i++ ) { - - bog += Math.PI * 2 / settings.satellites; - var x = Math.cos( bog ) * radius; - var y = Math.sin( bog ) * radius; - path.circle( x, y, settings.satellitesRadius ); - }; - path.fill( settings.color ); - }; - - new CanvasEffect( twinkleEvent, size, size, frame ).run( settings.duration, 25 ); - }; - }; +var defaults = { + color: 'rgba(255,0,0,0.5)', + radius: 300, + duration: 1000 + }; + +function SplashEffect() { + + this.id = 'splash'; + + this.run = function (twinkleEvent, options, callback) { + + var settings = $.extend({}, defaults, options); + var size = settings.radius * 2; + var opacityIpl = new Objects.Interpolator([ 0.4, 1, 0 ]); + var radiusIpl = new Objects.Interpolator([ 0, settings.radius ]); + + function frame(frameEvent) { + + var radius = radiusIpl.get(frameEvent.frac); + var opacity = opacityIpl.get(frameEvent.frac); + var ctx = frameEvent.ctx; + + ctx + .clear() + .opacity(opacity) + .path() + .circle(ctx.getWidth() * 0.5, ctx.getHeight() * 0.5, radius) + .fill(settings.color); + } + + new Objects.CanvasEffect(twinkleEvent, size, size, frame, callback).run(settings.duration, 25); + }; +} + +$.twinkle.add(new SplashEffect()); + +}()); + +(function () { + +var $ = jQuery; + +var defaults = { + color: 'rgba(255,0,0,0.5)', + radius: 300, + duration: 1000, + width: 2 + }; + +function DropEffect() { + + this.id = 'drop'; + + this.run = function (twinkleEvent, options, callback) { + + var settings = $.extend({}, defaults, options); + var size = settings.radius * 2; + var opacityIpl = new Objects.Interpolator([ 0.4, 1, 0 ]); + var radiusIpl = new Objects.Interpolator([ 0, settings.radius ]); + + function frame(frameEvent) { + + var radius = radiusIpl.get(frameEvent.frac); + var opacity = opacityIpl.get(frameEvent.frac); + var ctx = frameEvent.ctx; + + ctx + .clear() + .opacity(opacity) + .path() + .circle(ctx.getWidth() * 0.5, ctx.getHeight() * 0.5, radius) + .stroke(settings.width, settings.color); + } + + new Objects.CanvasEffect(twinkleEvent, size, size, frame, callback).run(settings.duration, 25); + }; +} + +$.twinkle.add(new DropEffect()); + +}()); + +(function () { + +var $ = jQuery; + +var defaults = { + color: 'rgba(255,0,0,0.5)', + radius: 300, + duration: 1000, + width: 2, + count: 3, + delay: 100 + }; + +function DropsEffect() { + + this.id = 'drops'; + + this.run = function (twinkleEvent, options, callback) { + + var settings = $.extend({}, defaults, options); + var size = settings.radius * 2; + var opacityIpl = new Objects.Interpolator([ 0.4, 1, 0 ]); + var radiusIpl = new Objects.Interpolator([ 0, settings.radius ]); + var scale = (settings.duration - (settings.count - 1) * settings.delay) / settings.duration; + var offset = settings.delay / settings.duration; + + function frame(frameEvent) { + + var i, frac, radius, opacity; + var ctx = frameEvent.ctx; + var width = ctx.getWidth(); + var height = ctx.getHeight(); + + ctx.clear(); + for (i = 0; i < settings.count; i += 1) { + frac = Objects.Interpolator.scale(frameEvent.frac, scale, offset * i); + + if (frac !== undefined) { + radius = radiusIpl.get(frac); + opacity = opacityIpl.get(frac); + ctx + .opacity(opacity) + .path() + .circle(width * 0.5, height * 0.5, radius) + .stroke(settings.width, settings.color); + } + } + } + + new Objects.CanvasEffect(twinkleEvent, size, size, frame, callback).run(settings.duration, 25); + }; +} + +$.twinkle.add(new DropsEffect()); + +}()); + +(function () { + +var $ = jQuery; + +var defaults = { + color: 'rgba(255,0,0,0.5)', + radius: 100, + duration: 3000 + }; + +function PulseEffect() { + + this.id = 'pulse'; + + this.run = function (twinkleEvent, options, callback) { + + var settings = $.extend({}, defaults, options); + var size = settings.radius * 2; + var opacityIpl = new Objects.Interpolator([ 0, 1, 0.6, 1, 0.6, 1, 0 ]); + var radiusIpl = new Objects.Interpolator([ 0, settings.radius, settings.radius * 0.6, settings.radius, settings.radius * 0.6, settings.radius, 0 ]); + + function frame(frameEvent) { + + var radius = radiusIpl.get(frameEvent.frac), + opacity = opacityIpl.get(frameEvent.frac), + ctx = frameEvent.ctx; + + ctx + .clear() + .opacity(opacity) + .path() + .circle(ctx.getWidth() * 0.5, ctx.getHeight() * 0.5, radius) + .fill(settings.color); + } + + new Objects.CanvasEffect(twinkleEvent, size, size, frame, callback).run(settings.duration, 25); + }; +} + +$.twinkle.add(new PulseEffect()); + +}()); + +(function () { + +var $ = jQuery; + +var defaults = { + color: 'rgba(255,0,0,0.5)', + radius: 100, + duration: 3000, + satellites: 10, + satellitesRadius: 10, + circulations: 1.5 + }; + +function OrbitEffect() { + + this.id = 'orbit'; + + this.run = function (twinkleEvent, options, callback) { + + var settings = $.extend({}, defaults, options); + var size = settings.radius * 2; + var opacityIpl = new Objects.Interpolator([ 0.4, 1, 1, 0.4 ]); + var r = settings.radius - settings.satellitesRadius; + var radiusIpl = new Objects.Interpolator([ 0, r, r, 0 ]); + + function frame(frameEvent) { - $.twinkle.add( new OrbitEffect() ); + var radius = radiusIpl.get(frameEvent.frac); + var opacity = opacityIpl.get(frameEvent.frac); + var bog = Math.PI * 2 * settings.circulations * frameEvent.frac; + var ctx = frameEvent.ctx; + var path, i, x, y; + ctx + .clear() + .opacity(opacity) + .translate(ctx.getWidth() * 0.5, ctx.getHeight() * 0.5); + path = ctx.path(); + for (i = 0; i < settings.satellites; i += 1) { + bog += Math.PI * 2 / settings.satellites; + x = Math.cos(bog) * radius; + y = Math.sin(bog) * radius; + ctx.getContext().moveTo(x, y); + path.circle(x, y, settings.satellitesRadius); + } + path.fill(settings.color); + } -} )( jQuery ); + new Objects.CanvasEffect(twinkleEvent, size, size, frame, callback).run(settings.duration, 25); + }; +} +$.twinkle.add(new OrbitEffect()); +}()); +}()); diff --git a/www/plugins-dist/compagnon/prive/style_prive_plugin_compagnon.html b/www/plugins-dist/compagnon/prive/style_prive_plugin_compagnon.html index 43a6e8ed..90ddd65d 100644 --- a/www/plugins-dist/compagnon/prive/style_prive_plugin_compagnon.html +++ b/www/plugins-dist/compagnon/prive/style_prive_plugin_compagnon.html @@ -19,6 +19,7 @@ #SET{foncee,#ENV{couleur_foncee,3874b0}} #SET{left,#ENV{ltr}|choixsiegal{left,left,right}} #SET{right,#ENV{ltr}|choixsiegal{left,right,left}} +#SET{abs,#ENV{ltr}|choixsiegal{left,-10,483}} /* ----- compagnon (extends box) ----- */ .compagnon {position:relative;} @@ -26,11 +27,14 @@ border:2px solid ##GET{foncee}; border-radius:10px; color:#333; - background:#fcfcfc url([(#CHEMIN_IMAGE{compagnon_gris-64.png}|image_sepia{#GET{foncee}|couleur_eclaircir}|extraire_attribut{src})]) -10px -10px no-repeat; + background-color:#fcfcfc; + background-image:url([(#CHEMIN_IMAGE{compagnon_gris-64.png}|image_sepia{#GET{foncee}|couleur_eclaircir}|extraire_attribut{src})]); + background-position: #GET{abs}px -10px; + background-repeat: no-repeat; } -.compagnon .inner .hd {padding-left:60px;} -.compagnon .inner .bd {padding-left:60px;} +.compagnon .inner .hd {padding-#GET{left}:60px;} +.compagnon .inner .bd {padding-#GET{left}:60px;} .compagnon b{} .compagnon .act { background-color: transparent; @@ -42,21 +46,23 @@ .compagnon button.submit { font-size:100%; border:2px solid ##GET{foncee}; - border-width:2px 0 0 2px; - border-radius:9px 0 9px 0; - box-shadow:0 0 2px ##GET{foncee}; + border-top-width:2px; + border-#GET{left}-width:2px; + border-#GET{right}-width:0px; + border-bottom-width:0px; + border-top-#GET{left}-radius:9px; + border-top-#GET{right}-radius:0; + border-bottom-#GET{right}-radius:9px; + border-bottom-#GET{left}-radius:0; background: [#(#GET{foncee}|couleur_eclaircir|couleur_eclaircir)]; padding:3px 4px 4px 3px; cursor:pointer; margin:0; color: #444; } -.compagnon button.submit:hover { - box-shadow:none; - background:#fcfcfc; -} + .compagnon .target { - position:absolute; bottom:5px; left:5px; + position:absolute; bottom:5px; #GET{left}:5px; display:block; width:32px; height:32px; background:url([(#CHEMIN_IMAGE{target-32.png}|image_sepia{#GET{foncee}|couleur_eclaircir}|extraire_attribut{src})]); cursor:crosshair; diff --git a/www/plugins-dist/compresseur/compresseur_fonctions.php b/www/plugins-dist/compresseur/compresseur_fonctions.php index f8af5139..c975d737 100644 --- a/www/plugins-dist/compresseur/compresseur_fonctions.php +++ b/www/plugins-dist/compresseur/compresseur_fonctions.php @@ -12,14 +12,17 @@ /** * Fonctions et filtres du compresseur - * + * * @package SPIP\Compresseur\Fonctions */ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} +$GLOBALS['spip_matrice']['compresseur_embarquer_images_css'] = 'inc/compresseur_embarquer.php'; /** * Minifier un fichier JS ou CSS - * + * * Si la source est un chemin, on retourne un chemin avec le contenu minifié * dans _DIR_VAR/cache_$format/ * Si c'est un flux on le renvoit compacté @@ -28,47 +31,55 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * @param string $source * Contenu à minifier ou chemin vers un fichier dont on veut minifier le contenu * @param string $format - * Format de la source (js|css). + * Format de la source (js|css). * @return string * - Contenu minifié (si la source est un contenu) * - Chemin vers un fichier ayant le contenu minifié (si source est un fichier) */ function minifier($source, $format = null) { - if (!$format AND preg_match(',\.(js|css)$,', $source, $r)) + if (!$format and preg_match(',\.(js|css)$,', $source, $r)) { $format = $r[1]; + } include_spip('inc/compresseur_minifier'); - if (!function_exists($minifier = 'minifier_'.$format)) + if (!function_exists($minifier = 'minifier_' . $format)) { return $source; + } // Si on n'importe pas, est-ce un fichier ? if (!preg_match(',[\s{}],', $source) - AND preg_match(',\.'.$format.'$,i', $source, $r) - AND file_exists($source)) { + and preg_match(',\.' . $format . '$,i', $source, $r) + and file_exists($source) + ) { // si c'est une css, il faut reecrire les url en absolu - if ($format=='css') - $source = url_absolue_css($source); + if ($format == 'css') { + $source = url_absolue_css($source); + } - $f = basename($source,'.'.$format); - $f = sous_repertoire (_DIR_VAR, 'cache-'.$format) - . preg_replace(",(.*?)(_rtl|_ltr)?$,","\\1-minify-" - . substr(md5("$source-minify"), 0,4) . "\\2", $f, 1) - . '.' . $format; + $f = basename($source, '.' . $format); + $f = sous_repertoire(_DIR_VAR, 'cache-' . $format) + . preg_replace(',(.*?)(_rtl|_ltr)?$,', "\\1-minify-" + . substr(md5("$source-minify"), 0, 4) . "\\2", $f, 1) + . '.' . $format; if ((@filemtime($f) > @filemtime($source)) - AND (!defined('_VAR_MODE') OR _VAR_MODE != 'recalcul')) + and (!defined('_VAR_MODE') or _VAR_MODE != 'recalcul') + ) { return $f; + } - if (!lire_fichier($source, $contenu)) + if (!lire_fichier($source, $contenu)) { return $source; + } // traiter le contenu $contenu = $minifier($contenu); // ecrire le fichier destination, en cas d'echec renvoyer la source - if (ecrire_fichier($f, $contenu, true)) + if (ecrire_fichier($f, $contenu, true)) { return $f; - else + } else { return $source; + } } // Sinon simple minification de contenu @@ -79,24 +90,24 @@ function minifier($source, $format = null) { * Synonyme historique de minifier, pour compatibilite * * @deprecated Utiliser minifier() - * + * * @param string $source * @param string $format * @return string */ -function compacte($source, $format = null){ +function compacte($source, $format = null) { return minifier($source, $format); } /** * Compacte les éléments CSS et JS d'un HTML - * + * * Cette fonction vérifie les réglages du site et traite le compactage * des css et/ou js d'un - * + * * Un fichier .gz est crée pour chaque, qui peut etre utilisé par apache * et lui éviter de recompresser à chaque hit, avec les directives suivantes : - * + * * * mod_gzip_on Yes * mod_gzip_can_negotiate Yes @@ -106,21 +117,24 @@ function compacte($source, $format = null){ * * * @see compacte_head_files() - * + * * @param string $flux * Partie de contenu du head HTML * @return string * Partie de contenu du head HTML */ -function compacte_head($flux){ +function compacte_head($flux) { include_spip('inc/compresseur'); - if (!defined('_INTERDIRE_COMPACTE_HEAD')){ + if (!defined('_INTERDIRE_COMPACTE_HEAD')) { // dans l'espace prive on compacte toujours, c'est concu pour - if ((!test_espace_prive() AND $GLOBALS['meta']['auto_compress_css'] == 'oui') OR (test_espace_prive() AND !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE'))) - $flux = compacte_head_files($flux,'css'); - if ((!test_espace_prive() AND $GLOBALS['meta']['auto_compress_js'] == 'oui') OR (test_espace_prive() AND !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE'))) - $flux = compacte_head_files($flux,'js'); + if ((!test_espace_prive() and $GLOBALS['meta']['auto_compress_css'] == 'oui') or (test_espace_prive() and !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE'))) { + $flux = compacte_head_files($flux, 'css'); + } + if ((!test_espace_prive() and $GLOBALS['meta']['auto_compress_js'] == 'oui') or (test_espace_prive() and !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE'))) { + $flux = compacte_head_files($flux, 'js'); + } } + return $flux; } @@ -128,11 +142,11 @@ function compacte_head($flux){ * Embarquer sous forme URI Scheme un fichier * * Une URI Scheme est de la forme data:xxx/yyy;base64,.... - * + * * Experimental * - * @filtre embarque_fichier - * + * @filtre + * * @staticvar array $mime * Couples (extension de fichier => type myme) * @param string $src @@ -145,28 +159,32 @@ function compacte_head($flux){ * URI Scheme du fichier si la compression est faite, * URL du fichier sinon (la source) */ -function filtre_embarque_fichier ($src, $base="", $maxsize = 4096) { +function filtre_embarque_fichier($src, $base = '', $maxsize = 4096) { static $mime = array(); - $extension = substr(strrchr($src,'.'),1); + $extension = substr(strrchr($src, '.'), 1); $filename = $base . $src; if (!file_exists($filename) - OR filesize($filename)>$maxsize - OR !lire_fichier($filename, $contenu)) + or filesize($filename) > $maxsize + or !lire_fichier($filename, $contenu) + ) { return $src; + } - if (!isset($mime[$extension])){ - if (isset($GLOBALS['tables_mime']) AND isset($GLOBALS['tables_mime'][$extension])) + if (!isset($mime[$extension])) { + if (isset($GLOBALS['tables_mime']) and isset($GLOBALS['tables_mime'][$extension])) { $mime[$extension] = $GLOBALS['tables_mime'][$extension]; + } } - if (!isset($mime[$extension])){ - if (!function_exists("sql_getfetsel")) - include_spip("base/abstract_sql"); - $mime[$extension] = sql_getfetsel('mime_type','spip_types_documents','extension='.sql_quote($extension)); + if (!isset($mime[$extension])) { + if (!function_exists('sql_getfetsel')) { + include_spip('base/abstract_sql'); + } + $mime[$extension] = sql_getfetsel('mime_type', 'spip_types_documents', 'extension=' . sql_quote($extension)); } $base64 = base64_encode($contenu); - $encoded = 'data:'.$mime[$extension].';base64,'.$base64; + $encoded = 'data:' . $mime[$extension] . ';base64,' . $base64; return $encoded; } @@ -184,11 +202,11 @@ function filtre_embarque_fichier ($src, $base="", $maxsize = 4096) { * @return string * Code HTML de l'image, avec la source en URI Scheme si cela a été possible. */ -function filtre_embarque_src ($img, $maxsize = 4096){ - $src = extraire_attribut($img,'src'); - if ($src2=filtre_embarque_fichier($src, "", $maxsize) AND $src2!= $src) { +function filtre_embarque_src($img, $maxsize = 4096) { + $src = extraire_attribut($img, 'src'); + if ($src2 = filtre_embarque_fichier($src, '', $maxsize) and $src2 != $src) { $img = inserer_attribut($img, 'src', $src2); } + return $img; } -?> diff --git a/www/plugins-dist/compresseur/compresseur_ieconfig.php b/www/plugins-dist/compresseur/compresseur_ieconfig.php index d4ec0a15..98c0f288 100644 --- a/www/plugins-dist/compresseur/compresseur_ieconfig.php +++ b/www/plugins-dist/compresseur/compresseur_ieconfig.php @@ -1,28 +1,28 @@ - + + if (($p = strpos($url_statique, '/', 2)) !== false) { + $url_statique = substr($url_statique, 0, $p); + $link = ""; + if ($p = stripos($flux, '')) { + $flux = substr_replace($flux, "\n" . $link, $p+8, 0); + } + } + } + + return $flux; } diff --git a/www/plugins-dist/compresseur/compresseur_pipeline.php b/www/plugins-dist/compresseur/compresseur_pipeline.php index d3e3d73f..f1f0a05c 100644 --- a/www/plugins-dist/compresseur/compresseur_pipeline.php +++ b/www/plugins-dist/compresseur/compresseur_pipeline.php @@ -12,24 +12,27 @@ /** * Fonctions et filtres du compresseur - * + * * @package SPIP\Compresseur\Pipelines */ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Compression des JS et CSS de l'espace privé - * + * * @pipeline header_prive * @see compacte_head() - * + * * @param string $flux * Partie de contenu du head HTML de l'espace privé * @return string * Partie de contenu du head HTML de l'espace privé */ -function compresseur_header_prive($flux){ +function compresseur_header_prive($flux) { include_spip('compresseur_fonctions'); + return compacte_head($flux); } @@ -39,20 +42,21 @@ function compresseur_header_prive($flux){ * * Injecter l'appel au compresseur sous la forme de filtre * pour intervenir sur l'ensemble du head du squelette public - * + * * @pipeline insert_head * @see compacte_head() - * + * * @param string $flux * Partie de contenu du head HTML de l'espace public * @return string * Partie de contenu du head HTML de l'espace public */ -function compresseur_insert_head($flux){ +function compresseur_insert_head($flux) { $flux .= '<' - .'?php header("X-Spip-Filtre: ' - .'compacte_head' - .'"); ?'.'>'; + . '?php header("X-Spip-Filtre: ' + . 'compacte_head' + . '"); ?' . '>'; + return $flux; } @@ -60,20 +64,24 @@ function compresseur_insert_head($flux){ * Afficher le formulaire de configuration sur la page de configurations avancées * * @pipeline affiche_milieu - * - * @param string $flux Données du pipeline + * + * @param string $flux Données du pipeline * @return string Données du pipeline */ -function compresseur_affiche_milieu($flux){ - - if ($flux['args']['exec']=='configurer_avancees'){ - // Compression http et compactages CSS ou JS - $flux['data'] .= recuperer_fond('prive/squelettes/inclure/configurer',array('configurer'=>'configurer_compresseur')); +function compresseur_affiche_milieu($flux) { + + if ($flux['args']['exec'] == 'configurer_avancees') { + // Compression http et compactages CSS ou JS + $flux['data'] .= recuperer_fond( + 'prive/squelettes/inclure/configurer', + array('configurer' => 'configurer_compresseur') + ); } return $flux; } + /** * Lister les metas du compresseur et leurs valeurs par défaut * @@ -83,32 +91,10 @@ function compresseur_affiche_milieu($flux){ * @return array * Couples nom de la méta => valeur par défaut */ -function compresseur_configurer_liste_metas($metas){ - $metas['auto_compress_js']='non'; - $metas['auto_compress_closure']='non'; - $metas['auto_compress_css']='non'; - return $metas; -} +function compresseur_configurer_liste_metas($metas) { + $metas['auto_compress_js'] = 'non'; + $metas['auto_compress_css'] = 'non'; + $metas['url_statique_ressources'] = ''; -/** - * Déclarer les filtres sur les squelettes mis en cache - * - * Ici minification CSS si la meta la demande - * - * @pipeline declarer_filtres_squelettes - * @param array $flux Données du pipeline - * @return array Données du pipeline - */ -function compresseur_declarer_filtres_squelettes($flux){ - if (!test_espace_prive() - AND !defined('_INTERDIRE_COMPRESSION_HTML') - AND $GLOBALS['meta']['auto_compress_http']=='oui' - AND (!isset($flux['args']['entetes']['Content-Type']) OR strncmp($flux['args']['entetes']['Content-Type'],'text/html',9)==0) - ){ - include_spip("inc/compresseur_minifier"); - $flux['data'][] = 'minifier_html'; - } - return $flux; + return $metas; } - -?> diff --git a/www/plugins-dist/compresseur/formulaires/configurer_compresseur.html b/www/plugins-dist/compresseur/formulaires/configurer_compresseur.html index db0f5c2d..eac3e6a6 100644 --- a/www/plugins-dist/compresseur/formulaires/configurer_compresseur.html +++ b/www/plugins-dist/compresseur/formulaires/configurer_compresseur.html @@ -5,56 +5,45 @@ [

    (#ENV*{message_erreur})

    ]
    - [(#ACTION_FORMULAIRE{#ENV{action}})] -
      - [(#ENV{_editer_auto_compress_http}|oui) -
    • -
      - <:compresseur:titre_compresser_flux_http:> -

      <:compresseur:texte_compresseur_page:>

      -
        -
      • - - [(#ENV**{erreurs}|table_valeur{auto_compress_http})] -
        - - -
        -
      • -
      -
      -
    • - ] -
    • + #ACTION_FORMULAIRE +
      + #SET{name,url_statique_ressources}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} +
      + [ + (#GET{erreurs}) + ] +

      <:compresseur:explication_url_statique_ressources:>

      + +
      +
      <:compresseur:titre_compacter_script_css:>

      <:compresseur:texte_compacter_script_css:>

      -
        -
      • +
        +
        [(#ENV**{erreurs}|table_valeur{auto_compress_js})]
        -
        - - -
        -
      • -
      • +
      +
      [(#ENV**{erreurs}|table_valeur{auto_compress_css})]
      -
    • -
    +
    +

    <:compresseur:texte_compacter_avertissement:>

    - - +
    +

    diff --git a/www/plugins-dist/compresseur/formulaires/configurer_compresseur.php b/www/plugins-dist/compresseur/formulaires/configurer_compresseur.php index 9e76cf53..e4ca9cfb 100644 --- a/www/plugins-dist/compresseur/formulaires/configurer_compresseur.php +++ b/www/plugins-dist/compresseur/formulaires/configurer_compresseur.php @@ -14,27 +14,27 @@ * Gestion du formulaire de configuration du compresseur * * @package SPIP\Compresseur\Formulaires -**/ -if (!defined("_ECRIRE_INC_VERSION")) return; + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Chargement du formulaire de configuration du compresseur * * @return array * Environnement du formulaire -**/ -function formulaires_configurer_compresseur_charger_dist(){ + **/ +function formulaires_configurer_compresseur_charger_dist() { $valeurs = array(); - $valeurs['_editer_auto_compress_http'] = function_exists('ob_gzhandler'); - $valeurs['auto_compress_http'] = $GLOBALS['meta']['auto_compress_http']; $valeurs['auto_compress_js'] = $GLOBALS['meta']['auto_compress_js']; $valeurs['auto_compress_css'] = $GLOBALS['meta']['auto_compress_css']; - $valeurs['auto_compress_closure'] = $GLOBALS['meta']['auto_compress_closure']; - + $valeurs['url_statique_ressources'] = $GLOBALS['meta']['url_statique_ressources']; + return $valeurs; - + } /** @@ -42,15 +42,28 @@ function formulaires_configurer_compresseur_charger_dist(){ * * @return array * Tableau des erreurs -**/ -function formulaires_configurer_compresseur_verifier_dist(){ + **/ +function formulaires_configurer_compresseur_verifier_dist() { $erreurs = array(); - + // les checkbox - foreach(array('auto_compress_http','auto_compress_js','auto_compress_css', 'auto_compress_closure') as $champ) - if (_request($champ)!='oui') - set_request($champ,'non'); - + foreach (array('auto_compress_js', 'auto_compress_css') as $champ) { + if (_request($champ) != 'oui') { + set_request($champ, 'non'); + } + } + + if ($url = _request('url_statique_ressources')) { + $url = preg_replace(',/?\s*$,', '', $url); + if (!tester_url_absolue($url)) { + $protocole = explode('://', $GLOBALS['meta']['adresse_site']); + $protocole = reset($protocole); + $url = $protocole . "://$url"; + } + set_request('url_statique_ressources', $url); + } + + return $erreurs; } @@ -59,12 +72,10 @@ function formulaires_configurer_compresseur_verifier_dist(){ * * @return array * Retours du traitement -**/ -function formulaires_configurer_compresseur_traiter_dist(){ + **/ +function formulaires_configurer_compresseur_traiter_dist() { include_spip('inc/config'); appliquer_modifs_config(); - - return array('message_ok'=>_T('config_info_enregistree')); -} -?> + return array('message_ok' => _T('config_info_enregistree')); +} diff --git a/www/plugins-dist/compresseur/images/compresseur-16.png b/www/plugins-dist/compresseur/images/compresseur-16.png index dfc2220926f37e1cde871901972893fc369a2059..f10eb888bfbfaa210bf09849a2bd604045660063 100644 GIT binary patch delta 633 zcmV-<0*3v#29gDkB!5{+L_t(|0fmwSj9dX2gkS8&P92ic4ot;{AvB z_)+xCc_%0Qs`25$fZ3rgJb(HG7fv2UWqK^ay_^u{>BxhA3oH$Fp}cev9^Jny?uD>0&_b}gJ=RQ(;QsAfApfmA+}+lFX!lke z*}EMHA>JsoRD)b!6NWmPFw$0oiH$|;P=~D zkc#HQR1`ONqqwOPB~2aRrf1GOIr8iYU$lU)x@uw&6J3pHEl$VC%Jmpou~wWl;HGEJ zJ2~>~333$W@9CD%Qj&$0{e$hNX57&hHykv~F)nT<_ z5F6(d--ez!@8rk}e-J~R?1aeW;*aHZZFVBW4Q_hoyno{UBmQq%gue|v^FQb#_5ExC~l1;E+%?<`&daW^2O(~?A=_! z(KTAaVV-^FDO$rVc%IMjJMS?!JHzeNB0ar*j3h2504(j5&b967U}0vG-#6}Zy%wOq zUGZqxCAe!Bp-_nXc8555{1_W|Gc3$b(YB`p?Ul{}NPna2s!}RaD3!<+{=`u(Kim@> z4En@^HrIRy%NSgzM!wkKRZ2ySuB%1|T2shnk+#jm$CJ3yW&_0?%c0ZwI8x$B8^>{& z_+$!c+Z1wHwAM5Q%B3QXl$?Kc5LY<_9g9UmELg3$QlO-bawM;ueGw%k*lGZw|+eF=+{;zxydQWPglF#JeBH4F<_BeT(mV%?XqW(Dh(9 zQab#yyu|lEFAo7}py9;J$>}j;p5vZhO+3)Cm-c8Jr2-}lI6GHl*i=lad`&_|P> zjy2b_+BYy>CNkl4msWu07J2sPylCjYyV>=ytrta7_ zYWv#ut!?+(zWYD>xBad4oSeMx-cKO?v!}A6L^jafRq?@_uU@@+_WjTQ9L~67Mj-to z{_Zd(F3RNOfjxWfUcZdnm(Ss;Bm2?Y-6iNDymQ7Km|>P3fq(SZ{LR48#ysluJFk8I z@YYpyH`gI8MuPx_HJmLBV5B<-gm=!kV}@CF*cC{B&R@K-Fg8%%yLKLzFPuSY)EWdh z+rZ!17T(Sdus1V=Cddzjch0zDhFNylr9&VQ^2dvr;VOsAAH0dPAH0h|r5tK6XQ*V> zFgI8RYva{eFn@C@9^Ac6c;`&)mP6%W3ALva*kP9rx&#vW?V+oqGy0js``^29;WVOy zJQ3xug3{IuHs;1~lG{UJWdb|X)zE|lfY_NCz{$o8GAmP9n;OAGVTUL`H+De>U33a0 ziHEJ^a)fl8yGFsL2^t4 z0EkQo&53 z%oeUTW`8g=T!lPOdo+1jBh1Ya)~1HAHChP|@gV_91>Ec`V4yn>N_z`-*rfw>(Mh+o zXzncEvv0kO*2)b?*91agX$*@Mi{bC;2tOfFx+<{V*AWdidPoiPM|@lqd=$3ubCDsy zO^!g3VU`_s>7a{Fx}`<)X8XPK!c*v~*^CHpXMbcQ#$dRo13@0n2y~Od*TV%a_7?OtuD0lEX~0k4 ze*?9@2ZB^GXnd8hH(80+t`2)A8g^*9hSq9*)-BF#~_4 zjK2nct}^7uuf*_e--qD-`JEywX)gP@ac zet@J2@EUye!~yK>??7ci8Y&CZ(OIEIYGxLKwB^{)+=C4*y(p<|M{>y)Y;No4jDI_3 zm=(QrcIg0JbP6Pi$1;5#&*7G;@1H+@fPWRXieJ%IrbSk6E=rsG@zOgV5S)1NHFWMc zfLGr?&G#q~J7$<=hu!Co@5gXU_4mv5bv*@=#Dj$Ss0N?d*@qXOJc^y&&8XrpDb7Mu zs3}=Tc;}2eW|###?9w5S2;uP;j2<;=ReyA__tEaE z3cU8z5q$8*OL*ti7x3O2FXMe8;GHw>m|>P3b_LR(!{cud&uo*`D>4$pd`~xSDE#7y z-Tip^_`bh@GwzsSmL2Iod?pBH=q{Y^FS9ghcQiNL>0oB?TX^S;J7#{H{XaZo|B`?2 a`3==iBr|@^x={cC002ovP6b4+LSTYjS;3$H delta 1721 zcmV;q21fav3&;(SBYyxHbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU& zYDq*vRCwBqR(ot))fxZYmz~7dkH&5ucH%gVYo~cPX)Bn@1e-?xU|S@RItHR;n~KJ! z!Jr_Dh6Ze~b!w{tLgJ4~ljz1nVN6R~L@Aq42`coFhttGulYb_05+@~%9VhYo+V@_* zb9pF089UOkeee0c-|zdr^E=-$hwF?-A9?_7t!Izm; zX~beN!^Y)u!7f|iuJ@yTb0>b>-MzEMTeD+ibmYOlkNRI;i^r{f*wWr|SMR@iUP&t| zp4=jA^Cc@pv3f%`Nz7AOu&X2a)Ji z!q9KT-`B`Wqr=iH}kfnVnw^|Hv zmNw7x5G4@>rGSyp02Zz-QrW7I&7@J|^}%kls_&mZ`-V`xzP$C}-~9R@841_sqe!f# zz*EhWu?3tO9f!ZdiOpsW2~NV*#47Tc3`$B%VWSLJmzVMOv0j*Hzhv18f#)EXm>>uO zx_`R1G#ovC?BAlMsy>rRlCn7ks;V2cPbE{Rsd2+%vmvAamNFhUB%^Q!+9?}57AD4^ zsTyR91%W^Snx-NeokuP!!)dpHVKGdG&4c5(Y$gkdSXWk-(Mr00VDBRkBng798EWc_ zXQ4H2!IOXd6Am3Xh^^bUVVP_NQ6!OShJP*dVZIE5VKGdG&C@jMCW##Kxhz_!Mf~)h zT`-%?;79^iBFLrFFyHt+*xVjSoQ|s6I?AA6l!mH8iZbKw-S?uct;4{OMBcz;*dj6T zg@R%zwlNsQ*}nI1;`mYMl(rxcX}W@XV?E zo11-^Y7dgD38b?b%0xgc#UssG(bm*pl!BEco=BiRP)&+cF+4F#Hc7Z84e6Xp5$kYO zRl{Mk;x)o#*hV)!7aHl=F?r?AntH!k$@?)gIZkarpp*q{qC<1@jhjDhn=D;BO5ybU58LhWui& zMOY*rcD{hAkwHYlAuLA5>86QcZ0J1Z$HQ=NIhczX6zI;V^Ebld+ko719B=dwj{&>riI3A-!}B*~9|rT1Od?nMtC&roc?kDCUq~iJ`Ql z1pd}exT$3;$tAq?_B)r3ym{uV3e?@OV+}Yk;Xtrnaon z>C7A7MU5RT4pv7wYANbqdl$*rPJJtalPCXk>BW~{?3(f*x{kkOKejYz6$hB1ZO zx6;XW=(_%?6G@iig)-%tj~7oyX6M+=m86-!9?1V9__jX?#sA0Y69EPQY&^=jsW`Hk P00000NkvXXu0mjfqmpK>A{hb5JRy3={wJWmTs#QWh z!7*?^(-*t#v){`T6cywegcz<4r$hv^)432I4taVgO;QQ+!k@KNT4(ZE&GgL651FTV zbH;(KogIx;EGBooptrfP)TOij3t(dfUz%l*EJ<~!LJBw=%OZQvSqKBqI9`Pj_YM-0 z`yC*K<24K`%~w{HhV3q5Fg$Fc`zq|r6cc-hojBxfIT#n*Ap70_dw}>ab0t1E8afY{ z<&*s(AE^o#FDzY;lLRl!BGQZI2T6AYbi$a=>QRSv{T#L&_5Z-!dbmw;o$qYy)iI3y z?1+1eiWs!_!h=(NLTrdb8$6J?WbXf^Xmw>QKHy!5Uy2SMB^k6aV~wp}y#90{`l{O- zQ9s=qp;o>9WCCK!uFe5c>_cC6RaA2klouFS)CaYNK6xAyp&gn{3<`^TD&5v}vk5j4 zK&t}vbwA(}A#8RJR|?U2580!&g`qnmvi}0ab%>njrnF>>Xz=p?eiPtF^V-;W)$%G-hSf2B50L4W}hd276TxNDCae9b)U8> zBXT;QU%Vd1S<|HRsJGs>0(+VUl$z=lu1^n78c_5=8bh;Kr|4qUwH8vcJaFP?gW^&A zDaeZr!zTCchk{aP+czV-fSoi)mw``r11HcgF=hN5@$TXq8-Qzoolx6MVjG?pF)d1e z7N-y7%cEU#^#^DIuD$P-n}kNy56qnXFBy>l!0z72r@_`hZj*Kw-xjhDmo>1F_IXHfRSZs+j5VC#U2i^f(990ZdQJzCD$6r|z z-JH*vkOM8Y8NIWX*H8$5*pkbkkd5@B7O~S>b2q;kM#e`7U{dDquMe3N>D_l^q{~iF zh8dPT^(>JOs1*4}E)u7Xg%M#xBQ?Z;iC$2Sm+z3V^}60`XEv?1-t16DxkSg5YuH2r z%|eQRYhD?ksWc15FC~xoGQv1nl6z4_+tu82T=hfPnxT?og zOc-acUapeUGS9APpjJW;v30(maGBLXBIi(dq^{&h2M(t#Kk@9VQHP10U5RIWwcOo) zE?5Q@pUS3N<6?4sTyp0c1(P)SBw-2cu zp@BJ2RcHMWJ4;-ZuJx+vG%1NCmR*s=+`I4?S7U9igEd3qf;46h)(U8;=Z%zgKJ*;9 z33{}pBrU$k$v-ptoCJxvO;g_AaHMuOD$a4}LfIw3cS9=mQ_arA5GGaVd5u0sP*EERF9I&{r$?F0ARw4taWM#!}J?YJd(-7==sE0l~XQ4$cZ0`?xLv!<= z$W#fB!An5$^_kpGZB-bSv+VuVU#BBAQu+8nDLh(exU%ITPQwatHHUr0ju>w5c^&ZN XNUMYklIQqO9F@5V+_>J*?csj_4Fj+a delta 2438 zcmV;133>Ls4v-U&BYz23NklVV)_~NPo|!ZE&bjA2&;R_N|MQ%41>dsWcYojgRg>#$ZnAI}DQV6U zLZ0y57!TJId-JHZUA^%q?!EV(fp241eA9#nmo1xC7qmAA{J!Qh=FFv`X$p~O-6`iL z`eXETcJTTBPsk3B?28TMuDEOI(zgE>fLyckZ!3a6>*gQ+cmWMfQ`z<6Ms~gY0&ng4 zgn^;q6DC&${ePT4Z!RqhFQetstLf=%=iS#|WoRV-*y3A$(+YUs1%Q5P#q#dS(`M9P zxZo1jJ^CPPo?ee_S=5B9sSXD5`|J}I43FeU4-FAdrpe{=EWZ9)Zn*U>-h6c{U2R|V z{<8JXNkHM-0MKjy{$S_)3tAd#Cro7Ntv3;iCz;-K8h-$>c!It}idZ~JE|&+uwk_&v z!qi4W)YU`)IMjKBx|%S{9({toz?LMXNZ||bFFOHNF42+D9vh|hi09^93i|{!P2=F|Q`q~=Km^ztQB1L~9#ltHf zV7{DD=ClbY(Q!V#9-)=J}qTB?IV-udWL`jTlZ+rqLm z%2Ft;%L|n*j#-w*vMpkX6z}}|Q>ud%G)|~x$!)Dvg(EahYN}tg{DD>D{gxTHVU$w*`JolO{M>rp-+yS zpDsV24bN?&;2MOGNGY)`i(tS{FyP0wER<3RA#e*Go3^~j^Dk_rkayX8@C%}m5b41T zn}64>X7<_Va^|##O@Lhn(9+Tp^*PSWa5T#H*IuWoaRTk#JqRJuN-=xU65jmdt@QXlk6m_Saq~9F5|0oS7{xEl~gk$ks*I z-SNFSbAHnPpM!L?w-K!HbExx3(Xdu*cz<>S?SrE%3<-veBJByZln5b^Gx6F&`3b5)Q&fHza;^?(r;fMj?{AC<2^*GD@mn? zu(igvEF8-s=yw=a4tsMJ^BtEtesHBk2w4t^Dly_%78QOU6@DL%Wno(uw$`N5Lw`i7 zD>?A-9>S4YD*g8LfUN@PU@Wr6T$o)wR;L3ke9pMPJ^OFP~`Sr+3lxUNURbuq>;FqB0rg_M#)E{`b+ zMN2>$W5^5*5b!yOQZZTi$!4>M08ayjqp|pwx_=4vODd~FR91yZ z^u;j3Lzp6!0>jRjjgY3~d@La9D`_W$z<7d|x*P^k2I09L!AKPq!Ab_xDUQbCTY!QF zMmBES`SjG&>X(G0b%dj}45X8It_vkWNg>ddU_xbpyzAk4rZir1XbheKDFv3293LDm zWdW4Z3T<12qqS(uCV!QTvvJ$br-2a-*)Ati#GK7X}|&)YgV+Ki9Z%f%(5gkiQDFFF85aO=$6N1h zo8NrKl}gHhF@{M~r&BwzkwkxtLcV~Iq6lW(X;@4{fq%giZ$dsFbLXE&-NZ&>Jx7Tj zKgO{mUH!lR>)$U0x`A{l^d|r?z$lR0`OXKg%x|7?)yQzx@3}64U?sE9`97hVC`u|u zM@Go!M={1LcgOKl-#CdGbIxMc+4IN_4bt1)$&t=B`eVI`yO*uF9B2pPCB} zAPP*m^M6-2-ZL>8y12H!fpD~rs&IsGBuZr{gx1yxiwcE2gQ*nBL_Y(`1j+sweZ4&# z>rcJ3{PBO>4|D+ie8aVTJctNT-#mL(^Ho1R?=KaOGo`vFN}!?wU!Vf5b-5x6At)3I zjAS!pGa1tHelnw@9h-K%efPctpX~#BfyBwqzkdz@6z_|H5*yK)NVxvei&`$5R2N?0 zx2-8-&dY{`U^tiW=#C{{eR2D)7vhOzZ)wN<6czuSe$B==y96WvQ~@Et$BF+GlpKrz zDPW-FGz;Xu&iJ */ -function compresseur_ecrire_balise_js_dist(&$flux, $pos, $src, $comments = ""){ - $comments .= ""; - $flux = substr_replace($flux,$comments,$pos,0); - return $flux; +function compresseur_ecrire_balise_js_dist(&$flux, $pos, $src, $comments = "") { + $src = timestamp($src); + // option chargement JS async par jQl + if (defined('_JS_ASYNC_LOAD') and !test_espace_prive()) { + lire_fichier(find_in_path("lib/jQl/jQl.min.js"), $jQl); + if ($jQl) { + $comments .= ""; + } else { + $comments .= ""; + } + } else { + $comments .= ""; + } + + $flux = substr_replace($flux, $comments, $pos, 0); + + return $flux; } /** * Ecrire la balise CSS pour insérer le fichier compressé - * + * * C'est cette fonction qui décide ou il est le plus pertinent * d'insérer le fichier, et dans quelle forme d'écriture * @@ -59,56 +74,67 @@ function compresseur_ecrire_balise_js_dist(&$flux, $pos, $src, $comments = ""){ * @return string * Code HTML de la balise */ -function compresseur_ecrire_balise_css_dist(&$flux, $pos, $src, $comments = "", $media=""){ - $comments .= ""; - $flux = substr_replace($flux,$comments,$pos,0); +function compresseur_ecrire_balise_css_dist(&$flux, $pos, $src, $comments = "", $media = "") { + $src = timestamp($src); + $comments .= ""; + // Envoyer aussi un entete http pour demarer le chargement de la CSS plus tot + // Link: ;rel="stylesheet prefetch" + $comments .= "<" . "?php header('Link: <' . url_de_base() . (_DIR_RACINE ? _DIR_RESTREINT_ABS : '') . '$src>;rel=\"stylesheet prefetch\"'); ?>"; + $flux = substr_replace($flux, $comments, $pos, 0); + return $flux; } /** * Extraire les balises CSS à compacter - * + * * @param string $flux * Contenu HTML dont on extrait les balises CSS * @param string $url_base * @return array * Couples (balise => src) */ -function compresseur_extraire_balises_css_dist($flux, $url_base){ - $balises = extraire_balises($flux,'link'); +function compresseur_extraire_balises_css_dist($flux, $url_base) { + $balises = extraire_balises($flux, 'link'); $files = array(); - foreach ($balises as $s){ + foreach ($balises as $s) { if (extraire_attribut($s, 'rel') === 'stylesheet' - AND (!($type = extraire_attribut($s, 'type')) - OR $type == 'text/css') - AND is_null(extraire_attribut($s, 'name')) # css nommee : pas touche - AND is_null(extraire_attribut($s, 'id')) # idem - AND !strlen(strip_tags($s)) - AND $src = preg_replace(",^$url_base,",_DIR_RACINE,extraire_attribut($s, 'href'))) + and (!($type = extraire_attribut($s, 'type')) + or $type == 'text/css') + and is_null(extraire_attribut($s, 'name')) # css nommee : pas touche + and is_null(extraire_attribut($s, 'id')) # idem + and !strlen(strip_tags($s)) + and $src = preg_replace(",^$url_base,", _DIR_RACINE, extraire_attribut($s, 'href')) + ) { $files[$s] = $src; + } } + return $files; } /** * Extraire les balises JS à compacter - * + * * @param string $flux * Contenu HTML dont on extrait les balises CSS * @param string $url_base * @return array * Couples (balise => src) */ -function compresseur_extraire_balises_js_dist($flux, $url_base){ - $balises = extraire_balises($flux,'script'); +function compresseur_extraire_balises_js_dist($flux, $url_base) { + $balises = extraire_balises($flux, 'script'); $files = array(); - foreach ($balises as $s){ + foreach ($balises as $s) { if (extraire_attribut($s, 'type') === 'text/javascript' - AND is_null(extraire_attribut($s, 'id')) # script avec un id : pas touche - AND $src = extraire_attribut($s, 'src') - AND !strlen(strip_tags($s))) + and is_null(extraire_attribut($s, 'id')) # script avec un id : pas touche + and $src = extraire_attribut($s, 'src') + and !strlen(strip_tags($s)) + ) { $files[$s] = $src; + } } + return $files; } @@ -126,40 +152,42 @@ function compresseur_extraire_balises_js_dist($flux, $url_base){ * @return string * Contenu compressé du de la page html */ -function compacte_head_files($flux,$format) { +function compacte_head_files($flux, $format) { $url_base = url_de_base(); $url_page = substr(generer_url_public('A'), 0, -1); - $dir = preg_quote($url_page,',').'|'.preg_quote(preg_replace(",^$url_base,",_DIR_RACINE,$url_page),','); + $dir = preg_quote($url_page, ',') . '|' . preg_quote(preg_replace(",^$url_base,", _DIR_RACINE, $url_page), ','); - if (!$extraire_balises = charger_fonction("compresseur_extraire_balises_$format",'',true)) + if (!$extraire_balises = charger_fonction("compresseur_extraire_balises_$format", '', true)) { return $flux; + } $files = array(); - $flux_nocomment = preg_replace(",,Uims","",$flux); - foreach ($extraire_balises($flux_nocomment, $url_base) as $s=>$src) { + $flux_nocomment = preg_replace(",,Uims", "", $flux); + foreach ($extraire_balises($flux_nocomment, $url_base) as $s => $src) { if ( - preg_match(',^('.$dir.')(.*)$,', $src, $r) - OR ( + preg_match(',^(' . $dir . ')(.*)$,', $src, $r) + or ( // ou si c'est un fichier - $src = preg_replace(',^'.preg_quote(url_de_base(),',').',', '', $src) + $src = preg_replace(',^' . preg_quote(url_de_base(), ',') . ',', '', $src) // enlever un timestamp eventuel derriere un nom de fichier statique - AND $src2 = preg_replace(",[.]{$format}[?].+$,",".$format",$src) + and $src2 = preg_replace(",[.]{$format}[?].+$,", ".$format", $src) // verifier qu'il n'y a pas de ../ ni / au debut (securite) - AND !preg_match(',(^/|\.\.),', substr($src,strlen(_DIR_RACINE))) + and !preg_match(',(^/|\.\.),', substr($src, strlen(_DIR_RACINE))) // et si il est lisible - AND @is_readable($src2) + and @is_readable($src2) ) ) { - if ($r) + if ($r) { $files[$s] = explode('&', str_replace('&', '&', $r[2]), 2); - else + } else { $files[$s] = $src; + } } } - $callbacks = array('each_min'=>'callback_minifier_'.$format.'_file'); + $callbacks = array('each_min' => 'callback_minifier_' . $format . '_file'); - if ($format=="css"){ + if ($format == "css") { $callbacks['each_pre'] = 'compresseur_callback_prepare_css'; $callbacks['all_min'] = 'css_regroup_atimport'; // ce n'est pas une callback, mais en injectant l'url de base ici @@ -167,21 +195,23 @@ function compacte_head_files($flux,$format) { // puisque la css compresse inclue l'url courante du site (en url absolue) // on exclue le protocole car la compression se fait en url relative au protocole $callbacks[] = protocole_implicite($url_base); - } - if ($format=='js' AND $GLOBALS['meta']['auto_compress_closure']=='oui'){ - $callbacks['all_min'] = 'minifier_encore_js'; + // et l'URL des ressources statiques si configuree + if (isset($GLOBALS['meta']['url_statique_ressources']) and $GLOBALS['meta']['url_statique_ressources']){ + $callbacks[] = protocole_implicite($GLOBALS['meta']['url_statique_ressources']); + } } include_spip('inc/compresseur_concatener'); include_spip('inc/compresseur_minifier'); - if (list($src,$comms) = concatener_fichiers($files, $format, $callbacks) - AND $src){ - $compacte_ecrire_balise = charger_fonction("compresseur_ecrire_balise_$format",''); + if (list($src, $comms) = concatener_fichiers($files, $format, $callbacks) + and $src + ) { + $compacte_ecrire_balise = charger_fonction("compresseur_ecrire_balise_$format", ''); $files = array_keys($files); // retrouver la position du premier fichier compacte - $pos = strpos($flux,reset($files)); + $pos = strpos($flux, reset($files)); // supprimer tous les fichiers compactes du flux - $flux = str_replace($files,"",$flux); + $flux = str_replace($files, "", $flux); // inserer la balise (deleguer a la fonction, en lui donnant le necessaire) $flux = $compacte_ecrire_balise($flux, $pos, $src, $comms); } @@ -193,94 +223,121 @@ function compacte_head_files($flux,$format) { /** * Lister les fonctions de préparation des feuilles css * avant minification - * + * * @return array * Liste des fonctions à appliquer sur les feuilles CSS */ -function compresseur_liste_fonctions_prepare_css(){ +function compresseur_liste_fonctions_prepare_css() { static $fonctions = null; - if (is_null($fonctions)){ - $fonctions = array('css_resolve_atimport','urls_absolues_css'); + if (is_null($fonctions)) { + $fonctions = array('css_resolve_atimport', 'urls_absolues_css', 'css_url_statique_ressources'); // les fonctions de preparation aux CSS peuvent etre personalisees // via la globale $compresseur_filtres_css sous forme de tableau de fonctions ordonnees - if (isset($GLOBALS['compresseur_filtres_css']) AND is_array($GLOBALS['compresseur_filtres_css'])) + if (isset($GLOBALS['compresseur_filtres_css']) and is_array($GLOBALS['compresseur_filtres_css'])) { $fonctions = $GLOBALS['compresseur_filtres_css'] + $fonctions; + } } + return $fonctions; } /** * Préparer un fichier CSS avant sa minification - * + * * @param string $css * @param bool|string $is_inline * @param string $fonctions * @return bool|int|null|string */ -function &compresseur_callback_prepare_css(&$css, $is_inline = false, $fonctions=null) { - if ($is_inline) return compresseur_callback_prepare_css_inline($css,$is_inline); - if (!preg_match(',\.css$,i', $css, $r)) return $css; +function &compresseur_callback_prepare_css(&$css, $is_inline = false, $fonctions = null) { + if ($is_inline) { + return compresseur_callback_prepare_css_inline($css, $is_inline); + } + if (!preg_match(',\.css$,i', $css, $r)) { + return $css; + } $url_absolue_css = url_absolue($css); // retirer le protocole de $url_absolue_css $url_absolue_css_implicite = protocole_implicite($url_absolue_css); - if (!$fonctions) $fonctions = compresseur_liste_fonctions_prepare_css(); - elseif (is_string($fonctions)) $fonctions = array($fonctions); + if (!$fonctions) { + $fonctions = compresseur_liste_fonctions_prepare_css(); + } elseif (is_string($fonctions)) { + $fonctions = array($fonctions); + } - $sign = implode(",",$fonctions); - $sign = substr(md5("$url_absolue_css_implicite-$sign"), 0,8); + $sign = implode(",", $fonctions); + $sign = substr(md5("$url_absolue_css_implicite-$sign"), 0, 8); - $file = basename($css,'.css'); - $file = sous_repertoire (_DIR_VAR, 'cache-css') - . preg_replace(",(.*?)(_rtl|_ltr)?$,","\\1-f-" . $sign . "\\2",$file) + $file = basename($css, '.css'); + $file = sous_repertoire(_DIR_VAR, 'cache-css') + . preg_replace(",(.*?)(_rtl|_ltr)?$,", "\\1-f-" . $sign . "\\2", $file) . '.css'; if ((@filemtime($file) > @filemtime($css)) - AND (!defined('_VAR_MODE') OR _VAR_MODE != 'recalcul')) + and (!defined('_VAR_MODE') or _VAR_MODE != 'recalcul') + ) { return $file; + } - if ($url_absolue_css==$css){ - if (strncmp($GLOBALS['meta']['adresse_site']."/",$css,$l=strlen($GLOBALS['meta']['adresse_site']."/"))!=0 - OR !lire_fichier(_DIR_RACINE . substr($css,$l), $contenu)){ - include_spip('inc/distant'); - if (!$contenu = recuperer_page($css)) - return $css; + if ($url_absolue_css == $css) { + if (strncmp($GLOBALS['meta']['adresse_site'] . "/", $css, $l = strlen($GLOBALS['meta']['adresse_site'] . "/")) != 0 + or !lire_fichier(_DIR_RACINE . substr($css, $l), $contenu) + ) { + include_spip('inc/distant'); + if (!$contenu = recuperer_page($css)) { + return $css; + } } - } - elseif (!lire_fichier($css, $contenu)) + } elseif (!lire_fichier($css, $contenu)) { return $css; + } - $contenu = compresseur_callback_prepare_css_inline($contenu, $url_absolue_css_implicite, $fonctions); + $contenu = compresseur_callback_prepare_css_inline($contenu, $url_absolue_css_implicite, $css, $fonctions); // ecrire la css - if (!ecrire_fichier($file, $contenu)) + if (!ecrire_fichier($file, $contenu)) { return $css; + } return $file; } /** * Préparer du contenu CSS inline avant minification - * + * * @param string $contenu + * contenu de la CSS * @param string $url_base + * url de la CSS ou de la page si c'est un style inline + * @param string $filename + * nom du fichier de la CSS (ou vide si c'est un style inline) * @param array $fonctions + * liste des fonctions appliquees a la CSS * @return string */ -function &compresseur_callback_prepare_css_inline(&$contenu, $url_base, $fonctions=null) { - if (!$fonctions) $fonctions = compresseur_liste_fonctions_prepare_css(); - elseif (is_string($fonctions)) $fonctions = array($fonctions); +function &compresseur_callback_prepare_css_inline(&$contenu, $url_base, $filename = '', $fonctions = null) { + if (!$fonctions) { + $fonctions = compresseur_liste_fonctions_prepare_css(); + } elseif (is_string($fonctions)) { + $fonctions = array($fonctions); + } // retirer le protocole de $url_base $url_base = protocole_implicite(url_absolue($url_base)); - foreach($fonctions as $f) - if (function_exists($f)) - $contenu = $f($contenu, $url_base); - + foreach ($fonctions as $f) { + if (!function_exists($f)) { + $f = chercher_filtre($f); + } + if ($f and function_exists($f)) { + $contenu = $f($contenu, $url_base, $filename); + } + } + return $contenu; } @@ -290,38 +347,37 @@ function &compresseur_callback_prepare_css_inline(&$contenu, $url_base, $fonctio * * @param string $contenu * @param string $url_base + * @param string $filename * @return string */ -function css_resolve_atimport($contenu, $url_base){ +function css_resolve_atimport($contenu, $url_base, $filename) { // vite si rien a faire - if (strpos($contenu,"@import")===false) + if (strpos($contenu, "@import") === false) { return $contenu; + } $imports_non_resolvables = array(); - preg_match_all(",@import ([^;]*);,UmsS",$contenu,$matches,PREG_SET_ORDER); + preg_match_all(",@import ([^;]*);,UmsS", $contenu, $matches, PREG_SET_ORDER); - if ($matches AND count($matches)){ - foreach($matches as $m){ + if ($matches and count($matches)) { + foreach ($matches as $m) { $url = $media = $erreur = ""; - if (preg_match(",^\s*url\s*\(\s*['\"]?([^'\"]*)['\"]?\s*\),Ums",$m[1],$r)){ + if (preg_match(",^\s*url\s*\(\s*['\"]?([^'\"]*)['\"]?\s*\),Ums", $m[1], $r)) { $url = $r[1]; - $media = trim(substr($m[1],strlen($r[0]))); - } - elseif(preg_match(",^\s*['\"]([^'\"]+)['\"],Ums",$m[1],$r)){ + $media = trim(substr($m[1], strlen($r[0]))); + } elseif (preg_match(",^\s*['\"]([^'\"]+)['\"],Ums", $m[1], $r)) { $url = $r[1]; - $media = trim(substr($m[1],strlen($r[0]))); - } - if (!$url){ - $erreur = "Compresseur : ".$m[0]."; non resolu dans $url_base"; + $media = trim(substr($m[1], strlen($r[0]))); } - else { - $url = suivre_lien($url_base,$url); + if (!$url) { + $erreur = "Compresseur : " . $m[0] . "; non resolu dans $url_base"; + } else { + $url = suivre_lien($url_base, $url); // url relative ? - $root = protocole_implicite($GLOBALS['meta']['adresse_site']."/"); - if (strncmp($url,$root,strlen($root))==0){ - $url = _DIR_RACINE . substr($url,strlen($root)); - } - else { + $root = protocole_implicite($GLOBALS['meta']['adresse_site'] . "/"); + if (strncmp($url, $root, strlen($root)) == 0) { + $url = _DIR_RACINE . substr($url, strlen($root)); + } else { // si l'url a un protocole http(s):// on ne considère qu'on ne peut pas // résoudre le stockage. Par exemple // @import url(https://fonts.googleapis.com/css?family=Ubuntu); @@ -339,21 +395,21 @@ function css_resolve_atimport($contenu, $url_base){ // on renvoit dans la boucle pour que le fichier inclus // soit aussi processe (@import, url absolue etc...) $css = compresseur_callback_prepare_css($url); - if ($css==$url - OR !lire_fichier($css,$contenu_imported)){ - $erreur = "Compresseur : url $url de ".$m[0]."; non resolu dans $url_base"; - } - else { - if ($media){ + if ($css == $url + or !lire_fichier($css, $contenu_imported) + ) { + $erreur = "Compresseur : url $url de " . $m[0] . "; non resolu dans $url_base"; + } else { + if ($media) { $contenu_imported = "@media $media{\n$contenu_imported\n}\n"; } - $contenu = str_replace($m[0],$contenu_imported,$contenu); + $contenu = str_replace($m[0], $contenu_imported, $contenu); } } } - if ($erreur){ - $contenu = str_replace($m[0],"/* erreur @ import ".$m[1]."*/",$contenu); + if ($erreur) { + $contenu = str_replace($m[0], "/* erreur @ import " . $m[1] . "*/", $contenu); erreur_squelette($erreur); } } @@ -369,17 +425,40 @@ function css_resolve_atimport($contenu, $url_base){ * @param string $nom * @return bool|string */ -function css_regroup_atimport($nom_tmp, $nom){ - lire_fichier($nom_tmp,$contenu); - if (!$contenu OR strpos($contenu,"@import")===false) return false; // rien a faire - - preg_match_all(",@import ([^;]*);,UmsS",$contenu,$matches,PREG_SET_ORDER); - $imports = array_map("reset",$matches); - $contenu = str_replace($imports,"",$contenu); - $contenu = implode("\n",$imports)."\n".$contenu; - ecrire_fichier($nom,$contenu,true); +function css_regroup_atimport($nom_tmp, $nom) { + lire_fichier($nom_tmp, $contenu); + if (!$contenu or strpos($contenu, "@import") === false) { + return false; + } // rien a faire + + preg_match_all(",@import ([^;]*);,UmsS", $contenu, $matches, PREG_SET_ORDER); + $imports = array_map("reset", $matches); + $contenu = str_replace($imports, "", $contenu); + $contenu = implode("\n", $imports) . "\n" . $contenu; + ecrire_fichier($nom, $contenu, true); // ecrire une version .gz pour content-negociation par apache, cf. [11539] - ecrire_fichier("$nom.gz",$contenu,true); + ecrire_fichier("$nom.gz", $contenu, true); return $nom; -} \ No newline at end of file +} + +/** + * Remplacer l'URL du site par une url de ressource genre static.example.org + * qui evite les echanges de cookie pour les ressources images + * (peut aussi etre l'URL d'un CDN ou autre provider de ressources statiques) + * + * @param string $contenu + * @param string $url_base + * @param string $filename + * @return mixed + */ +function css_url_statique_ressources($contenu, $url_base, $filename){ + + if (isset($GLOBALS['meta']['url_statique_ressources']) + and $url_statique = $GLOBALS['meta']['url_statique_ressources']) { + $url_statique = rtrim(protocole_implicite($url_statique),"/")."/"; + $url_site = rtrim(protocole_implicite($GLOBALS['meta']['adresse_site']),"/")."/"; + $contenu = str_replace($url_site, $url_statique, $contenu); + } + return $contenu; +} diff --git a/www/plugins-dist/compresseur/inc/compresseur_concatener.php b/www/plugins-dist/compresseur/inc/compresseur_concatener.php index 37a0ee7d..6109b30d 100644 --- a/www/plugins-dist/compresseur/inc/compresseur_concatener.php +++ b/www/plugins-dist/compresseur/inc/compresseur_concatener.php @@ -12,10 +12,12 @@ /** * Fonctions pour concaténer plusieurs fichiers en un - * + * * @package SPIP\Compresseur\Concatener */ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} /** @@ -24,7 +26,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * puis sur le fichier final * * Gestion d'un cache : le fichier concaténé n'est produit que si il n'existe pas - * pour la liste de fichiers fournis en entrée + * pour la liste de fichiers fournis en entrée * * * @param array $files @@ -41,114 +43,123 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * @return array * Tableau a 2 entrées retournant le nom du fichier et des commentaires HTML à insérer dans la page initiale */ -function concatener_fichiers($files,$format='js', $callbacks = array()){ +function concatener_fichiers($files, $format = 'js', $callbacks = array()) { $nom = ""; - if (!is_array($files) && $files) $files = array($files); - if (count($files)){ - $callback_min = isset($callbacks['each_min'])?$callbacks['each_min']:'concatener_callback_identite'; - $callback_pre = isset($callbacks['each_pre'])?$callbacks['each_pre']:''; - $url_base = self('&'); + if (!is_array($files) && $files) { + $files = array($files); + } + if (count($files)) { + $callback_min = isset($callbacks['each_min']) ? $callbacks['each_min'] : 'concatener_callback_identite'; + $callback_pre = isset($callbacks['each_pre']) ? $callbacks['each_pre'] : ''; + $url_base = self('&'); // on trie la liste de files pour calculer le nom // necessaire pour retomber sur le meme fichier // si on renome une url a la volee pour enlever le var_mode=recalcul // mais attention, il faut garder l'ordre initial pour la minification elle meme ! - $dir = sous_repertoire(_DIR_VAR,'cache-'.$format); - $nom = $dir . md5(serialize($files).serialize($callbacks)) . ".$format"; + $dir = sous_repertoire(_DIR_VAR, 'cache-' . $format); + $nom = $dir . md5(serialize($files) . serialize($callbacks)) . ".$format"; if ( - (defined('_VAR_MODE') AND _VAR_MODE=='recalcul') - OR !file_exists($nom) + (defined('_VAR_MODE') and _VAR_MODE == 'recalcul') + or !file_exists($nom) ) { $fichier = ""; $comms = array(); $total = 0; $files2 = false; - foreach($files as $key=>$file){ + foreach ($files as $key => $file) { if (!is_array($file)) { // c'est un fichier $comm = $file; // enlever le timestamp si besoin - $file = preg_replace(",[?].+$,",'',$file); + $file = preg_replace(",[?].+$,", '', $file); // preparer le fichier si necessaire - if ($callback_pre) + if ($callback_pre) { $file = $callback_pre($file); - + } + lire_fichier($file, $contenu); - } - else { + } else { // c'est un squelette - if (!isset($file[1])) $file[1] = ''; + if (!isset($file[1])) { + $file[1] = ''; + } $comm = _SPIP_PAGE . "=$file[0]" - . (strlen($file[1])?"($file[1])":''); - parse_str($file[1],$contexte); - $contenu = recuperer_fond($file[0],$contexte); + . (strlen($file[1]) ? "($file[1])" : ''); + parse_str($file[1], $contexte); + $contenu = recuperer_fond($file[0], $contexte); // preparer le contenu si necessaire - if ($callback_pre) - $contenu = $callback_pre($contenu, url_absolue(_DIR_RESTREINT?generer_url_public($file[0],$file[1]):$url_base)); + if ($callback_pre) { + $contenu = $callback_pre($contenu, + url_absolue(_DIR_RESTREINT ? generer_url_public($file[0], $file[1]) : $url_base)); + } // enlever le var_mode si present pour retrouver la css minifiee standard - if (strpos($file[1],'var_mode')!==false) { - if (!$files2) $files2 = $files; + if (strpos($file[1], 'var_mode') !== false) { + if (!$files2) { + $files2 = $files; + } $old_key = $key; - $key = preg_replace(',(&(amp;)?)?var_mode=[^&\'"]*,','',$key); - $file[1] = preg_replace(',&?var_mode=[^&\'"]*,','',$file[1]); - if (!strlen($file[1])) + $key = preg_replace(',(&(amp;)?)?var_mode=[^&\'"]*,', '', $key); + $file[1] = preg_replace(',&?var_mode=[^&\'"]*,', '', $file[1]); + if (!strlen($file[1])) { unset($file[1]); - $files2 = array_replace_key($files2,$old_key,$key,$file); + } + $files2 = array_replace_key($files2, $old_key, $key, $file); } } // passer la balise html initiale en second argument - $fichier .= "/* $comm */\n". $callback_min($contenu, $key) . "\n\n"; + $fichier .= "/* $comm */\n" . $callback_min($contenu, $key) . "\n\n"; $comms[] = $comm; $total += strlen($contenu); } // calcul du % de compactage - $pc = intval(1000*strlen($fichier)/$total)/10; - $comms = "compact [\n\t".join("\n\t", $comms)."\n] $pc%"; - $fichier = "/* $comms */\n\n".$fichier; + $pc = intval(1000 * strlen($fichier) / $total) / 10; + $comms = "compact [\n\t" . join("\n\t", $comms) . "\n] $pc%"; + $fichier = "/* $comms */\n\n" . $fichier; // si on a nettoye des &var_mode=recalcul : mettre a jour le nom // on ecrit pas dans le nom initial, qui est de toute facon recherche qu'en cas de recalcul // donc jamais utile if ($files2) { - $files=$files2; - $nom = $dir . md5(serialize($files).serialize($callbacks)) . ".$format"; + $files = $files2; + $nom = $dir . md5(serialize($files) . serialize($callbacks)) . ".$format"; } $nom_tmp = $nom; - $final_callback = (isset($callbacks['all_min'])?$callbacks['all_min']:false); - if ($final_callback){ - unset($callbacks['all_min']); - $nom_tmp = $dir . md5(serialize($files).serialize($callbacks)) . ".$format"; - } + $final_callback = (isset($callbacks['all_min']) ? $callbacks['all_min'] : false); + if ($final_callback) { + unset($callbacks['all_min']); + $nom_tmp = $dir . md5(serialize($files) . serialize($callbacks)) . ".$format"; + } // ecrire - ecrire_fichier($nom_tmp,$fichier,true); - spip_clearstatcache(true,$nom_tmp); + ecrire_fichier($nom_tmp, $fichier, true); + clearstatcache(true, $nom_tmp); // ecrire une version .gz pour content-negociation par apache, cf. [11539] - ecrire_fichier("$nom_tmp.gz",$fichier,true); + ecrire_fichier("$nom_tmp.gz", $fichier, true); - if ($final_callback){ + if ($final_callback) { // closure compiler ou autre super-compresseurs // a appliquer sur le fichier final $encore = $final_callback($nom_tmp, $nom); - // si echec, on se contente de la compression sans cette callback - if ($encore!==$nom){ + // si echec, on se contente de la compression sans cette callback + if ($encore !== $nom) { // ecrire - ecrire_fichier($nom,$fichier,true); - spip_clearstatcache(true,$nom); + ecrire_fichier($nom, $fichier, true); + clearstatcache(true, $nom); // ecrire une version .gz pour content-negociation par apache, cf. [11539] - ecrire_fichier("$nom.gz",$fichier,true); - } - } + ecrire_fichier("$nom.gz", $fichier, true); + } + } } } // Le commentaire detaille n'apparait qu'au recalcul, pour debug - return array($nom, (isset($comms) AND $comms) ? "\n" : ''); + return array($nom, (isset($comms) and $comms) ? "\n" : ''); } /** @@ -156,10 +167,10 @@ function concatener_fichiers($files,$format='js', $callbacks = array()){ * * Mais justement, par défaut on ne minifie rien ! * - * @param string $contenu Contenu à minifier + * @param string $contenu Contenu à minifier * @return string Contenu à minifier */ -function &concatener_callback_identite(&$contenu){ +function &concatener_callback_identite(&$contenu) { return $contenu; } @@ -167,7 +178,7 @@ function &concatener_callback_identite(&$contenu){ * Une callback pour ? * * @param array $tableau - * + * * @param string $orig_key * Index dont on cherche la valeur actuelle * @param string $new_key @@ -176,18 +187,19 @@ function &concatener_callback_identite(&$contenu){ * Si rempli, la nouvelle clé prend cette valeur à la place * de la valeur de la clé d'origine * @return array - * + * */ -function &array_replace_key($tableau,$orig_key,$new_key,$new_value=null){ +function &array_replace_key($tableau, $orig_key, $new_key, $new_value = null) { $t = array(); - foreach($tableau as $k=>$v) { - if ($k==$orig_key) { - $k=$new_key; + foreach ($tableau as $k => $v) { + if ($k == $orig_key) { + $k = $new_key; if (!is_null($new_value)) { $v = $new_value; } } $t[$k] = $v; } + return $t; } diff --git a/www/plugins-dist/compresseur/inc/compresseur_embarquer.php b/www/plugins-dist/compresseur/inc/compresseur_embarquer.php index 1e13290c..0d606920 100644 --- a/www/plugins-dist/compresseur/inc/compresseur_embarquer.php +++ b/www/plugins-dist/compresseur/inc/compresseur_embarquer.php @@ -12,10 +12,12 @@ /** * Fonctions pour embarquer des images dans un CSS - * + * * @package SPIP\Compresseur\Embarquer */ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Embarque en base64 les images png|gif|jpg présentes dans un fichier CSS @@ -24,49 +26,58 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * les faire embarquer directement dans le fichier * * @see filtre_embarque_fichier() - * + * * @param string $contenu * Contenu d'un fichier CSS * @param string $source - * Source de ce fichier CSS + * URL Source de ce fichier CSS + * @param string $source_file + * filename Source de ce fichier CSS, si connu * @return string * Contenu du fichier CSS avec les images embarquées -**/ -function compresseur_embarquer_images_css($contenu, $source){ + **/ +function compresseur_embarquer_images_css($contenu, $source, $source_file = null) { #$path = suivre_lien(url_absolue($source),'./'); - $base = ((substr($source,-1)=='/')?$source:(dirname($source).'/')); + $base = ($source_file ? $source_file : $source); + $base = ((substr($base, -1) == '/') ? $base : (dirname($base) . '/')); + $filtre_embarque_fichier = chercher_filtre('filtre_embarque_fichier'); + if (!defined('_CSS_EMBARQUE_FICHIER_MAX_SIZE')) { + define('_CSS_EMBARQUE_FICHIER_MAX_SIZE', 4 * 1024); + } return preg_replace_callback( ",url\s*\(\s*['\"]?([^'\"/][^:]*[.](png|gif|jpg))['\"]?\s*\),Uims", - create_function('$x', - 'return "url(\"".filtre_embarque_fichier($x[1],"'.$base.'")."\")";' - ), $contenu); + create_function( + '$x', + 'return "url(\"".' . $filtre_embarque_fichier . '($x[1],"' . $base . '",_CSS_EMBARQUE_FICHIER_MAX_SIZE)."\")";' + ), + $contenu + ); } /** * -Embarquer des images dans les css, tous nav : - -/* -Content-Type: multipart/related; boundary="_ANY_STRING_WILL_DO_AS_A_SEPARATOR" - ---_ANY_STRING_WILL_DO_AS_A_SEPARATOR -Content-Location:chevron -Content-Transfer-Encoding:base64 - -iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFAQMAAAC3obSmAAAABlBMVEX///9mZmaO7mygAAAAEElEQVR42mNYwBDAoAHECwAKMgIJXa7xqgAAAABJRU5ErkJggg== - ---_ANY_STRING_WILL_DO_AS_A_SEPARATOR -... - ---_ANY_STRING_WILL_DO_AS_A_SEPARATOR -* / - -Puis - -background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFAQMAAAC3obSmAAAABlBMVEX///9mZmaO7mygAAAAEElEQVR42mNYwBDAoAHECwAKMgIJXa7xqgAAAABJRU5ErkJggg=="); -*background-image:url(mhtml:urlfeuille.css!chevron)} - + * Embarquer des images dans les css, tous nav : + * + * /* + * Content-Type: multipart/related; boundary="_ANY_STRING_WILL_DO_AS_A_SEPARATOR" + * + * --_ANY_STRING_WILL_DO_AS_A_SEPARATOR + * Content-Location:chevron + * Content-Transfer-Encoding:base64 + * + * iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFAQMAAAC3obSmAAAABlBMVEX///9mZmaO7mygAAAAEElEQVR42mNYwBDAoAHECwAKMgIJXa7xqgAAAABJRU5ErkJggg== + * + * --_ANY_STRING_WILL_DO_AS_A_SEPARATOR + * ... + * + * --_ANY_STRING_WILL_DO_AS_A_SEPARATOR + * / + * + * Puis + * + * background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFAQMAAAC3obSmAAAABlBMVEX///9mZmaO7mygAAAAEElEQVR42mNYwBDAoAHECwAKMgIJXa7xqgAAAABJRU5ErkJggg=="); + *background-image:url(mhtml:urlfeuille.css!chevron)} * */ diff --git a/www/plugins-dist/compresseur/inc/compresseur_minifier.php b/www/plugins-dist/compresseur/inc/compresseur_minifier.php index fc1f70f3..f0161c11 100644 --- a/www/plugins-dist/compresseur/inc/compresseur_minifier.php +++ b/www/plugins-dist/compresseur/inc/compresseur_minifier.php @@ -12,14 +12,16 @@ /** * Fonctions de minification - * + * * @package SPIP\Compresseur\Minifier */ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} /** * Minifier un contenu CSS - * + * * Si $options est vide on utilise la methode regexp simple * * Si $options est une chaine non vide elle definit un media à appliquer @@ -33,7 +35,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * - string media : media qui seront utilisés pour encapsuler par @media * les selecteurs sans media * - string template : format de sortie parmi 'low','default','high','highest' - * + * * @param string $contenu * Contenu CSS * @param mixed $options @@ -41,106 +43,140 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * @return string * Contenu CSS minifié */ -function minifier_css ($contenu, $options='') { - if (is_string($options) AND $options){ - if ($options=="all") // facile : media all => ne rien preciser +function minifier_css($contenu, $options = '') { + if (is_string($options) and $options) { + if ($options == "all") // facile : media all => ne rien preciser + { $options = ""; - elseif ( - strpos($contenu,"@media")==false - AND strpos($contenu,"@import")==false - AND strpos($contenu,"@font-face")==false - ){ + } elseif ( + strpos($contenu, "@media") == false + and strpos($contenu, "@import") == false + and strpos($contenu, "@font-face") == false + ) { $contenu = "@media $options {\n$contenu\n}\n"; - $options=""; + $options = ""; + } else { + $options = array('media' => $options); } - else - $options = array('media'=>$options); } - if (!is_array($options)){ + if (!is_array($options)) { // nettoyer la css de tout ce qui sert pas // pas de commentaires - $contenu = preg_replace(",/\*.*\*/,Ums","",$contenu); - $contenu = preg_replace(",\s//[^\n]*\n,Ums","",$contenu); + $contenu = preg_replace(",/\*.*\*/,Ums", "", $contenu); + $contenu = preg_replace(",\s//[^\n]*\n,Ums", "", $contenu); // espaces autour des retour lignes - $contenu = str_replace("\r\n","\n",$contenu); - $contenu = preg_replace(",\s+\n,ms","\n",$contenu); - $contenu = preg_replace(",\n\s+,ms","\n",$contenu); + $contenu = str_replace("\r\n", "\n", $contenu); + $contenu = preg_replace(",\s+\n,ms", "\n", $contenu); + $contenu = preg_replace(",\n\s+,ms", "\n", $contenu); // pas d'espaces consecutifs - $contenu = preg_replace(",\s(?=\s),Ums","",$contenu); + $contenu = preg_replace(",\s(?=\s),Ums", "", $contenu); // pas d'espaces avant et apres { ; , - $contenu = preg_replace("/\s?({|;|,)\s?/ms","$1",$contenu); + $contenu = preg_replace("/\s?({|;|,)\s?/ms", "$1", $contenu); // supprimer les espaces devant : sauf si suivi d'une lettre (:after, :first...) - $contenu = preg_replace("/\s:([^a-z])/ims",":$1",$contenu); + $contenu = preg_replace("/\s:([^a-z])/ims", ":$1", $contenu); // supprimer les espaces apres : - $contenu = preg_replace("/:\s/ms",":",$contenu); + $contenu = preg_replace("/:\s/ms", ":", $contenu); // pas d'espaces devant } - $contenu = preg_replace("/\s}/ms","}",$contenu); + $contenu = preg_replace("/\s}/ms", "}", $contenu); // ni de point virgule sur la derniere declaration - $contenu = preg_replace("/;}/ms","}",$contenu); + $contenu = preg_replace("/;}/ms", "}", $contenu); // pas d'espace avant !important - $contenu = preg_replace("/\s!\s?important/ms","!important",$contenu); + $contenu = preg_replace("/\s!\s?important/ms", "!important", $contenu); // passser les codes couleurs en 3 car si possible // uniquement si non precedees d'un [="'] ce qui indique qu'on est dans un filter(xx=#?...) - $contenu = preg_replace(";([:\s,(])#([0-9a-f])(\\2)([0-9a-f])(\\4)([0-9a-f])(\\6)(?=[^\w\-]);i","$1#$2$4$6",$contenu); + $contenu = preg_replace(";([:\s,(])#([0-9a-f])(\\2)([0-9a-f])(\\4)([0-9a-f])(\\6)(?=[^\w\-]);i", "$1#$2$4$6", + $contenu); // remplacer font-weight:bold par font-weight:700 - $contenu = preg_replace("/font-weight:bold(?!er)/ims","font-weight:700",$contenu); + $contenu = preg_replace("/font-weight:bold(?!er)/ims", "font-weight:700", $contenu); // remplacer font-weight:normal par font-weight:400 - $contenu = preg_replace("/font-weight:normal/ims","font-weight:400",$contenu); + $contenu = preg_replace("/font-weight:normal/ims", "font-weight:400", $contenu); // si elle est 0, enlever la partie entière des unites decimales - $contenu = preg_replace("/\b0+\.(\d+em)/ims",".$1",$contenu); + $contenu = preg_replace("/\b0+\.(\d+em)/ims", ".$1", $contenu); // supprimer les declarations vides - $contenu = preg_replace(",(^|})([^{}]*){},Ums","$1",$contenu); - // zero est zero, quelle que soit l'unite - $contenu = preg_replace("/([^0-9.]0)(em|px|pt|%)/ms","$1",$contenu); + $contenu = preg_replace(",(^|})([^{}]*){},Ums", "$1", $contenu); + // zero est zero, quelle que soit l'unite (sauf pour % car casse les @keyframes cf https://core.spip.net/issues/3128) + $contenu = preg_replace("/([^0-9.]0)(em|px|pt)/ms", "$1", $contenu); // renommer les couleurs par leurs versions courtes quand c'est possible $colors = array( - 'source'=>array('black','fuchsia','white','yellow','#800000','#ffa500','#808000','#800080','#008000','#000080','#008080','#c0c0c0','#808080','#f00'), - 'replace'=>array('#000' ,'#F0F' ,'#FFF' ,'#FF0' ,'maroon' ,'orange' ,'olive' ,'purple' ,'green' ,'navy' ,'teal' ,'silver' ,'gray' ,'red') + 'source' => array( + 'black', + 'fuchsia', + 'white', + 'yellow', + '#800000', + '#ffa500', + '#808000', + '#800080', + '#008000', + '#000080', + '#008080', + '#c0c0c0', + '#808080', + '#f00' + ), + 'replace' => array( + '#000', + '#F0F', + '#FFF', + '#FF0', + 'maroon', + 'orange', + 'olive', + 'purple', + 'green', + 'navy', + 'teal', + 'silver', + 'gray', + 'red' + ) ); - foreach($colors['source'] as $k=>$v){ - $colors['source'][$k]=";([:\s,(])".$v."(?=[^\w\-]);ms"; - $colors['replace'][$k] = "$1".$colors['replace'][$k]; + foreach ($colors['source'] as $k => $v) { + $colors['source'][$k] = ";([:\s,(])" . $v . "(?=[^\w\-]);ms"; + $colors['replace'][$k] = "$1" . $colors['replace'][$k]; } - $contenu = preg_replace($colors['source'],$colors['replace'],$contenu); + $contenu = preg_replace($colors['source'], $colors['replace'], $contenu); // raccourcir les padding qui le peuvent (sur 3 ou 2 valeurs) - $contenu = preg_replace(",padding:([^\s;}]+)\s([^\s;}]+)\s([^\s;}]+)\s(\\2),ims","padding:$1 $2 $3",$contenu); - $contenu = preg_replace(",padding:([^\s;}]+)\s([^\s;}]+)\s(\\1)([;}!]),ims","padding:$1 $2$4",$contenu); + $contenu = preg_replace(",padding:([^\s;}]+)\s([^\s;}]+)\s([^\s;}]+)\s(\\2),ims", "padding:$1 $2 $3", $contenu); + $contenu = preg_replace(",padding:([^\s;}]+)\s([^\s;}]+)\s(\\1)([;}!]),ims", "padding:$1 $2$4", $contenu); // raccourcir les margin qui le peuvent (sur 3 ou 2 valeurs) - $contenu = preg_replace(",margin:([^\s;}]+)\s([^\s;}]+)\s([^\s;}]+)\s(\\2),ims","margin:$1 $2 $3",$contenu); - $contenu = preg_replace(",margin:([^\s;}]+)\s([^\s;}]+)\s(\\1)([;}!]),ims","margin:$1 $2$4",$contenu); + $contenu = preg_replace(",margin:([^\s;}]+)\s([^\s;}]+)\s([^\s;}]+)\s(\\2),ims", "margin:$1 $2 $3", $contenu); + $contenu = preg_replace(",margin:([^\s;}]+)\s([^\s;}]+)\s(\\1)([;}!]),ims", "margin:$1 $2$4", $contenu); $contenu = trim($contenu); return $contenu; - } - else { + } else { // compression avancee en utilisant csstidy // beaucoup plus lent, mais necessaire pour placer des @media la ou il faut // si il y a deja des @media ou des @import // modele de sortie plus ou moins compact $template = 'high'; - if (isset($options['template']) AND in_array($options['template'],array('low','default','high','highest'))) + if (isset($options['template']) and in_array($options['template'], array('low', 'default', 'high', 'highest'))) { $template = $options['template']; + } // @media eventuel pour prefixe toutes les css // et regrouper plusieurs css entre elles $media = ""; - if (isset($options['media'])) - $media = "@media ".$options['media']." "; + if (isset($options['media'])) { + $media = "@media " . $options['media'] . " "; + } include_spip("lib/csstidy/class.csstidy"); $css = new csstidy(); // essayer d'optimiser les font, margin, padding avec des ecritures raccourcies - $css->set_cfg('optimise_shorthands',2); - $css->set_cfg('template',$template); + $css->set_cfg('optimise_shorthands', 1); + $css->set_cfg('template', $template); $css->parse($contenu); + return $css->print->plain($media); } } @@ -155,165 +191,77 @@ function minifier_css ($contenu, $options='') { * JavaScriptPacker * 62% de la taille initiale / 752 ms * - * Closure Compiler - * 44% de la taille initiale / 3 785 ms - * - * JavaScriptPacker + Closure Compiler - * 43% de la taille initiale / 3 100 ms au total - * - * Il est donc plus rapide&efficace - * - de packer d'abord en local avec JavaScriptPacker - * - d'envoyer ensuite au closure compiler - * Cela permet en outre d'avoir un niveau de compression decent si closure - * compiler echoue - * - * Dans cette fonction on ne fait que le compactage local, - * l'appel a closure compiler est fait une unique fois pour tous les js concatene - * afin d'eviter les requetes externes - * * @param string $flux * Contenu JS * @return string * Contenu JS minifié */ function minifier_js($flux) { - if (!strlen($flux)) + if (!strlen($flux)) { return $flux; + } include_spip('lib/JavascriptPacker/class.JavaScriptPacker'); $packer = new JavaScriptPacker($flux, 0, true, false); // en cas d'echec (?) renvoyer l'original if (!strlen($t = $packer->pack())) { - spip_log('erreur de minifier_js',_LOG_INFO_IMPORTANTE); - return $flux; - } - return $t; -} - + spip_log('erreur de minifier_js', _LOG_INFO_IMPORTANTE); -/** - * Minification additionnelle de JS - * - * Compacter du javascript plus intensivement - * grâce au google closure compiler - * - * @param string $content - * Contenu JS à compresser - * @param bool $file - * Indique si $content est ou non un fichier, et retourne un fichier dans ce dernier cas - * Si $file est une chaîne, c'est un nom de ficher sous lequel on écrit aussi le fichier destination - * @return string - * Contenu JS compressé - */ -function minifier_encore_js($content,$file=false) { - # Closure Compiler n'accepte pas des POST plus gros que 200 000 octets - # au-dela il faut stocker dans un fichier, et envoyer l'url du fichier - # dans code_url ; en localhost ca ne marche evidemment pas - if ($file) { - $nom = $content; - lire_fichier($nom, $content); - $dest = dirname($nom).'/'.md5($content.$file).'.js'; - if (file_exists($dest) AND (!is_string($file) OR file_exists($file))) - if (filesize($dest)) - return is_string($file)?$file:$dest; - else { - spip_log("minifier_encore_js: Fichier $dest vide",_LOG_INFO); - return $nom; - } + return $flux; } - if (!$file AND strlen($content)>200000) - return $content; - - include_spip('inc/distant'); - - $datas=array( - 'output_format' => 'text', - 'output_info' => 'compiled_code', - 'compilation_level' => 'SIMPLE_OPTIMIZATIONS', // 'SIMPLE_OPTIMIZATIONS', 'WHITESPACE_ONLY', 'ADVANCED_OPTIMIZATIONS' - ); - if (!$file OR strlen($content) < 200000) - $datas['js_code'] = $content; - else - $datas['url_code'] = url_absolue($nom); - - $cc = recuperer_page('http://closure-compiler.appspot.com/compile', - $trans=false, $get_headers=false, - $taille_max = null, - $datas, - $boundary = -1); - - if ($cc AND !preg_match(',^\s*Error,', $cc)) { - spip_log('Closure Compiler: success'); - $cc = "/* $nom + Closure Compiler */\n".$cc; - if ($file){ - ecrire_fichier ($dest, $cc, true); - ecrire_fichier ("$dest.gz", $cc, true); - $content = $dest; - if (is_string($file)){ - ecrire_fichier ($file, $cc, true); - spip_clearstatcache(true,$file); - ecrire_fichier ("$file.gz", $cc, true); - $content = $file; - } - } - else - $content = &$cc; - } else { - if ($file){ - spip_log("minifier_encore_js:Echec appel Closure Compiler. Ecriture fichier $dest vide",_LOG_INFO_IMPORTANTE); - ecrire_fichier ($dest, '', true); - } - } - return $content; + return $t; } /** * Une callback applicable sur chaque balise link qui minifie un fichier CSS - * + * * @param string $contenu * @param string $balise * @return string */ -function callback_minifier_css_file($contenu, $balise){ - return minifier_css($contenu, extraire_attribut($balise,'media')); +function callback_minifier_css_file($contenu, $balise) { + return minifier_css($contenu, extraire_attribut($balise, 'media')); } /** * Une callback applicable sur chaque balise script qui minifie un JS - * + * * @param string $contenu * @param string $balise * @return string */ -function callback_minifier_js_file($contenu, $balise){ +function callback_minifier_js_file($contenu, $balise) { return minifier_js($contenu); } /** * Minifier du HTML - * - * @param string $flux HTML à compresser + * + * @param string $flux HTML à compresser * @return string HTML compressé */ -function minifier_html($flux){ +function minifier_html($flux) { // si pas de contenu ni de balise html, ne rien faire - if (!strlen($flux) OR strpos($flux,"<")===FALSE) + if (!strlen($flux) or strpos($flux, "<") === false) { return $flux; + } static $options = null; - if (is_null($options)){ + if (is_null($options)) { $options = array(); - if ($GLOBALS['meta']['auto_compress_css'] == 'oui') + if ($GLOBALS['meta']['auto_compress_css'] == 'oui') { $options['cssMinifier'] = 'minifier_css'; - if ($GLOBALS['meta']['auto_compress_js'] == 'oui') + } + if ($GLOBALS['meta']['auto_compress_js'] == 'oui') { $options['jsMinifier'] = 'minifier_js'; + } include_spip('lib/minify_html/class.minify_html'); } - return Minify_HTML_SPIP::minify($flux,$options); + return Minify_HTML_SPIP::minify($flux, $options); } diff --git a/www/plugins-dist/compresseur/lang/compresseur.xml b/www/plugins-dist/compresseur/lang/compresseur.xml index 0f964a6c..b68e0513 100644 --- a/www/plugins-dist/compresseur/lang/compresseur.xml +++ b/www/plugins-dist/compresseur/lang/compresseur.xml @@ -1,78 +1,86 @@ - + - + - + - + - + - + - + + - + - + - + - + - + - + + - + + - + - + - + - + - - + + - + + - + + + + - + - + - + - + - + - + - + + diff --git a/www/plugins-dist/compresseur/lang/compresseur_ar.php b/www/plugins-dist/compresseur/lang/compresseur_ar.php index 3d97d863..8c6c9b92 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_ar.php +++ b/www/plugins-dist/compresseur/lang/compresseur_ar.php @@ -3,29 +3,28 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // E + 'explication_url_statique_ressources' => 'عنوان URL يتيح خدمة الملفات الثابتة (الصور، جافاسكريبت...) بدون الكعكة. +هو عموماً نطاق فرعي بديل يدل ايضاً الى الموقع.', + // I 'info_compresseur_titre' => 'التحسين والضغط', 'info_question_activer_compactage_css' => 'أوراق الانماط (CSS)؟', 'info_question_activer_compactage_js' => 'ملفات جافاسكريبت؟', - 'info_question_activer_compresseur' => 'تدفق HTTP؟', - 'item_compresseur_closure' => 'استخدام Google Closure Compiler [قيد التجرية]', 'item_compresseur_css' => 'تفعيل ضغط أوراق الأنماط (CSS)', - 'item_compresseur_html' => 'تفعيل ضغط HTML', 'item_compresseur_js' => 'تفعيل ضغط جافاسكريبت', + // L + 'label_url_statique_ressources' => 'موارد عناوين URL', + // T 'texte_compacter_avertissement' => 'حذار من تفعيل هذه الخيارات خلال تطوير الموقع: فالعناصر المضغوطة سوف تفقد مقروئيتها.', 'texte_compacter_script_css' => 'يستطيع SPIP ضغط رموز جافاسكريبت واوراق الأنماط ليخزنها في ملفات ثابتة، مما يسرّع عرض الموقع.', - 'texte_compresseur_page' => 'يستطيع SPIP، وبشكل آلي، ضغط كل صفحة يعرضها على -زوار الموقع. ويتيح هذا الخيار تحسين تدفق البيانات (فيصبح -الموقع اسرع حتى اذا كان الاتصال عبر تدفق ضعيف)، لكن - يتطلب قوة اكبر من خادم الموقع.', - 'titre_compacter_script_css' => 'ضغط الرموز البرمجية وأوراق الأنماط', - 'titre_compresser_flux_http' => 'ضغط صفحات HTML' + 'titre_compacter_script_css' => 'ضغط الرموز البرمجية وأوراق الأنماط' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_ast.php b/www/plugins-dist/compresseur/lang/compresseur_ast.php index 1b055408..b25468aa 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_ast.php +++ b/www/plugins-dist/compresseur/lang/compresseur_ast.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=ast // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,17 +13,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Igües y compresión', 'info_question_activer_compactage_css' => '¿Quies activar la compautación de les fueyes d’estilu (CSS)?', # MODIF 'info_question_activer_compactage_js' => '¿Quies activar la compautación de los scripts (JavaScript)?', # MODIF - 'info_question_activer_compresseur' => '¿Quies activar la compresión del tráficu HTTP?', # MODIF // T 'texte_compacter_avertissement' => 'Cuida de nun activar estes opciones durante el desarrollo del sitiu: los elementos compactaos dexen dafechu de ser lleibles.', 'texte_compacter_script_css' => 'SPIP pue compautar los scripts JavaScript y les fueyes d’estilu CSS, pa guardalos como archivos estáticos; esto acelera l’amosamientu del sitiu.', - 'texte_compresseur_page' => 'SPIP pue comprimir automáticamente toles páxines qu’unvía a los -visitantes del sitiu. Esti axuste permite optimizar l’anchu de banda (el -sitiu ye más rápidu tando tres d’un enllaz de baxa capacidá), pero -requier más potencia del sirvidor.', - 'titre_compacter_script_css' => 'Compautación de los scripts y CSS', - 'titre_compresser_flux_http' => 'Compresión del fluxu HTTP' # MODIF + 'titre_compacter_script_css' => 'Compautación de los scripts y CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_br.php b/www/plugins-dist/compresseur/lang/compresseur_br.php index a2893a66..6471ff1d 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_br.php +++ b/www/plugins-dist/compresseur/lang/compresseur_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,14 +13,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Gwellekaat ha gwaskañ', 'info_question_activer_compactage_css' => 'Ha c’hoant hoc’h eus ma vefe gwasket ar follennoù stil (CSS) ?', # MODIF 'info_question_activer_compactage_js' => 'Ha c’hoant hoc’h e vefe gwasket ar skriptoù javascript ?', # MODIF - 'info_question_activer_compresseur' => 'Ha c’hoant hoc’h eus e vefe gwasket al lanvad HTTP ?', # MODIF // T 'texte_compacter_avertissement' => 'Diwallit da chom hep gweredekaat an dibarzhioù-mañ e-keit hag emeur o sevel ho lec’hienn : n’hall ket an elfennoù gwasket bezañ lennet ken war-lerc’h.', 'texte_compacter_script_css' => 'Gallout a ra SPIP gwaskañ ar skriptoù javascript hag ar follennoù-stil CSS, evit o enrollañ er restroù difiñv; buanoc’h e teu al lec’hienn war wel.', - 'texte_compresseur_page' => 'Gallout a ra SPIP gwaskañ ent emgefre pep pajenn kaset da weladennerien al lec’hienn. Skañvoc’h eo evit ar bann drafet (buanoc’h ez aio evit ar c’hevreadennoù gorrek, da skouer), met goulenn a ra muioc’h a nerzh digant ar servijer.', - 'titre_compacter_script_css' => 'Gwaskañ ar furmskridoù hag ar follennoù-stil', - 'titre_compresser_flux_http' => 'Gwaskañ al lanvad HTTP' # MODIF + 'titre_compacter_script_css' => 'Gwaskañ ar furmskridoù hag ar follennoù-stil' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_ca.php b/www/plugins-dist/compresseur/lang/compresseur_ca.php index cafbd223..ac8e0fae 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_ca.php +++ b/www/plugins-dist/compresseur/lang/compresseur_ca.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=ca // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,14 +13,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Optimitzacions i compressió', 'info_question_activer_compactage_css' => 'Voleu activar la compressió dels fulls d’estil (CSS)?', # MODIF 'info_question_activer_compactage_js' => 'Voleu activat la compressió dels scripts (javascript)?', # MODIF - 'info_question_activer_compresseur' => 'Voleu activar la compressió del flux HTTP?', # MODIF // T 'texte_compacter_avertissement' => 'Estigueu alerta de no activar aquestes opcions durant el desenvolupament del vostre lloc: els elements compactats perdent tota llegibilitat. ', 'texte_compacter_script_css' => 'SPIP pot compactar els scripts javascript i els fulls d’estil CSS, per enregistrar-los a dins dels fitxers estàtics; això accelera la presentació del lloc Web.', - 'texte_compresseur_page' => 'SPIP pot comprimir automàticament cada pàgina que envia als visitants del lloc Web. Aquest reglatge permet optimitzar l’ample de banda (el lloc és més ràpid darrere una connexió més lenta), però demana més potència al sevidor.', - 'titre_compacter_script_css' => 'Compressió dels scripts i el CSS', - 'titre_compresser_flux_http' => 'Compressió del flux HTTP' # MODIF + 'titre_compacter_script_css' => 'Compressió dels scripts i el CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_co.php b/www/plugins-dist/compresseur/lang/compresseur_co.php index a07dfd9b..19a0515d 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_co.php +++ b/www/plugins-dist/compresseur/lang/compresseur_co.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=co // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,16 +13,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Uttimizazione è cumpressione', 'info_question_activer_compactage_css' => 'Vulete attivà a cumpressione di e foglie di stile (CSS)?', # MODIF 'info_question_activer_compactage_js' => 'Vulete attivà a cumpressione di i scripts (javascript)?', # MODIF - 'info_question_activer_compresseur' => 'Vulete attivà a cumpressione di u flussu HTTP?', # MODIF // T 'texte_compacter_avertissement' => 'Attenti à ùn attivà st’opzioni durante u sviluppu di u situ : L’elementi cumpressi ùn diventenu propriu più leghjitoghji.', 'texte_compacter_script_css' => 'SPIP pò cumpressà i scripts javascript è e foglie di stile CSS, da arregitrà li in i schedari stàtichi; cusì u situ diventa più veloce.', - 'texte_compresseur_page' => 'SPIP pò cumpressà in autumàticu ogni pàgina ch’ellu manda à i visitori di u situ. Cusì vene uttimizata a banda passante - (u situ diventa più veloce cù una cunnessione à dèbbitu bassu), ma richere putenza più maiò à u servore.', - 'titre_compacter_script_css' => 'Cumpressione di i scripts è CSS', - 'titre_compresser_flux_http' => 'Cumpressione di i flussi HTTP' # MODIF + 'titre_compacter_script_css' => 'Cumpressione di i scripts è CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_de.php b/www/plugins-dist/compresseur/lang/compresseur_de.php index fbc09596..751db84a 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_de.php +++ b/www/plugins-dist/compresseur/lang/compresseur_de.php @@ -3,29 +3,27 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // E + 'explication_url_statique_ressources' => 'Ein URL für statische Dateien (images, JS…), die ohne Cookie übertragen werden. Meistens handelt es dabie sich um eine Subdomain, die ebenfalls auf die Website geschlatet ist.', + // I 'info_compresseur_titre' => 'Optimierung und Kompression', 'info_question_activer_compactage_css' => 'CSS', 'info_question_activer_compactage_js' => 'Skripte', - 'info_question_activer_compresseur' => 'HTML', - 'item_compresseur_closure' => 'Google Closure Compiler verwenden [experimentell]', 'item_compresseur_css' => 'Kompression der Stylesheets aktivieren (CSS)', - 'item_compresseur_html' => 'Kompression von HTML aktivieren', 'item_compresseur_js' => 'Kompression der Skripte aktivieren (Javascript)', + // L + 'label_url_statique_ressources' => 'Ressourcen URL', + // T 'texte_compacter_avertissement' => 'Achtung: Bitte aktivieren Sie diese Option nicht während der Entwicklung Ihrer Site. Die komprimierten Elemente verlieren dadurch ihre Lesbarkeit.', 'texte_compacter_script_css' => 'SPIP kann Javascripte und CSS Stilvorlagen komprimieren. Dadurch wird die Anzeigegeschwindigkeit der Website erhöht.', - 'texte_compresseur_page' => 'SPIP kann alle Seiten, die zum Besucher übertragen werden -komprimieren.Diese Einstellung ermöglicht es, Bandbreite zu sparen (Die -Site wird über langsame Verbindungen schneller angezeigt), benötigt -jedoch zusätzliche Serverleistung.', - 'titre_compacter_script_css' => 'Skripte und CSS komprimieren', - 'titre_compresser_flux_http' => 'HTML komprimieren' + 'titre_compacter_script_css' => 'Skripte und CSS komprimieren' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_en.php b/www/plugins-dist/compresseur/lang/compresseur_en.php index ae6df255..528dcf60 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_en.php +++ b/www/plugins-dist/compresseur/lang/compresseur_en.php @@ -3,26 +3,27 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // E + 'explication_url_statique_ressources' => 'A URL that can serve static files (images, JS ...) without cookie. Usually an alternative subdomain that also points to the site.', + // I 'info_compresseur_titre' => 'Optimisation and compression', 'info_question_activer_compactage_css' => 'CSS', 'info_question_activer_compactage_js' => 'Scripts', - 'info_question_activer_compresseur' => 'HTML', - 'item_compresseur_closure' => 'Use Google Closure Compiler [experimental]', 'item_compresseur_css' => 'Enable stylesheets compression (CSS)', - 'item_compresseur_html' => 'Enable HTML compression', 'item_compresseur_js' => 'Enable scripts compression (javascript)', + // L + 'label_url_statique_ressources' => 'URL resources', + // T 'texte_compacter_avertissement' => 'Be careful not to activate these options during site development, as compressed elements are difficult to read and debug.', 'texte_compacter_script_css' => 'SPIP can compact Javascript files and CSS stylesheets and save them as static files. This makes the site display faster on browsers.', - 'texte_compresseur_page' => 'SPIP can automatically compress every page it sends. This option reduces bandwidth, making the site faster for lower speed connections), but it does require more resources from the server.', - 'titre_compacter_script_css' => 'Compression of scripts and CSS', - 'titre_compresser_flux_http' => 'HTML compression' + 'titre_compacter_script_css' => 'Compression of scripts and CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_eo.php b/www/plugins-dist/compresseur/lang/compresseur_eo.php index e79622df..1bdf65be 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_eo.php +++ b/www/plugins-dist/compresseur/lang/compresseur_eo.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=eo // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,21 +13,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Plejbonigoj kaj densigoj', 'info_question_activer_compactage_css' => 'CSS', 'info_question_activer_compactage_js' => 'Skriptoj', - 'info_question_activer_compresseur' => 'HTML', - 'item_compresseur_closure' => 'Uzi Google Closure Compiler [eksperimenta]', 'item_compresseur_css' => 'Aktivigi la densigon de la stilfolio (CSS)', - 'item_compresseur_html' => 'Aktivigi densigon de HTML', 'item_compresseur_js' => 'Aktivigi la densigon de la skriptoj (ĝavoskripto)', // T 'texte_compacter_avertissement' => 'Atentu ne ebligi tiujn opciojn dum disvolviĝo de via retejo : la densigaj elementoj perdas ĉian legeblecon.', 'texte_compacter_script_css' => 'SPIP povas densigi ĝavoskriptaj skriptoj kaj CSS stilfolioj, por registri ilin en statikaj dosieroj. Tio plirapidigas la afiŝon de la retejo.', - 'texte_compresseur_page' => 'SPIP povas aŭtomate densigi ĉiun paĝon kiun ĝi sendas al -retej-vizitantoj. Tiu agordo permesas optimumi la bendlarĝo (la -retejo estas pli rapida malantaŭ ligo kun malforta kapacito de traigivo), sed -postulas pli da potenco al la servilo.', - 'titre_compacter_script_css' => 'Densigo de skriptojn kaj CSS', - 'titre_compresser_flux_http' => 'Densigo de la HTTP-fluo' + 'titre_compacter_script_css' => 'Densigo de skriptojn kaj CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_es.php b/www/plugins-dist/compresseur/lang/compresseur_es.php index a3377d9a..3ce6cbde 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_es.php +++ b/www/plugins-dist/compresseur/lang/compresseur_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,21 +13,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Optimizaciones y compresión', 'info_question_activer_compactage_css' => 'CSS', 'info_question_activer_compactage_js' => 'Scripts', - 'info_question_activer_compresseur' => 'HTML', - 'item_compresseur_closure' => 'Utilizar Google Closure Compiler [experimental]', 'item_compresseur_css' => 'Activar la compresión de hojas de estilo (CSS)', - 'item_compresseur_html' => 'Activar la compresión del HTML', 'item_compresseur_js' => 'Activar la compresión de los scripts (javascript)', // T 'texte_compacter_avertissement' => 'Atención a no activar estas opciones durante el desarrollo de tu sitio: los elementos compactados pierden toda legibilidad.', 'texte_compacter_script_css' => 'SPIP puede compactar los scripts javascript y las hojas de estilo CSS, para almacenarlos en ficheros estáticos; esto acelera la presentación del sitio.', - 'texte_compresseur_page' => 'SPIP puede comprimir automáticamente cada página que envía a los -visitantes del sitio. Este ajuste permite optimizar la banda pasante (el -sitio es más rápido en caso de una conexión de baja banda pasante), pero -requiere más potencia del servidor.', - 'titre_compacter_script_css' => 'Compresión de los scripts y CSS', - 'titre_compresser_flux_http' => 'Compresión del HTML' + 'titre_compacter_script_css' => 'Compresión de los scripts y CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_eu.php b/www/plugins-dist/compresseur/lang/compresseur_eu.php index cf2b442d..ebaad037 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_eu.php +++ b/www/plugins-dist/compresseur/lang/compresseur_eu.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=eu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,12 +13,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Optimizatu eta konprimatu', 'info_question_activer_compactage_css' => 'CSS Estilo-orrien trinkotzea aktibatu al nahi duzu ?', # MODIF 'info_question_activer_compactage_js' => 'Javascript script-en trinkotzea aktibatu al nahi duzu ?', # MODIF - 'info_question_activer_compresseur' => 'HTTP korrontearen konprimitzea aktibatu al nahi duzu ?', # MODIF // T 'texte_compacter_avertissement' => 'Kontuz, aaukera horiek ez aktibatu zure gunearen garapenaren denboran : konprimitutako elementuek irakurgarritasuna galtzen dute.', - 'texte_compacter_script_css' => 'SPIPek javascript script-ak edo CSS estilo-orriak konprimitzen ahal ditu, fitxategi estatiko batzuetan grabatzeko ; horrek gunearen bistaratzea azeleratzen du.', - 'texte_compresseur_page' => 'SPIPek gunearen bisitariei bidaltzen duen orri bakotxa automatikoki konprimitzen ahal du. konfigurazio hunek banda-zabaleraren optimizatzea baimentzen du (abiadura ttipiko konexio baten gibelean gunea zaluago da), baina zerbitzariari indar gehiago eskatzen du.' + 'texte_compacter_script_css' => 'SPIPek javascript script-ak edo CSS estilo-orriak konprimitzen ahal ditu, fitxategi estatiko batzuetan grabatzeko ; horrek gunearen bistaratzea azeleratzen du.' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_fa.php b/www/plugins-dist/compresseur/lang/compresseur_fa.php index 684aac59..bebc6d30 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_fa.php +++ b/www/plugins-dist/compresseur/lang/compresseur_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,18 +13,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'بهينه‌سازي و فشرده سازي', 'info_question_activer_compactage_css' => 'سي.اس.اس', 'info_question_activer_compactage_js' => 'نويسه‌ها (اسكريپت‌ها)؟', - 'info_question_activer_compresseur' => 'اچ.تي.ام.ال', - 'item_compresseur_closure' => 'از گوگل كلوزر كامپايلر استفاده كنيد [تجربي]', 'item_compresseur_css' => 'فعال‌سازي پرونده‌هاي شيوه‌برگه‌ها (اس.سي.سي)؟', - 'item_compresseur_html' => 'فعال‌سازي فشرده‌سازي اچ‌‌.تي.ام.ال', 'item_compresseur_js' => 'فعال‌سازي فشرده‌سازي نويسه‌ها (جاوااسكيپت)؟', // T 'texte_compacter_avertissement' => 'در جريان توسعه‌ي سايت خود مراقب باشيد اين گزينه‌ها را فعال نسازيد:‌ خطازدايي از عناصر فشرده شده دشوار مي‌‌شود.', 'texte_compacter_script_css' => 'اسپيپ مي‌تواند فايل‌هاي جاواسكريپت و شيوه‌برگه‌هاي سي.اس.اس را فشرده كرده و در فال‌هاي استاتيك صبط كند. اين كار نمايش سايت را تسريع خواهد كرد. ', - 'texte_compresseur_page' => 'اسپيپ مي‌تواند خودكار هر صفحه را كه براي بازديدكنندگان مي‌فرستد فشرده كند. اين گزينه پهناي باند مورد استفاه را كم مي‌كند، سرعت سايت را در ارتباطات كم سرعت افزايش مي‌دهد،‌ اما منابع بيشتري را از سرور نياز خواهد داشت. ', - 'titre_compacter_script_css' => 'فشرده‌سازي نويسه‌ها و سي.اس.اس', - 'titre_compresser_flux_http' => 'فشرده‌سازي اچ.تي.ام.ال ' + 'titre_compacter_script_css' => 'فشرده‌سازي نويسه‌ها و سي.اس.اس' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_fr.php b/www/plugins-dist/compresseur/lang/compresseur_fr.php index a9fa0b4c..4db694a8 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_fr.php +++ b/www/plugins-dist/compresseur/lang/compresseur_fr.php @@ -1,29 +1,27 @@ 'Une URL qui permet de servir les fichiers statiques (images, JS…) sans cookie. Généralement un sous-domaine alternatif qui pointe aussi sur le site.', + // I 'info_compresseur_titre' => 'Optimisations et compression', 'info_question_activer_compactage_css' => 'CSS', 'info_question_activer_compactage_js' => 'Scripts', - 'info_question_activer_compresseur' => 'HTML', - 'item_compresseur_closure' => 'Utiliser Google Closure Compiler [expérimental]', 'item_compresseur_css' => 'Activer la compression des feuilles de style (CSS)', - 'item_compresseur_html' => 'Activer la compression du HTML', 'item_compresseur_js' => 'Activer la compression des scripts (javascript)', + // L + 'label_url_statique_ressources' => 'URL ressources', + // T 'texte_compacter_avertissement' => 'Attention à ne pas activer ces options durant le développement de votre site : les éléments compactés perdent toute lisibilité.', 'texte_compacter_script_css' => 'SPIP peut compacter les scripts javascript et les feuilles de style CSS, pour les enregistrer dans des fichiers statiques ; cela accélère l’affichage du site.', - 'texte_compresseur_page' => 'SPIP peut compresser automatiquement chaque page qu’il envoie aux -visiteurs du site. Ce réglage permet d’optimiser la bande passante (le -site est plus rapide derrière une liaison à faible débit), mais -demande plus de puissance au serveur.', - 'titre_compacter_script_css' => 'Compactage des scripts et CSS', - 'titre_compresser_flux_http' => 'Compression du HTML' + 'titre_compacter_script_css' => 'Compactage des scripts et CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_fr_fem.php b/www/plugins-dist/compresseur/lang/compresseur_fr_fem.php index ea24a5b7..2f38ea7e 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_fr_fem.php +++ b/www/plugins-dist/compresseur/lang/compresseur_fr_fem.php @@ -3,29 +3,27 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // E + 'explication_url_statique_ressources' => 'Une URL qui permet de servir les fichiers statiques (images, JS…) sans cookie. Généralement un sous-domaine alternatif qui pointe aussi sur le site.', + // I 'info_compresseur_titre' => 'Optimisations et compression', 'info_question_activer_compactage_css' => 'CSS', 'info_question_activer_compactage_js' => 'Scripts', - 'info_question_activer_compresseur' => 'HTML', - 'item_compresseur_closure' => 'Utiliser Google Closure Compiler [expérimental]', 'item_compresseur_css' => 'Activer la compression des feuilles de style (CSS)', - 'item_compresseur_html' => 'Activer la compression du HTML', 'item_compresseur_js' => 'Activer la compression des scripts (javascript)', + // L + 'label_url_statique_ressources' => 'URL ressources', + // T 'texte_compacter_avertissement' => 'Attention à ne pas activer ces options durant le développement de votre site : les éléments compactés perdent toute lisibilité.', 'texte_compacter_script_css' => 'SPIP peut compacter les scripts javascript et les feuilles de style CSS, pour les enregistrer dans des fichiers statiques ; cela accélère l’affichage du site.', - 'texte_compresseur_page' => 'SPIP peut compresser automatiquement chaque page qu’il envoie aux -visiteuses du site. Ce réglage permet d’optimiser la bande passante (le -site est plus rapide derrière une liaison à faible débit), mais -demande plus de puissance au serveur.', - 'titre_compacter_script_css' => 'Compactage des scripts et CSS', - 'titre_compresser_flux_http' => 'Compression du HTML' + 'titre_compacter_script_css' => 'Compactage des scripts et CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_fr_tu.php b/www/plugins-dist/compresseur/lang/compresseur_fr_tu.php index c9a20a28..3566bb45 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_fr_tu.php +++ b/www/plugins-dist/compresseur/lang/compresseur_fr_tu.php @@ -3,29 +3,27 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=fr_tu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // E + 'explication_url_statique_ressources' => 'Une URL qui permet de servir les fichiers statiques (images, JS…) sans cookie. Généralement un sous-domaine alternatif qui pointe aussi sur le site.', + // I 'info_compresseur_titre' => 'Optimisations et compression', 'info_question_activer_compactage_css' => 'CSS', 'info_question_activer_compactage_js' => 'Scripts', - 'info_question_activer_compresseur' => 'HTML', - 'item_compresseur_closure' => 'Utiliser Google Closure Compiler [expérimental]', 'item_compresseur_css' => 'Activer la compression des feuilles de style (CSS)', - 'item_compresseur_html' => 'Activer la compression du HTML', 'item_compresseur_js' => 'Activer la compression des scripts (javascript)', + // L + 'label_url_statique_ressources' => 'URL ressources', + // T 'texte_compacter_avertissement' => 'Attention à ne pas activer ces options durant le développement de ton site : les éléments compactés perdent toute lisibilité.', 'texte_compacter_script_css' => 'SPIP peut compacter les scripts javascript et les feuilles de style CSS, pour les enregistrer dans des fichiers statiques ; cela accélère l’affichage du site.', - 'texte_compresseur_page' => 'SPIP peut compresser automatiquement chaque page qu’il envoie aux -visiteurs du site. Ce réglage permet d’optimiser la bande passante (le -site est plus rapide derrière une liaison à faible débit), mais -demande plus de puissance au serveur.', - 'titre_compacter_script_css' => 'Compactage des scripts et CSS', - 'titre_compresser_flux_http' => 'Compression du HTML' + 'titre_compacter_script_css' => 'Compactage des scripts et CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_gl.php b/www/plugins-dist/compresseur/lang/compresseur_gl.php index 3c6d4ce4..56fa1a45 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_gl.php +++ b/www/plugins-dist/compresseur/lang/compresseur_gl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=gl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,17 +13,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Optimización e compresión', 'info_question_activer_compactage_css' => 'Quere activar a compactación das follas de estilo(CSS) ?', # MODIF 'info_question_activer_compactage_js' => 'Quere activar a compactación de scripts (javascript) ?', # MODIF - 'info_question_activer_compresseur' => 'Quere activar a compactación do fluxo HTTP ?', # MODIF // T 'texte_compacter_avertissement' => 'Atención para non activar estas opcións durante o desenvolvemento do seu web: os elementos compactados perden toda a súa lexibilidade.', 'texte_compacter_script_css' => 'SPIP pode compactar os scripts javascript e as follas de estilo CSS, para rexistralos nas fichas estáticas ; iso acelera a presentación do web.', - 'texte_compresseur_page' => 'SPIP pode comprimir automaticamente cada páxina que envía ao -visitante do web. Esta regraxe permite optimizar o ancho de banda (o -web é máis rápido ao seguirse unha ligazón de baixa velocidade), mais -demanda máis potencia do servidor.', - 'titre_compacter_script_css' => 'Compactación de scripts e CSS', - 'titre_compresser_flux_http' => 'Compactación do fluxo HTTP' # MODIF + 'titre_compacter_script_css' => 'Compactación de scripts e CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_he.php b/www/plugins-dist/compresseur/lang/compresseur_he.php index 81d7632a..c37b4188 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_he.php +++ b/www/plugins-dist/compresseur/lang/compresseur_he.php @@ -3,12 +3,12 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=he // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // I 'info_compresseur_titre' => 'אופטימציה וכיווץ' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_it.php b/www/plugins-dist/compresseur/lang/compresseur_it.php index dc35ae01..a91ae5ea 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_it.php +++ b/www/plugins-dist/compresseur/lang/compresseur_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,21 +13,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Ottimizzazione e compressione', 'info_question_activer_compactage_css' => 'CSS', 'info_question_activer_compactage_js' => 'Scripts', - 'info_question_activer_compresseur' => 'HTML', - 'item_compresseur_closure' => 'Utilizza Google Closure Compiler [sperimentale]', 'item_compresseur_css' => 'Attiva la compressione dei foglio di stile (CSS)', - 'item_compresseur_html' => 'Attivare la compressione del codice HTML', 'item_compresseur_js' => 'Attivare la compressione degli script (javascript)', // T 'texte_compacter_avertissement' => 'Fare attenzione a non attivare queste opzioni durante la fase di sviluppo del sito: gli elementi compressi sono completamente illeggibili.', 'texte_compacter_script_css' => 'SPIP può comprimere gli script javascript e i fogli di stile CSS, per registrarli nei file statici; ciò accelera la visualizzazione del sito.', - 'texte_compresseur_page' => 'SPIP può comprimere automaticamente tutte le pagine che invia ai -visitatori del sito. Questa impostazione permette di ottimizzare la banda passante (il -sito è più rapido in una connessione a bassa velocità), ma -richiede una maggiore potenza del server.', - 'titre_compacter_script_css' => 'Compressione degli script e dei CSS', - 'titre_compresser_flux_http' => 'Compressione del codice HTML' + 'titre_compacter_script_css' => 'Compressione degli script e dei CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_it_fem.php b/www/plugins-dist/compresseur/lang/compresseur_it_fem.php index 8919b8fd..a7872f2e 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_it_fem.php +++ b/www/plugins-dist/compresseur/lang/compresseur_it_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=it_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,17 +13,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Ottimizzazione e compressione', 'info_question_activer_compactage_css' => 'Si desidera attivare la compressione dei fogli di stile (CSS)?', # MODIF 'info_question_activer_compactage_js' => 'Si desidera attivare la compressione degli script (javascript)?', # MODIF - 'info_question_activer_compresseur' => 'Si desidera attivare la compressione del flusso HTTP?', # MODIF // T 'texte_compacter_avertissement' => 'Fare attenzione a non attivare queste opzioni durante la fase di sviluppo del sito: gli elementi compressi sono completamente illeggibili.', 'texte_compacter_script_css' => 'SPIP può comprimere gli script javascript e i fogli di stile CSS, per registrarli nei file statici; ciò accelera la visualizzazione del sito.', - 'texte_compresseur_page' => 'SPIP può comprimere automaticamente tutte le pagine che invia ai -visitatori del sito. Questa impostazione permette di ottimizzare la banda passante (il -sito è più rapido in una connessione a bassa velocità), ma -richiede una maggiore potenza del server.', - 'titre_compacter_script_css' => 'Compressione degli script e dei CSS', - 'titre_compresser_flux_http' => 'Compressione del flusso HTTP' # MODIF + 'titre_compacter_script_css' => 'Compressione degli script e dei CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_lb.php b/www/plugins-dist/compresseur/lang/compresseur_lb.php index 36f72235..538f7870 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_lb.php +++ b/www/plugins-dist/compresseur/lang/compresseur_lb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,18 +13,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Optimisatioun a Kompressioun', 'info_question_activer_compactage_css' => 'CSS', 'info_question_activer_compactage_js' => 'Skripten', - 'info_question_activer_compresseur' => 'HTML', - 'item_compresseur_closure' => 'Google Closure Compiler benotzen [experimentell]', 'item_compresseur_css' => 'Kompressioun vun de Style-Sheets (CSS) aschalten', - 'item_compresseur_html' => 'Kompressioun vum HTML aschalten', 'item_compresseur_js' => 'Kompressioun vun de Skripten (Javascript) aschalten', // T 'texte_compacter_avertissement' => 'Schalt dës Optiounen net während der Entwécklung vum Site an: déi kompriméiert Elementer si net einfach liesbar.', 'texte_compacter_script_css' => 'SPIP ka Javascript oder CSS Style-Sheets kompriméieren an als statesch Dokumenter späicheren; da ginn d’Säite vum Site méi séier gewisen.', - 'texte_compresseur_page' => 'SPIP kann automatesch all Säit kompriméieren déi gewise gëtt. Dës Astellung erlaabt Bandbreet ze spueren (d.h. de Site ass mat enger lueser Leitung méi séier), mais dat verlaangt méi Leeschtung vum Server.', - 'titre_compacter_script_css' => 'Skripten an CSS kompriméieren', - 'titre_compresser_flux_http' => 'HTML kompriméieren' + 'titre_compacter_script_css' => 'Skripten an CSS kompriméieren' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_nl.php b/www/plugins-dist/compresseur/lang/compresseur_nl.php index b06f2ff7..b326c5ab 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_nl.php +++ b/www/plugins-dist/compresseur/lang/compresseur_nl.php @@ -3,28 +3,27 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // E + 'explication_url_statique_ressources' => 'Een URL die kan dienen voor statische bestanden (afbeeldingen, JS…) zonder cookie. In het algemeen een alternatief subdomein dat ook naar de site verwijst.', + // I 'info_compresseur_titre' => 'Optimalisering en compressie', 'info_question_activer_compactage_css' => 'CSS', 'info_question_activer_compactage_js' => 'Scripts', - 'info_question_activer_compresseur' => 'HTML', - 'item_compresseur_closure' => 'Gebruik Google Sluiting Compiler [experimental]', - 'item_compresseur_css' => 'Activeer de compressie van stijlbladen (CSS)', - 'item_compresseur_html' => 'De compressie van het HTML activeren', + 'item_compresseur_css' => 'Activeer de compressie van stylesheets (CSS)', 'item_compresseur_js' => 'De compressie van de scripts activeren (javascript)', + // L + 'label_url_statique_ressources' => 'URL bronnen', + // T - 'texte_compacter_avertissement' => 'Wees voorzichtig om deze opties niet te activeren tijdens de ontwikkeling van uw site: compacte elementen verliezen hun leesbaarheid.', - 'texte_compacter_script_css' => 'SPIP kan compact de javascript scripts en de CSS stijl bladen, om ze te registreren in statische bestanden; dat versnelt de display van de site.', - 'texte_compresseur_page' => 'SPIP kan elke bladzijde automatisch samendrukken die hij naar - bezoekers van de site verzendt. Dit regelen maakt het mogelijk om de drukke reep te optimaliseren (de site is sneller achter een verbinding aan gering debiet), maar - vraagt meer macht aan de server.', - 'titre_compacter_script_css' => 'Compressie van de scripts en CSS', - 'titre_compresser_flux_http' => 'Compressie van het HTML' + 'texte_compacter_avertissement' => 'Gebruik deze opties liever niet tijdens de ontwikkeling van de site: gecomprimeerde elementen verliezen hun leesbaarheid.', + 'texte_compacter_script_css' => 'SPIP kan JavaScript en stylesheets (CSS) comprimeren, om ze vervolgens op te slaan in statische bestanden, wat de weergave van de site versnelt.', + 'titre_compacter_script_css' => 'Compressie van scripts en CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_oc_ni_mis.php b/www/plugins-dist/compresseur/lang/compresseur_oc_ni_mis.php new file mode 100644 index 00000000..9ab26d51 --- /dev/null +++ b/www/plugins-dist/compresseur/lang/compresseur_oc_ni_mis.php @@ -0,0 +1,29 @@ + 'Una URL que permete de servì lu fichié estàticou (image, JS…) sensa cookie. Generalamen un souta-doumani alternatiéu que pounta finda soubre soubre lou sit.', + + // I + 'info_compresseur_titre' => 'Òtimisacioun e coumpressioun', + 'info_question_activer_compactage_css' => 'CSS', + 'info_question_activer_compactage_js' => 'Script', + 'item_compresseur_css' => 'Ativà la coumpressioun dei fuèi de stil (CSS)', + 'item_compresseur_js' => 'Ativà la coumpressioun dei script (javascript)', + + // L + 'label_url_statique_ressources' => 'URL ressórça', + + // T + 'texte_compacter_avertissement' => 'Mèfi da noun ativà aqueli oupcioun dau tems dóu desfouloupamen dóu vouòstre sit : lu elemen serat perdon touta legibilità.', + 'texte_compacter_script_css' => 'SPIP pòu serà lu script javascript e li fuèi de stil CSS, per li registrà en de fichié estàticou ; acò achelerà l’afichage dóu sit.', + 'titre_compacter_script_css' => 'Coumpressioun dei script e CSS' +); diff --git a/www/plugins-dist/compresseur/lang/compresseur_pt.php b/www/plugins-dist/compresseur/lang/compresseur_pt.php index 1d4a63ed..3b5f6d93 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_pt.php +++ b/www/plugins-dist/compresseur/lang/compresseur_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,18 +13,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Optimização e compressão', 'info_question_activer_compactage_css' => 'CSS', 'info_question_activer_compactage_js' => 'Scripts', - 'info_question_activer_compresseur' => 'HTML', - 'item_compresseur_closure' => 'Utilizar Google Closure Compiler [experimental]', 'item_compresseur_css' => 'Activar a compressão das folhas de estilo (CSS)', - 'item_compresseur_html' => 'Activar a compressão de HTML', 'item_compresseur_js' => 'Activar a compressão de scripts (javascript)', // T 'texte_compacter_avertissement' => 'Tenha cuidado para não activar estas opções durante o desenvolvimento do seu sítio, pois os elementos comprimidos são difíceis de ler e depurar.', 'texte_compacter_script_css' => 'SPIP pode compactar ficheiros Javascript e folhas de estilo CSS, guardando-os como fiecheiros estáticos. Isso torna o sítio mais rápido nos navegadores.', - 'texte_compresseur_page' => 'SPIP pode comprimir automaticamente todas as páginas que envia. Essa opção reduz a largura de banda, tornando o sítio mais rápido (ideal para ligações lentas), mas requer mais recursos do servidor.', - 'titre_compacter_script_css' => 'Compressão dos scripts e CSS', - 'titre_compresser_flux_http' => 'Compressão de HTML' + 'titre_compacter_script_css' => 'Compressão dos scripts e CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_pt_br.php b/www/plugins-dist/compresseur/lang/compresseur_pt_br.php index 189f705b..5e372e9f 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_pt_br.php +++ b/www/plugins-dist/compresseur/lang/compresseur_pt_br.php @@ -3,26 +3,27 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=pt_br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // E + 'explication_url_statique_ressources' => 'Um URL que permite servir os arquivos estáticos (imagens, JS…) sem cookie. Geralmente um subdomínio alternativo também direcionado para o site.', + // I 'info_compresseur_titre' => 'Otimizações e compressão', 'info_question_activer_compactage_css' => 'CSS', 'info_question_activer_compactage_js' => 'Scripts', - 'info_question_activer_compresseur' => 'HTML', - 'item_compresseur_closure' => 'Usar o Google Closure Compiler [experimental]', 'item_compresseur_css' => 'Ativar a compressão das folhas de estilo (CSS)', - 'item_compresseur_html' => 'Ativar a compressão do HTML', 'item_compresseur_js' => 'Ativar a compressão dos scripts (javascript)', + // L + 'label_url_statique_ressources' => 'URL recursos', + // T 'texte_compacter_avertissement' => 'Atenção para não ativar estas opções durante o desenvolvimento do seu site: os elementos compactados perdem toda a legibilidade.', 'texte_compacter_script_css' => 'O SPIP pode compactar os scripts javascript e as folhas de estilo CSS, para gravá-los nos arquivos de estatísticas; isto acelera a exibição do site.', - 'texte_compresseur_page' => 'O SPIP pode comprimir automaticamente cada página que ele envia aos visitantes do site. Esta regulagem permite otimizar a banda de transmissão (le site torna-se mais rápido quando estiver sob uma conexão de banda baixa), mas demanda mais potência do servidor.', - 'titre_compacter_script_css' => 'Compactação de scripts e CSS', - 'titre_compresser_flux_http' => 'Compressão do HTML' + 'titre_compacter_script_css' => 'Compactação de scripts e CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_ro.php b/www/plugins-dist/compresseur/lang/compresseur_ro.php index 8a9beeac..c9f105e3 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_ro.php +++ b/www/plugins-dist/compresseur/lang/compresseur_ro.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=ro // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,14 +13,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Optimizări şi compresie', 'info_question_activer_compactage_css' => 'Doriţi să activaţi compactarea foilor de stil (CSS) ?', # MODIF 'info_question_activer_compactage_js' => 'Doriţi să activaţi compactarea scripturilor (javascript) ?', # MODIF - 'info_question_activer_compresseur' => 'Doriţi să activaţi compresia fluxului HTTP ?', # MODIF // T 'texte_compacter_avertissement' => 'Atenţie: nu activaţi aceste opţiuni în timpul dezvoltării site-ului dumneavoastră, pentru că elementele compactate îşi pierd lizibilitatea.', 'texte_compacter_script_css' => 'SPIP poate compacta script-urile javascript şi foile de stil CSS pentru a le înregistra în fişiere statice; aceasta operaţiune accelerează afişarea site-ului.', - 'texte_compresseur_page' => 'SPIP poate comprima în mod automatic fiecare pagină pe care o trimite vizitatorilor site-ului. Aceast reglaj permite să optimizaţi banda pasantă (site-ul este mai rapid chiar şi cu o conexiune internet cu debit scăzut) dar cere mai multe resurse server.', - 'titre_compacter_script_css' => 'Compactarea script-urilor şi a CSS-urlor', - 'titre_compresser_flux_http' => 'Comprimarea fluxului HTTP' # MODIF + 'titre_compacter_script_css' => 'Compactarea script-urilor şi a CSS-urlor' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_ru.php b/www/plugins-dist/compresseur/lang/compresseur_ru.php index 179f0ee9..d1290375 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_ru.php +++ b/www/plugins-dist/compresseur/lang/compresseur_ru.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,18 +13,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Оптимизация и сжатие исходного кода', 'info_question_activer_compactage_css' => 'Сжатие CSS:', 'info_question_activer_compactage_js' => 'Сжатие Javascript:', - 'info_question_activer_compresseur' => 'Сжатие HTML:', - 'item_compresseur_closure' => 'Использовать Google Closure Compiler ', 'item_compresseur_css' => 'Сжимать файлы CSS', - 'item_compresseur_html' => 'Сжимать HTML', 'item_compresseur_js' => 'Сжимать javascript', // T 'texte_compacter_avertissement' => 'Внимание! При включенном сжатии css и javascript файлов крайне затруднена отладка исходного кода. Используйте эти настройки после окончания работ по созданию сайта.', 'texte_compacter_script_css' => 'Для ускорения времени загрузки сайта SPIP может объединять и сжимать (минимизировать) Javascript и CSS файлы.', - 'texte_compresseur_page' => 'Для ускорения времени загрузки сайта SPIP может сжимать код страницы (gzip), это делает работу сайта более быстрой, но увеличивает нагрузку на сервер.', - 'titre_compacter_script_css' => 'Сжатие javascript и CSS', - 'titre_compresser_flux_http' => 'Сжатие HTML (gzip)' + 'titre_compacter_script_css' => 'Сжатие javascript и CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_sk.php b/www/plugins-dist/compresseur/lang/compresseur_sk.php index e7a32c76..07e144f7 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_sk.php +++ b/www/plugins-dist/compresseur/lang/compresseur_sk.php @@ -3,27 +3,28 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // E + 'explication_url_statique_ressources' => 'URL, ktorá môže obslúžiť statické súbory (obrázky, JS...) bez cookie. Obyčajne je to alternatívna subdoména, ktorá aj odkazuje na stránku.', + // I 'info_compresseur_titre' => 'Optimalizácia a kompresia', 'info_question_activer_compactage_css' => 'CSS', 'info_question_activer_compactage_js' => 'Skripty', - 'info_question_activer_compresseur' => 'HTML', - 'item_compresseur_closure' => 'Používať kompilátor Google Closure [experimentálny]', 'item_compresseur_css' => 'Aktivovať kompresiu súborov so štýlmi (CSS)', - 'item_compresseur_html' => 'Aktivovať kompresiu HTML', 'item_compresseur_js' => 'Aktivovať kompresiu skriptov (javascript)', + // L + 'label_url_statique_ressources' => 'Zdroje URL', + // T 'texte_compacter_avertissement' => 'Dajte si pozor na to, aby ste tieto možnosti nenastavili počas vývoja svojej stránky, lebo kompaktné prvky sa stanú nečitateľné.', 'texte_compacter_script_css' => 'SPIP dokáže zmenšiť Javascriptove súbory a súbory so štýlmi a uložiť ich ako statické súbory. Tak zrýchľuje zobrazenie stránky.', - 'texte_compresseur_page' => 'SPIP dokáže automaticky skomprimovať každú stránku, ktorú posiela návštevníkovi stránky. Tieto nastavenia optimalizujú šírku pásma (pri pomalšom pripojení je stránka rýchlejšia), ale vyžadujú si väčší výkon na strane servera. ', - 'titre_compacter_script_css' => 'Kompresia skriptov a CSS', - 'titre_compresser_flux_http' => 'Kompresia HTML' + 'titre_compacter_script_css' => 'Kompresia skriptov a CSS' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_sv.php b/www/plugins-dist/compresseur/lang/compresseur_sv.php index d9d74b92..83e2d699 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_sv.php +++ b/www/plugins-dist/compresseur/lang/compresseur_sv.php @@ -3,15 +3,14 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=sv // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // I 'info_compresseur_titre' => 'Optimering och komprimering', 'info_question_activer_compactage_css' => 'CSS', - 'info_question_activer_compactage_js' => 'Vill du aktivera komprimering av Javascript filer?', # MODIF - 'info_question_activer_compresseur' => 'Vill du aktivera komprimering av HTTP trafiken?' # MODIF + 'info_question_activer_compactage_js' => 'Vill du aktivera komprimering av Javascript filer?' # MODIF ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_tr.php b/www/plugins-dist/compresseur/lang/compresseur_tr.php index 47327486..8918d2c2 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_tr.php +++ b/www/plugins-dist/compresseur/lang/compresseur_tr.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=tr // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,14 +13,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_compresseur_titre' => 'Optimizasyon ve sıkıştırma', 'info_question_activer_compactage_css' => 'CSS’lerin sıkıştırılmasını aktive etmek ister misiniz ?', # MODIF 'info_question_activer_compactage_js' => 'Skriptlerin (javascript) sıkıştırılmasını aktive etmek ister misiniz ?', # MODIF - 'info_question_activer_compresseur' => 'HTTP akışının sıkıştırılmasını aktive etmek ister misiniz ?', # MODIF // T 'texte_compacter_avertissement' => 'Sitenizin geliştirilmesi esnasında bu seçenekleri aktive etmeyin : sıkıştırılmış elemanlar tüm okunabilirliklerini kaybederler.', 'texte_compacter_script_css' => 'SPIP javascript sktripleri ve CSSleri sıkıştırabilir ve bunları statik dosyalara kaydedebilir ; böylece sitenin gösterilmesi hızlanır.', - 'texte_compresseur_page' => 'SPIP site ziyaretçilerine gönderdiği her sayfayı sıkıştırabilir. Bu ayar bandı optimize eder. (site düşük debili bir bağlantıda hızlanmış olur) ama hizmet biriminden çok fazla güç ister.', - 'titre_compacter_script_css' => 'Skriptlerin ve CSSlerin sıkıştırılması', - 'titre_compresser_flux_http' => 'HTTP akısının sıkıştırılması' # MODIF + 'titre_compacter_script_css' => 'Skriptlerin ve CSSlerin sıkıştırılması' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/compresseur_uk.php b/www/plugins-dist/compresseur/lang/compresseur_uk.php index c703bca7..3d09106c 100644 --- a/www/plugins-dist/compresseur/lang/compresseur_uk.php +++ b/www/plugins-dist/compresseur/lang/compresseur_uk.php @@ -3,12 +3,27 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/compresseur?lang_cible=uk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // E + 'explication_url_statique_ressources' => 'URL, який може обслуговувати статичні файли (зображення, JS ...) без файлів cookie. Зазвичай альтернативний піддомен, який також вказує на сайт.', + // I - 'info_compresseur_titre' => 'Оптимізація і стиснення' -); + 'info_compresseur_titre' => 'Оптимізація і стискання коду', + 'info_question_activer_compactage_css' => 'Стискання CSS:', + 'info_question_activer_compactage_js' => 'Стискання Javascript:', + 'item_compresseur_css' => 'Стискувати файлы CSS', + 'item_compresseur_js' => 'Стискувати javascript', -?> + // L + 'label_url_statique_ressources' => 'URL ресурси', + + // T + 'texte_compacter_avertissement' => 'Увага! Коли увімкнено стискання css та javascript файлів дуже важким стає відлажування вихідного коду. Використовуйте ці налаштування після закінчення робіт по створенню сайту.', + 'texte_compacter_script_css' => 'Для прискорення завантаження сайту SPIP може об’єднувати і стискати (мінімізувати) Javascript та CSS файли.', + 'titre_compacter_script_css' => 'Стискання javascript и CSS' +); diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur.xml b/www/plugins-dist/compresseur/lang/paquet-compresseur.xml index a99f820c..6bfad6a0 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur.xml +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur.xml @@ -22,15 +22,25 @@ + + + + + + - + + + + + @@ -43,4 +53,7 @@ + + + diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_ar.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_ar.php index 4416eca7..1939ec55 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_ar.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compresseur_description' => 'ضغط أوراق الأنماط ورموز جافاسكريبت في ترويسة الصفحات في ecrire/ و/او الموقع العمومي', 'compresseur_slogan' => 'ضغط أوراق الأنماط ورموز جافاسكريبت' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_de.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_de.php index 05a35919..b7b6fd4d 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_de.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compresseur_description' => 'Kompression von CSS und Javascript-Code im Kopf der Seiten unter ecrire/ und/oder auf der öffentlichen Website', 'compresseur_slogan' => 'Kompression von CSS und Javascript-Code' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_en.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_en.php index 58b85bd0..f34dd55f 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_en.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compresseur_description' => 'Compression of css and javascript in the header of the HTML pages of ecrire/ and/or of the public site', 'compresseur_slogan' => 'CSS and javascript compression' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_eo.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_eo.php index cb2fc8fb..35304d95 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_eo.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_eo.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=eo // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compresseur_description' => 'Densigo de la css kaj javascript en la kaplinio de HTML-paĝoj pri ecrire/ kaj / aŭ de la publika retejo', 'compresseur_slogan' => 'Densigo css kaj javascript' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_es.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_es.php index 238fb141..66334b87 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_es.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compresseur_description' => 'Compresión de css y javascript en los encabezados de las páginas HTML de ecrire/ y/o del sitio público', 'compresseur_slogan' => 'Compresión de css y javascript ' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_fa.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_fa.php index 55babf64..1c164207 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_fa.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compresseur_description' => ' و/يا سايت همگاني ecrire/ فشرده‌سازي سي.اس.اس‌ها و جاوا اسكريپت در سرصفحه‌ي صفحات اچ.تي.ام.ال‌ ', 'compresseur_slogan' => 'فشرده سازي سي.اس.اس‌ها و جاوااسكريبت' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_fr.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_fr.php index 571b3e7a..0abf621f 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_fr.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_fr.php @@ -1,7 +1,9 @@ 'Compression des css et javascript dans l’en-tête des pages html de ecrire/ et/ou du site public', 'compresseur_slogan' => 'Compression des css et javascript' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_fr_fem.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_fr_fem.php index 5182e58c..ef20fee5 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_fr_fem.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compresseur_description' => 'Compression des css et javascript dans l’en-tête des pages html de ecrire/ et/ou du site public', 'compresseur_slogan' => 'Compression des css et javascript' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_fr_tu.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_fr_tu.php new file mode 100644 index 00000000..70e9b602 --- /dev/null +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_fr_tu.php @@ -0,0 +1,15 @@ + 'Compression des css et javascript dans l’en-tête des pages html de ecrire/ et/ou du site public', + 'compresseur_slogan' => 'Compression des css et javascript' +); diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_hac.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_hac.php new file mode 100644 index 00000000..da592a35 --- /dev/null +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_hac.php @@ -0,0 +1,15 @@ + 'دروسکەودەی فشاردریاو سی‌ئێس‌ئێس و جاڤا سکریپتی چە لاو سەری پەڕەکاۋە چیروecrire/ و/یا سەرو پەڕەی سەرەكی پەڕیانەكەیۆ', + 'compresseur_slogan' => 'دروسکەردەی فشاردریاو سی‌ئێس‌ئێس و جاڤا سکریپتی' +); diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_it.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_it.php index e1d1d6b2..5dea232e 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_it.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,5 +14,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( nell’intestazione delle pagine html di ecrire/ e/o del sito pubblico pubblico.', 'compresseur_slogan' => 'Compressione di CSS e javascript' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_lb.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_lb.php index 3daf8ca6..810d5d9e 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_lb.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_lb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compresseur_description' => 'Compressioun vun CSS a Javascript am Header vun den HTML-Säiten vun ecrire/ an/oder dem ëffentleche Site', 'compresseur_slogan' => 'Compressioun vun CSS a Javascript' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_nl.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_nl.php index 497259f5..4f5062f1 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_nl.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_nl.php @@ -3,13 +3,13 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // C - 'compresseur_description' => 'Compressie van de css en javascript in de hoofding van html paginas uit ecrire/ en/of van het publiek site.', # Wikipedia: compressie van bestanden - 'compresseur_slogan' => 'Compressie van css en javascript' + 'compresseur_description' => 'Compressie van CSS en JavaScript in de heading van HTML-paginas uit ecrire/ en/of van het publieke site.', # Wikipedia: compressie van bestanden + 'compresseur_slogan' => 'Compressie van CSS en JavaScript' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_oc_ni_mis.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_oc_ni_mis.php new file mode 100644 index 00000000..5d78a699 --- /dev/null +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_oc_ni_mis.php @@ -0,0 +1,15 @@ + 'Coumpressioun dei css e javascript en la prima-testa dei pàgina html de ecrire/ e/o dóu sit pùblicou', + 'compresseur_slogan' => 'Coumpressioun dei css e javascript' +); diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_pt.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_pt.php index dc4ef026..a43a8988 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_pt.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compresseur_description' => 'Compressão de css e javascript no cabeçalho das páginas HTML de ecrire/ e/ou do sítio público.', 'compresseur_slogan' => 'Compressão de css e javascript' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_pt_br.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_pt_br.php index e78830a6..e5e6e5c7 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_pt_br.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_pt_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=pt_br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compresseur_description' => 'Compressão dos css e javascript nos cabeçalhos das páginas html de ecrire/ e/ou do site público', 'compresseur_slogan' => 'Compressão dos css e javascript' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_ru.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_ru.php index b1668304..6e5fe96c 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_ru.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_ru.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compresseur_description' => 'Сжимает css и javascript файлы для уменьшения времени загрузки. Используется как на основном сайте, так и в его администраторской части ecrire/ ', 'compresseur_slogan' => 'Плагин для сжатия CSS и Javascript файлов' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_sk.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_sk.php index b118ec04..50b44f26 100644 --- a/www/plugins-dist/compresseur/lang/paquet-compresseur_sk.php +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-compresseur?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'compresseur_description' => 'Kompresia css a javascriptu v hlavičke html stránok ecrire/ a/lebo na verejne prístupnej stránke', 'compresseur_slogan' => 'Kompresia css a javascriptu' ); - -?> diff --git a/www/plugins-dist/compresseur/lang/paquet-compresseur_uk.php b/www/plugins-dist/compresseur/lang/paquet-compresseur_uk.php new file mode 100644 index 00000000..12dd580f --- /dev/null +++ b/www/plugins-dist/compresseur/lang/paquet-compresseur_uk.php @@ -0,0 +1,15 @@ + 'Стискає css та javascript файли для зменьшення часу завантаження. Використовується як на основному сайті, так і в його адміністративній частині ecrire/ ', + 'compresseur_slogan' => 'Плагін для стискання CSS та Javascript файлів' +); diff --git a/www/plugins-dist/compresseur/lib/JavascriptPacker/class.JavaScriptPacker.php b/www/plugins-dist/compresseur/lib/JavascriptPacker/class.JavaScriptPacker.php index 0776fe60..9164ae28 100644 --- a/www/plugins-dist/compresseur/lib/JavascriptPacker/class.JavaScriptPacker.php +++ b/www/plugins-dist/compresseur/lib/JavascriptPacker/class.JavaScriptPacker.php @@ -89,7 +89,7 @@ class JavaScriptPacker { ); // https://code.spip.net/@JavaScriptPacker - function JavaScriptPacker($_script, $_encoding = 62, $_fastDecode = true, $_specialChars = false) + function __construct($_script, $_encoding = 62, $_fastDecode = true, $_specialChars = false) { $this->_script = $_script . "\n"; if (array_key_exists($_encoding, $this->LITERAL_ENCODING)) diff --git a/www/plugins-dist/compresseur/lib/csstidy/README b/www/plugins-dist/compresseur/lib/csstidy/README index 9c904999..b4405fdd 100644 --- a/www/plugins-dist/compresseur/lib/csstidy/README +++ b/www/plugins-dist/compresseur/lib/csstidy/README @@ -3,6 +3,9 @@ CSSTidy CSSTidy is a CSS minifier +v1.5.6 + fixes minor bugs, mainly on CSS3 properties/units + v1.5.2 is PHP 5.4+ compliant, removes use of GLOBALS, fixes some bugs, integrates CSS3 units and now available on https://packagist.org/packages/cerdic/css-tidy diff --git a/www/plugins-dist/compresseur/lib/csstidy/class.csstidy.php b/www/plugins-dist/compresseur/lib/csstidy/class.csstidy.php index ff380a94..4410da71 100644 --- a/www/plugins-dist/compresseur/lib/csstidy/class.csstidy.php +++ b/www/plugins-dist/compresseur/lib/csstidy/class.csstidy.php @@ -94,7 +94,7 @@ require('class.csstidy_optimise.php'); * An online version should be available here: http://cdburnerxp.se/cssparse/css_optimiser.php * @package csstidy * @author Florian Schmitz (floele at gmail dot com) 2005-2006 - * @version 1.5.5 + * @version 1.5.6 */ class csstidy { @@ -147,7 +147,7 @@ class csstidy { * @var string * @access private */ - public $version = '1.5.5'; + public $version = '1.5.6'; /** * Stores the settings * @var array diff --git a/www/plugins-dist/compresseur/lib/csstidy/class.csstidy_optimise.php b/www/plugins-dist/compresseur/lib/csstidy/class.csstidy_optimise.php index 1ceb21fc..bfa83729 100644 --- a/www/plugins-dist/compresseur/lib/csstidy/class.csstidy_optimise.php +++ b/www/plugins-dist/compresseur/lib/csstidy/class.csstidy_optimise.php @@ -74,7 +74,7 @@ class csstidy_optimise { return; } - if ($this->parser->get_cfg('merge_selectors') === 2) { + if ((int)$this->parser->get_cfg('merge_selectors') === 2) { foreach ($this->css as $medium => $value) { $this->merge_selectors($this->css[$medium]); } @@ -400,9 +400,9 @@ class csstidy_optimise { if ($number[1] == '' && in_array($this->property, $unit_values, true)) { $number[1] = 'px'; } - } else { - $number[1] = ''; - } + } elseif ($number[1] != 's' && $number[1] != 'ms') { + $number[1] = ''; + } $temp[$l] = $number[0] . $number[1]; } diff --git a/www/plugins-dist/compresseur/lib/csstidy/class.csstidy_print.php b/www/plugins-dist/compresseur/lib/csstidy/class.csstidy_print.php index 5f4c2cd4..762b26ee 100644 --- a/www/plugins-dist/compresseur/lib/csstidy/class.csstidy_print.php +++ b/www/plugins-dist/compresseur/lib/csstidy/class.csstidy_print.php @@ -200,6 +200,12 @@ class csstidy_print { $this->import[$i] = '"' . substr($this->import[$i], 4, -1) . '"'; $this->parser->log('Optimised @import : Removed "url("', 'Information'); } + else if (!preg_match('/^".+"$/',$this->import[$i])) { + // fixes a bug for @import ".." instead of the expected @import url("..") + // If it comes in due to @import ".." the "" will be missing and the output will become @import .. (which is an error) + $this->import[$i] = '"' . $this->import[$i] . '"'; + } + $output .= $template[0] . '@import ' . $template[5] . $this->import[$i] . $template[6] . $template[13]; } } diff --git a/www/plugins-dist/compresseur/lib/jQl/README b/www/plugins-dist/compresseur/lib/jQl/README new file mode 100644 index 00000000..1d2e58c8 --- /dev/null +++ b/www/plugins-dist/compresseur/lib/jQl/README @@ -0,0 +1,46 @@ +JQuery Loader +============= + +Help to async load jQuery and supporting inline javascript with calls like: + +$(function(){}) + +or + +$(document).ready(function(){}) + + +Include it, then just call: + +jQl.loadjQ('//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'); + +You can also use it to load jQuery-dependent module in parallel, +it will be queue and run after jQuery is loaded: + +jQl.loadjQ('//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'); +jQl.loadjQdep('my.example.com/js/myplugin.jquery.js'); + +If you use a defer inline script, you have to manually call boot() function : + + + + +jQuery will be loaded without blocking browser rendering, +and during this all inline calls to $(document).ready() and $.getScript() will be queued. + + +As soon as jQuery is ready, +all queued inline calls will be run respecting their initial order. + +Be careful +========== + +At the moment, inline call executions are not waiting jQuery-dependent modules, +but only jQuery core. + +However, when jQuery is loaded, jQuery-dependent modules already loaded +are run before inline scripts. But if some modules are longer to load and arrive +after jQuery, they will be run after queued inline calls. + +v 1.2.0 +(c) 2010-2016 Cedric Morin licence GPL diff --git a/www/plugins-dist/compresseur/lib/jQl/README.md b/www/plugins-dist/compresseur/lib/jQl/README.md new file mode 100644 index 00000000..1d2e58c8 --- /dev/null +++ b/www/plugins-dist/compresseur/lib/jQl/README.md @@ -0,0 +1,46 @@ +JQuery Loader +============= + +Help to async load jQuery and supporting inline javascript with calls like: + +$(function(){}) + +or + +$(document).ready(function(){}) + + +Include it, then just call: + +jQl.loadjQ('//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'); + +You can also use it to load jQuery-dependent module in parallel, +it will be queue and run after jQuery is loaded: + +jQl.loadjQ('//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'); +jQl.loadjQdep('my.example.com/js/myplugin.jquery.js'); + +If you use a defer inline script, you have to manually call boot() function : + + + + +jQuery will be loaded without blocking browser rendering, +and during this all inline calls to $(document).ready() and $.getScript() will be queued. + + +As soon as jQuery is ready, +all queued inline calls will be run respecting their initial order. + +Be careful +========== + +At the moment, inline call executions are not waiting jQuery-dependent modules, +but only jQuery core. + +However, when jQuery is loaded, jQuery-dependent modules already loaded +are run before inline scripts. But if some modules are longer to load and arrive +after jQuery, they will be run after queued inline calls. + +v 1.2.0 +(c) 2010-2016 Cedric Morin licence GPL diff --git a/www/plugins-dist/compresseur/lib/jQl/jQl.js b/www/plugins-dist/compresseur/lib/jQl/jQl.js new file mode 100644 index 00000000..fe1defba --- /dev/null +++ b/www/plugins-dist/compresseur/lib/jQl/jQl.js @@ -0,0 +1,291 @@ +/** + * JQuery Loader + * + * Help to async load jQuery and supporting inline javascript with calls like + * $(function(){}) + * or + * $(document).ready(function(){}) + * + * Include it, then just call : + * jQl.loadjQ('//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'); + * + * You can also use it to load jQuery-dependent module in parallel, + * it will be queue and run after jQuery is loaded : + * jQl.loadjQ('//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'); + * jQl.loadjQdep('my.example.com/js/myplugin.jquery.js'); + * + * If you use a defer inline script, you have to manually call boot() function : + * + * <script defer type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> + * <script type="text/javascript">jQl.boot();</script> + * + * + * + * jQuery will be loaded without blocking browser rendering, + * and during this all inline calls to $(document).ready() and $.getScript() + * will be queued. + * As soon as jQuery is ready, all queued ready() and getScript() calls will be run + * respecting their initial order + * + * Be careful : + * At the moment, inline call and getScript executions are not waiting jQuery-dependent modules, + * but only jQuery core + * However, when jQuery is loaded, jQuery-dependent modules already loaded + * are run before inline scripts. But if some modules are longer to load and arrive + * after jQuery, they will be run after queued inline calls + * + * v 1.2.0 + * (c) 2010-2016 Cedric Morin licence GPL + * + */ +var jQl={ + /** + * the inline calls queue + */ + "q":[], + + /** + * the jQuery dependencies xhr loaded queue + */ + "dq":[], + + /** + * the jQuery.getScript queue + */ + "gs":[], + + /** + * the ready function that collect calls and put it in the queue + */ + "ready":function(f){ + if(typeof f=='function'){ + jQl.q.push(f); + } + // return jQl in order to support jQuery(document).ready() + return jQl; + }, + "getScript":function(s,c){ + jQl.gs.push([s,c]); + }, + + /** + * unqueue ready() function + * run all queues inline $.ready() calls + * in the right order and purge the queue + * + */ + "unq":function(){ + for(var i=0;i @@ -121,8 +124,6 @@ class Minify_HTML { * * 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If * unset, minify will sniff for an XHTML doctype. - * - * @return null */ public function __construct($html, $options = array()) { @@ -199,7 +200,7 @@ class Minify_HTML { // remove ws around block/undisplayed elements $this->_html = preg_replace('/\\s+(<\\/?(?:area|base(?:font)?|blockquote|body' - .'|caption|center|cite|col(?:group)?|dd|dir|div|dl|dt|fieldset|form' + .'|caption|center|col(?:group)?|dd|dir|div|dl|dt|fieldset|form' .'|frame(?:set)?|h[1-6]|head|hr|html|legend|li|link|map|menu|meta' .'|ol|opt(?:group|ion)|p|param|t(?:able|body|head|d|h||r|foot|itle)' .'|ul)\\b[^>]*>)/i', '$1', $this->_html); @@ -325,4 +326,4 @@ class Minify_HTML { { return ($this->_isXhtml && preg_match('/(?:[<&]|\\-\\-|\\]\\]>)/', $str)); } -} \ No newline at end of file +} diff --git a/www/plugins-dist/compresseur/paquet.xml b/www/plugins-dist/compresseur/paquet.xml index e9eaed63..99a5de7f 100644 --- a/www/plugins-dist/compresseur/paquet.xml +++ b/www/plugins-dist/compresseur/paquet.xml @@ -1,11 +1,11 @@ +> Compresseur @@ -18,10 +18,10 @@ - + - - + + \ No newline at end of file diff --git a/www/plugins-dist/compresseur/tests/compacte.html b/www/plugins-dist/compresseur/tests/compacte.html index 500e857d..50a22c22 100644 --- a/www/plugins-dist/compresseur/tests/compacte.html +++ b/www/plugins-dist/compresseur/tests/compacte.html @@ -3,7 +3,8 @@ Teste les filtres |compacte_xx ] - +#SET{err1,''} +#SET{err2,''} [(#REM) ----------------- compacte_js ----------------- diff --git a/www/plugins-dist/compresseur/tests/compacte_css.php b/www/plugins-dist/compresseur/tests/compacte_css.php index 783d5356..ef2ecd40 100644 --- a/www/plugins-dist/compresseur/tests/compacte_css.php +++ b/www/plugins-dist/compresseur/tests/compacte_css.php @@ -5,77 +5,87 @@ * */ - $test = 'minifier_css'; - $remonte = "../"; - while (!is_dir($remonte."ecrire")) - $remonte = "../$remonte"; - require $remonte.'tests/test.inc'; - $ok = true; - - include_spip('inc/compresseur_minifier'); - - lire_fichier(dirname(__FILE__)."/css/source.css", $css_code); - - // test du compacteur simple - lire_fichier(dirname(__FILE__)."/css/expected.css", $expected); - - $compacte = minifier_css($css_code); - if (rtrim($compacte)!=rtrim($expected)) { - erreur("minifier_css()",$compacte,$expected); - $ok = false; - } - - // le compacteur simple doit donner le meme resultat - // avec un media all - $compacte = minifier_css($css_code,'all'); - if (rtrim($compacte)!=rtrim($expected)) { - erreur("minifier_css('all')",$compacte,$expected); - $ok = false; - } - - lire_fichier(dirname(__FILE__)."/css/expected_more.css", $expected); - $compacte = minifier_css($css_code,array()); - if (rtrim($compacte)!=rtrim($expected)) { - erreur("minifier_css(array())",$compacte,$expected); - $ok = false; - } - - lire_fichier(dirname(__FILE__)."/css/expected_more_screen.css", $expected); - $compacte = minifier_css($css_code,'screen'); - if (rtrim($compacte)!=rtrim($expected)) { - erreur("minifier_css('screen')",$compacte,$expected); - $ok = false; - } - - $compacte = minifier_css($css_code,array('media'=>'screen')); - if (rtrim($compacte)!=rtrim($expected)) { - erreur("minifier_css(array('media'=>'screen'))",$compacte,$expected); - $ok = false; - } - - lire_fichier(dirname(__FILE__)."/css/expected_highest_screen.css", $expected); - $compacte = minifier_css($css_code,array('media'=>'screen','template'=>'highest')); - if (rtrim($compacte)!=rtrim($expected)) { - erreur("minifier_css(array('media'=>'screen','template'=>'highest'))",$compacte,$expected); - $ok = false; - } - - lire_fichier(dirname(__FILE__)."/css/source_simple.css", $css_code); - - lire_fichier(dirname(__FILE__)."/css/expected_simple.css", $expected); - $compacte = minifier_css($css_code,'screen'); - if (rtrim($compacte)!=rtrim($expected)) { - erreur("minifier_css('screen')",$compacte,$expected); - $ok = false; - } - - - if ($ok) - echo "OK"; - - function erreur($titre,$result,$expected){ - echo "Erreur $titre
    "; - echo "Resultat:
    $result
    "; - echo "Attendu :
    $expected
    "; - } -?> \ No newline at end of file +$test = 'minifier_css'; +$remonte = '../'; +while (!is_dir($remonte . 'ecrire')) { + $remonte = "../$remonte"; +} +require $remonte . 'tests/test.inc'; +$ok = true; + +include_spip('inc/compresseur_minifier'); +include_spip('inc/filtres'); + +lire_fichier(dirname(__FILE__) . '/css/source.css', $css_code); + +// test du compacteur simple +lire_fichier(dirname(__FILE__) . '/css/expected.css', $expected); + +$compacte = minifier_css($css_code); +if (rtrim($compacte) != rtrim($expected)) { + erreur('minifier_css()', $compacte, $expected); + $ok = false; +} + +// le compacteur simple doit donner le meme resultat +// avec un media all +$compacte = minifier_css($css_code, 'all'); +if (rtrim($compacte) != rtrim($expected)) { + erreur("minifier_css('all')", $compacte, $expected); + $ok = false; +} + +lire_fichier(dirname(__FILE__) . '/css/expected_more.css', $expected); +$compacte = minifier_css($css_code, array()); +if (rtrim($compacte) != rtrim($expected)) { + erreur('minifier_css(array())', $compacte, $expected); + $ok = false; +} + +lire_fichier(dirname(__FILE__) . '/css/expected_more_screen.css', $expected); +$compacte = minifier_css($css_code, 'screen'); +if (rtrim($compacte) != rtrim($expected)) { + erreur("minifier_css('screen')", $compacte, $expected); + $ok = false; +} + +$compacte = minifier_css($css_code, array('media' => 'screen')); +if (rtrim($compacte) != rtrim($expected)) { + erreur("minifier_css(array('media'=>'screen'))", $compacte, $expected); + $ok = false; +} + +lire_fichier(dirname(__FILE__) . '/css/expected_highest_screen.css', $expected); +$compacte = minifier_css($css_code, array('media' => 'screen', 'template' => 'highest')); +if (rtrim($compacte) != rtrim($expected)) { + erreur("minifier_css(array('media'=>'screen','template'=>'highest'))", $compacte, $expected); + $ok = false; +} + +lire_fichier(dirname(__FILE__) . '/css/source_simple.css', $css_code); + +lire_fichier(dirname(__FILE__) . '/css/expected_simple.css', $expected); +$compacte = minifier_css($css_code, 'screen'); +if (rtrim($compacte) != rtrim($expected)) { + erreur("minifier_css('screen')", $compacte, $expected); + $ok = false; +} + +lire_fichier(dirname(__FILE__) . '/css/expected_url_abs.css', $expected); +lire_fichier(dirname(__FILE__) . '/css/source_url_abs.css', $source); +$compacte = urls_absolues_css($source, 'http://example.org/squelettes/source.css'); +if (rtrim($compacte) != rtrim($expected)) { + erreur('urls_absolues_css()', $compacte, $expected); + $ok = false; +} + + +if ($ok) { + echo 'OK'; +} + +function erreur($titre, $result, $expected) { + echo "Erreur $titre
    "; + echo "Resultat:
    $result
    "; + echo "Attendu :
    $expected
    "; +} diff --git a/www/plugins-dist/compresseur/tests/css/expected.css b/www/plugins-dist/compresseur/tests/css/expected.css index 8a03e769..b3130929 100644 --- a/www/plugins-dist/compresseur/tests/css/expected.css +++ b/www/plugins-dist/compresseur/tests/css/expected.css @@ -80,4 +80,6 @@ th{background-color:#FADD31;background-repeat:repeat-x;color:#68685E;font-size:1 .image-hspace{margin-right:3px} .clear{clear:both} .degrade{background-color:#777;background:-webkit-gradient(linear,left top,left bottom,from(#999),to(#666));background-image:-moz-linear-gradient(top,#999,#666);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#999999',endColorstr='#666666');filter:progid:DXImageTransform.Microsoft.Shadow(color=#666666,direction=146,Strength=5);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#999999',endColorstr='#666666')";filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#ff999999',endColorstr='#ff666666')} -@media print{.degrade{background:none}} \ No newline at end of file +@media print{.degrade{background:none}} +@keyframes NAME-YOUR-ANIMATION{0%{opacity:0} +100%{opacity:1}} \ No newline at end of file diff --git a/www/plugins-dist/compresseur/tests/css/expected_highest_screen.css b/www/plugins-dist/compresseur/tests/css/expected_highest_screen.css index 4faa98b4..e5e9f12b 100644 --- a/www/plugins-dist/compresseur/tests/css/expected_highest_screen.css +++ b/www/plugins-dist/compresseur/tests/css/expected_highest_screen.css @@ -1 +1 @@ -@media screen{.markItUpHeader{text-align:left}.float-l{float:left}.form-suggest{height:200px;background:#DEE2D0;vertical-align:top}.form-input input{font-size:10px}}@media print{.hide{display:none}}@media screen{.form-input textarea{font-size:11px;width:350px}.form-label{font-size:10px;font-weight:700;line-height:25px;padding-right:10px;text-align:right;width:100px;color:#39738F}.font-9{font-size:9px}.form-topic{font-weight:700}.form-error{color:red}.inline{display:inline}.space-10{clear:both;font-size:10px;height:10px;line-height:10px}.suggest-success{color:green;padding-left:10px;font-size:11px;font-weight:700}.top{vertical-align:top}table td{padding:3px}a:link,a:active,a:visited,a.postlink{color:#069;text-decoration:none}a:hover{color:#DD6900}a.admin:hover,a.mod:hover{color:#DD6900}a.but,a.but:hover,a.but:visited{color:#000;text-decoration:none}a.topictitle:visited{color:#5493B4}a.topictitle:hover{color:#DD6900}body{color:#000;font:11px Verdana,Arial,Helvetica,sans-serif;margin:0 10px 10px;padding:0;overflow:auto}font,th,td,p{font:12px Verdana,Arial,Helvetica,sans-serif}form{display:inline}hr{border:0 solid #FFF;border-top-width:1px;height:0}img{border:0 solid}input{font:11px Verdana,Arial,Helvetica,sans-serif}input.button,input.liteoption,.fakebut{background:#FAFAFA;border:1px solid #000;font-size:11px}input.catbutton{background:#FAFAFA;border:1px solid #000;font-size:10px}input.mainoption{background:#FAFAFA;border:1px solid #000;font-size:11px;font-weight:700}input.post,textarea.post{background:#FFF;border:1px solid #000;font:11px Verdana,Arial,Helvetica,sans-serif;padding-bottom:2px;padding-left:2px}select{background:#FFF;font:11px Verdana,Arial,Helvetica,sans-serif}table{text-align:left}td{vertical-align:middle}td.cat{background-color:#C2C6BA;font-weight:700;height:20px;letter-spacing:1px;text-indent:4px}td.genmed,.genmed{font-size:11px}td.rowpic{background:#C2C6BA}td.spacerow{background:#E5E6E2}th{background-color:#FADD31;background-repeat:repeat-x;color:#68685E;font-size:11px;font-weight:700;line-height:16px;height:16px;padding-left:8px;padding-right:8px;text-align:center;white-space:nowrap}.admin,.mod{font-size:11px;font-weight:700}.admin,a.admin,a.admin:visited{color:#FFA34F}.bodyline{background:#FFF;border:1px solid #98AAB1}.center{text-align:center}.code{background:#FAFAFA;border:1px solid #D1D7DC;color:#060;font:12px Courier,"Courier New",sans-serif;padding:5px}.errorline{background:#E5E6E2;border:1px solid #8F8B8B;color:#D92A2A}.explaintitle{color:#5C81B1;font-size:11px;font-weight:700}.forumline{background:#FFF}.gensmall{font-size:10px}.h1-font{color:#069;display:inline;font:bold 13px Verdana,Arial,Helvetica,sans-serif;margin:.3em;text-decoration:none}.h2-font{display:inline;font:11px Verdana,Arial,Helvetica,sans-serif}.height1{height:1px}.height22{height:22px}.height25{height:25px}.height28{height:28px}.height30{height:30px}.height40{height:40px}.helpline{border:0 solid;font-size:10px}.imgfolder{margin:1px 4px}.imgspace{margin-left:1px;margin-right:2px}.imgtopic,.imgicon{margin-left:3px}.left{text-align:left}.maintitle,h1,h2{color:#5C81B1;font:bold 20px/120% "Trebuchet MS",Verdana,Arial,Helvetica,sans-serif;text-decoration:none}.maxwidth{width:100%}.mod,a.mod,a.mod:visited{color:#060}.name{font-size:11px;font-weight:700}.nav{font-size:11px;font-weight:700}.nowrap{white-space:nowrap}.postbody{font-size:12px;line-height:125%}.postbody a{text-decoration:underline}.postdetails{color:#00396A;font-size:10px}.quote{background:#F3F3EF;border:1px solid #C2C6BA;color:#069;font-size:11px;line-height:125%}.right{text-align:right}.row1{background:#F0F0EB}.row2,.helpline{background:#E5E6E2}.row3{background:#DBDBD4}.subtitle,h2{font:bold 18px/180% "Trebuchet MS",Verdana,Arial,Helvetica,sans-serif;text-decoration:none}.topictitle{color:#000;font-size:11px;font-weight:700}.underline{text-decoration:underline}.top{vertical-align:top}.image-hspace{margin-right:3px}.clear{clear:both}.degrade{background-color:#777;background:-webkit-gradient(linear,left top,left bottom,from(#999),to(#666));background-image:-moz-linear-gradient(top,#999,#666);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#999999',endColorstr='#666666');filter:progid:DXImageTransform.Microsoft.Shadow(color=#666666,direction=146,Strength=5);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#999999',endColorstr='#666666')";filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#ff999999',endColorstr='#ff666666')}}@media print{.degrade{background:none}} \ No newline at end of file +@media screen{.markItUpHeader{text-align:left}.float-l{float:left}.form-suggest{height:200px;background:#DEE2D0;vertical-align:top}.form-input input{font-size:10px}}@media print{.hide{display:none}}@media screen{.form-input textarea{font-size:11px;width:350px}.form-label{font-size:10px;font-weight:700;line-height:25px;padding-right:10px;text-align:right;width:100px;color:#39738F}.font-9{font-size:9px}.form-topic{font-weight:700}.form-error{color:red}.inline{display:inline}.space-10{clear:both;font-size:10px;height:10px;line-height:10px}.suggest-success{color:green;padding-left:10px;font-size:11px;font-weight:700}.top{vertical-align:top}table td{padding:3px}a:link,a:active,a:visited,a.postlink{color:#069;text-decoration:none}a:hover{color:#DD6900}a.admin:hover,a.mod:hover{color:#DD6900}a.but,a.but:hover,a.but:visited{color:#000;text-decoration:none}a.topictitle:visited{color:#5493B4}a.topictitle:hover{color:#DD6900}body{color:#000;font:11px Verdana,Arial,Helvetica,sans-serif;margin:0 10px 10px;padding:0;overflow:auto}font,th,td,p{font:12px Verdana,Arial,Helvetica,sans-serif}form{display:inline}hr{border:0 solid #FFF;border-top-width:1px;height:0}img{border:0 solid}input{font:11px Verdana,Arial,Helvetica,sans-serif}input.button,input.liteoption,.fakebut{background:#FAFAFA;border:1px solid #000;font-size:11px}input.catbutton{background:#FAFAFA;border:1px solid #000;font-size:10px}input.mainoption{background:#FAFAFA;border:1px solid #000;font-size:11px;font-weight:700}input.post,textarea.post{background:#FFF;border:1px solid #000;font:11px Verdana,Arial,Helvetica,sans-serif;padding-bottom:2px;padding-left:2px}select{background:#FFF;font:11px Verdana,Arial,Helvetica,sans-serif}table{text-align:left}td{vertical-align:middle}td.cat{background-color:#C2C6BA;font-weight:700;height:20px;letter-spacing:1px;text-indent:4px}td.genmed,.genmed{font-size:11px}td.rowpic{background:#C2C6BA}td.spacerow{background:#E5E6E2}th{background-color:#FADD31;background-repeat:repeat-x;color:#68685E;font-size:11px;font-weight:700;line-height:16px;height:16px;padding-left:8px;padding-right:8px;text-align:center;white-space:nowrap}.admin,.mod{font-size:11px;font-weight:700}.admin,a.admin,a.admin:visited{color:#FFA34F}.bodyline{background:#FFF;border:1px solid #98AAB1}.center{text-align:center}.code{background:#FAFAFA;border:1px solid #D1D7DC;color:#060;font:12px Courier,"Courier New",sans-serif;padding:5px}.errorline{background:#E5E6E2;border:1px solid #8F8B8B;color:#D92A2A}.explaintitle{color:#5C81B1;font-size:11px;font-weight:700}.forumline{background:#FFF}.gensmall{font-size:10px}.h1-font{color:#069;display:inline;font:bold 13px Verdana,Arial,Helvetica,sans-serif;margin:.3em;text-decoration:none}.h2-font{display:inline;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.height1{height:1px}.height22{height:22px}.height25{height:25px}.height28{height:28px}.height30{height:30px}.height40{height:40px}.helpline{border:0 solid;font-size:10px}.imgfolder{margin:1px 4px}.imgspace{margin-left:1px;margin-right:2px}.imgtopic,.imgicon{margin-left:3px}.left{text-align:left}.maintitle,h1,h2{color:#5C81B1;font:bold 20px/120% "Trebuchet MS",Verdana,Arial,Helvetica,sans-serif;text-decoration:none}.maxwidth{width:100%}.mod,a.mod,a.mod:visited{color:#060}.name{font-size:11px;font-weight:700}.nav{font-size:11px;font-weight:700}.nowrap{white-space:nowrap}.postbody{font-size:12px;line-height:125%}.postbody a{text-decoration:underline}.postdetails{color:#00396A;font-size:10px}.quote{background:#F3F3EF;border:1px solid #C2C6BA;color:#069;font-size:11px;line-height:125%}.right{text-align:right}.row1{background:#F0F0EB}.row2,.helpline{background:#E5E6E2}.row3{background:#DBDBD4}.subtitle,h2{font:bold 18px/180% "Trebuchet MS",Verdana,Arial,Helvetica,sans-serif;text-decoration:none}.topictitle{color:#000;font-size:11px;font-weight:700}.underline{text-decoration:underline}.top{vertical-align:top}.image-hspace{margin-right:3px}.clear{clear:both}.degrade{background-color:#777;background:-webkit-gradient(linear,left top,left bottom,from(#999),to(#666));background-image:-moz-linear-gradient(top,#999,#666);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#999999',endColorstr='#666666');filter:progid:DXImageTransform.Microsoft.Shadow(color=#666666,direction=146,Strength=5);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#999999',endColorstr='#666666')";filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#ff999999',endColorstr='#ff666666')}}@media print{.degrade{background:none}}@keyframes NAME-YOUR-ANIMATION{0%{opacity:0}100%{opacity:1}} \ No newline at end of file diff --git a/www/plugins-dist/compresseur/tests/css/expected_more.css b/www/plugins-dist/compresseur/tests/css/expected_more.css index b4cbc115..992c371b 100644 --- a/www/plugins-dist/compresseur/tests/css/expected_more.css +++ b/www/plugins-dist/compresseur/tests/css/expected_more.css @@ -49,7 +49,7 @@ th{background-color:#FADD31;background-repeat:repeat-x;color:#68685E;font-size:1 .forumline{background:#FFF} .gensmall{font-size:10px} .h1-font{color:#069;display:inline;font:bold 13px Verdana,Arial,Helvetica,sans-serif;margin:.3em;text-decoration:none} -.h2-font{display:inline;font:11px Verdana,Arial,Helvetica,sans-serif} +.h2-font{display:inline;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px} .height1{height:1px} .height22{height:22px} .height25{height:25px} @@ -84,4 +84,8 @@ th{background-color:#FADD31;background-repeat:repeat-x;color:#68685E;font-size:1 .degrade{background-color:#777;background:-webkit-gradient(linear,left top,left bottom,from(#999),to(#666));background-image:-moz-linear-gradient(top,#999,#666);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#999999',endColorstr='#666666');filter:progid:DXImageTransform.Microsoft.Shadow(color=#666666,direction=146,Strength=5);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#999999',endColorstr='#666666')";filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#ff999999',endColorstr='#ff666666')} @media print { .degrade{background:none} +} +@keyframes NAME-YOUR-ANIMATION { +0%{opacity:0} +100%{opacity:1} } \ No newline at end of file diff --git a/www/plugins-dist/compresseur/tests/css/expected_more_screen.css b/www/plugins-dist/compresseur/tests/css/expected_more_screen.css index 21023094..0fdca968 100644 --- a/www/plugins-dist/compresseur/tests/css/expected_more_screen.css +++ b/www/plugins-dist/compresseur/tests/css/expected_more_screen.css @@ -52,7 +52,7 @@ th{background-color:#FADD31;background-repeat:repeat-x;color:#68685E;font-size:1 .forumline{background:#FFF} .gensmall{font-size:10px} .h1-font{color:#069;display:inline;font:bold 13px Verdana,Arial,Helvetica,sans-serif;margin:.3em;text-decoration:none} -.h2-font{display:inline;font:11px Verdana,Arial,Helvetica,sans-serif} +.h2-font{display:inline;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px} .height1{height:1px} .height22{height:22px} .height25{height:25px} @@ -88,4 +88,8 @@ th{background-color:#FADD31;background-repeat:repeat-x;color:#68685E;font-size:1 } @media print { .degrade{background:none} +} +@keyframes NAME-YOUR-ANIMATION { +0%{opacity:0} +100%{opacity:1} } \ No newline at end of file diff --git a/www/plugins-dist/compresseur/tests/css/expected_url_abs.css b/www/plugins-dist/compresseur/tests/css/expected_url_abs.css new file mode 100644 index 00000000..951fab78 --- /dev/null +++ b/www/plugins-dist/compresseur/tests/css/expected_url_abs.css @@ -0,0 +1,21 @@ +.mybg1{ + background: url('http://example.org/squelettes/bg.png'); +} +.mybg2{ + background: url('http://example.org/squelettes/bg.png'); +} +.mybg3{ + background: url('http://example.org/squelettes/bg.png'); +} +.mybg3{ + background: url('http://example.org/squelettes/img/bg.png'); +} +.mybg4{ + background: url('/img/bg.png'); +} +.mybg5{ + background: url('http://example.com/bg.png'); +} +path.area.perspective1_haute,path.area.perspective2_haute{ + fill: url( #gradient_perspective1 ); +} \ No newline at end of file diff --git a/www/plugins-dist/compresseur/tests/css/source.css b/www/plugins-dist/compresseur/tests/css/source.css index c742fcc2..cb0886f1 100644 --- a/www/plugins-dist/compresseur/tests/css/source.css +++ b/www/plugins-dist/compresseur/tests/css/source.css @@ -456,4 +456,9 @@ clear:both; } @media print { .degrade {background:none;} +} + +@keyframes NAME-YOUR-ANIMATION { + 0% { opacity: 0; } + 100% { opacity: 1; } } \ No newline at end of file diff --git a/www/plugins-dist/compresseur/tests/css/source_url_abs.css b/www/plugins-dist/compresseur/tests/css/source_url_abs.css new file mode 100644 index 00000000..7232e628 --- /dev/null +++ b/www/plugins-dist/compresseur/tests/css/source_url_abs.css @@ -0,0 +1,21 @@ +.mybg1{ + background: url(bg.png); +} +.mybg2{ + background: url("bg.png"); +} +.mybg3{ + background: url('bg.png'); +} +.mybg3{ + background: url('img/bg.png'); +} +.mybg4{ + background: url('/img/bg.png'); +} +.mybg5{ + background: url('http://example.com/bg.png'); +} +path.area.perspective1_haute,path.area.perspective2_haute{ + fill: url( #gradient_perspective1 ); +} \ No newline at end of file diff --git a/www/plugins-dist/dump/action/restaurer.php b/www/plugins-dist/dump/action/restaurer.php index e36a811e..846bb37c 100644 --- a/www/plugins-dist/dump/action/restaurer.php +++ b/www/plugins-dist/dump/action/restaurer.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * @@ -28,40 +30,36 @@ include_spip('inc/dump'); /** * Sauvegarder par morceaux - * + * * @param string $arg */ -function action_restaurer_dist($arg=null){ +function action_restaurer_dist($arg = null) { if (!$arg) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } $status_file = $arg; - define('_DUMP_STATUS_FILE',$status_file); - $status_file = _DIR_TMP.basename($status_file).".txt"; + define('_DUMP_STATUS_FILE', $status_file); + $status_file = _DIR_TMP . basename($status_file) . '.txt'; if (!lire_fichier($status_file, $status) - OR !$status = unserialize($status)) { - + or !$status = unserialize($status) + ) { include_spip('inc/headers'); - echo redirige_formulaire(generer_url_ecrire("restaurer",'status='._DUMP_STATUS_FILE,'',true, true)); - } - else { + echo redirige_formulaire(generer_url_ecrire('restaurer', 'status=' . _DUMP_STATUS_FILE, '', true, true)); + } else { utiliser_langue_visiteur(); - $archive = "
    ".joli_repertoire($status['archive']); + $archive = '
    ' . joli_repertoire($status['archive']); $action = _T('dump:info_restauration_sauvegarde', array('archive' => $archive)); $admin = charger_fonction('admin', 'inc'); - echo $admin('restaurer', $action, "", true); + echo $admin('restaurer', $action, '', true); } // forcer l'envoi du buffer par tous les moyens ! - echo(str_repeat("
    \r\n",256)); - while (@ob_get_level()){ + echo(str_repeat("
    \r\n", 256)); + while (@ob_get_level()) { @ob_flush(); @flush(); @ob_end_flush(); } - } - -?> \ No newline at end of file diff --git a/www/plugins-dist/dump/action/sauvegarder.php b/www/plugins-dist/dump/action/sauvegarder.php index 1e01ce95..fa7da2c9 100644 --- a/www/plugins-dist/dump/action/sauvegarder.php +++ b/www/plugins-dist/dump/action/sauvegarder.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * @@ -28,35 +30,33 @@ include_spip('inc/dump'); /** * Sauvegarder par morceaux - * + * * @param string $arg */ -function action_sauvegarder_dist($arg=null){ +function action_sauvegarder_dist($arg = null) { if (!$arg) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } $status_file = $arg; - $redirect = parametre_url(generer_action_auteur('sauvegarder',$status_file),"step",intval(_request('step')+1),'&'); + $redirect = parametre_url(generer_action_auteur('sauvegarder', $status_file), 'step', intval(_request('step') + 1), '&'); // lancer export qui va se relancer jusqu'a sa fin $sauvegarder = charger_fonction('sauvegarder', 'inc'); utiliser_langue_visiteur(); // quand on sort de $export avec true c'est qu'on a fini - if ($sauvegarder($status_file,$redirect)) { - dump_end($status_file,'sauvegarder'); + if ($sauvegarder($status_file, $redirect)) { + dump_end($status_file, 'sauvegarder'); include_spip('inc/headers'); - echo redirige_formulaire(generer_url_ecrire("sauvegarder",'status='.$status_file,'',true, true)); + echo redirige_formulaire(generer_url_ecrire('sauvegarder', 'status=' . $status_file, '', true, true)); } // forcer l'envoi du buffer par tous les moyens ! - echo(str_repeat("
    \r\n",256)); - while (@ob_get_level()){ + echo(str_repeat("
    \r\n", 256)); + while (@ob_get_level()) { @ob_flush(); @flush(); @ob_end_flush(); } } - -?> \ No newline at end of file diff --git a/www/plugins-dist/dump/action/supprimer_dump.php b/www/plugins-dist/dump/action/supprimer_dump.php new file mode 100644 index 00000000..bc885ee8 --- /dev/null +++ b/www/plugins-dist/dump/action/supprimer_dump.php @@ -0,0 +1,45 @@ + \ No newline at end of file diff --git a/www/plugins-dist/dump/base/restaurer.php b/www/plugins-dist/dump/base/restaurer.php index bbc16266..c99a5ba2 100644 --- a/www/plugins-dist/dump/base/restaurer.php +++ b/www/plugins-dist/dump/base/restaurer.php @@ -10,34 +10,44 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/dump'); include_spip('inc/actions'); -function base_restaurer_dist($titre='', $reprise=false) { +/** + * Restauration d'une sauvegarde + * + * @param string $titre Titre de la page + * @param bool $reprise true s'il s'agit d'une reprise de sauvegarde + */ +function base_restaurer_dist($titre = '', $reprise = false) { $status_file = _DUMP_STATUS_FILE; - $status_file = _DIR_TMP.basename($status_file).".txt"; + $status_file = _DIR_TMP . basename($status_file) . '.txt'; if (!lire_fichier($status_file, $status) - OR !$status = unserialize($status)) { - } - else { - $redirect = parametre_url(generer_action_auteur('restaurer',_DUMP_STATUS_FILE),"step",intval(_request('step')+1),'&'); + or !$status = unserialize($status) + ) { + } else { + $redirect = parametre_url(generer_action_auteur('restaurer', _DUMP_STATUS_FILE), 'step', intval(_request('step') + 1), '&'); $timeout = ini_get('max_execution_time'); // valeur conservatrice si on a pas reussi a lire le max_execution_time - if (!$timeout) $timeout=30; // parions sur une valeur tellement courante ... - $max_time = time()+$timeout/2; - + if (!$timeout) { + $timeout = 30; + } // parions sur une valeur tellement courante ... + $max_time = time() + $timeout / 2; + include_spip('inc/minipres'); - @ini_set("zlib.output_compression","0"); // pour permettre l'affichage au fur et a mesure + @ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure - $titre = _T('dump:restauration_en_cours') . " (".count($status['tables']).") "; + $titre = _T('dump:restauration_en_cours') . ' (' . count($status['tables']) . ') '; $balise_img = chercher_filtre('balise_img'); $titre .= $balise_img(chemin_image('searching.gif')); - echo ( install_debut_html($titre)); + echo(install_debut_html($titre)); // script de rechargement auto sur timeout - echo http_script("window.setTimeout('location.href=\"".$redirect."\";',".($timeout*1000).")"); + echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . ($timeout * 1000) . ')'); echo "
    \n"; dump_serveur($status['connect']); @@ -49,41 +59,38 @@ function base_restaurer_dist($titre='', $reprise=false) { 'callback_progression' => 'dump_afficher_progres', 'max_time' => $max_time, 'no_erase_dest' => lister_tables_noerase(), - 'where' => $status['where']?$status['where']:array(), + 'where' => $status['where'] ? $status['where'] : array(), 'desc_tables_dest' => array() ); - if ($desc = sql_getfetsel('valeur','spip_meta',"nom='dump_structure_temp'",'','','','','dump') - AND $desc = unserialize($desc)) + if ($desc = sql_getfetsel('valeur', 'spip_meta', "nom='dump_structure_temp'", '', '', '', '', 'dump') + and $desc = unserialize($desc) + ) { $options['desc_tables_dest'] = $desc; - #var_dump(sql_allfetsel('nom,valeur','spip_meta',"",'','','','','dump')); - #die(); + } $res = base_copier_tables($status_file, $status['tables'], 'dump', '', $options); - } - else { + } else { // mais on en profite pour reparer les version base pour etre sur de ne pas les perdre - sql_updateq("spip_meta",array('impt'=>'oui'),"nom='version_installee'",'','dump'); - sql_updateq("spip_meta",array('impt'=>'oui'),"nom LIKE '%_base_version'",'','dump'); + sql_updateq('spip_meta', array('impt' => 'oui'), "nom='version_installee'", '', 'dump'); + sql_updateq('spip_meta', array('impt' => 'oui'), "nom LIKE '%_base_version'", '', 'dump'); } - - echo ( "
    \n"); - if (!$res) + echo("\n"); + + if (!$res) { echo dump_relance($redirect); - - echo (install_fin_html()); + } + + echo(install_fin_html()); ob_end_flush(); flush(); - if (!$res) + if (!$res) { exit; - + } + // quand on sort de $export avec true c'est qu'on a fini - dump_end(_DUMP_STATUS_FILE,'restaurer'); + dump_end(_DUMP_STATUS_FILE, 'restaurer'); include_spip('inc/headers'); - echo redirige_formulaire(generer_url_ecrire("restaurer",'status='._DUMP_STATUS_FILE,'',true, true)); - + echo redirige_formulaire(generer_url_ecrire('restaurer', 'status=' . _DUMP_STATUS_FILE, '', true, true)); } } - - -?> diff --git a/www/plugins-dist/dump/connect/dump.php b/www/plugins-dist/dump/connect/dump.php index c5b330a3..d3943afe 100644 --- a/www/plugins-dist/dump/connect/dump.php +++ b/www/plugins-dist/dump/connect/dump.php @@ -10,13 +10,18 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +/** + * Se reconnecter a la base sqlite dont le nom est stocke dans le fichier de statut + */ include_spip('inc/dump'); if ($args = dump_serveur()) { $GLOBALS['spip_connect_version'] = 0.7; - if (call_user_func_array('spip_connect_db',$args)) - define('_DUMP_SERVEUR_OK',true); + if (call_user_func_array('spip_connect_db', $args)) { + define('_DUMP_SERVEUR_OK', true); + } } - -?> \ No newline at end of file diff --git a/www/plugins-dist/dump/dump_autoriser.php b/www/plugins-dist/dump/dump_autoriser.php new file mode 100644 index 00000000..d8211174 --- /dev/null +++ b/www/plugins-dist/dump/dump_autoriser.php @@ -0,0 +1,44 @@ + \ No newline at end of file diff --git a/www/plugins-dist/dump/formulaires/inc-lister-sauvegardes.html b/www/plugins-dist/dump/formulaires/inc-lister-sauvegardes.html index c96ab119..e556baf0 100644 --- a/www/plugins-dist/dump/formulaires/inc-lister-sauvegardes.html +++ b/www/plugins-dist/dump/formulaires/inc-lister-sauvegardes.html @@ -1,4 +1,6 @@ - +[(#REM) + Tableau affichant la liste des fichiers de saugardes avec quelques infos annexes +]
    @@ -6,9 +8,12 @@ [(#ENV{name,''}|oui)] + [(#ENV{download,''}|oui) + + ] - [(#ENV{download,''}|oui) + [(#ENV{delete,''}|oui) ] @@ -22,15 +27,20 @@ + [(#ENV{download,''}|oui) + + ] - [(#ENV{download,''}|oui) + [(#ENV{delete,''}|oui) ] diff --git a/www/plugins-dist/dump/formulaires/inc-lister-sauvegardes_fonctions.php b/www/plugins-dist/dump/formulaires/inc-lister-sauvegardes_fonctions.php index ccc1dc2f..c50d6847 100644 --- a/www/plugins-dist/dump/formulaires/inc-lister-sauvegardes_fonctions.php +++ b/www/plugins-dist/dump/formulaires/inc-lister-sauvegardes_fonctions.php @@ -1,7 +1,7 @@ \ No newline at end of file diff --git a/www/plugins-dist/dump/formulaires/restaurer.html b/www/plugins-dist/dump/formulaires/restaurer.html index aaa0b1a0..12aaff24 100644 --- a/www/plugins-dist/dump/formulaires/restaurer.html +++ b/www/plugins-dist/dump/formulaires/restaurer.html @@ -1,52 +1,56 @@ +[(#REM) + Formulaire de restauration #FORMULAIRE_RESTAURER +]
    [

    (#ENV*{message_ok})

    ] [

    (#ENV*{message_erreur})

    ] [(#ENV{editable})
    - [

    (#ENV*{erreurs}|table_valeur{message_confirm})

    ] + [

    (#ENV*{erreurs/message_confirm})

    ] [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE -
      +
      #SET{name,choisi}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,obligatoire} - [
    • + [
      (#ENV{choisi}) [<:bouton_changer:>] -
    • ] +
      ] #SET{name,fichier}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,obligatoire} -
    • +
      [(#GET{erreurs})] [
      (#INCLURE{fond=formulaires/inc-lister-sauvegardes,env,ajax,name=fichier,id=sauvegarde,titre=<:dump:sauvegardes_existantes:>} |sinon{<:dump:info_aucune_sauvegarde_trouvee:>})
      ] -
    • +
    #SET{name,nom_sauvegarde}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,obligatoire} -
  • +
    [(#GET{erreurs})] -
  • +
    [#SET{name,tout_restaurer}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,obligatoire} -
  • +
    [(#GET{erreurs})]
    - + onclick="$(this).blur();" + onchange="jQuery(this).prop('checked')?jQuery('#liste_tables').hide('fast'):jQuery('#liste_tables').show('fast');" + />
    (#ENV**{erreurs}|table_valeur{tables})
    -
  • ] - + ] + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

     

    diff --git a/www/plugins-dist/dump/formulaires/restaurer.php b/www/plugins-dist/dump/formulaires/restaurer.php index 4cc14601..0c192c3e 100644 --- a/www/plugins-dist/dump/formulaires/restaurer.php +++ b/www/plugins-dist/dump/formulaires/restaurer.php @@ -10,22 +10,25 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('base/dump'); include_spip('inc/dump'); /** * Charger #FORMULAIRE_RESTAURER + * * @return array */ -function formulaires_restaurer_charger_dist(){ +function formulaires_restaurer_charger_dist() { // ici on liste tout, les tables exclue sont simplement non cochees $valeurs = array( '_dir_dump' => dump_repertoire(), - 'choisi' => _request('fichier')?_request('fichier'):_request('nom'), + 'choisi' => _request('fichier') ? _request('fichier') : _request('nom'), 'nom_sauvegarde' => '', - 'tout_restaurer' => (_request('check_tables') AND !_request('tout_restaurer'))?'':'oui', + 'tout_restaurer' => (_request('check_tables') and !_request('tout_restaurer')) ? '' : 'oui', 'fichier' => '', 'tri' => 'nom', ); @@ -35,99 +38,110 @@ function formulaires_restaurer_charger_dist(){ /** * Verifier + * * @return array */ function formulaires_restaurer_verifier_dist() { $erreurs = array(); - if (!$fichier=_request('fichier') AND !$nom = _request('nom_sauvegarde')) + $nom = ''; + if (!$fichier = _request('fichier') and !$nom = _request('nom_sauvegarde')) { $erreurs['fichier'] = _T('info_obligatoire'); - elseif ($fichier) { + } elseif ($fichier) { $fichier = basename($fichier); // securite - if (!file_exists(dump_repertoire().$fichier)) + if (!file_exists(dump_repertoire() . $fichier)) { $erreurs['fichier'] = _T('dump:erreur_nom_fichier'); - else + } else { $nom = $fichier; - } - else { + } + } else { $nom = basename($nom); // securite - if (!file_exists(dump_repertoire().$nom)) { + if (!file_exists(dump_repertoire() . $nom)) { $erreurs['nom_sauvegarde'] = _T('dump:erreur_nom_fichier'); - $nom = ""; + $nom = ''; } } if (!$nom) { $erreurs['message_erreur'] = _T('dump:erreur_restaurer_verifiez'); } - + if ($nom) { - $archive = dump_repertoire().$nom; - if (!$args = dump_connect_args($archive)) + $archive = dump_repertoire() . $nom; + if (!$args = dump_connect_args($archive)) { $erreurs['tout_restaurer'] = _T('dump:erreur_sqlite_indisponible'); + } dump_serveur($args); $tables = base_lister_toutes_tables('dump'); - $tables = base_saisie_tables('tables', $tables, array(), _request('tables')?_request('tables'):array(),'dump'); - $erreurs['tables'] = "
    1. \n" . join("
    2. \n
    3. ", - $tables - ) . "
    \n"; - if (!count(_request('tables')) AND !_request('tout_restaurer') AND _request('check_tables')) + $tables = base_saisie_tables('tables', $tables, array(), _request('tables') ? _request('tables') : array(), 'dump'); + $erreurs['tables'] = "
    1. \n" . join( + "
    2. \n
    3. ", + $tables + ) . "
    \n"; + if (!count(_request('tables')) and !_request('tout_restaurer') and _request('check_tables')) { $erreurs['tout_restaurer'] = _T('dump:selectionnez_table_a_restaurer'); + } } if ($nom - AND (!count($erreurs) OR (count($erreurs)==1 AND isset($erreurs['tables']))) - ) { - if (_request('confirm')!==$nom) { + and (!count($erreurs) or (count($erreurs) == 1 and isset($erreurs['tables']))) + ) { + if (_request('confirm') !== $nom) { $erreurs['message_confirm'] = - _T('dump:info_selection_sauvegarde',array('fichier'=> ''.joli_repertoire(dump_repertoire().$nom)."")) - ."
    "; - $erreurs['message_confirm'].=""; - } - else + _T( + 'dump:info_selection_sauvegarde', + array('fichier' => '' . joli_repertoire(dump_repertoire() . $nom) . '') + ) + . "
    "; + $erreurs['message_confirm'] .= "'; + } else { // passer a traiter() unset($erreurs['tables']); + } } + if (count($erreurs) and !isset($erreurs['message_erreur'])) { + $erreurs['message_erreur'] = ''; + } // pas de message general automatique ici return $erreurs; } /** * Traiter + * * @return array */ function formulaires_restaurer_traiter_dist() { - $archive = (_request('fichier')?_request('fichier'):_request('nom')); + $archive = (_request('fichier') ? _request('fichier') : _request('nom')); $dir_dump = dump_repertoire(); - $archive = $dir_dump . basename($archive,".sqlite"); - - $status_file = base_dump_meta_name(0)."_restauration"; + $archive = $dir_dump . basename($archive, '.sqlite'); + + $status_file = base_dump_meta_name(0) . '_restauration'; if (_request('tout_restaurer')) { $args = dump_connect_args($archive); dump_serveur($args); $tables = base_lister_toutes_tables('dump'); - } - else + } else { $tables = _request('tables'); + } include_spip('inc/dump'); - $res = dump_init($status_file, $archive, $tables,array('spip_meta'=>"impt='oui'")); + $res = dump_init($status_file, $archive, $tables, array('spip_meta' => "impt='oui'")); - if ($res===true) { + if ($res === true) { // on lance l'action restaurer qui va realiser la sauvegarde // et finira par une redirection vers la page sauvegarde_fin include_spip('inc/actions'); $redirect = generer_action_auteur('restaurer', $status_file); - return array('message_ok'=>'ok','redirect'=>$redirect); + + return array('message_ok' => 'ok', 'redirect' => $redirect); + } else { + return array('message_erreur' => $res); } - else - return array('message_erreur'=>$res); } - - -?> \ No newline at end of file diff --git a/www/plugins-dist/dump/formulaires/sauvegarder.html b/www/plugins-dist/dump/formulaires/sauvegarder.html index b7509344..c16ebdfd 100644 --- a/www/plugins-dist/dump/formulaires/sauvegarder.html +++ b/www/plugins-dist/dump/formulaires/sauvegarder.html @@ -1,3 +1,6 @@ +[(#REM) + Formulaire de sauvegarde #FORMULAIRE_SAUVEGARDER +]
    [

    (#ENV*{message_ok})

    ] @@ -8,15 +11,15 @@ parametre : url d'action ] #ACTION_FORMULAIRE -
      +
      #SET{name,nom_sauvegarde}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,obligatoire} -
    • +
      [(#GET{erreurs})] -
    • +
      #SET{name,tables}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,obligatoire} - [
    • + [
      [(#GET{erreurs})]
      @@ -29,11 +32,11 @@ (#ENV*{_tables})
      -
    • ] -
    +
    ] + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

     

    ] - + \ No newline at end of file diff --git a/www/plugins-dist/dump/formulaires/sauvegarder.php b/www/plugins-dist/dump/formulaires/sauvegarder.php index 17c1320a..f32226e7 100644 --- a/www/plugins-dist/dump/formulaires/sauvegarder.php +++ b/www/plugins-dist/dump/formulaires/sauvegarder.php @@ -10,34 +10,47 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Gestion du formulaire de sauvegarde de la base de données + * + * @package SPIP\Dump\Formulaires + */ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('base/dump'); include_spip('inc/dump'); /** - * Charger #FORMULAIRE_SAUVEGARDER + * Charger `#FORMULAIRE_SAUVEGARDER` + * * @return array */ -function formulaires_sauvegarder_charger_dist(){ +function formulaires_sauvegarder_charger_dist() { $dir_dump = dump_repertoire(); // ici on liste tout, les tables exclue sont simplement non cochees $exclude = lister_tables_noexport(); - list($tables,) = base_liste_table_for_dump($exclude); - $tables = base_lister_toutes_tables('',$tables); + list($tables, ) = base_liste_table_for_dump($exclude); + $tables = base_lister_toutes_tables('', $tables); $valeurs = array( - '_dir_dump'=>joli_repertoire($dir_dump), - '_dir_img'=>joli_repertoire(_DIR_IMG), - '_spipnet' => $GLOBALS['home_server'] . '/' . $GLOBALS['spip_lang'] . '_article1489.html', - 'nom_sauvegarde' => basename(dump_nom_fichier($dir_dump,'sqlite'),'.sqlite'), - 'tout_sauvegarder' => (_request('nom_sauvegarde') AND !_request('tout_sauvegarder'))?'':'oui', - '_tables' => "
    1. \n" . join("
    2. \n
    3. ", - base_saisie_tables('tables', $tables, $exclude, _request('nom_sauvegarde')?(_request('tables')?_request('tables'):array()):null) - ) . "
    \n", - /* Si la fonction n'existe pas (vieux plugin migration actif), on met 'spip', ca n'affichera rien - mais ne perturbe pas la sauvegarde qui utilisera bien le bon prefixe */ - '_prefixe' => function_exists('base_prefixe_tables')?base_prefixe_tables(''):'spip', + '_dir_dump' => joli_repertoire($dir_dump), + '_dir_img' => joli_repertoire(_DIR_IMG), + '_spipnet' => $GLOBALS['home_server'] . '/' . $GLOBALS['spip_lang'] . '_article1489.html', + 'nom_sauvegarde' => basename(dump_nom_fichier($dir_dump, 'sqlite'), '.sqlite'), + 'tout_sauvegarder' => (_request('nom_sauvegarde') and !_request('tout_sauvegarder')) ? '' : 'oui', + '_tables' => "
    1. \n" . join( + "
    2. \n
    3. ", + base_saisie_tables( + 'tables', + $tables, + $exclude, + _request('nom_sauvegarde') ? (_request('tables') ? _request('tables') : array()) : null + ) + ) . "
    \n", + '_prefixe' => base_prefixe_tables(''), ); return $valeurs; @@ -45,50 +58,53 @@ function formulaires_sauvegarder_charger_dist(){ /** * Verifier + * * @return array */ function formulaires_sauvegarder_verifier_dist() { $erreurs = array(); - if (!$nom = _request('nom_sauvegarde')) + if (!$nom = _request('nom_sauvegarde')) { $erreurs['nom_sauvegarde'] = _T('info_obligatoire'); - elseif (!preg_match(',^[\w_][\w_.]*$,', $nom) - OR basename($nom)!==$nom) + } elseif (!preg_match(',^[\w_][\w_.]*$,', $nom) + or basename($nom) !== $nom + ) { $erreurs['nom_sauvegarde'] = _T('dump:erreur_nom_fichier'); + } return $erreurs; } /** * Traiter + * * @return array */ function formulaires_sauvegarder_traiter_dist() { $status_file = base_dump_meta_name(0); $dir_dump = dump_repertoire(); - $archive = $dir_dump . basename(_request('nom_sauvegarde'),".sqlite"); + $archive = $dir_dump . basename(_request('nom_sauvegarde'), '.sqlite'); if (_request('tout_sauvegarder')) { // ici on prend toutes les tables sauf celles exclues par defaut // (tables de cache en pratique) $exclude = lister_tables_noexport(); - list($tables,) = base_liste_table_for_dump($exclude); - $tables = base_lister_toutes_tables('',$tables,$exclude); - } - else + list($tables, ) = base_liste_table_for_dump($exclude); + $tables = base_lister_toutes_tables('', $tables, $exclude); + } else { $tables = _request('tables'); + } include_spip('inc/dump'); $res = dump_init($status_file, $archive, $tables); - if ($res===true) { + if ($res === true) { // on lance l'action sauvegarder qui va realiser la sauvegarde // et finira par une redirection vers la page sauvegarde_fin include_spip('inc/actions'); $redirect = generer_action_auteur('sauvegarder', $status_file); - return array('message_ok'=>'ok','redirect'=>$redirect); + + return array('message_ok' => 'ok', 'redirect' => $redirect); + } else { + return array('message_erreur' => $res); } - else - return array('message_erreur'=>$res); } - -?> \ No newline at end of file diff --git a/www/plugins-dist/dump/inc/dump.php b/www/plugins-dist/dump/inc/dump.php index 01c5f2fc..dbc0da42 100644 --- a/www/plugins-dist/dump/inc/dump.php +++ b/www/plugins-dist/dump/inc/dump.php @@ -10,197 +10,254 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * API permettant la manipulation des sauvegardes + * + * @package SPIP\Dump\API + */ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** - * Repertoire de sauvegarde + * Répertoire de sauvegarde + * + * Crée et retourne le chemin du répertoire de sauvegarde + * + * @see _DIR_DUMP * * @return string */ function dump_repertoire() { $repertoire = _DIR_DUMP; if (!@file_exists($repertoire) - AND !$repertoire = sous_repertoire(_DIR_DUMP,'',false,true) + and !$repertoire = sous_repertoire(_DIR_DUMP, '', false, true) ) { - $repertoire = preg_replace(','._DIR_TMP.',', '', _DIR_DUMP); + $repertoire = preg_replace(',' . _DIR_TMP . ',', '', _DIR_DUMP); $repertoire = sous_repertoire(_DIR_TMP, $repertoire); } + return $repertoire; } /** * Nom du fichier de sauvegarde - * la fourniture de l'extension permet de verifier que le nom n'existe pas deja * - * @param string $dir - * @param string $extension + * la fourniture de l'extension permet de vérifier que le nom n'existe pas déjà. + * + * @param string $dir Chemin de stockage du fichier + * @param string $extension Extension du fichier de sauvegarde * @return string */ -function dump_nom_fichier($dir,$extension='sqlite'){ +function dump_nom_fichier($dir, $extension = 'sqlite') { include_spip('inc/texte'); - $site = isset($GLOBALS['meta']['nom_site']) - ? preg_replace(array(",\W,is",",_(?=_),",",_$,"),array("_","",""), couper(translitteration(trim($GLOBALS['meta']['nom_site'])),30,"")) - : 'spip'; + $site = 'spip'; + if (isset($GLOBALS['meta']['nom_site'])) { + $site = typo($GLOBALS['meta']['nom_site']); // extraire_multi + $site = couper(translitteration(trim($site)), 30, ''); + $site = preg_replace(array(',\W,is', ',_(?=_),', ',_$,'), array('_', '', ''), $site); + } $site .= '_' . date('Ymd'); $nom = $site; - $cpt=0; - while (file_exists($dir. $nom . ".$extension")) { + $cpt = 0; + while (file_exists($dir . $nom . ".$extension")) { $nom = $site . sprintf('_%03d', ++$cpt); } - return $nom.".$extension"; + + return $nom . ".$extension"; } /** - * Determine le type de serveur de sauvegarde + * Détermine le type de serveur de sauvegarde, * sqlite2 ou sqlite3 - * + * * @return string */ function dump_type_serveur() { // chercher si sqlite2 ou 3 est disponible include_spip('req/sqlite3'); - if (spip_versions_sqlite3()) + if (spip_versions_sqlite3()) { return 'sqlite3'; + } include_spip('req/sqlite2'); - if (spip_versions_sqlite2()) + if (spip_versions_sqlite2()) { return 'sqlite2'; + } return ''; } /** * Conteneur pour les arguments de la connexion - * si on passe $args, les arguments de la connexion sont memorises - * renvoie toujours les derniers arguments memorises * - * @staticvar array $connect_args - * @param array $connect + * Si on passe $args, les arguments de la connexion sont memorisés. + * Renvoie toujours les derniers arguments memorisés. + * + * @staticvar array $connect_args Pour stocker le premier conteneur + * @param array $args * @return array */ -function dump_serveur($args=null) { +function dump_serveur($args = null) { static $connect_args = null; - if ($args) + if ($args) { $connect_args = $args; + } return $connect_args; } function dump_connect_args($archive) { - if (!$type_serveur = dump_type_serveur()) + if (!$type_serveur = dump_type_serveur()) { return null; - return array(dirname($archive), '', '', '', basename($archive,".sqlite"), $type_serveur, 'spip'); + } + + return array(dirname($archive), '', '', '', basename($archive, '.sqlite'), $type_serveur, 'spip'); } /** * Initialiser un dump - * @param string $status_file - * @param string $archive - * @param array $tables - * @param array $where + * + * @param string $status_file Fichier contenant les informations serialisees sur le statut de l'export + * @param string $archive Nom de l'archive (stockee dans le fichier de statut) + * @param array $tables Liste des tables a exporter (autocaculee par defaut) + * @param array $where Condition sur l'export + * @param string $action Pour differencier la sauvegarde de l'import * @return bool/string */ -function dump_init($status_file, $archive, $tables=null, $where=array(),$action='sauvegarde'){ - $status_file = _DIR_TMP.basename($status_file).".txt"; +function dump_init($status_file, $archive, $tables = null, $where = array(), $action = 'sauvegarde') { + $status_file = _DIR_TMP . basename($status_file) . '.txt'; if (lire_fichier($status_file, $status) - AND $status = unserialize($status) - AND $status['etape']!=='fini' - AND filemtime($status_file)>=time()-120) // si le fichier status est trop vieux c'est un abandon - return _T("dump:erreur_".$action."_deja_en_cours"); + and $status = unserialize($status) + and $status['etape'] !== 'fini' + and filemtime($status_file) >= time() - 120 + ) { + // si le fichier status est trop vieux c'est un abandon + return _T('dump:erreur_' . $action . '_deja_en_cours'); + } - if (!$type_serveur = dump_type_serveur()) + if (!$type_serveur = dump_type_serveur()) { return _T('dump:erreur_sqlite_indisponible'); + } - if (!$tables) - list($tables,) = base_liste_table_for_dump(lister_tables_noexport()); - $status = array('tables'=>$tables,'where'=>$where,'archive'=>$archive); + if (!$tables) { + list($tables, ) = base_liste_table_for_dump(lister_tables_noexport()); + } + $status = array('tables' => $tables, 'where' => $where, 'archive' => $archive); $status['connect'] = dump_connect_args($archive); dump_serveur($status['connect']); - if (!spip_connect('dump')) + if (!spip_connect('dump')) { return _T('dump:erreur_creation_base_sqlite'); + } // la constante sert a verifier qu'on utilise bien le connect/dump du plugin, // et pas une base externe homonyme - if (!defined('_DUMP_SERVEUR_OK')) + if (!defined('_DUMP_SERVEUR_OK')) { return _T('erreur_connect_dump', array('dump' => 'dump')); + } $status['etape'] = 'init'; - if (!ecrire_fichier($status_file, serialize($status))) - return _T('dump:avis_probleme_ecriture_fichier',array('fichier'=>$status_file)); + if (!ecrire_fichier($status_file, serialize($status))) { + return _T('dump:avis_probleme_ecriture_fichier', array('fichier' => $status_file)); + } return true; } /** * Afficher l'avancement de la copie - * @staticvar int $etape - * @param $courant - * @param $total - * @param $table + * + * @staticvar int $etape Nombre de fois ou on est passe dans cette foncion + * @param $courant Flag pour indiquer si c'est la table sur laquelle on travaille actuellement + * @param $total Nombre total de tables + * @param $table Nom de la table */ -function dump_afficher_progres($courant,$total,$table) { +function dump_afficher_progres($courant, $total, $table) { static $etape = 1; if (unique($table)) { - if ($total<0 OR !is_numeric($total)) - echo "
    ".$etape. '. '."$table "; - else - echo "
    ".$etape. '. '."$table ".($courant?" ($courant) ":""); + if ($total < 0 or !is_numeric($total)) { + echo '
    ' . $etape . '. ' . "$table "; + } else { + echo '
    ' . $etape . '. ' . "$table " . ($courant ? " ($courant) " : ''); + } $etape++; } - if (is_numeric($total) AND $total>=0) - echo ". "; - else - echo "(". (-intval($total)).")"; + if (is_numeric($total) and $total >= 0) { + echo '. '; + } else { + echo '(' . (-intval($total)) . ')'; + } flush(); } /** - * Ecrire le js pour relancer la procedure de dump - * @param string $redirect - * @return string + * Écrire le js pour relancer la procédure de dump + * + * @param string $redirect URL de la prochaine etape du dump + * @return string Code HTML de redirection */ -function dump_relance($redirect){ +function dump_relance($redirect) { // si Javascript est dispo, anticiper le Time-out return "\n"; } /** - * Marquer la procedure de dump comme finie + * Marquer la procédure de dump comme finie + * * @param string $status_file - * @return + * Fichier qui mémorise les infos utiles concernant la sauvegarde en cours + * @param string $action + * Type d'action supplémentaire à réaliser : + * + * - restaurer : supprimer la structure qui était stockée dans le dump + * - 'auvegarder : stocker dans le dump la structure de la base source */ -function dump_end($status_file, $action=''){ - $status_file = _DIR_TMP.basename($status_file).".txt"; +function dump_end($status_file, $action = '') { + $status_file = _DIR_TMP . basename($status_file) . '.txt'; if (!lire_fichier($status_file, $status) - OR !$status = unserialize($status)) + or !$status = unserialize($status) + ) { return; - - switch($action) { + } + + switch ($action) { case 'restaurer': // supprimer la structure qui etait stockee dans le dump - sql_delete('spip_meta',"nom='dump_structure_temp'"); + sql_delete('spip_meta', "nom='dump_structure_temp'"); break; case 'sauvegarder': // stocker dans le dump la structure de la base source $structure = array(); - foreach($status['tables_copiees'] as $t=>$n) - $structure[$t] = sql_showtable($t,true); + foreach ($status['tables_copiees'] as $t => $n) { + $structure[$t] = sql_showtable($t, true); + } dump_serveur($status['connect']); spip_connect('dump'); - sql_delete('spip_meta',"nom='dump_structure_temp'",'dump'); #enlever une vieille structure deja la, au cas ou - sql_insertq('spip_meta',array('nom'=>'dump_structure_temp','valeur'=>serialize($structure),'impt'=>'non'),array(),'dump'); + // si spip_meta n'a pas ete backup elle n'est pas dans le dump, il faut la creer pour y stocker cette meta + if (!sql_showtable('spip_meta', true, 'dump')) { + $desc = sql_showtable('spip_meta', true); + sql_create('spip_meta', $desc['field'], $desc['key'], false, false, 'dump'); + } + sql_delete('spip_meta', "nom='dump_structure_temp'", 'dump'); #enlever une vieille structure deja la, au cas ou + sql_insertq( + 'spip_meta', + array('nom' => 'dump_structure_temp', 'valeur' => serialize($structure), 'impt' => 'non'), + array(), + 'dump' + ); break; } - + $status['etape'] = 'fini'; ecrire_fichier($status_file, serialize($status)); } @@ -208,75 +265,115 @@ function dump_end($status_file, $action=''){ /** * Lister les fichiers de sauvegarde existant dans un repertoire * trie par nom, date ou taille - * - * @param string $dir - * @param string $tri - * @param string $extension - * @param int $limit + * + * @param string $dir Repertoire de sauvegarde + * @param string $tri Tri pour recuperer les fichiers + * @param string $extension Extension des fichiers de sauvegarde + * @param int $limit Nombre max de fichiers listes * @return array */ -function dump_lister_sauvegardes($dir,$tri='nom',$extension="sqlite",$limit = 100) { - $liste_dump = preg_files($dir,'\.'.$extension.'$',$limit,false); +function dump_lister_sauvegardes($dir, $tri = 'nom', $extension = 'sqlite', $limit = 100) { + $liste_dump = preg_files($dir, '\.' . $extension . '$', $limit, false); $n = strlen($dir); $tn = $tl = $tt = $td = array(); - foreach($liste_dump as $fichier){ + foreach ($liste_dump as $fichier) { $d = filemtime($fichier); $t = filesize($fichier); $fichier = substr($fichier, $n); - $tl[]= array('fichier'=>$fichier,'taille'=>$t,'date'=>$d); + $tl[] = array('fichier' => $fichier, 'taille' => $t, 'date' => $d); $td[] = $d; $tt[] = $t; $tn[] = $fichier; } - if ($tri == 'taille') + if ($tri == 'taille') { array_multisort($tt, SORT_ASC, $tl); - elseif ($tri == 'date') + } elseif ($tri == 'date') { array_multisort($td, SORT_ASC, $tl); - else + } else { array_multisort($tn, SORT_ASC, $tl); + } + return $tl; } - +/** + * Extraire le statut contenu dans un fichier + * + * @param $status_file Nom du fichier stocke dans _DIR_TMP + * @return array + */ function dump_lire_status($status_file) { - $status_file = _DIR_TMP.basename($status_file).".txt"; + $status_file = _DIR_TMP . basename($status_file) . '.txt'; if (!lire_fichier($status_file, $status) - OR !$status = unserialize($status)) + or !$status = unserialize($status) + ) { return ''; + } return $status; } +/** + * Verifier qu'un sauvegarde est finie + * + * @param $status_file Nom du fichier stocke dans _DIR_TMP + * @return string Chaine non vide s'il reste des choses a faire + */ function dump_verifie_sauvegarde_finie($status_file) { - if (!$status=dump_lire_status($status_file) - OR $status['etape']!=='fini') - return ''; + if (!$status = dump_lire_status($status_file) + or $status['etape'] !== 'fini' + ) { + return ''; + } + return ' '; } +/** + * Recuperer le nom du fichier d'archivage qui est memorise dans le fichier de statut + * + * @param $status_file Nom du fichier stocke dans _DIR_TMP + * @return string Nom ou chaine vide si on a un probleme + */ function dump_nom_sauvegarde($status_file) { - if (!$status=dump_lire_status($status_file) - OR !file_exists($f=$status['archive'].".sqlite")) + if (!$status = dump_lire_status($status_file) + or !file_exists($f = $status['archive'] . '.sqlite') + ) { return ''; + } return $f; } +/** + * Recuperer la taille du fichier de sauvegarde + * + * @param $status_file Nom du fichier stocke dans _DIR_TMP + * @return string/int Taille ou Chaine vide en cas de probleme + */ function dump_taille_sauvegarde($status_file) { - if (!$f=dump_nom_sauvegarde($status_file) - OR !$s = filesize($f)) + if (!$f = dump_nom_sauvegarde($status_file) + or !$s = filesize($f) + ) { return ''; + } return $s; } +/** + * Recuperer la date de derniere modification du fichier de sauvegarde + * + * @param $status_file Nom du fichier stocke dans _DIR_TMP + * @return string/int Date ou Chaine vide en cas de probleme + */ function dump_date_sauvegarde($status_file) { - if (!$f=dump_nom_sauvegarde($status_file) - OR !$d = filemtime($f)) + if (!$f = dump_nom_sauvegarde($status_file) + or !$d = filemtime($f) + ) { return ''; + } - return date('Y-m-d',$d); + return date('Y-m-d', $d); } - -?> \ No newline at end of file diff --git a/www/plugins-dist/dump/inc/sauvegarder.php b/www/plugins-dist/dump/inc/sauvegarder.php index f9475311..0aa09211 100644 --- a/www/plugins-dist/dump/inc/sauvegarder.php +++ b/www/plugins-dist/dump/inc/sauvegarder.php @@ -10,30 +10,42 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/dump'); -function inc_sauvegarder_dist($status_file, $redirect='') { - $status_file = _DIR_TMP.basename($status_file).".txt"; +/** + * Fonction principale de sauvegarde + * En mode sqlite on passe par une copie de base a base (dans l'API de SPIP) + * + * @param string $status_file Nom du fichier de status (stocke dans _DIR_TMP) + * @param string $redirect Redirection apres la sauvegarde + * @return bool + */ +function inc_sauvegarder_dist($status_file, $redirect = '') { + $status_file = _DIR_TMP . basename($status_file) . '.txt'; if (!lire_fichier($status_file, $status) - OR !$status = unserialize($status)) { - } - else { + or !$status = unserialize($status) + ) { + } else { $timeout = ini_get('max_execution_time'); // valeur conservatrice si on a pas reussi a lire le max_execution_time - if (!$timeout) $timeout=30; // parions sur une valeur tellement courante ... - $max_time = time()+$timeout/2; - + if (!$timeout) { + $timeout = 30; + } // parions sur une valeur tellement courante ... + $max_time = time() + $timeout / 2; + include_spip('inc/minipres'); - @ini_set("zlib.output_compression","0"); // pour permettre l'affichage au fur et a mesure + @ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure - $titre = _T('dump:sauvegarde_en_cours') . " (".count($status['tables']).") "; + $titre = _T('dump:sauvegarde_en_cours') . ' (' . count($status['tables']) . ') '; $balise_img = chercher_filtre('balise_img'); $titre .= $balise_img(chemin_image('searching.gif')); - echo ( install_debut_html($titre)); + echo(install_debut_html($titre)); // script de rechargement auto sur timeout - echo http_script("window.setTimeout('location.href=\"".$redirect."\";',".($timeout*1000).")"); + echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . ($timeout * 1000) . ')'); echo "
    \n"; dump_serveur($status['connect']); @@ -46,22 +58,22 @@ function inc_sauvegarder_dist($status_file, $redirect='') { 'callback_progression' => 'dump_afficher_progres', 'max_time' => $max_time, 'no_erase_dest' => lister_tables_noerase(), - 'where' => $status['where']?$status['where']:array(), + 'where' => $status['where'] ? $status['where'] : array(), ); $res = base_copier_tables($status_file, $status['tables'], '', 'dump', $options); } - - echo ( "
    \n"); - if (!$res AND $redirect) + echo("\n"); + + if (!$res and $redirect) { echo dump_relance($redirect); - echo (install_fin_html()); - ob_end_flush(); + } + echo(install_fin_html()); + if (@ob_get_contents()) { + ob_end_flush(); + } flush(); return $res; } } - - -?> diff --git a/www/plugins-dist/dump/lang/dump.xml b/www/plugins-dist/dump/lang/dump.xml index 59a6d6a0..dab39f9a 100644 --- a/www/plugins-dist/dump/lang/dump.xml +++ b/www/plugins-dist/dump/lang/dump.xml @@ -1,125 +1,141 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + + - + + - + - + - + + - + - + - + - + - + - + + - + + - + - + - + - + + - + - + - + - - + + - + - + - + + - + + + - + - + - + - + - + + - + - + - + - + - + + - + - + + - + - + + + - + + + - + - + diff --git a/www/plugins-dist/dump/lang/dump_ar.php b/www/plugins-dist/dump/lang/dump_ar.php index e8bec00d..91408c84 100644 --- a/www/plugins-dist/dump/lang/dump_ar.php +++ b/www/plugins-dist/dump/lang/dump_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -17,6 +19,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // C 'confirmer_ecraser_base' => 'نعم، أريد استبدال القاعدة بهذه النسخة الاحتياطية', 'confirmer_ecraser_tables_selection' => 'نعم أريد استبدال الجداول المحددة بهذه النسخة الاحتياطية', + 'confirmer_supprimer_sauvegarde' => 'هل تريد فعلاً حذف هذه النسخة الاحتياطية؟', // D 'details_sauvegarde' => 'نفاصيل النسخة الاحتياطية:', @@ -76,5 +79,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // U 'une_donnee' => 'تسجيل واحد' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_ast.php b/www/plugins-dist/dump/lang/dump_ast.php index 843fd6ec..b2f4e948 100644 --- a/www/plugins-dist/dump/lang/dump_ast.php +++ b/www/plugins-dist/dump/lang/dump_ast.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=ast // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -29,5 +31,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Facer copia de seguridá del conteníu de la base', 'texte_sauvegarde_base' => 'Facer copia de seguridá de la base' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_ay.php b/www/plugins-dist/dump/lang/dump_ay.php index acfc15b6..ac90da93 100644 --- a/www/plugins-dist/dump/lang/dump_ay.php +++ b/www/plugins-dist/dump/lang/dump_ay.php @@ -3,12 +3,12 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=ay // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // B 'bouton_restaurer_base' => 'Yatqallta askichaña' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_bg.php b/www/plugins-dist/dump/lang/dump_bg.php index 9d4adbc4..d95b742d 100644 --- a/www/plugins-dist/dump/lang/dump_bg.php +++ b/www/plugins-dist/dump/lang/dump_bg.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=bg // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -29,5 +31,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Архивиране съдържанието на базата данни', 'texte_sauvegarde_base' => 'Архивиране на базата данни' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_br.php b/www/plugins-dist/dump/lang/dump_br.php index eacb6d78..b7a52621 100644 --- a/www/plugins-dist/dump/lang/dump_br.php +++ b/www/plugins-dist/dump/lang/dump_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -27,5 +29,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Saveteiñ endalc’had an diaz', 'texte_sauvegarde_base' => 'Saveteiñ an diaz' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_bs.php b/www/plugins-dist/dump/lang/dump_bs.php index a791084d..25cd8d2d 100644 --- a/www/plugins-dist/dump/lang/dump_bs.php +++ b/www/plugins-dist/dump/lang/dump_bs.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=bs // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -25,5 +27,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Snimiti sadrzj baze', 'texte_sauvegarde_base' => 'Snimiti bazu' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_ca.php b/www/plugins-dist/dump/lang/dump_ca.php index a4b776e6..13a59f13 100644 --- a/www/plugins-dist/dump/lang/dump_ca.php +++ b/www/plugins-dist/dump/lang/dump_ca.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=ca // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -26,5 +28,3 @@ Sigueu prudents amb aquesta funcionalitat: les modificacions o pèrdues event 'texte_sauvegarde' => 'Desar el contigut de la base', 'texte_sauvegarde_base' => 'Desar la base' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_co.php b/www/plugins-dist/dump/lang/dump_co.php index e0b1aa6d..c0351747 100644 --- a/www/plugins-dist/dump/lang/dump_co.php +++ b/www/plugins-dist/dump/lang/dump_co.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=co // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -22,12 +24,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( Ùn vi scurdate dinò di ricuarà u cartulare @img@ sanu sanu, chì cuntene l’imàgini è i ducumenti usati in l’artìculi è in e rùbbriche.', 'texte_admin_tech_02' => 'Attenti : sta copia di salvezza puderà esse ricuperata SOLU in un situ stallatu cù listessa versione di SPIP. In partìculare ùn ci vole mancu appena sguassà a basa di dati pensendu di ricuperà sta copia di salvezza dopu qualchì aghjurnumentu di SPIP ... - Per sapè ne di più, cunsultate puru a ducumentazione di SPIP.', # MODIF + Per sapè ne di più, cunsultate puru a ducumentazione di SPIP.', # MODIF 'texte_restaurer_base' => 'Ricuperà una copia di salvezza di a basa di dati', 'texte_restaurer_sauvegarde' => 'Sta scelta vi permette di ricuperà una copia di a basa di dati fatta in passatu. Per quessa, u schedariu chì cuntene sta copia deve esse statu piazzatu in u cartulare @dossier@. Ma fate puru casu : e mudìfiche o pussìbule pèrdite ùn si ponu più ricuarà.', # MODIF 'texte_sauvegarde' => 'Salvà u cuntenutu di a basa di dati', 'texte_sauvegarde_base' => 'Salvà a basa di dati' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_cpf.php b/www/plugins-dist/dump/lang/dump_cpf.php index 0be0a4d3..fd897a94 100644 --- a/www/plugins-dist/dump/lang/dump_cpf.php +++ b/www/plugins-dist/dump/lang/dump_cpf.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=cpf // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -30,5 +32,3 @@ Inn ti péd prékosyon lé nésésèr èk lafonksyon-la : porézon bann sanz 'texte_sauvegarde' => 'Sovgard lo kontnu labaz', 'texte_sauvegarde_base' => 'Sovgard labaz dodné' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_cpf_hat.php b/www/plugins-dist/dump/lang/dump_cpf_hat.php index 39f9def9..a4ae9f51 100644 --- a/www/plugins-dist/dump/lang/dump_cpf_hat.php +++ b/www/plugins-dist/dump/lang/dump_cpf_hat.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=cpf_hat // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -29,5 +31,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Sovgad kontni baz-la', 'texte_sauvegarde_base' => 'Sovgad baz-la' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_cs.php b/www/plugins-dist/dump/lang/dump_cs.php index 09cff316..df8b6153 100644 --- a/www/plugins-dist/dump/lang/dump_cs.php +++ b/www/plugins-dist/dump/lang/dump_cs.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=cs // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -28,5 +30,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Zálohovat obsah databáze', 'texte_sauvegarde_base' => 'Uložit databázi' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_da.php b/www/plugins-dist/dump/lang/dump_da.php index a3d90c27..3edfc7ac 100644 --- a/www/plugins-dist/dump/lang/dump_da.php +++ b/www/plugins-dist/dump/lang/dump_da.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=da // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -32,5 +34,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Sikkerhedskopier indholdet af databasen', 'texte_sauvegarde_base' => 'Sikkerhedskopier databasen' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_de.php b/www/plugins-dist/dump/lang/dump_de.php index 7b4b2866..01f9d714 100644 --- a/www/plugins-dist/dump/lang/dump_de.php +++ b/www/plugins-dist/dump/lang/dump_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -17,6 +19,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // C 'confirmer_ecraser_base' => 'Ja, ich will meine Datenbank mit dieser Sicherung überschreiben.', 'confirmer_ecraser_tables_selection' => 'Ja, ich will die ausgewählten Tabellen mit der dieser Sicherung überschreiben.', + 'confirmer_supprimer_sauvegarde' => 'Sind Sie sicher, dass Sie diese Sicherung löschen möchten?', // D 'details_sauvegarde' => 'Details der Sicherung:', @@ -72,5 +75,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // U 'une_donnee' => '1 Sicherheitskopie' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_en.php b/www/plugins-dist/dump/lang/dump_en.php index d06ae2ac..014b660f 100644 --- a/www/plugins-dist/dump/lang/dump_en.php +++ b/www/plugins-dist/dump/lang/dump_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -17,6 +19,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // C 'confirmer_ecraser_base' => 'Yes, I want to overwrite my database with the backup', 'confirmer_ecraser_tables_selection' => 'Yes, I want to overwrite the selected tables with the backup', + 'confirmer_supprimer_sauvegarde' => 'Do you really want to delete this backup?', // D 'details_sauvegarde' => 'Details of the backup:', @@ -73,5 +76,3 @@ Be very careful with this feature: any potential modifications or losses are // U 'une_donnee' => '1 record' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_en_hx.php b/www/plugins-dist/dump/lang/dump_en_hx.php index 43c7669e..b254b2fc 100644 --- a/www/plugins-dist/dump/lang/dump_en_hx.php +++ b/www/plugins-dist/dump/lang/dump_en_hx.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=en_hx // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -32,5 +34,3 @@ B3 c4r3fu1 w17h 7h15 f347ur3: 4ny p073n7141 m0d1f1c4710n5 0r 105535 4r3 'texte_sauvegarde' => 'B4ckup 7h3 c0n73n7 0f 7h3 d474b453', 'texte_sauvegarde_base' => 'B4ckup 7h3 d474b453' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_eo.php b/www/plugins-dist/dump/lang/dump_eo.php index 74decbb7..0cfa6533 100644 --- a/www/plugins-dist/dump/lang/dump_eo.php +++ b/www/plugins-dist/dump/lang/dump_eo.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=eo // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -41,5 +43,3 @@ NUR por retejo starigita per la sama versio de SPIP. Nepre ne " malplenigu la d 'texte_sauvegarde' => 'Konservi la enhavon de la datenbazo', 'texte_sauvegarde_base' => 'Konservi la datenbazon' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_es.php b/www/plugins-dist/dump/lang/dump_es.php index cfe14268..9b835951 100644 --- a/www/plugins-dist/dump/lang/dump_es.php +++ b/www/plugins-dist/dump/lang/dump_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -17,36 +19,37 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // C 'confirmer_ecraser_base' => 'Sí, quiero destruir mi base con la restauración de este respaldo. ', 'confirmer_ecraser_tables_selection' => 'Sí, quiero destruir las tablas seleccionadas con la restauración de este respaldo', + 'confirmer_supprimer_sauvegarde' => '¿Está seguro de querer eliminar esta copia de seguridad?', // D 'details_sauvegarde' => 'Detalles del respaldo:', // E 'erreur_aucune_donnee_restauree' => 'Ningún dato restaurado', - 'erreur_connect_dump' => 'Un servidor denominado « @dump@ » ya existe. Cámbiale el nombre.', - 'erreur_creation_base_sqlite' => 'Impossible crear una base SQLite para el respaldo', + 'erreur_connect_dump' => 'Un servidor denominado « @dump@ » ya existe. Elija otro nombre.', + 'erreur_creation_base_sqlite' => 'Imposible crear una base SQLite para la copia de seguridad', 'erreur_nom_fichier' => 'Este nombre de archivo no está autorizado', - 'erreur_restaurer_verifiez' => 'Corrige el error para poder restaurar.', - 'erreur_sauvegarde_deja_en_cours' => 'Ya tienes un respaldo en curso.', - 'erreur_sqlite_indisponible' => 'Imposible hacer un respaldo SQLite en su espacio de hospedaje.', + 'erreur_restaurer_verifiez' => 'Corrija el error para poder restaurarlo.', + 'erreur_sauvegarde_deja_en_cours' => 'Ya tiene una copia de seguridad en curso.', + 'erreur_sqlite_indisponible' => 'Imposible hacer un copia de seguridad SQLite en su espacio de alojamiento.', 'erreur_table_absente' => 'Tabla @table@ ausente', - 'erreur_table_donnees_manquantes' => 'Tabla @table@, datos faltantes', - 'erreur_taille_sauvegarde' => 'El respaldo parece haber fracasado. El archivo @fichier@ está vacío o ausente', + 'erreur_table_donnees_manquantes' => 'Tabla @table@, faltan datos', + 'erreur_taille_sauvegarde' => 'La copia de seguridad parece haber fallado. El archivo @fichier@ está vacío o ausente.', // I - 'info_aucune_sauvegarde_trouvee' => 'Ningún respaldo encontrado', - 'info_restauration_finie' => '¡Ya está! El respaldo @archive@ fue restaurado en tu sitio. Puedes ', - 'info_restauration_sauvegarde' => 'Restauración de la copia de respaldo @archive@', - 'info_sauvegarde' => 'Copia de respaldo', - 'info_sauvegarde_reussi_02' => 'El respaldo de la base está en @archive@. Puedes', + 'info_aucune_sauvegarde_trouvee' => 'Ninguna copia de seguridad encontrada', + 'info_restauration_finie' => '¡Ya está! La copia de seguridad @archive@ ha sido restaurada en su sitio. Puedes', + 'info_restauration_sauvegarde' => 'Restauración de la copia de seguridad @archive@', + 'info_sauvegarde' => 'Copia de seguridad', + 'info_sauvegarde_reussi_02' => 'La base se ha guardado en @archive@. Puedes', 'info_sauvegarde_reussi_03' => 'volver a la gestión', 'info_sauvegarde_reussi_04' => 'del sitio.', - 'info_selection_sauvegarde' => 'Elegiste restaurar el respaldo @fichier@. Esta operación es irreversible.', + 'info_selection_sauvegarde' => 'Ha elegido restaurar la copia de seguridad @fichier@. Esta operación es irreversible.', // L - 'label_nom_fichier_restaurer' => 'O indica el nombre del archivo por restaurar', - 'label_nom_fichier_sauvegarde' => 'Nombre del archivo para el respaldo', - 'label_selectionnez_fichier' => 'Selecciona un archivo en la lista', + 'label_nom_fichier_restaurer' => 'O indique el nombre del archivo a restaurar', + 'label_nom_fichier_sauvegarde' => 'Nombre del archivo para la copia de seguridad', + 'label_selectionnez_fichier' => 'Seleccione un archivo en la lista', // N 'nb_donnees' => '@nb@ registros', @@ -55,22 +58,21 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'restauration_en_cours' => 'Restauración en courso', // S - 'sauvegarde_en_cours' => 'Respaldo en curso', - 'sauvegardes_existantes' => 'Respaldos existentes', - 'selectionnez_table_a_restaurer' => 'Selecciona las tablas por restaurar', + 'sauvegarde_en_cours' => 'Copia de seguridad en curso', + 'sauvegardes_existantes' => 'Copias de seguridad existentes', + 'selectionnez_table_a_restaurer' => 'Seleccione las tablas a restaurar', // T - 'texte_admin_tech_01' => 'Esta opción permite respaldar el contenido de la base en un archivo que se guardará en la carpeta @dossier@. No olvides recuperar además la totalidad de la carpeta @img@, que contiene las imágenes y los documentos utilizadas en los artículos y las secciones.', - 'texte_admin_tech_02' => '¡Atención! Esta copia de respaldo SÓLO PODRÁ ser restaurada en un sitio que utiliza LA MISMA versión de SPIP. Por ningún motivo se deberá «vaciar la base» imaginando volver a instalar el respaldo después de una actualización. Consultar la documentación de SPIP.', - 'texte_restaurer_base' => 'Restaurar el contenido de una copia de respaldo', - 'texte_restaurer_sauvegarde' => 'Esta opción te permite restaurar una copia de respaldo de la base efectuada anteriormente. A tal efecto, el archivo que contiene la copia de respaldo debe estar en la carpeta @dossier@.', - 'texte_sauvegarde' => 'Crear una copia de respaldo de la base', - 'texte_sauvegarde_base' => 'Crear una copia de respaldo de la base', + 'texte_admin_tech_01' => 'Esta opción le permite guardar el contenido de la base en un archivo que será almacenado en la carpeta @dossier@. No olvide asimismo recuperar la totalidad de la carpeta @img@, que contiene las imágenes y los documentos utilizadas en los artículos y secciones.', + 'texte_admin_tech_02' => '¡Atención! Esta copia de seguridad SÓLO podrá ser restaurada en un sitio que utilice la misma versión de SPIP. Por ningún motivo se deberá «vaciar la base» esperando volver a instalar la copia de seguridad después de una actualización. Consulte la documentación de SPIP.', + 'texte_restaurer_base' => 'Restaurar el contenido de una copia de seguridad', + 'texte_restaurer_sauvegarde' => 'Esta opción le permite restaurar una copia de seguridad de la base efectuada anteriormente. A tal efecto, el archivo que contiene la copia de seguridad debe estar en la carpeta @dossier@. +Sea prudente con esta funcionalidad: las modificaciones, eventuales pérdidas, son irreversibles.', + 'texte_sauvegarde' => 'Guardar el contenido de la base', + 'texte_sauvegarde_base' => 'Guardar la base', 'tout_restaurer' => 'Restaurar todas las tablas', - 'tout_sauvegarder' => 'Restaurar todas las tablas', + 'tout_sauvegarder' => 'Guardar todas las tablas', // U 'une_donnee' => '1 registro' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_eu.php b/www/plugins-dist/dump/lang/dump_eu.php index 53e3e83a..7be3f1e4 100644 --- a/www/plugins-dist/dump/lang/dump_eu.php +++ b/www/plugins-dist/dump/lang/dump_eu.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=eu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -25,5 +27,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Basean ziurtasun kopia bat sortu.', 'texte_sauvegarde_base' => 'Basean ziurtasun kopia bat sortu.' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_fa.php b/www/plugins-dist/dump/lang/dump_fa.php index fb205331..c3866ca3 100644 --- a/www/plugins-dist/dump/lang/dump_fa.php +++ b/www/plugins-dist/dump/lang/dump_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -81,5 +83,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // U 'une_donnee' => '1 ثبت شده' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_fi.php b/www/plugins-dist/dump/lang/dump_fi.php index 879c0ac3..40eab270 100644 --- a/www/plugins-dist/dump/lang/dump_fi.php +++ b/www/plugins-dist/dump/lang/dump_fi.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=fi // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -23,5 +25,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Varmistuskopioi tietokannan sisältö', 'texte_sauvegarde_base' => 'Varmistuskopioi tietokanta' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_fon.php b/www/plugins-dist/dump/lang/dump_fon.php index 26178107..732c8c60 100644 --- a/www/plugins-dist/dump/lang/dump_fon.php +++ b/www/plugins-dist/dump/lang/dump_fon.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=fon // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -25,5 +27,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'mi lɛ xòmɛ ɔ wlíhɛn', 'texte_sauvegarde_base' => 'mi wlí xòxòk plé ɔ hɛn' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_fr.php b/www/plugins-dist/dump/lang/dump_fr.php index 7d81e311..cee4af5b 100644 --- a/www/plugins-dist/dump/lang/dump_fr.php +++ b/www/plugins-dist/dump/lang/dump_fr.php @@ -1,7 +1,9 @@ 'Oui, je veux écraser ma base avec cette sauvegarde', 'confirmer_ecraser_tables_selection' => 'Oui, je veux écraser les tables sélectionnées avec cette sauvegarde', + 'confirmer_supprimer_sauvegarde' => 'Êtes-vous sûr de vouloir supprimer cette sauvegarde ?', // D 'details_sauvegarde' => 'Détails de la sauvegarde :', @@ -74,5 +77,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // U 'une_donnee' => '1 enregistrement' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_fr_fem.php b/www/plugins-dist/dump/lang/dump_fr_fem.php index dc7d76a1..e82d1241 100644 --- a/www/plugins-dist/dump/lang/dump_fr_fem.php +++ b/www/plugins-dist/dump/lang/dump_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -17,6 +19,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // C 'confirmer_ecraser_base' => 'Oui, je veux écraser ma base avec cette sauvegarde', 'confirmer_ecraser_tables_selection' => 'Oui, je veux écraser les tables sélectionnées avec cette sauvegarde', + 'confirmer_supprimer_sauvegarde' => 'Êtes-vous sûre de vouloir supprimer cette sauvegarde ?', // D 'details_sauvegarde' => 'Détails de la sauvegarde :', @@ -76,5 +79,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // U 'une_donnee' => '1 enregistrement' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_fr_tu.php b/www/plugins-dist/dump/lang/dump_fr_tu.php index f0eea4ac..57ba6774 100644 --- a/www/plugins-dist/dump/lang/dump_fr_tu.php +++ b/www/plugins-dist/dump/lang/dump_fr_tu.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=fr_tu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -17,6 +19,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // C 'confirmer_ecraser_base' => 'Oui, je veux écraser ma base avec cette sauvegarde', 'confirmer_ecraser_tables_selection' => 'Oui, je veux écraser les tables sélectionnées avec cette sauvegarde', + 'confirmer_supprimer_sauvegarde' => 'Es-tu sûr de vouloir supprimer cette sauvegarde ?', // D 'details_sauvegarde' => 'Détails de la sauvegarde :', @@ -73,5 +76,3 @@ Sois prudent avec cette fonctionnalité : les modifications, pertes éventue // U 'une_donnee' => '1 enregistrement' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_gl.php b/www/plugins-dist/dump/lang/dump_gl.php index c108058c..2c1803ec 100644 --- a/www/plugins-dist/dump/lang/dump_gl.php +++ b/www/plugins-dist/dump/lang/dump_gl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=gl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -30,5 +32,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Gardar o contido da base', 'texte_sauvegarde_base' => 'Gardar a base' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_hu.php b/www/plugins-dist/dump/lang/dump_hu.php index 3eb79c81..ddf62b49 100644 --- a/www/plugins-dist/dump/lang/dump_hu.php +++ b/www/plugins-dist/dump/lang/dump_hu.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=hu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -27,5 +29,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Az adatbázis tartalmának mentése', 'texte_sauvegarde_base' => 'Adatbázis mentése' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_id.php b/www/plugins-dist/dump/lang/dump_id.php index 82399810..44af4be6 100644 --- a/www/plugins-dist/dump/lang/dump_id.php +++ b/www/plugins-dist/dump/lang/dump_id.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=id // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -29,5 +31,3 @@ dapat dipulihkan kembali.', # MODIF 'texte_sauvegarde' => 'Backup isi database', 'texte_sauvegarde_base' => 'Backup database' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_is.php b/www/plugins-dist/dump/lang/dump_is.php deleted file mode 100644 index 6e00028c..00000000 --- a/www/plugins-dist/dump/lang/dump_is.php +++ /dev/null @@ -1,80 +0,0 @@ - 'vide', # NEW - 'avis_probleme_ecriture_fichier' => 'Problème d\'écriture du fichier @fichier@', # NEW - - // B - 'bouton_restaurer_base' => ' Restaurer la base', - - // C - 'confirmer_ecraser_base' => 'Oui, je veux écraser ma base avec cette sauvegarde', # NEW - 'confirmer_ecraser_tables_selection' => 'Oui, je veux écraser les tables sélectionnées avec cette sauvegarde', # NEW - - // D - 'details_sauvegarde' => 'Détails de la sauvegarde :', # NEW - - // E - 'erreur_aucune_donnee_restauree' => 'Aucune donnée restaurée', # NEW - 'erreur_connect_dump' => 'Un serveur nommé « @dump@ » existe déjà. Renommez-le.', # NEW - 'erreur_creation_base_sqlite' => 'Impossible de créer une base SQLite pour la sauvegarde', # NEW - 'erreur_nom_fichier' => 'Ce nom de fichier n\'est pas autorisé', # NEW - 'erreur_restaurer_verifiez' => 'Corrigez l\'erreur pour pouvoir restaurer.', # NEW - 'erreur_sauvegarde_deja_en_cours' => 'Vous avez déjà une sauvegarde en cours', # NEW - 'erreur_sqlite_indisponible' => 'Impossible de faire une sauvegarde SQLite sur votre hébergement', # NEW - 'erreur_table_absente' => 'Table @table@ absente', # NEW - 'erreur_table_donnees_manquantes' => 'Table @table@, données manquantes', # NEW - 'erreur_taille_sauvegarde' => 'La sauvegarde semble avoir échoué. Le fichier @fichier@ est vide ou absent.', # NEW - - // I - 'info_aucune_sauvegarde_trouvee' => 'Aucune sauvegarde trouvée', # NEW - 'info_restauration_finie' => 'C\'est fini !. La sauvegarde @archive@ a été restaurée dans votre site. Vous pouvez', # NEW - 'info_restauration_sauvegarde' => ' restauration de la sauvegarde @archive@', # MODIF - 'info_sauvegarde' => ' Sauvegarde', - 'info_sauvegarde_reussi_02' => ' La base a été sauvegardée dans @archive@. Vous pouvez', - 'info_sauvegarde_reussi_03' => ' retourner à la gestion', - 'info_sauvegarde_reussi_04' => ' de votre site.', - 'info_selection_sauvegarde' => 'Vous avez choisi de restaurer la sauvegarde @fichier@. Cette opération est irréversible.', # NEW - - // L - 'label_nom_fichier_restaurer' => 'Ou indiquez le nom du fichier à restaurer', # NEW - 'label_nom_fichier_sauvegarde' => 'Nom du fichier pour la sauvegarde', # NEW - 'label_selectionnez_fichier' => 'Sélectionnez un fichier dans la liste', # NEW - - // N - 'nb_donnees' => '@nb@ enregistrements', # NEW - - // R - 'restauration_en_cours' => 'Restauration en cours', # NEW - - // S - 'sauvegarde_en_cours' => 'Sauvegarde en cours', # NEW - 'sauvegardes_existantes' => 'Sauvegardes existantes', # NEW - 'selectionnez_table_a_restaurer' => 'Sélectionnez les tables à restaurer', # NEW - - // T - 'texte_admin_tech_01' => ' Cette option vous permet de sauvegarder le contenu de la base dans un fichier qui sera stocké dans le répertoire @dossier@.N\'oubliez pas également de récupérer l\'intégralité du répertoire IMG/, qui contient les images et les documents utilisés dans les articles et les rubriques.', - 'texte_admin_tech_02' => ' Attention: cette sauvegarde ne pourra être restaurée QUE dans un site installé sous la même version de SPIP. Il ne faut donc surtout pas « vider la base » en espérant réinstaller la sauvegarde après une mise à jour... Consultez la documentation de SPIP.', # MODIF - 'texte_restaurer_base' => ' Restaurer le contenu d\'une sauvegarde de la base', - 'texte_restaurer_sauvegarde' => ' Cette option vous permet de restaurer une sauvegarde précédemment - effectuée de la base. A cet effet, le fichier contenant la sauvegarde doit avoir été - placé dans le répertoire @dossier@. - Soyez prudent avec cette fonctionnalité : les modifications, pertes éventuelles, sont - irréversibles.', - 'texte_sauvegarde' => ' Sauvegarder le contenu de la base', - 'texte_sauvegarde_base' => ' Sauvegarder la base', - 'tout_restaurer' => 'Restaurer toutes les tables', # NEW - 'tout_sauvegarder' => 'Sauvegarder toutes les tables', # NEW - - // U - 'une_donnee' => '1 enregistrement' # NEW -); - -?> diff --git a/www/plugins-dist/dump/lang/dump_it.php b/www/plugins-dist/dump/lang/dump_it.php index b3cec9c4..785712bf 100644 --- a/www/plugins-dist/dump/lang/dump_it.php +++ b/www/plugins-dist/dump/lang/dump_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -17,6 +19,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // C 'confirmer_ecraser_base' => 'Si, io voglio sovrascrivere il mio database con il backup', 'confirmer_ecraser_tables_selection' => 'Si, io voglio sovrascrivere le tabelle selezionate con il backup', + 'confirmer_supprimer_sauvegarde' => 'Sei sicuro di voler cancellare questo salvataggio ?', // D 'details_sauvegarde' => 'Dettagli del backup :', @@ -76,5 +79,3 @@ Attenzione: le modifiche o la perdita eventuale di dati sono irreversibili. '1 record' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_it_fem.php b/www/plugins-dist/dump/lang/dump_it_fem.php index 5a82c551..204a1d9f 100644 --- a/www/plugins-dist/dump/lang/dump_it_fem.php +++ b/www/plugins-dist/dump/lang/dump_it_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=it_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -29,5 +31,3 @@ Attenzione: le modifiche o la perdita eventuale di dati sono irreversibili. 'Salva il contenuto del database', 'texte_sauvegarde_base' => 'Salva il database' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_ja.php b/www/plugins-dist/dump/lang/dump_ja.php index a58ffe00..c809e82d 100644 --- a/www/plugins-dist/dump/lang/dump_ja.php +++ b/www/plugins-dist/dump/lang/dump_ja.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=ja // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -25,5 +27,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'データベースの内容をバックアップ', 'texte_sauvegarde_base' => 'データベースをバックアップ' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_km.php b/www/plugins-dist/dump/lang/dump_km.php index fc9d34aa..24f9b906 100644 --- a/www/plugins-dist/dump/lang/dump_km.php +++ b/www/plugins-dist/dump/lang/dump_km.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=km // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -26,5 +28,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'ថត​ទុក​នូវ​ខ្លឹមសារ​សំណុំ​ទិន្នន័យ', 'texte_sauvegarde_base' => 'ថត​ទុក​នូវ​សំណុំ​ទិន្នន័យ' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_lb.php b/www/plugins-dist/dump/lang/dump_lb.php index b29bfb2b..e25ce3aa 100644 --- a/www/plugins-dist/dump/lang/dump_lb.php +++ b/www/plugins-dist/dump/lang/dump_lb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -72,5 +74,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // U 'une_donnee' => '1 Zeil' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_my.php b/www/plugins-dist/dump/lang/dump_my.php index fc3c4db1..eea11ff2 100644 --- a/www/plugins-dist/dump/lang/dump_my.php +++ b/www/plugins-dist/dump/lang/dump_my.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=my // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -25,5 +27,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'အချက်လက်သိုလှောင်မှုအကြောင်ရာများကို အရံသိမ်းဆည်းထားပါ', 'texte_sauvegarde_base' => 'အချက်လက်သိုလှောင်မှုကို အရံသိမ်းထားပါ' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_nb.php b/www/plugins-dist/dump/lang/dump_nb.php index 151409b5..4bc3f302 100644 --- a/www/plugins-dist/dump/lang/dump_nb.php +++ b/www/plugins-dist/dump/lang/dump_nb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=nb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -23,5 +25,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Ta sikkerhetskopi av databaseinnholdet', 'texte_sauvegarde_base' => 'Ta sikkerhetskopi av databasen' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_nl.php b/www/plugins-dist/dump/lang/dump_nl.php index 87c1bbe3..2c01eeb9 100644 --- a/www/plugins-dist/dump/lang/dump_nl.php +++ b/www/plugins-dist/dump/lang/dump_nl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,11 +14,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'avis_probleme_ecriture_fichier' => 'Probleem met het wegschrijven van het bestand @fichier@', // B - 'bouton_restaurer_base' => 'De databank herstellen', + 'bouton_restaurer_base' => 'De database herstellen', // C 'confirmer_ecraser_base' => 'Ja, ik wil mijn database overschrijven met de back-up', 'confirmer_ecraser_tables_selection' => 'Ja, ik wil de geselecteerde tabellen met de back-up overschrijven', + 'confirmer_supprimer_sauvegarde' => 'Wil je deze backup echt verwijderen?', // D 'details_sauvegarde' => 'Details van de back-up:', @@ -31,16 +34,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'erreur_sqlite_indisponible' => 'Het is niet mogelijk een SQlite backup te doen op je hosting.', 'erreur_table_absente' => 'Tabel @table@ afwezig', 'erreur_table_donnees_manquantes' => 'Tabel @table@, gegevens ontbreken', - 'erreur_taille_sauvegarde' => 'De backup blijkt misgelukt. Het bestand @fichier@ is leeg of afwezig.', + 'erreur_taille_sauvegarde' => 'De backup blijkt te zijn mislukt. Het bestand @fichier@ is leeg of afwezig.', // I 'info_aucune_sauvegarde_trouvee' => 'Geen backup gevonden', - 'info_restauration_finie' => 'Het is gedaan !. Da backup @archive@ werd op je site teruggezet. Je kan ', + 'info_restauration_finie' => 'Het is klaar!. Da backup @archive@ werd op je site teruggezet. Je kan ', 'info_restauration_sauvegarde' => 'Restauratie van de bescherming @archive@', 'info_sauvegarde' => 'Backup', 'info_sauvegarde_reussi_02' => 'De databank werd bewaard in @archive@. Je kan ', 'info_sauvegarde_reussi_03' => 'terugkeren naar het beheer', - 'info_sauvegarde_reussi_04' => 'op uw website.', + 'info_sauvegarde_reussi_04' => 'van jouw website.', 'info_selection_sauvegarde' => 'Je hebt gekozen om de backup @fichier@ terug te zetten. Deze handeling is onomkeerbaar !', // L @@ -57,19 +60,16 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // S 'sauvegarde_en_cours' => 'Back-up wordt uitgevoerd', 'sauvegardes_existantes' => 'Bestaande backups', - 'selectionnez_table_a_restaurer' => 'Selecteer de tabellen te terugzetten', + 'selectionnez_table_a_restaurer' => 'Selecteer de terug te zetten tabellen', // T - 'texte_admin_tech_01' => 'Deze optie laat je toe de inhoud van de databank te bewaren in een bestand dat bewaard zal worden in de map @dossier@. Vergeet ook niet de volledige map @img@ te bewaren. Zij bevat alle afbeeldingen en bijlagen bij de artikels en rubrieken.', - 'texte_admin_tech_02' => 'Waarschuwing : deze backup kan ENKEL via een website worden teruggezet die onder dezelfde versie van SPIP is geïnstalleerd. Men mag vooral niet « de databank legen » in de hoop de backup terug te kunnen plaatsen na het updaten van SPIP… Raadpleeg de documentatie van SPIP.', - 'texte_restaurer_base' => 'De inhoud van de reservekopie van de databank terugzetten', - 'texte_restaurer_sauvegarde' => 'Deze optie laat je toe een eerder genomen reservekopie van de databank - terug te plaatsen. Hiertoe dien je het bestand met de reservekopie - te plaatsen in de map @dossier@. - Wees voorzichtig met het gebruik van deze optie: alle wijzigingen, eventuele verliezen, zijn - onomkeerbaar.', - 'texte_sauvegarde' => 'Een reservekopie maken van de inhoud van de databank', - 'texte_sauvegarde_base' => 'Reservekopie maken van de databank', + 'texte_admin_tech_01' => 'Deze optie laat je toe de inhoud van de database op te slaan in een bestand dat bewaard zal worden in de map @dossier@. Vergeet ook niet de volledige map @img@ te bewaren. Zij bevat alle afbeeldingen en bijlagen bij de artikelen en rubrieken.', + 'texte_admin_tech_02' => 'Waarschuwing: deze backup kan UITSLUITEND op een website worden teruggezet die onder dezelfde versie van SPIP is geïnstalleerd. Je moet vooral niet «de database ledigen» in de hoop de backup terug te kunnen zetten na het updaten van SPIP… Raadpleeg de documentatie van SPIP.', + 'texte_restaurer_base' => 'De inhoud van de reservekopie van de database terugzetten', + 'texte_restaurer_sauvegarde' => 'Deze optie laat je toe een eerder genomen reservekopie van de database terug te plaatsen. Hiertoe dien je het bestand met de reservekopie te plaatsen in de map @dossier@. + Wees voorzichtig met het gebruik van deze optie: wijzigingen gaan verloren en de handeling is onomkeerbaar.', + 'texte_sauvegarde' => 'Een reservekopie maken van de inhoud van de database', + 'texte_sauvegarde_base' => 'Reservekopie maken van de database', 'tout_restaurer' => 'Alle tabellen terugzetten', 'tout_sauvegarder' => 'Back-up van alle tabellen maken ', @@ -77,5 +77,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // U 'une_donnee' => '1 record' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_no.php b/www/plugins-dist/dump/lang/dump_no.php deleted file mode 100644 index 6e00028c..00000000 --- a/www/plugins-dist/dump/lang/dump_no.php +++ /dev/null @@ -1,80 +0,0 @@ - 'vide', # NEW - 'avis_probleme_ecriture_fichier' => 'Problème d\'écriture du fichier @fichier@', # NEW - - // B - 'bouton_restaurer_base' => ' Restaurer la base', - - // C - 'confirmer_ecraser_base' => 'Oui, je veux écraser ma base avec cette sauvegarde', # NEW - 'confirmer_ecraser_tables_selection' => 'Oui, je veux écraser les tables sélectionnées avec cette sauvegarde', # NEW - - // D - 'details_sauvegarde' => 'Détails de la sauvegarde :', # NEW - - // E - 'erreur_aucune_donnee_restauree' => 'Aucune donnée restaurée', # NEW - 'erreur_connect_dump' => 'Un serveur nommé « @dump@ » existe déjà. Renommez-le.', # NEW - 'erreur_creation_base_sqlite' => 'Impossible de créer une base SQLite pour la sauvegarde', # NEW - 'erreur_nom_fichier' => 'Ce nom de fichier n\'est pas autorisé', # NEW - 'erreur_restaurer_verifiez' => 'Corrigez l\'erreur pour pouvoir restaurer.', # NEW - 'erreur_sauvegarde_deja_en_cours' => 'Vous avez déjà une sauvegarde en cours', # NEW - 'erreur_sqlite_indisponible' => 'Impossible de faire une sauvegarde SQLite sur votre hébergement', # NEW - 'erreur_table_absente' => 'Table @table@ absente', # NEW - 'erreur_table_donnees_manquantes' => 'Table @table@, données manquantes', # NEW - 'erreur_taille_sauvegarde' => 'La sauvegarde semble avoir échoué. Le fichier @fichier@ est vide ou absent.', # NEW - - // I - 'info_aucune_sauvegarde_trouvee' => 'Aucune sauvegarde trouvée', # NEW - 'info_restauration_finie' => 'C\'est fini !. La sauvegarde @archive@ a été restaurée dans votre site. Vous pouvez', # NEW - 'info_restauration_sauvegarde' => ' restauration de la sauvegarde @archive@', # MODIF - 'info_sauvegarde' => ' Sauvegarde', - 'info_sauvegarde_reussi_02' => ' La base a été sauvegardée dans @archive@. Vous pouvez', - 'info_sauvegarde_reussi_03' => ' retourner à la gestion', - 'info_sauvegarde_reussi_04' => ' de votre site.', - 'info_selection_sauvegarde' => 'Vous avez choisi de restaurer la sauvegarde @fichier@. Cette opération est irréversible.', # NEW - - // L - 'label_nom_fichier_restaurer' => 'Ou indiquez le nom du fichier à restaurer', # NEW - 'label_nom_fichier_sauvegarde' => 'Nom du fichier pour la sauvegarde', # NEW - 'label_selectionnez_fichier' => 'Sélectionnez un fichier dans la liste', # NEW - - // N - 'nb_donnees' => '@nb@ enregistrements', # NEW - - // R - 'restauration_en_cours' => 'Restauration en cours', # NEW - - // S - 'sauvegarde_en_cours' => 'Sauvegarde en cours', # NEW - 'sauvegardes_existantes' => 'Sauvegardes existantes', # NEW - 'selectionnez_table_a_restaurer' => 'Sélectionnez les tables à restaurer', # NEW - - // T - 'texte_admin_tech_01' => ' Cette option vous permet de sauvegarder le contenu de la base dans un fichier qui sera stocké dans le répertoire @dossier@.N\'oubliez pas également de récupérer l\'intégralité du répertoire IMG/, qui contient les images et les documents utilisés dans les articles et les rubriques.', - 'texte_admin_tech_02' => ' Attention: cette sauvegarde ne pourra être restaurée QUE dans un site installé sous la même version de SPIP. Il ne faut donc surtout pas « vider la base » en espérant réinstaller la sauvegarde après une mise à jour... Consultez la documentation de SPIP.', # MODIF - 'texte_restaurer_base' => ' Restaurer le contenu d\'une sauvegarde de la base', - 'texte_restaurer_sauvegarde' => ' Cette option vous permet de restaurer une sauvegarde précédemment - effectuée de la base. A cet effet, le fichier contenant la sauvegarde doit avoir été - placé dans le répertoire @dossier@. - Soyez prudent avec cette fonctionnalité : les modifications, pertes éventuelles, sont - irréversibles.', - 'texte_sauvegarde' => ' Sauvegarder le contenu de la base', - 'texte_sauvegarde_base' => ' Sauvegarder la base', - 'tout_restaurer' => 'Restaurer toutes les tables', # NEW - 'tout_sauvegarder' => 'Sauvegarder toutes les tables', # NEW - - // U - 'une_donnee' => '1 enregistrement' # NEW -); - -?> diff --git a/www/plugins-dist/dump/lang/dump_oc_auv.php b/www/plugins-dist/dump/lang/dump_oc_auv.php index d73a821f..9709b12c 100644 --- a/www/plugins-dist/dump/lang/dump_oc_auv.php +++ b/www/plugins-dist/dump/lang/dump_oc_auv.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=oc_auv // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -30,5 +32,3 @@ dins lo repertòri @dossier@. 'texte_sauvegarde' => 'Sauvagardar lo contengut de la basa', 'texte_sauvegarde_base' => 'Sauvagardar la basa' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_oc_gsc.php b/www/plugins-dist/dump/lang/dump_oc_gsc.php index 9ff8bc91..c9f2f44b 100644 --- a/www/plugins-dist/dump/lang/dump_oc_gsc.php +++ b/www/plugins-dist/dump/lang/dump_oc_gsc.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=oc_gsc // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -30,5 +32,3 @@ dens lo repertòri @dossier@. 'texte_sauvegarde' => 'Sauvagardar lo contengut de la basa', 'texte_sauvegarde_base' => 'Sauvagardar la basa' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_oc_lms.php b/www/plugins-dist/dump/lang/dump_oc_lms.php index 8c9295b2..b6d63b3e 100644 --- a/www/plugins-dist/dump/lang/dump_oc_lms.php +++ b/www/plugins-dist/dump/lang/dump_oc_lms.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=oc_lms // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -31,5 +33,3 @@ dins lo repertòri @dossier@. 'texte_sauvegarde' => 'Sauvagardar lo contengut de la basa', 'texte_sauvegarde_base' => 'Sauvagardar la basa' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_oc_lnc.php b/www/plugins-dist/dump/lang/dump_oc_lnc.php index b84fde18..172b5005 100644 --- a/www/plugins-dist/dump/lang/dump_oc_lnc.php +++ b/www/plugins-dist/dump/lang/dump_oc_lnc.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=oc_lnc // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -29,5 +31,3 @@ dins lo repertòri @dossier@. 'texte_sauvegarde' => 'Salvagardar lo contengut de la basa', 'texte_sauvegarde_base' => 'Salvagardar la basa' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_oc_ni.php b/www/plugins-dist/dump/lang/dump_oc_ni.php index 8c35e598..8184de53 100644 --- a/www/plugins-dist/dump/lang/dump_oc_ni.php +++ b/www/plugins-dist/dump/lang/dump_oc_ni.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=oc_ni // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -29,5 +31,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Sauvagardar lo contengut de la basa', 'texte_sauvegarde_base' => 'Sauvagardar la basa' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_oc_ni_la.php b/www/plugins-dist/dump/lang/dump_oc_ni_la.php index b367ba09..b89ca77d 100644 --- a/www/plugins-dist/dump/lang/dump_oc_ni_la.php +++ b/www/plugins-dist/dump/lang/dump_oc_ni_la.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=oc_ni_la // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -30,5 +32,3 @@ dins lo repertòri @dossier@. 'texte_sauvegarde' => 'Sauvagardar lo contengut de la basa', 'texte_sauvegarde_base' => 'Sauvagardar la basa' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_oc_ni_mis.php b/www/plugins-dist/dump/lang/dump_oc_ni_mis.php new file mode 100644 index 00000000..c3194147 --- /dev/null +++ b/www/plugins-dist/dump/lang/dump_oc_ni_mis.php @@ -0,0 +1,81 @@ + 'vuèi', + 'avis_probleme_ecriture_fichier' => 'Proublèma d’escritura dóu fichié @fichier@', + + // B + 'bouton_restaurer_base' => 'Restaurà la basa', + + // C + 'confirmer_ecraser_base' => 'Ahì, vouòli escrasà la miéu basa embé aquela sauvagarda', + 'confirmer_ecraser_tables_selection' => 'Ahì, vouòli escrasà li taula seleciounadi embé aquela sauvagarda', + 'confirmer_supprimer_sauvegarde' => 'Sias segur de voulé suprimà aquela sauvagarda ?', + + // D + 'details_sauvegarde' => 'Detai de la sauvagarda :', + + // E + 'erreur_aucune_donnee_restauree' => 'Minga dounada restaurada', + 'erreur_connect_dump' => 'Esista jà un servidou nouminat « @dump@ ». Renouminàs-lou.', + 'erreur_creation_base_sqlite' => 'Empoussible de creà una basa SQLite per la sauvagarda', + 'erreur_nom_fichier' => 'Aqueu noum de fichié es pas autourisat', + 'erreur_restaurer_verifiez' => 'Courregès l’errour per poudé restaurà.', + 'erreur_sauvegarde_deja_en_cours' => 'Avès jà una sauvagarda en cours', + 'erreur_sqlite_indisponible' => 'Empoussible de faire una sauvagarda SQLite sus lou vouòstre aubergadour', + 'erreur_table_absente' => 'Taula @table@ assenta', + 'erreur_table_donnees_manquantes' => 'Taula @table@, dounada mancanti', + 'erreur_taille_sauvegarde' => 'La sauvagarda a souhit. Lou fichié @fichier@ es viéu o assent.', + + // I + 'info_aucune_sauvegarde_trouvee' => 'Minga sauvagarda trouvada', + 'info_restauration_finie' => 'Es acabat ! La sauvagarda @archive@ es estada restaurada en lou vouòstre sit. Poudès', + 'info_restauration_sauvegarde' => 'Restauracioun de la sauvagarda @archive@', + 'info_sauvegarde' => 'Sauvagarda', + 'info_sauvegarde_reussi_02' => 'La basa es estada sauvagardada en @archive@. Poudès', + 'info_sauvegarde_reussi_03' => 'tournà à la gestioun', + 'info_sauvegarde_reussi_04' => 'dóu vouòstre sit.', + 'info_selection_sauvegarde' => 'Avès chausit de restaurà la sauvagarda @fichier@. Aquela ouperacioun noun es reversìble.', + + // L + 'label_nom_fichier_restaurer' => 'O indas lou noum dóu fichié da restaurà', + 'label_nom_fichier_sauvegarde' => 'Noum dóu fichié per la sauvegarde', + 'label_selectionnez_fichier' => 'Seleciounas un fichié en la lista', + + // N + 'nb_donnees' => '@nb@ enregistramen', + + // R + 'restauration_en_cours' => 'Restauracioun en cours', + + // S + 'sauvegarde_en_cours' => 'Sauvagarda en cours', + 'sauvegardes_existantes' => 'Sauvagarda esistenti', + 'selectionnez_table_a_restaurer' => 'Seleciounas li taula da restaurà', + + // T + 'texte_admin_tech_01' => 'Aquela oupcioun vous permete de sauvagardà lou countengut de la basa en un fichier que serà counservat en lou repertori @dossier@. Noun oublidès màncou de recuperà l’integralità dóu repertori @img@, que counten lu image e lu doucumen utilisat en lu article e rùbrica.', + 'texte_admin_tech_02' => 'Mèfi : aquela sauvagarda si pourà estre restaurada SOULAMEN en un sit instalat embé la mema versioun de SPIP. Cau soubretout pas « vuà la basa » en esperant reinstalà la sauvagarda après una messa a jou... Cousultas la la doucumentacioun de SPIP.', + 'texte_restaurer_base' => 'Restaurà lou countengut d’una sauvagarda de la basa', + 'texte_restaurer_sauvegarde' => 'Aquela oupcioun vous permete de restaurà una sauvagarda prechedenta de la + basa. Per faire acò, cau avé plaçat lou fichié que counten + la sauvagarda en lou repertori @dossier@. + Siguès prudent embé aquela founciounalità : li moudificacioun e li perta eventuali noun soun + reversibli.', + 'texte_sauvegarde' => 'Sauvagardà lou countengut de la basa', + 'texte_sauvegarde_base' => 'Sauvagardà la basa', + 'tout_restaurer' => 'Restaurà touti li taula', + 'tout_sauvegarder' => 'Sauvagardà touti li taula', + + // U + 'une_donnee' => '1 enregistramen' +); diff --git a/www/plugins-dist/dump/lang/dump_oc_prv.php b/www/plugins-dist/dump/lang/dump_oc_prv.php index aa41ad6c..8430226b 100644 --- a/www/plugins-dist/dump/lang/dump_oc_prv.php +++ b/www/plugins-dist/dump/lang/dump_oc_prv.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=oc_prv // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -30,5 +32,3 @@ dins lo repertòri @dossier@. 'texte_sauvegarde' => 'Sauvagardar lo contengut de la basa', 'texte_sauvegarde_base' => 'Sauvagardar la basa' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_oc_va.php b/www/plugins-dist/dump/lang/dump_oc_va.php index 1ec0044a..442f74ed 100644 --- a/www/plugins-dist/dump/lang/dump_oc_va.php +++ b/www/plugins-dist/dump/lang/dump_oc_va.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=oc_va // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -30,5 +32,3 @@ dins lo repertòri @dossier@. 'texte_sauvegarde' => 'Sauvagardar lo contengut de la basa', 'texte_sauvegarde_base' => 'Sauvagardar la basa' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_pl.php b/www/plugins-dist/dump/lang/dump_pl.php index 83a81017..994fc172 100644 --- a/www/plugins-dist/dump/lang/dump_pl.php +++ b/www/plugins-dist/dump/lang/dump_pl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=pl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -30,5 +32,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Backup zawartości bazy danych', 'texte_sauvegarde_base' => 'Backup bazy danych' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_pt.php b/www/plugins-dist/dump/lang/dump_pt.php index b7af2ae0..021d64e0 100644 --- a/www/plugins-dist/dump/lang/dump_pt.php +++ b/www/plugins-dist/dump/lang/dump_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -76,5 +78,3 @@ efectuada à base de dados. Para esse efeito, o ficheiro que contém a cópia de // U 'une_donnee' => '1 registo' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_pt_br.php b/www/plugins-dist/dump/lang/dump_pt_br.php index 92bf7bf1..213caa89 100644 --- a/www/plugins-dist/dump/lang/dump_pt_br.php +++ b/www/plugins-dist/dump/lang/dump_pt_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=pt_br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -14,20 +16,51 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // B 'bouton_restaurer_base' => 'Restaurar a base', + // C + 'confirmer_ecraser_base' => 'Sim, quero substituir minha base de dados por essa cópia de segurança', + 'confirmer_ecraser_tables_selection' => 'Sim, quero substituir as tabelas selecionadas por essa cópia de segurança', + 'confirmer_supprimer_sauvegarde' => 'Tem certeza de que quer remover essa cópia de segurança?', + // D 'details_sauvegarde' => 'Detalhes da cópia de segurança:', // E - 'erreur_aucune_donnee_restauree' => 'Nhenhum dado restaurado', + 'erreur_aucune_donnee_restauree' => 'Nenhum dado restaurado', + 'erreur_connect_dump' => 'Já existe um servidor chamado «@dump@». Escolha outro nome.', 'erreur_creation_base_sqlite' => 'Impossível criar uma base SQLite para a cópia de segurança', 'erreur_nom_fichier' => 'Este nome de arquivo não é autorizado', + 'erreur_restaurer_verifiez' => 'Corrija o erro para poder restaurar.', + 'erreur_sauvegarde_deja_en_cours' => 'Você já possui uma cópia de segurança em andamento', + 'erreur_sqlite_indisponible' => 'Não foi possível fazer uma cópia de segurança SQLite em seu provedor de hospedagem', + 'erreur_table_absente' => 'Tabela @table@ ausente', + 'erreur_table_donnees_manquantes' => 'Tabela @table@, faltando dados', + 'erreur_taille_sauvegarde' => 'A cópia de segurança parece ter falhado. O arquivo @fichier@ está vazio ou não existe.', // I + 'info_aucune_sauvegarde_trouvee' => 'Nenhuma cópia de segurança encontrada', + 'info_restauration_finie' => 'Pronto! A cópia de segurança @archive@ foi restaurada em seu site. Você pode', 'info_restauration_sauvegarde' => 'Restauração da cópia de segurança @archive@', 'info_sauvegarde' => 'Cópia de segurança', 'info_sauvegarde_reussi_02' => 'A cópia de segurança da base foi gravada em @archive@. Você pode', 'info_sauvegarde_reussi_03' => 'voltar para o gerenciamento', 'info_sauvegarde_reussi_04' => 'do seu site.', + 'info_selection_sauvegarde' => 'Você escolheu restaurar a cópia de segurança @fichier@. Esta operação é irreversível.', + + // L + 'label_nom_fichier_restaurer' => 'Ou indique o nome do arquivo a ser restaurado', + 'label_nom_fichier_sauvegarde' => 'Nome do arquivo para a cópia de segurança', + 'label_selectionnez_fichier' => 'Selecione um arquivo na lista', + + // N + 'nb_donnees' => '@nb@ registros', + + // R + 'restauration_en_cours' => 'Restauração em andamento', + + // S + 'sauvegarde_en_cours' => 'Cópia de segurança em andamento', + 'sauvegardes_existantes' => 'Cópias de segurança existentes', + 'selectionnez_table_a_restaurer' => 'Selecione as tabelas que quer restaurar', // T 'texte_admin_tech_01' => 'Esta opção permite fazer uma cópia de segurança do conteúdo da base num arquivo que será gravado no diretório @dossier@. Não se esqueça, também, de transferir a totalidade do diretório @img@, que contém as imagens e os documentos usados nas matérias e nas seções.', @@ -37,10 +70,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( Seja cuidadoso com esta funcionalidade: as alterações e, eventualmente perdas, são irreversíveis.', 'texte_sauvegarde' => 'Fazer uma cópia de segurança do conteúdo da base', 'texte_sauvegarde_base' => 'Fazer uma cópia de segurança da base', + 'tout_restaurer' => 'Restaurar todas as tabelas', 'tout_sauvegarder' => 'Fazer cópia de segurança de todas as tabelas', // U 'une_donnee' => '1 registro' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_ro.php b/www/plugins-dist/dump/lang/dump_ro.php index 789518b9..1ffe68b9 100644 --- a/www/plugins-dist/dump/lang/dump_ro.php +++ b/www/plugins-dist/dump/lang/dump_ro.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=ro // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -28,5 +30,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Salvaţi conţinutul bazei de date', 'texte_sauvegarde_base' => 'Salvaţi baza de date' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_ru.php b/www/plugins-dist/dump/lang/dump_ru.php index 02c6d59a..957a5d86 100644 --- a/www/plugins-dist/dump/lang/dump_ru.php +++ b/www/plugins-dist/dump/lang/dump_ru.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -17,16 +19,17 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // C 'confirmer_ecraser_base' => 'Да, я хочу перезаписать всю текущую информацию данными из резервной копии', 'confirmer_ecraser_tables_selection' => 'Да, я хочу заменить информацию в выбранных таблицах данными из резервной копии.', + 'confirmer_supprimer_sauvegarde' => 'Вы уверены, что хотите удалить эту резервную копию?', // D - 'details_sauvegarde' => 'Информация о резервной копии :', + 'details_sauvegarde' => 'Информация о резервной копии:', // E 'erreur_aucune_donnee_restauree' => 'Не удалось восстановить информацию', - 'erreur_connect_dump' => 'Сервер « @dump@ » уже существует. Переименуйте его.', + 'erreur_connect_dump' => 'Сервер «@dump@» уже существует. Переименуйте его.', 'erreur_creation_base_sqlite' => 'Не удалось создать SQLite базу для бэкапа', - 'erreur_nom_fichier' => 'Данное называние файла не разрешено', - 'erreur_restaurer_verifiez' => 'Исправьте ошибки для того, что бы продолжить восстановление.', + 'erreur_nom_fichier' => 'Данное название файла не разрешено', + 'erreur_restaurer_verifiez' => 'Исправьте ошибки для того, чтобы продолжить восстановление.', 'erreur_sauvegarde_deja_en_cours' => 'Резервная копия уже создается', 'erreur_sqlite_indisponible' => 'Не получается сделать резервную копию SQLite на вашем хостинге', 'erreur_table_absente' => 'Не хватает таблицы @table@ ', @@ -60,13 +63,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'selectionnez_table_a_restaurer' => 'Выбрать таблицы для восстановления', // T - 'texte_admin_tech_01' => 'Вы можете сделать резервную копию базы данных.Файл будет сохранен в каталоге @dossier@. Не забудьте скопировать папку @img@, в которой сохранены изображения и загруженные файлы. Все файлы необходимо скопировать на локальный компьютер или другой сервер.', - 'texte_admin_tech_02' => 'Внимание: вы можете восстановить резервную копию в той версии SPIP, в которой вы ее создали. Подробнее см. документацию.', + 'texte_admin_tech_01' => 'Вы можете сделать резервную копию базы данных. Файл будет сохранен в каталоге @dossier@. Не забудьте скопировать папку @img@, в которой сохранены изображения и загруженные файлы. Все файлы необходимо скопировать на локальный компьютер или другой сервер.', + 'texte_admin_tech_02' => 'Внимание: вы можете восстановить резервную копию только в той версии SPIP, в которой вы ее создали. Подробнее см. документацию.', 'texte_restaurer_base' => 'Восстановление из резервной копии', 'texte_restaurer_sauvegarde' => 'Вы можете восстановить сайт из резервной копии. Для этого поместите файл с копией в папку @dossier@.
    -Внимание: вся текущая информация будет заменена информацией с резервной копии. Эта операция необратима, если вы не уверены в том, что вы делаете - сделайте резервную копию перед началом восстановления. ', +Внимание: вся текущая информация будет заменена информацией из резервной копии. Эта операция необратима, если вы не уверены в том, что вы делаете, - сделайте резервную копию перед началом восстановления. ', 'texte_sauvegarde' => 'Сохранить базу данных', 'texte_sauvegarde_base' => 'Сохранить базу данных', 'tout_restaurer' => 'Восстановить все таблицы', @@ -75,5 +78,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // U 'une_donnee' => '1 запись' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_sk.php b/www/plugins-dist/dump/lang/dump_sk.php index dcf4fbb2..11124baf 100644 --- a/www/plugins-dist/dump/lang/dump_sk.php +++ b/www/plugins-dist/dump/lang/dump_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -17,6 +19,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // C 'confirmer_ecraser_base' => 'Áno, chcem prepísať svoju databázu so zálohou', 'confirmer_ecraser_tables_selection' => 'Áno, chcem prepísať vybrané tabuľky so zálohou', + 'confirmer_supprimer_sauvegarde' => 'Určite chcete vymazať túto zálohu?', // D 'details_sauvegarde' => 'Podrobnosti o zálohe:', @@ -76,5 +79,3 @@ sa nedajú odvolať.
    ', // U 'une_donnee' => '1 záznam' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_sv.php b/www/plugins-dist/dump/lang/dump_sv.php index 76b28585..b7e6e9f6 100644 --- a/www/plugins-dist/dump/lang/dump_sv.php +++ b/www/plugins-dist/dump/lang/dump_sv.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=sv // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -23,5 +25,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Säkerhetskopiera innehållet i databasen', 'texte_sauvegarde_base' => 'Säkerhetskopiera databasen' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_tr.php b/www/plugins-dist/dump/lang/dump_tr.php index d39ff2e0..90f60ca7 100644 --- a/www/plugins-dist/dump/lang/dump_tr.php +++ b/www/plugins-dist/dump/lang/dump_tr.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=tr // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -25,5 +27,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => 'Veritabanının içeriğini yedekle', 'texte_sauvegarde_base' => 'Veritabanını yedekle' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_uk.php b/www/plugins-dist/dump/lang/dump_uk.php new file mode 100644 index 00000000..53146d68 --- /dev/null +++ b/www/plugins-dist/dump/lang/dump_uk.php @@ -0,0 +1,78 @@ + 'порожньо', + 'avis_probleme_ecriture_fichier' => 'Не вдалося зберегти файл @fichier@', + + // B + 'bouton_restaurer_base' => 'Відновити базу даних', + + // C + 'confirmer_ecraser_base' => 'Так, я хочу перезаписати усю поточну інформацію даними з резервної копії', + 'confirmer_ecraser_tables_selection' => 'Так, я хочу замінити інформацію в обраних таблицях даними з резервної копії.', + 'confirmer_supprimer_sauvegarde' => 'Ви впевнені, що хочете видалити цю резервну копію?', + + // D + 'details_sauvegarde' => 'Інформація про резервну копію:', + + // E + 'erreur_aucune_donnee_restauree' => 'Не вдалося відновити інформацію', + 'erreur_connect_dump' => 'Сервер „@dump@” вже існує. Перейменуйте його.', + 'erreur_creation_base_sqlite' => 'Не вдалося створити SQLite базу для бекапу', + 'erreur_nom_fichier' => 'Дана назва файлу не є дозволеною', + 'erreur_restaurer_verifiez' => 'Виправте помилки для того, щоб продовжити відновлення.', + 'erreur_sauvegarde_deja_en_cours' => 'Резервна копія вже створюється', + 'erreur_sqlite_indisponible' => 'Не вдалося зробити резервну копію SQLite на вашому хостингу', + 'erreur_table_absente' => 'Не вистачає таблиці @table@ ', + 'erreur_table_donnees_manquantes' => 'В таблиці @table@ нема інформації', + 'erreur_taille_sauvegarde' => 'Проблеми з резервною копією. Схоже, що файл @fichier@ порожній або відсутній.', + + // I + 'info_aucune_sauvegarde_trouvee' => 'Резервні копії не знайдено', + 'info_restauration_finie' => 'Відновлення завершено! Резервну копію @archive@ завантажено на сайт. Ви можете', + 'info_restauration_sauvegarde' => 'Відновлення резервної копії @archive@', + 'info_sauvegarde' => 'Резервна копія', + 'info_sauvegarde_reussi_02' => 'Базу даних було збережено в @archive@. Ви можете', + 'info_sauvegarde_reussi_03' => 'повернутися до налаштувань', + 'info_sauvegarde_reussi_04' => 'сайту.', + 'info_selection_sauvegarde' => 'Ви вирішили відновити інформацію з резервної копії в файлі @fichier@. Дана операція незворотна.', + + // L + 'label_nom_fichier_restaurer' => '... або вкажіть назву файлу з резервною копією:', + 'label_nom_fichier_sauvegarde' => 'Назва файлу резервної копії', + 'label_selectionnez_fichier' => 'Оберіть файл зі списку:', + + // N + 'nb_donnees' => '@nb@ записів', + + // R + 'restauration_en_cours' => 'Йде відновлення', + + // S + 'sauvegarde_en_cours' => 'Йде збереження даних', + 'sauvegardes_existantes' => 'Резервні копії', + 'selectionnez_table_a_restaurer' => 'Обрати таблиці для відновлення', + + // T + 'texte_admin_tech_01' => 'Ви можете зробити резервну копію бази даних. Файл буде збережено в каталозі @dossier@. Не забудьте скопіювати папку @img@, в які збережені зображення і завантажені файли. Усі файли необхідно скопіювати на локальний комп’ютер або інший сервер.', + 'texte_admin_tech_02' => 'Увага: ви можете відновити резервну копію лише в тій версії SPIP, в якій ви її створили. Детальніше див. документацію.', + 'texte_restaurer_base' => 'Відновлення з резервної копії', + 'texte_restaurer_sauvegarde' => 'Ви можете відновити сайт з резервної копії. Для цього помістить файл з копією в папку @dossier@.
    +Увага: уся поточна інформація буде замінена інформацією з резервної копії. Ця операція незворотна! Якщо ви не певні в тому, що ви робите, - зробіть резервну копію перед початком відновлення. ', + 'texte_sauvegarde' => 'Зберегти базу даних', + 'texte_sauvegarde_base' => 'Зберегти базу даних', + 'tout_restaurer' => 'Відновити усі таблиці', + 'tout_sauvegarder' => 'Зберегти усі таблиці', + + // U + 'une_donnee' => '1 запис' +); diff --git a/www/plugins-dist/dump/lang/dump_vi.php b/www/plugins-dist/dump/lang/dump_vi.php index 68e9c685..5f9960b3 100644 --- a/www/plugins-dist/dump/lang/dump_vi.php +++ b/www/plugins-dist/dump/lang/dump_vi.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=vi // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -21,11 +23,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_admin_tech_01' => 'Chọn lựa này cho phép bạn giữ lại nội dung của database vào trong một hồ sơ đựng trong ngăn @dossier@. Và cũng đừng quên cất giữ lại lại toàn bộ ngăn IMG/, chứa đựng các hình ảnh dùng trong các bài vở và đề mục.', # MODIF 'texte_admin_tech_02' => 'Cảnh báo: CHỈ CÓ THỂ phục hồi bản dự trữ này trong một website có cùng ấn bản SPIP. Lỗi lầm thường hay vấp phải là thực hiện việc dự trữ database trước khi nâng cấp SPIP... - Để biết thêm, xin đọc [tài liệu SPIP->https://www.spip.net/fr_article1489.html].', # MODIF + Để biết thêm, xin đọc [tài liệu SPIP->http://www.spip.net/fr_article1489.html].', # MODIF 'texte_restaurer_base' => 'Phục hồi nội dung của kho dự trữ database', 'texte_restaurer_sauvegarde' => 'Chọn lựa này cho phép bạn phục hồi một hồ sơ dự trữ trước đó của database. Để thực hiện điều này, hồ sơ chứa phần dự trữ phải được nên giữ ở thư mục @dossier@. Cẩn thận với đặc điểm này: Bất cứ sửa đổi hay thất thoát nào xảy ra là không làm ngược lại được.', # MODIF 'texte_sauvegarde' => 'Dự trữ nội dung của database', 'texte_sauvegarde_base' => 'Dự trữ database' ); - -?> diff --git a/www/plugins-dist/dump/lang/dump_zh.php b/www/plugins-dist/dump/lang/dump_zh.php index 15d376bf..7b6f55f5 100644 --- a/www/plugins-dist/dump/lang/dump_zh.php +++ b/www/plugins-dist/dump/lang/dump_zh.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/dump?lang_cible=zh // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -33,5 +35,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'texte_sauvegarde' => '备份数据库内容', 'texte_sauvegarde_base' => '备份数据库' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump.xml b/www/plugins-dist/dump/lang/paquet-dump.xml index be37cddc..86c792d3 100644 --- a/www/plugins-dist/dump/lang/paquet-dump.xml +++ b/www/plugins-dist/dump/lang/paquet-dump.xml @@ -22,15 +22,21 @@ + + + - + + + + @@ -43,4 +49,7 @@ + + + diff --git a/www/plugins-dist/dump/lang/paquet-dump_ar.php b/www/plugins-dist/dump/lang/paquet-dump_ar.php index 99940cad..333eca80 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_ar.php +++ b/www/plugins-dist/dump/lang/paquet-dump_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'نسخ احتياطي لقاعدة البيانات بتنسيق SQLite واسترجاعها', 'dump_slogan' => 'نسخ احتياطي لقاعدة بيانات SPIP واسترجاعها' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_de.php b/www/plugins-dist/dump/lang/paquet-dump_de.php index 59040c02..b3a90ff5 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_de.php +++ b/www/plugins-dist/dump/lang/paquet-dump_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'Sicherung und Wiederherstellung der Datenbank im SQLite-Format', 'dump_slogan' => 'Sicherung und Wiederherstellung der SPIP-Datenbank' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_en.php b/www/plugins-dist/dump/lang/paquet-dump_en.php index ae57db9a..ab4efe42 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_en.php +++ b/www/plugins-dist/dump/lang/paquet-dump_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'Backup and restoration of the database in SQLite format', 'dump_slogan' => 'Backup and restore database SPIP' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_eo.php b/www/plugins-dist/dump/lang/paquet-dump_eo.php index 3c13b79d..0912f495 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_eo.php +++ b/www/plugins-dist/dump/lang/paquet-dump_eo.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=eo // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'Savkopio de la datumbazo en SQLite kaj restaŭro', 'dump_slogan' => 'Savkopio kaj restaŭro de la datumbazo SPIP' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_es.php b/www/plugins-dist/dump/lang/paquet-dump_es.php index 17904e87..d7d58791 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_es.php +++ b/www/plugins-dist/dump/lang/paquet-dump_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'Copia de seguridad en SQLite y recuperación', 'dump_slogan' => 'Copia de seguridad y recuperación de la base de datos de SPIP' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_fa.php b/www/plugins-dist/dump/lang/paquet-dump_fa.php index 2523c396..bb3c0e31 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_fa.php +++ b/www/plugins-dist/dump/lang/paquet-dump_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'بك‌آپ و ذخيره‌سازي پايگاه داده‌ها در فرمت اس.كيو.لايت', 'dump_slogan' => 'بك‌آپ و ذخيره سازي پايگاه داده‌‌هاي اسپيپ' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_fr.php b/www/plugins-dist/dump/lang/paquet-dump_fr.php index 04e6c73c..1c9ee802 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_fr.php +++ b/www/plugins-dist/dump/lang/paquet-dump_fr.php @@ -1,7 +1,9 @@ 'Sauvegarde de la base en SQLite et restauration', 'dump_slogan' => 'Sauvegarde et restauration de la base SPIP' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_fr_fem.php b/www/plugins-dist/dump/lang/paquet-dump_fr_fem.php index cf52490d..44572688 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_fr_fem.php +++ b/www/plugins-dist/dump/lang/paquet-dump_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'Sauvegarde de la base de données en SQLite et restauration', 'dump_slogan' => 'Sauvegarde et restauration de la base de données SPIP' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_fr_tu.php b/www/plugins-dist/dump/lang/paquet-dump_fr_tu.php new file mode 100644 index 00000000..e2279082 --- /dev/null +++ b/www/plugins-dist/dump/lang/paquet-dump_fr_tu.php @@ -0,0 +1,15 @@ + 'Sauvegarde de la base en SQLite et restauration', + 'dump_slogan' => 'Sauvegarde et restauration de la base SPIP' +); diff --git a/www/plugins-dist/dump/lang/paquet-dump_it.php b/www/plugins-dist/dump/lang/paquet-dump_it.php index 327f7da5..528a4192 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_it.php +++ b/www/plugins-dist/dump/lang/paquet-dump_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'Backup e ripristino della base dati SQLite', 'dump_slogan' => 'Backup e ripristino del database di SPIP' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_lb.php b/www/plugins-dist/dump/lang/paquet-dump_lb.php index 0422dc53..03e023ab 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_lb.php +++ b/www/plugins-dist/dump/lang/paquet-dump_lb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'Backup vun der Datebank als SQLite an Zeréckspillen', 'dump_slogan' => 'Backup an Zeréckspillen vun der SPIP-Datebank' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_nl.php b/www/plugins-dist/dump/lang/paquet-dump_nl.php index 051fa9dc..fdf2fdc6 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_nl.php +++ b/www/plugins-dist/dump/lang/paquet-dump_nl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'Backup van de database in SQLite en restauratie', 'dump_slogan' => 'Back-up en restauratie van de SPIP database' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_oc_ni_mis.php b/www/plugins-dist/dump/lang/paquet-dump_oc_ni_mis.php new file mode 100644 index 00000000..c593b366 --- /dev/null +++ b/www/plugins-dist/dump/lang/paquet-dump_oc_ni_mis.php @@ -0,0 +1,15 @@ + 'Sauvagarda de la basa en SQLite e restauramen', + 'dump_slogan' => 'Sauvagarda e restauramen de la basa SPIP' +); diff --git a/www/plugins-dist/dump/lang/paquet-dump_pt.php b/www/plugins-dist/dump/lang/paquet-dump_pt.php index 330710ff..f35a511d 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_pt.php +++ b/www/plugins-dist/dump/lang/paquet-dump_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'Cópia de segurança e restauro da base de dados em SQLite ', 'dump_slogan' => 'Cópia de segurança e restauro da base de dados SPIP' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_pt_br.php b/www/plugins-dist/dump/lang/paquet-dump_pt_br.php index d4023ea0..f8307028 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_pt_br.php +++ b/www/plugins-dist/dump/lang/paquet-dump_pt_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=pt_br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'Cópia de segurança da base em SQLite e restauro', 'dump_slogan' => 'Cópia de segurança e restauro da base SPIP' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_ru.php b/www/plugins-dist/dump/lang/paquet-dump_ru.php index ba38fe40..c8cc9eb0 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_ru.php +++ b/www/plugins-dist/dump/lang/paquet-dump_ru.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'Резервная копия в SQLite', 'dump_slogan' => 'Резервное копирование' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_sk.php b/www/plugins-dist/dump/lang/paquet-dump_sk.php index 7c811904..052d7d39 100644 --- a/www/plugins-dist/dump/lang/paquet-dump_sk.php +++ b/www/plugins-dist/dump/lang/paquet-dump_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-dump?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'dump_description' => 'Záloha databázy v SQLite a jej obnovenie', 'dump_slogan' => 'Záloha a obnovenie databázy SPIPu' ); - -?> diff --git a/www/plugins-dist/dump/lang/paquet-dump_uk.php b/www/plugins-dist/dump/lang/paquet-dump_uk.php new file mode 100644 index 00000000..29b62ffa --- /dev/null +++ b/www/plugins-dist/dump/lang/paquet-dump_uk.php @@ -0,0 +1,15 @@ + 'Резервне копіювання і відновлення бази даних у SQLite форматі', + 'dump_slogan' => 'Резервне копіювання і відновлення бази SPIP' +); diff --git a/www/plugins-dist/dump/paquet.xml b/www/plugins-dist/dump/paquet.xml index 76778d3d..684bc90a 100644 --- a/www/plugins-dist/dump/paquet.xml +++ b/www/plugins-dist/dump/paquet.xml @@ -1,11 +1,11 @@ +> Dump diff --git a/www/plugins-dist/dump/prive/squelettes/contenu/restaurer_fonctions.php b/www/plugins-dist/dump/prive/squelettes/contenu/restaurer_fonctions.php index 773a8844..de573bc4 100644 --- a/www/plugins-dist/dump/prive/squelettes/contenu/restaurer_fonctions.php +++ b/www/plugins-dist/dump/prive/squelettes/contenu/restaurer_fonctions.php @@ -10,35 +10,46 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/dump'); +/** + * Afficher les erreurs survenues dans la restauration + * + * @param string $status_file Nom du fichier qui contient le statut de la restauration sous une forme serialisee + * @return string Code HTML a afficher + */ function dump_afficher_tables_restaurees_erreurs($status_file) { $status = dump_lire_status($status_file); $tables = $status['tables_copiees']; - $corps = ""; + $corps = ''; $erreurs = array(); - if (!$tables) - return "

    "._T("dump:erreur_aucune_donnee_restauree")."

    "; + if (!$tables) { + return '

    ' . _T('dump:erreur_aucune_donnee_restauree') . '

    '; + } // lister les tables copiees aller verifier dans la base // qu'on a le bon nombre de donnees - foreach($tables as $t=>$n) { - if (!sql_showtable($t,true) OR $n===0) - $erreurs[$t] = _T('dump:erreur_table_absente',array('table'=>"$t")); - else { + foreach ($tables as $t => $n) { + if (!sql_showtable($t, true) or $n === 0) { + $erreurs[$t] = _T('dump:erreur_table_absente', array('table' => "$t")); + } else { $n = abs(intval($n)); $n_dump = intval(sql_countsel($t)); - if ($n_dump<$n) - $erreurs[$t] = _T('dump:erreur_table_donnees_manquantes',array('table'=>"$t"));; + if ($n_dump < $n) { + $erreurs[$t] = _T('dump:erreur_table_donnees_manquantes', array('table' => "$t")); + }; } } - if (count($erreurs)) - $corps = "
    • ".implode("
    • ",$erreurs)."
    "; + if (count($erreurs)) { + $corps = "
    • " . implode("
    • ", $erreurs) . '
    '; + } + return $corps; } -?> \ No newline at end of file diff --git a/www/plugins-dist/dump/prive/squelettes/contenu/sauvegarder.html b/www/plugins-dist/dump/prive/squelettes/contenu/sauvegarder.html index b336c5b0..554e0764 100644 --- a/www/plugins-dist/dump/prive/squelettes/contenu/sauvegarder.html +++ b/www/plugins-dist/dump/prive/squelettes/contenu/sauvegarder.html @@ -4,7 +4,7 @@

    <:dump:texte_sauvegarde:>

    #SET{dir_dump,#VAL{''}|concat{#REM|dump_repertoire|joli_repertoire{},''}} - #SET{dir_img,#VAL{''}|concat{#EVAL{_DIR_IMG}|joli_repertoire{},''}} + #SET{dir_img,#VAL{''}|concat{#CONST{_DIR_IMG}|joli_repertoire{},''}} #SET{spipnet,#EVAL{$GLOBALS}|table_valeur{home_server}|concat{'/',#LANG,'_article1489.html'}} #BOITE_OUVRIR{'','info'} @@ -17,7 +17,7 @@ [ - (#INCLURE{fond=formulaires/inc-lister-sauvegardes,env,ajax,name='',id=sauvegarde,titre=<:dump:sauvegardes_existantes:>,download=#AUTORISER{webmestre}}) + (#INCLURE{fond=formulaires/inc-lister-sauvegardes,env,ajax,name='',id=sauvegarde,titre=<:dump:sauvegardes_existantes:>,download=#AUTORISER{webmestre},delete=#AUTORISER{webmestre},env,ajax}) ] ] [(#GET{fin}|oui) diff --git a/www/plugins-dist/dump/prive/squelettes/contenu/sauvegarder_fonctions.php b/www/plugins-dist/dump/prive/squelettes/contenu/sauvegarder_fonctions.php index 261bf402..0e235d5e 100644 --- a/www/plugins-dist/dump/prive/squelettes/contenu/sauvegarder_fonctions.php +++ b/www/plugins-dist/dump/prive/squelettes/contenu/sauvegarder_fonctions.php @@ -10,10 +10,18 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/dump'); +/** + * Afficher les erreurs survenues dans la sauvegarde + * + * @param string $status_file Nom du fichier qui contient le statut de la sauvegarde sous une forme serialisee + * @return string Code HTML a afficher + */ function dump_afficher_tables_sauvegardees($status_file) { $status = dump_lire_status($status_file); $tables = $status['tables_copiees']; @@ -23,33 +31,47 @@ function dump_afficher_tables_sauvegardees($status_file) { dump_serveur($status['connect']); spip_connect('dump'); - foreach($tables as $t=>$n) { + foreach ($tables as $t => $n) { $n = abs(intval($n)); - $n_dump = intval(sql_countsel($t,'','','','dump')); + $n_dump = intval(sql_countsel($t, '', '', '', 'dump')); $res = "$t "; - if ($n_dump==0 AND $n==0) - $res.="("._T('dump:aucune_donnee').")"; - else + if ($n_dump == 0 and $n == 0) { + $res .= '(' . _T('dump:aucune_donnee') . ')'; + } else { $res .= "($n_dump/$n)"; - if ($n!==$n_dump) - $res= "$res"; + } + if ($n !== $n_dump) { + $res = "$res"; + } $tables[$t] = $res; } - $n = floor(count($tables)/2); - $corps = "
    • " . join("
    • ", array_slice($tables,0,$n)) . "
    " - . "
    • " . join("
    • ", array_slice($tables,$n)) . "
    " - . "
    "; + $corps = ''; + switch (count($tables)) { + case 0: + break; + case 1: + $corps = "
    • " .join("
    • ", $tables) . '
    '; + break; + default: + $n = floor(count($tables) / 2); + $corps = "
    • " . + join("
    • ", array_slice($tables, 0, $n)) . '
    ' + . "
    • " . join( + "
    • ", + array_slice($tables, $n) + ) . '
    '; + } + $corps .= "
    "; + return $corps; } function dump_afficher_erreurs($status_file) { - $erreurs = ""; + $erreurs = ''; $status = dump_lire_status($status_file); - if (isset($status['errors'])){ - $erreurs = implode("
    ",$status['errors']); + if (isset($status['errors'])) { + $erreurs = implode('
    ', $status['errors']); } - return $erreurs; } -?> diff --git a/www/plugins-dist/dump/prive/style_prive_plugin_dump.html b/www/plugins-dist/dump/prive/style_prive_plugin_dump.html index 6d7b67ab..5524e730 100644 --- a/www/plugins-dist/dump/prive/style_prive_plugin_dump.html +++ b/www/plugins-dist/dump/prive/style_prive_plugin_dump.html @@ -23,4 +23,5 @@ .liste-objets.dump tr .fichier label {display:block; width: 260px;word-wrap:break-word;} .liste-objets.dump tr .taille {text-align:right;} +.formulaire_restaurer .editer div.choix {border:0;background: none;padding: 0;} [(#REM) ] diff --git a/www/plugins-dist/filtres_images/filtres/couleurs.php b/www/plugins-dist/filtres_images/filtres/couleurs.php index 181b60e8..252ea87e 100644 --- a/www/plugins-dist/filtres_images/filtres/couleurs.php +++ b/www/plugins-dist/filtres_images/filtres/couleurs.php @@ -9,33 +9,35 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/filtres_images_lib_mini'); /** * Toutes les fonctions couleur_xx de ce fichier : - * - prennent une couleur hexa sur 6 caracteres en entree (les couleurs web nommees sont admises aussi) + * - prennent une couleur hexa sur 6 caracteres en entree (les couleurs web nommees sont admises aussi) * - fournissent une couleur hexa en sortie * - sont chainables les unes derrieres les autres dans toutes les combinaisons possibles */ // https://code.spip.net/@couleur_extraire -function couleur_extraire ($img, $x=10, $y=6) { +function couleur_extraire($img, $x = 10, $y = 6) { include_spip('filtres/images_lib'); + return _image_couleur_extraire($img, $x, $y); } - // https://code.spip.net/@couleur_web function couleur_web($couleur) { include_spip('filtres/images_lib'); $rvb = _couleur_hex_to_dec($couleur); - - $rvb = array_map('multiple_de_trois',$rvb); - - return _couleur_dec_to_hex($rvb['red'],$rvb['green'],$rvb['blue']); + + $rvb = array_map('multiple_de_trois', $rvb); + + return _couleur_dec_to_hex($rvb['red'], $rvb['green'], $rvb['blue']); } // https://code.spip.net/@couleur_4096 @@ -43,135 +45,165 @@ function couleur_4096($couleur) { $r = (substr($couleur, 0, 1)); $v = (substr($couleur, 2, 1)); $b = (substr($couleur, 4, 1)); - + return "$r$r$v$v$b$b"; } +// Lire la luminance relative d'une couleur +// de 0 à 1 +// cf. https://fr.wikipedia.org/wiki/Luminance#Luminance_relative +// cf. https://bl.ocks.org/Fil/cf03a054826ee5b3013577ecc0b009e6 +// https://code.spip.net/@couleur_luminance_relative +function couleur_luminance_relative($couleur) { + $c = _couleur_hex_to_dec($couleur); + return (0.2126 * $c['red'] + 0.7152 * $c['green'] + 0.0722 * $c['blue']) / 255; +} // https://code.spip.net/@couleur_extreme -function couleur_extreme ($couleur, $limite=0.5) { +function couleur_extreme($couleur, $limite = 0.5) { // force la couleur au noir ou au blanc le plus proche // -> donc couleur foncee devient noire // et couleur claire devient blanche // -> la limite est une valeur de 0 a 255, permettant de regler le point limite entre le passage noir ou blanc - $couleurs = _couleur_hex_to_dec($couleur); - $red = $couleurs["red"]; - $green = $couleurs["green"]; - $blue = $couleurs["blue"]; - - - /* - $moyenne = round(($red+$green+$blue)/3); - - if ($moyenne > $limite) $couleur_texte = "ffffff"; - else $couleur_texte = "000000"; - */ - - include_spip('filtres/images_lib'); - $hsl = _couleur_rgb2hsl ($red, $green, $blue); - - if ($hsl["l"] > $limite) $couleur_texte = "ffffff"; - else $couleur_texte = "000000"; + if (couleur_luminance_relative($couleur) > $limite) { + $couleur_texte = "ffffff"; + } else { + $couleur_texte = "000000"; + } return $couleur_texte; } // https://code.spip.net/@couleur_inverser -function couleur_inverser ($couleur) { +function couleur_inverser($couleur) { $couleurs = _couleur_hex_to_dec($couleur); $red = 255 - $couleurs["red"]; $green = 255 - $couleurs["green"]; $blue = 255 - $couleurs["blue"]; $couleur = _couleur_dec_to_hex($red, $green, $blue); - + return $couleur; } // https://code.spip.net/@couleur_foncer_si_claire -function couleur_foncer_si_claire ($couleur, $seuil=122) { +function couleur_foncer_si_claire($couleur, $seuil = 122) { // ne foncer que les couleurs claires // utile pour ecrire sur fond blanc, // mais sans changer quand la couleur est deja foncee - $couleurs = _couleur_hex_to_dec($couleur); - $red = $couleurs["red"]; - $green = $couleurs["green"]; - $blue = $couleurs["blue"]; - - $moyenne = round(($red+$green+$blue)/3); - - if ($moyenne > $seuil) { + if (couleur_luminance_relative($couleur) > $seuil / 255) { include_spip("inc/filtres_images_mini"); return couleur_foncer($couleur); + } else { + return $couleur; } - else return $couleur; } // https://code.spip.net/@couleur_eclaircir_si_foncee -function couleur_eclaircir_si_foncee ($couleur, $seuil=123) { - $couleurs = _couleur_hex_to_dec($couleur); - $red = $couleurs["red"]; - $green = $couleurs["green"]; - $blue = $couleurs["blue"]; - - $moyenne = round(($red+$green+$blue)/3); - - if ($moyenne < $seuil) { +function couleur_eclaircir_si_foncee($couleur, $seuil = 123) { + if (couleur_luminance_relative($couleur) < $seuil / 255) { include_spip("inc/filtres_images_mini"); return couleur_eclaircir($couleur); + } else { + return $couleur; } - else return $couleur; } -// https://code.spip.net/@couleur_saturation +/** + * Modifie la saturation de la couleur transmise + * + * Change la saturation en forçant le résultat sur une échelle absolue. + * + * @link https://www.spip.net/3326 + * @example + * - `[(#VAL{fc3924}|couleur_saturation{0})]` retourne blanc (ffffff), + * - `[(#VAL{fc3924}|couleur_saturation{1})]` retourne la couleur avec sa saturation au maximum (fb1800) + * - `[(#VAL{fc3924}|couleur_saturation{0.2})]` retourne la couleur avec 20% de saturation (fed0cc) + * + * @uses _couleur_hex_to_dec() + * @uses _couleur_dec_to_hex() + * + * @param string $couleur + * Couleur en écriture hexadécimale, tel que `ff3300` + * @param float $val + * Pourcentage désiré (entre 0 et 1) + * @return string + * Couleur en écriture hexadécimale. +**/ function couleur_saturation($couleur, $val) { - if ($couleur == "ffffff") $couleur = "eeeeee"; + if ($couleur == "ffffff") { + $couleur = "eeeeee"; + } $couleurs = _couleur_hex_to_dec($couleur); - $r= 255 - $couleurs["red"]; - $g= 255 - $couleurs["green"]; - $b= 255 - $couleurs["blue"]; + $r = 255 - $couleurs["red"]; + $g = 255 - $couleurs["green"]; + $b = 255 - $couleurs["blue"]; - $max = max($r,$g,$b); + $max = max($r, $g, $b); $r = 255 - $r / $max * 255 * $val; $g = 255 - $g / $max * 255 * $val; $b = 255 - $b / $max * 255 * $val; - + $couleur = _couleur_dec_to_hex($r, $g, $b); - + return $couleur; - + } -// https://code.spip.net/@couleur_luminance +/** + * Modifie la luminance de la couleur transmise + * + * Change la luminance en forçant le résultat sur une échelle absolue. + * + * @link https://www.spip.net/3326 + * @example + * - `[(#VAL{fc3924}|couleur_luminance{0})]` retourne blanc (ffffff), + * - `[(#VAL{fc3924}|couleur_luminance{1})]` retourne noir (000000) + * - `[(#VAL{fc3924}|couleur_luminance{0.5})]` retourne une luminance moyenne (fb1b03) + * - `[(#VAL{fc3924}|couleur_luminance{0.2})]` retourne la couleur avec 20% de luminance (fda49a) + * + * @uses _couleur_hex_to_dec() + * @uses couleur_saturation() + * @uses _couleur_rgb2hsl() + * @uses _couleur_hsl2rgb() + * @uses _couleur_dec_to_hex() + * + * @param string $couleur + * Couleur en écriture hexadécimale, tel que `ff3300` + * @param float $val + * Pourcentage désiré (entre 0 et 1) + * @return string + * Couleur en écriture hexadécimale. +**/ function couleur_luminance($couleur, $val) { include_spip('filtres/images_lib'); $couleurs = _couleur_hex_to_dec($couleur); - $r= $couleurs["red"]; - $g= $couleurs["green"]; - $b= $couleurs["blue"]; + $r = $couleurs["red"]; + $g = $couleurs["green"]; + $b = $couleurs["blue"]; // Cas etonnant: quand gris parfait, la correction de HSL ne fonctionne pas // en revanche, couleur_saturation retourne exactement la bonne valeur - if ($r == $g && $g == $b) return couleur_saturation($couleur, $val); + if ($r == $g && $g == $b) { + return couleur_saturation($couleur, $val); + } + - $couleur = _couleur_rgb2hsl($r, $g, $b); $h = $couleur["h"]; $s = $couleur["s"]; $l = $couleur["l"]; - - $rgb = _couleur_hsl2rgb ($h, $s, 1-$val); + + $rgb = _couleur_hsl2rgb($h, $s, 1 - $val); $r = $rgb["r"]; $g = $rgb["g"]; $b = $rgb["b"]; - + $retour = _couleur_dec_to_hex($r, $g, $b); - + return $retour; } - -?> diff --git a/www/plugins-dist/filtres_images/filtres/images_lib.php b/www/plugins-dist/filtres_images/filtres/images_lib.php index 1822e485..4f531214 100644 --- a/www/plugins-dist/filtres_images/filtres/images_lib.php +++ b/www/plugins-dist/filtres_images/filtres/images_lib.php @@ -9,7 +9,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} // librairie de base du core include_spip('inc/filtres_images_lib_mini'); @@ -22,49 +24,60 @@ function multiple_de_trois($val) { * Transformation d'une couleur vectorielle RGB en HSV * RGB entiers entre 0 et 255 * HSV float entre 0 et 1 - * + * * @param int $R * @param int $G * @param int $B * @return array */ -function _couleur_rgb2hsv ($R,$G,$B) { - $var_R = ( $R / 255 ) ; //Where RGB values = 0 ÷ 255 - $var_G = ( $G / 255 ); - $var_B = ( $B / 255 ); +function _couleur_rgb2hsv($R, $G, $B) { + $var_R = ($R / 255); //Where RGB values = 0 ÷ 255 + $var_G = ($G / 255); + $var_B = ($B / 255); - $var_Min = min( $var_R, $var_G, $var_B ) ; //Min. value of RGB - $var_Max = max( $var_R, $var_G, $var_B ) ; //Max. value of RGB - $del_Max = $var_Max - $var_Min ; //Delta RGB value + $var_Min = min($var_R, $var_G, $var_B); //Min. value of RGB + $var_Max = max($var_R, $var_G, $var_B); //Max. value of RGB + $del_Max = $var_Max - $var_Min; //Delta RGB value $V = $var_Max; - $L = ( $var_Max + $var_Min ) / 2; - - if ( $del_Max == 0 ) //This is a gray, no chroma... + $L = ($var_Max + $var_Min) / 2; + + if ($del_Max == 0) //This is a gray, no chroma... { - $H = 0 ; //HSL results = 0 ÷ 1 - $S = 0 ; - } - else //Chromatic data... + $H = 0; //HSL results = 0 ÷ 1 + $S = 0; + } else //Chromatic data... { - $S = $del_Max / $var_Max; - - $del_R = ( ( ( $var_Max - $var_R ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max; - $del_G = ( ( ( $var_Max - $var_G ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max; - $del_B = ( ( ( $var_Max - $var_B ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max; - - if ( $var_R == $var_Max ) $H = $del_B - $del_G; - else if ( $var_G == $var_Max ) $H = ( 1 / 3 ) + $del_R - $del_B; - else if ( $var_B == $var_Max ) $H = ( 2 / 3 ) + $del_G - $del_R; - - if ( $H < 0 ) $H = $H + 1; - if ( $H > 1 ) $H = $H - 1; + $S = $del_Max / $var_Max; + + $del_R = ((($var_Max - $var_R) / 6) + ($del_Max / 2)) / $del_Max; + $del_G = ((($var_Max - $var_G) / 6) + ($del_Max / 2)) / $del_Max; + $del_B = ((($var_Max - $var_B) / 6) + ($del_Max / 2)) / $del_Max; + + if ($var_R == $var_Max) { + $H = $del_B - $del_G; + } else { + if ($var_G == $var_Max) { + $H = (1 / 3) + $del_R - $del_B; + } else { + if ($var_B == $var_Max) { + $H = (2 / 3) + $del_G - $del_R; + } + } + } + + if ($H < 0) { + $H = $H + 1; + } + if ($H > 1) { + $H = $H - 1; + } } - + $ret["h"] = $H; $ret["s"] = $S; $ret["v"] = $V; - + return $ret; } @@ -72,45 +85,72 @@ function _couleur_rgb2hsv ($R,$G,$B) { * Transformation d'une couleur vectorielle HSV en RGB * HSV float entre 0 et 1 * RGB entiers entre 0 et 255 - * + * * @param float $H * @param float $S * @param float $V * @return array */ -function _couleur_hsv2rgb ($H,$S,$V) { - - if ( $S == 0 ) //HSV values = 0 ÷ 1 - { - $R = $V * 255; - $G = $V * 255; - $B = $V * 255; - } - else +function _couleur_hsv2rgb($H, $S, $V) { + + if ($S == 0) //HSV values = 0 ÷ 1 { - $var_h = $H * 6; - if ( $var_h == 6 ) $var_h = 0 ; //H must be < 1 - $var_i = floor( $var_h ) ; //Or ... var_i = floor( var_h ) - $var_1 = $V * ( 1 - $S ); - $var_2 = $V * ( 1 - $S * ( $var_h - $var_i ) ); - $var_3 = $V * ( 1 - $S * ( 1 - ( $var_h - $var_i ) ) ); - - - if ( $var_i == 0 ) { $var_r = $V ; $var_g = $var_3 ; $var_b = $var_1 ; } - else if ( $var_i == 1 ) { $var_r = $var_2 ; $var_g = $V ; $var_b = $var_1 ; } - else if ( $var_i == 2 ) { $var_r = $var_1 ; $var_g = $V ; $var_b = $var_3 ; } - else if ( $var_i == 3 ) { $var_r = $var_1 ; $var_g = $var_2 ; $var_b = $V ; } - else if ( $var_i == 4 ) { $var_r = $var_3 ; $var_g = $var_1 ; $var_b = $V ; } - else { $var_r = $V ; $var_g = $var_1 ; $var_b = $var_2; } - - $R = $var_r * 255; //RGB results = 0 ÷ 255 - $G = $var_g * 255; - $B = $var_b * 255; + $R = $V * 255; + $G = $V * 255; + $B = $V * 255; + } else { + $var_h = $H * 6; + if ($var_h == 6) { + $var_h = 0; + } //H must be < 1 + $var_i = floor($var_h); //Or ... var_i = floor( var_h ) + $var_1 = $V * (1 - $S); + $var_2 = $V * (1 - $S * ($var_h - $var_i)); + $var_3 = $V * (1 - $S * (1 - ($var_h - $var_i))); + + + if ($var_i == 0) { + $var_r = $V; + $var_g = $var_3; + $var_b = $var_1; + } else { + if ($var_i == 1) { + $var_r = $var_2; + $var_g = $V; + $var_b = $var_1; + } else { + if ($var_i == 2) { + $var_r = $var_1; + $var_g = $V; + $var_b = $var_3; + } else { + if ($var_i == 3) { + $var_r = $var_1; + $var_g = $var_2; + $var_b = $V; + } else { + if ($var_i == 4) { + $var_r = $var_3; + $var_g = $var_1; + $var_b = $V; + } else { + $var_r = $V; + $var_g = $var_1; + $var_b = $var_2; + } + } + } + } + } + + $R = $var_r * 255; //RGB results = 0 ÷ 255 + $G = $var_g * 255; + $B = $var_b * 255; } $ret["r"] = floor($R); $ret["g"] = floor($G); $ret["b"] = floor($B); - + return $ret; } @@ -119,67 +159,92 @@ function _couleur_hsv2rgb ($H,$S,$V) { * Transformation d'une couleur RGB en HSL * HSL float entre 0 et 1 * RGB entiers entre 0 et 255 - * + * * @param int $R * @param int $G * @param int $B * @return array */ -function _couleur_rgb2hsl ($R,$G,$B) { - $var_R = ( $R / 255 ) ; //Where RGB values = 0 ÷ 255 - $var_G = ( $G / 255 ); - $var_B = ( $B / 255 ); - - $var_Min = min( $var_R, $var_G, $var_B ) ; //Min. value of RGB - $var_Max = max( $var_R, $var_G, $var_B ) ; //Max. value of RGB - $del_Max = $var_Max - $var_Min ; //Delta RGB value - - $L = ( $var_Max + $var_Min ) / 2; - - if ( $del_Max == 0 ) //This is a gray, no chroma... +function _couleur_rgb2hsl($R, $G, $B) { + $var_R = ($R / 255); //Where RGB values = 0 ÷ 255 + $var_G = ($G / 255); + $var_B = ($B / 255); + + $var_Min = min($var_R, $var_G, $var_B); //Min. value of RGB + $var_Max = max($var_R, $var_G, $var_B); //Max. value of RGB + $del_Max = $var_Max - $var_Min; //Delta RGB value + + $L = ($var_Max + $var_Min) / 2; + + if ($del_Max == 0) //This is a gray, no chroma... { - $H = 0 ; //HSL results = 0 ÷ 1 - $S = 0 ; - } - else //Chromatic data... + $H = 0; //HSL results = 0 ÷ 1 + $S = 0; + } else //Chromatic data... { - if ($L < 0.5 ) $S = $del_Max / ( $var_Max+ $var_Min); - else $S = $del_Max/ ( 2 - $var_Max - $var_Min); - - $del_R = ( ( ( $var_Max- $var_R) / 6 ) + ( $del_Max / 2 ) ) / $del_Max; - $del_G = ( ( ( $var_Max- $var_G) / 6 ) + ( $del_Max / 2 ) ) / $del_Max; - $del_B = ( ( ( $var_Max- $var_B) / 6 ) + ( $del_Max / 2 ) ) / $del_Max; + if ($L < 0.5) { + $S = $del_Max / ($var_Max + $var_Min); + } else { + $S = $del_Max / (2 - $var_Max - $var_Min); + } - if ( $var_R == $var_Max) $H= $del_B - $del_G; - else if ( $var_G == $var_Max) $H= ( 1 / 3 ) + $del_R - $del_B; - else if ( $var_B == $var_Max) $H= ( 2 / 3 ) + $del_G - $del_R; + $del_R = ((($var_Max - $var_R) / 6) + ($del_Max / 2)) / $del_Max; + $del_G = ((($var_Max - $var_G) / 6) + ($del_Max / 2)) / $del_Max; + $del_B = ((($var_Max - $var_B) / 6) + ($del_Max / 2)) / $del_Max; + + if ($var_R == $var_Max) { + $H = $del_B - $del_G; + } else { + if ($var_G == $var_Max) { + $H = (1 / 3) + $del_R - $del_B; + } else { + if ($var_B == $var_Max) { + $H = (2 / 3) + $del_G - $del_R; + } + } + } - if ( $H < 0 ) $H+= 1; - if ( $H > 1 ) $H-= 1; + if ($H < 0) { + $H += 1; + } + if ($H > 1) { + $H -= 1; + } } - + $ret["h"] = $H; $ret["s"] = $S; $ret["l"] = $L; - + return $ret; } /** - * Calcul d'une composante R, G ou B + * Calcul d'une composante R, G ou B * * @param unknown_type $v1 * @param unknown_type $v2 * @param unknown_type $vH * @return float */ -function hue_2_rgb( $v1, $v2, $vH ) { - if ( $vH < 0 ) $vH += 1; - if ( $vH > 1 ) $vH -= 1; - if ( ( 6 * $vH ) < 1 ) return ( $v1 + ( $v2 - $v1 ) * 6 * $vH ); - if ( ( 2 * $vH ) < 1 ) return ( $v2 ); - if ( ( 3 * $vH ) < 2 ) return ( $v1 + ( $v2 - $v1 ) * ( ( 2 / 3 ) - $vH ) * 6 ); - return ( $v1 ); +function hue_2_rgb($v1, $v2, $vH) { + if ($vH < 0) { + $vH += 1; + } + if ($vH > 1) { + $vH -= 1; + } + if ((6 * $vH) < 1) { + return ($v1 + ($v2 - $v1) * 6 * $vH); + } + if ((2 * $vH) < 1) { + return ($v2); + } + if ((3 * $vH) < 2) { + return ($v1 + ($v2 - $v1) * ((2 / 3) - $vH) * 6); + } + + return ($v1); } @@ -193,29 +258,30 @@ function hue_2_rgb( $v1, $v2, $vH ) { * @param float $L * @return array */ -function _couleur_hsl2rgb ($H,$S,$L) { - - if ( $S == 0 ) //HSV values = 0 -> 1 - { - $R = $L * 255; - $G = $L * 255; - $B = $L * 255; - } - else +function _couleur_hsl2rgb($H, $S, $L) { + + if ($S == 0) //HSV values = 0 -> 1 { - if ( $L < 0.5 ) $var_2 = $L * ( 1 + $S ); - else $var_2 = ( $L + $S ) - ( $S * $L ); + $R = $L * 255; + $G = $L * 255; + $B = $L * 255; + } else { + if ($L < 0.5) { + $var_2 = $L * (1 + $S); + } else { + $var_2 = ($L + $S) - ($S * $L); + } $var_1 = 2 * $L - $var_2; - $R = 255 * hue_2_rgb( $var_1, $var_2, $H + ( 1 / 3 ) ) ; - $G = 255 * hue_2_rgb( $var_1, $var_2, $H ); - $B = 255 * hue_2_rgb( $var_1, $var_2, $H - ( 1 / 3 ) ); + $R = 255 * hue_2_rgb($var_1, $var_2, $H + (1 / 3)); + $G = 255 * hue_2_rgb($var_1, $var_2, $H); + $B = 255 * hue_2_rgb($var_1, $var_2, $H - (1 / 3)); } $ret["r"] = floor($R); $ret["g"] = floor($G); $ret["b"] = floor($B); - + return $ret; } @@ -226,40 +292,43 @@ function _couleur_hsl2rgb ($H,$S,$L) { // On peut forcer un point en fixant $x et $y, entre 0 et 20. // https://code.spip.net/@image_couleur_extraire -function _image_couleur_extraire($img, $x=10, $y=6) { +function _image_couleur_extraire($img, $x = 10, $y = 6) { static $couleur_extraite = array(); - - if (isset($couleur_extraite["$img-$x-$y"])) + + if (isset($couleur_extraite["$img-$x-$y"])) { return $couleur_extraite["$img-$x-$y"]; + } // valeur par defaut si l'image ne peut etre lue $defaut = "F26C4E"; $cache = _image_valeurs_trans($img, "coul-$x-$y", "txt"); - if (!$cache) + if (!$cache) { return $couleur_extraite["$img-$x-$y"] = $defaut; + } - - $fichier = $cache["fichier"]; + + $fichier = $cache["fichier"]; $dest = $cache["fichier_dest"]; - if (isset($couleur_extraite["$fichier-$x-$y"])) + if (isset($couleur_extraite["$fichier-$x-$y"])) { return $couleur_extraite["$fichier-$x-$y"]; - + } + $creer = $cache["creer"]; - + if ($creer) { if (@file_exists($fichier)) { $width = $cache["largeur"]; $height = $cache["hauteur"]; - + $newwidth = 20; $newheight = 20; - + $thumb = imagecreate($newwidth, $newheight); $source = $cache["fonction_imagecreatefrom"]($fichier); - + imagepalettetotruecolor($source); imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); @@ -270,24 +339,23 @@ function _image_couleur_extraire($img, $x=10, $y=6) { // make it human readable $color_tran = imagecolorsforindex($thumb, $color_index); - $x++; $y++; - } while ($color_tran['alpha']==127 AND $x<$newwidth AND $y<$newheight); - + $x++; + $y++; + } while ($color_tran['alpha'] == 127 and $x < $newwidth and $y < $newheight); + $couleur = _couleur_dec_to_hex($color_tran["red"], $color_tran["green"], $color_tran["blue"]); - } - else { + } else { $couleur = $defaut; } - + // Mettre en cache le resultat $couleur_extraite["$fichier-$x-$y"] = $couleur; - ecrire_fichier($dest,$couleur_extraite["$fichier-$x-$y"]); - } - else { - lire_fichier($dest,$couleur_extraite["$fichier-$x-$y"]); + ecrire_fichier($dest, $couleur_extraite["$fichier-$x-$y"]); + } else { + lire_fichier($dest, $couleur_extraite["$fichier-$x-$y"]); } - - return $couleur_extraite["$img-$x-$y"]=$couleur_extraite["$fichier-$x-$y"]; + + return $couleur_extraite["$img-$x-$y"] = $couleur_extraite["$fichier-$x-$y"]; } // $src_img - a GD image resource @@ -299,7 +367,8 @@ function _image_couleur_extraire($img, $x=10, $y=6) { function _image_distance_pixel($xo, $yo, $x0, $y0) { $vx = $xo - $x0; $vy = $yo - $y0; - $d = 1 - (sqrt(($vx)*($vx) + ($vy)*($vy)) / sqrt(2)); + $d = 1 - (sqrt(($vx) * ($vx) + ($vy) * ($vy)) / sqrt(2)); + return $d; } @@ -314,28 +383,42 @@ function _image_distance_pixel($xo, $yo, $x0, $y0) { */ function _image_decale_composante($coul, $gamma) { $coul = $coul + $gamma; - - if ($coul > 255) $coul = 255; - if ($coul < 0) $coul = 0; + + if ($coul > 255) { + $coul = 255; + } + if ($coul < 0) { + $coul = 0; + } + return $coul; } /** * Decalage d'une composante de couleur en sepia * entier de 0 a 255 - * + * * @param int $coul * @param int $val * @return int */ function _image_decale_composante_127($coul, $val) { - if ($coul < 127) $y = round((($coul - 127) / 127) * $val) + $val; - else if ($coul >= 127) $y = round((($coul - 127) / 128) * (255-$val)) + $val; - else $y= $coul; - - if ($y < 0) $y = 0; - if ($y > 255) $y = 255; + if ($coul < 127) { + $y = round((($coul - 127) / 127) * $val) + $val; + } else { + if ($coul >= 127) { + $y = round((($coul - 127) / 128) * (255 - $val)) + $val; + } else { + $y = $coul; + } + } + + if ($y < 0) { + $y = 0; + } + if ($y > 255) { + $y = 255; + } + return $y; } - -?> diff --git a/www/plugins-dist/filtres_images/filtres/images_transforme.php b/www/plugins-dist/filtres_images/filtres/images_transforme.php index ac86c398..3990d977 100644 --- a/www/plugins-dist/filtres_images/filtres/images_transforme.php +++ b/www/plugins-dist/filtres_images/filtres/images_transforme.php @@ -14,9 +14,13 @@ * - prennent une image en entree * - fournissent une image en sortie * - sont chainables les unes derrieres les autres dans toutes les combinaisons possibles + * + * @package SPIP\FiltresImages\ImagesTransforme */ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} // librairie de base du core include_spip('inc/filtres_images_mini'); @@ -31,103 +35,119 @@ include_spip('inc/filtres_images_mini'); // https://code.spip.net/@image_aplatir // 3/ $transparence a "true" permet de conserver la transparence (utile pour conversion GIF) // https://code.spip.net/@image_aplatir -function image_aplatir($im, $format='jpg', $coul='000000', $qualite=NULL, $transparence=false) -{ - if ($qualite===NULL){ - if ($format=='jpg') $qualite=_IMG_GD_QUALITE; - elseif ($format=='png') $qualite=0; - else $qualite=128; +function image_aplatir($im, $format = 'jpg', $coul = '000000', $qualite = null, $transparence = false) { + if ($qualite === null) { + if ($format == 'jpg') { + $qualite = _IMG_GD_QUALITE; + } elseif ($format == 'png') { + $qualite = 0; + } else { + $qualite = 128; + } } $fonction = array('image_aplatir', func_get_args()); $image = _image_valeurs_trans($im, "aplatir-$format-$coul-$qualite-$transparence", $format, $fonction); - if (!$image) return(""); + if (!$image) { + return (""); + } include_spip('inc/filtres'); $couleurs = _couleur_hex_to_dec($coul); - $dr= $couleurs["red"]; - $dv= $couleurs["green"]; - $db= $couleurs["blue"]; + $dr = $couleurs["red"]; + $dv = $couleurs["green"]; + $db = $couleurs["blue"]; $x_i = $image["largeur"]; $y_i = $image["hauteur"]; - + $im = $image["fichier"]; $dest = $image["fichier_dest"]; - + $creer = $image["creer"]; if ($creer) { $im = @$image["fonction_imagecreatefrom"]($im); imagepalettetotruecolor($im); $im_ = imagecreatetruecolor($x_i, $y_i); - if ($image["format_source"] == "gif" AND function_exists('ImageCopyResampled')) { + if ($image["format_source"] == "gif" and function_exists('ImageCopyResampled')) { // Si un GIF est transparent, // fabriquer un PNG transparent // Conserver la transparence - @imagealphablending($im_, false); - @imagesavealpha($im_,true); - if (function_exists("imageAntiAlias")) imageAntiAlias($im_,true); + @imagealphablending($im_, false); + @imagesavealpha($im_, true); + if (function_exists("imageAntiAlias")) { + imageAntiAlias($im_, true); + } @ImageCopyResampled($im_, $im, 0, 0, 0, 0, $x_i, $y_i, $x_i, $y_i); imagedestroy($im); $im = $im_; } - + // allouer la couleur de fond if ($transparence) { - @imagealphablending($im_, false); - @imagesavealpha($im_,true); - $color_t = imagecolorallocatealpha( $im_, $dr, $dv, $db, 127); + @imagealphablending($im_, false); + @imagesavealpha($im_, true); + $color_t = imagecolorallocatealpha($im_, $dr, $dv, $db, 127); + } else { + $color_t = ImageColorAllocate($im_, $dr, $dv, $db); } - else $color_t = ImageColorAllocate( $im_, $dr, $dv, $db); - - imagefill ($im_, 0, 0, $color_t); + + imagefill($im_, 0, 0, $color_t); //?? //$dist = abs($trait); - + $transp_x = false; - - for ($x = 0; $x < $x_i; $x++) { - for ($y=0; $y < $y_i; $y++) { - - $rgb = ImageColorAt($im, $x, $y); - $a = ($rgb >> 24) & 0xFF; - $r = ($rgb >> 16) & 0xFF; - $g = ($rgb >> 8) & 0xFF; - $b = $rgb & 0xFF; - $a = (127-$a) / 127; - - if ($a == 1) { // Limiter calculs - $r = $r; - $g = $g; - $b = $b; - } - else if ($a == 0) { // Limiter calculs - $r = $dr; - $g = $dv; - $b = $db; - - $transp_x = $x; // Memoriser un point transparent - $transp_y = $y; - - } else { - $r = round($a * $r + $dr * (1-$a)); - $g = round($a * $g + $dv * (1-$a)); - $b = round($a * $b + $db * (1-$a)); + if ($image["format_source"] == "jpg") { + $im_ = &$im; + } else { + for ($x = 0; $x < $x_i; $x++) { + for ($y = 0; $y < $y_i; $y++) { + + $rgb = ImageColorAt($im, $x, $y); + $a = ($rgb >> 24) & 0xFF; + $r = ($rgb >> 16) & 0xFF; + $g = ($rgb >> 8) & 0xFF; + $b = $rgb & 0xFF; + + $a = (127 - $a) / 127; + + if ($a == 1) { // Limiter calculs + $r = $r; + $g = $g; + $b = $b; + } else { + if ($a == 0) { // Limiter calculs + $r = $dr; + $g = $dv; + $b = $db; + + $transp_x = $x; // Memoriser un point transparent + $transp_y = $y; + + } else { + $r = round($a * $r + $dr * (1 - $a)); + $g = round($a * $g + $dv * (1 - $a)); + $b = round($a * $b + $db * (1 - $a)); + } + } + $a = (1 - $a) * 127; + $color = ImageColorAllocateAlpha($im_, $r, $g, $b, $a); + imagesetpixel($im_, $x, $y, $color); } - $a = (1-$a) *127; - $color = ImageColorAllocateAlpha( $im_, $r, $g, $b, $a); - imagesetpixel ($im_, $x, $y, $color); } } // passer en palette si besoin - if ($format=='gif' OR ($format=='png' AND $qualite!==0)){ - // creer l'image finale a palette (on recycle l'image initiale) - + if ($format == 'gif' or ($format == 'png' and $qualite !== 0)) { + // creer l'image finale a palette + // (on recycle l'image initiale si possible, sinon on en recree une) + if ($im === $im_) { + $im = imagecreatetruecolor($x_i, $y_i); + } - @imagetruecolortopalette($im,true,$qualite); + @imagetruecolortopalette($im, true, $qualite); //$im = imagecreate($x_i, $y_i); @@ -135,24 +155,30 @@ function image_aplatir($im, $format='jpg', $coul='000000', $qualite=NULL, $trans imagecopy($im, $im_, 0, 0, 0, 0, $x_i, $y_i); // matcher les couleurs au mieux par rapport a l'image initiale // si la fonction est disponible (php>=4.3) - if (function_exists('imagecolormatch')) + if (function_exists('imagecolormatch')) { @imagecolormatch($im_, $im); - - if ($format=='gif' && $transparence && $transp_x) { - $color_t = ImagecolorAt( $im, $transp_x, $transp_y); - if ($format == "gif" && $transparence) @imagecolortransparent($im, $color_t); } - - + + if ($format == 'gif' && $transparence && $transp_x) { + $color_t = ImagecolorAt($im, $transp_x, $transp_y); + if ($format == "gif" && $transparence) { + @imagecolortransparent($im, $color_t); + } + } + + // produire le resultat _image_gd_output($im, $image, $qualite); - } - else + } else { _image_gd_output($im_, $image, $qualite); + } + if ($im !== $im_) { + imagedestroy($im); + } imagedestroy($im_); - imagedestroy($im); } - return _image_ecrire_tag($image,array('src'=>$dest)); + + return _image_ecrire_tag($image, array('src' => $dest)); } @@ -160,9 +186,13 @@ function image_aplatir($im, $format='jpg', $coul='000000', $qualite=NULL, $trans // (conserve la transparence gif, png, ico) // utilise [->@image_aplatir] // https://code.spip.net/@image_format -function image_format($img, $format='png') { +function image_format($img, $format = 'png') { $qualite = null; - if ($format=='png8') {$format='png';$qualite=128;} + if ($format == 'png8') { + $format = 'png'; + $qualite = 128; + } + return image_aplatir($img, $format, 'cccccc', $qualite, true); } @@ -171,20 +201,21 @@ function image_format($img, $format='png') { // alpha = 0: aucune transparence // alpha = 127: completement transparent // https://code.spip.net/@image_alpha -function image_alpha($im, $alpha = 63) -{ +function image_alpha($im, $alpha = 63) { $fonction = array('image_alpha', func_get_args()); - $image = _image_valeurs_trans($im, "alpha-$alpha", "png",$fonction); - if (!$image) return(""); - + $image = _image_valeurs_trans($im, "alpha-$alpha", "png", $fonction); + if (!$image) { + return (""); + } + $x_i = $image["largeur"]; $y_i = $image["hauteur"]; - + $im = $image["fichier"]; $dest = $image["fichier_dest"]; - + $creer = $image["creer"]; - + if ($creer) { // Creation de l'image en deux temps // de facon a conserver les GIF transparents @@ -192,155 +223,191 @@ function image_alpha($im, $alpha = 63) imagepalettetotruecolor($im); $im2 = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im2, false); - @imagesavealpha($im2,true); - $color_t = ImageColorAllocateAlpha( $im2, 255, 255, 255 , 127 ); - imagefill ($im2, 0, 0, $color_t); + @imagesavealpha($im2, true); + $color_t = ImageColorAllocateAlpha($im2, 255, 255, 255, 127); + imagefill($im2, 0, 0, $color_t); imagecopy($im2, $im, 0, 0, 0, 0, $x_i, $y_i); $im_ = imagecreatetruecolor($x_i, $y_i); - imagealphablending ($im_, FALSE ); - imagesavealpha ( $im_, TRUE ); - + imagealphablending($im_, false); + imagesavealpha($im_, true); for ($x = 0; $x < $x_i; $x++) { for ($y = 0; $y < $y_i; $y++) { $rgb = ImageColorAt($im2, $x, $y); - + if (function_exists('imagecolorallocatealpha')) { $a = ($rgb >> 24) & 0xFF; $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; - - - $a_ = $alpha + $a - round($a*$alpha/127); + + + $a_ = $alpha + $a - round($a * $alpha / 127); $rgb = imagecolorallocatealpha($im_, $r, $g, $b, $a_); } - imagesetpixel ( $im_, $x, $y, $rgb ); + imagesetpixel($im_, $x, $y, $rgb); } } - _image_gd_output($im_,$image); + _image_gd_output($im_, $image); imagedestroy($im_); imagedestroy($im); imagedestroy($im2); } - - return _image_ecrire_tag($image,array('src'=>$dest)); - + return _image_ecrire_tag($image, array('src' => $dest)); } /** + * Recadre (rogne) une image en indiquant la taille de la découpe souhaitée * - * https://code.spip.net/@image_recadre + * On peut indiquer une proportion ou une taille spécifique, une position de rognage + * et une couleur de fond, si le rognage est de taille plus grande que l'image d'origine. + * + * @example + * - `[(#FICHIER|image_recadre{800, 400})]` + * - `[(#FICHIER|image_recadre{800, 400, center})]` + * - `[(#FICHIER|image_recadre{800, 400, center, black})]` + * - `[(#FICHIER|image_recadre{16:9})]` + * - `[(#FICHIER|image_recadre{16:9, -})]` (- est appliqué par défaut, équivalent à image_passe_partout) + * - `[(#FICHIER|image_recadre{16:9, +, center, white})]` + * - `[(#FICHIER|image_recadre{16:9, -, top left})]` + * - `[(#FICHIER|image_recadre{16:9, -, top=40 left=20})]` + * + * @filtre + * @uses _image_valeurs_trans() + * @uses _image_tag_changer_taille() si image trop grande pour être traitée + * @uses _image_ecrire_tag() + * @link https://www.spip.net/5786 * * @param string $im + * Chemin de l'image ou balise html `` * @param string|int $width - * largeur du recadrage - * ou ratio sous la forme "16:9" + * Largeur du recadrage + * ou ratio sous la forme "16:9" * @param string|int $height - * hauteur du recadrage - * ou "+" (agrandir) ou "-" (reduire) si un ratio est fourni pour width + * Hauteur du recadrage + * ou "+" (agrandir) ou "-" (reduire) si un ratio est fourni pour width * @param string $position - * center, left, right, top, bottom, ou combinaisons ("top left") + * Indication de position de la découpe : + * - `center`, `left`, `right`, `top`, `bottom`, + * - ou combinaisons de plusiers `top left` + * - ou indication en pixels depuis une position `top=50` ou composée `top=40 left=50` + * - ou nom d'une fonction spéciale qui calculera et retournera la position souhaitée * @param string $background_color - * couleur de fond si on agrandit l'image + * Couleur de fond si on agrandit l'image * @return string - * balise image recadree + * balise image recadrée */ -function image_recadre($im,$width,$height,$position='center', $background_color='white') -{ +function image_recadre($im, $width, $height, $position = 'center', $background_color = 'white') { $fonction = array('image_recadre', func_get_args()); - $image = _image_valeurs_trans($im, "recadre-$width-$height-$position-$background_color",false,$fonction); - - if (!$image) return(""); - + $image = _image_valeurs_trans($im, "recadre-$width-$height-$position-$background_color", false, $fonction); + + if (!$image) { + return (""); + } + $x_i = $image["largeur"]; $y_i = $image["hauteur"]; - if (_IMG_GD_MAX_PIXELS && $x_i*$y_i>_IMG_GD_MAX_PIXELS){ - spip_log("image_recadre impossible sur $im : ".$srcWidth*$srcHeight."pixels"); + if (_IMG_GD_MAX_PIXELS && $x_i * $y_i > _IMG_GD_MAX_PIXELS) { + spip_log("image_recadre impossible sur $im : " . $x_i * $y_i . "pixels"); + // on se rabat sur une reduction CSS - return _image_tag_changer_taille($im,$width,$height); + return _image_tag_changer_taille($im, $width, $height); } // on recadre pour respecter un ratio ? // width : "16:9" // height : "+" pour agrandir l'image et "-" pour la croper - if (strpos($width,":")!==false){ - list($wr,$hr) = explode(":",$width); + if (strpos($width, ":") !== false) { + list($wr, $hr) = explode(":", $width); $hm = $x_i / $wr * $hr; $ym = $y_i / $hr * $wr; - if ($height=="+"?($y_i<$hm):($y_i>$hm)){ + if ($height == "+" ? ($y_i < $hm) : ($y_i > $hm)) { $width = $x_i; $height = $hm; - } - else { + } else { $width = $ym; $height = $y_i; } } - if ($width==0) $width=$x_i; - if ($height==0) $height=$y_i; - - $offset_width = $x_i-$width; - $offset_height = $y_i-$height; - $position=strtolower($position); - if (strpos($position,'left')!==FALSE){ - if (preg_match(';left=(\d{1}\d+);', $position, $left)){ - $offset_width=$left[1]; - } - else{ - $offset_width=0; + if ($width == 0) { + $width = $x_i; + } + if ($height == 0) { + $height = $y_i; + } + + $offset_width = $x_i - $width; + $offset_height = $y_i - $height; + $position = strtolower($position); + + // chercher une fonction spéciale de calcul des coordonnées de positionnement. + // exemple 'focus' ou 'focus-center' avec le plugin 'Centre Image' + if (!in_array($position, array('center', 'top', 'right', 'bottom', 'left'))) { + if (count(explode(" ", $position)) == 1) { + $positionner = charger_fonction("image_positionner_par_" . str_replace("-", "_", $position), "inc", true); + if ($positionner) { + $position = $positionner($im, $width, $height); + } } } - elseif (strpos($position,'right')!==FALSE) - $offset_width=$offset_width; - else - $offset_width=intval(ceil($offset_width/2)); - - if (strpos($position,'top')!==FALSE){ - if (preg_match(';top=(\d{1}\d+);', $position, $top)){ - $offset_height=$top[1]; + + if (strpos($position, 'left') !== false) { + if (preg_match(';left=(\d{1}\d+);', $position, $left)) { + $offset_width = $left[1]; + } else { + $offset_width = 0; } - else{ - $offset_height=0; + } elseif (strpos($position, 'right') !== false) { + $offset_width = $offset_width; + } else { + $offset_width = intval(ceil($offset_width / 2)); + } + + if (strpos($position, 'top') !== false) { + if (preg_match(';top=(\d{1}\d+);', $position, $top)) { + $offset_height = $top[1]; + } else { + $offset_height = 0; } + } elseif (strpos($position, 'bottom') !== false) { + $offset_height = $offset_height; + } else { + $offset_height = intval(ceil($offset_height / 2)); } - elseif (strpos($position,'bottom')!==FALSE) - $offset_height=$offset_height; - else - $offset_height=intval(ceil($offset_height/2)); - + $im = $image["fichier"]; $dest = $image["fichier_dest"]; - + $creer = $image["creer"]; - + if ($creer) { $im = $image["fonction_imagecreatefrom"]($im); imagepalettetotruecolor($im); $im_ = imagecreatetruecolor($width, $height); @imagealphablending($im_, false); - @imagesavealpha($im_,true); + @imagesavealpha($im_, true); - if ($background_color=='transparent') - $color_t = imagecolorallocatealpha( $im_, 255, 255, 255 , 127 ); - else { + if ($background_color == 'transparent') { + $color_t = imagecolorallocatealpha($im_, 255, 255, 255, 127); + } else { $bg = _couleur_hex_to_dec($background_color); - $color_t = imagecolorallocate( $im_, $bg['red'], $bg['green'], $bg['blue']); + $color_t = imagecolorallocate($im_, $bg['red'], $bg['green'], $bg['blue']); } - imagefill ($im_, 0, 0, $color_t); - imagecopy($im_, $im, max(0,-$offset_width), max(0,-$offset_height), max(0,$offset_width), max(0,$offset_height), min($width,$x_i), min($height,$y_i)); + imagefill($im_, 0, 0, $color_t); + imagecopy($im_, $im, max(0, -$offset_width), max(0, -$offset_height), max(0, $offset_width), max(0, $offset_height), + min($width, $x_i), min($height, $y_i)); - _image_gd_output($im_,$image); + _image_gd_output($im_, $image); imagedestroy($im_); imagedestroy($im); } - - return _image_ecrire_tag($image,array('src'=>$dest,'width'=>$width,'height'=>$height)); + + return _image_ecrire_tag($image, array('src' => $dest, 'width' => $width, 'height' => $height)); } @@ -351,12 +418,13 @@ function image_recadre($im,$width,$height,$position='center', $background_color= * @param string $im * @return string */ -function image_recadre_mini($im) -{ +function image_recadre_mini($im) { $fonction = array('image_recadre_mini', func_get_args()); - $image = _image_valeurs_trans($im, "recadre_mini",false,$fonction); + $image = _image_valeurs_trans($im, "recadre_mini", false, $fonction); - if (!$image) return(""); + if (!$image) { + return (""); + } $width = $image["largeur"]; $height = $image["hauteur"]; @@ -375,104 +443,108 @@ function image_recadre_mini($im) $min_y = $height; $max_y = $max_x = 0; $yy = 0; - while ($yy<=$height/2 AND $max_y<=$min_y){ - if($yy<$min_y) + while ($yy <= $height / 2 and $max_y <= $min_y) { + if ($yy < $min_y) { for ($xx = 0; $xx < $width; $xx++) { $color_index = imagecolorat($im, $xx, $yy); $color_tran = imagecolorsforindex($im, $color_index); - if ($color_tran['alpha']!==127){ - $min_y = min($yy,$min_y); - $max_y = max($height-1-$yy,$max_y); + if ($color_tran['alpha'] !== 127) { + $min_y = min($yy, $min_y); + $max_y = max($height - 1 - $yy, $max_y); break; } } - if($height-1-$yy>$max_y) + } + if ($height - 1 - $yy > $max_y) { for ($xx = 0; $xx < $width; $xx++) { - $color_index = imagecolorat($im, $xx, $height-1-$yy); + $color_index = imagecolorat($im, $xx, $height - 1 - $yy); $color_tran = imagecolorsforindex($im, $color_index); - if ($color_tran['alpha']!==127){ - $min_y = min($yy,$min_y); - $max_y = max($height-1-$yy,$max_y); + if ($color_tran['alpha'] !== 127) { + $min_y = min($yy, $min_y); + $max_y = max($height - 1 - $yy, $max_y); break; } } + } $yy++; } - $min_y = min($max_y,$min_y); // tout a 0 aucun pixel trouve + $min_y = min($max_y, $min_y); // tout a 0 aucun pixel trouve $xx = 0; - while ($xx<=$width/2 AND $max_x<=$min_x){ - if ($xx<$min_x) + while ($xx <= $width / 2 and $max_x <= $min_x) { + if ($xx < $min_x) { for ($yy = $min_y; $yy < $max_y; $yy++) { $color_index = imagecolorat($im, $xx, $yy); $color_tran = imagecolorsforindex($im, $color_index); - if ($color_tran['alpha']!==127){ - $min_x = min($xx,$min_x); - $max_x = max($xx,$max_x); + if ($color_tran['alpha'] !== 127) { + $min_x = min($xx, $min_x); + $max_x = max($xx, $max_x); break; // inutile de continuer sur cette colonne } } - if ($width-1-$xx>$max_x) + } + if ($width - 1 - $xx > $max_x) { for ($yy = $min_y; $yy < $max_y; $yy++) { - $color_index = imagecolorat($im, $width-1-$xx, $yy); + $color_index = imagecolorat($im, $width - 1 - $xx, $yy); $color_tran = imagecolorsforindex($im, $color_index); - if ($color_tran['alpha']!==127){ - $min_x = min($width-1-$xx,$min_x); - $max_x = max($width-1-$xx,$max_x); + if ($color_tran['alpha'] !== 127) { + $min_x = min($width - 1 - $xx, $min_x); + $max_x = max($width - 1 - $xx, $max_x); break; // inutile de continuer sur cette colonne } } + } $xx++; } - $min_x = min($max_x,$min_x); // tout a 0 aucun pixel trouve + $min_x = min($max_x, $min_x); // tout a 0 aucun pixel trouve - $width = $max_x-$min_x+1; - $height = $max_y-$min_y+1; + $width = $max_x - $min_x + 1; + $height = $max_y - $min_y + 1; $im_ = imagecreatetruecolor($width, $height); @imagealphablending($im_, false); - @imagesavealpha($im_,true); + @imagesavealpha($im_, true); - $color_t = imagecolorallocatealpha( $im_, 255, 255, 255 , 127 ); - imagefill ($im_, 0, 0, $color_t); + $color_t = imagecolorallocatealpha($im_, 255, 255, 255, 127); + imagefill($im_, 0, 0, $color_t); imagecopy($im_, $im, 0, 0, $min_x, $min_y, $width, $height); - _image_gd_output($im_,$image); + _image_gd_output($im_, $image); imagedestroy($im_); imagedestroy($im); - } - else { - list ($height,$width) = taille_image($image['fichier_dest']); + } else { + list($height, $width) = taille_image($image['fichier_dest']); } - return _image_ecrire_tag($image,array('src'=>$dest,'width'=>$width,'height'=>$height)); + return _image_ecrire_tag($image, array('src' => $dest, 'width' => $width, 'height' => $height)); } // https://code.spip.net/@image_flip_vertical -function image_flip_vertical($im) -{ +function image_flip_vertical($im) { $fonction = array('image_flip_vertical', func_get_args()); - $image = _image_valeurs_trans($im, "flip_v", false,$fonction); - if (!$image) return(""); - + $image = _image_valeurs_trans($im, "flip_v", false, $fonction); + if (!$image) { + return (""); + } + $x_i = $image["largeur"]; $y_i = $image["hauteur"]; - + $im = $image["fichier"]; $dest = $image["fichier_dest"]; - + $creer = $image["creer"]; - + if ($creer) { $im = $image["fonction_imagecreatefrom"]($im); imagepalettetotruecolor($im); $im_ = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im_, false); - @imagesavealpha($im_,true); - - $color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 ); - imagefill ($im_, 0, 0, $color_t); + @imagesavealpha($im_, true); + + $color_t = ImageColorAllocateAlpha($im_, 255, 255, 255, 127); + imagefill($im_, 0, 0, $color_t); for ($x = 0; $x < $x_i; $x++) { for ($y = 0; $y < $y_i; $y++) { @@ -480,54 +552,55 @@ function image_flip_vertical($im) } } - _image_gd_output($im_,$image); + _image_gd_output($im_, $image); imagedestroy($im_); imagedestroy($im); } - - return _image_ecrire_tag($image,array('src'=>$dest)); + + return _image_ecrire_tag($image, array('src' => $dest)); } // https://code.spip.net/@image_flip_horizontal -function image_flip_horizontal($im) -{ +function image_flip_horizontal($im) { $fonction = array('image_flip_horizontal', func_get_args()); - $image = _image_valeurs_trans($im, "flip_h",false,$fonction); - if (!$image) return(""); - + $image = _image_valeurs_trans($im, "flip_h", false, $fonction); + if (!$image) { + return (""); + } + $x_i = $image["largeur"]; $y_i = $image["hauteur"]; - + $im = $image["fichier"]; $dest = $image["fichier_dest"]; - + $creer = $image["creer"]; - + if ($creer) { $im = $image["fonction_imagecreatefrom"]($im); imagepalettetotruecolor($im); $im_ = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im_, false); - @imagesavealpha($im_,true); - - $color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 ); - imagefill ($im_, 0, 0, $color_t); + @imagesavealpha($im_, true); + + $color_t = ImageColorAllocateAlpha($im_, 255, 255, 255, 127); + imagefill($im_, 0, 0, $color_t); for ($x = 0; $x < $x_i; $x++) { for ($y = 0; $y < $y_i; $y++) { - imagecopy($im_, $im, $x, $y_i - $y - 1, $x, $y, 1, 1); + imagecopy($im_, $im, $x, $y_i - $y - 1, $x, $y, 1, 1); } } - _image_gd_output($im_,$image); + _image_gd_output($im_, $image); imagedestroy($im_); imagedestroy($im); } - - return _image_ecrire_tag($image,array('src'=>$dest)); + + return _image_ecrire_tag($image, array('src' => $dest)); } // https://code.spip.net/@image_masque -function image_masque($im, $masque, $pos="") { +function image_masque($im, $masque, $pos = "") { // Passer, en plus de l'image d'origine, // une image de "masque": un fichier PNG24 transparent. // Le decoupage se fera selon la transparence du "masque", @@ -564,28 +637,36 @@ function image_masque($im, $masque, $pos="") { $numargs = func_num_args(); $arg_list = func_get_args(); + $variable = array(); + $texte = $arg_list[0]; for ($i = 1; $i < $numargs; $i++) { - if ( ($p = strpos($arg_list[$i],"=")) !==false) { + if (($p = strpos($arg_list[$i], "=")) !== false) { $nom_variable = substr($arg_list[$i], 0, $p); - $val_variable = substr($arg_list[$i], $p+1); + $val_variable = substr($arg_list[$i], $p + 1); $variable["$nom_variable"] = $val_variable; $defini["$nom_variable"] = 1; } } - if ($defini["mode"]) $mode = $variable["mode"]; + if (isset($defini["mode"]) and $defini["mode"]) { + $mode = $variable["mode"]; + } // utiliser _image_valeurs_trans pour accepter comme masque : // - une balise // - une image avec un timestamp ?01234 - $mask = _image_valeurs_trans($masque, "source-image_masque", "png",null, true); - if (!$mask) return(""); + $mask = _image_valeurs_trans($masque, "source-image_masque", "png", null, true); + if (!$mask) { + return (""); + } $masque = $mask['fichier']; - $pos = md5(serialize($variable).$mask['date_src']); + $pos = md5(serialize($variable) . $mask['date_src']); $fonction = array('image_masque', func_get_args()); - $image = _image_valeurs_trans($im, "masque-$masque-$pos", "png",$fonction); - if (!$image) return(""); + $image = _image_valeurs_trans($im, "masque-$masque-$pos", "png", $fonction); + if (!$image) { + return (""); + } $x_i = $image["largeur"]; $y_i = $image["hauteur"]; @@ -605,20 +686,22 @@ function image_masque($im, $masque, $pos="") { } if ($creer) { - + $im_m = $mask["fichier"]; $x_m = $mask["largeur"]; $y_m = $mask["hauteur"]; $im2 = $mask["fonction_imagecreatefrom"]($masque); - if ($mask["format_source"] == "gif" AND function_exists('ImageCopyResampled')) { + if ($mask["format_source"] == "gif" and function_exists('ImageCopyResampled')) { $im2_ = imagecreatetruecolor($x_m, $y_m); // Si un GIF est transparent, // fabriquer un PNG transparent // Conserver la transparence - if (function_exists("imageAntiAlias")) imageAntiAlias($im2_,true); - @imagealphablending($im2_, false); - @imagesavealpha($im2_,true); + if (function_exists("imageAntiAlias")) { + imageAntiAlias($im2_, true); + } + @imagealphablending($im2_, false); + @imagesavealpha($im2_, true); @ImageCopyResampled($im2_, $im2, 0, 0, 0, 0, $x_m, $y_m, $x_m, $y_m); imagedestroy($im2); $im2 = $im2_; @@ -632,7 +715,7 @@ function image_masque($im, $masque, $pos="") { $dx = 0; $dy = 0; - + if (isset($defini["right"]) and $defini["right"]) { $right = $variable["right"]; $dx = ($x_i - $x_m) - $right; @@ -640,7 +723,7 @@ function image_masque($im, $masque, $pos="") { if (isset($defini["bottom"]) and $defini["bottom"]) { $bottom = $variable["bottom"]; $dy = ($y_i - $y_m) - $bottom; - } + } if (isset($defini["top"]) and $defini["top"]) { $top = $variable["top"]; $dy = $top; @@ -654,11 +737,15 @@ function image_masque($im, $masque, $pos="") { if ($align == "right") { $right = 0; $dx = ($x_i - $x_m); - } else if ($align == "left") { - $left = 0; - $dx = 0; - } else if ($align = "center") { - $dx = round( ($x_i - $x_m) / 2 ) ; + } else { + if ($align == "left") { + $left = 0; + $dx = 0; + } else { + if ($align = "center") { + $dx = round(($x_i - $x_m) / 2); + } + } } } if (isset($defini["vertical-align"]) and $defini["vertical-align"]) { @@ -666,31 +753,38 @@ function image_masque($im, $masque, $pos="") { if ($valign == "bottom") { $bottom = 0; $dy = ($y_i - $y_m); - } else if ($valign == "top") { - $top = 0; - $dy = 0; - } else if ($valign = "middle") { - $dy = round( ($y_i - $y_m) / 2 ) ; + } else { + if ($valign == "top") { + $top = 0; + $dy = 0; + } else { + if ($valign = "middle") { + $dy = round(($y_i - $y_m) / 2); + } + } } } $im3 = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im3, false); - @imagesavealpha($im3,true); - if ($mode == "masque") $color_t = ImageColorAllocateAlpha( $im3, 128, 128, 128 , 0 ); - else $color_t = ImageColorAllocateAlpha( $im3, 128, 128, 128 , 127 ); - imagefill ($im3, 0, 0, $color_t); + @imagesavealpha($im3, true); + if ($mode == "masque") { + $color_t = ImageColorAllocateAlpha($im3, 128, 128, 128, 0); + } else { + $color_t = ImageColorAllocateAlpha($im3, 128, 128, 128, 127); + } + imagefill($im3, 0, 0, $color_t); - imagecopy ( $im3, $im2, $dx, $dy, 0, 0, $x_m, $y_m); + imagecopy($im3, $im2, $dx, $dy, 0, 0, $x_m, $y_m); imagedestroy($im2); $im2 = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im2, false); - @imagesavealpha($im2,true); + @imagesavealpha($im2, true); - imagecopy ( $im2, $im3, 0, 0, 0, 0, $x_i, $y_i); + imagecopy($im2, $im3, 0, 0, 0, 0, $x_i, $y_i); imagedestroy($im3); $x_m = $x_i; $y_m = $y_i; @@ -698,15 +792,15 @@ function image_masque($im, $masque, $pos="") { $rapport = $x_i / $x_m; - if (($y_i / $y_m) < $rapport ) { + if (($y_i / $y_m) < $rapport) { $rapport = $y_i / $y_m; } - + $x_d = ceil($x_i / $rapport); $y_d = ceil($y_i / $rapport); - if ($x_i < $x_m OR $y_i < $y_m) { + if ($x_i < $x_m or $y_i < $y_m) { $x_dest = $x_i; $y_dest = $y_i; $x_dec = 0; @@ -714,47 +808,51 @@ function image_masque($im, $masque, $pos="") { } else { $x_dest = $x_m; $y_dest = $y_m; - $x_dec = round(($x_d - $x_m) /2); - $y_dec = round(($y_d - $y_m) /2); + $x_dec = round(($x_d - $x_m) / 2); + $y_dec = round(($y_d - $y_m) / 2); } - $nouveau = _image_valeurs_trans(image_reduire($im, $x_d, $y_d),""); - if (!is_array($nouveau)) return(""); + $nouveau = _image_valeurs_trans(image_reduire($im, $x_d, $y_d), ""); + if (!is_array($nouveau)) { + return (""); + } $im_n = $nouveau["fichier"]; $im = $nouveau["fonction_imagecreatefrom"]($im_n); imagepalettetotruecolor($im); - if ($nouveau["format_source"] == "gif" AND function_exists('ImageCopyResampled')) { + if ($nouveau["format_source"] == "gif" and function_exists('ImageCopyResampled')) { $im_ = imagecreatetruecolor($x_dest, $y_dest); // Si un GIF est transparent, // fabriquer un PNG transparent // Conserver la transparence - if (function_exists("imageAntiAlias")) imageAntiAlias($im_,true); - @imagealphablending($im_, false); - @imagesavealpha($im_,true); + if (function_exists("imageAntiAlias")) { + imageAntiAlias($im_, true); + } + @imagealphablending($im_, false); + @imagesavealpha($im_, true); @ImageCopyResampled($im_, $im, 0, 0, 0, 0, $x_dest, $y_dest, $x_dest, $y_dest); imagedestroy($im); $im = $im_; } $im_ = imagecreatetruecolor($x_dest, $y_dest); @imagealphablending($im_, false); - @imagesavealpha($im_,true); - $color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 ); - imagefill ($im_, 0, 0, $color_t); + @imagesavealpha($im_, true); + $color_t = ImageColorAllocateAlpha($im_, 255, 255, 255, 127); + imagefill($im_, 0, 0, $color_t); // calcul couleurs de chaque pixel selon les modes de fusion for ($x = 0; $x < $x_dest; $x++) { - for ($y=0; $y < $y_dest; $y++) { + for ($y = 0; $y < $y_dest; $y++) { $rgb = ImageColorAt($im2, $x, $y); // image au dessus $a = ($rgb >> 24) & 0xFF; $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; - $rgb2 = ImageColorAt($im, $x+$x_dec, $y+$y_dec); // image en dessous + $rgb2 = ImageColorAt($im, $x + $x_dec, $y + $y_dec); // image en dessous $a2 = ($rgb2 >> 24) & 0xFF; $r2 = ($rgb2 >> 16) & 0xFF; $g2 = ($rgb2 >> 8) & 0xFF; @@ -768,35 +866,39 @@ function image_masque($im, $masque, $pos="") { $b_ = $b; } else { $v2 = (127 - $a2) / 127; - if ($v+$v2 == 0) { + if ($v + $v2 == 0) { $r_ = $r2; $g_ = $g2; $b_ = $b2; - } else if ($v2 == 0) { - $r_ = $r; - $g_ = $g; - $b_ = $b; - } else if ($v == 0) { - $r_ = $r2; - $g_ = $g2; - $b_ = $b2; - }else { - $r_ = $r + (($r2 - $r) * $v2 * (1 - $v)); - $g_ = $g + (($g2 - $g) * $v2 * (1 - $v)); - $b_ = $b + (($b2 - $b) * $v2 * (1 - $v)); + } else { + if ($v2 == 0) { + $r_ = $r; + $g_ = $g; + $b_ = $b; + } else { + if ($v == 0) { + $r_ = $r2; + $g_ = $g2; + $b_ = $b2; + } else { + $r_ = $r + (($r2 - $r) * $v2 * (1 - $v)); + $g_ = $g + (($g2 - $g) * $v2 * (1 - $v)); + $b_ = $b + (($b2 - $b) * $v2 * (1 - $v)); + } + } } } - $a_ = min($a,$a2); + $a_ = min($a, $a2); - } elseif (in_array($mode, array("produit","difference","superposer","lumiere_dure","ecran"))) { + } elseif (in_array($mode, array("produit", "difference", "superposer", "lumiere_dure", "ecran"))) { if ($mode == "produit") { - $r = ($r/255) * $r2; - $g = ($g/255) * $g2; - $b = ($b/255) * $b2; + $r = ($r / 255) * $r2; + $g = ($g / 255) * $g2; + $b = ($b / 255) * $b2; } elseif ($mode == "difference") { - $r = abs($r-$r2); - $g = abs($g-$g2); - $b = abs($b-$b2); + $r = abs($r - $r2); + $g = abs($g - $g2); + $b = abs($b - $b2); } elseif ($mode == "superposer") { $r = ($r2 < 128) ? 2 * $r * $r2 / 255 : 255 - (2 * (255 - $r) * (255 - $r2) / 255); $g = ($g2 < 128) ? 2 * $g * $g2 / 255 : 255 - (2 * (255 - $g) * (255 - $g2) / 255); @@ -822,7 +924,7 @@ function image_masque($im, $masque, $pos="") { $b_ = $b; } else { $v2 = (127 - $a2) / 127; - if ($v+$v2 == 0) { // ?? + if ($v + $v2 == 0) { // ?? $r_ = $r2; $g_ = $g2; $b_ = $b2; @@ -834,7 +936,7 @@ function image_masque($im, $masque, $pos="") { } $a_ = $a2; - } elseif ($mode == "eclaircir" OR $mode == "obscurcir") { + } elseif ($mode == "eclaircir" or $mode == "obscurcir") { $v = (127 - $a) / 127; if ($v == 1) { $r_ = $r; @@ -842,7 +944,7 @@ function image_masque($im, $masque, $pos="") { $b_ = $b; } else { $v2 = (127 - $a2) / 127; - if ($v+$v2 == 0) { + if ($v + $v2 == 0) { $r_ = $r2; $g_ = $g2; $b_ = $b2; @@ -853,17 +955,17 @@ function image_masque($im, $masque, $pos="") { } } if ($mode == "eclaircir") { - $r_ = max ($r_, $r2); - $g_ = max ($g_, $g2); - $b_ = max ($b_, $b2); + $r_ = max($r_, $r2); + $g_ = max($g_, $g2); + $b_ = max($b_, $b2); } else { - $r_ = min ($r_, $r2); - $g_ = min ($g_, $g2); - $b_ = min ($b_, $b2); + $r_ = min($r_, $r2); + $g_ = min($g_, $g2); + $b_ = min($b_, $b2); } - $a_ = min($a,$a2); + $a_ = min($a, $a2); - } elseif (in_array($mode, array("teinte","saturation","valeur"))) { + } elseif (in_array($mode, array("teinte", "saturation", "valeur"))) { include_spip("filtres/images_lib"); $hsv = _couleur_rgb2hsv($r, $g, $b); // image au dessus $h = $hsv["h"]; @@ -873,7 +975,7 @@ function image_masque($im, $masque, $pos="") { $h2 = $hsv2["h"]; $s2 = $hsv2["s"]; $v2 = $hsv2["v"]; - switch ($mode) { + switch ($mode) { case "teinte"; $rgb3 = _couleur_hsv2rgb($h, $s2, $v2); break; @@ -896,7 +998,7 @@ function image_masque($im, $masque, $pos="") { $b_ = $b; } else { $v2 = (127 - $a2) / 127; - if ($v+$v2 == 0) { // ?? + if ($v + $v2 == 0) { // ?? $r_ = $r2; $g_ = $g2; $b_ = $b2; @@ -915,15 +1017,15 @@ function image_masque($im, $masque, $pos="") { $g_ = max(0, min($g_, 255)); $b_ = $b2 + 1 * ($b - 127); $b_ = max(0, min($b_, 255)); - $a_ = $a + $a2 - round($a*$a2/127); + $a_ = $a + $a2 - round($a * $a2 / 127); } - $color = ImageColorAllocateAlpha( $im_, $r_, $g_, $b_ , $a_ ); - imagesetpixel ($im_, $x, $y, $color); + $color = ImageColorAllocateAlpha($im_, $r_, $g_, $b_, $a_); + imagesetpixel($im_, $x, $y, $color); } } - _image_gd_output($im_,$image); + _image_gd_output($im_, $image); imagedestroy($im_); imagedestroy($im); imagedestroy($im2); @@ -931,7 +1033,8 @@ function image_masque($im, $masque, $pos="") { } $x_dest = largeur($dest); $y_dest = hauteur($dest); - return _image_ecrire_tag($image,array('src'=>$dest,'width'=>$x_dest,'height'=>$y_dest)); + + return _image_ecrire_tag($image, array('src' => $dest, 'width' => $x_dest, 'height' => $y_dest)); } // Passage de l'image en noir et blanc @@ -939,20 +1042,21 @@ function image_masque($im, $masque, $pos="") { // ponderees pour obtenir le niveau de gris; // on peut ici regler cette ponderation en "pour mille" // https://code.spip.net/@image_nb -function image_nb($im, $val_r = 299, $val_g = 587, $val_b = 114) -{ +function image_nb($im, $val_r = 299, $val_g = 587, $val_b = 114) { $fonction = array('image_nb', func_get_args()); - $image = _image_valeurs_trans($im, "nb-$val_r-$val_g-$val_b",false,$fonction); - if (!$image) return(""); - + $image = _image_valeurs_trans($im, "nb-$val_r-$val_g-$val_b", false, $fonction); + if (!$image) { + return (""); + } + $x_i = $image["largeur"]; $y_i = $image["hauteur"]; - + $im = $image["fichier"]; $dest = $image["fichier_dest"]; - + $creer = $image["creer"]; - + // Methode precise // resultat plus beau, mais tres lourd // Et: indispensable pour preserver transparence! @@ -964,13 +1068,13 @@ function image_nb($im, $val_r = 299, $val_g = 587, $val_b = 114) imagepalettetotruecolor($im); $im_ = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im_, false); - @imagesavealpha($im_,true); - $color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 ); - imagefill ($im_, 0, 0, $color_t); + @imagesavealpha($im_, true); + $color_t = ImageColorAllocateAlpha($im_, 255, 255, 255, 127); + imagefill($im_, 0, 0, $color_t); imagecopy($im_, $im, 0, 0, 0, 0, $x_i, $y_i); - + for ($x = 0; $x < $x_i; $x++) { - for ($y=0; $y < $y_i; $y++) { + for ($y = 0; $y < $y_i; $y++) { $rgb = ImageColorAt($im_, $x, $y); $a = ($rgb >> 24) & 0xFF; $r = ($rgb >> 16) & 0xFF; @@ -978,56 +1082,61 @@ function image_nb($im, $val_r = 299, $val_g = 587, $val_b = 114) $b = $rgb & 0xFF; $c = round(($val_r * $r / 1000) + ($val_g * $g / 1000) + ($val_b * $b / 1000)); - if ($c < 0) $c = 0; - if ($c > 254) $c = 254; - - - $color = ImageColorAllocateAlpha( $im_, $c, $c, $c , $a ); - imagesetpixel ($im_, $x, $y, $color); + if ($c < 0) { + $c = 0; + } + if ($c > 254) { + $c = 254; + } + + + $color = ImageColorAllocateAlpha($im_, $c, $c, $c, $a); + imagesetpixel($im_, $x, $y, $color); } } - _image_gd_output($im_,$image); + _image_gd_output($im_, $image); imagedestroy($im_); imagedestroy($im); } - return _image_ecrire_tag($image,array('src'=>$dest)); + return _image_ecrire_tag($image, array('src' => $dest)); } // https://code.spip.net/@image_flou -function image_flou($im,$niveau=3) -{ +function image_flou($im, $niveau = 3) { // Il s'agit d'une modification du script blur qu'on trouve un peu partout: // + la transparence est geree correctement // + les dimensions de l'image sont augmentees pour flouter les bords - $coeffs = array ( - array ( 1), - array ( 1, 1), - array ( 1, 2, 1), - array ( 1, 3, 3, 1), - array ( 1, 4, 6, 4, 1), - array ( 1, 5, 10, 10, 5, 1), - array ( 1, 6, 15, 20, 15, 6, 1), - array ( 1, 7, 21, 35, 35, 21, 7, 1), - array ( 1, 8, 28, 56, 70, 56, 28, 8, 1), - array ( 1, 9, 36, 84, 126, 126, 84, 36, 9, 1), - array ( 1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1), - array ( 1, 11, 55, 165, 330, 462, 462, 330, 165, 55, 11, 1) - ); - + $coeffs = array( + array(1), + array(1, 1), + array(1, 2, 1), + array(1, 3, 3, 1), + array(1, 4, 6, 4, 1), + array(1, 5, 10, 10, 5, 1), + array(1, 6, 15, 20, 15, 6, 1), + array(1, 7, 21, 35, 35, 21, 7, 1), + array(1, 8, 28, 56, 70, 56, 28, 8, 1), + array(1, 9, 36, 84, 126, 126, 84, 36, 9, 1), + array(1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1), + array(1, 11, 55, 165, 330, 462, 462, 330, 165, 55, 11, 1) + ); + $fonction = array('image_flou', func_get_args()); - $image = _image_valeurs_trans($im, "flou-$niveau", false,$fonction); - if (!$image) return(""); - + $image = _image_valeurs_trans($im, "flou-$niveau", false, $fonction); + if (!$image) { + return (""); + } + $x_i = $image["largeur"]; $y_i = $image["hauteur"]; - $sum = pow (2, $niveau); + $sum = pow(2, $niveau); $im = $image["fichier"]; $dest = $image["fichier_dest"]; - + $creer = $image["creer"]; - + // Methode precise // resultat plus beau, mais tres lourd // Et: indispensable pour preserver transparence! @@ -1037,154 +1146,169 @@ function image_flou($im,$niveau=3) // de facon a conserver les GIF transparents $im = $image["fonction_imagecreatefrom"]($im); imagepalettetotruecolor($im); - $temp1 = imagecreatetruecolor($x_i+$niveau, $y_i); - $temp2 = imagecreatetruecolor($x_i+$niveau, $y_i+$niveau); - + $temp1 = imagecreatetruecolor($x_i + $niveau, $y_i); + $temp2 = imagecreatetruecolor($x_i + $niveau, $y_i + $niveau); + @imagealphablending($temp1, false); - @imagesavealpha($temp1,true); + @imagesavealpha($temp1, true); @imagealphablending($temp2, false); - @imagesavealpha($temp2,true); - - - for ($i = 0; $i < $x_i+$niveau; $i++) { - for ($j=0; $j < $y_i; $j++) { - $suma=0; - $sumr=0; - $sumg=0; - $sumb=0; + @imagesavealpha($temp2, true); + + + for ($i = 0; $i < $x_i + $niveau; $i++) { + for ($j = 0; $j < $y_i; $j++) { + $suma = 0; + $sumr = 0; + $sumg = 0; + $sumb = 0; $sum = 0; $sum_ = 0; - for ( $k=0 ; $k <= $niveau ; ++$k ) { - $color = imagecolorat($im, $i_ = ($i-$niveau)+$k , $j); + for ($k = 0; $k <= $niveau; ++$k) { + $color = imagecolorat($im, $i_ = ($i - $niveau) + $k, $j); $a = ($color >> 24) & 0xFF; $r = ($color >> 16) & 0xFF; $g = ($color >> 8) & 0xFF; $b = ($color) & 0xFF; - - if ($i_ < 0 OR $i_ >= $x_i) $a = 127; - + + if ($i_ < 0 or $i_ >= $x_i) { + $a = 127; + } + $coef = $coeffs[$niveau][$k]; - $suma += $a*$coef; - $ac = ((127-$a) / 127); - - $ac = $ac*$ac; - + $suma += $a * $coef; + $ac = ((127 - $a) / 127); + + $ac = $ac * $ac; + $sumr += $r * $coef * $ac; $sumg += $g * $coef * $ac; $sumb += $b * $coef * $ac; $sum += $coef * $ac; $sum_ += $coef; } - if ($sum > 0) $color = ImageColorAllocateAlpha ($temp1, $sumr/$sum, $sumg/$sum, $sumb/$sum, $suma/$sum_); - else $color = ImageColorAllocateAlpha ($temp1, 255, 255, 255, 127); - imagesetpixel($temp1,$i,$j,$color); + if ($sum > 0) { + $color = ImageColorAllocateAlpha($temp1, $sumr / $sum, $sumg / $sum, $sumb / $sum, $suma / $sum_); + } else { + $color = ImageColorAllocateAlpha($temp1, 255, 255, 255, 127); + } + imagesetpixel($temp1, $i, $j, $color); } } imagedestroy($im); - for ($i = 0; $i < $x_i+$niveau; $i++) { - for ($j=0; $j < $y_i+$niveau; $j++) { - $suma=0; - $sumr=0; - $sumg=0; - $sumb=0; + for ($i = 0; $i < $x_i + $niveau; $i++) { + for ($j = 0; $j < $y_i + $niveau; $j++) { + $suma = 0; + $sumr = 0; + $sumg = 0; + $sumb = 0; $sum = 0; $sum_ = 0; - for ( $k=0 ; $k <= $niveau ; ++$k ) { - $color = imagecolorat($temp1, $i, $j_ = $j-$niveau+$k); + for ($k = 0; $k <= $niveau; ++$k) { + $color = imagecolorat($temp1, $i, $j_ = $j - $niveau + $k); $a = ($color >> 24) & 0xFF; $r = ($color >> 16) & 0xFF; $g = ($color >> 8) & 0xFF; $b = ($color) & 0xFF; - if ($j_ < 0 OR $j_ >= $y_i) $a = 127; - - $suma += $a*$coeffs[$niveau][$k]; - $ac = ((127-$a) / 127); - + if ($j_ < 0 or $j_ >= $y_i) { + $a = 127; + } + + $suma += $a * $coeffs[$niveau][$k]; + $ac = ((127 - $a) / 127); + $sumr += $r * $coeffs[$niveau][$k] * $ac; $sumg += $g * $coeffs[$niveau][$k] * $ac; $sumb += $b * $coeffs[$niveau][$k] * $ac; $sum += $coeffs[$niveau][$k] * $ac; $sum_ += $coeffs[$niveau][$k]; - + + } + if ($sum > 0) { + $color = ImageColorAllocateAlpha($temp2, $sumr / $sum, $sumg / $sum, $sumb / $sum, $suma / $sum_); + } else { + $color = ImageColorAllocateAlpha($temp2, 255, 255, 255, 127); } - if ($sum > 0) $color = ImageColorAllocateAlpha ($temp2, $sumr/$sum, $sumg/$sum, $sumb/$sum, $suma/$sum_); - else $color = ImageColorAllocateAlpha ($temp2, 255, 255, 255, 127); - imagesetpixel($temp2,$i,$j,$color); + imagesetpixel($temp2, $i, $j, $color); } } - - _image_gd_output($temp2,$image); - imagedestroy($temp1); - imagedestroy($temp2); + + _image_gd_output($temp2, $image); + imagedestroy($temp1); + imagedestroy($temp2); } - - return _image_ecrire_tag($image,array('src'=>$dest,'width'=>($x_i+$niveau),'height'=>($y_i+$niveau))); + + return _image_ecrire_tag($image, array('src' => $dest, 'width' => ($x_i + $niveau), 'height' => ($y_i + $niveau))); } // https://code.spip.net/@image_RotateBicubic -function image_RotateBicubic($src_img, $angle, $bicubic=0) { +function image_RotateBicubic($src_img, $angle, $bicubic = 0) { include_spip('filtres/images_lib'); - - if (round($angle/90)*90 == $angle) { + + if (round($angle / 90) * 90 == $angle) { $droit = true; - if (round($angle/180)*180 == $angle) $rot = 180; - else $rot = 90; - } - else + if (round($angle / 180) * 180 == $angle) { + $rot = 180; + } else { + $rot = 90; + } + } else { $droit = false; - + } + // convert degrees to radians $angle = $angle + 180; $angle = deg2rad($angle); - - - + + $src_x = imagesx($src_img); $src_y = imagesy($src_img); - - - $center_x = floor(($src_x-1)/2); - $center_y = floor(($src_y-1)/2); - + + + $center_x = floor(($src_x - 1) / 2); + $center_y = floor(($src_y - 1) / 2); + $cosangle = cos($angle); $sinangle = sin($angle); // calculer dimensions en simplifiant angles droits, ce qui evite "floutage" // des rotations a angle droit if (!$droit) { - $corners=array(array(0,0), array($src_x,0), array($src_x,$src_y), array(0,$src_y)); - - foreach($corners as $key=>$value) { - $value[0]-=$center_x; //Translate coords to center for rotation - $value[1]-=$center_y; - $temp=array(); - $temp[0]=$value[0]*$cosangle+$value[1]*$sinangle; - $temp[1]=$value[1]*$cosangle-$value[0]*$sinangle; - $corners[$key]=$temp; + $corners = array(array(0, 0), array($src_x, 0), array($src_x, $src_y), array(0, $src_y)); + + foreach ($corners as $key => $value) { + $value[0] -= $center_x; //Translate coords to center for rotation + $value[1] -= $center_y; + $temp = array(); + $temp[0] = $value[0] * $cosangle + $value[1] * $sinangle; + $temp[1] = $value[1] * $cosangle - $value[0] * $sinangle; + $corners[$key] = $temp; } - - $min_x=1000000000000000; - $max_x=-1000000000000000; - $min_y=1000000000000000; - $max_y=-1000000000000000; - - foreach($corners as $key => $value) { - if($value[0]<$min_x) - $min_x=$value[0]; - if($value[0]>$max_x) - $max_x=$value[0]; - - if($value[1]<$min_y) - $min_y=$value[1]; - if($value[1]>$max_y) - $max_y=$value[1]; - } - - $rotate_width=ceil($max_x-$min_x); - $rotate_height=ceil($max_y-$min_y); - } - else { + + $min_x = 1000000000000000; + $max_x = -1000000000000000; + $min_y = 1000000000000000; + $max_y = -1000000000000000; + + foreach ($corners as $key => $value) { + if ($value[0] < $min_x) { + $min_x = $value[0]; + } + if ($value[0] > $max_x) { + $max_x = $value[0]; + } + + if ($value[1] < $min_y) { + $min_y = $value[1]; + } + if ($value[1] > $max_y) { + $max_y = $value[1]; + } + } + + $rotate_width = ceil($max_x - $min_x); + $rotate_height = ceil($max_y - $min_y); + } else { if ($rot == 180) { $rotate_height = $src_y; $rotate_width = $src_x; @@ -1194,38 +1318,39 @@ function image_RotateBicubic($src_img, $angle, $bicubic=0) { } $bicubic = false; } - - - $rotate=imagecreatetruecolor($rotate_width,$rotate_height); + + + $rotate = imagecreatetruecolor($rotate_width, $rotate_height); imagealphablending($rotate, false); imagesavealpha($rotate, true); - + $cosangle = cos($angle); $sinangle = sin($angle); - + // arrondir pour rotations angle droit (car cos et sin dans {-1,0,1}) if ($droit) { $cosangle = round($cosangle); $sinangle = round($sinangle); } - $newcenter_x = ($rotate_width-1)/2; - $newcenter_y = ($rotate_height-1)/2; + $newcenter_x = ($rotate_width - 1) / 2; + $newcenter_y = ($rotate_height - 1) / 2; + - for ($y = 0; $y < $rotate_height; $y++) { for ($x = 0; $x < $rotate_width; $x++) { // rotate... - $old_x = ((($newcenter_x-$x) * $cosangle + ($newcenter_y-$y) * $sinangle)) - + $center_x; - $old_y = ((($newcenter_y-$y) * $cosangle - ($newcenter_x-$x) * $sinangle)) - + $center_y; - + $old_x = ((($newcenter_x - $x) * $cosangle + ($newcenter_y - $y) * $sinangle)) + + $center_x; + $old_y = ((($newcenter_y - $y) * $cosangle - ($newcenter_x - $x) * $sinangle)) + + $center_y; + $old_x = ceil($old_x); $old_y = ceil($old_y); - - if ( $old_x >= 0 && $old_x < $src_x - && $old_y >= 0 && $old_y < $src_y ) { + + if ($old_x >= 0 && $old_x < $src_x + && $old_y >= 0 && $old_y < $src_y + ) { if ($bicubic == true) { $xo = $old_x; $x0 = floor($xo); @@ -1233,126 +1358,138 @@ function image_RotateBicubic($src_img, $angle, $bicubic=0) { $yo = $old_y; $y0 = floor($yo); $y1 = ceil($yo); - + // on prend chaque point, mais on pondere en fonction de la distance - $rgb = ImageColorAt($src_img, $x0, $y0); + $rgb = ImageColorAt($src_img, $x0, $y0); $a1 = ($rgb >> 24) & 0xFF; $r1 = ($rgb >> 16) & 0xFF; $g1 = ($rgb >> 8) & 0xFF; $b1 = $rgb & 0xFF; $d1 = _image_distance_pixel($xo, $yo, $x0, $y0); - - $rgb = ImageColorAt($src_img, $x1, $y0); + + $rgb = ImageColorAt($src_img, $x1, $y0); $a2 = ($rgb >> 24) & 0xFF; $r2 = ($rgb >> 16) & 0xFF; $g2 = ($rgb >> 8) & 0xFF; $b2 = $rgb & 0xFF; $d2 = _image_distance_pixel($xo, $yo, $x1, $y0); - - $rgb = ImageColorAt($src_img,$x0, $y1); + + $rgb = ImageColorAt($src_img, $x0, $y1); $a3 = ($rgb >> 24) & 0xFF; $r3 = ($rgb >> 16) & 0xFF; $g3 = ($rgb >> 8) & 0xFF; $b3 = $rgb & 0xFF; $d3 = _image_distance_pixel($xo, $yo, $x0, $y1); - - $rgb = ImageColorAt($src_img,$x1, $y1); + + $rgb = ImageColorAt($src_img, $x1, $y1); $a4 = ($rgb >> 24) & 0xFF; $r4 = ($rgb >> 16) & 0xFF; $g4 = ($rgb >> 8) & 0xFF; $b4 = $rgb & 0xFF; $d4 = _image_distance_pixel($xo, $yo, $x1, $y1); - - $ac1 = ((127-$a1) / 127); - $ac2 = ((127-$a2) / 127); - $ac3 = ((127-$a3) / 127); - $ac4 = ((127-$a4) / 127); + + $ac1 = ((127 - $a1) / 127); + $ac2 = ((127 - $a2) / 127); + $ac3 = ((127 - $a3) / 127); + $ac4 = ((127 - $a4) / 127); // limiter impact des couleurs transparentes, // mais attention tout transp: division par 0 - if ($ac1*$d1 + $ac2*$d2 + $ac3+$d3 + $ac4+$d4 > 0) { - if ($ac1 > 0) $d1 = $d1 * $ac1; - if ($ac2 > 0) $d2 = $d2 * $ac2; - if ($ac3 > 0) $d3 = $d3 * $ac3; - if ($ac4 > 0) $d4 = $d4 * $ac4; + if ($ac1 * $d1 + $ac2 * $d2 + $ac3 + $d3 + $ac4 + $d4 > 0) { + if ($ac1 > 0) { + $d1 = $d1 * $ac1; + } + if ($ac2 > 0) { + $d2 = $d2 * $ac2; + } + if ($ac3 > 0) { + $d3 = $d3 * $ac3; + } + if ($ac4 > 0) { + $d4 = $d4 * $ac4; + } } - - $tot = $d1 + $d2 + $d3 + $d4; - - $r = round((($d1*$r1)+($d2*$r2)+($d3*$r3)+($d4*$r4))/$tot); - $g = round((($d1*$g1+($d2*$g2)+$d3*$g3+$d4*$g4))/$tot); - $b = round((($d1*$b1+($d2*$b2)+$d3*$b3+$d4*$b4))/$tot); - $a = round((($d1*$a1+($d2*$a2)+$d3*$a3+$d4*$a4))/$tot); - $color = imagecolorallocatealpha($src_img, $r,$g,$b,$a); - } - else { + + $tot = $d1 + $d2 + $d3 + $d4; + + $r = round((($d1 * $r1) + ($d2 * $r2) + ($d3 * $r3) + ($d4 * $r4)) / $tot); + $g = round((($d1 * $g1 + ($d2 * $g2) + $d3 * $g3 + $d4 * $g4)) / $tot); + $b = round((($d1 * $b1 + ($d2 * $b2) + $d3 * $b3 + $d4 * $b4)) / $tot); + $a = round((($d1 * $a1 + ($d2 * $a2) + $d3 * $a3 + $d4 * $a4)) / $tot); + $color = imagecolorallocatealpha($src_img, $r, $g, $b, $a); + } else { $color = imagecolorat($src_img, round($old_x), round($old_y)); } - } - else { + } else { // this line sets the background colour $color = imagecolorallocatealpha($src_img, 255, 255, 255, 127); } @imagesetpixel($rotate, $x, $y, $color); } } + return $rotate; } // permet de faire tourner une image d'un angle quelconque // la fonction "crop" n'est pas implementee... // https://code.spip.net/@image_rotation -function image_rotation($im, $angle, $crop=false) -{ +function image_rotation($im, $angle, $crop = false) { $fonction = array('image_rotation', func_get_args()); $image = _image_valeurs_trans($im, "rot-$angle-$crop", "png", $fonction); - if (!$image) return(""); - + if (!$image) { + return (""); + } + $im = $image["fichier"]; $dest = $image["fichier_dest"]; - + $creer = $image["creer"]; - + if ($creer) { $effectuer_gd = true; - if(method_exists('Imagick','rotateImage')){ + if (method_exists('Imagick', 'rotateImage')) { $imagick = new Imagick(); $imagick->readImage($im); $imagick->rotateImage(new ImagickPixel('none'), $angle); $imagick->writeImage($dest); $effectuer_gd = false; - } - else if ($GLOBALS['meta']['image_process'] == "convert") { - if (_CONVERT_COMMAND!='') { - @define ('_CONVERT_COMMAND', 'convert'); - @define ('_ROTATE_COMMAND', _CONVERT_COMMAND.' -background none -rotate %t %src %dest'); - } else - @define ('_ROTATE_COMMAND', ''); - if (_ROTATE_COMMAND!=='') { - $commande = str_replace( - array('%t', '%src', '%dest'), - array( - $angle, - escapeshellcmd($im), - escapeshellcmd($dest) - ), - _ROTATE_COMMAND); - spip_log($commande); - exec($commande); - if (file_exists($dest)) // precaution - $effectuer_gd = false; + } else { + if ($GLOBALS['meta']['image_process'] == "convert") { + if (_CONVERT_COMMAND != '') { + @define('_CONVERT_COMMAND', 'convert'); + @define('_ROTATE_COMMAND', _CONVERT_COMMAND . ' -background none -rotate %t %src %dest'); + } else { + @define('_ROTATE_COMMAND', ''); + } + if (_ROTATE_COMMAND !== '') { + $commande = str_replace( + array('%t', '%src', '%dest'), + array( + $angle, + escapeshellcmd($im), + escapeshellcmd($dest) + ), + _ROTATE_COMMAND); + spip_log($commande); + exec($commande); + if (file_exists($dest)) // precaution + { + $effectuer_gd = false; + } + } } - } - // cette variante genere-t-elle un fond transparent - // dans les coins vide issus de la rotation ? - elseif (function_exists('imagick_rotate')) { - $handle = imagick_readimage ($im); - if ($handle && imagick_isopaqueimage( $handle )) { - imagick_setfillcolor($handle, 'transparent'); - imagick_rotate( $handle, $angle); - imagick_writeimage( $handle, $dest); - $effectuer_gd = false; + // cette variante genere-t-elle un fond transparent + // dans les coins vide issus de la rotation ? + elseif (function_exists('imagick_rotate')) { + $handle = imagick_readimage($im); + if ($handle && imagick_isopaqueimage($handle)) { + imagick_setfillcolor($handle, 'transparent'); + imagick_rotate($handle, $angle); + imagick_writeimage($handle, $dest); + $effectuer_gd = false; + } } } if ($effectuer_gd) { @@ -1361,51 +1498,57 @@ function image_rotation($im, $angle, $crop=false) $im = $image["fonction_imagecreatefrom"]($im); imagepalettetotruecolor($im); $im = image_RotateBicubic($im, $angle, true); - _image_gd_output($im,$image); + _image_gd_output($im, $image); imagedestroy($im); } } - list ($src_y,$src_x) = taille_image($dest); - return _image_ecrire_tag($image,array('src'=>$dest,'width'=>$src_x,'height'=>$src_y)); + list($src_y, $src_x) = taille_image($dest); + + return _image_ecrire_tag($image, array('src' => $dest, 'width' => $src_x, 'height' => $src_y)); } // Permet d'appliquer un filtre php_imagick a une image // par exemple: [(#LOGO_ARTICLE|image_imagick{imagick_wave,20,60})] // liste des fonctions: http://www.linux-nantes.org/~fmonnier/doc/imagick/ // https://code.spip.net/@image_imagick -function image_imagick () { +function image_imagick() { $tous = func_get_args(); $img = $tous[0]; $fonc = $tous[1]; - $tous[0]=""; + $tous[0] = ""; $tous_var = join($tous, "-"); $fonction = array('image_imagick', func_get_args()); - $image = _image_valeurs_trans($img, "$tous_var", "png",$fonction); - if (!$image) return(""); - + $image = _image_valeurs_trans($img, "$tous_var", "png", $fonction); + if (!$image) { + return (""); + } + $im = $image["fichier"]; $dest = $image["fichier_dest"]; - + $creer = $image["creer"]; - + if ($creer) { if (function_exists($fonc)) { - $handle = imagick_readimage ($im); + $handle = imagick_readimage($im); $arr[0] = $handle; - for ($i=2; $i < count($tous); $i++) $arr[] = $tous[$i]; + for ($i = 2; $i < count($tous); $i++) { + $arr[] = $tous[$i]; + } call_user_func_array($fonc, $arr); // Creer image dans fichier temporaire, puis renommer vers "bon" fichier // de facon a eviter time_out pendant creation de l'image definitive $tmp = preg_replace(",[.]png$,i", "-tmp.png", $dest); - imagick_writeimage( $handle, $tmp); + imagick_writeimage($handle, $tmp); rename($tmp, $dest); - ecrire_fichier($dest.".src",serialize($image)); - } + ecrire_fichier($dest . ".src", serialize($image)); + } } - list ($src_y,$src_x) = taille_image($dest); - return _image_ecrire_tag($image,array('src'=>$dest,'width'=>$src_x,'height'=>$src_y)); + list($src_y, $src_x) = taille_image($dest); + + return _image_ecrire_tag($image, array('src' => $dest, 'width' => $src_x, 'height' => $src_y)); } @@ -1413,20 +1556,22 @@ function image_imagick () { // plus claire (gamma > 0) // ou plus foncee (gamma < 0) // https://code.spip.net/@image_gamma -function image_gamma($im, $gamma = 0){ +function image_gamma($im, $gamma = 0) { include_spip('filtres/images_lib'); $fonction = array('image_gamma', func_get_args()); - $image = _image_valeurs_trans($im, "gamma-$gamma",false,$fonction); - if (!$image) return(""); - + $image = _image_valeurs_trans($im, "gamma-$gamma", false, $fonction); + if (!$image) { + return (""); + } + $x_i = $image["largeur"]; $y_i = $image["hauteur"]; - + $im = $image["fichier"]; $dest = $image["fichier_dest"]; - + $creer = $image["creer"]; - + if ($creer) { // Creation de l'image en deux temps // de facon a conserver les GIF transparents @@ -1434,13 +1579,13 @@ function image_gamma($im, $gamma = 0){ imagepalettetotruecolor($im); $im_ = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im_, false); - @imagesavealpha($im_,true); - $color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 ); - imagefill ($im_, 0, 0, $color_t); + @imagesavealpha($im_, true); + $color_t = ImageColorAllocateAlpha($im_, 255, 255, 255, 127); + imagefill($im_, 0, 0, $color_t); imagecopy($im_, $im, 0, 0, 0, 0, $x_i, $y_i); - + for ($x = 0; $x < $x_i; $x++) { - for ($y=0; $y < $y_i; $y++) { + for ($y = 0; $y < $y_i; $y++) { $rgb = ImageColorAt($im_, $x, $y); $a = ($rgb >> 24) & 0xFF; $r = ($rgb >> 16) & 0xFF; @@ -1451,13 +1596,14 @@ function image_gamma($im, $gamma = 0){ $g = _image_decale_composante($g, $gamma); $b = _image_decale_composante($b, $gamma); - $color = ImageColorAllocateAlpha( $im_, $r, $g, $b , $a ); - imagesetpixel ($im_, $x, $y, $color); + $color = ImageColorAllocateAlpha($im_, $r, $g, $b, $a); + imagesetpixel($im_, $x, $y, $color); } } - _image_gd_output($im_,$image); + _image_gd_output($im_, $image); } - return _image_ecrire_tag($image,array('src'=>$dest)); + + return _image_ecrire_tag($image, array('src' => $dest)); } // Passe l'image en "sepia" @@ -1465,28 +1611,32 @@ function image_gamma($im, $gamma = 0){ // de la couleur "complementaire" pour forcer une dominante //function image_sepia($im, $dr = 137, $dv = 111, $db = 94) // https://code.spip.net/@image_sepia -function image_sepia($im, $rgb = "896f5e"){ +function image_sepia($im, $rgb = "896f5e") { include_spip('filtres/images_lib'); - - if (!function_exists("imagecreatetruecolor")) return $im; - + + if (!function_exists("imagecreatetruecolor")) { + return $im; + } + $couleurs = _couleur_hex_to_dec($rgb); - $dr= $couleurs["red"]; - $dv= $couleurs["green"]; - $db= $couleurs["blue"]; - + $dr = $couleurs["red"]; + $dv = $couleurs["green"]; + $db = $couleurs["blue"]; + $fonction = array('image_sepia', func_get_args()); - $image = _image_valeurs_trans($im, "sepia-$dr-$dv-$db",false,$fonction); - if (!$image) return(""); - + $image = _image_valeurs_trans($im, "sepia-$dr-$dv-$db", false, $fonction); + if (!$image) { + return (""); + } + $x_i = $image["largeur"]; $y_i = $image["hauteur"]; - + $im = $image["fichier"]; $dest = $image["fichier_dest"]; - + $creer = $image["creer"]; - + if ($creer) { // Creation de l'image en deux temps // de facon a conserver les GIF transparents @@ -1494,13 +1644,13 @@ function image_sepia($im, $rgb = "896f5e"){ imagepalettetotruecolor($im); $im_ = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im_, false); - @imagesavealpha($im_,true); - $color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 ); - imagefill ($im_, 0, 0, $color_t); + @imagesavealpha($im_, true); + $color_t = ImageColorAllocateAlpha($im_, 255, 255, 255, 127); + imagefill($im_, 0, 0, $color_t); imagecopy($im_, $im, 0, 0, 0, 0, $x_i, $y_i); - + for ($x = 0; $x < $x_i; $x++) { - for ($y=0; $y < $y_i; $y++) { + for ($y = 0; $y < $y_i; $y++) { $rgb = ImageColorAt($im_, $x, $y); $a = ($rgb >> 24) & 0xFF; $r = ($rgb >> 16) & 0xFF; @@ -1516,94 +1666,107 @@ function image_sepia($im, $rgb = "896f5e"){ $g = _image_decale_composante_127($g, $dv); $b = _image_decale_composante_127($b, $db); - $color = ImageColorAllocateAlpha( $im_, $r, $g, $b , $a ); - imagesetpixel ($im_, $x, $y, $color); + $color = ImageColorAllocateAlpha($im_, $r, $g, $b, $a); + imagesetpixel($im_, $x, $y, $color); } } - _image_gd_output($im_,$image); + _image_gd_output($im_, $image); imagedestroy($im_); imagedestroy($im); } - - return _image_ecrire_tag($image,array('src'=>$dest)); + + return _image_ecrire_tag($image, array('src' => $dest)); } -// Renforcer la nettete d'une image -// https://code.spip.net/@image_renforcement -function image_renforcement($im, $k=0.5) -{ +/** + * Renforcer la netteté d'une image + * + * @param string $im + * Code HTML de l'image + * @param float $k + * Niveau de renforcement (entre 0 et 1) + * @return string Code HTML de l'image + **/ +function image_renforcement($im, $k = 0.5) { $fonction = array('image_flou', func_get_args()); - $image = _image_valeurs_trans($im, "renforcement-$k",false,$fonction); - if (!$image) return(""); - + $image = _image_valeurs_trans($im, "renforcement-$k", false, $fonction); + if (!$image) { + return (""); + } + $x_i = $image["largeur"]; $y_i = $image["hauteur"]; $im = $image["fichier"]; $dest = $image["fichier_dest"]; $creer = $image["creer"]; - + if ($creer) { $im = $image["fonction_imagecreatefrom"]($im); imagepalettetotruecolor($im); $im_ = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im_, false); - @imagesavealpha($im_,true); - $color_t = ImageColorAllocateAlpha( $im_, 255, 255, 255 , 127 ); - imagefill ($im_, 0, 0, $color_t); + @imagesavealpha($im_, true); + $color_t = ImageColorAllocateAlpha($im_, 255, 255, 255, 127); + imagefill($im_, 0, 0, $color_t); for ($x = 0; $x < $x_i; $x++) { - for ($y=0; $y < $y_i; $y++) { - - $rgb[1][0]=imagecolorat($im,$x,$y-1); - $rgb[0][1]=imagecolorat($im,$x-1,$y); - $rgb[1][1]=imagecolorat($im,$x,$y); - $rgb[2][1]=imagecolorat($im,$x+1,$y); - $rgb[1][2]=imagecolorat($im,$x,$y+1); - - - if ($x-1 < 0) $rgb[0][1] = $rgb[1][1]; - if ($y-1 < 0) $rgb[1][0] = $rgb[1][1]; - if ($x+1 == $x_i) $rgb[2][1] = $rgb[1][1]; - if ($y+1 == $y_i) $rgb[1][2] = $rgb[1][1]; - - $a = ($rgb[0][0] >> 24) & 0xFF; - $r = -$k *(($rgb[1][0] >> 16) & 0xFF) + - -$k *(($rgb[0][1] >> 16) & 0xFF) + - (1+4*$k) *(($rgb[1][1] >> 16) & 0xFF) + - -$k *(($rgb[2][1] >> 16) & 0xFF) + - -$k *(($rgb[1][2] >> 16) & 0xFF) ; - - $g = -$k *(($rgb[1][0] >> 8) & 0xFF) + - -$k *(($rgb[0][1] >> 8) & 0xFF) + - (1+4*$k) *(($rgb[1][1] >> 8) & 0xFF) + - -$k *(($rgb[2][1] >> 8) & 0xFF) + - -$k *(($rgb[1][2] >> 8) & 0xFF) ; - - $b = -$k *($rgb[1][0] & 0xFF) + - -$k *($rgb[0][1] & 0xFF) + - (1+4*$k) *($rgb[1][1] & 0xFF) + - -$k *($rgb[2][1] & 0xFF) + - -$k *($rgb[1][2] & 0xFF) ; - - $r=min(255,max(0,$r)); - $g=min(255,max(0,$g)); - $b=min(255,max(0,$b)); - - - $color = ImageColorAllocateAlpha( $im_, $r, $g, $b , $a ); - imagesetpixel ($im_, $x, $y, $color); + for ($y = 0; $y < $y_i; $y++) { + + $rgb[1][0] = @imagecolorat($im, $x, $y - 1); + $rgb[0][1] = @imagecolorat($im, $x - 1, $y); + $rgb[1][1] = @imagecolorat($im, $x, $y); + $rgb[2][1] = @imagecolorat($im, $x + 1, $y); + $rgb[1][2] = @imagecolorat($im, $x, $y + 1); + + if ($x - 1 < 0) { + $rgb[0][1] = $rgb[1][1]; + } + if ($y - 1 < 0) { + $rgb[1][0] = $rgb[1][1]; + } + if ($x + 1 == $x_i) { + $rgb[2][1] = $rgb[1][1]; + } + if ($y + 1 == $y_i) { + $rgb[1][2] = $rgb[1][1]; + } + + $a = ($rgb[1][1] >> 24) & 0xFF; + $r = -$k * (($rgb[1][0] >> 16) & 0xFF) + + -$k * (($rgb[0][1] >> 16) & 0xFF) + + (1 + 4 * $k) * (($rgb[1][1] >> 16) & 0xFF) + + -$k * (($rgb[2][1] >> 16) & 0xFF) + + -$k * (($rgb[1][2] >> 16) & 0xFF); + + $g = -$k * (($rgb[1][0] >> 8) & 0xFF) + + -$k * (($rgb[0][1] >> 8) & 0xFF) + + (1 + 4 * $k) * (($rgb[1][1] >> 8) & 0xFF) + + -$k * (($rgb[2][1] >> 8) & 0xFF) + + -$k * (($rgb[1][2] >> 8) & 0xFF); + + $b = -$k * ($rgb[1][0] & 0xFF) + + -$k * ($rgb[0][1] & 0xFF) + + (1 + 4 * $k) * ($rgb[1][1] & 0xFF) + + -$k * ($rgb[2][1] & 0xFF) + + -$k * ($rgb[1][2] & 0xFF); + + $r = min(255, max(0, $r)); + $g = min(255, max(0, $g)); + $b = min(255, max(0, $b)); + + + $color = ImageColorAllocateAlpha($im_, $r, $g, $b, $a); + imagesetpixel($im_, $x, $y, $color); } - } - _image_gd_output($im_,$image); + } + _image_gd_output($im_, $image); } - return _image_ecrire_tag($image,array('src'=>$dest)); + return _image_ecrire_tag($image, array('src' => $dest)); } - - /** * Transforme la couleur de fond de l'image en transparence * Le filtre ne gere pas la notion de contiguite aux bords, et affectera tous les pixels de l'image dans la couleur visee @@ -1621,41 +1784,43 @@ function image_renforcement($im, $k=0.5) * @param int $coeff_lissage * @return mixed|null|string */ -function image_fond_transparent($im, $background_color, $tolerance=12, $alpha = 127, $coeff_lissage=7) -{ +function image_fond_transparent($im, $background_color, $tolerance = 12, $alpha = 127, $coeff_lissage = 7) { $fonction = array('image_fond_transparent', func_get_args()); - $image = _image_valeurs_trans($im, "fond_transparent-$background_color-$tolerance-$coeff_lissage-$alpha", "png", $fonction); - if (!$image) return(""); - + $image = _image_valeurs_trans($im, "fond_transparent-$background_color-$tolerance-$coeff_lissage-$alpha", "png", + $fonction); + if (!$image) { + return (""); + } + $x_i = $image["largeur"]; $y_i = $image["hauteur"]; - + $im = $image["fichier"]; $dest = $image["fichier_dest"]; - + $creer = $image["creer"]; - + if ($creer) { $bg = _couleur_hex_to_dec($background_color); $bg_r = $bg['red']; $bg_g = $bg['green']; $bg_b = $bg['blue']; - + // Creation de l'image en deux temps // de facon a conserver les GIF transparents $im = $image["fonction_imagecreatefrom"]($im); imagepalettetotruecolor($im); $im2 = imagecreatetruecolor($x_i, $y_i); @imagealphablending($im2, false); - @imagesavealpha($im2,true); - $color_t = ImageColorAllocateAlpha( $im2, 255, 255, 255 , 127 ); - imagefill ($im2, 0, 0, $color_t); + @imagesavealpha($im2, true); + $color_t = ImageColorAllocateAlpha($im2, 255, 255, 255, 127); + imagefill($im2, 0, 0, $color_t); imagecopy($im2, $im, 0, 0, 0, 0, $x_i, $y_i); $im_ = imagecreatetruecolor($x_i, $y_i); - imagealphablending ($im_, FALSE ); - imagesavealpha ( $im_, TRUE ); - $color_f = ImageColorAllocateAlpha( $im_, 255, 255, 255 , $alpha ); + imagealphablending($im_, false); + imagesavealpha($im_, true); + $color_f = ImageColorAllocateAlpha($im_, 255, 255, 255, $alpha); for ($x = 0; $x < $x_i; $x++) { for ($y = 0; $y < $y_i; $y++) { @@ -1663,24 +1828,22 @@ function image_fond_transparent($im, $background_color, $tolerance=12, $alpha = $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; - if ((($d=abs($r-$bg_r)+abs($g-$bg_g)+abs($b-$bg_b))<=$tolerance)){ - imagesetpixel ( $im_, $x, $y, $color_f ); - } - elseif ($tolerance AND $d<=($coeff_lissage+1)*$tolerance){ - $transp = round($alpha*(1-($d-$tolerance)/($coeff_lissage*$tolerance))); - $color_p = ImageColorAllocateAlpha( $im_, $r, $g, $b , $transp); - imagesetpixel ( $im_, $x, $y, $color_p ); + if ((($d = abs($r - $bg_r) + abs($g - $bg_g) + abs($b - $bg_b)) <= $tolerance)) { + imagesetpixel($im_, $x, $y, $color_f); + } elseif ($tolerance and $d <= ($coeff_lissage + 1) * $tolerance) { + $transp = round($alpha * (1 - ($d - $tolerance) / ($coeff_lissage * $tolerance))); + $color_p = ImageColorAllocateAlpha($im_, $r, $g, $b, $transp); + imagesetpixel($im_, $x, $y, $color_p); + } else { + imagesetpixel($im_, $x, $y, $rgb); } - else - imagesetpixel ( $im_, $x, $y, $rgb ); } } - _image_gd_output($im_,$image); + _image_gd_output($im_, $image); imagedestroy($im_); imagedestroy($im); imagedestroy($im2); } - return _image_ecrire_tag($image,array('src'=>$dest)); + return _image_ecrire_tag($image, array('src' => $dest)); } -?> diff --git a/www/plugins-dist/filtres_images/filtres/images_typo.php b/www/plugins-dist/filtres_images/filtres/images_typo.php index a1837e43..fdc5d59b 100644 --- a/www/plugins-dist/filtres_images/filtres/images_typo.php +++ b/www/plugins-dist/filtres_images/filtres/images_typo.php @@ -9,7 +9,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} // librairie de base du core include_spip('inc/filtres_images_mini'); @@ -19,16 +21,19 @@ include_spip('inc/filtres_images_mini'); // Fonctions pour l'arabe // https://code.spip.net/@rtl_mb_ord -function rtl_mb_ord($char){ +function rtl_mb_ord($char) { - if (($c = ord($char)) < 216) return $c; - else return 256 * rtl_mb_ord(substr($char, 0, -1)) + ord(substr($char, -1)); + if (($c = ord($char)) < 216) { + return $c; + } else { + return 256 * rtl_mb_ord(substr($char, 0, -1)) + ord(substr($char, -1)); + } /* return (strlen($char) < 2) ? ord($char) : 256 * mb_ord(substr($char, 0, -1)) + ord(substr($char, -1)); - */ + */ } @@ -36,63 +41,81 @@ function rtl_mb_ord($char){ function rtl_reverse($mot, $rtl_global) { $rtl_prec = $rtl_global; - $ponctuations = array("/", "-", "«","»", "“", "”", ",", ".", " ", ":", ";", "(", ")", "،", "؟", "?", "!", " "); - foreach($ponctuations as $ponct) { + $ponctuations = array("/", "-", "«", "»", "“", "”", ",", ".", " ", ":", ";", "(", ")", "،", "؟", "?", "!", " "); + foreach ($ponctuations as $ponct) { $ponctuation[$ponct] = true; } - for ($i = 0; $i < spip_strlen($mot); $i++) { $lettre = spip_substr($mot, $i, 1); - + $code = rtl_mb_ord($lettre); # echo "
  • $lettre - $code"; - if (($code >= 54928 && $code <= 56767) || ($code >= 15707294 && $code <= 15711164)) { + if (($code >= 54928 && $code <= 56767) || ($code >= 15707294 && $code <= 15711164)) { $rtl = true; + } else { + $rtl = false; } - else $rtl = false; - + if ($lettre == "Ù " || $lettre == "Ù¡" || $lettre == "Ù¢" || $lettre == "Ù£" || $lettre == "Ù¤" || $lettre == "Ù¥" - || $lettre == "Ù¦" || $lettre == "Ù§" || $lettre == "Ù¨" || $lettre == "Ù©") $rtl = false; - + || $lettre == "Ù¦" || $lettre == "Ù§" || $lettre == "Ù¨" || $lettre == "Ù©" + ) { + $rtl = false; + } + if ($ponctuation[$lettre]) { # le truc mega casse-gueule de l'inversion unicode: # traiter le sens de placement en fonction de la lettre precedente # (et non automatiquement le rtl_global) $rtl = $rtl_prec; - + if ($rtl) { switch ($lettre) { - case "(": $lettre = ")"; break; - case ")": $lettre = "("; break; - case "«": $lettre = "»"; break; - case "»": $lettre = "«"; break; - case "“": $lettre = "”"; break; - case "”": $lettre = "“"; break; + case "(": + $lettre = ")"; + break; + case ")": + $lettre = "("; + break; + case "«": + $lettre = "»"; + break; + case "»": + $lettre = "«"; + break; + case "“": + $lettre = "”"; + break; + case "”": + $lettre = "“"; + break; } } } - - - if ($rtl) $res = $lettre.$res; - else $res = $res.$lettre; - + + + if ($rtl) { + $res = $lettre . $res; + } else { + $res = $res . $lettre; + } + $rtl_prec = $rtl; - + } + return $res; } - // https://code.spip.net/@rtl_visuel function rtl_visuel($texte, $rtl_global) { // hebreu + arabe: 54928 => 56767 // hebreu + presentation A: 15707294 => 15710140 // arabe presentation: 15708336 => 15711164 - + # echo hexdec("efb7bc"); // premiere passe pour determiner s'il y a du rtl @@ -100,231 +123,315 @@ function rtl_visuel($texte, $rtl_global) { $arabic_letters = array( - array("ي", // lettre 0 + array( + "ي", // lettre 0 "ï»±", // isolee 1 "ﻳ", // debut 2 "ï»´", // milieu 3 - "ﻲ"), - array("ب", // lettre 0 + "ﻲ" + ), + array( + "ب", // lettre 0 "ﺏ", // isolee 1 "ﺑ", // debut 2 "ﺒ", // milieu 3 - "ﺐ"), - array("ا", // lettre 0 + "ﺐ" + ), + array( + "ا", // lettre 0 "ا", // isolee 1 "ﺍ", // debut 2 "ﺍ", // milieu 3 - "ﺎ"), - array("Ø¥", // lettre 0 + "ﺎ" + ), + array( + "Ø¥", // lettre 0 "Ø¥", // isolee 1 "Ø¥", // debut 2 "ﺈ", // milieu 3 - "ﺈ"), - array("ل", // lettre 0 + "ﺈ" + ), + array( + "ل", // lettre 0 "ﻝ", // isolee 1 "ﻟ", // debut 2 "ï» ", // milieu 3 - "ﻞ"), - array("Ø®", // lettre 0 + "ﻞ" + ), + array( + "Ø®", // lettre 0 "ﺥ", // isolee 1 "ﺧ", // debut 2 "ﺨ", // milieu 3 - "ﺦ"), - array("ج", // lettre 0 + "ﺦ" + ), + array( + "ج", // lettre 0 "ﺝ", // isolee 1 "ﺟ", // debut 2 "ﺠ", // milieu 3 - "ﺞ"), - array("س", // lettre 0 + "ﺞ" + ), + array( + "س", // lettre 0 "ﺱ", // isolee 1 "ﺳ", // debut 2 "ﺴ", // milieu 3 - "ﺲ"), - array("ن", // lettre 0 + "ﺲ" + ), + array( + "ن", // lettre 0 "ﻥ", // isolee 1 "ﻧ", // debut 2 "ﻨ", // milieu 3 - "ﻦ"), - array("Ø´", // lettre 0 + "ﻦ" + ), + array( + "Ø´", // lettre 0 "ﺵ", // isolee 1 "ﺷ", // debut 2 "ﺸ", // milieu 3 - "ﺶ"), - array("ق", // lettre 0 + "ﺶ" + ), + array( + "ق", // lettre 0 "ﻕ", // isolee 1 "ﻗ", // debut 2 "ﻘ", // milieu 3 - "ﻖ"), - array("Ø­", // lettre 0 + "ﻖ" + ), + array( + "Ø­", // lettre 0 "ﺡ", // isolee 1 "ﺣ", // debut 2 "ﺤ", // milieu 3 - "ﺢ"), - array("م", // lettre 0 + "ﺢ" + ), + array( + "م", // lettre 0 "ﻡ", // isolee 1 "ﻣ", // debut 2 "ﻤ", // milieu 3 - "ﻢ"), - array("ر", // lettre 0 + "ﻢ" + ), + array( + "ر", // lettre 0 "ر", // isolee 1 "ﺭ", // debut 2 "ﺮ", // milieu 3 - "ﺮ"), - array("ع", // lettre 0 + "ﺮ" + ), + array( + "ع", // lettre 0 "ع", // isolee 1 "ﻋ", // debut 2 "ﻌ", // milieu 3 - "ﻊ"), - array("و", // lettre 0 + "ﻊ" + ), + array( + "و", // lettre 0 "و", // isolee 1 "ï»­", // debut 2 "ï»®", // milieu 3 - "ï»®"), - array("Ø©", // lettre 0 + "ï»®" + ), + array( + "Ø©", // lettre 0 "Ø©", // isolee 1 "Ø©", // debut 2 "ﺔ", // milieu 3 - "ﺔ"), - array("ف", // lettre 0 + "ﺔ" + ), + array( + "ف", // lettre 0 "ﻑ", // isolee 1 "ﻓ", // debut 2 "ﻔ", // milieu 3 - "ﻒ"), - array("ï»»", // lettre 0 + "ﻒ" + ), + array( + "ï»»", // lettre 0 "ï»»", // isolee 1 "ï»»", // debut 2 "ﻼ", // milieu 3 - "ﻼ"), - array("Ø­", // lettre 0 + "ﻼ" + ), + array( + "Ø­", // lettre 0 "ﺡ", // isolee 1 "ﺣ", // debut 2 "ﺤ", // milieu 3 - "ﺢ"), - array("ت", // lettre 0 + "ﺢ" + ), + array( + "ت", // lettre 0 "ﺕ", // isolee 1 "ﺗ", // debut 2 "ﺘ", // milieu 3 - "ﺖ"), - array("ض", // lettre 0 + "ﺖ" + ), + array( + "ض", // lettre 0 "ﺽ", // isolee 1 "ﺿ", // debut 2 "ﻀ", // milieu 3 - "ﺾ"), - array("ك", // lettre 0 + "ﺾ" + ), + array( + "ك", // lettre 0 "ك", // isolee 1 "ﻛ", // debut 2 "ﻜ", // milieu 3 - "ﻚ"), - array("ه", // lettre 0 + "ﻚ" + ), + array( + "ه", // lettre 0 "ﻩ", // isolee 1 "ﻫ", // debut 2 "ﻬ", // milieu 3 - "ﻪ"), - array("ي", // lettre 0 + "ﻪ" + ), + array( + "ي", // lettre 0 "ي", // isolee 1 "ﻳ", // debut 2 "ï»´", // milieu 3 - "ﻲ"), - array("ئ", // lettre 0 + "ﻲ" + ), + array( + "ئ", // lettre 0 "ﺉ", // isolee 1 "ﺋ", // debut 2 "ﺌ", // milieu 3 - "ﺊ"), - array("ص", // lettre 0 + "ﺊ" + ), + array( + "ص", // lettre 0 "ﺹ", // isolee 1 "ﺻ", // debut 2 "ﺼ", // milieu 3 - "ﺺ"), - array("Ø«", // lettre 0 + "ﺺ" + ), + array( + "Ø«", // lettre 0 "ﺙ", // isolee 1 "ﺛ", // debut 2 "ﺜ", // milieu 3 - "ﺚ"), - array("ï»·", // lettre 0 + "ﺚ" + ), + array( + "ï»·", // lettre 0 "ï»·", // isolee 1 "ï»·", // debut 2 "ﻸ", // milieu 3 - "ﻸ"), - array("د", // lettre 0 + "ﻸ" + ), + array( + "د", // lettre 0 "ﺩ", // isolee 1 "ﺩ", // debut 2 "ﺪ", // milieu 3 - "ﺪ"), - array("Ø°", // lettre 0 + "ﺪ" + ), + array( + "Ø°", // lettre 0 "ﺫ", // isolee 1 "ﺫ", // debut 2 "ﺬ", // milieu 3 - "ﺬ"), - array("Ø·", // lettre 0 + "ﺬ" + ), + array( + "Ø·", // lettre 0 "ﻁ", // isolee 1 "ﻃ", // debut 2 "ﻄ", // milieu 3 - "ﻂ"), - array("Ø¢", // lettre 0 + "ﻂ" + ), + array( + "Ø¢", // lettre 0 "Ø¢", // isolee 1 "Ø¢", // debut 2 "ﺂ", // milieu 3 - "ﺂ"), - array("Ø£", // lettre 0 + "ﺂ" + ), + array( + "Ø£", // lettre 0 "Ø£", // isolee 1 "Ø£", // debut 2 "ﺄ", // milieu 3 - "ﺄ"), - array("ؤ", // lettre 0 + "ﺄ" + ), + array( + "ؤ", // lettre 0 "ؤ", // isolee 1 "ؤ", // debut 2 "ﺆ", // milieu 3 - "ﺆ"), - array("ز", // lettre 0 + "ﺆ" + ), + array( + "ز", // lettre 0 "ز", // isolee 1 "ز", // debut 2 "ﺰ", // milieu 3 - "ﺰ"), - array("ظ", // lettre 0 + "ﺰ" + ), + array( + "ظ", // lettre 0 "ظ", // isolee 1 "ﻇ", // debut 2 "ﻈ", // milieu 3 - "ﻆ"), - array("غ", // lettre 0 + "ﻆ" + ), + array( + "غ", // lettre 0 "غ", // isolee 1 "ﻏ", // debut 2 "ﻐ", // milieu 3 - "ﻎ"), - array("ى", // lettre 0 + "ﻎ" + ), + array( + "ى", // lettre 0 "ى", // isolee 1 "ﯨ", // debut 2 "ﯩ", // milieu 3 - "ï»°"), - array("Ù¾", // lettre 0 + "ï»°" + ), + array( + "Ù¾", // lettre 0 "Ù¾", // isolee 1 "ﭘ", // debut 2 "ﭙ", // milieu 3 - "ﭗ"), - array("چ", // lettre 0 + "ﭗ" + ), + array( + "چ", // lettre 0 "چ", // isolee 1 "ï­¼", // debut 2 "ï­½", // milieu 3 - "ï­»") + "ï­»" + ) ); - - if(init_mb_string() AND mb_regex_encoding() !== "UTF-8") echo "Attention: dans php.ini, il faut indiquer:
    mbstring.internal_encoding = UTF-8"; - - + + if (init_mb_string() and mb_regex_encoding() !== "UTF-8") { + echo "Attention: dans php.ini, il faut indiquer:
    mbstring.internal_encoding = UTF-8"; + } + + $texte = explode(" ", $texte); - + foreach ($texte as $mot) { $res = ""; // Inserer des indicateurs de debut/fin - $mot = "^".$mot."^"; + $mot = "^" . $mot . "^"; $mot = preg_replace(", ,u", " ", $mot); $mot = preg_replace(",«,u", "«", $mot); $mot = preg_replace(",»,u", "»", $mot); // ponctuations - $ponctuations = array("/", "-", "«","»", "“", "”", ",", ".", " ", ":", ";", "(", ")", "،", "؟", "?", "!"," "); - foreach($ponctuations as $ponct) { + $ponctuations = array("/", "-", "«", "»", "“", "”", ",", ".", " ", ":", ";", "(", ")", "،", "؟", "?", "!", " "); + foreach ($ponctuations as $ponct) { $mot = str_replace("$ponct", "^$ponct^", $mot); } @@ -360,19 +467,19 @@ function rtl_visuel($texte, $rtl_global) { // Ligatures $mot = preg_replace(",لا,u", "ï»»", $mot); $mot = preg_replace(",لأ,u", "ï»·", $mot); - - + + foreach ($arabic_letters as $a_l) { - $mot = preg_replace(",([^\^])".$a_l[0]."([^\^]),u", "\\1".$a_l[3]."\\2", $mot); - $mot = preg_replace(",\^".$a_l[0]."([^\^]),u", "^".$a_l[2]."\\1", $mot); - $mot = preg_replace(",([^\^])".$a_l[0]."\^,u", "\\1".$a_l[4]."^", $mot); + $mot = preg_replace(",([^\^])" . $a_l[0] . "([^\^]),u", "\\1" . $a_l[3] . "\\2", $mot); + $mot = preg_replace(",\^" . $a_l[0] . "([^\^]),u", "^" . $a_l[2] . "\\1", $mot); + $mot = preg_replace(",([^\^])" . $a_l[0] . "\^,u", "\\1" . $a_l[4] . "^", $mot); // il semble qu'il ne soit pas necessaire de remplacer // la lettre isolee // $mot = preg_replace(",\^".$a_l[0]."\^,u", "^".$a_l[1]."^", $mot); } - - $mot = preg_replace(",\^,u", "", $mot); - + + $mot = preg_replace(",\^,u", "", $mot); + $res = $mot; $res = rtl_reverse($mot, $rtl_global); @@ -384,19 +491,33 @@ function rtl_visuel($texte, $rtl_global) { if (($code >= 54928 && $code <= 56767) || ($code >= 15708336 && $code <= 15711164)) $rtl = true; } */ - - - if ($rtl_global) $retour = $res . " " . $retour; - else $retour = $retour. " ".$res; + + + if ($rtl_global) { + $retour = $res . " " . $retour; + } else { + $retour = $retour . " " . $res; + } } - - + + return $retour; } // https://code.spip.net/@printWordWrapped -function printWordWrapped($image, $top, $left, $maxWidth, $font, $couleur, $text, $textSize, $align="left", $hauteur_ligne = 0) { +function printWordWrapped( + $image, + $top, + $left, + $maxWidth, + $font, + $couleur, + $text, + $textSize, + $align = "left", + $hauteur_ligne = 0 +) { static $memps = array(); $fontps = false; @@ -404,17 +525,20 @@ function printWordWrapped($image, $top, $left, $maxWidth, $font, $couleur, $text settype($textSize, 'double'); // calculer les couleurs ici, car fonctionnement different selon TTF ou PS - $black = imagecolorallocatealpha($image, hexdec("0x{".substr($couleur, 0,2)."}"), hexdec("0x{".substr($couleur, 2,2)."}"), hexdec("0x{".substr($couleur, 4,2)."}"), 0); - $grey2 = imagecolorallocatealpha($image, hexdec("0x{".substr($couleur, 0,2)."}"), hexdec("0x{".substr($couleur, 2,2)."}"), hexdec("0x{".substr($couleur, 4,2)."}"), 127); + $black = imagecolorallocatealpha($image, hexdec("0x{" . substr($couleur, 0, 2) . "}"), + hexdec("0x{" . substr($couleur, 2, 2) . "}"), hexdec("0x{" . substr($couleur, 4, 2) . "}"), 0); + $grey2 = imagecolorallocatealpha($image, hexdec("0x{" . substr($couleur, 0, 2) . "}"), + hexdec("0x{" . substr($couleur, 2, 2) . "}"), hexdec("0x{" . substr($couleur, 4, 2) . "}"), 127); // Gaffe, T1Lib ne fonctionne carrement pas bien des qu'on sort de ASCII // C'est dommage, parce que la rasterisation des caracteres est autrement plus jolie qu'avec TTF. // A garder sous le coude en attendant que ca ne soit plus une grosse bouse. // Si police Postscript et que fonction existe... if ( - false AND - strtolower(substr($font,-4)) == ".pfb" - AND function_exists("imagepstext")) { + false and + strtolower(substr($font, -4)) == ".pfb" + and function_exists("imagepstext") + ) { // Traitement specifique pour polices PostScript (experimental) $textSizePs = round(1.32 * $textSize); if (!$fontps = $memps["$font"]) { @@ -429,7 +553,7 @@ function printWordWrapped($image, $top, $left, $maxWidth, $font, $couleur, $text for ($i = 0; $i < spip_strlen($text); $i++) { $lettre = spip_substr($text, $i, 1); $code = rtl_mb_ord($lettre); - if (($code >= 54928 && $code <= 56767) || ($code >= 15707294 && $code <= 15711164)) { + if (($code >= 54928 && $code <= 56767) || ($code >= 15707294 && $code <= 15711164)) { $rtl_global = true; } } @@ -439,16 +563,21 @@ function printWordWrapped($image, $top, $left, $maxWidth, $font, $couleur, $text $words = explode(' ', $text); // les espaces - foreach($words as $k=>$v) + foreach ($words as $k => $v) { $words[$k] = str_replace(array('~'), array(' '), $v); + } - if ($hauteur_ligne == 0) $lineHeight = floor($textSize * 1.3); - else $lineHeight = $hauteur_ligne; + if ($hauteur_ligne == 0) { + $lineHeight = floor($textSize * 1.3); + } else { + $lineHeight = $hauteur_ligne; + } $dimensions_espace = imageftbbox($textSize, 0, $font, ' ', array()); - if ($dimensions_espace[2] < 0) + if ($dimensions_espace[2] < 0) { $dimensions_espace = imageftbbox($textSize, 0, $font, $line, array()); + } $largeur_espace = $dimensions_espace[2] - $dimensions_espace[0]; $retour["espace"] = $largeur_espace; @@ -456,21 +585,25 @@ function printWordWrapped($image, $top, $left, $maxWidth, $font, $couleur, $text $line = ''; $lines = array(); while (count($words) > 0) { - + $mot = $words[0]; - - if ($rtl_global) $mot = rtl_visuel($mot,$rtl_global); - - $dimensions = imageftbbox($textSize, 0, $font, $line.' '.$mot, array()); + + if ($rtl_global) { + $mot = rtl_visuel($mot, $rtl_global); + } + + $dimensions = imageftbbox($textSize, 0, $font, $line . ' ' . $mot, array()); $lineWidth = $dimensions[2] - $dimensions[0]; // get the length of this line, if the word is to be included if ($lineWidth > $maxWidth) { // if this makes the text wider that anticipated $lines[] = $line; // add the line to the others $line = ''; // empty it (the word will be added outside the loop) } - $line .= ' '.$words[0]; // add the word to the current sentence + $line .= ' ' . $words[0]; // add the word to the current sentence $words = array_slice($words, 1); // remove the word from the array } - if ($line != '') { $lines[] = $line; } // add the last line to the others, if it isn't empty + if ($line != '') { + $lines[] = $line; + } // add the last line to the others, if it isn't empty $height = count($lines) * $lineHeight; // the height of all the lines total // do the actual printing $i = 0; @@ -479,32 +612,46 @@ function printWordWrapped($image, $top, $left, $maxWidth, $font, $couleur, $text // necessaire pour alignement right et center $largeur_max = 0; foreach ($lines as $line) { - if ($rtl_global) $line = rtl_visuel($line, $rtl_global); - + if ($rtl_global) { + $line = rtl_visuel($line, $rtl_global); + } + $dimensions = imageftbbox($textSize, 0, $font, $line, array()); $largeur_ligne = $dimensions[2] - $dimensions[0]; - if ($largeur_ligne > $largeur_max) $largeur_max = $largeur_ligne; + if ($largeur_ligne > $largeur_max) { + $largeur_max = $largeur_ligne; + } } foreach ($lines as $i => $line) { - if ($rtl_global) $line = rtl_visuel($line, $rtl_global); + if ($rtl_global) { + $line = rtl_visuel($line, $rtl_global); + } $dimensions = imageftbbox($textSize, 0, $font, $line, array()); $largeur_ligne = $dimensions[2] - $dimensions[0]; - if ($align == "right") $left_pos = $largeur_max - $largeur_ligne; - else if ($align == "center") $left_pos = floor(($largeur_max - $largeur_ligne)/2); - else $left_pos = 0; - - + if ($align == "right") { + $left_pos = $largeur_max - $largeur_ligne; + } else { + if ($align == "center") { + $left_pos = floor(($largeur_max - $largeur_ligne) / 2); + } else { + $left_pos = 0; + } + } + + if ($fontps) { $line = trim($line); - imagepstext ($image, "$line", $fontps, $textSizePs, $black, $grey2, $left + $left_pos, $top + $lineHeight * $i, 0, 0, 0, 16); + imagepstext($image, "$line", $fontps, $textSizePs, $black, $grey2, $left + $left_pos, $top + $lineHeight * $i, 0, 0, 0, + 16); + } else { + imagefttext($image, $textSize, 0, $left + $left_pos, $top + $lineHeight * $i, $black, $font, trim($line), array()); } - else imagefttext($image, $textSize, 0, $left + $left_pos, $top + $lineHeight * $i, $black, $font, trim($line), array()); } $retour["height"] = $height;# + round(0.3 * $hauteur_ligne); $retour["width"] = $largeur_max; - + return $retour; } @@ -526,6 +673,16 @@ function produire_image_typo() { $align: alignement left, right, center */ + /** + * On définit les variables par défaut + */ + $variables_defaut = array( + 'align' => false, + 'police' => '', + 'largeur' => 0, + 'hauteur_ligne' => 0, + 'padding' => 0, + ); // Recuperer les differents arguments @@ -533,44 +690,60 @@ function produire_image_typo() { $arg_list = func_get_args(); $texte = $arg_list[0]; for ($i = 1; $i < $numargs; $i++) { - if (($p = strpos($arg_list[$i], "="))!==FALSE) { + if (($p = strpos($arg_list[$i], "=")) !== false) { $nom_variable = substr($arg_list[$i], 0, $p); - $val_variable = substr($arg_list[$i], $p+1); - + $val_variable = substr($arg_list[$i], $p + 1); $variable["$nom_variable"] = $val_variable; } - } + $variable = array_merge($variables_defaut, $variable); // Construire requete et nom fichier - $text = str_replace(" ", "~", $texte); + $text = str_replace(" ", "~", $texte); $text = preg_replace(",(\r|\n)+,ms", " ", $text); include_spip('inc/charsets'); $text = html2unicode(strip_tags($text)); - if (strlen($text) == 0) return ""; + if (strlen($text) == 0) { + return ""; + } $taille = $variable["taille"]; - if ($taille < 1) $taille = 16; + if ($taille < 1) { + $taille = 16; + } $couleur = couleur_html_to_hex($variable["couleur"]); - if (strlen($couleur) < 6) $couleur = "000000"; + if (strlen($couleur) < 6) { + $couleur = "000000"; + } $alt = $texte; - + $align = $variable["align"]; - if (!$variable["align"]) $align="left"; - + if (!$variable["align"]) { + $align = "left"; + } + $police = $variable["police"]; - if (strlen($police) < 2) $police = "dustismo.ttf"; + if (strlen($police) < 2) { + $police = "dustismo.ttf"; + } $largeur = $variable["largeur"]; - if ($largeur < 5) $largeur = 600; + if ($largeur < 5) { + $largeur = 600; + } - if ($variable["hauteur_ligne"] > 0) $hauteur_ligne = $variable["hauteur_ligne"]; - else $hauteur_ligne = 0; - if ($variable["padding"] > 0) $padding = $variable["padding"]; - else $padding = 0; - + if ($variable["hauteur_ligne"] > 0) { + $hauteur_ligne = $variable["hauteur_ligne"]; + } else { + $hauteur_ligne = 0; + } + if ($variable["padding"] > 0) { + $padding = $variable["padding"]; + } else { + $padding = 0; + } $string = "$text-$taille-$couleur-$align-$police-$largeur-$hauteur_ligne-$padding"; @@ -581,53 +754,56 @@ function produire_image_typo() { $flag_gd_typo = function_exists("imageftbbox") && function_exists('imageCreateTrueColor'); - - if (@file_exists($fichier)) - $image = $fichier; - else if (!$flag_gd_typo) - return $texte; - else { - $font = find_in_path('polices/'.$police); - if (!$font) { - spip_log(_T('fichier_introuvable', array('fichier' => $police))); - $font = find_in_path('polices/'."dustismo.ttf"); - } - $imgbidon = imageCreateTrueColor($largeur, 45); - $retour = printWordWrapped($imgbidon, $taille+5, 0, $largeur, $font, $couleur, $text, $taille, 'left', $hauteur_ligne); - $hauteur = $retour["height"]; - $largeur_reelle = $retour["width"]; - $espace = $retour["espace"]; - imagedestroy($imgbidon); - - $im = imageCreateTrueColor($largeur_reelle-$espace+(2*$padding), $hauteur+5+(2*$padding)); - imagealphablending ($im, FALSE ); - imagesavealpha ( $im, TRUE ); - - // Creation de quelques couleurs - - $grey2 = imagecolorallocatealpha($im, hexdec("0x{".substr($couleur, 0,2)."}"), hexdec("0x{".substr($couleur, 2,2)."}"), hexdec("0x{".substr($couleur, 4,2)."}"), 127); - ImageFilledRectangle ($im,0,0,$largeur_reelle+(2*$padding),$hauteur+5+(2*$padding),$grey2); - - // Le texte a dessiner - printWordWrapped($im, $taille+5+$padding, $padding, $largeur, $font, $couleur, $text, $taille, $align, $hauteur_ligne); - - - // Utiliser imagepng() donnera un texte plus claire, - // compare a l'utilisation de la fonction imagejpeg() - _image_gd_output($im,array('fichier_dest'=>$fichier,'format_dest'=>'png')); - imagedestroy($im); - + if (@file_exists($fichier)) { $image = $fichier; + } else { + if (!$flag_gd_typo) { + return $texte; + } else { + $font = find_in_path('polices/' . $police); + if (!$font) { + spip_log(_T('fichier_introuvable', array('fichier' => $police))); + $font = find_in_path('polices/' . "dustismo.ttf"); + } + + $imgbidon = imageCreateTrueColor($largeur, 45); + $retour = printWordWrapped($imgbidon, $taille + 5, 0, $largeur, $font, $couleur, $text, $taille, 'left', + $hauteur_ligne); + $hauteur = $retour["height"]; + $largeur_reelle = $retour["width"]; + $espace = $retour["espace"]; + imagedestroy($imgbidon); + + $im = imageCreateTrueColor($largeur_reelle - $espace + (2 * $padding), $hauteur + 5 + (2 * $padding)); + imagealphablending($im, false); + imagesavealpha($im, true); + + // Creation de quelques couleurs + + $grey2 = imagecolorallocatealpha($im, hexdec("0x{" . substr($couleur, 0, 2) . "}"), + hexdec("0x{" . substr($couleur, 2, 2) . "}"), hexdec("0x{" . substr($couleur, 4, 2) . "}"), 127); + ImageFilledRectangle($im, 0, 0, $largeur_reelle + (2 * $padding), $hauteur + 5 + (2 * $padding), $grey2); + + // Le texte a dessiner + printWordWrapped($im, $taille + 5 + $padding, $padding, $largeur, $font, $couleur, $text, $taille, $align, + $hauteur_ligne); + + + // Utiliser imagepng() donnera un texte plus claire, + // compare a l'utilisation de la fonction imagejpeg() + _image_gd_output($im, array('fichier_dest' => $fichier, 'format_dest' => 'png')); + imagedestroy($im); + + $image = $fichier; + } } $dimensions = getimagesize($image); $largeur = $dimensions[0]; $hauteur = $dimensions[1]; - - return inserer_attribut("", 'alt', $alt); -} - -?> + return inserer_attribut("", + 'alt', $alt); +} diff --git a/www/plugins-dist/filtres_images/images_fonctions.php b/www/plugins-dist/filtres_images/images_fonctions.php index 5ebbf9fa..e5f2584a 100644 --- a/www/plugins-dist/filtres_images/images_fonctions.php +++ b/www/plugins-dist/filtres_images/images_fonctions.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} // @@ -62,28 +64,13 @@ $GLOBALS['spip_matrice']['_image_decale_composante'] = 'filtres/images_lib.php'; $GLOBALS['spip_matrice']['_image_decale_composante_127'] = 'filtres/images_lib.php'; */ -/** - * Nommages maintenus pour compatibilite. - */ - - - -/** - * Extraire une couleur d'une image - * - * @param string $img - * @param int $x - * @param int $y - * @return string - */ -function extraire_image_couleur($img, $x=10, $y=6) { - include_spip('filtres/images_lib'); - return _image_couleur_extraire($img, $x, $y); -} /** - * creer une image typo + * Créer une image typo * + * @note + * Cas particulier historique : son nom commence par "image_" + * mais s'applique sur un texte… * @return string */ function image_typo() { @@ -91,5 +78,3 @@ function image_typo() { $tous = func_get_args(); return call_user_func_array('produire_image_typo', $tous); } - -?> \ No newline at end of file diff --git a/www/plugins-dist/filtres_images/inc/filtres_images.php b/www/plugins-dist/filtres_images/inc/filtres_images.php deleted file mode 100644 index 5b0b581c..00000000 --- a/www/plugins-dist/filtres_images/inc/filtres_images.php +++ /dev/null @@ -1,33 +0,0 @@ - \ No newline at end of file diff --git a/www/plugins-dist/filtres_images/inc/filtres_images_compat.php b/www/plugins-dist/filtres_images/inc/filtres_images_compat.php deleted file mode 100644 index c729fb3a..00000000 --- a/www/plugins-dist/filtres_images/inc/filtres_images_compat.php +++ /dev/null @@ -1,56 +0,0 @@ - \ No newline at end of file diff --git a/www/plugins-dist/filtres_images/lang/paquet-images.xml b/www/plugins-dist/filtres_images/lang/paquet-images.xml index ffe9335f..51207c31 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images.xml +++ b/www/plugins-dist/filtres_images/lang/paquet-images.xml @@ -19,15 +19,21 @@ + + + - + + + + @@ -40,4 +46,7 @@ + + + diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_ar.php b/www/plugins-dist/filtres_images/lang/paquet-images_ar.php index 7582a5bd..37748e0a 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_ar.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-images?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'images_description' => 'مرشحات معالجة الصور والألوان ', 'images_slogan' => 'مرشحات معالجة الصور والألوان' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_de.php b/www/plugins-dist/filtres_images/lang/paquet-images_de.php index 1170109b..cc6a3b51 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_de.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-images?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'images_description' => 'Bild- und Farbfilter', 'images_slogan' => 'Bild- und Farbfilter' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_en.php b/www/plugins-dist/filtres_images/lang/paquet-images_en.php index 8be955e7..0c7aee2e 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_en.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-images?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'images_description' => 'Images processing and colors filters', 'images_slogan' => 'Images processing and colors filters' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_es.php b/www/plugins-dist/filtres_images/lang/paquet-images_es.php index d6f65c59..916fdb41 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_es.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-images?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'images_description' => 'Filtros de transformación de imágenes y de colores ', 'images_slogan' => 'Filtros de transformación de imágenes y de colores ' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_fa.php b/www/plugins-dist/filtres_images/lang/paquet-images_fa.php index 9d0daac6..0dbb17ed 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_fa.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-images?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'images_description' => 'فيلتر‌هاي پردازش تصوير‌ها و رنگ‌ها', 'images_slogan' => 'فيلترهاي پردازش تصوير‌ها و رنگ‌ها' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_fr.php b/www/plugins-dist/filtres_images/lang/paquet-images_fr.php index e2e4145b..340cbc1f 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_fr.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_fr.php @@ -1,7 +1,9 @@ 'Filtres de transformation d’images et de couleurs', 'images_slogan' => 'Filtres de transformation d’images et de couleurs' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_fr_fem.php b/www/plugins-dist/filtres_images/lang/paquet-images_fr_fem.php index 24a68273..8e5044ed 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_fr_fem.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-images?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'images_description' => 'Filtres de transformation d’images et de couleurs', 'images_slogan' => 'Filtres de transformation d’images et de couleurs' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_fr_tu.php b/www/plugins-dist/filtres_images/lang/paquet-images_fr_tu.php new file mode 100644 index 00000000..fdeb09ef --- /dev/null +++ b/www/plugins-dist/filtres_images/lang/paquet-images_fr_tu.php @@ -0,0 +1,15 @@ + 'Filtres de transformation d’images et de couleurs', + 'images_slogan' => 'Filtres de transformation d’images et de couleurs' +); diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_it.php b/www/plugins-dist/filtres_images/lang/paquet-images_it.php index ba2bf732..fc570b7f 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_it.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-images?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'images_description' => 'Filtri di trasformazione delle immagini e dei colori', 'images_slogan' => 'Filtri di trasformazione delle immagini e dei colori' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_lb.php b/www/plugins-dist/filtres_images/lang/paquet-images_lb.php index 23111671..01110244 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_lb.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_lb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-images?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'images_description' => 'Ännerungs-Filteren fir d’Biller an d’Faarwen', 'images_slogan' => 'Ännerungs-Filteren fir d’Biller an d’Faarwen' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_nl.php b/www/plugins-dist/filtres_images/lang/paquet-images_nl.php index 5feaed29..f5a0e76b 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_nl.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_nl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-images?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'images_description' => 'Beeld en kleur transformatie filters', 'images_slogan' => 'Beeld en kleur transformatie filters' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_oc_ni_mis.php b/www/plugins-dist/filtres_images/lang/paquet-images_oc_ni_mis.php new file mode 100644 index 00000000..edfb93d2 --- /dev/null +++ b/www/plugins-dist/filtres_images/lang/paquet-images_oc_ni_mis.php @@ -0,0 +1,15 @@ + 'Filtre de trasfourmacioun d’image e de coulou', + 'images_slogan' => 'Filtre de trasfourmacioun d’image e de coulou' +); diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_pt.php b/www/plugins-dist/filtres_images/lang/paquet-images_pt.php index e162a803..ac57ccd5 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_pt.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-images?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'images_description' => 'Processamento de imagens e filtros de cores', 'images_slogan' => 'Processamento de imagens e filtros de cores' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_pt_br.php b/www/plugins-dist/filtres_images/lang/paquet-images_pt_br.php index 87164fda..39163cd8 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_pt_br.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_pt_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-images?lang_cible=pt_br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'images_description' => 'Filtros de transformação de imagens e de cores', 'images_slogan' => 'Filtros de transformação de imagens e de cores' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_ru.php b/www/plugins-dist/filtres_images/lang/paquet-images_ru.php index 9270ac05..c7fd2f7d 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_ru.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_ru.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-images?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'images_description' => 'Набор фильтров по работе с изображениями', 'images_slogan' => 'Набор фильтров по работе с изображениями' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_sk.php b/www/plugins-dist/filtres_images/lang/paquet-images_sk.php index ae38f0f9..21ecc451 100644 --- a/www/plugins-dist/filtres_images/lang/paquet-images_sk.php +++ b/www/plugins-dist/filtres_images/lang/paquet-images_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-images?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'images_description' => 'Filtre na transformáciu obrázkov a farieb', 'images_slogan' => 'Filtre na transformáciu obrázkov a farieb' ); - -?> diff --git a/www/plugins-dist/filtres_images/lang/paquet-images_uk.php b/www/plugins-dist/filtres_images/lang/paquet-images_uk.php new file mode 100644 index 00000000..3fd5808f --- /dev/null +++ b/www/plugins-dist/filtres_images/lang/paquet-images_uk.php @@ -0,0 +1,15 @@ + 'Фільтри для обробки зображень і роботи з кольорами', + 'images_slogan' => 'Фільтри для обробки зображень і роботи з кольорами' +); diff --git a/www/plugins-dist/filtres_images/paquet.xml b/www/plugins-dist/filtres_images/paquet.xml index 27f43db2..1bef939d 100644 --- a/www/plugins-dist/filtres_images/paquet.xml +++ b/www/plugins-dist/filtres_images/paquet.xml @@ -1,11 +1,11 @@ +> Images diff --git a/www/plugins-dist/filtres_images/tests/_couleur_hsl2rgb.php b/www/plugins-dist/filtres_images/tests/_couleur_hsl2rgb.php index b9bbf65e..9cdad675 100644 --- a/www/plugins-dist/filtres_images/tests/_couleur_hsl2rgb.php +++ b/www/plugins-dist/filtres_images/tests/_couleur_hsl2rgb.php @@ -2,1538 +2,1533 @@ /** * Test unitaire de la fonction _couleur_hsl2rgb * du fichier filtres/images_lib.php - * - * genere automatiquement par TestBuilder - * le */ $test = '_couleur_hsl2rgb'; - $remonte = "../"; - while (!is_dir($remonte."ecrire")) - $remonte = "../$remonte"; - require $remonte.'tests/test.inc'; - find_in_path("filtres/images_lib.php",'',true); +$remonte = '../'; +while (!is_dir($remonte . 'ecrire')) { + $remonte = "../$remonte"; +} +require $remonte . 'tests/test.inc'; +find_in_path('filtres/images_lib.php', '', true); - // - // hop ! on y va - // - $err = tester_fun('_couleur_hsl2rgb', essais__couleur_hsl2rgb()); - - // si le tableau $err est pas vide ca va pas - if ($err) { - die ('
    ' . join('', $err) . '
    '); - } +// +// hop ! on y va +// +$err = tester_fun('_couleur_hsl2rgb', essais__couleur_hsl2rgb()); - echo "OK"; - +// si le tableau $err est pas vide ca va pas +if ($err) { + die('
    ' . join('', $err) . '
    '); +} - function essais__couleur_hsl2rgb(){ - $essais = array ( - 0 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 0, - 3 => 0, - ), - 1 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 63, - 'b' => 63, - ), - 1 => 0, - 2 => 0, - 3 => 0.25, - ), - 2 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 127, - 'b' => 127, - ), - 1 => 0, - 2 => 0, - 3 => 0.5, - ), - 3 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 191, - 'b' => 191, - ), - 1 => 0, - 2 => 0, - 3 => 0.75, - ), - 4 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0, - 2 => 0, - 3 => 1, - ), - 5 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 0.25, - 3 => 0, - ), - 6 => - array ( - 0 => - array ( - 'r' => 79, - 'g' => 47, - 'b' => 47, - ), - 1 => 0, - 2 => 0.25, - 3 => 0.25, - ), - 7 => - array ( - 0 => - array ( - 'r' => 159, - 'g' => 95, - 'b' => 95, - ), - 1 => 0, - 2 => 0.25, - 3 => 0.5, - ), - 8 => - array ( - 0 => - array ( - 'r' => 207, - 'g' => 175, - 'b' => 175, - ), - 1 => 0, - 2 => 0.25, - 3 => 0.75, - ), - 9 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0, - 2 => 0.25, - 3 => 1, - ), - 10 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 0.5, - 3 => 0, - ), - 11 => - array ( - 0 => - array ( - 'r' => 95, - 'g' => 31, - 'b' => 31, - ), - 1 => 0, - 2 => 0.5, - 3 => 0.25, - ), - 12 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 63, - 'b' => 63, - ), - 1 => 0, - 2 => 0.5, - 3 => 0.5, - ), - 13 => - array ( - 0 => - array ( - 'r' => 223, - 'g' => 159, - 'b' => 159, - ), - 1 => 0, - 2 => 0.5, - 3 => 0.75, - ), - 14 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0, - 2 => 0.5, - 3 => 1, - ), - 15 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 0.75, - 3 => 0, - ), - 16 => - array ( - 0 => - array ( - 'r' => 111, - 'g' => 15, - 'b' => 15, - ), - 1 => 0, - 2 => 0.75, - 3 => 0.25, - ), - 17 => - array ( - 0 => - array ( - 'r' => 223, - 'g' => 31, - 'b' => 31, - ), - 1 => 0, - 2 => 0.75, - 3 => 0.5, - ), - 18 => - array ( - 0 => - array ( - 'r' => 239, - 'g' => 143, - 'b' => 143, - ), - 1 => 0, - 2 => 0.75, - 3 => 0.75, - ), - 19 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0, - 2 => 0.75, - 3 => 1, - ), - 20 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 1, - 3 => 0, - ), - 21 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 1, - 3 => 0.25, - ), - 22 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 1, - 3 => 0.5, - ), - 23 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 127, - 'b' => 127, - ), - 1 => 0, - 2 => 1, - 3 => 0.75, - ), - 24 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0, - 2 => 1, - 3 => 1, - ), - 25 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.25, - 2 => 0, - 3 => 0, - ), - 26 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 63, - 'b' => 63, - ), - 1 => 0.25, - 2 => 0, - 3 => 0.25, - ), - 27 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 127, - 'b' => 127, - ), - 1 => 0.25, - 2 => 0, - 3 => 0.5, - ), - 28 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 191, - 'b' => 191, - ), - 1 => 0.25, - 2 => 0, - 3 => 0.75, - ), - 29 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.25, - 2 => 0, - 3 => 1, - ), - 30 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.25, - 2 => 0.25, - 3 => 0, - ), - 31 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 79, - 'b' => 47, - ), - 1 => 0.25, - 2 => 0.25, - 3 => 0.25, - ), - 32 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 159, - 'b' => 95, - ), - 1 => 0.25, - 2 => 0.25, - 3 => 0.5, - ), - 33 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 207, - 'b' => 175, - ), - 1 => 0.25, - 2 => 0.25, - 3 => 0.75, - ), - 34 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.25, - 2 => 0.25, - 3 => 1, - ), - 35 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.25, - 2 => 0.5, - 3 => 0, - ), - 36 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 95, - 'b' => 31, - ), - 1 => 0.25, - 2 => 0.5, - 3 => 0.25, - ), - 37 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 191, - 'b' => 63, - ), - 1 => 0.25, - 2 => 0.5, - 3 => 0.5, - ), - 38 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 223, - 'b' => 159, - ), - 1 => 0.25, - 2 => 0.5, - 3 => 0.75, - ), - 39 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.25, - 2 => 0.5, - 3 => 1, - ), - 40 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.25, - 2 => 0.75, - 3 => 0, - ), - 41 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 111, - 'b' => 15, - ), - 1 => 0.25, - 2 => 0.75, - 3 => 0.25, - ), - 42 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 223, - 'b' => 31, - ), - 1 => 0.25, - 2 => 0.75, - 3 => 0.5, - ), - 43 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 239, - 'b' => 143, - ), - 1 => 0.25, - 2 => 0.75, - 3 => 0.75, - ), - 44 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.25, - 2 => 0.75, - 3 => 1, - ), - 45 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.25, - 2 => 1, - 3 => 0, - ), - 46 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 127, - 'b' => 0, - ), - 1 => 0.25, - 2 => 1, - 3 => 0.25, - ), - 47 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 255, - 'b' => 0, - ), - 1 => 0.25, - 2 => 1, - 3 => 0.5, - ), - 48 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 255, - 'b' => 127, - ), - 1 => 0.25, - 2 => 1, - 3 => 0.75, - ), - 49 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.25, - 2 => 1, - 3 => 1, - ), - 50 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.5, - 2 => 0, - 3 => 0, - ), - 51 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 63, - 'b' => 63, - ), - 1 => 0.5, - 2 => 0, - 3 => 0.25, - ), - 52 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 127, - 'b' => 127, - ), - 1 => 0.5, - 2 => 0, - 3 => 0.5, - ), - 53 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 191, - 'b' => 191, - ), - 1 => 0.5, - 2 => 0, - 3 => 0.75, - ), - 54 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.5, - 2 => 0, - 3 => 1, - ), - 55 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.5, - 2 => 0.25, - 3 => 0, - ), - 56 => - array ( - 0 => - array ( - 'r' => 47, - 'g' => 79, - 'b' => 79, - ), - 1 => 0.5, - 2 => 0.25, - 3 => 0.25, - ), - 57 => - array ( - 0 => - array ( - 'r' => 95, - 'g' => 159, - 'b' => 159, - ), - 1 => 0.5, - 2 => 0.25, - 3 => 0.5, - ), - 58 => - array ( - 0 => - array ( - 'r' => 175, - 'g' => 207, - 'b' => 207, - ), - 1 => 0.5, - 2 => 0.25, - 3 => 0.75, - ), - 59 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.5, - 2 => 0.25, - 3 => 1, - ), - 60 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.5, - 2 => 0.5, - 3 => 0, - ), - 61 => - array ( - 0 => - array ( - 'r' => 31, - 'g' => 95, - 'b' => 95, - ), - 1 => 0.5, - 2 => 0.5, - 3 => 0.25, - ), - 62 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 191, - 'b' => 191, - ), - 1 => 0.5, - 2 => 0.5, - 3 => 0.5, - ), - 63 => - array ( - 0 => - array ( - 'r' => 159, - 'g' => 223, - 'b' => 223, - ), - 1 => 0.5, - 2 => 0.5, - 3 => 0.75, - ), - 64 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.5, - 2 => 0.5, - 3 => 1, - ), - 65 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.5, - 2 => 0.75, - 3 => 0, - ), - 66 => - array ( - 0 => - array ( - 'r' => 15, - 'g' => 111, - 'b' => 111, - ), - 1 => 0.5, - 2 => 0.75, - 3 => 0.25, - ), - 67 => - array ( - 0 => - array ( - 'r' => 31, - 'g' => 223, - 'b' => 223, - ), - 1 => 0.5, - 2 => 0.75, - 3 => 0.5, - ), - 68 => - array ( - 0 => - array ( - 'r' => 143, - 'g' => 239, - 'b' => 239, - ), - 1 => 0.5, - 2 => 0.75, - 3 => 0.75, - ), - 69 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.5, - 2 => 0.75, - 3 => 1, - ), - 70 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.5, - 2 => 1, - 3 => 0, - ), - 71 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 127, - 'b' => 127, - ), - 1 => 0.5, - 2 => 1, - 3 => 0.25, - ), - 72 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 254, - 'b' => 255, - ), - 1 => 0.5, - 2 => 1, - 3 => 0.5, - ), - 73 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 254, - 'b' => 255, - ), - 1 => 0.5, - 2 => 1, - 3 => 0.75, - ), - 74 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.5, - 2 => 1, - 3 => 1, - ), - 75 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.75, - 2 => 0, - 3 => 0, - ), - 76 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 63, - 'b' => 63, - ), - 1 => 0.75, - 2 => 0, - 3 => 0.25, - ), - 77 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 127, - 'b' => 127, - ), - 1 => 0.75, - 2 => 0, - 3 => 0.5, - ), - 78 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 191, - 'b' => 191, - ), - 1 => 0.75, - 2 => 0, - 3 => 0.75, - ), - 79 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.75, - 2 => 0, - 3 => 1, - ), - 80 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.75, - 2 => 0.25, - 3 => 0, - ), - 81 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 47, - 'b' => 79, - ), - 1 => 0.75, - 2 => 0.25, - 3 => 0.25, - ), - 82 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 95, - 'b' => 159, - ), - 1 => 0.75, - 2 => 0.25, - 3 => 0.5, - ), - 83 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 175, - 'b' => 207, - ), - 1 => 0.75, - 2 => 0.25, - 3 => 0.75, - ), - 84 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.75, - 2 => 0.25, - 3 => 1, - ), - 85 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.75, - 2 => 0.5, - 3 => 0, - ), - 86 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 31, - 'b' => 95, - ), - 1 => 0.75, - 2 => 0.5, - 3 => 0.25, - ), - 87 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 63, - 'b' => 191, - ), - 1 => 0.75, - 2 => 0.5, - 3 => 0.5, - ), - 88 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 159, - 'b' => 223, - ), - 1 => 0.75, - 2 => 0.5, - 3 => 0.75, - ), - 89 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.75, - 2 => 0.5, - 3 => 1, - ), - 90 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.75, - 2 => 0.75, - 3 => 0, - ), - 91 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 15, - 'b' => 111, - ), - 1 => 0.75, - 2 => 0.75, - 3 => 0.25, - ), - 92 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 31, - 'b' => 223, - ), - 1 => 0.75, - 2 => 0.75, - 3 => 0.5, - ), - 93 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 143, - 'b' => 239, - ), - 1 => 0.75, - 2 => 0.75, - 3 => 0.75, - ), - 94 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.75, - 2 => 0.75, - 3 => 1, - ), - 95 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.75, - 2 => 1, - 3 => 0, - ), - 96 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 0, - 'b' => 127, - ), - 1 => 0.75, - 2 => 1, - 3 => 0.25, - ), - 97 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 0, - 'b' => 255, - ), - 1 => 0.75, - 2 => 1, - 3 => 0.5, - ), - 98 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 127, - 'b' => 255, - ), - 1 => 0.75, - 2 => 1, - 3 => 0.75, - ), - 99 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.75, - 2 => 1, - 3 => 1, - ), - 100 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 0, - 3 => 0, - ), - 101 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 63, - 'b' => 63, - ), - 1 => 1, - 2 => 0, - 3 => 0.25, - ), - 102 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 127, - 'b' => 127, - ), - 1 => 1, - 2 => 0, - 3 => 0.5, - ), - 103 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 191, - 'b' => 191, - ), - 1 => 1, - 2 => 0, - 3 => 0.75, - ), - 104 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 1, - 2 => 0, - 3 => 1, - ), - 105 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 0.25, - 3 => 0, - ), - 106 => - array ( - 0 => - array ( - 'r' => 79, - 'g' => 47, - 'b' => 47, - ), - 1 => 1, - 2 => 0.25, - 3 => 0.25, - ), - 107 => - array ( - 0 => - array ( - 'r' => 159, - 'g' => 95, - 'b' => 95, - ), - 1 => 1, - 2 => 0.25, - 3 => 0.5, - ), - 108 => - array ( - 0 => - array ( - 'r' => 207, - 'g' => 175, - 'b' => 175, - ), - 1 => 1, - 2 => 0.25, - 3 => 0.75, - ), - 109 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 1, - 2 => 0.25, - 3 => 1, - ), - 110 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 0.5, - 3 => 0, - ), - 111 => - array ( - 0 => - array ( - 'r' => 95, - 'g' => 31, - 'b' => 31, - ), - 1 => 1, - 2 => 0.5, - 3 => 0.25, - ), - 112 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 63, - 'b' => 63, - ), - 1 => 1, - 2 => 0.5, - 3 => 0.5, - ), - 113 => - array ( - 0 => - array ( - 'r' => 223, - 'g' => 159, - 'b' => 159, - ), - 1 => 1, - 2 => 0.5, - 3 => 0.75, - ), - 114 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 1, - 2 => 0.5, - 3 => 1, - ), - 115 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 0.75, - 3 => 0, - ), - 116 => - array ( - 0 => - array ( - 'r' => 111, - 'g' => 15, - 'b' => 15, - ), - 1 => 1, - 2 => 0.75, - 3 => 0.25, - ), - 117 => - array ( - 0 => - array ( - 'r' => 223, - 'g' => 31, - 'b' => 31, - ), - 1 => 1, - 2 => 0.75, - 3 => 0.5, - ), - 118 => - array ( - 0 => - array ( - 'r' => 239, - 'g' => 143, - 'b' => 143, - ), - 1 => 1, - 2 => 0.75, - 3 => 0.75, - ), - 119 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 1, - 2 => 0.75, - 3 => 1, - ), - 120 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 1, - 3 => 0, - ), - 121 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 1, - 3 => 0.25, - ), - 122 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 1, - 3 => 0.5, - ), - 123 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 127, - 'b' => 127, - ), - 1 => 1, - 2 => 1, - 3 => 0.75, - ), - 124 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 1, - 2 => 1, - 3 => 1, - ), -); - return $essais; - } +echo 'OK'; +function essais__couleur_hsl2rgb() { + $essais = array( + 0 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 0, + 3 => 0, + ), + 1 => + array( + 0 => + array( + 'r' => 63, + 'g' => 63, + 'b' => 63, + ), + 1 => 0, + 2 => 0, + 3 => 0.25, + ), + 2 => + array( + 0 => + array( + 'r' => 127, + 'g' => 127, + 'b' => 127, + ), + 1 => 0, + 2 => 0, + 3 => 0.5, + ), + 3 => + array( + 0 => + array( + 'r' => 191, + 'g' => 191, + 'b' => 191, + ), + 1 => 0, + 2 => 0, + 3 => 0.75, + ), + 4 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0, + 2 => 0, + 3 => 1, + ), + 5 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 0.25, + 3 => 0, + ), + 6 => + array( + 0 => + array( + 'r' => 79, + 'g' => 47, + 'b' => 47, + ), + 1 => 0, + 2 => 0.25, + 3 => 0.25, + ), + 7 => + array( + 0 => + array( + 'r' => 159, + 'g' => 95, + 'b' => 95, + ), + 1 => 0, + 2 => 0.25, + 3 => 0.5, + ), + 8 => + array( + 0 => + array( + 'r' => 207, + 'g' => 175, + 'b' => 175, + ), + 1 => 0, + 2 => 0.25, + 3 => 0.75, + ), + 9 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0, + 2 => 0.25, + 3 => 1, + ), + 10 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 0.5, + 3 => 0, + ), + 11 => + array( + 0 => + array( + 'r' => 95, + 'g' => 31, + 'b' => 31, + ), + 1 => 0, + 2 => 0.5, + 3 => 0.25, + ), + 12 => + array( + 0 => + array( + 'r' => 191, + 'g' => 63, + 'b' => 63, + ), + 1 => 0, + 2 => 0.5, + 3 => 0.5, + ), + 13 => + array( + 0 => + array( + 'r' => 223, + 'g' => 159, + 'b' => 159, + ), + 1 => 0, + 2 => 0.5, + 3 => 0.75, + ), + 14 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0, + 2 => 0.5, + 3 => 1, + ), + 15 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 0.75, + 3 => 0, + ), + 16 => + array( + 0 => + array( + 'r' => 111, + 'g' => 15, + 'b' => 15, + ), + 1 => 0, + 2 => 0.75, + 3 => 0.25, + ), + 17 => + array( + 0 => + array( + 'r' => 223, + 'g' => 31, + 'b' => 31, + ), + 1 => 0, + 2 => 0.75, + 3 => 0.5, + ), + 18 => + array( + 0 => + array( + 'r' => 239, + 'g' => 143, + 'b' => 143, + ), + 1 => 0, + 2 => 0.75, + 3 => 0.75, + ), + 19 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0, + 2 => 0.75, + 3 => 1, + ), + 20 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 1, + 3 => 0, + ), + 21 => + array( + 0 => + array( + 'r' => 127, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 1, + 3 => 0.25, + ), + 22 => + array( + 0 => + array( + 'r' => 255, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 1, + 3 => 0.5, + ), + 23 => + array( + 0 => + array( + 'r' => 255, + 'g' => 127, + 'b' => 127, + ), + 1 => 0, + 2 => 1, + 3 => 0.75, + ), + 24 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0, + 2 => 1, + 3 => 1, + ), + 25 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.25, + 2 => 0, + 3 => 0, + ), + 26 => + array( + 0 => + array( + 'r' => 63, + 'g' => 63, + 'b' => 63, + ), + 1 => 0.25, + 2 => 0, + 3 => 0.25, + ), + 27 => + array( + 0 => + array( + 'r' => 127, + 'g' => 127, + 'b' => 127, + ), + 1 => 0.25, + 2 => 0, + 3 => 0.5, + ), + 28 => + array( + 0 => + array( + 'r' => 191, + 'g' => 191, + 'b' => 191, + ), + 1 => 0.25, + 2 => 0, + 3 => 0.75, + ), + 29 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.25, + 2 => 0, + 3 => 1, + ), + 30 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.25, + 2 => 0.25, + 3 => 0, + ), + 31 => + array( + 0 => + array( + 'r' => 63, + 'g' => 79, + 'b' => 47, + ), + 1 => 0.25, + 2 => 0.25, + 3 => 0.25, + ), + 32 => + array( + 0 => + array( + 'r' => 127, + 'g' => 159, + 'b' => 95, + ), + 1 => 0.25, + 2 => 0.25, + 3 => 0.5, + ), + 33 => + array( + 0 => + array( + 'r' => 191, + 'g' => 207, + 'b' => 175, + ), + 1 => 0.25, + 2 => 0.25, + 3 => 0.75, + ), + 34 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.25, + 2 => 0.25, + 3 => 1, + ), + 35 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.25, + 2 => 0.5, + 3 => 0, + ), + 36 => + array( + 0 => + array( + 'r' => 63, + 'g' => 95, + 'b' => 31, + ), + 1 => 0.25, + 2 => 0.5, + 3 => 0.25, + ), + 37 => + array( + 0 => + array( + 'r' => 127, + 'g' => 191, + 'b' => 63, + ), + 1 => 0.25, + 2 => 0.5, + 3 => 0.5, + ), + 38 => + array( + 0 => + array( + 'r' => 191, + 'g' => 223, + 'b' => 159, + ), + 1 => 0.25, + 2 => 0.5, + 3 => 0.75, + ), + 39 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.25, + 2 => 0.5, + 3 => 1, + ), + 40 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.25, + 2 => 0.75, + 3 => 0, + ), + 41 => + array( + 0 => + array( + 'r' => 63, + 'g' => 111, + 'b' => 15, + ), + 1 => 0.25, + 2 => 0.75, + 3 => 0.25, + ), + 42 => + array( + 0 => + array( + 'r' => 127, + 'g' => 223, + 'b' => 31, + ), + 1 => 0.25, + 2 => 0.75, + 3 => 0.5, + ), + 43 => + array( + 0 => + array( + 'r' => 191, + 'g' => 239, + 'b' => 143, + ), + 1 => 0.25, + 2 => 0.75, + 3 => 0.75, + ), + 44 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.25, + 2 => 0.75, + 3 => 1, + ), + 45 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.25, + 2 => 1, + 3 => 0, + ), + 46 => + array( + 0 => + array( + 'r' => 63, + 'g' => 127, + 'b' => 0, + ), + 1 => 0.25, + 2 => 1, + 3 => 0.25, + ), + 47 => + array( + 0 => + array( + 'r' => 127, + 'g' => 255, + 'b' => 0, + ), + 1 => 0.25, + 2 => 1, + 3 => 0.5, + ), + 48 => + array( + 0 => + array( + 'r' => 191, + 'g' => 255, + 'b' => 127, + ), + 1 => 0.25, + 2 => 1, + 3 => 0.75, + ), + 49 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.25, + 2 => 1, + 3 => 1, + ), + 50 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.5, + 2 => 0, + 3 => 0, + ), + 51 => + array( + 0 => + array( + 'r' => 63, + 'g' => 63, + 'b' => 63, + ), + 1 => 0.5, + 2 => 0, + 3 => 0.25, + ), + 52 => + array( + 0 => + array( + 'r' => 127, + 'g' => 127, + 'b' => 127, + ), + 1 => 0.5, + 2 => 0, + 3 => 0.5, + ), + 53 => + array( + 0 => + array( + 'r' => 191, + 'g' => 191, + 'b' => 191, + ), + 1 => 0.5, + 2 => 0, + 3 => 0.75, + ), + 54 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.5, + 2 => 0, + 3 => 1, + ), + 55 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.5, + 2 => 0.25, + 3 => 0, + ), + 56 => + array( + 0 => + array( + 'r' => 47, + 'g' => 79, + 'b' => 79, + ), + 1 => 0.5, + 2 => 0.25, + 3 => 0.25, + ), + 57 => + array( + 0 => + array( + 'r' => 95, + 'g' => 159, + 'b' => 159, + ), + 1 => 0.5, + 2 => 0.25, + 3 => 0.5, + ), + 58 => + array( + 0 => + array( + 'r' => 175, + 'g' => 207, + 'b' => 207, + ), + 1 => 0.5, + 2 => 0.25, + 3 => 0.75, + ), + 59 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.5, + 2 => 0.25, + 3 => 1, + ), + 60 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.5, + 2 => 0.5, + 3 => 0, + ), + 61 => + array( + 0 => + array( + 'r' => 31, + 'g' => 95, + 'b' => 95, + ), + 1 => 0.5, + 2 => 0.5, + 3 => 0.25, + ), + 62 => + array( + 0 => + array( + 'r' => 63, + 'g' => 191, + 'b' => 191, + ), + 1 => 0.5, + 2 => 0.5, + 3 => 0.5, + ), + 63 => + array( + 0 => + array( + 'r' => 159, + 'g' => 223, + 'b' => 223, + ), + 1 => 0.5, + 2 => 0.5, + 3 => 0.75, + ), + 64 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.5, + 2 => 0.5, + 3 => 1, + ), + 65 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.5, + 2 => 0.75, + 3 => 0, + ), + 66 => + array( + 0 => + array( + 'r' => 15, + 'g' => 111, + 'b' => 111, + ), + 1 => 0.5, + 2 => 0.75, + 3 => 0.25, + ), + 67 => + array( + 0 => + array( + 'r' => 31, + 'g' => 223, + 'b' => 223, + ), + 1 => 0.5, + 2 => 0.75, + 3 => 0.5, + ), + 68 => + array( + 0 => + array( + 'r' => 143, + 'g' => 239, + 'b' => 239, + ), + 1 => 0.5, + 2 => 0.75, + 3 => 0.75, + ), + 69 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.5, + 2 => 0.75, + 3 => 1, + ), + 70 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.5, + 2 => 1, + 3 => 0, + ), + 71 => + array( + 0 => + array( + 'r' => 0, + 'g' => 127, + 'b' => 127, + ), + 1 => 0.5, + 2 => 1, + 3 => 0.25, + ), + 72 => + array( + 0 => + array( + 'r' => 0, + 'g' => 254, + 'b' => 255, + ), + 1 => 0.5, + 2 => 1, + 3 => 0.5, + ), + 73 => + array( + 0 => + array( + 'r' => 127, + 'g' => 254, + 'b' => 255, + ), + 1 => 0.5, + 2 => 1, + 3 => 0.75, + ), + 74 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.5, + 2 => 1, + 3 => 1, + ), + 75 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.75, + 2 => 0, + 3 => 0, + ), + 76 => + array( + 0 => + array( + 'r' => 63, + 'g' => 63, + 'b' => 63, + ), + 1 => 0.75, + 2 => 0, + 3 => 0.25, + ), + 77 => + array( + 0 => + array( + 'r' => 127, + 'g' => 127, + 'b' => 127, + ), + 1 => 0.75, + 2 => 0, + 3 => 0.5, + ), + 78 => + array( + 0 => + array( + 'r' => 191, + 'g' => 191, + 'b' => 191, + ), + 1 => 0.75, + 2 => 0, + 3 => 0.75, + ), + 79 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.75, + 2 => 0, + 3 => 1, + ), + 80 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.75, + 2 => 0.25, + 3 => 0, + ), + 81 => + array( + 0 => + array( + 'r' => 63, + 'g' => 47, + 'b' => 79, + ), + 1 => 0.75, + 2 => 0.25, + 3 => 0.25, + ), + 82 => + array( + 0 => + array( + 'r' => 127, + 'g' => 95, + 'b' => 159, + ), + 1 => 0.75, + 2 => 0.25, + 3 => 0.5, + ), + 83 => + array( + 0 => + array( + 'r' => 191, + 'g' => 175, + 'b' => 207, + ), + 1 => 0.75, + 2 => 0.25, + 3 => 0.75, + ), + 84 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.75, + 2 => 0.25, + 3 => 1, + ), + 85 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.75, + 2 => 0.5, + 3 => 0, + ), + 86 => + array( + 0 => + array( + 'r' => 63, + 'g' => 31, + 'b' => 95, + ), + 1 => 0.75, + 2 => 0.5, + 3 => 0.25, + ), + 87 => + array( + 0 => + array( + 'r' => 127, + 'g' => 63, + 'b' => 191, + ), + 1 => 0.75, + 2 => 0.5, + 3 => 0.5, + ), + 88 => + array( + 0 => + array( + 'r' => 191, + 'g' => 159, + 'b' => 223, + ), + 1 => 0.75, + 2 => 0.5, + 3 => 0.75, + ), + 89 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.75, + 2 => 0.5, + 3 => 1, + ), + 90 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.75, + 2 => 0.75, + 3 => 0, + ), + 91 => + array( + 0 => + array( + 'r' => 63, + 'g' => 15, + 'b' => 111, + ), + 1 => 0.75, + 2 => 0.75, + 3 => 0.25, + ), + 92 => + array( + 0 => + array( + 'r' => 127, + 'g' => 31, + 'b' => 223, + ), + 1 => 0.75, + 2 => 0.75, + 3 => 0.5, + ), + 93 => + array( + 0 => + array( + 'r' => 191, + 'g' => 143, + 'b' => 239, + ), + 1 => 0.75, + 2 => 0.75, + 3 => 0.75, + ), + 94 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.75, + 2 => 0.75, + 3 => 1, + ), + 95 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.75, + 2 => 1, + 3 => 0, + ), + 96 => + array( + 0 => + array( + 'r' => 63, + 'g' => 0, + 'b' => 127, + ), + 1 => 0.75, + 2 => 1, + 3 => 0.25, + ), + 97 => + array( + 0 => + array( + 'r' => 127, + 'g' => 0, + 'b' => 255, + ), + 1 => 0.75, + 2 => 1, + 3 => 0.5, + ), + 98 => + array( + 0 => + array( + 'r' => 191, + 'g' => 127, + 'b' => 255, + ), + 1 => 0.75, + 2 => 1, + 3 => 0.75, + ), + 99 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.75, + 2 => 1, + 3 => 1, + ), + 100 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 0, + 3 => 0, + ), + 101 => + array( + 0 => + array( + 'r' => 63, + 'g' => 63, + 'b' => 63, + ), + 1 => 1, + 2 => 0, + 3 => 0.25, + ), + 102 => + array( + 0 => + array( + 'r' => 127, + 'g' => 127, + 'b' => 127, + ), + 1 => 1, + 2 => 0, + 3 => 0.5, + ), + 103 => + array( + 0 => + array( + 'r' => 191, + 'g' => 191, + 'b' => 191, + ), + 1 => 1, + 2 => 0, + 3 => 0.75, + ), + 104 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 1, + 2 => 0, + 3 => 1, + ), + 105 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 0.25, + 3 => 0, + ), + 106 => + array( + 0 => + array( + 'r' => 79, + 'g' => 47, + 'b' => 47, + ), + 1 => 1, + 2 => 0.25, + 3 => 0.25, + ), + 107 => + array( + 0 => + array( + 'r' => 159, + 'g' => 95, + 'b' => 95, + ), + 1 => 1, + 2 => 0.25, + 3 => 0.5, + ), + 108 => + array( + 0 => + array( + 'r' => 207, + 'g' => 175, + 'b' => 175, + ), + 1 => 1, + 2 => 0.25, + 3 => 0.75, + ), + 109 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 1, + 2 => 0.25, + 3 => 1, + ), + 110 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 0.5, + 3 => 0, + ), + 111 => + array( + 0 => + array( + 'r' => 95, + 'g' => 31, + 'b' => 31, + ), + 1 => 1, + 2 => 0.5, + 3 => 0.25, + ), + 112 => + array( + 0 => + array( + 'r' => 191, + 'g' => 63, + 'b' => 63, + ), + 1 => 1, + 2 => 0.5, + 3 => 0.5, + ), + 113 => + array( + 0 => + array( + 'r' => 223, + 'g' => 159, + 'b' => 159, + ), + 1 => 1, + 2 => 0.5, + 3 => 0.75, + ), + 114 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 1, + 2 => 0.5, + 3 => 1, + ), + 115 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 0.75, + 3 => 0, + ), + 116 => + array( + 0 => + array( + 'r' => 111, + 'g' => 15, + 'b' => 15, + ), + 1 => 1, + 2 => 0.75, + 3 => 0.25, + ), + 117 => + array( + 0 => + array( + 'r' => 223, + 'g' => 31, + 'b' => 31, + ), + 1 => 1, + 2 => 0.75, + 3 => 0.5, + ), + 118 => + array( + 0 => + array( + 'r' => 239, + 'g' => 143, + 'b' => 143, + ), + 1 => 1, + 2 => 0.75, + 3 => 0.75, + ), + 119 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 1, + 2 => 0.75, + 3 => 1, + ), + 120 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 1, + 3 => 0, + ), + 121 => + array( + 0 => + array( + 'r' => 127, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 1, + 3 => 0.25, + ), + 122 => + array( + 0 => + array( + 'r' => 255, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 1, + 3 => 0.5, + ), + 123 => + array( + 0 => + array( + 'r' => 255, + 'g' => 127, + 'b' => 127, + ), + 1 => 1, + 2 => 1, + 3 => 0.75, + ), + 124 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 1, + 2 => 1, + 3 => 1, + ), + ); -?> \ No newline at end of file + return $essais; +} diff --git a/www/plugins-dist/filtres_images/tests/_couleur_hsv2rgb.php b/www/plugins-dist/filtres_images/tests/_couleur_hsv2rgb.php index ea679e79..1481b6eb 100644 --- a/www/plugins-dist/filtres_images/tests/_couleur_hsv2rgb.php +++ b/www/plugins-dist/filtres_images/tests/_couleur_hsv2rgb.php @@ -2,1557 +2,1533 @@ /** * Test unitaire de la fonction _couleur_hsv2rgb * du fichier filtres/images_lib.php - * - * genere automatiquement par TestBuilder - * le */ - $test = '_couleur_hsv2rgb'; - $remonte = "../"; - while (!is_dir($remonte."ecrire")) - $remonte = "../$remonte"; - require $remonte.'tests/test.inc'; - find_in_path("filtres/images_lib.php",'',true); +$test = '_couleur_hsv2rgb'; +$remonte = '../'; +while (!is_dir($remonte . 'ecrire')) { + $remonte = "../$remonte"; +} +require $remonte . 'tests/test.inc'; +find_in_path('filtres/images_lib.php', '', true); - // - // hop ! on y va - // - $err = tester_fun('_couleur_hsv2rgb', essais__couleur_hsv2rgb()); - - // si le tableau $err est pas vide ca va pas - if ($err) { - die ('
    ' . join('', $err) . '
    '); - } +// +// hop ! on y va +// +$err = tester_fun('_couleur_hsv2rgb', essais__couleur_hsv2rgb()); - echo "OK"; - +// si le tableau $err est pas vide ca va pas +if ($err) { + die('
    ' . join('', $err) . '
    '); +} - function essais__couleur_hsv2rgb(){ - $essais = array ( - 0 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 0, - 3 => 0, - ), - 1 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 63, - 'b' => 63, - ), - 1 => 0, - 2 => 0, - 3 => 0.25, - ), - 2 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 127, - 'b' => 127, - ), - 1 => 0, - 2 => 0, - 3 => 0.5, - ), - 3 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 191, - 'b' => 191, - ), - 1 => 0, - 2 => 0, - 3 => 0.75, - ), - 4 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0, - 2 => 0, - 3 => 1, - ), - 5 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 0.25, - 3 => 0, - ), - 6 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 47, - 'b' => 47, - ), - 1 => 0, - 2 => 0.25, - 3 => 0.25, - ), - 7 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 95, - 'b' => 95, - ), - 1 => 0, - 2 => 0.25, - 3 => 0.5, - ), - 8 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 143, - 'b' => 143, - ), - 1 => 0, - 2 => 0.25, - 3 => 0.75, - ), - 9 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 191, - 'b' => 191, - ), - 1 => 0, - 2 => 0.25, - 3 => 1, - ), - 10 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 0.5, - 3 => 0, - ), - 11 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 31, - 'b' => 31, - ), - 1 => 0, - 2 => 0.5, - 3 => 0.25, - ), - 12 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 63, - 'b' => 63, - ), - 1 => 0, - 2 => 0.5, - 3 => 0.5, - ), - 13 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 95, - 'b' => 95, - ), - 1 => 0, - 2 => 0.5, - 3 => 0.75, - ), - 14 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 127, - 'b' => 127, - ), - 1 => 0, - 2 => 0.5, - 3 => 1, - ), - 15 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 0.75, - 3 => 0, - ), - 16 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 15, - 'b' => 15, - ), - 1 => 0, - 2 => 0.75, - 3 => 0.25, - ), - 17 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 31, - 'b' => 31, - ), - 1 => 0, - 2 => 0.75, - 3 => 0.5, - ), - 18 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 47, - 'b' => 47, - ), - 1 => 0, - 2 => 0.75, - 3 => 0.75, - ), - 19 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 63, - 'b' => 63, - ), - 1 => 0, - 2 => 0.75, - 3 => 1, - ), - 20 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 1, - 3 => 0, - ), - 21 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 1, - 3 => 0.25, - ), - 22 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 1, - 3 => 0.5, - ), - 23 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 1, - 3 => 0.75, - ), - 24 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 0, - 'b' => 0, - ), - 1 => 0, - 2 => 1, - 3 => 1, - ), - 25 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.25, - 2 => 0, - 3 => 0, - ), - 26 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 63, - 'b' => 63, - ), - 1 => 0.25, - 2 => 0, - 3 => 0.25, - ), - 27 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 127, - 'b' => 127, - ), - 1 => 0.25, - 2 => 0, - 3 => 0.5, - ), - 28 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 191, - 'b' => 191, - ), - 1 => 0.25, - 2 => 0, - 3 => 0.75, - ), - 29 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.25, - 2 => 0, - 3 => 1, - ), - 30 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.25, - 2 => 0.25, - 3 => 0, - ), - 31 => - array ( - 0 => - array ( - 'r' => 55, - 'g' => 63, - 'b' => 47, - ), - 1 => 0.25, - 2 => 0.25, - 3 => 0.25, - ), - 32 => - array ( - 0 => - array ( - 'r' => 111, - 'g' => 127, - 'b' => 95, - ), - 1 => 0.25, - 2 => 0.25, - 3 => 0.5, - ), - 33 => - array ( - 0 => - array ( - 'r' => 167, - 'g' => 191, - 'b' => 143, - ), - 1 => 0.25, - 2 => 0.25, - 3 => 0.75, - ), - 34 => - array ( - 0 => - array ( - 'r' => 223, - 'g' => 255, - 'b' => 191, - ), - 1 => 0.25, - 2 => 0.25, - 3 => 1, - ), - 35 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.25, - 2 => 0.5, - 3 => 0, - ), - 36 => - array ( - 0 => - array ( - 'r' => 47, - 'g' => 63, - 'b' => 31, - ), - 1 => 0.25, - 2 => 0.5, - 3 => 0.25, - ), - 37 => - array ( - 0 => - array ( - 'r' => 95, - 'g' => 127, - 'b' => 63, - ), - 1 => 0.25, - 2 => 0.5, - 3 => 0.5, - ), - 38 => - array ( - 0 => - array ( - 'r' => 143, - 'g' => 191, - 'b' => 95, - ), - 1 => 0.25, - 2 => 0.5, - 3 => 0.75, - ), - 39 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 255, - 'b' => 127, - ), - 1 => 0.25, - 2 => 0.5, - 3 => 1, - ), - 40 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.25, - 2 => 0.75, - 3 => 0, - ), - 41 => - array ( - 0 => - array ( - 'r' => 39, - 'g' => 63, - 'b' => 15, - ), - 1 => 0.25, - 2 => 0.75, - 3 => 0.25, - ), - 42 => - array ( - 0 => - array ( - 'r' => 79, - 'g' => 127, - 'b' => 31, - ), - 1 => 0.25, - 2 => 0.75, - 3 => 0.5, - ), - 43 => - array ( - 0 => - array ( - 'r' => 119, - 'g' => 191, - 'b' => 47, - ), - 1 => 0.25, - 2 => 0.75, - 3 => 0.75, - ), - 44 => - array ( - 0 => - array ( - 'r' => 159, - 'g' => 255, - 'b' => 63, - ), - 1 => 0.25, - 2 => 0.75, - 3 => 1, - ), - 45 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.25, - 2 => 1, - 3 => 0, - ), - 46 => - array ( - 0 => - array ( - 'r' => 31, - 'g' => 63, - 'b' => 0, - ), - 1 => 0.25, - 2 => 1, - 3 => 0.25, - ), - 47 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 127, - 'b' => 0, - ), - 1 => 0.25, - 2 => 1, - 3 => 0.5, - ), - 48 => - array ( - 0 => - array ( - 'r' => 95, - 'g' => 191, - 'b' => 0, - ), - 1 => 0.25, - 2 => 1, - 3 => 0.75, - ), - 49 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 255, - 'b' => 0, - ), - 1 => 0.25, - 2 => 1, - 3 => 1, - ), - 50 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.5, - 2 => 0, - 3 => 0, - ), - 51 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 63, - 'b' => 63, - ), - 1 => 0.5, - 2 => 0, - 3 => 0.25, - ), - 52 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 127, - 'b' => 127, - ), - 1 => 0.5, - 2 => 0, - 3 => 0.5, - ), - 53 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 191, - 'b' => 191, - ), - 1 => 0.5, - 2 => 0, - 3 => 0.75, - ), - 54 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.5, - 2 => 0, - 3 => 1, - ), - 55 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.5, - 2 => 0.25, - 3 => 0, - ), - 56 => - array ( - 0 => - array ( - 'r' => 47, - 'g' => 63, - 'b' => 63, - ), - 1 => 0.5, - 2 => 0.25, - 3 => 0.25, - ), - 57 => - array ( - 0 => - array ( - 'r' => 95, - 'g' => 127, - 'b' => 127, - ), - 1 => 0.5, - 2 => 0.25, - 3 => 0.5, - ), - 58 => - array ( - 0 => - array ( - 'r' => 143, - 'g' => 191, - 'b' => 191, - ), - 1 => 0.5, - 2 => 0.25, - 3 => 0.75, - ), - 59 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.5, - 2 => 0.25, - 3 => 1, - ), - 60 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.5, - 2 => 0.5, - 3 => 0, - ), - 61 => - array ( - 0 => - array ( - 'r' => 31, - 'g' => 63, - 'b' => 63, - ), - 1 => 0.5, - 2 => 0.5, - 3 => 0.25, - ), - 62 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 127, - 'b' => 127, - ), - 1 => 0.5, - 2 => 0.5, - 3 => 0.5, - ), - 63 => - array ( - 0 => - array ( - 'r' => 95, - 'g' => 191, - 'b' => 191, - ), - 1 => 0.5, - 2 => 0.5, - 3 => 0.75, - ), - 64 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.5, - 2 => 0.5, - 3 => 1, - ), - 65 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.5, - 2 => 0.75, - 3 => 0, - ), - 66 => - array ( - 0 => - array ( - 'r' => 15, - 'g' => 63, - 'b' => 63, - ), - 1 => 0.5, - 2 => 0.75, - 3 => 0.25, - ), - 67 => - array ( - 0 => - array ( - 'r' => 31, - 'g' => 127, - 'b' => 127, - ), - 1 => 0.5, - 2 => 0.75, - 3 => 0.5, - ), - 68 => - array ( - 0 => - array ( - 'r' => 47, - 'g' => 191, - 'b' => 191, - ), - 1 => 0.5, - 2 => 0.75, - 3 => 0.75, - ), - 69 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.5, - 2 => 0.75, - 3 => 1, - ), - 70 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.5, - 2 => 1, - 3 => 0, - ), - 71 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 63, - 'b' => 63, - ), - 1 => 0.5, - 2 => 1, - 3 => 0.25, - ), - 72 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 127, - 'b' => 127, - ), - 1 => 0.5, - 2 => 1, - 3 => 0.5, - ), - 73 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 191, - 'b' => 191, - ), - 1 => 0.5, - 2 => 1, - 3 => 0.75, - ), - 74 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.5, - 2 => 1, - 3 => 1, - ), - 75 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.75, - 2 => 0, - 3 => 0, - ), - 76 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 63, - 'b' => 63, - ), - 1 => 0.75, - 2 => 0, - 3 => 0.25, - ), - 77 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 127, - 'b' => 127, - ), - 1 => 0.75, - 2 => 0, - 3 => 0.5, - ), - 78 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 191, - 'b' => 191, - ), - 1 => 0.75, - 2 => 0, - 3 => 0.75, - ), - 79 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 0.75, - 2 => 0, - 3 => 1, - ), - 80 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.75, - 2 => 0.25, - 3 => 0, - ), - 81 => - array ( - 0 => - array ( - 'r' => 55, - 'g' => 47, - 'b' => 63, - ), - 1 => 0.75, - 2 => 0.25, - 3 => 0.25, - ), - 82 => - array ( - 0 => - array ( - 'r' => 111, - 'g' => 95, - 'b' => 127, - ), - 1 => 0.75, - 2 => 0.25, - 3 => 0.5, - ), - 83 => - array ( - 0 => - array ( - 'r' => 167, - 'g' => 143, - 'b' => 191, - ), - 1 => 0.75, - 2 => 0.25, - 3 => 0.75, - ), - 84 => - array ( - 0 => - array ( - 'r' => 223, - 'g' => 191, - 'b' => 255, - ), - 1 => 0.75, - 2 => 0.25, - 3 => 1, - ), - 85 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.75, - 2 => 0.5, - 3 => 0, - ), - 86 => - array ( - 0 => - array ( - 'r' => 47, - 'g' => 31, - 'b' => 63, - ), - 1 => 0.75, - 2 => 0.5, - 3 => 0.25, - ), - 87 => - array ( - 0 => - array ( - 'r' => 95, - 'g' => 63, - 'b' => 127, - ), - 1 => 0.75, - 2 => 0.5, - 3 => 0.5, - ), - 88 => - array ( - 0 => - array ( - 'r' => 143, - 'g' => 95, - 'b' => 191, - ), - 1 => 0.75, - 2 => 0.5, - 3 => 0.75, - ), - 89 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 127, - 'b' => 255, - ), - 1 => 0.75, - 2 => 0.5, - 3 => 1, - ), - 90 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.75, - 2 => 0.75, - 3 => 0, - ), - 91 => - array ( - 0 => - array ( - 'r' => 39, - 'g' => 15, - 'b' => 63, - ), - 1 => 0.75, - 2 => 0.75, - 3 => 0.25, - ), - 92 => - array ( - 0 => - array ( - 'r' => 79, - 'g' => 31, - 'b' => 127, - ), - 1 => 0.75, - 2 => 0.75, - 3 => 0.5, - ), - 93 => - array ( - 0 => - array ( - 'r' => 119, - 'g' => 47, - 'b' => 191, - ), - 1 => 0.75, - 2 => 0.75, - 3 => 0.75, - ), - 94 => - array ( - 0 => - array ( - 'r' => 159, - 'g' => 63, - 'b' => 255, - ), - 1 => 0.75, - 2 => 0.75, - 3 => 1, - ), - 95 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 0.75, - 2 => 1, - 3 => 0, - ), - 96 => - array ( - 0 => - array ( - 'r' => 31, - 'g' => 0, - 'b' => 63, - ), - 1 => 0.75, - 2 => 1, - 3 => 0.25, - ), - 97 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 0, - 'b' => 127, - ), - 1 => 0.75, - 2 => 1, - 3 => 0.5, - ), - 98 => - array ( - 0 => - array ( - 'r' => 95, - 'g' => 0, - 'b' => 191, - ), - 1 => 0.75, - 2 => 1, - 3 => 0.75, - ), - 99 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 0, - 'b' => 255, - ), - 1 => 0.75, - 2 => 1, - 3 => 1, - ), - 100 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 0, - 3 => 0, - ), - 101 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 63, - 'b' => 63, - ), - 1 => 1, - 2 => 0, - 3 => 0.25, - ), - 102 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 127, - 'b' => 127, - ), - 1 => 1, - 2 => 0, - 3 => 0.5, - ), - 103 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 191, - 'b' => 191, - ), - 1 => 1, - 2 => 0, - 3 => 0.75, - ), - 104 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 255, - 'b' => 255, - ), - 1 => 1, - 2 => 0, - 3 => 1, - ), - 105 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 0.25, - 3 => 0, - ), - 106 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 47, - 'b' => 47, - ), - 1 => 1, - 2 => 0.25, - 3 => 0.25, - ), - 107 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 95, - 'b' => 95, - ), - 1 => 1, - 2 => 0.25, - 3 => 0.5, - ), - 108 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 143, - 'b' => 143, - ), - 1 => 1, - 2 => 0.25, - 3 => 0.75, - ), - 109 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 191, - 'b' => 191, - ), - 1 => 1, - 2 => 0.25, - 3 => 1, - ), - 110 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 0.5, - 3 => 0, - ), - 111 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 31, - 'b' => 31, - ), - 1 => 1, - 2 => 0.5, - 3 => 0.25, - ), - 112 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 63, - 'b' => 63, - ), - 1 => 1, - 2 => 0.5, - 3 => 0.5, - ), - 113 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 95, - 'b' => 95, - ), - 1 => 1, - 2 => 0.5, - 3 => 0.75, - ), - 114 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 127, - 'b' => 127, - ), - 1 => 1, - 2 => 0.5, - 3 => 1, - ), - 115 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 0.75, - 3 => 0, - ), - 116 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 15, - 'b' => 15, - ), - 1 => 1, - 2 => 0.75, - 3 => 0.25, - ), - 117 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 31, - 'b' => 31, - ), - 1 => 1, - 2 => 0.75, - 3 => 0.5, - ), - 118 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 47, - 'b' => 47, - ), - 1 => 1, - 2 => 0.75, - 3 => 0.75, - ), - 119 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 63, - 'b' => 63, - ), - 1 => 1, - 2 => 0.75, - 3 => 1, - ), - 120 => - array ( - 0 => - array ( - 'r' => 0, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 1, - 3 => 0, - ), - 121 => - array ( - 0 => - array ( - 'r' => 63, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 1, - 3 => 0.25, - ), - 122 => - array ( - 0 => - array ( - 'r' => 127, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 1, - 3 => 0.5, - ), - 123 => - array ( - 0 => - array ( - 'r' => 191, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 1, - 3 => 0.75, - ), - 124 => - array ( - 0 => - array ( - 'r' => 255, - 'g' => 0, - 'b' => 0, - ), - 1 => 1, - 2 => 1, - 3 => 1, - ), -); - return $essais; - } +echo 'OK'; +function essais__couleur_hsv2rgb() { + $essais = array( + 0 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 0, + 3 => 0, + ), + 1 => + array( + 0 => + array( + 'r' => 63, + 'g' => 63, + 'b' => 63, + ), + 1 => 0, + 2 => 0, + 3 => 0.25, + ), + 2 => + array( + 0 => + array( + 'r' => 127, + 'g' => 127, + 'b' => 127, + ), + 1 => 0, + 2 => 0, + 3 => 0.5, + ), + 3 => + array( + 0 => + array( + 'r' => 191, + 'g' => 191, + 'b' => 191, + ), + 1 => 0, + 2 => 0, + 3 => 0.75, + ), + 4 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0, + 2 => 0, + 3 => 1, + ), + 5 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 0.25, + 3 => 0, + ), + 6 => + array( + 0 => + array( + 'r' => 63, + 'g' => 47, + 'b' => 47, + ), + 1 => 0, + 2 => 0.25, + 3 => 0.25, + ), + 7 => + array( + 0 => + array( + 'r' => 127, + 'g' => 95, + 'b' => 95, + ), + 1 => 0, + 2 => 0.25, + 3 => 0.5, + ), + 8 => + array( + 0 => + array( + 'r' => 191, + 'g' => 143, + 'b' => 143, + ), + 1 => 0, + 2 => 0.25, + 3 => 0.75, + ), + 9 => + array( + 0 => + array( + 'r' => 255, + 'g' => 191, + 'b' => 191, + ), + 1 => 0, + 2 => 0.25, + 3 => 1, + ), + 10 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 0.5, + 3 => 0, + ), + 11 => + array( + 0 => + array( + 'r' => 63, + 'g' => 31, + 'b' => 31, + ), + 1 => 0, + 2 => 0.5, + 3 => 0.25, + ), + 12 => + array( + 0 => + array( + 'r' => 127, + 'g' => 63, + 'b' => 63, + ), + 1 => 0, + 2 => 0.5, + 3 => 0.5, + ), + 13 => + array( + 0 => + array( + 'r' => 191, + 'g' => 95, + 'b' => 95, + ), + 1 => 0, + 2 => 0.5, + 3 => 0.75, + ), + 14 => + array( + 0 => + array( + 'r' => 255, + 'g' => 127, + 'b' => 127, + ), + 1 => 0, + 2 => 0.5, + 3 => 1, + ), + 15 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 0.75, + 3 => 0, + ), + 16 => + array( + 0 => + array( + 'r' => 63, + 'g' => 15, + 'b' => 15, + ), + 1 => 0, + 2 => 0.75, + 3 => 0.25, + ), + 17 => + array( + 0 => + array( + 'r' => 127, + 'g' => 31, + 'b' => 31, + ), + 1 => 0, + 2 => 0.75, + 3 => 0.5, + ), + 18 => + array( + 0 => + array( + 'r' => 191, + 'g' => 47, + 'b' => 47, + ), + 1 => 0, + 2 => 0.75, + 3 => 0.75, + ), + 19 => + array( + 0 => + array( + 'r' => 255, + 'g' => 63, + 'b' => 63, + ), + 1 => 0, + 2 => 0.75, + 3 => 1, + ), + 20 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 1, + 3 => 0, + ), + 21 => + array( + 0 => + array( + 'r' => 63, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 1, + 3 => 0.25, + ), + 22 => + array( + 0 => + array( + 'r' => 127, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 1, + 3 => 0.5, + ), + 23 => + array( + 0 => + array( + 'r' => 191, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 1, + 3 => 0.75, + ), + 24 => + array( + 0 => + array( + 'r' => 255, + 'g' => 0, + 'b' => 0, + ), + 1 => 0, + 2 => 1, + 3 => 1, + ), + 25 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.25, + 2 => 0, + 3 => 0, + ), + 26 => + array( + 0 => + array( + 'r' => 63, + 'g' => 63, + 'b' => 63, + ), + 1 => 0.25, + 2 => 0, + 3 => 0.25, + ), + 27 => + array( + 0 => + array( + 'r' => 127, + 'g' => 127, + 'b' => 127, + ), + 1 => 0.25, + 2 => 0, + 3 => 0.5, + ), + 28 => + array( + 0 => + array( + 'r' => 191, + 'g' => 191, + 'b' => 191, + ), + 1 => 0.25, + 2 => 0, + 3 => 0.75, + ), + 29 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.25, + 2 => 0, + 3 => 1, + ), + 30 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.25, + 2 => 0.25, + 3 => 0, + ), + 31 => + array( + 0 => + array( + 'r' => 55, + 'g' => 63, + 'b' => 47, + ), + 1 => 0.25, + 2 => 0.25, + 3 => 0.25, + ), + 32 => + array( + 0 => + array( + 'r' => 111, + 'g' => 127, + 'b' => 95, + ), + 1 => 0.25, + 2 => 0.25, + 3 => 0.5, + ), + 33 => + array( + 0 => + array( + 'r' => 167, + 'g' => 191, + 'b' => 143, + ), + 1 => 0.25, + 2 => 0.25, + 3 => 0.75, + ), + 34 => + array( + 0 => + array( + 'r' => 223, + 'g' => 255, + 'b' => 191, + ), + 1 => 0.25, + 2 => 0.25, + 3 => 1, + ), + 35 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.25, + 2 => 0.5, + 3 => 0, + ), + 36 => + array( + 0 => + array( + 'r' => 47, + 'g' => 63, + 'b' => 31, + ), + 1 => 0.25, + 2 => 0.5, + 3 => 0.25, + ), + 37 => + array( + 0 => + array( + 'r' => 95, + 'g' => 127, + 'b' => 63, + ), + 1 => 0.25, + 2 => 0.5, + 3 => 0.5, + ), + 38 => + array( + 0 => + array( + 'r' => 143, + 'g' => 191, + 'b' => 95, + ), + 1 => 0.25, + 2 => 0.5, + 3 => 0.75, + ), + 39 => + array( + 0 => + array( + 'r' => 191, + 'g' => 255, + 'b' => 127, + ), + 1 => 0.25, + 2 => 0.5, + 3 => 1, + ), + 40 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.25, + 2 => 0.75, + 3 => 0, + ), + 41 => + array( + 0 => + array( + 'r' => 39, + 'g' => 63, + 'b' => 15, + ), + 1 => 0.25, + 2 => 0.75, + 3 => 0.25, + ), + 42 => + array( + 0 => + array( + 'r' => 79, + 'g' => 127, + 'b' => 31, + ), + 1 => 0.25, + 2 => 0.75, + 3 => 0.5, + ), + 43 => + array( + 0 => + array( + 'r' => 119, + 'g' => 191, + 'b' => 47, + ), + 1 => 0.25, + 2 => 0.75, + 3 => 0.75, + ), + 44 => + array( + 0 => + array( + 'r' => 159, + 'g' => 255, + 'b' => 63, + ), + 1 => 0.25, + 2 => 0.75, + 3 => 1, + ), + 45 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.25, + 2 => 1, + 3 => 0, + ), + 46 => + array( + 0 => + array( + 'r' => 31, + 'g' => 63, + 'b' => 0, + ), + 1 => 0.25, + 2 => 1, + 3 => 0.25, + ), + 47 => + array( + 0 => + array( + 'r' => 63, + 'g' => 127, + 'b' => 0, + ), + 1 => 0.25, + 2 => 1, + 3 => 0.5, + ), + 48 => + array( + 0 => + array( + 'r' => 95, + 'g' => 191, + 'b' => 0, + ), + 1 => 0.25, + 2 => 1, + 3 => 0.75, + ), + 49 => + array( + 0 => + array( + 'r' => 127, + 'g' => 255, + 'b' => 0, + ), + 1 => 0.25, + 2 => 1, + 3 => 1, + ), + 50 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.5, + 2 => 0, + 3 => 0, + ), + 51 => + array( + 0 => + array( + 'r' => 63, + 'g' => 63, + 'b' => 63, + ), + 1 => 0.5, + 2 => 0, + 3 => 0.25, + ), + 52 => + array( + 0 => + array( + 'r' => 127, + 'g' => 127, + 'b' => 127, + ), + 1 => 0.5, + 2 => 0, + 3 => 0.5, + ), + 53 => + array( + 0 => + array( + 'r' => 191, + 'g' => 191, + 'b' => 191, + ), + 1 => 0.5, + 2 => 0, + 3 => 0.75, + ), + 54 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.5, + 2 => 0, + 3 => 1, + ), + 55 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.5, + 2 => 0.25, + 3 => 0, + ), + 56 => + array( + 0 => + array( + 'r' => 47, + 'g' => 63, + 'b' => 63, + ), + 1 => 0.5, + 2 => 0.25, + 3 => 0.25, + ), + 57 => + array( + 0 => + array( + 'r' => 95, + 'g' => 127, + 'b' => 127, + ), + 1 => 0.5, + 2 => 0.25, + 3 => 0.5, + ), + 58 => + array( + 0 => + array( + 'r' => 143, + 'g' => 191, + 'b' => 191, + ), + 1 => 0.5, + 2 => 0.25, + 3 => 0.75, + ), + 59 => + array( + 0 => + array( + 'r' => 191, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.5, + 2 => 0.25, + 3 => 1, + ), + 60 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.5, + 2 => 0.5, + 3 => 0, + ), + 61 => + array( + 0 => + array( + 'r' => 31, + 'g' => 63, + 'b' => 63, + ), + 1 => 0.5, + 2 => 0.5, + 3 => 0.25, + ), + 62 => + array( + 0 => + array( + 'r' => 63, + 'g' => 127, + 'b' => 127, + ), + 1 => 0.5, + 2 => 0.5, + 3 => 0.5, + ), + 63 => + array( + 0 => + array( + 'r' => 95, + 'g' => 191, + 'b' => 191, + ), + 1 => 0.5, + 2 => 0.5, + 3 => 0.75, + ), + 64 => + array( + 0 => + array( + 'r' => 127, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.5, + 2 => 0.5, + 3 => 1, + ), + 65 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.5, + 2 => 0.75, + 3 => 0, + ), + 66 => + array( + 0 => + array( + 'r' => 15, + 'g' => 63, + 'b' => 63, + ), + 1 => 0.5, + 2 => 0.75, + 3 => 0.25, + ), + 67 => + array( + 0 => + array( + 'r' => 31, + 'g' => 127, + 'b' => 127, + ), + 1 => 0.5, + 2 => 0.75, + 3 => 0.5, + ), + 68 => + array( + 0 => + array( + 'r' => 47, + 'g' => 191, + 'b' => 191, + ), + 1 => 0.5, + 2 => 0.75, + 3 => 0.75, + ), + 69 => + array( + 0 => + array( + 'r' => 63, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.5, + 2 => 0.75, + 3 => 1, + ), + 70 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.5, + 2 => 1, + 3 => 0, + ), + 71 => + array( + 0 => + array( + 'r' => 0, + 'g' => 63, + 'b' => 63, + ), + 1 => 0.5, + 2 => 1, + 3 => 0.25, + ), + 72 => + array( + 0 => + array( + 'r' => 0, + 'g' => 127, + 'b' => 127, + ), + 1 => 0.5, + 2 => 1, + 3 => 0.5, + ), + 73 => + array( + 0 => + array( + 'r' => 0, + 'g' => 191, + 'b' => 191, + ), + 1 => 0.5, + 2 => 1, + 3 => 0.75, + ), + 74 => + array( + 0 => + array( + 'r' => 0, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.5, + 2 => 1, + 3 => 1, + ), + 75 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.75, + 2 => 0, + 3 => 0, + ), + 76 => + array( + 0 => + array( + 'r' => 63, + 'g' => 63, + 'b' => 63, + ), + 1 => 0.75, + 2 => 0, + 3 => 0.25, + ), + 77 => + array( + 0 => + array( + 'r' => 127, + 'g' => 127, + 'b' => 127, + ), + 1 => 0.75, + 2 => 0, + 3 => 0.5, + ), + 78 => + array( + 0 => + array( + 'r' => 191, + 'g' => 191, + 'b' => 191, + ), + 1 => 0.75, + 2 => 0, + 3 => 0.75, + ), + 79 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 0.75, + 2 => 0, + 3 => 1, + ), + 80 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.75, + 2 => 0.25, + 3 => 0, + ), + 81 => + array( + 0 => + array( + 'r' => 55, + 'g' => 47, + 'b' => 63, + ), + 1 => 0.75, + 2 => 0.25, + 3 => 0.25, + ), + 82 => + array( + 0 => + array( + 'r' => 111, + 'g' => 95, + 'b' => 127, + ), + 1 => 0.75, + 2 => 0.25, + 3 => 0.5, + ), + 83 => + array( + 0 => + array( + 'r' => 167, + 'g' => 143, + 'b' => 191, + ), + 1 => 0.75, + 2 => 0.25, + 3 => 0.75, + ), + 84 => + array( + 0 => + array( + 'r' => 223, + 'g' => 191, + 'b' => 255, + ), + 1 => 0.75, + 2 => 0.25, + 3 => 1, + ), + 85 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.75, + 2 => 0.5, + 3 => 0, + ), + 86 => + array( + 0 => + array( + 'r' => 47, + 'g' => 31, + 'b' => 63, + ), + 1 => 0.75, + 2 => 0.5, + 3 => 0.25, + ), + 87 => + array( + 0 => + array( + 'r' => 95, + 'g' => 63, + 'b' => 127, + ), + 1 => 0.75, + 2 => 0.5, + 3 => 0.5, + ), + 88 => + array( + 0 => + array( + 'r' => 143, + 'g' => 95, + 'b' => 191, + ), + 1 => 0.75, + 2 => 0.5, + 3 => 0.75, + ), + 89 => + array( + 0 => + array( + 'r' => 191, + 'g' => 127, + 'b' => 255, + ), + 1 => 0.75, + 2 => 0.5, + 3 => 1, + ), + 90 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.75, + 2 => 0.75, + 3 => 0, + ), + 91 => + array( + 0 => + array( + 'r' => 39, + 'g' => 15, + 'b' => 63, + ), + 1 => 0.75, + 2 => 0.75, + 3 => 0.25, + ), + 92 => + array( + 0 => + array( + 'r' => 79, + 'g' => 31, + 'b' => 127, + ), + 1 => 0.75, + 2 => 0.75, + 3 => 0.5, + ), + 93 => + array( + 0 => + array( + 'r' => 119, + 'g' => 47, + 'b' => 191, + ), + 1 => 0.75, + 2 => 0.75, + 3 => 0.75, + ), + 94 => + array( + 0 => + array( + 'r' => 159, + 'g' => 63, + 'b' => 255, + ), + 1 => 0.75, + 2 => 0.75, + 3 => 1, + ), + 95 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 0.75, + 2 => 1, + 3 => 0, + ), + 96 => + array( + 0 => + array( + 'r' => 31, + 'g' => 0, + 'b' => 63, + ), + 1 => 0.75, + 2 => 1, + 3 => 0.25, + ), + 97 => + array( + 0 => + array( + 'r' => 63, + 'g' => 0, + 'b' => 127, + ), + 1 => 0.75, + 2 => 1, + 3 => 0.5, + ), + 98 => + array( + 0 => + array( + 'r' => 95, + 'g' => 0, + 'b' => 191, + ), + 1 => 0.75, + 2 => 1, + 3 => 0.75, + ), + 99 => + array( + 0 => + array( + 'r' => 127, + 'g' => 0, + 'b' => 255, + ), + 1 => 0.75, + 2 => 1, + 3 => 1, + ), + 100 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 0, + 3 => 0, + ), + 101 => + array( + 0 => + array( + 'r' => 63, + 'g' => 63, + 'b' => 63, + ), + 1 => 1, + 2 => 0, + 3 => 0.25, + ), + 102 => + array( + 0 => + array( + 'r' => 127, + 'g' => 127, + 'b' => 127, + ), + 1 => 1, + 2 => 0, + 3 => 0.5, + ), + 103 => + array( + 0 => + array( + 'r' => 191, + 'g' => 191, + 'b' => 191, + ), + 1 => 1, + 2 => 0, + 3 => 0.75, + ), + 104 => + array( + 0 => + array( + 'r' => 255, + 'g' => 255, + 'b' => 255, + ), + 1 => 1, + 2 => 0, + 3 => 1, + ), + 105 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 0.25, + 3 => 0, + ), + 106 => + array( + 0 => + array( + 'r' => 63, + 'g' => 47, + 'b' => 47, + ), + 1 => 1, + 2 => 0.25, + 3 => 0.25, + ), + 107 => + array( + 0 => + array( + 'r' => 127, + 'g' => 95, + 'b' => 95, + ), + 1 => 1, + 2 => 0.25, + 3 => 0.5, + ), + 108 => + array( + 0 => + array( + 'r' => 191, + 'g' => 143, + 'b' => 143, + ), + 1 => 1, + 2 => 0.25, + 3 => 0.75, + ), + 109 => + array( + 0 => + array( + 'r' => 255, + 'g' => 191, + 'b' => 191, + ), + 1 => 1, + 2 => 0.25, + 3 => 1, + ), + 110 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 0.5, + 3 => 0, + ), + 111 => + array( + 0 => + array( + 'r' => 63, + 'g' => 31, + 'b' => 31, + ), + 1 => 1, + 2 => 0.5, + 3 => 0.25, + ), + 112 => + array( + 0 => + array( + 'r' => 127, + 'g' => 63, + 'b' => 63, + ), + 1 => 1, + 2 => 0.5, + 3 => 0.5, + ), + 113 => + array( + 0 => + array( + 'r' => 191, + 'g' => 95, + 'b' => 95, + ), + 1 => 1, + 2 => 0.5, + 3 => 0.75, + ), + 114 => + array( + 0 => + array( + 'r' => 255, + 'g' => 127, + 'b' => 127, + ), + 1 => 1, + 2 => 0.5, + 3 => 1, + ), + 115 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 0.75, + 3 => 0, + ), + 116 => + array( + 0 => + array( + 'r' => 63, + 'g' => 15, + 'b' => 15, + ), + 1 => 1, + 2 => 0.75, + 3 => 0.25, + ), + 117 => + array( + 0 => + array( + 'r' => 127, + 'g' => 31, + 'b' => 31, + ), + 1 => 1, + 2 => 0.75, + 3 => 0.5, + ), + 118 => + array( + 0 => + array( + 'r' => 191, + 'g' => 47, + 'b' => 47, + ), + 1 => 1, + 2 => 0.75, + 3 => 0.75, + ), + 119 => + array( + 0 => + array( + 'r' => 255, + 'g' => 63, + 'b' => 63, + ), + 1 => 1, + 2 => 0.75, + 3 => 1, + ), + 120 => + array( + 0 => + array( + 'r' => 0, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 1, + 3 => 0, + ), + 121 => + array( + 0 => + array( + 'r' => 63, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 1, + 3 => 0.25, + ), + 122 => + array( + 0 => + array( + 'r' => 127, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 1, + 3 => 0.5, + ), + 123 => + array( + 0 => + array( + 'r' => 191, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 1, + 3 => 0.75, + ), + 124 => + array( + 0 => + array( + 'r' => 255, + 'g' => 0, + 'b' => 0, + ), + 1 => 1, + 2 => 1, + 3 => 1, + ), + ); - - - - - - - - - - - - - - - - - - - -?> \ No newline at end of file + return $essais; +} diff --git a/www/plugins-dist/filtres_images/tests/_couleur_rgb2hsl.php b/www/plugins-dist/filtres_images/tests/_couleur_rgb2hsl.php index eb3d307b..c678959f 100644 --- a/www/plugins-dist/filtres_images/tests/_couleur_rgb2hsl.php +++ b/www/plugins-dist/filtres_images/tests/_couleur_rgb2hsl.php @@ -2,4154 +2,4149 @@ /** * Test unitaire de la fonction _couleur_rgb2hsl * du fichier filtres/images_lib.php - * - * genere automatiquement par TestBuilder - * le */ - $test = '_couleur_rgb2hsl'; - $remonte = "../"; - while (!is_dir($remonte."ecrire")) - $remonte = "../$remonte"; - require $remonte.'tests/test.inc'; - find_in_path("filtres/images_lib.php",'',true); +$test = '_couleur_rgb2hsl'; +$remonte = '../'; +while (!is_dir($remonte . 'ecrire')) { + $remonte = "../$remonte"; +} +require $remonte . 'tests/test.inc'; +find_in_path('filtres/images_lib.php', '', true); - // - // hop ! on y va - // - $err = tester_fun('_couleur_rgb2hsl', essais__couleur_rgb2hsl()); - - // si le tableau $err est pas vide ca va pas - if ($err) { - die ('
    ' . join('', $err) . '
    '); - } +// +// hop ! on y va +// +$err = tester_fun('_couleur_rgb2hsl', essais__couleur_rgb2hsl()); - echo "OK"; - +// si le tableau $err est pas vide ca va pas +if ($err) { + die('
    ' . join('', $err) . '
    '); +} - function essais__couleur_rgb2hsl(){ - $essais = array ( - 0 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'l' => 0, - ), - 1 => 0, - 2 => 0, - 3 => 0, - ), - 1 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'l' => 0.0137254901961, - ), - 1 => 0, - 2 => 0, - 3 => 7, - ), - 2 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'l' => 0.0294117647059, - ), - 1 => 0, - 2 => 0, - 3 => 15, - ), - 3 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 0, - 2 => 0, - 3 => 63, - ), - 4 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 0, - 2 => 0, - 3 => 127, - ), - 5 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 0, - 2 => 0, - 3 => 191, - ), - 6 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'l' => 0.5, - ), - 1 => 0, - 2 => 0, - 3 => 255, - ), - 7 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'l' => 0.0137254901961, - ), - 1 => 0, - 2 => 7, - 3 => 0, - ), - 8 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'l' => 0.0137254901961, - ), - 1 => 0, - 2 => 7, - 3 => 7, - ), - 9 => - array ( - 0 => - array ( - 'h' => 0.588888888889, - 's' => 1, - 'l' => 0.0294117647059, - ), - 1 => 0, - 2 => 7, - 3 => 15, - ), - 10 => - array ( - 0 => - array ( - 'h' => 0.648148148148, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 0, - 2 => 7, - 3 => 63, - ), - 11 => - array ( - 0 => - array ( - 'h' => 0.657480314961, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 0, - 2 => 7, - 3 => 127, - ), - 12 => - array ( - 0 => - array ( - 'h' => 0.660558464223, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 0, - 2 => 7, - 3 => 191, - ), - 13 => - array ( - 0 => - array ( - 'h' => 0.662091503268, - 's' => 1, - 'l' => 0.5, - ), - 1 => 0, - 2 => 7, - 3 => 255, - ), - 14 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'l' => 0.0294117647059, - ), - 1 => 0, - 2 => 15, - 3 => 0, - ), - 15 => - array ( - 0 => - array ( - 'h' => 0.411111111111, - 's' => 1, - 'l' => 0.0294117647059, - ), - 1 => 0, - 2 => 15, - 3 => 7, - ), - 16 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'l' => 0.0294117647059, - ), - 1 => 0, - 2 => 15, - 3 => 15, - ), - 17 => - array ( - 0 => - array ( - 'h' => 0.626984126984, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 0, - 2 => 15, - 3 => 63, - ), - 18 => - array ( - 0 => - array ( - 'h' => 0.646981627297, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 0, - 2 => 15, - 3 => 127, - ), - 19 => - array ( - 0 => - array ( - 'h' => 0.653577661431, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 0, - 2 => 15, - 3 => 191, - ), - 20 => - array ( - 0 => - array ( - 'h' => 0.656862745098, - 's' => 1, - 'l' => 0.5, - ), - 1 => 0, - 2 => 15, - 3 => 255, - ), - 21 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 0, - 2 => 63, - 3 => 0, - ), - 22 => - array ( - 0 => - array ( - 'h' => 0.351851851852, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 0, - 2 => 63, - 3 => 7, - ), - 23 => - array ( - 0 => - array ( - 'h' => 0.373015873016, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 0, - 2 => 63, - 3 => 15, - ), - 24 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 0, - 2 => 63, - 3 => 63, - ), - 25 => - array ( - 0 => - array ( - 'h' => 0.583989501312, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 0, - 2 => 63, - 3 => 127, - ), - 26 => - array ( - 0 => - array ( - 'h' => 0.611692844677, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 0, - 2 => 63, - 3 => 191, - ), - 27 => - array ( - 0 => - array ( - 'h' => 0.625490196078, - 's' => 1, - 'l' => 0.5, - ), - 1 => 0, - 2 => 63, - 3 => 255, - ), - 28 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 0, - 2 => 127, - 3 => 0, - ), - 29 => - array ( - 0 => - array ( - 'h' => 0.342519685039, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 0, - 2 => 127, - 3 => 7, - ), - 30 => - array ( - 0 => - array ( - 'h' => 0.353018372703, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 0, - 2 => 127, - 3 => 15, - ), - 31 => - array ( - 0 => - array ( - 'h' => 0.416010498688, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 0, - 2 => 127, - 3 => 63, - ), - 32 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 0, - 2 => 127, - 3 => 127, - ), - 33 => - array ( - 0 => - array ( - 'h' => 0.555846422339, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 0, - 2 => 127, - 3 => 191, - ), - 34 => - array ( - 0 => - array ( - 'h' => 0.583660130719, - 's' => 1, - 'l' => 0.5, - ), - 1 => 0, - 2 => 127, - 3 => 255, - ), - 35 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 0, - 2 => 191, - 3 => 0, - ), - 36 => - array ( - 0 => - array ( - 'h' => 0.339441535777, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 0, - 2 => 191, - 3 => 7, - ), - 37 => - array ( - 0 => - array ( - 'h' => 0.346422338569, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 0, - 2 => 191, - 3 => 15, - ), - 38 => - array ( - 0 => - array ( - 'h' => 0.388307155323, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 0, - 2 => 191, - 3 => 63, - ), - 39 => - array ( - 0 => - array ( - 'h' => 0.444153577661, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 0, - 2 => 191, - 3 => 127, - ), - 40 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 0, - 2 => 191, - 3 => 191, - ), - 41 => - array ( - 0 => - array ( - 'h' => 0.541830065359, - 's' => 1, - 'l' => 0.5, - ), - 1 => 0, - 2 => 191, - 3 => 255, - ), - 42 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'l' => 0.5, - ), - 1 => 0, - 2 => 255, - 3 => 0, - ), - 43 => - array ( - 0 => - array ( - 'h' => 0.337908496732, - 's' => 1, - 'l' => 0.5, - ), - 1 => 0, - 2 => 255, - 3 => 7, - ), - 44 => - array ( - 0 => - array ( - 'h' => 0.343137254902, - 's' => 1, - 'l' => 0.5, - ), - 1 => 0, - 2 => 255, - 3 => 15, - ), - 45 => - array ( - 0 => - array ( - 'h' => 0.374509803922, - 's' => 1, - 'l' => 0.5, - ), - 1 => 0, - 2 => 255, - 3 => 63, - ), - 46 => - array ( - 0 => - array ( - 'h' => 0.416339869281, - 's' => 1, - 'l' => 0.5, - ), - 1 => 0, - 2 => 255, - 3 => 127, - ), - 47 => - array ( - 0 => - array ( - 'h' => 0.458169934641, - 's' => 1, - 'l' => 0.5, - ), - 1 => 0, - 2 => 255, - 3 => 191, - ), - 48 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'l' => 0.5, - ), - 1 => 0, - 2 => 255, - 3 => 255, - ), - 49 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'l' => 0.0137254901961, - ), - 1 => 7, - 2 => 0, - 3 => 0, - ), - 50 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'l' => 0.0137254901961, - ), - 1 => 7, - 2 => 0, - 3 => 7, - ), - 51 => - array ( - 0 => - array ( - 'h' => 0.744444444444, - 's' => 1, - 'l' => 0.0294117647059, - ), - 1 => 7, - 2 => 0, - 3 => 15, - ), - 52 => - array ( - 0 => - array ( - 'h' => 0.685185185185, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 7, - 2 => 0, - 3 => 63, - ), - 53 => - array ( - 0 => - array ( - 'h' => 0.675853018373, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 7, - 2 => 0, - 3 => 127, - ), - 54 => - array ( - 0 => - array ( - 'h' => 0.67277486911, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 7, - 2 => 0, - 3 => 191, - ), - 55 => - array ( - 0 => - array ( - 'h' => 0.671241830065, - 's' => 1, - 'l' => 0.5, - ), - 1 => 7, - 2 => 0, - 3 => 255, - ), - 56 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'l' => 0.0137254901961, - ), - 1 => 7, - 2 => 7, - 3 => 0, - ), - 57 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'l' => 0.0274509803922, - ), - 1 => 7, - 2 => 7, - 3 => 7, - ), - 58 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.363636363636, - 'l' => 0.043137254902, - ), - 1 => 7, - 2 => 7, - 3 => 15, - ), - 59 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.8, - 'l' => 0.137254901961, - ), - 1 => 7, - 2 => 7, - 3 => 63, - ), - 60 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 7, - 2 => 7, - 3 => 127, - ), - 61 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 7, - 2 => 7, - 3 => 191, - ), - 62 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 7, - 2 => 7, - 3 => 255, - ), - 63 => - array ( - 0 => - array ( - 'h' => 0.255555555556, - 's' => 1, - 'l' => 0.0294117647059, - ), - 1 => 7, - 2 => 15, - 3 => 0, - ), - 64 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.363636363636, - 'l' => 0.043137254902, - ), - 1 => 7, - 2 => 15, - 3 => 7, - ), - 65 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.363636363636, - 'l' => 0.043137254902, - ), - 1 => 7, - 2 => 15, - 3 => 15, - ), - 66 => - array ( - 0 => - array ( - 'h' => 0.642857142857, - 's' => 0.8, - 'l' => 0.137254901961, - ), - 1 => 7, - 2 => 15, - 3 => 63, - ), - 67 => - array ( - 0 => - array ( - 'h' => 0.655555555556, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 7, - 2 => 15, - 3 => 127, - ), - 68 => - array ( - 0 => - array ( - 'h' => 0.659420289855, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 7, - 2 => 15, - 3 => 191, - ), - 69 => - array ( - 0 => - array ( - 'h' => 0.661290322581, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 7, - 2 => 15, - 3 => 255, - ), - 70 => - array ( - 0 => - array ( - 'h' => 0.314814814815, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 7, - 2 => 63, - 3 => 0, - ), - 71 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.8, - 'l' => 0.137254901961, - ), - 1 => 7, - 2 => 63, - 3 => 7, - ), - 72 => - array ( - 0 => - array ( - 'h' => 0.357142857143, - 's' => 0.8, - 'l' => 0.137254901961, - ), - 1 => 7, - 2 => 63, - 3 => 15, - ), - 73 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.8, - 'l' => 0.137254901961, - ), - 1 => 7, - 2 => 63, - 3 => 63, - ), - 74 => - array ( - 0 => - array ( - 'h' => 0.588888888889, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 7, - 2 => 63, - 3 => 127, - ), - 75 => - array ( - 0 => - array ( - 'h' => 0.615942028986, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 7, - 2 => 63, - 3 => 191, - ), - 76 => - array ( - 0 => - array ( - 'h' => 0.629032258065, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 7, - 2 => 63, - 3 => 255, - ), - 77 => - array ( - 0 => - array ( - 'h' => 0.324146981627, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 7, - 2 => 127, - 3 => 0, - ), - 78 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 7, - 2 => 127, - 3 => 7, - ), - 79 => - array ( - 0 => - array ( - 'h' => 0.344444444444, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 7, - 2 => 127, - 3 => 15, - ), - 80 => - array ( - 0 => - array ( - 'h' => 0.411111111111, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 7, - 2 => 127, - 3 => 63, - ), - 81 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 7, - 2 => 127, - 3 => 127, - ), - 82 => - array ( - 0 => - array ( - 'h' => 0.557971014493, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 7, - 2 => 127, - 3 => 191, - ), - 83 => - array ( - 0 => - array ( - 'h' => 0.586021505376, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 7, - 2 => 127, - 3 => 255, - ), - 84 => - array ( - 0 => - array ( - 'h' => 0.32722513089, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 7, - 2 => 191, - 3 => 0, - ), - 85 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 7, - 2 => 191, - 3 => 7, - ), - 86 => - array ( - 0 => - array ( - 'h' => 0.340579710145, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 7, - 2 => 191, - 3 => 15, - ), - 87 => - array ( - 0 => - array ( - 'h' => 0.384057971014, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 7, - 2 => 191, - 3 => 63, - ), - 88 => - array ( - 0 => - array ( - 'h' => 0.442028985507, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 7, - 2 => 191, - 3 => 127, - ), - 89 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 7, - 2 => 191, - 3 => 191, - ), - 90 => - array ( - 0 => - array ( - 'h' => 0.543010752688, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 7, - 2 => 191, - 3 => 255, - ), - 91 => - array ( - 0 => - array ( - 'h' => 0.328758169935, - 's' => 1, - 'l' => 0.5, - ), - 1 => 7, - 2 => 255, - 3 => 0, - ), - 92 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 7, - 2 => 255, - 3 => 7, - ), - 93 => - array ( - 0 => - array ( - 'h' => 0.338709677419, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 7, - 2 => 255, - 3 => 15, - ), - 94 => - array ( - 0 => - array ( - 'h' => 0.370967741935, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 7, - 2 => 255, - 3 => 63, - ), - 95 => - array ( - 0 => - array ( - 'h' => 0.413978494624, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 7, - 2 => 255, - 3 => 127, - ), - 96 => - array ( - 0 => - array ( - 'h' => 0.456989247312, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 7, - 2 => 255, - 3 => 191, - ), - 97 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 7, - 2 => 255, - 3 => 255, - ), - 98 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'l' => 0.0294117647059, - ), - 1 => 15, - 2 => 0, - 3 => 0, - ), - 99 => - array ( - 0 => - array ( - 'h' => 0.922222222222, - 's' => 1, - 'l' => 0.0294117647059, - ), - 1 => 15, - 2 => 0, - 3 => 7, - ), - 100 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'l' => 0.0294117647059, - ), - 1 => 15, - 2 => 0, - 3 => 15, - ), - 101 => - array ( - 0 => - array ( - 'h' => 0.706349206349, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 15, - 2 => 0, - 3 => 63, - ), - 102 => - array ( - 0 => - array ( - 'h' => 0.686351706037, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 15, - 2 => 0, - 3 => 127, - ), - 103 => - array ( - 0 => - array ( - 'h' => 0.679755671902, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 15, - 2 => 0, - 3 => 191, - ), - 104 => - array ( - 0 => - array ( - 'h' => 0.676470588235, - 's' => 1, - 'l' => 0.5, - ), - 1 => 15, - 2 => 0, - 3 => 255, - ), - 105 => - array ( - 0 => - array ( - 'h' => 0.0777777777778, - 's' => 1, - 'l' => 0.0294117647059, - ), - 1 => 15, - 2 => 7, - 3 => 0, - ), - 106 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.363636363636, - 'l' => 0.043137254902, - ), - 1 => 15, - 2 => 7, - 3 => 7, - ), - 107 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.363636363636, - 'l' => 0.043137254902, - ), - 1 => 15, - 2 => 7, - 3 => 15, - ), - 108 => - array ( - 0 => - array ( - 'h' => 0.690476190476, - 's' => 0.8, - 'l' => 0.137254901961, - ), - 1 => 15, - 2 => 7, - 3 => 63, - ), - 109 => - array ( - 0 => - array ( - 'h' => 0.677777777778, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 15, - 2 => 7, - 3 => 127, - ), - 110 => - array ( - 0 => - array ( - 'h' => 0.673913043478, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 15, - 2 => 7, - 3 => 191, - ), - 111 => - array ( - 0 => - array ( - 'h' => 0.672043010753, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 15, - 2 => 7, - 3 => 255, - ), - 112 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'l' => 0.0294117647059, - ), - 1 => 15, - 2 => 15, - 3 => 0, - ), - 113 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.363636363636, - 'l' => 0.043137254902, - ), - 1 => 15, - 2 => 15, - 3 => 7, - ), - 114 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'l' => 0.0588235294118, - ), - 1 => 15, - 2 => 15, - 3 => 15, - ), - 115 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.615384615385, - 'l' => 0.152941176471, - ), - 1 => 15, - 2 => 15, - 3 => 63, - ), - 116 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.788732394366, - 'l' => 0.278431372549, - ), - 1 => 15, - 2 => 15, - 3 => 127, - ), - 117 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 15, - 2 => 15, - 3 => 191, - ), - 118 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 15, - 2 => 15, - 3 => 255, - ), - 119 => - array ( - 0 => - array ( - 'h' => 0.293650793651, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 15, - 2 => 63, - 3 => 0, - ), - 120 => - array ( - 0 => - array ( - 'h' => 0.309523809524, - 's' => 0.8, - 'l' => 0.137254901961, - ), - 1 => 15, - 2 => 63, - 3 => 7, - ), - 121 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.615384615385, - 'l' => 0.152941176471, - ), - 1 => 15, - 2 => 63, - 3 => 15, - ), - 122 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.615384615385, - 'l' => 0.152941176471, - ), - 1 => 15, - 2 => 63, - 3 => 63, - ), - 123 => - array ( - 0 => - array ( - 'h' => 0.595238095238, - 's' => 0.788732394366, - 'l' => 0.278431372549, - ), - 1 => 15, - 2 => 63, - 3 => 127, - ), - 124 => - array ( - 0 => - array ( - 'h' => 0.621212121212, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 15, - 2 => 63, - 3 => 191, - ), - 125 => - array ( - 0 => - array ( - 'h' => 0.633333333333, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 15, - 2 => 63, - 3 => 255, - ), - 126 => - array ( - 0 => - array ( - 'h' => 0.313648293963, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 15, - 2 => 127, - 3 => 0, - ), - 127 => - array ( - 0 => - array ( - 'h' => 0.322222222222, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 15, - 2 => 127, - 3 => 7, - ), - 128 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.788732394366, - 'l' => 0.278431372549, - ), - 1 => 15, - 2 => 127, - 3 => 15, - ), - 129 => - array ( - 0 => - array ( - 'h' => 0.404761904762, - 's' => 0.788732394366, - 'l' => 0.278431372549, - ), - 1 => 15, - 2 => 127, - 3 => 63, - ), - 130 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.788732394366, - 'l' => 0.278431372549, - ), - 1 => 15, - 2 => 127, - 3 => 127, - ), - 131 => - array ( - 0 => - array ( - 'h' => 0.560606060606, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 15, - 2 => 127, - 3 => 191, - ), - 132 => - array ( - 0 => - array ( - 'h' => 0.588888888889, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 15, - 2 => 127, - 3 => 255, - ), - 133 => - array ( - 0 => - array ( - 'h' => 0.320244328098, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 15, - 2 => 191, - 3 => 0, - ), - 134 => - array ( - 0 => - array ( - 'h' => 0.326086956522, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 15, - 2 => 191, - 3 => 7, - ), - 135 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 15, - 2 => 191, - 3 => 15, - ), - 136 => - array ( - 0 => - array ( - 'h' => 0.378787878788, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 15, - 2 => 191, - 3 => 63, - ), - 137 => - array ( - 0 => - array ( - 'h' => 0.439393939394, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 15, - 2 => 191, - 3 => 127, - ), - 138 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 15, - 2 => 191, - 3 => 191, - ), - 139 => - array ( - 0 => - array ( - 'h' => 0.544444444444, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 15, - 2 => 191, - 3 => 255, - ), - 140 => - array ( - 0 => - array ( - 'h' => 0.323529411765, - 's' => 1, - 'l' => 0.5, - ), - 1 => 15, - 2 => 255, - 3 => 0, - ), - 141 => - array ( - 0 => - array ( - 'h' => 0.327956989247, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 15, - 2 => 255, - 3 => 7, - ), - 142 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 15, - 2 => 255, - 3 => 15, - ), - 143 => - array ( - 0 => - array ( - 'h' => 0.366666666667, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 15, - 2 => 255, - 3 => 63, - ), - 144 => - array ( - 0 => - array ( - 'h' => 0.411111111111, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 15, - 2 => 255, - 3 => 127, - ), - 145 => - array ( - 0 => - array ( - 'h' => 0.455555555556, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 15, - 2 => 255, - 3 => 191, - ), - 146 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 15, - 2 => 255, - 3 => 255, - ), - 147 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 63, - 2 => 0, - 3 => 0, - ), - 148 => - array ( - 0 => - array ( - 'h' => 0.981481481481, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 63, - 2 => 0, - 3 => 7, - ), - 149 => - array ( - 0 => - array ( - 'h' => 0.960317460317, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 63, - 2 => 0, - 3 => 15, - ), - 150 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 63, - 2 => 0, - 3 => 63, - ), - 151 => - array ( - 0 => - array ( - 'h' => 0.749343832021, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 63, - 2 => 0, - 3 => 127, - ), - 152 => - array ( - 0 => - array ( - 'h' => 0.721640488656, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 63, - 2 => 0, - 3 => 191, - ), - 153 => - array ( - 0 => - array ( - 'h' => 0.707843137255, - 's' => 1, - 'l' => 0.5, - ), - 1 => 63, - 2 => 0, - 3 => 255, - ), - 154 => - array ( - 0 => - array ( - 'h' => 0.0185185185185, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 63, - 2 => 7, - 3 => 0, - ), - 155 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.8, - 'l' => 0.137254901961, - ), - 1 => 63, - 2 => 7, - 3 => 7, - ), - 156 => - array ( - 0 => - array ( - 'h' => 0.97619047619, - 's' => 0.8, - 'l' => 0.137254901961, - ), - 1 => 63, - 2 => 7, - 3 => 15, - ), - 157 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.8, - 'l' => 0.137254901961, - ), - 1 => 63, - 2 => 7, - 3 => 63, - ), - 158 => - array ( - 0 => - array ( - 'h' => 0.744444444444, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 63, - 2 => 7, - 3 => 127, - ), - 159 => - array ( - 0 => - array ( - 'h' => 0.717391304348, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 63, - 2 => 7, - 3 => 191, - ), - 160 => - array ( - 0 => - array ( - 'h' => 0.704301075269, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 63, - 2 => 7, - 3 => 255, - ), - 161 => - array ( - 0 => - array ( - 'h' => 0.0396825396825, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 63, - 2 => 15, - 3 => 0, - ), - 162 => - array ( - 0 => - array ( - 'h' => 0.0238095238095, - 's' => 0.8, - 'l' => 0.137254901961, - ), - 1 => 63, - 2 => 15, - 3 => 7, - ), - 163 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.615384615385, - 'l' => 0.152941176471, - ), - 1 => 63, - 2 => 15, - 3 => 15, - ), - 164 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.615384615385, - 'l' => 0.152941176471, - ), - 1 => 63, - 2 => 15, - 3 => 63, - ), - 165 => - array ( - 0 => - array ( - 'h' => 0.738095238095, - 's' => 0.788732394366, - 'l' => 0.278431372549, - ), - 1 => 63, - 2 => 15, - 3 => 127, - ), - 166 => - array ( - 0 => - array ( - 'h' => 0.712121212121, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 63, - 2 => 15, - 3 => 191, - ), - 167 => - array ( - 0 => - array ( - 'h' => 0.7, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 63, - 2 => 15, - 3 => 255, - ), - 168 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'l' => 0.123529411765, - ), - 1 => 63, - 2 => 63, - 3 => 0, - ), - 169 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.8, - 'l' => 0.137254901961, - ), - 1 => 63, - 2 => 63, - 3 => 7, - ), - 170 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.615384615385, - 'l' => 0.152941176471, - ), - 1 => 63, - 2 => 63, - 3 => 15, - ), - 171 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'l' => 0.247058823529, - ), - 1 => 63, - 2 => 63, - 3 => 63, - ), - 172 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.336842105263, - 'l' => 0.372549019608, - ), - 1 => 63, - 2 => 63, - 3 => 127, - ), - 173 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.503937007874, - 'l' => 0.498039215686, - ), - 1 => 63, - 2 => 63, - 3 => 191, - ), - 174 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 63, - 2 => 63, - 3 => 255, - ), - 175 => - array ( - 0 => - array ( - 'h' => 0.250656167979, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 63, - 2 => 127, - 3 => 0, - ), - 176 => - array ( - 0 => - array ( - 'h' => 0.255555555556, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 63, - 2 => 127, - 3 => 7, - ), - 177 => - array ( - 0 => - array ( - 'h' => 0.261904761905, - 's' => 0.788732394366, - 'l' => 0.278431372549, - ), - 1 => 63, - 2 => 127, - 3 => 15, - ), - 178 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.336842105263, - 'l' => 0.372549019608, - ), - 1 => 63, - 2 => 127, - 3 => 63, - ), - 179 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.336842105263, - 'l' => 0.372549019608, - ), - 1 => 63, - 2 => 127, - 3 => 127, - ), - 180 => - array ( - 0 => - array ( - 'h' => 0.583333333333, - 's' => 0.503937007874, - 'l' => 0.498039215686, - ), - 1 => 63, - 2 => 127, - 3 => 191, - ), - 181 => - array ( - 0 => - array ( - 'h' => 0.611111111111, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 63, - 2 => 127, - 3 => 255, - ), - 182 => - array ( - 0 => - array ( - 'h' => 0.278359511344, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 63, - 2 => 191, - 3 => 0, - ), - 183 => - array ( - 0 => - array ( - 'h' => 0.282608695652, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 63, - 2 => 191, - 3 => 7, - ), - 184 => - array ( - 0 => - array ( - 'h' => 0.287878787879, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 63, - 2 => 191, - 3 => 15, - ), - 185 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.503937007874, - 'l' => 0.498039215686, - ), - 1 => 63, - 2 => 191, - 3 => 63, - ), - 186 => - array ( - 0 => - array ( - 'h' => 0.416666666667, - 's' => 0.503937007874, - 'l' => 0.498039215686, - ), - 1 => 63, - 2 => 191, - 3 => 127, - ), - 187 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.503937007874, - 'l' => 0.498039215686, - ), - 1 => 63, - 2 => 191, - 3 => 191, - ), - 188 => - array ( - 0 => - array ( - 'h' => 0.555555555556, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 63, - 2 => 191, - 3 => 255, - ), - 189 => - array ( - 0 => - array ( - 'h' => 0.292156862745, - 's' => 1, - 'l' => 0.5, - ), - 1 => 63, - 2 => 255, - 3 => 0, - ), - 190 => - array ( - 0 => - array ( - 'h' => 0.295698924731, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 63, - 2 => 255, - 3 => 7, - ), - 191 => - array ( - 0 => - array ( - 'h' => 0.3, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 63, - 2 => 255, - 3 => 15, - ), - 192 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 63, - 2 => 255, - 3 => 63, - ), - 193 => - array ( - 0 => - array ( - 'h' => 0.388888888889, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 63, - 2 => 255, - 3 => 127, - ), - 194 => - array ( - 0 => - array ( - 'h' => 0.444444444444, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 63, - 2 => 255, - 3 => 191, - ), - 195 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 63, - 2 => 255, - 3 => 255, - ), - 196 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 127, - 2 => 0, - 3 => 0, - ), - 197 => - array ( - 0 => - array ( - 'h' => 0.990813648294, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 127, - 2 => 0, - 3 => 7, - ), - 198 => - array ( - 0 => - array ( - 'h' => 0.98031496063, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 127, - 2 => 0, - 3 => 15, - ), - 199 => - array ( - 0 => - array ( - 'h' => 0.917322834646, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 127, - 2 => 0, - 3 => 63, - ), - 200 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 127, - 2 => 0, - 3 => 127, - ), - 201 => - array ( - 0 => - array ( - 'h' => 0.777486910995, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 127, - 2 => 0, - 3 => 191, - ), - 202 => - array ( - 0 => - array ( - 'h' => 0.749673202614, - 's' => 1, - 'l' => 0.5, - ), - 1 => 127, - 2 => 0, - 3 => 255, - ), - 203 => - array ( - 0 => - array ( - 'h' => 0.00918635170604, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 127, - 2 => 7, - 3 => 0, - ), - 204 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 127, - 2 => 7, - 3 => 7, - ), - 205 => - array ( - 0 => - array ( - 'h' => 0.988888888889, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 127, - 2 => 7, - 3 => 15, - ), - 206 => - array ( - 0 => - array ( - 'h' => 0.922222222222, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 127, - 2 => 7, - 3 => 63, - ), - 207 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 127, - 2 => 7, - 3 => 127, - ), - 208 => - array ( - 0 => - array ( - 'h' => 0.775362318841, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 127, - 2 => 7, - 3 => 191, - ), - 209 => - array ( - 0 => - array ( - 'h' => 0.747311827957, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 127, - 2 => 7, - 3 => 255, - ), - 210 => - array ( - 0 => - array ( - 'h' => 0.0196850393701, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 127, - 2 => 15, - 3 => 0, - ), - 211 => - array ( - 0 => - array ( - 'h' => 0.0111111111111, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 127, - 2 => 15, - 3 => 7, - ), - 212 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.788732394366, - 'l' => 0.278431372549, - ), - 1 => 127, - 2 => 15, - 3 => 15, - ), - 213 => - array ( - 0 => - array ( - 'h' => 0.928571428571, - 's' => 0.788732394366, - 'l' => 0.278431372549, - ), - 1 => 127, - 2 => 15, - 3 => 63, - ), - 214 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.788732394366, - 'l' => 0.278431372549, - ), - 1 => 127, - 2 => 15, - 3 => 127, - ), - 215 => - array ( - 0 => - array ( - 'h' => 0.772727272727, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 127, - 2 => 15, - 3 => 191, - ), - 216 => - array ( - 0 => - array ( - 'h' => 0.744444444444, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 127, - 2 => 15, - 3 => 255, - ), - 217 => - array ( - 0 => - array ( - 'h' => 0.0826771653543, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 127, - 2 => 63, - 3 => 0, - ), - 218 => - array ( - 0 => - array ( - 'h' => 0.0777777777778, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 127, - 2 => 63, - 3 => 7, - ), - 219 => - array ( - 0 => - array ( - 'h' => 0.0714285714286, - 's' => 0.788732394366, - 'l' => 0.278431372549, - ), - 1 => 127, - 2 => 63, - 3 => 15, - ), - 220 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.336842105263, - 'l' => 0.372549019608, - ), - 1 => 127, - 2 => 63, - 3 => 63, - ), - 221 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.336842105263, - 'l' => 0.372549019608, - ), - 1 => 127, - 2 => 63, - 3 => 127, - ), - 222 => - array ( - 0 => - array ( - 'h' => 0.75, - 's' => 0.503937007874, - 'l' => 0.498039215686, - ), - 1 => 127, - 2 => 63, - 3 => 191, - ), - 223 => - array ( - 0 => - array ( - 'h' => 0.722222222222, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 127, - 2 => 63, - 3 => 255, - ), - 224 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'l' => 0.249019607843, - ), - 1 => 127, - 2 => 127, - 3 => 0, - ), - 225 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.89552238806, - 'l' => 0.262745098039, - ), - 1 => 127, - 2 => 127, - 3 => 7, - ), - 226 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.788732394366, - 'l' => 0.278431372549, - ), - 1 => 127, - 2 => 127, - 3 => 15, - ), - 227 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.336842105263, - 'l' => 0.372549019608, - ), - 1 => 127, - 2 => 127, - 3 => 63, - ), - 228 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'l' => 0.498039215686, - ), - 1 => 127, - 2 => 127, - 3 => 127, - ), - 229 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.333333333333, - 'l' => 0.623529411765, - ), - 1 => 127, - 2 => 127, - 3 => 191, - ), - 230 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'l' => 0.749019607843, - ), - 1 => 127, - 2 => 127, - 3 => 255, - ), - 231 => - array ( - 0 => - array ( - 'h' => 0.222513089005, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 127, - 2 => 191, - 3 => 0, - ), - 232 => - array ( - 0 => - array ( - 'h' => 0.224637681159, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 127, - 2 => 191, - 3 => 7, - ), - 233 => - array ( - 0 => - array ( - 'h' => 0.227272727273, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 127, - 2 => 191, - 3 => 15, - ), - 234 => - array ( - 0 => - array ( - 'h' => 0.25, - 's' => 0.503937007874, - 'l' => 0.498039215686, - ), - 1 => 127, - 2 => 191, - 3 => 63, - ), - 235 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.333333333333, - 'l' => 0.623529411765, - ), - 1 => 127, - 2 => 191, - 3 => 127, - ), - 236 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.333333333333, - 'l' => 0.623529411765, - ), - 1 => 127, - 2 => 191, - 3 => 191, - ), - 237 => - array ( - 0 => - array ( - 'h' => 0.583333333333, - 's' => 1, - 'l' => 0.749019607843, - ), - 1 => 127, - 2 => 191, - 3 => 255, - ), - 238 => - array ( - 0 => - array ( - 'h' => 0.250326797386, - 's' => 1, - 'l' => 0.5, - ), - 1 => 127, - 2 => 255, - 3 => 0, - ), - 239 => - array ( - 0 => - array ( - 'h' => 0.252688172043, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 127, - 2 => 255, - 3 => 7, - ), - 240 => - array ( - 0 => - array ( - 'h' => 0.255555555556, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 127, - 2 => 255, - 3 => 15, - ), - 241 => - array ( - 0 => - array ( - 'h' => 0.277777777778, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 127, - 2 => 255, - 3 => 63, - ), - 242 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'l' => 0.749019607843, - ), - 1 => 127, - 2 => 255, - 3 => 127, - ), - 243 => - array ( - 0 => - array ( - 'h' => 0.416666666667, - 's' => 1, - 'l' => 0.749019607843, - ), - 1 => 127, - 2 => 255, - 3 => 191, - ), - 244 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'l' => 0.749019607843, - ), - 1 => 127, - 2 => 255, - 3 => 255, - ), - 245 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 191, - 2 => 0, - 3 => 0, - ), - 246 => - array ( - 0 => - array ( - 'h' => 0.993891797557, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 191, - 2 => 0, - 3 => 7, - ), - 247 => - array ( - 0 => - array ( - 'h' => 0.986910994764, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 191, - 2 => 0, - 3 => 15, - ), - 248 => - array ( - 0 => - array ( - 'h' => 0.94502617801, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 191, - 2 => 0, - 3 => 63, - ), - 249 => - array ( - 0 => - array ( - 'h' => 0.889179755672, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 191, - 2 => 0, - 3 => 127, - ), - 250 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 191, - 2 => 0, - 3 => 191, - ), - 251 => - array ( - 0 => - array ( - 'h' => 0.791503267974, - 's' => 1, - 'l' => 0.5, - ), - 1 => 191, - 2 => 0, - 3 => 255, - ), - 252 => - array ( - 0 => - array ( - 'h' => 0.00610820244328, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 191, - 2 => 7, - 3 => 0, - ), - 253 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 191, - 2 => 7, - 3 => 7, - ), - 254 => - array ( - 0 => - array ( - 'h' => 0.992753623188, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 191, - 2 => 7, - 3 => 15, - ), - 255 => - array ( - 0 => - array ( - 'h' => 0.949275362319, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 191, - 2 => 7, - 3 => 63, - ), - 256 => - array ( - 0 => - array ( - 'h' => 0.891304347826, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 191, - 2 => 7, - 3 => 127, - ), - 257 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 191, - 2 => 7, - 3 => 191, - ), - 258 => - array ( - 0 => - array ( - 'h' => 0.790322580645, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 191, - 2 => 7, - 3 => 255, - ), - 259 => - array ( - 0 => - array ( - 'h' => 0.0130890052356, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 191, - 2 => 15, - 3 => 0, - ), - 260 => - array ( - 0 => - array ( - 'h' => 0.00724637681159, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 191, - 2 => 15, - 3 => 7, - ), - 261 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 191, - 2 => 15, - 3 => 15, - ), - 262 => - array ( - 0 => - array ( - 'h' => 0.954545454545, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 191, - 2 => 15, - 3 => 63, - ), - 263 => - array ( - 0 => - array ( - 'h' => 0.893939393939, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 191, - 2 => 15, - 3 => 127, - ), - 264 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 191, - 2 => 15, - 3 => 191, - ), - 265 => - array ( - 0 => - array ( - 'h' => 0.788888888889, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 191, - 2 => 15, - 3 => 255, - ), - 266 => - array ( - 0 => - array ( - 'h' => 0.0549738219895, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 191, - 2 => 63, - 3 => 0, - ), - 267 => - array ( - 0 => - array ( - 'h' => 0.0507246376812, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 191, - 2 => 63, - 3 => 7, - ), - 268 => - array ( - 0 => - array ( - 'h' => 0.0454545454545, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 191, - 2 => 63, - 3 => 15, - ), - 269 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.503937007874, - 'l' => 0.498039215686, - ), - 1 => 191, - 2 => 63, - 3 => 63, - ), - 270 => - array ( - 0 => - array ( - 'h' => 0.916666666667, - 's' => 0.503937007874, - 'l' => 0.498039215686, - ), - 1 => 191, - 2 => 63, - 3 => 127, - ), - 271 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.503937007874, - 'l' => 0.498039215686, - ), - 1 => 191, - 2 => 63, - 3 => 191, - ), - 272 => - array ( - 0 => - array ( - 'h' => 0.777777777778, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 191, - 2 => 63, - 3 => 255, - ), - 273 => - array ( - 0 => - array ( - 'h' => 0.110820244328, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 191, - 2 => 127, - 3 => 0, - ), - 274 => - array ( - 0 => - array ( - 'h' => 0.108695652174, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 191, - 2 => 127, - 3 => 7, - ), - 275 => - array ( - 0 => - array ( - 'h' => 0.106060606061, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 191, - 2 => 127, - 3 => 15, - ), - 276 => - array ( - 0 => - array ( - 'h' => 0.0833333333333, - 's' => 0.503937007874, - 'l' => 0.498039215686, - ), - 1 => 191, - 2 => 127, - 3 => 63, - ), - 277 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.333333333333, - 'l' => 0.623529411765, - ), - 1 => 191, - 2 => 127, - 3 => 127, - ), - 278 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.333333333333, - 'l' => 0.623529411765, - ), - 1 => 191, - 2 => 127, - 3 => 191, - ), - 279 => - array ( - 0 => - array ( - 'h' => 0.75, - 's' => 1, - 'l' => 0.749019607843, - ), - 1 => 191, - 2 => 127, - 3 => 255, - ), - 280 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'l' => 0.374509803922, - ), - 1 => 191, - 2 => 191, - 3 => 0, - ), - 281 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.929292929293, - 'l' => 0.388235294118, - ), - 1 => 191, - 2 => 191, - 3 => 7, - ), - 282 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.854368932039, - 'l' => 0.403921568627, - ), - 1 => 191, - 2 => 191, - 3 => 15, - ), - 283 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.503937007874, - 'l' => 0.498039215686, - ), - 1 => 191, - 2 => 191, - 3 => 63, - ), - 284 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.333333333333, - 'l' => 0.623529411765, - ), - 1 => 191, - 2 => 191, - 3 => 127, - ), - 285 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'l' => 0.749019607843, - ), - 1 => 191, - 2 => 191, - 3 => 191, - ), - 286 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'l' => 0.874509803922, - ), - 1 => 191, - 2 => 191, - 3 => 255, - ), - 287 => - array ( - 0 => - array ( - 'h' => 0.208496732026, - 's' => 1, - 'l' => 0.5, - ), - 1 => 191, - 2 => 255, - 3 => 0, - ), - 288 => - array ( - 0 => - array ( - 'h' => 0.209677419355, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 191, - 2 => 255, - 3 => 7, - ), - 289 => - array ( - 0 => - array ( - 'h' => 0.211111111111, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 191, - 2 => 255, - 3 => 15, - ), - 290 => - array ( - 0 => - array ( - 'h' => 0.222222222222, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 191, - 2 => 255, - 3 => 63, - ), - 291 => - array ( - 0 => - array ( - 'h' => 0.25, - 's' => 1, - 'l' => 0.749019607843, - ), - 1 => 191, - 2 => 255, - 3 => 127, - ), - 292 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'l' => 0.874509803922, - ), - 1 => 191, - 2 => 255, - 3 => 191, - ), - 293 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'l' => 0.874509803922, - ), - 1 => 191, - 2 => 255, - 3 => 255, - ), - 294 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'l' => 0.5, - ), - 1 => 255, - 2 => 0, - 3 => 0, - ), - 295 => - array ( - 0 => - array ( - 'h' => 0.995424836601, - 's' => 1, - 'l' => 0.5, - ), - 1 => 255, - 2 => 0, - 3 => 7, - ), - 296 => - array ( - 0 => - array ( - 'h' => 0.990196078431, - 's' => 1, - 'l' => 0.5, - ), - 1 => 255, - 2 => 0, - 3 => 15, - ), - 297 => - array ( - 0 => - array ( - 'h' => 0.958823529412, - 's' => 1, - 'l' => 0.5, - ), - 1 => 255, - 2 => 0, - 3 => 63, - ), - 298 => - array ( - 0 => - array ( - 'h' => 0.916993464052, - 's' => 1, - 'l' => 0.5, - ), - 1 => 255, - 2 => 0, - 3 => 127, - ), - 299 => - array ( - 0 => - array ( - 'h' => 0.875163398693, - 's' => 1, - 'l' => 0.5, - ), - 1 => 255, - 2 => 0, - 3 => 191, - ), - 300 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'l' => 0.5, - ), - 1 => 255, - 2 => 0, - 3 => 255, - ), - 301 => - array ( - 0 => - array ( - 'h' => 0.00457516339869, - 's' => 1, - 'l' => 0.5, - ), - 1 => 255, - 2 => 7, - 3 => 0, - ), - 302 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 255, - 2 => 7, - 3 => 7, - ), - 303 => - array ( - 0 => - array ( - 'h' => 0.994623655914, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 255, - 2 => 7, - 3 => 15, - ), - 304 => - array ( - 0 => - array ( - 'h' => 0.962365591398, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 255, - 2 => 7, - 3 => 63, - ), - 305 => - array ( - 0 => - array ( - 'h' => 0.91935483871, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 255, - 2 => 7, - 3 => 127, - ), - 306 => - array ( - 0 => - array ( - 'h' => 0.876344086022, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 255, - 2 => 7, - 3 => 191, - ), - 307 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 255, - 2 => 7, - 3 => 255, - ), - 308 => - array ( - 0 => - array ( - 'h' => 0.00980392156863, - 's' => 1, - 'l' => 0.5, - ), - 1 => 255, - 2 => 15, - 3 => 0, - ), - 309 => - array ( - 0 => - array ( - 'h' => 0.00537634408602, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 255, - 2 => 15, - 3 => 7, - ), - 310 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 255, - 2 => 15, - 3 => 15, - ), - 311 => - array ( - 0 => - array ( - 'h' => 0.966666666667, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 255, - 2 => 15, - 3 => 63, - ), - 312 => - array ( - 0 => - array ( - 'h' => 0.922222222222, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 255, - 2 => 15, - 3 => 127, - ), - 313 => - array ( - 0 => - array ( - 'h' => 0.877777777778, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 255, - 2 => 15, - 3 => 191, - ), - 314 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 255, - 2 => 15, - 3 => 255, - ), - 315 => - array ( - 0 => - array ( - 'h' => 0.0411764705882, - 's' => 1, - 'l' => 0.5, - ), - 1 => 255, - 2 => 63, - 3 => 0, - ), - 316 => - array ( - 0 => - array ( - 'h' => 0.0376344086022, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 255, - 2 => 63, - 3 => 7, - ), - 317 => - array ( - 0 => - array ( - 'h' => 0.0333333333333, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 255, - 2 => 63, - 3 => 15, - ), - 318 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 255, - 2 => 63, - 3 => 63, - ), - 319 => - array ( - 0 => - array ( - 'h' => 0.944444444444, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 255, - 2 => 63, - 3 => 127, - ), - 320 => - array ( - 0 => - array ( - 'h' => 0.888888888889, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 255, - 2 => 63, - 3 => 191, - ), - 321 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 255, - 2 => 63, - 3 => 255, - ), - 322 => - array ( - 0 => - array ( - 'h' => 0.0830065359477, - 's' => 1, - 'l' => 0.5, - ), - 1 => 255, - 2 => 127, - 3 => 0, - ), - 323 => - array ( - 0 => - array ( - 'h' => 0.0806451612903, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 255, - 2 => 127, - 3 => 7, - ), - 324 => - array ( - 0 => - array ( - 'h' => 0.0777777777778, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 255, - 2 => 127, - 3 => 15, - ), - 325 => - array ( - 0 => - array ( - 'h' => 0.0555555555556, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 255, - 2 => 127, - 3 => 63, - ), - 326 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'l' => 0.749019607843, - ), - 1 => 255, - 2 => 127, - 3 => 127, - ), - 327 => - array ( - 0 => - array ( - 'h' => 0.916666666667, - 's' => 1, - 'l' => 0.749019607843, - ), - 1 => 255, - 2 => 127, - 3 => 191, - ), - 328 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'l' => 0.749019607843, - ), - 1 => 255, - 2 => 127, - 3 => 255, - ), - 329 => - array ( - 0 => - array ( - 'h' => 0.124836601307, - 's' => 1, - 'l' => 0.5, - ), - 1 => 255, - 2 => 191, - 3 => 0, - ), - 330 => - array ( - 0 => - array ( - 'h' => 0.123655913978, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 255, - 2 => 191, - 3 => 7, - ), - 331 => - array ( - 0 => - array ( - 'h' => 0.122222222222, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 255, - 2 => 191, - 3 => 15, - ), - 332 => - array ( - 0 => - array ( - 'h' => 0.111111111111, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 255, - 2 => 191, - 3 => 63, - ), - 333 => - array ( - 0 => - array ( - 'h' => 0.0833333333333, - 's' => 1, - 'l' => 0.749019607843, - ), - 1 => 255, - 2 => 191, - 3 => 127, - ), - 334 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'l' => 0.874509803922, - ), - 1 => 255, - 2 => 191, - 3 => 191, - ), - 335 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'l' => 0.874509803922, - ), - 1 => 255, - 2 => 191, - 3 => 255, - ), - 336 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'l' => 0.5, - ), - 1 => 255, - 2 => 255, - 3 => 0, - ), - 337 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'l' => 0.513725490196, - ), - 1 => 255, - 2 => 255, - 3 => 7, - ), - 338 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'l' => 0.529411764706, - ), - 1 => 255, - 2 => 255, - 3 => 15, - ), - 339 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'l' => 0.623529411765, - ), - 1 => 255, - 2 => 255, - 3 => 63, - ), - 340 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'l' => 0.749019607843, - ), - 1 => 255, - 2 => 255, - 3 => 127, - ), - 341 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'l' => 0.874509803922, - ), - 1 => 255, - 2 => 255, - 3 => 191, - ), - 342 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'l' => 1, - ), - 1 => 255, - 2 => 255, - 3 => 255, - ), -); - return $essais; - } +echo 'OK'; +function essais__couleur_rgb2hsl() { + $essais = array( + 0 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'l' => 0, + ), + 1 => 0, + 2 => 0, + 3 => 0, + ), + 1 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'l' => 0.0137254901961, + ), + 1 => 0, + 2 => 0, + 3 => 7, + ), + 2 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'l' => 0.0294117647059, + ), + 1 => 0, + 2 => 0, + 3 => 15, + ), + 3 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 0, + 2 => 0, + 3 => 63, + ), + 4 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 0, + 2 => 0, + 3 => 127, + ), + 5 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 0, + 2 => 0, + 3 => 191, + ), + 6 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'l' => 0.5, + ), + 1 => 0, + 2 => 0, + 3 => 255, + ), + 7 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'l' => 0.0137254901961, + ), + 1 => 0, + 2 => 7, + 3 => 0, + ), + 8 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'l' => 0.0137254901961, + ), + 1 => 0, + 2 => 7, + 3 => 7, + ), + 9 => + array( + 0 => + array( + 'h' => 0.588888888889, + 's' => 1, + 'l' => 0.0294117647059, + ), + 1 => 0, + 2 => 7, + 3 => 15, + ), + 10 => + array( + 0 => + array( + 'h' => 0.648148148148, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 0, + 2 => 7, + 3 => 63, + ), + 11 => + array( + 0 => + array( + 'h' => 0.657480314961, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 0, + 2 => 7, + 3 => 127, + ), + 12 => + array( + 0 => + array( + 'h' => 0.660558464223, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 0, + 2 => 7, + 3 => 191, + ), + 13 => + array( + 0 => + array( + 'h' => 0.662091503268, + 's' => 1, + 'l' => 0.5, + ), + 1 => 0, + 2 => 7, + 3 => 255, + ), + 14 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'l' => 0.0294117647059, + ), + 1 => 0, + 2 => 15, + 3 => 0, + ), + 15 => + array( + 0 => + array( + 'h' => 0.411111111111, + 's' => 1, + 'l' => 0.0294117647059, + ), + 1 => 0, + 2 => 15, + 3 => 7, + ), + 16 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'l' => 0.0294117647059, + ), + 1 => 0, + 2 => 15, + 3 => 15, + ), + 17 => + array( + 0 => + array( + 'h' => 0.626984126984, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 0, + 2 => 15, + 3 => 63, + ), + 18 => + array( + 0 => + array( + 'h' => 0.646981627297, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 0, + 2 => 15, + 3 => 127, + ), + 19 => + array( + 0 => + array( + 'h' => 0.653577661431, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 0, + 2 => 15, + 3 => 191, + ), + 20 => + array( + 0 => + array( + 'h' => 0.656862745098, + 's' => 1, + 'l' => 0.5, + ), + 1 => 0, + 2 => 15, + 3 => 255, + ), + 21 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 0, + 2 => 63, + 3 => 0, + ), + 22 => + array( + 0 => + array( + 'h' => 0.351851851852, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 0, + 2 => 63, + 3 => 7, + ), + 23 => + array( + 0 => + array( + 'h' => 0.373015873016, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 0, + 2 => 63, + 3 => 15, + ), + 24 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 0, + 2 => 63, + 3 => 63, + ), + 25 => + array( + 0 => + array( + 'h' => 0.583989501312, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 0, + 2 => 63, + 3 => 127, + ), + 26 => + array( + 0 => + array( + 'h' => 0.611692844677, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 0, + 2 => 63, + 3 => 191, + ), + 27 => + array( + 0 => + array( + 'h' => 0.625490196078, + 's' => 1, + 'l' => 0.5, + ), + 1 => 0, + 2 => 63, + 3 => 255, + ), + 28 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 0, + 2 => 127, + 3 => 0, + ), + 29 => + array( + 0 => + array( + 'h' => 0.342519685039, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 0, + 2 => 127, + 3 => 7, + ), + 30 => + array( + 0 => + array( + 'h' => 0.353018372703, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 0, + 2 => 127, + 3 => 15, + ), + 31 => + array( + 0 => + array( + 'h' => 0.416010498688, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 0, + 2 => 127, + 3 => 63, + ), + 32 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 0, + 2 => 127, + 3 => 127, + ), + 33 => + array( + 0 => + array( + 'h' => 0.555846422339, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 0, + 2 => 127, + 3 => 191, + ), + 34 => + array( + 0 => + array( + 'h' => 0.583660130719, + 's' => 1, + 'l' => 0.5, + ), + 1 => 0, + 2 => 127, + 3 => 255, + ), + 35 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 0, + 2 => 191, + 3 => 0, + ), + 36 => + array( + 0 => + array( + 'h' => 0.339441535777, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 0, + 2 => 191, + 3 => 7, + ), + 37 => + array( + 0 => + array( + 'h' => 0.346422338569, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 0, + 2 => 191, + 3 => 15, + ), + 38 => + array( + 0 => + array( + 'h' => 0.388307155323, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 0, + 2 => 191, + 3 => 63, + ), + 39 => + array( + 0 => + array( + 'h' => 0.444153577661, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 0, + 2 => 191, + 3 => 127, + ), + 40 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 0, + 2 => 191, + 3 => 191, + ), + 41 => + array( + 0 => + array( + 'h' => 0.541830065359, + 's' => 1, + 'l' => 0.5, + ), + 1 => 0, + 2 => 191, + 3 => 255, + ), + 42 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'l' => 0.5, + ), + 1 => 0, + 2 => 255, + 3 => 0, + ), + 43 => + array( + 0 => + array( + 'h' => 0.337908496732, + 's' => 1, + 'l' => 0.5, + ), + 1 => 0, + 2 => 255, + 3 => 7, + ), + 44 => + array( + 0 => + array( + 'h' => 0.343137254902, + 's' => 1, + 'l' => 0.5, + ), + 1 => 0, + 2 => 255, + 3 => 15, + ), + 45 => + array( + 0 => + array( + 'h' => 0.374509803922, + 's' => 1, + 'l' => 0.5, + ), + 1 => 0, + 2 => 255, + 3 => 63, + ), + 46 => + array( + 0 => + array( + 'h' => 0.416339869281, + 's' => 1, + 'l' => 0.5, + ), + 1 => 0, + 2 => 255, + 3 => 127, + ), + 47 => + array( + 0 => + array( + 'h' => 0.458169934641, + 's' => 1, + 'l' => 0.5, + ), + 1 => 0, + 2 => 255, + 3 => 191, + ), + 48 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'l' => 0.5, + ), + 1 => 0, + 2 => 255, + 3 => 255, + ), + 49 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'l' => 0.0137254901961, + ), + 1 => 7, + 2 => 0, + 3 => 0, + ), + 50 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'l' => 0.0137254901961, + ), + 1 => 7, + 2 => 0, + 3 => 7, + ), + 51 => + array( + 0 => + array( + 'h' => 0.744444444444, + 's' => 1, + 'l' => 0.0294117647059, + ), + 1 => 7, + 2 => 0, + 3 => 15, + ), + 52 => + array( + 0 => + array( + 'h' => 0.685185185185, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 7, + 2 => 0, + 3 => 63, + ), + 53 => + array( + 0 => + array( + 'h' => 0.675853018373, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 7, + 2 => 0, + 3 => 127, + ), + 54 => + array( + 0 => + array( + 'h' => 0.67277486911, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 7, + 2 => 0, + 3 => 191, + ), + 55 => + array( + 0 => + array( + 'h' => 0.671241830065, + 's' => 1, + 'l' => 0.5, + ), + 1 => 7, + 2 => 0, + 3 => 255, + ), + 56 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'l' => 0.0137254901961, + ), + 1 => 7, + 2 => 7, + 3 => 0, + ), + 57 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'l' => 0.0274509803922, + ), + 1 => 7, + 2 => 7, + 3 => 7, + ), + 58 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.363636363636, + 'l' => 0.043137254902, + ), + 1 => 7, + 2 => 7, + 3 => 15, + ), + 59 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.8, + 'l' => 0.137254901961, + ), + 1 => 7, + 2 => 7, + 3 => 63, + ), + 60 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 7, + 2 => 7, + 3 => 127, + ), + 61 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 7, + 2 => 7, + 3 => 191, + ), + 62 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 7, + 2 => 7, + 3 => 255, + ), + 63 => + array( + 0 => + array( + 'h' => 0.255555555556, + 's' => 1, + 'l' => 0.0294117647059, + ), + 1 => 7, + 2 => 15, + 3 => 0, + ), + 64 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.363636363636, + 'l' => 0.043137254902, + ), + 1 => 7, + 2 => 15, + 3 => 7, + ), + 65 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.363636363636, + 'l' => 0.043137254902, + ), + 1 => 7, + 2 => 15, + 3 => 15, + ), + 66 => + array( + 0 => + array( + 'h' => 0.642857142857, + 's' => 0.8, + 'l' => 0.137254901961, + ), + 1 => 7, + 2 => 15, + 3 => 63, + ), + 67 => + array( + 0 => + array( + 'h' => 0.655555555556, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 7, + 2 => 15, + 3 => 127, + ), + 68 => + array( + 0 => + array( + 'h' => 0.659420289855, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 7, + 2 => 15, + 3 => 191, + ), + 69 => + array( + 0 => + array( + 'h' => 0.661290322581, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 7, + 2 => 15, + 3 => 255, + ), + 70 => + array( + 0 => + array( + 'h' => 0.314814814815, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 7, + 2 => 63, + 3 => 0, + ), + 71 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.8, + 'l' => 0.137254901961, + ), + 1 => 7, + 2 => 63, + 3 => 7, + ), + 72 => + array( + 0 => + array( + 'h' => 0.357142857143, + 's' => 0.8, + 'l' => 0.137254901961, + ), + 1 => 7, + 2 => 63, + 3 => 15, + ), + 73 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.8, + 'l' => 0.137254901961, + ), + 1 => 7, + 2 => 63, + 3 => 63, + ), + 74 => + array( + 0 => + array( + 'h' => 0.588888888889, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 7, + 2 => 63, + 3 => 127, + ), + 75 => + array( + 0 => + array( + 'h' => 0.615942028986, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 7, + 2 => 63, + 3 => 191, + ), + 76 => + array( + 0 => + array( + 'h' => 0.629032258065, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 7, + 2 => 63, + 3 => 255, + ), + 77 => + array( + 0 => + array( + 'h' => 0.324146981627, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 7, + 2 => 127, + 3 => 0, + ), + 78 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 7, + 2 => 127, + 3 => 7, + ), + 79 => + array( + 0 => + array( + 'h' => 0.344444444444, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 7, + 2 => 127, + 3 => 15, + ), + 80 => + array( + 0 => + array( + 'h' => 0.411111111111, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 7, + 2 => 127, + 3 => 63, + ), + 81 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 7, + 2 => 127, + 3 => 127, + ), + 82 => + array( + 0 => + array( + 'h' => 0.557971014493, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 7, + 2 => 127, + 3 => 191, + ), + 83 => + array( + 0 => + array( + 'h' => 0.586021505376, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 7, + 2 => 127, + 3 => 255, + ), + 84 => + array( + 0 => + array( + 'h' => 0.32722513089, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 7, + 2 => 191, + 3 => 0, + ), + 85 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 7, + 2 => 191, + 3 => 7, + ), + 86 => + array( + 0 => + array( + 'h' => 0.340579710145, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 7, + 2 => 191, + 3 => 15, + ), + 87 => + array( + 0 => + array( + 'h' => 0.384057971014, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 7, + 2 => 191, + 3 => 63, + ), + 88 => + array( + 0 => + array( + 'h' => 0.442028985507, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 7, + 2 => 191, + 3 => 127, + ), + 89 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 7, + 2 => 191, + 3 => 191, + ), + 90 => + array( + 0 => + array( + 'h' => 0.543010752688, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 7, + 2 => 191, + 3 => 255, + ), + 91 => + array( + 0 => + array( + 'h' => 0.328758169935, + 's' => 1, + 'l' => 0.5, + ), + 1 => 7, + 2 => 255, + 3 => 0, + ), + 92 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 7, + 2 => 255, + 3 => 7, + ), + 93 => + array( + 0 => + array( + 'h' => 0.338709677419, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 7, + 2 => 255, + 3 => 15, + ), + 94 => + array( + 0 => + array( + 'h' => 0.370967741935, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 7, + 2 => 255, + 3 => 63, + ), + 95 => + array( + 0 => + array( + 'h' => 0.413978494624, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 7, + 2 => 255, + 3 => 127, + ), + 96 => + array( + 0 => + array( + 'h' => 0.456989247312, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 7, + 2 => 255, + 3 => 191, + ), + 97 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 7, + 2 => 255, + 3 => 255, + ), + 98 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'l' => 0.0294117647059, + ), + 1 => 15, + 2 => 0, + 3 => 0, + ), + 99 => + array( + 0 => + array( + 'h' => 0.922222222222, + 's' => 1, + 'l' => 0.0294117647059, + ), + 1 => 15, + 2 => 0, + 3 => 7, + ), + 100 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'l' => 0.0294117647059, + ), + 1 => 15, + 2 => 0, + 3 => 15, + ), + 101 => + array( + 0 => + array( + 'h' => 0.706349206349, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 15, + 2 => 0, + 3 => 63, + ), + 102 => + array( + 0 => + array( + 'h' => 0.686351706037, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 15, + 2 => 0, + 3 => 127, + ), + 103 => + array( + 0 => + array( + 'h' => 0.679755671902, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 15, + 2 => 0, + 3 => 191, + ), + 104 => + array( + 0 => + array( + 'h' => 0.676470588235, + 's' => 1, + 'l' => 0.5, + ), + 1 => 15, + 2 => 0, + 3 => 255, + ), + 105 => + array( + 0 => + array( + 'h' => 0.0777777777778, + 's' => 1, + 'l' => 0.0294117647059, + ), + 1 => 15, + 2 => 7, + 3 => 0, + ), + 106 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.363636363636, + 'l' => 0.043137254902, + ), + 1 => 15, + 2 => 7, + 3 => 7, + ), + 107 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.363636363636, + 'l' => 0.043137254902, + ), + 1 => 15, + 2 => 7, + 3 => 15, + ), + 108 => + array( + 0 => + array( + 'h' => 0.690476190476, + 's' => 0.8, + 'l' => 0.137254901961, + ), + 1 => 15, + 2 => 7, + 3 => 63, + ), + 109 => + array( + 0 => + array( + 'h' => 0.677777777778, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 15, + 2 => 7, + 3 => 127, + ), + 110 => + array( + 0 => + array( + 'h' => 0.673913043478, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 15, + 2 => 7, + 3 => 191, + ), + 111 => + array( + 0 => + array( + 'h' => 0.672043010753, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 15, + 2 => 7, + 3 => 255, + ), + 112 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'l' => 0.0294117647059, + ), + 1 => 15, + 2 => 15, + 3 => 0, + ), + 113 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.363636363636, + 'l' => 0.043137254902, + ), + 1 => 15, + 2 => 15, + 3 => 7, + ), + 114 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'l' => 0.0588235294118, + ), + 1 => 15, + 2 => 15, + 3 => 15, + ), + 115 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.615384615385, + 'l' => 0.152941176471, + ), + 1 => 15, + 2 => 15, + 3 => 63, + ), + 116 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.788732394366, + 'l' => 0.278431372549, + ), + 1 => 15, + 2 => 15, + 3 => 127, + ), + 117 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 15, + 2 => 15, + 3 => 191, + ), + 118 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 15, + 2 => 15, + 3 => 255, + ), + 119 => + array( + 0 => + array( + 'h' => 0.293650793651, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 15, + 2 => 63, + 3 => 0, + ), + 120 => + array( + 0 => + array( + 'h' => 0.309523809524, + 's' => 0.8, + 'l' => 0.137254901961, + ), + 1 => 15, + 2 => 63, + 3 => 7, + ), + 121 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.615384615385, + 'l' => 0.152941176471, + ), + 1 => 15, + 2 => 63, + 3 => 15, + ), + 122 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.615384615385, + 'l' => 0.152941176471, + ), + 1 => 15, + 2 => 63, + 3 => 63, + ), + 123 => + array( + 0 => + array( + 'h' => 0.595238095238, + 's' => 0.788732394366, + 'l' => 0.278431372549, + ), + 1 => 15, + 2 => 63, + 3 => 127, + ), + 124 => + array( + 0 => + array( + 'h' => 0.621212121212, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 15, + 2 => 63, + 3 => 191, + ), + 125 => + array( + 0 => + array( + 'h' => 0.633333333333, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 15, + 2 => 63, + 3 => 255, + ), + 126 => + array( + 0 => + array( + 'h' => 0.313648293963, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 15, + 2 => 127, + 3 => 0, + ), + 127 => + array( + 0 => + array( + 'h' => 0.322222222222, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 15, + 2 => 127, + 3 => 7, + ), + 128 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.788732394366, + 'l' => 0.278431372549, + ), + 1 => 15, + 2 => 127, + 3 => 15, + ), + 129 => + array( + 0 => + array( + 'h' => 0.404761904762, + 's' => 0.788732394366, + 'l' => 0.278431372549, + ), + 1 => 15, + 2 => 127, + 3 => 63, + ), + 130 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.788732394366, + 'l' => 0.278431372549, + ), + 1 => 15, + 2 => 127, + 3 => 127, + ), + 131 => + array( + 0 => + array( + 'h' => 0.560606060606, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 15, + 2 => 127, + 3 => 191, + ), + 132 => + array( + 0 => + array( + 'h' => 0.588888888889, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 15, + 2 => 127, + 3 => 255, + ), + 133 => + array( + 0 => + array( + 'h' => 0.320244328098, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 15, + 2 => 191, + 3 => 0, + ), + 134 => + array( + 0 => + array( + 'h' => 0.326086956522, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 15, + 2 => 191, + 3 => 7, + ), + 135 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 15, + 2 => 191, + 3 => 15, + ), + 136 => + array( + 0 => + array( + 'h' => 0.378787878788, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 15, + 2 => 191, + 3 => 63, + ), + 137 => + array( + 0 => + array( + 'h' => 0.439393939394, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 15, + 2 => 191, + 3 => 127, + ), + 138 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 15, + 2 => 191, + 3 => 191, + ), + 139 => + array( + 0 => + array( + 'h' => 0.544444444444, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 15, + 2 => 191, + 3 => 255, + ), + 140 => + array( + 0 => + array( + 'h' => 0.323529411765, + 's' => 1, + 'l' => 0.5, + ), + 1 => 15, + 2 => 255, + 3 => 0, + ), + 141 => + array( + 0 => + array( + 'h' => 0.327956989247, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 15, + 2 => 255, + 3 => 7, + ), + 142 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 15, + 2 => 255, + 3 => 15, + ), + 143 => + array( + 0 => + array( + 'h' => 0.366666666667, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 15, + 2 => 255, + 3 => 63, + ), + 144 => + array( + 0 => + array( + 'h' => 0.411111111111, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 15, + 2 => 255, + 3 => 127, + ), + 145 => + array( + 0 => + array( + 'h' => 0.455555555556, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 15, + 2 => 255, + 3 => 191, + ), + 146 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 15, + 2 => 255, + 3 => 255, + ), + 147 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 63, + 2 => 0, + 3 => 0, + ), + 148 => + array( + 0 => + array( + 'h' => 0.981481481481, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 63, + 2 => 0, + 3 => 7, + ), + 149 => + array( + 0 => + array( + 'h' => 0.960317460317, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 63, + 2 => 0, + 3 => 15, + ), + 150 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 63, + 2 => 0, + 3 => 63, + ), + 151 => + array( + 0 => + array( + 'h' => 0.749343832021, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 63, + 2 => 0, + 3 => 127, + ), + 152 => + array( + 0 => + array( + 'h' => 0.721640488656, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 63, + 2 => 0, + 3 => 191, + ), + 153 => + array( + 0 => + array( + 'h' => 0.707843137255, + 's' => 1, + 'l' => 0.5, + ), + 1 => 63, + 2 => 0, + 3 => 255, + ), + 154 => + array( + 0 => + array( + 'h' => 0.0185185185185, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 63, + 2 => 7, + 3 => 0, + ), + 155 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.8, + 'l' => 0.137254901961, + ), + 1 => 63, + 2 => 7, + 3 => 7, + ), + 156 => + array( + 0 => + array( + 'h' => 0.97619047619, + 's' => 0.8, + 'l' => 0.137254901961, + ), + 1 => 63, + 2 => 7, + 3 => 15, + ), + 157 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.8, + 'l' => 0.137254901961, + ), + 1 => 63, + 2 => 7, + 3 => 63, + ), + 158 => + array( + 0 => + array( + 'h' => 0.744444444444, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 63, + 2 => 7, + 3 => 127, + ), + 159 => + array( + 0 => + array( + 'h' => 0.717391304348, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 63, + 2 => 7, + 3 => 191, + ), + 160 => + array( + 0 => + array( + 'h' => 0.704301075269, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 63, + 2 => 7, + 3 => 255, + ), + 161 => + array( + 0 => + array( + 'h' => 0.0396825396825, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 63, + 2 => 15, + 3 => 0, + ), + 162 => + array( + 0 => + array( + 'h' => 0.0238095238095, + 's' => 0.8, + 'l' => 0.137254901961, + ), + 1 => 63, + 2 => 15, + 3 => 7, + ), + 163 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.615384615385, + 'l' => 0.152941176471, + ), + 1 => 63, + 2 => 15, + 3 => 15, + ), + 164 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.615384615385, + 'l' => 0.152941176471, + ), + 1 => 63, + 2 => 15, + 3 => 63, + ), + 165 => + array( + 0 => + array( + 'h' => 0.738095238095, + 's' => 0.788732394366, + 'l' => 0.278431372549, + ), + 1 => 63, + 2 => 15, + 3 => 127, + ), + 166 => + array( + 0 => + array( + 'h' => 0.712121212121, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 63, + 2 => 15, + 3 => 191, + ), + 167 => + array( + 0 => + array( + 'h' => 0.7, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 63, + 2 => 15, + 3 => 255, + ), + 168 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'l' => 0.123529411765, + ), + 1 => 63, + 2 => 63, + 3 => 0, + ), + 169 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.8, + 'l' => 0.137254901961, + ), + 1 => 63, + 2 => 63, + 3 => 7, + ), + 170 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.615384615385, + 'l' => 0.152941176471, + ), + 1 => 63, + 2 => 63, + 3 => 15, + ), + 171 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'l' => 0.247058823529, + ), + 1 => 63, + 2 => 63, + 3 => 63, + ), + 172 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.336842105263, + 'l' => 0.372549019608, + ), + 1 => 63, + 2 => 63, + 3 => 127, + ), + 173 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.503937007874, + 'l' => 0.498039215686, + ), + 1 => 63, + 2 => 63, + 3 => 191, + ), + 174 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 63, + 2 => 63, + 3 => 255, + ), + 175 => + array( + 0 => + array( + 'h' => 0.250656167979, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 63, + 2 => 127, + 3 => 0, + ), + 176 => + array( + 0 => + array( + 'h' => 0.255555555556, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 63, + 2 => 127, + 3 => 7, + ), + 177 => + array( + 0 => + array( + 'h' => 0.261904761905, + 's' => 0.788732394366, + 'l' => 0.278431372549, + ), + 1 => 63, + 2 => 127, + 3 => 15, + ), + 178 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.336842105263, + 'l' => 0.372549019608, + ), + 1 => 63, + 2 => 127, + 3 => 63, + ), + 179 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.336842105263, + 'l' => 0.372549019608, + ), + 1 => 63, + 2 => 127, + 3 => 127, + ), + 180 => + array( + 0 => + array( + 'h' => 0.583333333333, + 's' => 0.503937007874, + 'l' => 0.498039215686, + ), + 1 => 63, + 2 => 127, + 3 => 191, + ), + 181 => + array( + 0 => + array( + 'h' => 0.611111111111, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 63, + 2 => 127, + 3 => 255, + ), + 182 => + array( + 0 => + array( + 'h' => 0.278359511344, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 63, + 2 => 191, + 3 => 0, + ), + 183 => + array( + 0 => + array( + 'h' => 0.282608695652, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 63, + 2 => 191, + 3 => 7, + ), + 184 => + array( + 0 => + array( + 'h' => 0.287878787879, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 63, + 2 => 191, + 3 => 15, + ), + 185 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.503937007874, + 'l' => 0.498039215686, + ), + 1 => 63, + 2 => 191, + 3 => 63, + ), + 186 => + array( + 0 => + array( + 'h' => 0.416666666667, + 's' => 0.503937007874, + 'l' => 0.498039215686, + ), + 1 => 63, + 2 => 191, + 3 => 127, + ), + 187 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.503937007874, + 'l' => 0.498039215686, + ), + 1 => 63, + 2 => 191, + 3 => 191, + ), + 188 => + array( + 0 => + array( + 'h' => 0.555555555556, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 63, + 2 => 191, + 3 => 255, + ), + 189 => + array( + 0 => + array( + 'h' => 0.292156862745, + 's' => 1, + 'l' => 0.5, + ), + 1 => 63, + 2 => 255, + 3 => 0, + ), + 190 => + array( + 0 => + array( + 'h' => 0.295698924731, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 63, + 2 => 255, + 3 => 7, + ), + 191 => + array( + 0 => + array( + 'h' => 0.3, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 63, + 2 => 255, + 3 => 15, + ), + 192 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 63, + 2 => 255, + 3 => 63, + ), + 193 => + array( + 0 => + array( + 'h' => 0.388888888889, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 63, + 2 => 255, + 3 => 127, + ), + 194 => + array( + 0 => + array( + 'h' => 0.444444444444, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 63, + 2 => 255, + 3 => 191, + ), + 195 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 63, + 2 => 255, + 3 => 255, + ), + 196 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 127, + 2 => 0, + 3 => 0, + ), + 197 => + array( + 0 => + array( + 'h' => 0.990813648294, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 127, + 2 => 0, + 3 => 7, + ), + 198 => + array( + 0 => + array( + 'h' => 0.98031496063, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 127, + 2 => 0, + 3 => 15, + ), + 199 => + array( + 0 => + array( + 'h' => 0.917322834646, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 127, + 2 => 0, + 3 => 63, + ), + 200 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 127, + 2 => 0, + 3 => 127, + ), + 201 => + array( + 0 => + array( + 'h' => 0.777486910995, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 127, + 2 => 0, + 3 => 191, + ), + 202 => + array( + 0 => + array( + 'h' => 0.749673202614, + 's' => 1, + 'l' => 0.5, + ), + 1 => 127, + 2 => 0, + 3 => 255, + ), + 203 => + array( + 0 => + array( + 'h' => 0.00918635170604, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 127, + 2 => 7, + 3 => 0, + ), + 204 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 127, + 2 => 7, + 3 => 7, + ), + 205 => + array( + 0 => + array( + 'h' => 0.988888888889, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 127, + 2 => 7, + 3 => 15, + ), + 206 => + array( + 0 => + array( + 'h' => 0.922222222222, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 127, + 2 => 7, + 3 => 63, + ), + 207 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 127, + 2 => 7, + 3 => 127, + ), + 208 => + array( + 0 => + array( + 'h' => 0.775362318841, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 127, + 2 => 7, + 3 => 191, + ), + 209 => + array( + 0 => + array( + 'h' => 0.747311827957, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 127, + 2 => 7, + 3 => 255, + ), + 210 => + array( + 0 => + array( + 'h' => 0.0196850393701, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 127, + 2 => 15, + 3 => 0, + ), + 211 => + array( + 0 => + array( + 'h' => 0.0111111111111, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 127, + 2 => 15, + 3 => 7, + ), + 212 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.788732394366, + 'l' => 0.278431372549, + ), + 1 => 127, + 2 => 15, + 3 => 15, + ), + 213 => + array( + 0 => + array( + 'h' => 0.928571428571, + 's' => 0.788732394366, + 'l' => 0.278431372549, + ), + 1 => 127, + 2 => 15, + 3 => 63, + ), + 214 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.788732394366, + 'l' => 0.278431372549, + ), + 1 => 127, + 2 => 15, + 3 => 127, + ), + 215 => + array( + 0 => + array( + 'h' => 0.772727272727, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 127, + 2 => 15, + 3 => 191, + ), + 216 => + array( + 0 => + array( + 'h' => 0.744444444444, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 127, + 2 => 15, + 3 => 255, + ), + 217 => + array( + 0 => + array( + 'h' => 0.0826771653543, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 127, + 2 => 63, + 3 => 0, + ), + 218 => + array( + 0 => + array( + 'h' => 0.0777777777778, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 127, + 2 => 63, + 3 => 7, + ), + 219 => + array( + 0 => + array( + 'h' => 0.0714285714286, + 's' => 0.788732394366, + 'l' => 0.278431372549, + ), + 1 => 127, + 2 => 63, + 3 => 15, + ), + 220 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.336842105263, + 'l' => 0.372549019608, + ), + 1 => 127, + 2 => 63, + 3 => 63, + ), + 221 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.336842105263, + 'l' => 0.372549019608, + ), + 1 => 127, + 2 => 63, + 3 => 127, + ), + 222 => + array( + 0 => + array( + 'h' => 0.75, + 's' => 0.503937007874, + 'l' => 0.498039215686, + ), + 1 => 127, + 2 => 63, + 3 => 191, + ), + 223 => + array( + 0 => + array( + 'h' => 0.722222222222, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 127, + 2 => 63, + 3 => 255, + ), + 224 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'l' => 0.249019607843, + ), + 1 => 127, + 2 => 127, + 3 => 0, + ), + 225 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.89552238806, + 'l' => 0.262745098039, + ), + 1 => 127, + 2 => 127, + 3 => 7, + ), + 226 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.788732394366, + 'l' => 0.278431372549, + ), + 1 => 127, + 2 => 127, + 3 => 15, + ), + 227 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.336842105263, + 'l' => 0.372549019608, + ), + 1 => 127, + 2 => 127, + 3 => 63, + ), + 228 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'l' => 0.498039215686, + ), + 1 => 127, + 2 => 127, + 3 => 127, + ), + 229 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.333333333333, + 'l' => 0.623529411765, + ), + 1 => 127, + 2 => 127, + 3 => 191, + ), + 230 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'l' => 0.749019607843, + ), + 1 => 127, + 2 => 127, + 3 => 255, + ), + 231 => + array( + 0 => + array( + 'h' => 0.222513089005, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 127, + 2 => 191, + 3 => 0, + ), + 232 => + array( + 0 => + array( + 'h' => 0.224637681159, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 127, + 2 => 191, + 3 => 7, + ), + 233 => + array( + 0 => + array( + 'h' => 0.227272727273, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 127, + 2 => 191, + 3 => 15, + ), + 234 => + array( + 0 => + array( + 'h' => 0.25, + 's' => 0.503937007874, + 'l' => 0.498039215686, + ), + 1 => 127, + 2 => 191, + 3 => 63, + ), + 235 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.333333333333, + 'l' => 0.623529411765, + ), + 1 => 127, + 2 => 191, + 3 => 127, + ), + 236 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.333333333333, + 'l' => 0.623529411765, + ), + 1 => 127, + 2 => 191, + 3 => 191, + ), + 237 => + array( + 0 => + array( + 'h' => 0.583333333333, + 's' => 1, + 'l' => 0.749019607843, + ), + 1 => 127, + 2 => 191, + 3 => 255, + ), + 238 => + array( + 0 => + array( + 'h' => 0.250326797386, + 's' => 1, + 'l' => 0.5, + ), + 1 => 127, + 2 => 255, + 3 => 0, + ), + 239 => + array( + 0 => + array( + 'h' => 0.252688172043, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 127, + 2 => 255, + 3 => 7, + ), + 240 => + array( + 0 => + array( + 'h' => 0.255555555556, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 127, + 2 => 255, + 3 => 15, + ), + 241 => + array( + 0 => + array( + 'h' => 0.277777777778, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 127, + 2 => 255, + 3 => 63, + ), + 242 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'l' => 0.749019607843, + ), + 1 => 127, + 2 => 255, + 3 => 127, + ), + 243 => + array( + 0 => + array( + 'h' => 0.416666666667, + 's' => 1, + 'l' => 0.749019607843, + ), + 1 => 127, + 2 => 255, + 3 => 191, + ), + 244 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'l' => 0.749019607843, + ), + 1 => 127, + 2 => 255, + 3 => 255, + ), + 245 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 191, + 2 => 0, + 3 => 0, + ), + 246 => + array( + 0 => + array( + 'h' => 0.993891797557, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 191, + 2 => 0, + 3 => 7, + ), + 247 => + array( + 0 => + array( + 'h' => 0.986910994764, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 191, + 2 => 0, + 3 => 15, + ), + 248 => + array( + 0 => + array( + 'h' => 0.94502617801, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 191, + 2 => 0, + 3 => 63, + ), + 249 => + array( + 0 => + array( + 'h' => 0.889179755672, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 191, + 2 => 0, + 3 => 127, + ), + 250 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 191, + 2 => 0, + 3 => 191, + ), + 251 => + array( + 0 => + array( + 'h' => 0.791503267974, + 's' => 1, + 'l' => 0.5, + ), + 1 => 191, + 2 => 0, + 3 => 255, + ), + 252 => + array( + 0 => + array( + 'h' => 0.00610820244328, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 191, + 2 => 7, + 3 => 0, + ), + 253 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 191, + 2 => 7, + 3 => 7, + ), + 254 => + array( + 0 => + array( + 'h' => 0.992753623188, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 191, + 2 => 7, + 3 => 15, + ), + 255 => + array( + 0 => + array( + 'h' => 0.949275362319, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 191, + 2 => 7, + 3 => 63, + ), + 256 => + array( + 0 => + array( + 'h' => 0.891304347826, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 191, + 2 => 7, + 3 => 127, + ), + 257 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 191, + 2 => 7, + 3 => 191, + ), + 258 => + array( + 0 => + array( + 'h' => 0.790322580645, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 191, + 2 => 7, + 3 => 255, + ), + 259 => + array( + 0 => + array( + 'h' => 0.0130890052356, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 191, + 2 => 15, + 3 => 0, + ), + 260 => + array( + 0 => + array( + 'h' => 0.00724637681159, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 191, + 2 => 15, + 3 => 7, + ), + 261 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 191, + 2 => 15, + 3 => 15, + ), + 262 => + array( + 0 => + array( + 'h' => 0.954545454545, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 191, + 2 => 15, + 3 => 63, + ), + 263 => + array( + 0 => + array( + 'h' => 0.893939393939, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 191, + 2 => 15, + 3 => 127, + ), + 264 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 191, + 2 => 15, + 3 => 191, + ), + 265 => + array( + 0 => + array( + 'h' => 0.788888888889, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 191, + 2 => 15, + 3 => 255, + ), + 266 => + array( + 0 => + array( + 'h' => 0.0549738219895, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 191, + 2 => 63, + 3 => 0, + ), + 267 => + array( + 0 => + array( + 'h' => 0.0507246376812, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 191, + 2 => 63, + 3 => 7, + ), + 268 => + array( + 0 => + array( + 'h' => 0.0454545454545, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 191, + 2 => 63, + 3 => 15, + ), + 269 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.503937007874, + 'l' => 0.498039215686, + ), + 1 => 191, + 2 => 63, + 3 => 63, + ), + 270 => + array( + 0 => + array( + 'h' => 0.916666666667, + 's' => 0.503937007874, + 'l' => 0.498039215686, + ), + 1 => 191, + 2 => 63, + 3 => 127, + ), + 271 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.503937007874, + 'l' => 0.498039215686, + ), + 1 => 191, + 2 => 63, + 3 => 191, + ), + 272 => + array( + 0 => + array( + 'h' => 0.777777777778, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 191, + 2 => 63, + 3 => 255, + ), + 273 => + array( + 0 => + array( + 'h' => 0.110820244328, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 191, + 2 => 127, + 3 => 0, + ), + 274 => + array( + 0 => + array( + 'h' => 0.108695652174, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 191, + 2 => 127, + 3 => 7, + ), + 275 => + array( + 0 => + array( + 'h' => 0.106060606061, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 191, + 2 => 127, + 3 => 15, + ), + 276 => + array( + 0 => + array( + 'h' => 0.0833333333333, + 's' => 0.503937007874, + 'l' => 0.498039215686, + ), + 1 => 191, + 2 => 127, + 3 => 63, + ), + 277 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.333333333333, + 'l' => 0.623529411765, + ), + 1 => 191, + 2 => 127, + 3 => 127, + ), + 278 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.333333333333, + 'l' => 0.623529411765, + ), + 1 => 191, + 2 => 127, + 3 => 191, + ), + 279 => + array( + 0 => + array( + 'h' => 0.75, + 's' => 1, + 'l' => 0.749019607843, + ), + 1 => 191, + 2 => 127, + 3 => 255, + ), + 280 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'l' => 0.374509803922, + ), + 1 => 191, + 2 => 191, + 3 => 0, + ), + 281 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.929292929293, + 'l' => 0.388235294118, + ), + 1 => 191, + 2 => 191, + 3 => 7, + ), + 282 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.854368932039, + 'l' => 0.403921568627, + ), + 1 => 191, + 2 => 191, + 3 => 15, + ), + 283 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.503937007874, + 'l' => 0.498039215686, + ), + 1 => 191, + 2 => 191, + 3 => 63, + ), + 284 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.333333333333, + 'l' => 0.623529411765, + ), + 1 => 191, + 2 => 191, + 3 => 127, + ), + 285 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'l' => 0.749019607843, + ), + 1 => 191, + 2 => 191, + 3 => 191, + ), + 286 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'l' => 0.874509803922, + ), + 1 => 191, + 2 => 191, + 3 => 255, + ), + 287 => + array( + 0 => + array( + 'h' => 0.208496732026, + 's' => 1, + 'l' => 0.5, + ), + 1 => 191, + 2 => 255, + 3 => 0, + ), + 288 => + array( + 0 => + array( + 'h' => 0.209677419355, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 191, + 2 => 255, + 3 => 7, + ), + 289 => + array( + 0 => + array( + 'h' => 0.211111111111, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 191, + 2 => 255, + 3 => 15, + ), + 290 => + array( + 0 => + array( + 'h' => 0.222222222222, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 191, + 2 => 255, + 3 => 63, + ), + 291 => + array( + 0 => + array( + 'h' => 0.25, + 's' => 1, + 'l' => 0.749019607843, + ), + 1 => 191, + 2 => 255, + 3 => 127, + ), + 292 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'l' => 0.874509803922, + ), + 1 => 191, + 2 => 255, + 3 => 191, + ), + 293 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'l' => 0.874509803922, + ), + 1 => 191, + 2 => 255, + 3 => 255, + ), + 294 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'l' => 0.5, + ), + 1 => 255, + 2 => 0, + 3 => 0, + ), + 295 => + array( + 0 => + array( + 'h' => 0.995424836601, + 's' => 1, + 'l' => 0.5, + ), + 1 => 255, + 2 => 0, + 3 => 7, + ), + 296 => + array( + 0 => + array( + 'h' => 0.990196078431, + 's' => 1, + 'l' => 0.5, + ), + 1 => 255, + 2 => 0, + 3 => 15, + ), + 297 => + array( + 0 => + array( + 'h' => 0.958823529412, + 's' => 1, + 'l' => 0.5, + ), + 1 => 255, + 2 => 0, + 3 => 63, + ), + 298 => + array( + 0 => + array( + 'h' => 0.916993464052, + 's' => 1, + 'l' => 0.5, + ), + 1 => 255, + 2 => 0, + 3 => 127, + ), + 299 => + array( + 0 => + array( + 'h' => 0.875163398693, + 's' => 1, + 'l' => 0.5, + ), + 1 => 255, + 2 => 0, + 3 => 191, + ), + 300 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'l' => 0.5, + ), + 1 => 255, + 2 => 0, + 3 => 255, + ), + 301 => + array( + 0 => + array( + 'h' => 0.00457516339869, + 's' => 1, + 'l' => 0.5, + ), + 1 => 255, + 2 => 7, + 3 => 0, + ), + 302 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 255, + 2 => 7, + 3 => 7, + ), + 303 => + array( + 0 => + array( + 'h' => 0.994623655914, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 255, + 2 => 7, + 3 => 15, + ), + 304 => + array( + 0 => + array( + 'h' => 0.962365591398, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 255, + 2 => 7, + 3 => 63, + ), + 305 => + array( + 0 => + array( + 'h' => 0.91935483871, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 255, + 2 => 7, + 3 => 127, + ), + 306 => + array( + 0 => + array( + 'h' => 0.876344086022, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 255, + 2 => 7, + 3 => 191, + ), + 307 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 255, + 2 => 7, + 3 => 255, + ), + 308 => + array( + 0 => + array( + 'h' => 0.00980392156863, + 's' => 1, + 'l' => 0.5, + ), + 1 => 255, + 2 => 15, + 3 => 0, + ), + 309 => + array( + 0 => + array( + 'h' => 0.00537634408602, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 255, + 2 => 15, + 3 => 7, + ), + 310 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 255, + 2 => 15, + 3 => 15, + ), + 311 => + array( + 0 => + array( + 'h' => 0.966666666667, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 255, + 2 => 15, + 3 => 63, + ), + 312 => + array( + 0 => + array( + 'h' => 0.922222222222, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 255, + 2 => 15, + 3 => 127, + ), + 313 => + array( + 0 => + array( + 'h' => 0.877777777778, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 255, + 2 => 15, + 3 => 191, + ), + 314 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 255, + 2 => 15, + 3 => 255, + ), + 315 => + array( + 0 => + array( + 'h' => 0.0411764705882, + 's' => 1, + 'l' => 0.5, + ), + 1 => 255, + 2 => 63, + 3 => 0, + ), + 316 => + array( + 0 => + array( + 'h' => 0.0376344086022, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 255, + 2 => 63, + 3 => 7, + ), + 317 => + array( + 0 => + array( + 'h' => 0.0333333333333, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 255, + 2 => 63, + 3 => 15, + ), + 318 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 255, + 2 => 63, + 3 => 63, + ), + 319 => + array( + 0 => + array( + 'h' => 0.944444444444, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 255, + 2 => 63, + 3 => 127, + ), + 320 => + array( + 0 => + array( + 'h' => 0.888888888889, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 255, + 2 => 63, + 3 => 191, + ), + 321 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 255, + 2 => 63, + 3 => 255, + ), + 322 => + array( + 0 => + array( + 'h' => 0.0830065359477, + 's' => 1, + 'l' => 0.5, + ), + 1 => 255, + 2 => 127, + 3 => 0, + ), + 323 => + array( + 0 => + array( + 'h' => 0.0806451612903, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 255, + 2 => 127, + 3 => 7, + ), + 324 => + array( + 0 => + array( + 'h' => 0.0777777777778, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 255, + 2 => 127, + 3 => 15, + ), + 325 => + array( + 0 => + array( + 'h' => 0.0555555555556, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 255, + 2 => 127, + 3 => 63, + ), + 326 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'l' => 0.749019607843, + ), + 1 => 255, + 2 => 127, + 3 => 127, + ), + 327 => + array( + 0 => + array( + 'h' => 0.916666666667, + 's' => 1, + 'l' => 0.749019607843, + ), + 1 => 255, + 2 => 127, + 3 => 191, + ), + 328 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'l' => 0.749019607843, + ), + 1 => 255, + 2 => 127, + 3 => 255, + ), + 329 => + array( + 0 => + array( + 'h' => 0.124836601307, + 's' => 1, + 'l' => 0.5, + ), + 1 => 255, + 2 => 191, + 3 => 0, + ), + 330 => + array( + 0 => + array( + 'h' => 0.123655913978, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 255, + 2 => 191, + 3 => 7, + ), + 331 => + array( + 0 => + array( + 'h' => 0.122222222222, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 255, + 2 => 191, + 3 => 15, + ), + 332 => + array( + 0 => + array( + 'h' => 0.111111111111, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 255, + 2 => 191, + 3 => 63, + ), + 333 => + array( + 0 => + array( + 'h' => 0.0833333333333, + 's' => 1, + 'l' => 0.749019607843, + ), + 1 => 255, + 2 => 191, + 3 => 127, + ), + 334 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'l' => 0.874509803922, + ), + 1 => 255, + 2 => 191, + 3 => 191, + ), + 335 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'l' => 0.874509803922, + ), + 1 => 255, + 2 => 191, + 3 => 255, + ), + 336 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'l' => 0.5, + ), + 1 => 255, + 2 => 255, + 3 => 0, + ), + 337 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'l' => 0.513725490196, + ), + 1 => 255, + 2 => 255, + 3 => 7, + ), + 338 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'l' => 0.529411764706, + ), + 1 => 255, + 2 => 255, + 3 => 15, + ), + 339 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'l' => 0.623529411765, + ), + 1 => 255, + 2 => 255, + 3 => 63, + ), + 340 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'l' => 0.749019607843, + ), + 1 => 255, + 2 => 255, + 3 => 127, + ), + 341 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'l' => 0.874509803922, + ), + 1 => 255, + 2 => 255, + 3 => 191, + ), + 342 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'l' => 1, + ), + 1 => 255, + 2 => 255, + 3 => 255, + ), + ); -?> \ No newline at end of file + return $essais; +} diff --git a/www/plugins-dist/filtres_images/tests/_couleur_rgb2hsv.php b/www/plugins-dist/filtres_images/tests/_couleur_rgb2hsv.php index 05857bf2..5abaa761 100644 --- a/www/plugins-dist/filtres_images/tests/_couleur_rgb2hsv.php +++ b/www/plugins-dist/filtres_images/tests/_couleur_rgb2hsv.php @@ -2,4173 +2,4149 @@ /** * Test unitaire de la fonction _couleur_rgb2hsv * du fichier filtres/images_lib.php - * - * genere automatiquement par TestBuilder - * le */ - $test = '_couleur_rgb2hsv'; - $remonte = "../"; - while (!is_dir($remonte."ecrire")) - $remonte = "../$remonte"; - require $remonte.'tests/test.inc'; - find_in_path("filtres/images_lib.php",'',true); +$test = '_couleur_rgb2hsv'; +$remonte = '../'; +while (!is_dir($remonte . 'ecrire')) { + $remonte = "../$remonte"; +} +require $remonte . 'tests/test.inc'; +find_in_path('filtres/images_lib.php', '', true); - // - // hop ! on y va - // - $err = tester_fun('_couleur_rgb2hsv', essais__couleur_rgb2hsv()); - - // si le tableau $err est pas vide ca va pas - if ($err) { - die ('
    ' . join('', $err) . '
    '); - } +// +// hop ! on y va +// +$err = tester_fun('_couleur_rgb2hsv', essais__couleur_rgb2hsv()); - echo "OK"; - +// si le tableau $err est pas vide ca va pas +if ($err) { + die('
    ' . join('', $err) . '
    '); +} - function essais__couleur_rgb2hsv(){ - $essais = array ( - 0 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'v' => 0, - ), - 1 => 0, - 2 => 0, - 3 => 0, - ), - 1 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'v' => 0.0274509803922, - ), - 1 => 0, - 2 => 0, - 3 => 7, - ), - 2 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'v' => 0.0588235294118, - ), - 1 => 0, - 2 => 0, - 3 => 15, - ), - 3 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 0, - 2 => 0, - 3 => 63, - ), - 4 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 0, - 2 => 0, - 3 => 127, - ), - 5 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 0, - 2 => 0, - 3 => 191, - ), - 6 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 1, - 'v' => 1, - ), - 1 => 0, - 2 => 0, - 3 => 255, - ), - 7 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'v' => 0.0274509803922, - ), - 1 => 0, - 2 => 7, - 3 => 0, - ), - 8 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'v' => 0.0274509803922, - ), - 1 => 0, - 2 => 7, - 3 => 7, - ), - 9 => - array ( - 0 => - array ( - 'h' => 0.588888888889, - 's' => 1, - 'v' => 0.0588235294118, - ), - 1 => 0, - 2 => 7, - 3 => 15, - ), - 10 => - array ( - 0 => - array ( - 'h' => 0.648148148148, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 0, - 2 => 7, - 3 => 63, - ), - 11 => - array ( - 0 => - array ( - 'h' => 0.657480314961, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 0, - 2 => 7, - 3 => 127, - ), - 12 => - array ( - 0 => - array ( - 'h' => 0.660558464223, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 0, - 2 => 7, - 3 => 191, - ), - 13 => - array ( - 0 => - array ( - 'h' => 0.662091503268, - 's' => 1, - 'v' => 1, - ), - 1 => 0, - 2 => 7, - 3 => 255, - ), - 14 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'v' => 0.0588235294118, - ), - 1 => 0, - 2 => 15, - 3 => 0, - ), - 15 => - array ( - 0 => - array ( - 'h' => 0.411111111111, - 's' => 1, - 'v' => 0.0588235294118, - ), - 1 => 0, - 2 => 15, - 3 => 7, - ), - 16 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'v' => 0.0588235294118, - ), - 1 => 0, - 2 => 15, - 3 => 15, - ), - 17 => - array ( - 0 => - array ( - 'h' => 0.626984126984, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 0, - 2 => 15, - 3 => 63, - ), - 18 => - array ( - 0 => - array ( - 'h' => 0.646981627297, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 0, - 2 => 15, - 3 => 127, - ), - 19 => - array ( - 0 => - array ( - 'h' => 0.653577661431, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 0, - 2 => 15, - 3 => 191, - ), - 20 => - array ( - 0 => - array ( - 'h' => 0.656862745098, - 's' => 1, - 'v' => 1, - ), - 1 => 0, - 2 => 15, - 3 => 255, - ), - 21 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 0, - 2 => 63, - 3 => 0, - ), - 22 => - array ( - 0 => - array ( - 'h' => 0.351851851852, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 0, - 2 => 63, - 3 => 7, - ), - 23 => - array ( - 0 => - array ( - 'h' => 0.373015873016, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 0, - 2 => 63, - 3 => 15, - ), - 24 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 0, - 2 => 63, - 3 => 63, - ), - 25 => - array ( - 0 => - array ( - 'h' => 0.583989501312, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 0, - 2 => 63, - 3 => 127, - ), - 26 => - array ( - 0 => - array ( - 'h' => 0.611692844677, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 0, - 2 => 63, - 3 => 191, - ), - 27 => - array ( - 0 => - array ( - 'h' => 0.625490196078, - 's' => 1, - 'v' => 1, - ), - 1 => 0, - 2 => 63, - 3 => 255, - ), - 28 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 0, - 2 => 127, - 3 => 0, - ), - 29 => - array ( - 0 => - array ( - 'h' => 0.342519685039, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 0, - 2 => 127, - 3 => 7, - ), - 30 => - array ( - 0 => - array ( - 'h' => 0.353018372703, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 0, - 2 => 127, - 3 => 15, - ), - 31 => - array ( - 0 => - array ( - 'h' => 0.416010498688, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 0, - 2 => 127, - 3 => 63, - ), - 32 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 0, - 2 => 127, - 3 => 127, - ), - 33 => - array ( - 0 => - array ( - 'h' => 0.555846422339, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 0, - 2 => 127, - 3 => 191, - ), - 34 => - array ( - 0 => - array ( - 'h' => 0.583660130719, - 's' => 1, - 'v' => 1, - ), - 1 => 0, - 2 => 127, - 3 => 255, - ), - 35 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 0, - 2 => 191, - 3 => 0, - ), - 36 => - array ( - 0 => - array ( - 'h' => 0.339441535777, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 0, - 2 => 191, - 3 => 7, - ), - 37 => - array ( - 0 => - array ( - 'h' => 0.346422338569, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 0, - 2 => 191, - 3 => 15, - ), - 38 => - array ( - 0 => - array ( - 'h' => 0.388307155323, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 0, - 2 => 191, - 3 => 63, - ), - 39 => - array ( - 0 => - array ( - 'h' => 0.444153577661, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 0, - 2 => 191, - 3 => 127, - ), - 40 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 0, - 2 => 191, - 3 => 191, - ), - 41 => - array ( - 0 => - array ( - 'h' => 0.541830065359, - 's' => 1, - 'v' => 1, - ), - 1 => 0, - 2 => 191, - 3 => 255, - ), - 42 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 1, - 'v' => 1, - ), - 1 => 0, - 2 => 255, - 3 => 0, - ), - 43 => - array ( - 0 => - array ( - 'h' => 0.337908496732, - 's' => 1, - 'v' => 1, - ), - 1 => 0, - 2 => 255, - 3 => 7, - ), - 44 => - array ( - 0 => - array ( - 'h' => 0.343137254902, - 's' => 1, - 'v' => 1, - ), - 1 => 0, - 2 => 255, - 3 => 15, - ), - 45 => - array ( - 0 => - array ( - 'h' => 0.374509803922, - 's' => 1, - 'v' => 1, - ), - 1 => 0, - 2 => 255, - 3 => 63, - ), - 46 => - array ( - 0 => - array ( - 'h' => 0.416339869281, - 's' => 1, - 'v' => 1, - ), - 1 => 0, - 2 => 255, - 3 => 127, - ), - 47 => - array ( - 0 => - array ( - 'h' => 0.458169934641, - 's' => 1, - 'v' => 1, - ), - 1 => 0, - 2 => 255, - 3 => 191, - ), - 48 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 1, - 'v' => 1, - ), - 1 => 0, - 2 => 255, - 3 => 255, - ), - 49 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'v' => 0.0274509803922, - ), - 1 => 7, - 2 => 0, - 3 => 0, - ), - 50 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'v' => 0.0274509803922, - ), - 1 => 7, - 2 => 0, - 3 => 7, - ), - 51 => - array ( - 0 => - array ( - 'h' => 0.744444444444, - 's' => 1, - 'v' => 0.0588235294118, - ), - 1 => 7, - 2 => 0, - 3 => 15, - ), - 52 => - array ( - 0 => - array ( - 'h' => 0.685185185185, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 7, - 2 => 0, - 3 => 63, - ), - 53 => - array ( - 0 => - array ( - 'h' => 0.675853018373, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 7, - 2 => 0, - 3 => 127, - ), - 54 => - array ( - 0 => - array ( - 'h' => 0.67277486911, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 7, - 2 => 0, - 3 => 191, - ), - 55 => - array ( - 0 => - array ( - 'h' => 0.671241830065, - 's' => 1, - 'v' => 1, - ), - 1 => 7, - 2 => 0, - 3 => 255, - ), - 56 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'v' => 0.0274509803922, - ), - 1 => 7, - 2 => 7, - 3 => 0, - ), - 57 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'v' => 0.0274509803922, - ), - 1 => 7, - 2 => 7, - 3 => 7, - ), - 58 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.533333333333, - 'v' => 0.0588235294118, - ), - 1 => 7, - 2 => 7, - 3 => 15, - ), - 59 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.888888888889, - 'v' => 0.247058823529, - ), - 1 => 7, - 2 => 7, - 3 => 63, - ), - 60 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 7, - 2 => 7, - 3 => 127, - ), - 61 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 7, - 2 => 7, - 3 => 191, - ), - 62 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 7, - 2 => 7, - 3 => 255, - ), - 63 => - array ( - 0 => - array ( - 'h' => 0.255555555556, - 's' => 1, - 'v' => 0.0588235294118, - ), - 1 => 7, - 2 => 15, - 3 => 0, - ), - 64 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.533333333333, - 'v' => 0.0588235294118, - ), - 1 => 7, - 2 => 15, - 3 => 7, - ), - 65 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.533333333333, - 'v' => 0.0588235294118, - ), - 1 => 7, - 2 => 15, - 3 => 15, - ), - 66 => - array ( - 0 => - array ( - 'h' => 0.642857142857, - 's' => 0.888888888889, - 'v' => 0.247058823529, - ), - 1 => 7, - 2 => 15, - 3 => 63, - ), - 67 => - array ( - 0 => - array ( - 'h' => 0.655555555556, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 7, - 2 => 15, - 3 => 127, - ), - 68 => - array ( - 0 => - array ( - 'h' => 0.659420289855, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 7, - 2 => 15, - 3 => 191, - ), - 69 => - array ( - 0 => - array ( - 'h' => 0.661290322581, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 7, - 2 => 15, - 3 => 255, - ), - 70 => - array ( - 0 => - array ( - 'h' => 0.314814814815, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 7, - 2 => 63, - 3 => 0, - ), - 71 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.888888888889, - 'v' => 0.247058823529, - ), - 1 => 7, - 2 => 63, - 3 => 7, - ), - 72 => - array ( - 0 => - array ( - 'h' => 0.357142857143, - 's' => 0.888888888889, - 'v' => 0.247058823529, - ), - 1 => 7, - 2 => 63, - 3 => 15, - ), - 73 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.888888888889, - 'v' => 0.247058823529, - ), - 1 => 7, - 2 => 63, - 3 => 63, - ), - 74 => - array ( - 0 => - array ( - 'h' => 0.588888888889, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 7, - 2 => 63, - 3 => 127, - ), - 75 => - array ( - 0 => - array ( - 'h' => 0.615942028986, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 7, - 2 => 63, - 3 => 191, - ), - 76 => - array ( - 0 => - array ( - 'h' => 0.629032258065, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 7, - 2 => 63, - 3 => 255, - ), - 77 => - array ( - 0 => - array ( - 'h' => 0.324146981627, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 7, - 2 => 127, - 3 => 0, - ), - 78 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 7, - 2 => 127, - 3 => 7, - ), - 79 => - array ( - 0 => - array ( - 'h' => 0.344444444444, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 7, - 2 => 127, - 3 => 15, - ), - 80 => - array ( - 0 => - array ( - 'h' => 0.411111111111, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 7, - 2 => 127, - 3 => 63, - ), - 81 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 7, - 2 => 127, - 3 => 127, - ), - 82 => - array ( - 0 => - array ( - 'h' => 0.557971014493, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 7, - 2 => 127, - 3 => 191, - ), - 83 => - array ( - 0 => - array ( - 'h' => 0.586021505376, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 7, - 2 => 127, - 3 => 255, - ), - 84 => - array ( - 0 => - array ( - 'h' => 0.32722513089, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 7, - 2 => 191, - 3 => 0, - ), - 85 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 7, - 2 => 191, - 3 => 7, - ), - 86 => - array ( - 0 => - array ( - 'h' => 0.340579710145, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 7, - 2 => 191, - 3 => 15, - ), - 87 => - array ( - 0 => - array ( - 'h' => 0.384057971014, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 7, - 2 => 191, - 3 => 63, - ), - 88 => - array ( - 0 => - array ( - 'h' => 0.442028985507, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 7, - 2 => 191, - 3 => 127, - ), - 89 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 7, - 2 => 191, - 3 => 191, - ), - 90 => - array ( - 0 => - array ( - 'h' => 0.543010752688, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 7, - 2 => 191, - 3 => 255, - ), - 91 => - array ( - 0 => - array ( - 'h' => 0.328758169935, - 's' => 1, - 'v' => 1, - ), - 1 => 7, - 2 => 255, - 3 => 0, - ), - 92 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 7, - 2 => 255, - 3 => 7, - ), - 93 => - array ( - 0 => - array ( - 'h' => 0.338709677419, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 7, - 2 => 255, - 3 => 15, - ), - 94 => - array ( - 0 => - array ( - 'h' => 0.370967741935, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 7, - 2 => 255, - 3 => 63, - ), - 95 => - array ( - 0 => - array ( - 'h' => 0.413978494624, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 7, - 2 => 255, - 3 => 127, - ), - 96 => - array ( - 0 => - array ( - 'h' => 0.456989247312, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 7, - 2 => 255, - 3 => 191, - ), - 97 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 7, - 2 => 255, - 3 => 255, - ), - 98 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'v' => 0.0588235294118, - ), - 1 => 15, - 2 => 0, - 3 => 0, - ), - 99 => - array ( - 0 => - array ( - 'h' => 0.922222222222, - 's' => 1, - 'v' => 0.0588235294118, - ), - 1 => 15, - 2 => 0, - 3 => 7, - ), - 100 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'v' => 0.0588235294118, - ), - 1 => 15, - 2 => 0, - 3 => 15, - ), - 101 => - array ( - 0 => - array ( - 'h' => 0.706349206349, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 15, - 2 => 0, - 3 => 63, - ), - 102 => - array ( - 0 => - array ( - 'h' => 0.686351706037, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 15, - 2 => 0, - 3 => 127, - ), - 103 => - array ( - 0 => - array ( - 'h' => 0.679755671902, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 15, - 2 => 0, - 3 => 191, - ), - 104 => - array ( - 0 => - array ( - 'h' => 0.676470588235, - 's' => 1, - 'v' => 1, - ), - 1 => 15, - 2 => 0, - 3 => 255, - ), - 105 => - array ( - 0 => - array ( - 'h' => 0.0777777777778, - 's' => 1, - 'v' => 0.0588235294118, - ), - 1 => 15, - 2 => 7, - 3 => 0, - ), - 106 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.533333333333, - 'v' => 0.0588235294118, - ), - 1 => 15, - 2 => 7, - 3 => 7, - ), - 107 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.533333333333, - 'v' => 0.0588235294118, - ), - 1 => 15, - 2 => 7, - 3 => 15, - ), - 108 => - array ( - 0 => - array ( - 'h' => 0.690476190476, - 's' => 0.888888888889, - 'v' => 0.247058823529, - ), - 1 => 15, - 2 => 7, - 3 => 63, - ), - 109 => - array ( - 0 => - array ( - 'h' => 0.677777777778, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 15, - 2 => 7, - 3 => 127, - ), - 110 => - array ( - 0 => - array ( - 'h' => 0.673913043478, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 15, - 2 => 7, - 3 => 191, - ), - 111 => - array ( - 0 => - array ( - 'h' => 0.672043010753, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 15, - 2 => 7, - 3 => 255, - ), - 112 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'v' => 0.0588235294118, - ), - 1 => 15, - 2 => 15, - 3 => 0, - ), - 113 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.533333333333, - 'v' => 0.0588235294118, - ), - 1 => 15, - 2 => 15, - 3 => 7, - ), - 114 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'v' => 0.0588235294118, - ), - 1 => 15, - 2 => 15, - 3 => 15, - ), - 115 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.761904761905, - 'v' => 0.247058823529, - ), - 1 => 15, - 2 => 15, - 3 => 63, - ), - 116 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.88188976378, - 'v' => 0.498039215686, - ), - 1 => 15, - 2 => 15, - 3 => 127, - ), - 117 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 15, - 2 => 15, - 3 => 191, - ), - 118 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 15, - 2 => 15, - 3 => 255, - ), - 119 => - array ( - 0 => - array ( - 'h' => 0.293650793651, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 15, - 2 => 63, - 3 => 0, - ), - 120 => - array ( - 0 => - array ( - 'h' => 0.309523809524, - 's' => 0.888888888889, - 'v' => 0.247058823529, - ), - 1 => 15, - 2 => 63, - 3 => 7, - ), - 121 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.761904761905, - 'v' => 0.247058823529, - ), - 1 => 15, - 2 => 63, - 3 => 15, - ), - 122 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.761904761905, - 'v' => 0.247058823529, - ), - 1 => 15, - 2 => 63, - 3 => 63, - ), - 123 => - array ( - 0 => - array ( - 'h' => 0.595238095238, - 's' => 0.88188976378, - 'v' => 0.498039215686, - ), - 1 => 15, - 2 => 63, - 3 => 127, - ), - 124 => - array ( - 0 => - array ( - 'h' => 0.621212121212, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 15, - 2 => 63, - 3 => 191, - ), - 125 => - array ( - 0 => - array ( - 'h' => 0.633333333333, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 15, - 2 => 63, - 3 => 255, - ), - 126 => - array ( - 0 => - array ( - 'h' => 0.313648293963, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 15, - 2 => 127, - 3 => 0, - ), - 127 => - array ( - 0 => - array ( - 'h' => 0.322222222222, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 15, - 2 => 127, - 3 => 7, - ), - 128 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.88188976378, - 'v' => 0.498039215686, - ), - 1 => 15, - 2 => 127, - 3 => 15, - ), - 129 => - array ( - 0 => - array ( - 'h' => 0.404761904762, - 's' => 0.88188976378, - 'v' => 0.498039215686, - ), - 1 => 15, - 2 => 127, - 3 => 63, - ), - 130 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.88188976378, - 'v' => 0.498039215686, - ), - 1 => 15, - 2 => 127, - 3 => 127, - ), - 131 => - array ( - 0 => - array ( - 'h' => 0.560606060606, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 15, - 2 => 127, - 3 => 191, - ), - 132 => - array ( - 0 => - array ( - 'h' => 0.588888888889, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 15, - 2 => 127, - 3 => 255, - ), - 133 => - array ( - 0 => - array ( - 'h' => 0.320244328098, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 15, - 2 => 191, - 3 => 0, - ), - 134 => - array ( - 0 => - array ( - 'h' => 0.326086956522, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 15, - 2 => 191, - 3 => 7, - ), - 135 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 15, - 2 => 191, - 3 => 15, - ), - 136 => - array ( - 0 => - array ( - 'h' => 0.378787878788, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 15, - 2 => 191, - 3 => 63, - ), - 137 => - array ( - 0 => - array ( - 'h' => 0.439393939394, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 15, - 2 => 191, - 3 => 127, - ), - 138 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 15, - 2 => 191, - 3 => 191, - ), - 139 => - array ( - 0 => - array ( - 'h' => 0.544444444444, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 15, - 2 => 191, - 3 => 255, - ), - 140 => - array ( - 0 => - array ( - 'h' => 0.323529411765, - 's' => 1, - 'v' => 1, - ), - 1 => 15, - 2 => 255, - 3 => 0, - ), - 141 => - array ( - 0 => - array ( - 'h' => 0.327956989247, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 15, - 2 => 255, - 3 => 7, - ), - 142 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 15, - 2 => 255, - 3 => 15, - ), - 143 => - array ( - 0 => - array ( - 'h' => 0.366666666667, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 15, - 2 => 255, - 3 => 63, - ), - 144 => - array ( - 0 => - array ( - 'h' => 0.411111111111, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 15, - 2 => 255, - 3 => 127, - ), - 145 => - array ( - 0 => - array ( - 'h' => 0.455555555556, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 15, - 2 => 255, - 3 => 191, - ), - 146 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 15, - 2 => 255, - 3 => 255, - ), - 147 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 0, - 3 => 0, - ), - 148 => - array ( - 0 => - array ( - 'h' => 0.981481481481, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 0, - 3 => 7, - ), - 149 => - array ( - 0 => - array ( - 'h' => 0.960317460317, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 0, - 3 => 15, - ), - 150 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 0, - 3 => 63, - ), - 151 => - array ( - 0 => - array ( - 'h' => 0.749343832021, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 63, - 2 => 0, - 3 => 127, - ), - 152 => - array ( - 0 => - array ( - 'h' => 0.721640488656, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 63, - 2 => 0, - 3 => 191, - ), - 153 => - array ( - 0 => - array ( - 'h' => 0.707843137255, - 's' => 1, - 'v' => 1, - ), - 1 => 63, - 2 => 0, - 3 => 255, - ), - 154 => - array ( - 0 => - array ( - 'h' => 0.0185185185185, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 7, - 3 => 0, - ), - 155 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.888888888889, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 7, - 3 => 7, - ), - 156 => - array ( - 0 => - array ( - 'h' => 0.97619047619, - 's' => 0.888888888889, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 7, - 3 => 15, - ), - 157 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.888888888889, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 7, - 3 => 63, - ), - 158 => - array ( - 0 => - array ( - 'h' => 0.744444444444, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 63, - 2 => 7, - 3 => 127, - ), - 159 => - array ( - 0 => - array ( - 'h' => 0.717391304348, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 63, - 2 => 7, - 3 => 191, - ), - 160 => - array ( - 0 => - array ( - 'h' => 0.704301075269, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 63, - 2 => 7, - 3 => 255, - ), - 161 => - array ( - 0 => - array ( - 'h' => 0.0396825396825, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 15, - 3 => 0, - ), - 162 => - array ( - 0 => - array ( - 'h' => 0.0238095238095, - 's' => 0.888888888889, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 15, - 3 => 7, - ), - 163 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.761904761905, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 15, - 3 => 15, - ), - 164 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.761904761905, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 15, - 3 => 63, - ), - 165 => - array ( - 0 => - array ( - 'h' => 0.738095238095, - 's' => 0.88188976378, - 'v' => 0.498039215686, - ), - 1 => 63, - 2 => 15, - 3 => 127, - ), - 166 => - array ( - 0 => - array ( - 'h' => 0.712121212121, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 63, - 2 => 15, - 3 => 191, - ), - 167 => - array ( - 0 => - array ( - 'h' => 0.7, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 63, - 2 => 15, - 3 => 255, - ), - 168 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 63, - 3 => 0, - ), - 169 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.888888888889, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 63, - 3 => 7, - ), - 170 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.761904761905, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 63, - 3 => 15, - ), - 171 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'v' => 0.247058823529, - ), - 1 => 63, - 2 => 63, - 3 => 63, - ), - 172 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.503937007874, - 'v' => 0.498039215686, - ), - 1 => 63, - 2 => 63, - 3 => 127, - ), - 173 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.670157068063, - 'v' => 0.749019607843, - ), - 1 => 63, - 2 => 63, - 3 => 191, - ), - 174 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 63, - 2 => 63, - 3 => 255, - ), - 175 => - array ( - 0 => - array ( - 'h' => 0.250656167979, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 63, - 2 => 127, - 3 => 0, - ), - 176 => - array ( - 0 => - array ( - 'h' => 0.255555555556, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 63, - 2 => 127, - 3 => 7, - ), - 177 => - array ( - 0 => - array ( - 'h' => 0.261904761905, - 's' => 0.88188976378, - 'v' => 0.498039215686, - ), - 1 => 63, - 2 => 127, - 3 => 15, - ), - 178 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.503937007874, - 'v' => 0.498039215686, - ), - 1 => 63, - 2 => 127, - 3 => 63, - ), - 179 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.503937007874, - 'v' => 0.498039215686, - ), - 1 => 63, - 2 => 127, - 3 => 127, - ), - 180 => - array ( - 0 => - array ( - 'h' => 0.583333333333, - 's' => 0.670157068063, - 'v' => 0.749019607843, - ), - 1 => 63, - 2 => 127, - 3 => 191, - ), - 181 => - array ( - 0 => - array ( - 'h' => 0.611111111111, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 63, - 2 => 127, - 3 => 255, - ), - 182 => - array ( - 0 => - array ( - 'h' => 0.278359511344, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 63, - 2 => 191, - 3 => 0, - ), - 183 => - array ( - 0 => - array ( - 'h' => 0.282608695652, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 63, - 2 => 191, - 3 => 7, - ), - 184 => - array ( - 0 => - array ( - 'h' => 0.287878787879, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 63, - 2 => 191, - 3 => 15, - ), - 185 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.670157068063, - 'v' => 0.749019607843, - ), - 1 => 63, - 2 => 191, - 3 => 63, - ), - 186 => - array ( - 0 => - array ( - 'h' => 0.416666666667, - 's' => 0.670157068063, - 'v' => 0.749019607843, - ), - 1 => 63, - 2 => 191, - 3 => 127, - ), - 187 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.670157068063, - 'v' => 0.749019607843, - ), - 1 => 63, - 2 => 191, - 3 => 191, - ), - 188 => - array ( - 0 => - array ( - 'h' => 0.555555555556, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 63, - 2 => 191, - 3 => 255, - ), - 189 => - array ( - 0 => - array ( - 'h' => 0.292156862745, - 's' => 1, - 'v' => 1, - ), - 1 => 63, - 2 => 255, - 3 => 0, - ), - 190 => - array ( - 0 => - array ( - 'h' => 0.295698924731, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 63, - 2 => 255, - 3 => 7, - ), - 191 => - array ( - 0 => - array ( - 'h' => 0.3, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 63, - 2 => 255, - 3 => 15, - ), - 192 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 63, - 2 => 255, - 3 => 63, - ), - 193 => - array ( - 0 => - array ( - 'h' => 0.388888888889, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 63, - 2 => 255, - 3 => 127, - ), - 194 => - array ( - 0 => - array ( - 'h' => 0.444444444444, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 63, - 2 => 255, - 3 => 191, - ), - 195 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 63, - 2 => 255, - 3 => 255, - ), - 196 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 0, - 3 => 0, - ), - 197 => - array ( - 0 => - array ( - 'h' => 0.990813648294, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 0, - 3 => 7, - ), - 198 => - array ( - 0 => - array ( - 'h' => 0.98031496063, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 0, - 3 => 15, - ), - 199 => - array ( - 0 => - array ( - 'h' => 0.917322834646, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 0, - 3 => 63, - ), - 200 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 0, - 3 => 127, - ), - 201 => - array ( - 0 => - array ( - 'h' => 0.777486910995, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 127, - 2 => 0, - 3 => 191, - ), - 202 => - array ( - 0 => - array ( - 'h' => 0.749673202614, - 's' => 1, - 'v' => 1, - ), - 1 => 127, - 2 => 0, - 3 => 255, - ), - 203 => - array ( - 0 => - array ( - 'h' => 0.00918635170604, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 7, - 3 => 0, - ), - 204 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 7, - 3 => 7, - ), - 205 => - array ( - 0 => - array ( - 'h' => 0.988888888889, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 7, - 3 => 15, - ), - 206 => - array ( - 0 => - array ( - 'h' => 0.922222222222, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 7, - 3 => 63, - ), - 207 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 7, - 3 => 127, - ), - 208 => - array ( - 0 => - array ( - 'h' => 0.775362318841, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 127, - 2 => 7, - 3 => 191, - ), - 209 => - array ( - 0 => - array ( - 'h' => 0.747311827957, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 127, - 2 => 7, - 3 => 255, - ), - 210 => - array ( - 0 => - array ( - 'h' => 0.0196850393701, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 15, - 3 => 0, - ), - 211 => - array ( - 0 => - array ( - 'h' => 0.0111111111111, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 15, - 3 => 7, - ), - 212 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.88188976378, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 15, - 3 => 15, - ), - 213 => - array ( - 0 => - array ( - 'h' => 0.928571428571, - 's' => 0.88188976378, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 15, - 3 => 63, - ), - 214 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.88188976378, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 15, - 3 => 127, - ), - 215 => - array ( - 0 => - array ( - 'h' => 0.772727272727, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 127, - 2 => 15, - 3 => 191, - ), - 216 => - array ( - 0 => - array ( - 'h' => 0.744444444444, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 127, - 2 => 15, - 3 => 255, - ), - 217 => - array ( - 0 => - array ( - 'h' => 0.0826771653543, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 63, - 3 => 0, - ), - 218 => - array ( - 0 => - array ( - 'h' => 0.0777777777778, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 63, - 3 => 7, - ), - 219 => - array ( - 0 => - array ( - 'h' => 0.0714285714286, - 's' => 0.88188976378, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 63, - 3 => 15, - ), - 220 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.503937007874, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 63, - 3 => 63, - ), - 221 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.503937007874, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 63, - 3 => 127, - ), - 222 => - array ( - 0 => - array ( - 'h' => 0.75, - 's' => 0.670157068063, - 'v' => 0.749019607843, - ), - 1 => 127, - 2 => 63, - 3 => 191, - ), - 223 => - array ( - 0 => - array ( - 'h' => 0.722222222222, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 127, - 2 => 63, - 3 => 255, - ), - 224 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 127, - 3 => 0, - ), - 225 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.944881889764, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 127, - 3 => 7, - ), - 226 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.88188976378, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 127, - 3 => 15, - ), - 227 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.503937007874, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 127, - 3 => 63, - ), - 228 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'v' => 0.498039215686, - ), - 1 => 127, - 2 => 127, - 3 => 127, - ), - 229 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.335078534031, - 'v' => 0.749019607843, - ), - 1 => 127, - 2 => 127, - 3 => 191, - ), - 230 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.501960784314, - 'v' => 1, - ), - 1 => 127, - 2 => 127, - 3 => 255, - ), - 231 => - array ( - 0 => - array ( - 'h' => 0.222513089005, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 127, - 2 => 191, - 3 => 0, - ), - 232 => - array ( - 0 => - array ( - 'h' => 0.224637681159, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 127, - 2 => 191, - 3 => 7, - ), - 233 => - array ( - 0 => - array ( - 'h' => 0.227272727273, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 127, - 2 => 191, - 3 => 15, - ), - 234 => - array ( - 0 => - array ( - 'h' => 0.25, - 's' => 0.670157068063, - 'v' => 0.749019607843, - ), - 1 => 127, - 2 => 191, - 3 => 63, - ), - 235 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.335078534031, - 'v' => 0.749019607843, - ), - 1 => 127, - 2 => 191, - 3 => 127, - ), - 236 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.335078534031, - 'v' => 0.749019607843, - ), - 1 => 127, - 2 => 191, - 3 => 191, - ), - 237 => - array ( - 0 => - array ( - 'h' => 0.583333333333, - 's' => 0.501960784314, - 'v' => 1, - ), - 1 => 127, - 2 => 191, - 3 => 255, - ), - 238 => - array ( - 0 => - array ( - 'h' => 0.250326797386, - 's' => 1, - 'v' => 1, - ), - 1 => 127, - 2 => 255, - 3 => 0, - ), - 239 => - array ( - 0 => - array ( - 'h' => 0.252688172043, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 127, - 2 => 255, - 3 => 7, - ), - 240 => - array ( - 0 => - array ( - 'h' => 0.255555555556, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 127, - 2 => 255, - 3 => 15, - ), - 241 => - array ( - 0 => - array ( - 'h' => 0.277777777778, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 127, - 2 => 255, - 3 => 63, - ), - 242 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.501960784314, - 'v' => 1, - ), - 1 => 127, - 2 => 255, - 3 => 127, - ), - 243 => - array ( - 0 => - array ( - 'h' => 0.416666666667, - 's' => 0.501960784314, - 'v' => 1, - ), - 1 => 127, - 2 => 255, - 3 => 191, - ), - 244 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.501960784314, - 'v' => 1, - ), - 1 => 127, - 2 => 255, - 3 => 255, - ), - 245 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 0, - 3 => 0, - ), - 246 => - array ( - 0 => - array ( - 'h' => 0.993891797557, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 0, - 3 => 7, - ), - 247 => - array ( - 0 => - array ( - 'h' => 0.986910994764, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 0, - 3 => 15, - ), - 248 => - array ( - 0 => - array ( - 'h' => 0.94502617801, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 0, - 3 => 63, - ), - 249 => - array ( - 0 => - array ( - 'h' => 0.889179755672, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 0, - 3 => 127, - ), - 250 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 0, - 3 => 191, - ), - 251 => - array ( - 0 => - array ( - 'h' => 0.791503267974, - 's' => 1, - 'v' => 1, - ), - 1 => 191, - 2 => 0, - 3 => 255, - ), - 252 => - array ( - 0 => - array ( - 'h' => 0.00610820244328, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 7, - 3 => 0, - ), - 253 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 7, - 3 => 7, - ), - 254 => - array ( - 0 => - array ( - 'h' => 0.992753623188, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 7, - 3 => 15, - ), - 255 => - array ( - 0 => - array ( - 'h' => 0.949275362319, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 7, - 3 => 63, - ), - 256 => - array ( - 0 => - array ( - 'h' => 0.891304347826, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 7, - 3 => 127, - ), - 257 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 7, - 3 => 191, - ), - 258 => - array ( - 0 => - array ( - 'h' => 0.790322580645, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 191, - 2 => 7, - 3 => 255, - ), - 259 => - array ( - 0 => - array ( - 'h' => 0.0130890052356, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 15, - 3 => 0, - ), - 260 => - array ( - 0 => - array ( - 'h' => 0.00724637681159, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 15, - 3 => 7, - ), - 261 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 15, - 3 => 15, - ), - 262 => - array ( - 0 => - array ( - 'h' => 0.954545454545, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 15, - 3 => 63, - ), - 263 => - array ( - 0 => - array ( - 'h' => 0.893939393939, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 15, - 3 => 127, - ), - 264 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 15, - 3 => 191, - ), - 265 => - array ( - 0 => - array ( - 'h' => 0.788888888889, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 191, - 2 => 15, - 3 => 255, - ), - 266 => - array ( - 0 => - array ( - 'h' => 0.0549738219895, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 63, - 3 => 0, - ), - 267 => - array ( - 0 => - array ( - 'h' => 0.0507246376812, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 63, - 3 => 7, - ), - 268 => - array ( - 0 => - array ( - 'h' => 0.0454545454545, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 63, - 3 => 15, - ), - 269 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.670157068063, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 63, - 3 => 63, - ), - 270 => - array ( - 0 => - array ( - 'h' => 0.916666666667, - 's' => 0.670157068063, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 63, - 3 => 127, - ), - 271 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.670157068063, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 63, - 3 => 191, - ), - 272 => - array ( - 0 => - array ( - 'h' => 0.777777777778, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 191, - 2 => 63, - 3 => 255, - ), - 273 => - array ( - 0 => - array ( - 'h' => 0.110820244328, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 127, - 3 => 0, - ), - 274 => - array ( - 0 => - array ( - 'h' => 0.108695652174, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 127, - 3 => 7, - ), - 275 => - array ( - 0 => - array ( - 'h' => 0.106060606061, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 127, - 3 => 15, - ), - 276 => - array ( - 0 => - array ( - 'h' => 0.0833333333333, - 's' => 0.670157068063, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 127, - 3 => 63, - ), - 277 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.335078534031, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 127, - 3 => 127, - ), - 278 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.335078534031, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 127, - 3 => 191, - ), - 279 => - array ( - 0 => - array ( - 'h' => 0.75, - 's' => 0.501960784314, - 'v' => 1, - ), - 1 => 191, - 2 => 127, - 3 => 255, - ), - 280 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 191, - 3 => 0, - ), - 281 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.96335078534, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 191, - 3 => 7, - ), - 282 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.921465968586, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 191, - 3 => 15, - ), - 283 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.670157068063, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 191, - 3 => 63, - ), - 284 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.335078534031, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 191, - 3 => 127, - ), - 285 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'v' => 0.749019607843, - ), - 1 => 191, - 2 => 191, - 3 => 191, - ), - 286 => - array ( - 0 => - array ( - 'h' => 0.666666666667, - 's' => 0.250980392157, - 'v' => 1, - ), - 1 => 191, - 2 => 191, - 3 => 255, - ), - 287 => - array ( - 0 => - array ( - 'h' => 0.208496732026, - 's' => 1, - 'v' => 1, - ), - 1 => 191, - 2 => 255, - 3 => 0, - ), - 288 => - array ( - 0 => - array ( - 'h' => 0.209677419355, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 191, - 2 => 255, - 3 => 7, - ), - 289 => - array ( - 0 => - array ( - 'h' => 0.211111111111, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 191, - 2 => 255, - 3 => 15, - ), - 290 => - array ( - 0 => - array ( - 'h' => 0.222222222222, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 191, - 2 => 255, - 3 => 63, - ), - 291 => - array ( - 0 => - array ( - 'h' => 0.25, - 's' => 0.501960784314, - 'v' => 1, - ), - 1 => 191, - 2 => 255, - 3 => 127, - ), - 292 => - array ( - 0 => - array ( - 'h' => 0.333333333333, - 's' => 0.250980392157, - 'v' => 1, - ), - 1 => 191, - 2 => 255, - 3 => 191, - ), - 293 => - array ( - 0 => - array ( - 'h' => 0.5, - 's' => 0.250980392157, - 'v' => 1, - ), - 1 => 191, - 2 => 255, - 3 => 255, - ), - 294 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 1, - 'v' => 1, - ), - 1 => 255, - 2 => 0, - 3 => 0, - ), - 295 => - array ( - 0 => - array ( - 'h' => 0.995424836601, - 's' => 1, - 'v' => 1, - ), - 1 => 255, - 2 => 0, - 3 => 7, - ), - 296 => - array ( - 0 => - array ( - 'h' => 0.990196078431, - 's' => 1, - 'v' => 1, - ), - 1 => 255, - 2 => 0, - 3 => 15, - ), - 297 => - array ( - 0 => - array ( - 'h' => 0.958823529412, - 's' => 1, - 'v' => 1, - ), - 1 => 255, - 2 => 0, - 3 => 63, - ), - 298 => - array ( - 0 => - array ( - 'h' => 0.916993464052, - 's' => 1, - 'v' => 1, - ), - 1 => 255, - 2 => 0, - 3 => 127, - ), - 299 => - array ( - 0 => - array ( - 'h' => 0.875163398693, - 's' => 1, - 'v' => 1, - ), - 1 => 255, - 2 => 0, - 3 => 191, - ), - 300 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 1, - 'v' => 1, - ), - 1 => 255, - 2 => 0, - 3 => 255, - ), - 301 => - array ( - 0 => - array ( - 'h' => 0.00457516339869, - 's' => 1, - 'v' => 1, - ), - 1 => 255, - 2 => 7, - 3 => 0, - ), - 302 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 255, - 2 => 7, - 3 => 7, - ), - 303 => - array ( - 0 => - array ( - 'h' => 0.994623655914, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 255, - 2 => 7, - 3 => 15, - ), - 304 => - array ( - 0 => - array ( - 'h' => 0.962365591398, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 255, - 2 => 7, - 3 => 63, - ), - 305 => - array ( - 0 => - array ( - 'h' => 0.91935483871, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 255, - 2 => 7, - 3 => 127, - ), - 306 => - array ( - 0 => - array ( - 'h' => 0.876344086022, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 255, - 2 => 7, - 3 => 191, - ), - 307 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 255, - 2 => 7, - 3 => 255, - ), - 308 => - array ( - 0 => - array ( - 'h' => 0.00980392156863, - 's' => 1, - 'v' => 1, - ), - 1 => 255, - 2 => 15, - 3 => 0, - ), - 309 => - array ( - 0 => - array ( - 'h' => 0.00537634408602, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 255, - 2 => 15, - 3 => 7, - ), - 310 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 255, - 2 => 15, - 3 => 15, - ), - 311 => - array ( - 0 => - array ( - 'h' => 0.966666666667, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 255, - 2 => 15, - 3 => 63, - ), - 312 => - array ( - 0 => - array ( - 'h' => 0.922222222222, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 255, - 2 => 15, - 3 => 127, - ), - 313 => - array ( - 0 => - array ( - 'h' => 0.877777777778, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 255, - 2 => 15, - 3 => 191, - ), - 314 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 255, - 2 => 15, - 3 => 255, - ), - 315 => - array ( - 0 => - array ( - 'h' => 0.0411764705882, - 's' => 1, - 'v' => 1, - ), - 1 => 255, - 2 => 63, - 3 => 0, - ), - 316 => - array ( - 0 => - array ( - 'h' => 0.0376344086022, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 255, - 2 => 63, - 3 => 7, - ), - 317 => - array ( - 0 => - array ( - 'h' => 0.0333333333333, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 255, - 2 => 63, - 3 => 15, - ), - 318 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 255, - 2 => 63, - 3 => 63, - ), - 319 => - array ( - 0 => - array ( - 'h' => 0.944444444444, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 255, - 2 => 63, - 3 => 127, - ), - 320 => - array ( - 0 => - array ( - 'h' => 0.888888888889, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 255, - 2 => 63, - 3 => 191, - ), - 321 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 255, - 2 => 63, - 3 => 255, - ), - 322 => - array ( - 0 => - array ( - 'h' => 0.0830065359477, - 's' => 1, - 'v' => 1, - ), - 1 => 255, - 2 => 127, - 3 => 0, - ), - 323 => - array ( - 0 => - array ( - 'h' => 0.0806451612903, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 255, - 2 => 127, - 3 => 7, - ), - 324 => - array ( - 0 => - array ( - 'h' => 0.0777777777778, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 255, - 2 => 127, - 3 => 15, - ), - 325 => - array ( - 0 => - array ( - 'h' => 0.0555555555556, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 255, - 2 => 127, - 3 => 63, - ), - 326 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.501960784314, - 'v' => 1, - ), - 1 => 255, - 2 => 127, - 3 => 127, - ), - 327 => - array ( - 0 => - array ( - 'h' => 0.916666666667, - 's' => 0.501960784314, - 'v' => 1, - ), - 1 => 255, - 2 => 127, - 3 => 191, - ), - 328 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.501960784314, - 'v' => 1, - ), - 1 => 255, - 2 => 127, - 3 => 255, - ), - 329 => - array ( - 0 => - array ( - 'h' => 0.124836601307, - 's' => 1, - 'v' => 1, - ), - 1 => 255, - 2 => 191, - 3 => 0, - ), - 330 => - array ( - 0 => - array ( - 'h' => 0.123655913978, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 255, - 2 => 191, - 3 => 7, - ), - 331 => - array ( - 0 => - array ( - 'h' => 0.122222222222, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 255, - 2 => 191, - 3 => 15, - ), - 332 => - array ( - 0 => - array ( - 'h' => 0.111111111111, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 255, - 2 => 191, - 3 => 63, - ), - 333 => - array ( - 0 => - array ( - 'h' => 0.0833333333333, - 's' => 0.501960784314, - 'v' => 1, - ), - 1 => 255, - 2 => 191, - 3 => 127, - ), - 334 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0.250980392157, - 'v' => 1, - ), - 1 => 255, - 2 => 191, - 3 => 191, - ), - 335 => - array ( - 0 => - array ( - 'h' => 0.833333333333, - 's' => 0.250980392157, - 'v' => 1, - ), - 1 => 255, - 2 => 191, - 3 => 255, - ), - 336 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 1, - 'v' => 1, - ), - 1 => 255, - 2 => 255, - 3 => 0, - ), - 337 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.972549019608, - 'v' => 1, - ), - 1 => 255, - 2 => 255, - 3 => 7, - ), - 338 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.941176470588, - 'v' => 1, - ), - 1 => 255, - 2 => 255, - 3 => 15, - ), - 339 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.752941176471, - 'v' => 1, - ), - 1 => 255, - 2 => 255, - 3 => 63, - ), - 340 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.501960784314, - 'v' => 1, - ), - 1 => 255, - 2 => 255, - 3 => 127, - ), - 341 => - array ( - 0 => - array ( - 'h' => 0.166666666667, - 's' => 0.250980392157, - 'v' => 1, - ), - 1 => 255, - 2 => 255, - 3 => 191, - ), - 342 => - array ( - 0 => - array ( - 'h' => 0, - 's' => 0, - 'v' => 1, - ), - 1 => 255, - 2 => 255, - 3 => 255, - ), -); - return $essais; - } +echo 'OK'; +function essais__couleur_rgb2hsv() { + $essais = array( + 0 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'v' => 0, + ), + 1 => 0, + 2 => 0, + 3 => 0, + ), + 1 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'v' => 0.0274509803922, + ), + 1 => 0, + 2 => 0, + 3 => 7, + ), + 2 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'v' => 0.0588235294118, + ), + 1 => 0, + 2 => 0, + 3 => 15, + ), + 3 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 0, + 2 => 0, + 3 => 63, + ), + 4 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 0, + 2 => 0, + 3 => 127, + ), + 5 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 0, + 2 => 0, + 3 => 191, + ), + 6 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 1, + 'v' => 1, + ), + 1 => 0, + 2 => 0, + 3 => 255, + ), + 7 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'v' => 0.0274509803922, + ), + 1 => 0, + 2 => 7, + 3 => 0, + ), + 8 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'v' => 0.0274509803922, + ), + 1 => 0, + 2 => 7, + 3 => 7, + ), + 9 => + array( + 0 => + array( + 'h' => 0.588888888889, + 's' => 1, + 'v' => 0.0588235294118, + ), + 1 => 0, + 2 => 7, + 3 => 15, + ), + 10 => + array( + 0 => + array( + 'h' => 0.648148148148, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 0, + 2 => 7, + 3 => 63, + ), + 11 => + array( + 0 => + array( + 'h' => 0.657480314961, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 0, + 2 => 7, + 3 => 127, + ), + 12 => + array( + 0 => + array( + 'h' => 0.660558464223, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 0, + 2 => 7, + 3 => 191, + ), + 13 => + array( + 0 => + array( + 'h' => 0.662091503268, + 's' => 1, + 'v' => 1, + ), + 1 => 0, + 2 => 7, + 3 => 255, + ), + 14 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'v' => 0.0588235294118, + ), + 1 => 0, + 2 => 15, + 3 => 0, + ), + 15 => + array( + 0 => + array( + 'h' => 0.411111111111, + 's' => 1, + 'v' => 0.0588235294118, + ), + 1 => 0, + 2 => 15, + 3 => 7, + ), + 16 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'v' => 0.0588235294118, + ), + 1 => 0, + 2 => 15, + 3 => 15, + ), + 17 => + array( + 0 => + array( + 'h' => 0.626984126984, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 0, + 2 => 15, + 3 => 63, + ), + 18 => + array( + 0 => + array( + 'h' => 0.646981627297, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 0, + 2 => 15, + 3 => 127, + ), + 19 => + array( + 0 => + array( + 'h' => 0.653577661431, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 0, + 2 => 15, + 3 => 191, + ), + 20 => + array( + 0 => + array( + 'h' => 0.656862745098, + 's' => 1, + 'v' => 1, + ), + 1 => 0, + 2 => 15, + 3 => 255, + ), + 21 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 0, + 2 => 63, + 3 => 0, + ), + 22 => + array( + 0 => + array( + 'h' => 0.351851851852, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 0, + 2 => 63, + 3 => 7, + ), + 23 => + array( + 0 => + array( + 'h' => 0.373015873016, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 0, + 2 => 63, + 3 => 15, + ), + 24 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 0, + 2 => 63, + 3 => 63, + ), + 25 => + array( + 0 => + array( + 'h' => 0.583989501312, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 0, + 2 => 63, + 3 => 127, + ), + 26 => + array( + 0 => + array( + 'h' => 0.611692844677, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 0, + 2 => 63, + 3 => 191, + ), + 27 => + array( + 0 => + array( + 'h' => 0.625490196078, + 's' => 1, + 'v' => 1, + ), + 1 => 0, + 2 => 63, + 3 => 255, + ), + 28 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 0, + 2 => 127, + 3 => 0, + ), + 29 => + array( + 0 => + array( + 'h' => 0.342519685039, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 0, + 2 => 127, + 3 => 7, + ), + 30 => + array( + 0 => + array( + 'h' => 0.353018372703, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 0, + 2 => 127, + 3 => 15, + ), + 31 => + array( + 0 => + array( + 'h' => 0.416010498688, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 0, + 2 => 127, + 3 => 63, + ), + 32 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 0, + 2 => 127, + 3 => 127, + ), + 33 => + array( + 0 => + array( + 'h' => 0.555846422339, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 0, + 2 => 127, + 3 => 191, + ), + 34 => + array( + 0 => + array( + 'h' => 0.583660130719, + 's' => 1, + 'v' => 1, + ), + 1 => 0, + 2 => 127, + 3 => 255, + ), + 35 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 0, + 2 => 191, + 3 => 0, + ), + 36 => + array( + 0 => + array( + 'h' => 0.339441535777, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 0, + 2 => 191, + 3 => 7, + ), + 37 => + array( + 0 => + array( + 'h' => 0.346422338569, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 0, + 2 => 191, + 3 => 15, + ), + 38 => + array( + 0 => + array( + 'h' => 0.388307155323, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 0, + 2 => 191, + 3 => 63, + ), + 39 => + array( + 0 => + array( + 'h' => 0.444153577661, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 0, + 2 => 191, + 3 => 127, + ), + 40 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 0, + 2 => 191, + 3 => 191, + ), + 41 => + array( + 0 => + array( + 'h' => 0.541830065359, + 's' => 1, + 'v' => 1, + ), + 1 => 0, + 2 => 191, + 3 => 255, + ), + 42 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 1, + 'v' => 1, + ), + 1 => 0, + 2 => 255, + 3 => 0, + ), + 43 => + array( + 0 => + array( + 'h' => 0.337908496732, + 's' => 1, + 'v' => 1, + ), + 1 => 0, + 2 => 255, + 3 => 7, + ), + 44 => + array( + 0 => + array( + 'h' => 0.343137254902, + 's' => 1, + 'v' => 1, + ), + 1 => 0, + 2 => 255, + 3 => 15, + ), + 45 => + array( + 0 => + array( + 'h' => 0.374509803922, + 's' => 1, + 'v' => 1, + ), + 1 => 0, + 2 => 255, + 3 => 63, + ), + 46 => + array( + 0 => + array( + 'h' => 0.416339869281, + 's' => 1, + 'v' => 1, + ), + 1 => 0, + 2 => 255, + 3 => 127, + ), + 47 => + array( + 0 => + array( + 'h' => 0.458169934641, + 's' => 1, + 'v' => 1, + ), + 1 => 0, + 2 => 255, + 3 => 191, + ), + 48 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 1, + 'v' => 1, + ), + 1 => 0, + 2 => 255, + 3 => 255, + ), + 49 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'v' => 0.0274509803922, + ), + 1 => 7, + 2 => 0, + 3 => 0, + ), + 50 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'v' => 0.0274509803922, + ), + 1 => 7, + 2 => 0, + 3 => 7, + ), + 51 => + array( + 0 => + array( + 'h' => 0.744444444444, + 's' => 1, + 'v' => 0.0588235294118, + ), + 1 => 7, + 2 => 0, + 3 => 15, + ), + 52 => + array( + 0 => + array( + 'h' => 0.685185185185, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 7, + 2 => 0, + 3 => 63, + ), + 53 => + array( + 0 => + array( + 'h' => 0.675853018373, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 7, + 2 => 0, + 3 => 127, + ), + 54 => + array( + 0 => + array( + 'h' => 0.67277486911, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 7, + 2 => 0, + 3 => 191, + ), + 55 => + array( + 0 => + array( + 'h' => 0.671241830065, + 's' => 1, + 'v' => 1, + ), + 1 => 7, + 2 => 0, + 3 => 255, + ), + 56 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'v' => 0.0274509803922, + ), + 1 => 7, + 2 => 7, + 3 => 0, + ), + 57 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'v' => 0.0274509803922, + ), + 1 => 7, + 2 => 7, + 3 => 7, + ), + 58 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.533333333333, + 'v' => 0.0588235294118, + ), + 1 => 7, + 2 => 7, + 3 => 15, + ), + 59 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.888888888889, + 'v' => 0.247058823529, + ), + 1 => 7, + 2 => 7, + 3 => 63, + ), + 60 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 7, + 2 => 7, + 3 => 127, + ), + 61 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 7, + 2 => 7, + 3 => 191, + ), + 62 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 7, + 2 => 7, + 3 => 255, + ), + 63 => + array( + 0 => + array( + 'h' => 0.255555555556, + 's' => 1, + 'v' => 0.0588235294118, + ), + 1 => 7, + 2 => 15, + 3 => 0, + ), + 64 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.533333333333, + 'v' => 0.0588235294118, + ), + 1 => 7, + 2 => 15, + 3 => 7, + ), + 65 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.533333333333, + 'v' => 0.0588235294118, + ), + 1 => 7, + 2 => 15, + 3 => 15, + ), + 66 => + array( + 0 => + array( + 'h' => 0.642857142857, + 's' => 0.888888888889, + 'v' => 0.247058823529, + ), + 1 => 7, + 2 => 15, + 3 => 63, + ), + 67 => + array( + 0 => + array( + 'h' => 0.655555555556, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 7, + 2 => 15, + 3 => 127, + ), + 68 => + array( + 0 => + array( + 'h' => 0.659420289855, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 7, + 2 => 15, + 3 => 191, + ), + 69 => + array( + 0 => + array( + 'h' => 0.661290322581, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 7, + 2 => 15, + 3 => 255, + ), + 70 => + array( + 0 => + array( + 'h' => 0.314814814815, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 7, + 2 => 63, + 3 => 0, + ), + 71 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.888888888889, + 'v' => 0.247058823529, + ), + 1 => 7, + 2 => 63, + 3 => 7, + ), + 72 => + array( + 0 => + array( + 'h' => 0.357142857143, + 's' => 0.888888888889, + 'v' => 0.247058823529, + ), + 1 => 7, + 2 => 63, + 3 => 15, + ), + 73 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.888888888889, + 'v' => 0.247058823529, + ), + 1 => 7, + 2 => 63, + 3 => 63, + ), + 74 => + array( + 0 => + array( + 'h' => 0.588888888889, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 7, + 2 => 63, + 3 => 127, + ), + 75 => + array( + 0 => + array( + 'h' => 0.615942028986, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 7, + 2 => 63, + 3 => 191, + ), + 76 => + array( + 0 => + array( + 'h' => 0.629032258065, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 7, + 2 => 63, + 3 => 255, + ), + 77 => + array( + 0 => + array( + 'h' => 0.324146981627, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 7, + 2 => 127, + 3 => 0, + ), + 78 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 7, + 2 => 127, + 3 => 7, + ), + 79 => + array( + 0 => + array( + 'h' => 0.344444444444, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 7, + 2 => 127, + 3 => 15, + ), + 80 => + array( + 0 => + array( + 'h' => 0.411111111111, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 7, + 2 => 127, + 3 => 63, + ), + 81 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 7, + 2 => 127, + 3 => 127, + ), + 82 => + array( + 0 => + array( + 'h' => 0.557971014493, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 7, + 2 => 127, + 3 => 191, + ), + 83 => + array( + 0 => + array( + 'h' => 0.586021505376, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 7, + 2 => 127, + 3 => 255, + ), + 84 => + array( + 0 => + array( + 'h' => 0.32722513089, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 7, + 2 => 191, + 3 => 0, + ), + 85 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 7, + 2 => 191, + 3 => 7, + ), + 86 => + array( + 0 => + array( + 'h' => 0.340579710145, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 7, + 2 => 191, + 3 => 15, + ), + 87 => + array( + 0 => + array( + 'h' => 0.384057971014, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 7, + 2 => 191, + 3 => 63, + ), + 88 => + array( + 0 => + array( + 'h' => 0.442028985507, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 7, + 2 => 191, + 3 => 127, + ), + 89 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 7, + 2 => 191, + 3 => 191, + ), + 90 => + array( + 0 => + array( + 'h' => 0.543010752688, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 7, + 2 => 191, + 3 => 255, + ), + 91 => + array( + 0 => + array( + 'h' => 0.328758169935, + 's' => 1, + 'v' => 1, + ), + 1 => 7, + 2 => 255, + 3 => 0, + ), + 92 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 7, + 2 => 255, + 3 => 7, + ), + 93 => + array( + 0 => + array( + 'h' => 0.338709677419, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 7, + 2 => 255, + 3 => 15, + ), + 94 => + array( + 0 => + array( + 'h' => 0.370967741935, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 7, + 2 => 255, + 3 => 63, + ), + 95 => + array( + 0 => + array( + 'h' => 0.413978494624, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 7, + 2 => 255, + 3 => 127, + ), + 96 => + array( + 0 => + array( + 'h' => 0.456989247312, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 7, + 2 => 255, + 3 => 191, + ), + 97 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 7, + 2 => 255, + 3 => 255, + ), + 98 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'v' => 0.0588235294118, + ), + 1 => 15, + 2 => 0, + 3 => 0, + ), + 99 => + array( + 0 => + array( + 'h' => 0.922222222222, + 's' => 1, + 'v' => 0.0588235294118, + ), + 1 => 15, + 2 => 0, + 3 => 7, + ), + 100 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'v' => 0.0588235294118, + ), + 1 => 15, + 2 => 0, + 3 => 15, + ), + 101 => + array( + 0 => + array( + 'h' => 0.706349206349, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 15, + 2 => 0, + 3 => 63, + ), + 102 => + array( + 0 => + array( + 'h' => 0.686351706037, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 15, + 2 => 0, + 3 => 127, + ), + 103 => + array( + 0 => + array( + 'h' => 0.679755671902, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 15, + 2 => 0, + 3 => 191, + ), + 104 => + array( + 0 => + array( + 'h' => 0.676470588235, + 's' => 1, + 'v' => 1, + ), + 1 => 15, + 2 => 0, + 3 => 255, + ), + 105 => + array( + 0 => + array( + 'h' => 0.0777777777778, + 's' => 1, + 'v' => 0.0588235294118, + ), + 1 => 15, + 2 => 7, + 3 => 0, + ), + 106 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.533333333333, + 'v' => 0.0588235294118, + ), + 1 => 15, + 2 => 7, + 3 => 7, + ), + 107 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.533333333333, + 'v' => 0.0588235294118, + ), + 1 => 15, + 2 => 7, + 3 => 15, + ), + 108 => + array( + 0 => + array( + 'h' => 0.690476190476, + 's' => 0.888888888889, + 'v' => 0.247058823529, + ), + 1 => 15, + 2 => 7, + 3 => 63, + ), + 109 => + array( + 0 => + array( + 'h' => 0.677777777778, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 15, + 2 => 7, + 3 => 127, + ), + 110 => + array( + 0 => + array( + 'h' => 0.673913043478, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 15, + 2 => 7, + 3 => 191, + ), + 111 => + array( + 0 => + array( + 'h' => 0.672043010753, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 15, + 2 => 7, + 3 => 255, + ), + 112 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'v' => 0.0588235294118, + ), + 1 => 15, + 2 => 15, + 3 => 0, + ), + 113 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.533333333333, + 'v' => 0.0588235294118, + ), + 1 => 15, + 2 => 15, + 3 => 7, + ), + 114 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'v' => 0.0588235294118, + ), + 1 => 15, + 2 => 15, + 3 => 15, + ), + 115 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.761904761905, + 'v' => 0.247058823529, + ), + 1 => 15, + 2 => 15, + 3 => 63, + ), + 116 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.88188976378, + 'v' => 0.498039215686, + ), + 1 => 15, + 2 => 15, + 3 => 127, + ), + 117 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 15, + 2 => 15, + 3 => 191, + ), + 118 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 15, + 2 => 15, + 3 => 255, + ), + 119 => + array( + 0 => + array( + 'h' => 0.293650793651, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 15, + 2 => 63, + 3 => 0, + ), + 120 => + array( + 0 => + array( + 'h' => 0.309523809524, + 's' => 0.888888888889, + 'v' => 0.247058823529, + ), + 1 => 15, + 2 => 63, + 3 => 7, + ), + 121 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.761904761905, + 'v' => 0.247058823529, + ), + 1 => 15, + 2 => 63, + 3 => 15, + ), + 122 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.761904761905, + 'v' => 0.247058823529, + ), + 1 => 15, + 2 => 63, + 3 => 63, + ), + 123 => + array( + 0 => + array( + 'h' => 0.595238095238, + 's' => 0.88188976378, + 'v' => 0.498039215686, + ), + 1 => 15, + 2 => 63, + 3 => 127, + ), + 124 => + array( + 0 => + array( + 'h' => 0.621212121212, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 15, + 2 => 63, + 3 => 191, + ), + 125 => + array( + 0 => + array( + 'h' => 0.633333333333, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 15, + 2 => 63, + 3 => 255, + ), + 126 => + array( + 0 => + array( + 'h' => 0.313648293963, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 15, + 2 => 127, + 3 => 0, + ), + 127 => + array( + 0 => + array( + 'h' => 0.322222222222, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 15, + 2 => 127, + 3 => 7, + ), + 128 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.88188976378, + 'v' => 0.498039215686, + ), + 1 => 15, + 2 => 127, + 3 => 15, + ), + 129 => + array( + 0 => + array( + 'h' => 0.404761904762, + 's' => 0.88188976378, + 'v' => 0.498039215686, + ), + 1 => 15, + 2 => 127, + 3 => 63, + ), + 130 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.88188976378, + 'v' => 0.498039215686, + ), + 1 => 15, + 2 => 127, + 3 => 127, + ), + 131 => + array( + 0 => + array( + 'h' => 0.560606060606, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 15, + 2 => 127, + 3 => 191, + ), + 132 => + array( + 0 => + array( + 'h' => 0.588888888889, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 15, + 2 => 127, + 3 => 255, + ), + 133 => + array( + 0 => + array( + 'h' => 0.320244328098, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 15, + 2 => 191, + 3 => 0, + ), + 134 => + array( + 0 => + array( + 'h' => 0.326086956522, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 15, + 2 => 191, + 3 => 7, + ), + 135 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 15, + 2 => 191, + 3 => 15, + ), + 136 => + array( + 0 => + array( + 'h' => 0.378787878788, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 15, + 2 => 191, + 3 => 63, + ), + 137 => + array( + 0 => + array( + 'h' => 0.439393939394, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 15, + 2 => 191, + 3 => 127, + ), + 138 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 15, + 2 => 191, + 3 => 191, + ), + 139 => + array( + 0 => + array( + 'h' => 0.544444444444, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 15, + 2 => 191, + 3 => 255, + ), + 140 => + array( + 0 => + array( + 'h' => 0.323529411765, + 's' => 1, + 'v' => 1, + ), + 1 => 15, + 2 => 255, + 3 => 0, + ), + 141 => + array( + 0 => + array( + 'h' => 0.327956989247, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 15, + 2 => 255, + 3 => 7, + ), + 142 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 15, + 2 => 255, + 3 => 15, + ), + 143 => + array( + 0 => + array( + 'h' => 0.366666666667, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 15, + 2 => 255, + 3 => 63, + ), + 144 => + array( + 0 => + array( + 'h' => 0.411111111111, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 15, + 2 => 255, + 3 => 127, + ), + 145 => + array( + 0 => + array( + 'h' => 0.455555555556, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 15, + 2 => 255, + 3 => 191, + ), + 146 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 15, + 2 => 255, + 3 => 255, + ), + 147 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 0, + 3 => 0, + ), + 148 => + array( + 0 => + array( + 'h' => 0.981481481481, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 0, + 3 => 7, + ), + 149 => + array( + 0 => + array( + 'h' => 0.960317460317, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 0, + 3 => 15, + ), + 150 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 0, + 3 => 63, + ), + 151 => + array( + 0 => + array( + 'h' => 0.749343832021, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 63, + 2 => 0, + 3 => 127, + ), + 152 => + array( + 0 => + array( + 'h' => 0.721640488656, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 63, + 2 => 0, + 3 => 191, + ), + 153 => + array( + 0 => + array( + 'h' => 0.707843137255, + 's' => 1, + 'v' => 1, + ), + 1 => 63, + 2 => 0, + 3 => 255, + ), + 154 => + array( + 0 => + array( + 'h' => 0.0185185185185, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 7, + 3 => 0, + ), + 155 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.888888888889, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 7, + 3 => 7, + ), + 156 => + array( + 0 => + array( + 'h' => 0.97619047619, + 's' => 0.888888888889, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 7, + 3 => 15, + ), + 157 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.888888888889, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 7, + 3 => 63, + ), + 158 => + array( + 0 => + array( + 'h' => 0.744444444444, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 63, + 2 => 7, + 3 => 127, + ), + 159 => + array( + 0 => + array( + 'h' => 0.717391304348, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 63, + 2 => 7, + 3 => 191, + ), + 160 => + array( + 0 => + array( + 'h' => 0.704301075269, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 63, + 2 => 7, + 3 => 255, + ), + 161 => + array( + 0 => + array( + 'h' => 0.0396825396825, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 15, + 3 => 0, + ), + 162 => + array( + 0 => + array( + 'h' => 0.0238095238095, + 's' => 0.888888888889, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 15, + 3 => 7, + ), + 163 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.761904761905, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 15, + 3 => 15, + ), + 164 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.761904761905, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 15, + 3 => 63, + ), + 165 => + array( + 0 => + array( + 'h' => 0.738095238095, + 's' => 0.88188976378, + 'v' => 0.498039215686, + ), + 1 => 63, + 2 => 15, + 3 => 127, + ), + 166 => + array( + 0 => + array( + 'h' => 0.712121212121, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 63, + 2 => 15, + 3 => 191, + ), + 167 => + array( + 0 => + array( + 'h' => 0.7, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 63, + 2 => 15, + 3 => 255, + ), + 168 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 63, + 3 => 0, + ), + 169 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.888888888889, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 63, + 3 => 7, + ), + 170 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.761904761905, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 63, + 3 => 15, + ), + 171 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'v' => 0.247058823529, + ), + 1 => 63, + 2 => 63, + 3 => 63, + ), + 172 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.503937007874, + 'v' => 0.498039215686, + ), + 1 => 63, + 2 => 63, + 3 => 127, + ), + 173 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.670157068063, + 'v' => 0.749019607843, + ), + 1 => 63, + 2 => 63, + 3 => 191, + ), + 174 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 63, + 2 => 63, + 3 => 255, + ), + 175 => + array( + 0 => + array( + 'h' => 0.250656167979, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 63, + 2 => 127, + 3 => 0, + ), + 176 => + array( + 0 => + array( + 'h' => 0.255555555556, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 63, + 2 => 127, + 3 => 7, + ), + 177 => + array( + 0 => + array( + 'h' => 0.261904761905, + 's' => 0.88188976378, + 'v' => 0.498039215686, + ), + 1 => 63, + 2 => 127, + 3 => 15, + ), + 178 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.503937007874, + 'v' => 0.498039215686, + ), + 1 => 63, + 2 => 127, + 3 => 63, + ), + 179 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.503937007874, + 'v' => 0.498039215686, + ), + 1 => 63, + 2 => 127, + 3 => 127, + ), + 180 => + array( + 0 => + array( + 'h' => 0.583333333333, + 's' => 0.670157068063, + 'v' => 0.749019607843, + ), + 1 => 63, + 2 => 127, + 3 => 191, + ), + 181 => + array( + 0 => + array( + 'h' => 0.611111111111, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 63, + 2 => 127, + 3 => 255, + ), + 182 => + array( + 0 => + array( + 'h' => 0.278359511344, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 63, + 2 => 191, + 3 => 0, + ), + 183 => + array( + 0 => + array( + 'h' => 0.282608695652, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 63, + 2 => 191, + 3 => 7, + ), + 184 => + array( + 0 => + array( + 'h' => 0.287878787879, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 63, + 2 => 191, + 3 => 15, + ), + 185 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.670157068063, + 'v' => 0.749019607843, + ), + 1 => 63, + 2 => 191, + 3 => 63, + ), + 186 => + array( + 0 => + array( + 'h' => 0.416666666667, + 's' => 0.670157068063, + 'v' => 0.749019607843, + ), + 1 => 63, + 2 => 191, + 3 => 127, + ), + 187 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.670157068063, + 'v' => 0.749019607843, + ), + 1 => 63, + 2 => 191, + 3 => 191, + ), + 188 => + array( + 0 => + array( + 'h' => 0.555555555556, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 63, + 2 => 191, + 3 => 255, + ), + 189 => + array( + 0 => + array( + 'h' => 0.292156862745, + 's' => 1, + 'v' => 1, + ), + 1 => 63, + 2 => 255, + 3 => 0, + ), + 190 => + array( + 0 => + array( + 'h' => 0.295698924731, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 63, + 2 => 255, + 3 => 7, + ), + 191 => + array( + 0 => + array( + 'h' => 0.3, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 63, + 2 => 255, + 3 => 15, + ), + 192 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 63, + 2 => 255, + 3 => 63, + ), + 193 => + array( + 0 => + array( + 'h' => 0.388888888889, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 63, + 2 => 255, + 3 => 127, + ), + 194 => + array( + 0 => + array( + 'h' => 0.444444444444, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 63, + 2 => 255, + 3 => 191, + ), + 195 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 63, + 2 => 255, + 3 => 255, + ), + 196 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 0, + 3 => 0, + ), + 197 => + array( + 0 => + array( + 'h' => 0.990813648294, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 0, + 3 => 7, + ), + 198 => + array( + 0 => + array( + 'h' => 0.98031496063, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 0, + 3 => 15, + ), + 199 => + array( + 0 => + array( + 'h' => 0.917322834646, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 0, + 3 => 63, + ), + 200 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 0, + 3 => 127, + ), + 201 => + array( + 0 => + array( + 'h' => 0.777486910995, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 127, + 2 => 0, + 3 => 191, + ), + 202 => + array( + 0 => + array( + 'h' => 0.749673202614, + 's' => 1, + 'v' => 1, + ), + 1 => 127, + 2 => 0, + 3 => 255, + ), + 203 => + array( + 0 => + array( + 'h' => 0.00918635170604, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 7, + 3 => 0, + ), + 204 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 7, + 3 => 7, + ), + 205 => + array( + 0 => + array( + 'h' => 0.988888888889, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 7, + 3 => 15, + ), + 206 => + array( + 0 => + array( + 'h' => 0.922222222222, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 7, + 3 => 63, + ), + 207 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 7, + 3 => 127, + ), + 208 => + array( + 0 => + array( + 'h' => 0.775362318841, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 127, + 2 => 7, + 3 => 191, + ), + 209 => + array( + 0 => + array( + 'h' => 0.747311827957, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 127, + 2 => 7, + 3 => 255, + ), + 210 => + array( + 0 => + array( + 'h' => 0.0196850393701, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 15, + 3 => 0, + ), + 211 => + array( + 0 => + array( + 'h' => 0.0111111111111, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 15, + 3 => 7, + ), + 212 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.88188976378, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 15, + 3 => 15, + ), + 213 => + array( + 0 => + array( + 'h' => 0.928571428571, + 's' => 0.88188976378, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 15, + 3 => 63, + ), + 214 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.88188976378, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 15, + 3 => 127, + ), + 215 => + array( + 0 => + array( + 'h' => 0.772727272727, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 127, + 2 => 15, + 3 => 191, + ), + 216 => + array( + 0 => + array( + 'h' => 0.744444444444, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 127, + 2 => 15, + 3 => 255, + ), + 217 => + array( + 0 => + array( + 'h' => 0.0826771653543, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 63, + 3 => 0, + ), + 218 => + array( + 0 => + array( + 'h' => 0.0777777777778, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 63, + 3 => 7, + ), + 219 => + array( + 0 => + array( + 'h' => 0.0714285714286, + 's' => 0.88188976378, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 63, + 3 => 15, + ), + 220 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.503937007874, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 63, + 3 => 63, + ), + 221 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.503937007874, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 63, + 3 => 127, + ), + 222 => + array( + 0 => + array( + 'h' => 0.75, + 's' => 0.670157068063, + 'v' => 0.749019607843, + ), + 1 => 127, + 2 => 63, + 3 => 191, + ), + 223 => + array( + 0 => + array( + 'h' => 0.722222222222, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 127, + 2 => 63, + 3 => 255, + ), + 224 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 127, + 3 => 0, + ), + 225 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.944881889764, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 127, + 3 => 7, + ), + 226 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.88188976378, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 127, + 3 => 15, + ), + 227 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.503937007874, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 127, + 3 => 63, + ), + 228 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'v' => 0.498039215686, + ), + 1 => 127, + 2 => 127, + 3 => 127, + ), + 229 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.335078534031, + 'v' => 0.749019607843, + ), + 1 => 127, + 2 => 127, + 3 => 191, + ), + 230 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.501960784314, + 'v' => 1, + ), + 1 => 127, + 2 => 127, + 3 => 255, + ), + 231 => + array( + 0 => + array( + 'h' => 0.222513089005, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 127, + 2 => 191, + 3 => 0, + ), + 232 => + array( + 0 => + array( + 'h' => 0.224637681159, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 127, + 2 => 191, + 3 => 7, + ), + 233 => + array( + 0 => + array( + 'h' => 0.227272727273, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 127, + 2 => 191, + 3 => 15, + ), + 234 => + array( + 0 => + array( + 'h' => 0.25, + 's' => 0.670157068063, + 'v' => 0.749019607843, + ), + 1 => 127, + 2 => 191, + 3 => 63, + ), + 235 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.335078534031, + 'v' => 0.749019607843, + ), + 1 => 127, + 2 => 191, + 3 => 127, + ), + 236 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.335078534031, + 'v' => 0.749019607843, + ), + 1 => 127, + 2 => 191, + 3 => 191, + ), + 237 => + array( + 0 => + array( + 'h' => 0.583333333333, + 's' => 0.501960784314, + 'v' => 1, + ), + 1 => 127, + 2 => 191, + 3 => 255, + ), + 238 => + array( + 0 => + array( + 'h' => 0.250326797386, + 's' => 1, + 'v' => 1, + ), + 1 => 127, + 2 => 255, + 3 => 0, + ), + 239 => + array( + 0 => + array( + 'h' => 0.252688172043, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 127, + 2 => 255, + 3 => 7, + ), + 240 => + array( + 0 => + array( + 'h' => 0.255555555556, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 127, + 2 => 255, + 3 => 15, + ), + 241 => + array( + 0 => + array( + 'h' => 0.277777777778, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 127, + 2 => 255, + 3 => 63, + ), + 242 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.501960784314, + 'v' => 1, + ), + 1 => 127, + 2 => 255, + 3 => 127, + ), + 243 => + array( + 0 => + array( + 'h' => 0.416666666667, + 's' => 0.501960784314, + 'v' => 1, + ), + 1 => 127, + 2 => 255, + 3 => 191, + ), + 244 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.501960784314, + 'v' => 1, + ), + 1 => 127, + 2 => 255, + 3 => 255, + ), + 245 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 0, + 3 => 0, + ), + 246 => + array( + 0 => + array( + 'h' => 0.993891797557, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 0, + 3 => 7, + ), + 247 => + array( + 0 => + array( + 'h' => 0.986910994764, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 0, + 3 => 15, + ), + 248 => + array( + 0 => + array( + 'h' => 0.94502617801, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 0, + 3 => 63, + ), + 249 => + array( + 0 => + array( + 'h' => 0.889179755672, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 0, + 3 => 127, + ), + 250 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 0, + 3 => 191, + ), + 251 => + array( + 0 => + array( + 'h' => 0.791503267974, + 's' => 1, + 'v' => 1, + ), + 1 => 191, + 2 => 0, + 3 => 255, + ), + 252 => + array( + 0 => + array( + 'h' => 0.00610820244328, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 7, + 3 => 0, + ), + 253 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 7, + 3 => 7, + ), + 254 => + array( + 0 => + array( + 'h' => 0.992753623188, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 7, + 3 => 15, + ), + 255 => + array( + 0 => + array( + 'h' => 0.949275362319, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 7, + 3 => 63, + ), + 256 => + array( + 0 => + array( + 'h' => 0.891304347826, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 7, + 3 => 127, + ), + 257 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 7, + 3 => 191, + ), + 258 => + array( + 0 => + array( + 'h' => 0.790322580645, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 191, + 2 => 7, + 3 => 255, + ), + 259 => + array( + 0 => + array( + 'h' => 0.0130890052356, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 15, + 3 => 0, + ), + 260 => + array( + 0 => + array( + 'h' => 0.00724637681159, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 15, + 3 => 7, + ), + 261 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 15, + 3 => 15, + ), + 262 => + array( + 0 => + array( + 'h' => 0.954545454545, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 15, + 3 => 63, + ), + 263 => + array( + 0 => + array( + 'h' => 0.893939393939, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 15, + 3 => 127, + ), + 264 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 15, + 3 => 191, + ), + 265 => + array( + 0 => + array( + 'h' => 0.788888888889, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 191, + 2 => 15, + 3 => 255, + ), + 266 => + array( + 0 => + array( + 'h' => 0.0549738219895, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 63, + 3 => 0, + ), + 267 => + array( + 0 => + array( + 'h' => 0.0507246376812, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 63, + 3 => 7, + ), + 268 => + array( + 0 => + array( + 'h' => 0.0454545454545, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 63, + 3 => 15, + ), + 269 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.670157068063, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 63, + 3 => 63, + ), + 270 => + array( + 0 => + array( + 'h' => 0.916666666667, + 's' => 0.670157068063, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 63, + 3 => 127, + ), + 271 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.670157068063, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 63, + 3 => 191, + ), + 272 => + array( + 0 => + array( + 'h' => 0.777777777778, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 191, + 2 => 63, + 3 => 255, + ), + 273 => + array( + 0 => + array( + 'h' => 0.110820244328, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 127, + 3 => 0, + ), + 274 => + array( + 0 => + array( + 'h' => 0.108695652174, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 127, + 3 => 7, + ), + 275 => + array( + 0 => + array( + 'h' => 0.106060606061, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 127, + 3 => 15, + ), + 276 => + array( + 0 => + array( + 'h' => 0.0833333333333, + 's' => 0.670157068063, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 127, + 3 => 63, + ), + 277 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.335078534031, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 127, + 3 => 127, + ), + 278 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.335078534031, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 127, + 3 => 191, + ), + 279 => + array( + 0 => + array( + 'h' => 0.75, + 's' => 0.501960784314, + 'v' => 1, + ), + 1 => 191, + 2 => 127, + 3 => 255, + ), + 280 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 191, + 3 => 0, + ), + 281 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.96335078534, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 191, + 3 => 7, + ), + 282 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.921465968586, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 191, + 3 => 15, + ), + 283 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.670157068063, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 191, + 3 => 63, + ), + 284 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.335078534031, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 191, + 3 => 127, + ), + 285 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'v' => 0.749019607843, + ), + 1 => 191, + 2 => 191, + 3 => 191, + ), + 286 => + array( + 0 => + array( + 'h' => 0.666666666667, + 's' => 0.250980392157, + 'v' => 1, + ), + 1 => 191, + 2 => 191, + 3 => 255, + ), + 287 => + array( + 0 => + array( + 'h' => 0.208496732026, + 's' => 1, + 'v' => 1, + ), + 1 => 191, + 2 => 255, + 3 => 0, + ), + 288 => + array( + 0 => + array( + 'h' => 0.209677419355, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 191, + 2 => 255, + 3 => 7, + ), + 289 => + array( + 0 => + array( + 'h' => 0.211111111111, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 191, + 2 => 255, + 3 => 15, + ), + 290 => + array( + 0 => + array( + 'h' => 0.222222222222, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 191, + 2 => 255, + 3 => 63, + ), + 291 => + array( + 0 => + array( + 'h' => 0.25, + 's' => 0.501960784314, + 'v' => 1, + ), + 1 => 191, + 2 => 255, + 3 => 127, + ), + 292 => + array( + 0 => + array( + 'h' => 0.333333333333, + 's' => 0.250980392157, + 'v' => 1, + ), + 1 => 191, + 2 => 255, + 3 => 191, + ), + 293 => + array( + 0 => + array( + 'h' => 0.5, + 's' => 0.250980392157, + 'v' => 1, + ), + 1 => 191, + 2 => 255, + 3 => 255, + ), + 294 => + array( + 0 => + array( + 'h' => 0, + 's' => 1, + 'v' => 1, + ), + 1 => 255, + 2 => 0, + 3 => 0, + ), + 295 => + array( + 0 => + array( + 'h' => 0.995424836601, + 's' => 1, + 'v' => 1, + ), + 1 => 255, + 2 => 0, + 3 => 7, + ), + 296 => + array( + 0 => + array( + 'h' => 0.990196078431, + 's' => 1, + 'v' => 1, + ), + 1 => 255, + 2 => 0, + 3 => 15, + ), + 297 => + array( + 0 => + array( + 'h' => 0.958823529412, + 's' => 1, + 'v' => 1, + ), + 1 => 255, + 2 => 0, + 3 => 63, + ), + 298 => + array( + 0 => + array( + 'h' => 0.916993464052, + 's' => 1, + 'v' => 1, + ), + 1 => 255, + 2 => 0, + 3 => 127, + ), + 299 => + array( + 0 => + array( + 'h' => 0.875163398693, + 's' => 1, + 'v' => 1, + ), + 1 => 255, + 2 => 0, + 3 => 191, + ), + 300 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 1, + 'v' => 1, + ), + 1 => 255, + 2 => 0, + 3 => 255, + ), + 301 => + array( + 0 => + array( + 'h' => 0.00457516339869, + 's' => 1, + 'v' => 1, + ), + 1 => 255, + 2 => 7, + 3 => 0, + ), + 302 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 255, + 2 => 7, + 3 => 7, + ), + 303 => + array( + 0 => + array( + 'h' => 0.994623655914, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 255, + 2 => 7, + 3 => 15, + ), + 304 => + array( + 0 => + array( + 'h' => 0.962365591398, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 255, + 2 => 7, + 3 => 63, + ), + 305 => + array( + 0 => + array( + 'h' => 0.91935483871, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 255, + 2 => 7, + 3 => 127, + ), + 306 => + array( + 0 => + array( + 'h' => 0.876344086022, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 255, + 2 => 7, + 3 => 191, + ), + 307 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 255, + 2 => 7, + 3 => 255, + ), + 308 => + array( + 0 => + array( + 'h' => 0.00980392156863, + 's' => 1, + 'v' => 1, + ), + 1 => 255, + 2 => 15, + 3 => 0, + ), + 309 => + array( + 0 => + array( + 'h' => 0.00537634408602, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 255, + 2 => 15, + 3 => 7, + ), + 310 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 255, + 2 => 15, + 3 => 15, + ), + 311 => + array( + 0 => + array( + 'h' => 0.966666666667, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 255, + 2 => 15, + 3 => 63, + ), + 312 => + array( + 0 => + array( + 'h' => 0.922222222222, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 255, + 2 => 15, + 3 => 127, + ), + 313 => + array( + 0 => + array( + 'h' => 0.877777777778, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 255, + 2 => 15, + 3 => 191, + ), + 314 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 255, + 2 => 15, + 3 => 255, + ), + 315 => + array( + 0 => + array( + 'h' => 0.0411764705882, + 's' => 1, + 'v' => 1, + ), + 1 => 255, + 2 => 63, + 3 => 0, + ), + 316 => + array( + 0 => + array( + 'h' => 0.0376344086022, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 255, + 2 => 63, + 3 => 7, + ), + 317 => + array( + 0 => + array( + 'h' => 0.0333333333333, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 255, + 2 => 63, + 3 => 15, + ), + 318 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 255, + 2 => 63, + 3 => 63, + ), + 319 => + array( + 0 => + array( + 'h' => 0.944444444444, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 255, + 2 => 63, + 3 => 127, + ), + 320 => + array( + 0 => + array( + 'h' => 0.888888888889, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 255, + 2 => 63, + 3 => 191, + ), + 321 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 255, + 2 => 63, + 3 => 255, + ), + 322 => + array( + 0 => + array( + 'h' => 0.0830065359477, + 's' => 1, + 'v' => 1, + ), + 1 => 255, + 2 => 127, + 3 => 0, + ), + 323 => + array( + 0 => + array( + 'h' => 0.0806451612903, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 255, + 2 => 127, + 3 => 7, + ), + 324 => + array( + 0 => + array( + 'h' => 0.0777777777778, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 255, + 2 => 127, + 3 => 15, + ), + 325 => + array( + 0 => + array( + 'h' => 0.0555555555556, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 255, + 2 => 127, + 3 => 63, + ), + 326 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.501960784314, + 'v' => 1, + ), + 1 => 255, + 2 => 127, + 3 => 127, + ), + 327 => + array( + 0 => + array( + 'h' => 0.916666666667, + 's' => 0.501960784314, + 'v' => 1, + ), + 1 => 255, + 2 => 127, + 3 => 191, + ), + 328 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.501960784314, + 'v' => 1, + ), + 1 => 255, + 2 => 127, + 3 => 255, + ), + 329 => + array( + 0 => + array( + 'h' => 0.124836601307, + 's' => 1, + 'v' => 1, + ), + 1 => 255, + 2 => 191, + 3 => 0, + ), + 330 => + array( + 0 => + array( + 'h' => 0.123655913978, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 255, + 2 => 191, + 3 => 7, + ), + 331 => + array( + 0 => + array( + 'h' => 0.122222222222, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 255, + 2 => 191, + 3 => 15, + ), + 332 => + array( + 0 => + array( + 'h' => 0.111111111111, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 255, + 2 => 191, + 3 => 63, + ), + 333 => + array( + 0 => + array( + 'h' => 0.0833333333333, + 's' => 0.501960784314, + 'v' => 1, + ), + 1 => 255, + 2 => 191, + 3 => 127, + ), + 334 => + array( + 0 => + array( + 'h' => 0, + 's' => 0.250980392157, + 'v' => 1, + ), + 1 => 255, + 2 => 191, + 3 => 191, + ), + 335 => + array( + 0 => + array( + 'h' => 0.833333333333, + 's' => 0.250980392157, + 'v' => 1, + ), + 1 => 255, + 2 => 191, + 3 => 255, + ), + 336 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 1, + 'v' => 1, + ), + 1 => 255, + 2 => 255, + 3 => 0, + ), + 337 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.972549019608, + 'v' => 1, + ), + 1 => 255, + 2 => 255, + 3 => 7, + ), + 338 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.941176470588, + 'v' => 1, + ), + 1 => 255, + 2 => 255, + 3 => 15, + ), + 339 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.752941176471, + 'v' => 1, + ), + 1 => 255, + 2 => 255, + 3 => 63, + ), + 340 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.501960784314, + 'v' => 1, + ), + 1 => 255, + 2 => 255, + 3 => 127, + ), + 341 => + array( + 0 => + array( + 'h' => 0.166666666667, + 's' => 0.250980392157, + 'v' => 1, + ), + 1 => 255, + 2 => 255, + 3 => 191, + ), + 342 => + array( + 0 => + array( + 'h' => 0, + 's' => 0, + 'v' => 1, + ), + 1 => 255, + 2 => 255, + 3 => 255, + ), + ); - - - - - - - - - - - - - - - - - - - -?> \ No newline at end of file + return $essais; +} diff --git a/www/plugins-dist/filtres_images/tests/couleur_extraire.php b/www/plugins-dist/filtres_images/tests/couleur_extraire.php index 13ae4ac0..494c0deb 100644 --- a/www/plugins-dist/filtres_images/tests/couleur_extraire.php +++ b/www/plugins-dist/filtres_images/tests/couleur_extraire.php @@ -2,51 +2,44 @@ /** * Test unitaire de la fonction couleur_extraire * du fichier filtres/couleurs.php - * - * genere automatiquement par TestBuilder - * le */ - $test = 'couleur_extraire'; - $remonte = "../"; - while (!is_dir($remonte."ecrire")) - $remonte = "../$remonte"; - require $remonte.'tests/test.inc'; - - find_in_path("filtres/couleurs.php",'',true); - - // - // hop ! on y va - // - $err = tester_fun('couleur_extraire', essais_couleur_extraire()); - - // si le tableau $err est pas vide ca va pas - if ($err) { - die ('
    ' . join('', $err) . '
    '); - } - - echo "OK"; - - - function essais_couleur_extraire(){ - $essais = array ( - 0 => - array ( - 0 => '759bc8', - 1 => url_absolue(find_in_path('tests/degrade-bleu.jpg'),$GLOBALS['meta']['adresse_site'].'/'), - ), - 1 => - array ( - 0 => '759bc8', - 1 => find_in_path('tests/degrade-bleu.jpg'), - ), -); - return $essais; - } - - - - - -?> +$test = 'couleur_extraire'; +$remonte = '../'; +while (!is_dir($remonte . 'ecrire')) { + $remonte = "../$remonte"; +} +require $remonte . 'tests/test.inc'; + +find_in_path('filtres/couleurs.php', '', true); + +// +// hop ! on y va +// +$err = tester_fun('couleur_extraire', essais_couleur_extraire()); + +// si le tableau $err est pas vide ca va pas +if ($err) { + die('
    ' . join('', $err) . '
    '); +} + +echo 'OK'; + + +function essais_couleur_extraire() { + $essais = array( + 0 => + array( + 0 => '739cc8', + 1 => url_absolue(find_in_path('tests/degrade-bleu.jpg'), $GLOBALS['meta']['adresse_site'] . '/'), + ), + 1 => + array( + 0 => '739cc8', + 1 => find_in_path('tests/degrade-bleu.jpg'), + ), + ); + + return $essais; +} diff --git a/www/plugins-dist/filtres_images/tests/imagesrc.html b/www/plugins-dist/filtres_images/tests/imagesrc.html index 1ffb9758..e4d4c63d 100644 --- a/www/plugins-dist/filtres_images/tests/imagesrc.html +++ b/www/plugins-dist/filtres_images/tests/imagesrc.html @@ -8,7 +8,7 @@ #SET{img1,#CHEMIN{tests/imagetest.jpg}|image_masque{tests/masque-305x85.png}|image_renforcement{0.1}|image_aplatir{jpg}|extraire_attribut{src}} #SET{img2,#CHEMIN{tests/imagetest.jpg}|image_masque{tests/masque-305x85.png}|image_renforcement{0.1}|image_aplatir{jpg}|extraire_attribut{src}} #SET{ok,OK} -[(#GET{img1}|file_exists|non) Image [(#GET{img1})] inexistante
    #SET{ok,''}] -[(#GET{img2}|file_exists|non) Image [(#GET{img2})] inexistante
    #SET{ok,''}] +[(#GET{img1}|supprimer_timestamp|file_exists|non) Image [(#GET{img1})] inexistante
    #SET{ok,''}] +[(#GET{img2}|supprimer_timestamp|file_exists|non) Image [(#GET{img2})] inexistante
    #SET{ok,''}] [(#GET{img1}|=={#GET{img2}}|non) Resultat incoherent : meme chaine de filtre produit 2 images differentes [(#GET{img1})]<>[(#GET{img2})]
    #SET{ok,''}] #GET{ok} diff --git a/www/plugins-dist/filtres_images/tests/multiple_de_trois.php b/www/plugins-dist/filtres_images/tests/multiple_de_trois.php index 19babfd9..4ed2797a 100644 --- a/www/plugins-dist/filtres_images/tests/multiple_de_trois.php +++ b/www/plugins-dist/filtres_images/tests/multiple_de_trois.php @@ -4,116 +4,113 @@ * du fichier filtres/images_lib.php * * genere automatiquement par TestBuilder - * le + * le */ - $test = 'multiple_de_trois'; - $remonte = "../"; - while (!is_dir($remonte."ecrire")) - $remonte = "../$remonte"; - require $remonte.'tests/test.inc'; - find_in_path("filtres/images_lib.php",'',true); +$test = 'multiple_de_trois'; +$remonte = '../'; +while (!is_dir($remonte . 'ecrire')) { + $remonte = "../$remonte"; +} +require $remonte . 'tests/test.inc'; +find_in_path('filtres/images_lib.php', '', true); - // - // hop ! on y va - // - $err = tester_fun('multiple_de_trois', essais_multiple_de_trois()); - - // si le tableau $err est pas vide ca va pas - if ($err) { - die ('
    ' . join('', $err) . '
    '); - } +// +// hop ! on y va +// +$err = tester_fun('multiple_de_trois', essais_multiple_de_trois()); - echo "OK"; - +// si le tableau $err est pas vide ca va pas +if ($err) { + die('
    ' . join('', $err) . '
    '); +} - function essais_multiple_de_trois(){ - $essais = array ( - 0 => - array ( - 0 => 0, - 1 => 0, - ), - 1 => - array ( - 0 => -0, - 1 => -1, - ), - 2 => - array ( - 0 => 0, - 1 => 1, - ), - 3 => - array ( - 0 => 3, - 1 => 2, - ), - 4 => - array ( - 0 => 3, - 1 => 3, - ), - 5 => - array ( - 0 => 3, - 1 => 4, - ), - 6 => - array ( - 0 => 6, - 1 => 5, - ), - 7 => - array ( - 0 => 6, - 1 => 6, - ), - 8 => - array ( - 0 => 6, - 1 => 7, - ), - 9 => - array ( - 0 => 9, - 1 => 10, - ), - 10 => - array ( - 0 => 21, - 1 => 20, - ), - 11 => - array ( - 0 => 30, - 1 => 30, - ), - 12 => - array ( - 0 => 51, - 1 => 50, - ), - 13 => - array ( - 0 => 99, - 1 => 100, - ), - 14 => - array ( - 0 => 999, - 1 => 1000, - ), - 15 => - array ( - 0 => 9999, - 1 => 10000, - ), -); - return $essais; - } +echo 'OK'; +function essais_multiple_de_trois() { + $essais = array( + 0 => + array( + 0 => 0, + 1 => 0, + ), + 1 => + array( + 0 => -0, + 1 => -1, + ), + 2 => + array( + 0 => 0, + 1 => 1, + ), + 3 => + array( + 0 => 3, + 1 => 2, + ), + 4 => + array( + 0 => 3, + 1 => 3, + ), + 5 => + array( + 0 => 3, + 1 => 4, + ), + 6 => + array( + 0 => 6, + 1 => 5, + ), + 7 => + array( + 0 => 6, + 1 => 6, + ), + 8 => + array( + 0 => 6, + 1 => 7, + ), + 9 => + array( + 0 => 9, + 1 => 10, + ), + 10 => + array( + 0 => 21, + 1 => 20, + ), + 11 => + array( + 0 => 30, + 1 => 30, + ), + 12 => + array( + 0 => 51, + 1 => 50, + ), + 13 => + array( + 0 => 99, + 1 => 100, + ), + 14 => + array( + 0 => 999, + 1 => 1000, + ), + 15 => + array( + 0 => 9999, + 1 => 10000, + ), + ); - -?> \ No newline at end of file + return $essais; +} diff --git a/www/plugins-dist/forum/README.md b/www/plugins-dist/forum/README.md new file mode 100644 index 00000000..dce5e654 --- /dev/null +++ b/www/plugins-dist/forum/README.md @@ -0,0 +1,79 @@ +# README + +Quelques notes de documentation. + +## Modèle de données + +Pour expliquer la façon dont le plugin __forum__ stocke les messages de forums, prenons la conversation suivante : + + * à 12:53, envoi du message `msg A` + * à 13:44, envoi du message `msg B` + * à 14:27, envoi d'une réponse au premier message : `[Re] msg A` + * à 18:12, envoi d'une réponse à cette réponse : `[Re] [Re] msg A` + +### Table `spip_forum` dans la base de données + +Les données sont stockées dans la table `spip_forum`, avec un message par ligne. La conversation donnera donc la table suivante (on ne montre que les champs principaux) : + +| `id_forum` | `id_parent` | `id_thread` | `date_heure` | `date_thread` | `texte` | +| ---------- | ----------- | ----------- | ------------ | ------------- | ------- | +| 1 | 0 | 1 | 12:53 | 18:12 | msg A | +| 2 | 0 | 2 | 13:44 | 13:44 | msg B | +| 3 | 1 | 1 | 14:27 | 18:12 | [Re] msg A | +| 4 | 3 | 1 | 18:12 | 18:12 | [Re] [Re] msg A | + +Détaillons un peu le rôle de chaque champ : + +| champ | description | +| ----- | ----------- | +| `id_forum` | identifiant du message | +| `id_parent` | identifiant du message parent pour les réponses, ou 0 si c'est le premier message | +| `id_thread` | identifiant du premier message d'un thread | +| `date_heure` | heure du message (format un peu simplifié pour faire court) | +| `date_thread` | heure du dernier message du thread | + +A noter également les deux champs `id_objet` et `objet` qui indiquent l'objet auquel le message est attaché (ex: `id_objet = 3` et `objet = article` pour un message de forum dans l'article numéro 3). + +### Relations entre `id_forum`, `id_parent` et `id_thread` + +``` + msg A + id_forum = 1 <---------+ + id_parent = 0 | + id_thread = 1 ---------+ + | + [Re] msg A | + id_forum = 3 <----+ | + id_parent = 1 ----|----+ + id_thread = 1 ----|----+ + | | + [Re] [Re] msg A | | + id_forum = 4 | | + id_parent = 3 ----+ | + id_thread = 1 ---------+ + + msg B + id_forum = 2 <----+ + id_parent = 0 | + id_thread = 2 ----+ +``` + +### Relations entre `date_heure` et `date_thread` : + +``` + msg A + date_heure = 12:53 + date_thread = 18:12 ----+ + | + [Re] msg A | + date_heure = 12:53 | + date_thread = 18:12 ----+ + | + [Re] [Re] msg A | + date_heure = 18:12 <----+ + date_thread = 18:12 ----+ + + msg B + date_heure = 13:44 <----+ + date_thread = 13:44 ----+ +``` diff --git a/www/plugins-dist/forum/TODO.md b/www/plugins-dist/forum/TODO.md new file mode 100644 index 00000000..6fb39494 --- /dev/null +++ b/www/plugins-dist/forum/TODO.md @@ -0,0 +1,7 @@ +# TODO + +Quelques idées d'évolutions. + +[ ] dans le paramètre forums_forcer_previsu (oui/non), ajouter une troisième option pour ne forcer la previsu que pour les personnes non-loggées, voire établir une liste de statuts d'auteur·e·s pour lesquel·le·s ne pas forcer la previsu. +[ ] différencier le style des boutons "previsualiser" et "envoyer" (quand la prévisualisation n'est pas forcée) pour que le bouton "previsualiser" apparaisse comme un lien, style Redmine (voir http://stackoverflow.com/a/5734628 pour deux solutions pas vraiment satisfaisantes de le faire) +[ ] sécurité (cerdic) - avec ce code, il doit sans doute déjà être possible de contourner la previsu avec un post bien senti, mais on doit pouvoir améliorer cela en injectant une signature du texte dans confirmer_previsu_forum et en verifiant cette signature lors du POST diff --git a/www/plugins-dist/forum/action/editer_forum.php b/www/plugins-dist/forum/action/editer_forum.php index 99ca0996..b407b35e 100644 --- a/www/plugins-dist/forum/action/editer_forum.php +++ b/www/plugins-dist/forum/action/editer_forum.php @@ -10,27 +10,31 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} include_spip('inc/modifier'); // Nota: quand on edite un forum existant, il est de bon ton d'appeler // au prealable conserver_original($id_forum) // https://code.spip.net/@revision_forum -if(!function_exists('revision_forum')){ - function revision_forum($id_forum, $c=false) { +if (!function_exists('revision_forum')) { + function revision_forum($id_forum, $c = false) { - $t = sql_fetsel("*", "spip_forum", "id_forum=".intval($id_forum)); + $t = sql_fetsel("*", "spip_forum", "id_forum=" . intval($id_forum)); if (!$t) { spip_log("erreur forum $id_forum inexistant"); + return; } // Calculer l'invalideur des caches lies a ce forum if ($t['statut'] == 'publie') { include_spip('inc/invalideur'); - $invalideur = array("id='forum/$id_forum'","id='".$t['objet']."/".$t['id_objet']."'"); - } else + $invalideur = array("id='forum/$id_forum'", "id='" . $t['objet'] . "/" . $t['id_objet'] . "'"); + } else { $invalideur = ''; + } // Supprimer 'http://' tout seul if (isset($c['url_site'])) { @@ -45,24 +49,26 @@ if(!function_exists('revision_forum')){ ), $c); - $id_thread = $t["id_thread"]; + $id_thread = intval($t["id_thread"]); $cles = array(); foreach (array('id_objet', 'objet') as $k) { - if (isset($c[$k]) AND $c[$k]) $cles[$k] = $c[$k]; + if (isset($c[$k]) and $c[$k]) { + $cles[$k] = $c[$k]; + } } // Modification des id_article etc // (non autorise en standard mais utile pour des crayons) // on deplace tout le thread {sauf les originaux}. - if (count($cles) AND $id_thread) { - spip_log("update thread id_thread=$id_thread avec ".var_export($cles,1),'forum.'. _LOG_INFO_IMPORTANTE); - sql_updateq("spip_forum", $cles, "id_thread=".$id_thread." AND statut!='original'"); + if (count($cles) and $id_thread) { + spip_log("update thread id_thread=$id_thread avec " . var_export($cles, 1), 'forum.' . _LOG_INFO_IMPORTANTE); + sql_updateq("spip_forum", $cles, "id_thread=" . $id_thread . " AND statut!='original'"); // on n'affecte pas $r, car un deplacement ne change pas l'auteur } - // s'il y a vraiment eu une modif et que le message est public - // on enregistre le nouveau date_thread - if ($err==='' AND $t['statut'] == 'publie') { + // s'il y a vraiment eu une modif et que le message est publié ou posté dans un forum du privé + // on enregistre la nouvelle date_thread + if ($err === '' and in_array($t['statut'], array('publie', 'prive', 'privrac', 'privadm'))) { // on ne stocke ni le numero IP courant ni le nouvel id_auteur // dans le message modifie (trop penible a l'usage) ; mais du // coup attention a la responsabilite editoriale @@ -71,7 +77,7 @@ if(!function_exists('revision_forum')){ */ // & meme ca ca pourrait etre optionnel - sql_updateq("spip_forum", array("date_thread" => date('Y-m-d H:i:s')), "id_thread=".$id_thread); + sql_updateq("spip_forum", array("date_thread" => date('Y-m-d H:i:s')), "id_thread=" . $id_thread); } } } diff --git a/www/plugins-dist/forum/action/instituer_forum.php b/www/plugins-dist/forum/action/instituer_forum.php index 982363c3..76ff109c 100644 --- a/www/plugins-dist/forum/action/instituer_forum.php +++ b/www/plugins-dist/forum/action/instituer_forum.php @@ -10,12 +10,14 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} // https://code.spip.net/@action_instituer_forum_dist -function action_instituer_forum_dist($arg=null) { +function action_instituer_forum_dist($arg = null) { - if (is_null($arg)){ + if (is_null($arg)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } @@ -23,29 +25,32 @@ function action_instituer_forum_dist($arg=null) { list($id_forum, $statut) = preg_split('/\W/', $arg); $id_forum = intval($id_forum); $row = sql_fetsel("*", "spip_forum", "id_forum=$id_forum"); - if (!$row) return; + if (!$row) { + return; + } - instituer_un_forum($statut,$row); + instituer_un_forum($statut, $row); } -function instituer_un_forum($statut,$row){ +function instituer_un_forum($statut, $row) { $id_forum = $row['id_forum']; $old = $row['statut']; - // rien a faire si pas de changement de statut - if ($old==$statut) + // rien a faire si pas de changement de statut + if ($old == $statut) { return; + } // changer le statut de toute l'arborescence dependant de ce message $id_messages = array($id_forum); while ($id_messages) { - sql_updateq("spip_forum", array("statut" => $statut), sql_in("id_forum", $id_messages) ." AND statut = '$old'"); + sql_updateq("spip_forum", array("statut" => $statut), sql_in("id_forum", $id_messages) . " AND statut = '$old'"); - $id_messages = array_map('reset',sql_allfetsel("id_forum", "spip_forum", sql_in("id_parent", $id_messages))); + $id_messages = array_map('reset', sql_allfetsel("id_forum", "spip_forum", sql_in("id_parent", $id_messages))); } // Notifier de la publication du message, s'il etait 'prop' - if ($old=='prop' AND $statut=='publie') { + if ($old == 'prop' and $statut == 'publie') { if ($notifications = charger_fonction('notifications', 'inc')) { $notifications('forumvalide', $id_forum); } @@ -58,18 +63,20 @@ function instituer_un_forum($statut,$row){ // c'est imparfait dans le cas ou les crayons ont ete utilises pour modifier ce message entre temps // car la date_thread aurait cette derniere date alors que pas le message // mais c'est au mieux de ce que l'on peut faire quand on depublie un SPAM ou supprime un message - if ($statut=='publie' OR $old=='publie') { - if ($statut=='publie' - OR !($date_thread = sql_getfetsel("date_heure", "spip_forum", "statut='publie' AND id_thread=".$row['id_thread'], "", "date_heure DESC","0,1"))){ + if ($statut == 'publie' or $old == 'publie') { + if ($statut == 'publie' + or !($date_thread = sql_getfetsel("date_heure", "spip_forum", + "statut='publie' AND id_thread=" . $row['id_thread'], "", "date_heure DESC", "0,1")) + ) { $date_thread = date('Y-m-d H:i:s'); } - sql_updateq("spip_forum", array("date_thread" => $date_thread), "id_thread=".$row['id_thread']); + sql_updateq("spip_forum", array("date_thread" => $date_thread), "id_thread=" . $row['id_thread']); } // invalider les pages comportant ce forum include_spip('inc/invalideur'); suivre_invalideur("id='forum/$id_forum'"); - suivre_invalideur("id='".$row['objet']."/".$row['id_objet']."'"); + suivre_invalideur("id='" . $row['objet'] . "/" . $row['id_objet'] . "'"); // Reindexation du thread (par exemple) pipeline('post_edition', @@ -81,11 +88,9 @@ function instituer_un_forum($statut,$row){ 'type' => 'forum', 'id_objet' => $id_forum, 'action' => 'instituer', - 'statut_ancien'=> $old, + 'statut_ancien' => $old, ), - 'data' => array('statut'=>$statut) + 'data' => array('statut' => $statut) ) ); } - -?> diff --git a/www/plugins-dist/forum/action/instituer_lot_forum.php b/www/plugins-dist/forum/action/instituer_lot_forum.php index cec40903..38b967f8 100644 --- a/www/plugins-dist/forum/action/instituer_lot_forum.php +++ b/www/plugins-dist/forum/action/instituer_lot_forum.php @@ -10,76 +10,88 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} // https://code.spip.net/@action_instituer_forum_dist -function action_instituer_lot_forum_dist($arg=null) { +function action_instituer_lot_forum_dist($arg = null) { - if (is_null($arg)){ + if (is_null($arg)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } // verifier les droits - if (autoriser('instituer','forum',0)){ + if (autoriser('instituer', 'forum', 0)) { /** * Cas 1 : les arguments sont explicites * statut-ip/email/id_auteur/auteur * */ - if (preg_match(",^(\w+)-,",$arg,$match) - AND in_array($statut=$match[1],array('publie','off','spam'))){ - $arg = substr($arg,strlen($statut)+1); + if (preg_match(",^(\w+)-,", $arg, $match) + and in_array($statut = $match[1], array('publie', 'off', 'spam')) + ) { + $arg = substr($arg, strlen($statut) + 1); - $arg = explode('/',$arg); + $arg = explode('/', $arg); $ip = array_shift($arg); $email_auteur = array_shift($arg); $id_auteur = intval(array_shift($arg)); - $auteur = implode('/',$arg); + $auteur = implode('/', $arg); $where = array(); // pas de moderation par lot sur les forum prives - $where[] = sql_in('statut',array('privadm','prive','privrac'),'NOT'); - if ($ip) $where[] = "ip=".sql_quote($ip); - if ($email_auteur) $where[] = "email_auteur=".sql_quote($email_auteur); - if ($id_auteur) $where[] = "id_auteur=".intval($id_auteur); - if ($auteur) $where[] = "auteur=".sql_quote($auteur); + $where[] = sql_in('statut', array('privadm', 'prive', 'privrac'), 'NOT'); + if ($ip) { + $where[] = "ip=" . sql_quote($ip); + } + if ($email_auteur) { + $where[] = "email_auteur=" . sql_quote($email_auteur); + } + if ($id_auteur) { + $where[] = "id_auteur=" . intval($id_auteur); + } + if ($auteur) { + $where[] = "auteur=" . sql_quote($auteur); + } $rows = sql_allfetsel("*", "spip_forum", $where); - if (!count($rows)) return; + if (!count($rows)) { + return; + } include_spip('action/instituer_forum'); foreach ($rows as $row) { - instituer_un_forum($statut,$row); + instituer_un_forum($statut, $row); } - } - /** + } /** * Cas 2 : seul le statut est explicite et signe * les id concernes sont passes en arg supplementaires * dans un taleau ids[] */ - elseif (preg_match(",^(\w+)$,",$arg,$match) - AND in_array($statut=$match[1],array('publie','off','spam')) - AND $id=_request('ids') - AND is_array($id)){ + elseif (preg_match(",^(\w+)$,", $arg, $match) + and in_array($statut = $match[1], array('publie', 'off', 'spam')) + and $id = _request('ids') + and is_array($id) + ) { - $ids = array_map('intval',$id); + $ids = array_map('intval', $id); $where = array(); // pas de moderation par lot sur les forum prives - $where[] = sql_in('statut',array('privadm','prive','privrac'),'NOT'); - $where[] = sql_in('id_forum',$ids); + $where[] = sql_in('statut', array('privadm', 'prive', 'privrac'), 'NOT'); + $where[] = sql_in('id_forum', $ids); $rows = sql_allfetsel("*", "spip_forum", $where); - if (!count($rows)) return; + if (!count($rows)) { + return; + } include_spip('action/instituer_forum'); foreach ($rows as $row) { - instituer_un_forum($statut,$row); + instituer_un_forum($statut, $row); } } - } - else { - spip_log("instituer_lot_forum interdit pour auteur ".$GLOBALS['visiteur_session']['id_auteur'],_LOG_ERREUR); + } else { + spip_log("instituer_lot_forum interdit pour auteur " . $GLOBALS['visiteur_session']['id_auteur'], _LOG_ERREUR); } } - -?> diff --git a/www/plugins-dist/forum/balise/formulaire_forum.php b/www/plugins-dist/forum/balise/formulaire_forum.php index eee62bf5..049e041a 100644 --- a/www/plugins-dist/forum/balise/formulaire_forum.php +++ b/www/plugins-dist/forum/balise/formulaire_forum.php @@ -10,31 +10,46 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; #securite +/** + * Gestion du formulaire Forum et de sa balise + * + * @package SPIP\Forum\Balises + **/ +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} #securite include_spip('inc/acces'); include_spip('inc/texte'); include_spip('inc/forum'); -/*******************************/ -/* GESTION DU FORMULAIRE FORUM */ -/*******************************/ - /** - * Contexte du formulaire - * Mots-cles dans les forums : - * Si la variable de personnalisation $afficher_groupe[] est definie - * dans le fichier d'appel, et si la table de reference est OK, proposer - * la liste des mots-cles - * #FORMULAIRE_FORUM seul calcule (objet, id_objet) depuis la boucle parente - * #FORMULAIRE_FORUM{#SELF} pour forcer l'url de retour - * #FORMULAIRE_FORUM{#SELF, article, 3} pour forcer l'objet et son identifiant - * https://code.spip.net/@balise_FORMULAIRE_FORUM + * Compile la balise `#FORMULAIRE_FORUM` qui affiche un formulaire d'ajout + * de commentaire + * + * Signature : `#FORMULAIRE_FORUM{[redirection[, objet, id_objet]]}` * - * @param Object $p - * @return Object + * Particularité du contexte du formulaire pour permettre une saisie + * de mots-clés dans les forums : si la variable de personnalisation + * `$afficher_groupe[]` est définie dans le fichier d'appel, et si la table + * de référence est OK, la liste des mots-clés est alors proposée. + * + * @balise + * @link https://www.spip.net/3969 Balise `#FORMULAIRE_FORUM` + * @link https://www.spip.net/1827 Les formulaires + * @example + * ``` + * #FORMULAIRE_FORUM seul calcule (objet, id_objet) depuis la boucle parente + * #FORMULAIRE_FORUM{#SELF} pour forcer l'url de retour + * #FORMULAIRE_FORUM{#SELF, article, 3} pour forcer l'objet et son identifiant + * ``` + * + * @param Champ $p + * Pile au niveau de la balise + * @return Champ + * Pile complétée par le code à générer */ -function balise_FORMULAIRE_FORUM ($p) { +function balise_FORMULAIRE_FORUM($p) { /** * On recupere $objet et $id_objet depuis une boucle englobante si possible * Sinon, on essaie aussi de recuperer des id_xx dans l'URL qui pourraient indiquer @@ -42,9 +57,13 @@ function balise_FORMULAIRE_FORUM ($p) { * Enfin, on pourra aussi forcer objet et id_objet depuis l'appel du formulaire */ - $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; - $_id_objet = $p->boucles[$i_boucle]->primary; - $_type = $p->boucles[$i_boucle]->id_table; + $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; + if ($i_boucle) { // La balise peut aussi être utilisée hors boucle. + $_id_objet = $p->boucles[$i_boucle]->primary; + $_type = $p->boucles[$i_boucle]->id_table; + } else { + $_id_objet = $_type = null; + } /** * On essaye de trouver les forums en fonction de l'environnement @@ -58,14 +77,14 @@ function balise_FORMULAIRE_FORUM ($p) { 'id_forum', 'ajouter_mot', 'ajouter_groupe', - 'afficher_texte' + 'forcer_previsu' ); - + if ($ids) { $obtenir = array_merge($obtenir, $ids); } - $p = calculer_balise_dynamique($p,'FORMULAIRE_FORUM', $obtenir, + $p = calculer_balise_dynamique($p, 'FORMULAIRE_FORUM', $obtenir, array("'$_type'", count($ids)) ); @@ -81,14 +100,12 @@ function balise_FORMULAIRE_FORUM ($p) { /** * Chercher l'objet/id_objet et la configuration du forum * - * https://code.spip.net/@balise_FORMULAIRE_FORUM_stat - * * @param array $args * @param array $context_compil * @return array|bool */ function balise_FORMULAIRE_FORUM_stat($args, $context_compil) { - + // un arg peut contenir l'url sur lequel faire le retour // exemple dans un squelette article.html : [(#FORMULAIRE_FORUM{#SELF})] @@ -101,11 +118,12 @@ function balise_FORMULAIRE_FORUM_stat($args, $context_compil) { $id_forum = intval(array_shift($args)); $ajouter_mot = array_shift($args); $ajouter_groupe = array_shift($args); - $afficher_texte = array_shift($args); + $forcer_previsu = array_shift($args); - $r = balise_forum_retrouve_objet($ido,$id_forum,$args,$context_compil); - if (!$r) + $r = balise_forum_retrouve_objet($ido, $id_forum, $args, $context_compil); + if (!$r) { return false; + } list($objet, $id_objet, $retour) = $r; @@ -114,15 +132,29 @@ function balise_FORMULAIRE_FORUM_stat($args, $context_compil) { // pour conditionner l'affichage d'un titre le precedant // (ie compatibilite) $accepter_forum = controler_forum($objet, $id_objet); - if ($accepter_forum == 'non') + if ($accepter_forum == 'non') { return false; + } return - array($objet, - $id_objet, $id_forum, $ajouter_mot, $ajouter_groupe, $afficher_texte, $retour); + array( + $objet, + $id_objet, + $id_forum, + $ajouter_mot, + $ajouter_groupe, + $forcer_previsu, + $retour + ); } /** + * Retrouve l'objet et id_objet d'un forum + * + * S'il n'est pas transmis, on le prend dans la boucle englobante, sinon + * dans l'environnement, sinon on tente de le retrouver depuis un autre + * message de forum + * * @param int $ido * @param int $id_forum * @param array $args @@ -130,13 +162,13 @@ function balise_FORMULAIRE_FORUM_stat($args, $context_compil) { * @param bool $objet_obligatoire * @return array|bool */ -function balise_forum_retrouve_objet($ido,$id_forum,$args,$context_compil, $objet_obligatoire = true){ - $_objet = $context_compil[5]; // type le la boucle deja calcule +function balise_forum_retrouve_objet($ido, $id_forum, $args, $context_compil, $objet_obligatoire = true) { + $_objet = $context_compil[5]; // type le la boucle deja calcule $nb_ids_env = $context_compil[6]; // nombre d'elements id_xx recuperes - $nb = $nb_ids_env; - $url = isset($args[$nb]) ? $args[$nb] : ''; - $objet = isset($args[++$nb]) ? $args[$nb] : ''; - $id_objet = isset($args[++$nb]) ? $args[$nb] : 0; + $nb = $nb_ids_env; + $url = isset($args[$nb]) ? $args[$nb] : ''; + $objet = isset($args[++$nb]) ? $args[$nb] : ''; + $id_objet = isset($args[++$nb]) ? $args[$nb] : 0; // pas d'objet force ? on prend le type de boucle calcule if (!$objet) { @@ -152,14 +184,15 @@ function balise_forum_retrouve_objet($ido,$id_forum,$args,$context_compil, $obje // on tente de prendre l'objet issu de l'environnement si un n'a pas pu etre calcule if (!$objet) { $objets = forum_get_objets_depuis_env(); - $ids = array(); $i = 0; + $ids = array(); + $i = 0; foreach ($objets as $o => $ido) { if ($id = $args[$i]) { $ids[$o] = $id; } $i++; } - if (count($ids)>1) { + if (count($ids) > 1) { if (isset($ids['rubrique'])) { unset($ids['rubrique']); } @@ -172,20 +205,20 @@ function balise_forum_retrouve_objet($ido,$id_forum,$args,$context_compil, $obje unset($i); // et si on n'a toujours pas ce qu'on souhaite, on tente de le trouver dans un forum existant... - if (($objet=='forum' OR !$id_objet) and $id_forum){ + if (($objet == 'forum' or !$id_objet) and $id_forum) { if ($objet = sql_fetsel(array('id_objet', 'objet'), 'spip_forum', 'id_forum=' . intval($id_forum))) { $id_objet = $objet['id_objet']; $objet = $objet['objet']; } else { - if ($objet_obligatoire) + if ($objet_obligatoire) { return false; + } } } // vraiment la... faut pas exagerer ! - if ($objet_obligatoire AND !$id_objet) { + if ($objet_obligatoire and !$id_objet) { return false; } - return array($objet,$id_objet,$url); + return array($objet, $id_objet, $url); } -?> diff --git a/www/plugins-dist/forum/balise/formulaire_forum_prive.php b/www/plugins-dist/forum/balise/formulaire_forum_prive.php index d037769c..cc2a40d9 100644 --- a/www/plugins-dist/forum/balise/formulaire_forum_prive.php +++ b/www/plugins-dist/forum/balise/formulaire_forum_prive.php @@ -10,31 +10,46 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; #securite +/** + * Gestion du formulaire Forum Privé et de sa balise + * + * @package SPIP\Forum\Balises + **/ +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} #securite include_spip('inc/acces'); include_spip('inc/texte'); include_spip('inc/forum'); -/*******************************/ -/* GESTION DU FORMULAIRE FORUM */ -/*******************************/ /** - * Contexte du formulaire - * Mots-cles dans les forums : - * Si la variable de personnalisation $afficher_groupe[] est definie - * dans le fichier d'appel, et si la table de reference est OK, proposer - * la liste des mots-cles - * #FORMULAIRE_FORUM_PRIVE seul calcule (objet, id_objet) depuis la boucle parente - * #FORMULAIRE_FORUM_PRIVE{#SELF} pour forcer l'url de retour - * #FORMULAIRE_FORUM_PRIVE{#SELF, article, 3} pour forcer l'objet et son identifiant - * https://code.spip.net/@balise_FORMULAIRE_FORUM_PRIVE + * Compile la balise `#FORMULAIRE_FORUM_PRIVE` qui affiche un formulaire d'ajout + * de commentaire pour l'espace privé + * + * Signature : `#FORMULAIRE_FORUM_PRIVE{[redirection[, objet, id_objet]]}` + * + * Particularité du contexte du formulaire pour permettre une saisie + * de mots-clés dans les forums : si la variable de personnalisation + * `$afficher_groupe[]` est définie dans le fichier d'appel, et si la table + * de référence est OK, la liste des mots-clés est alors proposée. * - * @param Object $p - * @return Object + * @balise + * @see balise_FORMULAIRE_FORUM() + * @example + * ``` + * #FORMULAIRE_FORUM_PRIVE seul calcule (objet, id_objet) depuis la boucle parente + * #FORMULAIRE_FORUM_PRIVE{#SELF} pour forcer l'url de retour + * #FORMULAIRE_FORUM_PRIVE{#SELF, article, 3} pour forcer l'objet et son identifiant + * ``` + * + * @param Champ $p + * Pile au niveau de la balise + * @return Champ + * Pile complétée par le code à générer */ -function balise_FORMULAIRE_FORUM_PRIVE ($p) { +function balise_FORMULAIRE_FORUM_PRIVE($p) { /** * On recupere $objet et $id_objet depuis une boucle englobante si possible @@ -42,10 +57,10 @@ function balise_FORMULAIRE_FORUM_PRIVE ($p) { * sur quoi le formulaire porte. * Enfin, on pourra aussi forcer objet et id_objet depuis l'appel du formulaire */ - $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; + $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; if (isset($p->boucles[$i_boucle])) { $_id_objet = $p->boucles[$i_boucle]->primary; - $_type = $p->boucles[$i_boucle]->id_table; + $_type = $p->boucles[$i_boucle]->id_table; } else { $_id_objet = $_type = ''; } @@ -60,7 +75,7 @@ function balise_FORMULAIRE_FORUM_PRIVE ($p) { $obtenir = array( $_id_objet, 'id_forum', - 'afficher_texte', + 'forcer_previsu', 'statut', ); @@ -69,7 +84,7 @@ function balise_FORMULAIRE_FORUM_PRIVE ($p) { $obtenir = array_merge($obtenir, $ids); } - $p = calculer_balise_dynamique($p,'FORMULAIRE_FORUM_PRIVE', $obtenir, + $p = calculer_balise_dynamique($p, 'FORMULAIRE_FORUM_PRIVE', $obtenir, array("'$_type'", count($ids)) ); @@ -79,8 +94,6 @@ function balise_FORMULAIRE_FORUM_PRIVE ($p) { /** * Chercher l'objet/id_objet et la configuration du forum * - * https://code.spip.net/@balise_FORMULAIRE_FORUM_PRIVE_stat - * * @param array $args * @param array $context_compil * @return array|bool @@ -96,19 +109,19 @@ function balise_FORMULAIRE_FORUM_PRIVE_stat($args, $context_compil) { // $args = (obtenir) + (ids) + (url, objet, id_objet) $ido = array_shift($args); $id_forum = intval(array_shift($args)); - $afficher_texte = array_shift($args); + $forcer_previsu = array_shift($args); $statut = array_shift($args); include_spip('balise/formulaire_forum'); // si statut privrac ou privadm, pas besoin d'objet ! - $r = balise_forum_retrouve_objet($ido,$id_forum,$args,$context_compil,!in_array($statut,array('privrac','privadm'))); - if (!$r) + $r = balise_forum_retrouve_objet($ido, $id_forum, $args, $context_compil, + !in_array($statut, array('privrac', 'privadm'))); + if (!$r) { return false; + } list($objet, $id_objet, $retour) = $r; return - array($objet, $id_objet, $id_forum, $afficher_texte, $statut, $retour); + array($objet, $id_objet, $id_forum, $forcer_previsu, $statut, $retour); } - -?> diff --git a/www/plugins-dist/forum/base/forum.php b/www/plugins-dist/forum/base/forum.php index 79d13ed7..36d09d17 100644 --- a/www/plugins-dist/forum/base/forum.php +++ b/www/plugins-dist/forum/base/forum.php @@ -10,43 +10,61 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Déclarations des tables et objets au compilateur + * + * @package SPIP\Core\Pipelines + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Interfaces de la table forum pour le compilateur * + * @pipeline declarer_tables_interfaces * @param array $interfaces * @return array $interfaces */ -function forum_declarer_tables_interfaces($interfaces){ +function forum_declarer_tables_interfaces($interfaces) { - $interfaces['table_des_tables']['forums']='forum'; + $interfaces['table_des_tables']['forums'] = 'forum'; - $interfaces['exceptions_des_tables']['forums']['date']='date_heure'; - $interfaces['exceptions_des_tables']['forums']['nom']='auteur'; - $interfaces['exceptions_des_tables']['forums']['email']='email_auteur'; + $interfaces['exceptions_des_tables']['forums']['date'] = 'date_heure'; + $interfaces['exceptions_des_tables']['forums']['nom'] = 'auteur'; + $interfaces['exceptions_des_tables']['forums']['email'] = 'email_auteur'; // il ne faut pas essayer de chercher le forum du mot cle, mais bien le mot cle associe au forum - $interfaces['exceptions_des_jointures']['spip_forum']['id_secteur'] = array('spip_articles','id_secteur'); - $interfaces['exceptions_des_jointures']['spip_forum']['id_mot'] = array('spip_mots','id_mot'); - $interfaces['exceptions_des_jointures']['spip_forum']['titre_mot'] = array('spip_mots','titre'); - $interfaces['exceptions_des_jointures']['spip_forum']['type_mot'] = array('spip_mots','type'); - $interfaces['exceptions_des_jointures']['spip_forum']['id_groupe'] = array('spip_mots','id_groupe'); + $interfaces['exceptions_des_jointures']['spip_forum']['id_secteur'] = array('spip_articles', 'id_secteur'); + $interfaces['exceptions_des_jointures']['spip_forum']['id_mot'] = array('spip_mots', 'id_mot'); + $interfaces['exceptions_des_jointures']['spip_forum']['titre_mot'] = array('spip_mots', 'titre'); + $interfaces['exceptions_des_jointures']['spip_forum']['type_mot'] = array('spip_mots', 'type'); + $interfaces['exceptions_des_jointures']['spip_forum']['id_groupe'] = array('spip_mots', 'id_groupe'); + - #$interfaces['table_titre']['forums']= "titre, '' AS lang"; #$interfaces['table_date']['forums']='date_heure'; - $interfaces['table_statut']['spip_forum'][] = array('champ'=>'statut','publie'=>'publie','previsu'=>'publie,prop','exception'=>'statut'); + $interfaces['table_statut']['spip_forum'][] = array( + 'champ' => 'statut', + 'publie' => 'publie', + 'previsu' => 'publie,prop', + 'exception' => 'statut' + ); - $interfaces['table_des_traitements']['PARAMETRES_FORUM'][]= 'spip_htmlspecialchars(%s)'; - $interfaces['table_des_traitements']['TEXTE']['forums']= "liens_nofollow(safehtml(".str_replace("%s","interdit_html(%s)",_TRAITEMENT_RACCOURCIS)."))"; - $interfaces['table_des_traitements']['TITRE']['forums']= "liens_nofollow(safehtml(".str_replace("%s","interdit_html(%s)",_TRAITEMENT_TYPO)."))"; - $interfaces['table_des_traitements']['NOTES']['forums']= "liens_nofollow(safehtml(".str_replace("%s","interdit_html(%s)",_TRAITEMENT_RACCOURCIS)."))"; - $interfaces['table_des_traitements']['NOM_SITE']['forums']= "liens_nofollow(safehtml(".str_replace("%s","interdit_html(%s)",_TRAITEMENT_TYPO)."))"; - $interfaces['table_des_traitements']['URL_SITE']['forums']= 'safehtml(vider_url(%s))'; - $interfaces['table_des_traitements']['AUTEUR']['forums']= 'liens_nofollow(safehtml(vider_url(%s)))'; - $interfaces['table_des_traitements']['EMAIL_AUTEUR']['forums']= 'safehtml(vider_url(%s))'; + $interfaces['table_des_traitements']['PARAMETRES_FORUM'][] = 'spip_htmlspecialchars(%s)'; + $interfaces['table_des_traitements']['TEXTE']['forums'] = "liens_nofollow(safehtml(" . str_replace("%s", + "interdit_html(%s)", _TRAITEMENT_RACCOURCIS) . "))"; + $interfaces['table_des_traitements']['TITRE']['forums'] = "liens_nofollow(safehtml(" . str_replace("%s", + "interdit_html(%s)", _TRAITEMENT_TYPO) . "))"; + $interfaces['table_des_traitements']['NOTES']['forums'] = "liens_nofollow(safehtml(" . str_replace("%s", + "interdit_html(%s)", _TRAITEMENT_RACCOURCIS) . "))"; + $interfaces['table_des_traitements']['NOM_SITE']['forums'] = "liens_nofollow(safehtml(" . str_replace("%s", + "interdit_html(%s)", _TRAITEMENT_TYPO) . "))"; + $interfaces['table_des_traitements']['URL_SITE']['forums'] = 'safehtml(vider_url(%s))'; + $interfaces['table_des_traitements']['AUTEUR']['forums'] = 'liens_nofollow(safehtml(vider_url(%s)))'; + $interfaces['table_des_traitements']['EMAIL_AUTEUR']['forums'] = 'safehtml(vider_url(%s))'; return $interfaces; } @@ -54,23 +72,26 @@ function forum_declarer_tables_interfaces($interfaces){ /** * Déclaration de la table spip_forum et de l'objet forum * + * @pipeline declarer_tables_objets_sql * @param array $tables Tableau des objets déclarés * @return array $tables Tableau des objets complété */ -function forum_declarer_tables_objets_sql($tables){ +function forum_declarer_tables_objets_sql($tables) { $tables['spip_forum'] = array( - 'table_objet'=>'forums', # ??? hum hum redevient spip_forum par table_objet_sql mais casse par un bete "spip_".table_objet() - 'type'=>'forum', - 'url_voir'=>'controler_forum', - 'url_edit'=>'controler_forum', - 'editable'=>'non', + 'table_objet' => 'forums', + # ??? hum hum redevient spip_forum par table_objet_sql mais casse par un bete "spip_".table_objet() + 'type' => 'forum', + 'url_voir' => 'controler_forum', + 'url_edit' => 'controler_forum', + 'editable' => 'non', 'principale' => 'oui', - 'page'=>'', // pas de page editoriale pour un forum + 'page' => '', + // pas de page editoriale pour un forum 'texte_retour' => 'icone_retour', 'texte_objets' => 'forum:forum', 'texte_objet' => 'forum:forum', - 'info_aucun_objet'=> 'forum:aucun_message_forum', + 'info_aucun_objet' => 'forum:aucun_message_forum', 'info_1_objet' => 'forum:info_1_message_forum', 'info_nb_objets' => 'forum:info_nb_messages_forum', 'titre' => "titre, '' AS lang", @@ -78,48 +99,51 @@ function forum_declarer_tables_objets_sql($tables){ 'champs_editables' => array('titre', 'texte', 'nom_site', 'url_site'), - 'field'=> array( - "id_forum" => "bigint(21) NOT NULL", - "id_objet" => "bigint(21) DEFAULT '0' NOT NULL", - "objet" => "VARCHAR (25) DEFAULT '' NOT NULL", - "id_parent" => "bigint(21) DEFAULT '0' NOT NULL", - "id_thread" => "bigint(21) DEFAULT '0' NOT NULL", - "date_heure" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", - "date_thread" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", - "titre" => "text DEFAULT '' NOT NULL", - "texte" => "mediumtext DEFAULT '' NOT NULL", - "auteur" => "text DEFAULT '' NOT NULL", - "email_auteur" => "text DEFAULT '' NOT NULL", - "nom_site" => "text DEFAULT '' NOT NULL", - "url_site" => "text DEFAULT '' NOT NULL", - "statut" => "varchar(8) DEFAULT '0' NOT NULL", - "ip" => "varchar(40) DEFAULT '' NOT NULL", - "maj" => "TIMESTAMP", - "id_auteur" => "bigint DEFAULT '0' NOT NULL" + 'field' => array( + "id_forum" => "bigint(21) NOT NULL", + "id_objet" => "bigint(21) DEFAULT '0' NOT NULL", + "objet" => "VARCHAR (25) DEFAULT '' NOT NULL", + "id_parent" => "bigint(21) DEFAULT '0' NOT NULL", + "id_thread" => "bigint(21) DEFAULT '0' NOT NULL", + "date_heure" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", + "date_thread" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", + "titre" => "text DEFAULT '' NOT NULL", + "texte" => "mediumtext DEFAULT '' NOT NULL", + "auteur" => "text DEFAULT '' NOT NULL", + "email_auteur" => "text DEFAULT '' NOT NULL", + "nom_site" => "text DEFAULT '' NOT NULL", + "url_site" => "text DEFAULT '' NOT NULL", + "statut" => "varchar(8) DEFAULT '0' NOT NULL", + "ip" => "varchar(40) DEFAULT '' NOT NULL", + "maj" => "TIMESTAMP", + "id_auteur" => "bigint DEFAULT '0' NOT NULL" ), 'key' => array( - "PRIMARY KEY" => "id_forum", - "KEY id_auteur" => "id_auteur", - "KEY id_parent" => "id_parent", - "KEY id_thread" => "id_thread", + "PRIMARY KEY" => "id_forum", + "KEY id_auteur" => "id_auteur", + "KEY id_parent" => "id_parent", + "KEY id_thread" => "id_thread", "KEY optimal" => "statut,id_parent,id_objet,objet,date_heure" ), 'join' => array( - "id_forum"=>"id_forum", - "id_parent"=>"id_parent", - "id_objet"=>"id_objet", - "objet"=>"objet", - "id_auteur"=>"id_auteur", + "id_forum" => "id_forum", + "id_parent" => "id_parent", + "id_objet" => "id_objet", + "objet" => "objet", + "id_auteur" => "id_auteur", ), 'rechercher_champs' => array( - 'titre' => 3, 'texte' => 1, 'auteur' => 2, 'email_auteur' => 2, 'nom_site' => 1, 'url_site' => 1 + 'titre' => 3, + 'texte' => 1, + 'auteur' => 2, + 'email_auteur' => 2, + 'nom_site' => 1, + 'url_site' => 1 ), ); // jointures sur les forum pour tous les objets - $tables[]['tables_jointures'][]= 'forums'; + $tables[]['tables_jointures'][] = 'forums'; return $tables; } - -?> diff --git a/www/plugins-dist/forum/formulaires/activer_forums_objet.html b/www/plugins-dist/forum/formulaires/activer_forums_objet.html index 770a1e34..4b75c398 100644 --- a/www/plugins-dist/forum/formulaires/activer_forums_objet.html +++ b/www/plugins-dist/forum/formulaires/activer_forums_objet.html @@ -7,9 +7,9 @@ [

    (#ENV*{message_erreur})

    ] [(#ENV{editable})
    - [(#ACTION_FORMULAIRE{#ENV{action}})] -
      -
    • + #ACTION_FORMULAIRE +
      +
      [ (#ENV**{erreurs}|table_valeur{accepter_forum}) ] -
    • -
    +
    +

    ] diff --git a/www/plugins-dist/forum/formulaires/activer_forums_objet.php b/www/plugins-dist/forum/formulaires/activer_forums_objet.php index caae5be5..21bc4ef6 100644 --- a/www/plugins-dist/forum/formulaires/activer_forums_objet.php +++ b/www/plugins-dist/forum/formulaires/activer_forums_objet.php @@ -10,47 +10,69 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Gestion du formulaire de configuration indiquant où les forums peuvent + * être activés + * + * @package SPIP\Forum\Formulaires + **/ +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} -// Recuperer le reglage des forums publics de l'article x -// https://code.spip.net/@get_forums_publics -function get_forums_publics($id_objet=0, $objet='article') { +/** + * Récupérer le réglage des forums publics d'un objet + * + * @param int $id_objet + * @param string $objet + * @return bool + * true si les forums publics sont autorisés, false sinon + **/ +function get_forums_publics($id_objet = 0, $objet = 'article') { - if ($objet=='article' AND $id_objet) { - $obj = sql_fetsel("accepter_forum", "spip_articles", "id_article=".intval($id_objet)); + if ($objet == 'article' and $id_objet) { + $obj = sql_fetsel("accepter_forum", "spip_articles", "id_article=" . intval($id_objet)); - if ($obj) return $obj['accepter_forum']; + if ($obj) { + return $obj['accepter_forum']; + } } else { // dans ce contexte, inutile - return substr($GLOBALS['meta']["forums_publics"],0,3); + return substr($GLOBALS['meta']["forums_publics"], 0, 3); } + return $GLOBALS['meta']["forums_publics"]; } /** * Charger * - * @param int $id_article + * @param int $id_objet + * @param string $objet * @return array + * Contexte du squelette du formulaire */ -function formulaires_activer_forums_objet_charger_dist($id_objet, $objet='article'){ - if (!autoriser('modererforum', $objet, $id_objet)) +function formulaires_activer_forums_objet_charger_dist($id_objet, $objet = 'article') { + if (!autoriser('modererforum', $objet, $id_objet)) { return false; + } include_spip('inc/presentation'); include_spip('base/abstract_sql'); - $nb_forums = sql_countsel("spip_forum", "objet=".sql_quote($objet)." AND id_objet=".intval($id_objet)." AND statut IN ('publie', 'off', 'prop', 'spam')"); - $editable = ($objet=='article')?true:false; - if (!$editable AND !$nb_forums) + $nb_forums = sql_countsel("spip_forum", + "objet=" . sql_quote($objet) . " AND id_objet=" . intval($id_objet) . " AND statut IN ('publie', 'off', 'prop', 'spam')"); + $editable = ($objet == 'article') ? true : false; + if (!$editable and !$nb_forums) { return false; + } return array( 'editable' => $editable, 'objet' => $objet, 'id_objet' => $id_objet, 'accepter_forum' => get_forums_publics($id_objet, $objet), - '_suivi_forums' => $nb_forums?_T('forum:icone_suivi_forum', array('nb_forums' => $nb_forums)):"", + '_suivi_forums' => $nb_forums ? _T('forum:icone_suivi_forum', array('nb_forums' => $nb_forums)) : "", ); - + } /** @@ -59,22 +81,21 @@ function formulaires_activer_forums_objet_charger_dist($id_objet, $objet='articl * @param int $id_objet * @param string $objet * @return array + * Retours des traitements */ -function formulaires_activer_forums_objet_traiter_dist($id_objet, $objet='article'){ +function formulaires_activer_forums_objet_traiter_dist($id_objet, $objet = 'article') { include_spip('inc/autoriser'); - if ($objet=='article' AND autoriser('modererforum', $objet, $id_objet)){ + if ($objet == 'article' and autoriser('modererforum', $objet, $id_objet)) { $statut = _request('accepter_forum'); include_spip('base/abstract_sql'); - sql_updateq("spip_articles", array("accepter_forum" => $statut), "id_article=". intval($id_objet)); - + sql_updateq("spip_articles", array("accepter_forum" => $statut), "id_article=" . intval($id_objet)); + if ($statut == 'abo') { ecrire_meta('accepter_visiteurs', 'oui'); } include_spip('inc/invalideur'); suivre_invalideur("id='$objet/$id_objet'"); } - - return array('message_ok'=>_T('config_info_enregistree'),'editable'=>true); -} -?> \ No newline at end of file + return array('message_ok' => _T('config_info_enregistree'), 'editable' => true); +} diff --git a/www/plugins-dist/forum/formulaires/configurer_forums_contenu.html b/www/plugins-dist/forum/formulaires/configurer_forums_contenu.html index e3b9871d..985285b3 100644 --- a/www/plugins-dist/forum/formulaires/configurer_forums_contenu.html +++ b/www/plugins-dist/forum/formulaires/configurer_forums_contenu.html @@ -5,9 +5,9 @@ [

    (#ENV*{message_erreur})

    ]
    - [(#ACTION_FORMULAIRE{#ENV{action}})] -
      -
    • + #ACTION_FORMULAIRE +
      +
      [ (#ENV**{erreurs}|table_valeur{forums_titre}) ]
      @@ -28,17 +28,26 @@
      -
    • +
    +
    + [ + (#ENV**{erreurs}|table_valeur{forcer_previsu}) + ] +
    + + +
    +
    [(#PLUGIN{medias}|oui) -
  • +
    <:forum:info_question_visiteur_ajout_document_forum:>
    <:forum:info_question_visiteur_ajout_document_forum_format:>
    [(#ENV**{erreurs}|table_valeur{formats_documents_forum})] -
  • + ] - +

    diff --git a/www/plugins-dist/forum/formulaires/configurer_forums_contenu.php b/www/plugins-dist/forum/formulaires/configurer_forums_contenu.php index 6efa2935..978c2745 100644 --- a/www/plugins-dist/forum/formulaires/configurer_forums_contenu.php +++ b/www/plugins-dist/forum/formulaires/configurer_forums_contenu.php @@ -10,38 +10,48 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} -function formulaires_configurer_forums_contenu_charger_dist(){ +function formulaires_configurer_forums_contenu_charger_dist() { return array( 'forums_titre' => $GLOBALS['meta']["forums_titre"], 'forums_texte' => $GLOBALS['meta']["forums_texte"], 'forums_urlref' => $GLOBALS['meta']["forums_urlref"], 'forums_afficher_barre' => $GLOBALS['meta']["forums_afficher_barre"], + 'forums_forcer_previsu' => $GLOBALS['meta']["forums_forcer_previsu"], 'formats_documents_forum' => $GLOBALS['meta']['formats_documents_forum'], ); - + } -function formulaires_configurer_forums_contenu_verifier_dist(){ +function formulaires_configurer_forums_contenu_verifier_dist() { $erreurs = array(); - if (!_request('forums_titre') AND !_request('forums_texte') AND !_request('forums_urlref')) + if (!_request('forums_titre') and !_request('forums_texte') and !_request('forums_urlref')) { $erreurs['forums_titre'] = _T('info_obligatoire'); + } + + foreach (array( + 'forums_titre', + 'forums_texte', + 'forums_urlref', + 'forums_afficher_barre', + 'forums_forcer_previsu' + ) as $champ) { + if (_request($champ) !== 'oui') { + set_request($champ, 'non'); + } + } - foreach(array('forums_titre', 'forums_texte', 'forums_urlref','forums_afficher_barre') as $champ) - if (_request($champ)!=='oui') - set_request($champ,'non'); - return $erreurs; } -function formulaires_configurer_forums_contenu_traiter_dist(){ +function formulaires_configurer_forums_contenu_traiter_dist() { include_spip('inc/config'); appliquer_modifs_config(); - return array('message_ok'=>_T('config_info_enregistree')); + return array('message_ok' => _T('config_info_enregistree')); } - -?> \ No newline at end of file diff --git a/www/plugins-dist/forum/formulaires/configurer_forums_notifications.html b/www/plugins-dist/forum/formulaires/configurer_forums_notifications.html index e62983ed..3a46bb13 100644 --- a/www/plugins-dist/forum/formulaires/configurer_forums_notifications.html +++ b/www/plugins-dist/forum/formulaires/configurer_forums_notifications.html @@ -5,34 +5,34 @@ [

    (#ENV*{message_erreur})

    ]
    - [(#ACTION_FORMULAIRE{#ENV{action}})] + #ACTION_FORMULAIRE

    <:forum:info_option_email:>

    -
      -
    • +
      +
      [ (#ENV**{erreurs}|table_valeur{prevenir_auteurs_pos}) ]
      -
    • -
    • +
    +
    [ (#ENV**{erreurs}|table_valeur{prevenir_auteurs_pri}) ]
    - -
  • +
  • +
    [ (#ENV**{erreurs}|table_valeur{prevenir_auteurs_abo}) ]
    - - +
    +

    diff --git a/www/plugins-dist/forum/formulaires/configurer_forums_notifications.php b/www/plugins-dist/forum/formulaires/configurer_forums_notifications.php index 0f57c220..d581e612 100644 --- a/www/plugins-dist/forum/formulaires/configurer_forums_notifications.php +++ b/www/plugins-dist/forum/formulaires/configurer_forums_notifications.php @@ -10,33 +10,36 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} $GLOBALS['liste_des_forums']['forum:bouton_radio_modere_posteriori'] = 'pos'; $GLOBALS['liste_des_forums']['forum:bouton_radio_modere_priori'] = 'pri'; $GLOBALS['liste_des_forums']['forum:bouton_radio_modere_abonnement'] = 'abo'; $GLOBALS['liste_des_forums']['forum:info_pas_de_forum'] = 'non'; -function formulaires_configurer_forums_notifications_charger_dist(){ +function formulaires_configurer_forums_notifications_charger_dist() { $valeurs = array(); $m = $GLOBALS['meta']['prevenir_auteurs']; $l = $GLOBALS['liste_des_forums']; unset($l['forum:info_pas_de_forum']); - foreach ($l as $desc => $val) - $valeurs['prevenir_auteurs_' . $val] = (($m == 'oui') OR strpos($m,",$val,")!==false); + foreach ($l as $desc => $val) { + $valeurs['prevenir_auteurs_' . $val] = (($m == 'oui') or strpos($m, ",$val,") !== false); + } return $valeurs; } -function formulaires_configurer_forums_notifications_traiter_dist(){ +function formulaires_configurer_forums_notifications_traiter_dist() { include_spip('inc/meta'); $res = array(); foreach ($GLOBALS['liste_des_forums'] as $desc => $val) { - if (_request('prevenir_auteurs_' . $val)) $res[]=$val; + if (_request('prevenir_auteurs_' . $val)) { + $res[] = $val; + } } - ecrire_meta('prevenir_auteurs', $res ? (','.join(',',$res).',') : 'non'); + ecrire_meta('prevenir_auteurs', $res ? (',' . join(',', $res) . ',') : 'non'); - return array('message_ok'=>_T('config_info_enregistree')); + return array('message_ok' => _T('config_info_enregistree')); } - -?> \ No newline at end of file diff --git a/www/plugins-dist/forum/formulaires/configurer_forums_participants.html b/www/plugins-dist/forum/formulaires/configurer_forums_participants.html index 68dd656d..61d250f5 100644 --- a/www/plugins-dist/forum/formulaires/configurer_forums_participants.html +++ b/www/plugins-dist/forum/formulaires/configurer_forums_participants.html @@ -5,9 +5,9 @@ [

    (#ENV*{message_erreur})

    ]
    - [(#ACTION_FORMULAIRE{#ENV{action}})] -
      -
    • + #ACTION_FORMULAIRE +
      +
      [ (#ENV**{erreurs}|table_valeur{forums_publics}) ]
      @@ -27,12 +27,12 @@
      -
    • -
    • +
    +
    <:info_options_avancees:> -
      -
    • +
      +
      [ (#ENV**{erreurs}|table_valeur{forums_publics_appliquer}) ] @@ -48,26 +48,27 @@
      -
    • -
    +
    + - - + +

    \ No newline at end of file diff --git a/www/plugins-dist/forum/formulaires/configurer_forums_participants.php b/www/plugins-dist/forum/formulaires/configurer_forums_participants.php index fa3f3aa1..cd22cf9e 100644 --- a/www/plugins-dist/forum/formulaires/configurer_forums_participants.php +++ b/www/plugins-dist/forum/formulaires/configurer_forums_participants.php @@ -10,25 +10,28 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} -function formulaires_configurer_forums_participants_charger_dist(){ +function formulaires_configurer_forums_participants_charger_dist() { return array( 'forums_publics' => $GLOBALS['meta']["forums_publics"], ); - + } -function formulaires_configurer_forums_participants_traiter_dist(){ +function formulaires_configurer_forums_participants_traiter_dist() { include_spip('inc/config'); include_spip('inc/meta'); $purger_skel = false; if ($accepter_forum = _request('forums_publics') - AND ($accepter_forum != $GLOBALS['meta']["forums_publics"])) { + and ($accepter_forum != $GLOBALS['meta']["forums_publics"]) + ) { $purger_skel = true; - $accepter_forum = substr($accepter_forum,0,3); + $accepter_forum = substr($accepter_forum, 0, 3); } // Appliquer les changements de moderation forum @@ -40,11 +43,12 @@ function formulaires_configurer_forums_participants_traiter_dist(){ ? "accepter_forum != 'non'" : ''; - sql_updateq('spip_articles', array('accepter_forum'=>$accepter_forum), $sauf); + sql_updateq('spip_articles', array('accepter_forum' => $accepter_forum), $sauf); } - if ($accepter_forum == 'abo') + if ($accepter_forum == 'abo') { ecrire_meta('accepter_visiteurs', 'oui'); + } appliquer_modifs_config(); if ($purger_skel) { @@ -52,7 +56,5 @@ function formulaires_configurer_forums_participants_traiter_dist(){ suivre_invalideur("forum/*"); } - return array('message_ok'=>_T('config_info_enregistree')); + return array('message_ok' => _T('config_info_enregistree')); } - -?> \ No newline at end of file diff --git a/www/plugins-dist/forum/formulaires/configurer_forums_prives.html b/www/plugins-dist/forum/formulaires/configurer_forums_prives.html index 765d4474..45ee1a13 100644 --- a/www/plugins-dist/forum/formulaires/configurer_forums_prives.html +++ b/www/plugins-dist/forum/formulaires/configurer_forums_prives.html @@ -5,22 +5,16 @@ [

    (#ENV*{message_erreur})

    ]
    - [(#ACTION_FORMULAIRE{#ENV{action}})] + #ACTION_FORMULAIRE

    <:forum:info_config_forums_prive:>

    -
      -
    • - [ - (#ENV**{erreurs}|table_valeur{forum_prive_objets}) - ]
      - - -
      -
      - - -
      -
    • -
    • +
      + #SET{name,forum_prive_objets}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} +
      + [ + (#GET{erreurs}) + ]#INCLURE{fond=formulaires/inc-choisir-objets,name=#GET{name},selected=#ENV**{#GET{name}},exclus=spip_forum} +
      +
      [ (#ENV**{erreurs}|table_valeur{forum_prive}) ]
      @@ -31,8 +25,8 @@
      -
    • -
    • +
    +
    [ (#ENV**{erreurs}|table_valeur{forum_prive_admin}) ]
    @@ -43,8 +37,8 @@
    - - +
    +

    diff --git a/www/plugins-dist/forum/formulaires/configurer_forums_prives.php b/www/plugins-dist/forum/formulaires/configurer_forums_prives.php index 09c96d3f..d51482db 100644 --- a/www/plugins-dist/forum/formulaires/configurer_forums_prives.php +++ b/www/plugins-dist/forum/formulaires/configurer_forums_prives.php @@ -10,23 +10,34 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} -function formulaires_configurer_forums_prives_charger_dist(){ +function formulaires_configurer_forums_prives_charger_dist() { return array( - 'forum_prive_objets' => $GLOBALS['meta']["forum_prive_objets"], + 'forum_prive_objets' => explode(',', $GLOBALS['meta']["forum_prive_objets"]), 'forum_prive' => $GLOBALS['meta']["forum_prive"], 'forum_prive_admin' => $GLOBALS['meta']["forum_prive_admin"], ); - -} -function formulaires_configurer_forums_prives_traiter_dist(){ - include_spip('inc/config'); - appliquer_modifs_config(); - - return array('message_ok'=>_T('config_info_enregistree')); } -?> \ No newline at end of file +function formulaires_configurer_forums_prives_traiter_dist() { + $res = array('editable' => true); + + if (!is_null($v = _request($m = 'forum_prive_objets'))) { + ecrire_meta($m, is_array($v) ? implode(',', $v) : ''); + } + if (!is_null($v = _request($m = 'forum_prive'))) { + ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); + } + if (!is_null($v = _request($m = 'forum_prive_admin'))) { + ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); + } + + $res['message_ok'] = _T('config_info_enregistree'); + + return $res; +} diff --git a/www/plugins-dist/forum/formulaires/forum.html b/www/plugins-dist/forum/formulaires/forum.html index 792d5128..7ab2f20b 100644 --- a/www/plugins-dist/forum/formulaires/forum.html +++ b/www/plugins-dist/forum/formulaires/forum.html @@ -19,7 +19,7 @@ ][
    - [(#ACTION_FORMULAIRE{#ENV{action}})] + #ACTION_FORMULAIRE @@ -32,72 +32,67 @@
    -[(#ACTION_FORMULAIRE{#ENV{action}})] -[] -[
    - <:forum:bouton_radio_modere_priori:> -

    (#ENV{modere})<:forum:forum_info_modere:>

    -
    ] - -[(#ENV**{afficher_texte}|choixsiegal{'non', ' ',''}) -[] -

    ] - -[(#ENV**{afficher_texte}|choixsiegal{'non', '',' '}) + #ACTION_FORMULAIRE + [] + [
    + <:forum:bouton_radio_modere_priori:> +

    (#ENV{modere})<:forum:forum_info_modere:>

    +
    ] +
    <:forum:forum_message:>[ (#CONFIG{forums_titre}|!={non}|non) - ]
      - [
    • (#INCLURE{fond=formulaires/inc-forum_bloc_choix_mots, table=#ENV*{table}, ajouter_mot})
    • ] + ]
      + [
      (#INCLURE{fond=formulaires/inc-forum_bloc_choix_mots, table=#ENV*{table}, ajouter_mot})
      ] [(#CONFIG{forums_titre}|!={non}|oui) -
    • +
      [(#ENV**{erreurs}|table_valeur{titre})] -
    • +
      ] [(#CONFIG{forums_texte}|!={non}|?{ -
    • +
      [(#ENV**{erreurs}|table_valeur{texte})] + [(#ENV**{config}|table_valeur{afficher_barre}|?{

      <:info_creation_paragraphe:>

      ,

      <:forum:forum_saisie_texte_info:>

      })] - [(#ENV**{config}|table_valeur{afficher_barre}|?{

      <:info_creation_paragraphe:>

      ,

      <:forum:forum_saisie_texte_info:>

      })] -
    • +
    })] - +
    [(#CONFIG{forums_urlref}|!={non}|?{ -
    • +
      <:forum:forum_lien_hyper:>

      <:forum:forum_page_url:>

      -
        -
      • +
        +
        [(#ENV**{erreurs}|table_valeur{nom_site})] -
      • -
      • +
      +
      [(#ENV**{erreurs}|table_valeur{url_site})] -
    • -
    - - - + + + + + })] [
    <:medias:bouton_ajouter_document:> -
      -
    • +
      +
      [(#ENV**{erreurs}|table_valeur{document_forum})] [
      (#ENV{ajouter_document}) @@ -105,22 +100,12 @@ <:lien_supprimer:>
      ]
      - [] + [] + accept="(#ENV{formats_documents_forum}|is_array|?{#ENV{formats_documents_forum}|join{', '},''})"] />
      - - -
    • -
    + + ] [(#REM) Piege a robots spammeurs, dont on change le nom a chaque fois, @@ -134,8 +119,8 @@

    ] -

    -] +

    [ + (#ENV{forcer_previsu}|=={non}|et{#ENV*{erreurs}|table_valeur{previsu}|non}|oui)]

    diff --git a/www/plugins-dist/forum/formulaires/forum.php b/www/plugins-dist/forum/formulaires/forum.php index d976798f..bc28ae46 100644 --- a/www/plugins-dist/forum/formulaires/forum.php +++ b/www/plugins-dist/forum/formulaires/forum.php @@ -1,501 +1,564 @@ - '', #ne sert pas dans ce cas, on la vide pour mutualiser le cache - 'editable' => false, - 'login_forum_abo' => ' ', - 'inscription' => generer_url_public('identifiants', 'lang=' . $GLOBALS['spip_lang']), - 'oubli' => generer_url_public('spip_pass', 'lang=' . $GLOBALS['spip_lang'], true), - ); - } - } - - - // Tableau des valeurs servant au calcul d'une signature de securite. - // Elles seront placees en Input Hidden pour que inc/forum_insert - // recalcule la meme chose et verifie l'identite des resultats. - // Donc ne pas changer la valeur de ce tableau entre le calcul de - // la signature et la fabrication des Hidden - // Faire attention aussi a 0 != '' - $ids = array(); - $ids[$primary] = ($x = intval($id_objet)) ? $x : ''; - $ids['id_objet'] = ($x = intval($id_objet)) ? $x : ''; - $ids['objet'] = $objet; - $ids['id_forum'] = ($x = intval($id_forum)) ? $x : ''; - - // ne pas mettre '', sinon le squelette n'affichera rien. - $previsu = ' '; - - if (_request('formulaire_action')){ - $arg = forum_fichier_tmp(join('', $ids)); - - $securiser_action = charger_fonction('securiser_action', 'inc'); - // on sait que cette fonction est dans le fichier associe - $hash = calculer_action_auteur("ajout_forum-$arg"); - } - else { - $arg = $hash = ''; - } - - // pour les hidden - $script_hidden = ""; - foreach ($ids as $id => $v) - $script_hidden .= ""; - - $script_hidden .= ""; - $script_hidden .= ""; - $script_hidden .= ""; - - if ($formats = forum_documents_acceptes()){ - include_spip('inc/securiser_action'); - $cle = calculer_cle_action('ajouter-document-' . $objet . '-' . $id_objet); - } - else { - $cle = null; - } - - // Valeurs par defaut du formulaire - // si le formulaire a ete sauvegarde, restituer les valeurs de session - $vals = array( - 'titre' => $titre, - 'texte' => '', - 'nom_site' => '', - 'url_site' => 'http://' - ); - - return array_merge($vals, array( - 'modere' => (($accepter_forum!='pri') ? '' : ' '), - 'table' => $table, - 'config' => array('afficher_barre' => ($GLOBALS['meta']['forums_afficher_barre']!='non' ? ' ' : '')), - '_hidden' => $script_hidden, # pour les variables hidden qui seront inserees dans le form et dans le form de previsu - 'cle_ajouter_document' => $cle, - 'formats_documents_forum' => forum_documents_acceptes(), - 'ajouter_document' => isset($_FILES['ajouter_document']['name']) ? $_FILES['ajouter_document']['name'] : '', - 'nobot' => ($cle ? _request($cle) : _request('nobot')), - 'ajouter_groupe' => $ajouter_groupe, - 'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)), - 'id_forum' => $id_forum, // passer id_forum au formulaire pour lui permettre d'afficher a quoi l'internaute repond - '_sign' => implode('_', $ids), - '_autosave_id' => $ids, - )); -} - - -/** - * Une securite qui nous protege contre : - * - les doubles validations de forums (derapages humains ou des brouteurs) - * - les abus visant a mettre des forums malgre nous sur un article (??) - * On installe un fichier temporaire dans _DIR_TMP (et pas _DIR_CACHE - * afin de ne pas bugguer quand on vide le cache) - * Le lock est leve au moment de l'insertion en base (inc-messforum) - * Ce systeme n'est pas fonctionnel pour les forums sans previsu (notamment - * si $afficher_previsu = 'non') - * - * https://code.spip.net/@forum_fichier_tmp - * - * @param $arg - * @return int - */ -function forum_fichier_tmp($arg){ -# astuce : mt_rand pour autoriser les hits simultanes - while (($alea = time()+@mt_rand())+intval($arg) - AND @file_exists($f = _DIR_TMP . "forum_$alea.lck")){ - } - ; - spip_touch($f); - -# et maintenant on purge les locks de forums ouverts depuis > 4 h - - if ($dh = @opendir(_DIR_TMP)){ - while (($file = @readdir($dh))!==false){ - if (preg_match('/^forum_([0-9]+)\.lck$/', $file) - AND (time()-@filemtime(_DIR_TMP . $file)>4*3600) - ) - spip_unlink(_DIR_TMP . $file); - } - } - return $alea; -} - -/** - * Verifier la saisie de #FORMULAIRE_FORUM - * @param string $objet - * @param int $id_objet - * @param int $id_forum - * @param int|array $ajouter_mot - * mots ajout�s coch�s par defaut - * @param $ajouter_groupe - * groupes ajoutables - * @param $afficher_previsu - * previsu oui ou non - * @param $retour - * url de retour - * @return array|bool - */ -function formulaires_forum_verifier_dist($objet, $id_objet, $id_forum, - $ajouter_mot, $ajouter_groupe, $afficher_previsu, $retour){ - include_spip('inc/acces'); - include_spip('inc/texte'); - include_spip('inc/session'); - include_spip('base/abstract_sql'); - - $erreurs = array(); - $doc = array(); - - // desactiver id_rubrique si un id_article ou autre existe dans le contexte - // if ($id_article OR $id_breve OR $id_forum OR $id_syndic) - // $id_rubrique = 0; - - // stocker un eventuel document dans un espace temporaire - // portant la cle du formulaire ; et ses metadonnees avec - - if (isset($_FILES['ajouter_document']) - AND $_FILES['ajouter_document']['tmp_name']){ - - $acceptes = forum_documents_acceptes(); - if ( - // si on a poste un $_FILES mais que l'option n'est pas active : cas produit par les bots qui spamment automatiquement - !count($acceptes) - // securite : - // verifier si on possede la cle (ie on est autorise a poster) - // (sinon tant pis) ; cf. charger.php pour la definition de la cle - OR _request('cle_ajouter_document')!=calculer_cle_action($a = "ajouter-document-$objet-$id_objet") - ){ - $erreurs['document_forum'] = _T('forum:documents_interdits_forum'); - unset($_FILES['ajouter_document']); - } - else { - if (!isset($GLOBALS['visiteur_session']['tmp_forum_document'])) - session_set('tmp_forum_document', sous_repertoire(_DIR_TMP, 'documents_forum') . md5(uniqid(rand()))); - - $tmp = $GLOBALS['visiteur_session']['tmp_forum_document']; - $doc = &$_FILES['ajouter_document']; - - include_spip('inc/joindre_document'); - include_spip('action/ajouter_documents'); - list($extension, $doc['name']) = fixer_extension_document($doc); - - if (!in_array($extension, $acceptes)){ - $erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => join(', ', $acceptes))); - } - else { - include_spip('inc/getdocument'); - if (!deplacer_fichier_upload($doc['tmp_name'], $tmp . '.bin')) - $erreurs['document_forum'] = _T('copie_document_impossible'); - - # else if (...) - # verifier le type_document autorise - # retailler eventuellement les photos - } - - // si ok on stocke les meta donnees, sinon on efface - if (isset($erreurs['document_forum'])){ - spip_unlink($tmp . '.bin'); - unset ($_FILES['ajouter_document']); - } else { - $doc['tmp_name'] = $tmp . '.bin'; - ecrire_fichier($tmp . '.txt', serialize($doc)); - } - } - } - // restaurer/supprimer le document eventuellement uploade au tour precedent - elseif (isset($GLOBALS['visiteur_session']['tmp_forum_document']) - AND $tmp = $GLOBALS['visiteur_session']['tmp_forum_document'] - AND file_exists($tmp . '.bin')){ - if (_request('supprimer_document_ajoute')){ - spip_unlink($tmp . '.bin'); - spip_unlink($tmp . '.txt'); - } - elseif (lire_fichier($tmp . '.txt', $meta)){ - $doc = &$_FILES['ajouter_document']; - $doc = @unserialize($meta); - } - } - - $min_length = (defined('_FORUM_LONGUEUR_MINI') ? _FORUM_LONGUEUR_MINI : 10); - if (strlen($texte = _request('texte'))<$min_length - AND !$ajouter_mot AND $GLOBALS['meta']['forums_texte']=='oui' - ){ - $erreurs['texte'] = _T($min_length==10 ? 'forum:forum_attention_dix_caracteres' : 'forum:forum_attention_nb_caracteres_mini', array('min' => $min_length)); - } - elseif (defined('_FORUM_LONGUEUR_MAXI') - AND _FORUM_LONGUEUR_MAXI>0 - AND strlen($texte)>_FORUM_LONGUEUR_MAXI){ - $erreurs['texte'] = _T('forum:forum_attention_trop_caracteres', - array( - 'compte' => strlen($texte), - 'max' => _FORUM_LONGUEUR_MAXI - )); - } - - if (array_reduce($_POST, 'reduce_strlen', (20*1024))<0){ - $erreurs['erreur_message'] = _T('forum:forum_message_trop_long'); - } - else { - // Ne pas autoriser d'envoi hacke si forum sur abonnement - if (controler_forum($objet, $id_objet)=='abo' - AND !test_espace_prive()){ - if (!isset($GLOBALS['visiteur_session']) - OR !isset($GLOBALS['visiteur_session']['statut'])){ - $erreurs['erreur_message'] = _T('forum_non_inscrit'); - } - elseif ($GLOBALS['visiteur_session']['statut']=='5poubelle') { - $erreurs['erreur_message'] = _T('forum:forum_acces_refuse'); - } - } - } - - if (strlen($titre = _request('titre'))<3 - AND $GLOBALS['meta']['forums_titre']=='oui'){ - $erreurs['titre'] = _T('forum:forum_attention_trois_caracteres'); - } - - if (!count($erreurs) AND !_request('confirmer_previsu_forum')){ - if ($afficher_previsu!='non'){ - $previsu = inclure_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'), $doc, - $objet, $id_objet, $id_forum); - $erreurs['previsu'] = $previsu; - } - } - - // Si forum avec previsu sans bon hash de securite, echec - if (!count($erreurs)){ - if (!test_espace_prive() - AND $afficher_previsu<>'non' - AND forum_insert_noprevisu()){ - $erreurs['erreur_message'] = _T('forum:forum_acces_refuse'); - } - } - - return $erreurs; -} - - -/** - * Lister les formats de documents joints acceptes dans les forum - * @return array - */ -function forum_documents_acceptes(){ - $formats = trim($GLOBALS['meta']['formats_documents_forum']); - if (!$formats) return array(); - if ($formats!=='*'){ - $formats = array_filter(preg_split(',[^a-zA-Z0-9/+_],', $formats)); - } - else { - include_spip('base/typedoc'); - $formats = array_keys($GLOBALS['tables_mime']); - } - sort($formats); - return $formats; -} - - -/** - * Preparer la previsu d'un message de forum - * - * https://code.spip.net/@inclure_previsu - * - * @param string $texte - * @param string $titre - * @param string $url_site - * @param string $nom_site - * @param array $ajouter_mot - * @param array $doc - * @param string $objet - * @param int $id_objet - * @param int $id_forum - * @return string - */ -function inclure_previsu($texte, $titre, $url_site, $nom_site, $ajouter_mot, $doc, - $objet, $id_objet, $id_forum){ - global $table_des_traitements; - - $bouton = _T('forum:forum_message_definitif'); - include_spip('public/assembler'); - include_spip('public/composer'); - - // appliquer les traitements de #TEXTE a la previsu - // comme on voit c'est complique... y a peut-etre plus simple ? - // recuperer les filtres eventuels de 'mes_fonctions.php' sur les balises - include_spip('public/parametrer'); - $tmptexte = ""; - $evaltexte = isset($table_des_traitements['TEXTE']['forums']) - ? $table_des_traitements['TEXTE']['forums'] - : $table_des_traitements['TEXTE'][0]; - $evaltexte = '$tmptexte = ' . str_replace('%s', '$texte', $evaltexte) . ';'; - // evaluer... - // [fixme] - // $connect et $Pile ne sont pas definis ici :/ - // mais font souvent partie des variables appelees par les traitements - $connect = ""; - $Pile = array(0 => array()); - eval($evaltexte); - - // supprimer les
    de la previsualisation - // (sinon on ne peut pas faire ... dans les forums) - return preg_replace("@<(/?)form\b@ism", - '<\1div', - inclure_balise_dynamique(array('formulaires/inc-forum_previsu', - 0, - array( - 'titre' => safehtml(typo($titre)), - 'texte' => $tmptexte, - 'notes' => safehtml(calculer_notes()), - 'url_site' => vider_url($url_site), - 'nom_site' => safehtml(typo($nom_site)), - 'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)), - 'ajouter_document' => $doc, - #'erreur' => $erreur, // non definie ? - 'bouton' => $bouton, - 'objet' => $objet, - 'id_objet' => $id_objet, - 'id_forum' => $id_forum - ) - ), false)); -} - - -/** - * Traiter la saisie de #FORMULAIRE_FORUM - * tout est delegue a inc_forum_insert() - * - * @param string $objet - * @param int $id_objet - * @param int $id_forum - * @param int|array $ajouter_mot - * mots ajoutes coches par defaut - * @param $ajouter_groupe - * groupes ajoutables - * @param $afficher_previsu - * previsu oui ou non - * @param $retour - * url de retour - * @return array|bool - */ -function formulaires_forum_traiter_dist($objet, $id_objet, $id_forum, - $ajouter_mot, $ajouter_groupe, $afficher_previsu, $retour){ - - $forum_insert = charger_fonction('forum_insert', 'inc'); - - // Antispam basique : - // si l'input invisible a ete renseigne, ca ne peut etre qu'un bot - if (strlen(_request(_request('cle_ajouter_document')))){ - tracer_erreur_forum('champ interdit (nobot) rempli'); - return array('message_erreur' => _T('forum:erreur_enregistrement_message')); - } - - if (defined('_FORUM_AUTORISER_POST_ID_FORUM') - AND _FORUM_AUTORISER_POST_ID_FORUM - AND _request('id_forum')){ - $id_forum = _request('id_forum'); - } - - $id_reponse = $forum_insert($objet, $id_objet, $id_forum); - - - if ($id_reponse){ - // En cas de retour sur (par exemple) {#SELF}, on ajoute quand - // meme #forum12 a la fin de l'url, sauf si un #ancre est explicite - if ($retour){ - if (!strpos($retour, '#')){ - $retour .= '#forum' . $id_reponse; - } - } - else { - // le retour par defaut envoie sur le thread, ce qui permet - // de traiter elegamment le cas des forums moderes a priori. - // Cela assure aussi qu'on retrouve son message dans le thread - // dans le cas des forums moderes a posteriori, ce qui n'est - // pas plus mal. - if (function_exists('generer_url_forum')){ - $retour = generer_url_forum($id_reponse); - } - else { - $thread = sql_fetsel('id_thread', 'spip_forum', 'id_forum=' . $id_reponse); - spip_log('id_thread=' . $thread['id_thread'], 'forum'); - $retour = generer_url_entite($thread['id_thread'], 'forum'); - } - } - - $res = array('redirect' => $retour, 'id_forum' => $id_reponse); - } - else { - $res = array('message_erreur' => _T('forum:erreur_enregistrement_message')); - } - - return $res; -} - - -?> + '', #ne sert pas dans ce cas, on la vide pour mutualiser le cache + 'editable' => false, + 'login_forum_abo' => ' ', + 'inscription' => generer_url_public('identifiants', 'lang=' . $GLOBALS['spip_lang']), + 'oubli' => generer_url_public('spip_pass', 'lang=' . $GLOBALS['spip_lang'], true), + ); + } + } + + + // Tableau des valeurs servant au calcul d'une signature de securite. + // Elles seront placees en Input Hidden pour que inc/forum_insert + // recalcule la meme chose et verifie l'identite des resultats. + // Donc ne pas changer la valeur de ce tableau entre le calcul de + // la signature et la fabrication des Hidden + // Faire attention aussi a 0 != '' + $ids = array(); + $ids[$primary] = ($x = intval($id_objet)) ? $x : ''; + $ids['id_objet'] = ($x = intval($id_objet)) ? $x : ''; + $ids['objet'] = $objet; + $ids['id_forum'] = ($x = intval($id_forum)) ? $x : ''; + + // par défaut, on force la prévisualisation du message avant de le poster + if (($forcer_previsu == 'non') or (empty($forcer_previsu) and $GLOBALS['meta']["forums_forcer_previsu"] == "non")) { + $forcer_previsu = 'non'; + } else { + $forcer_previsu = 'oui'; + } + + if (_request('formulaire_action')) { + $arg = forum_fichier_tmp(join('', $ids)); + + $securiser_action = charger_fonction('securiser_action', 'inc'); + // on sait que cette fonction est dans le fichier associe + $hash = calculer_action_auteur("ajout_forum-$arg"); + } else { + $arg = $hash = ''; + } + + // pour les hidden + $script_hidden = ""; + foreach ($ids as $id => $v) { + $script_hidden .= ""; + } + + $script_hidden .= ""; + $script_hidden .= ""; + $script_hidden .= ""; + + if ($formats = forum_documents_acceptes()) { + include_spip('inc/securiser_action'); + $cle = calculer_cle_action('ajouter-document-' . $objet . '-' . $id_objet); + } else { + $cle = null; + } + + // Valeurs par defaut du formulaire + // si le formulaire a ete sauvegarde, restituer les valeurs de session + $vals = array( + 'titre' => $titre, + 'texte' => '', + 'nom_site' => '', + 'url_site' => 'http://' + ); + + return array_merge($vals, array( + 'modere' => (($accepter_forum != 'pri') ? '' : ' '), + 'table' => $table, + 'config' => array('afficher_barre' => ($GLOBALS['meta']['forums_afficher_barre'] != 'non' ? ' ' : '')), + '_hidden' => $script_hidden, # pour les variables hidden qui seront inserees dans le form et dans le form de previsu + 'cle_ajouter_document' => $cle, + 'formats_documents_forum' => trim($GLOBALS['meta']['formats_documents_forum']) == '*' ? _T('forum:extensions_autorisees_toutes') : forum_documents_acceptes(), + 'ajouter_document' => isset($_FILES['ajouter_document']['name']) ? $_FILES['ajouter_document']['name'] : '', + 'nobot' => ($cle ? _request($cle) : _request('nobot')), + 'ajouter_groupe' => $ajouter_groupe, + 'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)), + 'forcer_previsu' => $forcer_previsu, + 'id_forum' => $id_forum, // passer id_forum au formulaire pour lui permettre d'afficher a quoi l'internaute repond + '_sign' => implode('_', $ids), + '_autosave_id' => $ids, + )); +} + + +/** + * Une securite qui nous protege contre : + * - les doubles validations de forums (derapages humains ou des brouteurs) + * - les abus visant a mettre des forums malgre nous sur un article (??) + * On installe un fichier temporaire dans _DIR_TMP (et pas _DIR_CACHE + * afin de ne pas bugguer quand on vide le cache) + * Le lock est leve au moment de l'insertion en base (inc-messforum) + * Ce systeme n'est pas fonctionnel pour les forums sans previsu (notamment + * si $forcer_previsu = 'non') + * + * https://code.spip.net/@forum_fichier_tmp + * + * @param $arg + * @return int + */ +function forum_fichier_tmp($arg) { +# astuce : mt_rand pour autoriser les hits simultanes + while (($alea = time() + @mt_rand()) + intval($arg) + and @file_exists($f = _DIR_TMP . "forum_$alea.lck")) { + }; + spip_touch($f); + +# et maintenant on purge les locks de forums ouverts depuis > 4 h + + if ($dh = opendir(_DIR_TMP)) { + while (($file = @readdir($dh)) !== false) { + if (preg_match('/^forum_([0-9]+)\.lck$/', $file) + and (time() - @filemtime(_DIR_TMP . $file) > 4 * 3600) + ) { + spip_unlink(_DIR_TMP . $file); + } + } + } + + return $alea; +} + +/** + * Verifier la saisie de #FORMULAIRE_FORUM + * + * @param string $objet + * @param int $id_objet + * @param int $id_forum + * @param int|array $ajouter_mot + * mots ajoutés cochés par defaut + * @param $ajouter_groupe + * groupes ajoutables + * @param $forcer_previsu + * forcer la previsualisation du message oui ou non + * @param $retour + * url de retour + * @return array|bool + */ +function formulaires_forum_verifier_dist( + $objet, + $id_objet, + $id_forum, + $ajouter_mot, + $ajouter_groupe, + $forcer_previsu, + $retour +) { + include_spip('inc/acces'); + include_spip('inc/texte'); + include_spip('inc/session'); + include_spip('base/abstract_sql'); + + // par défaut, on force la prévisualisation du message avant de le poster + if (($forcer_previsu == 'non') or (empty($forcer_previsu) and $GLOBALS['meta']["forums_forcer_previsu"] == "non")) { + $forcer_previsu = 'non'; + } else { + $forcer_previsu = 'oui'; + } + + $erreurs = array(); + $doc = array(); + + // desactiver id_rubrique si un id_article ou autre existe dans le contexte + // if ($id_article OR $id_breve OR $id_forum OR $id_syndic) + // $id_rubrique = 0; + + // stocker un eventuel document dans un espace temporaire + // portant la cle du formulaire ; et ses metadonnees avec + + if (isset($_FILES['ajouter_document']) + and $_FILES['ajouter_document']['tmp_name'] + ) { + + $acceptes = forum_documents_acceptes(); + if ( + // si on a poste un $_FILES mais que l'option n'est pas active : cas produit par les bots qui spamment automatiquement + !count($acceptes) + // securite : + // verifier si on possede la cle (ie on est autorise a poster) + // (sinon tant pis) ; cf. charger.php pour la definition de la cle + or _request('cle_ajouter_document') != calculer_cle_action($a = "ajouter-document-$objet-$id_objet") + ) { + $erreurs['document_forum'] = _T('forum:documents_interdits_forum'); + unset($_FILES['ajouter_document']); + } else { + if (!isset($GLOBALS['visiteur_session']['tmp_forum_document'])) { + session_set('tmp_forum_document', sous_repertoire(_DIR_TMP, 'documents_forum') . md5(uniqid(rand()))); + } + + $tmp = $GLOBALS['visiteur_session']['tmp_forum_document']; + $doc = &$_FILES['ajouter_document']; + + include_spip('inc/joindre_document'); + include_spip('action/ajouter_documents'); + list($extension, $doc['name']) = fixer_extension_document($doc); + + if (!in_array($extension, $acceptes)) { + $erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => join(', ', $acceptes))); + } else { + include_spip('inc/getdocument'); + if (!deplacer_fichier_upload($doc['tmp_name'], $tmp . '.bin')) { + $erreurs['document_forum'] = _T('copie_document_impossible'); + } + + # else if (...) + # verifier le type_document autorise + # retailler eventuellement les photos + } + + // si ok on stocke les meta donnees, sinon on efface + if (isset($erreurs['document_forum'])) { + spip_unlink($tmp . '.bin'); + unset($_FILES['ajouter_document']); + } else { + $doc['tmp_name'] = $tmp . '.bin'; + ecrire_fichier($tmp . '.txt', serialize($doc)); + } + } + } // restaurer/supprimer le document eventuellement uploade au tour precedent + elseif (isset($GLOBALS['visiteur_session']['tmp_forum_document']) + and $tmp = $GLOBALS['visiteur_session']['tmp_forum_document'] + and file_exists($tmp . '.bin') + ) { + if (_request('supprimer_document_ajoute')) { + spip_unlink($tmp . '.bin'); + spip_unlink($tmp . '.txt'); + } elseif (lire_fichier($tmp . '.txt', $meta)) { + $doc = &$_FILES['ajouter_document']; + $doc = @unserialize($meta); + } + } + + $min_length = (defined('_FORUM_LONGUEUR_MINI') ? _FORUM_LONGUEUR_MINI : 10); + if (strlen($texte = _request('texte')) < $min_length + and !$ajouter_mot and $GLOBALS['meta']['forums_texte'] == 'oui' + ) { + $erreurs['texte'] = _T($min_length == 10 ? 'forum:forum_attention_dix_caracteres' : 'forum:forum_attention_nb_caracteres_mini', + array('min' => $min_length)); + } elseif (defined('_FORUM_LONGUEUR_MAXI') + and _FORUM_LONGUEUR_MAXI > 0 + and strlen($texte) > _FORUM_LONGUEUR_MAXI + ) { + $erreurs['texte'] = _T('forum:forum_attention_trop_caracteres', + array( + 'compte' => strlen($texte), + 'max' => _FORUM_LONGUEUR_MAXI + )); + } + + if (array_reduce($_POST, 'reduce_strlen', (20 * 1024)) < 0) { + $erreurs['erreur_message'] = _T('forum:forum_message_trop_long'); + } else { + // Ne pas autoriser d'envoi hacke si forum sur abonnement + if (controler_forum($objet, $id_objet) == 'abo' + and !test_espace_prive() + ) { + if (!isset($GLOBALS['visiteur_session']) + or !isset($GLOBALS['visiteur_session']['statut']) + ) { + $erreurs['erreur_message'] = _T('forum_non_inscrit'); + } elseif ($GLOBALS['visiteur_session']['statut'] == '5poubelle') { + $erreurs['erreur_message'] = _T('forum:forum_acces_refuse'); + } + } + } + + if (strlen($titre = _request('titre')) < 3 + and $GLOBALS['meta']['forums_titre'] == 'oui' + ) { + $erreurs['titre'] = _T('forum:forum_attention_trois_caracteres'); + } + + if (!count($erreurs) and !_request('confirmer_previsu_forum')) { + if (!_request('envoyer_message') or $forcer_previsu <> 'non') { + $previsu = inclure_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'), + $doc, + $objet, $id_objet, $id_forum); + $erreurs['previsu'] = $previsu; + $erreurs['message_erreur'] = ''; // on ne veut pas du message_erreur automatique + } + } + + // Si forum avec previsu sans bon hash de securite, echec + if (!count($erreurs)) { + if (!test_espace_prive() + and $forcer_previsu <> 'non' + and forum_insert_noprevisu() + ) { + $erreurs['erreur_message'] = _T('forum:forum_acces_refuse'); + } + } + + return $erreurs; +} + + +/** + * Lister les formats de documents joints acceptes dans les forum + * + * @return array + */ +function forum_documents_acceptes() { + $formats = trim($GLOBALS['meta']['formats_documents_forum']); + if (!$formats) { + return array(); + } + if ($formats !== '*') { + $formats = array_filter(preg_split(',[^a-zA-Z0-9/+_],', $formats)); + } else { + include_spip('base/typedoc'); + $formats = array_keys($GLOBALS['tables_mime']); + } + sort($formats); + + return $formats; +} + + +/** + * Preparer la previsu d'un message de forum + * + * https://code.spip.net/@inclure_previsu + * + * @param string $texte + * @param string $titre + * @param string $url_site + * @param string $nom_site + * @param array $ajouter_mot + * @param array $doc + * @param string $objet + * @param int $id_objet + * @param int $id_forum + * @return string + */ +function inclure_previsu( + $texte, + $titre, + $url_site, + $nom_site, + $ajouter_mot, + $doc, + $objet, + $id_objet, + $id_forum +) { + global $table_des_traitements; + + $bouton = _T('forum:forum_message_definitif'); + include_spip('public/assembler'); + include_spip('public/composer'); + + // appliquer les traitements de #TEXTE a la previsu + // comme on voit c'est complique... y a peut-etre plus simple ? + // recuperer les filtres eventuels de 'mes_fonctions.php' sur les balises + include_spip('public/parametrer'); + $tmptexte = ""; + $evaltexte = isset($table_des_traitements['TEXTE']['forums']) + ? $table_des_traitements['TEXTE']['forums'] + : $table_des_traitements['TEXTE'][0]; + $evaltexte = '$tmptexte = ' . str_replace('%s', '$texte', $evaltexte) . ';'; + // evaluer... + // [fixme] + // $connect et $Pile ne sont pas definis ici :/ + // mais font souvent partie des variables appelees par les traitements + $connect = ""; + $Pile = array(0 => array()); + eval($evaltexte); + + // supprimer les de la previsualisation + // (sinon on ne peut pas faire ... dans les forums) + return preg_replace("@<(/?)form\b@ism", + '<\1div', + inclure_balise_dynamique(array( + 'formulaires/inc-forum_previsu', + 0, + array( + 'titre' => safehtml(typo($titre)), + 'texte' => $tmptexte, + 'notes' => safehtml(calculer_notes()), + 'url_site' => vider_url($url_site), + 'nom_site' => safehtml(typo($nom_site)), + 'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)), + 'ajouter_document' => $doc, + #'erreur' => $erreur, // non definie ? + 'bouton' => $bouton, + 'objet' => $objet, + 'id_objet' => $id_objet, + 'id_forum' => $id_forum + ) + ), false)); +} + + +/** + * Traiter la saisie de #FORMULAIRE_FORUM + * tout est delegue a inc_forum_insert() + * + * @param string $objet + * @param int $id_objet + * @param int $id_forum + * @param int|array $ajouter_mot + * mots ajoutes coches par defaut + * @param $ajouter_groupe + * groupes ajoutables + * @param $forcer_previsu + * forcer la previsualisation du message oui ou non + * @param $retour + * url de retour + * @return array|bool + */ +function formulaires_forum_traiter_dist( + $objet, + $id_objet, + $id_forum, + $ajouter_mot, + $ajouter_groupe, + $forcer_previsu, + $retour +) { + + $forum_insert = charger_fonction('forum_insert', 'inc'); + + // Antispam basique : + // si l'input invisible a ete renseigne, ca ne peut etre qu'un bot + if (strlen(_request(_request('cle_ajouter_document')))) { + tracer_erreur_forum('champ interdit (nobot) rempli'); + + return array('message_erreur' => _T('forum:erreur_enregistrement_message')); + } + + if (defined('_FORUM_AUTORISER_POST_ID_FORUM') + and _FORUM_AUTORISER_POST_ID_FORUM + and _request('id_forum') + ) { + $id_forum = _request('id_forum'); + } + + $id_reponse = $forum_insert($objet, $id_objet, $id_forum); + + + if ($id_reponse) { + // En cas de retour sur (par exemple) {#SELF}, on ajoute quand + // meme #forum12 a la fin de l'url, sauf si un #ancre est explicite + if ($retour) { + if (!strpos($retour, '#')) { + $retour .= '#forum' . $id_reponse; + } + } else { + // le retour par defaut envoie sur le thread, ce qui permet + // de traiter elegamment le cas des forums moderes a priori. + // Cela assure aussi qu'on retrouve son message dans le thread + // dans le cas des forums moderes a posteriori, ce qui n'est + // pas plus mal. + if (function_exists('generer_url_forum')) { + $retour = generer_url_forum($id_reponse); + } else { + $thread = sql_fetsel('id_thread', 'spip_forum', 'id_forum=' . $id_reponse); + spip_log('id_thread=' . $thread['id_thread'], 'forum'); + $retour = generer_url_entite($thread['id_thread'], 'forum'); + } + } + + $res = array('redirect' => $retour, 'id_forum' => $id_reponse); + } else { + $res = array('message_erreur' => _T('forum:erreur_enregistrement_message')); + } + + return $res; +} diff --git a/www/plugins-dist/forum/formulaires/forum_prive.html b/www/plugins-dist/forum/formulaires/forum_prive.html index c3192a67..d6b843d8 100644 --- a/www/plugins-dist/forum/formulaires/forum_prive.html +++ b/www/plugins-dist/forum/formulaires/forum_prive.html @@ -1,4 +1,4 @@ -
    +
    [(#REM) Bloc de previsualisation du forum envoye @@ -8,7 +8,7 @@ ][
    - [(#ACTION_FORMULAIRE{#ENV{action}})] + #ACTION_FORMULAIRE @@ -17,7 +17,7 @@ (#ENV**{erreurs}|table_valeur{previsu})
    ] -
    +
    [

    (#ENV*{message_ok})

    ] [

    (#ENV*{message_erreur})

    ] @@ -25,57 +25,51 @@ [(#ENV{editable})
    -[(#ACTION_FORMULAIRE{#ENV{action}})] -[] - -[(#ENV**{afficher_texte}|choixsiegal{'non', ' ',''}) -[] -

    ] - -[(#ENV**{afficher_texte}|choixsiegal{'non', '',' '}) + #ACTION_FORMULAIRE + [] -[ - (#ENV{config}|table_valeur{forums_titre}) +[(#ENV{config}|table_valeur{forums_titre}) - ]
      + ]
      [(#ENV{config}|table_valeur{forums_titre}|!={non}|oui) -
    • +
      [(#ENV**{erreurs}|table_valeur{titre})] -
    • +
      ] [(#ENV{config}|table_valeur{forums_texte}|?{ -
    • +
      [(#ENV**{erreurs}|table_valeur{texte})]

      <:info_creation_paragraphe:>

      -
    • +
    })] [(#ENV{config}|table_valeur{forums_urlref}|?{ -
  • +
    <:forum:forum_lien_hyper:>

    <:forum:forum_page_url:>

    -
      -
    • +
      +
      [(#ENV**{erreurs}|table_valeur{nom_site})] -
    • -
    • +
    +
    [(#ENV**{erreurs}|table_valeur{url_site})] -
  • - +
    +
    })] - +
    + +

    [ + (#ENV{forcer_previsu}|=={non}|et{#ENV*{erreurs}|table_valeur{previsu}|non}|oui)]

    -

    -] ] - \ No newline at end of file + diff --git a/www/plugins-dist/forum/formulaires/forum_prive.php b/www/plugins-dist/forum/formulaires/forum_prive.php index 56948f70..fc8a97d0 100644 --- a/www/plugins-dist/forum/formulaires/forum_prive.php +++ b/www/plugins-dist/forum/formulaires/forum_prive.php @@ -10,17 +10,35 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} include_spip('inc/forum'); -function formulaires_forum_prive_charger_dist($objet, $id_objet, $id_forum, $afficher_previsu, $statut, $retour='') { +/** + * Identification du formulaire poste : ne pas tenir compte du retour + * + * @param $objet + * @param $id_objet + * @param $id_forum + * @param $forcer_previsu + * @param $statut + * @return array + */ +function formulaires_forum_prive_identifier_dist($objet, $id_objet, $id_forum, $forcer_previsu, $statut) { + return array($objet, $id_objet, $id_forum, $forcer_previsu, $statut); +} + +function formulaires_forum_prive_charger_dist($objet, $id_objet, $id_forum, $forcer_previsu, $statut, $retour = '') { - if (!function_exists($f='forum_recuperer_titre')) + if (!function_exists($f = 'forum_recuperer_titre')) { $f = 'forum_recuperer_titre_dist'; + } // si objet, il faut un titre, sinon on est dans un statut privrac/privadm qui permet un forum sans objet - if ($objet AND $id_objet AND !$titre = $f($objet,$id_objet,$id_forum,false)) + if ($objet and $id_objet and !$titre = $f($objet, $id_objet, $id_forum, false)) { return false; + } $primary = id_table_objet($objet); $table = table_objet($objet); @@ -37,34 +55,41 @@ function formulaires_forum_prive_charger_dist($objet, $id_objet, $id_forum, $aff $ids['objet'] = $objet; $ids['id_forum'] = ($x = intval($id_forum)) ? $x : ''; - // ne pas mettre '', sinon le squelette n'affichera rien. - $previsu = ' '; + // par défaut, on force la prévisualisation du message avant de le poster + if (($forcer_previsu == 'non') or (empty($forcer_previsu) and $GLOBALS['meta']["forums_forcer_previsu"] == "non")) { + $forcer_previsu = 'non'; + } else { + $forcer_previsu = 'oui'; + } // pour les hidden $script_hidden = ""; - foreach ($ids as $id => $v) + foreach ($ids as $id => $v) { $script_hidden .= ""; - + } + $config = array(); - foreach(array('afficher_barre','forum_titre','forums_texte','forums_urlref') as $k) + foreach (array('afficher_barre', 'forum_titre', 'forums_texte', 'forums_urlref') as $k) { $config[$k] = ' '; + } return array( 'nom_site' => '', 'table' => $table, 'texte' => '', 'config' => $config, - 'titre' => $titre, + 'titre' => isset($titre) ? $titre : '', '_hidden' => $script_hidden, # pour les variables hidden 'url_site' => "http://", + 'forcer_previsu' => $forcer_previsu, 'id_forum' => $id_forum, // passer id_forum au formulaire pour lui permettre d'afficher a quoi l'internaute repond - '_sign'=>implode('_',$ids), + '_sign' => implode('_', $ids), '_autosave_id' => $ids, ); } -function formulaires_forum_prive_verifier_dist($objet, $id_objet, $id_forum, $afficher_previsu, $statut, $retour='') { +function formulaires_forum_prive_verifier_dist($objet, $id_objet, $id_forum, $forcer_previsu, $statut, $retour = '') { include_spip('inc/acces'); include_spip('inc/texte'); include_spip('inc/forum'); @@ -74,76 +99,89 @@ function formulaires_forum_prive_verifier_dist($objet, $id_objet, $id_forum, $af $erreurs = array(); $min_length = (defined('_FORUM_LONGUEUR_MINI') ? _FORUM_LONGUEUR_MINI : 10); - if (strlen($texte = _request('texte'))<$min_length - AND !$ajouter_mot AND $GLOBALS['meta']['forums_texte']=='oui' - ){ - $erreurs['texte'] = _T($min_length==10 ? 'forum:forum_attention_dix_caracteres' : 'forum:forum_attention_nb_caracteres_mini', array('min' => $min_length)); + if (strlen($texte = _request('texte')) < $min_length + and !_request('ajouter_mot') and $GLOBALS['meta']['forums_texte'] == 'oui' + ) { + $erreurs['texte'] = _T($min_length == 10 ? 'forum:forum_attention_dix_caracteres' : 'forum:forum_attention_nb_caracteres_mini', + array('min' => $min_length)); + } else { + if (defined('_FORUM_LONGUEUR_MAXI') + and _FORUM_LONGUEUR_MAXI > 0 + and strlen($texte) > _FORUM_LONGUEUR_MAXI + ) { + $erreurs['texte'] = _T('forum:forum_attention_trop_caracteres', + array( + 'compte' => strlen($texte), + 'max' => _FORUM_LONGUEUR_MAXI + )); + } } - else if (defined('_FORUM_LONGUEUR_MAXI') - AND _FORUM_LONGUEUR_MAXI > 0 - AND strlen($texte) > _FORUM_LONGUEUR_MAXI) - $erreurs['texte'] = _T('forum:forum_attention_trop_caracteres', - array( - 'compte' => strlen($texte), - 'max' => _FORUM_LONGUEUR_MAXI - )); - if (strlen($titre=_request('titre')) < 3 - AND $GLOBALS['meta']['forums_titre'] == 'oui') + + if (strlen($titre = _request('titre')) < 3 + and $GLOBALS['meta']['forums_titre'] == 'oui' + ) { $erreurs['titre'] = _T('forum:forum_attention_trois_caracteres'); + } if (array_reduce($_POST, 'reduce_strlen', (20 * 1024)) < 0) { $erreurs['erreur_message'] = _T('forum:forum_message_trop_long'); } - if (!count($erreurs) AND !_request('confirmer_previsu_forum')){ - if ($afficher_previsu != 'non') { - $previsu = inclure_forum_prive_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot')); - $erreurs['previsu'] = $previsu; - } + if ($url = _request('url_site') and !tester_url_absolue($url)) { + $erreurs['url_site'] = _T('info_url_site_pas_conforme'); + } + + if (!count($erreurs) and !_request('envoyer_message') and !_request('confirmer_previsu_forum')) { + $previsu = inclure_forum_prive_previsu($texte, $titre, _request('url_site'), _request('nom_site'), + _request('ajouter_mot')); + $erreurs['previsu'] = $previsu; + $erreurs['message_erreur'] = ''; // on ne veut pas du message_erreur automatique } return $erreurs; } -function inclure_forum_prive_previsu($texte,$titre, $url_site, $nom_site, $ajouter_mot, $doc=""){ +function inclure_forum_prive_previsu($texte, $titre, $url_site, $nom_site, $ajouter_mot, $doc = "") { $bouton = _T('forum:forum_message_definitif'); include_spip('public/assembler'); include_spip('public/composer'); // supprimer les
    de la previsualisation // (sinon on ne peut pas faire ... dans les forums) return preg_replace("@<(/?)form\b@ism", - '<\1div', - inclure_balise_dynamique(array('formulaires/inc-forum_prive_previsu', - 0, - array( - 'titre' => safehtml(typo($titre)), - 'texte' => safehtml(propre($texte)), - 'notes' => safehtml(calculer_notes()), - 'url_site' => vider_url($url_site), - 'nom_site' => safehtml(typo($nom_site)), - 'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)), - 'ajouter_document' => $doc, - 'erreur' => $erreur, - 'bouton' => $bouton + '<\1div', + inclure_balise_dynamique(array( + 'formulaires/inc-forum_prive_previsu', + 0, + array( + 'titre' => safehtml(typo($titre)), + 'texte' => safehtml(propre($texte)), + 'notes' => safehtml(calculer_notes()), + 'url_site' => vider_url($url_site), + 'nom_site' => safehtml(typo($nom_site)), + 'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)), + 'ajouter_document' => $doc, + #'erreur' => $erreur, // kesako ? non définie ? + 'bouton' => $bouton ) - ), - false)); + ), + false) + ); } -function formulaires_forum_prive_traiter_dist($objet, $id_objet, $id_forum, $afficher_previsu, $statut, $retour='') { +function formulaires_forum_prive_traiter_dist($objet, $id_objet, $id_forum, $forcer_previsu, $statut, $retour = '') { $forum_insert = charger_fonction('forum_insert', 'inc'); - $id_reponse = $forum_insert($objet, $id_objet, $id_forum,$statut); - if ($id_reponse){ + $id_reponse = $forum_insert($objet, $id_objet, $id_forum, $statut); + if ($id_reponse) { // En cas de retour sur (par exemple) {#SELF}, on ajoute quand // meme #forum12 a la fin de l'url, sauf si un #ancre est explicite - if ($retour){ - if (!strpos($retour, '#')) - $retour .= '#forum'.$id_reponse; - } - else { + if ($retour) { + if (!strpos($retour, '#')) { + $retour .= '#forum' . $id_reponse; + } + } else { // le retour par defaut envoie sur le thread, ce qui permet // de traiter elegamment le cas des forums moderes a priori. // Cela assure aussi qu'on retrouve son message dans le thread @@ -151,21 +189,17 @@ function formulaires_forum_prive_traiter_dist($objet, $id_objet, $id_forum, $aff // pas plus mal. if (function_exists('generer_url_forum')) { $retour = generer_url_forum($id_reponse); - } - else { - $thread = sql_fetsel('id_thread', 'spip_forum', 'id_forum='.$id_reponse); - spip_log('id_thread='.$thread['id_thread'], 'forum'); + } else { + $thread = sql_fetsel('id_thread', 'spip_forum', 'id_forum=' . $id_reponse); + spip_log('id_thread=' . $thread['id_thread'], 'forum'); $retour = generer_url_entite($thread['id_thread'], 'forum'); } } - $res = array('redirect'=>$retour,'id_forum'=>$id_forum); + $res = array('redirect' => $retour, 'id_forum' => $id_forum); + } else { + $res = array('message_erreur' => _T('forum:erreur_enregistrement_message')); } - else - $res = array('message_erreur'=>_T('forum:erreur_enregistrement_message')); return $res; } - - -?> diff --git a/www/plugins-dist/forum/formulaires/gestion_forum.html b/www/plugins-dist/forum/formulaires/gestion_forum.html deleted file mode 100644 index 07cadd14..00000000 --- a/www/plugins-dist/forum/formulaires/gestion_forum.html +++ /dev/null @@ -1,104 +0,0 @@ -
    -[(#REM) pour IE qui sinon se perd dans l'ajax !, ne pas retirer] - - -[

    (#ENV*{message_ok})

    ] -[

    (#ENV*{message_erreur})

    ] - -[(#ENV{editable}) -
    -[(#ACTION_FORMULAIRE{[(#ENV{action})]})] - -#SET{pagination,#ENV{pagination,10}} -#SET{prive,#ENV{select_type,public}|=={interne}|?{'priv%','%'}} -#SET{public,#ENV{select_type,public}|=={public}|?{'priv%',''}} - - - - - - - - - - - - - - - -

    - - - -

    - -
      -
    • - - - -
    • -
    • - <:forum:label_selectionner:> - <:forum:messages_tous:> - <:forum:messages_aucun:> - <:forum:messages_prop:> -
    • -
    • -
      - [(#INCLURE{fond=formulaires/inc-gestion_forum_liste, statut=#ENV*{select_statut}, prive=#GET{prive}, public=#GET{public}, pagination=#GET{pagination}, env})] -
      -
    • -
    - -

    - - - -

    - -
    ] - -
    \ No newline at end of file diff --git a/www/plugins-dist/forum/formulaires/gestion_forum.php b/www/plugins-dist/forum/formulaires/gestion_forum.php deleted file mode 100644 index b8daf203..00000000 --- a/www/plugins-dist/forum/formulaires/gestion_forum.php +++ /dev/null @@ -1,94 +0,0 @@ -true - ); - - $valeurs['id_forums'] = array(); - $valeurs['pagination'] = _request('pagination'); - $valeurs['select_type'] = _request('select_type'); - $valeurs['select_statut'] = _request('select_statut'); - - $valeurs['id_forum'] = _request('id_forum'); - $valeurs['id_rubrique'] = _request('id_rubrique'); - $valeurs['id_article'] = _request('id_article'); - $valeurs['id_breve'] = _request('id_breve'); - $valeurs['id_syndic'] = _request('id_syndic'); - $valeurs['id_message'] = _request('id_message'); - $valeurs['id_auteur'] = _request('id_auteur'); - $valeurs['auteur'] = _request('auteur'); - $valeurs['email_auteur'] = _request('email_auteur'); - $valeurs['ip'] = _request('ip'); - $valeurs['debut_forum'] = _request('debut_forum'); - - return $valeurs; -} - -function formulaires_gestion_forum_verifier_dist($id_forum='', $id_rubrique='', $id_article='', $id_breve='', $id_syndic='', $id_message='', $id_auteur='', $auteur='', $email_auteur='', $ip='') { - - $erreurs = array(); - - return $erreurs; -} - - -function formulaires_gestion_forum_traiter_dist($id_forum='', $id_rubrique='', $id_article='', $id_breve='', $id_syndic='', $id_message='', $id_auteur='', $auteur='', $email_auteur='', $ip='') { - - $retour = array(); - - $retour['message_ok'] = 'rien a faire'; - - if (!$forum_ids = _request('forum_ids')) - $forum_ids = array(); - - $select_type = _request('select_type'); - $select_statut = _request('select_statut'); - $pagination = _request('pagination'); - $pagination_ancien = _request('pagination_ancien'); - - set_request('select_type',$select_type); - set_request('voir_statut',$select_statut); - - if ($pagination != $pagination_ancien) - set_request('debut_forum',''); - - if (_request('valider')){ - $statut = 'publie'; - $retour['message_ok'] = 'messages publies'; - } - - if (_request('bruler')){ - $statut = 'spam'; - $retour['message_ok'] = 'messages marquees comme spam'; - } - - if(_request('supprimer')){ - $statut = 'off'; - $retour['message_ok'] = 'messages supprimes'; - } - - include_spip('action/instituer_forum'); - foreach ($forum_ids as $id) { - $row = sql_fetsel("*", "spip_forum", "id_forum=$id"); - instituer_un_forum($statut,$row); - } - - return $retour; - -} - -?> diff --git a/www/plugins-dist/forum/formulaires/inc-forum_previsu.html b/www/plugins-dist/forum/formulaires/inc-forum_previsu.html index 8f487440..216dfeaf 100644 --- a/www/plugins-dist/forum/formulaires/inc-forum_previsu.html +++ b/www/plugins-dist/forum/formulaires/inc-forum_previsu.html @@ -22,15 +22,23 @@ [
  • (#ENV*{erreur})
  • ] - [

    ] + [

    ]
    '; + + return $flux; +} + +/** + * Gérer les dépendances de la lib jQuery UI + * + * @param array $plugins tableau des plugins demandés + * @return array $plugins tableau des plugins nécessaires ou false + */ +function jqueryui_dependances($plugins) { + + // Gestion des renommages de plugins jqueryui + foreach ($plugins as $nb => $val) { + if (0 === strpos($val, 'jquery.effects.')) { + $plugins[$nb] = str_replace('jquery.effects.', 'effect-', $val); + } + if (0 === strpos($val, 'jquery.ui.')) { + $plugins[$nb] = str_replace('jquery.ui.', '', $val); + } + } + + /** + * Gestion des dépendances inter plugins + */ + $dependance_core = array( + 'mouse', + 'widget', + 'datepicker', + 'selectmenu' + ); + + /** + * Dépendances à widget + * Si un autre plugin est dépendant d'un de ceux là, on ne les ajoute pas + */ + $dependance_widget = array( + 'accordion', + 'autocomplete', + 'button', + 'dialog', + 'mouse', + 'menu', + 'progressbar', + 'tabs', + 'tooltip', + 'selectmenu' + ); + + $dependance_mouse = array( + 'draggable', + 'droppable', + 'resizable', + 'selectable', + 'slider', + 'sortable' + ); + + $dependance_position = array( + 'autocomplete', + 'dialog', + 'menu', + 'tooltip', + 'selectmenu' + ); + + $dependance_button = array( + 'dialog', + 'spinner' + ); + + $dependance_menu = array( + 'autocomplete', + 'selectmenu' + ); + + $dependance_draggable = array( + 'droppable' + ); + + $dependance_resizable = array( + 'dialog' + ); + + $dependance_effects = array( + 'effect-blind', + 'effect-bounce', + 'effect-clip', + 'effect-drop', + 'effect-explode', + 'effect-fade', + 'effect-fold', + 'effect-highlight', + 'effect-puff', + 'effect-pulsate', + 'effect-scale', + 'effect-shake', + 'effect-size', + 'effect-slide', + 'effect-transfer' + ); + + /** + * Vérification des dépendances + * Ici on ajoute quand même le plugin en question et on supprime les doublons via array_unique + * Pour éviter le cas où un pipeline demanderait un plugin dans le mauvais sens de la dépendance par exemple + * + * On commence par le bas de l'échelle : + * - button + * - menu + * - draggable + * - position + * - mouse + * - widget + * - core + * - effects + */ + if (count($intersect = array_intersect($plugins, $dependance_resizable)) > 0) { + $keys = array_keys($intersect); + array_splice($plugins, $keys[0], 0, 'resizable'); + } + if (count($intersect = array_intersect($plugins, $dependance_button)) > 0) { + $keys = array_keys($intersect); + array_splice($plugins, $keys[0], 0, 'button'); + } + if (count($intersect = array_intersect($plugins, $dependance_menu)) > 0) { + $keys = array_keys($intersect); + array_splice($plugins, $keys[0], 0, 'menu'); + } + if (count($intersect = array_intersect($plugins, $dependance_draggable)) > 0) { + $keys = array_keys($intersect); + array_splice($plugins, $keys[0], 0, 'draggable'); + } + if (count($intersect = array_intersect($plugins, $dependance_position)) > 0) { + $keys = array_keys($intersect); + array_splice($plugins, $keys[0], 0, 'position'); + } + if (count($intersect = array_intersect($plugins, $dependance_mouse)) > 0) { + $keys = array_keys($intersect); + array_splice($plugins, $keys[0], 0, 'mouse'); + } + if (count($intersect = array_intersect($plugins, $dependance_widget)) > 0) { + $keys = array_keys($intersect); + array_splice($plugins, $keys[0], 0, 'widget'); + } + if (count($intersect = array_intersect($plugins, $dependance_core)) > 0) { + $keys = array_keys($intersect); + array_splice($plugins, $keys[0], 0, 'core'); + } + if (count($intersect = array_intersect($plugins, $dependance_effects)) > 0) { + $keys = array_keys($intersect); + array_splice($plugins, $keys[0], 0, 'effect'); + } + $plugins = array_unique($plugins); + + return $plugins; +} diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui.xml b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui.xml index 65a1728a..e310e199 100644 --- a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui.xml +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui.xml @@ -6,32 +6,52 @@ + + + + + + + + - - + + + - + + + + - + + + + + + - + + + + diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_ar.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_ar.php index 3a1eee26..082a62f7 100644 --- a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_ar.php +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-jqueryui?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -16,5 +18,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( -* {{المؤثرات}}: تأتي لإغناء المؤثرات القياسية التي يوفرها jQuery (كالتلاشي والإزاحة الى الأعلى او الأسفل...). وبفضل jQuery UI، يصبح من الممكن مثلاً إضفاء الحركة على خصائص الأنماط (CSS) مثل لون الخلفية من خلال خاصية ().animate او إضافة مؤثرات انتقال في خصائص addClass وremoveClass...', 'jqueryui_slogan' => 'إنتاج الحركة والمؤثرات وتوسيع أدواة jQuery' ); - -?> diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_de.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_de.php index 8731723e..e1773428 100644 --- a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_de.php +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-jqueryui?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -15,5 +17,3 @@ Die Bibliothek enthält drei Kategorien von Funktionen: -* {{Effekte}} erweitern die Standardeffekte (fadeIn, slideUp...) von jQuery. Mit jQuery UI kann z.B. die Eigenschaft CSS background-color mit .animate() dynamisiert werden, oder Übergänge bei addClass/removeClass eingefügt werden.', 'jqueryui_slogan' => 'Animationen, Effekte und Widgets für jQuery' ); - -?> diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_en.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_en.php index 950bc7c3..d385dc50 100644 --- a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_en.php +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-jqueryui?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -15,5 +17,3 @@ The features of this library are divided into three categories: -* {{The effects}}. They enrich the effects offered by default by jQuery (fadeIn, slideUp...). Thanks to jQuery UI, it’s possible for example to animate the CSS property background-color with .animate() or to add transitions for the actions addClass/removeClass...', 'jqueryui_slogan' => 'Animations, effects and jQuery widgets' ); - -?> diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_es.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_es.php index b0d96756..825352ed 100644 --- a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_es.php +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_es.php @@ -3,17 +3,17 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-jqueryui?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // J - 'jqueryui_description' => 'Este plugin implementa en SPIP la la librería complementaria jQuery UI autorizando la creación de componentes gráficos dinámicos: péstañas, drag & drop, barras de progresión... -Las funcionalidades de esta librería se dividen en tres categorías: --* {{Les interacciones}}. permiten dar propiedades muy interesantes a elementos HTML, como el hecho de poder ser agarrado y desplazado con el mouse (drag & drop), de ser redimensionados como una ventana, o de ser seleccionados como iconos en el escritorio del entorno de ventanas. --* {{Los Widgets}}. Son objetos «llave en mano» qie proponen funcionalidades de alto nivel como el DatePicker por ejemplo, qu muestra un calendario en el que se puede seleccionar una fecha. --* {{Los efectos}}. Enriquecen los efectos por omisión propuestos por jQuery (fadeIn, slideUp...). Gracias a jQuery UI, es posible, por ejemplo, animar la propiedad CSS background-color con .animate() o o también de agregar transiciones a los addClass/removeClass...', - 'jqueryui_slogan' => 'Animaciones, efetos y widgets jQuery' + 'jqueryui_description' => 'Este plugin implementa en SPIP la librería complementaria jQuery UI autorizando la creación de componentes gráficos dinámicos: pestañas, drag & drop, barras de progresión... +Las funciones de esta librería se dividen en tres categorías: +-* {{Les interacciones}}. Permiten dar propiedades muy interesantes a elementos HTML, como el poder ser seleccionado y desplazado con el ratón (drag & drop), de ser redimensionados como una ventana, o de ser seleccionados como iconos en el escritorio del entorno de ventanas. +-* {{Los Widgets}}. Son objetos «llave en mano» que proponen funciones de alto nivel como el DatePicker por ejemplo, que muestra un calendario en el que se puede seleccionar una fecha. +-* {{Los efectos}}. Enriquecen los efectos por omisión propuestos por jQuery (fadeIn, slideUp...). Gracias a jQuery UI es posible, por ejemplo, animar la propiedad CSS background-color con .animate() o incluso agregar transiciones a los addClass/removeClass...', + 'jqueryui_slogan' => 'Animaciones, efectos y widgets jQuery' ); - -?> diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_fr.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_fr.php index f6662244..9a10f799 100644 --- a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_fr.php +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_fr.php @@ -1,17 +1,17 @@ 'Ce plugin implémente dans SPIP la bibliothèque complémentaire jQuery UI autorisant la création de composants graphiques dynamiques : onglets, drag & drop, barres de progression... Les fonctionnalités de cette bibliothèque se divisent en 3 catégories : --* {{Les interactions}}. Elles permettent de donner des propriétés très intéressantes à des éléments HTML, comme le fait de pouvoir être attrapés et déplacés avec la souris (drag & drop), d’être redimensionnés comme une fenêtre, ou encore d’être sélectionnés comme des icônes sur le bureau de votre OS. +-* {{Les interactions}}. Elles permettent de donner des propriétés très intéressantes à des éléments HTML, comme le fait de pouvoir être attrapés et déplacés avec la souris (drag & drop), d’être redimensionnés comme une fenêtre, ou encore d’être sélectionnés comme des icones sur le bureau de votre OS. -* {{Les Widgets}}. Ce sont des objets « clé en main » qui proposent des fonctionnalités de haut niveau comme le DatePicker par exemple, qui affiche un calendrier permettant de sélectionner une date. -* {{Les effects}}. Ils enrichissement les effets par défaut proposés par jQuery (fadeIn, slideUp...). Grâce à jQuery UI, il est par exemple possible d’animer la propriété CSS background-color avec .animate() ou encore d’ajouter des transitions lors des addClass/removeClass...', 'jqueryui_slogan' => 'Animations, effets et widgets jQuery' ); - -?> diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_fr_fem.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_fr_fem.php index b21f206d..e2397ad4 100644 --- a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_fr_fem.php +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_fr_fem.php @@ -3,17 +3,17 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-jqueryui?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // J 'jqueryui_description' => 'Ce plugin implémente dans SPIP la bibliothèque complémentaire jQuery UI autorisant la création de composants graphiques dynamiques : onglets, drag & drop, barres de progression... Les fonctionnalités de cette bibliothèque se divisent en 3 catégories : --* {{Les interactions}}. Elles permettent de donner des propriétés très intéressantes à des éléments HTML, comme le fait de pouvoir être attrapés et déplacés avec la souris (drag & drop), d’être redimensionnés comme une fenêtre, ou encore d’être sélectionnés comme des icônes sur le bureau de votre OS. +-* {{Les interactions}}. Elles permettent de donner des propriétés très intéressantes à des éléments HTML, comme le fait de pouvoir être attrapés et déplacés avec la souris (drag & drop), d’être redimensionnés comme une fenêtre, ou encore d’être sélectionnés comme des icones sur le bureau de votre OS. -* {{Les Widgets}}. Ce sont des objets « clé en main » qui proposent des fonctionnalités de haut niveau comme le DatePicker par exemple, qui affiche un calendrier permettant de sélectionner une date. -* {{Les effects}}. Ils enrichissement les effets par défaut proposés par jQuery (fadeIn, slideUp...). Grâce à jQuery UI, il est par exemple possible d’animer la propriété CSS background-color avec .animate() ou encore d’ajouter des transitions lors des addClass/removeClass...', 'jqueryui_slogan' => 'Animations, effets et widgets jQuery' ); - -?> diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_fr_tu.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_fr_tu.php new file mode 100644 index 00000000..92d4ca70 --- /dev/null +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_fr_tu.php @@ -0,0 +1,19 @@ + 'Ce plugin implémente dans SPIP la bibliothèque complémentaire jQuery UI autorisant la création de composants graphiques dynamiques : onglets, drag & drop, barres de progression... +Les fonctionnalités de cette bibliothèque se divisent en 3 catégories : +-* {{Les interactions}}. Elles permettent de donner des propriétés très intéressantes à des éléments HTML, comme le fait de pouvoir être attrapés et déplacés avec la souris (drag & drop), d’être redimensionnés comme une fenêtre, ou encore d’être sélectionnés comme des icones sur le bureau de votre OS. +-* {{Les Widgets}}. Ce sont des objets « clé en main » qui proposent des fonctionnalités de haut niveau comme le DatePicker par exemple, qui affiche un calendrier permettant de sélectionner une date. +-* {{Les effects}}. Ils enrichissement les effets par défaut proposés par jQuery (fadeIn, slideUp...). Grâce à jQuery UI, il est par exemple possible d’animer la propriété CSS background-color avec .animate() ou encore d’ajouter des transitions lors des addClass/removeClass...', + 'jqueryui_slogan' => 'Animations, effets et widgets jQuery' +); diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_it.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_it.php index b9c57d96..a95c27c9 100644 --- a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_it.php +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-jqueryui?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -15,5 +17,3 @@ Le funzionalità di questa libreria sono divise in tre categorie: -* {{Gli Effetti}}. Questi arrichiscono gli effetti già offerti da jQuery (fadeIn, slideUp). Grazie a jQuery UI, è possibile per esempio animare la propriety CSS background-color con .animate() oppure aggiungere una transizione per l’azione addClass/removeClass...', 'jqueryui_slogan' => 'Animazioni, effetti e widget jQuery' ); - -?> diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_lb.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_lb.php index 9393c6c8..2adda5f0 100644 --- a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_lb.php +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_lb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-jqueryui?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,8 +14,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( D’Funktioune vun dëser Library ginn a 3 Kategorien opgedeelt: -* {{Interaktiounen}}. Si erlaben HTML-Elementer interessant Méiglechkeeten ze ginn, z.B. kënne mat der Maus gepaakt a geréckelt ginn (Drag & Drop), an der Gréisst wéi eng Fenster geännert ginn, oder wéi Ikone um Büro vun ärem Operating System ausgewielt ginn. -* {{Widgets}}. Dat sinn "schlësselfäerdeg" Objekter déi Funktioune vun héigem Niveau erméiglechen, z.B DatePicker deen e Kalenner weist wou e kann en Datum auswielen. --* {{Effekter}}. Si beräicheren d’Default-Effekter vun jQuery (fadeIn, slideUp, asw.). Mat jQuery UI ass et z.B. méiglech d’CSS-Proprietéit background-color mat .animate() ze änneren oder Transitiounen mat addClass/removeClass ze erméiglechen.', +-* {{Effekter}}. Si beräicheren d’Default-Effekter vun jQuery (fadeIn, slideUp, asw.). Mat jQuery UI ass et z.B. méiglech d’CSS-Proprietéit background-color mat .animate() ze änneren oder Transitiounen mat addClass/removeClass ze erméiglechen.', # MODIF 'jqueryui_slogan' => 'jQuery Animatiounen, Effekter a Widgets' ); - -?> diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_nl.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_nl.php index 639fb8c5..3dfc440e 100644 --- a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_nl.php +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_nl.php @@ -3,17 +3,17 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-jqueryui?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // J - 'jqueryui_description' => 'Deze plugin implementeert het extra bibliotheek jQuery UI in SPIP waardoor de creatie van dynamische grafische tabs, drag & drop, vooruitgang bars mogelijk wordt... -Kenmerken van dit bibliotheek bestaan uit drie categorieën: --* {{Interacties}}. Zij kunnen zeer interessante eigenschappen aan HTML-elementen geven, zoals de mogelijkheid om ze te kunnen grijpen en verplaatsen met de muis (drag & drop), aanpassen als een venster, of nog geselecteerd te worden als pictogrammen op het bureau van uw OS. --* {{Widgets}}. Het zijn objecten "klaar om te gebruiken" die hoog niveau functionaliteit aanbieden, zoals bijvoorbeeld datepicker die een kalender aanmaakt om het selecteren van een datum te toelaten. --* {{De effecten}}. Ze verrijken de effecten aangeboden door jQuery (FadeIn, slideUp ...). Dankzij jQuery UI is het bijvoorbeeld mogelijk om de CSS background-color met .animate() te animeren of nog overgangen tijdens addClass / removeClass toe te voegen ...', - 'jqueryui_slogan' => 'jQuery Animatie, effecten en widgets ' + 'jqueryui_description' => 'Deze plugin implementeert het extra jQuery UI bibliotheek in SPIP waardoor de creatie van dynamische grafische tabs, drag & drop, vooruitgangsbalken mogelijk wordt... +Kenmerken van deze bibliotheek bestaan uit drie categorieën: +-* {{Interacties}}. Ze kunnen zeer interessante eigenschappen aan HTML-elementen geven, zoals de mogelijkheid om ze te kunnen verplaatsen met de muis (drag & drop), aanpassen als een venster, of geselecteerd worden als pictogrammen op het bureaublad van je computer. +-* {{Widgets}}. Dit zijn "kant-en-klare" objecten die een hoog niveau van functionaliteit bieden, zoals bijvoorbeeld datepicker die een kalender aanmaakt om het selecteren van een datum toe te laten. +-* {{De effecten}}. Deze verrijken de effecten aangeboden door jQuery (FadeIn, slideUp ...). Dankzij jQuery UI is het bijvoorbeeld mogelijk om de CSS background-color met .animate() te animeren of overgangen bij addClass / removeClass toe te voegen ...', + 'jqueryui_slogan' => 'jQuery animatie, effecten en widgets ' ); - -?> diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_oc_ni_mis.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_oc_ni_mis.php new file mode 100644 index 00000000..a3256bcf --- /dev/null +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_oc_ni_mis.php @@ -0,0 +1,19 @@ + 'Aqueu plugin implementa en SPIP la biblioutèca coumplementari jQuery UI qu’autourisa la creacioun de coumpousant gràficou dinàmicou : ounglet, drag & drop, barra de prougressioun... +Li founciounalità d’aquela biblioutèca si divison en 3 categourìa : +-* {{Li interacioun}}. Permeton de dounà de prouprietà pròpi interessanti en de elemen HTML, couma si poudé estre achapat e desplaçat embé la rateta (drag & drop), d’estre redimensiounat couma un fenestroun, o ben d’estre seleciounat couma de icona soubre lou burèu dóu vouòstre OS. +-* {{Lu Widget}}. Aquelu soun de ouget « clau en man » que proupauson de founciounalità de aut nivèu couma lou DatePicker per isemple, qu’afichà un calendari que permete de seleciounà una data. +-* {{Lu efet}}. Enriquisson lu efet predefinit proupausat da jQuery (fadeIn, slideUp...). Gauch a jQuery UI, es per isemple poussible d’animà la prouprietà CSS background-color embé .animate() o ben d’ajustà de transicioun dóu temp dei addClass/removeClass...', + 'jqueryui_slogan' => 'Animacioun, efet e widget jQuery' +); diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_pt.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_pt.php index 3118d83d..d002f34a 100644 --- a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_pt.php +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-jqueryui?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,8 +14,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( As funcionalidades desta biblioteca dividem-se em três categorias: -* {{As interacções}}. Podem conferir interessantes propriedades aos elementos HTML, como a capacidade de ser arrastados e movidos com o rato (drag & drop), de ser redimensionados como uma janela, ou de serem seleccionados como ícones no ambiente de trabalho do seu Sistema Operativo. -* {{Os Widgets}}. São os objectos « chave na mão » que oferecem funções de alto nível como por exemplo DatePicker, que exibe um calendário para seleccionar uma data. --* {{Os efeitos}}. Enriquecem os efeitos oferecidos por defeito por jQuery (fadeIn, slideUp...). Graças a jQuery UI, é possível por exemplo animar a propriedade CSS cor de fundo, com .animate() ou adicionar transições para as acções addClass/removeClass...', +-* {{Os efeitos}}. Enriquecem os efeitos oferecidos por defeito por jQuery (fadeIn, slideUp...). Graças a jQuery UI, é possível por exemplo animar a propriedade CSS cor de fundo, com .animate() ou adicionar transições para as acções addClass/removeClass...', # MODIF 'jqueryui_slogan' => 'Animações, efeitos e widgets jQuery' ); - -?> diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_pt_br.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_pt_br.php new file mode 100644 index 00000000..1d8a7a0a --- /dev/null +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_pt_br.php @@ -0,0 +1,19 @@ + 'Este plugin implementa a biblioteca complementar JQuery UI, permitindo a criação de componentes gráficos dinâmicos: abas, drag & drop, barras de progressão... +As funcionalidades desta biblioteca se dividem em três categorias: +-* {{As interações}}. Podem fornecer propriedades muito interessantes a elementos HTML, como a possibilidade de arrastar e soltar elementos com o mouse (drag & drop), redimensioná-los como se fossem janelas ou de os selecionar como ícones do seu sistema operacional. +-* {{Os Widgets}}. São objetos prontos, que oferecem funcionalidades sofisticadas, como o DatePicker, que exibe um calendário para seleção de uma data. +-* {{Os efeitos}}. Enriquecem os efeitos padrão oferecidos pelo JQuery (fadeIn, slideUp...). Graças ao JQuery UI é possível, por exemplo, animar a propriedade CSS background-color com .animate() ou ainda adicionar transições às ações addClass/removeClass...', + 'jqueryui_slogan' => 'Animações, efeitos e widgets jQuery' +); diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_ru.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_ru.php index d8c8ae6a..5307a059 100644 --- a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_ru.php +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_ru.php @@ -3,15 +3,19 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-jqueryui?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // J - 'jqueryui_description' => 'Данный плагин подключает к сайту функционал библиотеки JQuery UI. + 'jqueryui_description' => 'Этот плагин реализует в SPIP дополнительные библиотеки JQuery UI, что позволяет создавать динамические графические компоненты: вкладки, drag & drop, прогресс-бары ... +Возможности этой библиотеки делятся на 3 категории: +-* {{Взаимодействия)}}. Предоставляют очень интересные свойства HTML элементам, такие как возможность их поймать и перемещать с помощью мыши (перетащить и бросить), изменять как окно или выбирать как иконки на рабочем столе OS. +-* {{Виджеты}}. Это объекты «под ключ», предлагающие возможности высокого уровня, как например DatePicker, показывающий календарь для выбора даты. +-* {{Эффекты}}. Обогащают типичные эффекты, предлагаемые jQuery (fadeIn, slideUp...). С JQuery UI, например, можно анимировать CSS фон, используя свойство background-color с .animate(), или добавить переходы с addClass/removeClass... - ', # MODIF + ', 'jqueryui_slogan' => 'Анимация, эффекты и плагины jQuery' ); - -?> diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_sk.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_sk.php index 575ff573..842adbcd 100644 --- a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_sk.php +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-jqueryui?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,8 +14,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( Funkcie tejto knižnice sa rozdeľujú do 3 kategórií: -* {{Interakcie:}} dávajú vašim HTML objektom zaujímavé vlastnosti, napríklad môžete na objekty kliknúť myšou, a tak ich presúvať (drag&drop), dá sa meniť ich veľkosť tak ako veľkosť okna, alebo si ich môžete zvoliť ako ikony na pracovnú plochu svojho operačného systému. -* {{Widgety:}} to sú objekty s "prepínačmi", ktoré ponúkajú funkcie vysokej úrovne, ako napríklad DatePicker, ktorý zobrazí kalendár umožňujúci zadanie dátumu. --* {{Efekty:}} obohacujú predvolené efekty, ktoré ponúka jQuery (fadeIn, slideUp...). Napríklad vďaka jQuery UI je možné doplniť vlastnosť CSS background-color o .animate() alebo pridať prechody k addClass/removeClass, atď.', +-* {{Efekty:}} obohacujú predvolené efekty, ktoré ponúka jQuery (fadeIn, slideUp...). Napríklad vďaka jQuery UI je možné doplniť vlastnosť CSS background-color o .animate() alebo pridať prechody k addClass/removeClass, atď.', # MODIF 'jqueryui_slogan' => 'Animácie, efekty a widgety jQuery' ); - -?> diff --git a/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_uk.php b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_uk.php new file mode 100644 index 00000000..a42e760b --- /dev/null +++ b/www/plugins-dist/jquery_ui/lang/paquet-jqueryui_uk.php @@ -0,0 +1,19 @@ + 'Цей плагін реалізує в SPIP додаткові бібліотеки JQuery UI, що дозволяє створювати динамічні графічні компоненти: вкладки, drag & drop, прогрес-бари... +Можливості цієї бібліотеки поділяються на 3 категорії: +-* {{Взаємодії}}. Надають дуже цікаві властивості HTML-елементам, такі як можливісті їх спіймати і пересувати за допомогою миші (перетягнути й кинути), змінювати як вікно або вибирати як іконки на робочому столі OS. +-* {{Віджети}}. Це об’єкти «під ключ», що пропонують можливості високого рівня, як, наприклад, DatePicker, який показує календар для вибору дати. +-* {{Ефекти}}. Збагачують типові ефекти, що пропонує jQuery (fadeIn, slideUp...). З JQuery UI, наприклад, можна анімувати CSS фон за допомогою властивості background-color з .animate() або додати переходи з addClass/removeClass...', + 'jqueryui_slogan' => 'Анімація, ефекти і плагіни jQuery' +); diff --git a/www/plugins-dist/jquery_ui/paquet.xml b/www/plugins-dist/jquery_ui/paquet.xml index 0d0671f3..4641a47c 100644 --- a/www/plugins-dist/jquery_ui/paquet.xml +++ b/www/plugins-dist/jquery_ui/paquet.xml @@ -1,9 +1,9 @@ @@ -17,8 +17,9 @@ + - +
    \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-af.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-af.js new file mode 100644 index 00000000..c7568888 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-af.js @@ -0,0 +1,37 @@ +/* Afrikaans initialisation for the jQuery UI date picker plugin. */ +/* Written by Renier Pretorius. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.af = { + closeText: "Selekteer", + prevText: "Vorige", + nextText: "Volgende", + currentText: "Vandag", + monthNames: [ "Januarie","Februarie","Maart","April","Mei","Junie", + "Julie","Augustus","September","Oktober","November","Desember" ], + monthNamesShort: [ "Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", + "Jul", "Aug", "Sep", "Okt", "Nov", "Des" ], + dayNames: [ "Sondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrydag", "Saterdag" ], + dayNamesShort: [ "Son", "Maa", "Din", "Woe", "Don", "Vry", "Sat" ], + dayNamesMin: [ "So","Ma","Di","Wo","Do","Vr","Sa" ], + weekHeader: "Wk", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.af ); + +return datepicker.regional.af; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ar-DZ.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ar-DZ.js new file mode 100644 index 00000000..a2b1750b --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ar-DZ.js @@ -0,0 +1,39 @@ +/* Algerian Arabic Translation for jQuery UI date picker plugin. +/* Used in most of Maghreb countries, primarily in Algeria, Tunisia, Morocco. +/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */ +/* Mohamed Amine HADDAD -- zatamine@gmail.com */ + +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "ar-DZ" ] = { + closeText: "إغلاق", + prevText: "<السابق", + nextText: "التالي>", + currentText: "اليوم", + monthNames: [ "جانفي", "فيفري", "مارس", "أفريل", "ماي", "جوان", + "جويلية", "أوت", "سبتمبر","أكتوبر", "نوفمبر", "ديسمبر" ], + monthNamesShort: [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" ], + dayNames: [ "الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت" ], + dayNamesShort: [ "الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت" ], + dayNamesMin: [ "Ø­", "ن", "Ø«", "ر", "Ø®", "ج", "س" ], + weekHeader: "أسبوع", + dateFormat: "dd/mm/yy", + firstDay: 6, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional[ "ar-DZ" ] ); + +return datepicker.regional[ "ar-DZ" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ar.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ar.js new file mode 100644 index 00000000..95784e88 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ar.js @@ -0,0 +1,39 @@ +/* Arabic Translation for jQuery UI date picker plugin. */ +/* Used in most of Arab countries, primarily in Bahrain, */ +/* Kuwait, Oman, Qatar, Saudi Arabia and the United Arab Emirates, Egypt, Sudan and Yemen. */ +/* Written by Mohammed Alshehri -- m@dralshehri.com */ + +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.ar = { + closeText: "إغلاق", + prevText: "<السابق", + nextText: "التالي>", + currentText: "اليوم", + monthNames: [ "يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", + "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر" ], + monthNamesShort: [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" ], + dayNames: [ "الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت" ], + dayNamesShort: [ "أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت" ], + dayNamesMin: [ "Ø­", "ن", "Ø«", "ر", "Ø®", "ج", "س" ], + weekHeader: "أسبوع", + dateFormat: "dd/mm/yy", + firstDay: 0, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.ar ); + +return datepicker.regional.ar; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-az.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-az.js new file mode 100644 index 00000000..2ebdcfa8 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-az.js @@ -0,0 +1,37 @@ +/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Jamil Najafov (necefov33@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.az = { + closeText: "Bağla", + prevText: "<Geri", + nextText: "Ä°rəli>", + currentText: "Bugün", + monthNames: [ "Yanvar","Fevral","Mart","Aprel","May","Ä°yun", + "Ä°yul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr" ], + monthNamesShort: [ "Yan","Fev","Mar","Apr","May","Ä°yun", + "Ä°yul","Avq","Sen","Okt","Noy","Dek" ], + dayNames: [ "Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə" ], + dayNamesShort: [ "B","Be","Ça","Ç","Ca","C","Ş" ], + dayNamesMin: [ "B","B","Ç","С","Ç","C","Ş" ], + weekHeader: "Hf", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.az ); + +return datepicker.regional.az; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-be.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-be.js new file mode 100644 index 00000000..7d96dd1d --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-be.js @@ -0,0 +1,37 @@ +/* Belarusian initialisation for the jQuery UI date picker plugin. */ +/* Written by Pavel Selitskas */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.be = { + closeText: "Зачыніць", + prevText: "←Папяр.", + nextText: "Наст.→", + currentText: "Сёньня", + monthNames: [ "Студзень","Люты","Сакавік","Красавік","Травень","Чэрвень", + "Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Сьнежань" ], + monthNamesShort: [ "Сту","Лют","Сак","Кра","Тра","Чэр", + "Ліп","Жні","Вер","Кас","Ліс","Сьн" ], + dayNames: [ "нядзеля","панядзелак","аўторак","серада","чацьвер","пятніца","субота" ], + dayNamesShort: [ "ндз","пнд","аўт","срд","чцв","птн","сбт" ], + dayNamesMin: [ "Нд","Пн","Аў","Ср","Чц","Пт","Сб" ], + weekHeader: "Тд", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.be ); + +return datepicker.regional.be; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-bg.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-bg.js new file mode 100644 index 00000000..cb066a4c --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-bg.js @@ -0,0 +1,38 @@ +/* Bulgarian initialisation for the jQuery UI date picker plugin. */ +/* Written by Stoyan Kyosev (http://svest.org). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.bg = { + closeText: "затвори", + prevText: "<назад", + nextText: "напред>", + nextBigText: ">>", + currentText: "днес", + monthNames: [ "Януари","Февруари","Март","Април","Май","Юни", + "Юли","Август","Септември","Октомври","Ноември","Декември" ], + monthNamesShort: [ "Яну","Фев","Мар","Апр","Май","Юни", + "Юли","Авг","Сеп","Окт","Нов","Дек" ], + dayNames: [ "Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота" ], + dayNamesShort: [ "Нед","Пон","Вто","Сря","Чет","Пет","Съб" ], + dayNamesMin: [ "Не","По","Вт","Ср","Че","Пе","Съ" ], + weekHeader: "Wk", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.bg ); + +return datepicker.regional.bg; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-bs.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-bs.js new file mode 100644 index 00000000..b9f2e286 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-bs.js @@ -0,0 +1,37 @@ +/* Bosnian i18n for the jQuery UI date picker plugin. */ +/* Written by Kenan Konjo. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.bs = { + closeText: "Zatvori", + prevText: "<", + nextText: ">", + currentText: "Danas", + monthNames: [ "Januar","Februar","Mart","April","Maj","Juni", + "Juli","August","Septembar","Oktobar","Novembar","Decembar" ], + monthNamesShort: [ "Jan","Feb","Mar","Apr","Maj","Jun", + "Jul","Aug","Sep","Okt","Nov","Dec" ], + dayNames: [ "Nedelja","Ponedeljak","Utorak","Srijeda","Četvrtak","Petak","Subota" ], + dayNamesShort: [ "Ned","Pon","Uto","Sri","Čet","Pet","Sub" ], + dayNamesMin: [ "Ne","Po","Ut","Sr","Če","Pe","Su" ], + weekHeader: "Wk", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.bs ); + +return datepicker.regional.bs; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ca.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ca.js new file mode 100644 index 00000000..9febd90e --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ca.js @@ -0,0 +1,37 @@ +/* Inicialització en català per a l'extensió 'UI date picker' per jQuery. */ +/* Writers: (joan.leon@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.ca = { + closeText: "Tanca", + prevText: "Anterior", + nextText: "Següent", + currentText: "Avui", + monthNames: [ "gener","febrer","març","abril","maig","juny", + "juliol","agost","setembre","octubre","novembre","desembre" ], + monthNamesShort: [ "gen","feb","març","abr","maig","juny", + "jul","ag","set","oct","nov","des" ], + dayNames: [ "diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte" ], + dayNamesShort: [ "dg","dl","dt","dc","dj","dv","ds" ], + dayNamesMin: [ "dg","dl","dt","dc","dj","dv","ds" ], + weekHeader: "Set", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.ca ); + +return datepicker.regional.ca; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-cs.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-cs.js new file mode 100644 index 00000000..c2f79cf9 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-cs.js @@ -0,0 +1,37 @@ +/* Czech initialisation for the jQuery UI date picker plugin. */ +/* Written by Tomas Muller (tomas@tomas-muller.net). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.cs = { + closeText: "Zavřít", + prevText: "<Dříve", + nextText: "Později>", + currentText: "Nyní", + monthNames: [ "leden","únor","březen","duben","květen","červen", + "červenec","srpen","září","říjen","listopad","prosinec" ], + monthNamesShort: [ "led","úno","bře","dub","kvě","čer", + "čvc","srp","zář","říj","lis","pro" ], + dayNames: [ "neděle", "pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota" ], + dayNamesShort: [ "ne", "po", "út", "st", "čt", "pá", "so" ], + dayNamesMin: [ "ne","po","út","st","čt","pá","so" ], + weekHeader: "Týd", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.cs ); + +return datepicker.regional.cs; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-cy-GB.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-cy-GB.js new file mode 100644 index 00000000..14fce914 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-cy-GB.js @@ -0,0 +1,45 @@ +/* Welsh/UK initialisation for the jQuery UI date picker plugin. */ +/* Written by William Griffiths. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "cy-GB" ] = { + closeText: "Done", + prevText: "Prev", + nextText: "Next", + currentText: "Today", + monthNames: [ "Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin", + "Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr" ], + monthNamesShort: [ "Ion", "Chw", "Maw", "Ebr", "Mai", "Meh", + "Gor", "Aws", "Med", "Hyd", "Tac", "Rha" ], + dayNames: [ + "Dydd Sul", + "Dydd Llun", + "Dydd Mawrth", + "Dydd Mercher", + "Dydd Iau", + "Dydd Gwener", + "Dydd Sadwrn" + ], + dayNamesShort: [ "Sul", "Llu", "Maw", "Mer", "Iau", "Gwe", "Sad" ], + dayNamesMin: [ "Su","Ll","Ma","Me","Ia","Gw","Sa" ], + weekHeader: "Wy", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional[ "cy-GB" ] ); + +return datepicker.regional[ "cy-GB" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-da.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-da.js new file mode 100644 index 00000000..273f0e3f --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-da.js @@ -0,0 +1,37 @@ +/* Danish initialisation for the jQuery UI date picker plugin. */ +/* Written by Jan Christensen ( deletestuff@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.da = { + closeText: "Luk", + prevText: "<Forrige", + nextText: "Næste>", + currentText: "Idag", + monthNames: [ "Januar","Februar","Marts","April","Maj","Juni", + "Juli","August","September","Oktober","November","December" ], + monthNamesShort: [ "Jan","Feb","Mar","Apr","Maj","Jun", + "Jul","Aug","Sep","Okt","Nov","Dec" ], + dayNames: [ "Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag" ], + dayNamesShort: [ "Søn","Man","Tir","Ons","Tor","Fre","Lør" ], + dayNamesMin: [ "Sø","Ma","Ti","On","To","Fr","Lø" ], + weekHeader: "Uge", + dateFormat: "dd-mm-yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.da ); + +return datepicker.regional.da; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-de.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-de.js new file mode 100644 index 00000000..a6779084 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-de.js @@ -0,0 +1,37 @@ +/* German initialisation for the jQuery UI date picker plugin. */ +/* Written by Milian Wolff (mail@milianw.de). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.de = { + closeText: "Schließen", + prevText: "<Zurück", + nextText: "Vor>", + currentText: "Heute", + monthNames: [ "Januar","Februar","März","April","Mai","Juni", + "Juli","August","September","Oktober","November","Dezember" ], + monthNamesShort: [ "Jan","Feb","Mär","Apr","Mai","Jun", + "Jul","Aug","Sep","Okt","Nov","Dez" ], + dayNames: [ "Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag" ], + dayNamesShort: [ "So","Mo","Di","Mi","Do","Fr","Sa" ], + dayNamesMin: [ "So","Mo","Di","Mi","Do","Fr","Sa" ], + weekHeader: "KW", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.de ); + +return datepicker.regional.de; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-el.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-el.js new file mode 100644 index 00000000..f08d6f27 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-el.js @@ -0,0 +1,37 @@ +/* Greek (el) initialisation for the jQuery UI date picker plugin. */ +/* Written by Alex Cicovic (http://www.alexcicovic.com) */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.el = { + closeText: "Κλείσιμο", + prevText: "Προηγούμενος", + nextText: "Επόμενος", + currentText: "Σήμερα", + monthNames: [ "Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος", + "Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος" ], + monthNamesShort: [ "Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν", + "Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ" ], + dayNames: [ "Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο" ], + dayNamesShort: [ "Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ" ], + dayNamesMin: [ "Κυ","Δε","Τρ","Τε","Πε","Πα","Σα" ], + weekHeader: "Εβδ", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.el ); + +return datepicker.regional.el; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-en-AU.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-en-AU.js new file mode 100644 index 00000000..f15277c3 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-en-AU.js @@ -0,0 +1,37 @@ +/* English/Australia initialisation for the jQuery UI date picker plugin. */ +/* Based on the en-GB initialisation. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "en-AU" ] = { + closeText: "Done", + prevText: "Prev", + nextText: "Next", + currentText: "Today", + monthNames: [ "January","February","March","April","May","June", + "July","August","September","October","November","December" ], + monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], + dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], + dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], + dayNamesMin: [ "Su","Mo","Tu","We","Th","Fr","Sa" ], + weekHeader: "Wk", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional[ "en-AU" ] ); + +return datepicker.regional[ "en-AU" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-en-GB.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-en-GB.js new file mode 100644 index 00000000..c961c186 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-en-GB.js @@ -0,0 +1,37 @@ +/* English/UK initialisation for the jQuery UI date picker plugin. */ +/* Written by Stuart. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "en-GB" ] = { + closeText: "Done", + prevText: "Prev", + nextText: "Next", + currentText: "Today", + monthNames: [ "January","February","March","April","May","June", + "July","August","September","October","November","December" ], + monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], + dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], + dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], + dayNamesMin: [ "Su","Mo","Tu","We","Th","Fr","Sa" ], + weekHeader: "Wk", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional[ "en-GB" ] ); + +return datepicker.regional[ "en-GB" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-en-NZ.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-en-NZ.js new file mode 100644 index 00000000..70463622 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-en-NZ.js @@ -0,0 +1,37 @@ +/* English/New Zealand initialisation for the jQuery UI date picker plugin. */ +/* Based on the en-GB initialisation. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "en-NZ" ] = { + closeText: "Done", + prevText: "Prev", + nextText: "Next", + currentText: "Today", + monthNames: [ "January","February","March","April","May","June", + "July","August","September","October","November","December" ], + monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], + dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], + dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], + dayNamesMin: [ "Su","Mo","Tu","We","Th","Fr","Sa" ], + weekHeader: "Wk", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional[ "en-NZ" ] ); + +return datepicker.regional[ "en-NZ" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-eo.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-eo.js new file mode 100644 index 00000000..25f6162b --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-eo.js @@ -0,0 +1,37 @@ +/* Esperanto initialisation for the jQuery UI date picker plugin. */ +/* Written by Olivier M. (olivierweb@ifrance.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.eo = { + closeText: "Fermi", + prevText: "<Anta", + nextText: "Sekv>", + currentText: "Nuna", + monthNames: [ "Januaro","Februaro","Marto","Aprilo","Majo","Junio", + "Julio","AÅ­gusto","Septembro","Oktobro","Novembro","Decembro" ], + monthNamesShort: [ "Jan","Feb","Mar","Apr","Maj","Jun", + "Jul","AÅ­g","Sep","Okt","Nov","Dec" ], + dayNames: [ "Dimanĉo","Lundo","Mardo","Merkredo","Ä´aÅ­do","Vendredo","Sabato" ], + dayNamesShort: [ "Dim","Lun","Mar","Mer","Ä´aÅ­","Ven","Sab" ], + dayNamesMin: [ "Di","Lu","Ma","Me","Ä´a","Ve","Sa" ], + weekHeader: "Sb", + dateFormat: "dd/mm/yy", + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.eo ); + +return datepicker.regional.eo; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-es.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-es.js new file mode 100644 index 00000000..ea7116e0 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-es.js @@ -0,0 +1,37 @@ +/* Inicialización en español para la extensión 'UI date picker' para jQuery. */ +/* Traducido por Vester (xvester@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.es = { + closeText: "Cerrar", + prevText: "<Ant", + nextText: "Sig>", + currentText: "Hoy", + monthNames: [ "enero","febrero","marzo","abril","mayo","junio", + "julio","agosto","septiembre","octubre","noviembre","diciembre" ], + monthNamesShort: [ "ene","feb","mar","abr","may","jun", + "jul","ago","sep","oct","nov","dic" ], + dayNames: [ "domingo","lunes","martes","miércoles","jueves","viernes","sábado" ], + dayNamesShort: [ "dom","lun","mar","mié","jue","vie","sáb" ], + dayNamesMin: [ "D","L","M","X","J","V","S" ], + weekHeader: "Sm", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.es ); + +return datepicker.regional.es; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-et.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-et.js new file mode 100644 index 00000000..b2e226ae --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-et.js @@ -0,0 +1,45 @@ +/* Estonian initialisation for the jQuery UI date picker plugin. */ +/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.et = { + closeText: "Sulge", + prevText: "Eelnev", + nextText: "Järgnev", + currentText: "Täna", + monthNames: [ "Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni", + "Juuli","August","September","Oktoober","November","Detsember" ], + monthNamesShort: [ "Jaan", "Veebr", "Märts", "Apr", "Mai", "Juuni", + "Juuli", "Aug", "Sept", "Okt", "Nov", "Dets" ], + dayNames: [ + "Pühapäev", + "Esmaspäev", + "Teisipäev", + "Kolmapäev", + "Neljapäev", + "Reede", + "Laupäev" + ], + dayNamesShort: [ "Pühap", "Esmasp", "Teisip", "Kolmap", "Neljap", "Reede", "Laup" ], + dayNamesMin: [ "P","E","T","K","N","R","L" ], + weekHeader: "näd", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.et ); + +return datepicker.regional.et; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-eu.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-eu.js new file mode 100644 index 00000000..8ea1ef9e --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-eu.js @@ -0,0 +1,36 @@ +/* Karrikas-ek itzulia (karrikas@karrikas.com) */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.eu = { + closeText: "Egina", + prevText: "<Aur", + nextText: "Hur>", + currentText: "Gaur", + monthNames: [ "urtarrila","otsaila","martxoa","apirila","maiatza","ekaina", + "uztaila","abuztua","iraila","urria","azaroa","abendua" ], + monthNamesShort: [ "urt.","ots.","mar.","api.","mai.","eka.", + "uzt.","abu.","ira.","urr.","aza.","abe." ], + dayNames: [ "igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata" ], + dayNamesShort: [ "ig.","al.","ar.","az.","og.","ol.","lr." ], + dayNamesMin: [ "ig","al","ar","az","og","ol","lr" ], + weekHeader: "As", + dateFormat: "yy-mm-dd", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.eu ); + +return datepicker.regional.eu; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fa.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fa.js new file mode 100644 index 00000000..71da4981 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fa.js @@ -0,0 +1,73 @@ +/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */ +/* Javad Mowlanezhad -- jmowla@gmail.com */ +/* Jalali calendar should supported soon! (Its implemented but I have to test it) */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.fa = { + closeText: "بستن", + prevText: "<قبلی", + nextText: "بعدی>", + currentText: "امروز", + monthNames: [ + "ژانویه", + "فوریه", + "مارس", + "آوریل", + "مه", + "ژوئن", + "ژوئیه", + "اوت", + "سپتامبر", + "اکتبر", + "نوامبر", + "دسامبر" + ], + monthNamesShort: [ "1","2","3","4","5","6","7","8","9","10","11","12" ], + dayNames: [ + "يکشنبه", + "دوشنبه", + "سه‌شنبه", + "چهارشنبه", + "پنجشنبه", + "جمعه", + "شنبه" + ], + dayNamesShort: [ + "ی", + "د", + "س", + "چ", + "Ù¾", + "ج", + "Ø´" + ], + dayNamesMin: [ + "ی", + "د", + "س", + "چ", + "Ù¾", + "ج", + "Ø´" + ], + weekHeader: "هف", + dateFormat: "yy/mm/dd", + firstDay: 6, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.fa ); + +return datepicker.regional.fa; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fi.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fi.js new file mode 100644 index 00000000..a8386ff6 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fi.js @@ -0,0 +1,37 @@ +/* Finnish initialisation for the jQuery UI date picker plugin. */ +/* Written by Harri Kilpiö (harrikilpio@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.fi = { + closeText: "Sulje", + prevText: "«Edellinen", + nextText: "Seuraava»", + currentText: "Tänään", + monthNames: [ "Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu", + "Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu" ], + monthNamesShort: [ "Tammi","Helmi","Maalis","Huhti","Touko","Kesä", + "Heinä","Elo","Syys","Loka","Marras","Joulu" ], + dayNamesShort: [ "Su","Ma","Ti","Ke","To","Pe","La" ], + dayNames: [ "Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai" ], + dayNamesMin: [ "Su","Ma","Ti","Ke","To","Pe","La" ], + weekHeader: "Vk", + dateFormat: "d.m.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.fi ); + +return datepicker.regional.fi; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fo.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fo.js new file mode 100644 index 00000000..6c24b8bf --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fo.js @@ -0,0 +1,45 @@ +/* Faroese initialisation for the jQuery UI date picker plugin */ +/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.fo = { + closeText: "Lat aftur", + prevText: "<Fyrra", + nextText: "Næsta>", + currentText: "Í dag", + monthNames: [ "Januar","Februar","Mars","Apríl","Mei","Juni", + "Juli","August","September","Oktober","November","Desember" ], + monthNamesShort: [ "Jan","Feb","Mar","Apr","Mei","Jun", + "Jul","Aug","Sep","Okt","Nov","Des" ], + dayNames: [ + "Sunnudagur", + "Mánadagur", + "Týsdagur", + "Mikudagur", + "Hósdagur", + "Fríggjadagur", + "Leyardagur" + ], + dayNamesShort: [ "Sun","Mán","Týs","Mik","Hós","Frí","Ley" ], + dayNamesMin: [ "Su","Má","Tý","Mi","Hó","Fr","Le" ], + weekHeader: "Vk", + dateFormat: "dd-mm-yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.fo ); + +return datepicker.regional.fo; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fr-CA.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fr-CA.js new file mode 100644 index 00000000..b590277d --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fr-CA.js @@ -0,0 +1,37 @@ +/* Canadian-French initialisation for the jQuery UI date picker plugin. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "fr-CA" ] = { + closeText: "Fermer", + prevText: "Précédent", + nextText: "Suivant", + currentText: "Aujourd'hui", + monthNames: [ "janvier", "février", "mars", "avril", "mai", "juin", + "juillet", "août", "septembre", "octobre", "novembre", "décembre" ], + monthNamesShort: [ "janv.", "févr.", "mars", "avril", "mai", "juin", + "juil.", "août", "sept.", "oct.", "nov.", "déc." ], + dayNames: [ "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" ], + dayNamesShort: [ "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." ], + dayNamesMin: [ "D", "L", "M", "M", "J", "V", "S" ], + weekHeader: "Sem.", + dateFormat: "yy-mm-dd", + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" +}; +datepicker.setDefaults( datepicker.regional[ "fr-CA" ] ); + +return datepicker.regional[ "fr-CA" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fr-CH.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fr-CH.js new file mode 100644 index 00000000..d2f0584d --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fr-CH.js @@ -0,0 +1,37 @@ +/* Swiss-French initialisation for the jQuery UI date picker plugin. */ +/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "fr-CH" ] = { + closeText: "Fermer", + prevText: "<Préc", + nextText: "Suiv>", + currentText: "Courant", + monthNames: [ "janvier", "février", "mars", "avril", "mai", "juin", + "juillet", "août", "septembre", "octobre", "novembre", "décembre" ], + monthNamesShort: [ "janv.", "févr.", "mars", "avril", "mai", "juin", + "juil.", "août", "sept.", "oct.", "nov.", "déc." ], + dayNames: [ "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" ], + dayNamesShort: [ "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." ], + dayNamesMin: [ "D", "L", "M", "M", "J", "V", "S" ], + weekHeader: "Sm", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional[ "fr-CH" ] ); + +return datepicker.regional[ "fr-CH" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fr.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fr.js new file mode 100644 index 00000000..9e39fbd6 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-fr.js @@ -0,0 +1,39 @@ +/* French initialisation for the jQuery UI date picker plugin. */ +/* Written by Keith Wood (kbwood{at}iinet.com.au), + Stéphane Nahmani (sholby@sholby.net), + Stéphane Raimbault */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.fr = { + closeText: "Fermer", + prevText: "Précédent", + nextText: "Suivant", + currentText: "Aujourd'hui", + monthNames: [ "janvier", "février", "mars", "avril", "mai", "juin", + "juillet", "août", "septembre", "octobre", "novembre", "décembre" ], + monthNamesShort: [ "janv.", "févr.", "mars", "avr.", "mai", "juin", + "juil.", "août", "sept.", "oct.", "nov.", "déc." ], + dayNames: [ "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" ], + dayNamesShort: [ "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." ], + dayNamesMin: [ "D","L","M","M","J","V","S" ], + weekHeader: "Sem.", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.fr ); + +return datepicker.regional.fr; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-gl.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-gl.js new file mode 100644 index 00000000..27652307 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-gl.js @@ -0,0 +1,37 @@ +/* Galician localization for 'UI date picker' jQuery extension. */ +/* Translated by Jorge Barreiro . */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.gl = { + closeText: "Pechar", + prevText: "<Ant", + nextText: "Seg>", + currentText: "Hoxe", + monthNames: [ "Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño", + "Xullo","Agosto","Setembro","Outubro","Novembro","Decembro" ], + monthNamesShort: [ "Xan","Feb","Mar","Abr","Mai","Xuñ", + "Xul","Ago","Set","Out","Nov","Dec" ], + dayNames: [ "Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado" ], + dayNamesShort: [ "Dom","Lun","Mar","Mér","Xov","Ven","Sáb" ], + dayNamesMin: [ "Do","Lu","Ma","Mé","Xo","Ve","Sá" ], + weekHeader: "Sm", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.gl ); + +return datepicker.regional.gl; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-he.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-he.js new file mode 100644 index 00000000..fb6238fd --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-he.js @@ -0,0 +1,37 @@ +/* Hebrew initialisation for the UI Datepicker extension. */ +/* Written by Amir Hardon (ahardon at gmail dot com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.he = { + closeText: "סגור", + prevText: "<הקודם", + nextText: "הבא>", + currentText: "היום", + monthNames: [ "ינואר","פברואר","מרץ","אפריל","מאי","יוני", + "יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר" ], + monthNamesShort: [ "ינו","פבר","מרץ","אפר","מאי","יוני", + "יולי","אוג","ספט","אוק","נוב","דצמ" ], + dayNames: [ "ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת" ], + dayNamesShort: [ "א'","ב'","ג'","ד'","ה'","ו'","שבת" ], + dayNamesMin: [ "א'","ב'","ג'","ד'","ה'","ו'","שבת" ], + weekHeader: "Wk", + dateFormat: "dd/mm/yy", + firstDay: 0, + isRTL: true, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.he ); + +return datepicker.regional.he; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hi.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hi.js new file mode 100644 index 00000000..3b120972 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hi.js @@ -0,0 +1,37 @@ +/* Hindi initialisation for the jQuery UI date picker plugin. */ +/* Written by Michael Dawart. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.hi = { + closeText: "बंद", + prevText: "पिछला", + nextText: "अगला", + currentText: "आज", + monthNames: [ "जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून", + "जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर" ], + monthNamesShort: [ "जन", "फर", "मार्च", "अप्रेल", "मई", "जून", + "जूलाई", "अग", "सित", "अक्ट", "नव", "दि" ], + dayNames: [ "रविवार", "सोमवार", "मंगलवार", "बुधवार", "गुरुवार", "शुक्रवार", "शनिवार" ], + dayNamesShort: [ "रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि" ], + dayNamesMin: [ "रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि" ], + weekHeader: "हफ्ता", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.hi ); + +return datepicker.regional.hi; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hr.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hr.js new file mode 100644 index 00000000..5e218c12 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hr.js @@ -0,0 +1,37 @@ +/* Croatian i18n for the jQuery UI date picker plugin. */ +/* Written by Vjekoslav Nesek. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.hr = { + closeText: "Zatvori", + prevText: "<", + nextText: ">", + currentText: "Danas", + monthNames: [ "Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj", + "Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac" ], + monthNamesShort: [ "Sij","Velj","Ožu","Tra","Svi","Lip", + "Srp","Kol","Ruj","Lis","Stu","Pro" ], + dayNames: [ "Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota" ], + dayNamesShort: [ "Ned","Pon","Uto","Sri","Čet","Pet","Sub" ], + dayNamesMin: [ "Ne","Po","Ut","Sr","Če","Pe","Su" ], + weekHeader: "Tje", + dateFormat: "dd.mm.yy.", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.hr ); + +return datepicker.regional.hr; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hu.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hu.js new file mode 100644 index 00000000..22bbe703 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hu.js @@ -0,0 +1,36 @@ +/* Hungarian initialisation for the jQuery UI date picker plugin. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.hu = { + closeText: "bezár", + prevText: "vissza", + nextText: "előre", + currentText: "ma", + monthNames: [ "Január", "Február", "Március", "Április", "Május", "Június", + "Július", "Augusztus", "Szeptember", "Október", "November", "December" ], + monthNamesShort: [ "Jan", "Feb", "Már", "Ápr", "Máj", "Jún", + "Júl", "Aug", "Szep", "Okt", "Nov", "Dec" ], + dayNames: [ "Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat" ], + dayNamesShort: [ "Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo" ], + dayNamesMin: [ "V", "H", "K", "Sze", "Cs", "P", "Szo" ], + weekHeader: "Hét", + dateFormat: "yy.mm.dd.", + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.hu ); + +return datepicker.regional.hu; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hy.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hy.js new file mode 100644 index 00000000..95638b31 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-hy.js @@ -0,0 +1,37 @@ +/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.hy = { + closeText: "Փակել", + prevText: "<Նախ.", + nextText: "Հաջ.>", + currentText: "Այսօր", + monthNames: [ "Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս", + "Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր" ], + monthNamesShort: [ "Հունվ","Փետր","Մարտ","Ապր","Մայիս","Հունիս", + "Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Ô´Õ¥Õ¯" ], + dayNames: [ "կիրակի","եկուշաբթի","երեքշաբթի","չորեքշաբթի","Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«","ուրբաթ","Õ·Õ¡Õ¢Õ¡Õ©" ], + dayNamesShort: [ "կիր","երկ","երք","չրք","Õ°Õ¶Õ£","ուրբ","Õ·Õ¢Õ©" ], + dayNamesMin: [ "կիր","երկ","երք","չրք","Õ°Õ¶Õ£","ուրբ","Õ·Õ¢Õ©" ], + weekHeader: "ՇԲՏ", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.hy ); + +return datepicker.regional.hy; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-id.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-id.js new file mode 100644 index 00000000..5aef348a --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-id.js @@ -0,0 +1,37 @@ +/* Indonesian initialisation for the jQuery UI date picker plugin. */ +/* Written by Deden Fathurahman (dedenf@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.id = { + closeText: "Tutup", + prevText: "<mundur", + nextText: "maju>", + currentText: "hari ini", + monthNames: [ "Januari","Februari","Maret","April","Mei","Juni", + "Juli","Agustus","September","Oktober","Nopember","Desember" ], + monthNamesShort: [ "Jan","Feb","Mar","Apr","Mei","Jun", + "Jul","Agus","Sep","Okt","Nop","Des" ], + dayNames: [ "Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu" ], + dayNamesShort: [ "Min","Sen","Sel","Rab","kam","Jum","Sab" ], + dayNamesMin: [ "Mg","Sn","Sl","Rb","Km","jm","Sb" ], + weekHeader: "Mg", + dateFormat: "dd/mm/yy", + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.id ); + +return datepicker.regional.id; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-is.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-is.js new file mode 100644 index 00000000..b15f37ab --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-is.js @@ -0,0 +1,45 @@ +/* Icelandic initialisation for the jQuery UI date picker plugin. */ +/* Written by Haukur H. Thorsson (haukur@eskill.is). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.is = { + closeText: "Loka", + prevText: "< Fyrri", + nextText: "Næsti >", + currentText: "Í dag", + monthNames: [ "Janúar","Febrúar","Mars","Apríl","Maí","Júní", + "Júlí","Ágúst","September","Október","Nóvember","Desember" ], + monthNamesShort: [ "Jan","Feb","Mar","Apr","Maí","Jún", + "Júl","Ágú","Sep","Okt","Nóv","Des" ], + dayNames: [ + "Sunnudagur", + "Mánudagur", + "Þriðjudagur", + "Miðvikudagur", + "Fimmtudagur", + "Föstudagur", + "Laugardagur" + ], + dayNamesShort: [ "Sun","Mán","Þri","Mið","Fim","Fös","Lau" ], + dayNamesMin: [ "Su","Má","Þr","Mi","Fi","Fö","La" ], + weekHeader: "Vika", + dateFormat: "dd.mm.yy", + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.is ); + +return datepicker.regional.is; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-it-CH.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-it-CH.js new file mode 100644 index 00000000..9895da4c --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-it-CH.js @@ -0,0 +1,37 @@ +/* Italian initialisation for the jQuery UI date picker plugin. */ +/* Written by Antonello Pasella (antonello.pasella@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "it-CH" ] = { + closeText: "Chiudi", + prevText: "<Prec", + nextText: "Succ>", + currentText: "Oggi", + monthNames: [ "Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno", + "Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre" ], + monthNamesShort: [ "Gen","Feb","Mar","Apr","Mag","Giu", + "Lug","Ago","Set","Ott","Nov","Dic" ], + dayNames: [ "Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato" ], + dayNamesShort: [ "Dom","Lun","Mar","Mer","Gio","Ven","Sab" ], + dayNamesMin: [ "Do","Lu","Ma","Me","Gi","Ve","Sa" ], + weekHeader: "Sm", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional[ "it-CH" ] ); + +return datepicker.regional[ "it-CH" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-it.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-it.js new file mode 100644 index 00000000..d67cb6c2 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-it.js @@ -0,0 +1,37 @@ +/* Italian initialisation for the jQuery UI date picker plugin. */ +/* Written by Antonello Pasella (antonello.pasella@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.it = { + closeText: "Chiudi", + prevText: "<Prec", + nextText: "Succ>", + currentText: "Oggi", + monthNames: [ "Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno", + "Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre" ], + monthNamesShort: [ "Gen","Feb","Mar","Apr","Mag","Giu", + "Lug","Ago","Set","Ott","Nov","Dic" ], + dayNames: [ "Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato" ], + dayNamesShort: [ "Dom","Lun","Mar","Mer","Gio","Ven","Sab" ], + dayNamesMin: [ "Do","Lu","Ma","Me","Gi","Ve","Sa" ], + weekHeader: "Sm", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.it ); + +return datepicker.regional.it; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ja.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ja.js new file mode 100644 index 00000000..52b10583 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ja.js @@ -0,0 +1,37 @@ +/* Japanese initialisation for the jQuery UI date picker plugin. */ +/* Written by Kentaro SATO (kentaro@ranvis.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.ja = { + closeText: "閉じる", + prevText: "<前", + nextText: "次>", + currentText: "今日", + monthNames: [ "1月","2月","3月","4月","5月","6月", + "7月","8月","9月","10月","11月","12月" ], + monthNamesShort: [ "1月","2月","3月","4月","5月","6月", + "7月","8月","9月","10月","11月","12月" ], + dayNames: [ "日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日" ], + dayNamesShort: [ "日","月","火","æ°´","木","金","土" ], + dayNamesMin: [ "日","月","火","æ°´","木","金","土" ], + weekHeader: "週", + dateFormat: "yy/mm/dd", + firstDay: 0, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: "å¹´" }; +datepicker.setDefaults( datepicker.regional.ja ); + +return datepicker.regional.ja; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ka.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ka.js new file mode 100644 index 00000000..1f596cb3 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ka.js @@ -0,0 +1,48 @@ +/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Lado Lomidze (lado.lomidze@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.ka = { + closeText: "დახურვა", + prevText: "< წინა", + nextText: "შემდეგი >", + currentText: "დღეს", + monthNames: [ + "იანვარი", + "თებერვალი", + "მარტი", + "აპრილი", + "მაისი", + "ივნისი", + "ივლისი", + "აგვისტო", + "სექტემბერი", + "ოქტომბერი", + "ნოემბერი", + "დეკემბერი" + ], + monthNamesShort: [ "იან","თებ","მარ","აპრ","მაი","ივნ", "ივლ","აგვ","სექ","ოქტ","ნოე","დეკ" ], + dayNames: [ "კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი" ], + dayNamesShort: [ "კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ" ], + dayNamesMin: [ "კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ" ], + weekHeader: "კვირა", + dateFormat: "dd-mm-yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.ka ); + +return datepicker.regional.ka; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-kk.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-kk.js new file mode 100644 index 00000000..fa0121f8 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-kk.js @@ -0,0 +1,37 @@ +/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.kk = { + closeText: "Жабу", + prevText: "<Алдыңғы", + nextText: "Келесі>", + currentText: "Бүгін", + monthNames: [ "Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым", + "Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан" ], + monthNamesShort: [ "Қаң","Ақп","Нау","Сәу","Мам","Мау", + "Шіл","Там","Қыр","Қаз","Қар","Жел" ], + dayNames: [ "Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі" ], + dayNamesShort: [ "жкс","дсн","ссн","срс","бсн","жма","снб" ], + dayNamesMin: [ "Жк","Дс","Сс","Ср","Бс","Жм","Сн" ], + weekHeader: "Не", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.kk ); + +return datepicker.regional.kk; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-km.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-km.js new file mode 100644 index 00000000..d8a4596b --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-km.js @@ -0,0 +1,37 @@ +/* Khmer initialisation for the jQuery calendar extension. */ +/* Written by Chandara Om (chandara.teacher@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.km = { + closeText: "ធ្វើ​រួច", + prevText: "មុន", + nextText: "បន្ទាប់", + currentText: "ថ្ងៃ​នេះ", + monthNames: [ "មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា", + "កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ" ], + monthNamesShort: [ "មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា", + "កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ" ], + dayNames: [ "អាទិត្យ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រហស្បតិ៍", "សុក្រ", "សៅរ៍" ], + dayNamesShort: [ "អា", "ច", "អ", "ពុ", "ព្រហ", "សុ", "សៅ" ], + dayNamesMin: [ "អា", "ច", "អ", "ពុ", "ព្រហ", "សុ", "សៅ" ], + weekHeader: "សប្ដាហ៍", + dateFormat: "dd-mm-yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.km ); + +return datepicker.regional.km; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ko.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ko.js new file mode 100644 index 00000000..8879a995 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ko.js @@ -0,0 +1,37 @@ +/* Korean initialisation for the jQuery calendar extension. */ +/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie and Myeongjin Lee. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.ko = { + closeText: "닫기", + prevText: "이전달", + nextText: "다음달", + currentText: "오늘", + monthNames: [ "1월","2월","3월","4월","5월","6월", + "7월","8월","9월","10월","11월","12월" ], + monthNamesShort: [ "1월","2월","3월","4월","5월","6월", + "7월","8월","9월","10월","11월","12월" ], + dayNames: [ "일요일","월요일","화요일","수요일","목요일","금요일","토요일" ], + dayNamesShort: [ "일","월","화","수","목","금","토" ], + dayNamesMin: [ "일","월","화","수","목","금","토" ], + weekHeader: "주", + dateFormat: "yy. m. d.", + firstDay: 0, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: "년" }; +datepicker.setDefaults( datepicker.regional.ko ); + +return datepicker.regional.ko; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ky.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ky.js new file mode 100644 index 00000000..f748bc60 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ky.js @@ -0,0 +1,38 @@ +/* Kyrgyz (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Sergey Kartashov (ebishkek@yandex.ru). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.ky = { + closeText: "Жабуу", + prevText: "<Мур", + nextText: "Кий>", + currentText: "Бүгүн", + monthNames: [ "Январь","Февраль","Март","Апрель","Май","Июнь", + "Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь" ], + monthNamesShort: [ "Янв","Фев","Мар","Апр","Май","Июн", + "Июл","Авг","Сен","Окт","Ноя","Дек" ], + dayNames: [ "жекшемби", "дүйшөмбү", "шейшемби", "шаршемби", "бейшемби", "жума", "ишемби" ], + dayNamesShort: [ "жек", "дүй", "шей", "шар", "бей", "жум", "ише" ], + dayNamesMin: [ "Жк","Дш","Шш","Шр","Бш","Жм","Иш" ], + weekHeader: "Жум", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" +}; +datepicker.setDefaults( datepicker.regional.ky ); + +return datepicker.regional.ky; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-lb.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-lb.js new file mode 100644 index 00000000..02a9c510 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-lb.js @@ -0,0 +1,45 @@ +/* Luxembourgish initialisation for the jQuery UI date picker plugin. */ +/* Written by Michel Weimerskirch */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.lb = { + closeText: "Fäerdeg", + prevText: "Zréck", + nextText: "Weider", + currentText: "Haut", + monthNames: [ "Januar","Februar","Mäerz","Abrëll","Mee","Juni", + "Juli","August","September","Oktober","November","Dezember" ], + monthNamesShort: [ "Jan", "Feb", "Mäe", "Abr", "Mee", "Jun", + "Jul", "Aug", "Sep", "Okt", "Nov", "Dez" ], + dayNames: [ + "Sonndeg", + "Méindeg", + "Dënschdeg", + "Mëttwoch", + "Donneschdeg", + "Freideg", + "Samschdeg" + ], + dayNamesShort: [ "Son", "Méi", "Dën", "Mët", "Don", "Fre", "Sam" ], + dayNamesMin: [ "So","Mé","Dë","Më","Do","Fr","Sa" ], + weekHeader: "W", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.lb ); + +return datepicker.regional.lb; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-lt.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-lt.js new file mode 100644 index 00000000..a57fd9df --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-lt.js @@ -0,0 +1,45 @@ +/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* @author Arturas Paleicikas */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.lt = { + closeText: "Uždaryti", + prevText: "<Atgal", + nextText: "Pirmyn>", + currentText: "Å iandien", + monthNames: [ "Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis", + "Liepa","RugpjÅ«tis","Rugsėjis","Spalis","Lapkritis","Gruodis" ], + monthNamesShort: [ "Sau","Vas","Kov","Bal","Geg","Bir", + "Lie","Rugp","Rugs","Spa","Lap","Gru" ], + dayNames: [ + "sekmadienis", + "pirmadienis", + "antradienis", + "trečiadienis", + "ketvirtadienis", + "penktadienis", + "Å¡eÅ¡tadienis" + ], + dayNamesShort: [ "sek","pir","ant","tre","ket","pen","Å¡eÅ¡" ], + dayNamesMin: [ "Se","Pr","An","Tr","Ke","Pe","Å e" ], + weekHeader: "SAV", + dateFormat: "yy-mm-dd", + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.lt ); + +return datepicker.regional.lt; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-lv.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-lv.js new file mode 100644 index 00000000..04556fbc --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-lv.js @@ -0,0 +1,45 @@ +/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* @author Arturas Paleicikas */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.lv = { + closeText: "Aizvērt", + prevText: "Iepr.", + nextText: "Nāk.", + currentText: "Å odien", + monthNames: [ "Janvāris","Februāris","Marts","AprÄ«lis","Maijs","JÅ«nijs", + "JÅ«lijs","Augusts","Septembris","Oktobris","Novembris","Decembris" ], + monthNamesShort: [ "Jan","Feb","Mar","Apr","Mai","JÅ«n", + "JÅ«l","Aug","Sep","Okt","Nov","Dec" ], + dayNames: [ + "svētdiena", + "pirmdiena", + "otrdiena", + "treÅ¡diena", + "ceturtdiena", + "piektdiena", + "sestdiena" + ], + dayNamesShort: [ "svt","prm","otr","tre","ctr","pkt","sst" ], + dayNamesMin: [ "Sv","Pr","Ot","Tr","Ct","Pk","Ss" ], + weekHeader: "Ned.", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.lv ); + +return datepicker.regional.lv; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-mk.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-mk.js new file mode 100644 index 00000000..97864ab1 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-mk.js @@ -0,0 +1,37 @@ +/* Macedonian i18n for the jQuery UI date picker plugin. */ +/* Written by Stojce Slavkovski. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.mk = { + closeText: "Затвори", + prevText: "<", + nextText: ">", + currentText: "Денес", + monthNames: [ "Јануари","Февруари","Март","Април","Мај","Јуни", + "Јули","Август","Септември","Октомври","Ноември","Декември" ], + monthNamesShort: [ "Јан","Фев","Мар","Апр","Мај","Јун", + "Јул","Авг","Сеп","Окт","Ное","Дек" ], + dayNames: [ "Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота" ], + dayNamesShort: [ "Нед","Пон","Вто","Сре","Чет","Пет","Саб" ], + dayNamesMin: [ "Не","По","Вт","Ср","Че","Пе","Са" ], + weekHeader: "Сед", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.mk ); + +return datepicker.regional.mk; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ml.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ml.js new file mode 100644 index 00000000..440e09e0 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ml.js @@ -0,0 +1,37 @@ +/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Saji Nediyanchath (saji89@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.ml = { + closeText: "ശരി", + prevText: "മുന്നത്തെ", + nextText: "അടുത്തത് ", + currentText: "ഇന്ന്", + monthNames: [ "ജനുവരി","ഫെബ്രുവരി","മാര്‍ച്ച്","ഏപ്രില്‍","മേയ്","ജൂണ്‍", + "ജൂലൈ","ആഗസ്റ്റ്","സെപ്റ്റംബര്‍","ഒക്ടോബര്‍","നവംബര്‍","ഡിസംബര്‍" ], + monthNamesShort: [ "ജനു", "ഫെബ്", "മാര്‍", "ഏപ്രി", "മേയ്", "ജൂണ്‍", + "ജൂലാ", "ആഗ", "സെപ്", "ഒക്ടോ", "നവം", "à´¡à´¿à´¸" ], + dayNames: [ "ഞായര്‍", "തിങ്കള്‍", "ചൊവ്വ", "ബുധന്‍", "വ്യാഴം", "വെള്ളി", "ശനി" ], + dayNamesShort: [ "ഞായ", "തിങ്ക", "ചൊവ്വ", "ബുധ", "വ്യാഴം", "വെള്ളി", "ശനി" ], + dayNamesMin: [ "ഞാ","തി","ചൊ","ബു","വ്യാ","വെ","à´¶" ], + weekHeader: "ആ", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.ml ); + +return datepicker.regional.ml; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ms.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ms.js new file mode 100644 index 00000000..58bc4f57 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ms.js @@ -0,0 +1,37 @@ +/* Malaysian initialisation for the jQuery UI date picker plugin. */ +/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.ms = { + closeText: "Tutup", + prevText: "<Sebelum", + nextText: "Selepas>", + currentText: "hari ini", + monthNames: [ "Januari","Februari","Mac","April","Mei","Jun", + "Julai","Ogos","September","Oktober","November","Disember" ], + monthNamesShort: [ "Jan","Feb","Mac","Apr","Mei","Jun", + "Jul","Ogo","Sep","Okt","Nov","Dis" ], + dayNames: [ "Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu" ], + dayNamesShort: [ "Aha","Isn","Sel","Rab","kha","Jum","Sab" ], + dayNamesMin: [ "Ah","Is","Se","Ra","Kh","Ju","Sa" ], + weekHeader: "Mg", + dateFormat: "dd/mm/yy", + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.ms ); + +return datepicker.regional.ms; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nb.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nb.js new file mode 100644 index 00000000..eb1112bc --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nb.js @@ -0,0 +1,49 @@ +/* Norwegian BokmÃ¥l initialisation for the jQuery UI date picker plugin. */ +/* Written by Bjørn Johansen (post@bjornjohansen.no). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.nb = { + closeText: "Lukk", + prevText: "«Forrige", + nextText: "Neste»", + currentText: "I dag", + monthNames: [ + "januar", + "februar", + "mars", + "april", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + monthNamesShort: [ "jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des" ], + dayNamesShort: [ "søn","man","tir","ons","tor","fre","lør" ], + dayNames: [ "søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag" ], + dayNamesMin: [ "sø","ma","ti","on","to","fr","lø" ], + weekHeader: "Uke", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" +}; +datepicker.setDefaults( datepicker.regional.nb ); + +return datepicker.regional.nb; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nl-BE.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nl-BE.js new file mode 100644 index 00000000..9ea22002 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nl-BE.js @@ -0,0 +1,37 @@ +/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */ +/* David De Sloovere @DavidDeSloovere */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "nl-BE" ] = { + closeText: "Sluiten", + prevText: "←", + nextText: "→", + currentText: "Vandaag", + monthNames: [ "januari", "februari", "maart", "april", "mei", "juni", + "juli", "augustus", "september", "oktober", "november", "december" ], + monthNamesShort: [ "jan", "feb", "mrt", "apr", "mei", "jun", + "jul", "aug", "sep", "okt", "nov", "dec" ], + dayNames: [ "zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag" ], + dayNamesShort: [ "zon", "maa", "din", "woe", "don", "vri", "zat" ], + dayNamesMin: [ "zo", "ma", "di", "wo", "do", "vr", "za" ], + weekHeader: "Wk", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional[ "nl-BE" ] ); + +return datepicker.regional[ "nl-BE" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nl.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nl.js new file mode 100644 index 00000000..7fcbff1a --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nl.js @@ -0,0 +1,37 @@ +/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Mathias Bynens */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.nl = { + closeText: "Sluiten", + prevText: "←", + nextText: "→", + currentText: "Vandaag", + monthNames: [ "januari", "februari", "maart", "april", "mei", "juni", + "juli", "augustus", "september", "oktober", "november", "december" ], + monthNamesShort: [ "jan", "feb", "mrt", "apr", "mei", "jun", + "jul", "aug", "sep", "okt", "nov", "dec" ], + dayNames: [ "zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag" ], + dayNamesShort: [ "zon", "maa", "din", "woe", "don", "vri", "zat" ], + dayNamesMin: [ "zo", "ma", "di", "wo", "do", "vr", "za" ], + weekHeader: "Wk", + dateFormat: "dd-mm-yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.nl ); + +return datepicker.regional.nl; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nn.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nn.js new file mode 100644 index 00000000..bacd481a --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-nn.js @@ -0,0 +1,49 @@ +/* Norwegian Nynorsk initialisation for the jQuery UI date picker plugin. */ +/* Written by Bjørn Johansen (post@bjornjohansen.no). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.nn = { + closeText: "Lukk", + prevText: "«Førre", + nextText: "Neste»", + currentText: "I dag", + monthNames: [ + "januar", + "februar", + "mars", + "april", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + monthNamesShort: [ "jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des" ], + dayNamesShort: [ "sun","mÃ¥n","tys","ons","tor","fre","lau" ], + dayNames: [ "sundag","mÃ¥ndag","tysdag","onsdag","torsdag","fredag","laurdag" ], + dayNamesMin: [ "su","mÃ¥","ty","on","to","fr","la" ], + weekHeader: "Veke", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" +}; +datepicker.setDefaults( datepicker.regional.nn ); + +return datepicker.regional.nn; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-no.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-no.js new file mode 100644 index 00000000..8a755aae --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-no.js @@ -0,0 +1,50 @@ +/* Norwegian initialisation for the jQuery UI date picker plugin. */ +/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ + +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.no = { + closeText: "Lukk", + prevText: "«Forrige", + nextText: "Neste»", + currentText: "I dag", + monthNames: [ + "januar", + "februar", + "mars", + "april", + "mai", + "juni", + "juli", + "august", + "september", + "oktober", + "november", + "desember" + ], + monthNamesShort: [ "jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des" ], + dayNamesShort: [ "søn","man","tir","ons","tor","fre","lør" ], + dayNames: [ "søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag" ], + dayNamesMin: [ "sø","ma","ti","on","to","fr","lø" ], + weekHeader: "Uke", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" +}; +datepicker.setDefaults( datepicker.regional.no ); + +return datepicker.regional.no; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-pl.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-pl.js new file mode 100644 index 00000000..c2fddc13 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-pl.js @@ -0,0 +1,37 @@ +/* Polish initialisation for the jQuery UI date picker plugin. */ +/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.pl = { + closeText: "Zamknij", + prevText: "<Poprzedni", + nextText: "Następny>", + currentText: "Dziś", + monthNames: [ "Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec", + "Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień" ], + monthNamesShort: [ "Sty","Lu","Mar","Kw","Maj","Cze", + "Lip","Sie","Wrz","Pa","Lis","Gru" ], + dayNames: [ "Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota" ], + dayNamesShort: [ "Nie","Pn","Wt","Śr","Czw","Pt","So" ], + dayNamesMin: [ "N","Pn","Wt","Śr","Cz","Pt","So" ], + weekHeader: "Tydz", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.pl ); + +return datepicker.regional.pl; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-pt-BR.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-pt-BR.js new file mode 100644 index 00000000..aeae7ca4 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-pt-BR.js @@ -0,0 +1,45 @@ +/* Brazilian initialisation for the jQuery UI date picker plugin. */ +/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "pt-BR" ] = { + closeText: "Fechar", + prevText: "<Anterior", + nextText: "Próximo>", + currentText: "Hoje", + monthNames: [ "Janeiro","Fevereiro","Março","Abril","Maio","Junho", + "Julho","Agosto","Setembro","Outubro","Novembro","Dezembro" ], + monthNamesShort: [ "Jan","Fev","Mar","Abr","Mai","Jun", + "Jul","Ago","Set","Out","Nov","Dez" ], + dayNames: [ + "Domingo", + "Segunda-feira", + "Terça-feira", + "Quarta-feira", + "Quinta-feira", + "Sexta-feira", + "Sábado" + ], + dayNamesShort: [ "Dom","Seg","Ter","Qua","Qui","Sex","Sáb" ], + dayNamesMin: [ "Dom","Seg","Ter","Qua","Qui","Sex","Sáb" ], + weekHeader: "Sm", + dateFormat: "dd/mm/yy", + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional[ "pt-BR" ] ); + +return datepicker.regional[ "pt-BR" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-pt.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-pt.js new file mode 100644 index 00000000..b1afd7b3 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-pt.js @@ -0,0 +1,44 @@ +/* Portuguese initialisation for the jQuery UI date picker plugin. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.pt = { + closeText: "Fechar", + prevText: "Anterior", + nextText: "Seguinte", + currentText: "Hoje", + monthNames: [ "Janeiro","Fevereiro","Março","Abril","Maio","Junho", + "Julho","Agosto","Setembro","Outubro","Novembro","Dezembro" ], + monthNamesShort: [ "Jan","Fev","Mar","Abr","Mai","Jun", + "Jul","Ago","Set","Out","Nov","Dez" ], + dayNames: [ + "Domingo", + "Segunda-feira", + "Terça-feira", + "Quarta-feira", + "Quinta-feira", + "Sexta-feira", + "Sábado" + ], + dayNamesShort: [ "Dom","Seg","Ter","Qua","Qui","Sex","Sáb" ], + dayNamesMin: [ "Dom","Seg","Ter","Qua","Qui","Sex","Sáb" ], + weekHeader: "Sem", + dateFormat: "dd/mm/yy", + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.pt ); + +return datepicker.regional.pt; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-rm.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-rm.js new file mode 100644 index 00000000..89a5c77a --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-rm.js @@ -0,0 +1,61 @@ +/* Romansh initialisation for the jQuery UI date picker plugin. */ +/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.rm = { + closeText: "Serrar", + prevText: "<Suandant", + nextText: "Precedent>", + currentText: "Actual", + monthNames: [ + "Schaner", + "Favrer", + "Mars", + "Avrigl", + "Matg", + "Zercladur", + "Fanadur", + "Avust", + "Settember", + "October", + "November", + "December" + ], + monthNamesShort: [ + "Scha", + "Fev", + "Mar", + "Avr", + "Matg", + "Zer", + "Fan", + "Avu", + "Sett", + "Oct", + "Nov", + "Dec" + ], + dayNames: [ "Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda" ], + dayNamesShort: [ "Dum","Gli","Mar","Mes","Gie","Ven","Som" ], + dayNamesMin: [ "Du","Gl","Ma","Me","Gi","Ve","So" ], + weekHeader: "emna", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.rm ); + +return datepicker.regional.rm; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ro.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ro.js new file mode 100644 index 00000000..b26665c2 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ro.js @@ -0,0 +1,40 @@ +/* Romanian initialisation for the jQuery UI date picker plugin. + * + * Written by Edmond L. (ll_edmond@walla.com) + * and Ionut G. Stan (ionut.g.stan@gmail.com) + */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.ro = { + closeText: "Închide", + prevText: "« Luna precedentă", + nextText: "Luna următoare »", + currentText: "Azi", + monthNames: [ "Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie", + "Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie" ], + monthNamesShort: [ "Ian", "Feb", "Mar", "Apr", "Mai", "Iun", + "Iul", "Aug", "Sep", "Oct", "Nov", "Dec" ], + dayNames: [ "Duminică", "Luni", "MarÅ£i", "Miercuri", "Joi", "Vineri", "Sâmbătă" ], + dayNamesShort: [ "Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm" ], + dayNamesMin: [ "Du","Lu","Ma","Mi","Jo","Vi","Sâ" ], + weekHeader: "Săpt", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.ro ); + +return datepicker.regional.ro; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ru.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ru.js new file mode 100644 index 00000000..223e7764 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ru.js @@ -0,0 +1,37 @@ +/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Andrew Stromnov (stromnov@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.ru = { + closeText: "Закрыть", + prevText: "<Пред", + nextText: "След>", + currentText: "Сегодня", + monthNames: [ "Январь","Февраль","Март","Апрель","Май","Июнь", + "Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь" ], + monthNamesShort: [ "Янв","Фев","Мар","Апр","Май","Июн", + "Июл","Авг","Сен","Окт","Ноя","Дек" ], + dayNames: [ "воскресенье","понедельник","вторник","среда","четверг","пятница","суббота" ], + dayNamesShort: [ "вск","пнд","втр","срд","чтв","птн","сбт" ], + dayNamesMin: [ "Вс","Пн","Вт","Ср","Чт","Пт","Сб" ], + weekHeader: "Нед", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.ru ); + +return datepicker.regional.ru; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sk.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sk.js new file mode 100644 index 00000000..16d8bdfe --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sk.js @@ -0,0 +1,37 @@ +/* Slovak initialisation for the jQuery UI date picker plugin. */ +/* Written by Vojtech Rinik (vojto@hmm.sk). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.sk = { + closeText: "ZavrieÅ¥", + prevText: "<Predchádzajúci", + nextText: "Nasledujúci>", + currentText: "Dnes", + monthNames: [ "január","február","marec","apríl","máj","jún", + "júl","august","september","október","november","december" ], + monthNamesShort: [ "Jan","Feb","Mar","Apr","Máj","Jún", + "Júl","Aug","Sep","Okt","Nov","Dec" ], + dayNames: [ "nedeľa","pondelok","utorok","streda","Å¡tvrtok","piatok","sobota" ], + dayNamesShort: [ "Ned","Pon","Uto","Str","Å tv","Pia","Sob" ], + dayNamesMin: [ "Ne","Po","Ut","St","Å t","Pia","So" ], + weekHeader: "Ty", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.sk ); + +return datepicker.regional.sk; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sl.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sl.js new file mode 100644 index 00000000..68916249 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sl.js @@ -0,0 +1,38 @@ +/* Slovenian initialisation for the jQuery UI date picker plugin. */ +/* Written by Jaka Jancar (jaka@kubje.org). */ +/* c = č, s = Å¡ z = ž C = Č S = Å  Z = Ž */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.sl = { + closeText: "Zapri", + prevText: "<PrejÅ¡nji", + nextText: "Naslednji>", + currentText: "Trenutni", + monthNames: [ "Januar","Februar","Marec","April","Maj","Junij", + "Julij","Avgust","September","Oktober","November","December" ], + monthNamesShort: [ "Jan","Feb","Mar","Apr","Maj","Jun", + "Jul","Avg","Sep","Okt","Nov","Dec" ], + dayNames: [ "Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota" ], + dayNamesShort: [ "Ned","Pon","Tor","Sre","Čet","Pet","Sob" ], + dayNamesMin: [ "Ne","Po","To","Sr","Če","Pe","So" ], + weekHeader: "Teden", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.sl ); + +return datepicker.regional.sl; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sq.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sq.js new file mode 100644 index 00000000..34fe66a5 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sq.js @@ -0,0 +1,37 @@ +/* Albanian initialisation for the jQuery UI date picker plugin. */ +/* Written by Flakron Bytyqi (flakron@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.sq = { + closeText: "mbylle", + prevText: "<mbrapa", + nextText: "Përpara>", + currentText: "sot", + monthNames: [ "Janar","Shkurt","Mars","Prill","Maj","Qershor", + "Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor" ], + monthNamesShort: [ "Jan","Shk","Mar","Pri","Maj","Qer", + "Kor","Gus","Sht","Tet","Nën","Dhj" ], + dayNames: [ "E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune" ], + dayNamesShort: [ "Di","Hë","Ma","Më","En","Pr","Sh" ], + dayNamesMin: [ "Di","Hë","Ma","Më","En","Pr","Sh" ], + weekHeader: "Ja", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.sq ); + +return datepicker.regional.sq; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sr-SR.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sr-SR.js new file mode 100644 index 00000000..e9db26a4 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sr-SR.js @@ -0,0 +1,37 @@ +/* Serbian i18n for the jQuery UI date picker plugin. */ +/* Written by Dejan Dimić. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "sr-SR" ] = { + closeText: "Zatvori", + prevText: "<", + nextText: ">", + currentText: "Danas", + monthNames: [ "Januar","Februar","Mart","April","Maj","Jun", + "Jul","Avgust","Septembar","Oktobar","Novembar","Decembar" ], + monthNamesShort: [ "Jan","Feb","Mar","Apr","Maj","Jun", + "Jul","Avg","Sep","Okt","Nov","Dec" ], + dayNames: [ "Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota" ], + dayNamesShort: [ "Ned","Pon","Uto","Sre","Čet","Pet","Sub" ], + dayNamesMin: [ "Ne","Po","Ut","Sr","Če","Pe","Su" ], + weekHeader: "Sed", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional[ "sr-SR" ] ); + +return datepicker.regional[ "sr-SR" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sr.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sr.js new file mode 100644 index 00000000..fa8827aa --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sr.js @@ -0,0 +1,37 @@ +/* Serbian i18n for the jQuery UI date picker plugin. */ +/* Written by Dejan Dimić. */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.sr = { + closeText: "Затвори", + prevText: "<", + nextText: ">", + currentText: "Данас", + monthNames: [ "Јануар","Фебруар","Март","Април","Мај","Јун", + "Јул","Август","Септембар","Октобар","Новембар","Децембар" ], + monthNamesShort: [ "Јан","Феб","Мар","Апр","Мај","Јун", + "Јул","Авг","Сеп","Окт","Нов","Дец" ], + dayNames: [ "Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота" ], + dayNamesShort: [ "Нед","Пон","Уто","Сре","Чет","Пет","Суб" ], + dayNamesMin: [ "Не","По","Ут","Ср","Че","Пе","Су" ], + weekHeader: "Сед", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.sr ); + +return datepicker.regional.sr; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sv.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sv.js new file mode 100644 index 00000000..92686efa --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-sv.js @@ -0,0 +1,37 @@ +/* Swedish initialisation for the jQuery UI date picker plugin. */ +/* Written by Anders Ekdahl ( anders@nomadiz.se). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.sv = { + closeText: "Stäng", + prevText: "«Förra", + nextText: "Nästa»", + currentText: "Idag", + monthNames: [ "Januari","Februari","Mars","April","Maj","Juni", + "Juli","Augusti","September","Oktober","November","December" ], + monthNamesShort: [ "Jan","Feb","Mar","Apr","Maj","Jun", + "Jul","Aug","Sep","Okt","Nov","Dec" ], + dayNamesShort: [ "Sön","MÃ¥n","Tis","Ons","Tor","Fre","Lör" ], + dayNames: [ "Söndag","MÃ¥ndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag" ], + dayNamesMin: [ "Sö","MÃ¥","Ti","On","To","Fr","Lö" ], + weekHeader: "Ve", + dateFormat: "yy-mm-dd", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.sv ); + +return datepicker.regional.sv; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ta.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ta.js new file mode 100644 index 00000000..722614dd --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-ta.js @@ -0,0 +1,53 @@ +/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by S A Sureshkumar (saskumar@live.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.ta = { + closeText: "மூடு", + prevText: "முன்னையது", + nextText: "அடுத்தது", + currentText: "இன்று", + monthNames: [ "தை","மாசி","பங்குனி","சித்திரை","வைகாசி","ஆனி", + "ஆடி","ஆவணி","புரட்டாசி","ஐப்பசி","கார்த்திகை","மார்கழி" ], + monthNamesShort: [ "தை","மாசி","பங்","சித்","வைகா","ஆனி", + "ஆடி","ஆவ","புர","ஐப்","கார்","மார்" ], + dayNames: [ + "ஞாயிற்றுக்கிழமை", + "திங்கட்கிழமை", + "செவ்வாய்க்கிழமை", + "புதன்கிழமை", + "வியாழக்கிழமை", + "வெள்ளிக்கிழமை", + "சனிக்கிழமை" + ], + dayNamesShort: [ + "ஞாயிறு", + "திங்கள்", + "செவ்வாய்", + "புதன்", + "வியாழன்", + "வெள்ளி", + "சனி" + ], + dayNamesMin: [ "ஞா","தி","செ","பு","வி","வெ","ச" ], + weekHeader: "Не", + dateFormat: "dd/mm/yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.ta ); + +return datepicker.regional.ta; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-th.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-th.js new file mode 100644 index 00000000..6de48cf9 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-th.js @@ -0,0 +1,37 @@ +/* Thai initialisation for the jQuery UI date picker plugin. */ +/* Written by pipo (pipo@sixhead.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.th = { + closeText: "ปิด", + prevText: "« à¸¢à¹‰à¸­à¸™", + nextText: "ถัดไป »", + currentText: "วันนี้", + monthNames: [ "มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน", + "กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม" ], + monthNamesShort: [ "ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.", + "ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค." ], + dayNames: [ "อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์" ], + dayNamesShort: [ "อา.","จ.","อ.","พ.","พฤ.","ศ.","ส." ], + dayNamesMin: [ "อา.","จ.","อ.","พ.","พฤ.","ศ.","ส." ], + weekHeader: "Wk", + dateFormat: "dd/mm/yy", + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.th ); + +return datepicker.regional.th; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-tj.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-tj.js new file mode 100644 index 00000000..8ede4ddc --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-tj.js @@ -0,0 +1,37 @@ +/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Abdurahmon Saidov (saidovab@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.tj = { + closeText: "Идома", + prevText: "<Қафо", + nextText: "Пеш>", + currentText: "Имрӯз", + monthNames: [ "Январ","Феврал","Март","Апрел","Май","Июн", + "Июл","Август","Сентябр","Октябр","Ноябр","Декабр" ], + monthNamesShort: [ "Янв","Фев","Мар","Апр","Май","Июн", + "Июл","Авг","Сен","Окт","Ноя","Дек" ], + dayNames: [ "якшанбе","душанбе","сешанбе","чоршанбе","панҷшанбе","ҷумъа","шанбе" ], + dayNamesShort: [ "якш","душ","сеш","чор","пан","ҷум","шан" ], + dayNamesMin: [ "Як","Дш","Сш","Чш","Пш","Ҷм","Шн" ], + weekHeader: "Хф", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.tj ); + +return datepicker.regional.tj; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-tr.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-tr.js new file mode 100644 index 00000000..8328e219 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-tr.js @@ -0,0 +1,37 @@ +/* Turkish initialisation for the jQuery UI date picker plugin. */ +/* Written by Izzet Emre Erkan (kara@karalamalar.net). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.tr = { + closeText: "kapat", + prevText: "<geri", + nextText: "ileri>", + currentText: "bugün", + monthNames: [ "Ocak","Şubat","Mart","Nisan","Mayıs","Haziran", + "Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık" ], + monthNamesShort: [ "Oca","Şub","Mar","Nis","May","Haz", + "Tem","Ağu","Eyl","Eki","Kas","Ara" ], + dayNames: [ "Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi" ], + dayNamesShort: [ "Pz","Pt","Sa","Ça","Pe","Cu","Ct" ], + dayNamesMin: [ "Pz","Pt","Sa","Ça","Pe","Cu","Ct" ], + weekHeader: "Hf", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.tr ); + +return datepicker.regional.tr; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-uk.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-uk.js new file mode 100644 index 00000000..c82501ad --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-uk.js @@ -0,0 +1,38 @@ +/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ +/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ +/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.uk = { + closeText: "Закрити", + prevText: "<", + nextText: ">", + currentText: "Сьогодні", + monthNames: [ "Січень","Лютий","Березень","Квітень","Травень","Червень", + "Липень","Серпень","Вересень","Жовтень","Листопад","Грудень" ], + monthNamesShort: [ "Січ","Лют","Бер","Кві","Тра","Чер", + "Лип","Сер","Вер","Жов","Лис","Гру" ], + dayNames: [ "неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота" ], + dayNamesShort: [ "нед","пнд","вів","срд","чтв","птн","сбт" ], + dayNamesMin: [ "Нд","Пн","Вт","Ср","Чт","Пт","Сб" ], + weekHeader: "Тиж", + dateFormat: "dd.mm.yy", + firstDay: 1, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.uk ); + +return datepicker.regional.uk; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-vi.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-vi.js new file mode 100644 index 00000000..2c208ab7 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-vi.js @@ -0,0 +1,37 @@ +/* Vietnamese initialisation for the jQuery UI date picker plugin. */ +/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional.vi = { + closeText: "Đóng", + prevText: "<Trước", + nextText: "Tiếp>", + currentText: "Hôm nay", + monthNames: [ "Tháng Một", "Tháng Hai", "Tháng Ba", "Tháng TÆ°", "Tháng Năm", "Tháng Sáu", + "Tháng Bảy", "Tháng Tám", "Tháng Chín", "Tháng Mười", "Tháng Mười Một", "Tháng Mười Hai" ], + monthNamesShort: [ "Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", + "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12" ], + dayNames: [ "Chủ Nhật", "Thứ Hai", "Thứ Ba", "Thứ TÆ°", "Thứ Năm", "Thứ Sáu", "Thứ Bảy" ], + dayNamesShort: [ "CN", "T2", "T3", "T4", "T5", "T6", "T7" ], + dayNamesMin: [ "CN", "T2", "T3", "T4", "T5", "T6", "T7" ], + weekHeader: "Tu", + dateFormat: "dd/mm/yy", + firstDay: 0, + isRTL: false, + showMonthAfterYear: false, + yearSuffix: "" }; +datepicker.setDefaults( datepicker.regional.vi ); + +return datepicker.regional.vi; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-zh-CN.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-zh-CN.js new file mode 100644 index 00000000..91f99b4e --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-zh-CN.js @@ -0,0 +1,37 @@ +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by Cloudream (cloudream@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "zh-CN" ] = { + closeText: "关闭", + prevText: "<上月", + nextText: "下月>", + currentText: "今天", + monthNames: [ "一月","二月","三月","四月","五月","六月", + "七月","八月","九月","十月","十一月","十二月" ], + monthNamesShort: [ "一月","二月","三月","四月","五月","六月", + "七月","八月","九月","十月","十一月","十二月" ], + dayNames: [ "星期日","星期一","星期二","星期三","星期四","星期五","星期六" ], + dayNamesShort: [ "周日","周一","周二","周三","周四","周五","周六" ], + dayNamesMin: [ "日","一","二","三","四","五","六" ], + weekHeader: "周", + dateFormat: "yy-mm-dd", + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: "å¹´" }; +datepicker.setDefaults( datepicker.regional[ "zh-CN" ] ); + +return datepicker.regional[ "zh-CN" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-zh-HK.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-zh-HK.js new file mode 100644 index 00000000..27f02bc6 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-zh-HK.js @@ -0,0 +1,37 @@ +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by SCCY (samuelcychan@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "zh-HK" ] = { + closeText: "關閉", + prevText: "<上月", + nextText: "下月>", + currentText: "今天", + monthNames: [ "一月","二月","三月","四月","五月","六月", + "七月","八月","九月","十月","十一月","十二月" ], + monthNamesShort: [ "一月","二月","三月","四月","五月","六月", + "七月","八月","九月","十月","十一月","十二月" ], + dayNames: [ "星期日","星期一","星期二","星期三","星期四","星期五","星期六" ], + dayNamesShort: [ "周日","周一","周二","周三","周四","周五","周六" ], + dayNamesMin: [ "日","一","二","三","四","五","六" ], + weekHeader: "周", + dateFormat: "dd-mm-yy", + firstDay: 0, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: "å¹´" }; +datepicker.setDefaults( datepicker.regional[ "zh-HK" ] ); + +return datepicker.regional[ "zh-HK" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-zh-TW.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-zh-TW.js new file mode 100644 index 00000000..c20754bd --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/datepicker-zh-TW.js @@ -0,0 +1,37 @@ +/* Chinese initialisation for the jQuery UI date picker plugin. */ +/* Written by Ressol (ressol@gmail.com). */ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "../widgets/datepicker" ], factory ); + } else { + + // Browser globals + factory( jQuery.datepicker ); + } +}( function( datepicker ) { + +datepicker.regional[ "zh-TW" ] = { + closeText: "關閉", + prevText: "<上月", + nextText: "下月>", + currentText: "今天", + monthNames: [ "一月","二月","三月","四月","五月","六月", + "七月","八月","九月","十月","十一月","十二月" ], + monthNamesShort: [ "一月","二月","三月","四月","五月","六月", + "七月","八月","九月","十月","十一月","十二月" ], + dayNames: [ "星期日","星期一","星期二","星期三","星期四","星期五","星期六" ], + dayNamesShort: [ "周日","周一","周二","周三","周四","周五","周六" ], + dayNamesMin: [ "日","一","二","三","四","五","六" ], + weekHeader: "周", + dateFormat: "yy/mm/dd", + firstDay: 1, + isRTL: false, + showMonthAfterYear: true, + yearSuffix: "å¹´" }; +datepicker.setDefaults( datepicker.regional[ "zh-TW" ] ); + +return datepicker.regional[ "zh-TW" ]; + +} ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery-ui-i18n.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery-ui-i18n.js deleted file mode 100644 index 17292f9f..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery-ui-i18n.js +++ /dev/null @@ -1,1646 +0,0 @@ -/*! jQuery UI - v1.8.21 - 2012-06-05 -* https://github.com/jquery/jquery-ui -* Includes: jquery.ui.datepicker-af.js, jquery.ui.datepicker-ar-DZ.js, jquery.ui.datepicker-ar.js, jquery.ui.datepicker-az.js, jquery.ui.datepicker-bg.js, jquery.ui.datepicker-bs.js, jquery.ui.datepicker-ca.js, jquery.ui.datepicker-cs.js, jquery.ui.datepicker-cy-GB.js, jquery.ui.datepicker-da.js, jquery.ui.datepicker-de.js, jquery.ui.datepicker-el.js, jquery.ui.datepicker-en-AU.js, jquery.ui.datepicker-en-GB.js, jquery.ui.datepicker-en-NZ.js, jquery.ui.datepicker-eo.js, jquery.ui.datepicker-es.js, jquery.ui.datepicker-et.js, jquery.ui.datepicker-eu.js, jquery.ui.datepicker-fa.js, jquery.ui.datepicker-fi.js, jquery.ui.datepicker-fo.js, jquery.ui.datepicker-fr-CH.js, jquery.ui.datepicker-fr.js, jquery.ui.datepicker-gl.js, jquery.ui.datepicker-he.js, jquery.ui.datepicker-hi.js, jquery.ui.datepicker-hr.js, jquery.ui.datepicker-hu.js, jquery.ui.datepicker-hy.js, jquery.ui.datepicker-id.js, jquery.ui.datepicker-is.js, jquery.ui.datepicker-it.js, jquery.ui.datepicker-ja.js, jquery.ui.datepicker-ka.js, jquery.ui.datepicker-kk.js, jquery.ui.datepicker-km.js, jquery.ui.datepicker-ko.js, jquery.ui.datepicker-lb.js, jquery.ui.datepicker-lt.js, jquery.ui.datepicker-lv.js, jquery.ui.datepicker-mk.js, jquery.ui.datepicker-ml.js, jquery.ui.datepicker-ms.js, jquery.ui.datepicker-nl-BE.js, jquery.ui.datepicker-nl.js, jquery.ui.datepicker-no.js, jquery.ui.datepicker-pl.js, jquery.ui.datepicker-pt-BR.js, jquery.ui.datepicker-pt.js, jquery.ui.datepicker-rm.js, jquery.ui.datepicker-ro.js, jquery.ui.datepicker-ru.js, jquery.ui.datepicker-sk.js, jquery.ui.datepicker-sl.js, jquery.ui.datepicker-sq.js, jquery.ui.datepicker-sr-SR.js, jquery.ui.datepicker-sr.js, jquery.ui.datepicker-sv.js, jquery.ui.datepicker-ta.js, jquery.ui.datepicker-th.js, jquery.ui.datepicker-tj.js, jquery.ui.datepicker-tr.js, jquery.ui.datepicker-uk.js, jquery.ui.datepicker-vi.js, jquery.ui.datepicker-zh-CN.js, jquery.ui.datepicker-zh-HK.js, jquery.ui.datepicker-zh-TW.js -* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ - -/* Afrikaans initialisation for the jQuery UI date picker plugin. */ -/* Written by Renier Pretorius. */ -jQuery(function($){ - $.datepicker.regional['af'] = { - closeText: 'Selekteer', - prevText: 'Vorige', - nextText: 'Volgende', - currentText: 'Vandag', - monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie', - 'Julie','Augustus','September','Oktober','November','Desember'], - monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', - 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'], - dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'], - dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'], - dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['af']); -}); - -/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/ -/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */ - -jQuery(function($){ - $.datepicker.regional['ar-DZ'] = { - closeText: 'إغلاق', - prevText: '<السابق', - nextText: 'التالي>', - currentText: 'اليوم', - monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', - 'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'], - monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], - dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - weekHeader: 'أسبوع', - dateFormat: 'dd/mm/yy', - firstDay: 6, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ar-DZ']); -}); - -/* Arabic Translation for jQuery UI date picker plugin. */ -/* Khaled Alhourani -- me@khaledalhourani.com */ -/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */ -jQuery(function($){ - $.datepicker.regional['ar'] = { - closeText: 'إغلاق', - prevText: '<السابق', - nextText: 'التالي>', - currentText: 'اليوم', - monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران', - 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], - monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], - dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - dayNamesMin: ['Ø­', 'ن', 'Ø«', 'ر', 'Ø®', 'ج', 'س'], - weekHeader: 'أسبوع', - dateFormat: 'dd/mm/yy', - firstDay: 6, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ar']); -}); -/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Jamil Najafov (necefov33@gmail.com). */ -jQuery(function($) { - $.datepicker.regional['az'] = { - closeText: 'Bağla', - prevText: '<Geri', - nextText: 'Ä°rəli>', - currentText: 'Bugün', - monthNames: ['Yanvar','Fevral','Mart','Aprel','May','Ä°yun', - 'Ä°yul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'], - monthNamesShort: ['Yan','Fev','Mar','Apr','May','Ä°yun', - 'Ä°yul','Avq','Sen','Okt','Noy','Dek'], - dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'], - dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'], - dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'], - weekHeader: 'Hf', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['az']); -}); -/* Bulgarian initialisation for the jQuery UI date picker plugin. */ -/* Written by Stoyan Kyosev (http://svest.org). */ -jQuery(function($){ - $.datepicker.regional['bg'] = { - closeText: 'затвори', - prevText: '<назад', - nextText: 'напред>', - nextBigText: '>>', - currentText: 'днес', - monthNames: ['Януари','Февруари','Март','Април','Май','Юни', - 'Юли','Август','Септември','Октомври','Ноември','Декември'], - monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни', - 'Юли','Авг','Сеп','Окт','Нов','Дек'], - dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'], - dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'], - dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'], - weekHeader: 'Wk', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['bg']); -}); - -/* Bosnian i18n for the jQuery UI date picker plugin. */ -/* Written by Kenan Konjo. */ -jQuery(function($){ - $.datepicker.regional['bs'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', - monthNames: ['Januar','Februar','Mart','April','Maj','Juni', - 'Juli','August','Septembar','Oktobar','Novembar','Decembar'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], - dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], - dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], - weekHeader: 'Wk', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['bs']); -}); -/* Inicialització en català per a l'extenció 'calendar' per jQuery. */ -/* Writers: (joan.leon@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ca'] = { - closeText: 'Tancar', - prevText: '<Ant', - nextText: 'Seg>', - currentText: 'Avui', - monthNames: ['Gener','Febrer','Març','Abril','Maig','Juny', - 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'], - monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun', - 'Jul','Ago','Set','Oct','Nov','Des'], - dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'], - dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'], - dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ca']); -}); -/* Czech initialisation for the jQuery UI date picker plugin. */ -/* Written by Tomas Muller (tomas@tomas-muller.net). */ -jQuery(function($){ - $.datepicker.regional['cs'] = { - closeText: 'Zavřít', - prevText: '<Dříve', - nextText: 'Později>', - currentText: 'Nyní', - monthNames: ['leden','únor','březen','duben','květen','červen', - 'červenec','srpen','září','říjen','listopad','prosinec'], - monthNamesShort: ['led','úno','bře','dub','kvě','čer', - 'čvc','srp','zář','říj','lis','pro'], - dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'], - dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'], - dayNamesMin: ['ne','po','út','st','čt','pá','so'], - weekHeader: 'Týd', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['cs']); -}); - -/* Welsh/UK initialisation for the jQuery UI date picker plugin. */ -/* Written by William Griffiths. */ -jQuery(function($){ - $.datepicker.regional['cy-GB'] = { - closeText: 'Done', - prevText: 'Prev', - nextText: 'Next', - currentText: 'Today', - monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin', - 'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'], - monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh', - 'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'], - dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'], - dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'], - dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'], - weekHeader: 'Wy', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['cy-GB']); -}); -/* Danish initialisation for the jQuery UI date picker plugin. */ -/* Written by Jan Christensen ( deletestuff@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['da'] = { - closeText: 'Luk', - prevText: '<Forrige', - nextText: 'Næste>', - currentText: 'Idag', - monthNames: ['Januar','Februar','Marts','April','Maj','Juni', - 'Juli','August','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], - dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], - dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], - weekHeader: 'Uge', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['da']); -}); - -/* German initialisation for the jQuery UI date picker plugin. */ -/* Written by Milian Wolff (mail@milianw.de). */ -jQuery(function($){ - $.datepicker.regional['de'] = { - closeText: 'schließen', - prevText: '<zurück', - nextText: 'Vor>', - currentText: 'heute', - monthNames: ['Januar','Februar','März','April','Mai','Juni', - 'Juli','August','September','Oktober','November','Dezember'], - monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dez'], - dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], - dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], - dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], - weekHeader: 'KW', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['de']); -}); - -/* Greek (el) initialisation for the jQuery UI date picker plugin. */ -/* Written by Alex Cicovic (http://www.alexcicovic.com) */ -jQuery(function($){ - $.datepicker.regional['el'] = { - closeText: 'Κλείσιμο', - prevText: 'Προηγούμενος', - nextText: 'Επόμενος', - currentText: 'Τρέχων Μήνας', - monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος', - 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'], - monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν', - 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'], - dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'], - dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'], - dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'], - weekHeader: 'Εβδ', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['el']); -}); -/* English/Australia initialisation for the jQuery UI date picker plugin. */ -/* Based on the en-GB initialisation. */ -jQuery(function($){ - $.datepicker.regional['en-AU'] = { - closeText: 'Done', - prevText: 'Prev', - nextText: 'Next', - currentText: 'Today', - monthNames: ['January','February','March','April','May','June', - 'July','August','September','October','November','December'], - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['en-AU']); -}); - -/* English/UK initialisation for the jQuery UI date picker plugin. */ -/* Written by Stuart. */ -jQuery(function($){ - $.datepicker.regional['en-GB'] = { - closeText: 'Done', - prevText: 'Prev', - nextText: 'Next', - currentText: 'Today', - monthNames: ['January','February','March','April','May','June', - 'July','August','September','October','November','December'], - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['en-GB']); -}); - -/* English/New Zealand initialisation for the jQuery UI date picker plugin. */ -/* Based on the en-GB initialisation. */ -jQuery(function($){ - $.datepicker.regional['en-NZ'] = { - closeText: 'Done', - prevText: 'Prev', - nextText: 'Next', - currentText: 'Today', - monthNames: ['January','February','March','April','May','June', - 'July','August','September','October','November','December'], - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['en-NZ']); -}); - -/* Esperanto initialisation for the jQuery UI date picker plugin. */ -/* Written by Olivier M. (olivierweb@ifrance.com). */ -jQuery(function($){ - $.datepicker.regional['eo'] = { - closeText: 'Fermi', - prevText: '<Anta', - nextText: 'Sekv>', - currentText: 'Nuna', - monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio', - 'Julio','AÅ­gusto','Septembro','Oktobro','Novembro','Decembro'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','AÅ­g','Sep','Okt','Nov','Dec'], - dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ä´aÅ­do','Vendredo','Sabato'], - dayNamesShort: ['Dim','Lun','Mar','Mer','Ä´aÅ­','Ven','Sab'], - dayNamesMin: ['Di','Lu','Ma','Me','Ä´a','Ve','Sa'], - weekHeader: 'Sb', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['eo']); -}); - -/* Inicialización en español para la extensión 'UI date picker' para jQuery. */ -/* Traducido por Vester (xvester@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['es'] = { - closeText: 'Cerrar', - prevText: '<Ant', - nextText: 'Sig>', - currentText: 'Hoy', - monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', - 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], - monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', - 'Jul','Ago','Sep','Oct','Nov','Dic'], - dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], - dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], - dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['es']); -}); -/* Estonian initialisation for the jQuery UI date picker plugin. */ -/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */ -jQuery(function($){ - $.datepicker.regional['et'] = { - closeText: 'Sulge', - prevText: 'Eelnev', - nextText: 'Järgnev', - currentText: 'Täna', - monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni', - 'Juuli','August','September','Oktoober','November','Detsember'], - monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni', - 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'], - dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'], - dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'], - dayNamesMin: ['P','E','T','K','N','R','L'], - weekHeader: 'näd', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['et']); -}); -/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */ -/* Karrikas-ek itzulia (karrikas@karrikas.com) */ -jQuery(function($){ - $.datepicker.regional['eu'] = { - closeText: 'Egina', - prevText: '<Aur', - nextText: 'Hur>', - currentText: 'Gaur', - monthNames: ['urtarrila','otsaila','martxoa','apirila','maiatza','ekaina', - 'uztaila','abuztua','iraila','urria','azaroa','abendua'], - monthNamesShort: ['urt.','ots.','mar.','api.','mai.','eka.', - 'uzt.','abu.','ira.','urr.','aza.','abe.'], - dayNames: ['igandea','astelehena','asteartea','asteazkena','osteguna','ostirala','larunbata'], - dayNamesShort: ['ig.','al.','ar.','az.','og.','ol.','lr.'], - dayNamesMin: ['ig','al','ar','az','og','ol','lr'], - weekHeader: 'As', - dateFormat: 'yy-mm-dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['eu']); -}); -/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */ -/* Javad Mowlanezhad -- jmowla@gmail.com */ -/* Jalali calendar should supported soon! (Its implemented but I have to test it) */ -jQuery(function($) { - $.datepicker.regional['fa'] = { - closeText: 'بستن', - prevText: '<قبلی', - nextText: 'بعدی>', - currentText: 'امروز', - monthNames: [ - 'فروردين', - 'ارديبهشت', - 'خرداد', - 'تير', - 'مرداد', - 'شهريور', - 'مهر', - 'آبان', - 'آذر', - 'دی', - 'بهمن', - 'اسفند' - ], - monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], - dayNames: [ - 'يکشنبه', - 'دوشنبه', - 'سه‌شنبه', - 'چهارشنبه', - 'پنجشنبه', - 'جمعه', - 'شنبه' - ], - dayNamesShort: [ - 'ی', - 'د', - 'س', - 'چ', - 'Ù¾', - 'ج', - 'Ø´' - ], - dayNamesMin: [ - 'ی', - 'د', - 'س', - 'چ', - 'Ù¾', - 'ج', - 'Ø´' - ], - weekHeader: 'هف', - dateFormat: 'yy/mm/dd', - firstDay: 6, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fa']); -}); -/* Finnish initialisation for the jQuery UI date picker plugin. */ -/* Written by Harri Kilpiö (harrikilpio@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['fi'] = { - closeText: 'Sulje', - prevText: '«Edellinen', - nextText: 'Seuraava»', - currentText: 'Tänään', - monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu', - 'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'], - monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä', - 'Heinä','Elo','Syys','Loka','Marras','Joulu'], - dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','La'], - dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'], - dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'], - weekHeader: 'Vk', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fi']); -}); - -/* Faroese initialisation for the jQuery UI date picker plugin */ -/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */ -jQuery(function($){ - $.datepicker.regional['fo'] = { - closeText: 'Lat aftur', - prevText: '<Fyrra', - nextText: 'Næsta>', - currentText: 'Í dag', - monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni', - 'Juli','August','September','Oktober','November','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', - 'Jul','Aug','Sep','Okt','Nov','Des'], - dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'], - dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'], - dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'], - weekHeader: 'Vk', - dateFormat: 'dd-mm-yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fo']); -}); - -/* Swiss-French initialisation for the jQuery UI date picker plugin. */ -/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */ -jQuery(function($){ - $.datepicker.regional['fr-CH'] = { - closeText: 'Fermer', - prevText: '<Préc', - nextText: 'Suiv>', - currentText: 'Courant', - monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', - 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], - monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', - 'Jul','Aoû','Sep','Oct','Nov','Déc'], - dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], - dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], - dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], - weekHeader: 'Sm', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fr-CH']); -}); -/* French initialisation for the jQuery UI date picker plugin. */ -/* Written by Keith Wood (kbwood{at}iinet.com.au), - Stéphane Nahmani (sholby@sholby.net), - Stéphane Raimbault */ -jQuery(function($){ - $.datepicker.regional['fr'] = { - closeText: 'Fermer', - prevText: 'Précédent', - nextText: 'Suivant', - currentText: 'Aujourd\'hui', - monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', - 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], - monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin', - 'Juil.','Août','Sept.','Oct.','Nov.','Déc.'], - dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], - dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'], - dayNamesMin: ['D','L','M','M','J','V','S'], - weekHeader: 'Sem.', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fr']); -}); - -/* Galician localization for 'UI date picker' jQuery extension. */ -/* Translated by Jorge Barreiro . */ -jQuery(function($){ - $.datepicker.regional['gl'] = { - closeText: 'Pechar', - prevText: '<Ant', - nextText: 'Seg>', - currentText: 'Hoxe', - monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño', - 'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'], - monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ', - 'Xul','Ago','Set','Out','Nov','Dec'], - dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'], - dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'], - dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['gl']); -}); -/* Hebrew initialisation for the UI Datepicker extension. */ -/* Written by Amir Hardon (ahardon at gmail dot com). */ -jQuery(function($){ - $.datepicker.regional['he'] = { - closeText: 'סגור', - prevText: '<הקודם', - nextText: 'הבא>', - currentText: 'היום', - monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני', - 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'], - monthNamesShort: ['ינו','פבר','מרץ','אפר','מאי','יוני', - 'יולי','אוג','ספט','אוק','נוב','דצמ'], - dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'], - dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], - dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['he']); -}); - -/* Hindi initialisation for the jQuery UI date picker plugin. */ -/* Written by Michael Dawart. */ -jQuery(function($){ - $.datepicker.regional['hi'] = { - closeText: 'बंद', - prevText: 'पिछला', - nextText: 'अगला', - currentText: 'आज', - monthNames: ['जनवरी ','फरवरी','मार्च','अप्रेल','मई','जून', - 'जूलाई','अगस्त ','सितम्बर','अक्टूबर','नवम्बर','दिसम्बर'], - monthNamesShort: ['जन', 'फर', 'मार्च', 'अप्रेल', 'मई', 'जून', - 'जूलाई', 'अग', 'सित', 'अक्ट', 'नव', 'दि'], - dayNames: ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार'], - dayNamesShort: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'], - dayNamesMin: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'], - weekHeader: 'हफ्ता', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hi']); -}); - -/* Croatian i18n for the jQuery UI date picker plugin. */ -/* Written by Vjekoslav Nesek. */ -jQuery(function($){ - $.datepicker.regional['hr'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', - monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj', - 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'], - monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip', - 'Srp','Kol','Ruj','Lis','Stu','Pro'], - dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], - dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], - dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], - weekHeader: 'Tje', - dateFormat: 'dd.mm.yy.', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hr']); -}); -/* Hungarian initialisation for the jQuery UI date picker plugin. */ -/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */ -jQuery(function($){ - $.datepicker.regional['hu'] = { - closeText: 'bezár', - prevText: 'vissza', - nextText: 'előre', - currentText: 'ma', - monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', - 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], - monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún', - 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'], - dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], - dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], - dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], - weekHeader: 'Hét', - dateFormat: 'yy.mm.dd.', - firstDay: 1, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hu']); -}); - -/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ -jQuery(function($){ - $.datepicker.regional['hy'] = { - closeText: 'Փակել', - prevText: '<Նախ.', - nextText: 'Հաջ.>', - currentText: 'Այսօր', - monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս', - 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'], - monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս', - 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Ô´Õ¥Õ¯'], - dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«','ուրբաթ','Õ·Õ¡Õ¢Õ¡Õ©'], - dayNamesShort: ['կիր','երկ','երք','չրք','Õ°Õ¶Õ£','ուրբ','Õ·Õ¢Õ©'], - dayNamesMin: ['կիր','երկ','երք','չրք','Õ°Õ¶Õ£','ուրբ','Õ·Õ¢Õ©'], - weekHeader: 'ՇԲՏ', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hy']); -}); -/* Indonesian initialisation for the jQuery UI date picker plugin. */ -/* Written by Deden Fathurahman (dedenf@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['id'] = { - closeText: 'Tutup', - prevText: '<mundur', - nextText: 'maju>', - currentText: 'hari ini', - monthNames: ['Januari','Februari','Maret','April','Mei','Juni', - 'Juli','Agustus','September','Oktober','Nopember','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', - 'Jul','Agus','Sep','Okt','Nop','Des'], - dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], - dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], - dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], - weekHeader: 'Mg', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['id']); -}); -/* Icelandic initialisation for the jQuery UI date picker plugin. */ -/* Written by Haukur H. Thorsson (haukur@eskill.is). */ -jQuery(function($){ - $.datepicker.regional['is'] = { - closeText: 'Loka', - prevText: '< Fyrri', - nextText: 'Næsti >', - currentText: 'Í dag', - monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', - 'Júlí','Ágúst','September','Október','Nóvember','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', - 'Júl','Ágú','Sep','Okt','Nóv','Des'], - dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], - dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], - dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], - weekHeader: 'Vika', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['is']); -}); -/* Italian initialisation for the jQuery UI date picker plugin. */ -/* Written by Antonello Pasella (antonello.pasella@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['it'] = { - closeText: 'Chiudi', - prevText: '<Prec', - nextText: 'Succ>', - currentText: 'Oggi', - monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', - 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], - monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', - 'Lug','Ago','Set','Ott','Nov','Dic'], - dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], - dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], - dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['it']); -}); - -/* Japanese initialisation for the jQuery UI date picker plugin. */ -/* Written by Kentaro SATO (kentaro@ranvis.com). */ -jQuery(function($){ - $.datepicker.regional['ja'] = { - closeText: '閉じる', - prevText: '<前', - nextText: '次>', - currentText: '今日', - monthNames: ['1月','2月','3月','4月','5月','6月', - '7月','8月','9月','10月','11月','12月'], - monthNamesShort: ['1月','2月','3月','4月','5月','6月', - '7月','8月','9月','10月','11月','12月'], - dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], - dayNamesShort: ['日','月','火','æ°´','木','金','土'], - dayNamesMin: ['日','月','火','æ°´','木','金','土'], - weekHeader: '週', - dateFormat: 'yy/mm/dd', - firstDay: 0, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: 'å¹´'}; - $.datepicker.setDefaults($.datepicker.regional['ja']); -}); -/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Lado Lomidze (lado.lomidze@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ka'] = { - closeText: 'დახურვა', - prevText: '< წინა', - nextText: 'შემდეგი >', - currentText: 'დღეს', - monthNames: ['იანვარი','თებერვალი','მარტი','აპრილი','მაისი','ივნისი', 'ივლისი','აგვისტო','სექტემბერი','ოქტომბერი','ნოემბერი','დეკემბერი'], - monthNamesShort: ['იან','თებ','მარ','აპრ','მაი','ივნ', 'ივლ','აგვ','სექ','ოქტ','ნოე','დეკ'], - dayNames: ['კვირა','ორშაბათი','სამშაბათი','ოთხშაბათი','ხუთშაბათი','პარასკევი','შაბათი'], - dayNamesShort: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'], - dayNamesMin: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'], - weekHeader: 'კვირა', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ka']); -}); - -/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['kk'] = { - closeText: 'Жабу', - prevText: '<Алдыңғы', - nextText: 'Келесі>', - currentText: 'Бүгін', - monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым', - 'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'], - monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау', - 'Шіл','Там','Қыр','Қаз','Қар','Жел'], - dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'], - dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'], - dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'], - weekHeader: 'Не', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['kk']); -}); - -/* Khmer initialisation for the jQuery calendar extension. */ -/* Written by Chandara Om (chandara.teacher@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['km'] = { - closeText: 'ធ្វើ​រួច', - prevText: 'មុន', - nextText: 'បន្ទាប់', - currentText: 'ថ្ងៃ​នេះ', - monthNames: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា', - 'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'], - monthNamesShort: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា', - 'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'], - dayNames: ['អាទិត្យ', 'ចន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បតិ៍', 'សុក្រ', 'សៅរ៍'], - dayNamesShort: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'], - dayNamesMin: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'], - weekHeader: 'សប្ដាហ៍', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['km']); -}); - -/* Korean initialisation for the jQuery calendar extension. */ -/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */ -jQuery(function($){ - $.datepicker.regional['ko'] = { - closeText: '닫기', - prevText: '이전달', - nextText: '다음달', - currentText: '오늘', - monthNames: ['1월','2월','3월','4월','5월','6월', - '7월','8월','9월','10월','11월','12월'], - monthNamesShort: ['1월','2월','3월','4월','5월','6월', - '7월','8월','9월','10월','11월','12월'], - dayNames: ['일요일','월요일','화요일','수요일','목요일','금요일','토요일'], - dayNamesShort: ['일','월','화','수','목','금','토'], - dayNamesMin: ['일','월','화','수','목','금','토'], - weekHeader: 'Wk', - dateFormat: 'yy-mm-dd', - firstDay: 0, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: '년'}; - $.datepicker.setDefaults($.datepicker.regional['ko']); -}); -/* Luxembourgish initialisation for the jQuery UI date picker plugin. */ -/* Written by Michel Weimerskirch */ -jQuery(function($){ - $.datepicker.regional['lb'] = { - closeText: 'Fäerdeg', - prevText: 'Zréck', - nextText: 'Weider', - currentText: 'Haut', - monthNames: ['Januar','Februar','Mäerz','Abrëll','Mee','Juni', - 'Juli','August','September','Oktober','November','Dezember'], - monthNamesShort: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun', - 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'], - dayNames: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'], - dayNamesShort: ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'], - dayNamesMin: ['So','Mé','Dë','Më','Do','Fr','Sa'], - weekHeader: 'W', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['lb']); -}); - -/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* @author Arturas Paleicikas */ -jQuery(function($){ - $.datepicker.regional['lt'] = { - closeText: 'Uždaryti', - prevText: '<Atgal', - nextText: 'Pirmyn>', - currentText: 'Å iandien', - monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', - 'Liepa','RugpjÅ«tis','Rugsėjis','Spalis','Lapkritis','Gruodis'], - monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', - 'Lie','Rugp','Rugs','Spa','Lap','Gru'], - dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','Å¡eÅ¡tadienis'], - dayNamesShort: ['sek','pir','ant','tre','ket','pen','Å¡eÅ¡'], - dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Å e'], - weekHeader: 'Wk', - dateFormat: 'yy-mm-dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['lt']); -}); -/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* @author Arturas Paleicikas */ -jQuery(function($){ - $.datepicker.regional['lv'] = { - closeText: 'Aizvērt', - prevText: 'Iepr', - nextText: 'Nāka', - currentText: 'Å odien', - monthNames: ['Janvāris','Februāris','Marts','AprÄ«lis','Maijs','JÅ«nijs', - 'JÅ«lijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','JÅ«n', - 'JÅ«l','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['svētdiena','pirmdiena','otrdiena','treÅ¡diena','ceturtdiena','piektdiena','sestdiena'], - dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], - dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], - weekHeader: 'Nav', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['lv']); -}); -/* Macedonian i18n for the jQuery UI date picker plugin. */ -/* Written by Stojce Slavkovski. */ -jQuery(function($){ - $.datepicker.regional['mk'] = { - closeText: 'Затвори', - prevText: '<', - nextText: '>', - currentText: 'Денес', - monthNames: ['Јануари','Февруари','Март','Април','Мај','Јуни', - 'Јули','Август','Септември','Октомври','Ноември','Декември'], - monthNamesShort: ['Јан','Фев','Мар','Апр','Мај','Јун', - 'Јул','Авг','Сеп','Окт','Ное','Дек'], - dayNames: ['Недела','Понеделник','Вторник','Среда','Четврток','Петок','Сабота'], - dayNamesShort: ['Нед','Пон','Вто','Сре','Чет','Пет','Саб'], - dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Са'], - weekHeader: 'Сед', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['mk']); -}); - -/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Saji Nediyanchath (saji89@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ml'] = { - closeText: 'ശരി', - prevText: 'മുന്നത്തെ', - nextText: 'അടുത്തത് ', - currentText: 'ഇന്ന്', - monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍', - 'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'], - monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍', - 'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'à´¡à´¿à´¸'], - dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], - dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], - dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','à´¶'], - weekHeader: 'ആ', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ml']); -}); - -/* Malaysian initialisation for the jQuery UI date picker plugin. */ -/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ -jQuery(function($){ - $.datepicker.regional['ms'] = { - closeText: 'Tutup', - prevText: '<Sebelum', - nextText: 'Selepas>', - currentText: 'hari ini', - monthNames: ['Januari','Februari','Mac','April','Mei','Jun', - 'Julai','Ogos','September','Oktober','November','Disember'], - monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun', - 'Jul','Ogo','Sep','Okt','Nov','Dis'], - dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'], - dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'], - dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'], - weekHeader: 'Mg', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ms']); -}); -/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */ -/* David De Sloovere @DavidDeSloovere */ -jQuery(function($){ - $.datepicker.regional['nl-BE'] = { - closeText: 'Sluiten', - prevText: '←', - nextText: '→', - currentText: 'Vandaag', - monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', - 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], - monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', - 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], - dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], - dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], - dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['nl-BE']); -}); - -/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Mathias Bynens */ -jQuery(function($){ - $.datepicker.regional.nl = { - closeText: 'Sluiten', - prevText: '←', - nextText: '→', - currentText: 'Vandaag', - monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', - 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], - monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', - 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], - dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], - dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], - dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], - weekHeader: 'Wk', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional.nl); -}); -/* Norwegian initialisation for the jQuery UI date picker plugin. */ -/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ - -jQuery(function($){ - $.datepicker.regional['no'] = { - closeText: 'Lukk', - prevText: '«Forrige', - nextText: 'Neste»', - currentText: 'I dag', - monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], - monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], - dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'], - dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'], - dayNamesMin: ['sø','ma','ti','on','to','fr','lø'], - weekHeader: 'Uke', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: '' - }; - $.datepicker.setDefaults($.datepicker.regional['no']); -}); - -/* Polish initialisation for the jQuery UI date picker plugin. */ -/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['pl'] = { - closeText: 'Zamknij', - prevText: '<Poprzedni', - nextText: 'Następny>', - currentText: 'Dziś', - monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec', - 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], - monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', - 'Lip','Sie','Wrz','Pa','Lis','Gru'], - dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'], - dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'], - dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'], - weekHeader: 'Tydz', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['pl']); -}); - -/* Brazilian initialisation for the jQuery UI date picker plugin. */ -/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['pt-BR'] = { - closeText: 'Fechar', - prevText: '<Anterior', - nextText: 'Próximo>', - currentText: 'Hoje', - monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', - 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], - monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', - 'Jul','Ago','Set','Out','Nov','Dez'], - dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], - dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['pt-BR']); -}); -/* Portuguese initialisation for the jQuery UI date picker plugin. */ -jQuery(function($){ - $.datepicker.regional['pt'] = { - closeText: 'Fechar', - prevText: '<Anterior', - nextText: 'Seguinte', - currentText: 'Hoje', - monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', - 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], - monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', - 'Jul','Ago','Set','Out','Nov','Dez'], - dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], - dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - weekHeader: 'Sem', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['pt']); -}); -/* Romansh initialisation for the jQuery UI date picker plugin. */ -/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */ -jQuery(function($){ - $.datepicker.regional['rm'] = { - closeText: 'Serrar', - prevText: '<Suandant', - nextText: 'Precedent>', - currentText: 'Actual', - monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'], - monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'], - dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'], - dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'], - dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'], - weekHeader: 'emna', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['rm']); -}); - -/* Romanian initialisation for the jQuery UI date picker plugin. - * - * Written by Edmond L. (ll_edmond@walla.com) - * and Ionut G. Stan (ionut.g.stan@gmail.com) - */ -jQuery(function($){ - $.datepicker.regional['ro'] = { - closeText: 'Închide', - prevText: '« Luna precedentă', - nextText: 'Luna următoare »', - currentText: 'Azi', - monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', - 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'], - monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', - 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Duminică', 'Luni', 'MarÅ£i', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'], - dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'], - dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'], - weekHeader: 'Săpt', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ro']); -}); - -/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Andrew Stromnov (stromnov@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ru'] = { - closeText: 'Закрыть', - prevText: '<Пред', - nextText: 'След>', - currentText: 'Сегодня', - monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', - 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], - monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', - 'Июл','Авг','Сен','Окт','Ноя','Дек'], - dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], - dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], - dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], - weekHeader: 'Нед', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ru']); -}); -/* Slovak initialisation for the jQuery UI date picker plugin. */ -/* Written by Vojtech Rinik (vojto@hmm.sk). */ -jQuery(function($){ - $.datepicker.regional['sk'] = { - closeText: 'ZavrieÅ¥', - prevText: '<Predchádzajúci', - nextText: 'Nasledujúci>', - currentText: 'Dnes', - monthNames: ['Január','Február','Marec','Apríl','Máj','Jún', - 'Júl','August','September','Október','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', - 'Júl','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['Nedeľa','Pondelok','Utorok','Streda','Å tvrtok','Piatok','Sobota'], - dayNamesShort: ['Ned','Pon','Uto','Str','Å tv','Pia','Sob'], - dayNamesMin: ['Ne','Po','Ut','St','Å t','Pia','So'], - weekHeader: 'Ty', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sk']); -}); - -/* Slovenian initialisation for the jQuery UI date picker plugin. */ -/* Written by Jaka Jancar (jaka@kubje.org). */ -/* c = č, s = š z = ž C = Č S = Š Z = Ž */ -jQuery(function($){ - $.datepicker.regional['sl'] = { - closeText: 'Zapri', - prevText: '<Prejšnji', - nextText: 'Naslednji>', - currentText: 'Trenutni', - monthNames: ['Januar','Februar','Marec','April','Maj','Junij', - 'Julij','Avgust','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Avg','Sep','Okt','Nov','Dec'], - dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'], - dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'], - dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'], - weekHeader: 'Teden', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sl']); -}); - -/* Albanian initialisation for the jQuery UI date picker plugin. */ -/* Written by Flakron Bytyqi (flakron@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['sq'] = { - closeText: 'mbylle', - prevText: '<mbrapa', - nextText: 'Përpara>', - currentText: 'sot', - monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor', - 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'], - monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer', - 'Kor','Gus','Sht','Tet','Nën','Dhj'], - dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'], - dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'], - dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'], - weekHeader: 'Ja', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sq']); -}); - -/* Serbian i18n for the jQuery UI date picker plugin. */ -/* Written by Dejan Dimić. */ -jQuery(function($){ - $.datepicker.regional['sr-SR'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', - monthNames: ['Januar','Februar','Mart','April','Maj','Jun', - 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Avg','Sep','Okt','Nov','Dec'], - dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'], - dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'], - dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], - weekHeader: 'Sed', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sr-SR']); -}); - -/* Serbian i18n for the jQuery UI date picker plugin. */ -/* Written by Dejan Dimić. */ -jQuery(function($){ - $.datepicker.regional['sr'] = { - closeText: 'Затвори', - prevText: '<', - nextText: '>', - currentText: 'Данас', - monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун', - 'Јул','Август','Септембар','Октобар','Новембар','Децембар'], - monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун', - 'Јул','Авг','Сеп','Окт','Нов','Дец'], - dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'], - dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'], - dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'], - weekHeader: 'Сед', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sr']); -}); - -/* Swedish initialisation for the jQuery UI date picker plugin. */ -/* Written by Anders Ekdahl ( anders@nomadiz.se). */ -jQuery(function($){ - $.datepicker.regional['sv'] = { - closeText: 'Stäng', - prevText: '«Förra', - nextText: 'Nästa»', - currentText: 'Idag', - monthNames: ['Januari','Februari','Mars','April','Maj','Juni', - 'Juli','Augusti','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - dayNamesShort: ['Sön','MÃ¥n','Tis','Ons','Tor','Fre','Lör'], - dayNames: ['Söndag','MÃ¥ndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], - dayNamesMin: ['Sö','MÃ¥','Ti','On','To','Fr','Lö'], - weekHeader: 'Ve', - dateFormat: 'yy-mm-dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sv']); -}); - -/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by S A Sureshkumar (saskumar@live.com). */ -jQuery(function($){ - $.datepicker.regional['ta'] = { - closeText: 'மூடு', - prevText: 'முன்னையது', - nextText: 'அடுத்தது', - currentText: 'இன்று', - monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி', - 'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'], - monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி', - 'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'], - dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'], - dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'], - dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'], - weekHeader: 'Не', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ta']); -}); - -/* Thai initialisation for the jQuery UI date picker plugin. */ -/* Written by pipo (pipo@sixhead.com). */ -jQuery(function($){ - $.datepicker.regional['th'] = { - closeText: 'ปิด', - prevText: '« à¸¢à¹‰à¸­à¸™', - nextText: 'ถัดไป »', - currentText: 'วันนี้', - monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน', - 'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'], - monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.', - 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'], - dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'], - dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], - dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['th']); -}); -/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Abdurahmon Saidov (saidovab@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['tj'] = { - closeText: 'Идома', - prevText: '<Қафо', - nextText: 'Пеш>', - currentText: 'Имрӯз', - monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн', - 'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'], - monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', - 'Июл','Авг','Сен','Окт','Ноя','Дек'], - dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'], - dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'], - dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'], - weekHeader: 'Хф', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['tj']); -}); -/* Turkish initialisation for the jQuery UI date picker plugin. */ -/* Written by Izzet Emre Erkan (kara@karalamalar.net). */ -jQuery(function($){ - $.datepicker.regional['tr'] = { - closeText: 'kapat', - prevText: '<geri', - nextText: 'ileri>', - currentText: 'bugün', - monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran', - 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'], - monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz', - 'Tem','Ağu','Eyl','Eki','Kas','Ara'], - dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'], - dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], - dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], - weekHeader: 'Hf', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['tr']); -}); -/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ -/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['uk'] = { - closeText: 'Закрити', - prevText: '<', - nextText: '>', - currentText: 'Сьогодні', - monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', - 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'], - monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', - 'Лип','Сер','Вер','Жов','Лис','Гру'], - dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'], - dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'], - dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'], - weekHeader: 'Тиж', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['uk']); -}); -/* Vietnamese initialisation for the jQuery UI date picker plugin. */ -/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */ -jQuery(function($){ - $.datepicker.regional['vi'] = { - closeText: 'Đóng', - prevText: '<Trước', - nextText: 'Tiếp>', - currentText: 'Hôm nay', - monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng TÆ°', 'Tháng Năm', 'Tháng Sáu', - 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'], - monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6', - 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'], - dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ TÆ°', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'], - dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], - dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], - weekHeader: 'Tu', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['vi']); -}); - -/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by Cloudream (cloudream@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-CN'] = { - closeText: '关闭', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - monthNamesShort: ['一','二','三','四','五','六', - '七','八','九','十','十一','十二'], - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['日','一','二','三','四','五','六'], - weekHeader: '周', - dateFormat: 'yy-mm-dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: 'å¹´'}; - $.datepicker.setDefaults($.datepicker.regional['zh-CN']); -}); - -/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by SCCY (samuelcychan@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-HK'] = { - closeText: '關閉', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - monthNamesShort: ['一','二','三','四','五','六', - '七','八','九','十','十一','十二'], - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['日','一','二','三','四','五','六'], - weekHeader: '周', - dateFormat: 'dd-mm-yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: 'å¹´'}; - $.datepicker.setDefaults($.datepicker.regional['zh-HK']); -}); - -/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by Ressol (ressol@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-TW'] = { - closeText: '關閉', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - monthNamesShort: ['一','二','三','四','五','六', - '七','八','九','十','十一','十二'], - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['日','一','二','三','四','五','六'], - weekHeader: '周', - dateFormat: 'yy/mm/dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: 'å¹´'}; - $.datepicker.setDefaults($.datepicker.regional['zh-TW']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-af.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-af.js deleted file mode 100644 index 0922ef7a..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-af.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Afrikaans initialisation for the jQuery UI date picker plugin. */ -/* Written by Renier Pretorius. */ -jQuery(function($){ - $.datepicker.regional['af'] = { - closeText: 'Selekteer', - prevText: 'Vorige', - nextText: 'Volgende', - currentText: 'Vandag', - monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie', - 'Julie','Augustus','September','Oktober','November','Desember'], - monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', - 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'], - dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'], - dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'], - dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['af']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ar-DZ.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ar-DZ.js deleted file mode 100644 index e0e1685d..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ar-DZ.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/ -/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */ - -jQuery(function($){ - $.datepicker.regional['ar-DZ'] = { - closeText: 'إغلاق', - prevText: '<السابق', - nextText: 'التالي>', - currentText: 'اليوم', - monthNames: ['جانفي', 'فيفري', 'مارس', 'أفريل', 'ماي', 'جوان', - 'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوفمبر', 'ديسمبر'], - monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], - dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - weekHeader: 'أسبوع', - dateFormat: 'dd/mm/yy', - firstDay: 6, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ar-DZ']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ar.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ar.js deleted file mode 100644 index 8a9218d8..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ar.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Arabic Translation for jQuery UI date picker plugin. */ -/* Khaled Alhourani -- me@khaledalhourani.com */ -/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name فبراير - يناير and there isn't any Arabic roots for these months */ -jQuery(function($){ - $.datepicker.regional['ar'] = { - closeText: 'إغلاق', - prevText: '<السابق', - nextText: 'التالي>', - currentText: 'اليوم', - monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران', - 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], - monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], - dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'], - dayNamesMin: ['Ø­', 'ن', 'Ø«', 'ر', 'Ø®', 'ج', 'س'], - weekHeader: 'أسبوع', - dateFormat: 'dd/mm/yy', - firstDay: 6, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ar']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-az.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-az.js deleted file mode 100644 index 57802a40..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-az.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Jamil Najafov (necefov33@gmail.com). */ -jQuery(function($) { - $.datepicker.regional['az'] = { - closeText: 'Bağla', - prevText: '<Geri', - nextText: 'Ä°rəli>', - currentText: 'Bugün', - monthNames: ['Yanvar','Fevral','Mart','Aprel','May','Ä°yun', - 'Ä°yul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'], - monthNamesShort: ['Yan','Fev','Mar','Apr','May','Ä°yun', - 'Ä°yul','Avq','Sen','Okt','Noy','Dek'], - dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'], - dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'], - dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'], - weekHeader: 'Hf', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['az']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-bg.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-bg.js deleted file mode 100644 index c19d20fb..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-bg.js +++ /dev/null @@ -1,24 +0,0 @@ -/* Bulgarian initialisation for the jQuery UI date picker plugin. */ -/* Written by Stoyan Kyosev (http://svest.org). */ -jQuery(function($){ - $.datepicker.regional['bg'] = { - closeText: 'затвори', - prevText: '<назад', - nextText: 'напред>', - nextBigText: '>>', - currentText: 'днес', - monthNames: ['Януари','Февруари','Март','Април','Май','Юни', - 'Юли','Август','Септември','Октомври','Ноември','Декември'], - monthNamesShort: ['Яну','Фев','Мар','Апр','Май','Юни', - 'Юли','Авг','Сеп','Окт','Нов','Дек'], - dayNames: ['Неделя','Понеделник','Вторник','Сряда','Четвъртък','Петък','Събота'], - dayNamesShort: ['Нед','Пон','Вто','Сря','Чет','Пет','Съб'], - dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Съ'], - weekHeader: 'Wk', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['bg']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-bs.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-bs.js deleted file mode 100644 index d4dc8b0e..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-bs.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Bosnian i18n for the jQuery UI date picker plugin. */ -/* Written by Kenan Konjo. */ -jQuery(function($){ - $.datepicker.regional['bs'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', - monthNames: ['Januar','Februar','Mart','April','Maj','Juni', - 'Juli','August','Septembar','Oktobar','Novembar','Decembar'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], - dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], - dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], - weekHeader: 'Wk', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['bs']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ca.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ca.js deleted file mode 100644 index b128e699..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ca.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Inicialització en català per a l'extenció 'calendar' per jQuery. */ -/* Writers: (joan.leon@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ca'] = { - closeText: 'Tancar', - prevText: '<Ant', - nextText: 'Seg>', - currentText: 'Avui', - monthNames: ['Gener','Febrer','Març','Abril','Maig','Juny', - 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'], - monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun', - 'Jul','Ago','Set','Oct','Nov','Des'], - dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'], - dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'], - dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ca']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-cs.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-cs.js deleted file mode 100644 index 9805bcdb..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-cs.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Czech initialisation for the jQuery UI date picker plugin. */ -/* Written by Tomas Muller (tomas@tomas-muller.net). */ -jQuery(function($){ - $.datepicker.regional['cs'] = { - closeText: 'Zavřít', - prevText: '<Dříve', - nextText: 'Později>', - currentText: 'Nyní', - monthNames: ['leden','únor','březen','duben','květen','červen', - 'červenec','srpen','září','říjen','listopad','prosinec'], - monthNamesShort: ['led','úno','bře','dub','kvě','čer', - 'čvc','srp','zář','říj','lis','pro'], - dayNames: ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'], - dayNamesShort: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'], - dayNamesMin: ['ne','po','út','st','čt','pá','so'], - weekHeader: 'Týd', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['cs']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-cy-GB.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-cy-GB.js deleted file mode 100644 index dfee2f9d..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-cy-GB.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Welsh/UK initialisation for the jQuery UI date picker plugin. */ -/* Written by William Griffiths. */ -jQuery(function($){ - $.datepicker.regional['cy-GB'] = { - closeText: 'Done', - prevText: 'Prev', - nextText: 'Next', - currentText: 'Today', - monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin', - 'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'], - monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh', - 'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'], - dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'], - dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'], - dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'], - weekHeader: 'Wy', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['cy-GB']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-da.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-da.js deleted file mode 100644 index 176044e1..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-da.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Danish initialisation for the jQuery UI date picker plugin. */ -/* Written by Jan Christensen ( deletestuff@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['da'] = { - closeText: 'Luk', - prevText: '<Forrige', - nextText: 'Næste>', - currentText: 'Idag', - monthNames: ['Januar','Februar','Marts','April','Maj','Juni', - 'Juli','August','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], - dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], - dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], - weekHeader: 'Uge', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['da']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-de.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-de.js deleted file mode 100644 index f3ef9e82..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-de.js +++ /dev/null @@ -1,23 +0,0 @@ -/* German initialisation for the jQuery UI date picker plugin. */ -/* Written by Milian Wolff (mail@milianw.de). */ -jQuery(function($){ - $.datepicker.regional['de'] = { - closeText: 'schließen', - prevText: '<zurück', - nextText: 'Vor>', - currentText: 'heute', - monthNames: ['Januar','Februar','März','April','Mai','Juni', - 'Juli','August','September','Oktober','November','Dezember'], - monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dez'], - dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], - dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], - dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'], - weekHeader: 'KW', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['de']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-el.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-el.js deleted file mode 100644 index 6d775f99..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-el.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Greek (el) initialisation for the jQuery UI date picker plugin. */ -/* Written by Alex Cicovic (http://www.alexcicovic.com) */ -jQuery(function($){ - $.datepicker.regional['el'] = { - closeText: 'Κλείσιμο', - prevText: 'Προηγούμενος', - nextText: 'Επόμενος', - currentText: 'Τρέχων Μήνας', - monthNames: ['Ιανουάριος','Φεβρουάριος','Μάρτιος','Απρίλιος','Μάιος','Ιούνιος', - 'Ιούλιος','Αύγουστος','Σεπτέμβριος','Οκτώβριος','Νοέμβριος','Δεκέμβριος'], - monthNamesShort: ['Ιαν','Φεβ','Μαρ','Απρ','Μαι','Ιουν', - 'Ιουλ','Αυγ','Σεπ','Οκτ','Νοε','Δεκ'], - dayNames: ['Κυριακή','Δευτέρα','Τρίτη','Τετάρτη','Πέμπτη','Παρασκευή','Σάββατο'], - dayNamesShort: ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'], - dayNamesMin: ['Κυ','Δε','Τρ','Τε','Πε','Πα','Σα'], - weekHeader: 'Εβδ', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['el']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-en-AU.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-en-AU.js deleted file mode 100644 index c1a1020a..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-en-AU.js +++ /dev/null @@ -1,23 +0,0 @@ -/* English/Australia initialisation for the jQuery UI date picker plugin. */ -/* Based on the en-GB initialisation. */ -jQuery(function($){ - $.datepicker.regional['en-AU'] = { - closeText: 'Done', - prevText: 'Prev', - nextText: 'Next', - currentText: 'Today', - monthNames: ['January','February','March','April','May','June', - 'July','August','September','October','November','December'], - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['en-AU']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-en-GB.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-en-GB.js deleted file mode 100644 index 16a096e7..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-en-GB.js +++ /dev/null @@ -1,23 +0,0 @@ -/* English/UK initialisation for the jQuery UI date picker plugin. */ -/* Written by Stuart. */ -jQuery(function($){ - $.datepicker.regional['en-GB'] = { - closeText: 'Done', - prevText: 'Prev', - nextText: 'Next', - currentText: 'Today', - monthNames: ['January','February','March','April','May','June', - 'July','August','September','October','November','December'], - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['en-GB']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-en-NZ.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-en-NZ.js deleted file mode 100644 index 7819df05..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-en-NZ.js +++ /dev/null @@ -1,23 +0,0 @@ -/* English/New Zealand initialisation for the jQuery UI date picker plugin. */ -/* Based on the en-GB initialisation. */ -jQuery(function($){ - $.datepicker.regional['en-NZ'] = { - closeText: 'Done', - prevText: 'Prev', - nextText: 'Next', - currentText: 'Today', - monthNames: ['January','February','March','April','May','June', - 'July','August','September','October','November','December'], - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['en-NZ']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-eo.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-eo.js deleted file mode 100644 index 6cabc2c4..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-eo.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Esperanto initialisation for the jQuery UI date picker plugin. */ -/* Written by Olivier M. (olivierweb@ifrance.com). */ -jQuery(function($){ - $.datepicker.regional['eo'] = { - closeText: 'Fermi', - prevText: '<Anta', - nextText: 'Sekv>', - currentText: 'Nuna', - monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio', - 'Julio','AÅ­gusto','Septembro','Oktobro','Novembro','Decembro'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','AÅ­g','Sep','Okt','Nov','Dec'], - dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ä´aÅ­do','Vendredo','Sabato'], - dayNamesShort: ['Dim','Lun','Mar','Mer','Ä´aÅ­','Ven','Sab'], - dayNamesMin: ['Di','Lu','Ma','Me','Ä´a','Ve','Sa'], - weekHeader: 'Sb', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['eo']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-es.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-es.js deleted file mode 100644 index a02133de..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-es.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Inicialización en español para la extensión 'UI date picker' para jQuery. */ -/* Traducido por Vester (xvester@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['es'] = { - closeText: 'Cerrar', - prevText: '<Ant', - nextText: 'Sig>', - currentText: 'Hoy', - monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', - 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], - monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', - 'Jul','Ago','Sep','Oct','Nov','Dic'], - dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], - dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], - dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['es']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-et.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-et.js deleted file mode 100644 index 32702b24..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-et.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Estonian initialisation for the jQuery UI date picker plugin. */ -/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */ -jQuery(function($){ - $.datepicker.regional['et'] = { - closeText: 'Sulge', - prevText: 'Eelnev', - nextText: 'Järgnev', - currentText: 'Täna', - monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni', - 'Juuli','August','September','Oktoober','November','Detsember'], - monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni', - 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'], - dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'], - dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'], - dayNamesMin: ['P','E','T','K','N','R','L'], - weekHeader: 'näd', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['et']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-eu.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-eu.js deleted file mode 100644 index ff66e494..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-eu.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */ -/* Karrikas-ek itzulia (karrikas@karrikas.com) */ -jQuery(function($){ - $.datepicker.regional['eu'] = { - closeText: 'Egina', - prevText: '<Aur', - nextText: 'Hur>', - currentText: 'Gaur', - monthNames: ['urtarrila','otsaila','martxoa','apirila','maiatza','ekaina', - 'uztaila','abuztua','iraila','urria','azaroa','abendua'], - monthNamesShort: ['urt.','ots.','mar.','api.','mai.','eka.', - 'uzt.','abu.','ira.','urr.','aza.','abe.'], - dayNames: ['igandea','astelehena','asteartea','asteazkena','osteguna','ostirala','larunbata'], - dayNamesShort: ['ig.','al.','ar.','az.','og.','ol.','lr.'], - dayNamesMin: ['ig','al','ar','az','og','ol','lr'], - weekHeader: 'As', - dateFormat: 'yy-mm-dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['eu']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fa.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fa.js deleted file mode 100644 index be8acd2a..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fa.js +++ /dev/null @@ -1,59 +0,0 @@ -/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */ -/* Javad Mowlanezhad -- jmowla@gmail.com */ -/* Jalali calendar should supported soon! (Its implemented but I have to test it) */ -jQuery(function($) { - $.datepicker.regional['fa'] = { - closeText: 'بستن', - prevText: '<قبلی', - nextText: 'بعدی>', - currentText: 'امروز', - monthNames: [ - 'فروردين', - 'ارديبهشت', - 'خرداد', - 'تير', - 'مرداد', - 'شهريور', - 'مهر', - 'آبان', - 'آذر', - 'دی', - 'بهمن', - 'اسفند' - ], - monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], - dayNames: [ - 'يکشنبه', - 'دوشنبه', - 'سه‌شنبه', - 'چهارشنبه', - 'پنجشنبه', - 'جمعه', - 'شنبه' - ], - dayNamesShort: [ - 'ی', - 'د', - 'س', - 'چ', - 'Ù¾', - 'ج', - 'Ø´' - ], - dayNamesMin: [ - 'ی', - 'د', - 'س', - 'چ', - 'Ù¾', - 'ج', - 'Ø´' - ], - weekHeader: 'هف', - dateFormat: 'yy/mm/dd', - firstDay: 6, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fa']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fi.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fi.js deleted file mode 100644 index 4c5adda3..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fi.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Finnish initialisation for the jQuery UI date picker plugin. */ -/* Written by Harri Kilpiö (harrikilpio@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['fi'] = { - closeText: 'Sulje', - prevText: '«Edellinen', - nextText: 'Seuraava»', - currentText: 'Tänään', - monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu', - 'Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'], - monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kesä', - 'Heinä','Elo','Syys','Loka','Marras','Joulu'], - dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','La'], - dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'], - dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'], - weekHeader: 'Vk', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fi']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fo.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fo.js deleted file mode 100644 index 8a6cb99c..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fo.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Faroese initialisation for the jQuery UI date picker plugin */ -/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */ -jQuery(function($){ - $.datepicker.regional['fo'] = { - closeText: 'Lat aftur', - prevText: '<Fyrra', - nextText: 'Næsta>', - currentText: 'Í dag', - monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni', - 'Juli','August','September','Oktober','November','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', - 'Jul','Aug','Sep','Okt','Nov','Des'], - dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'], - dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'], - dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'], - weekHeader: 'Vk', - dateFormat: 'dd-mm-yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fo']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fr-CH.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fr-CH.js deleted file mode 100644 index 244eacff..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fr-CH.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Swiss-French initialisation for the jQuery UI date picker plugin. */ -/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */ -jQuery(function($){ - $.datepicker.regional['fr-CH'] = { - closeText: 'Fermer', - prevText: '<Préc', - nextText: 'Suiv>', - currentText: 'Courant', - monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', - 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], - monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', - 'Jul','Aoû','Sep','Oct','Nov','Déc'], - dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], - dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], - dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], - weekHeader: 'Sm', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fr-CH']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fr.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fr.js deleted file mode 100644 index 7e793639..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-fr.js +++ /dev/null @@ -1,25 +0,0 @@ -/* French initialisation for the jQuery UI date picker plugin. */ -/* Written by Keith Wood (kbwood{at}iinet.com.au), - Stéphane Nahmani (sholby@sholby.net), - Stéphane Raimbault */ -jQuery(function($){ - $.datepicker.regional['fr'] = { - closeText: 'Fermer', - prevText: 'Précédent', - nextText: 'Suivant', - currentText: 'Aujourd\'hui', - monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', - 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], - monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin', - 'Juil.','Août','Sept.','Oct.','Nov.','Déc.'], - dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], - dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'], - dayNamesMin: ['D','L','M','M','J','V','S'], - weekHeader: 'Sem.', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['fr']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-gl.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-gl.js deleted file mode 100644 index 278403e8..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-gl.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Galician localization for 'UI date picker' jQuery extension. */ -/* Translated by Jorge Barreiro . */ -jQuery(function($){ - $.datepicker.regional['gl'] = { - closeText: 'Pechar', - prevText: '<Ant', - nextText: 'Seg>', - currentText: 'Hoxe', - monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño', - 'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'], - monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ', - 'Xul','Ago','Set','Out','Nov','Dec'], - dayNames: ['Domingo','Luns','Martes','Mércores','Xoves','Venres','Sábado'], - dayNamesShort: ['Dom','Lun','Mar','Mér','Xov','Ven','Sáb'], - dayNamesMin: ['Do','Lu','Ma','Mé','Xo','Ve','Sá'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['gl']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-he.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-he.js deleted file mode 100644 index 135cdec1..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-he.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Hebrew initialisation for the UI Datepicker extension. */ -/* Written by Amir Hardon (ahardon at gmail dot com). */ -jQuery(function($){ - $.datepicker.regional['he'] = { - closeText: 'סגור', - prevText: '<הקודם', - nextText: 'הבא>', - currentText: 'היום', - monthNames: ['ינואר','פברואר','מרץ','אפריל','מאי','יוני', - 'יולי','אוגוסט','ספטמבר','אוקטובר','נובמבר','דצמבר'], - monthNamesShort: ['ינו','פבר','מרץ','אפר','מאי','יוני', - 'יולי','אוג','ספט','אוק','נוב','דצמ'], - dayNames: ['ראשון','שני','שלישי','רביעי','חמישי','שישי','שבת'], - dayNamesShort: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], - dayNamesMin: ['א\'','ב\'','ג\'','ד\'','ה\'','ו\'','שבת'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: true, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['he']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hi.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hi.js deleted file mode 100644 index 6c563b99..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hi.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Hindi initialisation for the jQuery UI date picker plugin. */ -/* Written by Michael Dawart. */ -jQuery(function($){ - $.datepicker.regional['hi'] = { - closeText: 'बंद', - prevText: 'पिछला', - nextText: 'अगला', - currentText: 'आज', - monthNames: ['जनवरी ','फरवरी','मार्च','अप्रेल','मई','जून', - 'जूलाई','अगस्त ','सितम्बर','अक्टूबर','नवम्बर','दिसम्बर'], - monthNamesShort: ['जन', 'फर', 'मार्च', 'अप्रेल', 'मई', 'जून', - 'जूलाई', 'अग', 'सित', 'अक्ट', 'नव', 'दि'], - dayNames: ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार'], - dayNamesShort: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'], - dayNamesMin: ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'], - weekHeader: 'हफ्ता', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hi']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hr.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hr.js deleted file mode 100644 index 1eb3dd92..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hr.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Croatian i18n for the jQuery UI date picker plugin. */ -/* Written by Vjekoslav Nesek. */ -jQuery(function($){ - $.datepicker.regional['hr'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', - monthNames: ['Siječanj','Veljača','Ožujak','Travanj','Svibanj','Lipanj', - 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'], - monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip', - 'Srp','Kol','Ruj','Lis','Stu','Pro'], - dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak','Subota'], - dayNamesShort: ['Ned','Pon','Uto','Sri','Čet','Pet','Sub'], - dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], - weekHeader: 'Tje', - dateFormat: 'dd.mm.yy.', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hr']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hu.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hu.js deleted file mode 100644 index b28c268c..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hu.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Hungarian initialisation for the jQuery UI date picker plugin. */ -/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */ -jQuery(function($){ - $.datepicker.regional['hu'] = { - closeText: 'bezár', - prevText: 'vissza', - nextText: 'előre', - currentText: 'ma', - monthNames: ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', - 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'], - monthNamesShort: ['Jan', 'Feb', 'Már', 'Ápr', 'Máj', 'Jún', - 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'], - dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'], - dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'], - dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'], - weekHeader: 'Hét', - dateFormat: 'yy.mm.dd.', - firstDay: 1, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hu']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hy.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hy.js deleted file mode 100644 index c6cc1946..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-hy.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/ -jQuery(function($){ - $.datepicker.regional['hy'] = { - closeText: 'Փակել', - prevText: '<Նախ.', - nextText: 'Հաջ.>', - currentText: 'Այսօր', - monthNames: ['Հունվար','Փետրվար','Մարտ','Ապրիլ','Մայիս','Հունիս', - 'Հուլիս','Օգոստոս','Սեպտեմբեր','Հոկտեմբեր','Նոյեմբեր','Դեկտեմբեր'], - monthNamesShort: ['Հունվ','Փետր','Մարտ','Ապր','Մայիս','Հունիս', - 'Հուլ','Օգս','Սեպ','Հոկ','Նոյ','Ô´Õ¥Õ¯'], - dayNames: ['կիրակի','եկուշաբթի','երեքշաբթի','չորեքշաբթի','Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«','ուրբաթ','Õ·Õ¡Õ¢Õ¡Õ©'], - dayNamesShort: ['կիր','երկ','երք','չրք','Õ°Õ¶Õ£','ուրբ','Õ·Õ¢Õ©'], - dayNamesMin: ['կիր','երկ','երք','չրք','Õ°Õ¶Õ£','ուրբ','Õ·Õ¢Õ©'], - weekHeader: 'ՇԲՏ', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['hy']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-id.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-id.js deleted file mode 100644 index c626fbb7..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-id.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Indonesian initialisation for the jQuery UI date picker plugin. */ -/* Written by Deden Fathurahman (dedenf@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['id'] = { - closeText: 'Tutup', - prevText: '<mundur', - nextText: 'maju>', - currentText: 'hari ini', - monthNames: ['Januari','Februari','Maret','April','Mei','Juni', - 'Juli','Agustus','September','Oktober','Nopember','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun', - 'Jul','Agus','Sep','Okt','Nop','Des'], - dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'], - dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'], - dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'], - weekHeader: 'Mg', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['id']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-is.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-is.js deleted file mode 100644 index c53235a4..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-is.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Icelandic initialisation for the jQuery UI date picker plugin. */ -/* Written by Haukur H. Thorsson (haukur@eskill.is). */ -jQuery(function($){ - $.datepicker.regional['is'] = { - closeText: 'Loka', - prevText: '< Fyrri', - nextText: 'Næsti >', - currentText: 'Í dag', - monthNames: ['Janúar','Febrúar','Mars','Apríl','Maí','Júní', - 'Júlí','Ágúst','September','Október','Nóvember','Desember'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maí','Jún', - 'Júl','Ágú','Sep','Okt','Nóv','Des'], - dayNames: ['Sunnudagur','Mánudagur','Þriðjudagur','Miðvikudagur','Fimmtudagur','Föstudagur','Laugardagur'], - dayNamesShort: ['Sun','Mán','Þri','Mið','Fim','Fös','Lau'], - dayNamesMin: ['Su','Má','Þr','Mi','Fi','Fö','La'], - weekHeader: 'Vika', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['is']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-it.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-it.js deleted file mode 100644 index 59da2df6..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-it.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Italian initialisation for the jQuery UI date picker plugin. */ -/* Written by Antonello Pasella (antonello.pasella@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['it'] = { - closeText: 'Chiudi', - prevText: '<Prec', - nextText: 'Succ>', - currentText: 'Oggi', - monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', - 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'], - monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu', - 'Lug','Ago','Set','Ott','Nov','Dic'], - dayNames: ['Domenica','Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato'], - dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'], - dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['it']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ja.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ja.js deleted file mode 100644 index 7eb4268d..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ja.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Japanese initialisation for the jQuery UI date picker plugin. */ -/* Written by Kentaro SATO (kentaro@ranvis.com). */ -jQuery(function($){ - $.datepicker.regional['ja'] = { - closeText: '閉じる', - prevText: '<前', - nextText: '次>', - currentText: '今日', - monthNames: ['1月','2月','3月','4月','5月','6月', - '7月','8月','9月','10月','11月','12月'], - monthNamesShort: ['1月','2月','3月','4月','5月','6月', - '7月','8月','9月','10月','11月','12月'], - dayNames: ['日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'], - dayNamesShort: ['日','月','火','æ°´','木','金','土'], - dayNamesMin: ['日','月','火','æ°´','木','金','土'], - weekHeader: '週', - dateFormat: 'yy/mm/dd', - firstDay: 0, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: 'å¹´'}; - $.datepicker.setDefaults($.datepicker.regional['ja']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ka.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ka.js deleted file mode 100644 index c10658d7..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ka.js +++ /dev/null @@ -1,21 +0,0 @@ -/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Lado Lomidze (lado.lomidze@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ka'] = { - closeText: 'დახურვა', - prevText: '< წინა', - nextText: 'შემდეგი >', - currentText: 'დღეს', - monthNames: ['იანვარი','თებერვალი','მარტი','აპრილი','მაისი','ივნისი', 'ივლისი','აგვისტო','სექტემბერი','ოქტომბერი','ნოემბერი','დეკემბერი'], - monthNamesShort: ['იან','თებ','მარ','აპრ','მაი','ივნ', 'ივლ','აგვ','სექ','ოქტ','ნოე','დეკ'], - dayNames: ['კვირა','ორშაბათი','სამშაბათი','ოთხშაბათი','ხუთშაბათი','პარასკევი','შაბათი'], - dayNamesShort: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'], - dayNamesMin: ['კვ','ორშ','სამ','ოთხ','ხუთ','პარ','შაბ'], - weekHeader: 'კვირა', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ka']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-kk.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-kk.js deleted file mode 100644 index 79e3f248..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-kk.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['kk'] = { - closeText: 'Жабу', - prevText: '<Алдыңғы', - nextText: 'Келесі>', - currentText: 'Бүгін', - monthNames: ['Қаңтар','Ақпан','Наурыз','Сәуір','Мамыр','Маусым', - 'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','Желтоқсан'], - monthNamesShort: ['Қаң','Ақп','Нау','Сәу','Мам','Мау', - 'Шіл','Там','Қыр','Қаз','Қар','Жел'], - dayNames: ['Жексенбі','Дүйсенбі','Сейсенбі','Сәрсенбі','Бейсенбі','Жұма','Сенбі'], - dayNamesShort: ['жкс','дсн','ссн','срс','бсн','жма','снб'], - dayNamesMin: ['Жк','Дс','Сс','Ср','Бс','Жм','Сн'], - weekHeader: 'Не', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['kk']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-km.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-km.js deleted file mode 100644 index f9c4e3a0..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-km.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Khmer initialisation for the jQuery calendar extension. */ -/* Written by Chandara Om (chandara.teacher@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['km'] = { - closeText: 'ធ្វើ​រួច', - prevText: 'មុន', - nextText: 'បន្ទាប់', - currentText: 'ថ្ងៃ​នេះ', - monthNames: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា', - 'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'], - monthNamesShort: ['មករា','កុម្ភៈ','មីនា','មេសា','ឧសភា','មិថុនា', - 'កក្កដា','សីហា','កញ្ញា','តុលា','វិច្ឆិកា','ធ្នូ'], - dayNames: ['អាទិត្យ', 'ចន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បតិ៍', 'សុក្រ', 'សៅរ៍'], - dayNamesShort: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'], - dayNamesMin: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'], - weekHeader: 'សប្ដាហ៍', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['km']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ko.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ko.js deleted file mode 100644 index 04112424..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ko.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Korean initialisation for the jQuery calendar extension. */ -/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */ -jQuery(function($){ - $.datepicker.regional['ko'] = { - closeText: '닫기', - prevText: '이전달', - nextText: '다음달', - currentText: '오늘', - monthNames: ['1월','2월','3월','4월','5월','6월', - '7월','8월','9월','10월','11월','12월'], - monthNamesShort: ['1월','2월','3월','4월','5월','6월', - '7월','8월','9월','10월','11월','12월'], - dayNames: ['일요일','월요일','화요일','수요일','목요일','금요일','토요일'], - dayNamesShort: ['일','월','화','수','목','금','토'], - dayNamesMin: ['일','월','화','수','목','금','토'], - weekHeader: 'Wk', - dateFormat: 'yy-mm-dd', - firstDay: 0, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: '년'}; - $.datepicker.setDefaults($.datepicker.regional['ko']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-lb.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-lb.js deleted file mode 100644 index 87c79d59..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-lb.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Luxembourgish initialisation for the jQuery UI date picker plugin. */ -/* Written by Michel Weimerskirch */ -jQuery(function($){ - $.datepicker.regional['lb'] = { - closeText: 'Fäerdeg', - prevText: 'Zréck', - nextText: 'Weider', - currentText: 'Haut', - monthNames: ['Januar','Februar','Mäerz','Abrëll','Mee','Juni', - 'Juli','August','September','Oktober','November','Dezember'], - monthNamesShort: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun', - 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'], - dayNames: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'], - dayNamesShort: ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'], - dayNamesMin: ['So','Mé','Dë','Më','Do','Fr','Sa'], - weekHeader: 'W', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['lb']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-lt.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-lt.js deleted file mode 100644 index 67d5119c..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-lt.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* @author Arturas Paleicikas */ -jQuery(function($){ - $.datepicker.regional['lt'] = { - closeText: 'Uždaryti', - prevText: '<Atgal', - nextText: 'Pirmyn>', - currentText: 'Å iandien', - monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis', - 'Liepa','RugpjÅ«tis','Rugsėjis','Spalis','Lapkritis','Gruodis'], - monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir', - 'Lie','Rugp','Rugs','Spa','Lap','Gru'], - dayNames: ['sekmadienis','pirmadienis','antradienis','trečiadienis','ketvirtadienis','penktadienis','Å¡eÅ¡tadienis'], - dayNamesShort: ['sek','pir','ant','tre','ket','pen','Å¡eÅ¡'], - dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Å e'], - weekHeader: 'Wk', - dateFormat: 'yy-mm-dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['lt']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-lv.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-lv.js deleted file mode 100644 index 003934e7..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-lv.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* @author Arturas Paleicikas */ -jQuery(function($){ - $.datepicker.regional['lv'] = { - closeText: 'Aizvērt', - prevText: 'Iepr', - nextText: 'Nāka', - currentText: 'Å odien', - monthNames: ['Janvāris','Februāris','Marts','AprÄ«lis','Maijs','JÅ«nijs', - 'JÅ«lijs','Augusts','Septembris','Oktobris','Novembris','Decembris'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','JÅ«n', - 'JÅ«l','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['svētdiena','pirmdiena','otrdiena','treÅ¡diena','ceturtdiena','piektdiena','sestdiena'], - dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'], - dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'], - weekHeader: 'Nav', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['lv']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-mk.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-mk.js deleted file mode 100644 index 02853255..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-mk.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Macedonian i18n for the jQuery UI date picker plugin. */ -/* Written by Stojce Slavkovski. */ -jQuery(function($){ - $.datepicker.regional['mk'] = { - closeText: 'Затвори', - prevText: '<', - nextText: '>', - currentText: 'Денес', - monthNames: ['Јануари','Февруари','Март','Април','Мај','Јуни', - 'Јули','Август','Септември','Октомври','Ноември','Декември'], - monthNamesShort: ['Јан','Фев','Мар','Апр','Мај','Јун', - 'Јул','Авг','Сеп','Окт','Ное','Дек'], - dayNames: ['Недела','Понеделник','Вторник','Среда','Четврток','Петок','Сабота'], - dayNamesShort: ['Нед','Пон','Вто','Сре','Чет','Пет','Саб'], - dayNamesMin: ['Не','По','Вт','Ср','Че','Пе','Са'], - weekHeader: 'Сед', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['mk']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ml.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ml.js deleted file mode 100644 index 1e3432c0..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ml.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Saji Nediyanchath (saji89@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ml'] = { - closeText: 'ശരി', - prevText: 'മുന്നത്തെ', - nextText: 'അടുത്തത് ', - currentText: 'ഇന്ന്', - monthNames: ['ജനുവരി','ഫെബ്രുവരി','മാര്‍ച്ച്','ഏപ്രില്‍','മേയ്','ജൂണ്‍', - 'ജൂലൈ','ആഗസ്റ്റ്','സെപ്റ്റംബര്‍','ഒക്ടോബര്‍','നവംബര്‍','ഡിസംബര്‍'], - monthNamesShort: ['ജനു', 'ഫെബ്', 'മാര്‍', 'ഏപ്രി', 'മേയ്', 'ജൂണ്‍', - 'ജൂലാ', 'ആഗ', 'സെപ്', 'ഒക്ടോ', 'നവം', 'à´¡à´¿à´¸'], - dayNames: ['ഞായര്‍', 'തിങ്കള്‍', 'ചൊവ്വ', 'ബുധന്‍', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], - dayNamesShort: ['ഞായ', 'തിങ്ക', 'ചൊവ്വ', 'ബുധ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'], - dayNamesMin: ['ഞാ','തി','ചൊ','ബു','വ്യാ','വെ','à´¶'], - weekHeader: 'ആ', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ml']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ms.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ms.js deleted file mode 100644 index e953ac04..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ms.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Malaysian initialisation for the jQuery UI date picker plugin. */ -/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */ -jQuery(function($){ - $.datepicker.regional['ms'] = { - closeText: 'Tutup', - prevText: '<Sebelum', - nextText: 'Selepas>', - currentText: 'hari ini', - monthNames: ['Januari','Februari','Mac','April','Mei','Jun', - 'Julai','Ogos','September','Oktober','November','Disember'], - monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun', - 'Jul','Ogo','Sep','Okt','Nov','Dis'], - dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'], - dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'], - dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'], - weekHeader: 'Mg', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ms']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-nl-BE.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-nl-BE.js deleted file mode 100644 index 7b3cdf42..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-nl-BE.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */ -/* David De Sloovere @DavidDeSloovere */ -jQuery(function($){ - $.datepicker.regional['nl-BE'] = { - closeText: 'Sluiten', - prevText: '←', - nextText: '→', - currentText: 'Vandaag', - monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', - 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], - monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', - 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], - dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], - dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], - dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['nl-BE']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-nl.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-nl.js deleted file mode 100644 index 781fe619..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-nl.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Mathias Bynens */ -jQuery(function($){ - $.datepicker.regional.nl = { - closeText: 'Sluiten', - prevText: '←', - nextText: '→', - currentText: 'Vandaag', - monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni', - 'juli', 'augustus', 'september', 'oktober', 'november', 'december'], - monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', - 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'], - dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'], - dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'], - dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'], - weekHeader: 'Wk', - dateFormat: 'dd-mm-yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional.nl); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-no.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-no.js deleted file mode 100644 index 2507043a..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-no.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Norwegian initialisation for the jQuery UI date picker plugin. */ -/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */ - -jQuery(function($){ - $.datepicker.regional['no'] = { - closeText: 'Lukk', - prevText: '«Forrige', - nextText: 'Neste»', - currentText: 'I dag', - monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'], - monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'], - dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'], - dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'], - dayNamesMin: ['sø','ma','ti','on','to','fr','lø'], - weekHeader: 'Uke', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: '' - }; - $.datepicker.setDefaults($.datepicker.regional['no']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-pl.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-pl.js deleted file mode 100644 index 61fa29cc..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-pl.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Polish initialisation for the jQuery UI date picker plugin. */ -/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['pl'] = { - closeText: 'Zamknij', - prevText: '<Poprzedni', - nextText: 'Następny>', - currentText: 'Dziś', - monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec', - 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], - monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze', - 'Lip','Sie','Wrz','Pa','Lis','Gru'], - dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'], - dayNamesShort: ['Nie','Pn','Wt','Śr','Czw','Pt','So'], - dayNamesMin: ['N','Pn','Wt','Śr','Cz','Pt','So'], - weekHeader: 'Tydz', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['pl']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-pt-BR.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-pt-BR.js deleted file mode 100644 index 3cc8c796..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-pt-BR.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Brazilian initialisation for the jQuery UI date picker plugin. */ -/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['pt-BR'] = { - closeText: 'Fechar', - prevText: '<Anterior', - nextText: 'Próximo>', - currentText: 'Hoje', - monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', - 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], - monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', - 'Jul','Ago','Set','Out','Nov','Dez'], - dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], - dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - weekHeader: 'Sm', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['pt-BR']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-pt.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-pt.js deleted file mode 100644 index f09f5aeb..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-pt.js +++ /dev/null @@ -1,22 +0,0 @@ -/* Portuguese initialisation for the jQuery UI date picker plugin. */ -jQuery(function($){ - $.datepicker.regional['pt'] = { - closeText: 'Fechar', - prevText: '<Anterior', - nextText: 'Seguinte', - currentText: 'Hoje', - monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', - 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], - monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun', - 'Jul','Ago','Set','Out','Nov','Dez'], - dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], - dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], - weekHeader: 'Sem', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['pt']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-rm.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-rm.js deleted file mode 100644 index cf03cd4c..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-rm.js +++ /dev/null @@ -1,21 +0,0 @@ -/* Romansh initialisation for the jQuery UI date picker plugin. */ -/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */ -jQuery(function($){ - $.datepicker.regional['rm'] = { - closeText: 'Serrar', - prevText: '<Suandant', - nextText: 'Precedent>', - currentText: 'Actual', - monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'], - monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'], - dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'], - dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'], - dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'], - weekHeader: 'emna', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['rm']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ro.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ro.js deleted file mode 100644 index 6b140aff..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ro.js +++ /dev/null @@ -1,26 +0,0 @@ -/* Romanian initialisation for the jQuery UI date picker plugin. - * - * Written by Edmond L. (ll_edmond@walla.com) - * and Ionut G. Stan (ionut.g.stan@gmail.com) - */ -jQuery(function($){ - $.datepicker.regional['ro'] = { - closeText: 'Închide', - prevText: '« Luna precedentă', - nextText: 'Luna următoare »', - currentText: 'Azi', - monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie', - 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'], - monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', - 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - dayNames: ['Duminică', 'Luni', 'MarÅ£i', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'], - dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'], - dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'], - weekHeader: 'Săpt', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ro']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ru.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ru.js deleted file mode 100644 index 50a46135..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ru.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Andrew Stromnov (stromnov@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['ru'] = { - closeText: 'Закрыть', - prevText: '<Пред', - nextText: 'След>', - currentText: 'Сегодня', - monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', - 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], - monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', - 'Июл','Авг','Сен','Окт','Ноя','Дек'], - dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], - dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], - dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], - weekHeader: 'Нед', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ru']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sk.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sk.js deleted file mode 100644 index 078d1b0f..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sk.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Slovak initialisation for the jQuery UI date picker plugin. */ -/* Written by Vojtech Rinik (vojto@hmm.sk). */ -jQuery(function($){ - $.datepicker.regional['sk'] = { - closeText: 'ZavrieÅ¥', - prevText: '<Predchádzajúci', - nextText: 'Nasledujúci>', - currentText: 'Dnes', - monthNames: ['Január','Február','Marec','Apríl','Máj','Jún', - 'Júl','August','September','Október','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún', - 'Júl','Aug','Sep','Okt','Nov','Dec'], - dayNames: ['Nedeľa','Pondelok','Utorok','Streda','Å tvrtok','Piatok','Sobota'], - dayNamesShort: ['Ned','Pon','Uto','Str','Å tv','Pia','Sob'], - dayNamesMin: ['Ne','Po','Ut','St','Å t','Pia','So'], - weekHeader: 'Ty', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sk']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sl.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sl.js deleted file mode 100644 index 51655019..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sl.js +++ /dev/null @@ -1,24 +0,0 @@ -/* Slovenian initialisation for the jQuery UI date picker plugin. */ -/* Written by Jaka Jancar (jaka@kubje.org). */ -/* c = č, s = š z = ž C = Č S = Š Z = Ž */ -jQuery(function($){ - $.datepicker.regional['sl'] = { - closeText: 'Zapri', - prevText: '<Prejšnji', - nextText: 'Naslednji>', - currentText: 'Trenutni', - monthNames: ['Januar','Februar','Marec','April','Maj','Junij', - 'Julij','Avgust','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Avg','Sep','Okt','Nov','Dec'], - dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','Četrtek','Petek','Sobota'], - dayNamesShort: ['Ned','Pon','Tor','Sre','Čet','Pet','Sob'], - dayNamesMin: ['Ne','Po','To','Sr','Če','Pe','So'], - weekHeader: 'Teden', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sl']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sq.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sq.js deleted file mode 100644 index 21974c56..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sq.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Albanian initialisation for the jQuery UI date picker plugin. */ -/* Written by Flakron Bytyqi (flakron@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['sq'] = { - closeText: 'mbylle', - prevText: '<mbrapa', - nextText: 'Përpara>', - currentText: 'sot', - monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor', - 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'], - monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer', - 'Kor','Gus','Sht','Tet','Nën','Dhj'], - dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'], - dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'], - dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'], - weekHeader: 'Ja', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sq']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sr-SR.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sr-SR.js deleted file mode 100644 index e7a8683e..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sr-SR.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Serbian i18n for the jQuery UI date picker plugin. */ -/* Written by Dejan Dimić. */ -jQuery(function($){ - $.datepicker.regional['sr-SR'] = { - closeText: 'Zatvori', - prevText: '<', - nextText: '>', - currentText: 'Danas', - monthNames: ['Januar','Februar','Mart','April','Maj','Jun', - 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Avg','Sep','Okt','Nov','Dec'], - dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','Četvrtak','Petak','Subota'], - dayNamesShort: ['Ned','Pon','Uto','Sre','Čet','Pet','Sub'], - dayNamesMin: ['Ne','Po','Ut','Sr','Če','Pe','Su'], - weekHeader: 'Sed', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sr-SR']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sr.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sr.js deleted file mode 100644 index 0bd240e6..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sr.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Serbian i18n for the jQuery UI date picker plugin. */ -/* Written by Dejan Dimić. */ -jQuery(function($){ - $.datepicker.regional['sr'] = { - closeText: 'Затвори', - prevText: '<', - nextText: '>', - currentText: 'Данас', - monthNames: ['Јануар','Фебруар','Март','Април','Мај','Јун', - 'Јул','Август','Септембар','Октобар','Новембар','Децембар'], - monthNamesShort: ['Јан','Феб','Мар','Апр','Мај','Јун', - 'Јул','Авг','Сеп','Окт','Нов','Дец'], - dayNames: ['Недеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'], - dayNamesShort: ['Нед','Пон','Уто','Сре','Чет','Пет','Суб'], - dayNamesMin: ['Не','По','Ут','Ср','Че','Пе','Су'], - weekHeader: 'Сед', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sr']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sv.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sv.js deleted file mode 100644 index e5f549fb..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-sv.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Swedish initialisation for the jQuery UI date picker plugin. */ -/* Written by Anders Ekdahl ( anders@nomadiz.se). */ -jQuery(function($){ - $.datepicker.regional['sv'] = { - closeText: 'Stäng', - prevText: '«Förra', - nextText: 'Nästa»', - currentText: 'Idag', - monthNames: ['Januari','Februari','Mars','April','Maj','Juni', - 'Juli','Augusti','September','Oktober','November','December'], - monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun', - 'Jul','Aug','Sep','Okt','Nov','Dec'], - dayNamesShort: ['Sön','MÃ¥n','Tis','Ons','Tor','Fre','Lör'], - dayNames: ['Söndag','MÃ¥ndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'], - dayNamesMin: ['Sö','MÃ¥','Ti','On','To','Fr','Lö'], - weekHeader: 'Ve', - dateFormat: 'yy-mm-dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['sv']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ta.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ta.js deleted file mode 100644 index 40431ed8..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-ta.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by S A Sureshkumar (saskumar@live.com). */ -jQuery(function($){ - $.datepicker.regional['ta'] = { - closeText: 'மூடு', - prevText: 'முன்னையது', - nextText: 'அடுத்தது', - currentText: 'இன்று', - monthNames: ['தை','மாசி','பங்குனி','சித்திரை','வைகாசி','ஆனி', - 'ஆடி','ஆவணி','புரட்டாசி','ஐப்பசி','கார்த்திகை','மார்கழி'], - monthNamesShort: ['தை','மாசி','பங்','சித்','வைகா','ஆனி', - 'ஆடி','ஆவ','புர','ஐப்','கார்','மார்'], - dayNames: ['ஞாயிற்றுக்கிழமை','திங்கட்கிழமை','செவ்வாய்க்கிழமை','புதன்கிழமை','வியாழக்கிழமை','வெள்ளிக்கிழமை','சனிக்கிழமை'], - dayNamesShort: ['ஞாயிறு','திங்கள்','செவ்வாய்','புதன்','வியாழன்','வெள்ளி','சனி'], - dayNamesMin: ['ஞா','தி','செ','பு','வி','வெ','ச'], - weekHeader: 'Не', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['ta']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-th.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-th.js deleted file mode 100644 index 2e5300cf..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-th.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Thai initialisation for the jQuery UI date picker plugin. */ -/* Written by pipo (pipo@sixhead.com). */ -jQuery(function($){ - $.datepicker.regional['th'] = { - closeText: 'ปิด', - prevText: '« à¸¢à¹‰à¸­à¸™', - nextText: 'ถัดไป »', - currentText: 'วันนี้', - monthNames: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน', - 'กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'], - monthNamesShort: ['ม.ค.','ก.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.', - 'ก.ค.','ส.ค.','ก.ย.','ต.ค.','พ.ย.','ธ.ค.'], - dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์'], - dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], - dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'], - weekHeader: 'Wk', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['th']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-tj.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-tj.js deleted file mode 100644 index ed662392..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-tj.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Abdurahmon Saidov (saidovab@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['tj'] = { - closeText: 'Идома', - prevText: '<Қафо', - nextText: 'Пеш>', - currentText: 'Имрӯз', - monthNames: ['Январ','Феврал','Март','Апрел','Май','Июн', - 'Июл','Август','Сентябр','Октябр','Ноябр','Декабр'], - monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', - 'Июл','Авг','Сен','Окт','Ноя','Дек'], - dayNames: ['якшанбе','душанбе','сешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'], - dayNamesShort: ['якш','душ','сеш','чор','пан','ҷум','шан'], - dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'], - weekHeader: 'Хф', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['tj']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-tr.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-tr.js deleted file mode 100644 index dedfc7ff..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-tr.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Turkish initialisation for the jQuery UI date picker plugin. */ -/* Written by Izzet Emre Erkan (kara@karalamalar.net). */ -jQuery(function($){ - $.datepicker.regional['tr'] = { - closeText: 'kapat', - prevText: '<geri', - nextText: 'ileri>', - currentText: 'bugün', - monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran', - 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'], - monthNamesShort: ['Oca','Şub','Mar','Nis','May','Haz', - 'Tem','Ağu','Eyl','Eki','Kas','Ara'], - dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'], - dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], - dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'], - weekHeader: 'Hf', - dateFormat: 'dd.mm.yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['tr']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-uk.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-uk.js deleted file mode 100644 index 2718f5d1..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-uk.js +++ /dev/null @@ -1,24 +0,0 @@ -/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */ -/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */ -/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['uk'] = { - closeText: 'Закрити', - prevText: '<', - nextText: '>', - currentText: 'Сьогодні', - monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень', - 'Липень','Серпень','Вересень','Жовтень','Листопад','Грудень'], - monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер', - 'Лип','Сер','Вер','Жов','Лис','Гру'], - dayNames: ['неділя','понеділок','вівторок','середа','четвер','п’ятниця','субота'], - dayNamesShort: ['нед','пнд','вів','срд','чтв','птн','сбт'], - dayNamesMin: ['Нд','Пн','Вт','Ср','Чт','Пт','Сб'], - weekHeader: 'Тиж', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['uk']); -}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-vi.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-vi.js deleted file mode 100644 index 1d8f7bbd..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-vi.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Vietnamese initialisation for the jQuery UI date picker plugin. */ -/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */ -jQuery(function($){ - $.datepicker.regional['vi'] = { - closeText: 'Đóng', - prevText: '<Trước', - nextText: 'Tiếp>', - currentText: 'Hôm nay', - monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng TÆ°', 'Tháng Năm', 'Tháng Sáu', - 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng Mười', 'Tháng Mười Một', 'Tháng Mười Hai'], - monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6', - 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'], - dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ TÆ°', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'], - dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], - dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'], - weekHeader: 'Tu', - dateFormat: 'dd/mm/yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; - $.datepicker.setDefaults($.datepicker.regional['vi']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-zh-CN.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-zh-CN.js deleted file mode 100644 index 6c4883f5..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-zh-CN.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by Cloudream (cloudream@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-CN'] = { - closeText: '关闭', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - monthNamesShort: ['一','二','三','四','五','六', - '七','八','九','十','十一','十二'], - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['日','一','二','三','四','五','六'], - weekHeader: '周', - dateFormat: 'yy-mm-dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: 'å¹´'}; - $.datepicker.setDefaults($.datepicker.regional['zh-CN']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-zh-HK.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-zh-HK.js deleted file mode 100644 index 06c4c628..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-zh-HK.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by SCCY (samuelcychan@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-HK'] = { - closeText: '關閉', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - monthNamesShort: ['一','二','三','四','五','六', - '七','八','九','十','十一','十二'], - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['日','一','二','三','四','五','六'], - weekHeader: '周', - dateFormat: 'dd-mm-yy', - firstDay: 0, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: 'å¹´'}; - $.datepicker.setDefaults($.datepicker.regional['zh-HK']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-zh-TW.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-zh-TW.js deleted file mode 100644 index dd51e359..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/i18n/jquery.ui.datepicker-zh-TW.js +++ /dev/null @@ -1,23 +0,0 @@ -/* Chinese initialisation for the jQuery UI date picker plugin. */ -/* Written by Ressol (ressol@gmail.com). */ -jQuery(function($){ - $.datepicker.regional['zh-TW'] = { - closeText: '關閉', - prevText: '<上月', - nextText: '下月>', - currentText: '今天', - monthNames: ['一月','二月','三月','四月','五月','六月', - '七月','八月','九月','十月','十一月','十二月'], - monthNamesShort: ['一','二','三','四','五','六', - '七','八','九','十','十一','十二'], - dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'], - dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'], - dayNamesMin: ['日','一','二','三','四','五','六'], - weekHeader: '周', - dateFormat: 'yy/mm/dd', - firstDay: 1, - isRTL: false, - showMonthAfterYear: true, - yearSuffix: 'å¹´'}; - $.datepicker.setDefaults($.datepicker.regional['zh-TW']); -}); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery-ui.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery-ui.js index 51f7c50f..02135523 100644 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery-ui.js +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery-ui.js @@ -1,897 +1,993 @@ +/*! jQuery UI - v1.12.1 - 2016-09-14 +* http://jqueryui.com +* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +(function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define([ "jquery" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +}(function( $ ) { + +$.ui = $.ui || {}; + +var version = $.ui.version = "1.12.1"; + + /*! - * jQuery UI 1.8.21 + * jQuery UI Widget 1.12.1 + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. * http://jquery.org/license - * - * http://docs.jquery.com/UI */ -(function( $, undefined ) { -// prevent duplicate loading -// this is only a problem because we proxy existing functions -// and we don't want to double proxy them -$.ui = $.ui || {}; -if ( $.ui.version ) { - return; -} +//>>label: Widget +//>>group: Core +//>>description: Provides a factory for creating stateful widgets with a common API. +//>>docs: http://api.jqueryui.com/jQuery.widget/ +//>>demos: http://jqueryui.com/widget/ -$.extend( $.ui, { - version: "1.8.21", - - keyCode: { - ALT: 18, - BACKSPACE: 8, - CAPS_LOCK: 20, - COMMA: 188, - COMMAND: 91, - COMMAND_LEFT: 91, // COMMAND - COMMAND_RIGHT: 93, - CONTROL: 17, - DELETE: 46, - DOWN: 40, - END: 35, - ENTER: 13, - ESCAPE: 27, - HOME: 36, - INSERT: 45, - LEFT: 37, - MENU: 93, // COMMAND_RIGHT - NUMPAD_ADD: 107, - NUMPAD_DECIMAL: 110, - NUMPAD_DIVIDE: 111, - NUMPAD_ENTER: 108, - NUMPAD_MULTIPLY: 106, - NUMPAD_SUBTRACT: 109, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - RIGHT: 39, - SHIFT: 16, - SPACE: 32, - TAB: 9, - UP: 38, - WINDOWS: 91 // COMMAND - } -}); - -// plugins -$.fn.extend({ - propAttr: $.fn.prop || $.fn.attr, - - _focus: $.fn.focus, - focus: function( delay, fn ) { - return typeof delay === "number" ? - this.each(function() { - var elem = this; - setTimeout(function() { - $( elem ).focus(); - if ( fn ) { - fn.call( elem ); - } - }, delay ); - }) : - this._focus.apply( this, arguments ); - }, - scrollParent: function() { - var scrollParent; - if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { - scrollParent = this.parents().filter(function() { - return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); - }).eq(0); - } else { - scrollParent = this.parents().filter(function() { - return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); - }).eq(0); - } - - return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; - }, - - zIndex: function( zIndex ) { - if ( zIndex !== undefined ) { - return this.css( "zIndex", zIndex ); - } - - if ( this.length ) { - var elem = $( this[ 0 ] ), position, value; - while ( elem.length && elem[ 0 ] !== document ) { - // Ignore z-index if position is set to a value where z-index is ignored by the browser - // This makes behavior of this function consistent across browsers - // WebKit always returns auto if the element is positioned - position = elem.css( "position" ); - if ( position === "absolute" || position === "relative" || position === "fixed" ) { - // IE returns 0 when zIndex is not specified - // other browsers return a string - // we ignore the case of nested elements with an explicit value of 0 - //
    - value = parseInt( elem.css( "zIndex" ), 10 ); - if ( !isNaN( value ) && value !== 0 ) { - return value; - } + +var widgetUuid = 0; +var widgetSlice = Array.prototype.slice; + +$.cleanData = ( function( orig ) { + return function( elems ) { + var events, elem, i; + for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) { + try { + + // Only trigger remove when necessary to save time + events = $._data( elem, "events" ); + if ( events && events.remove ) { + $( elem ).triggerHandler( "remove" ); } - elem = elem.parent(); - } + + // Http://bugs.jquery.com/ticket/8235 + } catch ( e ) {} } + orig( elems ); + }; +} )( $.cleanData ); - return 0; - }, +$.widget = function( name, base, prototype ) { + var existingConstructor, constructor, basePrototype; - disableSelection: function() { - return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + - ".ui-disableSelection", function( event ) { - event.preventDefault(); - }); - }, + // ProxiedPrototype allows the provided prototype to remain unmodified + // so that it can be used as a mixin for multiple widgets (#8876) + var proxiedPrototype = {}; - enableSelection: function() { - return this.unbind( ".ui-disableSelection" ); - } -}); - -$.each( [ "Width", "Height" ], function( i, name ) { - var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], - type = name.toLowerCase(), - orig = { - innerWidth: $.fn.innerWidth, - innerHeight: $.fn.innerHeight, - outerWidth: $.fn.outerWidth, - outerHeight: $.fn.outerHeight - }; + var namespace = name.split( "." )[ 0 ]; + name = name.split( "." )[ 1 ]; + var fullName = namespace + "-" + name; - function reduce( elem, size, border, margin ) { - $.each( side, function() { - size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0; - if ( border ) { - size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0; - } - if ( margin ) { - size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0; - } - }); - return size; + if ( !prototype ) { + prototype = base; + base = $.Widget; } - $.fn[ "inner" + name ] = function( size ) { - if ( size === undefined ) { - return orig[ "inner" + name ].call( this ); - } + if ( $.isArray( prototype ) ) { + prototype = $.extend.apply( null, [ {} ].concat( prototype ) ); + } - return this.each(function() { - $( this ).css( type, reduce( this, size ) + "px" ); - }); + // Create selector for plugin + $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { + return !!$.data( elem, fullName ); }; - $.fn[ "outer" + name] = function( size, margin ) { - if ( typeof size !== "number" ) { - return orig[ "outer" + name ].call( this, size ); + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + + // Allow instantiation without "new" keyword + if ( !this._createWidget ) { + return new constructor( options, element ); } - return this.each(function() { - $( this).css( type, reduce( this, size, true, margin ) + "px" ); - }); + // Allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } }; -}); -// selectors -function focusable( element, isTabIndexNotNaN ) { - var nodeName = element.nodeName.toLowerCase(); - if ( "area" === nodeName ) { - var map = element.parentNode, - mapName = map.name, - img; - if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { - return false; - } - img = $( "img[usemap=#" + mapName + "]" )[0]; - return !!img && visible( img ); - } - return ( /input|select|textarea|button|object/.test( nodeName ) - ? !element.disabled - : "a" == nodeName - ? element.href || isTabIndexNotNaN - : isTabIndexNotNaN) - // the element and all of its ancestors must be visible - && visible( element ); -} + // Extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, -function visible( element ) { - return !$( element ).parents().andSelf().filter(function() { - return $.curCSS( this, "visibility" ) === "hidden" || - $.expr.filters.hidden( this ); - }).length; -} + // Copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), -$.extend( $.expr[ ":" ], { - data: function( elem, i, match ) { - return !!$.data( elem, match[ 3 ] ); - }, + // Track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + } ); - focusable: function( element ) { - return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); - }, + basePrototype = new base(); - tabbable: function( element ) { - var tabIndex = $.attr( element, "tabindex" ), - isTabIndexNaN = isNaN( tabIndex ); - return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); - } -}); + // We need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend( {}, basePrototype.options ); + $.each( prototype, function( prop, value ) { + if ( !$.isFunction( value ) ) { + proxiedPrototype[ prop ] = value; + return; + } + proxiedPrototype[ prop ] = ( function() { + function _super() { + return base.prototype[ prop ].apply( this, arguments ); + } + + function _superApply( args ) { + return base.prototype[ prop ].apply( this, args ); + } -// support -$(function() { - var body = document.body, - div = body.appendChild( div = document.createElement( "div" ) ); + return function() { + var __super = this._super; + var __superApply = this._superApply; + var returnValue; - // access offsetHeight before setting the style to prevent a layout bug - // in IE 9 which causes the elemnt to continue to take up space even - // after it is removed from the DOM (#8026) - div.offsetHeight; + this._super = _super; + this._superApply = _superApply; - $.extend( div.style, { - minHeight: "100px", - height: "auto", - padding: 0, - borderWidth: 0 - }); + returnValue = value.apply( this, arguments ); + + this._super = __super; + this._superApply = __superApply; + + return returnValue; + }; + } )(); + } ); + constructor.prototype = $.widget.extend( basePrototype, { + + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name + }, proxiedPrototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + widgetFullName: fullName + } ); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // Redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, + child._proto ); + } ); + + // Remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + delete existingConstructor._childConstructors; + } else { + base._childConstructors.push( constructor ); + } - $.support.minHeight = div.offsetHeight === 100; - $.support.selectstart = "onselectstart" in div; + $.widget.bridge( name, constructor ); - // set display to none to avoid a layout bug in IE - // http://dev.jquery.com/ticket/4014 - body.removeChild( div ).style.display = "none"; -}); + return constructor; +}; +$.widget.extend = function( target ) { + var input = widgetSlice.call( arguments, 1 ); + var inputIndex = 0; + var inputLength = input.length; + var key; + var value; + for ( ; inputIndex < inputLength; inputIndex++ ) { + for ( key in input[ inputIndex ] ) { + value = input[ inputIndex ][ key ]; + if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { + // Clone objects + if ( $.isPlainObject( value ) ) { + target[ key ] = $.isPlainObject( target[ key ] ) ? + $.widget.extend( {}, target[ key ], value ) : + // Don't extend strings, arrays, etc. with objects + $.widget.extend( {}, value ); -// deprecated -$.extend( $.ui, { - // $.ui.plugin is deprecated. Use the proxy pattern instead. - plugin: { - add: function( module, option, set ) { - var proto = $.ui[ module ].prototype; - for ( var i in set ) { - proto.plugins[ i ] = proto.plugins[ i ] || []; - proto.plugins[ i ].push( [ option, set[ i ] ] ); - } - }, - call: function( instance, name, args ) { - var set = instance.plugins[ name ]; - if ( !set || !instance.element[ 0 ].parentNode ) { - return; - } - - for ( var i = 0; i < set.length; i++ ) { - if ( instance.options[ set[ i ][ 0 ] ] ) { - set[ i ][ 1 ].apply( instance.element, args ); + // Copy everything else by reference + } else { + target[ key ] = value; } } } - }, - - // will be deprecated when we switch to jQuery 1.4 - use jQuery.contains() - contains: function( a, b ) { - return document.compareDocumentPosition ? - a.compareDocumentPosition( b ) & 16 : - a !== b && a.contains( b ); - }, - - // only used by resizable - hasScroll: function( el, a ) { - - //If overflow is hidden, the element might have extra content, but the user wants to hide it - if ( $( el ).css( "overflow" ) === "hidden") { - return false; - } - - var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", - has = false; - - if ( el[ scroll ] > 0 ) { - return true; - } - - // TODO: determine which cases actually cause this to happen - // if the element doesn't have the scroll set, see if it's possible to - // set the scroll - el[ scroll ] = 1; - has = ( el[ scroll ] > 0 ); - el[ scroll ] = 0; - return has; - }, - - // these are odd functions, fix the API or move into individual plugins - isOverAxis: function( x, reference, size ) { - //Determines when x coordinate is over "b" element axis - return ( x > reference ) && ( x < ( reference + size ) ); - }, - isOver: function( y, x, top, left, height, width ) { - //Determines when x, y coordinates is over "b" element - return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width ); } -}); - -})( jQuery ); -/*! - * jQuery UI Widget 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function( $, undefined ) { - -// jQuery 1.4+ -if ( $.cleanData ) { - var _cleanData = $.cleanData; - $.cleanData = function( elems ) { - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { - try { - $( elem ).triggerHandler( "remove" ); - // http://bugs.jquery.com/ticket/8235 - } catch( e ) {} - } - _cleanData( elems ); - }; -} else { - var _remove = $.fn.remove; - $.fn.remove = function( selector, keepData ) { - return this.each(function() { - if ( !keepData ) { - if ( !selector || $.filter( selector, [ this ] ).length ) { - $( "*", this ).add( [ this ] ).each(function() { - try { - $( this ).triggerHandler( "remove" ); - // http://bugs.jquery.com/ticket/8235 - } catch( e ) {} - }); - } - } - return _remove.call( $(this), selector, keepData ); - }); - }; -} + return target; +}; -$.widget = function( name, base, prototype ) { - var namespace = name.split( "." )[ 0 ], - fullName; - name = name.split( "." )[ 1 ]; - fullName = namespace + "-" + name; +$.widget.bridge = function( name, object ) { + var fullName = object.prototype.widgetFullName || name; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string"; + var args = widgetSlice.call( arguments, 1 ); + var returnValue = this; - if ( !prototype ) { - prototype = base; - base = $.Widget; - } + if ( isMethodCall ) { - // create selector for plugin - $.expr[ ":" ][ fullName ] = function( elem ) { - return !!$.data( elem, name ); - }; + // If this is an empty collection, we need to have the instance method + // return undefined instead of the jQuery instance + if ( !this.length && options === "instance" ) { + returnValue = undefined; + } else { + this.each( function() { + var methodValue; + var instance = $.data( this, fullName ); - $[ namespace ] = $[ namespace ] || {}; - $[ namespace ][ name ] = function( options, element ) { - // allow instantiation without initializing for simple inheritance - if ( arguments.length ) { - this._createWidget( options, element ); - } - }; + if ( options === "instance" ) { + returnValue = instance; + return false; + } - var basePrototype = new base(); - // we need to make the options hash a property directly on the new instance - // otherwise we'll modify the options hash on the prototype that we're - // inheriting from -// $.each( basePrototype, function( key, val ) { -// if ( $.isPlainObject(val) ) { -// basePrototype[ key ] = $.extend( {}, val ); -// } -// }); - basePrototype.options = $.extend( true, {}, basePrototype.options ); - $[ namespace ][ name ].prototype = $.extend( true, basePrototype, { - namespace: namespace, - widgetName: name, - widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name, - widgetBaseClass: fullName - }, prototype ); + if ( !instance ) { + return $.error( "cannot call methods on " + name + + " prior to initialization; " + + "attempted to call method '" + options + "'" ); + } - $.widget.bridge( name, $[ namespace ][ name ] ); -}; + if ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) { + return $.error( "no such method '" + options + "' for " + name + + " widget instance" ); + } -$.widget.bridge = function( name, object ) { - $.fn[ name ] = function( options ) { - var isMethodCall = typeof options === "string", - args = Array.prototype.slice.call( arguments, 1 ), - returnValue = this; + methodValue = instance[ options ].apply( instance, args ); - // allow multiple hashes to be passed on init - options = !isMethodCall && args.length ? - $.extend.apply( null, [ true, options ].concat(args) ) : - options; + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue && methodValue.jquery ? + returnValue.pushStack( methodValue.get() ) : + methodValue; + return false; + } + } ); + } + } else { - // prevent calls to internal methods - if ( isMethodCall && options.charAt( 0 ) === "_" ) { - return returnValue; - } + // Allow multiple hashes to be passed on init + if ( args.length ) { + options = $.widget.extend.apply( null, [ options ].concat( args ) ); + } - if ( isMethodCall ) { - this.each(function() { - var instance = $.data( this, name ), - methodValue = instance && $.isFunction( instance[options] ) ? - instance[ options ].apply( instance, args ) : - instance; - // TODO: add this back in 1.9 and use $.error() (see #5972) -// if ( !instance ) { -// throw "cannot call methods on " + name + " prior to initialization; " + -// "attempted to call method '" + options + "'"; -// } -// if ( !$.isFunction( instance[options] ) ) { -// throw "no such method '" + options + "' for " + name + " widget instance"; -// } -// var methodValue = instance[ options ].apply( instance, args ); - if ( methodValue !== instance && methodValue !== undefined ) { - returnValue = methodValue; - return false; - } - }); - } else { - this.each(function() { - var instance = $.data( this, name ); + this.each( function() { + var instance = $.data( this, fullName ); if ( instance ) { - instance.option( options || {} )._init(); + instance.option( options || {} ); + if ( instance._init ) { + instance._init(); + } } else { - $.data( this, name, new object( options, this ) ); + $.data( this, fullName, new object( options, this ) ); } - }); + } ); } return returnValue; }; }; -$.Widget = function( options, element ) { - // allow instantiation without initializing for simple inheritance - if ( arguments.length ) { - this._createWidget( options, element ); - } -}; +$.Widget = function( /* options, element */ ) {}; +$.Widget._childConstructors = []; $.Widget.prototype = { widgetName: "widget", widgetEventPrefix: "", + defaultElement: "
    ", + options: { - disabled: false + classes: {}, + disabled: false, + + // Callbacks + create: null }, + _createWidget: function( options, element ) { - // $.widget.bridge stores the plugin instance, but we do it anyway - // so that it's stored even before the _create function runs - $.data( element, this.widgetName, this ); + element = $( element || this.defaultElement || this )[ 0 ]; this.element = $( element ); - this.options = $.extend( true, {}, + this.uuid = widgetUuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + this.classesElementLookup = {}; + + if ( element !== this ) { + $.data( element, this.widgetFullName, this ); + this._on( true, this.element, { + remove: function( event ) { + if ( event.target === element ) { + this.destroy(); + } + } + } ); + this.document = $( element.style ? + + // Element within the document + element.ownerDocument : + + // Element is window or document + element.document || element ); + this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow ); + } + + this.options = $.widget.extend( {}, this.options, this._getCreateOptions(), options ); - var self = this; - this.element.bind( "remove." + this.widgetName, function() { - self.destroy(); - }); - this._create(); - this._trigger( "create" ); + + if ( this.options.disabled ) { + this._setOptionDisabled( this.options.disabled ); + } + + this._trigger( "create", null, this._getCreateEventData() ); this._init(); }, + _getCreateOptions: function() { - return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ]; + return {}; }, - _create: function() {}, - _init: function() {}, + + _getCreateEventData: $.noop, + + _create: $.noop, + + _init: $.noop, destroy: function() { + var that = this; + + this._destroy(); + $.each( this.classesElementLookup, function( key, value ) { + that._removeClass( value, key ); + } ); + + // We can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() this.element - .unbind( "." + this.widgetName ) - .removeData( this.widgetName ); + .off( this.eventNamespace ) + .removeData( this.widgetFullName ); this.widget() - .unbind( "." + this.widgetName ) - .removeAttr( "aria-disabled" ) - .removeClass( - this.widgetBaseClass + "-disabled " + - "ui-state-disabled" ); + .off( this.eventNamespace ) + .removeAttr( "aria-disabled" ); + + // Clean up events and states + this.bindings.off( this.eventNamespace ); }, + _destroy: $.noop, + widget: function() { return this.element; }, option: function( key, value ) { var options = key; + var parts; + var curOption; + var i; if ( arguments.length === 0 ) { - // don't return a reference to the internal hash - return $.extend( {}, this.options ); + + // Don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); } - if (typeof key === "string" ) { - if ( value === undefined ) { - return this.options[ key ]; - } + if ( typeof key === "string" ) { + + // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } options = {}; - options[ key ] = value; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + key = parts.pop(); + if ( arguments.length === 1 ) { + return curOption[ key ] === undefined ? null : curOption[ key ]; + } + curOption[ key ] = value; + } else { + if ( arguments.length === 1 ) { + return this.options[ key ] === undefined ? null : this.options[ key ]; + } + options[ key ] = value; + } } this._setOptions( options ); return this; }, + _setOptions: function( options ) { - var self = this; - $.each( options, function( key, value ) { - self._setOption( key, value ); - }); + var key; + + for ( key in options ) { + this._setOption( key, options[ key ] ); + } return this; }, + _setOption: function( key, value ) { + if ( key === "classes" ) { + this._setOptionClasses( value ); + } + this.options[ key ] = value; if ( key === "disabled" ) { - this.widget() - [ value ? "addClass" : "removeClass"]( - this.widgetBaseClass + "-disabled" + " " + - "ui-state-disabled" ) - .attr( "aria-disabled", value ); + this._setOptionDisabled( value ); } return this; }, + _setOptionClasses: function( value ) { + var classKey, elements, currentElements; + + for ( classKey in value ) { + currentElements = this.classesElementLookup[ classKey ]; + if ( value[ classKey ] === this.options.classes[ classKey ] || + !currentElements || + !currentElements.length ) { + continue; + } + + // We are doing this to create a new jQuery object because the _removeClass() call + // on the next line is going to destroy the reference to the current elements being + // tracked. We need to save a copy of this collection so that we can add the new classes + // below. + elements = $( currentElements.get() ); + this._removeClass( currentElements, classKey ); + + // We don't use _addClass() here, because that uses this.options.classes + // for generating the string of classes. We want to use the value passed in from + // _setOption(), this is the new value of the classes option which was passed to + // _setOption(). We pass this value directly to _classes(). + elements.addClass( this._classes( { + element: elements, + keys: classKey, + classes: value, + add: true + } ) ); + } + }, + + _setOptionDisabled: function( value ) { + this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value ); + + // If the widget is becoming disabled, then nothing is interactive + if ( value ) { + this._removeClass( this.hoverable, null, "ui-state-hover" ); + this._removeClass( this.focusable, null, "ui-state-focus" ); + } + }, + enable: function() { - return this._setOption( "disabled", false ); + return this._setOptions( { disabled: false } ); }, + disable: function() { - return this._setOption( "disabled", true ); + return this._setOptions( { disabled: true } ); }, - _trigger: function( type, event, data ) { - var prop, orig, - callback = this.options[ type ]; - - data = data || {}; - event = $.Event( event ); - event.type = ( type === this.widgetEventPrefix ? - type : - this.widgetEventPrefix + type ).toLowerCase(); - // the original event may come from any element - // so we need to reset the target on the new event - event.target = this.element[ 0 ]; + _classes: function( options ) { + var full = []; + var that = this; - // copy original event properties over to the new event - orig = event.originalEvent; - if ( orig ) { - for ( prop in orig ) { - if ( !( prop in event ) ) { - event[ prop ] = orig[ prop ]; + options = $.extend( { + element: this.element, + classes: this.options.classes || {} + }, options ); + + function processClassString( classes, checkOption ) { + var current, i; + for ( i = 0; i < classes.length; i++ ) { + current = that.classesElementLookup[ classes[ i ] ] || $(); + if ( options.add ) { + current = $( $.unique( current.get().concat( options.element.get() ) ) ); + } else { + current = $( current.not( options.element ).get() ); + } + that.classesElementLookup[ classes[ i ] ] = current; + full.push( classes[ i ] ); + if ( checkOption && options.classes[ classes[ i ] ] ) { + full.push( options.classes[ classes[ i ] ] ); } } } - this.element.trigger( event, data ); - - return !( $.isFunction(callback) && - callback.call( this.element[0], event, data ) === false || - event.isDefaultPrevented() ); - } -}; + this._on( options.element, { + "remove": "_untrackClassesElement" + } ); -})( jQuery ); -/*! - * jQuery UI Mouse 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function( $, undefined ) { + if ( options.keys ) { + processClassString( options.keys.match( /\S+/g ) || [], true ); + } + if ( options.extra ) { + processClassString( options.extra.match( /\S+/g ) || [] ); + } -var mouseHandled = false; -$( document ).mouseup( function( e ) { - mouseHandled = false; -}); + return full.join( " " ); + }, -$.widget("ui.mouse", { - options: { - cancel: ':input,option', - distance: 1, - delay: 0 + _untrackClassesElement: function( event ) { + var that = this; + $.each( that.classesElementLookup, function( key, value ) { + if ( $.inArray( event.target, value ) !== -1 ) { + that.classesElementLookup[ key ] = $( value.not( event.target ).get() ); + } + } ); }, - _mouseInit: function() { - var self = this; - this.element - .bind('mousedown.'+this.widgetName, function(event) { - return self._mouseDown(event); - }) - .bind('click.'+this.widgetName, function(event) { - if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) { - $.removeData(event.target, self.widgetName + '.preventClickEvent'); - event.stopImmediatePropagation(); - return false; - } - }); + _removeClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, false ); + }, - this.started = false; + _addClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, true ); }, - // TODO: make sure destroying one instance of mouse doesn't mess with - // other instances of mouse - _mouseDestroy: function() { - this.element.unbind('.'+this.widgetName); - $(document) - .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); + _toggleClass: function( element, keys, extra, add ) { + add = ( typeof add === "boolean" ) ? add : extra; + var shift = ( typeof element === "string" || element === null ), + options = { + extra: shift ? keys : extra, + keys: shift ? element : keys, + element: shift ? this.element : element, + add: add + }; + options.element.toggleClass( this._classes( options ), add ); + return this; }, - _mouseDown: function(event) { - // don't let more than one widget handle mouseStart - if( mouseHandled ) { return }; + _on: function( suppressDisabledCheck, element, handlers ) { + var delegateElement; + var instance = this; - // we may have missed mouseup (out of window) - (this._mouseStarted && this._mouseUp(event)); + // No suppressDisabledCheck flag, shuffle arguments + if ( typeof suppressDisabledCheck !== "boolean" ) { + handlers = element; + element = suppressDisabledCheck; + suppressDisabledCheck = false; + } - this._mouseDownEvent = event; - - var self = this, - btnIsLeft = (event.which == 1), - // event.target.nodeName works around a bug in IE 8 with - // disabled inputs (#7620) - elIsCancel = (typeof this.options.cancel == "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); - if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { - return true; + // No element argument, shuffle and use this.element + if ( !handlers ) { + handlers = element; + element = this.element; + delegateElement = this.widget(); + } else { + element = delegateElement = $( element ); + this.bindings = this.bindings.add( element ); } - this.mouseDelayMet = !this.options.delay; - if (!this.mouseDelayMet) { - this._mouseDelayTimer = setTimeout(function() { - self.mouseDelayMet = true; - }, this.options.delay); - } + $.each( handlers, function( event, handler ) { + function handlerProxy() { - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = (this._mouseStart(event) !== false); - if (!this._mouseStarted) { - event.preventDefault(); - return true; + // Allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( !suppressDisabledCheck && + ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) ) { + return; + } + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); } - } - // Click event may never have fired (Gecko & Opera) - if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) { - $.removeData(event.target, this.widgetName + '.preventClickEvent'); - } + // Copy the guid so direct unbinding works + if ( typeof handler !== "string" ) { + handlerProxy.guid = handler.guid = + handler.guid || handlerProxy.guid || $.guid++; + } - // these delegates are required to keep context - this._mouseMoveDelegate = function(event) { - return self._mouseMove(event); - }; - this._mouseUpDelegate = function(event) { - return self._mouseUp(event); - }; - $(document) - .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); + var match = event.match( /^([\w:-]*)\s*(.*)$/ ); + var eventName = match[ 1 ] + instance.eventNamespace; + var selector = match[ 2 ]; - event.preventDefault(); - - mouseHandled = true; - return true; + if ( selector ) { + delegateElement.on( eventName, selector, handlerProxy ); + } else { + element.on( eventName, handlerProxy ); + } + } ); }, - _mouseMove: function(event) { - // IE mouseup check - mouseup happened when mouse was out of window - if ($.browser.msie && !(document.documentMode >= 9) && !event.button) { - return this._mouseUp(event); - } + _off: function( element, eventName ) { + eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) + + this.eventNamespace; + element.off( eventName ).off( eventName ); - if (this._mouseStarted) { - this._mouseDrag(event); - return event.preventDefault(); - } + // Clear the stack to avoid memory leaks (#10056) + this.bindings = $( this.bindings.not( element ).get() ); + this.focusable = $( this.focusable.not( element ).get() ); + this.hoverable = $( this.hoverable.not( element ).get() ); + }, - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = - (this._mouseStart(this._mouseDownEvent, event) !== false); - (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); + _delay: function( handler, delay ) { + function handlerProxy() { + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); } + var instance = this; + return setTimeout( handlerProxy, delay || 0 ); + }, - return !this._mouseStarted; + _hoverable: function( element ) { + this.hoverable = this.hoverable.add( element ); + this._on( element, { + mouseenter: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-hover" ); + }, + mouseleave: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-hover" ); + } + } ); + }, + + _focusable: function( element ) { + this.focusable = this.focusable.add( element ); + this._on( element, { + focusin: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-focus" ); + }, + focusout: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-focus" ); + } + } ); }, - _mouseUp: function(event) { - $(document) - .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); + _trigger: function( type, event, data ) { + var prop, orig; + var callback = this.options[ type ]; - if (this._mouseStarted) { - this._mouseStarted = false; + data = data || {}; + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + + // The original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; - if (event.target == this._mouseDownEvent.target) { - $.data(event.target, this.widgetName + '.preventClickEvent', true); + // Copy original event properties over to the new event + orig = event.originalEvent; + if ( orig ) { + for ( prop in orig ) { + if ( !( prop in event ) ) { + event[ prop ] = orig[ prop ]; + } } + } + + this.element.trigger( event, data ); + return !( $.isFunction( callback ) && + callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false || + event.isDefaultPrevented() ); + } +}; - this._mouseStop(event); +$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { + $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { + if ( typeof options === "string" ) { + options = { effect: options }; } - return false; - }, + var hasOptions; + var effectName = !options ? + method : + options === true || typeof options === "number" ? + defaultEffect : + options.effect || defaultEffect; - _mouseDistanceMet: function(event) { - return (Math.max( - Math.abs(this._mouseDownEvent.pageX - event.pageX), - Math.abs(this._mouseDownEvent.pageY - event.pageY) - ) >= this.options.distance - ); - }, + options = options || {}; + if ( typeof options === "number" ) { + options = { duration: options }; + } - _mouseDelayMet: function(event) { - return this.mouseDelayMet; - }, + hasOptions = !$.isEmptyObject( options ); + options.complete = callback; + + if ( options.delay ) { + element.delay( options.delay ); + } + + if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { + element[ method ]( options ); + } else if ( effectName !== method && element[ effectName ] ) { + element[ effectName ]( options.duration, options.easing, callback ); + } else { + element.queue( function( next ) { + $( this )[ method ](); + if ( callback ) { + callback.call( element[ 0 ] ); + } + next(); + } ); + } + }; +} ); + +var widget = $.widget; - // These are placeholder methods, to be overriden by extending plugin - _mouseStart: function(event) {}, - _mouseDrag: function(event) {}, - _mouseStop: function(event) {}, - _mouseCapture: function(event) { return true; } -}); -})(jQuery); /*! - * jQuery UI Position 1.8.21 + * jQuery UI Position 1.12.1 + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. * http://jquery.org/license * - * http://docs.jquery.com/UI/Position + * http://api.jqueryui.com/position/ */ -(function( $, undefined ) { -$.ui = $.ui || {}; +//>>label: Position +//>>group: Core +//>>description: Positions elements relative to other elements. +//>>docs: http://api.jqueryui.com/position/ +//>>demos: http://jqueryui.com/position/ + + +( function() { +var cachedScrollbarWidth, + max = Math.max, + abs = Math.abs, + rhorizontal = /left|center|right/, + rvertical = /top|center|bottom/, + roffset = /[\+\-]\d+(\.[\d]+)?%?/, + rposition = /^\w+/, + rpercent = /%$/, + _position = $.fn.position; + +function getOffsets( offsets, width, height ) { + return [ + parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), + parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) + ]; +} + +function parseCss( element, property ) { + return parseInt( $.css( element, property ), 10 ) || 0; +} + +function getDimensions( elem ) { + var raw = elem[ 0 ]; + if ( raw.nodeType === 9 ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: 0, left: 0 } + }; + } + if ( $.isWindow( raw ) ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: elem.scrollTop(), left: elem.scrollLeft() } + }; + } + if ( raw.preventDefault ) { + return { + width: 0, + height: 0, + offset: { top: raw.pageY, left: raw.pageX } + }; + } + return { + width: elem.outerWidth(), + height: elem.outerHeight(), + offset: elem.offset() + }; +} + +$.position = { + scrollbarWidth: function() { + if ( cachedScrollbarWidth !== undefined ) { + return cachedScrollbarWidth; + } + var w1, w2, + div = $( "
    " + + "
    " ), + innerDiv = div.children()[ 0 ]; + + $( "body" ).append( div ); + w1 = innerDiv.offsetWidth; + div.css( "overflow", "scroll" ); + + w2 = innerDiv.offsetWidth; + + if ( w1 === w2 ) { + w2 = div[ 0 ].clientWidth; + } + + div.remove(); -var horizontalPositions = /left|center|right/, - verticalPositions = /top|center|bottom/, - center = "center", - support = {}, - _position = $.fn.position, - _offset = $.fn.offset; + return ( cachedScrollbarWidth = w1 - w2 ); + }, + getScrollInfo: function( within ) { + var overflowX = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-x" ), + overflowY = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-y" ), + hasOverflowX = overflowX === "scroll" || + ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ), + hasOverflowY = overflowY === "scroll" || + ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight ); + return { + width: hasOverflowY ? $.position.scrollbarWidth() : 0, + height: hasOverflowX ? $.position.scrollbarWidth() : 0 + }; + }, + getWithinInfo: function( element ) { + var withinElement = $( element || window ), + isWindow = $.isWindow( withinElement[ 0 ] ), + isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9, + hasOffset = !isWindow && !isDocument; + return { + element: withinElement, + isWindow: isWindow, + isDocument: isDocument, + offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 }, + scrollLeft: withinElement.scrollLeft(), + scrollTop: withinElement.scrollTop(), + width: withinElement.outerWidth(), + height: withinElement.outerHeight() + }; + } +}; $.fn.position = function( options ) { if ( !options || !options.of ) { return _position.apply( this, arguments ); } - // make a copy, we don't want to modify arguments + // Make a copy, we don't want to modify arguments options = $.extend( {}, options ); - var target = $( options.of ), - targetElem = target[0], + var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, + target = $( options.of ), + within = $.position.getWithinInfo( options.within ), + scrollInfo = $.position.getScrollInfo( within ), collision = ( options.collision || "flip" ).split( " " ), - offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ], - targetWidth, - targetHeight, - basePosition; - - if ( targetElem.nodeType === 9 ) { - targetWidth = target.width(); - targetHeight = target.height(); - basePosition = { top: 0, left: 0 }; - // TODO: use $.isWindow() in 1.9 - } else if ( targetElem.setTimeout ) { - targetWidth = target.width(); - targetHeight = target.height(); - basePosition = { top: target.scrollTop(), left: target.scrollLeft() }; - } else if ( targetElem.preventDefault ) { - // force left top to allow flipping + offsets = {}; + + dimensions = getDimensions( target ); + if ( target[ 0 ].preventDefault ) { + + // Force left top to allow flipping options.at = "left top"; - targetWidth = targetHeight = 0; - basePosition = { top: options.of.pageY, left: options.of.pageX }; - } else { - targetWidth = target.outerWidth(); - targetHeight = target.outerHeight(); - basePosition = target.offset(); } + targetWidth = dimensions.width; + targetHeight = dimensions.height; + targetOffset = dimensions.offset; + + // Clone to reuse original targetOffset later + basePosition = $.extend( {}, targetOffset ); - // force my and at to have valid horizontal and veritcal positions - // if a value is missing or invalid, it will be converted to center + // Force my and at to have valid horizontal and vertical positions + // if a value is missing or invalid, it will be converted to center $.each( [ "my", "at" ], function() { - var pos = ( options[this] || "" ).split( " " ); - if ( pos.length === 1) { - pos = horizontalPositions.test( pos[0] ) ? - pos.concat( [center] ) : - verticalPositions.test( pos[0] ) ? - [ center ].concat( pos ) : - [ center, center ]; - } - pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center; - pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center; - options[ this ] = pos; - }); - - // normalize collision option + var pos = ( options[ this ] || "" ).split( " " ), + horizontalOffset, + verticalOffset; + + if ( pos.length === 1 ) { + pos = rhorizontal.test( pos[ 0 ] ) ? + pos.concat( [ "center" ] ) : + rvertical.test( pos[ 0 ] ) ? + [ "center" ].concat( pos ) : + [ "center", "center" ]; + } + pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; + pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; + + // Calculate offsets + horizontalOffset = roffset.exec( pos[ 0 ] ); + verticalOffset = roffset.exec( pos[ 1 ] ); + offsets[ this ] = [ + horizontalOffset ? horizontalOffset[ 0 ] : 0, + verticalOffset ? verticalOffset[ 0 ] : 0 + ]; + + // Reduce to just the positions without the offsets + options[ this ] = [ + rposition.exec( pos[ 0 ] )[ 0 ], + rposition.exec( pos[ 1 ] )[ 0 ] + ]; + } ); + + // Normalize collision option if ( collision.length === 1 ) { collision[ 1 ] = collision[ 0 ]; } - // normalize offset option - offset[ 0 ] = parseInt( offset[0], 10 ) || 0; - if ( offset.length === 1 ) { - offset[ 1 ] = offset[ 0 ]; - } - offset[ 1 ] = parseInt( offset[1], 10 ) || 0; - - if ( options.at[0] === "right" ) { + if ( options.at[ 0 ] === "right" ) { basePosition.left += targetWidth; - } else if ( options.at[0] === center ) { + } else if ( options.at[ 0 ] === "center" ) { basePosition.left += targetWidth / 2; } - if ( options.at[1] === "bottom" ) { + if ( options.at[ 1 ] === "bottom" ) { basePosition.top += targetHeight; - } else if ( options.at[1] === center ) { + } else if ( options.at[ 1 ] === "center" ) { basePosition.top += targetHeight / 2; } - basePosition.left += offset[ 0 ]; - basePosition.top += offset[ 1 ]; + atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); + basePosition.left += atOffset[ 0 ]; + basePosition.top += atOffset[ 1 ]; - return this.each(function() { - var elem = $( this ), + return this.each( function() { + var collisionPosition, using, + elem = $( this ), elemWidth = elem.outerWidth(), elemHeight = elem.outerHeight(), - marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0, - marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0, - collisionWidth = elemWidth + marginLeft + - ( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ), - collisionHeight = elemHeight + marginTop + - ( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ), + marginLeft = parseCss( this, "marginLeft" ), + marginTop = parseCss( this, "marginTop" ), + collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + + scrollInfo.width, + collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + + scrollInfo.height, position = $.extend( {}, basePosition ), - collisionPosition; + myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); - if ( options.my[0] === "right" ) { + if ( options.my[ 0 ] === "right" ) { position.left -= elemWidth; - } else if ( options.my[0] === center ) { + } else if ( options.my[ 0 ] === "center" ) { position.left -= elemWidth / 2; } - if ( options.my[1] === "bottom" ) { + if ( options.my[ 1 ] === "bottom" ) { position.top -= elemHeight; - } else if ( options.my[1] === center ) { + } else if ( options.my[ 1 ] === "center" ) { position.top -= elemHeight / 2; } - // prevent fractions if jQuery version doesn't support them (see #5280) - if ( !support.fractions ) { - position.left = Math.round( position.left ); - position.top = Math.round( position.top ); - } + position.left += myOffset[ 0 ]; + position.top += myOffset[ 1 ]; collisionPosition = { - left: position.left - marginLeft, - top: position.top - marginTop + marginLeft: marginLeft, + marginTop: marginTop }; $.each( [ "left", "top" ], function( i, dir ) { - if ( $.ui.position[ collision[i] ] ) { - $.ui.position[ collision[i] ][ dir ]( position, { + if ( $.ui.position[ collision[ i ] ] ) { + $.ui.position[ collision[ i ] ][ dir ]( position, { targetWidth: targetWidth, targetHeight: targetHeight, elemWidth: elemWidth, @@ -899,41 +995,160 @@ $.fn.position = function( options ) { collisionPosition: collisionPosition, collisionWidth: collisionWidth, collisionHeight: collisionHeight, - offset: offset, + offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], my: options.my, - at: options.at - }); + at: options.at, + within: within, + elem: elem + } ); } - }); - - if ( $.fn.bgiframe ) { - elem.bgiframe(); + } ); + + if ( options.using ) { + + // Adds feedback as second argument to using callback, if present + using = function( props ) { + var left = targetOffset.left - position.left, + right = left + targetWidth - elemWidth, + top = targetOffset.top - position.top, + bottom = top + targetHeight - elemHeight, + feedback = { + target: { + element: target, + left: targetOffset.left, + top: targetOffset.top, + width: targetWidth, + height: targetHeight + }, + element: { + element: elem, + left: position.left, + top: position.top, + width: elemWidth, + height: elemHeight + }, + horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", + vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" + }; + if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { + feedback.horizontal = "center"; + } + if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { + feedback.vertical = "middle"; + } + if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { + feedback.important = "horizontal"; + } else { + feedback.important = "vertical"; + } + options.using.call( this, props, feedback ); + }; } - elem.offset( $.extend( position, { using: options.using } ) ); - }); + + elem.offset( $.extend( position, { using: using } ) ); + } ); }; $.ui.position = { fit: { left: function( position, data ) { - var win = $( window ), - over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(); - position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left ); + var within = data.within, + withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, + outerWidth = within.width, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = withinOffset - collisionPosLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, + newOverRight; + + // Element is wider than within + if ( data.collisionWidth > outerWidth ) { + + // Element is initially over the left side of within + if ( overLeft > 0 && overRight <= 0 ) { + newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - + withinOffset; + position.left += overLeft - newOverRight; + + // Element is initially over right side of within + } else if ( overRight > 0 && overLeft <= 0 ) { + position.left = withinOffset; + + // Element is initially over both left and right sides of within + } else { + if ( overLeft > overRight ) { + position.left = withinOffset + outerWidth - data.collisionWidth; + } else { + position.left = withinOffset; + } + } + + // Too far left -> align with left edge + } else if ( overLeft > 0 ) { + position.left += overLeft; + + // Too far right -> align with right edge + } else if ( overRight > 0 ) { + position.left -= overRight; + + // Adjust based on position and margin + } else { + position.left = max( position.left - collisionPosLeft, position.left ); + } }, top: function( position, data ) { - var win = $( window ), - over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(); - position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top ); + var within = data.within, + withinOffset = within.isWindow ? within.scrollTop : within.offset.top, + outerHeight = data.within.height, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = withinOffset - collisionPosTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, + newOverBottom; + + // Element is taller than within + if ( data.collisionHeight > outerHeight ) { + + // Element is initially over the top of within + if ( overTop > 0 && overBottom <= 0 ) { + newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - + withinOffset; + position.top += overTop - newOverBottom; + + // Element is initially over bottom of within + } else if ( overBottom > 0 && overTop <= 0 ) { + position.top = withinOffset; + + // Element is initially over both top and bottom of within + } else { + if ( overTop > overBottom ) { + position.top = withinOffset + outerHeight - data.collisionHeight; + } else { + position.top = withinOffset; + } + } + + // Too far up -> align with top + } else if ( overTop > 0 ) { + position.top += overTop; + + // Too far down -> align with bottom edge + } else if ( overBottom > 0 ) { + position.top -= overBottom; + + // Adjust based on position and margin + } else { + position.top = max( position.top - collisionPosTop, position.top ); + } } }, - flip: { left: function( position, data ) { - if ( data.at[0] === center ) { - return; - } - var win = $( window ), - over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(), + var within = data.within, + withinOffset = within.offset.left + within.scrollLeft, + outerWidth = within.width, + offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = collisionPosLeft - offsetLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, myOffset = data.my[ 0 ] === "left" ? -data.elemWidth : data.my[ 0 ] === "right" ? @@ -941,4040 +1156,4450 @@ $.ui.position = { 0, atOffset = data.at[ 0 ] === "left" ? data.targetWidth : - -data.targetWidth, - offset = -2 * data.offset[ 0 ]; - position.left += data.collisionPosition.left < 0 ? - myOffset + atOffset + offset : - over > 0 ? - myOffset + atOffset + offset : - 0; + data.at[ 0 ] === "right" ? + -data.targetWidth : + 0, + offset = -2 * data.offset[ 0 ], + newOverRight, + newOverLeft; + + if ( overLeft < 0 ) { + newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - + outerWidth - withinOffset; + if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { + position.left += myOffset + atOffset + offset; + } + } else if ( overRight > 0 ) { + newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + + atOffset + offset - offsetLeft; + if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { + position.left += myOffset + atOffset + offset; + } + } }, top: function( position, data ) { - if ( data.at[1] === center ) { - return; - } - var win = $( window ), - over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(), - myOffset = data.my[ 1 ] === "top" ? + var within = data.within, + withinOffset = within.offset.top + within.scrollTop, + outerHeight = within.height, + offsetTop = within.isWindow ? within.scrollTop : within.offset.top, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = collisionPosTop - offsetTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, + top = data.my[ 1 ] === "top", + myOffset = top ? -data.elemHeight : data.my[ 1 ] === "bottom" ? data.elemHeight : 0, atOffset = data.at[ 1 ] === "top" ? data.targetHeight : - -data.targetHeight, - offset = -2 * data.offset[ 1 ]; - position.top += data.collisionPosition.top < 0 ? - myOffset + atOffset + offset : - over > 0 ? - myOffset + atOffset + offset : - 0; - } - } -}; - -// offset setter from jQuery 1.4 -if ( !$.offset.setOffset ) { - $.offset.setOffset = function( elem, options ) { - // set position first, in-case top/left are set even on static elem - if ( /static/.test( $.curCSS( elem, "position" ) ) ) { - elem.style.position = "relative"; - } - var curElem = $( elem ), - curOffset = curElem.offset(), - curTop = parseInt( $.curCSS( elem, "top", true ), 10 ) || 0, - curLeft = parseInt( $.curCSS( elem, "left", true ), 10) || 0, - props = { - top: (options.top - curOffset.top) + curTop, - left: (options.left - curOffset.left) + curLeft - }; - - if ( 'using' in options ) { - options.using.call( elem, props ); - } else { - curElem.css( props ); - } - }; - - $.fn.offset = function( options ) { - var elem = this[ 0 ]; - if ( !elem || !elem.ownerDocument ) { return null; } - if ( options ) { - if ( $.isFunction( options ) ) { - return this.each(function( i ) { - $( this ).offset( options.call( this, i, $( this ).offset() ) ); - }); + data.at[ 1 ] === "bottom" ? + -data.targetHeight : + 0, + offset = -2 * data.offset[ 1 ], + newOverTop, + newOverBottom; + if ( overTop < 0 ) { + newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - + outerHeight - withinOffset; + if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) { + position.top += myOffset + atOffset + offset; + } + } else if ( overBottom > 0 ) { + newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + + offset - offsetTop; + if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) { + position.top += myOffset + atOffset + offset; + } } - return this.each(function() { - $.offset.setOffset( this, options ); - }); } - return _offset.call( this ); - }; -} - -// fraction support test (older versions of jQuery don't support fractions) -(function () { - var body = document.getElementsByTagName( "body" )[ 0 ], - div = document.createElement( "div" ), - testElement, testElementParent, testElementStyle, offset, offsetTotal; - - //Create a "fake body" for testing based on method used in jQuery.support - testElement = document.createElement( body ? "div" : "body" ); - testElementStyle = { - visibility: "hidden", - width: 0, - height: 0, - border: 0, - margin: 0, - background: "none" - }; - if ( body ) { - $.extend( testElementStyle, { - position: "absolute", - left: "-1000px", - top: "-1000px" - }); - } - for ( var i in testElementStyle ) { - testElement.style[ i ] = testElementStyle[ i ]; + }, + flipfit: { + left: function() { + $.ui.position.flip.left.apply( this, arguments ); + $.ui.position.fit.left.apply( this, arguments ); + }, + top: function() { + $.ui.position.flip.top.apply( this, arguments ); + $.ui.position.fit.top.apply( this, arguments ); + } } - testElement.appendChild( div ); - testElementParent = body || document.documentElement; - testElementParent.insertBefore( testElement, testElementParent.firstChild ); - - div.style.cssText = "position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;"; +}; - offset = $( div ).offset( function( _, offset ) { - return offset; - }).offset(); +} )(); - testElement.innerHTML = ""; - testElementParent.removeChild( testElement ); +var position = $.ui.position; - offsetTotal = offset.top + offset.left + ( body ? 2000 : 0 ); - support.fractions = offsetTotal > 21 && offsetTotal < 22; -})(); -}( jQuery )); /*! - * jQuery UI Draggable 1.8.21 + * jQuery UI :data 1.12.1 + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. * http://jquery.org/license - * - * http://docs.jquery.com/UI/Draggables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js */ -(function( $, undefined ) { - -$.widget("ui.draggable", $.ui.mouse, { - widgetEventPrefix: "drag", - options: { - addClasses: true, - appendTo: "parent", - axis: false, - connectToSortable: false, - containment: false, - cursor: "auto", - cursorAt: false, - grid: false, - handle: false, - helper: "original", - iframeFix: false, - opacity: false, - refreshPositions: false, - revert: false, - revertDuration: 500, - scope: "default", - scroll: true, - scrollSensitivity: 20, - scrollSpeed: 20, - snap: false, - snapMode: "both", - snapTolerance: 20, - stack: false, - zIndex: false - }, - _create: function() { - if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position"))) - this.element[0].style.position = 'relative'; +//>>label: :data Selector +//>>group: Core +//>>description: Selects elements which have data stored under the specified key. +//>>docs: http://api.jqueryui.com/data-selector/ - (this.options.addClasses && this.element.addClass("ui-draggable")); - (this.options.disabled && this.element.addClass("ui-draggable-disabled")); - this._mouseInit(); - - }, - - destroy: function() { - if(!this.element.data('draggable')) return; - this.element - .removeData("draggable") - .unbind(".draggable") - .removeClass("ui-draggable" - + " ui-draggable-dragging" - + " ui-draggable-disabled"); - this._mouseDestroy(); +var data = $.extend( $.expr[ ":" ], { + data: $.expr.createPseudo ? + $.expr.createPseudo( function( dataName ) { + return function( elem ) { + return !!$.data( elem, dataName ); + }; + } ) : - return this; - }, + // Support: jQuery <1.8 + function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + } +} ); - _mouseCapture: function(event) { +/*! + * jQuery UI Disable Selection 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - var o = this.options; +//>>label: disableSelection +//>>group: Core +//>>description: Disable selection of text content within the set of matched elements. +//>>docs: http://api.jqueryui.com/disableSelection/ - // among others, prevent a drag on a resizable-handle - if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle')) - return false; +// This file is deprecated - //Quit if we're not on a valid handle - this.handle = this._getHandle(event); - if (!this.handle) - return false; - - if ( o.iframeFix ) { - $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() { - $('
    ') - .css({ - width: this.offsetWidth+"px", height: this.offsetHeight+"px", - position: "absolute", opacity: "0.001", zIndex: 1000 - }) - .css($(this).offset()) - .appendTo("body"); - }); - } - return true; +var disableSelection = $.fn.extend( { + disableSelection: ( function() { + var eventType = "onselectstart" in document.createElement( "div" ) ? + "selectstart" : + "mousedown"; - }, + return function() { + return this.on( eventType + ".ui-disableSelection", function( event ) { + event.preventDefault(); + } ); + }; + } )(), - _mouseStart: function(event) { + enableSelection: function() { + return this.off( ".ui-disableSelection" ); + } +} ); - var o = this.options; - //Create and append the visible helper - this.helper = this._createHelper(event); +/*! + * jQuery UI Effects 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - this.helper.addClass("ui-draggable-dragging"); +//>>label: Effects Core +//>>group: Effects +// jscs:disable maximumLineLength +//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects. +// jscs:enable maximumLineLength +//>>docs: http://api.jqueryui.com/category/effects-core/ +//>>demos: http://jqueryui.com/effect/ - //Cache the helper size - this._cacheHelperProportions(); - //If ddmanager is used for droppables, set the global draggable - if($.ui.ddmanager) - $.ui.ddmanager.current = this; - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ +var dataSpace = "ui-effects-", + dataSpaceStyle = "ui-effects-style", + dataSpaceAnimated = "ui-effects-animated", - //Cache the margins of the original element - this._cacheMargins(); + // Create a local jQuery because jQuery Color relies on it and the + // global may not exist with AMD and a custom build (#10199) + jQuery = $; - //Store the helper's css position - this.cssPosition = this.helper.css("position"); - this.scrollParent = this.helper.scrollParent(); +$.effects = { + effect: {} +}; - //The element's absolute position on the page minus margins - this.offset = this.positionAbs = this.element.offset(); - this.offset = { - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - - $.extend(this.offset, { - click: { //Where the click happened, relative to the element - left: event.pageX - this.offset.left, - top: event.pageY - this.offset.top - }, - parent: this._getParentOffset(), - relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper - }); - - //Generate the original position - this.originalPosition = this.position = this._generatePosition(event); - this.originalPageX = event.pageX; - this.originalPageY = event.pageY; - - //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied - (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); - - //Set a containment if given in the options - if(o.containment) - this._setContainment(); - - //Trigger event + callbacks - if(this._trigger("start", event) === false) { - this._clear(); - return false; - } - - //Recache the helper size - this._cacheHelperProportions(); - - //Prepare the droppable offsets - if ($.ui.ddmanager && !o.dropBehaviour) - $.ui.ddmanager.prepareOffsets(this, event); - - - this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position - - //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003) - if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event); - - return true; - }, - - _mouseDrag: function(event, noPropagation) { - - //Compute the helpers position - this.position = this._generatePosition(event); - this.positionAbs = this._convertPositionTo("absolute"); - - //Call plugins and callbacks and use the resulting position if something is returned - if (!noPropagation) { - var ui = this._uiHash(); - if(this._trigger('drag', event, ui) === false) { - this._mouseUp({}); - return false; +/*! + * jQuery Color Animations v2.1.2 + * https://github.com/jquery/jquery-color + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * Date: Wed Jan 16 08:47:09 2013 -0600 + */ +( function( jQuery, undefined ) { + + var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor " + + "borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor", + + // Plusequals test for += 100 -= 100 + rplusequals = /^([\-+])=\s*(\d+\.?\d*)/, + + // A set of RE's that can match strings and generate color tuples. + stringParsers = [ { + re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + parse: function( execResult ) { + return [ + execResult[ 1 ], + execResult[ 2 ], + execResult[ 3 ], + execResult[ 4 ] + ]; } - this.position = ui.position; - } - - if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; - if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; - if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); - - return false; - }, - - _mouseStop: function(event) { - - //If we are using droppables, inform the manager about the drop - var dropped = false; - if ($.ui.ddmanager && !this.options.dropBehaviour) - dropped = $.ui.ddmanager.drop(this, event); - - //if a drop comes from outside (a sortable) - if(this.dropped) { - dropped = this.dropped; - this.dropped = false; - } - - //if the original element is no longer in the DOM don't bother to continue (see #8269) - var element = this.element[0], elementInDom = false; - while ( element && (element = element.parentNode) ) { - if (element == document ) { - elementInDom = true; + }, { + re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + parse: function( execResult ) { + return [ + execResult[ 1 ] * 2.55, + execResult[ 2 ] * 2.55, + execResult[ 3 ] * 2.55, + execResult[ 4 ] + ]; } - } - if ( !elementInDom && this.options.helper === "original" ) - return false; - - if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) { - var self = this; - $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { - if(self._trigger("stop", event) !== false) { - self._clear(); + }, { + + // This regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/, + parse: function( execResult ) { + return [ + parseInt( execResult[ 1 ], 16 ), + parseInt( execResult[ 2 ], 16 ), + parseInt( execResult[ 3 ], 16 ) + ]; + } + }, { + + // This regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9])([a-f0-9])([a-f0-9])/, + parse: function( execResult ) { + return [ + parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ), + parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ), + parseInt( execResult[ 3 ] + execResult[ 3 ], 16 ) + ]; + } + }, { + re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + space: "hsla", + parse: function( execResult ) { + return [ + execResult[ 1 ], + execResult[ 2 ] / 100, + execResult[ 3 ] / 100, + execResult[ 4 ] + ]; + } + } ], + + // JQuery.Color( ) + color = jQuery.Color = function( color, green, blue, alpha ) { + return new jQuery.Color.fn.parse( color, green, blue, alpha ); + }, + spaces = { + rgba: { + props: { + red: { + idx: 0, + type: "byte" + }, + green: { + idx: 1, + type: "byte" + }, + blue: { + idx: 2, + type: "byte" } - }); - } else { - if(this._trigger("stop", event) !== false) { - this._clear(); } - } + }, - return false; - }, - - _mouseUp: function(event) { - if (this.options.iframeFix === true) { - $("div.ui-draggable-iframeFix").each(function() { - this.parentNode.removeChild(this); - }); //Remove frame helpers + hsla: { + props: { + hue: { + idx: 0, + type: "degrees" + }, + saturation: { + idx: 1, + type: "percent" + }, + lightness: { + idx: 2, + type: "percent" + } + } } - - //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003) - if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event); - - return $.ui.mouse.prototype._mouseUp.call(this, event); }, - - cancel: function() { - - if(this.helper.is(".ui-draggable-dragging")) { - this._mouseUp({}); - } else { - this._clear(); + propTypes = { + "byte": { + floor: true, + max: 255 + }, + "percent": { + max: 1 + }, + "degrees": { + mod: 360, + floor: true } - - return this; - }, + support = color.support = {}, - _getHandle: function(event) { - - var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false; - $(this.options.handle, this.element) - .find("*") - .andSelf() - .each(function() { - if(this == event.target) handle = true; - }); + // Element for support tests + supportElem = jQuery( "

    " )[ 0 ], - return handle; + // Colors = jQuery.Color.names + colors, - }, + // Local aliases of functions called often + each = jQuery.each; - _createHelper: function(event) { +// Determine rgba support immediately +supportElem.style.cssText = "background-color:rgba(1,1,1,.5)"; +support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1; - var o = this.options; - var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element); +// Define cache name and alpha properties +// for rgba and hsla spaces +each( spaces, function( spaceName, space ) { + space.cache = "_" + spaceName; + space.props.alpha = { + idx: 3, + type: "percent", + def: 1 + }; +} ); - if(!helper.parents('body').length) - helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); +function clamp( value, prop, allowEmpty ) { + var type = propTypes[ prop.type ] || {}; - if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) - helper.css("position", "absolute"); + if ( value == null ) { + return ( allowEmpty || !prop.def ) ? null : prop.def; + } - return helper; + // ~~ is an short way of doing floor for positive numbers + value = type.floor ? ~~value : parseFloat( value ); - }, + // IE will pass in empty strings as value for alpha, + // which will hit this case + if ( isNaN( value ) ) { + return prop.def; + } - _adjustOffsetFromHelper: function(obj) { - if (typeof obj == 'string') { - obj = obj.split(' '); - } - if ($.isArray(obj)) { - obj = {left: +obj[0], top: +obj[1] || 0}; - } - if ('left' in obj) { - this.offset.click.left = obj.left + this.margins.left; - } - if ('right' in obj) { - this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; - } - if ('top' in obj) { - this.offset.click.top = obj.top + this.margins.top; - } - if ('bottom' in obj) { - this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; - } - }, + if ( type.mod ) { - _getParentOffset: function() { + // We add mod before modding to make sure that negatives values + // get converted properly: -10 -> 350 + return ( value + type.mod ) % type.mod; + } - //Get the offsetParent and cache its position - this.offsetParent = this.helper.offsetParent(); - var po = this.offsetParent.offset(); + // For now all property types without mod have min and max + return 0 > value ? 0 : type.max < value ? type.max : value; +} - // This is a special case where we need to modify a offset calculated on start, since the following happened: - // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent - // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that - // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag - if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { - po.left += this.scrollParent.scrollLeft(); - po.top += this.scrollParent.scrollTop(); - } +function stringParse( string ) { + var inst = color(), + rgba = inst._rgba = []; - if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information - || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix - po = { top: 0, left: 0 }; + string = string.toLowerCase(); - return { - top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), - left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) - }; + each( stringParsers, function( i, parser ) { + var parsed, + match = parser.re.exec( string ), + values = match && parser.parse( match ), + spaceName = parser.space || "rgba"; - }, + if ( values ) { + parsed = inst[ spaceName ]( values ); - _getRelativeOffset: function() { + // If this was an rgba parse the assignment might happen twice + // oh well.... + inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ]; + rgba = inst._rgba = parsed._rgba; - if(this.cssPosition == "relative") { - var p = this.element.position(); - return { - top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), - left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() - }; - } else { - return { top: 0, left: 0 }; + // Exit each( stringParsers ) here because we matched + return false; } + } ); - }, - - _cacheMargins: function() { - this.margins = { - left: (parseInt(this.element.css("marginLeft"),10) || 0), - top: (parseInt(this.element.css("marginTop"),10) || 0), - right: (parseInt(this.element.css("marginRight"),10) || 0), - bottom: (parseInt(this.element.css("marginBottom"),10) || 0) - }; - }, - - _cacheHelperProportions: function() { - this.helperProportions = { - width: this.helper.outerWidth(), - height: this.helper.outerHeight() - }; - }, - - _setContainment: function() { - - var o = this.options; - if(o.containment == 'parent') o.containment = this.helper[0].parentNode; - if(o.containment == 'document' || o.containment == 'window') this.containment = [ - o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, - o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, - (o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, - (o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top - ]; + // Found a stringParser that handled it + if ( rgba.length ) { - if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) { - var c = $(o.containment); - var ce = c[0]; if(!ce) return; - var co = c.offset(); - var over = ($(ce).css("overflow") != 'hidden'); + // If this came from a parsed string, force "transparent" when alpha is 0 + // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0) + if ( rgba.join() === "0,0,0,0" ) { + jQuery.extend( rgba, colors.transparent ); + } + return inst; + } - this.containment = [ - (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0), - (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0), - (over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, - (over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom - ]; - this.relative_container = c; + // Named colors + return colors[ string ]; +} - } else if(o.containment.constructor == Array) { - this.containment = o.containment; +color.fn = jQuery.extend( color.prototype, { + parse: function( red, green, blue, alpha ) { + if ( red === undefined ) { + this._rgba = [ null, null, null, null ]; + return this; + } + if ( red.jquery || red.nodeType ) { + red = jQuery( red ).css( green ); + green = undefined; } - }, + var inst = this, + type = jQuery.type( red ), + rgba = this._rgba = []; - _convertPositionTo: function(d, pos) { + // More than 1 argument specified - assume ( red, green, blue, alpha ) + if ( green !== undefined ) { + red = [ red, green, blue, alpha ]; + type = "array"; + } - if(!pos) pos = this.position; - var mod = d == "absolute" ? 1 : -1; - var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); + if ( type === "string" ) { + return this.parse( stringParse( red ) || colors._default ); + } - return { - top: ( - pos.top // The absolute mouse position - + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) - - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) - ), - left: ( - pos.left // The absolute mouse position - + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) - - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) - ) - }; + if ( type === "array" ) { + each( spaces.rgba.props, function( key, prop ) { + rgba[ prop.idx ] = clamp( red[ prop.idx ], prop ); + } ); + return this; + } - }, + if ( type === "object" ) { + if ( red instanceof color ) { + each( spaces, function( spaceName, space ) { + if ( red[ space.cache ] ) { + inst[ space.cache ] = red[ space.cache ].slice(); + } + } ); + } else { + each( spaces, function( spaceName, space ) { + var cache = space.cache; + each( space.props, function( key, prop ) { - _generatePosition: function(event) { + // If the cache doesn't exist, and we know how to convert + if ( !inst[ cache ] && space.to ) { - var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - var pageX = event.pageX; - var pageY = event.pageY; + // If the value was null, we don't need to copy it + // if the key was alpha, we don't need to copy it either + if ( key === "alpha" || red[ key ] == null ) { + return; + } + inst[ cache ] = space.to( inst._rgba ); + } - /* - * - Position constraining - - * Constrain the position to a mix of grid, containment. - */ + // This is the only case where we allow nulls for ALL properties. + // call clamp with alwaysAllowEmpty + inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true ); + } ); - if(this.originalPosition) { //If we are not dragging yet, we won't check for options - var containment; - if(this.containment) { - if (this.relative_container){ - var co = this.relative_container.offset(); - containment = [ this.containment[0] + co.left, - this.containment[1] + co.top, - this.containment[2] + co.left, - this.containment[3] + co.top ]; - } - else { - containment = this.containment; - } + // Everything defined but alpha? + if ( inst[ cache ] && + jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) { - if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left; - if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top; - if(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left; - if(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top; + // Use the default of 1 + inst[ cache ][ 3 ] = 1; + if ( space.from ) { + inst._rgba = space.from( inst[ cache ] ); + } + } + } ); + } + return this; + } + }, + is: function( compare ) { + var is = color( compare ), + same = true, + inst = this; + + each( spaces, function( _, space ) { + var localCache, + isCache = is[ space.cache ]; + if ( isCache ) { + localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || []; + each( space.props, function( _, prop ) { + if ( isCache[ prop.idx ] != null ) { + same = ( isCache[ prop.idx ] === localCache[ prop.idx ] ); + return same; + } + } ); + } + return same; + } ); + return same; + }, + _space: function() { + var used = [], + inst = this; + each( spaces, function( spaceName, space ) { + if ( inst[ space.cache ] ) { + used.push( spaceName ); + } + } ); + return used.pop(); + }, + transition: function( other, distance ) { + var end = color( other ), + spaceName = end._space(), + space = spaces[ spaceName ], + startColor = this.alpha() === 0 ? color( "transparent" ) : this, + start = startColor[ space.cache ] || space.to( startColor._rgba ), + result = start.slice(); + + end = end[ space.cache ]; + each( space.props, function( key, prop ) { + var index = prop.idx, + startValue = start[ index ], + endValue = end[ index ], + type = propTypes[ prop.type ] || {}; + + // If null, don't override start value + if ( endValue === null ) { + return; } - if(o.grid) { - //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950) - var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY; - pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; - - var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX; - pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; + // If null - use end + if ( startValue === null ) { + result[ index ] = endValue; + } else { + if ( type.mod ) { + if ( endValue - startValue > type.mod / 2 ) { + startValue += type.mod; + } else if ( startValue - endValue > type.mod / 2 ) { + startValue -= type.mod; + } + } + result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop ); } + } ); + return this[ spaceName ]( result ); + }, + blend: function( opaque ) { + // If we are already opaque - return ourself + if ( this._rgba[ 3 ] === 1 ) { + return this; } - return { - top: ( - pageY // The absolute mouse position - - this.offset.click.top // Click offset (relative to the element) - - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.top // The offsetParent's offset without borders (offset + border) - + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) - ), - left: ( - pageX // The absolute mouse position - - this.offset.click.left // Click offset (relative to the element) - - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.left // The offsetParent's offset without borders (offset + border) - + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) - ) - }; - - }, + var rgb = this._rgba.slice(), + a = rgb.pop(), + blend = color( opaque )._rgba; - _clear: function() { - this.helper.removeClass("ui-draggable-dragging"); - if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove(); - //if($.ui.ddmanager) $.ui.ddmanager.current = null; - this.helper = null; - this.cancelHelperRemoval = false; + return color( jQuery.map( rgb, function( v, i ) { + return ( 1 - a ) * blend[ i ] + a * v; + } ) ); }, + toRgbaString: function() { + var prefix = "rgba(", + rgba = jQuery.map( this._rgba, function( v, i ) { + return v == null ? ( i > 2 ? 1 : 0 ) : v; + } ); - // From now on bulk stuff - mainly helpers + if ( rgba[ 3 ] === 1 ) { + rgba.pop(); + prefix = "rgb("; + } - _trigger: function(type, event, ui) { - ui = ui || this._uiHash(); - $.ui.plugin.call(this, type, [event, ui]); - if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins - return $.Widget.prototype._trigger.call(this, type, event, ui); + return prefix + rgba.join() + ")"; }, + toHslaString: function() { + var prefix = "hsla(", + hsla = jQuery.map( this.hsla(), function( v, i ) { + if ( v == null ) { + v = i > 2 ? 1 : 0; + } - plugins: {}, - - _uiHash: function(event) { - return { - helper: this.helper, - position: this.position, - originalPosition: this.originalPosition, - offset: this.positionAbs - }; - } - -}); + // Catch 1 and 2 + if ( i && i < 3 ) { + v = Math.round( v * 100 ) + "%"; + } + return v; + } ); -$.extend($.ui.draggable, { - version: "1.8.21" -}); + if ( hsla[ 3 ] === 1 ) { + hsla.pop(); + prefix = "hsl("; + } + return prefix + hsla.join() + ")"; + }, + toHexString: function( includeAlpha ) { + var rgba = this._rgba.slice(), + alpha = rgba.pop(); -$.ui.plugin.add("draggable", "connectToSortable", { - start: function(event, ui) { + if ( includeAlpha ) { + rgba.push( ~~( alpha * 255 ) ); + } - var inst = $(this).data("draggable"), o = inst.options, - uiSortable = $.extend({}, ui, { item: inst.element }); - inst.sortables = []; - $(o.connectToSortable).each(function() { - var sortable = $.data(this, 'sortable'); - if (sortable && !sortable.options.disabled) { - inst.sortables.push({ - instance: sortable, - shouldRevert: sortable.options.revert - }); - sortable.refreshPositions(); // Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page). - sortable._trigger("activate", event, uiSortable); - } - }); + return "#" + jQuery.map( rgba, function( v ) { + // Default to 0 when nulls exist + v = ( v || 0 ).toString( 16 ); + return v.length === 1 ? "0" + v : v; + } ).join( "" ); }, - stop: function(event, ui) { + toString: function() { + return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString(); + } +} ); +color.fn.parse.prototype = color.fn; - //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper - var inst = $(this).data("draggable"), - uiSortable = $.extend({}, ui, { item: inst.element }); +// Hsla conversions adapted from: +// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021 - $.each(inst.sortables, function() { - if(this.instance.isOver) { +function hue2rgb( p, q, h ) { + h = ( h + 1 ) % 1; + if ( h * 6 < 1 ) { + return p + ( q - p ) * h * 6; + } + if ( h * 2 < 1 ) { + return q; + } + if ( h * 3 < 2 ) { + return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6; + } + return p; +} - this.instance.isOver = 0; +spaces.hsla.to = function( rgba ) { + if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) { + return [ null, null, null, rgba[ 3 ] ]; + } + var r = rgba[ 0 ] / 255, + g = rgba[ 1 ] / 255, + b = rgba[ 2 ] / 255, + a = rgba[ 3 ], + max = Math.max( r, g, b ), + min = Math.min( r, g, b ), + diff = max - min, + add = max + min, + l = add * 0.5, + h, s; + + if ( min === max ) { + h = 0; + } else if ( r === max ) { + h = ( 60 * ( g - b ) / diff ) + 360; + } else if ( g === max ) { + h = ( 60 * ( b - r ) / diff ) + 120; + } else { + h = ( 60 * ( r - g ) / diff ) + 240; + } - inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance - this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work) + // Chroma (diff) == 0 means greyscale which, by definition, saturation = 0% + // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add) + if ( diff === 0 ) { + s = 0; + } else if ( l <= 0.5 ) { + s = diff / add; + } else { + s = diff / ( 2 - add ); + } + return [ Math.round( h ) % 360, s, l, a == null ? 1 : a ]; +}; - //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid' - if(this.shouldRevert) this.instance.options.revert = true; +spaces.hsla.from = function( hsla ) { + if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) { + return [ null, null, null, hsla[ 3 ] ]; + } + var h = hsla[ 0 ] / 360, + s = hsla[ 1 ], + l = hsla[ 2 ], + a = hsla[ 3 ], + q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s, + p = 2 * l - q; + + return [ + Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ), + Math.round( hue2rgb( p, q, h ) * 255 ), + Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ), + a + ]; +}; - //Trigger the stop of the sortable - this.instance._mouseStop(event); +each( spaces, function( spaceName, space ) { + var props = space.props, + cache = space.cache, + to = space.to, + from = space.from; - this.instance.options.helper = this.instance.options._helper; + // Makes rgba() and hsla() + color.fn[ spaceName ] = function( value ) { - //If the helper has been the original item, restore properties in the sortable - if(inst.options.helper == 'original') - this.instance.currentItem.css({ top: 'auto', left: 'auto' }); + // Generate a cache for this space if it doesn't exist + if ( to && !this[ cache ] ) { + this[ cache ] = to( this._rgba ); + } + if ( value === undefined ) { + return this[ cache ].slice(); + } - } else { - this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance - this.instance._trigger("deactivate", event, uiSortable); + var ret, + type = jQuery.type( value ), + arr = ( type === "array" || type === "object" ) ? value : arguments, + local = this[ cache ].slice(); + + each( props, function( key, prop ) { + var val = arr[ type === "object" ? key : prop.idx ]; + if ( val == null ) { + val = local[ prop.idx ]; } + local[ prop.idx ] = clamp( val, prop ); + } ); - }); + if ( from ) { + ret = color( from( local ) ); + ret[ cache ] = local; + return ret; + } else { + return color( local ); + } + }; - }, - drag: function(event, ui) { + // Makes red() green() blue() alpha() hue() saturation() lightness() + each( props, function( key, prop ) { - var inst = $(this).data("draggable"), self = this; + // Alpha is included in more than one space + if ( color.fn[ key ] ) { + return; + } + color.fn[ key ] = function( value ) { + var vtype = jQuery.type( value ), + fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ), + local = this[ fn ](), + cur = local[ prop.idx ], + match; - var checkPos = function(o) { - var dyClick = this.offset.click.top, dxClick = this.offset.click.left; - var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left; - var itemHeight = o.height, itemWidth = o.width; - var itemTop = o.top, itemLeft = o.left; + if ( vtype === "undefined" ) { + return cur; + } - return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth); + if ( vtype === "function" ) { + value = value.call( this, cur ); + vtype = jQuery.type( value ); + } + if ( value == null && prop.empty ) { + return this; + } + if ( vtype === "string" ) { + match = rplusequals.exec( value ); + if ( match ) { + value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 ); + } + } + local[ prop.idx ] = value; + return this[ fn ]( local ); }; + } ); +} ); + +// Add cssHook and .fx.step function for each named hook. +// accept a space separated string of properties +color.hook = function( hook ) { + var hooks = hook.split( " " ); + each( hooks, function( i, hook ) { + jQuery.cssHooks[ hook ] = { + set: function( elem, value ) { + var parsed, curElem, + backgroundColor = ""; + + if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || + ( parsed = stringParse( value ) ) ) ) { + value = color( parsed || value ); + if ( !support.rgba && value._rgba[ 3 ] !== 1 ) { + curElem = hook === "backgroundColor" ? elem.parentNode : elem; + while ( + ( backgroundColor === "" || backgroundColor === "transparent" ) && + curElem && curElem.style + ) { + try { + backgroundColor = jQuery.css( curElem, "backgroundColor" ); + curElem = curElem.parentNode; + } catch ( e ) { + } + } - $.each(inst.sortables, function(i) { - - //Copy over some variables to allow calling the sortable's native _intersectsWith - this.instance.positionAbs = inst.positionAbs; - this.instance.helperProportions = inst.helperProportions; - this.instance.offset.click = inst.offset.click; - - if(this.instance._intersectsWith(this.instance.containerCache)) { - - //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once - if(!this.instance.isOver) { - - this.instance.isOver = 1; - //Now we fake the start of dragging for the sortable instance, - //by cloning the list group item, appending it to the sortable and using it as inst.currentItem - //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one) - this.instance.currentItem = $(self).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true); - this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it - this.instance.options.helper = function() { return ui.helper[0]; }; - - event.target = this.instance.currentItem[0]; - this.instance._mouseCapture(event, true); - this.instance._mouseStart(event, true, true); - - //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes - this.instance.offset.click.top = inst.offset.click.top; - this.instance.offset.click.left = inst.offset.click.left; - this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; - this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; + value = value.blend( backgroundColor && backgroundColor !== "transparent" ? + backgroundColor : + "_default" ); + } - inst._trigger("toSortable", event); - inst.dropped = this.instance.element; //draggable revert needs that - //hack so receive/update callbacks work (mostly) - inst.currentItem = inst.element; - this.instance.fromOutside = inst; + value = value.toRgbaString(); + } + try { + elem.style[ hook ] = value; + } catch ( e ) { + // Wrapped to prevent IE from throwing errors on "invalid" values like + // 'auto' or 'inherit' } + } + }; + jQuery.fx.step[ hook ] = function( fx ) { + if ( !fx.colorInit ) { + fx.start = color( fx.elem, hook ); + fx.end = color( fx.end ); + fx.colorInit = true; + } + jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) ); + }; + } ); - //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable - if(this.instance.currentItem) this.instance._mouseDrag(event); +}; - } else { +color.hook( stepHooks ); - //If it doesn't intersect with the sortable, and it intersected before, - //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval - if(this.instance.isOver) { +jQuery.cssHooks.borderColor = { + expand: function( value ) { + var expanded = {}; - this.instance.isOver = 0; - this.instance.cancelHelperRemoval = true; - - //Prevent reverting on this forced stop - this.instance.options.revert = false; - - // The out event needs to be triggered independently - this.instance._trigger('out', event, this.instance._uiHash(this.instance)); - - this.instance._mouseStop(event, true); - this.instance.options.helper = this.instance.options._helper; + each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) { + expanded[ "border" + part + "Color" ] = value; + } ); + return expanded; + } +}; - //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size - this.instance.currentItem.remove(); - if(this.instance.placeholder) this.instance.placeholder.remove(); +// Basic color names only. +// Usage of any of the other color names requires adding yourself or including +// jquery.color.svg-names.js. +colors = jQuery.Color.names = { + + // 4.1. Basic color keywords + aqua: "#00ffff", + black: "#000000", + blue: "#0000ff", + fuchsia: "#ff00ff", + gray: "#808080", + green: "#008000", + lime: "#00ff00", + maroon: "#800000", + navy: "#000080", + olive: "#808000", + purple: "#800080", + red: "#ff0000", + silver: "#c0c0c0", + teal: "#008080", + white: "#ffffff", + yellow: "#ffff00", + + // 4.2.3. "transparent" color keyword + transparent: [ null, null, null, 0 ], + + _default: "#ffffff" +}; - inst._trigger("fromSortable", event); - inst.dropped = false; //draggable revert needs that - } +} )( jQuery ); - }; +/******************************************************************************/ +/****************************** CLASS ANIMATIONS ******************************/ +/******************************************************************************/ +( function() { - }); +var classAnimationActions = [ "add", "remove", "toggle" ], + shorthandStyles = { + border: 1, + borderBottom: 1, + borderColor: 1, + borderLeft: 1, + borderRight: 1, + borderTop: 1, + borderWidth: 1, + margin: 1, + padding: 1 + }; +$.each( + [ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], + function( _, prop ) { + $.fx.step[ prop ] = function( fx ) { + if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) { + jQuery.style( fx.elem, prop, fx.end ); + fx.setAttr = true; + } + }; } -}); +); + +function getElementStyles( elem ) { + var key, len, + style = elem.ownerDocument.defaultView ? + elem.ownerDocument.defaultView.getComputedStyle( elem, null ) : + elem.currentStyle, + styles = {}; + + if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) { + len = style.length; + while ( len-- ) { + key = style[ len ]; + if ( typeof style[ key ] === "string" ) { + styles[ $.camelCase( key ) ] = style[ key ]; + } + } -$.ui.plugin.add("draggable", "cursor", { - start: function(event, ui) { - var t = $('body'), o = $(this).data('draggable').options; - if (t.css("cursor")) o._cursor = t.css("cursor"); - t.css("cursor", o.cursor); - }, - stop: function(event, ui) { - var o = $(this).data('draggable').options; - if (o._cursor) $('body').css("cursor", o._cursor); + // Support: Opera, IE <9 + } else { + for ( key in style ) { + if ( typeof style[ key ] === "string" ) { + styles[ key ] = style[ key ]; + } + } } -}); -$.ui.plugin.add("draggable", "opacity", { - start: function(event, ui) { - var t = $(ui.helper), o = $(this).data('draggable').options; - if(t.css("opacity")) o._opacity = t.css("opacity"); - t.css('opacity', o.opacity); - }, - stop: function(event, ui) { - var o = $(this).data('draggable').options; - if(o._opacity) $(ui.helper).css('opacity', o._opacity); + return styles; +} + +function styleDifference( oldStyle, newStyle ) { + var diff = {}, + name, value; + + for ( name in newStyle ) { + value = newStyle[ name ]; + if ( oldStyle[ name ] !== value ) { + if ( !shorthandStyles[ name ] ) { + if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) { + diff[ name ] = value; + } + } + } } -}); -$.ui.plugin.add("draggable", "scroll", { - start: function(event, ui) { - var i = $(this).data("draggable"); - if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset(); - }, - drag: function(event, ui) { + return diff; +} - var i = $(this).data("draggable"), o = i.options, scrolled = false; +// Support: jQuery <1.8 +if ( !$.fn.addBack ) { + $.fn.addBack = function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + }; +} - if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') { +$.effects.animateClass = function( value, duration, easing, callback ) { + var o = $.speed( duration, easing, callback ); - if(!o.axis || o.axis != 'x') { - if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) - i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed; - else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) - i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; - } + return this.queue( function() { + var animated = $( this ), + baseClass = animated.attr( "class" ) || "", + applyClassChange, + allAnimations = o.children ? animated.find( "*" ).addBack() : animated; - if(!o.axis || o.axis != 'y') { - if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) - i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; - else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) - i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; - } + // Map the animated objects to store the original styles. + allAnimations = allAnimations.map( function() { + var el = $( this ); + return { + el: el, + start: getElementStyles( this ) + }; + } ); - } else { + // Apply class change + applyClassChange = function() { + $.each( classAnimationActions, function( i, action ) { + if ( value[ action ] ) { + animated[ action + "Class" ]( value[ action ] ); + } + } ); + }; + applyClassChange(); + + // Map all animated objects again - calculate new styles and diff + allAnimations = allAnimations.map( function() { + this.end = getElementStyles( this.el[ 0 ] ); + this.diff = styleDifference( this.start, this.end ); + return this; + } ); + + // Apply original class + animated.attr( "class", baseClass ); + + // Map all animated objects again - this time collecting a promise + allAnimations = allAnimations.map( function() { + var styleInfo = this, + dfd = $.Deferred(), + opts = $.extend( {}, o, { + queue: false, + complete: function() { + dfd.resolve( styleInfo ); + } + } ); - if(!o.axis || o.axis != 'x') { - if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) - scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) - scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - } + this.el.animate( this.diff, opts ); + return dfd.promise(); + } ); - if(!o.axis || o.axis != 'y') { - if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) - scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) - scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - } + // Once all animations have completed: + $.when.apply( $, allAnimations.get() ).done( function() { - } + // Set the final class + applyClassChange(); - if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) - $.ui.ddmanager.prepareOffsets(i, event); + // For each animated element, + // clear all css properties that were animated + $.each( arguments, function() { + var el = this.el; + $.each( this.diff, function( key ) { + el.css( key, "" ); + } ); + } ); - } -}); + // This is guarnteed to be there if you use jQuery.speed() + // it also handles dequeuing the next anim... + o.complete.call( animated[ 0 ] ); + } ); + } ); +}; -$.ui.plugin.add("draggable", "snap", { - start: function(event, ui) { +$.fn.extend( { + addClass: ( function( orig ) { + return function( classNames, speed, easing, callback ) { + return speed ? + $.effects.animateClass.call( this, + { add: classNames }, speed, easing, callback ) : + orig.apply( this, arguments ); + }; + } )( $.fn.addClass ), + + removeClass: ( function( orig ) { + return function( classNames, speed, easing, callback ) { + return arguments.length > 1 ? + $.effects.animateClass.call( this, + { remove: classNames }, speed, easing, callback ) : + orig.apply( this, arguments ); + }; + } )( $.fn.removeClass ), - var i = $(this).data("draggable"), o = i.options; - i.snapElements = []; + toggleClass: ( function( orig ) { + return function( classNames, force, speed, easing, callback ) { + if ( typeof force === "boolean" || force === undefined ) { + if ( !speed ) { + + // Without speed parameter + return orig.apply( this, arguments ); + } else { + return $.effects.animateClass.call( this, + ( force ? { add: classNames } : { remove: classNames } ), + speed, easing, callback ); + } + } else { - $(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() { - var $t = $(this); var $o = $t.offset(); - if(this != i.element[0]) i.snapElements.push({ - item: this, - width: $t.outerWidth(), height: $t.outerHeight(), - top: $o.top, left: $o.left - }); - }); + // Without force parameter + return $.effects.animateClass.call( this, + { toggle: classNames }, force, speed, easing ); + } + }; + } )( $.fn.toggleClass ), - }, - drag: function(event, ui) { + switchClass: function( remove, add, speed, easing, callback ) { + return $.effects.animateClass.call( this, { + add: add, + remove: remove + }, speed, easing, callback ); + } +} ); - var inst = $(this).data("draggable"), o = inst.options; - var d = o.snapTolerance; +} )(); - var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, - y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; +/******************************************************************************/ +/*********************************** EFFECTS **********************************/ +/******************************************************************************/ - for (var i = inst.snapElements.length - 1; i >= 0; i--){ +( function() { - var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, - t = inst.snapElements[i].top, b = t + inst.snapElements[i].height; +if ( $.expr && $.expr.filters && $.expr.filters.animated ) { + $.expr.filters.animated = ( function( orig ) { + return function( elem ) { + return !!$( elem ).data( dataSpaceAnimated ) || orig( elem ); + }; + } )( $.expr.filters.animated ); +} - //Yes, I know, this is insane ;) - if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) { - if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); - inst.snapElements[i].snapping = false; - continue; - } +if ( $.uiBackCompat !== false ) { + $.extend( $.effects, { - if(o.snapMode != 'inner') { - var ts = Math.abs(t - y2) <= d; - var bs = Math.abs(b - y1) <= d; - var ls = Math.abs(l - x2) <= d; - var rs = Math.abs(r - x1) <= d; - if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; - if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; - if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; - if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; + // Saves a set of properties in a data storage + save: function( element, set ) { + var i = 0, length = set.length; + for ( ; i < length; i++ ) { + if ( set[ i ] !== null ) { + element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] ); + } } + }, - var first = (ts || bs || ls || rs); + // Restores a set of previously saved properties from a data storage + restore: function( element, set ) { + var val, i = 0, length = set.length; + for ( ; i < length; i++ ) { + if ( set[ i ] !== null ) { + val = element.data( dataSpace + set[ i ] ); + element.css( set[ i ], val ); + } + } + }, - if(o.snapMode != 'outer') { - var ts = Math.abs(t - y1) <= d; - var bs = Math.abs(b - y2) <= d; - var ls = Math.abs(l - x1) <= d; - var rs = Math.abs(r - x2) <= d; - if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; - if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; - if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; - if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; + setMode: function( el, mode ) { + if ( mode === "toggle" ) { + mode = el.is( ":hidden" ) ? "show" : "hide"; } + return mode; + }, - if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) - (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); - inst.snapElements[i].snapping = (ts || bs || ls || rs || first); + // Wraps the element around a wrapper that copies position properties + createWrapper: function( element ) { - }; + // If the element is already wrapped, return it + if ( element.parent().is( ".ui-effects-wrapper" ) ) { + return element.parent(); + } - } -}); + // Wrap the element + var props = { + width: element.outerWidth( true ), + height: element.outerHeight( true ), + "float": element.css( "float" ) + }, + wrapper = $( "

    " ) + .addClass( "ui-effects-wrapper" ) + .css( { + fontSize: "100%", + background: "transparent", + border: "none", + margin: 0, + padding: 0 + } ), + + // Store the size in case width/height are defined in % - Fixes #5245 + size = { + width: element.width(), + height: element.height() + }, + active = document.activeElement; -$.ui.plugin.add("draggable", "stack", { - start: function(event, ui) { + // Support: Firefox + // Firefox incorrectly exposes anonymous content + // https://bugzilla.mozilla.org/show_bug.cgi?id=561664 + try { + active.id; + } catch ( e ) { + active = document.body; + } - var o = $(this).data("draggable").options; + element.wrap( wrapper ); - var group = $.makeArray($(o.stack)).sort(function(a,b) { - return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0); - }); - if (!group.length) { return; } - - var min = parseInt(group[0].style.zIndex) || 0; - $(group).each(function(i) { - this.style.zIndex = min + i; - }); + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).trigger( "focus" ); + } - this[0].style.zIndex = min + group.length; + // Hotfix for jQuery 1.4 since some change in wrap() seems to actually + // lose the reference to the wrapped element + wrapper = element.parent(); - } -}); + // Transfer positioning properties to the wrapper + if ( element.css( "position" ) === "static" ) { + wrapper.css( { position: "relative" } ); + element.css( { position: "relative" } ); + } else { + $.extend( props, { + position: element.css( "position" ), + zIndex: element.css( "z-index" ) + } ); + $.each( [ "top", "left", "bottom", "right" ], function( i, pos ) { + props[ pos ] = element.css( pos ); + if ( isNaN( parseInt( props[ pos ], 10 ) ) ) { + props[ pos ] = "auto"; + } + } ); + element.css( { + position: "relative", + top: 0, + left: 0, + right: "auto", + bottom: "auto" + } ); + } + element.css( size ); -$.ui.plugin.add("draggable", "zIndex", { - start: function(event, ui) { - var t = $(ui.helper), o = $(this).data("draggable").options; - if(t.css("zIndex")) o._zIndex = t.css("zIndex"); - t.css('zIndex', o.zIndex); - }, - stop: function(event, ui) { - var o = $(this).data("draggable").options; - if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex); - } -}); + return wrapper.css( props ).show(); + }, -})(jQuery); -/*! - * jQuery UI Droppable 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Droppables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.mouse.js - * jquery.ui.draggable.js - */ -(function( $, undefined ) { + removeWrapper: function( element ) { + var active = document.activeElement; -$.widget("ui.droppable", { - widgetEventPrefix: "drop", - options: { - accept: '*', - activeClass: false, - addClasses: true, - greedy: false, - hoverClass: false, - scope: 'default', - tolerance: 'intersect' - }, - _create: function() { + if ( element.parent().is( ".ui-effects-wrapper" ) ) { + element.parent().replaceWith( element ); - var o = this.options, accept = o.accept; - this.isover = 0; this.isout = 1; + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).trigger( "focus" ); + } + } - this.accept = $.isFunction(accept) ? accept : function(d) { - return d.is(accept); - }; + return element; + } + } ); +} - //Store the droppable's proportions - this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight }; +$.extend( $.effects, { + version: "1.12.1", - // Add the reference and positions to the manager - $.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || []; - $.ui.ddmanager.droppables[o.scope].push(this); + define: function( name, mode, effect ) { + if ( !effect ) { + effect = mode; + mode = "effect"; + } - (o.addClasses && this.element.addClass("ui-droppable")); + $.effects.effect[ name ] = effect; + $.effects.effect[ name ].mode = mode; + return effect; }, - destroy: function() { - var drop = $.ui.ddmanager.droppables[this.options.scope]; - for ( var i = 0; i < drop.length; i++ ) - if ( drop[i] == this ) - drop.splice(i, 1); + scaledDimensions: function( element, percent, direction ) { + if ( percent === 0 ) { + return { + height: 0, + width: 0, + outerHeight: 0, + outerWidth: 0 + }; + } - this.element - .removeClass("ui-droppable ui-droppable-disabled") - .removeData("droppable") - .unbind(".droppable"); + var x = direction !== "horizontal" ? ( ( percent || 100 ) / 100 ) : 1, + y = direction !== "vertical" ? ( ( percent || 100 ) / 100 ) : 1; - return this; + return { + height: element.height() * y, + width: element.width() * x, + outerHeight: element.outerHeight() * y, + outerWidth: element.outerWidth() * x + }; + + }, + + clipToBox: function( animation ) { + return { + width: animation.clip.right - animation.clip.left, + height: animation.clip.bottom - animation.clip.top, + left: animation.clip.left, + top: animation.clip.top + }; }, - _setOption: function(key, value) { + // Injects recently queued functions to be first in line (after "inprogress") + unshift: function( element, queueLength, count ) { + var queue = element.queue(); - if(key == 'accept') { - this.accept = $.isFunction(value) ? value : function(d) { - return d.is(value); - }; + if ( queueLength > 1 ) { + queue.splice.apply( queue, + [ 1, 0 ].concat( queue.splice( queueLength, count ) ) ); } - $.Widget.prototype._setOption.apply(this, arguments); + element.dequeue(); }, - _activate: function(event) { - var draggable = $.ui.ddmanager.current; - if(this.options.activeClass) this.element.addClass(this.options.activeClass); - (draggable && this._trigger('activate', event, this.ui(draggable))); + saveStyle: function( element ) { + element.data( dataSpaceStyle, element[ 0 ].style.cssText ); }, - _deactivate: function(event) { - var draggable = $.ui.ddmanager.current; - if(this.options.activeClass) this.element.removeClass(this.options.activeClass); - (draggable && this._trigger('deactivate', event, this.ui(draggable))); + restoreStyle: function( element ) { + element[ 0 ].style.cssText = element.data( dataSpaceStyle ) || ""; + element.removeData( dataSpaceStyle ); }, - _over: function(event) { + mode: function( element, mode ) { + var hidden = element.is( ":hidden" ); - var draggable = $.ui.ddmanager.current; - if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element - - if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { - if(this.options.hoverClass) this.element.addClass(this.options.hoverClass); - this._trigger('over', event, this.ui(draggable)); + if ( mode === "toggle" ) { + mode = hidden ? "show" : "hide"; } - + if ( hidden ? mode === "hide" : mode === "show" ) { + mode = "none"; + } + return mode; }, - _out: function(event) { + // Translates a [top,left] array into a baseline value + getBaseline: function( origin, original ) { + var y, x; - var draggable = $.ui.ddmanager.current; - if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element + switch ( origin[ 0 ] ) { + case "top": + y = 0; + break; + case "middle": + y = 0.5; + break; + case "bottom": + y = 1; + break; + default: + y = origin[ 0 ] / original.height; + } - if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { - if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); - this._trigger('out', event, this.ui(draggable)); + switch ( origin[ 1 ] ) { + case "left": + x = 0; + break; + case "center": + x = 0.5; + break; + case "right": + x = 1; + break; + default: + x = origin[ 1 ] / original.width; } + return { + x: x, + y: y + }; }, - _drop: function(event,custom) { + // Creates a placeholder element so that the original element can be made absolute + createPlaceholder: function( element ) { + var placeholder, + cssPosition = element.css( "position" ), + position = element.position(); - var draggable = custom || $.ui.ddmanager.current; - if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element + // Lock in margins first to account for form elements, which + // will change margin if you explicitly set height + // see: http://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380 + // Support: Safari + element.css( { + marginTop: element.css( "marginTop" ), + marginBottom: element.css( "marginBottom" ), + marginLeft: element.css( "marginLeft" ), + marginRight: element.css( "marginRight" ) + } ) + .outerWidth( element.outerWidth() ) + .outerHeight( element.outerHeight() ); - var childrenIntersection = false; - this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() { - var inst = $.data(this, 'droppable'); - if( - inst.options.greedy - && !inst.options.disabled - && inst.options.scope == draggable.options.scope - && inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) - && $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance) - ) { childrenIntersection = true; return false; } - }); - if(childrenIntersection) return false; + if ( /^(static|relative)/.test( cssPosition ) ) { + cssPosition = "absolute"; - if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { - if(this.options.activeClass) this.element.removeClass(this.options.activeClass); - if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); - this._trigger('drop', event, this.ui(draggable)); - return this.element; + placeholder = $( "<" + element[ 0 ].nodeName + ">" ).insertAfter( element ).css( { + + // Convert inline to inline block to account for inline elements + // that turn to inline block based on content (like img) + display: /^(inline|ruby)/.test( element.css( "display" ) ) ? + "inline-block" : + "block", + visibility: "hidden", + + // Margins need to be set to account for margin collapse + marginTop: element.css( "marginTop" ), + marginBottom: element.css( "marginBottom" ), + marginLeft: element.css( "marginLeft" ), + marginRight: element.css( "marginRight" ), + "float": element.css( "float" ) + } ) + .outerWidth( element.outerWidth() ) + .outerHeight( element.outerHeight() ) + .addClass( "ui-effects-placeholder" ); + + element.data( dataSpace + "placeholder", placeholder ); } - return false; + element.css( { + position: cssPosition, + left: position.left, + top: position.top + } ); + return placeholder; }, - ui: function(c) { - return { - draggable: (c.currentItem || c.element), - helper: c.helper, - position: c.position, - offset: c.positionAbs - }; + removePlaceholder: function( element ) { + var dataKey = dataSpace + "placeholder", + placeholder = element.data( dataKey ); + + if ( placeholder ) { + placeholder.remove(); + element.removeData( dataKey ); + } + }, + + // Removes a placeholder if it exists and restores + // properties that were modified during placeholder creation + cleanUp: function( element ) { + $.effects.restoreStyle( element ); + $.effects.removePlaceholder( element ); + }, + + setTransition: function( element, list, factor, value ) { + value = value || {}; + $.each( list, function( i, x ) { + var unit = element.cssUnit( x ); + if ( unit[ 0 ] > 0 ) { + value[ x ] = unit[ 0 ] * factor + unit[ 1 ]; + } + } ); + return value; } +} ); -}); +// Return an effect options object for the given parameters: +function _normalizeArguments( effect, options, speed, callback ) { -$.extend($.ui.droppable, { - version: "1.8.21" -}); + // Allow passing all options as the first parameter + if ( $.isPlainObject( effect ) ) { + options = effect; + effect = effect.effect; + } -$.ui.intersect = function(draggable, droppable, toleranceMode) { + // Convert to an object + effect = { effect: effect }; - if (!droppable.offset) return false; + // Catch (effect, null, ...) + if ( options == null ) { + options = {}; + } - var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width, - y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height; - var l = droppable.offset.left, r = l + droppable.proportions.width, - t = droppable.offset.top, b = t + droppable.proportions.height; + // Catch (effect, callback) + if ( $.isFunction( options ) ) { + callback = options; + speed = null; + options = {}; + } - switch (toleranceMode) { - case 'fit': - return (l <= x1 && x2 <= r - && t <= y1 && y2 <= b); - break; - case 'intersect': - return (l < x1 + (draggable.helperProportions.width / 2) // Right Half - && x2 - (draggable.helperProportions.width / 2) < r // Left Half - && t < y1 + (draggable.helperProportions.height / 2) // Bottom Half - && y2 - (draggable.helperProportions.height / 2) < b ); // Top Half - break; - case 'pointer': - var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left), - draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top), - isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width); - return isOver; - break; - case 'touch': - return ( - (y1 >= t && y1 <= b) || // Top edge touching - (y2 >= t && y2 <= b) || // Bottom edge touching - (y1 < t && y2 > b) // Surrounded vertically - ) && ( - (x1 >= l && x1 <= r) || // Left edge touching - (x2 >= l && x2 <= r) || // Right edge touching - (x1 < l && x2 > r) // Surrounded horizontally - ); - break; - default: - return false; - break; - } + // Catch (effect, speed, ?) + if ( typeof options === "number" || $.fx.speeds[ options ] ) { + callback = speed; + speed = options; + options = {}; + } -}; + // Catch (effect, options, callback) + if ( $.isFunction( speed ) ) { + callback = speed; + speed = null; + } -/* - This manager tracks offsets of draggables and droppables -*/ -$.ui.ddmanager = { - current: null, - droppables: { 'default': [] }, - prepareOffsets: function(t, event) { + // Add options to effect + if ( options ) { + $.extend( effect, options ); + } - var m = $.ui.ddmanager.droppables[t.options.scope] || []; - var type = event ? event.type : null; // workaround for #2317 - var list = (t.currentItem || t.element).find(":data(droppable)").andSelf(); + speed = speed || options.duration; + effect.duration = $.fx.off ? 0 : + typeof speed === "number" ? speed : + speed in $.fx.speeds ? $.fx.speeds[ speed ] : + $.fx.speeds._default; - droppablesLoop: for (var i = 0; i < m.length; i++) { + effect.complete = callback || options.complete; - if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue; //No disabled and non-accepted - for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item - m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; //If the element is not visible, continue + return effect; +} - if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables +function standardAnimationOption( option ) { - m[i].offset = m[i].element.offset(); - m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight }; + // Valid standard speeds (nothing, number, named speed) + if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) { + return true; + } - } + // Invalid strings - treat as "normal" speed + if ( typeof option === "string" && !$.effects.effect[ option ] ) { + return true; + } - }, - drop: function(draggable, event) { + // Complete callback + if ( $.isFunction( option ) ) { + return true; + } - var dropped = false; - $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { + // Options hash (but not naming an effect) + if ( typeof option === "object" && !option.effect ) { + return true; + } - if(!this.options) return; - if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) - dropped = this._drop.call(this, event) || dropped; + // Didn't match any standard API + return false; +} - if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { - this.isout = 1; this.isover = 0; - this._deactivate.call(this, event); - } +$.fn.extend( { + effect: function( /* effect, options, speed, callback */ ) { + var args = _normalizeArguments.apply( this, arguments ), + effectMethod = $.effects.effect[ args.effect ], + defaultMode = effectMethod.mode, + queue = args.queue, + queueName = queue || "fx", + complete = args.complete, + mode = args.mode, + modes = [], + prefilter = function( next ) { + var el = $( this ), + normalizedMode = $.effects.mode( el, mode ) || defaultMode; + + // Sentinel for duck-punching the :animated psuedo-selector + el.data( dataSpaceAnimated, true ); + + // Save effect mode for later use, + // we can't just call $.effects.mode again later, + // as the .show() below destroys the initial state + modes.push( normalizedMode ); + + // See $.uiBackCompat inside of run() for removal of defaultMode in 1.13 + if ( defaultMode && ( normalizedMode === "show" || + ( normalizedMode === defaultMode && normalizedMode === "hide" ) ) ) { + el.show(); + } - }); - return dropped; + if ( !defaultMode || normalizedMode !== "none" ) { + $.effects.saveStyle( el ); + } - }, - dragStart: function( draggable, event ) { - //Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003) - draggable.element.parents( ":not(body,html)" ).bind( "scroll.droppable", function() { - if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event ); - }); - }, - drag: function(draggable, event) { + if ( $.isFunction( next ) ) { + next(); + } + }; + + if ( $.fx.off || !effectMethod ) { - //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse. - if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event); + // Delegate to the original method (e.g., .show()) if possible + if ( mode ) { + return this[ mode ]( args.duration, complete ); + } else { + return this.each( function() { + if ( complete ) { + complete.call( this ); + } + } ); + } + } - //Run through all droppables and check their positions based on specific tolerance options - $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { + function run( next ) { + var elem = $( this ); - if(this.options.disabled || this.greedyChild || !this.visible) return; - var intersects = $.ui.intersect(draggable, this, this.options.tolerance); + function cleanup() { + elem.removeData( dataSpaceAnimated ); - var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null); - if(!c) return; + $.effects.cleanUp( elem ); - var parentInstance; - if (this.options.greedy) { - var parent = this.element.parents(':data(droppable):eq(0)'); - if (parent.length) { - parentInstance = $.data(parent[0], 'droppable'); - parentInstance.greedyChild = (c == 'isover' ? 1 : 0); + if ( args.mode === "hide" ) { + elem.hide(); } + + done(); } - // we just moved into a greedy child - if (parentInstance && c == 'isover') { - parentInstance['isover'] = 0; - parentInstance['isout'] = 1; - parentInstance._out.call(parentInstance, event); + function done() { + if ( $.isFunction( complete ) ) { + complete.call( elem[ 0 ] ); + } + + if ( $.isFunction( next ) ) { + next(); + } } - this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0; - this[c == "isover" ? "_over" : "_out"].call(this, event); + // Override mode option on a per element basis, + // as toggle can be either show or hide depending on element state + args.mode = modes.shift(); + + if ( $.uiBackCompat !== false && !defaultMode ) { + if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) { + + // Call the core method to track "olddisplay" properly + elem[ mode ](); + done(); + } else { + effectMethod.call( elem[ 0 ], args, done ); + } + } else { + if ( args.mode === "none" ) { - // we just moved out of a greedy child - if (parentInstance && c == 'isout') { - parentInstance['isout'] = 0; - parentInstance['isover'] = 1; - parentInstance._over.call(parentInstance, event); + // Call the core method to track "olddisplay" properly + elem[ mode ](); + done(); + } else { + effectMethod.call( elem[ 0 ], args, cleanup ); + } } - }); + } + // Run prefilter on all elements first to ensure that + // any showing or hiding happens before placeholder creation, + // which ensures that any layout changes are correctly captured. + return queue === false ? + this.each( prefilter ).each( run ) : + this.queue( queueName, prefilter ).queue( queueName, run ); }, - dragStop: function( draggable, event ) { - draggable.element.parents( ":not(body,html)" ).unbind( "scroll.droppable" ); - //Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003) - if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event ); - } -}; -})(jQuery); -/*! - * jQuery UI Resizable 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Resizables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -$.widget("ui.resizable", $.ui.mouse, { - widgetEventPrefix: "resize", - options: { - alsoResize: false, - animate: false, - animateDuration: "slow", - animateEasing: "swing", - aspectRatio: false, - autoHide: false, - containment: false, - ghost: false, - grid: false, - handles: "e,s,se", - helper: false, - maxHeight: null, - maxWidth: null, - minHeight: 10, - minWidth: 10, - zIndex: 1000 - }, - _create: function() { - - var self = this, o = this.options; - this.element.addClass("ui-resizable"); - - $.extend(this, { - _aspectRatio: !!(o.aspectRatio), - aspectRatio: o.aspectRatio, - originalElement: this.element, - _proportionallyResizeElements: [], - _helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null - }); - - //Wrap the element if it cannot hold child nodes - if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) { + show: ( function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "show"; + return this.effect.call( this, args ); + } + }; + } )( $.fn.show ), - //Create a wrapper element and set the wrapper to the new current internal element - this.element.wrap( - $('
    ').css({ - position: this.element.css('position'), - width: this.element.outerWidth(), - height: this.element.outerHeight(), - top: this.element.css('top'), - left: this.element.css('left') - }) - ); + hide: ( function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "hide"; + return this.effect.call( this, args ); + } + }; + } )( $.fn.hide ), - //Overwrite the original this.element - this.element = this.element.parent().data( - "resizable", this.element.data('resizable') - ); + toggle: ( function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) || typeof option === "boolean" ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "toggle"; + return this.effect.call( this, args ); + } + }; + } )( $.fn.toggle ), - this.elementIsWrapper = true; + cssUnit: function( key ) { + var style = this.css( key ), + val = []; - //Move margins to the wrapper - this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") }); - this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0}); + $.each( [ "em", "px", "%", "pt" ], function( i, unit ) { + if ( style.indexOf( unit ) > 0 ) { + val = [ parseFloat( style ), unit ]; + } + } ); + return val; + }, - //Prevent Safari textarea resize - this.originalResizeStyle = this.originalElement.css('resize'); - this.originalElement.css('resize', 'none'); + cssClip: function( clipObj ) { + if ( clipObj ) { + return this.css( "clip", "rect(" + clipObj.top + "px " + clipObj.right + "px " + + clipObj.bottom + "px " + clipObj.left + "px)" ); + } + return parseClip( this.css( "clip" ), this ); + }, - //Push the actual element to our proportionallyResize internal array - this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' })); + transfer: function( options, done ) { + var element = $( this ), + target = $( options.to ), + targetFixed = target.css( "position" ) === "fixed", + body = $( "body" ), + fixTop = targetFixed ? body.scrollTop() : 0, + fixLeft = targetFixed ? body.scrollLeft() : 0, + endPosition = target.offset(), + animation = { + top: endPosition.top - fixTop, + left: endPosition.left - fixLeft, + height: target.innerHeight(), + width: target.innerWidth() + }, + startPosition = element.offset(), + transfer = $( "
    " ) + .appendTo( "body" ) + .addClass( options.className ) + .css( { + top: startPosition.top - fixTop, + left: startPosition.left - fixLeft, + height: element.innerHeight(), + width: element.innerWidth(), + position: targetFixed ? "fixed" : "absolute" + } ) + .animate( animation, options.duration, options.easing, function() { + transfer.remove(); + if ( $.isFunction( done ) ) { + done(); + } + } ); + } +} ); - // avoid IE jump (hard set the margin) - this.originalElement.css({ margin: this.originalElement.css('margin') }); +function parseClip( str, element ) { + var outerWidth = element.outerWidth(), + outerHeight = element.outerHeight(), + clipRegex = /^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/, + values = clipRegex.exec( str ) || [ "", 0, outerWidth, outerHeight, 0 ]; - // fix handlers offset - this._proportionallyResize(); + return { + top: parseFloat( values[ 1 ] ) || 0, + right: values[ 2 ] === "auto" ? outerWidth : parseFloat( values[ 2 ] ), + bottom: values[ 3 ] === "auto" ? outerHeight : parseFloat( values[ 3 ] ), + left: parseFloat( values[ 4 ] ) || 0 + }; +} +$.fx.step.clip = function( fx ) { + if ( !fx.clipInit ) { + fx.start = $( fx.elem ).cssClip(); + if ( typeof fx.end === "string" ) { + fx.end = parseClip( fx.end, fx.elem ); } + fx.clipInit = true; + } - this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' }); - if(this.handles.constructor == String) { + $( fx.elem ).cssClip( { + top: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top, + right: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right, + bottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom, + left: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left + } ); +}; + +} )(); - if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw'; - var n = this.handles.split(","); this.handles = {}; +/******************************************************************************/ +/*********************************** EASING ***********************************/ +/******************************************************************************/ - for(var i = 0; i < n.length; i++) { +( function() { - var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle; - var axis = $('
    '); +// Based on easing equations from Robert Penner (http://www.robertpenner.com/easing) - // Apply zIndex to all handles - see #7960 - axis.css({ zIndex: o.zIndex }); +var baseEasings = {}; - //TODO : What's going on here? - if ('se' == handle) { - axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se'); - }; +$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) { + baseEasings[ name ] = function( p ) { + return Math.pow( p, i + 2 ); + }; +} ); - //Insert into internal handles object and append to element - this.handles[handle] = '.ui-resizable-'+handle; - this.element.append(axis); - } +$.extend( baseEasings, { + Sine: function( p ) { + return 1 - Math.cos( p * Math.PI / 2 ); + }, + Circ: function( p ) { + return 1 - Math.sqrt( 1 - p * p ); + }, + Elastic: function( p ) { + return p === 0 || p === 1 ? p : + -Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 ); + }, + Back: function( p ) { + return p * p * ( 3 * p - 2 ); + }, + Bounce: function( p ) { + var pow2, + bounce = 4; - } + while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {} + return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 ); + } +} ); - this._renderAxis = function(target) { +$.each( baseEasings, function( name, easeIn ) { + $.easing[ "easeIn" + name ] = easeIn; + $.easing[ "easeOut" + name ] = function( p ) { + return 1 - easeIn( 1 - p ); + }; + $.easing[ "easeInOut" + name ] = function( p ) { + return p < 0.5 ? + easeIn( p * 2 ) / 2 : + 1 - easeIn( p * -2 + 2 ) / 2; + }; +} ); - target = target || this.element; +} )(); - for(var i in this.handles) { +var effect = $.effects; - if(this.handles[i].constructor == String) - this.handles[i] = $(this.handles[i], this.element).show(); - //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls) - if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) { +/*! + * jQuery UI Effects Blind 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - var axis = $(this.handles[i], this.element), padWrapper = 0; +//>>label: Blind Effect +//>>group: Effects +//>>description: Blinds the element. +//>>docs: http://api.jqueryui.com/blind-effect/ +//>>demos: http://jqueryui.com/effect/ - //Checking the correct pad and border - padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); - //The padding type i have to apply... - var padPos = [ 'padding', - /ne|nw|n/.test(i) ? 'Top' : - /se|sw|s/.test(i) ? 'Bottom' : - /^e$/.test(i) ? 'Right' : 'Left' ].join(""); - target.css(padPos, padWrapper); +var effectsEffectBlind = $.effects.define( "blind", "hide", function( options, done ) { + var map = { + up: [ "bottom", "top" ], + vertical: [ "bottom", "top" ], + down: [ "top", "bottom" ], + left: [ "right", "left" ], + horizontal: [ "right", "left" ], + right: [ "left", "right" ] + }, + element = $( this ), + direction = options.direction || "up", + start = element.cssClip(), + animate = { clip: $.extend( {}, start ) }, + placeholder = $.effects.createPlaceholder( element ); - this._proportionallyResize(); + animate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ]; - } + if ( options.mode === "show" ) { + element.cssClip( animate.clip ); + if ( placeholder ) { + placeholder.css( $.effects.clipToBox( animate ) ); + } - //TODO: What's that good for? There's not anything to be executed left - if(!$(this.handles[i]).length) - continue; + animate.clip = start; + } - } - }; + if ( placeholder ) { + placeholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing ); + } - //TODO: make renderAxis a prototype function - this._renderAxis(this.element); + element.animate( animate, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); - this._handles = $('.ui-resizable-handle', this.element) - .disableSelection(); - //Matching axis name - this._handles.mouseover(function() { - if (!self.resizing) { - if (this.className) - var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); - //Axis, default = se - self.axis = axis && axis[1] ? axis[1] : 'se'; - } - }); +/*! + * jQuery UI Effects Bounce 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - //If we want to auto hide the elements - if (o.autoHide) { - this._handles.hide(); - $(this.element) - .addClass("ui-resizable-autohide") - .hover(function() { - if (o.disabled) return; - $(this).removeClass("ui-resizable-autohide"); - self._handles.show(); - }, - function(){ - if (o.disabled) return; - if (!self.resizing) { - $(this).addClass("ui-resizable-autohide"); - self._handles.hide(); - } - }); - } +//>>label: Bounce Effect +//>>group: Effects +//>>description: Bounces an element horizontally or vertically n times. +//>>docs: http://api.jqueryui.com/bounce-effect/ +//>>demos: http://jqueryui.com/effect/ - //Initialize the mouse interaction - this._mouseInit(); - }, - destroy: function() { +var effectsEffectBounce = $.effects.define( "bounce", function( options, done ) { + var upAnim, downAnim, refValue, + element = $( this ), - this._mouseDestroy(); + // Defaults: + mode = options.mode, + hide = mode === "hide", + show = mode === "show", + direction = options.direction || "up", + distance = options.distance, + times = options.times || 5, - var _destroy = function(exp) { - $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing") - .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove(); - }; + // Number of internal animations + anims = times * 2 + ( show || hide ? 1 : 0 ), + speed = options.duration / anims, + easing = options.easing, - //TODO: Unwrap at same DOM position - if (this.elementIsWrapper) { - _destroy(this.element); - var wrapper = this.element; - wrapper.after( - this.originalElement.css({ - position: wrapper.css('position'), - width: wrapper.outerWidth(), - height: wrapper.outerHeight(), - top: wrapper.css('top'), - left: wrapper.css('left') - }) - ).remove(); - } + // Utility: + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + motion = ( direction === "up" || direction === "left" ), + i = 0, - this.originalElement.css('resize', this.originalResizeStyle); - _destroy(this.originalElement); + queuelen = element.queue().length; - return this; - }, + $.effects.createPlaceholder( element ); - _mouseCapture: function(event) { - var handle = false; - for (var i in this.handles) { - if ($(this.handles[i])[0] == event.target) { - handle = true; - } - } + refValue = element.css( ref ); - return !this.options.disabled && handle; - }, + // Default distance for the BIGGEST bounce is the outer Distance / 3 + if ( !distance ) { + distance = element[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3; + } - _mouseStart: function(event) { + if ( show ) { + downAnim = { opacity: 1 }; + downAnim[ ref ] = refValue; - var o = this.options, iniPos = this.element.position(), el = this.element; + // If we are showing, force opacity 0 and set the initial position + // then do the "first" animation + element + .css( "opacity", 0 ) + .css( ref, motion ? -distance * 2 : distance * 2 ) + .animate( downAnim, speed, easing ); + } - this.resizing = true; - this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() }; + // Start at the smallest distance if we are hiding + if ( hide ) { + distance = distance / Math.pow( 2, times - 1 ); + } - // bugfix for http://dev.jquery.com/ticket/1749 - if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { - el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left }); - } + downAnim = {}; + downAnim[ ref ] = refValue; - this._renderProxy(); + // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here + for ( ; i < times; i++ ) { + upAnim = {}; + upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; - var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top')); + element + .animate( upAnim, speed, easing ) + .animate( downAnim, speed, easing ); - if (o.containment) { - curleft += $(o.containment).scrollLeft() || 0; - curtop += $(o.containment).scrollTop() || 0; - } + distance = hide ? distance * 2 : distance / 2; + } - //Store needed variables - this.offset = this.helper.offset(); - this.position = { left: curleft, top: curtop }; - this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; - this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; - this.originalPosition = { left: curleft, top: curtop }; - this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() }; - this.originalMousePosition = { left: event.pageX, top: event.pageY }; + // Last Bounce when Hiding + if ( hide ) { + upAnim = { opacity: 0 }; + upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; - //Aspect Ratio - this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1); + element.animate( upAnim, speed, easing ); + } - var cursor = $('.ui-resizable-' + this.axis).css('cursor'); - $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor); + element.queue( done ); - el.addClass("ui-resizable-resizing"); - this._propagate("start", event); - return true; - }, + $.effects.unshift( element, queuelen, anims + 1 ); +} ); - _mouseDrag: function(event) { - //Increase performance, avoid regex - var el = this.helper, o = this.options, props = {}, - self = this, smp = this.originalMousePosition, a = this.axis; +/*! + * jQuery UI Effects Clip 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0; - var trigger = this._change[a]; - if (!trigger) return false; +//>>label: Clip Effect +//>>group: Effects +//>>description: Clips the element on and off like an old TV. +//>>docs: http://api.jqueryui.com/clip-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectClip = $.effects.define( "clip", "hide", function( options, done ) { + var start, + animate = {}, + element = $( this ), + direction = options.direction || "vertical", + both = direction === "both", + horizontal = both || direction === "horizontal", + vertical = both || direction === "vertical"; + + start = element.cssClip(); + animate.clip = { + top: vertical ? ( start.bottom - start.top ) / 2 : start.top, + right: horizontal ? ( start.right - start.left ) / 2 : start.right, + bottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom, + left: horizontal ? ( start.right - start.left ) / 2 : start.left + }; - // Calculate the attrs that will be change - var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff; + $.effects.createPlaceholder( element ); - // Put this in the mouseDrag handler since the user can start pressing shift while resizing - this._updateVirtualBoundaries(event.shiftKey); - if (this._aspectRatio || event.shiftKey) - data = this._updateRatio(data, event); + if ( options.mode === "show" ) { + element.cssClip( animate.clip ); + animate.clip = start; + } - data = this._respectSize(data, event); + element.animate( animate, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); - // plugins callbacks need to be called first - this._propagate("resize", event); +} ); - el.css({ - top: this.position.top + "px", left: this.position.left + "px", - width: this.size.width + "px", height: this.size.height + "px" - }); - if (!this._helper && this._proportionallyResizeElements.length) - this._proportionallyResize(); +/*! + * jQuery UI Effects Drop 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - this._updateCache(data); +//>>label: Drop Effect +//>>group: Effects +//>>description: Moves an element in one direction and hides it at the same time. +//>>docs: http://api.jqueryui.com/drop-effect/ +//>>demos: http://jqueryui.com/effect/ - // calling the user callback at the end - this._trigger('resize', event, this.ui()); - return false; - }, - _mouseStop: function(event) { +var effectsEffectDrop = $.effects.define( "drop", "hide", function( options, done ) { - this.resizing = false; - var o = this.options, self = this; + var distance, + element = $( this ), + mode = options.mode, + show = mode === "show", + direction = options.direction || "left", + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + motion = ( direction === "up" || direction === "left" ) ? "-=" : "+=", + oppositeMotion = ( motion === "+=" ) ? "-=" : "+=", + animation = { + opacity: 0 + }; - if(this._helper) { - var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), - soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, - soffsetw = ista ? 0 : self.sizeDiff.width; + $.effects.createPlaceholder( element ); - var s = { width: (self.helper.width() - soffsetw), height: (self.helper.height() - soffseth) }, - left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, - top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; + distance = options.distance || + element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2; - if (!o.animate) - this.element.css($.extend(s, { top: top, left: left })); + animation[ ref ] = motion + distance; - self.helper.height(self.size.height); - self.helper.width(self.size.width); + if ( show ) { + element.css( animation ); - if (this._helper && !o.animate) this._proportionallyResize(); - } + animation[ ref ] = oppositeMotion + distance; + animation.opacity = 1; + } - $('body').css('cursor', 'auto'); + // Animate + element.animate( animation, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); - this.element.removeClass("ui-resizable-resizing"); - this._propagate("stop", event); +/*! + * jQuery UI Effects Explode 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - if (this._helper) this.helper.remove(); - return false; +//>>label: Explode Effect +//>>group: Effects +// jscs:disable maximumLineLength +//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness. +// jscs:enable maximumLineLength +//>>docs: http://api.jqueryui.com/explode-effect/ +//>>demos: http://jqueryui.com/effect/ - }, - _updateVirtualBoundaries: function(forceAspectRatio) { - var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b; - b = { - minWidth: isNumber(o.minWidth) ? o.minWidth : 0, - maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity, - minHeight: isNumber(o.minHeight) ? o.minHeight : 0, - maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity - }; +var effectsEffectExplode = $.effects.define( "explode", "hide", function( options, done ) { - if(this._aspectRatio || forceAspectRatio) { - // We want to create an enclosing box whose aspect ration is the requested one - // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension - pMinWidth = b.minHeight * this.aspectRatio; - pMinHeight = b.minWidth / this.aspectRatio; - pMaxWidth = b.maxHeight * this.aspectRatio; - pMaxHeight = b.maxWidth / this.aspectRatio; + var i, j, left, top, mx, my, + rows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3, + cells = rows, + element = $( this ), + mode = options.mode, + show = mode === "show", - if(pMinWidth > b.minWidth) b.minWidth = pMinWidth; - if(pMinHeight > b.minHeight) b.minHeight = pMinHeight; - if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth; - if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight; - } - this._vBoundaries = b; - }, + // Show and then visibility:hidden the element before calculating offset + offset = element.show().css( "visibility", "hidden" ).offset(), - _updateCache: function(data) { - var o = this.options; - this.offset = this.helper.offset(); - if (isNumber(data.left)) this.position.left = data.left; - if (isNumber(data.top)) this.position.top = data.top; - if (isNumber(data.height)) this.size.height = data.height; - if (isNumber(data.width)) this.size.width = data.width; - }, + // Width and height of a piece + width = Math.ceil( element.outerWidth() / cells ), + height = Math.ceil( element.outerHeight() / rows ), + pieces = []; - _updateRatio: function(data, event) { + // Children animate complete: + function childComplete() { + pieces.push( this ); + if ( pieces.length === rows * cells ) { + animComplete(); + } + } - var o = this.options, cpos = this.position, csize = this.size, a = this.axis; + // Clone the element for each row and cell. + for ( i = 0; i < rows; i++ ) { // ===> + top = offset.top + i * height; + my = i - ( rows - 1 ) / 2; - if (isNumber(data.height)) data.width = (data.height * this.aspectRatio); - else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio); + for ( j = 0; j < cells; j++ ) { // ||| + left = offset.left + j * width; + mx = j - ( cells - 1 ) / 2; - if (a == 'sw') { - data.left = cpos.left + (csize.width - data.width); - data.top = null; - } - if (a == 'nw') { - data.top = cpos.top + (csize.height - data.height); - data.left = cpos.left + (csize.width - data.width); + // Create a clone of the now hidden main element that will be absolute positioned + // within a wrapper div off the -left and -top equal to size of our pieces + element + .clone() + .appendTo( "body" ) + .wrap( "
    " ) + .css( { + position: "absolute", + visibility: "visible", + left: -j * width, + top: -i * height + } ) + + // Select the wrapper - make it overflow: hidden and absolute positioned based on + // where the original was located +left and +top equal to the size of pieces + .parent() + .addClass( "ui-effects-explode" ) + .css( { + position: "absolute", + overflow: "hidden", + width: width, + height: height, + left: left + ( show ? mx * width : 0 ), + top: top + ( show ? my * height : 0 ), + opacity: show ? 0 : 1 + } ) + .animate( { + left: left + ( show ? 0 : mx * width ), + top: top + ( show ? 0 : my * height ), + opacity: show ? 1 : 0 + }, options.duration || 500, options.easing, childComplete ); } + } - return data; - }, + function animComplete() { + element.css( { + visibility: "visible" + } ); + $( pieces ).remove(); + done(); + } +} ); - _respectSize: function(data, event) { - var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis, - ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height), - isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height); +/*! + * jQuery UI Effects Fade 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - if (isminw) data.width = o.minWidth; - if (isminh) data.height = o.minHeight; - if (ismaxw) data.width = o.maxWidth; - if (ismaxh) data.height = o.maxHeight; +//>>label: Fade Effect +//>>group: Effects +//>>description: Fades the element. +//>>docs: http://api.jqueryui.com/fade-effect/ +//>>demos: http://jqueryui.com/effect/ - var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height; - var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a); - if (isminw && cw) data.left = dw - o.minWidth; - if (ismaxw && cw) data.left = dw - o.maxWidth; - if (isminh && ch) data.top = dh - o.minHeight; - if (ismaxh && ch) data.top = dh - o.maxHeight; - // fixing jump error on top/left - bug #2330 - var isNotwh = !data.width && !data.height; - if (isNotwh && !data.left && data.top) data.top = null; - else if (isNotwh && !data.top && data.left) data.left = null; +var effectsEffectFade = $.effects.define( "fade", "toggle", function( options, done ) { + var show = options.mode === "show"; - return data; - }, + $( this ) + .css( "opacity", show ? 0 : 1 ) + .animate( { + opacity: show ? 1 : 0 + }, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); - _proportionallyResize: function() { - var o = this.options; - if (!this._proportionallyResizeElements.length) return; - var element = this.helper || this.element; +/*! + * jQuery UI Effects Fold 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - for (var i=0; i < this._proportionallyResizeElements.length; i++) { +//>>label: Fold Effect +//>>group: Effects +//>>description: Folds an element first horizontally and then vertically. +//>>docs: http://api.jqueryui.com/fold-effect/ +//>>demos: http://jqueryui.com/effect/ - var prel = this._proportionallyResizeElements[i]; - if (!this.borderDif) { - var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')], - p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')]; - this.borderDif = $.map(b, function(v, i) { - var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0; - return border + padding; - }); - } +var effectsEffectFold = $.effects.define( "fold", "hide", function( options, done ) { - if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length))) - continue; + // Create element + var element = $( this ), + mode = options.mode, + show = mode === "show", + hide = mode === "hide", + size = options.size || 15, + percent = /([0-9]+)%/.exec( size ), + horizFirst = !!options.horizFirst, + ref = horizFirst ? [ "right", "bottom" ] : [ "bottom", "right" ], + duration = options.duration / 2, - prel.css({ - height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0, - width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0 - }); + placeholder = $.effects.createPlaceholder( element ), - }; + start = element.cssClip(), + animation1 = { clip: $.extend( {}, start ) }, + animation2 = { clip: $.extend( {}, start ) }, - }, + distance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ], - _renderProxy: function() { + queuelen = element.queue().length; - var el = this.element, o = this.options; - this.elementOffset = el.offset(); + if ( percent ) { + size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ]; + } + animation1.clip[ ref[ 0 ] ] = size; + animation2.clip[ ref[ 0 ] ] = size; + animation2.clip[ ref[ 1 ] ] = 0; - if(this._helper) { + if ( show ) { + element.cssClip( animation2.clip ); + if ( placeholder ) { + placeholder.css( $.effects.clipToBox( animation2 ) ); + } - this.helper = this.helper || $('
    '); + animation2.clip = start; + } - // fix ie6 offset TODO: This seems broken - var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0), - pxyoffset = ( ie6 ? 2 : -1 ); + // Animate + element + .queue( function( next ) { + if ( placeholder ) { + placeholder + .animate( $.effects.clipToBox( animation1 ), duration, options.easing ) + .animate( $.effects.clipToBox( animation2 ), duration, options.easing ); + } - this.helper.addClass(this._helper).css({ - width: this.element.outerWidth() + pxyoffset, - height: this.element.outerHeight() + pxyoffset, - position: 'absolute', - left: this.elementOffset.left - ie6offset +'px', - top: this.elementOffset.top - ie6offset +'px', - zIndex: ++o.zIndex //TODO: Don't modify option - }); + next(); + } ) + .animate( animation1, duration, options.easing ) + .animate( animation2, duration, options.easing ) + .queue( done ); - this.helper - .appendTo("body") - .disableSelection(); + $.effects.unshift( element, queuelen, 4 ); +} ); - } else { - this.helper = this.element; - } - }, +/*! + * jQuery UI Effects Highlight 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - _change: { - e: function(event, dx, dy) { - return { width: this.originalSize.width + dx }; - }, - w: function(event, dx, dy) { - var o = this.options, cs = this.originalSize, sp = this.originalPosition; - return { left: sp.left + dx, width: cs.width - dx }; - }, - n: function(event, dx, dy) { - var o = this.options, cs = this.originalSize, sp = this.originalPosition; - return { top: sp.top + dy, height: cs.height - dy }; - }, - s: function(event, dx, dy) { - return { height: this.originalSize.height + dy }; - }, - se: function(event, dx, dy) { - return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); - }, - sw: function(event, dx, dy) { - return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); - }, - ne: function(event, dx, dy) { - return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); - }, - nw: function(event, dx, dy) { - return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); - } - }, +//>>label: Highlight Effect +//>>group: Effects +//>>description: Highlights the background of an element in a defined color for a custom duration. +//>>docs: http://api.jqueryui.com/highlight-effect/ +//>>demos: http://jqueryui.com/effect/ - _propagate: function(n, event) { - $.ui.plugin.call(this, n, [event, this.ui()]); - (n != "resize" && this._trigger(n, event, this.ui())); - }, - plugins: {}, - ui: function() { - return { - originalElement: this.originalElement, - element: this.element, - helper: this.helper, - position: this.position, - size: this.size, - originalSize: this.originalSize, - originalPosition: this.originalPosition +var effectsEffectHighlight = $.effects.define( "highlight", "show", function( options, done ) { + var element = $( this ), + animation = { + backgroundColor: element.css( "backgroundColor" ) }; + + if ( options.mode === "hide" ) { + animation.opacity = 0; } -}); + $.effects.saveStyle( element ); -$.extend($.ui.resizable, { - version: "1.8.21" -}); + element + .css( { + backgroundImage: "none", + backgroundColor: options.color || "#ffff99" + } ) + .animate( animation, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); -/* - * Resizable Extensions + +/*! + * jQuery UI Effects Size 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license */ -$.ui.plugin.add("resizable", "alsoResize", { +//>>label: Size Effect +//>>group: Effects +//>>description: Resize an element to a specified width and height. +//>>docs: http://api.jqueryui.com/size-effect/ +//>>demos: http://jqueryui.com/effect/ - start: function (event, ui) { - var self = $(this).data("resizable"), o = self.options; - var _store = function (exp) { - $(exp).each(function() { - var el = $(this); - el.data("resizable-alsoresize", { - width: parseInt(el.width(), 10), height: parseInt(el.height(), 10), - left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10) - }); - }); - }; - if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) { - if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); } - else { $.each(o.alsoResize, function (exp) { _store(exp); }); } - }else{ - _store(o.alsoResize); - } - }, +var effectsEffectSize = $.effects.define( "size", function( options, done ) { - resize: function (event, ui) { - var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition; + // Create element + var baseline, factor, temp, + element = $( this ), - var delta = { - height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0, - top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0 - }, + // Copy for children + cProps = [ "fontSize" ], + vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ], + hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ], - _alsoResize = function (exp, c) { - $(exp).each(function() { - var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, - css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left']; + // Set options + mode = options.mode, + restore = mode !== "effect", + scale = options.scale || "both", + origin = options.origin || [ "middle", "center" ], + position = element.css( "position" ), + pos = element.position(), + original = $.effects.scaledDimensions( element ), + from = options.from || original, + to = options.to || $.effects.scaledDimensions( element, 0 ); + + $.effects.createPlaceholder( element ); + + if ( mode === "show" ) { + temp = from; + from = to; + to = temp; + } - $.each(css, function (i, prop) { - var sum = (start[prop]||0) + (delta[prop]||0); - if (sum && sum >= 0) - style[prop] = sum || null; - }); + // Set scaling factor + factor = { + from: { + y: from.height / original.height, + x: from.width / original.width + }, + to: { + y: to.height / original.height, + x: to.width / original.width + } + }; - el.css(style); - }); - }; + // Scale the css box + if ( scale === "box" || scale === "both" ) { - if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) { - $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); }); - }else{ - _alsoResize(o.alsoResize); + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + from = $.effects.setTransition( element, vProps, factor.from.y, from ); + to = $.effects.setTransition( element, vProps, factor.to.y, to ); } - }, - stop: function (event, ui) { - $(this).removeData("resizable-alsoresize"); + // Horizontal props scaling + if ( factor.from.x !== factor.to.x ) { + from = $.effects.setTransition( element, hProps, factor.from.x, from ); + to = $.effects.setTransition( element, hProps, factor.to.x, to ); + } } -}); - -$.ui.plugin.add("resizable", "animate", { - stop: function(event, ui) { - var self = $(this).data("resizable"), o = self.options; + // Scale the content + if ( scale === "content" || scale === "both" ) { - var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), - soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, - soffsetw = ista ? 0 : self.sizeDiff.width; + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + from = $.effects.setTransition( element, cProps, factor.from.y, from ); + to = $.effects.setTransition( element, cProps, factor.to.y, to ); + } + } - var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) }, - left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, - top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; + // Adjust the position properties based on the provided origin points + if ( origin ) { + baseline = $.effects.getBaseline( origin, original ); + from.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top; + from.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left; + to.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top; + to.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left; + } + element.css( from ); + + // Animate the children if desired + if ( scale === "content" || scale === "both" ) { + + vProps = vProps.concat( [ "marginTop", "marginBottom" ] ).concat( cProps ); + hProps = hProps.concat( [ "marginLeft", "marginRight" ] ); + + // Only animate children with width attributes specified + // TODO: is this right? should we include anything with css width specified as well + element.find( "*[width]" ).each( function() { + var child = $( this ), + childOriginal = $.effects.scaledDimensions( child ), + childFrom = { + height: childOriginal.height * factor.from.y, + width: childOriginal.width * factor.from.x, + outerHeight: childOriginal.outerHeight * factor.from.y, + outerWidth: childOriginal.outerWidth * factor.from.x + }, + childTo = { + height: childOriginal.height * factor.to.y, + width: childOriginal.width * factor.to.x, + outerHeight: childOriginal.height * factor.to.y, + outerWidth: childOriginal.width * factor.to.x + }; - self.element.animate( - $.extend(style, top && left ? { top: top, left: left } : {}), { - duration: o.animateDuration, - easing: o.animateEasing, - step: function() { + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + childFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom ); + childTo = $.effects.setTransition( child, vProps, factor.to.y, childTo ); + } - var data = { - width: parseInt(self.element.css('width'), 10), - height: parseInt(self.element.css('height'), 10), - top: parseInt(self.element.css('top'), 10), - left: parseInt(self.element.css('left'), 10) - }; + // Horizontal props scaling + if ( factor.from.x !== factor.to.x ) { + childFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom ); + childTo = $.effects.setTransition( child, hProps, factor.to.x, childTo ); + } - if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height }); + if ( restore ) { + $.effects.saveStyle( child ); + } - // propagating resize, and updating values for each animation step - self._updateCache(data); - self._propagate("resize", event); + // Animate children + child.css( childFrom ); + child.animate( childTo, options.duration, options.easing, function() { + // Restore children + if ( restore ) { + $.effects.restoreStyle( child ); } - } - ); + } ); + } ); } -}); + // Animate + element.animate( to, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: function() { -$.ui.plugin.add("resizable", "containment", { + var offset = element.offset(); - start: function(event, ui) { - var self = $(this).data("resizable"), o = self.options, el = self.element; - var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc; - if (!ce) return; + if ( to.opacity === 0 ) { + element.css( "opacity", from.opacity ); + } - self.containerElement = $(ce); + if ( !restore ) { + element + .css( "position", position === "static" ? "relative" : position ) + .offset( offset ); - if (/document/.test(oc) || oc == document) { - self.containerOffset = { left: 0, top: 0 }; - self.containerPosition = { left: 0, top: 0 }; + // Need to save style here so that automatic style restoration + // doesn't restore to the original styles from before the animation. + $.effects.saveStyle( element ); + } - self.parentData = { - element: $(document), left: 0, top: 0, - width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight - }; + done(); } + } ); - // i'm a node, so compute top, left, right, bottom - else { - var element = $(ce), p = []; - $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); }); +} ); - self.containerOffset = element.offset(); - self.containerPosition = element.position(); - self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) }; - var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width, - width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch); - - self.parentData = { - element: ce, left: co.left, top: co.top, width: width, height: height - }; - } - }, +/*! + * jQuery UI Effects Scale 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - resize: function(event, ui) { - var self = $(this).data("resizable"), o = self.options, - ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position, - pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement; +//>>label: Scale Effect +//>>group: Effects +//>>description: Grows or shrinks an element and its content. +//>>docs: http://api.jqueryui.com/scale-effect/ +//>>demos: http://jqueryui.com/effect/ - if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co; - if (cp.left < (self._helper ? co.left : 0)) { - self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left)); - if (pRatio) self.size.height = self.size.width / self.aspectRatio; - self.position.left = o.helper ? co.left : 0; - } - if (cp.top < (self._helper ? co.top : 0)) { - self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top); - if (pRatio) self.size.width = self.size.height * self.aspectRatio; - self.position.top = self._helper ? co.top : 0; - } +var effectsEffectScale = $.effects.define( "scale", function( options, done ) { - self.offset.left = self.parentData.left+self.position.left; - self.offset.top = self.parentData.top+self.position.top; + // Create element + var el = $( this ), + mode = options.mode, + percent = parseInt( options.percent, 10 ) || + ( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== "effect" ? 0 : 100 ) ), - var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ), - hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height ); + newOptions = $.extend( true, { + from: $.effects.scaledDimensions( el ), + to: $.effects.scaledDimensions( el, percent, options.direction || "both" ), + origin: options.origin || [ "middle", "center" ] + }, options ); - var isParent = self.containerElement.get(0) == self.element.parent().get(0), - isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position')); + // Fade option to support puff + if ( options.fade ) { + newOptions.from.opacity = 1; + newOptions.to.opacity = 0; + } - if(isParent && isOffsetRelative) woset -= self.parentData.left; + $.effects.effect.size.call( this, newOptions, done ); +} ); - if (woset + self.size.width >= self.parentData.width) { - self.size.width = self.parentData.width - woset; - if (pRatio) self.size.height = self.size.width / self.aspectRatio; - } - if (hoset + self.size.height >= self.parentData.height) { - self.size.height = self.parentData.height - hoset; - if (pRatio) self.size.width = self.size.height * self.aspectRatio; - } - }, +/*! + * jQuery UI Effects Puff 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - stop: function(event, ui){ - var self = $(this).data("resizable"), o = self.options, cp = self.position, - co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement; +//>>label: Puff Effect +//>>group: Effects +//>>description: Creates a puff effect by scaling the element up and hiding it at the same time. +//>>docs: http://api.jqueryui.com/puff-effect/ +//>>demos: http://jqueryui.com/effect/ - var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height; - if (self._helper && !o.animate && (/relative/).test(ce.css('position'))) - $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); - if (self._helper && !o.animate && (/static/).test(ce.css('position'))) - $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); +var effectsEffectPuff = $.effects.define( "puff", "hide", function( options, done ) { + var newOptions = $.extend( true, {}, options, { + fade: true, + percent: parseInt( options.percent, 10 ) || 150 + } ); - } -}); + $.effects.effect.scale.call( this, newOptions, done ); +} ); -$.ui.plugin.add("resizable", "ghost", { - start: function(event, ui) { +/*! + * jQuery UI Effects Pulsate 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - var self = $(this).data("resizable"), o = self.options, cs = self.size; +//>>label: Pulsate Effect +//>>group: Effects +//>>description: Pulsates an element n times by changing the opacity to zero and back. +//>>docs: http://api.jqueryui.com/pulsate-effect/ +//>>demos: http://jqueryui.com/effect/ - self.ghost = self.originalElement.clone(); - self.ghost - .css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 }) - .addClass('ui-resizable-ghost') - .addClass(typeof o.ghost == 'string' ? o.ghost : ''); - self.ghost.appendTo(self.helper); - }, +var effectsEffectPulsate = $.effects.define( "pulsate", "show", function( options, done ) { + var element = $( this ), + mode = options.mode, + show = mode === "show", + hide = mode === "hide", + showhide = show || hide, - resize: function(event, ui){ - var self = $(this).data("resizable"), o = self.options; - if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width }); - }, + // Showing or hiding leaves off the "last" animation + anims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ), + duration = options.duration / anims, + animateTo = 0, + i = 1, + queuelen = element.queue().length; - stop: function(event, ui){ - var self = $(this).data("resizable"), o = self.options; - if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0)); + if ( show || !element.is( ":visible" ) ) { + element.css( "opacity", 0 ).show(); + animateTo = 1; } -}); - -$.ui.plugin.add("resizable", "grid", { - - resize: function(event, ui) { - var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey; - o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid; - var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1); - - if (/^(se|s|e)$/.test(a)) { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - } - else if (/^(ne)$/.test(a)) { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - self.position.top = op.top - oy; - } - else if (/^(sw)$/.test(a)) { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - self.position.left = op.left - ox; - } - else { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - self.position.top = op.top - oy; - self.position.left = op.left - ox; - } + // Anims - 1 opacity "toggles" + for ( ; i < anims; i++ ) { + element.animate( { opacity: animateTo }, duration, options.easing ); + animateTo = 1 - animateTo; } -}); + element.animate( { opacity: animateTo }, duration, options.easing ); -var num = function(v) { - return parseInt(v, 10) || 0; -}; + element.queue( done ); + + $.effects.unshift( element, queuelen, anims + 1 ); +} ); -var isNumber = function(value) { - return !isNaN(parseInt(value, 10)); -}; -})(jQuery); /*! - * jQuery UI Selectable 1.8.21 + * jQuery UI Effects Shake 1.12.1 + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. * http://jquery.org/license - * - * http://docs.jquery.com/UI/Selectables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js */ -(function( $, undefined ) { -$.widget("ui.selectable", $.ui.mouse, { - options: { - appendTo: 'body', - autoRefresh: true, - distance: 0, - filter: '*', - tolerance: 'touch' - }, - _create: function() { - var self = this; +//>>label: Shake Effect +//>>group: Effects +//>>description: Shakes an element horizontally or vertically n times. +//>>docs: http://api.jqueryui.com/shake-effect/ +//>>demos: http://jqueryui.com/effect/ - this.element.addClass("ui-selectable"); - this.dragged = false; - // cache selectee children based on filter - var selectees; - this.refresh = function() { - selectees = $(self.options.filter, self.element[0]); - selectees.addClass("ui-selectee"); - selectees.each(function() { - var $this = $(this); - var pos = $this.offset(); - $.data(this, "selectable-item", { - element: this, - $element: $this, - left: pos.left, - top: pos.top, - right: pos.left + $this.outerWidth(), - bottom: pos.top + $this.outerHeight(), - startselected: false, - selected: $this.hasClass('ui-selected'), - selecting: $this.hasClass('ui-selecting'), - unselecting: $this.hasClass('ui-unselecting') - }); - }); - }; - this.refresh(); +var effectsEffectShake = $.effects.define( "shake", function( options, done ) { - this.selectees = selectees.addClass("ui-selectee"); + var i = 1, + element = $( this ), + direction = options.direction || "left", + distance = options.distance || 20, + times = options.times || 3, + anims = times * 2 + 1, + speed = Math.round( options.duration / anims ), + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + positiveMotion = ( direction === "up" || direction === "left" ), + animation = {}, + animation1 = {}, + animation2 = {}, - this._mouseInit(); + queuelen = element.queue().length; - this.helper = $("
    "); - }, + $.effects.createPlaceholder( element ); - destroy: function() { - this.selectees - .removeClass("ui-selectee") - .removeData("selectable-item"); - this.element - .removeClass("ui-selectable ui-selectable-disabled") - .removeData("selectable") - .unbind(".selectable"); - this._mouseDestroy(); + // Animation + animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance; + animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2; + animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2; - return this; - }, + // Animate + element.animate( animation, speed, options.easing ); - _mouseStart: function(event) { - var self = this; + // Shakes + for ( ; i < times; i++ ) { + element + .animate( animation1, speed, options.easing ) + .animate( animation2, speed, options.easing ); + } - this.opos = [event.pageX, event.pageY]; + element + .animate( animation1, speed, options.easing ) + .animate( animation, speed / 2, options.easing ) + .queue( done ); - if (this.options.disabled) - return; + $.effects.unshift( element, queuelen, anims + 1 ); +} ); - var options = this.options; - this.selectees = $(options.filter, this.element[0]); +/*! + * jQuery UI Effects Slide 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - this._trigger("start", event); +//>>label: Slide Effect +//>>group: Effects +//>>description: Slides an element in and out of the viewport. +//>>docs: http://api.jqueryui.com/slide-effect/ +//>>demos: http://jqueryui.com/effect/ - $(options.appendTo).append(this.helper); - // position helper (lasso) - this.helper.css({ - "left": event.clientX, - "top": event.clientY, - "width": 0, - "height": 0 - }); - if (options.autoRefresh) { - this.refresh(); - } - this.selectees.filter('.ui-selected').each(function() { - var selectee = $.data(this, "selectable-item"); - selectee.startselected = true; - if (!event.metaKey && !event.ctrlKey) { - selectee.$element.removeClass('ui-selected'); - selectee.selected = false; - selectee.$element.addClass('ui-unselecting'); - selectee.unselecting = true; - // selectable UNSELECTING callback - self._trigger("unselecting", event, { - unselecting: selectee.element - }); - } - }); +var effectsEffectSlide = $.effects.define( "slide", "show", function( options, done ) { + var startClip, startRef, + element = $( this ), + map = { + up: [ "bottom", "top" ], + down: [ "top", "bottom" ], + left: [ "right", "left" ], + right: [ "left", "right" ] + }, + mode = options.mode, + direction = options.direction || "left", + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + positiveMotion = ( direction === "up" || direction === "left" ), + distance = options.distance || + element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ), + animation = {}; + + $.effects.createPlaceholder( element ); + + startClip = element.cssClip(); + startRef = element.position()[ ref ]; + + // Define hide animation + animation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef; + animation.clip = element.cssClip(); + animation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ]; + + // Reverse the animation if we're showing + if ( mode === "show" ) { + element.cssClip( animation.clip ); + element.css( ref, animation[ ref ] ); + animation.clip = startClip; + animation[ ref ] = startRef; + } - $(event.target).parents().andSelf().each(function() { - var selectee = $.data(this, "selectable-item"); - if (selectee) { - var doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass('ui-selected'); - selectee.$element - .removeClass(doSelect ? "ui-unselecting" : "ui-selected") - .addClass(doSelect ? "ui-selecting" : "ui-unselecting"); - selectee.unselecting = !doSelect; - selectee.selecting = doSelect; - selectee.selected = doSelect; - // selectable (UN)SELECTING callback - if (doSelect) { - self._trigger("selecting", event, { - selecting: selectee.element - }); - } else { - self._trigger("unselecting", event, { - unselecting: selectee.element - }); - } - return false; - } - }); + // Actually animate + element.animate( animation, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); - }, - _mouseDrag: function(event) { - var self = this; - this.dragged = true; +/*! + * jQuery UI Effects Transfer 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - if (this.options.disabled) - return; +//>>label: Transfer Effect +//>>group: Effects +//>>description: Displays a transfer effect from one element to another. +//>>docs: http://api.jqueryui.com/transfer-effect/ +//>>demos: http://jqueryui.com/effect/ - var options = this.options; - var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY; - if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; } - if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; } - this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1}); - this.selectees.each(function() { - var selectee = $.data(this, "selectable-item"); - //prevent helper from being selected if appendTo: selectable - if (!selectee || selectee.element == self.element[0]) - return; - var hit = false; - if (options.tolerance == 'touch') { - hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) ); - } else if (options.tolerance == 'fit') { - hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2); - } +var effect; +if ( $.uiBackCompat !== false ) { + effect = $.effects.define( "transfer", function( options, done ) { + $( this ).transfer( options, done ); + } ); +} +var effectsEffectTransfer = effect; - if (hit) { - // SELECT - if (selectee.selected) { - selectee.$element.removeClass('ui-selected'); - selectee.selected = false; - } - if (selectee.unselecting) { - selectee.$element.removeClass('ui-unselecting'); - selectee.unselecting = false; - } - if (!selectee.selecting) { - selectee.$element.addClass('ui-selecting'); - selectee.selecting = true; - // selectable SELECTING callback - self._trigger("selecting", event, { - selecting: selectee.element - }); - } - } else { - // UNSELECT - if (selectee.selecting) { - if ((event.metaKey || event.ctrlKey) && selectee.startselected) { - selectee.$element.removeClass('ui-selecting'); - selectee.selecting = false; - selectee.$element.addClass('ui-selected'); - selectee.selected = true; - } else { - selectee.$element.removeClass('ui-selecting'); - selectee.selecting = false; - if (selectee.startselected) { - selectee.$element.addClass('ui-unselecting'); - selectee.unselecting = true; - } - // selectable UNSELECTING callback - self._trigger("unselecting", event, { - unselecting: selectee.element - }); - } - } - if (selectee.selected) { - if (!event.metaKey && !event.ctrlKey && !selectee.startselected) { - selectee.$element.removeClass('ui-selected'); - selectee.selected = false; - selectee.$element.addClass('ui-unselecting'); - selectee.unselecting = true; - // selectable UNSELECTING callback - self._trigger("unselecting", event, { - unselecting: selectee.element - }); - } - } - } - }); +/*! + * jQuery UI Focusable 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - return false; - }, +//>>label: :focusable Selector +//>>group: Core +//>>description: Selects elements which can be focused. +//>>docs: http://api.jqueryui.com/focusable-selector/ - _mouseStop: function(event) { - var self = this; - this.dragged = false; - var options = this.options; +// Selectors +$.ui.focusable = function( element, hasTabindex ) { + var map, mapName, img, focusableIfVisible, fieldset, + nodeName = element.nodeName.toLowerCase(); - $('.ui-unselecting', this.element[0]).each(function() { - var selectee = $.data(this, "selectable-item"); - selectee.$element.removeClass('ui-unselecting'); - selectee.unselecting = false; - selectee.startselected = false; - self._trigger("unselected", event, { - unselected: selectee.element - }); - }); - $('.ui-selecting', this.element[0]).each(function() { - var selectee = $.data(this, "selectable-item"); - selectee.$element.removeClass('ui-selecting').addClass('ui-selected'); - selectee.selecting = false; - selectee.selected = true; - selectee.startselected = true; - self._trigger("selected", event, { - selected: selectee.element - }); - }); - this._trigger("stop", event); + if ( "area" === nodeName ) { + map = element.parentNode; + mapName = map.name; + if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { + return false; + } + img = $( "img[usemap='#" + mapName + "']" ); + return img.length > 0 && img.is( ":visible" ); + } - this.helper.remove(); + if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) { + focusableIfVisible = !element.disabled; - return false; + if ( focusableIfVisible ) { + + // Form controls within a disabled fieldset are disabled. + // However, controls within the fieldset's legend do not get disabled. + // Since controls generally aren't placed inside legends, we skip + // this portion of the check. + fieldset = $( element ).closest( "fieldset" )[ 0 ]; + if ( fieldset ) { + focusableIfVisible = !fieldset.disabled; + } + } + } else if ( "a" === nodeName ) { + focusableIfVisible = element.href || hasTabindex; + } else { + focusableIfVisible = hasTabindex; } -}); + return focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) ); +}; + +// Support: IE 8 only +// IE 8 doesn't resolve inherit to visible/hidden for computed values +function visible( element ) { + var visibility = element.css( "visibility" ); + while ( visibility === "inherit" ) { + element = element.parent(); + visibility = element.css( "visibility" ); + } + return visibility !== "hidden"; +} + +$.extend( $.expr[ ":" ], { + focusable: function( element ) { + return $.ui.focusable( element, $.attr( element, "tabindex" ) != null ); + } +} ); + +var focusable = $.ui.focusable; + + + + +// Support: IE8 Only +// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop +// with a string, so we need to find the proper form. +var form = $.fn.form = function() { + return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form ); +}; -$.extend($.ui.selectable, { - version: "1.8.21" -}); -})(jQuery); /*! - * jQuery UI Sortable 1.8.21 + * jQuery UI Form Reset Mixin 1.12.1 + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. * http://jquery.org/license - * - * http://docs.jquery.com/UI/Sortables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js */ -(function( $, undefined ) { - -$.widget("ui.sortable", $.ui.mouse, { - widgetEventPrefix: "sort", - ready: false, - options: { - appendTo: "parent", - axis: false, - connectWith: false, - containment: false, - cursor: 'auto', - cursorAt: false, - dropOnEmpty: true, - forcePlaceholderSize: false, - forceHelperSize: false, - grid: false, - handle: false, - helper: "original", - items: '> *', - opacity: false, - placeholder: false, - revert: false, - scroll: true, - scrollSensitivity: 20, - scrollSpeed: 20, - scope: "default", - tolerance: "intersect", - zIndex: 1000 - }, - _create: function() { - - var o = this.options; - this.containerCache = {}; - this.element.addClass("ui-sortable"); - //Get the items - this.refresh(); +//>>label: Form Reset Mixin +//>>group: Core +//>>description: Refresh input widgets when their form is reset +//>>docs: http://api.jqueryui.com/form-reset-mixin/ - //Let's determine if the items are being displayed horizontally - this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false; - //Let's determine the parent's offset - this.offset = this.element.offset(); - //Initialize mouse events for interaction - this._mouseInit(); - - //We're ready to go - this.ready = true +var formResetMixin = $.ui.formResetMixin = { + _formResetHandler: function() { + var form = $( this ); + // Wait for the form reset to actually happen before refreshing + setTimeout( function() { + var instances = form.data( "ui-form-reset-instances" ); + $.each( instances, function() { + this.refresh(); + } ); + } ); }, - destroy: function() { - $.Widget.prototype.destroy.call( this ); - this.element - .removeClass("ui-sortable ui-sortable-disabled"); - this._mouseDestroy(); - - for ( var i = this.items.length - 1; i >= 0; i-- ) - this.items[i].item.removeData(this.widgetName + "-item"); + _bindFormResetHandler: function() { + this.form = this.element.form(); + if ( !this.form.length ) { + return; + } - return this; - }, + var instances = this.form.data( "ui-form-reset-instances" ) || []; + if ( !instances.length ) { - _setOption: function(key, value){ - if ( key === "disabled" ) { - this.options[ key ] = value; - - this.widget() - [ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" ); - } else { - // Don't call widget base _setOption for disable as it adds ui-state-disabled class - $.Widget.prototype._setOption.apply(this, arguments); + // We don't use _on() here because we use a single event handler per form + this.form.on( "reset.ui-form-reset", this._formResetHandler ); } + instances.push( this ); + this.form.data( "ui-form-reset-instances", instances ); }, - _mouseCapture: function(event, overrideHandle) { - var that = this; - - if (this.reverting) { - return false; + _unbindFormResetHandler: function() { + if ( !this.form.length ) { + return; } - if(this.options.disabled || this.options.type == 'static') return false; + var instances = this.form.data( "ui-form-reset-instances" ); + instances.splice( $.inArray( this, instances ), 1 ); + if ( instances.length ) { + this.form.data( "ui-form-reset-instances", instances ); + } else { + this.form + .removeData( "ui-form-reset-instances" ) + .off( "reset.ui-form-reset" ); + } + } +}; - //We have to refresh the items data once first - this._refreshItems(event); - //Find out if the clicked node (or one of its parents) is a actual item in this.items - var currentItem = null, self = this, nodes = $(event.target).parents().each(function() { - if($.data(this, that.widgetName + '-item') == self) { - currentItem = $(this); - return false; - } - }); - if($.data(event.target, that.widgetName + '-item') == self) currentItem = $(event.target); +/*! + * jQuery UI Support for jQuery core 1.7.x 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + */ - if(!currentItem) return false; - if(this.options.handle && !overrideHandle) { - var validHandle = false; +//>>label: jQuery 1.7 Support +//>>group: Core +//>>description: Support version 1.7.x of jQuery core + + + +// Support: jQuery 1.7 only +// Not a great way to check versions, but since we only support 1.7+ and only +// need to detect <1.8, this is a simple check that should suffice. Checking +// for "1.7." would be a bit safer, but the version string is 1.7, not 1.7.0 +// and we'll never reach 1.70.0 (if we do, we certainly won't be supporting +// 1.7 anymore). See #11197 for why we're not using feature detection. +if ( $.fn.jquery.substring( 0, 3 ) === "1.7" ) { + + // Setters for .innerWidth(), .innerHeight(), .outerWidth(), .outerHeight() + // Unlike jQuery Core 1.8+, these only support numeric values to set the + // dimensions in pixels + $.each( [ "Width", "Height" ], function( i, name ) { + var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], + type = name.toLowerCase(), + orig = { + innerWidth: $.fn.innerWidth, + innerHeight: $.fn.innerHeight, + outerWidth: $.fn.outerWidth, + outerHeight: $.fn.outerHeight + }; - $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; }); - if(!validHandle) return false; + function reduce( elem, size, border, margin ) { + $.each( side, function() { + size -= parseFloat( $.css( elem, "padding" + this ) ) || 0; + if ( border ) { + size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0; + } + if ( margin ) { + size -= parseFloat( $.css( elem, "margin" + this ) ) || 0; + } + } ); + return size; } - this.currentItem = currentItem; - this._removeCurrentsFromItems(); - return true; + $.fn[ "inner" + name ] = function( size ) { + if ( size === undefined ) { + return orig[ "inner" + name ].call( this ); + } - }, + return this.each( function() { + $( this ).css( type, reduce( this, size ) + "px" ); + } ); + }; - _mouseStart: function(event, overrideHandle, noActivation) { + $.fn[ "outer" + name ] = function( size, margin ) { + if ( typeof size !== "number" ) { + return orig[ "outer" + name ].call( this, size ); + } - var o = this.options, self = this; - this.currentContainer = this; + return this.each( function() { + $( this ).css( type, reduce( this, size, true, margin ) + "px" ); + } ); + }; + } ); - //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture - this.refreshPositions(); + $.fn.addBack = function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + }; +} - //Create and append the visible helper - this.helper = this._createHelper(event); - - //Cache the helper size - this._cacheHelperProportions(); - - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ +; +/*! + * jQuery UI Keycode 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - //Cache the margins of the original element - this._cacheMargins(); +//>>label: Keycode +//>>group: Core +//>>description: Provide keycodes as keynames +//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/ + + +var keycode = $.ui.keyCode = { + BACKSPACE: 8, + COMMA: 188, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + LEFT: 37, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SPACE: 32, + TAB: 9, + UP: 38 +}; - //Get the next scrolling parent - this.scrollParent = this.helper.scrollParent(); - //The element's absolute position on the page minus margins - this.offset = this.currentItem.offset(); - this.offset = { - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - $.extend(this.offset, { - click: { //Where the click happened, relative to the element - left: event.pageX - this.offset.left, - top: event.pageY - this.offset.top - }, - parent: this._getParentOffset(), - relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper - }); - // Only after we got the offset, we can change the helper's position to absolute - // TODO: Still need to figure out a way to make relative sorting possible - this.helper.css("position", "absolute"); - this.cssPosition = this.helper.css("position"); - - //Generate the original position - this.originalPosition = this._generatePosition(event); - this.originalPageX = event.pageX; - this.originalPageY = event.pageY; +// Internal use only +var escapeSelector = $.ui.escapeSelector = ( function() { + var selectorEscape = /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g; + return function( selector ) { + return selector.replace( selectorEscape, "\\$1" ); + }; +} )(); - //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied - (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); - //Cache the former DOM position - this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; +/*! + * jQuery UI Labels 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way - if(this.helper[0] != this.currentItem[0]) { - this.currentItem.hide(); - } +//>>label: labels +//>>group: Core +//>>description: Find all the labels associated with a given input +//>>docs: http://api.jqueryui.com/labels/ - //Create the placeholder - this._createPlaceholder(); - //Set a containment if given in the options - if(o.containment) - this._setContainment(); - if(o.cursor) { // cursor option - if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor"); - $('body').css("cursor", o.cursor); - } +var labels = $.fn.labels = function() { + var ancestor, selector, id, labels, ancestors; - if(o.opacity) { // opacity option - if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity"); - this.helper.css("opacity", o.opacity); - } + // Check control.labels first + if ( this[ 0 ].labels && this[ 0 ].labels.length ) { + return this.pushStack( this[ 0 ].labels ); + } - if(o.zIndex) { // zIndex option - if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex"); - this.helper.css("zIndex", o.zIndex); - } + // Support: IE <= 11, FF <= 37, Android <= 2.3 only + // Above browsers do not support control.labels. Everything below is to support them + // as well as document fragments. control.labels does not work on document fragments + labels = this.eq( 0 ).parents( "label" ); - //Prepare scrolling - if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') - this.overflowOffset = this.scrollParent.offset(); + // Look for the label based on the id + id = this.attr( "id" ); + if ( id ) { - //Call callbacks - this._trigger("start", event, this._uiHash()); + // We don't search against the document in case the element + // is disconnected from the DOM + ancestor = this.eq( 0 ).parents().last(); - //Recache the helper size - if(!this._preserveHelperProportions) - this._cacheHelperProportions(); + // Get a full set of top level ancestors + ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() ); + // Create a selector for the label based on the id + selector = "label[for='" + $.ui.escapeSelector( id ) + "']"; - //Post 'activate' events to possible containers - if(!noActivation) { - for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); } - } + labels = labels.add( ancestors.find( selector ).addBack( selector ) ); - //Prepare possible droppables - if($.ui.ddmanager) - $.ui.ddmanager.current = this; + } - if ($.ui.ddmanager && !o.dropBehaviour) - $.ui.ddmanager.prepareOffsets(this, event); + // Return whatever we have found for labels + return this.pushStack( labels ); +}; - this.dragging = true; - this.helper.addClass("ui-sortable-helper"); - this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position - return true; +/*! + * jQuery UI Scroll Parent 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - }, +//>>label: scrollParent +//>>group: Core +//>>description: Get the closest ancestor element that is scrollable. +//>>docs: http://api.jqueryui.com/scrollParent/ - _mouseDrag: function(event) { - //Compute the helpers position - this.position = this._generatePosition(event); - this.positionAbs = this._convertPositionTo("absolute"); - if (!this.lastPositionAbs) { - this.lastPositionAbs = this.positionAbs; - } +var scrollParent = $.fn.scrollParent = function( includeHidden ) { + var position = this.css( "position" ), + excludeStaticParent = position === "absolute", + overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, + scrollParent = this.parents().filter( function() { + var parent = $( this ); + if ( excludeStaticParent && parent.css( "position" ) === "static" ) { + return false; + } + return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + + parent.css( "overflow-x" ) ); + } ).eq( 0 ); - //Do scrolling - if(this.options.scroll) { - var o = this.options, scrolled = false; - if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') { + return position === "fixed" || !scrollParent.length ? + $( this[ 0 ].ownerDocument || document ) : + scrollParent; +}; - if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) - this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; - else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) - this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; - if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) - this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; - else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) - this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; +/*! + * jQuery UI Tabbable 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - } else { +//>>label: :tabbable Selector +//>>group: Core +//>>description: Selects elements which can be tabbed to. +//>>docs: http://api.jqueryui.com/tabbable-selector/ - if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) - scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) - scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) - scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) - scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - } +var tabbable = $.extend( $.expr[ ":" ], { + tabbable: function( element ) { + var tabIndex = $.attr( element, "tabindex" ), + hasTabindex = tabIndex != null; + return ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex ); + } +} ); - if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) - $.ui.ddmanager.prepareOffsets(this, event); - } - //Regenerate the absolute position used for position checks - this.positionAbs = this._convertPositionTo("absolute"); +/*! + * jQuery UI Unique ID 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - //Set the helper position - if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; - if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; +//>>label: uniqueId +//>>group: Core +//>>description: Functions to generate and remove uniqueId's +//>>docs: http://api.jqueryui.com/uniqueId/ - //Rearrange - for (var i = this.items.length - 1; i >= 0; i--) { - //Cache variables and intersection, continue if no intersection - var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item); - if (!intersection) continue; - - if(itemElement != this.currentItem[0] //cannot intersect with itself - && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before - && !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked - && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true) - //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container - ) { - this.direction = intersection == 1 ? "down" : "up"; +var uniqueId = $.fn.extend( { + uniqueId: ( function() { + var uuid = 0; - if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) { - this._rearrange(event, item); - } else { - break; + return function() { + return this.each( function() { + if ( !this.id ) { + this.id = "ui-id-" + ( ++uuid ); } + } ); + }; + } )(), - this._trigger("change", event, this._uiHash()); - break; + removeUniqueId: function() { + return this.each( function() { + if ( /^ui-id-\d+$/.test( this.id ) ) { + $( this ).removeAttr( "id" ); } - } + } ); + } +} ); - //Post events to containers - this._contactContainers(event); - //Interconnect with droppables - if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); +/*! + * jQuery UI Accordion 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ - //Call callbacks - this._trigger('sort', event, this._uiHash()); +//>>label: Accordion +//>>group: Widgets +// jscs:disable maximumLineLength +//>>description: Displays collapsible content panels for presenting information in a limited amount of space. +// jscs:enable maximumLineLength +//>>docs: http://api.jqueryui.com/accordion/ +//>>demos: http://jqueryui.com/accordion/ +//>>css.structure: ../../themes/base/core.css +//>>css.structure: ../../themes/base/accordion.css +//>>css.theme: ../../themes/base/theme.css - this.lastPositionAbs = this.positionAbs; - return false; + +var widgetsAccordion = $.widget( "ui.accordion", { + version: "1.12.1", + options: { + active: 0, + animate: {}, + classes: { + "ui-accordion-header": "ui-corner-top", + "ui-accordion-header-collapsed": "ui-corner-all", + "ui-accordion-content": "ui-corner-bottom" + }, + collapsible: false, + event: "click", + header: "> li > :first-child, > :not(li):even", + heightStyle: "auto", + icons: { + activeHeader: "ui-icon-triangle-1-s", + header: "ui-icon-triangle-1-e" + }, + + // Callbacks + activate: null, + beforeActivate: null }, - _mouseStop: function(event, noPropagation) { + hideProps: { + borderTopWidth: "hide", + borderBottomWidth: "hide", + paddingTop: "hide", + paddingBottom: "hide", + height: "hide" + }, - if(!event) return; + showProps: { + borderTopWidth: "show", + borderBottomWidth: "show", + paddingTop: "show", + paddingBottom: "show", + height: "show" + }, - //If we are using droppables, inform the manager about the drop - if ($.ui.ddmanager && !this.options.dropBehaviour) - $.ui.ddmanager.drop(this, event); + _create: function() { + var options = this.options; - if(this.options.revert) { - var self = this; - var cur = self.placeholder.offset(); + this.prevShow = this.prevHide = $(); + this._addClass( "ui-accordion", "ui-widget ui-helper-reset" ); + this.element.attr( "role", "tablist" ); - self.reverting = true; + // Don't allow collapsible: false and active: false / null + if ( !options.collapsible && ( options.active === false || options.active == null ) ) { + options.active = 0; + } - $(this.helper).animate({ - left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft), - top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) - }, parseInt(this.options.revert, 10) || 500, function() { - self._clear(event); - }); - } else { - this._clear(event, noPropagation); + this._processPanels(); + + // handle negative values + if ( options.active < 0 ) { + options.active += this.headers.length; } + this._refresh(); + }, - return false; + _getCreateEventData: function() { + return { + header: this.active, + panel: !this.active.length ? $() : this.active.next() + }; + }, + + _createIcons: function() { + var icon, children, + icons = this.options.icons; + if ( icons ) { + icon = $( "" ); + this._addClass( icon, "ui-accordion-header-icon", "ui-icon " + icons.header ); + icon.prependTo( this.headers ); + children = this.active.children( ".ui-accordion-header-icon" ); + this._removeClass( children, icons.header ) + ._addClass( children, null, icons.activeHeader ) + ._addClass( this.headers, "ui-accordion-icons" ); + } }, - cancel: function() { + _destroyIcons: function() { + this._removeClass( this.headers, "ui-accordion-icons" ); + this.headers.children( ".ui-accordion-header-icon" ).remove(); + }, - var self = this; + _destroy: function() { + var contents; - if(this.dragging) { + // Clean up main element + this.element.removeAttr( "role" ); - this._mouseUp({ target: null }); + // Clean up headers + this.headers + .removeAttr( "role aria-expanded aria-selected aria-controls tabIndex" ) + .removeUniqueId(); - if(this.options.helper == "original") - this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); - else - this.currentItem.show(); + this._destroyIcons(); - //Post deactivating events to containers - for (var i = this.containers.length - 1; i >= 0; i--){ - this.containers[i]._trigger("deactivate", null, self._uiHash(this)); - if(this.containers[i].containerCache.over) { - this.containers[i]._trigger("out", null, self._uiHash(this)); - this.containers[i].containerCache.over = 0; - } - } + // Clean up content panels + contents = this.headers.next() + .css( "display", "" ) + .removeAttr( "role aria-hidden aria-labelledby" ) + .removeUniqueId(); + if ( this.options.heightStyle !== "content" ) { + contents.css( "height", "" ); } + }, - if (this.placeholder) { - //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! - if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]); - if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove(); + _setOption: function( key, value ) { + if ( key === "active" ) { - $.extend(this, { - helper: null, - dragging: false, - reverting: false, - _noFinalSort: null - }); + // _activate() will handle invalid values and update this.options + this._activate( value ); + return; + } - if(this.domPosition.prev) { - $(this.domPosition.prev).after(this.currentItem); - } else { - $(this.domPosition.parent).prepend(this.currentItem); + if ( key === "event" ) { + if ( this.options.event ) { + this._off( this.headers, this.options.event ); } + this._setupEvents( value ); } - return this; + this._super( key, value ); + + // Setting collapsible: false while collapsed; open first panel + if ( key === "collapsible" && !value && this.options.active === false ) { + this._activate( 0 ); + } + if ( key === "icons" ) { + this._destroyIcons(); + if ( value ) { + this._createIcons(); + } + } }, - serialize: function(o) { + _setOptionDisabled: function( value ) { + this._super( value ); - var items = this._getItemsAsjQuery(o && o.connected); - var str = []; o = o || {}; + this.element.attr( "aria-disabled", value ); - $(items).each(function() { - var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/)); - if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2])); - }); + // Support: IE8 Only + // #5332 / #6059 - opacity doesn't cascade to positioned elements in IE + // so we need to add the disabled class to the headers and panels + this._toggleClass( null, "ui-state-disabled", !!value ); + this._toggleClass( this.headers.add( this.headers.next() ), null, "ui-state-disabled", + !!value ); + }, - if(!str.length && o.key) { - str.push(o.key + '='); + _keydown: function( event ) { + if ( event.altKey || event.ctrlKey ) { + return; } - return str.join('&'); - - }, - - toArray: function(o) { + var keyCode = $.ui.keyCode, + length = this.headers.length, + currentIndex = this.headers.index( event.target ), + toFocus = false; - var items = this._getItemsAsjQuery(o && o.connected); - var ret = []; o = o || {}; + switch ( event.keyCode ) { + case keyCode.RIGHT: + case keyCode.DOWN: + toFocus = this.headers[ ( currentIndex + 1 ) % length ]; + break; + case keyCode.LEFT: + case keyCode.UP: + toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; + break; + case keyCode.SPACE: + case keyCode.ENTER: + this._eventHandler( event ); + break; + case keyCode.HOME: + toFocus = this.headers[ 0 ]; + break; + case keyCode.END: + toFocus = this.headers[ length - 1 ]; + break; + } - items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); }); - return ret; + if ( toFocus ) { + $( event.target ).attr( "tabIndex", -1 ); + $( toFocus ).attr( "tabIndex", 0 ); + $( toFocus ).trigger( "focus" ); + event.preventDefault(); + } + }, + _panelKeyDown: function( event ) { + if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) { + $( event.currentTarget ).prev().trigger( "focus" ); + } }, - /* Be careful with the following core functions */ - _intersectsWith: function(item) { + refresh: function() { + var options = this.options; + this._processPanels(); - var x1 = this.positionAbs.left, - x2 = x1 + this.helperProportions.width, - y1 = this.positionAbs.top, - y2 = y1 + this.helperProportions.height; + // Was collapsed or no panel + if ( ( options.active === false && options.collapsible === true ) || + !this.headers.length ) { + options.active = false; + this.active = $(); - var l = item.left, - r = l + item.width, - t = item.top, - b = t + item.height; + // active false only when collapsible is true + } else if ( options.active === false ) { + this._activate( 0 ); - var dyClick = this.offset.click.top, - dxClick = this.offset.click.left; + // was active, but active panel is gone + } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { - var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r; + // all remaining panel are disabled + if ( this.headers.length === this.headers.find( ".ui-state-disabled" ).length ) { + options.active = false; + this.active = $(); - if( this.options.tolerance == "pointer" - || this.options.forcePointerForContainers - || (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height']) - ) { - return isOverElement; - } else { + // activate previous panel + } else { + this._activate( Math.max( 0, options.active - 1 ) ); + } - return (l < x1 + (this.helperProportions.width / 2) // Right Half - && x2 - (this.helperProportions.width / 2) < r // Left Half - && t < y1 + (this.helperProportions.height / 2) // Bottom Half - && y2 - (this.helperProportions.height / 2) < b ); // Top Half + // was active, active panel still exists + } else { + // make sure active index is correct + options.active = this.headers.index( this.active ); } - }, - _intersectsWithPointer: function(item) { + this._destroyIcons(); - var isOverElementHeight = (this.options.axis === 'x') || $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), - isOverElementWidth = (this.options.axis === 'y') || $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), - isOverElement = isOverElementHeight && isOverElementWidth, - verticalDirection = this._getDragVerticalDirection(), - horizontalDirection = this._getDragHorizontalDirection(); + this._refresh(); + }, - if (!isOverElement) - return false; + _processPanels: function() { + var prevHeaders = this.headers, + prevPanels = this.panels; - return this.floating ? - ( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 ) - : ( verticalDirection && (verticalDirection == "down" ? 2 : 1) ); + this.headers = this.element.find( this.options.header ); + this._addClass( this.headers, "ui-accordion-header ui-accordion-header-collapsed", + "ui-state-default" ); + this.panels = this.headers.next().filter( ":not(.ui-accordion-content-active)" ).hide(); + this._addClass( this.panels, "ui-accordion-content", "ui-helper-reset ui-widget-content" ); + + // Avoid memory leaks (#10056) + if ( prevPanels ) { + this._off( prevHeaders.not( this.headers ) ); + this._off( prevPanels.not( this.panels ) ); + } }, - _intersectsWithSides: function(item) { + _refresh: function() { + var maxHeight, + options = this.options, + heightStyle = options.heightStyle, + parent = this.element.parent(); - var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height), - isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width), - verticalDirection = this._getDragVerticalDirection(), - horizontalDirection = this._getDragHorizontalDirection(); + this.active = this._findActive( options.active ); + this._addClass( this.active, "ui-accordion-header-active", "ui-state-active" ) + ._removeClass( this.active, "ui-accordion-header-collapsed" ); + this._addClass( this.active.next(), "ui-accordion-content-active" ); + this.active.next().show(); + + this.headers + .attr( "role", "tab" ) + .each( function() { + var header = $( this ), + headerId = header.uniqueId().attr( "id" ), + panel = header.next(), + panelId = panel.uniqueId().attr( "id" ); + header.attr( "aria-controls", panelId ); + panel.attr( "aria-labelledby", headerId ); + } ) + .next() + .attr( "role", "tabpanel" ); - if (this.floating && horizontalDirection) { - return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf)); + this.headers + .not( this.active ) + .attr( { + "aria-selected": "false", + "aria-expanded": "false", + tabIndex: -1 + } ) + .next() + .attr( { + "aria-hidden": "true" + } ) + .hide(); + + // Make sure at least one header is in the tab order + if ( !this.active.length ) { + this.headers.eq( 0 ).attr( "tabIndex", 0 ); } else { - return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf)); + this.active.attr( { + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + } ) + .next() + .attr( { + "aria-hidden": "false" + } ); } - }, + this._createIcons(); - _getDragVerticalDirection: function() { - var delta = this.positionAbs.top - this.lastPositionAbs.top; - return delta != 0 && (delta > 0 ? "down" : "up"); - }, + this._setupEvents( options.event ); - _getDragHorizontalDirection: function() { - var delta = this.positionAbs.left - this.lastPositionAbs.left; - return delta != 0 && (delta > 0 ? "right" : "left"); - }, + if ( heightStyle === "fill" ) { + maxHeight = parent.height(); + this.element.siblings( ":visible" ).each( function() { + var elem = $( this ), + position = elem.css( "position" ); - refresh: function(event) { - this._refreshItems(event); - this.refreshPositions(); - return this; - }, + if ( position === "absolute" || position === "fixed" ) { + return; + } + maxHeight -= elem.outerHeight( true ); + } ); - _connectWith: function() { - var options = this.options; - return options.connectWith.constructor == String - ? [options.connectWith] - : options.connectWith; - }, - - _getItemsAsjQuery: function(connected) { - - var self = this; - var items = []; - var queries = []; - var connectWith = this._connectWith(); - - if(connectWith && connected) { - for (var i = connectWith.length - 1; i >= 0; i--){ - var cur = $(connectWith[i]); - for (var j = cur.length - 1; j >= 0; j--){ - var inst = $.data(cur[j], this.widgetName); - if(inst && inst != this && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]); + this.headers.each( function() { + maxHeight -= $( this ).outerHeight( true ); + } ); + + this.headers.next() + .each( function() { + $( this ).height( Math.max( 0, maxHeight - + $( this ).innerHeight() + $( this ).height() ) ); + } ) + .css( "overflow", "auto" ); + } else if ( heightStyle === "auto" ) { + maxHeight = 0; + this.headers.next() + .each( function() { + var isVisible = $( this ).is( ":visible" ); + if ( !isVisible ) { + $( this ).show(); } - }; - }; + maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() ); + if ( !isVisible ) { + $( this ).hide(); + } + } ) + .height( maxHeight ); } + }, - queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]); + _activate: function( index ) { + var active = this._findActive( index )[ 0 ]; - for (var i = queries.length - 1; i >= 0; i--){ - queries[i][0].each(function() { - items.push(this); - }); - }; + // Trying to activate the already active panel + if ( active === this.active[ 0 ] ) { + return; + } - return $(items); + // Trying to collapse, simulate a click on the currently active header + active = active || this.active[ 0 ]; + this._eventHandler( { + target: active, + currentTarget: active, + preventDefault: $.noop + } ); }, - _removeCurrentsFromItems: function() { + _findActive: function( selector ) { + return typeof selector === "number" ? this.headers.eq( selector ) : $(); + }, - var list = this.currentItem.find(":data(" + this.widgetName + "-item)"); + _setupEvents: function( event ) { + var events = { + keydown: "_keydown" + }; + if ( event ) { + $.each( event.split( " " ), function( index, eventName ) { + events[ eventName ] = "_eventHandler"; + } ); + } - for (var i=0; i < this.items.length; i++) { + this._off( this.headers.add( this.headers.next() ) ); + this._on( this.headers, events ); + this._on( this.headers.next(), { keydown: "_panelKeyDown" } ); + this._hoverable( this.headers ); + this._focusable( this.headers ); + }, - for (var j=0; j < list.length; j++) { - if(list[j] == this.items[i].item[0]) - this.items.splice(i,1); + _eventHandler: function( event ) { + var activeChildren, clickedChildren, + options = this.options, + active = this.active, + clicked = $( event.currentTarget ), + clickedIsActive = clicked[ 0 ] === active[ 0 ], + collapsing = clickedIsActive && options.collapsible, + toShow = collapsing ? $() : clicked.next(), + toHide = active.next(), + eventData = { + oldHeader: active, + oldPanel: toHide, + newHeader: collapsing ? $() : clicked, + newPanel: toShow }; - }; + event.preventDefault(); - }, + if ( - _refreshItems: function(event) { + // click on active header, but not collapsible + ( clickedIsActive && !options.collapsible ) || - this.items = []; - this.containers = [this]; - var items = this.items; - var self = this; - var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]]; - var connectWith = this._connectWith(); - - if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down - for (var i = connectWith.length - 1; i >= 0; i--){ - var cur = $(connectWith[i]); - for (var j = cur.length - 1; j >= 0; j--){ - var inst = $.data(cur[j], this.widgetName); - if(inst && inst != this && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); - this.containers.push(inst); - } - }; - }; + // allow canceling activation + ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { + return; } - for (var i = queries.length - 1; i >= 0; i--) { - var targetData = queries[i][1]; - var _queries = queries[i][0]; + options.active = collapsing ? false : this.headers.index( clicked ); - for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) { - var item = $(_queries[j]); + // When the call to ._toggle() comes after the class changes + // it causes a very odd bug in IE 8 (see #6720) + this.active = clickedIsActive ? $() : clicked; + this._toggle( eventData ); - item.data(this.widgetName + '-item', targetData); // Data for target checking (mouse manager) + // Switch classes + // corner classes on the previously active header stay after the animation + this._removeClass( active, "ui-accordion-header-active", "ui-state-active" ); + if ( options.icons ) { + activeChildren = active.children( ".ui-accordion-header-icon" ); + this._removeClass( activeChildren, null, options.icons.activeHeader ) + ._addClass( activeChildren, null, options.icons.header ); + } - items.push({ - item: item, - instance: targetData, - width: 0, height: 0, - left: 0, top: 0 - }); - }; - }; + if ( !clickedIsActive ) { + this._removeClass( clicked, "ui-accordion-header-collapsed" ) + ._addClass( clicked, "ui-accordion-header-active", "ui-state-active" ); + if ( options.icons ) { + clickedChildren = clicked.children( ".ui-accordion-header-icon" ); + this._removeClass( clickedChildren, null, options.icons.header ) + ._addClass( clickedChildren, null, options.icons.activeHeader ); + } + this._addClass( clicked.next(), "ui-accordion-content-active" ); + } }, - refreshPositions: function(fast) { + _toggle: function( data ) { + var toShow = data.newPanel, + toHide = this.prevShow.length ? this.prevShow : data.oldPanel; - //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change - if(this.offsetParent && this.helper) { - this.offset.parent = this._getParentOffset(); - } + // Handle activating a panel during the animation for another activation + this.prevShow.add( this.prevHide ).stop( true, true ); + this.prevShow = toShow; + this.prevHide = toHide; + + if ( this.options.animate ) { + this._animate( toShow, toHide, data ); + } else { + toHide.hide(); + toShow.show(); + this._toggleComplete( data ); + } + + toHide.attr( { + "aria-hidden": "true" + } ); + toHide.prev().attr( { + "aria-selected": "false", + "aria-expanded": "false" + } ); + + // if we're switching panels, remove the old header from the tab order + // if we're opening from collapsed state, remove the previous header from the tab order + // if we're collapsing, then keep the collapsing header in the tab order + if ( toShow.length && toHide.length ) { + toHide.prev().attr( { + "tabIndex": -1, + "aria-expanded": "false" + } ); + } else if ( toShow.length ) { + this.headers.filter( function() { + return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0; + } ) + .attr( "tabIndex", -1 ); + } + + toShow + .attr( "aria-hidden", "false" ) + .prev() + .attr( { + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + } ); + }, - for (var i = this.items.length - 1; i >= 0; i--){ - var item = this.items[i]; + _animate: function( toShow, toHide, data ) { + var total, easing, duration, + that = this, + adjust = 0, + boxSizing = toShow.css( "box-sizing" ), + down = toShow.length && + ( !toHide.length || ( toShow.index() < toHide.index() ) ), + animate = this.options.animate || {}, + options = down && animate.down || animate, + complete = function() { + that._toggleComplete( data ); + }; - //We ignore calculating positions of all connected containers when we're not over them - if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0]) - continue; + if ( typeof options === "number" ) { + duration = options; + } + if ( typeof options === "string" ) { + easing = options; + } - var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; + // fall back from options to animation in case of partial down settings + easing = easing || options.easing || animate.easing; + duration = duration || options.duration || animate.duration; - if (!fast) { - item.width = t.outerWidth(); - item.height = t.outerHeight(); + if ( !toHide.length ) { + return toShow.animate( this.showProps, duration, easing, complete ); + } + if ( !toShow.length ) { + return toHide.animate( this.hideProps, duration, easing, complete ); + } + + total = toShow.show().outerHeight(); + toHide.animate( this.hideProps, { + duration: duration, + easing: easing, + step: function( now, fx ) { + fx.now = Math.round( now ); } + } ); + toShow + .hide() + .animate( this.showProps, { + duration: duration, + easing: easing, + complete: complete, + step: function( now, fx ) { + fx.now = Math.round( now ); + if ( fx.prop !== "height" ) { + if ( boxSizing === "content-box" ) { + adjust += fx.now; + } + } else if ( that.options.heightStyle !== "content" ) { + fx.now = Math.round( total - toHide.outerHeight() - adjust ); + adjust = 0; + } + } + } ); + }, - var p = t.offset(); - item.left = p.left; - item.top = p.top; - }; + _toggleComplete: function( data ) { + var toHide = data.oldPanel, + prev = toHide.prev(); - if(this.options.custom && this.options.custom.refreshContainers) { - this.options.custom.refreshContainers.call(this); - } else { - for (var i = this.containers.length - 1; i >= 0; i--){ - var p = this.containers[i].element.offset(); - this.containers[i].containerCache.left = p.left; - this.containers[i].containerCache.top = p.top; - this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); - this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); - }; + this._removeClass( toHide, "ui-accordion-content-active" ); + this._removeClass( prev, "ui-accordion-header-active" ) + ._addClass( prev, "ui-accordion-header-collapsed" ); + + // Work around for rendering bug in IE (#5421) + if ( toHide.length ) { + toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className; } + this._trigger( "activate", null, data ); + } +} ); - return this; - }, - _createPlaceholder: function(that) { - var self = that || this, o = self.options; +var safeActiveElement = $.ui.safeActiveElement = function( document ) { + var activeElement; - if(!o.placeholder || o.placeholder.constructor == String) { - var className = o.placeholder; - o.placeholder = { - element: function() { + // Support: IE 9 only + // IE9 throws an "Unspecified error" accessing document.activeElement from an ' : ''); - inst._keyEvent = false; - return html; - }, - /* Generate the month and year header. */ - _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, - secondary, monthNames, monthNamesShort) { - var changeMonth = this._get(inst, 'changeMonth'); - var changeYear = this._get(inst, 'changeYear'); - var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); - var html = '
    '; - var monthHtml = ''; - // month selection - if (secondary || !changeMonth) - monthHtml += '' + monthNames[drawMonth] + ''; - else { - var inMinYear = (minDate && minDate.getFullYear() == drawYear); - var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); - monthHtml += ''; - } - if (!showMonthAfterYear) - html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); - // year selection - if ( !inst.yearshtml ) { - inst.yearshtml = ''; - if (secondary || !changeYear) - html += '' + drawYear + ''; - else { - // determine range of years to display - var years = this._get(inst, 'yearRange').split(':'); - var thisYear = new Date().getFullYear(); - var determineYear = function(value) { - var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : - (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : - parseInt(value, 10))); - return (isNaN(year) ? thisYear : year); - }; - var year = determineYear(years[0]); - var endYear = Math.max(year, determineYear(years[1] || '')); - year = (minDate ? Math.max(year, minDate.getFullYear()) : year); - endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); - inst.yearshtml += ''; - - html += inst.yearshtml; - inst.yearshtml = null; - } - } - html += this._get(inst, 'yearSuffix'); - if (showMonthAfterYear) - html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; - html += '
    '; // Close datepicker_header - return html; + this._super( key, value ); }, - /* Adjust one of the date sub-fields. */ - _adjustInstDate: function(inst, offset, period) { - var year = inst.drawYear + (period == 'Y' ? offset : 0); - var month = inst.drawMonth + (period == 'M' ? offset : 0); - var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + - (period == 'D' ? offset : 0); - var date = this._restrictMinMax(inst, - this._daylightSavingAdjust(new Date(year, month, day))); - inst.selectedDay = date.getDate(); - inst.drawMonth = inst.selectedMonth = date.getMonth(); - inst.drawYear = inst.selectedYear = date.getFullYear(); - if (period == 'M' || period == 'Y') - this._notifyChange(inst); - }, + _setOptionDisabled: function( value ) { + this._super( value ); - /* Ensure a date is within any min/max bounds. */ - _restrictMinMax: function(inst, date) { - var minDate = this._getMinMaxDate(inst, 'min'); - var maxDate = this._getMinMaxDate(inst, 'max'); - var newDate = (minDate && date < minDate ? minDate : date); - newDate = (maxDate && newDate > maxDate ? maxDate : newDate); - return newDate; + this._toggleClass( this.uiSpinner, null, "ui-state-disabled", !!value ); + this.element.prop( "disabled", !!value ); + this.buttons.button( value ? "disable" : "enable" ); }, - /* Notify change of month/year. */ - _notifyChange: function(inst) { - var onChange = this._get(inst, 'onChangeMonthYear'); - if (onChange) - onChange.apply((inst.input ? inst.input[0] : null), - [inst.selectedYear, inst.selectedMonth + 1, inst]); - }, + _setOptions: spinnerModifer( function( options ) { + this._super( options ); + } ), - /* Determine the number of months to show. */ - _getNumberOfMonths: function(inst) { - var numMonths = this._get(inst, 'numberOfMonths'); - return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); + _parse: function( val ) { + if ( typeof val === "string" && val !== "" ) { + val = window.Globalize && this.options.numberFormat ? + Globalize.parseFloat( val, 10, this.options.culture ) : +val; + } + return val === "" || isNaN( val ) ? null : val; }, - /* Determine the current maximum date - ensure no time components are set. */ - _getMinMaxDate: function(inst, minMax) { - return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); + _format: function( value ) { + if ( value === "" ) { + return ""; + } + return window.Globalize && this.options.numberFormat ? + Globalize.format( value, this.options.numberFormat, this.options.culture ) : + value; }, - /* Find the number of days in a given month. */ - _getDaysInMonth: function(year, month) { - return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); + _refresh: function() { + this.element.attr( { + "aria-valuemin": this.options.min, + "aria-valuemax": this.options.max, + + // TODO: what should we do with values that can't be parsed? + "aria-valuenow": this._parse( this.element.val() ) + } ); }, - /* Find the day of the week of the first of a month. */ - _getFirstDayOfMonth: function(year, month) { - return new Date(year, month, 1).getDay(); + isValid: function() { + var value = this.value(); + + // Null is invalid + if ( value === null ) { + return false; + } + + // If value gets adjusted, it's invalid + return value === this._adjustValue( value ); }, - /* Determines if we should allow a "next/prev" month display change. */ - _canAdjustMonth: function(inst, offset, curYear, curMonth) { - var numMonths = this._getNumberOfMonths(inst); - var date = this._daylightSavingAdjust(new Date(curYear, - curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); - if (offset < 0) - date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); - return this._isInRange(inst, date); + // Update the value without triggering change + _value: function( value, allowAny ) { + var parsed; + if ( value !== "" ) { + parsed = this._parse( value ); + if ( parsed !== null ) { + if ( !allowAny ) { + parsed = this._adjustValue( parsed ); + } + value = this._format( parsed ); + } + } + this.element.val( value ); + this._refresh(); }, - /* Is the given date in the accepted range? */ - _isInRange: function(inst, date) { - var minDate = this._getMinMaxDate(inst, 'min'); - var maxDate = this._getMinMaxDate(inst, 'max'); - return ((!minDate || date.getTime() >= minDate.getTime()) && - (!maxDate || date.getTime() <= maxDate.getTime())); + _destroy: function() { + this.element + .prop( "disabled", false ) + .removeAttr( "autocomplete role aria-valuemin aria-valuemax aria-valuenow" ); + + this.uiSpinner.replaceWith( this.element ); }, - /* Provide the configuration settings for formatting/parsing. */ - _getFormatConfig: function(inst) { - var shortYearCutoff = this._get(inst, 'shortYearCutoff'); - shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : - new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); - return {shortYearCutoff: shortYearCutoff, - dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), - monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; + stepUp: spinnerModifer( function( steps ) { + this._stepUp( steps ); + } ), + _stepUp: function( steps ) { + if ( this._start() ) { + this._spin( ( steps || 1 ) * this.options.step ); + this._stop(); + } }, - /* Format the given date for display. */ - _formatDate: function(inst, day, month, year) { - if (!day) { - inst.currentDay = inst.selectedDay; - inst.currentMonth = inst.selectedMonth; - inst.currentYear = inst.selectedYear; + stepDown: spinnerModifer( function( steps ) { + this._stepDown( steps ); + } ), + _stepDown: function( steps ) { + if ( this._start() ) { + this._spin( ( steps || 1 ) * -this.options.step ); + this._stop(); } - var date = (day ? (typeof day == 'object' ? day : - this._daylightSavingAdjust(new Date(year, month, day))) : - this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); - return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); - } -}); + }, -/* - * Bind hover events for datepicker elements. - * Done via delegate so the binding only occurs once in the lifetime of the parent div. - * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. - */ -function bindHover(dpDiv) { - var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a'; - return dpDiv.bind('mouseout', function(event) { - var elem = $( event.target ).closest( selector ); - if ( !elem.length ) { - return; - } - elem.removeClass( "ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover" ); - }) - .bind('mouseover', function(event) { - var elem = $( event.target ).closest( selector ); - if ($.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0]) || - !elem.length ) { - return; - } - elem.parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); - elem.addClass('ui-state-hover'); - if (elem.hasClass('ui-datepicker-prev')) elem.addClass('ui-datepicker-prev-hover'); - if (elem.hasClass('ui-datepicker-next')) elem.addClass('ui-datepicker-next-hover'); - }); -} + pageUp: spinnerModifer( function( pages ) { + this._stepUp( ( pages || 1 ) * this.options.page ); + } ), -/* jQuery extend now ignores nulls! */ -function extendRemove(target, props) { - $.extend(target, props); - for (var name in props) - if (props[name] == null || props[name] == undefined) - target[name] = props[name]; - return target; -}; + pageDown: spinnerModifer( function( pages ) { + this._stepDown( ( pages || 1 ) * this.options.page ); + } ), -/* Determine whether an object is an array. */ -function isArray(a) { - return (a && (($.browser.safari && typeof a == 'object' && a.length) || - (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); -}; + value: function( newVal ) { + if ( !arguments.length ) { + return this._parse( this.element.val() ); + } + spinnerModifer( this._value ).call( this, newVal ); + }, -/* Invoke the datepicker functionality. - @param options string - a command, optionally followed by additional parameters or - Object - settings for attaching new datepicker functionality - @return jQuery object */ -$.fn.datepicker = function(options){ - - /* Verify an empty collection wasn't passed - Fixes #6976 */ - if ( !this.length ) { - return this; - } - - /* Initialise the date picker. */ - if (!$.datepicker.initialized) { - $(document).mousedown($.datepicker._checkExternalClick). - find('body').append($.datepicker.dpDiv); - $.datepicker.initialized = true; + widget: function() { + return this.uiSpinner; } +} ); + +// DEPRECATED +// TODO: switch return back to widget declaration at top of file when this is removed +if ( $.uiBackCompat !== false ) { + + // Backcompat for spinner html extension points + $.widget( "ui.spinner", $.ui.spinner, { + _enhance: function() { + this.uiSpinner = this.element + .attr( "autocomplete", "off" ) + .wrap( this._uiSpinnerHtml() ) + .parent() - var otherArgs = Array.prototype.slice.call(arguments, 1); - if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) - return $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this[0]].concat(otherArgs)); - if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') - return $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this[0]].concat(otherArgs)); - return this.each(function() { - typeof options == 'string' ? - $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this].concat(otherArgs)) : - $.datepicker._attachDatepicker(this, options); - }); -}; + // Add buttons + .append( this._buttonHtml() ); + }, + _uiSpinnerHtml: function() { + return ""; + }, -$.datepicker = new Datepicker(); // singleton instance -$.datepicker.initialized = false; -$.datepicker.uuid = new Date().getTime(); -$.datepicker.version = "1.8.21"; + _buttonHtml: function() { + return ""; + } + } ); +} + +var widgetsSpinner = $.ui.spinner; -// Workaround for #4055 -// Add another global to avoid noConflict issues with inline event handlers -window['DP_jQuery_' + dpuuid] = $; -})(jQuery); /*! - * jQuery UI Progressbar 1.8.21 + * jQuery UI Tabs 1.12.1 + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. * http://jquery.org/license - * - * http://docs.jquery.com/UI/Progressbar - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js */ -(function( $, undefined ) { -$.widget( "ui.progressbar", { +//>>label: Tabs +//>>group: Widgets +//>>description: Transforms a set of container elements into a tab structure. +//>>docs: http://api.jqueryui.com/tabs/ +//>>demos: http://jqueryui.com/tabs/ +//>>css.structure: ../../themes/base/core.css +//>>css.structure: ../../themes/base/tabs.css +//>>css.theme: ../../themes/base/theme.css + + + +$.widget( "ui.tabs", { + version: "1.12.1", + delay: 300, options: { - value: 0, - max: 100 + active: null, + classes: { + "ui-tabs": "ui-corner-all", + "ui-tabs-nav": "ui-corner-all", + "ui-tabs-panel": "ui-corner-bottom", + "ui-tabs-tab": "ui-corner-top" + }, + collapsible: false, + event: "click", + heightStyle: "content", + hide: null, + show: null, + + // Callbacks + activate: null, + beforeActivate: null, + beforeLoad: null, + load: null }, - min: 0, + _isLocal: ( function() { + var rhash = /#.*$/; + + return function( anchor ) { + var anchorUrl, locationUrl; + + anchorUrl = anchor.href.replace( rhash, "" ); + locationUrl = location.href.replace( rhash, "" ); + + // Decoding may throw an error if the URL isn't UTF-8 (#9518) + try { + anchorUrl = decodeURIComponent( anchorUrl ); + } catch ( error ) {} + try { + locationUrl = decodeURIComponent( locationUrl ); + } catch ( error ) {} + + return anchor.hash.length > 1 && anchorUrl === locationUrl; + }; + } )(), _create: function() { - this.element - .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) - .attr({ - role: "progressbar", - "aria-valuemin": this.min, - "aria-valuemax": this.options.max, - "aria-valuenow": this._value() - }); + var that = this, + options = this.options; - this.valueDiv = $( "
    " ) - .appendTo( this.element ); + this.running = false; - this.oldValue = this._value(); - this._refreshValue(); + this._addClass( "ui-tabs", "ui-widget ui-widget-content" ); + this._toggleClass( "ui-tabs-collapsible", null, options.collapsible ); + + this._processTabs(); + options.active = this._initialActive(); + + // Take disabling tabs via class attribute from HTML + // into account and update option properly. + if ( $.isArray( options.disabled ) ) { + options.disabled = $.unique( options.disabled.concat( + $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) { + return that.tabs.index( li ); + } ) + ) ).sort(); + } + + // Check for length avoids error when initializing empty list + if ( this.options.active !== false && this.anchors.length ) { + this.active = this._findActive( options.active ); + } else { + this.active = $(); + } + + this._refresh(); + + if ( this.active.length ) { + this.load( options.active ); + } }, - destroy: function() { - this.element - .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) - .removeAttr( "role" ) - .removeAttr( "aria-valuemin" ) - .removeAttr( "aria-valuemax" ) - .removeAttr( "aria-valuenow" ); + _initialActive: function() { + var active = this.options.active, + collapsible = this.options.collapsible, + locationHash = location.hash.substring( 1 ); - this.valueDiv.remove(); + if ( active === null ) { - $.Widget.prototype.destroy.apply( this, arguments ); + // check the fragment identifier in the URL + if ( locationHash ) { + this.tabs.each( function( i, tab ) { + if ( $( tab ).attr( "aria-controls" ) === locationHash ) { + active = i; + return false; + } + } ); + } + + // Check for a tab marked active via a class + if ( active === null ) { + active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) ); + } + + // No active tab, set to false + if ( active === null || active === -1 ) { + active = this.tabs.length ? 0 : false; + } + } + + // Handle numbers: negative, out of range + if ( active !== false ) { + active = this.tabs.index( this.tabs.eq( active ) ); + if ( active === -1 ) { + active = collapsible ? false : 0; + } + } + + // Don't allow collapsible: false and active: false + if ( !collapsible && active === false && this.anchors.length ) { + active = 0; + } + + return active; }, - value: function( newValue ) { - if ( newValue === undefined ) { - return this._value(); + _getCreateEventData: function() { + return { + tab: this.active, + panel: !this.active.length ? $() : this._getPanelForTab( this.active ) + }; + }, + + _tabKeydown: function( event ) { + var focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( "li" ), + selectedIndex = this.tabs.index( focusedTab ), + goingForward = true; + + if ( this._handlePageNav( event ) ) { + return; } - this._setOption( "value", newValue ); - return this; + switch ( event.keyCode ) { + case $.ui.keyCode.RIGHT: + case $.ui.keyCode.DOWN: + selectedIndex++; + break; + case $.ui.keyCode.UP: + case $.ui.keyCode.LEFT: + goingForward = false; + selectedIndex--; + break; + case $.ui.keyCode.END: + selectedIndex = this.anchors.length - 1; + break; + case $.ui.keyCode.HOME: + selectedIndex = 0; + break; + case $.ui.keyCode.SPACE: + + // Activate only, no collapsing + event.preventDefault(); + clearTimeout( this.activating ); + this._activate( selectedIndex ); + return; + case $.ui.keyCode.ENTER: + + // Toggle (cancel delayed activation, allow collapsing) + event.preventDefault(); + clearTimeout( this.activating ); + + // Determine if we should collapse or activate + this._activate( selectedIndex === this.options.active ? false : selectedIndex ); + return; + default: + return; + } + + // Focus the appropriate tab, based on which key was pressed + event.preventDefault(); + clearTimeout( this.activating ); + selectedIndex = this._focusNextTab( selectedIndex, goingForward ); + + // Navigating with control/command key will prevent automatic activation + if ( !event.ctrlKey && !event.metaKey ) { + + // Update aria-selected immediately so that AT think the tab is already selected. + // Otherwise AT may confuse the user by stating that they need to activate the tab, + // but the tab will already be activated by the time the announcement finishes. + focusedTab.attr( "aria-selected", "false" ); + this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" ); + + this.activating = this._delay( function() { + this.option( "active", selectedIndex ); + }, this.delay ); + } }, - _setOption: function( key, value ) { - if ( key === "value" ) { - this.options.value = value; - this._refreshValue(); - if ( this._value() === this.options.max ) { - this._trigger( "complete" ); - } + _panelKeydown: function( event ) { + if ( this._handlePageNav( event ) ) { + return; } - $.Widget.prototype._setOption.apply( this, arguments ); + // Ctrl+up moves focus to the current tab + if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) { + event.preventDefault(); + this.active.trigger( "focus" ); + } }, - _value: function() { - var val = this.options.value; - // normalize invalid value - if ( typeof val !== "number" ) { - val = 0; + // Alt+page up/down moves focus to the previous/next tab (and activates) + _handlePageNav: function( event ) { + if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) { + this._activate( this._focusNextTab( this.options.active - 1, false ) ); + return true; + } + if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) { + this._activate( this._focusNextTab( this.options.active + 1, true ) ); + return true; } - return Math.min( this.options.max, Math.max( this.min, val ) ); }, - _percentage: function() { - return 100 * this._value() / this.options.max; + _findNextTab: function( index, goingForward ) { + var lastTabIndex = this.tabs.length - 1; + + function constrain() { + if ( index > lastTabIndex ) { + index = 0; + } + if ( index < 0 ) { + index = lastTabIndex; + } + return index; + } + + while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) { + index = goingForward ? index + 1 : index - 1; + } + + return index; }, - _refreshValue: function() { - var value = this.value(); - var percentage = this._percentage(); + _focusNextTab: function( index, goingForward ) { + index = this._findNextTab( index, goingForward ); + this.tabs.eq( index ).trigger( "focus" ); + return index; + }, + + _setOption: function( key, value ) { + if ( key === "active" ) { + + // _activate() will handle invalid values and update this.options + this._activate( value ); + return; + } + + this._super( key, value ); + + if ( key === "collapsible" ) { + this._toggleClass( "ui-tabs-collapsible", null, value ); + + // Setting collapsible: false while collapsed; open first panel + if ( !value && this.options.active === false ) { + this._activate( 0 ); + } + } + + if ( key === "event" ) { + this._setupEvents( value ); + } - if ( this.oldValue !== value ) { - this.oldValue = value; - this._trigger( "change" ); + if ( key === "heightStyle" ) { + this._setupHeightStyle( value ); } + }, - this.valueDiv - .toggle( value > this.min ) - .toggleClass( "ui-corner-right", value === this.options.max ) - .width( percentage.toFixed(0) + "%" ); - this.element.attr( "aria-valuenow", value ); - } -}); + _sanitizeSelector: function( hash ) { + return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : ""; + }, -$.extend( $.ui.progressbar, { - version: "1.8.21" -}); + refresh: function() { + var options = this.options, + lis = this.tablist.children( ":has(a[href])" ); -})( jQuery ); -/*! - * jQuery UI Effects 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/ - */ -;jQuery.effects || (function($, undefined) { + // Get disabled tabs from class attribute from HTML + // this will get converted to a boolean if needed in _refresh() + options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) { + return lis.index( tab ); + } ); -$.effects = {}; + this._processTabs(); + // Was collapsed or no tabs + if ( options.active === false || !this.anchors.length ) { + options.active = false; + this.active = $(); + // was active, but active tab is gone + } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) { -/******************************************************************************/ -/****************************** COLOR ANIMATIONS ******************************/ -/******************************************************************************/ + // all remaining tabs are disabled + if ( this.tabs.length === options.disabled.length ) { + options.active = false; + this.active = $(); -// override the animation for color styles -$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', - 'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'], -function(i, attr) { - $.fx.step[attr] = function(fx) { - if (!fx.colorInit) { - fx.start = getColor(fx.elem, attr); - fx.end = getRGB(fx.end); - fx.colorInit = true; - } - - fx.elem.style[attr] = 'rgb(' + - Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' + - Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' + - Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')'; - }; -}); + // activate previous tab + } else { + this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) ); + } -// Color Conversion functions from highlightFade -// By Blair Mitchelmore -// http://jquery.offput.ca/highlightFade/ + // was active, active tab still exists + } else { -// Parse strings looking for color tuples [255,255,255] -function getRGB(color) { - var result; + // make sure active index is correct + options.active = this.tabs.index( this.active ); + } - // Check if we're already dealing with an array of colors - if ( color && color.constructor == Array && color.length == 3 ) - return color; + this._refresh(); + }, - // Look for rgb(num,num,num) - if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) - return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)]; + _refresh: function() { + this._setOptionDisabled( this.options.disabled ); + this._setupEvents( this.options.event ); + this._setupHeightStyle( this.options.heightStyle ); - // Look for rgb(num%,num%,num%) - if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) - return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; + this.tabs.not( this.active ).attr( { + "aria-selected": "false", + "aria-expanded": "false", + tabIndex: -1 + } ); + this.panels.not( this._getPanelForTab( this.active ) ) + .hide() + .attr( { + "aria-hidden": "true" + } ); - // Look for #a0b1c2 - if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) - return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; + // Make sure one tab is in the tab order + if ( !this.active.length ) { + this.tabs.eq( 0 ).attr( "tabIndex", 0 ); + } else { + this.active + .attr( { + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + } ); + this._addClass( this.active, "ui-tabs-active", "ui-state-active" ); + this._getPanelForTab( this.active ) + .show() + .attr( { + "aria-hidden": "false" + } ); + } + }, - // Look for #fff - if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) - return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; + _processTabs: function() { + var that = this, + prevTabs = this.tabs, + prevAnchors = this.anchors, + prevPanels = this.panels; + + this.tablist = this._getList().attr( "role", "tablist" ); + this._addClass( this.tablist, "ui-tabs-nav", + "ui-helper-reset ui-helper-clearfix ui-widget-header" ); + + // Prevent users from focusing disabled tabs via click + this.tablist + .on( "mousedown" + this.eventNamespace, "> li", function( event ) { + if ( $( this ).is( ".ui-state-disabled" ) ) { + event.preventDefault(); + } + } ) + + // Support: IE <9 + // Preventing the default action in mousedown doesn't prevent IE + // from focusing the element, so if the anchor gets focused, blur. + // We don't have to worry about focusing the previously focused + // element since clicking on a non-focusable element should focus + // the body anyway. + .on( "focus" + this.eventNamespace, ".ui-tabs-anchor", function() { + if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) { + this.blur(); + } + } ); - // Look for rgba(0, 0, 0, 0) == transparent in Safari 3 - if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) - return colors['transparent']; + this.tabs = this.tablist.find( "> li:has(a[href])" ) + .attr( { + role: "tab", + tabIndex: -1 + } ); + this._addClass( this.tabs, "ui-tabs-tab", "ui-state-default" ); - // Otherwise, we're most likely dealing with a named color - return colors[$.trim(color).toLowerCase()]; -} + this.anchors = this.tabs.map( function() { + return $( "a", this )[ 0 ]; + } ) + .attr( { + role: "presentation", + tabIndex: -1 + } ); + this._addClass( this.anchors, "ui-tabs-anchor" ); -function getColor(elem, attr) { - var color; + this.panels = $(); - do { - color = $.curCSS(elem, attr); + this.anchors.each( function( i, anchor ) { + var selector, panel, panelId, + anchorId = $( anchor ).uniqueId().attr( "id" ), + tab = $( anchor ).closest( "li" ), + originalAriaControls = tab.attr( "aria-controls" ); - // Keep going until we find an element that has color, or we hit the body - if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") ) - break; + // Inline tab + if ( that._isLocal( anchor ) ) { + selector = anchor.hash; + panelId = selector.substring( 1 ); + panel = that.element.find( that._sanitizeSelector( selector ) ); - attr = "backgroundColor"; - } while ( elem = elem.parentNode ); + // remote tab + } else { - return getRGB(color); -}; + // If the tab doesn't already have aria-controls, + // generate an id by using a throw-away element + panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id; + selector = "#" + panelId; + panel = that.element.find( selector ); + if ( !panel.length ) { + panel = that._createPanel( panelId ); + panel.insertAfter( that.panels[ i - 1 ] || that.tablist ); + } + panel.attr( "aria-live", "polite" ); + } -// Some named colors to work with -// From Interface by Stefan Petre -// http://interface.eyecon.ro/ - -var colors = { - aqua:[0,255,255], - azure:[240,255,255], - beige:[245,245,220], - black:[0,0,0], - blue:[0,0,255], - brown:[165,42,42], - cyan:[0,255,255], - darkblue:[0,0,139], - darkcyan:[0,139,139], - darkgrey:[169,169,169], - darkgreen:[0,100,0], - darkkhaki:[189,183,107], - darkmagenta:[139,0,139], - darkolivegreen:[85,107,47], - darkorange:[255,140,0], - darkorchid:[153,50,204], - darkred:[139,0,0], - darksalmon:[233,150,122], - darkviolet:[148,0,211], - fuchsia:[255,0,255], - gold:[255,215,0], - green:[0,128,0], - indigo:[75,0,130], - khaki:[240,230,140], - lightblue:[173,216,230], - lightcyan:[224,255,255], - lightgreen:[144,238,144], - lightgrey:[211,211,211], - lightpink:[255,182,193], - lightyellow:[255,255,224], - lime:[0,255,0], - magenta:[255,0,255], - maroon:[128,0,0], - navy:[0,0,128], - olive:[128,128,0], - orange:[255,165,0], - pink:[255,192,203], - purple:[128,0,128], - violet:[128,0,128], - red:[255,0,0], - silver:[192,192,192], - white:[255,255,255], - yellow:[255,255,0], - transparent: [255,255,255] -}; + if ( panel.length ) { + that.panels = that.panels.add( panel ); + } + if ( originalAriaControls ) { + tab.data( "ui-tabs-aria-controls", originalAriaControls ); + } + tab.attr( { + "aria-controls": panelId, + "aria-labelledby": anchorId + } ); + panel.attr( "aria-labelledby", anchorId ); + } ); + this.panels.attr( "role", "tabpanel" ); + this._addClass( this.panels, "ui-tabs-panel", "ui-widget-content" ); + // Avoid memory leaks (#10056) + if ( prevTabs ) { + this._off( prevTabs.not( this.tabs ) ); + this._off( prevAnchors.not( this.anchors ) ); + this._off( prevPanels.not( this.panels ) ); + } + }, -/******************************************************************************/ -/****************************** CLASS ANIMATIONS ******************************/ -/******************************************************************************/ + // Allow overriding how to find the list for rare usage scenarios (#7715) + _getList: function() { + return this.tablist || this.element.find( "ol, ul" ).eq( 0 ); + }, -var classAnimationActions = ['add', 'remove', 'toggle'], - shorthandStyles = { - border: 1, - borderBottom: 1, - borderColor: 1, - borderLeft: 1, - borderRight: 1, - borderTop: 1, - borderWidth: 1, - margin: 1, - padding: 1 - }; + _createPanel: function( id ) { + return $( "
    " ) + .attr( "id", id ) + .data( "ui-tabs-destroy", true ); + }, + + _setOptionDisabled: function( disabled ) { + var currentItem, li, i; -function getElementStyles() { - var style = document.defaultView - ? document.defaultView.getComputedStyle(this, null) - : this.currentStyle, - newStyle = {}, - key, - camelCase; - - // webkit enumerates style porperties - if (style && style.length && style[0] && style[style[0]]) { - var len = style.length; - while (len--) { - key = style[len]; - if (typeof style[key] == 'string') { - camelCase = key.replace(/\-(\w)/g, function(all, letter){ - return letter.toUpperCase(); - }); - newStyle[camelCase] = style[key]; + if ( $.isArray( disabled ) ) { + if ( !disabled.length ) { + disabled = false; + } else if ( disabled.length === this.anchors.length ) { + disabled = true; } } - } else { - for (key in style) { - if (typeof style[key] === 'string') { - newStyle[key] = style[key]; + + // Disable tabs + for ( i = 0; ( li = this.tabs[ i ] ); i++ ) { + currentItem = $( li ); + if ( disabled === true || $.inArray( i, disabled ) !== -1 ) { + currentItem.attr( "aria-disabled", "true" ); + this._addClass( currentItem, null, "ui-state-disabled" ); + } else { + currentItem.removeAttr( "aria-disabled" ); + this._removeClass( currentItem, null, "ui-state-disabled" ); } } - } - - return newStyle; -} -function filterStyles(styles) { - var name, value; - for (name in styles) { - value = styles[name]; - if ( - // ignore null and undefined values - value == null || - // ignore functions (when does this occur?) - $.isFunction(value) || - // shorthand styles that need to be expanded - name in shorthandStyles || - // ignore scrollbars (break in IE) - (/scrollbar/).test(name) || - - // only colors or values that can be converted to numbers - (!(/color/i).test(name) && isNaN(parseFloat(value))) - ) { - delete styles[name]; - } - } - - return styles; -} + this.options.disabled = disabled; -function styleDifference(oldStyle, newStyle) { - var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459 - name; + this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, + disabled === true ); + }, - for (name in newStyle) { - if (oldStyle[name] != newStyle[name]) { - diff[name] = newStyle[name]; + _setupEvents: function( event ) { + var events = {}; + if ( event ) { + $.each( event.split( " " ), function( index, eventName ) { + events[ eventName ] = "_eventHandler"; + } ); } - } - return diff; -} + this._off( this.anchors.add( this.tabs ).add( this.panels ) ); -$.effects.animateClass = function(value, duration, easing, callback) { - if ($.isFunction(easing)) { - callback = easing; - easing = null; - } + // Always prevent the default action, even when disabled + this._on( true, this.anchors, { + click: function( event ) { + event.preventDefault(); + } + } ); + this._on( this.anchors, events ); + this._on( this.tabs, { keydown: "_tabKeydown" } ); + this._on( this.panels, { keydown: "_panelKeydown" } ); - return this.queue(function() { - var that = $(this), - originalStyleAttr = that.attr('style') || ' ', - originalStyle = filterStyles(getElementStyles.call(this)), - newStyle, - className = that.attr('class') || ""; + this._focusable( this.tabs ); + this._hoverable( this.tabs ); + }, - $.each(classAnimationActions, function(i, action) { - if (value[action]) { - that[action + 'Class'](value[action]); - } - }); - newStyle = filterStyles(getElementStyles.call(this)); - that.attr('class', className); + _setupHeightStyle: function( heightStyle ) { + var maxHeight, + parent = this.element.parent(); - that.animate(styleDifference(originalStyle, newStyle), { - queue: false, - duration: duration, - easing: easing, - complete: function() { - $.each(classAnimationActions, function(i, action) { - if (value[action]) { that[action + 'Class'](value[action]); } - }); - // work around bug in IE by clearing the cssText before setting it - if (typeof that.attr('style') == 'object') { - that.attr('style').cssText = ''; - that.attr('style').cssText = originalStyleAttr; - } else { - that.attr('style', originalStyleAttr); - } - if (callback) { callback.apply(this, arguments); } - $.dequeue( this ); - } - }); - }); -}; + if ( heightStyle === "fill" ) { + maxHeight = parent.height(); + maxHeight -= this.element.outerHeight() - this.element.height(); -$.fn.extend({ - _addClass: $.fn.addClass, - addClass: function(classNames, speed, easing, callback) { - return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames); - }, + this.element.siblings( ":visible" ).each( function() { + var elem = $( this ), + position = elem.css( "position" ); - _removeClass: $.fn.removeClass, - removeClass: function(classNames,speed,easing,callback) { - return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames); - }, + if ( position === "absolute" || position === "fixed" ) { + return; + } + maxHeight -= elem.outerHeight( true ); + } ); - _toggleClass: $.fn.toggleClass, - toggleClass: function(classNames, force, speed, easing, callback) { - if ( typeof force == "boolean" || force === undefined ) { - if ( !speed ) { - // without speed parameter; - return this._toggleClass(classNames, force); - } else { - return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]); - } - } else { - // without switch parameter; - return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]); + this.element.children().not( this.panels ).each( function() { + maxHeight -= $( this ).outerHeight( true ); + } ); + + this.panels.each( function() { + $( this ).height( Math.max( 0, maxHeight - + $( this ).innerHeight() + $( this ).height() ) ); + } ) + .css( "overflow", "auto" ); + } else if ( heightStyle === "auto" ) { + maxHeight = 0; + this.panels.each( function() { + maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() ); + } ).height( maxHeight ); } }, - switchClass: function(remove,add,speed,easing,callback) { - return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]); - } -}); + _eventHandler: function( event ) { + var options = this.options, + active = this.active, + anchor = $( event.currentTarget ), + tab = anchor.closest( "li" ), + clickedIsActive = tab[ 0 ] === active[ 0 ], + collapsing = clickedIsActive && options.collapsible, + toShow = collapsing ? $() : this._getPanelForTab( tab ), + toHide = !active.length ? $() : this._getPanelForTab( active ), + eventData = { + oldTab: active, + oldPanel: toHide, + newTab: collapsing ? $() : tab, + newPanel: toShow + }; + event.preventDefault(); + if ( tab.hasClass( "ui-state-disabled" ) || -/******************************************************************************/ -/*********************************** EFFECTS **********************************/ -/******************************************************************************/ + // tab is already loading + tab.hasClass( "ui-tabs-loading" ) || + + // can't switch durning an animation + this.running || -$.extend($.effects, { - version: "1.8.21", + // click on active header, but not collapsible + ( clickedIsActive && !options.collapsible ) || - // Saves a set of properties in a data storage - save: function(element, set) { - for(var i=0; i < set.length; i++) { - if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]); + // allow canceling activation + ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { + return; } - }, - // Restores a set of previously saved properties from a data storage - restore: function(element, set) { - for(var i=0; i < set.length; i++) { - if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i])); + options.active = collapsing ? false : this.tabs.index( tab ); + + this.active = clickedIsActive ? $() : tab; + if ( this.xhr ) { + this.xhr.abort(); } - }, - setMode: function(el, mode) { - if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle - return mode; - }, + if ( !toHide.length && !toShow.length ) { + $.error( "jQuery UI Tabs: Mismatching fragment identifier." ); + } - getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value - // this should be a little more flexible in the future to handle a string & hash - var y, x; - switch (origin[0]) { - case 'top': y = 0; break; - case 'middle': y = 0.5; break; - case 'bottom': y = 1; break; - default: y = origin[0] / original.height; - }; - switch (origin[1]) { - case 'left': x = 0; break; - case 'center': x = 0.5; break; - case 'right': x = 1; break; - default: x = origin[1] / original.width; - }; - return {x: x, y: y}; + if ( toShow.length ) { + this.load( this.tabs.index( tab ), event ); + } + this._toggle( event, eventData ); }, - // Wraps the element around a wrapper that copies position properties - createWrapper: function(element) { + // Handles show/hide for selecting tabs + _toggle: function( event, eventData ) { + var that = this, + toShow = eventData.newPanel, + toHide = eventData.oldPanel; - // if the element is already wrapped, return it - if (element.parent().is('.ui-effects-wrapper')) { - return element.parent(); - } + this.running = true; - // wrap the element - var props = { - width: element.outerWidth(true), - height: element.outerHeight(true), - 'float': element.css('float') - }, - wrapper = $('
    ') - .addClass('ui-effects-wrapper') - .css({ - fontSize: '100%', - background: 'transparent', - border: 'none', - margin: 0, - padding: 0 - }), - active = document.activeElement; - - // support: Firefox - // Firefox incorrectly exposes anonymous content - // https://bugzilla.mozilla.org/show_bug.cgi?id=561664 - try { - active.id; - } catch( e ) { - active = document.body; + function complete() { + that.running = false; + that._trigger( "activate", event, eventData ); } - element.wrap( wrapper ); + function show() { + that._addClass( eventData.newTab.closest( "li" ), "ui-tabs-active", "ui-state-active" ); - // Fixes #7595 - Elements lose focus when wrapped. - if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { - $( active ).focus(); + if ( toShow.length && that.options.show ) { + that._show( toShow, that.options.show, complete ); + } else { + toShow.show(); + complete(); + } } - - wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element - // transfer positioning properties to the wrapper - if (element.css('position') == 'static') { - wrapper.css({ position: 'relative' }); - element.css({ position: 'relative' }); + // Start out by hiding, then showing, then completing + if ( toHide.length && this.options.hide ) { + this._hide( toHide, this.options.hide, function() { + that._removeClass( eventData.oldTab.closest( "li" ), + "ui-tabs-active", "ui-state-active" ); + show(); + } ); } else { - $.extend(props, { - position: element.css('position'), - zIndex: element.css('z-index') - }); - $.each(['top', 'left', 'bottom', 'right'], function(i, pos) { - props[pos] = element.css(pos); - if (isNaN(parseInt(props[pos], 10))) { - props[pos] = 'auto'; - } - }); - element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' }); + this._removeClass( eventData.oldTab.closest( "li" ), + "ui-tabs-active", "ui-state-active" ); + toHide.hide(); + show(); + } + + toHide.attr( "aria-hidden", "true" ); + eventData.oldTab.attr( { + "aria-selected": "false", + "aria-expanded": "false" + } ); + + // If we're switching tabs, remove the old tab from the tab order. + // If we're opening from collapsed state, remove the previous tab from the tab order. + // If we're collapsing, then keep the collapsing tab in the tab order. + if ( toShow.length && toHide.length ) { + eventData.oldTab.attr( "tabIndex", -1 ); + } else if ( toShow.length ) { + this.tabs.filter( function() { + return $( this ).attr( "tabIndex" ) === 0; + } ) + .attr( "tabIndex", -1 ); + } + + toShow.attr( "aria-hidden", "false" ); + eventData.newTab.attr( { + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + } ); + }, + + _activate: function( index ) { + var anchor, + active = this._findActive( index ); + + // Trying to activate the already active panel + if ( active[ 0 ] === this.active[ 0 ] ) { + return; } - return wrapper.css(props).show(); - }, - - removeWrapper: function(element) { - var parent, - active = document.activeElement; - - if (element.parent().is('.ui-effects-wrapper')) { - parent = element.parent().replaceWith(element); - // Fixes #7595 - Elements lose focus when wrapped. - if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { - $( active ).focus(); - } - return parent; + // Trying to collapse, simulate a click on the current active header + if ( !active.length ) { + active = this.active; } - - return element; - }, - setTransition: function(element, list, factor, value) { - value = value || {}; - $.each(list, function(i, x){ - var unit = element.cssUnit(x); - if (unit[0] > 0) value[x] = unit[0] * factor + unit[1]; - }); - return value; - } -}); + anchor = active.find( ".ui-tabs-anchor" )[ 0 ]; + this._eventHandler( { + target: anchor, + currentTarget: anchor, + preventDefault: $.noop + } ); + }, + _findActive: function( index ) { + return index === false ? $() : this.tabs.eq( index ); + }, -function _normalizeArguments(effect, options, speed, callback) { - // shift params for method overloading - if (typeof effect == 'object') { - callback = options; - speed = null; - options = effect; - effect = options.effect; - } - if ($.isFunction(options)) { - callback = options; - speed = null; - options = {}; - } - if (typeof options == 'number' || $.fx.speeds[options]) { - callback = speed; - speed = options; - options = {}; - } - if ($.isFunction(speed)) { - callback = speed; - speed = null; - } + _getIndex: function( index ) { - options = options || {}; + // meta-function to give users option to provide a href string instead of a numerical index. + if ( typeof index === "string" ) { + index = this.anchors.index( this.anchors.filter( "[href$='" + + $.ui.escapeSelector( index ) + "']" ) ); + } - speed = speed || options.duration; - speed = $.fx.off ? 0 : typeof speed == 'number' - ? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default; + return index; + }, - callback = callback || options.complete; + _destroy: function() { + if ( this.xhr ) { + this.xhr.abort(); + } - return [effect, options, speed, callback]; -} + this.tablist + .removeAttr( "role" ) + .off( this.eventNamespace ); -function standardSpeed( speed ) { - // valid standard speeds - if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) { - return true; - } - - // invalid strings - treat as "normal" speed - if ( typeof speed === "string" && !$.effects[ speed ] ) { - return true; - } - - return false; -} + this.anchors + .removeAttr( "role tabIndex" ) + .removeUniqueId(); -$.fn.extend({ - effect: function(effect, options, speed, callback) { - var args = _normalizeArguments.apply(this, arguments), - // TODO: make effects take actual parameters instead of a hash - args2 = { - options: args[1], - duration: args[2], - callback: args[3] - }, - mode = args2.options.mode, - effectMethod = $.effects[effect]; - - if ( $.fx.off || !effectMethod ) { - // delegate to the original method (e.g., .show()) if possible - if ( mode ) { - return this[ mode ]( args2.duration, args2.callback ); + this.tabs.add( this.panels ).each( function() { + if ( $.data( this, "ui-tabs-destroy" ) ) { + $( this ).remove(); } else { - return this.each(function() { - if ( args2.callback ) { - args2.callback.call( this ); - } - }); + $( this ).removeAttr( "role tabIndex " + + "aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded" ); } - } - - return effectMethod.call(this, args2); - }, + } ); + + this.tabs.each( function() { + var li = $( this ), + prev = li.data( "ui-tabs-aria-controls" ); + if ( prev ) { + li + .attr( "aria-controls", prev ) + .removeData( "ui-tabs-aria-controls" ); + } else { + li.removeAttr( "aria-controls" ); + } + } ); - _show: $.fn.show, - show: function(speed) { - if ( standardSpeed( speed ) ) { - return this._show.apply(this, arguments); - } else { - var args = _normalizeArguments.apply(this, arguments); - args[1].mode = 'show'; - return this.effect.apply(this, args); + this.panels.show(); + + if ( this.options.heightStyle !== "content" ) { + this.panels.css( "height", "" ); } }, - _hide: $.fn.hide, - hide: function(speed) { - if ( standardSpeed( speed ) ) { - return this._hide.apply(this, arguments); - } else { - var args = _normalizeArguments.apply(this, arguments); - args[1].mode = 'hide'; - return this.effect.apply(this, args); + enable: function( index ) { + var disabled = this.options.disabled; + if ( disabled === false ) { + return; } - }, - // jQuery core overloads toggle and creates _toggle - __toggle: $.fn.toggle, - toggle: function(speed) { - if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) { - return this.__toggle.apply(this, arguments); + if ( index === undefined ) { + disabled = false; } else { - var args = _normalizeArguments.apply(this, arguments); - args[1].mode = 'toggle'; - return this.effect.apply(this, args); + index = this._getIndex( index ); + if ( $.isArray( disabled ) ) { + disabled = $.map( disabled, function( num ) { + return num !== index ? num : null; + } ); + } else { + disabled = $.map( this.tabs, function( li, num ) { + return num !== index ? num : null; + } ); + } } + this._setOptionDisabled( disabled ); }, - // helper functions - cssUnit: function(key) { - var style = this.css(key), val = []; - $.each( ['em','px','%','pt'], function(i, unit){ - if(style.indexOf(unit) > 0) - val = [parseFloat(style), unit]; - }); - return val; - } -}); - - - -/******************************************************************************/ -/*********************************** EASING ***********************************/ -/******************************************************************************/ - -/* - * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ - * - * Uses the built in easing capabilities added In jQuery 1.1 - * to offer multiple easing options - * - * TERMS OF USE - jQuery Easing - * - * Open source under the BSD License. - * - * Copyright 2008 George McGinley Smith - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * -*/ - -// t: current time, b: begInnIng value, c: change In value, d: duration -$.easing.jswing = $.easing.swing; + disable: function( index ) { + var disabled = this.options.disabled; + if ( disabled === true ) { + return; + } -$.extend($.easing, -{ - def: 'easeOutQuad', - swing: function (x, t, b, c, d) { - //alert($.easing.default); - return $.easing[$.easing.def](x, t, b, c, d); - }, - easeInQuad: function (x, t, b, c, d) { - return c*(t/=d)*t + b; - }, - easeOutQuad: function (x, t, b, c, d) { - return -c *(t/=d)*(t-2) + b; - }, - easeInOutQuad: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t + b; - return -c/2 * ((--t)*(t-2) - 1) + b; - }, - easeInCubic: function (x, t, b, c, d) { - return c*(t/=d)*t*t + b; - }, - easeOutCubic: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t + 1) + b; - }, - easeInOutCubic: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t + b; - return c/2*((t-=2)*t*t + 2) + b; - }, - easeInQuart: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t + b; - }, - easeOutQuart: function (x, t, b, c, d) { - return -c * ((t=t/d-1)*t*t*t - 1) + b; - }, - easeInOutQuart: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t + b; - return -c/2 * ((t-=2)*t*t*t - 2) + b; - }, - easeInQuint: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t*t + b; - }, - easeOutQuint: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t*t*t + 1) + b; - }, - easeInOutQuint: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; - return c/2*((t-=2)*t*t*t*t + 2) + b; - }, - easeInSine: function (x, t, b, c, d) { - return -c * Math.cos(t/d * (Math.PI/2)) + c + b; - }, - easeOutSine: function (x, t, b, c, d) { - return c * Math.sin(t/d * (Math.PI/2)) + b; - }, - easeInOutSine: function (x, t, b, c, d) { - return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; - }, - easeInExpo: function (x, t, b, c, d) { - return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; - }, - easeOutExpo: function (x, t, b, c, d) { - return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; - }, - easeInOutExpo: function (x, t, b, c, d) { - if (t==0) return b; - if (t==d) return b+c; - if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; - return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; - }, - easeInCirc: function (x, t, b, c, d) { - return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; - }, - easeOutCirc: function (x, t, b, c, d) { - return c * Math.sqrt(1 - (t=t/d-1)*t) + b; - }, - easeInOutCirc: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; - return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; - }, - easeInElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - }, - easeOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; - }, - easeInOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; - }, - easeInBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*(t/=d)*t*((s+1)*t - s) + b; - }, - easeOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; - }, - easeInOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; - return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; - }, - easeInBounce: function (x, t, b, c, d) { - return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b; - }, - easeOutBounce: function (x, t, b, c, d) { - if ((t/=d) < (1/2.75)) { - return c*(7.5625*t*t) + b; - } else if (t < (2/2.75)) { - return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; - } else if (t < (2.5/2.75)) { - return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; + if ( index === undefined ) { + disabled = true; } else { - return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; + index = this._getIndex( index ); + if ( $.inArray( index, disabled ) !== -1 ) { + return; + } + if ( $.isArray( disabled ) ) { + disabled = $.merge( [ index ], disabled ).sort(); + } else { + disabled = [ index ]; + } } + this._setOptionDisabled( disabled ); }, - easeInOutBounce: function (x, t, b, c, d) { - if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; - return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; - } -}); -/* - * - * TERMS OF USE - EASING EQUATIONS - * - * Open source under the BSD License. - * - * Copyright 2001 Robert Penner - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ + load: function( index, event ) { + index = this._getIndex( index ); + var that = this, + tab = this.tabs.eq( index ), + anchor = tab.find( ".ui-tabs-anchor" ), + panel = this._getPanelForTab( tab ), + eventData = { + tab: tab, + panel: panel + }, + complete = function( jqXHR, status ) { + if ( status === "abort" ) { + that.panels.stop( false, true ); + } -})(jQuery); -/*! - * jQuery UI Effects Blind 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Blind - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { + that._removeClass( tab, "ui-tabs-loading" ); + panel.removeAttr( "aria-busy" ); -$.effects.blind = function(o) { + if ( jqXHR === that.xhr ) { + delete that.xhr; + } + }; - return this.queue(function() { + // Not remote + if ( this._isLocal( anchor[ 0 ] ) ) { + return; + } - // Create element - var el = $(this), props = ['position','top','bottom','left','right']; + this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) ); - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var direction = o.options.direction || 'vertical'; // Default direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var ref = (direction == 'vertical') ? 'height' : 'width'; - var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width(); - if(mode == 'show') wrapper.css(ref, 0); // Shift - - // Animation - var animation = {}; - animation[ref] = mode == 'show' ? distance : 0; - - // Animate - wrapper.animate(animation, o.duration, o.options.easing, function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }); - - }); + // Support: jQuery <1.8 + // jQuery <1.8 returns false if the request is canceled in beforeSend, + // but as of 1.8, $.ajax() always returns a jqXHR object. + if ( this.xhr && this.xhr.statusText !== "canceled" ) { + this._addClass( tab, "ui-tabs-loading" ); + panel.attr( "aria-busy", "true" ); -}; + this.xhr + .done( function( response, status, jqXHR ) { -})(jQuery); -/*! - * jQuery UI Effects Bounce 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Bounce - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { + // support: jQuery <1.8 + // http://bugs.jquery.com/ticket/11778 + setTimeout( function() { + panel.html( response ); + that._trigger( "load", event, eventData ); -$.effects.bounce = function(o) { + complete( jqXHR, status ); + }, 1 ); + } ) + .fail( function( jqXHR, status ) { - return this.queue(function() { + // support: jQuery <1.8 + // http://bugs.jquery.com/ticket/11778 + setTimeout( function() { + complete( jqXHR, status ); + }, 1 ); + } ); + } + }, - // Create element - var el = $(this), props = ['position','top','bottom','left','right']; + _ajaxSettings: function( anchor, event, eventData ) { + var that = this; + return { - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var direction = o.options.direction || 'up'; // Default direction - var distance = o.options.distance || 20; // Default distance - var times = o.options.times || 5; // Default # of times - var speed = o.duration || 250; // Default speed per bounce - if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3); - if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift - if (mode == 'hide') distance = distance / (times * 2); - if (mode != 'hide') times--; - - // Animate - if (mode == 'show') { // Show Bounce - var animation = {opacity: 1}; - animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance; - el.animate(animation, speed / 2, o.options.easing); - distance = distance / 2; - times--; - }; - for (var i = 0; i < times; i++) { // Bounces - var animation1 = {}, animation2 = {}; - animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; - el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing); - distance = (mode == 'hide') ? distance * 2 : distance / 2; - }; - if (mode == 'hide') { // Last Bounce - var animation = {opacity: 0}; - animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - el.animate(animation, speed / 2, o.options.easing, function(){ - el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - } else { - var animation1 = {}, animation2 = {}; - animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; - el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){ - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - }); + // Support: IE <11 only + // Strip any hash that exists to prevent errors with the Ajax request + url: anchor.attr( "href" ).replace( /#.*$/, "" ), + beforeSend: function( jqXHR, settings ) { + return that._trigger( "beforeLoad", event, + $.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) ); + } }; - el.queue('fx', function() { el.dequeue(); }); - el.dequeue(); - }); + }, + + _getPanelForTab: function( tab ) { + var id = $( tab ).attr( "aria-controls" ); + return this.element.find( this._sanitizeSelector( "#" + id ) ); + } +} ); + +// DEPRECATED +// TODO: Switch return back to widget declaration at top of file when this is removed +if ( $.uiBackCompat !== false ) { + + // Backcompat for ui-tab class (now ui-tabs-tab) + $.widget( "ui.tabs", $.ui.tabs, { + _processTabs: function() { + this._superApply( arguments ); + this._addClass( this.tabs, "ui-tab" ); + } + } ); +} + +var widgetsTabs = $.ui.tabs; -}; -})(jQuery); /*! - * jQuery UI Effects Clip 1.8.21 + * jQuery UI Tooltip 1.12.1 + * http://jqueryui.com * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Clip - * - * Depends: - * jquery.effects.core.js */ -(function( $, undefined ) { -$.effects.clip = function(o) { +//>>label: Tooltip +//>>group: Widgets +//>>description: Shows additional information for any element on hover or focus. +//>>docs: http://api.jqueryui.com/tooltip/ +//>>demos: http://jqueryui.com/tooltip/ +//>>css.structure: ../../themes/base/core.css +//>>css.structure: ../../themes/base/tooltip.css +//>>css.theme: ../../themes/base/theme.css - return this.queue(function() { - // Create element - var el = $(this), props = ['position','top','bottom','left','right','height','width']; - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var direction = o.options.direction || 'vertical'; // Default direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var animate = el[0].tagName == 'IMG' ? wrapper : el; - var ref = { - size: (direction == 'vertical') ? 'height' : 'width', - position: (direction == 'vertical') ? 'top' : 'left' - }; - var distance = (direction == 'vertical') ? animate.height() : animate.width(); - if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift +$.widget( "ui.tooltip", { + version: "1.12.1", + options: { + classes: { + "ui-tooltip": "ui-corner-all ui-widget-shadow" + }, + content: function() { - // Animation - var animation = {}; - animation[ref.size] = mode == 'show' ? distance : 0; - animation[ref.position] = mode == 'show' ? 0 : distance / 2; + // support: IE<9, Opera in jQuery <1.7 + // .text() can't accept undefined, so coerce to a string + var title = $( this ).attr( "title" ) || ""; - // Animate - animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }}); + // Escape title, since we're going from an attribute to raw HTML + return $( "" ).text( title ).html(); + }, + hide: true, - }); + // Disabled elements have inconsistent behavior across browsers (#8661) + items: "[title]:not([disabled])", + position: { + my: "left top+15", + at: "left bottom", + collision: "flipfit flip" + }, + show: true, + track: false, -}; + // Callbacks + close: null, + open: null + }, -})(jQuery); -/*! - * jQuery UI Effects Drop 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Drop - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { + _addDescribedBy: function( elem, id ) { + var describedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\s+/ ); + describedby.push( id ); + elem + .data( "ui-tooltip-id", id ) + .attr( "aria-describedby", $.trim( describedby.join( " " ) ) ); + }, -$.effects.drop = function(o) { + _removeDescribedBy: function( elem ) { + var id = elem.data( "ui-tooltip-id" ), + describedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\s+/ ), + index = $.inArray( id, describedby ); - return this.queue(function() { + if ( index !== -1 ) { + describedby.splice( index, 1 ); + } - // Create element - var el = $(this), props = ['position','top','bottom','left','right','opacity']; + elem.removeData( "ui-tooltip-id" ); + describedby = $.trim( describedby.join( " " ) ); + if ( describedby ) { + elem.attr( "aria-describedby", describedby ); + } else { + elem.removeAttr( "aria-describedby" ); + } + }, - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var direction = o.options.direction || 'left'; // Default Direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2); - if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift - - // Animation - var animation = {opacity: mode == 'show' ? 1 : 0}; - animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; - - // Animate - el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - el.dequeue(); - }}); - - }); + _create: function() { + this._on( { + mouseover: "open", + focusin: "open" + } ); -}; + // IDs of generated tooltips, needed for destroy + this.tooltips = {}; -})(jQuery); -/*! - * jQuery UI Effects Explode 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Explode - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { + // IDs of parent tooltips where we removed the title attribute + this.parents = {}; -$.effects.explode = function(o) { + // Append the aria-live region so tooltips announce correctly + this.liveRegion = $( "
    " ) + .attr( { + role: "log", + "aria-live": "assertive", + "aria-relevant": "additions" + } ) + .appendTo( this.document[ 0 ].body ); + this._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" ); - return this.queue(function() { + this.disabledTitles = $( [] ); + }, - var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; - var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; + _setOption: function( key, value ) { + var that = this; - o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode; - var el = $(this).show().css('visibility', 'hidden'); - var offset = el.offset(); + this._super( key, value ); - //Substract the margins - not fixing the problem yet. - offset.top -= parseInt(el.css("marginTop"),10) || 0; - offset.left -= parseInt(el.css("marginLeft"),10) || 0; + if ( key === "content" ) { + $.each( this.tooltips, function( id, tooltipData ) { + that._updateContent( tooltipData.element ); + } ); + } + }, - var width = el.outerWidth(true); - var height = el.outerHeight(true); + _setOptionDisabled: function( value ) { + this[ value ? "_disable" : "_enable" ](); + }, - for(var i=0;i
    ') - .css({ - position: 'absolute', - visibility: 'visible', - left: -j*(width/cells), - top: -i*(height/rows) - }) - .parent() - .addClass('ui-effects-explode') - .css({ - position: 'absolute', - overflow: 'hidden', - width: width/cells, - height: height/rows, - left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0), - top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0), - opacity: o.options.mode == 'show' ? 0 : 1 - }).animate({ - left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)), - top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)), - opacity: o.options.mode == 'show' ? 1 : 0 - }, o.duration || 500); - } - } + _disable: function() { + var that = this; - // Set a timeout, to call the callback approx. when the other animations have finished - setTimeout(function() { + // Close open tooltips + $.each( this.tooltips, function( id, tooltipData ) { + var event = $.Event( "blur" ); + event.target = event.currentTarget = tooltipData.element[ 0 ]; + that.close( event, true ); + } ); + + // Remove title attributes to prevent native tooltips + this.disabledTitles = this.disabledTitles.add( + this.element.find( this.options.items ).addBack() + .filter( function() { + var element = $( this ); + if ( element.is( "[title]" ) ) { + return element + .data( "ui-tooltip-title", element.attr( "title" ) ) + .removeAttr( "title" ); + } + } ) + ); + }, - o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide(); - if(o.callback) o.callback.apply(el[0]); // Callback - el.dequeue(); + _enable: function() { - $('div.ui-effects-explode').remove(); + // restore title attributes + this.disabledTitles.each( function() { + var element = $( this ); + if ( element.data( "ui-tooltip-title" ) ) { + element.attr( "title", element.data( "ui-tooltip-title" ) ); + } + } ); + this.disabledTitles = $( [] ); + }, - }, o.duration || 500); + open: function( event ) { + var that = this, + target = $( event ? event.target : this.element ) + // we need closest here due to mouseover bubbling, + // but always pointing at the same event target + .closest( this.options.items ); - }); + // No element to show a tooltip for or the tooltip is already open + if ( !target.length || target.data( "ui-tooltip-id" ) ) { + return; + } -}; + if ( target.attr( "title" ) ) { + target.data( "ui-tooltip-title", target.attr( "title" ) ); + } -})(jQuery); -/*! - * jQuery UI Effects Fade 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Fade - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { + target.data( "ui-tooltip-open", true ); -$.effects.fade = function(o) { - return this.queue(function() { - var elem = $(this), - mode = $.effects.setMode(elem, o.options.mode || 'hide'); + // Kill parent tooltips, custom or native, for hover + if ( event && event.type === "mouseover" ) { + target.parents().each( function() { + var parent = $( this ), + blurEvent; + if ( parent.data( "ui-tooltip-open" ) ) { + blurEvent = $.Event( "blur" ); + blurEvent.target = blurEvent.currentTarget = this; + that.close( blurEvent, true ); + } + if ( parent.attr( "title" ) ) { + parent.uniqueId(); + that.parents[ this.id ] = { + element: this, + title: parent.attr( "title" ) + }; + parent.attr( "title", "" ); + } + } ); + } - elem.animate({ opacity: mode }, { - queue: false, - duration: o.duration, - easing: o.options.easing, - complete: function() { - (o.callback && o.callback.apply(this, arguments)); - elem.dequeue(); - } - }); - }); -}; + this._registerCloseHandlers( event, target ); + this._updateContent( target, event ); + }, -})(jQuery); -/*! - * jQuery UI Effects Fold 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Fold - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { + _updateContent: function( target, event ) { + var content, + contentOption = this.options.content, + that = this, + eventType = event ? event.type : null; -$.effects.fold = function(o) { + if ( typeof contentOption === "string" || contentOption.nodeType || + contentOption.jquery ) { + return this._open( event, target, contentOption ); + } - return this.queue(function() { + content = contentOption.call( target[ 0 ], function( response ) { - // Create element - var el = $(this), props = ['position','top','bottom','left','right']; + // IE may instantly serve a cached response for ajax requests + // delay this call to _open so the other call to _open runs first + that._delay( function() { - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var size = o.options.size || 15; // Default fold size - var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value - var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2; - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var widthFirst = ((mode == 'show') != horizFirst); - var ref = widthFirst ? ['width', 'height'] : ['height', 'width']; - var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()]; - var percent = /([0-9]+)%/.exec(size); - if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1]; - if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift - - // Animation - var animation1 = {}, animation2 = {}; - animation1[ref[0]] = mode == 'show' ? distance[0] : size; - animation2[ref[1]] = mode == 'show' ? distance[1] : 0; - - // Animate - wrapper.animate(animation1, duration, o.options.easing) - .animate(animation2, duration, o.options.easing, function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }); - - }); + // Ignore async response if tooltip was closed already + if ( !target.data( "ui-tooltip-open" ) ) { + return; + } -}; + // JQuery creates a special event for focusin when it doesn't + // exist natively. To improve performance, the native event + // object is reused and the type is changed. Therefore, we can't + // rely on the type being correct after the event finished + // bubbling, so we set it back to the previous value. (#8740) + if ( event ) { + event.type = eventType; + } + this._open( event, target, response ); + } ); + } ); + if ( content ) { + this._open( event, target, content ); + } + }, -})(jQuery); -/*! - * jQuery UI Effects Highlight 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Highlight - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { + _open: function( event, target, content ) { + var tooltipData, tooltip, delayedShow, a11yContent, + positionOption = $.extend( {}, this.options.position ); -$.effects.highlight = function(o) { - return this.queue(function() { - var elem = $(this), - props = ['backgroundImage', 'backgroundColor', 'opacity'], - mode = $.effects.setMode(elem, o.options.mode || 'show'), - animation = { - backgroundColor: elem.css('backgroundColor') - }; + if ( !content ) { + return; + } - if (mode == 'hide') { - animation.opacity = 0; + // Content can be updated multiple times. If the tooltip already + // exists, then just update the content and bail. + tooltipData = this._find( target ); + if ( tooltipData ) { + tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content ); + return; } - $.effects.save(elem, props); - elem - .show() - .css({ - backgroundImage: 'none', - backgroundColor: o.options.color || '#ffff99' - }) - .animate(animation, { - queue: false, - duration: o.duration, - easing: o.options.easing, - complete: function() { - (mode == 'hide' && elem.hide()); - $.effects.restore(elem, props); - (mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter')); - (o.callback && o.callback.apply(this, arguments)); - elem.dequeue(); - } - }); - }); -}; + // If we have a title, clear it to prevent the native tooltip + // we have to check first to avoid defining a title if none exists + // (we don't want to cause an element to start matching [title]) + // + // We use removeAttr only for key events, to allow IE to export the correct + // accessible attributes. For mouse events, set to empty string to avoid + // native tooltip showing up (happens only when removing inside mouseover). + if ( target.is( "[title]" ) ) { + if ( event && event.type === "mouseover" ) { + target.attr( "title", "" ); + } else { + target.removeAttr( "title" ); + } + } -})(jQuery); -/*! - * jQuery UI Effects Pulsate 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Pulsate - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { + tooltipData = this._tooltip( target ); + tooltip = tooltipData.tooltip; + this._addDescribedBy( target, tooltip.attr( "id" ) ); + tooltip.find( ".ui-tooltip-content" ).html( content ); -$.effects.pulsate = function(o) { - return this.queue(function() { - var elem = $(this), - mode = $.effects.setMode(elem, o.options.mode || 'show'), - times = ((o.options.times || 5) * 2) - 1, - duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2, - isVisible = elem.is(':visible'), - animateTo = 0; + // Support: Voiceover on OS X, JAWS on IE <= 9 + // JAWS announces deletions even when aria-relevant="additions" + // Voiceover will sometimes re-read the entire log region's contents from the beginning + this.liveRegion.children().hide(); + a11yContent = $( "
    " ).html( tooltip.find( ".ui-tooltip-content" ).html() ); + a11yContent.removeAttr( "name" ).find( "[name]" ).removeAttr( "name" ); + a11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" ); + a11yContent.appendTo( this.liveRegion ); - if (!isVisible) { - elem.css('opacity', 0).show(); - animateTo = 1; + function position( event ) { + positionOption.of = event; + if ( tooltip.is( ":hidden" ) ) { + return; + } + tooltip.position( positionOption ); } + if ( this.options.track && event && /^mouse/.test( event.type ) ) { + this._on( this.document, { + mousemove: position + } ); - if ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) { - times--; + // trigger once to override element-relative positioning + position( event ); + } else { + tooltip.position( $.extend( { + of: target + }, this.options.position ) ); } - for (var i = 0; i < times; i++) { - elem.animate({ opacity: animateTo }, duration, o.options.easing); - animateTo = (animateTo + 1) % 2; + tooltip.hide(); + + this._show( tooltip, this.options.show ); + + // Handle tracking tooltips that are shown with a delay (#8644). As soon + // as the tooltip is visible, position the tooltip using the most recent + // event. + // Adds the check to add the timers only when both delay and track options are set (#14682) + if ( this.options.track && this.options.show && this.options.show.delay ) { + delayedShow = this.delayedShow = setInterval( function() { + if ( tooltip.is( ":visible" ) ) { + position( positionOption.of ); + clearInterval( delayedShow ); + } + }, $.fx.interval ); } - elem.animate({ opacity: animateTo }, duration, o.options.easing, function() { - if (animateTo == 0) { - elem.hide(); + this._trigger( "open", event, { tooltip: tooltip } ); + }, + + _registerCloseHandlers: function( event, target ) { + var events = { + keyup: function( event ) { + if ( event.keyCode === $.ui.keyCode.ESCAPE ) { + var fakeEvent = $.Event( event ); + fakeEvent.currentTarget = target[ 0 ]; + this.close( fakeEvent, true ); + } } - (o.callback && o.callback.apply(this, arguments)); - }); + }; - elem - .queue('fx', function() { elem.dequeue(); }) - .dequeue(); - }); -}; + // Only bind remove handler for delegated targets. Non-delegated + // tooltips will handle this in destroy. + if ( target[ 0 ] !== this.element[ 0 ] ) { + events.remove = function() { + this._removeTooltip( this._find( target ).tooltip ); + }; + } -})(jQuery); -/*! - * jQuery UI Effects Scale 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Scale - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.puff = function(o) { - return this.queue(function() { - var elem = $(this), - mode = $.effects.setMode(elem, o.options.mode || 'hide'), - percent = parseInt(o.options.percent, 10) || 150, - factor = percent / 100, - original = { height: elem.height(), width: elem.width() }; - - $.extend(o.options, { - fade: true, - mode: mode, - percent: mode == 'hide' ? percent : 100, - from: mode == 'hide' - ? original - : { - height: original.height * factor, - width: original.width * factor - } - }); - - elem.effect('scale', o.options, o.duration, o.callback); - elem.dequeue(); - }); -}; + if ( !event || event.type === "mouseover" ) { + events.mouseleave = "close"; + } + if ( !event || event.type === "focusin" ) { + events.focusout = "close"; + } + this._on( true, target, events ); + }, -$.effects.scale = function(o) { + close: function( event ) { + var tooltip, + that = this, + target = $( event ? event.currentTarget : this.element ), + tooltipData = this._find( target ); + + // The tooltip may already be closed + if ( !tooltipData ) { + + // We set ui-tooltip-open immediately upon open (in open()), but only set the + // additional data once there's actually content to show (in _open()). So even if the + // tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in + // the period between open() and _open(). + target.removeData( "ui-tooltip-open" ); + return; + } - return this.queue(function() { + tooltip = tooltipData.tooltip; - // Create element - var el = $(this); + // Disabling closes the tooltip, so we need to track when we're closing + // to avoid an infinite loop in case the tooltip becomes disabled on close + if ( tooltipData.closing ) { + return; + } - // Set options - var options = $.extend(true, {}, o.options); - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent - var direction = o.options.direction || 'both'; // Set default axis - var origin = o.options.origin; // The origin of the scaling - if (mode != 'effect') { // Set default origin and restore for show/hide - options.origin = origin || ['middle','center']; - options.restore = true; - } - var original = {height: el.height(), width: el.width()}; // Save original - el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state - - // Adjust - var factor = { // Set scaling factor - y: direction != 'horizontal' ? (percent / 100) : 1, - x: direction != 'vertical' ? (percent / 100) : 1 - }; - el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state + // Clear the interval for delayed tracking tooltips + clearInterval( this.delayedShow ); - if (o.options.fade) { // Fade option to support puff - if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;}; - if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;}; - }; + // Only set title if we had one before (see comment in _open()) + // If the title attribute has changed since open(), don't restore + if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) { + target.attr( "title", target.data( "ui-tooltip-title" ) ); + } - // Animation - options.from = el.from; options.to = el.to; options.mode = mode; + this._removeDescribedBy( target ); - // Animate - el.effect('size', options, o.duration, o.callback); - el.dequeue(); - }); + tooltipData.hiding = true; + tooltip.stop( true ); + this._hide( tooltip, this.options.hide, function() { + that._removeTooltip( $( this ) ); + } ); -}; + target.removeData( "ui-tooltip-open" ); + this._off( target, "mouseleave focusout keyup" ); -$.effects.size = function(o) { + // Remove 'remove' binding only on delegated targets + if ( target[ 0 ] !== this.element[ 0 ] ) { + this._off( target, "remove" ); + } + this._off( this.document, "mousemove" ); - return this.queue(function() { + if ( event && event.type === "mouseleave" ) { + $.each( this.parents, function( id, parent ) { + $( parent.element ).attr( "title", parent.title ); + delete that.parents[ id ]; + } ); + } - // Create element - var el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity']; - var props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore - var props2 = ['width','height','overflow']; // Copy for children - var cProps = ['fontSize']; - var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom']; - var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight']; + tooltipData.closing = true; + this._trigger( "close", event, { tooltip: tooltip } ); + if ( !tooltipData.hiding ) { + tooltipData.closing = false; + } + }, - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var restore = o.options.restore || false; // Default restore - var scale = o.options.scale || 'both'; // Default scale mode - var origin = o.options.origin; // The origin of the sizing - var original = {height: el.height(), width: el.width()}; // Save original - el.from = o.options.from || original; // Default from state - el.to = o.options.to || original; // Default to state - // Adjust - if (origin) { // Calculate baseline shifts - var baseline = $.effects.getBaseline(origin, original); - el.from.top = (original.height - el.from.height) * baseline.y; - el.from.left = (original.width - el.from.width) * baseline.x; - el.to.top = (original.height - el.to.height) * baseline.y; - el.to.left = (original.width - el.to.width) * baseline.x; - }; - var factor = { // Set scaling factor - from: {y: el.from.height / original.height, x: el.from.width / original.width}, - to: {y: el.to.height / original.height, x: el.to.width / original.width} - }; - if (scale == 'box' || scale == 'both') { // Scale the css box - if (factor.from.y != factor.to.y) { // Vertical props scaling - props = props.concat(vProps); - el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from); - el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to); - }; - if (factor.from.x != factor.to.x) { // Horizontal props scaling - props = props.concat(hProps); - el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from); - el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to); - }; - }; - if (scale == 'content' || scale == 'both') { // Scale the content - if (factor.from.y != factor.to.y) { // Vertical props scaling - props = props.concat(cProps); - el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from); - el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to); - }; - }; - $.effects.save(el, restore ? props : props1); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - el.css('overflow','hidden').css(el.from); // Shift - - // Animate - if (scale == 'content' || scale == 'both') { // Scale the children - vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size - hProps = hProps.concat(['marginLeft','marginRight']); // Add margins - props2 = props.concat(vProps).concat(hProps); // Concat - el.find("*[width]").each(function(){ - var child = $(this); - if (restore) $.effects.save(child, props2); - var c_original = {height: child.height(), width: child.width()}; // Save original - child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x}; - child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x}; - if (factor.from.y != factor.to.y) { // Vertical props scaling - child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from); - child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to); - }; - if (factor.from.x != factor.to.x) { // Horizontal props scaling - child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from); - child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to); - }; - child.css(child.from); // Shift children - child.animate(child.to, o.duration, o.options.easing, function(){ - if (restore) $.effects.restore(child, props2); // Restore children - }); // Animate children - }); + _tooltip: function( element ) { + var tooltip = $( "
    " ).attr( "role", "tooltip" ), + content = $( "
    " ).appendTo( tooltip ), + id = tooltip.uniqueId().attr( "id" ); + + this._addClass( content, "ui-tooltip-content" ); + this._addClass( tooltip, "ui-tooltip", "ui-widget ui-widget-content" ); + + tooltip.appendTo( this._appendTo( element ) ); + + return this.tooltips[ id ] = { + element: element, + tooltip: tooltip }; + }, - // Animate - el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if (el.to.opacity === 0) { - el.css('opacity', el.from.opacity); - } - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - el.dequeue(); - }}); + _find: function( target ) { + var id = target.data( "ui-tooltip-id" ); + return id ? this.tooltips[ id ] : null; + }, - }); + _removeTooltip: function( tooltip ) { + tooltip.remove(); + delete this.tooltips[ tooltip.attr( "id" ) ]; + }, -}; + _appendTo: function( target ) { + var element = target.closest( ".ui-front, dialog" ); -})(jQuery); -/*! - * jQuery UI Effects Shake 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Shake - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { + if ( !element.length ) { + element = this.document[ 0 ].body; + } -$.effects.shake = function(o) { + return element; + }, - return this.queue(function() { + _destroy: function() { + var that = this; - // Create element - var el = $(this), props = ['position','top','bottom','left','right']; + // Close open tooltips + $.each( this.tooltips, function( id, tooltipData ) { - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var direction = o.options.direction || 'left'; // Default direction - var distance = o.options.distance || 20; // Default distance - var times = o.options.times || 3; // Default # of times - var speed = o.duration || o.options.duration || 140; // Default speed per shake - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - - // Animation - var animation = {}, animation1 = {}, animation2 = {}; - animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2; - animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2; - - // Animate - el.animate(animation, speed, o.options.easing); - for (var i = 1; i < times; i++) { // Shakes - el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing); - }; - el.animate(animation1, speed, o.options.easing). - animate(animation, speed / 2, o.options.easing, function(){ // Last shake - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - el.queue('fx', function() { el.dequeue(); }); - el.dequeue(); - }); + // Delegate to close method to handle common cleanup + var event = $.Event( "blur" ), + element = tooltipData.element; + event.target = event.currentTarget = element[ 0 ]; + that.close( event, true ); -}; + // Remove immediately; destroying an open tooltip doesn't use the + // hide animation + $( "#" + id ).remove(); -})(jQuery); -/*! - * jQuery UI Effects Slide 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Slide - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { + // Restore the title + if ( element.data( "ui-tooltip-title" ) ) { -$.effects.slide = function(o) { + // If the title attribute has changed since open(), don't restore + if ( !element.attr( "title" ) ) { + element.attr( "title", element.data( "ui-tooltip-title" ) ); + } + element.removeData( "ui-tooltip-title" ); + } + } ); + this.liveRegion.remove(); + } +} ); - return this.queue(function() { +// DEPRECATED +// TODO: Switch return back to widget declaration at top of file when this is removed +if ( $.uiBackCompat !== false ) { - // Create element - var el = $(this), props = ['position','top','bottom','left','right']; + // Backcompat for tooltipClass option + $.widget( "ui.tooltip", $.ui.tooltip, { + options: { + tooltipClass: null + }, + _tooltip: function() { + var tooltipData = this._superApply( arguments ); + if ( this.options.tooltipClass ) { + tooltipData.tooltip.addClass( this.options.tooltipClass ); + } + return tooltipData; + } + } ); +} - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode - var direction = o.options.direction || 'left'; // Default Direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true})); - if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift - - // Animation - var animation = {}; - animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; - - // Animate - el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - el.dequeue(); - }}); - - }); +var widgetsTooltip = $.ui.tooltip; -}; -})(jQuery); -/*! - * jQuery UI Effects Transfer 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Transfer - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { -$.effects.transfer = function(o) { - return this.queue(function() { - var elem = $(this), - target = $(o.options.to), - endPosition = target.offset(), - animation = { - top: endPosition.top, - left: endPosition.left, - height: target.innerHeight(), - width: target.innerWidth() - }, - startPosition = elem.offset(), - transfer = $('
    ') - .appendTo(document.body) - .addClass(o.options.className) - .css({ - top: startPosition.top, - left: startPosition.left, - height: elem.innerHeight(), - width: elem.innerWidth(), - position: 'absolute' - }) - .animate(animation, o.duration, o.options.easing, function() { - transfer.remove(); - (o.callback && o.callback.apply(elem[0], arguments)); - elem.dequeue(); - }); - }); -}; -})(jQuery); +})); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery-ui.min.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery-ui.min.js new file mode 100644 index 00000000..25398a16 --- /dev/null +++ b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery-ui.min.js @@ -0,0 +1,13 @@ +/*! jQuery UI - v1.12.1 - 2016-09-14 +* http://jqueryui.com +* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("
    "))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(m.inline?m.dpDiv.parent()[0]:m.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
    ",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
    "),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}});var c="ui-effects-",u="ui-effects-style",d="ui-effects-animated",p=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("

    ")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(d)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(c+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(c+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("

    ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(u,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(u)||"",t.removeData(u)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(c+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=c+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(d),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(d,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n) +}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("
    ").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var f=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("
    ").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var f;t.uiBackCompat!==!1&&(f=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)})),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t(""),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n; +this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("
    [(#SELF|parametre_url{tri,nom}|ancre_url{##ENV{id,sauvegardes}}|lien_ou_expose{<:info_nom:>,#ENV{tri,nom}|=={nom},ajax})][(#SELF|parametre_url{tri,taille}|ancre_url{##ENV{id,sauvegardes}}|lien_ou_expose{<:label_poids_fichier:>,#ENV{tri,nom}|=={taille},ajax})] [(#SELF|parametre_url{tri,date}|ancre_url{##ENV{id,sauvegardes}}|lien_ou_expose{<:public:date:>,#ENV{tri,nom}|=={date},ajax})]
    + [(#CHEMIN_IMAGE{telecharger-16.png}|balise_img{<:bouton_download:>})] + [(#VALEUR{taille}|taille_en_octets)] [(#VAL{'Y-m-d H:i:s'}|date{#VALEUR{date}}|affdate_heure)] - [(#CHEMIN_IMAGE{telecharger-16.png}|balise_img{<:bouton_download:>})] + [(#BOUTON_ACTION{[(#CHEMIN_IMAGE{supprimer-12.png}|balise_img{<:lien_supprimer:>})],#URL_ACTION_AUTEUR{supprimer_dump,#VALEUR{fichier},#SELF},'ajax',<:dump:confirmer_supprimer_sauvegarde:>})]
    "+"",P=u?"":"",w=0;7>w;w++)M=(w+c)%7,P+="";for(T+=P+"",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="",W=u?"":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+""}Z++,Z>11&&(Z=0,te++),T+="
    "+this._get(t,"weekHeader")+"=5?" class='ui-datepicker-week-end'":"")+">"+""+p[M]+"
    "+this._get(t,"calculateWeek")(A)+""+(F&&!_?" ":L?""+A.getDate()+"":""+A.getDate()+"")+"
    "+(X?"
    "+(U[0]>0&&C===U[1]-1?"
    ":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="
    ",y="";if(o||!m)y+=""+a[e]+"";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+=""}if(v||(b+=y+(!o&&m&&_?"":" ")),!t.yearshtml)if(t.yearshtml="",o||!_)b+=""+i+"";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":" ")+y),b+="
    "},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var _=!1;t(document).on("mouseup",function(){_=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!_){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),_=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,_=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("
    ").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())} +},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.lefti[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
    ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
    "),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
    "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog +},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("
    ").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("
    "),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("").button({label:t("").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html(" ")},_createButtonPane:function(){this.uiDialogButtonPane=t("
    "),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("
    ").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("
    ").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("
    ").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&v(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var v=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&v(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=v(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("
    ").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("
    ").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("
    "),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("").parent().append("")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("
    ").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("
    ").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("
    ").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("
    ").attr("role","tooltip"),s=t("
    ").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip}); \ No newline at end of file diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.blind.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.blind.js deleted file mode 100644 index 686cdb79..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.blind.js +++ /dev/null @@ -1,49 +0,0 @@ -/*! - * jQuery UI Effects Blind 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Blind - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.blind = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','bottom','left','right']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var direction = o.options.direction || 'vertical'; // Default direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var ref = (direction == 'vertical') ? 'height' : 'width'; - var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width(); - if(mode == 'show') wrapper.css(ref, 0); // Shift - - // Animation - var animation = {}; - animation[ref] = mode == 'show' ? distance : 0; - - // Animate - wrapper.animate(animation, o.duration, o.options.easing, function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }); - - }); - -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.bounce.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.bounce.js deleted file mode 100644 index e3fc3d8d..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.bounce.js +++ /dev/null @@ -1,78 +0,0 @@ -/*! - * jQuery UI Effects Bounce 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Bounce - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.bounce = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','bottom','left','right']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var direction = o.options.direction || 'up'; // Default direction - var distance = o.options.distance || 20; // Default distance - var times = o.options.times || 5; // Default # of times - var speed = o.duration || 250; // Default speed per bounce - if (/show|hide/.test(mode)) props.push('opacity'); // Avoid touching opacity to prevent clearType and PNG issues in IE - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 3 : el.outerWidth({margin:true}) / 3); - if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift - if (mode == 'hide') distance = distance / (times * 2); - if (mode != 'hide') times--; - - // Animate - if (mode == 'show') { // Show Bounce - var animation = {opacity: 1}; - animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance; - el.animate(animation, speed / 2, o.options.easing); - distance = distance / 2; - times--; - }; - for (var i = 0; i < times; i++) { // Bounces - var animation1 = {}, animation2 = {}; - animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; - el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing); - distance = (mode == 'hide') ? distance * 2 : distance / 2; - }; - if (mode == 'hide') { // Last Bounce - var animation = {opacity: 0}; - animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - el.animate(animation, speed / 2, o.options.easing, function(){ - el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - } else { - var animation1 = {}, animation2 = {}; - animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance; - el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function(){ - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - }; - el.queue('fx', function() { el.dequeue(); }); - el.dequeue(); - }); - -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.clip.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.clip.js deleted file mode 100644 index 2b435548..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.clip.js +++ /dev/null @@ -1,54 +0,0 @@ -/*! - * jQuery UI Effects Clip 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Clip - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.clip = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','bottom','left','right','height','width']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var direction = o.options.direction || 'vertical'; // Default direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var animate = el[0].tagName == 'IMG' ? wrapper : el; - var ref = { - size: (direction == 'vertical') ? 'height' : 'width', - position: (direction == 'vertical') ? 'top' : 'left' - }; - var distance = (direction == 'vertical') ? animate.height() : animate.width(); - if(mode == 'show') { animate.css(ref.size, 0); animate.css(ref.position, distance / 2); } // Shift - - // Animation - var animation = {}; - animation[ref.size] = mode == 'show' ? distance : 0; - animation[ref.position] = mode == 'show' ? 0 : distance / 2; - - // Animate - animate.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.core.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.core.js deleted file mode 100644 index cc318271..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.core.js +++ /dev/null @@ -1,772 +0,0 @@ -/*! - * jQuery UI Effects 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/ - */ -;jQuery.effects || (function($, undefined) { - -$.effects = {}; - - - -/******************************************************************************/ -/****************************** COLOR ANIMATIONS ******************************/ -/******************************************************************************/ - -// override the animation for color styles -$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', - 'borderRightColor', 'borderTopColor', 'borderColor', 'color', 'outlineColor'], -function(i, attr) { - $.fx.step[attr] = function(fx) { - if (!fx.colorInit) { - fx.start = getColor(fx.elem, attr); - fx.end = getRGB(fx.end); - fx.colorInit = true; - } - - fx.elem.style[attr] = 'rgb(' + - Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10), 255), 0) + ',' + - Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10), 255), 0) + ',' + - Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10), 255), 0) + ')'; - }; -}); - -// Color Conversion functions from highlightFade -// By Blair Mitchelmore -// http://jquery.offput.ca/highlightFade/ - -// Parse strings looking for color tuples [255,255,255] -function getRGB(color) { - var result; - - // Check if we're already dealing with an array of colors - if ( color && color.constructor == Array && color.length == 3 ) - return color; - - // Look for rgb(num,num,num) - if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) - return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)]; - - // Look for rgb(num%,num%,num%) - if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) - return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; - - // Look for #a0b1c2 - if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) - return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; - - // Look for #fff - if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) - return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; - - // Look for rgba(0, 0, 0, 0) == transparent in Safari 3 - if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) - return colors['transparent']; - - // Otherwise, we're most likely dealing with a named color - return colors[$.trim(color).toLowerCase()]; -} - -function getColor(elem, attr) { - var color; - - do { - color = $.curCSS(elem, attr); - - // Keep going until we find an element that has color, or we hit the body - if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") ) - break; - - attr = "backgroundColor"; - } while ( elem = elem.parentNode ); - - return getRGB(color); -}; - -// Some named colors to work with -// From Interface by Stefan Petre -// http://interface.eyecon.ro/ - -var colors = { - aqua:[0,255,255], - azure:[240,255,255], - beige:[245,245,220], - black:[0,0,0], - blue:[0,0,255], - brown:[165,42,42], - cyan:[0,255,255], - darkblue:[0,0,139], - darkcyan:[0,139,139], - darkgrey:[169,169,169], - darkgreen:[0,100,0], - darkkhaki:[189,183,107], - darkmagenta:[139,0,139], - darkolivegreen:[85,107,47], - darkorange:[255,140,0], - darkorchid:[153,50,204], - darkred:[139,0,0], - darksalmon:[233,150,122], - darkviolet:[148,0,211], - fuchsia:[255,0,255], - gold:[255,215,0], - green:[0,128,0], - indigo:[75,0,130], - khaki:[240,230,140], - lightblue:[173,216,230], - lightcyan:[224,255,255], - lightgreen:[144,238,144], - lightgrey:[211,211,211], - lightpink:[255,182,193], - lightyellow:[255,255,224], - lime:[0,255,0], - magenta:[255,0,255], - maroon:[128,0,0], - navy:[0,0,128], - olive:[128,128,0], - orange:[255,165,0], - pink:[255,192,203], - purple:[128,0,128], - violet:[128,0,128], - red:[255,0,0], - silver:[192,192,192], - white:[255,255,255], - yellow:[255,255,0], - transparent: [255,255,255] -}; - - - -/******************************************************************************/ -/****************************** CLASS ANIMATIONS ******************************/ -/******************************************************************************/ - -var classAnimationActions = ['add', 'remove', 'toggle'], - shorthandStyles = { - border: 1, - borderBottom: 1, - borderColor: 1, - borderLeft: 1, - borderRight: 1, - borderTop: 1, - borderWidth: 1, - margin: 1, - padding: 1 - }; - -function getElementStyles() { - var style = document.defaultView - ? document.defaultView.getComputedStyle(this, null) - : this.currentStyle, - newStyle = {}, - key, - camelCase; - - // webkit enumerates style porperties - if (style && style.length && style[0] && style[style[0]]) { - var len = style.length; - while (len--) { - key = style[len]; - if (typeof style[key] == 'string') { - camelCase = key.replace(/\-(\w)/g, function(all, letter){ - return letter.toUpperCase(); - }); - newStyle[camelCase] = style[key]; - } - } - } else { - for (key in style) { - if (typeof style[key] === 'string') { - newStyle[key] = style[key]; - } - } - } - - return newStyle; -} - -function filterStyles(styles) { - var name, value; - for (name in styles) { - value = styles[name]; - if ( - // ignore null and undefined values - value == null || - // ignore functions (when does this occur?) - $.isFunction(value) || - // shorthand styles that need to be expanded - name in shorthandStyles || - // ignore scrollbars (break in IE) - (/scrollbar/).test(name) || - - // only colors or values that can be converted to numbers - (!(/color/i).test(name) && isNaN(parseFloat(value))) - ) { - delete styles[name]; - } - } - - return styles; -} - -function styleDifference(oldStyle, newStyle) { - var diff = { _: 0 }, // http://dev.jquery.com/ticket/5459 - name; - - for (name in newStyle) { - if (oldStyle[name] != newStyle[name]) { - diff[name] = newStyle[name]; - } - } - - return diff; -} - -$.effects.animateClass = function(value, duration, easing, callback) { - if ($.isFunction(easing)) { - callback = easing; - easing = null; - } - - return this.queue(function() { - var that = $(this), - originalStyleAttr = that.attr('style') || ' ', - originalStyle = filterStyles(getElementStyles.call(this)), - newStyle, - className = that.attr('class') || ""; - - $.each(classAnimationActions, function(i, action) { - if (value[action]) { - that[action + 'Class'](value[action]); - } - }); - newStyle = filterStyles(getElementStyles.call(this)); - that.attr('class', className); - - that.animate(styleDifference(originalStyle, newStyle), { - queue: false, - duration: duration, - easing: easing, - complete: function() { - $.each(classAnimationActions, function(i, action) { - if (value[action]) { that[action + 'Class'](value[action]); } - }); - // work around bug in IE by clearing the cssText before setting it - if (typeof that.attr('style') == 'object') { - that.attr('style').cssText = ''; - that.attr('style').cssText = originalStyleAttr; - } else { - that.attr('style', originalStyleAttr); - } - if (callback) { callback.apply(this, arguments); } - $.dequeue( this ); - } - }); - }); -}; - -$.fn.extend({ - _addClass: $.fn.addClass, - addClass: function(classNames, speed, easing, callback) { - return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames); - }, - - _removeClass: $.fn.removeClass, - removeClass: function(classNames,speed,easing,callback) { - return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames); - }, - - _toggleClass: $.fn.toggleClass, - toggleClass: function(classNames, force, speed, easing, callback) { - if ( typeof force == "boolean" || force === undefined ) { - if ( !speed ) { - // without speed parameter; - return this._toggleClass(classNames, force); - } else { - return $.effects.animateClass.apply(this, [(force?{add:classNames}:{remove:classNames}),speed,easing,callback]); - } - } else { - // without switch parameter; - return $.effects.animateClass.apply(this, [{ toggle: classNames },force,speed,easing]); - } - }, - - switchClass: function(remove,add,speed,easing,callback) { - return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]); - } -}); - - - -/******************************************************************************/ -/*********************************** EFFECTS **********************************/ -/******************************************************************************/ - -$.extend($.effects, { - version: "1.8.21", - - // Saves a set of properties in a data storage - save: function(element, set) { - for(var i=0; i < set.length; i++) { - if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]); - } - }, - - // Restores a set of previously saved properties from a data storage - restore: function(element, set) { - for(var i=0; i < set.length; i++) { - if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i])); - } - }, - - setMode: function(el, mode) { - if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle - return mode; - }, - - getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value - // this should be a little more flexible in the future to handle a string & hash - var y, x; - switch (origin[0]) { - case 'top': y = 0; break; - case 'middle': y = 0.5; break; - case 'bottom': y = 1; break; - default: y = origin[0] / original.height; - }; - switch (origin[1]) { - case 'left': x = 0; break; - case 'center': x = 0.5; break; - case 'right': x = 1; break; - default: x = origin[1] / original.width; - }; - return {x: x, y: y}; - }, - - // Wraps the element around a wrapper that copies position properties - createWrapper: function(element) { - - // if the element is already wrapped, return it - if (element.parent().is('.ui-effects-wrapper')) { - return element.parent(); - } - - // wrap the element - var props = { - width: element.outerWidth(true), - height: element.outerHeight(true), - 'float': element.css('float') - }, - wrapper = $('
    ') - .addClass('ui-effects-wrapper') - .css({ - fontSize: '100%', - background: 'transparent', - border: 'none', - margin: 0, - padding: 0 - }), - active = document.activeElement; - - // support: Firefox - // Firefox incorrectly exposes anonymous content - // https://bugzilla.mozilla.org/show_bug.cgi?id=561664 - try { - active.id; - } catch( e ) { - active = document.body; - } - - element.wrap( wrapper ); - - // Fixes #7595 - Elements lose focus when wrapped. - if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { - $( active ).focus(); - } - - wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element - - // transfer positioning properties to the wrapper - if (element.css('position') == 'static') { - wrapper.css({ position: 'relative' }); - element.css({ position: 'relative' }); - } else { - $.extend(props, { - position: element.css('position'), - zIndex: element.css('z-index') - }); - $.each(['top', 'left', 'bottom', 'right'], function(i, pos) { - props[pos] = element.css(pos); - if (isNaN(parseInt(props[pos], 10))) { - props[pos] = 'auto'; - } - }); - element.css({position: 'relative', top: 0, left: 0, right: 'auto', bottom: 'auto' }); - } - - return wrapper.css(props).show(); - }, - - removeWrapper: function(element) { - var parent, - active = document.activeElement; - - if (element.parent().is('.ui-effects-wrapper')) { - parent = element.parent().replaceWith(element); - // Fixes #7595 - Elements lose focus when wrapped. - if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { - $( active ).focus(); - } - return parent; - } - - return element; - }, - - setTransition: function(element, list, factor, value) { - value = value || {}; - $.each(list, function(i, x){ - var unit = element.cssUnit(x); - if (unit[0] > 0) value[x] = unit[0] * factor + unit[1]; - }); - return value; - } -}); - - -function _normalizeArguments(effect, options, speed, callback) { - // shift params for method overloading - if (typeof effect == 'object') { - callback = options; - speed = null; - options = effect; - effect = options.effect; - } - if ($.isFunction(options)) { - callback = options; - speed = null; - options = {}; - } - if (typeof options == 'number' || $.fx.speeds[options]) { - callback = speed; - speed = options; - options = {}; - } - if ($.isFunction(speed)) { - callback = speed; - speed = null; - } - - options = options || {}; - - speed = speed || options.duration; - speed = $.fx.off ? 0 : typeof speed == 'number' - ? speed : speed in $.fx.speeds ? $.fx.speeds[speed] : $.fx.speeds._default; - - callback = callback || options.complete; - - return [effect, options, speed, callback]; -} - -function standardSpeed( speed ) { - // valid standard speeds - if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) { - return true; - } - - // invalid strings - treat as "normal" speed - if ( typeof speed === "string" && !$.effects[ speed ] ) { - return true; - } - - return false; -} - -$.fn.extend({ - effect: function(effect, options, speed, callback) { - var args = _normalizeArguments.apply(this, arguments), - // TODO: make effects take actual parameters instead of a hash - args2 = { - options: args[1], - duration: args[2], - callback: args[3] - }, - mode = args2.options.mode, - effectMethod = $.effects[effect]; - - if ( $.fx.off || !effectMethod ) { - // delegate to the original method (e.g., .show()) if possible - if ( mode ) { - return this[ mode ]( args2.duration, args2.callback ); - } else { - return this.each(function() { - if ( args2.callback ) { - args2.callback.call( this ); - } - }); - } - } - - return effectMethod.call(this, args2); - }, - - _show: $.fn.show, - show: function(speed) { - if ( standardSpeed( speed ) ) { - return this._show.apply(this, arguments); - } else { - var args = _normalizeArguments.apply(this, arguments); - args[1].mode = 'show'; - return this.effect.apply(this, args); - } - }, - - _hide: $.fn.hide, - hide: function(speed) { - if ( standardSpeed( speed ) ) { - return this._hide.apply(this, arguments); - } else { - var args = _normalizeArguments.apply(this, arguments); - args[1].mode = 'hide'; - return this.effect.apply(this, args); - } - }, - - // jQuery core overloads toggle and creates _toggle - __toggle: $.fn.toggle, - toggle: function(speed) { - if ( standardSpeed( speed ) || typeof speed === "boolean" || $.isFunction( speed ) ) { - return this.__toggle.apply(this, arguments); - } else { - var args = _normalizeArguments.apply(this, arguments); - args[1].mode = 'toggle'; - return this.effect.apply(this, args); - } - }, - - // helper functions - cssUnit: function(key) { - var style = this.css(key), val = []; - $.each( ['em','px','%','pt'], function(i, unit){ - if(style.indexOf(unit) > 0) - val = [parseFloat(style), unit]; - }); - return val; - } -}); - - - -/******************************************************************************/ -/*********************************** EASING ***********************************/ -/******************************************************************************/ - -/* - * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ - * - * Uses the built in easing capabilities added In jQuery 1.1 - * to offer multiple easing options - * - * TERMS OF USE - jQuery Easing - * - * Open source under the BSD License. - * - * Copyright 2008 George McGinley Smith - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * -*/ - -// t: current time, b: begInnIng value, c: change In value, d: duration -$.easing.jswing = $.easing.swing; - -$.extend($.easing, -{ - def: 'easeOutQuad', - swing: function (x, t, b, c, d) { - //alert($.easing.default); - return $.easing[$.easing.def](x, t, b, c, d); - }, - easeInQuad: function (x, t, b, c, d) { - return c*(t/=d)*t + b; - }, - easeOutQuad: function (x, t, b, c, d) { - return -c *(t/=d)*(t-2) + b; - }, - easeInOutQuad: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t + b; - return -c/2 * ((--t)*(t-2) - 1) + b; - }, - easeInCubic: function (x, t, b, c, d) { - return c*(t/=d)*t*t + b; - }, - easeOutCubic: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t + 1) + b; - }, - easeInOutCubic: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t + b; - return c/2*((t-=2)*t*t + 2) + b; - }, - easeInQuart: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t + b; - }, - easeOutQuart: function (x, t, b, c, d) { - return -c * ((t=t/d-1)*t*t*t - 1) + b; - }, - easeInOutQuart: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t + b; - return -c/2 * ((t-=2)*t*t*t - 2) + b; - }, - easeInQuint: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t*t + b; - }, - easeOutQuint: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t*t*t + 1) + b; - }, - easeInOutQuint: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; - return c/2*((t-=2)*t*t*t*t + 2) + b; - }, - easeInSine: function (x, t, b, c, d) { - return -c * Math.cos(t/d * (Math.PI/2)) + c + b; - }, - easeOutSine: function (x, t, b, c, d) { - return c * Math.sin(t/d * (Math.PI/2)) + b; - }, - easeInOutSine: function (x, t, b, c, d) { - return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; - }, - easeInExpo: function (x, t, b, c, d) { - return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; - }, - easeOutExpo: function (x, t, b, c, d) { - return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; - }, - easeInOutExpo: function (x, t, b, c, d) { - if (t==0) return b; - if (t==d) return b+c; - if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; - return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; - }, - easeInCirc: function (x, t, b, c, d) { - return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; - }, - easeOutCirc: function (x, t, b, c, d) { - return c * Math.sqrt(1 - (t=t/d-1)*t) + b; - }, - easeInOutCirc: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; - return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; - }, - easeInElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - }, - easeOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; - }, - easeInOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; - }, - easeInBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*(t/=d)*t*((s+1)*t - s) + b; - }, - easeOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; - }, - easeInOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; - return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; - }, - easeInBounce: function (x, t, b, c, d) { - return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b; - }, - easeOutBounce: function (x, t, b, c, d) { - if ((t/=d) < (1/2.75)) { - return c*(7.5625*t*t) + b; - } else if (t < (2/2.75)) { - return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; - } else if (t < (2.5/2.75)) { - return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; - } else { - return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; - } - }, - easeInOutBounce: function (x, t, b, c, d) { - if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; - return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; - } -}); - -/* - * - * TERMS OF USE - EASING EQUATIONS - * - * Open source under the BSD License. - * - * Copyright 2001 Robert Penner - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.drop.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.drop.js deleted file mode 100644 index 1fa5660b..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.drop.js +++ /dev/null @@ -1,50 +0,0 @@ -/*! - * jQuery UI Effects Drop 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Drop - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.drop = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','bottom','left','right','opacity']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var direction = o.options.direction || 'left'; // Default Direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) / 2 : el.outerWidth({margin:true}) / 2); - if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance); // Shift - - // Animation - var animation = {opacity: mode == 'show' ? 1 : 0}; - animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; - - // Animate - el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.explode.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.explode.js deleted file mode 100644 index f50e2571..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.explode.js +++ /dev/null @@ -1,79 +0,0 @@ -/*! - * jQuery UI Effects Explode 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Explode - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.explode = function(o) { - - return this.queue(function() { - - var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; - var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3; - - o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode; - var el = $(this).show().css('visibility', 'hidden'); - var offset = el.offset(); - - //Substract the margins - not fixing the problem yet. - offset.top -= parseInt(el.css("marginTop"),10) || 0; - offset.left -= parseInt(el.css("marginLeft"),10) || 0; - - var width = el.outerWidth(true); - var height = el.outerHeight(true); - - for(var i=0;i
    ') - .css({ - position: 'absolute', - visibility: 'visible', - left: -j*(width/cells), - top: -i*(height/rows) - }) - .parent() - .addClass('ui-effects-explode') - .css({ - position: 'absolute', - overflow: 'hidden', - width: width/cells, - height: height/rows, - left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? (j-Math.floor(cells/2))*(width/cells) : 0), - top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? (i-Math.floor(rows/2))*(height/rows) : 0), - opacity: o.options.mode == 'show' ? 0 : 1 - }).animate({ - left: offset.left + j*(width/cells) + (o.options.mode == 'show' ? 0 : (j-Math.floor(cells/2))*(width/cells)), - top: offset.top + i*(height/rows) + (o.options.mode == 'show' ? 0 : (i-Math.floor(rows/2))*(height/rows)), - opacity: o.options.mode == 'show' ? 1 : 0 - }, o.duration || 500); - } - } - - // Set a timeout, to call the callback approx. when the other animations have finished - setTimeout(function() { - - o.options.mode == 'show' ? el.css({ visibility: 'visible' }) : el.css({ visibility: 'visible' }).hide(); - if(o.callback) o.callback.apply(el[0]); // Callback - el.dequeue(); - - $('div.ui-effects-explode').remove(); - - }, o.duration || 500); - - - }); - -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.fade.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.fade.js deleted file mode 100644 index c62037f5..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.fade.js +++ /dev/null @@ -1,32 +0,0 @@ -/*! - * jQuery UI Effects Fade 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Fade - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.fade = function(o) { - return this.queue(function() { - var elem = $(this), - mode = $.effects.setMode(elem, o.options.mode || 'hide'); - - elem.animate({ opacity: mode }, { - queue: false, - duration: o.duration, - easing: o.options.easing, - complete: function() { - (o.callback && o.callback.apply(this, arguments)); - elem.dequeue(); - } - }); - }); -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.fold.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.fold.js deleted file mode 100644 index a660eedb..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.fold.js +++ /dev/null @@ -1,56 +0,0 @@ -/*! - * jQuery UI Effects Fold 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Fold - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.fold = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','bottom','left','right']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'hide'); // Set Mode - var size = o.options.size || 15; // Default fold size - var horizFirst = !(!o.options.horizFirst); // Ensure a boolean value - var duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2; - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - var wrapper = $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var widthFirst = ((mode == 'show') != horizFirst); - var ref = widthFirst ? ['width', 'height'] : ['height', 'width']; - var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()]; - var percent = /([0-9]+)%/.exec(size); - if(percent) size = parseInt(percent[1],10) / 100 * distance[mode == 'hide' ? 0 : 1]; - if(mode == 'show') wrapper.css(horizFirst ? {height: 0, width: size} : {height: size, width: 0}); // Shift - - // Animation - var animation1 = {}, animation2 = {}; - animation1[ref[0]] = mode == 'show' ? distance[0] : size; - animation2[ref[1]] = mode == 'show' ? distance[1] : 0; - - // Animate - wrapper.animate(animation1, duration, o.options.easing) - .animate(animation2, duration, o.options.easing, function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(el[0], arguments); // Callback - el.dequeue(); - }); - - }); - -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.highlight.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.highlight.js deleted file mode 100644 index e65bda35..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.highlight.js +++ /dev/null @@ -1,50 +0,0 @@ -/*! - * jQuery UI Effects Highlight 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Highlight - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.highlight = function(o) { - return this.queue(function() { - var elem = $(this), - props = ['backgroundImage', 'backgroundColor', 'opacity'], - mode = $.effects.setMode(elem, o.options.mode || 'show'), - animation = { - backgroundColor: elem.css('backgroundColor') - }; - - if (mode == 'hide') { - animation.opacity = 0; - } - - $.effects.save(elem, props); - elem - .show() - .css({ - backgroundImage: 'none', - backgroundColor: o.options.color || '#ffff99' - }) - .animate(animation, { - queue: false, - duration: o.duration, - easing: o.options.easing, - complete: function() { - (mode == 'hide' && elem.hide()); - $.effects.restore(elem, props); - (mode == 'show' && !$.support.opacity && this.style.removeAttribute('filter')); - (o.callback && o.callback.apply(this, arguments)); - elem.dequeue(); - } - }); - }); -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.pulsate.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.pulsate.js deleted file mode 100644 index a5121842..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.pulsate.js +++ /dev/null @@ -1,51 +0,0 @@ -/*! - * jQuery UI Effects Pulsate 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Pulsate - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.pulsate = function(o) { - return this.queue(function() { - var elem = $(this), - mode = $.effects.setMode(elem, o.options.mode || 'show'), - times = ((o.options.times || 5) * 2) - 1, - duration = o.duration ? o.duration / 2 : $.fx.speeds._default / 2, - isVisible = elem.is(':visible'), - animateTo = 0; - - if (!isVisible) { - elem.css('opacity', 0).show(); - animateTo = 1; - } - - if ((mode == 'hide' && isVisible) || (mode == 'show' && !isVisible)) { - times--; - } - - for (var i = 0; i < times; i++) { - elem.animate({ opacity: animateTo }, duration, o.options.easing); - animateTo = (animateTo + 1) % 2; - } - - elem.animate({ opacity: animateTo }, duration, o.options.easing, function() { - if (animateTo == 0) { - elem.hide(); - } - (o.callback && o.callback.apply(this, arguments)); - }); - - elem - .queue('fx', function() { elem.dequeue(); }) - .dequeue(); - }); -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.scale.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.scale.js deleted file mode 100644 index c312195c..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.scale.js +++ /dev/null @@ -1,178 +0,0 @@ -/*! - * jQuery UI Effects Scale 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Scale - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.puff = function(o) { - return this.queue(function() { - var elem = $(this), - mode = $.effects.setMode(elem, o.options.mode || 'hide'), - percent = parseInt(o.options.percent, 10) || 150, - factor = percent / 100, - original = { height: elem.height(), width: elem.width() }; - - $.extend(o.options, { - fade: true, - mode: mode, - percent: mode == 'hide' ? percent : 100, - from: mode == 'hide' - ? original - : { - height: original.height * factor, - width: original.width * factor - } - }); - - elem.effect('scale', o.options, o.duration, o.callback); - elem.dequeue(); - }); -}; - -$.effects.scale = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this); - - // Set options - var options = $.extend(true, {}, o.options); - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var percent = parseInt(o.options.percent,10) || (parseInt(o.options.percent,10) == 0 ? 0 : (mode == 'hide' ? 0 : 100)); // Set default scaling percent - var direction = o.options.direction || 'both'; // Set default axis - var origin = o.options.origin; // The origin of the scaling - if (mode != 'effect') { // Set default origin and restore for show/hide - options.origin = origin || ['middle','center']; - options.restore = true; - } - var original = {height: el.height(), width: el.width()}; // Save original - el.from = o.options.from || (mode == 'show' ? {height: 0, width: 0} : original); // Default from state - - // Adjust - var factor = { // Set scaling factor - y: direction != 'horizontal' ? (percent / 100) : 1, - x: direction != 'vertical' ? (percent / 100) : 1 - }; - el.to = {height: original.height * factor.y, width: original.width * factor.x}; // Set to state - - if (o.options.fade) { // Fade option to support puff - if (mode == 'show') {el.from.opacity = 0; el.to.opacity = 1;}; - if (mode == 'hide') {el.from.opacity = 1; el.to.opacity = 0;}; - }; - - // Animation - options.from = el.from; options.to = el.to; options.mode = mode; - - // Animate - el.effect('size', options, o.duration, o.callback); - el.dequeue(); - }); - -}; - -$.effects.size = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','bottom','left','right','width','height','overflow','opacity']; - var props1 = ['position','top','bottom','left','right','overflow','opacity']; // Always restore - var props2 = ['width','height','overflow']; // Copy for children - var cProps = ['fontSize']; - var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom']; - var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var restore = o.options.restore || false; // Default restore - var scale = o.options.scale || 'both'; // Default scale mode - var origin = o.options.origin; // The origin of the sizing - var original = {height: el.height(), width: el.width()}; // Save original - el.from = o.options.from || original; // Default from state - el.to = o.options.to || original; // Default to state - // Adjust - if (origin) { // Calculate baseline shifts - var baseline = $.effects.getBaseline(origin, original); - el.from.top = (original.height - el.from.height) * baseline.y; - el.from.left = (original.width - el.from.width) * baseline.x; - el.to.top = (original.height - el.to.height) * baseline.y; - el.to.left = (original.width - el.to.width) * baseline.x; - }; - var factor = { // Set scaling factor - from: {y: el.from.height / original.height, x: el.from.width / original.width}, - to: {y: el.to.height / original.height, x: el.to.width / original.width} - }; - if (scale == 'box' || scale == 'both') { // Scale the css box - if (factor.from.y != factor.to.y) { // Vertical props scaling - props = props.concat(vProps); - el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from); - el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to); - }; - if (factor.from.x != factor.to.x) { // Horizontal props scaling - props = props.concat(hProps); - el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from); - el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to); - }; - }; - if (scale == 'content' || scale == 'both') { // Scale the content - if (factor.from.y != factor.to.y) { // Vertical props scaling - props = props.concat(cProps); - el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from); - el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to); - }; - }; - $.effects.save(el, restore ? props : props1); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - el.css('overflow','hidden').css(el.from); // Shift - - // Animate - if (scale == 'content' || scale == 'both') { // Scale the children - vProps = vProps.concat(['marginTop','marginBottom']).concat(cProps); // Add margins/font-size - hProps = hProps.concat(['marginLeft','marginRight']); // Add margins - props2 = props.concat(vProps).concat(hProps); // Concat - el.find("*[width]").each(function(){ - var child = $(this); - if (restore) $.effects.save(child, props2); - var c_original = {height: child.height(), width: child.width()}; // Save original - child.from = {height: c_original.height * factor.from.y, width: c_original.width * factor.from.x}; - child.to = {height: c_original.height * factor.to.y, width: c_original.width * factor.to.x}; - if (factor.from.y != factor.to.y) { // Vertical props scaling - child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from); - child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to); - }; - if (factor.from.x != factor.to.x) { // Horizontal props scaling - child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from); - child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to); - }; - child.css(child.from); // Shift children - child.animate(child.to, o.duration, o.options.easing, function(){ - if (restore) $.effects.restore(child, props2); // Restore children - }); // Animate children - }); - }; - - // Animate - el.animate(el.to, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if (el.to.opacity === 0) { - el.css('opacity', el.from.opacity); - } - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, restore ? props : props1); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.shake.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.shake.js deleted file mode 100644 index 08ce5a84..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.shake.js +++ /dev/null @@ -1,57 +0,0 @@ -/*! - * jQuery UI Effects Shake 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Shake - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.shake = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','bottom','left','right']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'effect'); // Set Mode - var direction = o.options.direction || 'left'; // Default direction - var distance = o.options.distance || 20; // Default distance - var times = o.options.times || 3; // Default # of times - var speed = o.duration || o.options.duration || 140; // Default speed per shake - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - - // Animation - var animation = {}, animation1 = {}, animation2 = {}; - animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance; - animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2; - animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2; - - // Animate - el.animate(animation, speed, o.options.easing); - for (var i = 1; i < times; i++) { // Shakes - el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing); - }; - el.animate(animation1, speed, o.options.easing). - animate(animation, speed / 2, o.options.easing, function(){ // Last shake - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - }); - el.queue('fx', function() { el.dequeue(); }); - el.dequeue(); - }); - -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.slide.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.slide.js deleted file mode 100644 index 3258a9ad..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.slide.js +++ /dev/null @@ -1,50 +0,0 @@ -/*! - * jQuery UI Effects Slide 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Slide - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.slide = function(o) { - - return this.queue(function() { - - // Create element - var el = $(this), props = ['position','top','bottom','left','right']; - - // Set options - var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode - var direction = o.options.direction || 'left'; // Default Direction - - // Adjust - $.effects.save(el, props); el.show(); // Save & Show - $.effects.createWrapper(el).css({overflow:'hidden'}); // Create Wrapper - var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left'; - var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg'; - var distance = o.options.distance || (ref == 'top' ? el.outerHeight({margin:true}) : el.outerWidth({margin:true})); - if (mode == 'show') el.css(ref, motion == 'pos' ? (isNaN(distance) ? "-" + distance : -distance) : distance); // Shift - - // Animation - var animation = {}; - animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance; - - // Animate - el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { - if(mode == 'hide') el.hide(); // Hide - $.effects.restore(el, props); $.effects.removeWrapper(el); // Restore - if(o.callback) o.callback.apply(this, arguments); // Callback - el.dequeue(); - }}); - - }); - -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.transfer.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.transfer.js deleted file mode 100644 index 97514f19..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.effects.transfer.js +++ /dev/null @@ -1,45 +0,0 @@ -/*! - * jQuery UI Effects Transfer 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Effects/Transfer - * - * Depends: - * jquery.effects.core.js - */ -(function( $, undefined ) { - -$.effects.transfer = function(o) { - return this.queue(function() { - var elem = $(this), - target = $(o.options.to), - endPosition = target.offset(), - animation = { - top: endPosition.top, - left: endPosition.left, - height: target.innerHeight(), - width: target.innerWidth() - }, - startPosition = elem.offset(), - transfer = $('
    ') - .appendTo(document.body) - .addClass(o.options.className) - .css({ - top: startPosition.top, - left: startPosition.left, - height: elem.innerHeight(), - width: elem.innerWidth(), - position: 'absolute' - }) - .animate(animation, o.duration, o.options.easing, function() { - transfer.remove(); - (o.callback && o.callback.apply(elem[0], arguments)); - elem.dequeue(); - }); - }); -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.accordion.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.accordion.js deleted file mode 100644 index fe0a729a..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.accordion.js +++ /dev/null @@ -1,611 +0,0 @@ -/*! - * jQuery UI Accordion 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Accordion - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -$.widget( "ui.accordion", { - options: { - active: 0, - animated: "slide", - autoHeight: true, - clearStyle: false, - collapsible: false, - event: "click", - fillSpace: false, - header: "> li > :first-child,> :not(li):even", - icons: { - header: "ui-icon-triangle-1-e", - headerSelected: "ui-icon-triangle-1-s" - }, - navigation: false, - navigationFilter: function() { - return this.href.toLowerCase() === location.href.toLowerCase(); - } - }, - - _create: function() { - var self = this, - options = self.options; - - self.running = 0; - - self.element - .addClass( "ui-accordion ui-widget ui-helper-reset" ) - // in lack of child-selectors in CSS - // we need to mark top-LIs in a UL-accordion for some IE-fix - .children( "li" ) - .addClass( "ui-accordion-li-fix" ); - - self.headers = self.element.find( options.header ) - .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" ) - .bind( "mouseenter.accordion", function() { - if ( options.disabled ) { - return; - } - $( this ).addClass( "ui-state-hover" ); - }) - .bind( "mouseleave.accordion", function() { - if ( options.disabled ) { - return; - } - $( this ).removeClass( "ui-state-hover" ); - }) - .bind( "focus.accordion", function() { - if ( options.disabled ) { - return; - } - $( this ).addClass( "ui-state-focus" ); - }) - .bind( "blur.accordion", function() { - if ( options.disabled ) { - return; - } - $( this ).removeClass( "ui-state-focus" ); - }); - - self.headers.next() - .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" ); - - if ( options.navigation ) { - var current = self.element.find( "a" ).filter( options.navigationFilter ).eq( 0 ); - if ( current.length ) { - var header = current.closest( ".ui-accordion-header" ); - if ( header.length ) { - // anchor within header - self.active = header; - } else { - // anchor within content - self.active = current.closest( ".ui-accordion-content" ).prev(); - } - } - } - - self.active = self._findActive( self.active || options.active ) - .addClass( "ui-state-default ui-state-active" ) - .toggleClass( "ui-corner-all" ) - .toggleClass( "ui-corner-top" ); - self.active.next().addClass( "ui-accordion-content-active" ); - - self._createIcons(); - self.resize(); - - // ARIA - self.element.attr( "role", "tablist" ); - - self.headers - .attr( "role", "tab" ) - .bind( "keydown.accordion", function( event ) { - return self._keydown( event ); - }) - .next() - .attr( "role", "tabpanel" ); - - self.headers - .not( self.active || "" ) - .attr({ - "aria-expanded": "false", - "aria-selected": "false", - tabIndex: -1 - }) - .next() - .hide(); - - // make sure at least one header is in the tab order - if ( !self.active.length ) { - self.headers.eq( 0 ).attr( "tabIndex", 0 ); - } else { - self.active - .attr({ - "aria-expanded": "true", - "aria-selected": "true", - tabIndex: 0 - }); - } - - // only need links in tab order for Safari - if ( !$.browser.safari ) { - self.headers.find( "a" ).attr( "tabIndex", -1 ); - } - - if ( options.event ) { - self.headers.bind( options.event.split(" ").join(".accordion ") + ".accordion", function(event) { - self._clickHandler.call( self, event, this ); - event.preventDefault(); - }); - } - }, - - _createIcons: function() { - var options = this.options; - if ( options.icons ) { - $( "" ) - .addClass( "ui-icon " + options.icons.header ) - .prependTo( this.headers ); - this.active.children( ".ui-icon" ) - .toggleClass(options.icons.header) - .toggleClass(options.icons.headerSelected); - this.element.addClass( "ui-accordion-icons" ); - } - }, - - _destroyIcons: function() { - this.headers.children( ".ui-icon" ).remove(); - this.element.removeClass( "ui-accordion-icons" ); - }, - - destroy: function() { - var options = this.options; - - this.element - .removeClass( "ui-accordion ui-widget ui-helper-reset" ) - .removeAttr( "role" ); - - this.headers - .unbind( ".accordion" ) - .removeClass( "ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" ) - .removeAttr( "role" ) - .removeAttr( "aria-expanded" ) - .removeAttr( "aria-selected" ) - .removeAttr( "tabIndex" ); - - this.headers.find( "a" ).removeAttr( "tabIndex" ); - this._destroyIcons(); - var contents = this.headers.next() - .css( "display", "" ) - .removeAttr( "role" ) - .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled" ); - if ( options.autoHeight || options.fillHeight ) { - contents.css( "height", "" ); - } - - return $.Widget.prototype.destroy.call( this ); - }, - - _setOption: function( key, value ) { - $.Widget.prototype._setOption.apply( this, arguments ); - - if ( key == "active" ) { - this.activate( value ); - } - if ( key == "icons" ) { - this._destroyIcons(); - if ( value ) { - this._createIcons(); - } - } - // #5332 - opacity doesn't cascade to positioned elements in IE - // so we need to add the disabled class to the headers and panels - if ( key == "disabled" ) { - this.headers.add(this.headers.next()) - [ value ? "addClass" : "removeClass" ]( - "ui-accordion-disabled ui-state-disabled" ); - } - }, - - _keydown: function( event ) { - if ( this.options.disabled || event.altKey || event.ctrlKey ) { - return; - } - - var keyCode = $.ui.keyCode, - length = this.headers.length, - currentIndex = this.headers.index( event.target ), - toFocus = false; - - switch ( event.keyCode ) { - case keyCode.RIGHT: - case keyCode.DOWN: - toFocus = this.headers[ ( currentIndex + 1 ) % length ]; - break; - case keyCode.LEFT: - case keyCode.UP: - toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; - break; - case keyCode.SPACE: - case keyCode.ENTER: - this._clickHandler( { target: event.target }, event.target ); - event.preventDefault(); - } - - if ( toFocus ) { - $( event.target ).attr( "tabIndex", -1 ); - $( toFocus ).attr( "tabIndex", 0 ); - toFocus.focus(); - return false; - } - - return true; - }, - - resize: function() { - var options = this.options, - maxHeight; - - if ( options.fillSpace ) { - if ( $.browser.msie ) { - var defOverflow = this.element.parent().css( "overflow" ); - this.element.parent().css( "overflow", "hidden"); - } - maxHeight = this.element.parent().height(); - if ($.browser.msie) { - this.element.parent().css( "overflow", defOverflow ); - } - - this.headers.each(function() { - maxHeight -= $( this ).outerHeight( true ); - }); - - this.headers.next() - .each(function() { - $( this ).height( Math.max( 0, maxHeight - - $( this ).innerHeight() + $( this ).height() ) ); - }) - .css( "overflow", "auto" ); - } else if ( options.autoHeight ) { - maxHeight = 0; - this.headers.next() - .each(function() { - maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() ); - }) - .height( maxHeight ); - } - - return this; - }, - - activate: function( index ) { - // TODO this gets called on init, changing the option without an explicit call for that - this.options.active = index; - // call clickHandler with custom event - var active = this._findActive( index )[ 0 ]; - this._clickHandler( { target: active }, active ); - - return this; - }, - - _findActive: function( selector ) { - return selector - ? typeof selector === "number" - ? this.headers.filter( ":eq(" + selector + ")" ) - : this.headers.not( this.headers.not( selector ) ) - : selector === false - ? $( [] ) - : this.headers.filter( ":eq(0)" ); - }, - - // TODO isn't event.target enough? why the separate target argument? - _clickHandler: function( event, target ) { - var options = this.options; - if ( options.disabled ) { - return; - } - - // called only when using activate(false) to close all parts programmatically - if ( !event.target ) { - if ( !options.collapsible ) { - return; - } - this.active - .removeClass( "ui-state-active ui-corner-top" ) - .addClass( "ui-state-default ui-corner-all" ) - .children( ".ui-icon" ) - .removeClass( options.icons.headerSelected ) - .addClass( options.icons.header ); - this.active.next().addClass( "ui-accordion-content-active" ); - var toHide = this.active.next(), - data = { - options: options, - newHeader: $( [] ), - oldHeader: options.active, - newContent: $( [] ), - oldContent: toHide - }, - toShow = ( this.active = $( [] ) ); - this._toggle( toShow, toHide, data ); - return; - } - - // get the click target - var clicked = $( event.currentTarget || target ), - clickedIsActive = clicked[0] === this.active[0]; - - // TODO the option is changed, is that correct? - // TODO if it is correct, shouldn't that happen after determining that the click is valid? - options.active = options.collapsible && clickedIsActive ? - false : - this.headers.index( clicked ); - - // if animations are still active, or the active header is the target, ignore click - if ( this.running || ( !options.collapsible && clickedIsActive ) ) { - return; - } - - // find elements to show and hide - var active = this.active, - toShow = clicked.next(), - toHide = this.active.next(), - data = { - options: options, - newHeader: clickedIsActive && options.collapsible ? $([]) : clicked, - oldHeader: this.active, - newContent: clickedIsActive && options.collapsible ? $([]) : toShow, - oldContent: toHide - }, - down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] ); - - // when the call to ._toggle() comes after the class changes - // it causes a very odd bug in IE 8 (see #6720) - this.active = clickedIsActive ? $([]) : clicked; - this._toggle( toShow, toHide, data, clickedIsActive, down ); - - // switch classes - active - .removeClass( "ui-state-active ui-corner-top" ) - .addClass( "ui-state-default ui-corner-all" ) - .children( ".ui-icon" ) - .removeClass( options.icons.headerSelected ) - .addClass( options.icons.header ); - if ( !clickedIsActive ) { - clicked - .removeClass( "ui-state-default ui-corner-all" ) - .addClass( "ui-state-active ui-corner-top" ) - .children( ".ui-icon" ) - .removeClass( options.icons.header ) - .addClass( options.icons.headerSelected ); - clicked - .next() - .addClass( "ui-accordion-content-active" ); - } - - return; - }, - - _toggle: function( toShow, toHide, data, clickedIsActive, down ) { - var self = this, - options = self.options; - - self.toShow = toShow; - self.toHide = toHide; - self.data = data; - - var complete = function() { - if ( !self ) { - return; - } - return self._completed.apply( self, arguments ); - }; - - // trigger changestart event - self._trigger( "changestart", null, self.data ); - - // count elements to animate - self.running = toHide.size() === 0 ? toShow.size() : toHide.size(); - - if ( options.animated ) { - var animOptions = {}; - - if ( options.collapsible && clickedIsActive ) { - animOptions = { - toShow: $( [] ), - toHide: toHide, - complete: complete, - down: down, - autoHeight: options.autoHeight || options.fillSpace - }; - } else { - animOptions = { - toShow: toShow, - toHide: toHide, - complete: complete, - down: down, - autoHeight: options.autoHeight || options.fillSpace - }; - } - - if ( !options.proxied ) { - options.proxied = options.animated; - } - - if ( !options.proxiedDuration ) { - options.proxiedDuration = options.duration; - } - - options.animated = $.isFunction( options.proxied ) ? - options.proxied( animOptions ) : - options.proxied; - - options.duration = $.isFunction( options.proxiedDuration ) ? - options.proxiedDuration( animOptions ) : - options.proxiedDuration; - - var animations = $.ui.accordion.animations, - duration = options.duration, - easing = options.animated; - - if ( easing && !animations[ easing ] && !$.easing[ easing ] ) { - easing = "slide"; - } - if ( !animations[ easing ] ) { - animations[ easing ] = function( options ) { - this.slide( options, { - easing: easing, - duration: duration || 700 - }); - }; - } - - animations[ easing ]( animOptions ); - } else { - if ( options.collapsible && clickedIsActive ) { - toShow.toggle(); - } else { - toHide.hide(); - toShow.show(); - } - - complete( true ); - } - - // TODO assert that the blur and focus triggers are really necessary, remove otherwise - toHide.prev() - .attr({ - "aria-expanded": "false", - "aria-selected": "false", - tabIndex: -1 - }) - .blur(); - toShow.prev() - .attr({ - "aria-expanded": "true", - "aria-selected": "true", - tabIndex: 0 - }) - .focus(); - }, - - _completed: function( cancel ) { - this.running = cancel ? 0 : --this.running; - if ( this.running ) { - return; - } - - if ( this.options.clearStyle ) { - this.toShow.add( this.toHide ).css({ - height: "", - overflow: "" - }); - } - - // other classes are removed before the animation; this one needs to stay until completed - this.toHide.removeClass( "ui-accordion-content-active" ); - // Work around for rendering bug in IE (#5421) - if ( this.toHide.length ) { - this.toHide.parent()[0].className = this.toHide.parent()[0].className; - } - - this._trigger( "change", null, this.data ); - } -}); - -$.extend( $.ui.accordion, { - version: "1.8.21", - animations: { - slide: function( options, additions ) { - options = $.extend({ - easing: "swing", - duration: 300 - }, options, additions ); - if ( !options.toHide.size() ) { - options.toShow.animate({ - height: "show", - paddingTop: "show", - paddingBottom: "show" - }, options ); - return; - } - if ( !options.toShow.size() ) { - options.toHide.animate({ - height: "hide", - paddingTop: "hide", - paddingBottom: "hide" - }, options ); - return; - } - var overflow = options.toShow.css( "overflow" ), - percentDone = 0, - showProps = {}, - hideProps = {}, - fxAttrs = [ "height", "paddingTop", "paddingBottom" ], - originalWidth; - // fix width before calculating height of hidden element - var s = options.toShow; - originalWidth = s[0].style.width; - s.width( s.parent().width() - - parseFloat( s.css( "paddingLeft" ) ) - - parseFloat( s.css( "paddingRight" ) ) - - ( parseFloat( s.css( "borderLeftWidth" ) ) || 0 ) - - ( parseFloat( s.css( "borderRightWidth" ) ) || 0 ) ); - - $.each( fxAttrs, function( i, prop ) { - hideProps[ prop ] = "hide"; - - var parts = ( "" + $.css( options.toShow[0], prop ) ).match( /^([\d+-.]+)(.*)$/ ); - showProps[ prop ] = { - value: parts[ 1 ], - unit: parts[ 2 ] || "px" - }; - }); - options.toShow.css({ height: 0, overflow: "hidden" }).show(); - options.toHide - .filter( ":hidden" ) - .each( options.complete ) - .end() - .filter( ":visible" ) - .animate( hideProps, { - step: function( now, settings ) { - // only calculate the percent when animating height - // IE gets very inconsistent results when animating elements - // with small values, which is common for padding - if ( settings.prop == "height" ) { - percentDone = ( settings.end - settings.start === 0 ) ? 0 : - ( settings.now - settings.start ) / ( settings.end - settings.start ); - } - - options.toShow[ 0 ].style[ settings.prop ] = - ( percentDone * showProps[ settings.prop ].value ) - + showProps[ settings.prop ].unit; - }, - duration: options.duration, - easing: options.easing, - complete: function() { - if ( !options.autoHeight ) { - options.toShow.css( "height", "" ); - } - options.toShow.css({ - width: originalWidth, - overflow: overflow - }); - options.complete(); - } - }); - }, - bounceslide: function( options ) { - this.slide( options, { - easing: options.down ? "easeOutBounce" : "swing", - duration: options.down ? 1000 : 200 - }); - } - } -}); - -})( jQuery ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.autocomplete.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.autocomplete.js deleted file mode 100644 index f8009c61..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.autocomplete.js +++ /dev/null @@ -1,631 +0,0 @@ -/*! - * jQuery UI Autocomplete 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Autocomplete - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.position.js - */ -(function( $, undefined ) { - -// used to prevent race conditions with remote data sources -var requestIndex = 0; - -$.widget( "ui.autocomplete", { - options: { - appendTo: "body", - autoFocus: false, - delay: 300, - minLength: 1, - position: { - my: "left top", - at: "left bottom", - collision: "none" - }, - source: null - }, - - pending: 0, - - _create: function() { - var self = this, - doc = this.element[ 0 ].ownerDocument, - suppressKeyPress; - this.isMultiLine = this.element.is( "textarea" ); - - this.element - .addClass( "ui-autocomplete-input" ) - .attr( "autocomplete", "off" ) - // TODO verify these actually work as intended - .attr({ - role: "textbox", - "aria-autocomplete": "list", - "aria-haspopup": "true" - }) - .bind( "keydown.autocomplete", function( event ) { - if ( self.options.disabled || self.element.propAttr( "readOnly" ) ) { - return; - } - - suppressKeyPress = false; - var keyCode = $.ui.keyCode; - switch( event.keyCode ) { - case keyCode.PAGE_UP: - self._move( "previousPage", event ); - break; - case keyCode.PAGE_DOWN: - self._move( "nextPage", event ); - break; - case keyCode.UP: - self._keyEvent( "previous", event ); - break; - case keyCode.DOWN: - self._keyEvent( "next", event ); - break; - case keyCode.ENTER: - case keyCode.NUMPAD_ENTER: - // when menu is open and has focus - if ( self.menu.active ) { - // #6055 - Opera still allows the keypress to occur - // which causes forms to submit - suppressKeyPress = true; - event.preventDefault(); - } - //passthrough - ENTER and TAB both select the current element - case keyCode.TAB: - if ( !self.menu.active ) { - return; - } - self.menu.select( event ); - break; - case keyCode.ESCAPE: - self.element.val( self.term ); - self.close( event ); - break; - default: - // keypress is triggered before the input value is changed - clearTimeout( self.searching ); - self.searching = setTimeout(function() { - // only search if the value has changed - if ( self.term != self.element.val() ) { - self.selectedItem = null; - self.search( null, event ); - } - }, self.options.delay ); - break; - } - }) - .bind( "keypress.autocomplete", function( event ) { - if ( suppressKeyPress ) { - suppressKeyPress = false; - event.preventDefault(); - } - }) - .bind( "focus.autocomplete", function() { - if ( self.options.disabled ) { - return; - } - - self.selectedItem = null; - self.previous = self.element.val(); - }) - .bind( "blur.autocomplete", function( event ) { - if ( self.options.disabled ) { - return; - } - - clearTimeout( self.searching ); - // clicks on the menu (or a button to trigger a search) will cause a blur event - self.closing = setTimeout(function() { - self.close( event ); - self._change( event ); - }, 150 ); - }); - this._initSource(); - this.menu = $( "
      " ) - .addClass( "ui-autocomplete" ) - .appendTo( $( this.options.appendTo || "body", doc )[0] ) - // prevent the close-on-blur in case of a "slow" click on the menu (long mousedown) - .mousedown(function( event ) { - // clicking on the scrollbar causes focus to shift to the body - // but we can't detect a mouseup or a click immediately afterward - // so we have to track the next mousedown and close the menu if - // the user clicks somewhere outside of the autocomplete - var menuElement = self.menu.element[ 0 ]; - if ( !$( event.target ).closest( ".ui-menu-item" ).length ) { - setTimeout(function() { - $( document ).one( 'mousedown', function( event ) { - if ( event.target !== self.element[ 0 ] && - event.target !== menuElement && - !$.ui.contains( menuElement, event.target ) ) { - self.close(); - } - }); - }, 1 ); - } - - // use another timeout to make sure the blur-event-handler on the input was already triggered - setTimeout(function() { - clearTimeout( self.closing ); - }, 13); - }) - .menu({ - focus: function( event, ui ) { - var item = ui.item.data( "item.autocomplete" ); - if ( false !== self._trigger( "focus", event, { item: item } ) ) { - // use value to match what will end up in the input, if it was a key event - if ( /^key/.test(event.originalEvent.type) ) { - self.element.val( item.value ); - } - } - }, - selected: function( event, ui ) { - var item = ui.item.data( "item.autocomplete" ), - previous = self.previous; - - // only trigger when focus was lost (click on menu) - if ( self.element[0] !== doc.activeElement ) { - self.element.focus(); - self.previous = previous; - // #6109 - IE triggers two focus events and the second - // is asynchronous, so we need to reset the previous - // term synchronously and asynchronously :-( - setTimeout(function() { - self.previous = previous; - self.selectedItem = item; - }, 1); - } - - if ( false !== self._trigger( "select", event, { item: item } ) ) { - self.element.val( item.value ); - } - // reset the term after the select event - // this allows custom select handling to work properly - self.term = self.element.val(); - - self.close( event ); - self.selectedItem = item; - }, - blur: function( event, ui ) { - // don't set the value of the text field if it's already correct - // this prevents moving the cursor unnecessarily - if ( self.menu.element.is(":visible") && - ( self.element.val() !== self.term ) ) { - self.element.val( self.term ); - } - } - }) - .zIndex( this.element.zIndex() + 1 ) - // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 - .css({ top: 0, left: 0 }) - .hide() - .data( "menu" ); - if ( $.fn.bgiframe ) { - this.menu.element.bgiframe(); - } - // turning off autocomplete prevents the browser from remembering the - // value when navigating through history, so we re-enable autocomplete - // if the page is unloaded before the widget is destroyed. #7790 - self.beforeunloadHandler = function() { - self.element.removeAttr( "autocomplete" ); - }; - $( window ).bind( "beforeunload", self.beforeunloadHandler ); - }, - - destroy: function() { - this.element - .removeClass( "ui-autocomplete-input" ) - .removeAttr( "autocomplete" ) - .removeAttr( "role" ) - .removeAttr( "aria-autocomplete" ) - .removeAttr( "aria-haspopup" ); - this.menu.element.remove(); - $( window ).unbind( "beforeunload", this.beforeunloadHandler ); - $.Widget.prototype.destroy.call( this ); - }, - - _setOption: function( key, value ) { - $.Widget.prototype._setOption.apply( this, arguments ); - if ( key === "source" ) { - this._initSource(); - } - if ( key === "appendTo" ) { - this.menu.element.appendTo( $( value || "body", this.element[0].ownerDocument )[0] ) - } - if ( key === "disabled" && value && this.xhr ) { - this.xhr.abort(); - } - }, - - _initSource: function() { - var self = this, - array, - url; - if ( $.isArray(this.options.source) ) { - array = this.options.source; - this.source = function( request, response ) { - response( $.ui.autocomplete.filter(array, request.term) ); - }; - } else if ( typeof this.options.source === "string" ) { - url = this.options.source; - this.source = function( request, response ) { - if ( self.xhr ) { - self.xhr.abort(); - } - self.xhr = $.ajax({ - url: url, - data: request, - dataType: "json", - success: function( data, status ) { - response( data ); - }, - error: function() { - response( [] ); - } - }); - }; - } else { - this.source = this.options.source; - } - }, - - search: function( value, event ) { - value = value != null ? value : this.element.val(); - - // always save the actual value, not the one passed as an argument - this.term = this.element.val(); - - if ( value.length < this.options.minLength ) { - return this.close( event ); - } - - clearTimeout( this.closing ); - if ( this._trigger( "search", event ) === false ) { - return; - } - - return this._search( value ); - }, - - _search: function( value ) { - this.pending++; - this.element.addClass( "ui-autocomplete-loading" ); - - this.source( { term: value }, this._response() ); - }, - - _response: function() { - var that = this, - index = ++requestIndex; - - return function( content ) { - if ( index === requestIndex ) { - that.__response( content ); - } - - that.pending--; - if ( !that.pending ) { - that.element.removeClass( "ui-autocomplete-loading" ); - } - }; - }, - - __response: function( content ) { - if ( !this.options.disabled && content && content.length ) { - content = this._normalize( content ); - this._suggest( content ); - this._trigger( "open" ); - } else { - this.close(); - } - }, - - close: function( event ) { - clearTimeout( this.closing ); - if ( this.menu.element.is(":visible") ) { - this.menu.element.hide(); - this.menu.deactivate(); - this._trigger( "close", event ); - } - }, - - _change: function( event ) { - if ( this.previous !== this.element.val() ) { - this._trigger( "change", event, { item: this.selectedItem } ); - } - }, - - _normalize: function( items ) { - // assume all items have the right format when the first item is complete - if ( items.length && items[0].label && items[0].value ) { - return items; - } - return $.map( items, function(item) { - if ( typeof item === "string" ) { - return { - label: item, - value: item - }; - } - return $.extend({ - label: item.label || item.value, - value: item.value || item.label - }, item ); - }); - }, - - _suggest: function( items ) { - var ul = this.menu.element - .empty() - .zIndex( this.element.zIndex() + 1 ); - this._renderMenu( ul, items ); - // TODO refresh should check if the active item is still in the dom, removing the need for a manual deactivate - this.menu.deactivate(); - this.menu.refresh(); - - // size and position menu - ul.show(); - this._resizeMenu(); - ul.position( $.extend({ - of: this.element - }, this.options.position )); - - if ( this.options.autoFocus ) { - this.menu.next( new $.Event("mouseover") ); - } - }, - - _resizeMenu: function() { - var ul = this.menu.element; - ul.outerWidth( Math.max( - // Firefox wraps long text (possibly a rounding bug) - // so we add 1px to avoid the wrapping (#7513) - ul.width( "" ).outerWidth() + 1, - this.element.outerWidth() - ) ); - }, - - _renderMenu: function( ul, items ) { - var self = this; - $.each( items, function( index, item ) { - self._renderItem( ul, item ); - }); - }, - - _renderItem: function( ul, item) { - return $( "
    • " ) - .data( "item.autocomplete", item ) - .append( $( "
      " ).text( item.label ) ) - .appendTo( ul ); - }, - - _move: function( direction, event ) { - if ( !this.menu.element.is(":visible") ) { - this.search( null, event ); - return; - } - if ( this.menu.first() && /^previous/.test(direction) || - this.menu.last() && /^next/.test(direction) ) { - this.element.val( this.term ); - this.menu.deactivate(); - return; - } - this.menu[ direction ]( event ); - }, - - widget: function() { - return this.menu.element; - }, - _keyEvent: function( keyEvent, event ) { - if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { - this._move( keyEvent, event ); - - // prevents moving cursor to beginning/end of the text field in some browsers - event.preventDefault(); - } - } -}); - -$.extend( $.ui.autocomplete, { - escapeRegex: function( value ) { - return value.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); - }, - filter: function(array, term) { - var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" ); - return $.grep( array, function(value) { - return matcher.test( value.label || value.value || value ); - }); - } -}); - -}( jQuery )); - -/* - * jQuery UI Menu (not officially released) - * - * This widget isn't yet finished and the API is subject to change. We plan to finish - * it for the next release. You're welcome to give it a try anyway and give us feedback, - * as long as you're okay with migrating your code later on. We can help with that, too. - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Menu - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function($) { - -$.widget("ui.menu", { - _create: function() { - var self = this; - this.element - .addClass("ui-menu ui-widget ui-widget-content ui-corner-all") - .attr({ - role: "listbox", - "aria-activedescendant": "ui-active-menuitem" - }) - .click(function( event ) { - if ( !$( event.target ).closest( ".ui-menu-item a" ).length ) { - return; - } - // temporary - event.preventDefault(); - self.select( event ); - }); - this.refresh(); - }, - - refresh: function() { - var self = this; - - // don't refresh list items that are already adapted - var items = this.element.children("li:not(.ui-menu-item):has(a)") - .addClass("ui-menu-item") - .attr("role", "menuitem"); - - items.children("a") - .addClass("ui-corner-all") - .attr("tabindex", -1) - // mouseenter doesn't work with event delegation - .mouseenter(function( event ) { - self.activate( event, $(this).parent() ); - }) - .mouseleave(function() { - self.deactivate(); - }); - }, - - activate: function( event, item ) { - this.deactivate(); - if (this.hasScroll()) { - var offset = item.offset().top - this.element.offset().top, - scroll = this.element.scrollTop(), - elementHeight = this.element.height(); - if (offset < 0) { - this.element.scrollTop( scroll + offset); - } else if (offset >= elementHeight) { - this.element.scrollTop( scroll + offset - elementHeight + item.height()); - } - } - this.active = item.eq(0) - .children("a") - .addClass("ui-state-hover") - .attr("id", "ui-active-menuitem") - .end(); - this._trigger("focus", event, { item: item }); - }, - - deactivate: function() { - if (!this.active) { return; } - - this.active.children("a") - .removeClass("ui-state-hover") - .removeAttr("id"); - this._trigger("blur"); - this.active = null; - }, - - next: function(event) { - this.move("next", ".ui-menu-item:first", event); - }, - - previous: function(event) { - this.move("prev", ".ui-menu-item:last", event); - }, - - first: function() { - return this.active && !this.active.prevAll(".ui-menu-item").length; - }, - - last: function() { - return this.active && !this.active.nextAll(".ui-menu-item").length; - }, - - move: function(direction, edge, event) { - if (!this.active) { - this.activate(event, this.element.children(edge)); - return; - } - var next = this.active[direction + "All"](".ui-menu-item").eq(0); - if (next.length) { - this.activate(event, next); - } else { - this.activate(event, this.element.children(edge)); - } - }, - - // TODO merge with previousPage - nextPage: function(event) { - if (this.hasScroll()) { - // TODO merge with no-scroll-else - if (!this.active || this.last()) { - this.activate(event, this.element.children(".ui-menu-item:first")); - return; - } - var base = this.active.offset().top, - height = this.element.height(), - result = this.element.children(".ui-menu-item").filter(function() { - var close = $(this).offset().top - base - height + $(this).height(); - // TODO improve approximation - return close < 10 && close > -10; - }); - - // TODO try to catch this earlier when scrollTop indicates the last page anyway - if (!result.length) { - result = this.element.children(".ui-menu-item:last"); - } - this.activate(event, result); - } else { - this.activate(event, this.element.children(".ui-menu-item") - .filter(!this.active || this.last() ? ":first" : ":last")); - } - }, - - // TODO merge with nextPage - previousPage: function(event) { - if (this.hasScroll()) { - // TODO merge with no-scroll-else - if (!this.active || this.first()) { - this.activate(event, this.element.children(".ui-menu-item:last")); - return; - } - - var base = this.active.offset().top, - height = this.element.height(), - result = this.element.children(".ui-menu-item").filter(function() { - var close = $(this).offset().top - base + height - $(this).height(); - // TODO improve approximation - return close < 10 && close > -10; - }); - - // TODO try to catch this earlier when scrollTop indicates the last page anyway - if (!result.length) { - result = this.element.children(".ui-menu-item:first"); - } - this.activate(event, result); - } else { - this.activate(event, this.element.children(".ui-menu-item") - .filter(!this.active || this.first() ? ":last" : ":first")); - } - }, - - hasScroll: function() { - return this.element.height() < this.element[ $.fn.prop ? "prop" : "attr" ]("scrollHeight"); - }, - - select: function( event ) { - this._trigger("selected", event, { item: this.active }); - } -}); - -}(jQuery)); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.button.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.button.js deleted file mode 100644 index 47bd6aa7..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.button.js +++ /dev/null @@ -1,414 +0,0 @@ -/*! - * jQuery UI Button 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Button - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -var lastActive, startXPos, startYPos, clickDragged, - baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", - stateClasses = "ui-state-hover ui-state-active ", - typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", - formResetHandler = function() { - var buttons = $( this ).find( ":ui-button" ); - setTimeout(function() { - buttons.button( "refresh" ); - }, 1 ); - }, - radioGroup = function( radio ) { - var name = radio.name, - form = radio.form, - radios = $( [] ); - if ( name ) { - if ( form ) { - radios = $( form ).find( "[name='" + name + "']" ); - } else { - radios = $( "[name='" + name + "']", radio.ownerDocument ) - .filter(function() { - return !this.form; - }); - } - } - return radios; - }; - -$.widget( "ui.button", { - options: { - disabled: null, - text: true, - label: null, - icons: { - primary: null, - secondary: null - } - }, - _create: function() { - this.element.closest( "form" ) - .unbind( "reset.button" ) - .bind( "reset.button", formResetHandler ); - - if ( typeof this.options.disabled !== "boolean" ) { - this.options.disabled = !!this.element.propAttr( "disabled" ); - } else { - this.element.propAttr( "disabled", this.options.disabled ); - } - - this._determineButtonType(); - this.hasTitle = !!this.buttonElement.attr( "title" ); - - var self = this, - options = this.options, - toggleButton = this.type === "checkbox" || this.type === "radio", - hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ), - focusClass = "ui-state-focus"; - - if ( options.label === null ) { - options.label = this.buttonElement.html(); - } - - this.buttonElement - .addClass( baseClasses ) - .attr( "role", "button" ) - .bind( "mouseenter.button", function() { - if ( options.disabled ) { - return; - } - $( this ).addClass( "ui-state-hover" ); - if ( this === lastActive ) { - $( this ).addClass( "ui-state-active" ); - } - }) - .bind( "mouseleave.button", function() { - if ( options.disabled ) { - return; - } - $( this ).removeClass( hoverClass ); - }) - .bind( "click.button", function( event ) { - if ( options.disabled ) { - event.preventDefault(); - event.stopImmediatePropagation(); - } - }); - - this.element - .bind( "focus.button", function() { - // no need to check disabled, focus won't be triggered anyway - self.buttonElement.addClass( focusClass ); - }) - .bind( "blur.button", function() { - self.buttonElement.removeClass( focusClass ); - }); - - if ( toggleButton ) { - this.element.bind( "change.button", function() { - if ( clickDragged ) { - return; - } - self.refresh(); - }); - // if mouse moves between mousedown and mouseup (drag) set clickDragged flag - // prevents issue where button state changes but checkbox/radio checked state - // does not in Firefox (see ticket #6970) - this.buttonElement - .bind( "mousedown.button", function( event ) { - if ( options.disabled ) { - return; - } - clickDragged = false; - startXPos = event.pageX; - startYPos = event.pageY; - }) - .bind( "mouseup.button", function( event ) { - if ( options.disabled ) { - return; - } - if ( startXPos !== event.pageX || startYPos !== event.pageY ) { - clickDragged = true; - } - }); - } - - if ( this.type === "checkbox" ) { - this.buttonElement.bind( "click.button", function() { - if ( options.disabled || clickDragged ) { - return false; - } - $( this ).toggleClass( "ui-state-active" ); - self.buttonElement.attr( "aria-pressed", self.element[0].checked ); - }); - } else if ( this.type === "radio" ) { - this.buttonElement.bind( "click.button", function() { - if ( options.disabled || clickDragged ) { - return false; - } - $( this ).addClass( "ui-state-active" ); - self.buttonElement.attr( "aria-pressed", "true" ); - - var radio = self.element[ 0 ]; - radioGroup( radio ) - .not( radio ) - .map(function() { - return $( this ).button( "widget" )[ 0 ]; - }) - .removeClass( "ui-state-active" ) - .attr( "aria-pressed", "false" ); - }); - } else { - this.buttonElement - .bind( "mousedown.button", function() { - if ( options.disabled ) { - return false; - } - $( this ).addClass( "ui-state-active" ); - lastActive = this; - $( document ).one( "mouseup", function() { - lastActive = null; - }); - }) - .bind( "mouseup.button", function() { - if ( options.disabled ) { - return false; - } - $( this ).removeClass( "ui-state-active" ); - }) - .bind( "keydown.button", function(event) { - if ( options.disabled ) { - return false; - } - if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) { - $( this ).addClass( "ui-state-active" ); - } - }) - .bind( "keyup.button", function() { - $( this ).removeClass( "ui-state-active" ); - }); - - if ( this.buttonElement.is("a") ) { - this.buttonElement.keyup(function(event) { - if ( event.keyCode === $.ui.keyCode.SPACE ) { - // TODO pass through original event correctly (just as 2nd argument doesn't work) - $( this ).click(); - } - }); - } - } - - // TODO: pull out $.Widget's handling for the disabled option into - // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can - // be overridden by individual plugins - this._setOption( "disabled", options.disabled ); - this._resetButton(); - }, - - _determineButtonType: function() { - - if ( this.element.is(":checkbox") ) { - this.type = "checkbox"; - } else if ( this.element.is(":radio") ) { - this.type = "radio"; - } else if ( this.element.is("input") ) { - this.type = "input"; - } else { - this.type = "button"; - } - - if ( this.type === "checkbox" || this.type === "radio" ) { - // we don't search against the document in case the element - // is disconnected from the DOM - var ancestor = this.element.parents().filter(":last"), - labelSelector = "label[for='" + this.element.attr("id") + "']"; - this.buttonElement = ancestor.find( labelSelector ); - if ( !this.buttonElement.length ) { - ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings(); - this.buttonElement = ancestor.filter( labelSelector ); - if ( !this.buttonElement.length ) { - this.buttonElement = ancestor.find( labelSelector ); - } - } - this.element.addClass( "ui-helper-hidden-accessible" ); - - var checked = this.element.is( ":checked" ); - if ( checked ) { - this.buttonElement.addClass( "ui-state-active" ); - } - this.buttonElement.attr( "aria-pressed", checked ); - } else { - this.buttonElement = this.element; - } - }, - - widget: function() { - return this.buttonElement; - }, - - destroy: function() { - this.element - .removeClass( "ui-helper-hidden-accessible" ); - this.buttonElement - .removeClass( baseClasses + " " + stateClasses + " " + typeClasses ) - .removeAttr( "role" ) - .removeAttr( "aria-pressed" ) - .html( this.buttonElement.find(".ui-button-text").html() ); - - if ( !this.hasTitle ) { - this.buttonElement.removeAttr( "title" ); - } - - $.Widget.prototype.destroy.call( this ); - }, - - _setOption: function( key, value ) { - $.Widget.prototype._setOption.apply( this, arguments ); - if ( key === "disabled" ) { - if ( value ) { - this.element.propAttr( "disabled", true ); - } else { - this.element.propAttr( "disabled", false ); - } - return; - } - this._resetButton(); - }, - - refresh: function() { - var isDisabled = this.element.is( ":disabled" ); - if ( isDisabled !== this.options.disabled ) { - this._setOption( "disabled", isDisabled ); - } - if ( this.type === "radio" ) { - radioGroup( this.element[0] ).each(function() { - if ( $( this ).is( ":checked" ) ) { - $( this ).button( "widget" ) - .addClass( "ui-state-active" ) - .attr( "aria-pressed", "true" ); - } else { - $( this ).button( "widget" ) - .removeClass( "ui-state-active" ) - .attr( "aria-pressed", "false" ); - } - }); - } else if ( this.type === "checkbox" ) { - if ( this.element.is( ":checked" ) ) { - this.buttonElement - .addClass( "ui-state-active" ) - .attr( "aria-pressed", "true" ); - } else { - this.buttonElement - .removeClass( "ui-state-active" ) - .attr( "aria-pressed", "false" ); - } - } - }, - - _resetButton: function() { - if ( this.type === "input" ) { - if ( this.options.label ) { - this.element.val( this.options.label ); - } - return; - } - var buttonElement = this.buttonElement.removeClass( typeClasses ), - buttonText = $( "", this.element[0].ownerDocument ) - .addClass( "ui-button-text" ) - .html( this.options.label ) - .appendTo( buttonElement.empty() ) - .text(), - icons = this.options.icons, - multipleIcons = icons.primary && icons.secondary, - buttonClasses = []; - - if ( icons.primary || icons.secondary ) { - if ( this.options.text ) { - buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) ); - } - - if ( icons.primary ) { - buttonElement.prepend( "" ); - } - - if ( icons.secondary ) { - buttonElement.append( "" ); - } - - if ( !this.options.text ) { - buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" ); - - if ( !this.hasTitle ) { - buttonElement.attr( "title", buttonText ); - } - } - } else { - buttonClasses.push( "ui-button-text-only" ); - } - buttonElement.addClass( buttonClasses.join( " " ) ); - } -}); - -$.widget( "ui.buttonset", { - options: { - items: ":button, :submit, :reset, :checkbox, :radio, a, :data(button)" - }, - - _create: function() { - this.element.addClass( "ui-buttonset" ); - }, - - _init: function() { - this.refresh(); - }, - - _setOption: function( key, value ) { - if ( key === "disabled" ) { - this.buttons.button( "option", key, value ); - } - - $.Widget.prototype._setOption.apply( this, arguments ); - }, - - refresh: function() { - var rtl = this.element.css( "direction" ) === "rtl"; - - this.buttons = this.element.find( this.options.items ) - .filter( ":ui-button" ) - .button( "refresh" ) - .end() - .not( ":ui-button" ) - .button() - .end() - .map(function() { - return $( this ).button( "widget" )[ 0 ]; - }) - .removeClass( "ui-corner-all ui-corner-left ui-corner-right" ) - .filter( ":first" ) - .addClass( rtl ? "ui-corner-right" : "ui-corner-left" ) - .end() - .filter( ":last" ) - .addClass( rtl ? "ui-corner-left" : "ui-corner-right" ) - .end() - .end(); - }, - - destroy: function() { - this.element.removeClass( "ui-buttonset" ); - this.buttons - .map(function() { - return $( this ).button( "widget" )[ 0 ]; - }) - .removeClass( "ui-corner-left ui-corner-right" ) - .end() - .button( "destroy" ); - - $.Widget.prototype.destroy.call( this ); - } -}); - -}( jQuery ) ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.core.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.core.js deleted file mode 100644 index 2a8a2c18..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.core.js +++ /dev/null @@ -1,319 +0,0 @@ -/*! - * jQuery UI 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function( $, undefined ) { - -// prevent duplicate loading -// this is only a problem because we proxy existing functions -// and we don't want to double proxy them -$.ui = $.ui || {}; -if ( $.ui.version ) { - return; -} - -$.extend( $.ui, { - version: "1.8.21", - - keyCode: { - ALT: 18, - BACKSPACE: 8, - CAPS_LOCK: 20, - COMMA: 188, - COMMAND: 91, - COMMAND_LEFT: 91, // COMMAND - COMMAND_RIGHT: 93, - CONTROL: 17, - DELETE: 46, - DOWN: 40, - END: 35, - ENTER: 13, - ESCAPE: 27, - HOME: 36, - INSERT: 45, - LEFT: 37, - MENU: 93, // COMMAND_RIGHT - NUMPAD_ADD: 107, - NUMPAD_DECIMAL: 110, - NUMPAD_DIVIDE: 111, - NUMPAD_ENTER: 108, - NUMPAD_MULTIPLY: 106, - NUMPAD_SUBTRACT: 109, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - RIGHT: 39, - SHIFT: 16, - SPACE: 32, - TAB: 9, - UP: 38, - WINDOWS: 91 // COMMAND - } -}); - -// plugins -$.fn.extend({ - propAttr: $.fn.prop || $.fn.attr, - - _focus: $.fn.focus, - focus: function( delay, fn ) { - return typeof delay === "number" ? - this.each(function() { - var elem = this; - setTimeout(function() { - $( elem ).focus(); - if ( fn ) { - fn.call( elem ); - } - }, delay ); - }) : - this._focus.apply( this, arguments ); - }, - - scrollParent: function() { - var scrollParent; - if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { - scrollParent = this.parents().filter(function() { - return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); - }).eq(0); - } else { - scrollParent = this.parents().filter(function() { - return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); - }).eq(0); - } - - return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; - }, - - zIndex: function( zIndex ) { - if ( zIndex !== undefined ) { - return this.css( "zIndex", zIndex ); - } - - if ( this.length ) { - var elem = $( this[ 0 ] ), position, value; - while ( elem.length && elem[ 0 ] !== document ) { - // Ignore z-index if position is set to a value where z-index is ignored by the browser - // This makes behavior of this function consistent across browsers - // WebKit always returns auto if the element is positioned - position = elem.css( "position" ); - if ( position === "absolute" || position === "relative" || position === "fixed" ) { - // IE returns 0 when zIndex is not specified - // other browsers return a string - // we ignore the case of nested elements with an explicit value of 0 - //
      - value = parseInt( elem.css( "zIndex" ), 10 ); - if ( !isNaN( value ) && value !== 0 ) { - return value; - } - } - elem = elem.parent(); - } - } - - return 0; - }, - - disableSelection: function() { - return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + - ".ui-disableSelection", function( event ) { - event.preventDefault(); - }); - }, - - enableSelection: function() { - return this.unbind( ".ui-disableSelection" ); - } -}); - -$.each( [ "Width", "Height" ], function( i, name ) { - var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], - type = name.toLowerCase(), - orig = { - innerWidth: $.fn.innerWidth, - innerHeight: $.fn.innerHeight, - outerWidth: $.fn.outerWidth, - outerHeight: $.fn.outerHeight - }; - - function reduce( elem, size, border, margin ) { - $.each( side, function() { - size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0; - if ( border ) { - size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0; - } - if ( margin ) { - size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0; - } - }); - return size; - } - - $.fn[ "inner" + name ] = function( size ) { - if ( size === undefined ) { - return orig[ "inner" + name ].call( this ); - } - - return this.each(function() { - $( this ).css( type, reduce( this, size ) + "px" ); - }); - }; - - $.fn[ "outer" + name] = function( size, margin ) { - if ( typeof size !== "number" ) { - return orig[ "outer" + name ].call( this, size ); - } - - return this.each(function() { - $( this).css( type, reduce( this, size, true, margin ) + "px" ); - }); - }; -}); - -// selectors -function focusable( element, isTabIndexNotNaN ) { - var nodeName = element.nodeName.toLowerCase(); - if ( "area" === nodeName ) { - var map = element.parentNode, - mapName = map.name, - img; - if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { - return false; - } - img = $( "img[usemap=#" + mapName + "]" )[0]; - return !!img && visible( img ); - } - return ( /input|select|textarea|button|object/.test( nodeName ) - ? !element.disabled - : "a" == nodeName - ? element.href || isTabIndexNotNaN - : isTabIndexNotNaN) - // the element and all of its ancestors must be visible - && visible( element ); -} - -function visible( element ) { - return !$( element ).parents().andSelf().filter(function() { - return $.curCSS( this, "visibility" ) === "hidden" || - $.expr.filters.hidden( this ); - }).length; -} - -$.extend( $.expr[ ":" ], { - data: function( elem, i, match ) { - return !!$.data( elem, match[ 3 ] ); - }, - - focusable: function( element ) { - return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); - }, - - tabbable: function( element ) { - var tabIndex = $.attr( element, "tabindex" ), - isTabIndexNaN = isNaN( tabIndex ); - return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); - } -}); - -// support -$(function() { - var body = document.body, - div = body.appendChild( div = document.createElement( "div" ) ); - - // access offsetHeight before setting the style to prevent a layout bug - // in IE 9 which causes the elemnt to continue to take up space even - // after it is removed from the DOM (#8026) - div.offsetHeight; - - $.extend( div.style, { - minHeight: "100px", - height: "auto", - padding: 0, - borderWidth: 0 - }); - - $.support.minHeight = div.offsetHeight === 100; - $.support.selectstart = "onselectstart" in div; - - // set display to none to avoid a layout bug in IE - // http://dev.jquery.com/ticket/4014 - body.removeChild( div ).style.display = "none"; -}); - - - - - -// deprecated -$.extend( $.ui, { - // $.ui.plugin is deprecated. Use the proxy pattern instead. - plugin: { - add: function( module, option, set ) { - var proto = $.ui[ module ].prototype; - for ( var i in set ) { - proto.plugins[ i ] = proto.plugins[ i ] || []; - proto.plugins[ i ].push( [ option, set[ i ] ] ); - } - }, - call: function( instance, name, args ) { - var set = instance.plugins[ name ]; - if ( !set || !instance.element[ 0 ].parentNode ) { - return; - } - - for ( var i = 0; i < set.length; i++ ) { - if ( instance.options[ set[ i ][ 0 ] ] ) { - set[ i ][ 1 ].apply( instance.element, args ); - } - } - } - }, - - // will be deprecated when we switch to jQuery 1.4 - use jQuery.contains() - contains: function( a, b ) { - return document.compareDocumentPosition ? - a.compareDocumentPosition( b ) & 16 : - a !== b && a.contains( b ); - }, - - // only used by resizable - hasScroll: function( el, a ) { - - //If overflow is hidden, the element might have extra content, but the user wants to hide it - if ( $( el ).css( "overflow" ) === "hidden") { - return false; - } - - var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", - has = false; - - if ( el[ scroll ] > 0 ) { - return true; - } - - // TODO: determine which cases actually cause this to happen - // if the element doesn't have the scroll set, see if it's possible to - // set the scroll - el[ scroll ] = 1; - has = ( el[ scroll ] > 0 ); - el[ scroll ] = 0; - return has; - }, - - // these are odd functions, fix the API or move into individual plugins - isOverAxis: function( x, reference, size ) { - //Determines when x coordinate is over "b" element axis - return ( x > reference ) && ( x < ( reference + size ) ); - }, - isOver: function( y, x, top, left, height, width ) { - //Determines when x, y coordinates is over "b" element - return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width ); - } -}); - -})( jQuery ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.datepicker.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.datepicker.js deleted file mode 100644 index 8ca1b152..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.datepicker.js +++ /dev/null @@ -1,1824 +0,0 @@ -/*! - * jQuery UI Datepicker 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Datepicker - * - * Depends: - * jquery.ui.core.js - */ -(function( $, undefined ) { - -$.extend($.ui, { datepicker: { version: "1.8.21" } }); - -var PROP_NAME = 'datepicker'; -var dpuuid = new Date().getTime(); -var instActive; - -/* Date picker manager. - Use the singleton instance of this class, $.datepicker, to interact with the date picker. - Settings for (groups of) date pickers are maintained in an instance object, - allowing multiple different settings on the same page. */ - -function Datepicker() { - this.debug = false; // Change this to true to start debugging - this._curInst = null; // The current instance in use - this._keyEvent = false; // If the last event was a key event - this._disabledInputs = []; // List of date picker inputs that have been disabled - this._datepickerShowing = false; // True if the popup picker is showing , false if not - this._inDialog = false; // True if showing within a "dialog", false if not - this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division - this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class - this._appendClass = 'ui-datepicker-append'; // The name of the append marker class - this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class - this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class - this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class - this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class - this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class - this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class - this.regional = []; // Available regional settings, indexed by language code - this.regional[''] = { // Default regional settings - closeText: 'Done', // Display text for close link - prevText: 'Prev', // Display text for previous month link - nextText: 'Next', // Display text for next month link - currentText: 'Today', // Display text for current month link - monthNames: ['January','February','March','April','May','June', - 'July','August','September','October','November','December'], // Names of months for drop-down and formatting - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting - dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting - dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday - weekHeader: 'Wk', // Column header for week of the year - dateFormat: 'mm/dd/yy', // See format options on parseDate - firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... - isRTL: false, // True if right-to-left language, false if left-to-right - showMonthAfterYear: false, // True if the year select precedes month, false for month then year - yearSuffix: '' // Additional text to append to the year in the month headers - }; - this._defaults = { // Global defaults for all the date picker instances - showOn: 'focus', // 'focus' for popup on focus, - // 'button' for trigger button, or 'both' for either - showAnim: 'fadeIn', // Name of jQuery animation for popup - showOptions: {}, // Options for enhanced animations - defaultDate: null, // Used when field is blank: actual date, - // +/-number for offset from today, null for today - appendText: '', // Display text following the input box, e.g. showing the format - buttonText: '...', // Text for trigger button - buttonImage: '', // URL for trigger button image - buttonImageOnly: false, // True if the image appears alone, false if it appears on a button - hideIfNoPrevNext: false, // True to hide next/previous month links - // if not applicable, false to just disable them - navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links - gotoCurrent: false, // True if today link goes back to current selection instead - changeMonth: false, // True if month can be selected directly, false if only prev/next - changeYear: false, // True if year can be selected directly, false if only prev/next - yearRange: 'c-10:c+10', // Range of years to display in drop-down, - // either relative to today's year (-nn:+nn), relative to currently displayed year - // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) - showOtherMonths: false, // True to show dates in other months, false to leave blank - selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable - showWeek: false, // True to show week of the year, false to not show it - calculateWeek: this.iso8601Week, // How to calculate the week of the year, - // takes a Date and returns the number of the week for it - shortYearCutoff: '+10', // Short year values < this are in the current century, - // > this are in the previous century, - // string value starting with '+' for current year + value - minDate: null, // The earliest selectable date, or null for no limit - maxDate: null, // The latest selectable date, or null for no limit - duration: 'fast', // Duration of display/closure - beforeShowDay: null, // Function that takes a date and returns an array with - // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '', - // [2] = cell title (optional), e.g. $.datepicker.noWeekends - beforeShow: null, // Function that takes an input field and - // returns a set of custom settings for the date picker - onSelect: null, // Define a callback function when a date is selected - onChangeMonthYear: null, // Define a callback function when the month or year is changed - onClose: null, // Define a callback function when the datepicker is closed - numberOfMonths: 1, // Number of months to show at a time - showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) - stepMonths: 1, // Number of months to step back/forward - stepBigMonths: 12, // Number of months to step back/forward for the big links - altField: '', // Selector for an alternate field to store selected dates into - altFormat: '', // The date format to use for the alternate field - constrainInput: true, // The input is constrained by the current date format - showButtonPanel: false, // True to show button panel, false to not show it - autoSize: false, // True to size the input for the date format, false to leave as is - disabled: false // The initial disabled state - }; - $.extend(this._defaults, this.regional['']); - this.dpDiv = bindHover($('
      ')); -} - -$.extend(Datepicker.prototype, { - /* Class name added to elements to indicate already configured with a date picker. */ - markerClassName: 'hasDatepicker', - - //Keep track of the maximum number of rows displayed (see #7043) - maxRows: 4, - - /* Debug logging (if enabled). */ - log: function () { - if (this.debug) - console.log.apply('', arguments); - }, - - // TODO rename to "widget" when switching to widget factory - _widgetDatepicker: function() { - return this.dpDiv; - }, - - /* Override the default settings for all instances of the date picker. - @param settings object - the new settings to use as defaults (anonymous object) - @return the manager object */ - setDefaults: function(settings) { - extendRemove(this._defaults, settings || {}); - return this; - }, - - /* Attach the date picker to a jQuery selection. - @param target element - the target input field or division or span - @param settings object - the new settings to use for this date picker instance (anonymous) */ - _attachDatepicker: function(target, settings) { - // check for settings on the control itself - in namespace 'date:' - var inlineSettings = null; - for (var attrName in this._defaults) { - var attrValue = target.getAttribute('date:' + attrName); - if (attrValue) { - inlineSettings = inlineSettings || {}; - try { - inlineSettings[attrName] = eval(attrValue); - } catch (err) { - inlineSettings[attrName] = attrValue; - } - } - } - var nodeName = target.nodeName.toLowerCase(); - var inline = (nodeName == 'div' || nodeName == 'span'); - if (!target.id) { - this.uuid += 1; - target.id = 'dp' + this.uuid; - } - var inst = this._newInst($(target), inline); - inst.settings = $.extend({}, settings || {}, inlineSettings || {}); - if (nodeName == 'input') { - this._connectDatepicker(target, inst); - } else if (inline) { - this._inlineDatepicker(target, inst); - } - }, - - /* Create a new instance object. */ - _newInst: function(target, inline) { - var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars - return {id: id, input: target, // associated target - selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection - drawMonth: 0, drawYear: 0, // month being drawn - inline: inline, // is datepicker inline or not - dpDiv: (!inline ? this.dpDiv : // presentation div - bindHover($('
      ')))}; - }, - - /* Attach the date picker to an input field. */ - _connectDatepicker: function(target, inst) { - var input = $(target); - inst.append = $([]); - inst.trigger = $([]); - if (input.hasClass(this.markerClassName)) - return; - this._attachments(input, inst); - input.addClass(this.markerClassName).keydown(this._doKeyDown). - keypress(this._doKeyPress).keyup(this._doKeyUp). - bind("setData.datepicker", function(event, key, value) { - inst.settings[key] = value; - }).bind("getData.datepicker", function(event, key) { - return this._get(inst, key); - }); - this._autoSize(inst); - $.data(target, PROP_NAME, inst); - //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665) - if( inst.settings.disabled ) { - this._disableDatepicker( target ); - } - }, - - /* Make attachments based on settings. */ - _attachments: function(input, inst) { - var appendText = this._get(inst, 'appendText'); - var isRTL = this._get(inst, 'isRTL'); - if (inst.append) - inst.append.remove(); - if (appendText) { - inst.append = $('' + appendText + ''); - input[isRTL ? 'before' : 'after'](inst.append); - } - input.unbind('focus', this._showDatepicker); - if (inst.trigger) - inst.trigger.remove(); - var showOn = this._get(inst, 'showOn'); - if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field - input.focus(this._showDatepicker); - if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked - var buttonText = this._get(inst, 'buttonText'); - var buttonImage = this._get(inst, 'buttonImage'); - inst.trigger = $(this._get(inst, 'buttonImageOnly') ? - $('').addClass(this._triggerClass). - attr({ src: buttonImage, alt: buttonText, title: buttonText }) : - $('').addClass(this._triggerClass). - html(buttonImage == '' ? buttonText : $('').attr( - { src:buttonImage, alt:buttonText, title:buttonText }))); - input[isRTL ? 'before' : 'after'](inst.trigger); - inst.trigger.click(function() { - if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0]) - $.datepicker._hideDatepicker(); - else if ($.datepicker._datepickerShowing && $.datepicker._lastInput != input[0]) { - $.datepicker._hideDatepicker(); - $.datepicker._showDatepicker(input[0]); - } else - $.datepicker._showDatepicker(input[0]); - return false; - }); - } - }, - - /* Apply the maximum length for the date format. */ - _autoSize: function(inst) { - if (this._get(inst, 'autoSize') && !inst.inline) { - var date = new Date(2009, 12 - 1, 20); // Ensure double digits - var dateFormat = this._get(inst, 'dateFormat'); - if (dateFormat.match(/[DM]/)) { - var findMax = function(names) { - var max = 0; - var maxI = 0; - for (var i = 0; i < names.length; i++) { - if (names[i].length > max) { - max = names[i].length; - maxI = i; - } - } - return maxI; - }; - date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? - 'monthNames' : 'monthNamesShort')))); - date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? - 'dayNames' : 'dayNamesShort'))) + 20 - date.getDay()); - } - inst.input.attr('size', this._formatDate(inst, date).length); - } - }, - - /* Attach an inline date picker to a div. */ - _inlineDatepicker: function(target, inst) { - var divSpan = $(target); - if (divSpan.hasClass(this.markerClassName)) - return; - divSpan.addClass(this.markerClassName).append(inst.dpDiv). - bind("setData.datepicker", function(event, key, value){ - inst.settings[key] = value; - }).bind("getData.datepicker", function(event, key){ - return this._get(inst, key); - }); - $.data(target, PROP_NAME, inst); - this._setDate(inst, this._getDefaultDate(inst), true); - this._updateDatepicker(inst); - this._updateAlternate(inst); - //If disabled option is true, disable the datepicker before showing it (see ticket #5665) - if( inst.settings.disabled ) { - this._disableDatepicker( target ); - } - // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements - // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height - inst.dpDiv.css( "display", "block" ); - }, - - /* Pop-up the date picker in a "dialog" box. - @param input element - ignored - @param date string or Date - the initial date to display - @param onSelect function - the function to call when a date is selected - @param settings object - update the dialog date picker instance's settings (anonymous object) - @param pos int[2] - coordinates for the dialog's position within the screen or - event - with x/y coordinates or - leave empty for default (screen centre) - @return the manager object */ - _dialogDatepicker: function(input, date, onSelect, settings, pos) { - var inst = this._dialogInst; // internal instance - if (!inst) { - this.uuid += 1; - var id = 'dp' + this.uuid; - this._dialogInput = $(''); - this._dialogInput.keydown(this._doKeyDown); - $('body').append(this._dialogInput); - inst = this._dialogInst = this._newInst(this._dialogInput, false); - inst.settings = {}; - $.data(this._dialogInput[0], PROP_NAME, inst); - } - extendRemove(inst.settings, settings || {}); - date = (date && date.constructor == Date ? this._formatDate(inst, date) : date); - this._dialogInput.val(date); - - this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); - if (!this._pos) { - var browserWidth = document.documentElement.clientWidth; - var browserHeight = document.documentElement.clientHeight; - var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; - var scrollY = document.documentElement.scrollTop || document.body.scrollTop; - this._pos = // should use actual width/height below - [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; - } - - // move input on screen for focus, but hidden behind dialog - this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px'); - inst.settings.onSelect = onSelect; - this._inDialog = true; - this.dpDiv.addClass(this._dialogClass); - this._showDatepicker(this._dialogInput[0]); - if ($.blockUI) - $.blockUI(this.dpDiv); - $.data(this._dialogInput[0], PROP_NAME, inst); - return this; - }, - - /* Detach a datepicker from its control. - @param target element - the target input field or division or span */ - _destroyDatepicker: function(target) { - var $target = $(target); - var inst = $.data(target, PROP_NAME); - if (!$target.hasClass(this.markerClassName)) { - return; - } - var nodeName = target.nodeName.toLowerCase(); - $.removeData(target, PROP_NAME); - if (nodeName == 'input') { - inst.append.remove(); - inst.trigger.remove(); - $target.removeClass(this.markerClassName). - unbind('focus', this._showDatepicker). - unbind('keydown', this._doKeyDown). - unbind('keypress', this._doKeyPress). - unbind('keyup', this._doKeyUp); - } else if (nodeName == 'div' || nodeName == 'span') - $target.removeClass(this.markerClassName).empty(); - }, - - /* Enable the date picker to a jQuery selection. - @param target element - the target input field or division or span */ - _enableDatepicker: function(target) { - var $target = $(target); - var inst = $.data(target, PROP_NAME); - if (!$target.hasClass(this.markerClassName)) { - return; - } - var nodeName = target.nodeName.toLowerCase(); - if (nodeName == 'input') { - target.disabled = false; - inst.trigger.filter('button'). - each(function() { this.disabled = false; }).end(). - filter('img').css({opacity: '1.0', cursor: ''}); - } - else if (nodeName == 'div' || nodeName == 'span') { - var inline = $target.children('.' + this._inlineClass); - inline.children().removeClass('ui-state-disabled'); - inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). - removeAttr("disabled"); - } - this._disabledInputs = $.map(this._disabledInputs, - function(value) { return (value == target ? null : value); }); // delete entry - }, - - /* Disable the date picker to a jQuery selection. - @param target element - the target input field or division or span */ - _disableDatepicker: function(target) { - var $target = $(target); - var inst = $.data(target, PROP_NAME); - if (!$target.hasClass(this.markerClassName)) { - return; - } - var nodeName = target.nodeName.toLowerCase(); - if (nodeName == 'input') { - target.disabled = true; - inst.trigger.filter('button'). - each(function() { this.disabled = true; }).end(). - filter('img').css({opacity: '0.5', cursor: 'default'}); - } - else if (nodeName == 'div' || nodeName == 'span') { - var inline = $target.children('.' + this._inlineClass); - inline.children().addClass('ui-state-disabled'); - inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). - attr("disabled", "disabled"); - } - this._disabledInputs = $.map(this._disabledInputs, - function(value) { return (value == target ? null : value); }); // delete entry - this._disabledInputs[this._disabledInputs.length] = target; - }, - - /* Is the first field in a jQuery collection disabled as a datepicker? - @param target element - the target input field or division or span - @return boolean - true if disabled, false if enabled */ - _isDisabledDatepicker: function(target) { - if (!target) { - return false; - } - for (var i = 0; i < this._disabledInputs.length; i++) { - if (this._disabledInputs[i] == target) - return true; - } - return false; - }, - - /* Retrieve the instance data for the target control. - @param target element - the target input field or division or span - @return object - the associated instance data - @throws error if a jQuery problem getting data */ - _getInst: function(target) { - try { - return $.data(target, PROP_NAME); - } - catch (err) { - throw 'Missing instance data for this datepicker'; - } - }, - - /* Update or retrieve the settings for a date picker attached to an input field or division. - @param target element - the target input field or division or span - @param name object - the new settings to update or - string - the name of the setting to change or retrieve, - when retrieving also 'all' for all instance settings or - 'defaults' for all global defaults - @param value any - the new value for the setting - (omit if above is an object or to retrieve a value) */ - _optionDatepicker: function(target, name, value) { - var inst = this._getInst(target); - if (arguments.length == 2 && typeof name == 'string') { - return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) : - (inst ? (name == 'all' ? $.extend({}, inst.settings) : - this._get(inst, name)) : null)); - } - var settings = name || {}; - if (typeof name == 'string') { - settings = {}; - settings[name] = value; - } - if (inst) { - if (this._curInst == inst) { - this._hideDatepicker(); - } - var date = this._getDateDatepicker(target, true); - var minDate = this._getMinMaxDate(inst, 'min'); - var maxDate = this._getMinMaxDate(inst, 'max'); - extendRemove(inst.settings, settings); - // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided - if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined) - inst.settings.minDate = this._formatDate(inst, minDate); - if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined) - inst.settings.maxDate = this._formatDate(inst, maxDate); - this._attachments($(target), inst); - this._autoSize(inst); - this._setDate(inst, date); - this._updateAlternate(inst); - this._updateDatepicker(inst); - } - }, - - // change method deprecated - _changeDatepicker: function(target, name, value) { - this._optionDatepicker(target, name, value); - }, - - /* Redraw the date picker attached to an input field or division. - @param target element - the target input field or division or span */ - _refreshDatepicker: function(target) { - var inst = this._getInst(target); - if (inst) { - this._updateDatepicker(inst); - } - }, - - /* Set the dates for a jQuery selection. - @param target element - the target input field or division or span - @param date Date - the new date */ - _setDateDatepicker: function(target, date) { - var inst = this._getInst(target); - if (inst) { - this._setDate(inst, date); - this._updateDatepicker(inst); - this._updateAlternate(inst); - } - }, - - /* Get the date(s) for the first entry in a jQuery selection. - @param target element - the target input field or division or span - @param noDefault boolean - true if no default date is to be used - @return Date - the current date */ - _getDateDatepicker: function(target, noDefault) { - var inst = this._getInst(target); - if (inst && !inst.inline) - this._setDateFromField(inst, noDefault); - return (inst ? this._getDate(inst) : null); - }, - - /* Handle keystrokes. */ - _doKeyDown: function(event) { - var inst = $.datepicker._getInst(event.target); - var handled = true; - var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); - inst._keyEvent = true; - if ($.datepicker._datepickerShowing) - switch (event.keyCode) { - case 9: $.datepicker._hideDatepicker(); - handled = false; - break; // hide on tab out - case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + - $.datepicker._currentClass + ')', inst.dpDiv); - if (sel[0]) - $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); - var onSelect = $.datepicker._get(inst, 'onSelect'); - if (onSelect) { - var dateStr = $.datepicker._formatDate(inst); - - // trigger custom callback - onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); - } - else - $.datepicker._hideDatepicker(); - return false; // don't submit the form - break; // select the value on enter - case 27: $.datepicker._hideDatepicker(); - break; // hide on escape - case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? - -$.datepicker._get(inst, 'stepBigMonths') : - -$.datepicker._get(inst, 'stepMonths')), 'M'); - break; // previous month/year on page up/+ ctrl - case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? - +$.datepicker._get(inst, 'stepBigMonths') : - +$.datepicker._get(inst, 'stepMonths')), 'M'); - break; // next month/year on page down/+ ctrl - case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target); - handled = event.ctrlKey || event.metaKey; - break; // clear on ctrl or command +end - case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target); - handled = event.ctrlKey || event.metaKey; - break; // current on ctrl or command +home - case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); - handled = event.ctrlKey || event.metaKey; - // -1 day on ctrl or command +left - if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? - -$.datepicker._get(inst, 'stepBigMonths') : - -$.datepicker._get(inst, 'stepMonths')), 'M'); - // next month/year on alt +left on Mac - break; - case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D'); - handled = event.ctrlKey || event.metaKey; - break; // -1 week on ctrl or command +up - case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); - handled = event.ctrlKey || event.metaKey; - // +1 day on ctrl or command +right - if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? - +$.datepicker._get(inst, 'stepBigMonths') : - +$.datepicker._get(inst, 'stepMonths')), 'M'); - // next month/year on alt +right - break; - case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D'); - handled = event.ctrlKey || event.metaKey; - break; // +1 week on ctrl or command +down - default: handled = false; - } - else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home - $.datepicker._showDatepicker(this); - else { - handled = false; - } - if (handled) { - event.preventDefault(); - event.stopPropagation(); - } - }, - - /* Filter entered characters - based on date format. */ - _doKeyPress: function(event) { - var inst = $.datepicker._getInst(event.target); - if ($.datepicker._get(inst, 'constrainInput')) { - var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')); - var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode); - return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1); - } - }, - - /* Synchronise manual entry and field/alternate field. */ - _doKeyUp: function(event) { - var inst = $.datepicker._getInst(event.target); - if (inst.input.val() != inst.lastVal) { - try { - var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), - (inst.input ? inst.input.val() : null), - $.datepicker._getFormatConfig(inst)); - if (date) { // only if valid - $.datepicker._setDateFromField(inst); - $.datepicker._updateAlternate(inst); - $.datepicker._updateDatepicker(inst); - } - } - catch (err) { - $.datepicker.log(err); - } - } - return true; - }, - - /* Pop-up the date picker for a given input field. - If false returned from beforeShow event handler do not show. - @param input element - the input field attached to the date picker or - event - if triggered by focus */ - _showDatepicker: function(input) { - input = input.target || input; - if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger - input = $('input', input.parentNode)[0]; - if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here - return; - var inst = $.datepicker._getInst(input); - if ($.datepicker._curInst && $.datepicker._curInst != inst) { - $.datepicker._curInst.dpDiv.stop(true, true); - if ( inst && $.datepicker._datepickerShowing ) { - $.datepicker._hideDatepicker( $.datepicker._curInst.input[0] ); - } - } - var beforeShow = $.datepicker._get(inst, 'beforeShow'); - var beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {}; - if(beforeShowSettings === false){ - //false - return; - } - extendRemove(inst.settings, beforeShowSettings); - inst.lastVal = null; - $.datepicker._lastInput = input; - $.datepicker._setDateFromField(inst); - if ($.datepicker._inDialog) // hide cursor - input.value = ''; - if (!$.datepicker._pos) { // position below input - $.datepicker._pos = $.datepicker._findPos(input); - $.datepicker._pos[1] += input.offsetHeight; // add the height - } - var isFixed = false; - $(input).parents().each(function() { - isFixed |= $(this).css('position') == 'fixed'; - return !isFixed; - }); - if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled - $.datepicker._pos[0] -= document.documentElement.scrollLeft; - $.datepicker._pos[1] -= document.documentElement.scrollTop; - } - var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; - $.datepicker._pos = null; - //to avoid flashes on Firefox - inst.dpDiv.empty(); - // determine sizing offscreen - inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'}); - $.datepicker._updateDatepicker(inst); - // fix width for dynamic number of date pickers - // and adjust position before showing - offset = $.datepicker._checkOffset(inst, offset, isFixed); - inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ? - 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', - left: offset.left + 'px', top: offset.top + 'px'}); - if (!inst.inline) { - var showAnim = $.datepicker._get(inst, 'showAnim'); - var duration = $.datepicker._get(inst, 'duration'); - var postProcess = function() { - var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only - if( !! cover.length ){ - var borders = $.datepicker._getBorders(inst.dpDiv); - cover.css({left: -borders[0], top: -borders[1], - width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}); - } - }; - inst.dpDiv.zIndex($(input).zIndex()+1); - $.datepicker._datepickerShowing = true; - if ($.effects && $.effects[showAnim]) - inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); - else - inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess); - if (!showAnim || !duration) - postProcess(); - if (inst.input.is(':visible') && !inst.input.is(':disabled')) - inst.input.focus(); - $.datepicker._curInst = inst; - } - }, - - /* Generate the date picker content. */ - _updateDatepicker: function(inst) { - var self = this; - self.maxRows = 4; //Reset the max number of rows being displayed (see #7043) - var borders = $.datepicker._getBorders(inst.dpDiv); - instActive = inst; // for delegate hover events - inst.dpDiv.empty().append(this._generateHTML(inst)); - var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only - if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6 - cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}) - } - inst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover(); - var numMonths = this._getNumberOfMonths(inst); - var cols = numMonths[1]; - var width = 17; - inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width(''); - if (cols > 1) - inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em'); - inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + - 'Class']('ui-datepicker-multi'); - inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + - 'Class']('ui-datepicker-rtl'); - if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input && - // #6694 - don't focus the input if it's already focused - // this breaks the change event in IE - inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement) - inst.input.focus(); - // deffered render of the years select (to avoid flashes on Firefox) - if( inst.yearshtml ){ - var origyearshtml = inst.yearshtml; - setTimeout(function(){ - //assure that inst.yearshtml didn't change. - if( origyearshtml === inst.yearshtml && inst.yearshtml ){ - inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml); - } - origyearshtml = inst.yearshtml = null; - }, 0); - } - }, - - /* Retrieve the size of left and top borders for an element. - @param elem (jQuery object) the element of interest - @return (number[2]) the left and top borders */ - _getBorders: function(elem) { - var convert = function(value) { - return {thin: 1, medium: 2, thick: 3}[value] || value; - }; - return [parseFloat(convert(elem.css('border-left-width'))), - parseFloat(convert(elem.css('border-top-width')))]; - }, - - /* Check positioning to remain on screen. */ - _checkOffset: function(inst, offset, isFixed) { - var dpWidth = inst.dpDiv.outerWidth(); - var dpHeight = inst.dpDiv.outerHeight(); - var inputWidth = inst.input ? inst.input.outerWidth() : 0; - var inputHeight = inst.input ? inst.input.outerHeight() : 0; - var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft(); - var viewHeight = document.documentElement.clientHeight + $(document).scrollTop(); - - offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0); - offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; - offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; - - // now check if datepicker is showing outside window viewport - move to a better place if so. - offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? - Math.abs(offset.left + dpWidth - viewWidth) : 0); - offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? - Math.abs(dpHeight + inputHeight) : 0); - - return offset; - }, - - /* Find an object's position on the screen. */ - _findPos: function(obj) { - var inst = this._getInst(obj); - var isRTL = this._get(inst, 'isRTL'); - while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) { - obj = obj[isRTL ? 'previousSibling' : 'nextSibling']; - } - var position = $(obj).offset(); - return [position.left, position.top]; - }, - - /* Hide the date picker from view. - @param input element - the input field attached to the date picker */ - _hideDatepicker: function(input) { - var inst = this._curInst; - if (!inst || (input && inst != $.data(input, PROP_NAME))) - return; - if (this._datepickerShowing) { - var showAnim = this._get(inst, 'showAnim'); - var duration = this._get(inst, 'duration'); - var postProcess = function() { - $.datepicker._tidyDialog(inst); - }; - if ($.effects && $.effects[showAnim]) - inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); - else - inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' : - (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess); - if (!showAnim) - postProcess(); - this._datepickerShowing = false; - var onClose = this._get(inst, 'onClose'); - if (onClose) - onClose.apply((inst.input ? inst.input[0] : null), - [(inst.input ? inst.input.val() : ''), inst]); - this._lastInput = null; - if (this._inDialog) { - this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); - if ($.blockUI) { - $.unblockUI(); - $('body').append(this.dpDiv); - } - } - this._inDialog = false; - } - }, - - /* Tidy up after a dialog display. */ - _tidyDialog: function(inst) { - inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar'); - }, - - /* Close date picker if clicked elsewhere. */ - _checkExternalClick: function(event) { - if (!$.datepicker._curInst) - return; - - var $target = $(event.target), - inst = $.datepicker._getInst($target[0]); - - if ( ( ( $target[0].id != $.datepicker._mainDivId && - $target.parents('#' + $.datepicker._mainDivId).length == 0 && - !$target.hasClass($.datepicker.markerClassName) && - !$target.closest("." + $.datepicker._triggerClass).length && - $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) || - ( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst != inst ) ) - $.datepicker._hideDatepicker(); - }, - - /* Adjust one of the date sub-fields. */ - _adjustDate: function(id, offset, period) { - var target = $(id); - var inst = this._getInst(target[0]); - if (this._isDisabledDatepicker(target[0])) { - return; - } - this._adjustInstDate(inst, offset + - (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning - period); - this._updateDatepicker(inst); - }, - - /* Action for current link. */ - _gotoToday: function(id) { - var target = $(id); - var inst = this._getInst(target[0]); - if (this._get(inst, 'gotoCurrent') && inst.currentDay) { - inst.selectedDay = inst.currentDay; - inst.drawMonth = inst.selectedMonth = inst.currentMonth; - inst.drawYear = inst.selectedYear = inst.currentYear; - } - else { - var date = new Date(); - inst.selectedDay = date.getDate(); - inst.drawMonth = inst.selectedMonth = date.getMonth(); - inst.drawYear = inst.selectedYear = date.getFullYear(); - } - this._notifyChange(inst); - this._adjustDate(target); - }, - - /* Action for selecting a new month/year. */ - _selectMonthYear: function(id, select, period) { - var target = $(id); - var inst = this._getInst(target[0]); - inst['selected' + (period == 'M' ? 'Month' : 'Year')] = - inst['draw' + (period == 'M' ? 'Month' : 'Year')] = - parseInt(select.options[select.selectedIndex].value,10); - this._notifyChange(inst); - this._adjustDate(target); - }, - - /* Action for selecting a day. */ - _selectDay: function(id, month, year, td) { - var target = $(id); - if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { - return; - } - var inst = this._getInst(target[0]); - inst.selectedDay = inst.currentDay = $('a', td).html(); - inst.selectedMonth = inst.currentMonth = month; - inst.selectedYear = inst.currentYear = year; - this._selectDate(id, this._formatDate(inst, - inst.currentDay, inst.currentMonth, inst.currentYear)); - }, - - /* Erase the input field and hide the date picker. */ - _clearDate: function(id) { - var target = $(id); - var inst = this._getInst(target[0]); - this._selectDate(target, ''); - }, - - /* Update the input field with the selected date. */ - _selectDate: function(id, dateStr) { - var target = $(id); - var inst = this._getInst(target[0]); - dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); - if (inst.input) - inst.input.val(dateStr); - this._updateAlternate(inst); - var onSelect = this._get(inst, 'onSelect'); - if (onSelect) - onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback - else if (inst.input) - inst.input.trigger('change'); // fire the change event - if (inst.inline) - this._updateDatepicker(inst); - else { - this._hideDatepicker(); - this._lastInput = inst.input[0]; - if (typeof(inst.input[0]) != 'object') - inst.input.focus(); // restore focus - this._lastInput = null; - } - }, - - /* Update any alternate field to synchronise with the main field. */ - _updateAlternate: function(inst) { - var altField = this._get(inst, 'altField'); - if (altField) { // update alternate field too - var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat'); - var date = this._getDate(inst); - var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); - $(altField).each(function() { $(this).val(dateStr); }); - } - }, - - /* Set as beforeShowDay function to prevent selection of weekends. - @param date Date - the date to customise - @return [boolean, string] - is this date selectable?, what is its CSS class? */ - noWeekends: function(date) { - var day = date.getDay(); - return [(day > 0 && day < 6), '']; - }, - - /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. - @param date Date - the date to get the week for - @return number - the number of the week within the year that contains this date */ - iso8601Week: function(date) { - var checkDate = new Date(date.getTime()); - // Find Thursday of this week starting on Monday - checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); - var time = checkDate.getTime(); - checkDate.setMonth(0); // Compare with Jan 1 - checkDate.setDate(1); - return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; - }, - - /* Parse a string value into a date object. - See formatDate below for the possible formats. - - @param format string - the expected format of the date - @param value string - the date in the above format - @param settings Object - attributes include: - shortYearCutoff number - the cutoff year for determining the century (optional) - dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) - dayNames string[7] - names of the days from Sunday (optional) - monthNamesShort string[12] - abbreviated names of the months (optional) - monthNames string[12] - names of the months (optional) - @return Date - the extracted date value or null if value is blank */ - parseDate: function (format, value, settings) { - if (format == null || value == null) - throw 'Invalid arguments'; - value = (typeof value == 'object' ? value.toString() : value + ''); - if (value == '') - return null; - var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; - shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : - new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); - var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; - var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; - var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; - var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; - var year = -1; - var month = -1; - var day = -1; - var doy = -1; - var literal = false; - // Check whether a format character is doubled - var lookAhead = function(match) { - var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); - if (matches) - iFormat++; - return matches; - }; - // Extract a number from the string value - var getNumber = function(match) { - var isDoubled = lookAhead(match); - var size = (match == '@' ? 14 : (match == '!' ? 20 : - (match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2)))); - var digits = new RegExp('^\\d{1,' + size + '}'); - var num = value.substring(iValue).match(digits); - if (!num) - throw 'Missing number at position ' + iValue; - iValue += num[0].length; - return parseInt(num[0], 10); - }; - // Extract a name from the string value and convert to an index - var getName = function(match, shortNames, longNames) { - var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) { - return [ [k, v] ]; - }).sort(function (a, b) { - return -(a[1].length - b[1].length); - }); - var index = -1; - $.each(names, function (i, pair) { - var name = pair[1]; - if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) { - index = pair[0]; - iValue += name.length; - return false; - } - }); - if (index != -1) - return index + 1; - else - throw 'Unknown name at position ' + iValue; - }; - // Confirm that a literal character matches the string value - var checkLiteral = function() { - if (value.charAt(iValue) != format.charAt(iFormat)) - throw 'Unexpected literal at position ' + iValue; - iValue++; - }; - var iValue = 0; - for (var iFormat = 0; iFormat < format.length; iFormat++) { - if (literal) - if (format.charAt(iFormat) == "'" && !lookAhead("'")) - literal = false; - else - checkLiteral(); - else - switch (format.charAt(iFormat)) { - case 'd': - day = getNumber('d'); - break; - case 'D': - getName('D', dayNamesShort, dayNames); - break; - case 'o': - doy = getNumber('o'); - break; - case 'm': - month = getNumber('m'); - break; - case 'M': - month = getName('M', monthNamesShort, monthNames); - break; - case 'y': - year = getNumber('y'); - break; - case '@': - var date = new Date(getNumber('@')); - year = date.getFullYear(); - month = date.getMonth() + 1; - day = date.getDate(); - break; - case '!': - var date = new Date((getNumber('!') - this._ticksTo1970) / 10000); - year = date.getFullYear(); - month = date.getMonth() + 1; - day = date.getDate(); - break; - case "'": - if (lookAhead("'")) - checkLiteral(); - else - literal = true; - break; - default: - checkLiteral(); - } - } - if (iValue < value.length){ - throw "Extra/unparsed characters found in date: " + value.substring(iValue); - } - if (year == -1) - year = new Date().getFullYear(); - else if (year < 100) - year += new Date().getFullYear() - new Date().getFullYear() % 100 + - (year <= shortYearCutoff ? 0 : -100); - if (doy > -1) { - month = 1; - day = doy; - do { - var dim = this._getDaysInMonth(year, month - 1); - if (day <= dim) - break; - month++; - day -= dim; - } while (true); - } - var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); - if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) - throw 'Invalid date'; // E.g. 31/02/00 - return date; - }, - - /* Standard date formats. */ - ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601) - COOKIE: 'D, dd M yy', - ISO_8601: 'yy-mm-dd', - RFC_822: 'D, d M y', - RFC_850: 'DD, dd-M-y', - RFC_1036: 'D, d M y', - RFC_1123: 'D, d M yy', - RFC_2822: 'D, d M yy', - RSS: 'D, d M y', // RFC 822 - TICKS: '!', - TIMESTAMP: '@', - W3C: 'yy-mm-dd', // ISO 8601 - - _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + - Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), - - /* Format a date object into a string value. - The format can be combinations of the following: - d - day of month (no leading zero) - dd - day of month (two digit) - o - day of year (no leading zeros) - oo - day of year (three digit) - D - day name short - DD - day name long - m - month of year (no leading zero) - mm - month of year (two digit) - M - month name short - MM - month name long - y - year (two digit) - yy - year (four digit) - @ - Unix timestamp (ms since 01/01/1970) - ! - Windows ticks (100ns since 01/01/0001) - '...' - literal text - '' - single quote - - @param format string - the desired format of the date - @param date Date - the date value to format - @param settings Object - attributes include: - dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) - dayNames string[7] - names of the days from Sunday (optional) - monthNamesShort string[12] - abbreviated names of the months (optional) - monthNames string[12] - names of the months (optional) - @return string - the date in the above format */ - formatDate: function (format, date, settings) { - if (!date) - return ''; - var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; - var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; - var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; - var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; - // Check whether a format character is doubled - var lookAhead = function(match) { - var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); - if (matches) - iFormat++; - return matches; - }; - // Format a number, with leading zero if necessary - var formatNumber = function(match, value, len) { - var num = '' + value; - if (lookAhead(match)) - while (num.length < len) - num = '0' + num; - return num; - }; - // Format a name, short or long as requested - var formatName = function(match, value, shortNames, longNames) { - return (lookAhead(match) ? longNames[value] : shortNames[value]); - }; - var output = ''; - var literal = false; - if (date) - for (var iFormat = 0; iFormat < format.length; iFormat++) { - if (literal) - if (format.charAt(iFormat) == "'" && !lookAhead("'")) - literal = false; - else - output += format.charAt(iFormat); - else - switch (format.charAt(iFormat)) { - case 'd': - output += formatNumber('d', date.getDate(), 2); - break; - case 'D': - output += formatName('D', date.getDay(), dayNamesShort, dayNames); - break; - case 'o': - output += formatNumber('o', - Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3); - break; - case 'm': - output += formatNumber('m', date.getMonth() + 1, 2); - break; - case 'M': - output += formatName('M', date.getMonth(), monthNamesShort, monthNames); - break; - case 'y': - output += (lookAhead('y') ? date.getFullYear() : - (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); - break; - case '@': - output += date.getTime(); - break; - case '!': - output += date.getTime() * 10000 + this._ticksTo1970; - break; - case "'": - if (lookAhead("'")) - output += "'"; - else - literal = true; - break; - default: - output += format.charAt(iFormat); - } - } - return output; - }, - - /* Extract all possible characters from the date format. */ - _possibleChars: function (format) { - var chars = ''; - var literal = false; - // Check whether a format character is doubled - var lookAhead = function(match) { - var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); - if (matches) - iFormat++; - return matches; - }; - for (var iFormat = 0; iFormat < format.length; iFormat++) - if (literal) - if (format.charAt(iFormat) == "'" && !lookAhead("'")) - literal = false; - else - chars += format.charAt(iFormat); - else - switch (format.charAt(iFormat)) { - case 'd': case 'm': case 'y': case '@': - chars += '0123456789'; - break; - case 'D': case 'M': - return null; // Accept anything - case "'": - if (lookAhead("'")) - chars += "'"; - else - literal = true; - break; - default: - chars += format.charAt(iFormat); - } - return chars; - }, - - /* Get a setting value, defaulting if necessary. */ - _get: function(inst, name) { - return inst.settings[name] !== undefined ? - inst.settings[name] : this._defaults[name]; - }, - - /* Parse existing date and initialise date picker. */ - _setDateFromField: function(inst, noDefault) { - if (inst.input.val() == inst.lastVal) { - return; - } - var dateFormat = this._get(inst, 'dateFormat'); - var dates = inst.lastVal = inst.input ? inst.input.val() : null; - var date, defaultDate; - date = defaultDate = this._getDefaultDate(inst); - var settings = this._getFormatConfig(inst); - try { - date = this.parseDate(dateFormat, dates, settings) || defaultDate; - } catch (event) { - this.log(event); - dates = (noDefault ? '' : dates); - } - inst.selectedDay = date.getDate(); - inst.drawMonth = inst.selectedMonth = date.getMonth(); - inst.drawYear = inst.selectedYear = date.getFullYear(); - inst.currentDay = (dates ? date.getDate() : 0); - inst.currentMonth = (dates ? date.getMonth() : 0); - inst.currentYear = (dates ? date.getFullYear() : 0); - this._adjustInstDate(inst); - }, - - /* Retrieve the default date shown on opening. */ - _getDefaultDate: function(inst) { - return this._restrictMinMax(inst, - this._determineDate(inst, this._get(inst, 'defaultDate'), new Date())); - }, - - /* A date may be specified as an exact value or a relative one. */ - _determineDate: function(inst, date, defaultDate) { - var offsetNumeric = function(offset) { - var date = new Date(); - date.setDate(date.getDate() + offset); - return date; - }; - var offsetString = function(offset) { - try { - return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), - offset, $.datepicker._getFormatConfig(inst)); - } - catch (e) { - // Ignore - } - var date = (offset.toLowerCase().match(/^c/) ? - $.datepicker._getDate(inst) : null) || new Date(); - var year = date.getFullYear(); - var month = date.getMonth(); - var day = date.getDate(); - var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; - var matches = pattern.exec(offset); - while (matches) { - switch (matches[2] || 'd') { - case 'd' : case 'D' : - day += parseInt(matches[1],10); break; - case 'w' : case 'W' : - day += parseInt(matches[1],10) * 7; break; - case 'm' : case 'M' : - month += parseInt(matches[1],10); - day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); - break; - case 'y': case 'Y' : - year += parseInt(matches[1],10); - day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); - break; - } - matches = pattern.exec(offset); - } - return new Date(year, month, day); - }; - var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) : - (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime())))); - newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate); - if (newDate) { - newDate.setHours(0); - newDate.setMinutes(0); - newDate.setSeconds(0); - newDate.setMilliseconds(0); - } - return this._daylightSavingAdjust(newDate); - }, - - /* Handle switch to/from daylight saving. - Hours may be non-zero on daylight saving cut-over: - > 12 when midnight changeover, but then cannot generate - midnight datetime, so jump to 1AM, otherwise reset. - @param date (Date) the date to check - @return (Date) the corrected date */ - _daylightSavingAdjust: function(date) { - if (!date) return null; - date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); - return date; - }, - - /* Set the date(s) directly. */ - _setDate: function(inst, date, noChange) { - var clear = !date; - var origMonth = inst.selectedMonth; - var origYear = inst.selectedYear; - var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); - inst.selectedDay = inst.currentDay = newDate.getDate(); - inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); - inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); - if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange) - this._notifyChange(inst); - this._adjustInstDate(inst); - if (inst.input) { - inst.input.val(clear ? '' : this._formatDate(inst)); - } - }, - - /* Retrieve the date(s) directly. */ - _getDate: function(inst) { - var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : - this._daylightSavingAdjust(new Date( - inst.currentYear, inst.currentMonth, inst.currentDay))); - return startDate; - }, - - /* Generate the HTML for the current state of the date picker. */ - _generateHTML: function(inst) { - var today = new Date(); - today = this._daylightSavingAdjust( - new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time - var isRTL = this._get(inst, 'isRTL'); - var showButtonPanel = this._get(inst, 'showButtonPanel'); - var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext'); - var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat'); - var numMonths = this._getNumberOfMonths(inst); - var showCurrentAtPos = this._get(inst, 'showCurrentAtPos'); - var stepMonths = this._get(inst, 'stepMonths'); - var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); - var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : - new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); - var minDate = this._getMinMaxDate(inst, 'min'); - var maxDate = this._getMinMaxDate(inst, 'max'); - var drawMonth = inst.drawMonth - showCurrentAtPos; - var drawYear = inst.drawYear; - if (drawMonth < 0) { - drawMonth += 12; - drawYear--; - } - if (maxDate) { - var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), - maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); - maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); - while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { - drawMonth--; - if (drawMonth < 0) { - drawMonth = 11; - drawYear--; - } - } - } - inst.drawMonth = drawMonth; - inst.drawYear = drawYear; - var prevText = this._get(inst, 'prevText'); - prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, - this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), - this._getFormatConfig(inst))); - var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? - '' + prevText + '' : - (hideIfNoPrevNext ? '' : '' + prevText + '')); - var nextText = this._get(inst, 'nextText'); - nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, - this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), - this._getFormatConfig(inst))); - var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? - '' + nextText + '' : - (hideIfNoPrevNext ? '' : '' + nextText + '')); - var currentText = this._get(inst, 'currentText'); - var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); - currentText = (!navigationAsDateFormat ? currentText : - this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); - var controls = (!inst.inline ? '' : ''); - var buttonPanel = (showButtonPanel) ? '
      ' + (isRTL ? controls : '') + - (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '
      ' : ''; - var firstDay = parseInt(this._get(inst, 'firstDay'),10); - firstDay = (isNaN(firstDay) ? 0 : firstDay); - var showWeek = this._get(inst, 'showWeek'); - var dayNames = this._get(inst, 'dayNames'); - var dayNamesShort = this._get(inst, 'dayNamesShort'); - var dayNamesMin = this._get(inst, 'dayNamesMin'); - var monthNames = this._get(inst, 'monthNames'); - var monthNamesShort = this._get(inst, 'monthNamesShort'); - var beforeShowDay = this._get(inst, 'beforeShowDay'); - var showOtherMonths = this._get(inst, 'showOtherMonths'); - var selectOtherMonths = this._get(inst, 'selectOtherMonths'); - var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week; - var defaultDate = this._getDefaultDate(inst); - var html = ''; - for (var row = 0; row < numMonths[0]; row++) { - var group = ''; - this.maxRows = 4; - for (var col = 0; col < numMonths[1]; col++) { - var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); - var cornerClass = ' ui-corner-all'; - var calender = ''; - if (isMultiMonth) { - calender += '
      '; - } - calender += '
      ' + - (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') + - (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') + - this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, - row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers - '
      ' + - ''; - var thead = (showWeek ? '' : ''); - for (var dow = 0; dow < 7; dow++) { // days of the week - var day = (dow + firstDay) % 7; - thead += '= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + - '' + dayNamesMin[day] + ''; - } - calender += thead + ''; - var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); - if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) - inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); - var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; - var curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate - var numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043) - this.maxRows = numRows; - var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); - for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows - calender += ''; - var tbody = (!showWeek ? '' : ''); - for (var dow = 0; dow < 7; dow++) { // create date picker days - var daySettings = (beforeShowDay ? - beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); - var otherMonth = (printDate.getMonth() != drawMonth); - var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || - (minDate && printDate < minDate) || (maxDate && printDate > maxDate); - tbody += ''; // display selectable date - printDate.setDate(printDate.getDate() + 1); - printDate = this._daylightSavingAdjust(printDate); - } - calender += tbody + ''; - } - drawMonth++; - if (drawMonth > 11) { - drawMonth = 0; - drawYear++; - } - calender += '
      ' + this._get(inst, 'weekHeader') + '
      ' + - this._get(inst, 'calculateWeek')(printDate) + '' + // actions - (otherMonth && !showOtherMonths ? ' ' : // display for other months - (unselectable ? '' + printDate.getDate() + '' : '' + printDate.getDate() + '')) + '
      ' + (isMultiMonth ? '
      ' + - ((numMonths[0] > 0 && col == numMonths[1]-1) ? '
      ' : '') : ''); - group += calender; - } - html += group; - } - html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ? - '' : ''); - inst._keyEvent = false; - return html; - }, - - /* Generate the month and year header. */ - _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, - secondary, monthNames, monthNamesShort) { - var changeMonth = this._get(inst, 'changeMonth'); - var changeYear = this._get(inst, 'changeYear'); - var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); - var html = '
      '; - var monthHtml = ''; - // month selection - if (secondary || !changeMonth) - monthHtml += '' + monthNames[drawMonth] + ''; - else { - var inMinYear = (minDate && minDate.getFullYear() == drawYear); - var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); - monthHtml += ''; - } - if (!showMonthAfterYear) - html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); - // year selection - if ( !inst.yearshtml ) { - inst.yearshtml = ''; - if (secondary || !changeYear) - html += '' + drawYear + ''; - else { - // determine range of years to display - var years = this._get(inst, 'yearRange').split(':'); - var thisYear = new Date().getFullYear(); - var determineYear = function(value) { - var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : - (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : - parseInt(value, 10))); - return (isNaN(year) ? thisYear : year); - }; - var year = determineYear(years[0]); - var endYear = Math.max(year, determineYear(years[1] || '')); - year = (minDate ? Math.max(year, minDate.getFullYear()) : year); - endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); - inst.yearshtml += ''; - - html += inst.yearshtml; - inst.yearshtml = null; - } - } - html += this._get(inst, 'yearSuffix'); - if (showMonthAfterYear) - html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; - html += '
      '; // Close datepicker_header - return html; - }, - - /* Adjust one of the date sub-fields. */ - _adjustInstDate: function(inst, offset, period) { - var year = inst.drawYear + (period == 'Y' ? offset : 0); - var month = inst.drawMonth + (period == 'M' ? offset : 0); - var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + - (period == 'D' ? offset : 0); - var date = this._restrictMinMax(inst, - this._daylightSavingAdjust(new Date(year, month, day))); - inst.selectedDay = date.getDate(); - inst.drawMonth = inst.selectedMonth = date.getMonth(); - inst.drawYear = inst.selectedYear = date.getFullYear(); - if (period == 'M' || period == 'Y') - this._notifyChange(inst); - }, - - /* Ensure a date is within any min/max bounds. */ - _restrictMinMax: function(inst, date) { - var minDate = this._getMinMaxDate(inst, 'min'); - var maxDate = this._getMinMaxDate(inst, 'max'); - var newDate = (minDate && date < minDate ? minDate : date); - newDate = (maxDate && newDate > maxDate ? maxDate : newDate); - return newDate; - }, - - /* Notify change of month/year. */ - _notifyChange: function(inst) { - var onChange = this._get(inst, 'onChangeMonthYear'); - if (onChange) - onChange.apply((inst.input ? inst.input[0] : null), - [inst.selectedYear, inst.selectedMonth + 1, inst]); - }, - - /* Determine the number of months to show. */ - _getNumberOfMonths: function(inst) { - var numMonths = this._get(inst, 'numberOfMonths'); - return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); - }, - - /* Determine the current maximum date - ensure no time components are set. */ - _getMinMaxDate: function(inst, minMax) { - return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); - }, - - /* Find the number of days in a given month. */ - _getDaysInMonth: function(year, month) { - return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); - }, - - /* Find the day of the week of the first of a month. */ - _getFirstDayOfMonth: function(year, month) { - return new Date(year, month, 1).getDay(); - }, - - /* Determines if we should allow a "next/prev" month display change. */ - _canAdjustMonth: function(inst, offset, curYear, curMonth) { - var numMonths = this._getNumberOfMonths(inst); - var date = this._daylightSavingAdjust(new Date(curYear, - curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); - if (offset < 0) - date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); - return this._isInRange(inst, date); - }, - - /* Is the given date in the accepted range? */ - _isInRange: function(inst, date) { - var minDate = this._getMinMaxDate(inst, 'min'); - var maxDate = this._getMinMaxDate(inst, 'max'); - return ((!minDate || date.getTime() >= minDate.getTime()) && - (!maxDate || date.getTime() <= maxDate.getTime())); - }, - - /* Provide the configuration settings for formatting/parsing. */ - _getFormatConfig: function(inst) { - var shortYearCutoff = this._get(inst, 'shortYearCutoff'); - shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : - new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); - return {shortYearCutoff: shortYearCutoff, - dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), - monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; - }, - - /* Format the given date for display. */ - _formatDate: function(inst, day, month, year) { - if (!day) { - inst.currentDay = inst.selectedDay; - inst.currentMonth = inst.selectedMonth; - inst.currentYear = inst.selectedYear; - } - var date = (day ? (typeof day == 'object' ? day : - this._daylightSavingAdjust(new Date(year, month, day))) : - this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); - return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); - } -}); - -/* - * Bind hover events for datepicker elements. - * Done via delegate so the binding only occurs once in the lifetime of the parent div. - * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. - */ -function bindHover(dpDiv) { - var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a'; - return dpDiv.bind('mouseout', function(event) { - var elem = $( event.target ).closest( selector ); - if ( !elem.length ) { - return; - } - elem.removeClass( "ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover" ); - }) - .bind('mouseover', function(event) { - var elem = $( event.target ).closest( selector ); - if ($.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0]) || - !elem.length ) { - return; - } - elem.parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); - elem.addClass('ui-state-hover'); - if (elem.hasClass('ui-datepicker-prev')) elem.addClass('ui-datepicker-prev-hover'); - if (elem.hasClass('ui-datepicker-next')) elem.addClass('ui-datepicker-next-hover'); - }); -} - -/* jQuery extend now ignores nulls! */ -function extendRemove(target, props) { - $.extend(target, props); - for (var name in props) - if (props[name] == null || props[name] == undefined) - target[name] = props[name]; - return target; -}; - -/* Determine whether an object is an array. */ -function isArray(a) { - return (a && (($.browser.safari && typeof a == 'object' && a.length) || - (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); -}; - -/* Invoke the datepicker functionality. - @param options string - a command, optionally followed by additional parameters or - Object - settings for attaching new datepicker functionality - @return jQuery object */ -$.fn.datepicker = function(options){ - - /* Verify an empty collection wasn't passed - Fixes #6976 */ - if ( !this.length ) { - return this; - } - - /* Initialise the date picker. */ - if (!$.datepicker.initialized) { - $(document).mousedown($.datepicker._checkExternalClick). - find('body').append($.datepicker.dpDiv); - $.datepicker.initialized = true; - } - - var otherArgs = Array.prototype.slice.call(arguments, 1); - if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) - return $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this[0]].concat(otherArgs)); - if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') - return $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this[0]].concat(otherArgs)); - return this.each(function() { - typeof options == 'string' ? - $.datepicker['_' + options + 'Datepicker']. - apply($.datepicker, [this].concat(otherArgs)) : - $.datepicker._attachDatepicker(this, options); - }); -}; - -$.datepicker = new Datepicker(); // singleton instance -$.datepicker.initialized = false; -$.datepicker.uuid = new Date().getTime(); -$.datepicker.version = "1.8.21"; - -// Workaround for #4055 -// Add another global to avoid noConflict issues with inline event handlers -window['DP_jQuery_' + dpuuid] = $; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.dialog.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.dialog.js deleted file mode 100644 index e7e05b1b..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.dialog.js +++ /dev/null @@ -1,878 +0,0 @@ -/*! - * jQuery UI Dialog 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function( $, undefined ) { - -var uiDialogClasses = - 'ui-dialog ' + - 'ui-widget ' + - 'ui-widget-content ' + - 'ui-corner-all ', - sizeRelatedOptions = { - buttons: true, - height: true, - maxHeight: true, - maxWidth: true, - minHeight: true, - minWidth: true, - width: true - }, - resizableRelatedOptions = { - maxHeight: true, - maxWidth: true, - minHeight: true, - minWidth: true - }, - // support for jQuery 1.3.2 - handle common attrFn methods for dialog - attrFn = $.attrFn || { - val: true, - css: true, - html: true, - text: true, - data: true, - width: true, - height: true, - offset: true, - click: true - }; - -$.widget("ui.dialog", { - options: { - autoOpen: true, - buttons: {}, - closeOnEscape: true, - closeText: 'close', - dialogClass: '', - draggable: true, - hide: null, - height: 'auto', - maxHeight: false, - maxWidth: false, - minHeight: 150, - minWidth: 150, - modal: false, - position: { - my: 'center', - at: 'center', - collision: 'fit', - // ensure that the titlebar is never outside the document - using: function(pos) { - var topOffset = $(this).css(pos).offset().top; - if (topOffset < 0) { - $(this).css('top', pos.top - topOffset); - } - } - }, - resizable: true, - show: null, - stack: true, - title: '', - width: 300, - zIndex: 1000 - }, - - _create: function() { - this.originalTitle = this.element.attr('title'); - // #5742 - .attr() might return a DOMElement - if ( typeof this.originalTitle !== "string" ) { - this.originalTitle = ""; - } - - this.options.title = this.options.title || this.originalTitle; - var self = this, - options = self.options, - - title = options.title || ' ', - titleId = $.ui.dialog.getTitleId(self.element), - - uiDialog = (self.uiDialog = $('
      ')) - .appendTo(document.body) - .hide() - .addClass(uiDialogClasses + options.dialogClass) - .css({ - zIndex: options.zIndex - }) - // setting tabIndex makes the div focusable - // setting outline to 0 prevents a border on focus in Mozilla - .attr('tabIndex', -1).css('outline', 0).keydown(function(event) { - if (options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && - event.keyCode === $.ui.keyCode.ESCAPE) { - - self.close(event); - event.preventDefault(); - } - }) - .attr({ - role: 'dialog', - 'aria-labelledby': titleId - }) - .mousedown(function(event) { - self.moveToTop(false, event); - }), - - uiDialogContent = self.element - .show() - .removeAttr('title') - .addClass( - 'ui-dialog-content ' + - 'ui-widget-content') - .appendTo(uiDialog), - - uiDialogTitlebar = (self.uiDialogTitlebar = $('
      ')) - .addClass( - 'ui-dialog-titlebar ' + - 'ui-widget-header ' + - 'ui-corner-all ' + - 'ui-helper-clearfix' - ) - .prependTo(uiDialog), - - uiDialogTitlebarClose = $('') - .addClass( - 'ui-dialog-titlebar-close ' + - 'ui-corner-all' - ) - .attr('role', 'button') - .hover( - function() { - uiDialogTitlebarClose.addClass('ui-state-hover'); - }, - function() { - uiDialogTitlebarClose.removeClass('ui-state-hover'); - } - ) - .focus(function() { - uiDialogTitlebarClose.addClass('ui-state-focus'); - }) - .blur(function() { - uiDialogTitlebarClose.removeClass('ui-state-focus'); - }) - .click(function(event) { - self.close(event); - return false; - }) - .appendTo(uiDialogTitlebar), - - uiDialogTitlebarCloseText = (self.uiDialogTitlebarCloseText = $('')) - .addClass( - 'ui-icon ' + - 'ui-icon-closethick' - ) - .text(options.closeText) - .appendTo(uiDialogTitlebarClose), - - uiDialogTitle = $('') - .addClass('ui-dialog-title') - .attr('id', titleId) - .html(title) - .prependTo(uiDialogTitlebar); - - //handling of deprecated beforeclose (vs beforeClose) option - //Ticket #4669 http://dev.jqueryui.com/ticket/4669 - //TODO: remove in 1.9pre - if ($.isFunction(options.beforeclose) && !$.isFunction(options.beforeClose)) { - options.beforeClose = options.beforeclose; - } - - uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection(); - - if (options.draggable && $.fn.draggable) { - self._makeDraggable(); - } - if (options.resizable && $.fn.resizable) { - self._makeResizable(); - } - - self._createButtons(options.buttons); - self._isOpen = false; - - if ($.fn.bgiframe) { - uiDialog.bgiframe(); - } - }, - - _init: function() { - if ( this.options.autoOpen ) { - this.open(); - } - }, - - destroy: function() { - var self = this; - - if (self.overlay) { - self.overlay.destroy(); - } - self.uiDialog.hide(); - self.element - .unbind('.dialog') - .removeData('dialog') - .removeClass('ui-dialog-content ui-widget-content') - .hide().appendTo('body'); - self.uiDialog.remove(); - - if (self.originalTitle) { - self.element.attr('title', self.originalTitle); - } - - return self; - }, - - widget: function() { - return this.uiDialog; - }, - - close: function(event) { - var self = this, - maxZ, thisZ; - - if (false === self._trigger('beforeClose', event)) { - return; - } - - if (self.overlay) { - self.overlay.destroy(); - } - self.uiDialog.unbind('keypress.ui-dialog'); - - self._isOpen = false; - - if (self.options.hide) { - self.uiDialog.hide(self.options.hide, function() { - self._trigger('close', event); - }); - } else { - self.uiDialog.hide(); - self._trigger('close', event); - } - - $.ui.dialog.overlay.resize(); - - // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) - if (self.options.modal) { - maxZ = 0; - $('.ui-dialog').each(function() { - if (this !== self.uiDialog[0]) { - thisZ = $(this).css('z-index'); - if(!isNaN(thisZ)) { - maxZ = Math.max(maxZ, thisZ); - } - } - }); - $.ui.dialog.maxZ = maxZ; - } - - return self; - }, - - isOpen: function() { - return this._isOpen; - }, - - // the force parameter allows us to move modal dialogs to their correct - // position on open - moveToTop: function(force, event) { - var self = this, - options = self.options, - saveScroll; - - if ((options.modal && !force) || - (!options.stack && !options.modal)) { - return self._trigger('focus', event); - } - - if (options.zIndex > $.ui.dialog.maxZ) { - $.ui.dialog.maxZ = options.zIndex; - } - if (self.overlay) { - $.ui.dialog.maxZ += 1; - self.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ); - } - - //Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed. - // http://ui.jquery.com/bugs/ticket/3193 - saveScroll = { scrollTop: self.element.scrollTop(), scrollLeft: self.element.scrollLeft() }; - $.ui.dialog.maxZ += 1; - self.uiDialog.css('z-index', $.ui.dialog.maxZ); - self.element.attr(saveScroll); - self._trigger('focus', event); - - return self; - }, - - open: function() { - if (this._isOpen) { return; } - - var self = this, - options = self.options, - uiDialog = self.uiDialog; - - self.overlay = options.modal ? new $.ui.dialog.overlay(self) : null; - self._size(); - self._position(options.position); - uiDialog.show(options.show); - self.moveToTop(true); - - // prevent tabbing out of modal dialogs - if ( options.modal ) { - uiDialog.bind( "keydown.ui-dialog", function( event ) { - if ( event.keyCode !== $.ui.keyCode.TAB ) { - return; - } - - var tabbables = $(':tabbable', this), - first = tabbables.filter(':first'), - last = tabbables.filter(':last'); - - if (event.target === last[0] && !event.shiftKey) { - first.focus(1); - return false; - } else if (event.target === first[0] && event.shiftKey) { - last.focus(1); - return false; - } - }); - } - - // set focus to the first tabbable element in the content area or the first button - // if there are no tabbable elements, set focus on the dialog itself - $(self.element.find(':tabbable').get().concat( - uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat( - uiDialog.get()))).eq(0).focus(); - - self._isOpen = true; - self._trigger('open'); - - return self; - }, - - _createButtons: function(buttons) { - var self = this, - hasButtons = false, - uiDialogButtonPane = $('
      ') - .addClass( - 'ui-dialog-buttonpane ' + - 'ui-widget-content ' + - 'ui-helper-clearfix' - ), - uiButtonSet = $( "
      " ) - .addClass( "ui-dialog-buttonset" ) - .appendTo( uiDialogButtonPane ); - - // if we already have a button pane, remove it - self.uiDialog.find('.ui-dialog-buttonpane').remove(); - - if (typeof buttons === 'object' && buttons !== null) { - $.each(buttons, function() { - return !(hasButtons = true); - }); - } - if (hasButtons) { - $.each(buttons, function(name, props) { - props = $.isFunction( props ) ? - { click: props, text: name } : - props; - var button = $('') - .click(function() { - props.click.apply(self.element[0], arguments); - }) - .appendTo(uiButtonSet); - // can't use .attr( props, true ) with jQuery 1.3.2. - $.each( props, function( key, value ) { - if ( key === "click" ) { - return; - } - if ( key in attrFn ) { - button[ key ]( value ); - } else { - button.attr( key, value ); - } - }); - if ($.fn.button) { - button.button(); - } - }); - uiDialogButtonPane.appendTo(self.uiDialog); - } - }, - - _makeDraggable: function() { - var self = this, - options = self.options, - doc = $(document), - heightBeforeDrag; - - function filteredUi(ui) { - return { - position: ui.position, - offset: ui.offset - }; - } - - self.uiDialog.draggable({ - cancel: '.ui-dialog-content, .ui-dialog-titlebar-close', - handle: '.ui-dialog-titlebar', - containment: 'document', - start: function(event, ui) { - heightBeforeDrag = options.height === "auto" ? "auto" : $(this).height(); - $(this).height($(this).height()).addClass("ui-dialog-dragging"); - self._trigger('dragStart', event, filteredUi(ui)); - }, - drag: function(event, ui) { - self._trigger('drag', event, filteredUi(ui)); - }, - stop: function(event, ui) { - options.position = [ui.position.left - doc.scrollLeft(), - ui.position.top - doc.scrollTop()]; - $(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag); - self._trigger('dragStop', event, filteredUi(ui)); - $.ui.dialog.overlay.resize(); - } - }); - }, - - _makeResizable: function(handles) { - handles = (handles === undefined ? this.options.resizable : handles); - var self = this, - options = self.options, - // .ui-resizable has position: relative defined in the stylesheet - // but dialogs have to use absolute or fixed positioning - position = self.uiDialog.css('position'), - resizeHandles = (typeof handles === 'string' ? - handles : - 'n,e,s,w,se,sw,ne,nw' - ); - - function filteredUi(ui) { - return { - originalPosition: ui.originalPosition, - originalSize: ui.originalSize, - position: ui.position, - size: ui.size - }; - } - - self.uiDialog.resizable({ - cancel: '.ui-dialog-content', - containment: 'document', - alsoResize: self.element, - maxWidth: options.maxWidth, - maxHeight: options.maxHeight, - minWidth: options.minWidth, - minHeight: self._minHeight(), - handles: resizeHandles, - start: function(event, ui) { - $(this).addClass("ui-dialog-resizing"); - self._trigger('resizeStart', event, filteredUi(ui)); - }, - resize: function(event, ui) { - self._trigger('resize', event, filteredUi(ui)); - }, - stop: function(event, ui) { - $(this).removeClass("ui-dialog-resizing"); - options.height = $(this).height(); - options.width = $(this).width(); - self._trigger('resizeStop', event, filteredUi(ui)); - $.ui.dialog.overlay.resize(); - } - }) - .css('position', position) - .find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se'); - }, - - _minHeight: function() { - var options = this.options; - - if (options.height === 'auto') { - return options.minHeight; - } else { - return Math.min(options.minHeight, options.height); - } - }, - - _position: function(position) { - var myAt = [], - offset = [0, 0], - isVisible; - - if (position) { - // deep extending converts arrays to objects in jQuery <= 1.3.2 :-( - // if (typeof position == 'string' || $.isArray(position)) { - // myAt = $.isArray(position) ? position : position.split(' '); - - if (typeof position === 'string' || (typeof position === 'object' && '0' in position)) { - myAt = position.split ? position.split(' ') : [position[0], position[1]]; - if (myAt.length === 1) { - myAt[1] = myAt[0]; - } - - $.each(['left', 'top'], function(i, offsetPosition) { - if (+myAt[i] === myAt[i]) { - offset[i] = myAt[i]; - myAt[i] = offsetPosition; - } - }); - - position = { - my: myAt.join(" "), - at: myAt.join(" "), - offset: offset.join(" ") - }; - } - - position = $.extend({}, $.ui.dialog.prototype.options.position, position); - } else { - position = $.ui.dialog.prototype.options.position; - } - - // need to show the dialog to get the actual offset in the position plugin - isVisible = this.uiDialog.is(':visible'); - if (!isVisible) { - this.uiDialog.show(); - } - this.uiDialog - // workaround for jQuery bug #5781 http://dev.jquery.com/ticket/5781 - .css({ top: 0, left: 0 }) - .position($.extend({ of: window }, position)); - if (!isVisible) { - this.uiDialog.hide(); - } - }, - - _setOptions: function( options ) { - var self = this, - resizableOptions = {}, - resize = false; - - $.each( options, function( key, value ) { - self._setOption( key, value ); - - if ( key in sizeRelatedOptions ) { - resize = true; - } - if ( key in resizableRelatedOptions ) { - resizableOptions[ key ] = value; - } - }); - - if ( resize ) { - this._size(); - } - if ( this.uiDialog.is( ":data(resizable)" ) ) { - this.uiDialog.resizable( "option", resizableOptions ); - } - }, - - _setOption: function(key, value){ - var self = this, - uiDialog = self.uiDialog; - - switch (key) { - //handling of deprecated beforeclose (vs beforeClose) option - //Ticket #4669 http://dev.jqueryui.com/ticket/4669 - //TODO: remove in 1.9pre - case "beforeclose": - key = "beforeClose"; - break; - case "buttons": - self._createButtons(value); - break; - case "closeText": - // ensure that we always pass a string - self.uiDialogTitlebarCloseText.text("" + value); - break; - case "dialogClass": - uiDialog - .removeClass(self.options.dialogClass) - .addClass(uiDialogClasses + value); - break; - case "disabled": - if (value) { - uiDialog.addClass('ui-dialog-disabled'); - } else { - uiDialog.removeClass('ui-dialog-disabled'); - } - break; - case "draggable": - var isDraggable = uiDialog.is( ":data(draggable)" ); - if ( isDraggable && !value ) { - uiDialog.draggable( "destroy" ); - } - - if ( !isDraggable && value ) { - self._makeDraggable(); - } - break; - case "position": - self._position(value); - break; - case "resizable": - // currently resizable, becoming non-resizable - var isResizable = uiDialog.is( ":data(resizable)" ); - if (isResizable && !value) { - uiDialog.resizable('destroy'); - } - - // currently resizable, changing handles - if (isResizable && typeof value === 'string') { - uiDialog.resizable('option', 'handles', value); - } - - // currently non-resizable, becoming resizable - if (!isResizable && value !== false) { - self._makeResizable(value); - } - break; - case "title": - // convert whatever was passed in o a string, for html() to not throw up - $(".ui-dialog-title", self.uiDialogTitlebar).html("" + (value || ' ')); - break; - } - - $.Widget.prototype._setOption.apply(self, arguments); - }, - - _size: function() { - /* If the user has resized the dialog, the .ui-dialog and .ui-dialog-content - * divs will both have width and height set, so we need to reset them - */ - var options = this.options, - nonContentHeight, - minContentHeight, - isVisible = this.uiDialog.is( ":visible" ); - - // reset content sizing - this.element.show().css({ - width: 'auto', - minHeight: 0, - height: 0 - }); - - if (options.minWidth > options.width) { - options.width = options.minWidth; - } - - // reset wrapper sizing - // determine the height of all the non-content elements - nonContentHeight = this.uiDialog.css({ - height: 'auto', - width: options.width - }) - .height(); - minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); - - if ( options.height === "auto" ) { - // only needed for IE6 support - if ( $.support.minHeight ) { - this.element.css({ - minHeight: minContentHeight, - height: "auto" - }); - } else { - this.uiDialog.show(); - var autoHeight = this.element.css( "height", "auto" ).height(); - if ( !isVisible ) { - this.uiDialog.hide(); - } - this.element.height( Math.max( autoHeight, minContentHeight ) ); - } - } else { - this.element.height( Math.max( options.height - nonContentHeight, 0 ) ); - } - - if (this.uiDialog.is(':data(resizable)')) { - this.uiDialog.resizable('option', 'minHeight', this._minHeight()); - } - } -}); - -$.extend($.ui.dialog, { - version: "1.8.21", - - uuid: 0, - maxZ: 0, - - getTitleId: function($el) { - var id = $el.attr('id'); - if (!id) { - this.uuid += 1; - id = this.uuid; - } - return 'ui-dialog-title-' + id; - }, - - overlay: function(dialog) { - this.$el = $.ui.dialog.overlay.create(dialog); - } -}); - -$.extend($.ui.dialog.overlay, { - instances: [], - // reuse old instances due to IE memory leak with alpha transparency (see #5185) - oldInstances: [], - maxZ: 0, - events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), - function(event) { return event + '.dialog-overlay'; }).join(' '), - create: function(dialog) { - if (this.instances.length === 0) { - // prevent use of anchors and inputs - // we use a setTimeout in case the overlay is created from an - // event that we're going to be cancelling (see #2804) - setTimeout(function() { - // handle $(el).dialog().dialog('close') (see #4065) - if ($.ui.dialog.overlay.instances.length) { - $(document).bind($.ui.dialog.overlay.events, function(event) { - // stop events if the z-index of the target is < the z-index of the overlay - // we cannot return true when we don't want to cancel the event (#3523) - if ($(event.target).zIndex() < $.ui.dialog.overlay.maxZ) { - return false; - } - }); - } - }, 1); - - // allow closing by pressing the escape key - $(document).bind('keydown.dialog-overlay', function(event) { - if (dialog.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && - event.keyCode === $.ui.keyCode.ESCAPE) { - - dialog.close(event); - event.preventDefault(); - } - }); - - // handle window resize - $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize); - } - - var $el = (this.oldInstances.pop() || $('
      ').addClass('ui-widget-overlay')) - .appendTo(document.body) - .css({ - width: this.width(), - height: this.height() - }); - - if ($.fn.bgiframe) { - $el.bgiframe(); - } - - this.instances.push($el); - return $el; - }, - - destroy: function($el) { - var indexOf = $.inArray($el, this.instances); - if (indexOf != -1){ - this.oldInstances.push(this.instances.splice(indexOf, 1)[0]); - } - - if (this.instances.length === 0) { - $([document, window]).unbind('.dialog-overlay'); - } - - $el.remove(); - - // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) - var maxZ = 0; - $.each(this.instances, function() { - maxZ = Math.max(maxZ, this.css('z-index')); - }); - this.maxZ = maxZ; - }, - - height: function() { - var scrollHeight, - offsetHeight; - // handle IE 6 - if ($.browser.msie && $.browser.version < 7) { - scrollHeight = Math.max( - document.documentElement.scrollHeight, - document.body.scrollHeight - ); - offsetHeight = Math.max( - document.documentElement.offsetHeight, - document.body.offsetHeight - ); - - if (scrollHeight < offsetHeight) { - return $(window).height() + 'px'; - } else { - return scrollHeight + 'px'; - } - // handle "good" browsers - } else { - return $(document).height() + 'px'; - } - }, - - width: function() { - var scrollWidth, - offsetWidth; - // handle IE - if ( $.browser.msie ) { - scrollWidth = Math.max( - document.documentElement.scrollWidth, - document.body.scrollWidth - ); - offsetWidth = Math.max( - document.documentElement.offsetWidth, - document.body.offsetWidth - ); - - if (scrollWidth < offsetWidth) { - return $(window).width() + 'px'; - } else { - return scrollWidth + 'px'; - } - // handle "good" browsers - } else { - return $(document).width() + 'px'; - } - }, - - resize: function() { - /* If the dialog is draggable and the user drags it past the - * right edge of the window, the document becomes wider so we - * need to stretch the overlay. If the user then drags the - * dialog back to the left, the document will become narrower, - * so we need to shrink the overlay to the appropriate size. - * This is handled by shrinking the overlay before setting it - * to the full document size. - */ - var $overlays = $([]); - $.each($.ui.dialog.overlay.instances, function() { - $overlays = $overlays.add(this); - }); - - $overlays.css({ - width: 0, - height: 0 - }).css({ - width: $.ui.dialog.overlay.width(), - height: $.ui.dialog.overlay.height() - }); - } -}); - -$.extend($.ui.dialog.overlay.prototype, { - destroy: function() { - $.ui.dialog.overlay.destroy(this.$el); - } -}); - -}(jQuery)); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.draggable.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.draggable.js deleted file mode 100644 index 40a0c52d..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.draggable.js +++ /dev/null @@ -1,833 +0,0 @@ -/*! - * jQuery UI Draggable 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Draggables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -$.widget("ui.draggable", $.ui.mouse, { - widgetEventPrefix: "drag", - options: { - addClasses: true, - appendTo: "parent", - axis: false, - connectToSortable: false, - containment: false, - cursor: "auto", - cursorAt: false, - grid: false, - handle: false, - helper: "original", - iframeFix: false, - opacity: false, - refreshPositions: false, - revert: false, - revertDuration: 500, - scope: "default", - scroll: true, - scrollSensitivity: 20, - scrollSpeed: 20, - snap: false, - snapMode: "both", - snapTolerance: 20, - stack: false, - zIndex: false - }, - _create: function() { - - if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position"))) - this.element[0].style.position = 'relative'; - - (this.options.addClasses && this.element.addClass("ui-draggable")); - (this.options.disabled && this.element.addClass("ui-draggable-disabled")); - - this._mouseInit(); - - }, - - destroy: function() { - if(!this.element.data('draggable')) return; - this.element - .removeData("draggable") - .unbind(".draggable") - .removeClass("ui-draggable" - + " ui-draggable-dragging" - + " ui-draggable-disabled"); - this._mouseDestroy(); - - return this; - }, - - _mouseCapture: function(event) { - - var o = this.options; - - // among others, prevent a drag on a resizable-handle - if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle')) - return false; - - //Quit if we're not on a valid handle - this.handle = this._getHandle(event); - if (!this.handle) - return false; - - if ( o.iframeFix ) { - $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() { - $('
      ') - .css({ - width: this.offsetWidth+"px", height: this.offsetHeight+"px", - position: "absolute", opacity: "0.001", zIndex: 1000 - }) - .css($(this).offset()) - .appendTo("body"); - }); - } - - return true; - - }, - - _mouseStart: function(event) { - - var o = this.options; - - //Create and append the visible helper - this.helper = this._createHelper(event); - - this.helper.addClass("ui-draggable-dragging"); - - //Cache the helper size - this._cacheHelperProportions(); - - //If ddmanager is used for droppables, set the global draggable - if($.ui.ddmanager) - $.ui.ddmanager.current = this; - - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ - - //Cache the margins of the original element - this._cacheMargins(); - - //Store the helper's css position - this.cssPosition = this.helper.css("position"); - this.scrollParent = this.helper.scrollParent(); - - //The element's absolute position on the page minus margins - this.offset = this.positionAbs = this.element.offset(); - this.offset = { - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - - $.extend(this.offset, { - click: { //Where the click happened, relative to the element - left: event.pageX - this.offset.left, - top: event.pageY - this.offset.top - }, - parent: this._getParentOffset(), - relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper - }); - - //Generate the original position - this.originalPosition = this.position = this._generatePosition(event); - this.originalPageX = event.pageX; - this.originalPageY = event.pageY; - - //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied - (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); - - //Set a containment if given in the options - if(o.containment) - this._setContainment(); - - //Trigger event + callbacks - if(this._trigger("start", event) === false) { - this._clear(); - return false; - } - - //Recache the helper size - this._cacheHelperProportions(); - - //Prepare the droppable offsets - if ($.ui.ddmanager && !o.dropBehaviour) - $.ui.ddmanager.prepareOffsets(this, event); - - - this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position - - //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003) - if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event); - - return true; - }, - - _mouseDrag: function(event, noPropagation) { - - //Compute the helpers position - this.position = this._generatePosition(event); - this.positionAbs = this._convertPositionTo("absolute"); - - //Call plugins and callbacks and use the resulting position if something is returned - if (!noPropagation) { - var ui = this._uiHash(); - if(this._trigger('drag', event, ui) === false) { - this._mouseUp({}); - return false; - } - this.position = ui.position; - } - - if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; - if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; - if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); - - return false; - }, - - _mouseStop: function(event) { - - //If we are using droppables, inform the manager about the drop - var dropped = false; - if ($.ui.ddmanager && !this.options.dropBehaviour) - dropped = $.ui.ddmanager.drop(this, event); - - //if a drop comes from outside (a sortable) - if(this.dropped) { - dropped = this.dropped; - this.dropped = false; - } - - //if the original element is no longer in the DOM don't bother to continue (see #8269) - var element = this.element[0], elementInDom = false; - while ( element && (element = element.parentNode) ) { - if (element == document ) { - elementInDom = true; - } - } - if ( !elementInDom && this.options.helper === "original" ) - return false; - - if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) { - var self = this; - $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { - if(self._trigger("stop", event) !== false) { - self._clear(); - } - }); - } else { - if(this._trigger("stop", event) !== false) { - this._clear(); - } - } - - return false; - }, - - _mouseUp: function(event) { - if (this.options.iframeFix === true) { - $("div.ui-draggable-iframeFix").each(function() { - this.parentNode.removeChild(this); - }); //Remove frame helpers - } - - //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003) - if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event); - - return $.ui.mouse.prototype._mouseUp.call(this, event); - }, - - cancel: function() { - - if(this.helper.is(".ui-draggable-dragging")) { - this._mouseUp({}); - } else { - this._clear(); - } - - return this; - - }, - - _getHandle: function(event) { - - var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false; - $(this.options.handle, this.element) - .find("*") - .andSelf() - .each(function() { - if(this == event.target) handle = true; - }); - - return handle; - - }, - - _createHelper: function(event) { - - var o = this.options; - var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element); - - if(!helper.parents('body').length) - helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); - - if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) - helper.css("position", "absolute"); - - return helper; - - }, - - _adjustOffsetFromHelper: function(obj) { - if (typeof obj == 'string') { - obj = obj.split(' '); - } - if ($.isArray(obj)) { - obj = {left: +obj[0], top: +obj[1] || 0}; - } - if ('left' in obj) { - this.offset.click.left = obj.left + this.margins.left; - } - if ('right' in obj) { - this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; - } - if ('top' in obj) { - this.offset.click.top = obj.top + this.margins.top; - } - if ('bottom' in obj) { - this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; - } - }, - - _getParentOffset: function() { - - //Get the offsetParent and cache its position - this.offsetParent = this.helper.offsetParent(); - var po = this.offsetParent.offset(); - - // This is a special case where we need to modify a offset calculated on start, since the following happened: - // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent - // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that - // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag - if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { - po.left += this.scrollParent.scrollLeft(); - po.top += this.scrollParent.scrollTop(); - } - - if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information - || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix - po = { top: 0, left: 0 }; - - return { - top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), - left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) - }; - - }, - - _getRelativeOffset: function() { - - if(this.cssPosition == "relative") { - var p = this.element.position(); - return { - top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), - left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() - }; - } else { - return { top: 0, left: 0 }; - } - - }, - - _cacheMargins: function() { - this.margins = { - left: (parseInt(this.element.css("marginLeft"),10) || 0), - top: (parseInt(this.element.css("marginTop"),10) || 0), - right: (parseInt(this.element.css("marginRight"),10) || 0), - bottom: (parseInt(this.element.css("marginBottom"),10) || 0) - }; - }, - - _cacheHelperProportions: function() { - this.helperProportions = { - width: this.helper.outerWidth(), - height: this.helper.outerHeight() - }; - }, - - _setContainment: function() { - - var o = this.options; - if(o.containment == 'parent') o.containment = this.helper[0].parentNode; - if(o.containment == 'document' || o.containment == 'window') this.containment = [ - o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, - o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, - (o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, - (o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top - ]; - - if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) { - var c = $(o.containment); - var ce = c[0]; if(!ce) return; - var co = c.offset(); - var over = ($(ce).css("overflow") != 'hidden'); - - this.containment = [ - (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0), - (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0), - (over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, - (over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom - ]; - this.relative_container = c; - - } else if(o.containment.constructor == Array) { - this.containment = o.containment; - } - - }, - - _convertPositionTo: function(d, pos) { - - if(!pos) pos = this.position; - var mod = d == "absolute" ? 1 : -1; - var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - - return { - top: ( - pos.top // The absolute mouse position - + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) - - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) - ), - left: ( - pos.left // The absolute mouse position - + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) - - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) - ) - }; - - }, - - _generatePosition: function(event) { - - var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - var pageX = event.pageX; - var pageY = event.pageY; - - /* - * - Position constraining - - * Constrain the position to a mix of grid, containment. - */ - - if(this.originalPosition) { //If we are not dragging yet, we won't check for options - var containment; - if(this.containment) { - if (this.relative_container){ - var co = this.relative_container.offset(); - containment = [ this.containment[0] + co.left, - this.containment[1] + co.top, - this.containment[2] + co.left, - this.containment[3] + co.top ]; - } - else { - containment = this.containment; - } - - if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left; - if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top; - if(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left; - if(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top; - } - - if(o.grid) { - //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950) - var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY; - pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; - - var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX; - pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; - } - - } - - return { - top: ( - pageY // The absolute mouse position - - this.offset.click.top // Click offset (relative to the element) - - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.top // The offsetParent's offset without borders (offset + border) - + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) - ), - left: ( - pageX // The absolute mouse position - - this.offset.click.left // Click offset (relative to the element) - - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.left // The offsetParent's offset without borders (offset + border) - + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) - ) - }; - - }, - - _clear: function() { - this.helper.removeClass("ui-draggable-dragging"); - if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove(); - //if($.ui.ddmanager) $.ui.ddmanager.current = null; - this.helper = null; - this.cancelHelperRemoval = false; - }, - - // From now on bulk stuff - mainly helpers - - _trigger: function(type, event, ui) { - ui = ui || this._uiHash(); - $.ui.plugin.call(this, type, [event, ui]); - if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins - return $.Widget.prototype._trigger.call(this, type, event, ui); - }, - - plugins: {}, - - _uiHash: function(event) { - return { - helper: this.helper, - position: this.position, - originalPosition: this.originalPosition, - offset: this.positionAbs - }; - } - -}); - -$.extend($.ui.draggable, { - version: "1.8.21" -}); - -$.ui.plugin.add("draggable", "connectToSortable", { - start: function(event, ui) { - - var inst = $(this).data("draggable"), o = inst.options, - uiSortable = $.extend({}, ui, { item: inst.element }); - inst.sortables = []; - $(o.connectToSortable).each(function() { - var sortable = $.data(this, 'sortable'); - if (sortable && !sortable.options.disabled) { - inst.sortables.push({ - instance: sortable, - shouldRevert: sortable.options.revert - }); - sortable.refreshPositions(); // Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page). - sortable._trigger("activate", event, uiSortable); - } - }); - - }, - stop: function(event, ui) { - - //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper - var inst = $(this).data("draggable"), - uiSortable = $.extend({}, ui, { item: inst.element }); - - $.each(inst.sortables, function() { - if(this.instance.isOver) { - - this.instance.isOver = 0; - - inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance - this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work) - - //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid' - if(this.shouldRevert) this.instance.options.revert = true; - - //Trigger the stop of the sortable - this.instance._mouseStop(event); - - this.instance.options.helper = this.instance.options._helper; - - //If the helper has been the original item, restore properties in the sortable - if(inst.options.helper == 'original') - this.instance.currentItem.css({ top: 'auto', left: 'auto' }); - - } else { - this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance - this.instance._trigger("deactivate", event, uiSortable); - } - - }); - - }, - drag: function(event, ui) { - - var inst = $(this).data("draggable"), self = this; - - var checkPos = function(o) { - var dyClick = this.offset.click.top, dxClick = this.offset.click.left; - var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left; - var itemHeight = o.height, itemWidth = o.width; - var itemTop = o.top, itemLeft = o.left; - - return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth); - }; - - $.each(inst.sortables, function(i) { - - //Copy over some variables to allow calling the sortable's native _intersectsWith - this.instance.positionAbs = inst.positionAbs; - this.instance.helperProportions = inst.helperProportions; - this.instance.offset.click = inst.offset.click; - - if(this.instance._intersectsWith(this.instance.containerCache)) { - - //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once - if(!this.instance.isOver) { - - this.instance.isOver = 1; - //Now we fake the start of dragging for the sortable instance, - //by cloning the list group item, appending it to the sortable and using it as inst.currentItem - //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one) - this.instance.currentItem = $(self).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true); - this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it - this.instance.options.helper = function() { return ui.helper[0]; }; - - event.target = this.instance.currentItem[0]; - this.instance._mouseCapture(event, true); - this.instance._mouseStart(event, true, true); - - //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes - this.instance.offset.click.top = inst.offset.click.top; - this.instance.offset.click.left = inst.offset.click.left; - this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; - this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; - - inst._trigger("toSortable", event); - inst.dropped = this.instance.element; //draggable revert needs that - //hack so receive/update callbacks work (mostly) - inst.currentItem = inst.element; - this.instance.fromOutside = inst; - - } - - //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable - if(this.instance.currentItem) this.instance._mouseDrag(event); - - } else { - - //If it doesn't intersect with the sortable, and it intersected before, - //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval - if(this.instance.isOver) { - - this.instance.isOver = 0; - this.instance.cancelHelperRemoval = true; - - //Prevent reverting on this forced stop - this.instance.options.revert = false; - - // The out event needs to be triggered independently - this.instance._trigger('out', event, this.instance._uiHash(this.instance)); - - this.instance._mouseStop(event, true); - this.instance.options.helper = this.instance.options._helper; - - //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size - this.instance.currentItem.remove(); - if(this.instance.placeholder) this.instance.placeholder.remove(); - - inst._trigger("fromSortable", event); - inst.dropped = false; //draggable revert needs that - } - - }; - - }); - - } -}); - -$.ui.plugin.add("draggable", "cursor", { - start: function(event, ui) { - var t = $('body'), o = $(this).data('draggable').options; - if (t.css("cursor")) o._cursor = t.css("cursor"); - t.css("cursor", o.cursor); - }, - stop: function(event, ui) { - var o = $(this).data('draggable').options; - if (o._cursor) $('body').css("cursor", o._cursor); - } -}); - -$.ui.plugin.add("draggable", "opacity", { - start: function(event, ui) { - var t = $(ui.helper), o = $(this).data('draggable').options; - if(t.css("opacity")) o._opacity = t.css("opacity"); - t.css('opacity', o.opacity); - }, - stop: function(event, ui) { - var o = $(this).data('draggable').options; - if(o._opacity) $(ui.helper).css('opacity', o._opacity); - } -}); - -$.ui.plugin.add("draggable", "scroll", { - start: function(event, ui) { - var i = $(this).data("draggable"); - if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset(); - }, - drag: function(event, ui) { - - var i = $(this).data("draggable"), o = i.options, scrolled = false; - - if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') { - - if(!o.axis || o.axis != 'x') { - if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) - i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed; - else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) - i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; - } - - if(!o.axis || o.axis != 'y') { - if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) - i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; - else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) - i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; - } - - } else { - - if(!o.axis || o.axis != 'x') { - if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) - scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) - scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - } - - if(!o.axis || o.axis != 'y') { - if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) - scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) - scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - } - - } - - if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) - $.ui.ddmanager.prepareOffsets(i, event); - - } -}); - -$.ui.plugin.add("draggable", "snap", { - start: function(event, ui) { - - var i = $(this).data("draggable"), o = i.options; - i.snapElements = []; - - $(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() { - var $t = $(this); var $o = $t.offset(); - if(this != i.element[0]) i.snapElements.push({ - item: this, - width: $t.outerWidth(), height: $t.outerHeight(), - top: $o.top, left: $o.left - }); - }); - - }, - drag: function(event, ui) { - - var inst = $(this).data("draggable"), o = inst.options; - var d = o.snapTolerance; - - var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, - y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; - - for (var i = inst.snapElements.length - 1; i >= 0; i--){ - - var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, - t = inst.snapElements[i].top, b = t + inst.snapElements[i].height; - - //Yes, I know, this is insane ;) - if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) { - if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); - inst.snapElements[i].snapping = false; - continue; - } - - if(o.snapMode != 'inner') { - var ts = Math.abs(t - y2) <= d; - var bs = Math.abs(b - y1) <= d; - var ls = Math.abs(l - x2) <= d; - var rs = Math.abs(r - x1) <= d; - if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; - if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; - if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; - if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; - } - - var first = (ts || bs || ls || rs); - - if(o.snapMode != 'outer') { - var ts = Math.abs(t - y1) <= d; - var bs = Math.abs(b - y2) <= d; - var ls = Math.abs(l - x1) <= d; - var rs = Math.abs(r - x2) <= d; - if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; - if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; - if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; - if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; - } - - if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) - (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); - inst.snapElements[i].snapping = (ts || bs || ls || rs || first); - - }; - - } -}); - -$.ui.plugin.add("draggable", "stack", { - start: function(event, ui) { - - var o = $(this).data("draggable").options; - - var group = $.makeArray($(o.stack)).sort(function(a,b) { - return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0); - }); - if (!group.length) { return; } - - var min = parseInt(group[0].style.zIndex) || 0; - $(group).each(function(i) { - this.style.zIndex = min + i; - }); - - this[0].style.zIndex = min + group.length; - - } -}); - -$.ui.plugin.add("draggable", "zIndex", { - start: function(event, ui) { - var t = $(ui.helper), o = $(this).data("draggable").options; - if(t.css("zIndex")) o._zIndex = t.css("zIndex"); - t.css('zIndex', o.zIndex); - }, - stop: function(event, ui) { - var o = $(this).data("draggable").options; - if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex); - } -}); - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.droppable.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.droppable.js deleted file mode 100644 index a7491617..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.droppable.js +++ /dev/null @@ -1,296 +0,0 @@ -/*! - * jQuery UI Droppable 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Droppables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.mouse.js - * jquery.ui.draggable.js - */ -(function( $, undefined ) { - -$.widget("ui.droppable", { - widgetEventPrefix: "drop", - options: { - accept: '*', - activeClass: false, - addClasses: true, - greedy: false, - hoverClass: false, - scope: 'default', - tolerance: 'intersect' - }, - _create: function() { - - var o = this.options, accept = o.accept; - this.isover = 0; this.isout = 1; - - this.accept = $.isFunction(accept) ? accept : function(d) { - return d.is(accept); - }; - - //Store the droppable's proportions - this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight }; - - // Add the reference and positions to the manager - $.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || []; - $.ui.ddmanager.droppables[o.scope].push(this); - - (o.addClasses && this.element.addClass("ui-droppable")); - - }, - - destroy: function() { - var drop = $.ui.ddmanager.droppables[this.options.scope]; - for ( var i = 0; i < drop.length; i++ ) - if ( drop[i] == this ) - drop.splice(i, 1); - - this.element - .removeClass("ui-droppable ui-droppable-disabled") - .removeData("droppable") - .unbind(".droppable"); - - return this; - }, - - _setOption: function(key, value) { - - if(key == 'accept') { - this.accept = $.isFunction(value) ? value : function(d) { - return d.is(value); - }; - } - $.Widget.prototype._setOption.apply(this, arguments); - }, - - _activate: function(event) { - var draggable = $.ui.ddmanager.current; - if(this.options.activeClass) this.element.addClass(this.options.activeClass); - (draggable && this._trigger('activate', event, this.ui(draggable))); - }, - - _deactivate: function(event) { - var draggable = $.ui.ddmanager.current; - if(this.options.activeClass) this.element.removeClass(this.options.activeClass); - (draggable && this._trigger('deactivate', event, this.ui(draggable))); - }, - - _over: function(event) { - - var draggable = $.ui.ddmanager.current; - if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element - - if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { - if(this.options.hoverClass) this.element.addClass(this.options.hoverClass); - this._trigger('over', event, this.ui(draggable)); - } - - }, - - _out: function(event) { - - var draggable = $.ui.ddmanager.current; - if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return; // Bail if draggable and droppable are same element - - if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { - if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); - this._trigger('out', event, this.ui(draggable)); - } - - }, - - _drop: function(event,custom) { - - var draggable = custom || $.ui.ddmanager.current; - if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false; // Bail if draggable and droppable are same element - - var childrenIntersection = false; - this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function() { - var inst = $.data(this, 'droppable'); - if( - inst.options.greedy - && !inst.options.disabled - && inst.options.scope == draggable.options.scope - && inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) - && $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance) - ) { childrenIntersection = true; return false; } - }); - if(childrenIntersection) return false; - - if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { - if(this.options.activeClass) this.element.removeClass(this.options.activeClass); - if(this.options.hoverClass) this.element.removeClass(this.options.hoverClass); - this._trigger('drop', event, this.ui(draggable)); - return this.element; - } - - return false; - - }, - - ui: function(c) { - return { - draggable: (c.currentItem || c.element), - helper: c.helper, - position: c.position, - offset: c.positionAbs - }; - } - -}); - -$.extend($.ui.droppable, { - version: "1.8.21" -}); - -$.ui.intersect = function(draggable, droppable, toleranceMode) { - - if (!droppable.offset) return false; - - var x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width, - y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height; - var l = droppable.offset.left, r = l + droppable.proportions.width, - t = droppable.offset.top, b = t + droppable.proportions.height; - - switch (toleranceMode) { - case 'fit': - return (l <= x1 && x2 <= r - && t <= y1 && y2 <= b); - break; - case 'intersect': - return (l < x1 + (draggable.helperProportions.width / 2) // Right Half - && x2 - (draggable.helperProportions.width / 2) < r // Left Half - && t < y1 + (draggable.helperProportions.height / 2) // Bottom Half - && y2 - (draggable.helperProportions.height / 2) < b ); // Top Half - break; - case 'pointer': - var draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left), - draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top), - isOver = $.ui.isOver(draggableTop, draggableLeft, t, l, droppable.proportions.height, droppable.proportions.width); - return isOver; - break; - case 'touch': - return ( - (y1 >= t && y1 <= b) || // Top edge touching - (y2 >= t && y2 <= b) || // Bottom edge touching - (y1 < t && y2 > b) // Surrounded vertically - ) && ( - (x1 >= l && x1 <= r) || // Left edge touching - (x2 >= l && x2 <= r) || // Right edge touching - (x1 < l && x2 > r) // Surrounded horizontally - ); - break; - default: - return false; - break; - } - -}; - -/* - This manager tracks offsets of draggables and droppables -*/ -$.ui.ddmanager = { - current: null, - droppables: { 'default': [] }, - prepareOffsets: function(t, event) { - - var m = $.ui.ddmanager.droppables[t.options.scope] || []; - var type = event ? event.type : null; // workaround for #2317 - var list = (t.currentItem || t.element).find(":data(droppable)").andSelf(); - - droppablesLoop: for (var i = 0; i < m.length; i++) { - - if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) continue; //No disabled and non-accepted - for (var j=0; j < list.length; j++) { if(list[j] == m[i].element[0]) { m[i].proportions.height = 0; continue droppablesLoop; } }; //Filter out elements in the current dragged item - m[i].visible = m[i].element.css("display") != "none"; if(!m[i].visible) continue; //If the element is not visible, continue - - if(type == "mousedown") m[i]._activate.call(m[i], event); //Activate the droppable if used directly from draggables - - m[i].offset = m[i].element.offset(); - m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight }; - - } - - }, - drop: function(draggable, event) { - - var dropped = false; - $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { - - if(!this.options) return; - if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) - dropped = this._drop.call(this, event) || dropped; - - if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) { - this.isout = 1; this.isover = 0; - this._deactivate.call(this, event); - } - - }); - return dropped; - - }, - dragStart: function( draggable, event ) { - //Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003) - draggable.element.parents( ":not(body,html)" ).bind( "scroll.droppable", function() { - if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event ); - }); - }, - drag: function(draggable, event) { - - //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse. - if(draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, event); - - //Run through all droppables and check their positions based on specific tolerance options - $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() { - - if(this.options.disabled || this.greedyChild || !this.visible) return; - var intersects = $.ui.intersect(draggable, this, this.options.tolerance); - - var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null); - if(!c) return; - - var parentInstance; - if (this.options.greedy) { - var parent = this.element.parents(':data(droppable):eq(0)'); - if (parent.length) { - parentInstance = $.data(parent[0], 'droppable'); - parentInstance.greedyChild = (c == 'isover' ? 1 : 0); - } - } - - // we just moved into a greedy child - if (parentInstance && c == 'isover') { - parentInstance['isover'] = 0; - parentInstance['isout'] = 1; - parentInstance._out.call(parentInstance, event); - } - - this[c] = 1; this[c == 'isout' ? 'isover' : 'isout'] = 0; - this[c == "isover" ? "_over" : "_out"].call(this, event); - - // we just moved out of a greedy child - if (parentInstance && c == 'isout') { - parentInstance['isout'] = 0; - parentInstance['isover'] = 1; - parentInstance._over.call(parentInstance, event); - } - }); - - }, - dragStop: function( draggable, event ) { - draggable.element.parents( ":not(body,html)" ).unbind( "scroll.droppable" ); - //Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003) - if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event ); - } -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.mouse.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.mouse.js deleted file mode 100644 index a4392deb..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.mouse.js +++ /dev/null @@ -1,165 +0,0 @@ -/*! - * jQuery UI Mouse 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -var mouseHandled = false; -$( document ).mouseup( function( e ) { - mouseHandled = false; -}); - -$.widget("ui.mouse", { - options: { - cancel: ':input,option', - distance: 1, - delay: 0 - }, - _mouseInit: function() { - var self = this; - - this.element - .bind('mousedown.'+this.widgetName, function(event) { - return self._mouseDown(event); - }) - .bind('click.'+this.widgetName, function(event) { - if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) { - $.removeData(event.target, self.widgetName + '.preventClickEvent'); - event.stopImmediatePropagation(); - return false; - } - }); - - this.started = false; - }, - - // TODO: make sure destroying one instance of mouse doesn't mess with - // other instances of mouse - _mouseDestroy: function() { - this.element.unbind('.'+this.widgetName); - $(document) - .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); - }, - - _mouseDown: function(event) { - // don't let more than one widget handle mouseStart - if( mouseHandled ) { return }; - - // we may have missed mouseup (out of window) - (this._mouseStarted && this._mouseUp(event)); - - this._mouseDownEvent = event; - - var self = this, - btnIsLeft = (event.which == 1), - // event.target.nodeName works around a bug in IE 8 with - // disabled inputs (#7620) - elIsCancel = (typeof this.options.cancel == "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); - if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { - return true; - } - - this.mouseDelayMet = !this.options.delay; - if (!this.mouseDelayMet) { - this._mouseDelayTimer = setTimeout(function() { - self.mouseDelayMet = true; - }, this.options.delay); - } - - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = (this._mouseStart(event) !== false); - if (!this._mouseStarted) { - event.preventDefault(); - return true; - } - } - - // Click event may never have fired (Gecko & Opera) - if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) { - $.removeData(event.target, this.widgetName + '.preventClickEvent'); - } - - // these delegates are required to keep context - this._mouseMoveDelegate = function(event) { - return self._mouseMove(event); - }; - this._mouseUpDelegate = function(event) { - return self._mouseUp(event); - }; - $(document) - .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); - - event.preventDefault(); - - mouseHandled = true; - return true; - }, - - _mouseMove: function(event) { - // IE mouseup check - mouseup happened when mouse was out of window - if ($.browser.msie && !(document.documentMode >= 9) && !event.button) { - return this._mouseUp(event); - } - - if (this._mouseStarted) { - this._mouseDrag(event); - return event.preventDefault(); - } - - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = - (this._mouseStart(this._mouseDownEvent, event) !== false); - (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); - } - - return !this._mouseStarted; - }, - - _mouseUp: function(event) { - $(document) - .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); - - if (this._mouseStarted) { - this._mouseStarted = false; - - if (event.target == this._mouseDownEvent.target) { - $.data(event.target, this.widgetName + '.preventClickEvent', true); - } - - this._mouseStop(event); - } - - return false; - }, - - _mouseDistanceMet: function(event) { - return (Math.max( - Math.abs(this._mouseDownEvent.pageX - event.pageX), - Math.abs(this._mouseDownEvent.pageY - event.pageY) - ) >= this.options.distance - ); - }, - - _mouseDelayMet: function(event) { - return this.mouseDelayMet; - }, - - // These are placeholder methods, to be overriden by extending plugin - _mouseStart: function(event) {}, - _mouseDrag: function(event) {}, - _mouseStop: function(event) {}, - _mouseCapture: function(event) { return true; } -}); - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.position.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.position.js deleted file mode 100644 index 164804b5..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.position.js +++ /dev/null @@ -1,303 +0,0 @@ -/*! - * jQuery UI Position 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Position - */ -(function( $, undefined ) { - -$.ui = $.ui || {}; - -var horizontalPositions = /left|center|right/, - verticalPositions = /top|center|bottom/, - center = "center", - support = {}, - _position = $.fn.position, - _offset = $.fn.offset; - -$.fn.position = function( options ) { - if ( !options || !options.of ) { - return _position.apply( this, arguments ); - } - - // make a copy, we don't want to modify arguments - options = $.extend( {}, options ); - - var target = $( options.of ), - targetElem = target[0], - collision = ( options.collision || "flip" ).split( " " ), - offset = options.offset ? options.offset.split( " " ) : [ 0, 0 ], - targetWidth, - targetHeight, - basePosition; - - if ( targetElem.nodeType === 9 ) { - targetWidth = target.width(); - targetHeight = target.height(); - basePosition = { top: 0, left: 0 }; - // TODO: use $.isWindow() in 1.9 - } else if ( targetElem.setTimeout ) { - targetWidth = target.width(); - targetHeight = target.height(); - basePosition = { top: target.scrollTop(), left: target.scrollLeft() }; - } else if ( targetElem.preventDefault ) { - // force left top to allow flipping - options.at = "left top"; - targetWidth = targetHeight = 0; - basePosition = { top: options.of.pageY, left: options.of.pageX }; - } else { - targetWidth = target.outerWidth(); - targetHeight = target.outerHeight(); - basePosition = target.offset(); - } - - // force my and at to have valid horizontal and veritcal positions - // if a value is missing or invalid, it will be converted to center - $.each( [ "my", "at" ], function() { - var pos = ( options[this] || "" ).split( " " ); - if ( pos.length === 1) { - pos = horizontalPositions.test( pos[0] ) ? - pos.concat( [center] ) : - verticalPositions.test( pos[0] ) ? - [ center ].concat( pos ) : - [ center, center ]; - } - pos[ 0 ] = horizontalPositions.test( pos[0] ) ? pos[ 0 ] : center; - pos[ 1 ] = verticalPositions.test( pos[1] ) ? pos[ 1 ] : center; - options[ this ] = pos; - }); - - // normalize collision option - if ( collision.length === 1 ) { - collision[ 1 ] = collision[ 0 ]; - } - - // normalize offset option - offset[ 0 ] = parseInt( offset[0], 10 ) || 0; - if ( offset.length === 1 ) { - offset[ 1 ] = offset[ 0 ]; - } - offset[ 1 ] = parseInt( offset[1], 10 ) || 0; - - if ( options.at[0] === "right" ) { - basePosition.left += targetWidth; - } else if ( options.at[0] === center ) { - basePosition.left += targetWidth / 2; - } - - if ( options.at[1] === "bottom" ) { - basePosition.top += targetHeight; - } else if ( options.at[1] === center ) { - basePosition.top += targetHeight / 2; - } - - basePosition.left += offset[ 0 ]; - basePosition.top += offset[ 1 ]; - - return this.each(function() { - var elem = $( this ), - elemWidth = elem.outerWidth(), - elemHeight = elem.outerHeight(), - marginLeft = parseInt( $.curCSS( this, "marginLeft", true ) ) || 0, - marginTop = parseInt( $.curCSS( this, "marginTop", true ) ) || 0, - collisionWidth = elemWidth + marginLeft + - ( parseInt( $.curCSS( this, "marginRight", true ) ) || 0 ), - collisionHeight = elemHeight + marginTop + - ( parseInt( $.curCSS( this, "marginBottom", true ) ) || 0 ), - position = $.extend( {}, basePosition ), - collisionPosition; - - if ( options.my[0] === "right" ) { - position.left -= elemWidth; - } else if ( options.my[0] === center ) { - position.left -= elemWidth / 2; - } - - if ( options.my[1] === "bottom" ) { - position.top -= elemHeight; - } else if ( options.my[1] === center ) { - position.top -= elemHeight / 2; - } - - // prevent fractions if jQuery version doesn't support them (see #5280) - if ( !support.fractions ) { - position.left = Math.round( position.left ); - position.top = Math.round( position.top ); - } - - collisionPosition = { - left: position.left - marginLeft, - top: position.top - marginTop - }; - - $.each( [ "left", "top" ], function( i, dir ) { - if ( $.ui.position[ collision[i] ] ) { - $.ui.position[ collision[i] ][ dir ]( position, { - targetWidth: targetWidth, - targetHeight: targetHeight, - elemWidth: elemWidth, - elemHeight: elemHeight, - collisionPosition: collisionPosition, - collisionWidth: collisionWidth, - collisionHeight: collisionHeight, - offset: offset, - my: options.my, - at: options.at - }); - } - }); - - if ( $.fn.bgiframe ) { - elem.bgiframe(); - } - elem.offset( $.extend( position, { using: options.using } ) ); - }); -}; - -$.ui.position = { - fit: { - left: function( position, data ) { - var win = $( window ), - over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(); - position.left = over > 0 ? position.left - over : Math.max( position.left - data.collisionPosition.left, position.left ); - }, - top: function( position, data ) { - var win = $( window ), - over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(); - position.top = over > 0 ? position.top - over : Math.max( position.top - data.collisionPosition.top, position.top ); - } - }, - - flip: { - left: function( position, data ) { - if ( data.at[0] === center ) { - return; - } - var win = $( window ), - over = data.collisionPosition.left + data.collisionWidth - win.width() - win.scrollLeft(), - myOffset = data.my[ 0 ] === "left" ? - -data.elemWidth : - data.my[ 0 ] === "right" ? - data.elemWidth : - 0, - atOffset = data.at[ 0 ] === "left" ? - data.targetWidth : - -data.targetWidth, - offset = -2 * data.offset[ 0 ]; - position.left += data.collisionPosition.left < 0 ? - myOffset + atOffset + offset : - over > 0 ? - myOffset + atOffset + offset : - 0; - }, - top: function( position, data ) { - if ( data.at[1] === center ) { - return; - } - var win = $( window ), - over = data.collisionPosition.top + data.collisionHeight - win.height() - win.scrollTop(), - myOffset = data.my[ 1 ] === "top" ? - -data.elemHeight : - data.my[ 1 ] === "bottom" ? - data.elemHeight : - 0, - atOffset = data.at[ 1 ] === "top" ? - data.targetHeight : - -data.targetHeight, - offset = -2 * data.offset[ 1 ]; - position.top += data.collisionPosition.top < 0 ? - myOffset + atOffset + offset : - over > 0 ? - myOffset + atOffset + offset : - 0; - } - } -}; - -// offset setter from jQuery 1.4 -if ( !$.offset.setOffset ) { - $.offset.setOffset = function( elem, options ) { - // set position first, in-case top/left are set even on static elem - if ( /static/.test( $.curCSS( elem, "position" ) ) ) { - elem.style.position = "relative"; - } - var curElem = $( elem ), - curOffset = curElem.offset(), - curTop = parseInt( $.curCSS( elem, "top", true ), 10 ) || 0, - curLeft = parseInt( $.curCSS( elem, "left", true ), 10) || 0, - props = { - top: (options.top - curOffset.top) + curTop, - left: (options.left - curOffset.left) + curLeft - }; - - if ( 'using' in options ) { - options.using.call( elem, props ); - } else { - curElem.css( props ); - } - }; - - $.fn.offset = function( options ) { - var elem = this[ 0 ]; - if ( !elem || !elem.ownerDocument ) { return null; } - if ( options ) { - if ( $.isFunction( options ) ) { - return this.each(function( i ) { - $( this ).offset( options.call( this, i, $( this ).offset() ) ); - }); - } - return this.each(function() { - $.offset.setOffset( this, options ); - }); - } - return _offset.call( this ); - }; -} - -// fraction support test (older versions of jQuery don't support fractions) -(function () { - var body = document.getElementsByTagName( "body" )[ 0 ], - div = document.createElement( "div" ), - testElement, testElementParent, testElementStyle, offset, offsetTotal; - - //Create a "fake body" for testing based on method used in jQuery.support - testElement = document.createElement( body ? "div" : "body" ); - testElementStyle = { - visibility: "hidden", - width: 0, - height: 0, - border: 0, - margin: 0, - background: "none" - }; - if ( body ) { - $.extend( testElementStyle, { - position: "absolute", - left: "-1000px", - top: "-1000px" - }); - } - for ( var i in testElementStyle ) { - testElement.style[ i ] = testElementStyle[ i ]; - } - testElement.appendChild( div ); - testElementParent = body || document.documentElement; - testElementParent.insertBefore( testElement, testElementParent.firstChild ); - - div.style.cssText = "position: absolute; left: 10.7432222px; top: 10.432325px; height: 30px; width: 201px;"; - - offset = $( div ).offset( function( _, offset ) { - return offset; - }).offset(); - - testElement.innerHTML = ""; - testElementParent.removeChild( testElement ); - - offsetTotal = offset.top + offset.left + ( body ? 2000 : 0 ); - support.fractions = offsetTotal > 21 && offsetTotal < 22; -})(); - -}( jQuery )); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.progressbar.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.progressbar.js deleted file mode 100644 index 4139be6f..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.progressbar.js +++ /dev/null @@ -1,109 +0,0 @@ -/*! - * jQuery UI Progressbar 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Progressbar - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -$.widget( "ui.progressbar", { - options: { - value: 0, - max: 100 - }, - - min: 0, - - _create: function() { - this.element - .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) - .attr({ - role: "progressbar", - "aria-valuemin": this.min, - "aria-valuemax": this.options.max, - "aria-valuenow": this._value() - }); - - this.valueDiv = $( "
      " ) - .appendTo( this.element ); - - this.oldValue = this._value(); - this._refreshValue(); - }, - - destroy: function() { - this.element - .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" ) - .removeAttr( "role" ) - .removeAttr( "aria-valuemin" ) - .removeAttr( "aria-valuemax" ) - .removeAttr( "aria-valuenow" ); - - this.valueDiv.remove(); - - $.Widget.prototype.destroy.apply( this, arguments ); - }, - - value: function( newValue ) { - if ( newValue === undefined ) { - return this._value(); - } - - this._setOption( "value", newValue ); - return this; - }, - - _setOption: function( key, value ) { - if ( key === "value" ) { - this.options.value = value; - this._refreshValue(); - if ( this._value() === this.options.max ) { - this._trigger( "complete" ); - } - } - - $.Widget.prototype._setOption.apply( this, arguments ); - }, - - _value: function() { - var val = this.options.value; - // normalize invalid value - if ( typeof val !== "number" ) { - val = 0; - } - return Math.min( this.options.max, Math.max( this.min, val ) ); - }, - - _percentage: function() { - return 100 * this._value() / this.options.max; - }, - - _refreshValue: function() { - var value = this.value(); - var percentage = this._percentage(); - - if ( this.oldValue !== value ) { - this.oldValue = value; - this._trigger( "change" ); - } - - this.valueDiv - .toggle( value > this.min ) - .toggleClass( "ui-corner-right", value === this.options.max ) - .width( percentage.toFixed(0) + "%" ); - this.element.attr( "aria-valuenow", value ); - } -}); - -$.extend( $.ui.progressbar, { - version: "1.8.21" -}); - -})( jQuery ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.resizable.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.resizable.js deleted file mode 100644 index 904be47b..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.resizable.js +++ /dev/null @@ -1,807 +0,0 @@ -/*! - * jQuery UI Resizable 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Resizables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -$.widget("ui.resizable", $.ui.mouse, { - widgetEventPrefix: "resize", - options: { - alsoResize: false, - animate: false, - animateDuration: "slow", - animateEasing: "swing", - aspectRatio: false, - autoHide: false, - containment: false, - ghost: false, - grid: false, - handles: "e,s,se", - helper: false, - maxHeight: null, - maxWidth: null, - minHeight: 10, - minWidth: 10, - zIndex: 1000 - }, - _create: function() { - - var self = this, o = this.options; - this.element.addClass("ui-resizable"); - - $.extend(this, { - _aspectRatio: !!(o.aspectRatio), - aspectRatio: o.aspectRatio, - originalElement: this.element, - _proportionallyResizeElements: [], - _helper: o.helper || o.ghost || o.animate ? o.helper || 'ui-resizable-helper' : null - }); - - //Wrap the element if it cannot hold child nodes - if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) { - - //Create a wrapper element and set the wrapper to the new current internal element - this.element.wrap( - $('
      ').css({ - position: this.element.css('position'), - width: this.element.outerWidth(), - height: this.element.outerHeight(), - top: this.element.css('top'), - left: this.element.css('left') - }) - ); - - //Overwrite the original this.element - this.element = this.element.parent().data( - "resizable", this.element.data('resizable') - ); - - this.elementIsWrapper = true; - - //Move margins to the wrapper - this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") }); - this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0}); - - //Prevent Safari textarea resize - this.originalResizeStyle = this.originalElement.css('resize'); - this.originalElement.css('resize', 'none'); - - //Push the actual element to our proportionallyResize internal array - this._proportionallyResizeElements.push(this.originalElement.css({ position: 'static', zoom: 1, display: 'block' })); - - // avoid IE jump (hard set the margin) - this.originalElement.css({ margin: this.originalElement.css('margin') }); - - // fix handlers offset - this._proportionallyResize(); - - } - - this.handles = o.handles || (!$('.ui-resizable-handle', this.element).length ? "e,s,se" : { n: '.ui-resizable-n', e: '.ui-resizable-e', s: '.ui-resizable-s', w: '.ui-resizable-w', se: '.ui-resizable-se', sw: '.ui-resizable-sw', ne: '.ui-resizable-ne', nw: '.ui-resizable-nw' }); - if(this.handles.constructor == String) { - - if(this.handles == 'all') this.handles = 'n,e,s,w,se,sw,ne,nw'; - var n = this.handles.split(","); this.handles = {}; - - for(var i = 0; i < n.length; i++) { - - var handle = $.trim(n[i]), hname = 'ui-resizable-'+handle; - var axis = $('
      '); - - // Apply zIndex to all handles - see #7960 - axis.css({ zIndex: o.zIndex }); - - //TODO : What's going on here? - if ('se' == handle) { - axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se'); - }; - - //Insert into internal handles object and append to element - this.handles[handle] = '.ui-resizable-'+handle; - this.element.append(axis); - } - - } - - this._renderAxis = function(target) { - - target = target || this.element; - - for(var i in this.handles) { - - if(this.handles[i].constructor == String) - this.handles[i] = $(this.handles[i], this.element).show(); - - //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls) - if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) { - - var axis = $(this.handles[i], this.element), padWrapper = 0; - - //Checking the correct pad and border - padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth(); - - //The padding type i have to apply... - var padPos = [ 'padding', - /ne|nw|n/.test(i) ? 'Top' : - /se|sw|s/.test(i) ? 'Bottom' : - /^e$/.test(i) ? 'Right' : 'Left' ].join(""); - - target.css(padPos, padWrapper); - - this._proportionallyResize(); - - } - - //TODO: What's that good for? There's not anything to be executed left - if(!$(this.handles[i]).length) - continue; - - } - }; - - //TODO: make renderAxis a prototype function - this._renderAxis(this.element); - - this._handles = $('.ui-resizable-handle', this.element) - .disableSelection(); - - //Matching axis name - this._handles.mouseover(function() { - if (!self.resizing) { - if (this.className) - var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i); - //Axis, default = se - self.axis = axis && axis[1] ? axis[1] : 'se'; - } - }); - - //If we want to auto hide the elements - if (o.autoHide) { - this._handles.hide(); - $(this.element) - .addClass("ui-resizable-autohide") - .hover(function() { - if (o.disabled) return; - $(this).removeClass("ui-resizable-autohide"); - self._handles.show(); - }, - function(){ - if (o.disabled) return; - if (!self.resizing) { - $(this).addClass("ui-resizable-autohide"); - self._handles.hide(); - } - }); - } - - //Initialize the mouse interaction - this._mouseInit(); - - }, - - destroy: function() { - - this._mouseDestroy(); - - var _destroy = function(exp) { - $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing") - .removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove(); - }; - - //TODO: Unwrap at same DOM position - if (this.elementIsWrapper) { - _destroy(this.element); - var wrapper = this.element; - wrapper.after( - this.originalElement.css({ - position: wrapper.css('position'), - width: wrapper.outerWidth(), - height: wrapper.outerHeight(), - top: wrapper.css('top'), - left: wrapper.css('left') - }) - ).remove(); - } - - this.originalElement.css('resize', this.originalResizeStyle); - _destroy(this.originalElement); - - return this; - }, - - _mouseCapture: function(event) { - var handle = false; - for (var i in this.handles) { - if ($(this.handles[i])[0] == event.target) { - handle = true; - } - } - - return !this.options.disabled && handle; - }, - - _mouseStart: function(event) { - - var o = this.options, iniPos = this.element.position(), el = this.element; - - this.resizing = true; - this.documentScroll = { top: $(document).scrollTop(), left: $(document).scrollLeft() }; - - // bugfix for http://dev.jquery.com/ticket/1749 - if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) { - el.css({ position: 'absolute', top: iniPos.top, left: iniPos.left }); - } - - this._renderProxy(); - - var curleft = num(this.helper.css('left')), curtop = num(this.helper.css('top')); - - if (o.containment) { - curleft += $(o.containment).scrollLeft() || 0; - curtop += $(o.containment).scrollTop() || 0; - } - - //Store needed variables - this.offset = this.helper.offset(); - this.position = { left: curleft, top: curtop }; - this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; - this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() }; - this.originalPosition = { left: curleft, top: curtop }; - this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() }; - this.originalMousePosition = { left: event.pageX, top: event.pageY }; - - //Aspect Ratio - this.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1); - - var cursor = $('.ui-resizable-' + this.axis).css('cursor'); - $('body').css('cursor', cursor == 'auto' ? this.axis + '-resize' : cursor); - - el.addClass("ui-resizable-resizing"); - this._propagate("start", event); - return true; - }, - - _mouseDrag: function(event) { - - //Increase performance, avoid regex - var el = this.helper, o = this.options, props = {}, - self = this, smp = this.originalMousePosition, a = this.axis; - - var dx = (event.pageX-smp.left)||0, dy = (event.pageY-smp.top)||0; - var trigger = this._change[a]; - if (!trigger) return false; - - // Calculate the attrs that will be change - var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff; - - // Put this in the mouseDrag handler since the user can start pressing shift while resizing - this._updateVirtualBoundaries(event.shiftKey); - if (this._aspectRatio || event.shiftKey) - data = this._updateRatio(data, event); - - data = this._respectSize(data, event); - - // plugins callbacks need to be called first - this._propagate("resize", event); - - el.css({ - top: this.position.top + "px", left: this.position.left + "px", - width: this.size.width + "px", height: this.size.height + "px" - }); - - if (!this._helper && this._proportionallyResizeElements.length) - this._proportionallyResize(); - - this._updateCache(data); - - // calling the user callback at the end - this._trigger('resize', event, this.ui()); - - return false; - }, - - _mouseStop: function(event) { - - this.resizing = false; - var o = this.options, self = this; - - if(this._helper) { - var pr = this._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), - soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, - soffsetw = ista ? 0 : self.sizeDiff.width; - - var s = { width: (self.helper.width() - soffsetw), height: (self.helper.height() - soffseth) }, - left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, - top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; - - if (!o.animate) - this.element.css($.extend(s, { top: top, left: left })); - - self.helper.height(self.size.height); - self.helper.width(self.size.width); - - if (this._helper && !o.animate) this._proportionallyResize(); - } - - $('body').css('cursor', 'auto'); - - this.element.removeClass("ui-resizable-resizing"); - - this._propagate("stop", event); - - if (this._helper) this.helper.remove(); - return false; - - }, - - _updateVirtualBoundaries: function(forceAspectRatio) { - var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b; - - b = { - minWidth: isNumber(o.minWidth) ? o.minWidth : 0, - maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity, - minHeight: isNumber(o.minHeight) ? o.minHeight : 0, - maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity - }; - - if(this._aspectRatio || forceAspectRatio) { - // We want to create an enclosing box whose aspect ration is the requested one - // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension - pMinWidth = b.minHeight * this.aspectRatio; - pMinHeight = b.minWidth / this.aspectRatio; - pMaxWidth = b.maxHeight * this.aspectRatio; - pMaxHeight = b.maxWidth / this.aspectRatio; - - if(pMinWidth > b.minWidth) b.minWidth = pMinWidth; - if(pMinHeight > b.minHeight) b.minHeight = pMinHeight; - if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth; - if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight; - } - this._vBoundaries = b; - }, - - _updateCache: function(data) { - var o = this.options; - this.offset = this.helper.offset(); - if (isNumber(data.left)) this.position.left = data.left; - if (isNumber(data.top)) this.position.top = data.top; - if (isNumber(data.height)) this.size.height = data.height; - if (isNumber(data.width)) this.size.width = data.width; - }, - - _updateRatio: function(data, event) { - - var o = this.options, cpos = this.position, csize = this.size, a = this.axis; - - if (isNumber(data.height)) data.width = (data.height * this.aspectRatio); - else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio); - - if (a == 'sw') { - data.left = cpos.left + (csize.width - data.width); - data.top = null; - } - if (a == 'nw') { - data.top = cpos.top + (csize.height - data.height); - data.left = cpos.left + (csize.width - data.width); - } - - return data; - }, - - _respectSize: function(data, event) { - - var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis, - ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height), - isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height); - - if (isminw) data.width = o.minWidth; - if (isminh) data.height = o.minHeight; - if (ismaxw) data.width = o.maxWidth; - if (ismaxh) data.height = o.maxHeight; - - var dw = this.originalPosition.left + this.originalSize.width, dh = this.position.top + this.size.height; - var cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a); - - if (isminw && cw) data.left = dw - o.minWidth; - if (ismaxw && cw) data.left = dw - o.maxWidth; - if (isminh && ch) data.top = dh - o.minHeight; - if (ismaxh && ch) data.top = dh - o.maxHeight; - - // fixing jump error on top/left - bug #2330 - var isNotwh = !data.width && !data.height; - if (isNotwh && !data.left && data.top) data.top = null; - else if (isNotwh && !data.top && data.left) data.left = null; - - return data; - }, - - _proportionallyResize: function() { - - var o = this.options; - if (!this._proportionallyResizeElements.length) return; - var element = this.helper || this.element; - - for (var i=0; i < this._proportionallyResizeElements.length; i++) { - - var prel = this._proportionallyResizeElements[i]; - - if (!this.borderDif) { - var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')], - p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')]; - - this.borderDif = $.map(b, function(v, i) { - var border = parseInt(v,10)||0, padding = parseInt(p[i],10)||0; - return border + padding; - }); - } - - if ($.browser.msie && !(!($(element).is(':hidden') || $(element).parents(':hidden').length))) - continue; - - prel.css({ - height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0, - width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0 - }); - - }; - - }, - - _renderProxy: function() { - - var el = this.element, o = this.options; - this.elementOffset = el.offset(); - - if(this._helper) { - - this.helper = this.helper || $('
      '); - - // fix ie6 offset TODO: This seems broken - var ie6 = $.browser.msie && $.browser.version < 7, ie6offset = (ie6 ? 1 : 0), - pxyoffset = ( ie6 ? 2 : -1 ); - - this.helper.addClass(this._helper).css({ - width: this.element.outerWidth() + pxyoffset, - height: this.element.outerHeight() + pxyoffset, - position: 'absolute', - left: this.elementOffset.left - ie6offset +'px', - top: this.elementOffset.top - ie6offset +'px', - zIndex: ++o.zIndex //TODO: Don't modify option - }); - - this.helper - .appendTo("body") - .disableSelection(); - - } else { - this.helper = this.element; - } - - }, - - _change: { - e: function(event, dx, dy) { - return { width: this.originalSize.width + dx }; - }, - w: function(event, dx, dy) { - var o = this.options, cs = this.originalSize, sp = this.originalPosition; - return { left: sp.left + dx, width: cs.width - dx }; - }, - n: function(event, dx, dy) { - var o = this.options, cs = this.originalSize, sp = this.originalPosition; - return { top: sp.top + dy, height: cs.height - dy }; - }, - s: function(event, dx, dy) { - return { height: this.originalSize.height + dy }; - }, - se: function(event, dx, dy) { - return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); - }, - sw: function(event, dx, dy) { - return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); - }, - ne: function(event, dx, dy) { - return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy])); - }, - nw: function(event, dx, dy) { - return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy])); - } - }, - - _propagate: function(n, event) { - $.ui.plugin.call(this, n, [event, this.ui()]); - (n != "resize" && this._trigger(n, event, this.ui())); - }, - - plugins: {}, - - ui: function() { - return { - originalElement: this.originalElement, - element: this.element, - helper: this.helper, - position: this.position, - size: this.size, - originalSize: this.originalSize, - originalPosition: this.originalPosition - }; - } - -}); - -$.extend($.ui.resizable, { - version: "1.8.21" -}); - -/* - * Resizable Extensions - */ - -$.ui.plugin.add("resizable", "alsoResize", { - - start: function (event, ui) { - var self = $(this).data("resizable"), o = self.options; - - var _store = function (exp) { - $(exp).each(function() { - var el = $(this); - el.data("resizable-alsoresize", { - width: parseInt(el.width(), 10), height: parseInt(el.height(), 10), - left: parseInt(el.css('left'), 10), top: parseInt(el.css('top'), 10) - }); - }); - }; - - if (typeof(o.alsoResize) == 'object' && !o.alsoResize.parentNode) { - if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); } - else { $.each(o.alsoResize, function (exp) { _store(exp); }); } - }else{ - _store(o.alsoResize); - } - }, - - resize: function (event, ui) { - var self = $(this).data("resizable"), o = self.options, os = self.originalSize, op = self.originalPosition; - - var delta = { - height: (self.size.height - os.height) || 0, width: (self.size.width - os.width) || 0, - top: (self.position.top - op.top) || 0, left: (self.position.left - op.left) || 0 - }, - - _alsoResize = function (exp, c) { - $(exp).each(function() { - var el = $(this), start = $(this).data("resizable-alsoresize"), style = {}, - css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ['width', 'height'] : ['width', 'height', 'top', 'left']; - - $.each(css, function (i, prop) { - var sum = (start[prop]||0) + (delta[prop]||0); - if (sum && sum >= 0) - style[prop] = sum || null; - }); - - el.css(style); - }); - }; - - if (typeof(o.alsoResize) == 'object' && !o.alsoResize.nodeType) { - $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); }); - }else{ - _alsoResize(o.alsoResize); - } - }, - - stop: function (event, ui) { - $(this).removeData("resizable-alsoresize"); - } -}); - -$.ui.plugin.add("resizable", "animate", { - - stop: function(event, ui) { - var self = $(this).data("resizable"), o = self.options; - - var pr = self._proportionallyResizeElements, ista = pr.length && (/textarea/i).test(pr[0].nodeName), - soffseth = ista && $.ui.hasScroll(pr[0], 'left') /* TODO - jump height */ ? 0 : self.sizeDiff.height, - soffsetw = ista ? 0 : self.sizeDiff.width; - - var style = { width: (self.size.width - soffsetw), height: (self.size.height - soffseth) }, - left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null, - top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null; - - self.element.animate( - $.extend(style, top && left ? { top: top, left: left } : {}), { - duration: o.animateDuration, - easing: o.animateEasing, - step: function() { - - var data = { - width: parseInt(self.element.css('width'), 10), - height: parseInt(self.element.css('height'), 10), - top: parseInt(self.element.css('top'), 10), - left: parseInt(self.element.css('left'), 10) - }; - - if (pr && pr.length) $(pr[0]).css({ width: data.width, height: data.height }); - - // propagating resize, and updating values for each animation step - self._updateCache(data); - self._propagate("resize", event); - - } - } - ); - } - -}); - -$.ui.plugin.add("resizable", "containment", { - - start: function(event, ui) { - var self = $(this).data("resizable"), o = self.options, el = self.element; - var oc = o.containment, ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc; - if (!ce) return; - - self.containerElement = $(ce); - - if (/document/.test(oc) || oc == document) { - self.containerOffset = { left: 0, top: 0 }; - self.containerPosition = { left: 0, top: 0 }; - - self.parentData = { - element: $(document), left: 0, top: 0, - width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight - }; - } - - // i'm a node, so compute top, left, right, bottom - else { - var element = $(ce), p = []; - $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); }); - - self.containerOffset = element.offset(); - self.containerPosition = element.position(); - self.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) }; - - var co = self.containerOffset, ch = self.containerSize.height, cw = self.containerSize.width, - width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw ), height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch); - - self.parentData = { - element: ce, left: co.left, top: co.top, width: width, height: height - }; - } - }, - - resize: function(event, ui) { - var self = $(this).data("resizable"), o = self.options, - ps = self.containerSize, co = self.containerOffset, cs = self.size, cp = self.position, - pRatio = self._aspectRatio || event.shiftKey, cop = { top:0, left:0 }, ce = self.containerElement; - - if (ce[0] != document && (/static/).test(ce.css('position'))) cop = co; - - if (cp.left < (self._helper ? co.left : 0)) { - self.size.width = self.size.width + (self._helper ? (self.position.left - co.left) : (self.position.left - cop.left)); - if (pRatio) self.size.height = self.size.width / self.aspectRatio; - self.position.left = o.helper ? co.left : 0; - } - - if (cp.top < (self._helper ? co.top : 0)) { - self.size.height = self.size.height + (self._helper ? (self.position.top - co.top) : self.position.top); - if (pRatio) self.size.width = self.size.height * self.aspectRatio; - self.position.top = self._helper ? co.top : 0; - } - - self.offset.left = self.parentData.left+self.position.left; - self.offset.top = self.parentData.top+self.position.top; - - var woset = Math.abs( (self._helper ? self.offset.left - cop.left : (self.offset.left - cop.left)) + self.sizeDiff.width ), - hoset = Math.abs( (self._helper ? self.offset.top - cop.top : (self.offset.top - co.top)) + self.sizeDiff.height ); - - var isParent = self.containerElement.get(0) == self.element.parent().get(0), - isOffsetRelative = /relative|absolute/.test(self.containerElement.css('position')); - - if(isParent && isOffsetRelative) woset -= self.parentData.left; - - if (woset + self.size.width >= self.parentData.width) { - self.size.width = self.parentData.width - woset; - if (pRatio) self.size.height = self.size.width / self.aspectRatio; - } - - if (hoset + self.size.height >= self.parentData.height) { - self.size.height = self.parentData.height - hoset; - if (pRatio) self.size.width = self.size.height * self.aspectRatio; - } - }, - - stop: function(event, ui){ - var self = $(this).data("resizable"), o = self.options, cp = self.position, - co = self.containerOffset, cop = self.containerPosition, ce = self.containerElement; - - var helper = $(self.helper), ho = helper.offset(), w = helper.outerWidth() - self.sizeDiff.width, h = helper.outerHeight() - self.sizeDiff.height; - - if (self._helper && !o.animate && (/relative/).test(ce.css('position'))) - $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); - - if (self._helper && !o.animate && (/static/).test(ce.css('position'))) - $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h }); - - } -}); - -$.ui.plugin.add("resizable", "ghost", { - - start: function(event, ui) { - - var self = $(this).data("resizable"), o = self.options, cs = self.size; - - self.ghost = self.originalElement.clone(); - self.ghost - .css({ opacity: .25, display: 'block', position: 'relative', height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 }) - .addClass('ui-resizable-ghost') - .addClass(typeof o.ghost == 'string' ? o.ghost : ''); - - self.ghost.appendTo(self.helper); - - }, - - resize: function(event, ui){ - var self = $(this).data("resizable"), o = self.options; - if (self.ghost) self.ghost.css({ position: 'relative', height: self.size.height, width: self.size.width }); - }, - - stop: function(event, ui){ - var self = $(this).data("resizable"), o = self.options; - if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0)); - } - -}); - -$.ui.plugin.add("resizable", "grid", { - - resize: function(event, ui) { - var self = $(this).data("resizable"), o = self.options, cs = self.size, os = self.originalSize, op = self.originalPosition, a = self.axis, ratio = o._aspectRatio || event.shiftKey; - o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid; - var ox = Math.round((cs.width - os.width) / (o.grid[0]||1)) * (o.grid[0]||1), oy = Math.round((cs.height - os.height) / (o.grid[1]||1)) * (o.grid[1]||1); - - if (/^(se|s|e)$/.test(a)) { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - } - else if (/^(ne)$/.test(a)) { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - self.position.top = op.top - oy; - } - else if (/^(sw)$/.test(a)) { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - self.position.left = op.left - ox; - } - else { - self.size.width = os.width + ox; - self.size.height = os.height + oy; - self.position.top = op.top - oy; - self.position.left = op.left - ox; - } - } - -}); - -var num = function(v) { - return parseInt(v, 10) || 0; -}; - -var isNumber = function(value) { - return !isNaN(parseInt(value, 10)); -}; - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.selectable.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.selectable.js deleted file mode 100644 index 403e62dc..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.selectable.js +++ /dev/null @@ -1,267 +0,0 @@ -/*! - * jQuery UI Selectable 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Selectables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -$.widget("ui.selectable", $.ui.mouse, { - options: { - appendTo: 'body', - autoRefresh: true, - distance: 0, - filter: '*', - tolerance: 'touch' - }, - _create: function() { - var self = this; - - this.element.addClass("ui-selectable"); - - this.dragged = false; - - // cache selectee children based on filter - var selectees; - this.refresh = function() { - selectees = $(self.options.filter, self.element[0]); - selectees.addClass("ui-selectee"); - selectees.each(function() { - var $this = $(this); - var pos = $this.offset(); - $.data(this, "selectable-item", { - element: this, - $element: $this, - left: pos.left, - top: pos.top, - right: pos.left + $this.outerWidth(), - bottom: pos.top + $this.outerHeight(), - startselected: false, - selected: $this.hasClass('ui-selected'), - selecting: $this.hasClass('ui-selecting'), - unselecting: $this.hasClass('ui-unselecting') - }); - }); - }; - this.refresh(); - - this.selectees = selectees.addClass("ui-selectee"); - - this._mouseInit(); - - this.helper = $("
      "); - }, - - destroy: function() { - this.selectees - .removeClass("ui-selectee") - .removeData("selectable-item"); - this.element - .removeClass("ui-selectable ui-selectable-disabled") - .removeData("selectable") - .unbind(".selectable"); - this._mouseDestroy(); - - return this; - }, - - _mouseStart: function(event) { - var self = this; - - this.opos = [event.pageX, event.pageY]; - - if (this.options.disabled) - return; - - var options = this.options; - - this.selectees = $(options.filter, this.element[0]); - - this._trigger("start", event); - - $(options.appendTo).append(this.helper); - // position helper (lasso) - this.helper.css({ - "left": event.clientX, - "top": event.clientY, - "width": 0, - "height": 0 - }); - - if (options.autoRefresh) { - this.refresh(); - } - - this.selectees.filter('.ui-selected').each(function() { - var selectee = $.data(this, "selectable-item"); - selectee.startselected = true; - if (!event.metaKey && !event.ctrlKey) { - selectee.$element.removeClass('ui-selected'); - selectee.selected = false; - selectee.$element.addClass('ui-unselecting'); - selectee.unselecting = true; - // selectable UNSELECTING callback - self._trigger("unselecting", event, { - unselecting: selectee.element - }); - } - }); - - $(event.target).parents().andSelf().each(function() { - var selectee = $.data(this, "selectable-item"); - if (selectee) { - var doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass('ui-selected'); - selectee.$element - .removeClass(doSelect ? "ui-unselecting" : "ui-selected") - .addClass(doSelect ? "ui-selecting" : "ui-unselecting"); - selectee.unselecting = !doSelect; - selectee.selecting = doSelect; - selectee.selected = doSelect; - // selectable (UN)SELECTING callback - if (doSelect) { - self._trigger("selecting", event, { - selecting: selectee.element - }); - } else { - self._trigger("unselecting", event, { - unselecting: selectee.element - }); - } - return false; - } - }); - - }, - - _mouseDrag: function(event) { - var self = this; - this.dragged = true; - - if (this.options.disabled) - return; - - var options = this.options; - - var x1 = this.opos[0], y1 = this.opos[1], x2 = event.pageX, y2 = event.pageY; - if (x1 > x2) { var tmp = x2; x2 = x1; x1 = tmp; } - if (y1 > y2) { var tmp = y2; y2 = y1; y1 = tmp; } - this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1}); - - this.selectees.each(function() { - var selectee = $.data(this, "selectable-item"); - //prevent helper from being selected if appendTo: selectable - if (!selectee || selectee.element == self.element[0]) - return; - var hit = false; - if (options.tolerance == 'touch') { - hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) ); - } else if (options.tolerance == 'fit') { - hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2); - } - - if (hit) { - // SELECT - if (selectee.selected) { - selectee.$element.removeClass('ui-selected'); - selectee.selected = false; - } - if (selectee.unselecting) { - selectee.$element.removeClass('ui-unselecting'); - selectee.unselecting = false; - } - if (!selectee.selecting) { - selectee.$element.addClass('ui-selecting'); - selectee.selecting = true; - // selectable SELECTING callback - self._trigger("selecting", event, { - selecting: selectee.element - }); - } - } else { - // UNSELECT - if (selectee.selecting) { - if ((event.metaKey || event.ctrlKey) && selectee.startselected) { - selectee.$element.removeClass('ui-selecting'); - selectee.selecting = false; - selectee.$element.addClass('ui-selected'); - selectee.selected = true; - } else { - selectee.$element.removeClass('ui-selecting'); - selectee.selecting = false; - if (selectee.startselected) { - selectee.$element.addClass('ui-unselecting'); - selectee.unselecting = true; - } - // selectable UNSELECTING callback - self._trigger("unselecting", event, { - unselecting: selectee.element - }); - } - } - if (selectee.selected) { - if (!event.metaKey && !event.ctrlKey && !selectee.startselected) { - selectee.$element.removeClass('ui-selected'); - selectee.selected = false; - - selectee.$element.addClass('ui-unselecting'); - selectee.unselecting = true; - // selectable UNSELECTING callback - self._trigger("unselecting", event, { - unselecting: selectee.element - }); - } - } - } - }); - - return false; - }, - - _mouseStop: function(event) { - var self = this; - - this.dragged = false; - - var options = this.options; - - $('.ui-unselecting', this.element[0]).each(function() { - var selectee = $.data(this, "selectable-item"); - selectee.$element.removeClass('ui-unselecting'); - selectee.unselecting = false; - selectee.startselected = false; - self._trigger("unselected", event, { - unselected: selectee.element - }); - }); - $('.ui-selecting', this.element[0]).each(function() { - var selectee = $.data(this, "selectable-item"); - selectee.$element.removeClass('ui-selecting').addClass('ui-selected'); - selectee.selecting = false; - selectee.selected = true; - selectee.startselected = true; - self._trigger("selected", event, { - selected: selectee.element - }); - }); - this._trigger("stop", event); - - this.helper.remove(); - - return false; - } - -}); - -$.extend($.ui.selectable, { - version: "1.8.21" -}); - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.slider.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.slider.js deleted file mode 100644 index 8629dc6b..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.slider.js +++ /dev/null @@ -1,662 +0,0 @@ -/*! - * jQuery UI Slider 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Slider - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -// number of pages in a slider -// (how many times can you page up/down to go through the whole range) -var numPages = 5; - -$.widget( "ui.slider", $.ui.mouse, { - - widgetEventPrefix: "slide", - - options: { - animate: false, - distance: 0, - max: 100, - min: 0, - orientation: "horizontal", - range: false, - step: 1, - value: 0, - values: null - }, - - _create: function() { - var self = this, - o = this.options, - existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ), - handle = "", - handleCount = ( o.values && o.values.length ) || 1, - handles = []; - - this._keySliding = false; - this._mouseSliding = false; - this._animateOff = true; - this._handleIndex = null; - this._detectOrientation(); - this._mouseInit(); - - this.element - .addClass( "ui-slider" + - " ui-slider-" + this.orientation + - " ui-widget" + - " ui-widget-content" + - " ui-corner-all" + - ( o.disabled ? " ui-slider-disabled ui-disabled" : "" ) ); - - this.range = $([]); - - if ( o.range ) { - if ( o.range === true ) { - if ( !o.values ) { - o.values = [ this._valueMin(), this._valueMin() ]; - } - if ( o.values.length && o.values.length !== 2 ) { - o.values = [ o.values[0], o.values[0] ]; - } - } - - this.range = $( "
      " ) - .appendTo( this.element ) - .addClass( "ui-slider-range" + - // note: this isn't the most fittingly semantic framework class for this element, - // but worked best visually with a variety of themes - " ui-widget-header" + - ( ( o.range === "min" || o.range === "max" ) ? " ui-slider-range-" + o.range : "" ) ); - } - - for ( var i = existingHandles.length; i < handleCount; i += 1 ) { - handles.push( handle ); - } - - this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( self.element ) ); - - this.handle = this.handles.eq( 0 ); - - this.handles.add( this.range ).filter( "a" ) - .click(function( event ) { - event.preventDefault(); - }) - .hover(function() { - if ( !o.disabled ) { - $( this ).addClass( "ui-state-hover" ); - } - }, function() { - $( this ).removeClass( "ui-state-hover" ); - }) - .focus(function() { - if ( !o.disabled ) { - $( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" ); - $( this ).addClass( "ui-state-focus" ); - } else { - $( this ).blur(); - } - }) - .blur(function() { - $( this ).removeClass( "ui-state-focus" ); - }); - - this.handles.each(function( i ) { - $( this ).data( "index.ui-slider-handle", i ); - }); - - this.handles - .keydown(function( event ) { - var index = $( this ).data( "index.ui-slider-handle" ), - allowed, - curVal, - newVal, - step; - - if ( self.options.disabled ) { - return; - } - - switch ( event.keyCode ) { - case $.ui.keyCode.HOME: - case $.ui.keyCode.END: - case $.ui.keyCode.PAGE_UP: - case $.ui.keyCode.PAGE_DOWN: - case $.ui.keyCode.UP: - case $.ui.keyCode.RIGHT: - case $.ui.keyCode.DOWN: - case $.ui.keyCode.LEFT: - event.preventDefault(); - if ( !self._keySliding ) { - self._keySliding = true; - $( this ).addClass( "ui-state-active" ); - allowed = self._start( event, index ); - if ( allowed === false ) { - return; - } - } - break; - } - - step = self.options.step; - if ( self.options.values && self.options.values.length ) { - curVal = newVal = self.values( index ); - } else { - curVal = newVal = self.value(); - } - - switch ( event.keyCode ) { - case $.ui.keyCode.HOME: - newVal = self._valueMin(); - break; - case $.ui.keyCode.END: - newVal = self._valueMax(); - break; - case $.ui.keyCode.PAGE_UP: - newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) ); - break; - case $.ui.keyCode.PAGE_DOWN: - newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) ); - break; - case $.ui.keyCode.UP: - case $.ui.keyCode.RIGHT: - if ( curVal === self._valueMax() ) { - return; - } - newVal = self._trimAlignValue( curVal + step ); - break; - case $.ui.keyCode.DOWN: - case $.ui.keyCode.LEFT: - if ( curVal === self._valueMin() ) { - return; - } - newVal = self._trimAlignValue( curVal - step ); - break; - } - - self._slide( event, index, newVal ); - }) - .keyup(function( event ) { - var index = $( this ).data( "index.ui-slider-handle" ); - - if ( self._keySliding ) { - self._keySliding = false; - self._stop( event, index ); - self._change( event, index ); - $( this ).removeClass( "ui-state-active" ); - } - - }); - - this._refreshValue(); - - this._animateOff = false; - }, - - destroy: function() { - this.handles.remove(); - this.range.remove(); - - this.element - .removeClass( "ui-slider" + - " ui-slider-horizontal" + - " ui-slider-vertical" + - " ui-slider-disabled" + - " ui-widget" + - " ui-widget-content" + - " ui-corner-all" ) - .removeData( "slider" ) - .unbind( ".slider" ); - - this._mouseDestroy(); - - return this; - }, - - _mouseCapture: function( event ) { - var o = this.options, - position, - normValue, - distance, - closestHandle, - self, - index, - allowed, - offset, - mouseOverHandle; - - if ( o.disabled ) { - return false; - } - - this.elementSize = { - width: this.element.outerWidth(), - height: this.element.outerHeight() - }; - this.elementOffset = this.element.offset(); - - position = { x: event.pageX, y: event.pageY }; - normValue = this._normValueFromMouse( position ); - distance = this._valueMax() - this._valueMin() + 1; - self = this; - this.handles.each(function( i ) { - var thisDistance = Math.abs( normValue - self.values(i) ); - if ( distance > thisDistance ) { - distance = thisDistance; - closestHandle = $( this ); - index = i; - } - }); - - // workaround for bug #3736 (if both handles of a range are at 0, - // the first is always used as the one with least distance, - // and moving it is obviously prevented by preventing negative ranges) - if( o.range === true && this.values(1) === o.min ) { - index += 1; - closestHandle = $( this.handles[index] ); - } - - allowed = this._start( event, index ); - if ( allowed === false ) { - return false; - } - this._mouseSliding = true; - - self._handleIndex = index; - - closestHandle - .addClass( "ui-state-active" ) - .focus(); - - offset = closestHandle.offset(); - mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" ); - this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { - left: event.pageX - offset.left - ( closestHandle.width() / 2 ), - top: event.pageY - offset.top - - ( closestHandle.height() / 2 ) - - ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) - - ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) + - ( parseInt( closestHandle.css("marginTop"), 10 ) || 0) - }; - - if ( !this.handles.hasClass( "ui-state-hover" ) ) { - this._slide( event, index, normValue ); - } - this._animateOff = true; - return true; - }, - - _mouseStart: function( event ) { - return true; - }, - - _mouseDrag: function( event ) { - var position = { x: event.pageX, y: event.pageY }, - normValue = this._normValueFromMouse( position ); - - this._slide( event, this._handleIndex, normValue ); - - return false; - }, - - _mouseStop: function( event ) { - this.handles.removeClass( "ui-state-active" ); - this._mouseSliding = false; - - this._stop( event, this._handleIndex ); - this._change( event, this._handleIndex ); - - this._handleIndex = null; - this._clickOffset = null; - this._animateOff = false; - - return false; - }, - - _detectOrientation: function() { - this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; - }, - - _normValueFromMouse: function( position ) { - var pixelTotal, - pixelMouse, - percentMouse, - valueTotal, - valueMouse; - - if ( this.orientation === "horizontal" ) { - pixelTotal = this.elementSize.width; - pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 ); - } else { - pixelTotal = this.elementSize.height; - pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 ); - } - - percentMouse = ( pixelMouse / pixelTotal ); - if ( percentMouse > 1 ) { - percentMouse = 1; - } - if ( percentMouse < 0 ) { - percentMouse = 0; - } - if ( this.orientation === "vertical" ) { - percentMouse = 1 - percentMouse; - } - - valueTotal = this._valueMax() - this._valueMin(); - valueMouse = this._valueMin() + percentMouse * valueTotal; - - return this._trimAlignValue( valueMouse ); - }, - - _start: function( event, index ) { - var uiHash = { - handle: this.handles[ index ], - value: this.value() - }; - if ( this.options.values && this.options.values.length ) { - uiHash.value = this.values( index ); - uiHash.values = this.values(); - } - return this._trigger( "start", event, uiHash ); - }, - - _slide: function( event, index, newVal ) { - var otherVal, - newValues, - allowed; - - if ( this.options.values && this.options.values.length ) { - otherVal = this.values( index ? 0 : 1 ); - - if ( ( this.options.values.length === 2 && this.options.range === true ) && - ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) ) - ) { - newVal = otherVal; - } - - if ( newVal !== this.values( index ) ) { - newValues = this.values(); - newValues[ index ] = newVal; - // A slide can be canceled by returning false from the slide callback - allowed = this._trigger( "slide", event, { - handle: this.handles[ index ], - value: newVal, - values: newValues - } ); - otherVal = this.values( index ? 0 : 1 ); - if ( allowed !== false ) { - this.values( index, newVal, true ); - } - } - } else { - if ( newVal !== this.value() ) { - // A slide can be canceled by returning false from the slide callback - allowed = this._trigger( "slide", event, { - handle: this.handles[ index ], - value: newVal - } ); - if ( allowed !== false ) { - this.value( newVal ); - } - } - } - }, - - _stop: function( event, index ) { - var uiHash = { - handle: this.handles[ index ], - value: this.value() - }; - if ( this.options.values && this.options.values.length ) { - uiHash.value = this.values( index ); - uiHash.values = this.values(); - } - - this._trigger( "stop", event, uiHash ); - }, - - _change: function( event, index ) { - if ( !this._keySliding && !this._mouseSliding ) { - var uiHash = { - handle: this.handles[ index ], - value: this.value() - }; - if ( this.options.values && this.options.values.length ) { - uiHash.value = this.values( index ); - uiHash.values = this.values(); - } - - this._trigger( "change", event, uiHash ); - } - }, - - value: function( newValue ) { - if ( arguments.length ) { - this.options.value = this._trimAlignValue( newValue ); - this._refreshValue(); - this._change( null, 0 ); - return; - } - - return this._value(); - }, - - values: function( index, newValue ) { - var vals, - newValues, - i; - - if ( arguments.length > 1 ) { - this.options.values[ index ] = this._trimAlignValue( newValue ); - this._refreshValue(); - this._change( null, index ); - return; - } - - if ( arguments.length ) { - if ( $.isArray( arguments[ 0 ] ) ) { - vals = this.options.values; - newValues = arguments[ 0 ]; - for ( i = 0; i < vals.length; i += 1 ) { - vals[ i ] = this._trimAlignValue( newValues[ i ] ); - this._change( null, i ); - } - this._refreshValue(); - } else { - if ( this.options.values && this.options.values.length ) { - return this._values( index ); - } else { - return this.value(); - } - } - } else { - return this._values(); - } - }, - - _setOption: function( key, value ) { - var i, - valsLength = 0; - - if ( $.isArray( this.options.values ) ) { - valsLength = this.options.values.length; - } - - $.Widget.prototype._setOption.apply( this, arguments ); - - switch ( key ) { - case "disabled": - if ( value ) { - this.handles.filter( ".ui-state-focus" ).blur(); - this.handles.removeClass( "ui-state-hover" ); - this.handles.propAttr( "disabled", true ); - this.element.addClass( "ui-disabled" ); - } else { - this.handles.propAttr( "disabled", false ); - this.element.removeClass( "ui-disabled" ); - } - break; - case "orientation": - this._detectOrientation(); - this.element - .removeClass( "ui-slider-horizontal ui-slider-vertical" ) - .addClass( "ui-slider-" + this.orientation ); - this._refreshValue(); - break; - case "value": - this._animateOff = true; - this._refreshValue(); - this._change( null, 0 ); - this._animateOff = false; - break; - case "values": - this._animateOff = true; - this._refreshValue(); - for ( i = 0; i < valsLength; i += 1 ) { - this._change( null, i ); - } - this._animateOff = false; - break; - } - }, - - //internal value getter - // _value() returns value trimmed by min and max, aligned by step - _value: function() { - var val = this.options.value; - val = this._trimAlignValue( val ); - - return val; - }, - - //internal values getter - // _values() returns array of values trimmed by min and max, aligned by step - // _values( index ) returns single value trimmed by min and max, aligned by step - _values: function( index ) { - var val, - vals, - i; - - if ( arguments.length ) { - val = this.options.values[ index ]; - val = this._trimAlignValue( val ); - - return val; - } else { - // .slice() creates a copy of the array - // this copy gets trimmed by min and max and then returned - vals = this.options.values.slice(); - for ( i = 0; i < vals.length; i+= 1) { - vals[ i ] = this._trimAlignValue( vals[ i ] ); - } - - return vals; - } - }, - - // returns the step-aligned value that val is closest to, between (inclusive) min and max - _trimAlignValue: function( val ) { - if ( val <= this._valueMin() ) { - return this._valueMin(); - } - if ( val >= this._valueMax() ) { - return this._valueMax(); - } - var step = ( this.options.step > 0 ) ? this.options.step : 1, - valModStep = (val - this._valueMin()) % step, - alignValue = val - valModStep; - - if ( Math.abs(valModStep) * 2 >= step ) { - alignValue += ( valModStep > 0 ) ? step : ( -step ); - } - - // Since JavaScript has problems with large floats, round - // the final value to 5 digits after the decimal point (see #4124) - return parseFloat( alignValue.toFixed(5) ); - }, - - _valueMin: function() { - return this.options.min; - }, - - _valueMax: function() { - return this.options.max; - }, - - _refreshValue: function() { - var oRange = this.options.range, - o = this.options, - self = this, - animate = ( !this._animateOff ) ? o.animate : false, - valPercent, - _set = {}, - lastValPercent, - value, - valueMin, - valueMax; - - if ( this.options.values && this.options.values.length ) { - this.handles.each(function( i, j ) { - valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax() - self._valueMin() ) * 100; - _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; - $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); - if ( self.options.range === true ) { - if ( self.orientation === "horizontal" ) { - if ( i === 0 ) { - self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate ); - } - if ( i === 1 ) { - self.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); - } - } else { - if ( i === 0 ) { - self.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate ); - } - if ( i === 1 ) { - self.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } ); - } - } - } - lastValPercent = valPercent; - }); - } else { - value = this.value(); - valueMin = this._valueMin(); - valueMax = this._valueMax(); - valPercent = ( valueMax !== valueMin ) ? - ( value - valueMin ) / ( valueMax - valueMin ) * 100 : - 0; - _set[ self.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; - this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); - - if ( oRange === "min" && this.orientation === "horizontal" ) { - this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate ); - } - if ( oRange === "max" && this.orientation === "horizontal" ) { - this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); - } - if ( oRange === "min" && this.orientation === "vertical" ) { - this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate ); - } - if ( oRange === "max" && this.orientation === "vertical" ) { - this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } ); - } - } - } - -}); - -$.extend( $.ui.slider, { - version: "1.8.21" -}); - -}(jQuery)); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.sortable.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.sortable.js deleted file mode 100644 index 45fbb1ce..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.sortable.js +++ /dev/null @@ -1,1082 +0,0 @@ -/*! - * jQuery UI Sortable 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Sortables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -$.widget("ui.sortable", $.ui.mouse, { - widgetEventPrefix: "sort", - ready: false, - options: { - appendTo: "parent", - axis: false, - connectWith: false, - containment: false, - cursor: 'auto', - cursorAt: false, - dropOnEmpty: true, - forcePlaceholderSize: false, - forceHelperSize: false, - grid: false, - handle: false, - helper: "original", - items: '> *', - opacity: false, - placeholder: false, - revert: false, - scroll: true, - scrollSensitivity: 20, - scrollSpeed: 20, - scope: "default", - tolerance: "intersect", - zIndex: 1000 - }, - _create: function() { - - var o = this.options; - this.containerCache = {}; - this.element.addClass("ui-sortable"); - - //Get the items - this.refresh(); - - //Let's determine if the items are being displayed horizontally - this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false; - - //Let's determine the parent's offset - this.offset = this.element.offset(); - - //Initialize mouse events for interaction - this._mouseInit(); - - //We're ready to go - this.ready = true - - }, - - destroy: function() { - $.Widget.prototype.destroy.call( this ); - this.element - .removeClass("ui-sortable ui-sortable-disabled"); - this._mouseDestroy(); - - for ( var i = this.items.length - 1; i >= 0; i-- ) - this.items[i].item.removeData(this.widgetName + "-item"); - - return this; - }, - - _setOption: function(key, value){ - if ( key === "disabled" ) { - this.options[ key ] = value; - - this.widget() - [ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" ); - } else { - // Don't call widget base _setOption for disable as it adds ui-state-disabled class - $.Widget.prototype._setOption.apply(this, arguments); - } - }, - - _mouseCapture: function(event, overrideHandle) { - var that = this; - - if (this.reverting) { - return false; - } - - if(this.options.disabled || this.options.type == 'static') return false; - - //We have to refresh the items data once first - this._refreshItems(event); - - //Find out if the clicked node (or one of its parents) is a actual item in this.items - var currentItem = null, self = this, nodes = $(event.target).parents().each(function() { - if($.data(this, that.widgetName + '-item') == self) { - currentItem = $(this); - return false; - } - }); - if($.data(event.target, that.widgetName + '-item') == self) currentItem = $(event.target); - - if(!currentItem) return false; - if(this.options.handle && !overrideHandle) { - var validHandle = false; - - $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; }); - if(!validHandle) return false; - } - - this.currentItem = currentItem; - this._removeCurrentsFromItems(); - return true; - - }, - - _mouseStart: function(event, overrideHandle, noActivation) { - - var o = this.options, self = this; - this.currentContainer = this; - - //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture - this.refreshPositions(); - - //Create and append the visible helper - this.helper = this._createHelper(event); - - //Cache the helper size - this._cacheHelperProportions(); - - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ - - //Cache the margins of the original element - this._cacheMargins(); - - //Get the next scrolling parent - this.scrollParent = this.helper.scrollParent(); - - //The element's absolute position on the page minus margins - this.offset = this.currentItem.offset(); - this.offset = { - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - - $.extend(this.offset, { - click: { //Where the click happened, relative to the element - left: event.pageX - this.offset.left, - top: event.pageY - this.offset.top - }, - parent: this._getParentOffset(), - relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper - }); - - // Only after we got the offset, we can change the helper's position to absolute - // TODO: Still need to figure out a way to make relative sorting possible - this.helper.css("position", "absolute"); - this.cssPosition = this.helper.css("position"); - - //Generate the original position - this.originalPosition = this._generatePosition(event); - this.originalPageX = event.pageX; - this.originalPageY = event.pageY; - - //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied - (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); - - //Cache the former DOM position - this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; - - //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way - if(this.helper[0] != this.currentItem[0]) { - this.currentItem.hide(); - } - - //Create the placeholder - this._createPlaceholder(); - - //Set a containment if given in the options - if(o.containment) - this._setContainment(); - - if(o.cursor) { // cursor option - if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor"); - $('body').css("cursor", o.cursor); - } - - if(o.opacity) { // opacity option - if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity"); - this.helper.css("opacity", o.opacity); - } - - if(o.zIndex) { // zIndex option - if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex"); - this.helper.css("zIndex", o.zIndex); - } - - //Prepare scrolling - if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') - this.overflowOffset = this.scrollParent.offset(); - - //Call callbacks - this._trigger("start", event, this._uiHash()); - - //Recache the helper size - if(!this._preserveHelperProportions) - this._cacheHelperProportions(); - - - //Post 'activate' events to possible containers - if(!noActivation) { - for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); } - } - - //Prepare possible droppables - if($.ui.ddmanager) - $.ui.ddmanager.current = this; - - if ($.ui.ddmanager && !o.dropBehaviour) - $.ui.ddmanager.prepareOffsets(this, event); - - this.dragging = true; - - this.helper.addClass("ui-sortable-helper"); - this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position - return true; - - }, - - _mouseDrag: function(event) { - - //Compute the helpers position - this.position = this._generatePosition(event); - this.positionAbs = this._convertPositionTo("absolute"); - - if (!this.lastPositionAbs) { - this.lastPositionAbs = this.positionAbs; - } - - //Do scrolling - if(this.options.scroll) { - var o = this.options, scrolled = false; - if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') { - - if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) - this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; - else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) - this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; - - if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) - this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; - else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) - this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; - - } else { - - if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) - scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) - scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - - if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) - scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) - scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - - } - - if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) - $.ui.ddmanager.prepareOffsets(this, event); - } - - //Regenerate the absolute position used for position checks - this.positionAbs = this._convertPositionTo("absolute"); - - //Set the helper position - if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; - if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; - - //Rearrange - for (var i = this.items.length - 1; i >= 0; i--) { - - //Cache variables and intersection, continue if no intersection - var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item); - if (!intersection) continue; - - if(itemElement != this.currentItem[0] //cannot intersect with itself - && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before - && !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked - && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true) - //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container - ) { - - this.direction = intersection == 1 ? "down" : "up"; - - if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) { - this._rearrange(event, item); - } else { - break; - } - - this._trigger("change", event, this._uiHash()); - break; - } - } - - //Post events to containers - this._contactContainers(event); - - //Interconnect with droppables - if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); - - //Call callbacks - this._trigger('sort', event, this._uiHash()); - - this.lastPositionAbs = this.positionAbs; - return false; - - }, - - _mouseStop: function(event, noPropagation) { - - if(!event) return; - - //If we are using droppables, inform the manager about the drop - if ($.ui.ddmanager && !this.options.dropBehaviour) - $.ui.ddmanager.drop(this, event); - - if(this.options.revert) { - var self = this; - var cur = self.placeholder.offset(); - - self.reverting = true; - - $(this.helper).animate({ - left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft), - top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) - }, parseInt(this.options.revert, 10) || 500, function() { - self._clear(event); - }); - } else { - this._clear(event, noPropagation); - } - - return false; - - }, - - cancel: function() { - - var self = this; - - if(this.dragging) { - - this._mouseUp({ target: null }); - - if(this.options.helper == "original") - this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); - else - this.currentItem.show(); - - //Post deactivating events to containers - for (var i = this.containers.length - 1; i >= 0; i--){ - this.containers[i]._trigger("deactivate", null, self._uiHash(this)); - if(this.containers[i].containerCache.over) { - this.containers[i]._trigger("out", null, self._uiHash(this)); - this.containers[i].containerCache.over = 0; - } - } - - } - - if (this.placeholder) { - //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! - if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]); - if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove(); - - $.extend(this, { - helper: null, - dragging: false, - reverting: false, - _noFinalSort: null - }); - - if(this.domPosition.prev) { - $(this.domPosition.prev).after(this.currentItem); - } else { - $(this.domPosition.parent).prepend(this.currentItem); - } - } - - return this; - - }, - - serialize: function(o) { - - var items = this._getItemsAsjQuery(o && o.connected); - var str = []; o = o || {}; - - $(items).each(function() { - var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/)); - if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2])); - }); - - if(!str.length && o.key) { - str.push(o.key + '='); - } - - return str.join('&'); - - }, - - toArray: function(o) { - - var items = this._getItemsAsjQuery(o && o.connected); - var ret = []; o = o || {}; - - items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); }); - return ret; - - }, - - /* Be careful with the following core functions */ - _intersectsWith: function(item) { - - var x1 = this.positionAbs.left, - x2 = x1 + this.helperProportions.width, - y1 = this.positionAbs.top, - y2 = y1 + this.helperProportions.height; - - var l = item.left, - r = l + item.width, - t = item.top, - b = t + item.height; - - var dyClick = this.offset.click.top, - dxClick = this.offset.click.left; - - var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r; - - if( this.options.tolerance == "pointer" - || this.options.forcePointerForContainers - || (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height']) - ) { - return isOverElement; - } else { - - return (l < x1 + (this.helperProportions.width / 2) // Right Half - && x2 - (this.helperProportions.width / 2) < r // Left Half - && t < y1 + (this.helperProportions.height / 2) // Bottom Half - && y2 - (this.helperProportions.height / 2) < b ); // Top Half - - } - }, - - _intersectsWithPointer: function(item) { - - var isOverElementHeight = (this.options.axis === 'x') || $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), - isOverElementWidth = (this.options.axis === 'y') || $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), - isOverElement = isOverElementHeight && isOverElementWidth, - verticalDirection = this._getDragVerticalDirection(), - horizontalDirection = this._getDragHorizontalDirection(); - - if (!isOverElement) - return false; - - return this.floating ? - ( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 ) - : ( verticalDirection && (verticalDirection == "down" ? 2 : 1) ); - - }, - - _intersectsWithSides: function(item) { - - var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height), - isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width), - verticalDirection = this._getDragVerticalDirection(), - horizontalDirection = this._getDragHorizontalDirection(); - - if (this.floating && horizontalDirection) { - return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf)); - } else { - return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf)); - } - - }, - - _getDragVerticalDirection: function() { - var delta = this.positionAbs.top - this.lastPositionAbs.top; - return delta != 0 && (delta > 0 ? "down" : "up"); - }, - - _getDragHorizontalDirection: function() { - var delta = this.positionAbs.left - this.lastPositionAbs.left; - return delta != 0 && (delta > 0 ? "right" : "left"); - }, - - refresh: function(event) { - this._refreshItems(event); - this.refreshPositions(); - return this; - }, - - _connectWith: function() { - var options = this.options; - return options.connectWith.constructor == String - ? [options.connectWith] - : options.connectWith; - }, - - _getItemsAsjQuery: function(connected) { - - var self = this; - var items = []; - var queries = []; - var connectWith = this._connectWith(); - - if(connectWith && connected) { - for (var i = connectWith.length - 1; i >= 0; i--){ - var cur = $(connectWith[i]); - for (var j = cur.length - 1; j >= 0; j--){ - var inst = $.data(cur[j], this.widgetName); - if(inst && inst != this && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]); - } - }; - }; - } - - queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]); - - for (var i = queries.length - 1; i >= 0; i--){ - queries[i][0].each(function() { - items.push(this); - }); - }; - - return $(items); - - }, - - _removeCurrentsFromItems: function() { - - var list = this.currentItem.find(":data(" + this.widgetName + "-item)"); - - for (var i=0; i < this.items.length; i++) { - - for (var j=0; j < list.length; j++) { - if(list[j] == this.items[i].item[0]) - this.items.splice(i,1); - }; - - }; - - }, - - _refreshItems: function(event) { - - this.items = []; - this.containers = [this]; - var items = this.items; - var self = this; - var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]]; - var connectWith = this._connectWith(); - - if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down - for (var i = connectWith.length - 1; i >= 0; i--){ - var cur = $(connectWith[i]); - for (var j = cur.length - 1; j >= 0; j--){ - var inst = $.data(cur[j], this.widgetName); - if(inst && inst != this && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); - this.containers.push(inst); - } - }; - }; - } - - for (var i = queries.length - 1; i >= 0; i--) { - var targetData = queries[i][1]; - var _queries = queries[i][0]; - - for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) { - var item = $(_queries[j]); - - item.data(this.widgetName + '-item', targetData); // Data for target checking (mouse manager) - - items.push({ - item: item, - instance: targetData, - width: 0, height: 0, - left: 0, top: 0 - }); - }; - }; - - }, - - refreshPositions: function(fast) { - - //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change - if(this.offsetParent && this.helper) { - this.offset.parent = this._getParentOffset(); - } - - for (var i = this.items.length - 1; i >= 0; i--){ - var item = this.items[i]; - - //We ignore calculating positions of all connected containers when we're not over them - if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0]) - continue; - - var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; - - if (!fast) { - item.width = t.outerWidth(); - item.height = t.outerHeight(); - } - - var p = t.offset(); - item.left = p.left; - item.top = p.top; - }; - - if(this.options.custom && this.options.custom.refreshContainers) { - this.options.custom.refreshContainers.call(this); - } else { - for (var i = this.containers.length - 1; i >= 0; i--){ - var p = this.containers[i].element.offset(); - this.containers[i].containerCache.left = p.left; - this.containers[i].containerCache.top = p.top; - this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); - this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); - }; - } - - return this; - }, - - _createPlaceholder: function(that) { - - var self = that || this, o = self.options; - - if(!o.placeholder || o.placeholder.constructor == String) { - var className = o.placeholder; - o.placeholder = { - element: function() { - - var el = $(document.createElement(self.currentItem[0].nodeName)) - .addClass(className || self.currentItem[0].className+" ui-sortable-placeholder") - .removeClass("ui-sortable-helper")[0]; - - if(!className) - el.style.visibility = "hidden"; - - return el; - }, - update: function(container, p) { - - // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that - // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified - if(className && !o.forcePlaceholderSize) return; - - //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item - if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); }; - if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); }; - } - }; - } - - //Create the placeholder - self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem)); - - //Append it after the actual current item - self.currentItem.after(self.placeholder); - - //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) - o.placeholder.update(self, self.placeholder); - - }, - - _contactContainers: function(event) { - - // get innermost container that intersects with item - var innermostContainer = null, innermostIndex = null; - - - for (var i = this.containers.length - 1; i >= 0; i--){ - - // never consider a container that's located within the item itself - if($.ui.contains(this.currentItem[0], this.containers[i].element[0])) - continue; - - if(this._intersectsWith(this.containers[i].containerCache)) { - - // if we've already found a container and it's more "inner" than this, then continue - if(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0])) - continue; - - innermostContainer = this.containers[i]; - innermostIndex = i; - - } else { - // container doesn't intersect. trigger "out" event if necessary - if(this.containers[i].containerCache.over) { - this.containers[i]._trigger("out", event, this._uiHash(this)); - this.containers[i].containerCache.over = 0; - } - } - - } - - // if no intersecting containers found, return - if(!innermostContainer) return; - - // move the item into the container if it's not there already - if(this.containers.length === 1) { - this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); - this.containers[innermostIndex].containerCache.over = 1; - } else if(this.currentContainer != this.containers[innermostIndex]) { - - //When entering a new container, we will find the item with the least distance and append our item near it - var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top']; - for (var j = this.items.length - 1; j >= 0; j--) { - if(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue; - var cur = this.containers[innermostIndex].floating ? this.items[j].item.offset().left : this.items[j].item.offset().top; - if(Math.abs(cur - base) < dist) { - dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; - this.direction = (cur - base > 0) ? 'down' : 'up'; - } - } - - if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled - return; - - this.currentContainer = this.containers[innermostIndex]; - itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); - this._trigger("change", event, this._uiHash()); - this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); - - //Update the placeholder - this.options.placeholder.update(this.currentContainer, this.placeholder); - - this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); - this.containers[innermostIndex].containerCache.over = 1; - } - - - }, - - _createHelper: function(event) { - - var o = this.options; - var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem); - - if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already - $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); - - if(helper[0] == this.currentItem[0]) - this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") }; - - if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width()); - if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height()); - - return helper; - - }, - - _adjustOffsetFromHelper: function(obj) { - if (typeof obj == 'string') { - obj = obj.split(' '); - } - if ($.isArray(obj)) { - obj = {left: +obj[0], top: +obj[1] || 0}; - } - if ('left' in obj) { - this.offset.click.left = obj.left + this.margins.left; - } - if ('right' in obj) { - this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; - } - if ('top' in obj) { - this.offset.click.top = obj.top + this.margins.top; - } - if ('bottom' in obj) { - this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; - } - }, - - _getParentOffset: function() { - - - //Get the offsetParent and cache its position - this.offsetParent = this.helper.offsetParent(); - var po = this.offsetParent.offset(); - - // This is a special case where we need to modify a offset calculated on start, since the following happened: - // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent - // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that - // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag - if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { - po.left += this.scrollParent.scrollLeft(); - po.top += this.scrollParent.scrollTop(); - } - - if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information - || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix - po = { top: 0, left: 0 }; - - return { - top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), - left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) - }; - - }, - - _getRelativeOffset: function() { - - if(this.cssPosition == "relative") { - var p = this.currentItem.position(); - return { - top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), - left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() - }; - } else { - return { top: 0, left: 0 }; - } - - }, - - _cacheMargins: function() { - this.margins = { - left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), - top: (parseInt(this.currentItem.css("marginTop"),10) || 0) - }; - }, - - _cacheHelperProportions: function() { - this.helperProportions = { - width: this.helper.outerWidth(), - height: this.helper.outerHeight() - }; - }, - - _setContainment: function() { - - var o = this.options; - if(o.containment == 'parent') o.containment = this.helper[0].parentNode; - if(o.containment == 'document' || o.containment == 'window') this.containment = [ - 0 - this.offset.relative.left - this.offset.parent.left, - 0 - this.offset.relative.top - this.offset.parent.top, - $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, - ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top - ]; - - if(!(/^(document|window|parent)$/).test(o.containment)) { - var ce = $(o.containment)[0]; - var co = $(o.containment).offset(); - var over = ($(ce).css("overflow") != 'hidden'); - - this.containment = [ - co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, - co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, - co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, - co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - ]; - } - - }, - - _convertPositionTo: function(d, pos) { - - if(!pos) pos = this.position; - var mod = d == "absolute" ? 1 : -1; - var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - - return { - top: ( - pos.top // The absolute mouse position - + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) - - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) - ), - left: ( - pos.left // The absolute mouse position - + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) - - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) - ) - }; - - }, - - _generatePosition: function(event) { - - var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - - // This is another very weird special case that only happens for relative elements: - // 1. If the css position is relative - // 2. and the scroll parent is the document or similar to the offset parent - // we have to refresh the relative offset during the scroll so there are no jumps - if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) { - this.offset.relative = this._getRelativeOffset(); - } - - var pageX = event.pageX; - var pageY = event.pageY; - - /* - * - Position constraining - - * Constrain the position to a mix of grid, containment. - */ - - if(this.originalPosition) { //If we are not dragging yet, we won't check for options - - if(this.containment) { - if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left; - if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top; - if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left; - if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top; - } - - if(o.grid) { - var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; - pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; - - var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; - pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; - } - - } - - return { - top: ( - pageY // The absolute mouse position - - this.offset.click.top // Click offset (relative to the element) - - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.top // The offsetParent's offset without borders (offset + border) - + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) - ), - left: ( - pageX // The absolute mouse position - - this.offset.click.left // Click offset (relative to the element) - - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.left // The offsetParent's offset without borders (offset + border) - + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) - ) - }; - - }, - - _rearrange: function(event, i, a, hardRefresh) { - - a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling)); - - //Various things done here to improve the performance: - // 1. we create a setTimeout, that calls refreshPositions - // 2. on the instance, we have a counter variable, that get's higher after every append - // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same - // 4. this lets only the last addition to the timeout stack through - this.counter = this.counter ? ++this.counter : 1; - var self = this, counter = this.counter; - - window.setTimeout(function() { - if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove - },0); - - }, - - _clear: function(event, noPropagation) { - - this.reverting = false; - // We delay all events that have to be triggered to after the point where the placeholder has been removed and - // everything else normalized again - var delayedTriggers = [], self = this; - - // We first have to update the dom position of the actual currentItem - // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088) - if(!this._noFinalSort && this.currentItem.parent().length) this.placeholder.before(this.currentItem); - this._noFinalSort = null; - - if(this.helper[0] == this.currentItem[0]) { - for(var i in this._storedCSS) { - if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = ''; - } - this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); - } else { - this.currentItem.show(); - } - - if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); }); - if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed - if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element - if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); }); - for (var i = this.containers.length - 1; i >= 0; i--){ - if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) { - delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - } - }; - }; - - //Post events to containers - for (var i = this.containers.length - 1; i >= 0; i--){ - if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - if(this.containers[i].containerCache.over) { - delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - this.containers[i].containerCache.over = 0; - } - } - - //Do what was originally in plugins - if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor - if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset opacity - if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index - - this.dragging = false; - if(this.cancelHelperRemoval) { - if(!noPropagation) { - this._trigger("beforeStop", event, this._uiHash()); - for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events - this._trigger("stop", event, this._uiHash()); - } - return false; - } - - if(!noPropagation) this._trigger("beforeStop", event, this._uiHash()); - - //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! - this.placeholder[0].parentNode.removeChild(this.placeholder[0]); - - if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null; - - if(!noPropagation) { - for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events - this._trigger("stop", event, this._uiHash()); - } - - this.fromOutside = false; - return true; - - }, - - _trigger: function() { - if ($.Widget.prototype._trigger.apply(this, arguments) === false) { - this.cancel(); - } - }, - - _uiHash: function(inst) { - var self = inst || this; - return { - helper: self.helper, - placeholder: self.placeholder || $([]), - position: self.position, - originalPosition: self.originalPosition, - offset: self.positionAbs, - item: self.currentItem, - sender: inst ? inst.element : null - }; - } - -}); - -$.extend($.ui.sortable, { - version: "1.8.21" -}); - -})(jQuery); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.tabs.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.tabs.js deleted file mode 100644 index d9e2fdf8..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.tabs.js +++ /dev/null @@ -1,757 +0,0 @@ -/*! - * jQuery UI Tabs 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Tabs - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -var tabId = 0, - listId = 0; - -function getNextTabId() { - return ++tabId; -} - -function getNextListId() { - return ++listId; -} - -$.widget( "ui.tabs", { - options: { - add: null, - ajaxOptions: null, - cache: false, - cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true } - collapsible: false, - disable: null, - disabled: [], - enable: null, - event: "click", - fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 } - idPrefix: "ui-tabs-", - load: null, - panelTemplate: "
      ", - remove: null, - select: null, - show: null, - spinner: "Loading…", - tabTemplate: "
    • #{label}
    • " - }, - - _create: function() { - this._tabify( true ); - }, - - _setOption: function( key, value ) { - if ( key == "selected" ) { - if (this.options.collapsible && value == this.options.selected ) { - return; - } - this.select( value ); - } else { - this.options[ key ] = value; - this._tabify(); - } - }, - - _tabId: function( a ) { - return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) || - this.options.idPrefix + getNextTabId(); - }, - - _sanitizeSelector: function( hash ) { - // we need this because an id may contain a ":" - return hash.replace( /:/g, "\\:" ); - }, - - _cookie: function() { - var cookie = this.cookie || - ( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() ); - return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) ); - }, - - _ui: function( tab, panel ) { - return { - tab: tab, - panel: panel, - index: this.anchors.index( tab ) - }; - }, - - _cleanup: function() { - // restore all former loading tabs labels - this.lis.filter( ".ui-state-processing" ) - .removeClass( "ui-state-processing" ) - .find( "span:data(label.tabs)" ) - .each(function() { - var el = $( this ); - el.html( el.data( "label.tabs" ) ).removeData( "label.tabs" ); - }); - }, - - _tabify: function( init ) { - var self = this, - o = this.options, - fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash - - this.list = this.element.find( "ol,ul" ).eq( 0 ); - this.lis = $( " > li:has(a[href])", this.list ); - this.anchors = this.lis.map(function() { - return $( "a", this )[ 0 ]; - }); - this.panels = $( [] ); - - this.anchors.each(function( i, a ) { - var href = $( a ).attr( "href" ); - // For dynamically created HTML that contains a hash as href IE < 8 expands - // such href to the full page url with hash and then misinterprets tab as ajax. - // Same consideration applies for an added tab with a fragment identifier - // since a[href=#fragment-identifier] does unexpectedly not match. - // Thus normalize href attribute... - var hrefBase = href.split( "#" )[ 0 ], - baseEl; - if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] || - ( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) { - href = a.hash; - a.href = href; - } - - // inline tab - if ( fragmentId.test( href ) ) { - self.panels = self.panels.add( self.element.find( self._sanitizeSelector( href ) ) ); - // remote tab - // prevent loading the page itself if href is just "#" - } else if ( href && href !== "#" ) { - // required for restore on destroy - $.data( a, "href.tabs", href ); - - // TODO until #3808 is fixed strip fragment identifier from url - // (IE fails to load from such url) - $.data( a, "load.tabs", href.replace( /#.*$/, "" ) ); - - var id = self._tabId( a ); - a.href = "#" + id; - var $panel = self.element.find( "#" + id ); - if ( !$panel.length ) { - $panel = $( o.panelTemplate ) - .attr( "id", id ) - .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) - .insertAfter( self.panels[ i - 1 ] || self.list ); - $panel.data( "destroy.tabs", true ); - } - self.panels = self.panels.add( $panel ); - // invalid tab href - } else { - o.disabled.push( i ); - } - }); - - // initialization from scratch - if ( init ) { - // attach necessary classes for styling - this.element.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" ); - this.list.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ); - this.lis.addClass( "ui-state-default ui-corner-top" ); - this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ); - - // Selected tab - // use "selected" option or try to retrieve: - // 1. from fragment identifier in url - // 2. from cookie - // 3. from selected class attribute on
    • - if ( o.selected === undefined ) { - if ( location.hash ) { - this.anchors.each(function( i, a ) { - if ( a.hash == location.hash ) { - o.selected = i; - return false; - } - }); - } - if ( typeof o.selected !== "number" && o.cookie ) { - o.selected = parseInt( self._cookie(), 10 ); - } - if ( typeof o.selected !== "number" && this.lis.filter( ".ui-tabs-selected" ).length ) { - o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) ); - } - o.selected = o.selected || ( this.lis.length ? 0 : -1 ); - } else if ( o.selected === null ) { // usage of null is deprecated, TODO remove in next release - o.selected = -1; - } - - // sanity check - default to first tab... - o.selected = ( ( o.selected >= 0 && this.anchors[ o.selected ] ) || o.selected < 0 ) - ? o.selected - : 0; - - // Take disabling tabs via class attribute from HTML - // into account and update option properly. - // A selected tab cannot become disabled. - o.disabled = $.unique( o.disabled.concat( - $.map( this.lis.filter( ".ui-state-disabled" ), function( n, i ) { - return self.lis.index( n ); - }) - ) ).sort(); - - if ( $.inArray( o.selected, o.disabled ) != -1 ) { - o.disabled.splice( $.inArray( o.selected, o.disabled ), 1 ); - } - - // highlight selected tab - this.panels.addClass( "ui-tabs-hide" ); - this.lis.removeClass( "ui-tabs-selected ui-state-active" ); - // check for length avoids error when initializing empty list - if ( o.selected >= 0 && this.anchors.length ) { - self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) ).removeClass( "ui-tabs-hide" ); - this.lis.eq( o.selected ).addClass( "ui-tabs-selected ui-state-active" ); - - // seems to be expected behavior that the show callback is fired - self.element.queue( "tabs", function() { - self._trigger( "show", null, - self._ui( self.anchors[ o.selected ], self.element.find( self._sanitizeSelector( self.anchors[ o.selected ].hash ) )[ 0 ] ) ); - }); - - this.load( o.selected ); - } - - // clean up to avoid memory leaks in certain versions of IE 6 - // TODO: namespace this event - $( window ).bind( "unload", function() { - self.lis.add( self.anchors ).unbind( ".tabs" ); - self.lis = self.anchors = self.panels = null; - }); - // update selected after add/remove - } else { - o.selected = this.lis.index( this.lis.filter( ".ui-tabs-selected" ) ); - } - - // update collapsible - // TODO: use .toggleClass() - this.element[ o.collapsible ? "addClass" : "removeClass" ]( "ui-tabs-collapsible" ); - - // set or update cookie after init and add/remove respectively - if ( o.cookie ) { - this._cookie( o.selected, o.cookie ); - } - - // disable tabs - for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) { - $( li )[ $.inArray( i, o.disabled ) != -1 && - // TODO: use .toggleClass() - !$( li ).hasClass( "ui-tabs-selected" ) ? "addClass" : "removeClass" ]( "ui-state-disabled" ); - } - - // reset cache if switching from cached to not cached - if ( o.cache === false ) { - this.anchors.removeData( "cache.tabs" ); - } - - // remove all handlers before, tabify may run on existing tabs after add or option change - this.lis.add( this.anchors ).unbind( ".tabs" ); - - if ( o.event !== "mouseover" ) { - var addState = function( state, el ) { - if ( el.is( ":not(.ui-state-disabled)" ) ) { - el.addClass( "ui-state-" + state ); - } - }; - var removeState = function( state, el ) { - el.removeClass( "ui-state-" + state ); - }; - this.lis.bind( "mouseover.tabs" , function() { - addState( "hover", $( this ) ); - }); - this.lis.bind( "mouseout.tabs", function() { - removeState( "hover", $( this ) ); - }); - this.anchors.bind( "focus.tabs", function() { - addState( "focus", $( this ).closest( "li" ) ); - }); - this.anchors.bind( "blur.tabs", function() { - removeState( "focus", $( this ).closest( "li" ) ); - }); - } - - // set up animations - var hideFx, showFx; - if ( o.fx ) { - if ( $.isArray( o.fx ) ) { - hideFx = o.fx[ 0 ]; - showFx = o.fx[ 1 ]; - } else { - hideFx = showFx = o.fx; - } - } - - // Reset certain styles left over from animation - // and prevent IE's ClearType bug... - function resetStyle( $el, fx ) { - $el.css( "display", "" ); - if ( !$.support.opacity && fx.opacity ) { - $el[ 0 ].style.removeAttribute( "filter" ); - } - } - - // Show a tab... - var showTab = showFx - ? function( clicked, $show ) { - $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" ); - $show.hide().removeClass( "ui-tabs-hide" ) // avoid flicker that way - .animate( showFx, showFx.duration || "normal", function() { - resetStyle( $show, showFx ); - self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) ); - }); - } - : function( clicked, $show ) { - $( clicked ).closest( "li" ).addClass( "ui-tabs-selected ui-state-active" ); - $show.removeClass( "ui-tabs-hide" ); - self._trigger( "show", null, self._ui( clicked, $show[ 0 ] ) ); - }; - - // Hide a tab, $show is optional... - var hideTab = hideFx - ? function( clicked, $hide ) { - $hide.animate( hideFx, hideFx.duration || "normal", function() { - self.lis.removeClass( "ui-tabs-selected ui-state-active" ); - $hide.addClass( "ui-tabs-hide" ); - resetStyle( $hide, hideFx ); - self.element.dequeue( "tabs" ); - }); - } - : function( clicked, $hide, $show ) { - self.lis.removeClass( "ui-tabs-selected ui-state-active" ); - $hide.addClass( "ui-tabs-hide" ); - self.element.dequeue( "tabs" ); - }; - - // attach tab event handler, unbind to avoid duplicates from former tabifying... - this.anchors.bind( o.event + ".tabs", function() { - var el = this, - $li = $(el).closest( "li" ), - $hide = self.panels.filter( ":not(.ui-tabs-hide)" ), - $show = self.element.find( self._sanitizeSelector( el.hash ) ); - - // If tab is already selected and not collapsible or tab disabled or - // or is already loading or click callback returns false stop here. - // Check if click handler returns false last so that it is not executed - // for a disabled or loading tab! - if ( ( $li.hasClass( "ui-tabs-selected" ) && !o.collapsible) || - $li.hasClass( "ui-state-disabled" ) || - $li.hasClass( "ui-state-processing" ) || - self.panels.filter( ":animated" ).length || - self._trigger( "select", null, self._ui( this, $show[ 0 ] ) ) === false ) { - this.blur(); - return false; - } - - o.selected = self.anchors.index( this ); - - self.abort(); - - // if tab may be closed - if ( o.collapsible ) { - if ( $li.hasClass( "ui-tabs-selected" ) ) { - o.selected = -1; - - if ( o.cookie ) { - self._cookie( o.selected, o.cookie ); - } - - self.element.queue( "tabs", function() { - hideTab( el, $hide ); - }).dequeue( "tabs" ); - - this.blur(); - return false; - } else if ( !$hide.length ) { - if ( o.cookie ) { - self._cookie( o.selected, o.cookie ); - } - - self.element.queue( "tabs", function() { - showTab( el, $show ); - }); - - // TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171 - self.load( self.anchors.index( this ) ); - - this.blur(); - return false; - } - } - - if ( o.cookie ) { - self._cookie( o.selected, o.cookie ); - } - - // show new tab - if ( $show.length ) { - if ( $hide.length ) { - self.element.queue( "tabs", function() { - hideTab( el, $hide ); - }); - } - self.element.queue( "tabs", function() { - showTab( el, $show ); - }); - - self.load( self.anchors.index( this ) ); - } else { - throw "jQuery UI Tabs: Mismatching fragment identifier."; - } - - // Prevent IE from keeping other link focussed when using the back button - // and remove dotted border from clicked link. This is controlled via CSS - // in modern browsers; blur() removes focus from address bar in Firefox - // which can become a usability and annoying problem with tabs('rotate'). - if ( $.browser.msie ) { - this.blur(); - } - }); - - // disable click in any case - this.anchors.bind( "click.tabs", function(){ - return false; - }); - }, - - _getIndex: function( index ) { - // meta-function to give users option to provide a href string instead of a numerical index. - // also sanitizes numerical indexes to valid values. - if ( typeof index == "string" ) { - index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) ); - } - - return index; - }, - - destroy: function() { - var o = this.options; - - this.abort(); - - this.element - .unbind( ".tabs" ) - .removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" ) - .removeData( "tabs" ); - - this.list.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ); - - this.anchors.each(function() { - var href = $.data( this, "href.tabs" ); - if ( href ) { - this.href = href; - } - var $this = $( this ).unbind( ".tabs" ); - $.each( [ "href", "load", "cache" ], function( i, prefix ) { - $this.removeData( prefix + ".tabs" ); - }); - }); - - this.lis.unbind( ".tabs" ).add( this.panels ).each(function() { - if ( $.data( this, "destroy.tabs" ) ) { - $( this ).remove(); - } else { - $( this ).removeClass([ - "ui-state-default", - "ui-corner-top", - "ui-tabs-selected", - "ui-state-active", - "ui-state-hover", - "ui-state-focus", - "ui-state-disabled", - "ui-tabs-panel", - "ui-widget-content", - "ui-corner-bottom", - "ui-tabs-hide" - ].join( " " ) ); - } - }); - - if ( o.cookie ) { - this._cookie( null, o.cookie ); - } - - return this; - }, - - add: function( url, label, index ) { - if ( index === undefined ) { - index = this.anchors.length; - } - - var self = this, - o = this.options, - $li = $( o.tabTemplate.replace( /#\{href\}/g, url ).replace( /#\{label\}/g, label ) ), - id = !url.indexOf( "#" ) ? url.replace( "#", "" ) : this._tabId( $( "a", $li )[ 0 ] ); - - $li.addClass( "ui-state-default ui-corner-top" ).data( "destroy.tabs", true ); - - // try to find an existing element before creating a new one - var $panel = self.element.find( "#" + id ); - if ( !$panel.length ) { - $panel = $( o.panelTemplate ) - .attr( "id", id ) - .data( "destroy.tabs", true ); - } - $panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" ); - - if ( index >= this.lis.length ) { - $li.appendTo( this.list ); - $panel.appendTo( this.list[ 0 ].parentNode ); - } else { - $li.insertBefore( this.lis[ index ] ); - $panel.insertBefore( this.panels[ index ] ); - } - - o.disabled = $.map( o.disabled, function( n, i ) { - return n >= index ? ++n : n; - }); - - this._tabify(); - - if ( this.anchors.length == 1 ) { - o.selected = 0; - $li.addClass( "ui-tabs-selected ui-state-active" ); - $panel.removeClass( "ui-tabs-hide" ); - this.element.queue( "tabs", function() { - self._trigger( "show", null, self._ui( self.anchors[ 0 ], self.panels[ 0 ] ) ); - }); - - this.load( 0 ); - } - - this._trigger( "add", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); - return this; - }, - - remove: function( index ) { - index = this._getIndex( index ); - var o = this.options, - $li = this.lis.eq( index ).remove(), - $panel = this.panels.eq( index ).remove(); - - // If selected tab was removed focus tab to the right or - // in case the last tab was removed the tab to the left. - if ( $li.hasClass( "ui-tabs-selected" ) && this.anchors.length > 1) { - this.select( index + ( index + 1 < this.anchors.length ? 1 : -1 ) ); - } - - o.disabled = $.map( - $.grep( o.disabled, function(n, i) { - return n != index; - }), - function( n, i ) { - return n >= index ? --n : n; - }); - - this._tabify(); - - this._trigger( "remove", null, this._ui( $li.find( "a" )[ 0 ], $panel[ 0 ] ) ); - return this; - }, - - enable: function( index ) { - index = this._getIndex( index ); - var o = this.options; - if ( $.inArray( index, o.disabled ) == -1 ) { - return; - } - - this.lis.eq( index ).removeClass( "ui-state-disabled" ); - o.disabled = $.grep( o.disabled, function( n, i ) { - return n != index; - }); - - this._trigger( "enable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); - return this; - }, - - disable: function( index ) { - index = this._getIndex( index ); - var self = this, o = this.options; - // cannot disable already selected tab - if ( index != o.selected ) { - this.lis.eq( index ).addClass( "ui-state-disabled" ); - - o.disabled.push( index ); - o.disabled.sort(); - - this._trigger( "disable", null, this._ui( this.anchors[ index ], this.panels[ index ] ) ); - } - - return this; - }, - - select: function( index ) { - index = this._getIndex( index ); - if ( index == -1 ) { - if ( this.options.collapsible && this.options.selected != -1 ) { - index = this.options.selected; - } else { - return this; - } - } - this.anchors.eq( index ).trigger( this.options.event + ".tabs" ); - return this; - }, - - load: function( index ) { - index = this._getIndex( index ); - var self = this, - o = this.options, - a = this.anchors.eq( index )[ 0 ], - url = $.data( a, "load.tabs" ); - - this.abort(); - - // not remote or from cache - if ( !url || this.element.queue( "tabs" ).length !== 0 && $.data( a, "cache.tabs" ) ) { - this.element.dequeue( "tabs" ); - return; - } - - // load remote from here on - this.lis.eq( index ).addClass( "ui-state-processing" ); - - if ( o.spinner ) { - var span = $( "span", a ); - span.data( "label.tabs", span.html() ).html( o.spinner ); - } - - this.xhr = $.ajax( $.extend( {}, o.ajaxOptions, { - url: url, - success: function( r, s ) { - self.element.find( self._sanitizeSelector( a.hash ) ).html( r ); - - // take care of tab labels - self._cleanup(); - - if ( o.cache ) { - $.data( a, "cache.tabs", true ); - } - - self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) ); - try { - o.ajaxOptions.success( r, s ); - } - catch ( e ) {} - }, - error: function( xhr, s, e ) { - // take care of tab labels - self._cleanup(); - - self._trigger( "load", null, self._ui( self.anchors[ index ], self.panels[ index ] ) ); - try { - // Passing index avoid a race condition when this method is - // called after the user has selected another tab. - // Pass the anchor that initiated this request allows - // loadError to manipulate the tab content panel via $(a.hash) - o.ajaxOptions.error( xhr, s, index, a ); - } - catch ( e ) {} - } - } ) ); - - // last, so that load event is fired before show... - self.element.dequeue( "tabs" ); - - return this; - }, - - abort: function() { - // stop possibly running animations - this.element.queue( [] ); - this.panels.stop( false, true ); - - // "tabs" queue must not contain more than two elements, - // which are the callbacks for the latest clicked tab... - this.element.queue( "tabs", this.element.queue( "tabs" ).splice( -2, 2 ) ); - - // terminate pending requests from other tabs - if ( this.xhr ) { - this.xhr.abort(); - delete this.xhr; - } - - // take care of tab labels - this._cleanup(); - return this; - }, - - url: function( index, url ) { - this.anchors.eq( index ).removeData( "cache.tabs" ).data( "load.tabs", url ); - return this; - }, - - length: function() { - return this.anchors.length; - } -}); - -$.extend( $.ui.tabs, { - version: "1.8.21" -}); - -/* - * Tabs Extensions - */ - -/* - * Rotate - */ -$.extend( $.ui.tabs.prototype, { - rotation: null, - rotate: function( ms, continuing ) { - var self = this, - o = this.options; - - var rotate = self._rotate || ( self._rotate = function( e ) { - clearTimeout( self.rotation ); - self.rotation = setTimeout(function() { - var t = o.selected; - self.select( ++t < self.anchors.length ? t : 0 ); - }, ms ); - - if ( e ) { - e.stopPropagation(); - } - }); - - var stop = self._unrotate || ( self._unrotate = !continuing - ? function(e) { - if (e.clientX) { // in case of a true click - self.rotate(null); - } - } - : function( e ) { - rotate(); - }); - - // start rotation - if ( ms ) { - this.element.bind( "tabsshow", rotate ); - this.anchors.bind( o.event + ".tabs", stop ); - rotate(); - // stop rotation - } else { - clearTimeout( self.rotation ); - this.element.unbind( "tabsshow", rotate ); - this.anchors.unbind( o.event + ".tabs", stop ); - delete this._rotate; - delete this._unrotate; - } - - return this; - } -}); - -})( jQuery ); diff --git a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.widget.js b/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.widget.js deleted file mode 100644 index 4f7aea7f..00000000 --- a/www/plugins-dist/jquery_ui/prive/javascript/ui/jquery.ui.widget.js +++ /dev/null @@ -1,272 +0,0 @@ -/*! - * jQuery UI Widget 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function( $, undefined ) { - -// jQuery 1.4+ -if ( $.cleanData ) { - var _cleanData = $.cleanData; - $.cleanData = function( elems ) { - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { - try { - $( elem ).triggerHandler( "remove" ); - // http://bugs.jquery.com/ticket/8235 - } catch( e ) {} - } - _cleanData( elems ); - }; -} else { - var _remove = $.fn.remove; - $.fn.remove = function( selector, keepData ) { - return this.each(function() { - if ( !keepData ) { - if ( !selector || $.filter( selector, [ this ] ).length ) { - $( "*", this ).add( [ this ] ).each(function() { - try { - $( this ).triggerHandler( "remove" ); - // http://bugs.jquery.com/ticket/8235 - } catch( e ) {} - }); - } - } - return _remove.call( $(this), selector, keepData ); - }); - }; -} - -$.widget = function( name, base, prototype ) { - var namespace = name.split( "." )[ 0 ], - fullName; - name = name.split( "." )[ 1 ]; - fullName = namespace + "-" + name; - - if ( !prototype ) { - prototype = base; - base = $.Widget; - } - - // create selector for plugin - $.expr[ ":" ][ fullName ] = function( elem ) { - return !!$.data( elem, name ); - }; - - $[ namespace ] = $[ namespace ] || {}; - $[ namespace ][ name ] = function( options, element ) { - // allow instantiation without initializing for simple inheritance - if ( arguments.length ) { - this._createWidget( options, element ); - } - }; - - var basePrototype = new base(); - // we need to make the options hash a property directly on the new instance - // otherwise we'll modify the options hash on the prototype that we're - // inheriting from -// $.each( basePrototype, function( key, val ) { -// if ( $.isPlainObject(val) ) { -// basePrototype[ key ] = $.extend( {}, val ); -// } -// }); - basePrototype.options = $.extend( true, {}, basePrototype.options ); - $[ namespace ][ name ].prototype = $.extend( true, basePrototype, { - namespace: namespace, - widgetName: name, - widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name, - widgetBaseClass: fullName - }, prototype ); - - $.widget.bridge( name, $[ namespace ][ name ] ); -}; - -$.widget.bridge = function( name, object ) { - $.fn[ name ] = function( options ) { - var isMethodCall = typeof options === "string", - args = Array.prototype.slice.call( arguments, 1 ), - returnValue = this; - - // allow multiple hashes to be passed on init - options = !isMethodCall && args.length ? - $.extend.apply( null, [ true, options ].concat(args) ) : - options; - - // prevent calls to internal methods - if ( isMethodCall && options.charAt( 0 ) === "_" ) { - return returnValue; - } - - if ( isMethodCall ) { - this.each(function() { - var instance = $.data( this, name ), - methodValue = instance && $.isFunction( instance[options] ) ? - instance[ options ].apply( instance, args ) : - instance; - // TODO: add this back in 1.9 and use $.error() (see #5972) -// if ( !instance ) { -// throw "cannot call methods on " + name + " prior to initialization; " + -// "attempted to call method '" + options + "'"; -// } -// if ( !$.isFunction( instance[options] ) ) { -// throw "no such method '" + options + "' for " + name + " widget instance"; -// } -// var methodValue = instance[ options ].apply( instance, args ); - if ( methodValue !== instance && methodValue !== undefined ) { - returnValue = methodValue; - return false; - } - }); - } else { - this.each(function() { - var instance = $.data( this, name ); - if ( instance ) { - instance.option( options || {} )._init(); - } else { - $.data( this, name, new object( options, this ) ); - } - }); - } - - return returnValue; - }; -}; - -$.Widget = function( options, element ) { - // allow instantiation without initializing for simple inheritance - if ( arguments.length ) { - this._createWidget( options, element ); - } -}; - -$.Widget.prototype = { - widgetName: "widget", - widgetEventPrefix: "", - options: { - disabled: false - }, - _createWidget: function( options, element ) { - // $.widget.bridge stores the plugin instance, but we do it anyway - // so that it's stored even before the _create function runs - $.data( element, this.widgetName, this ); - this.element = $( element ); - this.options = $.extend( true, {}, - this.options, - this._getCreateOptions(), - options ); - - var self = this; - this.element.bind( "remove." + this.widgetName, function() { - self.destroy(); - }); - - this._create(); - this._trigger( "create" ); - this._init(); - }, - _getCreateOptions: function() { - return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ]; - }, - _create: function() {}, - _init: function() {}, - - destroy: function() { - this.element - .unbind( "." + this.widgetName ) - .removeData( this.widgetName ); - this.widget() - .unbind( "." + this.widgetName ) - .removeAttr( "aria-disabled" ) - .removeClass( - this.widgetBaseClass + "-disabled " + - "ui-state-disabled" ); - }, - - widget: function() { - return this.element; - }, - - option: function( key, value ) { - var options = key; - - if ( arguments.length === 0 ) { - // don't return a reference to the internal hash - return $.extend( {}, this.options ); - } - - if (typeof key === "string" ) { - if ( value === undefined ) { - return this.options[ key ]; - } - options = {}; - options[ key ] = value; - } - - this._setOptions( options ); - - return this; - }, - _setOptions: function( options ) { - var self = this; - $.each( options, function( key, value ) { - self._setOption( key, value ); - }); - - return this; - }, - _setOption: function( key, value ) { - this.options[ key ] = value; - - if ( key === "disabled" ) { - this.widget() - [ value ? "addClass" : "removeClass"]( - this.widgetBaseClass + "-disabled" + " " + - "ui-state-disabled" ) - .attr( "aria-disabled", value ); - } - - return this; - }, - - enable: function() { - return this._setOption( "disabled", false ); - }, - disable: function() { - return this._setOption( "disabled", true ); - }, - - _trigger: function( type, event, data ) { - var prop, orig, - callback = this.options[ type ]; - - data = data || {}; - event = $.Event( event ); - event.type = ( type === this.widgetEventPrefix ? - type : - this.widgetEventPrefix + type ).toLowerCase(); - // the original event may come from any element - // so we need to reset the target on the new event - event.target = this.element[ 0 ]; - - // copy original event properties over to the new event - orig = event.originalEvent; - if ( orig ) { - for ( prop in orig ) { - if ( !( prop in event ) ) { - event[ prop ] = orig[ prop ]; - } - } - } - - this.element.trigger( event, data ); - - return !( $.isFunction(callback) && - callback.call( this.element[0], event, data ) === false || - event.isDefaultPrevented() ); - } -}; - -})( jQuery ); diff --git a/www/plugins-dist/mediabox/colorbox/black-greybox/colorbox.css b/www/plugins-dist/mediabox/colorbox/black-greybox/colorbox.css index c46b511a..bf4d0e2d 100644 --- a/www/plugins-dist/mediabox/colorbox/black-greybox/colorbox.css +++ b/www/plugins-dist/mediabox/colorbox/black-greybox/colorbox.css @@ -1,53 +1,58 @@ /* - ColorBox Core Style - The following rules are the styles that are consistant between themes. - Avoid changing this area to maintain compatability with future versions of ColorBox. + Colorbox Core Style: + The following CSS is consistent between example themes and should not be altered. */ -#colorbox, #cboxLoadedContent {-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:4999; overflow:hidden;} +#cboxWrapper {max-width:none;} #cboxOverlay{position:fixed; width:100%; height:100%;} #cboxMiddleLeft, #cboxBottomLeft{clear:left;} -#cboxContent{position:relative; overflow:visible;} -#cboxLoadedContent{overflow:auto;} -#cboxLoadedContent iframe{display:block; width:100%; height:100%; border:0;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} #cboxTitle{margin:0;} -#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} -.cboxPhoto{float:left; margin:auto; border:0; display:block;} -.cboxIframe{width:100%; height:100%; display:block; border:0;} +.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} +#colorbox, #cboxContent, #cboxLoadedContent{-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} /* - ColorBox example user style - The following rules are ordered and tabbed in a way that represents the - order/nesting of the generated HTML, so that the structure easier to understand. + User Style: + Change the following styles to modify the appearance of Colorbox. They are + ordered & tabbed in a way that represents the nesting of the generated HTML. */ -#cboxOverlay{background:#000;} - -#colorbox{} - #cboxTopLeft{width:14px; height:14px; background:url(images/controls.png) 0 0 no-repeat;} - #cboxTopCenter{height:14px; background:url(images/border.png) top left repeat-x;} - #cboxTopRight{width:14px; height:14px; background:url(images/controls.png) -36px 0 no-repeat;} - #cboxBottomLeft{width:14px; height:43px; background:url(images/controls.png) 0 -32px no-repeat;} - #cboxBottomCenter{height:43px; background:url(images/border.png) bottom left repeat-x;} - #cboxBottomRight{width:14px; height:43px; background:url(images/controls.png) -36px -32px no-repeat;} - #cboxMiddleLeft{width:14px; background:url(images/controls.png) -175px 0 repeat-y;} - #cboxMiddleRight{width:14px; background:url(images/controls.png) -211px 0 repeat-y;} - #cboxContent{background:#fff;} +#cboxOverlay{background:#000; opacity: 0.9; filter: alpha(opacity = 90);} +#colorbox{outline:0;} + #cboxTopLeft{width:14px; height:14px; background:url(images/controls.png) no-repeat 0 0;} + #cboxTopCenter{height:14px; background:url(images/border.png) repeat-x top left;} + #cboxTopRight{width:14px; height:14px; background:url(images/controls.png) no-repeat -36px 0;} + #cboxBottomLeft{width:14px; height:43px; background:url(images/controls.png) no-repeat 0 -32px;} + #cboxBottomCenter{height:43px; background:url(images/border.png) repeat-x bottom left;} + #cboxBottomRight{width:14px; height:43px; background:url(images/controls.png) no-repeat -36px -32px;} + #cboxMiddleLeft{width:14px; background:url(images/controls.png) repeat-y -175px 0;} + #cboxMiddleRight{width:14px; background:url(images/controls.png) repeat-y -211px 0;} + #cboxContent{background:#fff; overflow:visible;} + .cboxIframe{background:#fff;} + #cboxError{padding:50px; border:1px solid #ccc;} #cboxLoadedContent{margin-bottom:5px;} - #cboxLoadingOverlay{background:url(images/loading_background.png) center center no-repeat;} - #cboxLoadingGraphic{background:url(images/loading.gif) center center no-repeat;} - #cboxTitle{position:absolute; bottom:-25px; left:0; text-align:center; width:100%; font-weight:bold; color:#7C7C7C;} - #cboxCurrent{position:absolute; bottom:-25px; left:58px; font-weight:bold; color:#7C7C7C;} + #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;} + #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;} + #cboxTitle{position:absolute; bottom:-28px; left:0; text-align:center; width:100%; font-weight:bold; color:#7C7C7C;} + #cboxCurrent{position:absolute; bottom:-28px; left:58px; font-weight:bold; color:#7C7C7C;} + + /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ + #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; position:absolute; bottom:-29px; background:url(images/controls.png) no-repeat 0px 0px; width:23px; height:23px; text-indent:-9999px;} - #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{position:absolute; bottom:-29px; background:url(images/controls.png) 0px 0px no-repeat; width:23px; height:23px; text-indent:-9999px;} + /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ + #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} + #cboxPrevious{left:0px; background-position: -51px -25px;} #cboxPrevious:hover{background-position:-51px 0px;} #cboxNext{left:27px; background-position:-75px -25px;} #cboxNext:hover{background-position:-75px 0px;} #cboxClose{right:0; background-position:-100px -25px;} #cboxClose:hover{background-position:-100px 0px;} - - .cboxSlideshow_on #cboxSlideshow{background-position:-150px -25px; right:27px;} + + .cboxSlideshow_on #cboxSlideshow{background-position:-125px 0px; right:27px;} .cboxSlideshow_on #cboxSlideshow:hover{background-position:-150px 0px;} - .cboxSlideshow_off #cboxSlideshow{background-position:-125px -25px; right:27px;} + .cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px; right:27px;} .cboxSlideshow_off #cboxSlideshow:hover{background-position:-125px 0px;} \ No newline at end of file diff --git a/www/plugins-dist/mediabox/colorbox/black-greybox/colorbox_rtl.css b/www/plugins-dist/mediabox/colorbox/black-greybox/colorbox_rtl.css index b946a1c3..b3efbc0e 100644 --- a/www/plugins-dist/mediabox/colorbox/black-greybox/colorbox_rtl.css +++ b/www/plugins-dist/mediabox/colorbox/black-greybox/colorbox_rtl.css @@ -1,53 +1,58 @@ /* - ColorBox Core Style - The following rules are the styles that are consistant between themes. - Avoid changing this area to maintain compatability with future versions of ColorBox. + Colorbox Core Style: + The following CSS is consistent between example themes and should not be altered. */ -#colorbox, #cboxLoadedContent {-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:4999; overflow:hidden;} +#cboxWrapper {max-width:none;} #cboxOverlay{position:fixed; width:100%; height:100%;} #cboxMiddleLeft, #cboxBottomLeft{clear:left;} -#cboxContent{position:relative; overflow:visible;} -#cboxLoadedContent{overflow:auto;} -#cboxLoadedContent iframe{display:block; width:100%; height:100%; border:0;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} #cboxTitle{margin:0;} -#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} -.cboxPhoto{float:left; margin:auto; border:0; display:block;} -.cboxIframe{width:100%; height:100%; display:block; border:0;} +.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} +#colorbox, #cboxContent, #cboxLoadedContent{-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} /* - ColorBox example user style - The following rules are ordered and tabbed in a way that represents the - order/nesting of the generated HTML, so that the structure easier to understand. + User Style: + Change the following styles to modify the appearance of Colorbox. They are + ordered & tabbed in a way that represents the nesting of the generated HTML. */ -#cboxOverlay{background:#000;} - -#colorbox{} - #cboxTopLeft{width:14px; height:14px; background:url(images/controls.png) 0 0 no-repeat;} - #cboxTopCenter{height:14px; background:url(images/border.png) top left repeat-x;} - #cboxTopRight{width:14px; height:14px; background:url(images/controls.png) -36px 0 no-repeat;} - #cboxBottomLeft{width:14px; height:43px; background:url(images/controls.png) 0 -32px no-repeat;} - #cboxBottomCenter{height:43px; background:url(images/border.png) bottom left repeat-x;} - #cboxBottomRight{width:14px; height:43px; background:url(images/controls.png) -36px -32px no-repeat;} - #cboxMiddleLeft{width:14px; background:url(images/controls.png) -175px 0 repeat-y;} - #cboxMiddleRight{width:14px; background:url(images/controls.png) -211px 0 repeat-y;} - #cboxContent{background:#fff;} +#cboxOverlay{background:#000; opacity: 0.9; filter: alpha(opacity = 90);} +#colorbox{outline:0;} + #cboxTopLeft{width:14px; height:14px; background:url(images/controls.png) no-repeat 0 0;} + #cboxTopCenter{height:14px; background:url(images/border.png) repeat-x top left;} + #cboxTopRight{width:14px; height:14px; background:url(images/controls.png) no-repeat -36px 0;} + #cboxBottomLeft{width:14px; height:43px; background:url(images/controls.png) no-repeat 0 -32px;} + #cboxBottomCenter{height:43px; background:url(images/border.png) repeat-x bottom left;} + #cboxBottomRight{width:14px; height:43px; background:url(images/controls.png) no-repeat -36px -32px;} + #cboxMiddleLeft{width:14px; background:url(images/controls.png) repeat-y -175px 0;} + #cboxMiddleRight{width:14px; background:url(images/controls.png) repeat-y -211px 0;} + #cboxContent{background:#fff; overflow:visible;} + .cboxIframe{background:#fff;} + #cboxError{padding:50px; border:1px solid #ccc;} #cboxLoadedContent{margin-bottom:5px;} - #cboxLoadingOverlay{background:url(images/loading_background.png) center center no-repeat;} - #cboxLoadingGraphic{background:url(images/loading.gif) center center no-repeat;} - #cboxTitle{position:absolute; bottom:-25px; left:0; text-align:center; width:100%; font-weight:bold; color:#7C7C7C;} - #cboxCurrent{position:absolute; bottom:-25px; right:55px; font-weight:normal; font-size: 0.8em; color:#7C7C7C;} + #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;} + #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;} + #cboxTitle{position:absolute; bottom:-28px; right:0; text-align:center; width:100%; font-weight:bold; color:#7C7C7C;} + #cboxCurrent{position:absolute; bottom:-28px; right:58px; font-weight:bold; color:#7C7C7C;} + + /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ + #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; position:absolute; bottom:-29px; background:url(images/controls.png) no-repeat 0px 0px; width:23px; height:23px; text-indent:-9999px;} - #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{position:absolute; bottom:-29px; background:url(images/controls.png) 0px 0px no-repeat; width:23px; height:23px; text-indent:-9999px;} + /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ + #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} + #cboxPrevious{right:0px; background-position: -75px -25px;} #cboxPrevious:hover{background-position:-75px 0px;} #cboxNext{right:27px; background-position:-51px -25px;} #cboxNext:hover{background-position:-51px 0px;} #cboxClose{left:0; background-position:-100px -25px;} #cboxClose:hover{background-position:-100px 0px;} - - .cboxSlideshow_on #cboxSlideshow{background-position:-150px -25px; left:27px;} + + .cboxSlideshow_on #cboxSlideshow{background-position:-125px 0px; left:27px;} .cboxSlideshow_on #cboxSlideshow:hover{background-position:-150px 0px;} - .cboxSlideshow_off #cboxSlideshow{background-position:-225px -25px; left:27px;} - .cboxSlideshow_off #cboxSlideshow:hover{background-position:-225px 0px;} + .cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px; left:27px;} + .cboxSlideshow_off #cboxSlideshow:hover{background-position:-125px 0px;} \ No newline at end of file diff --git a/www/plugins-dist/mediabox/colorbox/black-greybox/images/border.png b/www/plugins-dist/mediabox/colorbox/black-greybox/images/border.png index df13bb6daf79307915e7dd1cf29d48730a50c29d..c1cd1a2a45151cea73c0c40177201da68d844636 100644 GIT binary patch delta 121 zcmV-<0EYjg0gC~U8FB&u002I;dei^_08&XrK~#7F#mBJ?z#t3-QTu~n0MaoDD>5Zr zsG+kgIl@IYh*CW1j(hK+){3zXj b8LhPkG&Uop3qSa#00000NkvXXu0mjf(#r%#_cJ3IgX|Nrdi)AEw_&=sw(>SO2rz7zXOs8a y|1?j_m84^d9=cP0Prm%@XXf@Y16Dl9G~IT3Xc9)Z^ph#l^+1udkq>pj%s8x3{-FJw3a- zyTZc4tgNhJVPUGOs=2wjTUuIPU0s)#m&C-xo0^)sxw(yvjeLB3^78U4D=RH6Ei5c7 zO-)TME-o-IFwM=)IXOA(>+9v^gnk!Dk@A&OhZFMI5;>mGBP$cHrd(PIyySo z*x1a>%u7p4z`(#lLPF^0=SN3JF)=YpN=iXNLGSMFH#av(NJvFRMNv^v@$vCHJ3Bl) zJTo&hNl8iR>FGvBMo>^t>+0%WUS93(?OFDTAPEK`obwEHsK0ZFDr>E}i?Y_RgTwGjIQc{VDiO$Z>?Ck7QQ&aZ#_VDoVc6N4O zUti|s<#>2_pP!#Tzq!=)s&!wEQp@vyFIk z{PDjEVaj?D5iW-YT3uNKm4}U(^%`EbF)X6((0>FEmT~{c?^irN{KFeN?;{+<$4f#T zeZG%Ym$yXwHI!Ke8d9MGL=LPJPD4Z}{~FDn3-#|Yr4(O%L_( z-8BOsr9@MQnW3r?nDqg^vq(z>QPy}US#hdxo=XywP_alW;o0x&G} z%WLo;5He55-a{xm(=U>z+@5Efj_eBcqJ;?qAgnhZ6%rTj<_WffUd*6JPxuMkqhVpF zysW1rge}beoIFJ>o%J1A^7jxZAc^0@Jdcibq__>-@|lH=}EO&zkNlRJ3pG( zAiR0%L%-j6AJ(FMDB#gPR7?I%qp8t8^vVat)cR05sZQIk2rGqAmN%jhin|nup}TYz zxl3E{fP5RdOEsXoVKOaxmx}Tf?^1rzIQ_HNg!`j<&*oDS-iI9|LgcmG$onuy7^F8I z;RiN77k(d#as6REi8fae%{m0Fd-ncm9GbgTOGkzuR zBT+IO)0_Zi`FD2Iv}#)c5C{QoAb|n_keC7ikeD03;(uL4VSArd0mMRBWn|@zz?2xI zKqLnF;Z?TZUN|BDU&TUjD*5Wk!=Xs@E7?!p9vS`-hnFmTy`-(Josj$QPa2}_cq|bu%W?aQz9KevLtIdg1V7n-UzTYWV zc=eYw*K$I9;X6R$reC65Ai<}L5-E@h!SQ~y7eqMl-53-?PC2AR3Zz1aUH%8%!lnnH z5c1@|2;(zI-=jo`@tT+Z8XjKm=aA`r4i)dxJ@enC|7bpp>FrDBL%qV;*EECK*ECv% z=C4cDLVdM`2BD%pbp1eoeK@;Ne~qt0sOvjT`9cjbLTH6nXoXg2g;r>VR%nG*XoW+S z@E|f&$oH43g!eY177D)^DeU16+MDuIKM8SH}54j=iwzZ zQb<}XF@pZeW8PqCrjQ$Z@*Y_Pnkz&jM%CwRqLAmiDtw?}!oSkOxx(7xrsDtr002ov JPDHLkV1i>c`Cb43 literal 2324 zcmV+v3G4QWP)Ll?s;a81tE;T6tgWrBudlDOv$MCix4F2uxw*Nzxw*T# zy1To(zP`S{zrVo1z{0}9#KgqK#l_0X%FN8n&CSiu&d$%y&d<-!(9qD*($dt_)Y#bA z+1c6K+uPpW-s9ur<>lq(<>lw*=IH0=>FDU`>FMg}>FVn0>+0(4>+9_7?CtIC?(OaG z?(XmJ@9^;O@$vEU^78ZZ^Yruc_V)Jp`1twx`Tzg_)ICMG000LINklZmOh>`*k3z-&Uq94csGxdn^EN1I1zr zJex{Gz~PLPN3}>CsO$cMT36h0u}ZPe>*fg0h2#N`Zwv~&AV6?Ka78^| zd0rb8cb*hv2IE4sk+!;g-SO=LfHKkj1iPBzQJ8|Cf19kEUaZR8|5P4_pj-e2@dT zAOX%v&qFHb7?wr+-7e@mw?n8?e%Ls7T;ITi=YZ8L9@lcJ}#-}4@T+Zvc+Shk1s8z=OcZH$2Y;!E5C-KdV$U&E*lE%0fhIvU$j@!5Xh6X9qQjcywz^LShOfXf5h)I1J@ z9atQ?0sp`*GDXhgSe@G*{XDK%Oo7h~2#zARfZHT;6NpeuJn%Cx;D#|PfDtPc#($uT z+=SN=xd~L{CWH5>sdObogPXkTpb6)Vl zva=kSoiV!XZ2k3RXX{#aHavLGe7rlshIy%9&By&0BOgBpICPs~R$%ro#tO`Nz%TWh z+qu9m@hYnW?tnYs&fwM)yxwUVOlM`o>8ze5pIeUK^+hoYf^Y@KH)=_|K7N09gX>Rd7!1=pPDoH`yn7o0x5qX1D-)eRzDb|CN77q`u zAQ*%5#X~YJEn`(k4i4r2$}LKL^RO!|wH*AYbGXTOgZ~ChKglM-JbU;BZDN@|5i1#l}6lknmiJoaENP`C^$`Y_t@- z_FS`gct}^0JlSwGLtN@Ze&Z=g$NVZ$f;bu%-6t#uGzu zo-d1|0jDg!kS$&v4S3a>79W+5H%IB?O$&V7XjE_gFGlrq%;N>U54`btd_eFsL~ixV z5xETtZkt$rU~s!+XG4JZ%*Xe-U+}xQ`S>v4wpf7~3fvBBZo`4wV3pMYcfcKR2iyU7 zz#VW0+yQsM9dHNyB7x8L1J}RAd-=ho_tpD>|1cSjCAIg}?E#)cFY5nne#amEc!z@B zz%$8M(fp1d2WHegDfR(h$}YrbKQp`Gr~YtM-GyW$@Wpf@HXVHT#_G!Tx8Ksq_3JC| zO#8#L+P*WpfaAWNO2lTufypc5-Ew8Z9|+IR!3MV zt-$;2s*T3x;%HCpBDtH`CgA4#sFMq+G}=X-%P-puoZdN~G1xZ0sO+1!8MuU=GykE4 u{IVUv!9IZ%Us??qm^+iYkrydaAP!aZ$kckUf6 zOhYUyq^*D!K0EI`tIp4k5+=e3QA&}JAQb?V5=ub>TSw+Q=sdFqXGaJF4yS>9?2BL; zVkiP23J@p)RO&z(u=v`ITMGk5di4mxPyoR%5NKd@ASHa>X;9~Fg^AMAV&oTC6u?3O zTZb4AokrDbDU3r>xEPnT)`xs1fw_(vnL*EAZs{5oY#Pv&$$NOepBIoD`EAIisJZw7tbVE z0M>v4z%1T@0XXsF35d!;chFRLaEve)%PST+14XZ4ENhz%3xG<1c28iNgKnpBwG>uE zV7E<2yd=z(@Y~e$y!$es(sw)dJomzCy81#YB}!O>**NuNO{xHo#{!&0c#&Pi8m8V> z{i|w#ec#`D>Cgbe*c%IYp953);*uBY^5XXhhuPF8Qg-BdGc^oykd>c`8zz9aTRkOe zgs*s|t_V}s|8i`0xD-CV{Ed)v_ zgopAHYlm}TT8c%eHDR%KI2NX*SOhS&CM?zthr(to0`|Pb1nxIK_8`R$+;1<vg4*DE8Jm`AeS|5)cB@3?)C;Pr-`DoB|| z$!5(>;Y^n?c3lQsKtRI- zd5N{d<-wwQ#yA8-5ri01YhGgQaC&sB1+sd6kb+bPa(pC%s delta 1243 zcmV<11SI?I3E>GTiBL{Q4GJ0x0000DNk~Le000250000o2m=5B03Eb@+5i9m!%$3A zMUgBRf3>x>%*@Q*-rnZs=Hlby@9*!-%*_A)|JK&lDoll?rKW_0gld7PQc_a#^!E4n z_g;6Qt*x!(=Mz?=rx{Z9j{bnVTaFT4o z&?6v~XF-Cfp>MvXyTyE?OTOCpexAp1{7?p%=`L1r z?A#afH6W+CG`XP!^~l2o~{t%K!<-D}oOOaNp}2 zUC7P#-{b2kNsG)}H*q{Pw*dq4e*|;7zyW+-5Hx`MzSEVwW4_JrzndVSWf%m-`>!xM z8_ZWxx&O+b_!(TcPPpOso08STS{>luZ)}UM^?_Ws@wFOIIt_r5Z=mQUE#MQ(_vVoA zO-o;UYAjkoGr(PV8u~I}59R(eE3tC^Rl)$FEZ`GveYI3%0|-E?_iyWSC?Te-M1M7+uKH=6EOYH|J ztSeIZggal}et?qoMT-0LPJLg(!MVv+60SKgKkKIbb3j?U}6FL{ol z$K{tO`c$k%5~DMIoE_>*f0FMbSI!?)*?^0x3>g-<$cLBU7pQm9~?h# zDm0rIMbY~a>mTSc<)`naIj|E?j~RHs_RrLpETh4iq_}Tp>-+wF8GOiX37n}fnck7q zjP)fy|G56er~EN0gXD+b*EB&nPhaxM_t*57RBMrsgTa8j?itWie{vmA9Q1v>FPZuN z-RR!;r-%BIf&Wo!4qklUQJ>2DlIdXZq7&M!(Sh6S{Y$oRFuQZvSJ!{PDFc$f>Ptpv zcpspVwI5hhr0@xJ_`XF$(JMKkFX0oe-e=kNBR5XatEoi}PB?vENI|7M5GcS?3hRm# zKH=bfEH}<`d|x8WDTHwIzMDr%Syzkj2^YU7`1k)_<4^W`k!g>tV>Z_d99WHFWm z`2{zujf-{za>PAd978JNY7Z)cbT)5ruP-ra%e~G}wTijXxbw&apdf>%tDnm{r-UW| DknJ7# diff --git a/www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderBottomLeft.png b/www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderBottomLeft.png deleted file mode 100644 index 2775eba899d10d3dc6f8c4044ad69cb89a5f8499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw|3?!p1cPs@`>H$6>u0R?BQd3j6Z{H4KpFe*d zCJdtg|NlSbL?0`V#ZwaG7u>*5G5>gk!F7ua0ST$+oA`j@!JaOTAr*10r#A97C`hm- z3dKH%oOr{aLpj2LsW&>nlF|6W##ZJ(&Vq|N!)H`n4WCnOwE6XE$$JkZ%dBmlKK#!l q^N>YH$6>u0R?BQd3j6Z{H4KpFe*d zCJdtg|NlSbL?0`V#ZwaG7u>*5G5>gk!F7ua0ST$+oA`j@p`I>|Ar*0Rk8R{_P!M3f za60r>rSy%6n-)#V7EE~whgkX^aO5~8RysR6J&4z+ys8}98}g<84F4bXKSykNqt5CV sw|{E#ePx# diff --git a/www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderMiddleLeft.png b/www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderMiddleLeft.png deleted file mode 100644 index a2d63d156e008a01fde9d2d68c531c34926a924a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{Z$P6U8=aokQDYgKg5LY1m|NsA`H|O64NtXoq z1vjjXi*^HYL_A#_Ln`7}8#ZzRc@9(l|2O5zVPsZ_d99WHFWm z`2{zujf-{za>PAd978JNY7Z)cbT)5ruP@Q*%6-Zwv5L7-WU|;#pdf>%tDnm{r-UW| Dg{~b` diff --git a/www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderTopLeft.png b/www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderTopLeft.png deleted file mode 100644 index f9d458b5bba4a8cb84b9ee39a3844e258c1dcc20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw|3?!p1cPs@`>H$6>u0R?qNKH*WfByXT?c0H} z|NsBDZcF_MWbu>)`2{yHR2W1EWLV67bmi? zvo+on5)g6V?RfL6QIf diff --git a/www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderTopRight.png b/www/plugins-dist/mediabox/colorbox/black-striped/images/internet_explorer/borderTopRight.png deleted file mode 100644 index 74b8583cfbb2e62a84ef04ba01064ecb4d70e72a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw|3?!p1cPs@`>H$6>u0R?Sq^70<1<#*9zkU05 zAmji4|I_}5*Z^5PB|(0{4Ga|#78wHb4Xz)Tc+|OiK2SW!)5S5QBChw?MqY;mf#VnJ z^}ggWcLpW1DoZ@PeSjlp!DT5|UGpg|kLp?vt)3@$_tm@JIJ0M=)Av-}@ro0Ud)StJ qkbTcp`HhbYABf8t?|bZq*G4@Nf;!!};89ZJ6T-G@yGywoYi%4?- diff --git a/www/plugins-dist/mediabox/colorbox/black-striped/images/overlay.png b/www/plugins-dist/mediabox/colorbox/black-striped/images/overlay.png index 53ea98f7003cf014cda2f764a7d982e405bd1b5f..10362a423ba6a58703f70a1f6032e49342f696c6 100644 GIT binary patch delta 97 zcmdnSSUf=@nu7rd;0Vyj_7srqa#<~rYM z`hM5vuK}{FTuoQ7U0om*(wr4|H~wng*66p4SM)SQi)C-l1exaP>gTe~DWM4fMaCy@ literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^av;pY3?xs=ZJr3E3<7*YT>t<7&(6-y!NDOSA|fs> z4iv@@^0LaF09818x;TbZ%z1NeAuof1z|jlq0?ZV)A8h5lQLnD@Q>uGq<+3e(rH8NF wGFLG_IXT618W25kEc*C=-akH|?*IRp8MKNmPAJ`FsRUW)>FVdQ&MBb@0FX~HaR2}S diff --git a/www/plugins-dist/mediabox/colorbox/bootstrap/colorbox.css b/www/plugins-dist/mediabox/colorbox/bootstrap/colorbox.css index 8ca350e1..65c119ef 100644 --- a/www/plugins-dist/mediabox/colorbox/bootstrap/colorbox.css +++ b/www/plugins-dist/mediabox/colorbox/bootstrap/colorbox.css @@ -2,18 +2,18 @@ ColorBox Core Style: The following CSS is consistent between example themes and should not be altered. */ -#colorbox, #cboxLoadedContent {-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:4999; overflow:hidden;} +#cboxWrapper {max-width:none;} #cboxOverlay{position:fixed; width:100%; height:100%;} #cboxMiddleLeft, #cboxBottomLeft{clear:left;} -#cboxContent{position:relative; overflow:hidden;} -#cboxLoadedContent{overflow:auto;} -#cboxLoadedContent iframe{display:block; width:100%; height:100%; border:0;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} #cboxTitle{margin:0;} -#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} -.cboxPhoto{float:left; margin:auto; border:0; display:block;} -.cboxIframe{width:100%; height:100%; display:block; border:0;} +.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} +#colorbox, #cboxContent, #cboxLoadedContent{-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} /* User Style: @@ -21,13 +21,17 @@ */ #cboxOverlay { background: #222 } -#colorbox { background: #fff url(images/bg_content.png) left bottom repeat-x; border: 1px solid #999; border: 1px solid rgba(0, 0, 0, 0.3); *border: 1px solid #999; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -webkit-background-clip: padding-box; -moz-background-clip: padding-box; background-clip: padding-box; margin: 0 !important; } +#colorbox { background: #fff url(images/bg_content.png) left bottom repeat-x; border: 1px solid #999; border: 1px solid rgba(0, 0, 0, 0.3); *border: 1px solid #999; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -webkit-background-clip: padding-box; -moz-background-clip: padding-box; background-clip: padding-box; margin: 0 !important; outline:0; } #cboxLoadedContent { padding: 15px; margin-top: 0; margin-bottom: 59px; max-height: none; } #cboxTitle { padding: 9px 15px; position: absolute; bottom: 20px; left: 0; right: 0; font-size: 14px; font-weight: bold; color: #999; } #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose { border: 0; background-color: transparent; background-repeat: no-repeat; background-position: 50% 50%; position: absolute; bottom: 8px; width: 20px; height: 20px; line-height: 20px; text-indent: -9999px; opacity: 0.2; } +#cboxPrevious:active, +#cboxNext:active, +#cboxSlideshow:active, +#cboxClose:active {outline:0;} #cboxPrevious:hover, #cboxNext:hover, #cboxSlideshow:hover, @@ -36,7 +40,7 @@ #cboxPrevious { background-image: url(images/prev.png); left: 5px; } #cboxNext { background-image: url(images/next.png); left: 25px; } #cboxSlideshow { background-image: url(images/start.png); left: 45px; } -#cboxClose { background-image: url(images/close.png); right: 5px; } +#cboxClose { background-image: url(images/close.png); right: 5px; border:0} .cboxSlideshow_on #cboxSlideshow { background-image: url(images/stop.png) } .cboxSlideshow_off #cboxSlideshow { background-image: url(images/start.png) } #cboxLoadingGraphic { background: url(images/loading.gif) no-repeat center center } diff --git a/www/plugins-dist/mediabox/colorbox/bootstrap/colorbox_rtl.css b/www/plugins-dist/mediabox/colorbox/bootstrap/colorbox_rtl.css index 654784d1..fbabc688 100644 --- a/www/plugins-dist/mediabox/colorbox/bootstrap/colorbox_rtl.css +++ b/www/plugins-dist/mediabox/colorbox/bootstrap/colorbox_rtl.css @@ -2,18 +2,18 @@ ColorBox Core Style: The following CSS is consistent between example themes and should not be altered. */ -#colorbox, #cboxLoadedContent {-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:4999; overflow:hidden;} +#cboxWrapper {max-width:none;} #cboxOverlay{position:fixed; width:100%; height:100%;} #cboxMiddleLeft, #cboxBottomLeft{clear:left;} -#cboxContent{position:relative; overflow:hidden;} -#cboxLoadedContent{overflow:auto;} -#cboxLoadedContent iframe{display:block; width:100%; height:100%; border:0;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} #cboxTitle{margin:0;} -#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} -.cboxPhoto{float:left; margin:auto; border:0; display:block;} -.cboxIframe{width:100%; height:100%; display:block; border:0;} +.cboxPhoto{float:right; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} +#colorbox, #cboxContent, #cboxLoadedContent{-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} /* User Style: @@ -21,22 +21,27 @@ */ #cboxOverlay { background: #222 } -#colorbox { background: #fff url(images/bg_content.png) left bottom repeat-x; border: 1px solid #999; border: 1px solid rgba(0, 0, 0, 0.3); *border: 1px solid #999; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -webkit-background-clip: padding-box; -moz-background-clip: padding-box; background-clip: padding-box; margin: 0 !important; } +#colorbox { background: #fff url(images/bg_content.png) left bottom repeat-x; border: 1px solid #999; border: 1px solid rgba(0, 0, 0, 0.3); *border: 1px solid #999; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -webkit-background-clip: padding-box; -moz-background-clip: padding-box; background-clip: padding-box; margin: 0 !important; outline:0; } #cboxLoadedContent { padding: 15px; margin-top: 0; margin-bottom: 59px; max-height: none; } #cboxTitle { padding: 9px 15px; position: absolute; bottom: 20px; left: 0; right: 0; font-size: 14px; font-weight: bold; color: #999; } #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose { border: 0; background-color: transparent; background-repeat: no-repeat; background-position: 50% 50%; position: absolute; bottom: 8px; width: 20px; height: 20px; line-height: 20px; text-indent: -9999px; opacity: 0.2; } +#cboxPrevious:active, +#cboxNext:active, +#cboxSlideshow:active, +#cboxClose:active {outline:0;} #cboxPrevious:hover, #cboxNext:hover, #cboxSlideshow:hover, #cboxClose:hover { opacity: 1 } +/* modifications rtl */ #cboxCurrent { position: absolute; bottom: 9px; right: 70px; color: #999; } #cboxPrevious { background-image: url(images/next.png); right: 5px; } #cboxNext { background-image: url(images/prev.png); right: 25px; } #cboxSlideshow { background-image: url(images/start_rtl.png); right: 45px; } -#cboxClose { background-image: url(images/close.png); left: 5px; } +#cboxClose { background-image: url(images/close.png); left: 5px; border:0} .cboxSlideshow_on #cboxSlideshow { background-image: url(images/stop.png) } .cboxSlideshow_off #cboxSlideshow { background-image: url(images/start_rtl.png) } #cboxLoadingGraphic { background: url(images/loading.gif) no-repeat center center } diff --git a/www/plugins-dist/mediabox/colorbox/fancybox/colorbox.css b/www/plugins-dist/mediabox/colorbox/fancybox/colorbox.css index 0ba39b99..9361174f 100644 --- a/www/plugins-dist/mediabox/colorbox/fancybox/colorbox.css +++ b/www/plugins-dist/mediabox/colorbox/fancybox/colorbox.css @@ -1,20 +1,25 @@ /* - ColorBox Core Style - The following rules are the styles that are consistant between themes. - Avoid changing this area to maintain compatability with future versions of ColorBox. + Colorbox Core Style: + The following CSS is consistent between example themes and should not be altered. */ -#colorbox, #cboxLoadedContent {-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} -#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:4999; overflow:hidden;} +#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} +#cboxWrapper {max-width:none;} #cboxOverlay{position:fixed; width:100%; height:100%;} #cboxMiddleLeft, #cboxBottomLeft{clear:left;} -#cboxContent{position:relative; overflow:visible;} -#cboxLoadedContent{overflow:auto;} -#cboxLoadedContent iframe{display:block; width:100%; height:100%; border:0;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} #cboxTitle{margin:0;} -#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} -.cboxPhoto{float:left; margin:auto; border:0; display:block;} -.cboxIframe{width:100%; height:100%; display:block; border:0;} +.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} +#colorbox, #cboxContent, #cboxLoadedContent{-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} + +/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ +#cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; } +/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ +#cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} +#colorbox{outline:0;} /* ColorBox example user style @@ -23,29 +28,23 @@ */ #cboxOverlay{background:transparent;} #colorbox{} - #cboxTopLeft{width:20px; height:20px; background: transparent url('images/fancy_shadow-spt1.png') no-repeat -130px bottom;} - #cboxTopRight{width:20px; height:20px; background: transparent url('images/fancy_shadow-spt1.png') no-repeat -50px bottom;} - #cboxBottomLeft{width:20px; height:20px; background: transparent url('images/fancy_shadow-spt1.png') no-repeat -130px top;} - #cboxBottomRight{width:20px; height:20px; background: transparent url('images/fancy_shadow-spt1.png') no-repeat -50px top;} - #cboxMiddleLeft{width:20px; background: transparent url('images/fancy_shadow-spt1.png') repeat-y -105px top;} - #cboxMiddleRight{width:20px; background: transparent url('images/fancy_shadow-spt1.png') repeat-y -75px top;} - #cboxTopCenter{height:20px; background: transparent url('images/fancy_shadow-spt2.png') repeat-x bottom;} - #cboxBottomCenter{height:20px; background: transparent url('images/fancy_shadow-spt2.png') repeat-x top;} - #cboxContent{background:#fff;} + #cboxTopLeft,#cboxTopRight,#cboxBottomLeft,#cboxBottomRight,#cboxMiddleLeft,#cboxMiddleRight,#cboxTopCenter,#cboxBottomCenter{width:20px;height:20px;} + #cboxContent{background: transparent;} #cboxLoadedContent{padding:10px;} + .cboxPhoto{ -webkit-box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.3); box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.3);} #cboxTitle{ position: absolute; left: 10px; right: 10px; bottom: 10px; padding: 0 10px; text-align: center; color: #fff; font-weight: bold; font-size: 0.9em; background-image: url('images/fancy_title_over.png'); } #cboxCurrent{position: absolute; left: -3000em} #cboxPrevious{position: absolute; top: 0; left: 15px; width: 35% ; height: 100%; text-indent:-9999px;} - #cboxPrevious:hover{background:url(images/fancy_shadow-spt1.png) -170px 50% no-repeat;} + #cboxPrevious.hover{background:url(images/fancy_shadow-spt1.png) -170px 50% no-repeat;} #cboxNext{position: absolute; top: 0; right: 15px; width: 35% ; height: 100%; text-indent:-9999px;} - #cboxNext:hover{background:url(images/fancy_right.png) right 50% no-repeat;} + #cboxNext.hover{background:url(images/fancy_right.png) right 50% no-repeat;} #cboxSlideshow{position:absolute; top: -12px; left:-15px; width: 30px; height: 30px; background:url(images/fancy_shadow-spt2.png) -40px -35px no-repeat; text-indent:-9999px;} #cboxLoadingOverlay{background:#fff;} #cboxLoadingGraphic{background:url(images/loading.gif) center center no-repeat;} #cboxClose{position:absolute; top: -12px; right: -15px; height: 30px; width: 30px; - background:url(images/fancy_shadow-spt2.png) -0px -35px no-repeat; text-indent:-9999px;} + background:url(images/fancy_shadow-spt2.png) -0px -35px no-repeat; text-indent:-9999px;border:0} .cboxSlideshow_on #cboxSlideshow{background-position:-80px -35px;} - .cboxSlideshow_off #cboxSlideshow{background-position:-40px -35px;} \ No newline at end of file + .cboxSlideshow_off #cboxSlideshow{background-position:-40px -35px;} diff --git a/www/plugins-dist/mediabox/colorbox/fancybox/colorbox_rtl.css b/www/plugins-dist/mediabox/colorbox/fancybox/colorbox_rtl.css index 0bd6c957..bbe47580 100644 --- a/www/plugins-dist/mediabox/colorbox/fancybox/colorbox_rtl.css +++ b/www/plugins-dist/mediabox/colorbox/fancybox/colorbox_rtl.css @@ -1,20 +1,25 @@ /* - ColorBox Core Style - The following rules are the styles that are consistant between themes. - Avoid changing this area to maintain compatability with future versions of ColorBox. + Colorbox Core Style: + The following CSS is consistent between example themes and should not be altered. */ -#colorbox, #cboxLoadedContent {-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} -#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:4999; overflow:hidden;} +#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} +#cboxWrapper {max-width:none;} #cboxOverlay{position:fixed; width:100%; height:100%;} #cboxMiddleLeft, #cboxBottomLeft{clear:left;} -#cboxContent{position:relative; overflow:visible;} -#cboxLoadedContent{overflow:auto;} -#cboxLoadedContent iframe{display:block; width:100%; height:100%; border:0;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} #cboxTitle{margin:0;} -#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} -.cboxPhoto{float:left; margin:auto; border:0; display:block;} -.cboxIframe{width:100%; height:100%; display:block; border:0;} +.cboxPhoto{float:right; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} +#colorbox, #cboxContent, #cboxLoadedContent{-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} + +/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ +#cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; } +/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ +#cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} +#colorbox{outline:0;} /* ColorBox example user style @@ -23,29 +28,23 @@ */ #cboxOverlay{background:transparent;} #colorbox{} - #cboxTopLeft{width:20px; height:20px; background: transparent url('images/fancy_shadow-spt1.png') no-repeat -130px bottom;} - #cboxTopRight{width:20px; height:20px; background: transparent url('images/fancy_shadow-spt1.png') no-repeat -50px bottom;} - #cboxBottomLeft{width:20px; height:20px; background: transparent url('images/fancy_shadow-spt1.png') no-repeat -130px top;} - #cboxBottomRight{width:20px; height:20px; background: transparent url('images/fancy_shadow-spt1.png') no-repeat -50px top;} - #cboxMiddleLeft{width:20px; background: transparent url('images/fancy_shadow-spt1.png') repeat-y -105px top;} - #cboxMiddleRight{width:20px; background: transparent url('images/fancy_shadow-spt1.png') repeat-y -75px top;} - #cboxTopCenter{height:20px; background: transparent url('images/fancy_shadow-spt2.png') repeat-x bottom;} - #cboxBottomCenter{height:20px; background: transparent url('images/fancy_shadow-spt2.png') repeat-x top;} - #cboxContent{background:#fff;} + #cboxTopLeft,#cboxTopRight,#cboxBottomLeft,#cboxBottomRight,#cboxMiddleLeft,#cboxMiddleRight,#cboxTopCenter,#cboxBottomCenter{width:20px;height:20px;} + #cboxContent{background: transparent;} #cboxLoadedContent{padding:10px;} + .cboxPhoto{ -webkit-box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.3); box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.3);} #cboxTitle{ position: absolute; right: 10px; left: 10px; bottom: 10px; padding: 0 10px; text-align: center; color: #fff; font-weight: bold; font-size: 0.9em; background-image: url('images/fancy_title_over.png'); } #cboxCurrent{position: absolute; right: -3000em} #cboxPrevious{position: absolute; top: 0; right: 15px; width: 35% ; height: 100%; text-indent:-9999px;} - #cboxPrevious:hover{background:url(images/fancy_right.png) right 50% no-repeat;} + #cboxPrevious.hover{background:url(images/fancy_right.png) right 50% no-repeat;} #cboxNext{position: absolute; top: 0; left: 15px; width: 35% ; height: 100%; text-indent:-9999px;} - #cboxNext:hover{background:url(images/fancy_shadow-spt1.png) -170px 50% no-repeat;} + #cboxNext.hover{background:url(images/fancy_shadow-spt1.png) -170px 50% no-repeat;} #cboxSlideshow{position:absolute; top: -12px; right:-15px; width: 30px; height: 30px; background:url(images/fancy_shadow-spt2.png) -120px -35px no-repeat; text-indent:-9999px;} #cboxLoadingOverlay{background:#fff;} #cboxLoadingGraphic{background:url(images/loading.gif) center center no-repeat;} #cboxClose{position:absolute; top: -12px; left: -15px; height: 30px; width: 30px; - background:url(images/fancy_shadow-spt2.png) -0px -35px no-repeat; text-indent:-9999px;} + background:url(images/fancy_shadow-spt2.png) -0px -35px no-repeat; text-indent:-9999px;border:0} .cboxSlideshow_on #cboxSlideshow{background-position:-80px -35px;} .cboxSlideshow_off #cboxSlideshow{background-position:-120px -35px;} diff --git a/www/plugins-dist/mediabox/colorbox/fancybox/mediabox_config_theme.php b/www/plugins-dist/mediabox/colorbox/fancybox/mediabox_config_theme.php index a57a877f..b4342011 100644 --- a/www/plugins-dist/mediabox/colorbox/fancybox/mediabox_config_theme.php +++ b/www/plugins-dist/mediabox/colorbox/fancybox/mediabox_config_theme.php @@ -1,13 +1,14 @@ false, 'minWidth' => false ); + return $config; } - -?> \ No newline at end of file diff --git a/www/plugins-dist/mediabox/colorbox/thickbox/colorbox.css b/www/plugins-dist/mediabox/colorbox/thickbox/colorbox.css index f589e770..45fc6813 100644 --- a/www/plugins-dist/mediabox/colorbox/thickbox/colorbox.css +++ b/www/plugins-dist/mediabox/colorbox/thickbox/colorbox.css @@ -1,20 +1,25 @@ /* - ColorBox Core Style - The following rules are the styles that are consistant between themes. - Avoid changing this area to maintain compatability with future versions of ColorBox. + Colorbox Core Style: + The following CSS is consistent between example themes and should not be altered. */ -#colorbox, #cboxLoadedContent {-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} -#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:4999; overflow:hidden;} +#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} +#cboxWrapper {max-width:none;} #cboxOverlay{position:fixed; width:100%; height:100%;} #cboxMiddleLeft, #cboxBottomLeft{clear:left;} -#cboxContent{position:relative; overflow:hidden;} -#cboxLoadedContent{overflow:auto;} -#cboxLoadedContent iframe{display:block; width:100%; height:100%; border:0;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} #cboxTitle{margin:0;} -#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} -.cboxPhoto{float:left; margin:auto; border:0; display:block;} -.cboxIframe{width:100%; height:100%; display:block; border:0;} +.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} +#colorbox, #cboxContent, #cboxLoadedContent{-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} + +/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ +#cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; } +/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ +#cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} +#colorbox{outline:0;} /* Example user style @@ -34,15 +39,15 @@ #cboxContent{background:#fff;} #cboxLoadedContent{margin:0 0 58px;} #cboxTitle{position:absolute; bottom:28px; left:0; text-align:left; width:100%; color:#000; font-weight:bold;font-size:0.9em;} - #cboxCurrent{position:absolute; bottom:0px; left:0px; color:#666666;font-size:0.85em;width:65px; text-align:center;} - #cboxPrevious{position:absolute; bottom:0; left:70px; background:url(images/controls.png) 0px 0px no-repeat; width:13px; height:13px; text-indent:-9999px;} - #cboxPrevious:hover{background-position:0px -13px;} - #cboxNext{position:absolute; bottom:0; left:90px; background:url(images/controls.png) -13px 0px no-repeat; width:13px; height:13px; text-indent:-9999px;} - #cboxNext:hover{background-position:-13px -13px;} - #cboxSlideshow{position:absolute; bottom:0px; left:110px; color:#666666;font-size:0.85em;} + #cboxCurrent{position:absolute; bottom:0px; left:0px; color:#666666;font-size:0.85em;width:45px; text-align:left;} + #cboxPrevious{position:absolute; bottom:4px; left:40px; background:url(images/controls.png) 0px 0px no-repeat; width:13px; height:13px; text-indent:-9999px;} + #cboxPrevious.hover{background-position:0px -13px;} + #cboxNext{position:absolute; bottom:4px; left:60px; background:url(images/controls.png) -13px 0px no-repeat; width:13px; height:13px; text-indent:-9999px;} + #cboxNext.hover{background-position:-13px -13px;} + #cboxSlideshow{position:absolute; bottom:0px; left:80px; color:#666666;font-size:0.85em;} #cboxLoadingOverlay{background:#fff;} #cboxLoadingGraphic{background:url(images/loading.gif) center center no-repeat;} - #cboxClose{position:absolute; bottom:20px; right:0; background:url(images/close.gif) 0px 0px no-repeat; width:26px; height:26px; text-indent:-9999px;} + #cboxClose{position:absolute; bottom:20px; right:0; background:url(images/close.gif) 0px 0px no-repeat; width:26px; height:26px; text-indent:-9999px;border:0} /* The following fixes png-transparency for IE6. diff --git a/www/plugins-dist/mediabox/colorbox/thickbox/colorbox_rtl.css b/www/plugins-dist/mediabox/colorbox/thickbox/colorbox_rtl.css index de67a71d..24a2a3e0 100644 --- a/www/plugins-dist/mediabox/colorbox/thickbox/colorbox_rtl.css +++ b/www/plugins-dist/mediabox/colorbox/thickbox/colorbox_rtl.css @@ -1,20 +1,25 @@ /* - ColorBox Core Style - The following rules are the styles that are consistant between themes. - Avoid changing this area to maintain compatability with future versions of ColorBox. + Colorbox Core Style: + The following CSS is consistent between example themes and should not be altered. */ -#colorbox, #cboxLoadedContent {-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} -#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; right:0; z-index:4999; overflow:hidden;} +#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;} +#cboxWrapper {max-width:none;} #cboxOverlay{position:fixed; width:100%; height:100%;} -#cboxMiddleLeft, #cboxBottomLeft{clear:right;} -#cboxContent{position:relative; overflow:hidden;} -#cboxLoadedContent{overflow:auto;} -#cboxLoadedContent iframe{display:block; width:100%; height:100%; border:0;} +#cboxMiddleLeft, #cboxBottomLeft{clear:left;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} #cboxTitle{margin:0;} -#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; right:0; width:100%;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} -.cboxPhoto{float:left; margin:auto; border:0; display:block;} -.cboxIframe{width:100%; height:100%; display:block; border:0;} +.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} +#colorbox, #cboxContent, #cboxLoadedContent{-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} + +/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ +#cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; } +/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ +#cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} +#colorbox{outline:0;} /* Example user style @@ -33,16 +38,16 @@ #cboxBottomCenter{height:10px; background:#fff;} #cboxContent{background:#fff;} #cboxLoadedContent{margin:0 0 58px;} - #cboxTitle{position:absolute; bottom:28px; right:0; text-align:left; width:100%; color:#000; font-weight:bold;font-size:0.9em;} - #cboxCurrent{position:absolute; bottom:0px; right:0px; color:#666666; font-size:0.80em;} - #cboxPrevious{position:absolute; bottom:0; right:40px; background:url(images/controls.png) -13px 0px no-repeat; width:13px; height:13px; text-indent:-9999px;} - #cboxPrevious:hover{background-position:-13px -13px;} - #cboxNext{position:absolute; bottom:0; right:60px; background:url(images/controls.png) 0px 0px no-repeat; width:13px; height:13px; text-indent:-9999px;} - #cboxNext:hover{background-position:0px -13px;} + #cboxTitle{position:absolute; bottom:28px; right:0; text-align:right; width:100%; color:#000; font-weight:bold;font-size:0.9em;} + #cboxCurrent{position:absolute; bottom:0px; right:0px; color:#666666; font-size:0.85em;} + #cboxPrevious{position:absolute; bottom:4px; right:40px; background:url(images/controls.png) -13px 0px no-repeat; width:13px; height:13px; text-indent:-9999px;} + #cboxPrevious.hover{background-position:-13px -13px;} + #cboxNext{position:absolute; bottom:4px; right:60px; background:url(images/controls.png) 0px 0px no-repeat; width:13px; height:13px; text-indent:-9999px;} + #cboxNext.hover{background-position:0px -13px;} #cboxSlideshow{position:absolute; bottom:0px; right:80px; color:#666666;font-size:0.85em;} #cboxLoadingOverlay{background:#fff;} #cboxLoadingGraphic{background:url(images/loading.gif) center center no-repeat;} - #cboxClose{position:absolute; bottom:20px; left:0; background:url(images/close.gif) 0px 0px no-repeat; width:26px; height:26px; text-indent:-9999px;} + #cboxClose{position:absolute; bottom:20px; left:0; background:url(images/close.gif) 0px 0px no-repeat; width:26px; height:26px; text-indent:-9999px;border:0} /* The following fixes png-transparency for IE6. @@ -53,4 +58,4 @@ !! Important Note: AlphaImageLoader src paths are relative to the HTML document, while regular CSS background images are relative to the CSS document. -*/ \ No newline at end of file +*/ diff --git a/www/plugins-dist/mediabox/colorbox/white-shadow/colorbox.css b/www/plugins-dist/mediabox/colorbox/white-shadow/colorbox.css index 983cf749..d68996d4 100644 --- a/www/plugins-dist/mediabox/colorbox/white-shadow/colorbox.css +++ b/www/plugins-dist/mediabox/colorbox/white-shadow/colorbox.css @@ -1,66 +1,66 @@ /* - ColorBox Core Style - The following rules are the styles that are consistant between themes. - Avoid changing this area to maintain compatability with future versions of ColorBox. + Colorbox Core Style: + The following CSS is consistent between example themes and should not be altered. */ -#colorbox, #cboxLoadedContent {-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:4999; overflow:hidden;} +#cboxWrapper {max-width:none;} #cboxOverlay{position:fixed; width:100%; height:100%;} #cboxMiddleLeft, #cboxBottomLeft{clear:left;} -#cboxContent{position:relative; overflow:hidden;} -#cboxLoadedContent{overflow:auto;} -#cboxLoadedContent iframe{display:block; width:100%; height:100%; border:0;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} #cboxTitle{margin:0;} -#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} -.cboxPhoto{float:left; margin:auto; border:0; display:block;} -.cboxIframe{width:100%; height:100%; display:block; border:0;} +.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} +#colorbox, #cboxContent, #cboxLoadedContent{-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} /* - ColorBox example user style - The following rules are ordered and tabbed in a way that represents the - order/nesting of the generated HTML, so that the structure easier to understand. + User Style: + Change the following styles to modify the appearance of Colorbox. They are + ordered & tabbed in a way that represents the nesting of the generated HTML. */ -#cboxOverlay{background:#fff;} +#cboxOverlay{background:#fff; opacity: 0.9; filter: alpha(opacity = 90);} +#colorbox{outline:0;} + #cboxTopLeft{width:25px; height:25px; background:url(images/border1.png) no-repeat 0 0;} + #cboxTopCenter{height:25px; background:url(images/border1.png) repeat-x 0 -50px;} + #cboxTopRight{width:25px; height:25px; background:url(images/border1.png) no-repeat -25px 0;} + #cboxBottomLeft{width:25px; height:25px; background:url(images/border1.png) no-repeat 0 -25px;} + #cboxBottomCenter{height:25px; background:url(images/border1.png) repeat-x 0 -75px;} + #cboxBottomRight{width:25px; height:25px; background:url(images/border1.png) no-repeat -25px -25px;} + #cboxMiddleLeft{width:25px; background:url(images/border2.png) repeat-y 0 0;} + #cboxMiddleRight{width:25px; background:url(images/border2.png) repeat-y -25px 0;} + #cboxContent{background:#fff; overflow:hidden;} + .cboxIframe{background:#fff;} + #cboxError{padding:50px; border:1px solid #ccc;} + #cboxLoadedContent{margin-bottom:20px;} + #cboxTitle{position:absolute; bottom:0px; left:0; text-align:center; width:100%; color:#999;} + #cboxCurrent{position:absolute; bottom:0px; left:150px; color:#999;} + #cboxLoadingOverlay{background:#fff url(images/loading.gif) no-repeat 5px 5px;} -#colorBox{} - #cboxTopLeft{width:25px; height:25px; background:url(images/border1.png) 0 0 no-repeat;} - #cboxTopCenter{height:25px; background:url(images/border1.png) 0 -50px repeat-x;} - #cboxTopRight{width:25px; height:25px; background:url(images/border1.png) -25px 0 no-repeat;} - #cboxBottomLeft{width:25px; height:25px; background:url(images/border1.png) 0 -25px no-repeat;} - #cboxBottomCenter{height:25px; background:url(images/border1.png) 0 -75px repeat-x;} - #cboxBottomRight{width:25px; height:25px; background:url(images/border1.png) -25px -25px no-repeat;} - #cboxMiddleLeft{width:25px; background:url(images/border2.png) 0 0 repeat-y;} - #cboxMiddleRight{width:25px; background:url(images/border2.png) -25px 0 repeat-y;} - #cboxContent{background:#fff;} - #cboxLoadedContent{margin-bottom:20px;margin-top:20px;} - #cboxTitle{position:absolute; top:0px; left:0; text-align:center; width:100%; color:#999;} - #cboxCurrent{position:absolute; bottom:0px; left:120px; color:#999;} - #cboxSlideshow{position:absolute; bottom:0px; right:55px; color:#444;} + /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ + #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; } + + /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ + #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} + + #cboxSlideshow{position:absolute; bottom:0px; right:62px; color:#444;} #cboxPrevious{position:absolute; bottom:0px; left:0; color:#444;} - #cboxNext{position:absolute; bottom:0px; left:70px; color:#444;} - #cboxLoadingOverlay{background:url(images/loading.gif) 5px 5px no-repeat #fff;} + #cboxNext{position:absolute; bottom:0px; left:83px; color:#444;} #cboxClose{position:absolute; bottom:0; right:0; display:block; color:#444;} /* - The following fixes png-transparency for IE6. - It is also necessary for png-transparency in IE7 & IE8 to avoid 'black halos' with the fade transition - - Since this method does not support CSS background-positioning, it is incompatible with CSS sprites. - Colorbox preloads navigation hover classes to account for this. - - !! Important Note: AlphaImageLoader src paths are relative to the HTML document, - while regular CSS background images are relative to the CSS document. + The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill + when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9. + See: http://jacklmoore.com/notes/ie-transparency-problems/ */ -/* Modif Yffic : Mise en commentaire car de toute facon ca ne fonctionne pas - avec ces url comme indique dans le commentaire ci dessus */ -/* -.cboxIE #cboxTopLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderTopLeft.png, sizingMethod='scale');} -.cboxIE #cboxTopCenter{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderTopCenter.png, sizingMethod='scale');} -.cboxIE #cboxTopRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderTopRight.png, sizingMethod='scale');} -.cboxIE #cboxBottomLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderBottomLeft.png, sizingMethod='scale');} -.cboxIE #cboxBottomCenter{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderBottomCenter.png, sizingMethod='scale');} -.cboxIE #cboxBottomRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderBottomRight.png, sizingMethod='scale');} -.cboxIE #cboxMiddleLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderMiddleLeft.png, sizingMethod='scale');} -.cboxIE #cboxMiddleRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderMiddleRight.png, sizingMethod='scale');} -*/ \ No newline at end of file +.cboxIE #cboxTopLeft, +.cboxIE #cboxTopCenter, +.cboxIE #cboxTopRight, +.cboxIE #cboxBottomLeft, +.cboxIE #cboxBottomCenter, +.cboxIE #cboxBottomRight, +.cboxIE #cboxMiddleLeft, +.cboxIE #cboxMiddleRight { + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF); +} \ No newline at end of file diff --git a/www/plugins-dist/mediabox/colorbox/white-shadow/colorbox_rtl.css b/www/plugins-dist/mediabox/colorbox/white-shadow/colorbox_rtl.css index f66a05e8..20c26180 100644 --- a/www/plugins-dist/mediabox/colorbox/white-shadow/colorbox_rtl.css +++ b/www/plugins-dist/mediabox/colorbox/white-shadow/colorbox_rtl.css @@ -1,66 +1,66 @@ /* - ColorBox Core Style - The following rules are the styles that are consistant between themes. - Avoid changing this area to maintain compatability with future versions of ColorBox. + Colorbox Core Style: + The following CSS is consistent between example themes and should not be altered. */ -#colorbox, #cboxLoadedContent {-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:4999; overflow:hidden;} +#cboxWrapper {max-width:none;} #cboxOverlay{position:fixed; width:100%; height:100%;} #cboxMiddleLeft, #cboxBottomLeft{clear:left;} -#cboxContent{position:relative; overflow:hidden;} -#cboxLoadedContent{overflow:auto;} -#cboxLoadedContent iframe{display:block; width:100%; height:100%; border:0;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} #cboxTitle{margin:0;} -#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} -.cboxPhoto{float:left; margin:auto; border:0; display:block;} -.cboxIframe{width:100%; height:100%; display:block; border:0;} +.cboxPhoto{float:right; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} +#colorbox, #cboxContent, #cboxLoadedContent{-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;} /* - ColorBox example user style - The following rules are ordered and tabbed in a way that represents the - order/nesting of the generated HTML, so that the structure easier to understand. + User Style: + Change the following styles to modify the appearance of Colorbox. They are + ordered & tabbed in a way that represents the nesting of the generated HTML. */ -#cboxOverlay{background:#fff;} +#cboxOverlay{background:#fff; opacity: 0.9; filter: alpha(opacity = 90);} +#colorbox{outline:0;} + #cboxTopLeft{width:25px; height:25px; background:url(images/border1.png) no-repeat 0 0;} + #cboxTopCenter{height:25px; background:url(images/border1.png) repeat-x 0 -50px;} + #cboxTopRight{width:25px; height:25px; background:url(images/border1.png) no-repeat -25px 0;} + #cboxBottomLeft{width:25px; height:25px; background:url(images/border1.png) no-repeat 0 -25px;} + #cboxBottomCenter{height:25px; background:url(images/border1.png) repeat-x 0 -75px;} + #cboxBottomRight{width:25px; height:25px; background:url(images/border1.png) no-repeat -25px -25px;} + #cboxMiddleLeft{width:25px; background:url(images/border2.png) repeat-y 0 0;} + #cboxMiddleRight{width:25px; background:url(images/border2.png) repeat-y -25px 0;} + #cboxContent{background:#fff; overflow:hidden;} + .cboxIframe{background:#fff;} + #cboxError{padding:50px; border:1px solid #ccc;} + #cboxLoadedContent{margin-bottom:20px;} + #cboxTitle{position:absolute; bottom:0px; right:0; text-align:center; width:100%; color:#999;} + #cboxCurrent{position:absolute; bottom:0px; right:150px; color:#999;} + #cboxLoadingOverlay{background:#fff url(images/loading.gif) no-repeat 5px 5px;} -#colorBox{} - #cboxTopLeft{width:25px; height:25px; background:url(images/border1.png) 0 0 no-repeat;} - #cboxTopCenter{height:25px; background:url(images/border1.png) 0 -50px repeat-x;} - #cboxTopRight{width:25px; height:25px; background:url(images/border1.png) -25px 0 no-repeat;} - #cboxBottomLeft{width:25px; height:25px; background:url(images/border1.png) 0 -25px no-repeat;} - #cboxBottomCenter{height:25px; background:url(images/border1.png) 0 -75px repeat-x;} - #cboxBottomRight{width:25px; height:25px; background:url(images/border1.png) -25px -25px no-repeat;} - #cboxMiddleLeft{width:25px; background:url(images/border2.png) 0 0 repeat-y;} - #cboxMiddleRight{width:25px; background:url(images/border2.png) -25px 0 repeat-y;} - #cboxContent{background:#fff;} - #cboxLoadedContent{margin-bottom:20px;margin-top:20px;} - #cboxTitle{position:absolute; top:0px; right:0; text-align:center; width:100%; color:#999;} - #cboxCurrent{position:absolute; bottom:0px; right:120px; color:#999;} - #cboxSlideshow{position:absolute; bottom:0px; left:55px; color:#444;} + /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ + #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; } + + /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ + #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} + + #cboxSlideshow{position:absolute; bottom:0px; left:62px; color:#444;} #cboxPrevious{position:absolute; bottom:0px; right:0; color:#444;} - #cboxNext{position:absolute; bottom:0px; right:70px; color:#444;} - #cboxLoadingOverlay{background:url(images/loading.gif) 5px 5px no-repeat #fff;} + #cboxNext{position:absolute; bottom:0px; right:83px; color:#444;} #cboxClose{position:absolute; bottom:0; left:0; display:block; color:#444;} /* - The following fixes png-transparency for IE6. - It is also necessary for png-transparency in IE7 & IE8 to avoid 'black halos' with the fade transition - - Since this method does not support CSS background-positioning, it is incompatible with CSS sprites. - Colorbox preloads navigation hover classes to account for this. - - !! Important Note: AlphaImageLoader src paths are relative to the HTML document, - while regular CSS background images are relative to the CSS document. + The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill + when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9. + See: http://jacklmoore.com/notes/ie-transparency-problems/ */ -/* Modif Yffic : Mise en commentaire car de toute facon ca ne fonctionne pas - avec ces url comme indique dans le commentaire ci dessus */ -/* -.cboxIE #cboxTopLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderTopLeft.png, sizingMethod='scale');} -.cboxIE #cboxTopCenter{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderTopCenter.png, sizingMethod='scale');} -.cboxIE #cboxTopRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderTopRight.png, sizingMethod='scale');} -.cboxIE #cboxBottomLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderBottomLeft.png, sizingMethod='scale');} -.cboxIE #cboxBottomCenter{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderBottomCenter.png, sizingMethod='scale');} -.cboxIE #cboxBottomRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderBottomRight.png, sizingMethod='scale');} -.cboxIE #cboxMiddleLeft{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderMiddleLeft.png, sizingMethod='scale');} -.cboxIE #cboxMiddleRight{background:transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/internet_explorer/borderMiddleRight.png, sizingMethod='scale');} -*/ \ No newline at end of file +.cboxIE #cboxTopLeft, +.cboxIE #cboxTopCenter, +.cboxIE #cboxTopRight, +.cboxIE #cboxBottomLeft, +.cboxIE #cboxBottomCenter, +.cboxIE #cboxBottomRight, +.cboxIE #cboxMiddleLeft, +.cboxIE #cboxMiddleRight { + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF); +} \ No newline at end of file diff --git a/www/plugins-dist/mediabox/colorbox/white-shadow/images/border1.png b/www/plugins-dist/mediabox/colorbox/white-shadow/images/border1.png index 2d0a04d61244c5d70b4f3216fe2ba9b69ae53664..ea73e15924a217aebfe03a8e140cfb4e4440b81d 100644 GIT binary patch delta 617 zcmV-v0+#)N2lWJy7k^?11ONa4xVT8o0006!Nkl(iH@PW!yVD=hD38Pl|*duYdaDt-+zB2eD_RD6E-lOut_n| z5gb^we+w;Q5%Q(A?!i(XfgnYjNZ(+70Cc4s6D?sUknEYBMB04PnTVx1L>T}n0^<+} z0>mUBb`A&yN-ZF{r%yIga+CpTEkR(I#UiYV2}&~hGr11QYkW0(4>e&TR^}1rD3$0* z%4#}1EQe{No`26@{+-J4D@m;rF^ff57K>6qQceFJg{{}yvoI@7w=@<8!m=cW=vNPE z!Z9ad38M%L1JSgEM1as69XviI7v+|A{D1Z;z>=luBn~M+gpe>t)+`bbiAT))SR;e# zJ`*_$ix%O%ctqa_%NhuBmx-JUvS49CNI)pQtX_xQW`80VAQHZ?_WRmI$`0ADCYi`M zd~`_d5$Oi$>m>Qe!oC$g;sm0T++-q`I>~oCc5H({48;HxLL{UVG^yy)QD*-k7=;=BMCXkyzxbrhwPL`|zS zr_a!x)&6mstd{b6!!rJ01_mY{PZ!6Kint@wBG=zm5OAA&$KqU2;z{mp8+q?-e*gOa z|J2k1DRa)XT(vu%>t2#MYtF)aj6an}b1!?FOl9Hx&-#m2{C%K*ZE>A}M2+o3`xe#d zEeucBbvIt5SKPQSJ_Rz4yoFlnaT_B;OUJQ)XBjW-_; zl>6Oe(SNKgt%y^q@pIaa6Na6#N9%TYoN5SG>%P#hJbMOT(R~>YRUW+-PlMGrB#Y0j znZ@dPLiORE6yah8_069HjZ$ySiqAZ?@cPcynsL$SJ;*V`b^7YdY0)CTYXfu4mtUO}rNfZUanXu()`X0ZO=`9> z@AYN)GY_8%bh%{~tCu09K6UE7ck*|FR(mC7C{MC2I`}5g;^>!x=>-caq}*mUD@0B| z{n$5Rv(2d~k2fXm>AkL+UEKSZ;qukkQ(cb^$akmAW!jl`?TJdbpKvzYNh?-2#h;62 ztv4@9-8?V6TjtuD(5eL$E&WA%bDp01R`m3+0RNPG!5ja6@_FsFPQ=u9`o6oGf5SKn zex<7(bzJ@B{*=3M>)w?AUz)*kSu#F(V(5Rbue^&l>z11BKc~LzqoTIFxK;b4V;7g# z9mtY-{AzmZuc=GwKCX;k|7!Yh!KN mH0g4?YGLBn8=HK2#}W7*cU7>Bs;7_RInXOoqY&#>|G?0-Ko)#RWbyZZr_^X4=Rku$p<}zoXsa z>Hn7tR{Z|N0A|khuh%Q#Di=MOgs#)T2mjo T?0J<0w1vUb)z4*}Q$iB}xy(6b diff --git a/www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderBottomCenter.png b/www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderBottomCenter.png deleted file mode 100644 index 12e0e9ac022d0d48ea77f547c51b60b240487b77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{O!3HEhOmL|OaY|exN`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%S$n!ThE&{2`p3`W!{gu}_3_=^-Ng!Rb{)T&UH-HP?{_$o ypQdn-M`?xwi?Rn#&c%9x>5Y;Zy37s@j0`{Q1aDn?T4)6{hQZU-&t;ucLK6VDcrWMx diff --git a/www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderBottomLeft.png b/www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderBottomLeft.png deleted file mode 100644 index b7a474ae056f3c500e460f6d88bc1621053ff219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 473 zcmV;~0Ve*5P)P000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzdr3q=RCwC7mQPB=Fcik~V*QUuMWmvL z3tf5)cRi1ruFH4^FW~{aMSBGo-4$GS@_dn|Jj2T*Z8h*CFfiZO?`vLW6e22GKZrdG P00000NkvXXu0mjfah1x1 diff --git a/www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderBottomRight.png b/www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderBottomRight.png deleted file mode 100644 index 6b6cb159b92b51b1bb735c359f2db599559bcf2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 470 zcmV;{0V)28P)P000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzcu7P-RCwC7mCH)RFcgN9SjQWKC?XX> zTXXid{RGsZUH z9^8NuoP#wu0xM7eVc-}xb#j_AWVKw0D^rng@+CqDJy1H5=<2d0oO2ZrDBo&+x)K=> zsb8(6@B24AMoT19LY6EUhT*-cs#iynmYdWXsq6X?pWm7KxB?g86r6xVsz%KGX_Bt% zUQ7Yrf@^RI&P)*=g9ES+_AJ375wQ@V%Ad-ze9*5JqZKac3Dxpmv~9axwi2ag2OBVg2uwB(bJP$H`D zhKUT9mV5;yZiPp~Ly2q&^As1gi=^i?_9lK!#8M>^4V6wjH#Zs!h+=&fI=5!YDsbV1 zCW{JeNfEl$LY16y70(ipc-^v`$$b))Daw-YznCm2na=xvZr=h709CMu`cYr}PXGV_ M07*qoM6N<$g158F@Bjb+ diff --git a/www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderMiddleLeft.png b/www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderMiddleLeft.png deleted file mode 100644 index 8f248ac12f7032bbd5a4d286eaa423c391935358..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^l0eMD!3HF&7fw+F36!`-lmzFem6RtIr7}3C!be$JWM`3B@Bm;3pFq>GaR@h&Z=h^><2V~!PC{xWt~$(698{IEJ6SP diff --git a/www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderTopCenter.png b/www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderTopCenter.png deleted file mode 100644 index 7cb1da43ea70d16cd9e8a5e04db63615353ca7dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{O!3HEhOmL|OaY|exN`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%8G5=nhE&{2`uG38Ju`=aQKHb9f+kj%4NV+o0tfljEoSJ) o?YVJ?!{n)b$7u&4Mu7wdwi{f5KmC@612r>vy85}Sb4q9e0J!ce7ytkO diff --git a/www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderTopLeft.png b/www/plugins-dist/mediabox/colorbox/white-shadow/images/internet_explorer/borderTopLeft.png deleted file mode 100644 index d733b6c866fa5567eac759c40bb656e32d6a2e6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 405 zcmV;G0c!qP000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzH%UZ6RCwC7mA?*xFc8MM_F^22hB&ae zI5_YiZVWzyqp!dNnD}@+1*WGsgG05MHKC@A?-+eQb9V9j-*r5H21FSoX$hOzpf-2n{QVV`&ZA(_mV5gA~6%SmjD9*9!EP000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzb4f%&RCwC7mQ7B>Fc5`1=C}MRfS`y9 zfdosI+#)ApA8`jR!6rKnkbQCm7THCtLu1C#xN--N6PGg5t1UO3ukXom0$S_Ie;1J4 z+9=hSFaR~Ox!wdM2B2dh+XGE?#CIZOHvo}FX-$Mo1AsB}Ajm?F1Ark7f-K~WLAW|L z+W8~^`~{f_0Jk}xcO#swKyCvNtA#N4Ia>i)$fF0s0bCM{Z;U16$ysz`;f=r9xCq3z zbkjqss(P~vN+}Hh+Kf%pd}dkpk>`0sjk&lp--hTR=0mKuZNJL0e5FY5QFGK4>Kt{7 zIzsK!4Q)=2Ejp&ajVlPTRoC@9f$mT@s7q8r_t*hy54FP}5Ct(sjviQvGG};B5A2d>; z`je}=1^Jhm`qW>d=5@(X;wfqp5zC7xY5KLHsKHI)ugz!V^z|WQ5G@grgb<^mpB`H} zW~d_aZoY|?qhnAH9ubM?Q+{M8B1Eja$*vFiawj$>< zcl;^3jy`qk{QLUWuSQZQ=j@%)I5_6g@dSx z);f7w8#O&GAZlPy__Uae1XCY6Ako4ARxAK3dN9z^Aww0Bck@k7Ia&vGG5}z${g5Ad z{MiD4x|{48%9o(%@R3Gz2PL<@OID4C8ZWh$*srh9)Zg$ybRA6W*4^*xOTRAkPN%^q zZ-Ek=bK*L>?9gA*5*_QWl5aNqSGE@Kn002ovPDHLkV1k`%>Zt$# literal 1652 zcmbW2X;4#F6vyv-*+W(cghe4iP+-zA!4wqJ8VFl(Py}U(3xR^*R+dHuZ6$$(ML{33 z45I>3M2oGm2%{Y{^${!X8kf42fkY6or5eC$0w{fUI-P!PKiqrf+;h*Jx%2=1@2!Yi z5k;rEQvm>Ud31O@7VEJQNQSXl^r|No3;3+i*iZo4uLcwLzQl4jRYbBXA!nm%XIg$H z2+hbz&*aIsrDbKtXQpKo=3UE_06-+l!$VgWJWZdOon3ax&-FUssT(3ol;7giz`e@I zX974|Of8cDvi`2$oC&O&Og^0~mC#nSgTF5Fiase=!e%E=+zP2A!P`t7^Ch72Ep1%{WXLiQ!)WG1)2XdZ=AIu?LKltK! zl}GTa$DLo~x*U*}L5)$BF=~+B>pUx+r-twr80TOFE}yg6?C=mc*{Ju8)N9a;=dWKg z1*_!~2TDtc!lpgN*o8ekJ#$}lo;{1pyvAs&S+EkGOA)*yuH<9;)S){kM`FEy#^G7@ zev(`>+FL@Zj!^sJ+*bThFz$V(n|V`)X7dL8l&y6L0(HYaxIW-^4E$MhoB}S_(2@E8$L{A$0-HuDWrOir7}i zm4c&D7PJ4#Q5sR^;&aChKw3{7S}*E2bF4?ENkmp7-se&gg5|UaRbwzngfeD<0G1shLM?`ahP!3&~4BruewNi>s5KqKyUb1}s`o=LM)irHQ3GU=tAJU&RQuTc{ zn=RC}$lApkm2{7IBm$PS692-XEf6J+WyiZFBO~4lDjEvfQO-I z)-y2G)|`%lra2_{=%yXz%WZc1o#tgsF1}0SJ?yqNHI=ElH)EglfAi?W`)Ph}HYUxm zksAOm`!mJ*Np&RDxHr`eL&Z{2L?95Jot&k>`c+cgwdK?31Nwsx<3mwOxU2#AXtwIf zaYx4Ty+xu;CI5t#pM*~ zeWa1ZIhpbN#!nSanx~{Sd}hian##5MR|qbLlK8U7-hC+r&tSXVe!M;aNq4$6r~6pl zgJKRt-8%k$`W;CYN>ve`rgMu4{(r$e*w+`SSRht9&g;Q15(+`$Sav6wbM*Q%u5uGi zT&CE@igAyUW+93~Ou}6p#zE)KHzeDmleCRl;Nt@9aRn)5#X=@({4YG~TZb;5VY`eE zT+}G-Gjk_d1x#+%dkxW;vV!Epd~~dG&Ia_Wd4!NFz>=zDF_+r59|9I2Gz?oXS)KdfQkLYQaS z`#*Ze8WOLpjwqbvc1>!G58XFzJFo`13I!2_dIO!}uhqz@4F`j^KK=)3Kts+2DPion lUQd<$h3oCrwEsvi5e)2nWU{2)o{xPSKpwFo{7jg#_)mhdg4O^4 diff --git a/www/plugins-dist/mediabox/colorbox/white-simple/images/start_rtl.png b/www/plugins-dist/mediabox/colorbox/white-simple/images/start_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..623cdcae07afd3bd13e1e7fb36f1ad8fab819eb6 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh3?wzC-F*zC6a#!hT>t<7Z;TiGef5qXsFbVf8C8Zp$2N%H4UJ%Acx=YRd)j2vdY}mmp00i_>zopr0O8^{o&W#< literal 0 HcmV?d00001 diff --git a/www/plugins-dist/mediabox/formulaires/configurer_mediabox.html b/www/plugins-dist/mediabox/formulaires/configurer_mediabox.html index db9763a9..d6b8b1be 100644 --- a/www/plugins-dist/mediabox/formulaires/configurer_mediabox.html +++ b/www/plugins-dist/mediabox/formulaires/configurer_mediabox.html @@ -4,32 +4,33 @@ [

      (#ENV*{message_erreur})

      ]
      - #ACTION_FORMULAIRE{#ENV{action}} -
        -
      • + #ACTION_FORMULAIRE +
        +
        -
      • -
      • -
          -
        • +
      +
      +
      +
      [(#ENV**{erreurs}|table_valeur{selecteur_commun})]

      <:mediabox:explication_selecteur:>

      -
    • -
    • +
    • +
      [(#ENV**{erreurs}|table_valeur{selecteur_galerie})]

      <:mediabox:explication_selecteur_galerie:>

      - +
      -
    • +

      <:mediabox:explication_traiter_toutes_images:>

      @@ -40,66 +41,74 @@
      -
    • +
      -
    • <:mediabox:label_apparence:> -
        - [
      • +
        <:mediabox:label_apparence:> +
        + [
        (#ENV{_skins}|box_choisir_skin{#ENV{skin}}|image_reduire{130}) -
      • ] -
      • +
    • ] +
      - -
    • +
    • +
      - -
    • +
    • +
      - -
    • +
    • +
      - -
    • +
    • +
      - -
    • +
    • +
      - -
    • +
    • +
      - -
    • +
    • +
      - - - +
      +
      +
      -
    • <:mediabox:label_splash:> -
        -
      • +
        <:mediabox:label_splash:> +
        +
        [(#ENV**{erreurs}|table_valeur{splash_url})]

        <:mediabox:explication_splash_url:>

        -
      • -
      -
    • - - - +
      +
      + + +
      +
      + + +
      +
      +
      +
      +
      +

      @@ -109,7 +118,7 @@

      \ No newline at end of file diff --git a/www/plugins-dist/mediabox/formulaires/configurer_mediabox.php b/www/plugins-dist/mediabox/formulaires/configurer_mediabox.php index 004439e7..ae77ec8e 100644 --- a/www/plugins-dist/mediabox/formulaires/configurer_mediabox.php +++ b/www/plugins-dist/mediabox/formulaires/configurer_mediabox.php @@ -1,93 +1,100 @@ -array('nom'=>_T('mediabox:label_aucun_style'))); - - $maxfiles = 1000; - $liste_fichiers = array(); - $recurs = array(); - foreach (creer_chemin() as $d) { - $f = $d."colorbox/"; - if (@is_dir($f)){ - $liste = preg_files($f,"colorbox[.]css$",$maxfiles-count($liste_fichiers),$recurs); - foreach($liste as $chemin){ - $nom = substr(dirname($chemin),strlen($f)); - // ne prendre que les fichiers pas deja trouves - // car find_in_path prend le premier qu'il trouve, - // les autres sont donc masques - if (!isset($liste_fichiers[$nom])) - $liste_fichiers[$nom] = $chemin; - } - } - } - foreach($liste_fichiers as $short=>$fullpath){ - $skins[$short] = array('nom'=>basename($short)); - if (file_exists($f = dirname($fullpath)."/vignette.jpg")) - $skins[$short]['img'] = $f; - } - return $skins; -} - -function box_choisir_skin($skins,$selected,$name='skin'){ - $out = ""; - if (!is_array($skins) OR !count($skins)) - return $out; - foreach($skins as $k=>$skin){ - $id = "${name}_".preg_replace(",[^a-z0-9_],i", "_", $k); - $sel = ($selected=="$k" ?" checked='checked'":''); - $balise_img = chercher_filtre('balise_img'); - $label = isset($skin['img'])? - ''.$balise_img($skin['img'],$skin['nom'])."" - :$skin['nom']; - - $out .= "
      "; - $out .= ""; - $out .= ""; - $out .= "
      \n"; - } - return $out; -} - - -function formulaires_configurer_mediabox_charger_dist(){ - $valeurs = mediabox_config(true); - $valeurs['_skins'] = box_lister_skins(); - - return $valeurs; -} - -function formulaires_configurer_mediabox_traiter_dist(){ - $config = mediabox_config(true); - - include_spip('inc/meta'); - if (_request('reinit')){ - foreach ($config as $k=>$v){ - set_request($k); - } - effacer_meta('mediabox'); - } - else { - // cas particulier de la checkbox : - if (!_request('active')) - set_request('active','non'); - foreach ($config as $k=>$v){ - if (!is_null(_request($k))) - $config[$k] = _request($k); - } - ecrire_meta('mediabox',serialize($config)); - } - - return array('message_ok'=>_T('config_info_enregistree'),'editable'=>true); -} - -?> + array('nom' => _T('mediabox:label_aucun_style'))); + + $maxfiles = 1000; + $liste_fichiers = array(); + $recurs = array(); + foreach (creer_chemin() as $d) { + $f = $d . 'colorbox/'; + if (@is_dir($f)) { + $liste = preg_files($f, 'colorbox[.]css$', $maxfiles - count($liste_fichiers), $recurs); + foreach ($liste as $chemin) { + $nom = substr(dirname($chemin), strlen($f)); + // ne prendre que les fichiers pas deja trouves + // car find_in_path prend le premier qu'il trouve, + // les autres sont donc masques + if (!isset($liste_fichiers[$nom])) { + $liste_fichiers[$nom] = $chemin; + } + } + } + } + foreach ($liste_fichiers as $short => $fullpath) { + $skins[$short] = array('nom' => basename($short)); + if (file_exists($f = dirname($fullpath) . '/vignette.jpg')) { + $skins[$short]['img'] = $f; + } + } + + return $skins; +} + +function box_choisir_skin($skins, $selected, $name = 'skin') { + $out = ''; + if (!is_array($skins) or !count($skins)) { + return $out; + } + foreach ($skins as $k => $skin) { + $id = "${name}_" . preg_replace(',[^a-z0-9_],i', '_', $k); + $sel = ($selected == "$k" ? " checked='checked'" : ''); + $balise_img = chercher_filtre('balise_img'); + $label = isset($skin['img']) ? + '' . $balise_img($skin['img'], + $skin['nom']) . '' + : $skin['nom']; + + $out .= "
      "; + $out .= ""; + $out .= ""; + $out .= "
      \n"; + } + + return $out; +} + + +function formulaires_configurer_mediabox_charger_dist() { + $valeurs = mediabox_config(true); + $valeurs['_skins'] = box_lister_skins(); + + return $valeurs; +} + +function formulaires_configurer_mediabox_traiter_dist() { + $config = mediabox_config(true); + + include_spip('inc/meta'); + if (_request('reinit')) { + foreach ($config as $k => $v) { + set_request($k); + } + effacer_meta('mediabox'); + } else { + // cas particulier de la checkbox : + if (!_request('active')) { + set_request('active', 'non'); + } + foreach ($config as $k => $v) { + if (!is_null(_request($k))) { + $config[$k] = _request($k); + } + } + ecrire_meta('mediabox', serialize($config)); + } + + return array('message_ok' => _T('config_info_enregistree'), 'editable' => true); +} diff --git a/www/plugins-dist/mediabox/javascript/jquery.colorbox.js b/www/plugins-dist/mediabox/javascript/jquery.colorbox.js index d588171d..a61df467 100644 --- a/www/plugins-dist/mediabox/javascript/jquery.colorbox.js +++ b/www/plugins-dist/mediabox/javascript/jquery.colorbox.js @@ -1,985 +1,1142 @@ -// ColorBox v1.3.20.1 - jQuery lightbox plugin -// (c) 2011 Jack Moore - jacklmoore.com -// License: http://www.opensource.org/licenses/mit-license.php -// + minWidth&minHeight support -// + colorbox_class support -(function ($, document, window) { - var - // Default settings object. - // See http://jacklmoore.com/colorbox for details. - defaults = { - transition: "elastic", - speed: 300, - width: false, - initialWidth: "600", - innerWidth: false, - maxWidth: false, - minWidth:false, - height: false, - initialHeight: "450", - innerHeight: false, - maxHeight: false, - minHeight:false, - scalePhotos: true, - scrolling: true, - inline: false, - html: false, - iframe: false, - fastIframe: true, - photo: false, - href: false, - title: false, - rel: false, - opacity: 0.9, - preloading: true, - - current: "image {current} of {total}", - previous: "previous", - next: "next", - close: "close", - xhrError: "This content failed to load.", - imgError: "This image failed to load.", - - open: false, - returnFocus: true, - reposition: true, - loop: true, - slideshow: false, - slideshowAuto: true, - slideshowSpeed: 2500, - slideshowStart: "start slideshow", - slideshowStop: "stop slideshow", - onOpen: false, - onLoad: false, - onComplete: false, - onCleanup: false, - onClosed: false, - overlayClose: true, - escKey: true, - arrowKey: true, - top: false, - bottom: false, - left: false, - right: false, - fixed: false, - data: undefined - }, - - // Abstracting the HTML and event identifiers for easy rebranding - colorbox = 'colorbox', - colorbox_class = 'box_mediabox box_modalbox', - prefix = 'cbox', - boxElement = prefix + 'Element', - - // Events - event_open = prefix + '_open', - event_load = prefix + '_load', - event_complete = prefix + '_complete', - event_cleanup = prefix + '_cleanup', - event_closed = prefix + '_closed', - event_purge = prefix + '_purge', - - // Special Handling for IE - isIE = !$.support.opacity && !$.support.style, // IE7 & IE8 - isIE6 = isIE && !window.XMLHttpRequest, // IE6 - event_ie6 = prefix + '_IE6', - - // Cached jQuery Object Variables - $overlay, - $box, - $wrap, - $content, - $topBorder, - $leftBorder, - $rightBorder, - $bottomBorder, - $related, - $window, - $loaded, - $loadingBay, - $loadingOverlay, - $title, - $current, - $slideshow, - $next, - $prev, - $close, - $groupControls, - - // Variables for cached values or use across multiple functions - settings, - interfaceHeight, - interfaceWidth, - loadedHeight, - loadedWidth, - element, - index, - photo, - open, - active, - closing, - loadingTimer, - publicMethod, - div = "div", - init; - - // **************** - // HELPER FUNCTIONS - // **************** - - // Convience function for creating new jQuery objects - function $tag(tag, id, css) { - var element = document.createElement(tag); - - if (id) { - element.id = prefix + id; - } - - if (css) { - element.style.cssText = css; - } - - return $(element); - } - - // Determine the next and previous members in a group. - function getIndex(increment) { - var - max = $related.length, - newIndex = (index + increment) % max; - - return (newIndex < 0) ? max + newIndex : newIndex; - } - - // Convert '%' and 'px' values to integers - function setSize(size, dimension) { - return Math.round((/%/.test(size) ? ((dimension === 'x' ? winWidth() : winHeight()) / 100) : 1) * parseInt(size, 10)); - } - - // Checks an href to see if it is a photo. - // There is a force photo option (photo: true) for hrefs that cannot be matched by this regex. - function isImage(url) { - return settings.photo || /\.(gif|png|jp(e|g|eg)|bmp|ico)((#|\?).*)?$/i.test(url); - } - - function winWidth() { - // $(window).width() is incorrect for some mobile browsers, but - // window.innerWidth is unsupported in IE8 and lower. - return window.innerWidth || $window.width(); - } - - function winHeight() { - return window.innerHeight || $window.height(); - } - - // Assigns function results to their respective properties - function makeSettings() { - var i, - data = $.data(element, colorbox); - - if (data == null) { - settings = $.extend({}, defaults); - if (console && console.log) { - console.log('Error: cboxElement missing settings object'); - } - } else { - settings = $.extend({}, data); - } - - for (i in settings) { - if ($.isFunction(settings[i]) && i.slice(0, 2) !== 'on') { // checks to make sure the function isn't one of the callbacks, they will be handled at the appropriate time. - settings[i] = settings[i].call(element); - } - } - - settings.rel = settings.rel || element.rel || $(element).data('rel') || 'nofollow'; - settings.href = settings.href || $(element).attr('href'); - settings.title = settings.title || element.title; - - if (typeof settings.href === "string") { - settings.href = $.trim(settings.href); - } - } - - function trigger(event, callback) { - $.event.trigger(event); - if (callback) { - callback.call(element); - } - } - - // Slideshow functionality - function slideshow() { - var - timeOut, - className = prefix + "Slideshow_", - click = "click." + prefix, - start, - stop, - clear; - - if (settings.slideshow && $related[1]) { - start = function () { - $slideshow - .text(settings.slideshowStop) - .unbind(click) - .bind(event_complete, function () { - if (settings.loop || $related[index + 1]) { - timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed); - } - }) - .bind(event_load, function () { - clearTimeout(timeOut); - }) - .one(click + ' ' + event_cleanup, stop); - $box.removeClass(className + "off").addClass(className + "on"); - timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed); - }; - - stop = function () { - clearTimeout(timeOut); - $slideshow - .text(settings.slideshowStart) - .unbind([event_complete, event_load, event_cleanup, click].join(' ')) - .one(click, function () { - publicMethod.next(); - start(); - }); - $box.removeClass(className + "on").addClass(className + "off"); - }; - - if (settings.slideshowAuto) { - start(); - } else { - stop(); - } - } else { - $box.removeClass(className + "off " + className + "on"); - } - } - - var init_dimensions = false; - function launch(target) { - if (!closing) { - - element = target; - - makeSettings(); - - $related = $(element); - - index = 0; - - if (settings.rel !== 'nofollow') { - $related = $('.' + boxElement).filter(function () { - var data = $.data(this, colorbox), - relRelated; - - if (data) { - relRelated = $(this).data('rel') || data.rel || this.rel; - } - - return (relRelated === settings.rel); - }); - index = $related.index(element); - - // Check direct calls to ColorBox. - if (index === -1) { - $related = $related.add(element); - index = $related.length - 1; - } - } - - if (!open) { - if (!init_dimensions) { - init_dimensions = true; - // Cache values needed for size calculations - interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();//Subtraction needed for IE6 - interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width(); - loadedHeight = $loaded.outerHeight(true); - loadedWidth = $loaded.outerWidth(true); - - // Setting padding to remove the need to do size conversions during the animation step. - $box.css({"padding-bottom": interfaceHeight, "padding-right": interfaceWidth}); - } - - open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys. - - $box.show(); - - if (settings.returnFocus) { - $(element).blur().one(event_closed, function () { - $(this).focus(); - }); - } - - // +settings.opacity avoids a problem in IE when using non-zero-prefixed-string-values, like '.5' - $overlay.css({"opacity": +settings.opacity, "cursor": settings.overlayClose ? "pointer" : "auto"}).show(); - - // Opens inital empty ColorBox prior to content being loaded. - settings.w = setSize(settings.initialWidth, 'x'); - settings.h = setSize(settings.initialHeight, 'y'); - publicMethod.position(); - - if (isIE6) { - $window.bind('resize.' + event_ie6 + ' scroll.' + event_ie6, function () { - $overlay.css({width: winWidth(), height: winHeight(), top: $window.scrollTop(), left: $window.scrollLeft()}); - }).trigger('resize.' + event_ie6); - } - - trigger(event_open, settings.onOpen); - - $groupControls.add($title).hide(); - - $close.html(settings.close).show(); - } - - publicMethod.load(true); - } - } - - // ColorBox's markup needs to be added to the DOM prior to being called - // so that the browser will go ahead and load the CSS background images. - function appendHTML() { - if (!$box && document.body) { - init = false; - - $window = $(window); - $box = $tag(div).attr({id: colorbox, 'class': (isIE ? prefix + (isIE6 ? 'IE6' : 'IE') : '')+colorbox_class}).hide(); - $overlay = $tag(div, "Overlay", isIE6 ? 'position:absolute' : '').hide(); - $loadingOverlay = $tag(div, "LoadingOverlay").add($tag(div, "LoadingGraphic")); - $wrap = $tag(div, "Wrapper"); - $content = $tag(div, "Content").append( - $loaded = $tag(div, "LoadedContent", 'width:0; height:0; overflow:hidden'), - $title = $tag(div, "Title"), - $current = $tag(div, "Current"), - $next = $tag(div, "Next"), - $prev = $tag(div, "Previous"), - $slideshow = $tag(div, "Slideshow").bind(event_open, slideshow), - $close = $tag(div, "Close") - ); - - $wrap.append( // The 3x3 Grid that makes up ColorBox - $tag(div).append( - $tag(div, "TopLeft"), - $topBorder = $tag(div, "TopCenter"), - $tag(div, "TopRight") - ), - $tag(div, false, 'clear:left').append( - $leftBorder = $tag(div, "MiddleLeft"), - $content, - $rightBorder = $tag(div, "MiddleRight") - ), - $tag(div, false, 'clear:left').append( - $tag(div, "BottomLeft"), - $bottomBorder = $tag(div, "BottomCenter"), - $tag(div, "BottomRight") - ) - ).find('div div').css({'float': 'left'}); - - $loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none'); - - $groupControls = $next.add($prev).add($current).add($slideshow); - - $(document.body).append($overlay, $box.append($wrap, $loadingBay)); - } - } - - // Add ColorBox's event bindings - function addBindings() { - if ($box) { - if (!init) { - init = true; - - // Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly. - $next.click(function () { - publicMethod.next(); - }); - $prev.click(function () { - publicMethod.prev(); - }); - $close.click(function () { - publicMethod.close(); - }); - $overlay.click(function () { - if (settings.overlayClose) { - publicMethod.close(); - } - }); - - // Key Bindings - $(document).bind('keydown.' + prefix, function (e) { - var key = e.keyCode; - if (open && settings.escKey && key === 27) { - e.preventDefault(); - publicMethod.close(); - } - if (open && settings.arrowKey && $related[1]) { - if (key === 37) { - e.preventDefault(); - $prev.click(); - } else if (key === 39) { - e.preventDefault(); - $next.click(); - } - } - }); - - $('.' + boxElement, document).live('click', function (e) { - // ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt. - // See: http://jacklmoore.com/notes/click-events/ - if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey)) { - e.preventDefault(); - launch(this); - } - }); - } - return true; - } - return false; - } - - // Don't do anything if ColorBox already exists. - if ($.colorbox) { - return; - } - - // Append the HTML when the DOM loads - $(appendHTML); - - - // **************** - // PUBLIC FUNCTIONS - // Usage format: $.fn.colorbox.close(); - // Usage from within an iframe: parent.$.fn.colorbox.close(); - // **************** - - publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) { - var $this = this; - - options = options || {}; - - appendHTML(); - - if (addBindings()) { - if (!$this[0]) { - if ($this.selector) { // if a selector was given and it didn't match any elements, go ahead and exit. - return $this; - } - // if no selector was given (ie. $.colorbox()), create a temporary element to work with - $this = $(''); - options.open = true; // assume an immediate open - } - - if (callback) { - options.onComplete = callback; - } - - $this.each(function () { - $.data(this, colorbox, $.extend({}, $.data(this, colorbox) || defaults, options)); - var eltclass = $(this).attr('class'); - if (eltclass){ - if (eltclass.indexOf("boxWidth-")!==-1) { - var w = eltclass.match(/boxWidth-([^\s'">]*)/); - w = w[1].replace(/pc/,'%'); // % not allowed in html attribute ; use 100pc instead of 100% - $.data(this, colorbox, $.extend($.data(this, colorbox),{width:w})); - } - if (eltclass.indexOf("boxHeight-")!==-1) { - var h = eltclass.match(/boxHeight-([^\s'">]*)/); - h = h[1].replace(/pc/,'%'); // % not allowed in html attribute ; use 100pc instead of 100% - $.data(this, colorbox, $.extend($.data(this, colorbox),{height:h})); - } - if (eltclass.indexOf("boxIframe")!==-1) { - $.data(this, colorbox, $.extend($.data(this, colorbox),{iframe:true})); - } - if (eltclass.indexOf("boxInline")!==-1) { - $.data(this, colorbox, $.extend($.data(this, colorbox),{inline:true})); - } - if (eltclass.indexOf("boxSlideshow_off")!==-1) { - $.data(this, colorbox, $.extend($.data(this, colorbox),{slideshow:false})); - } - } - }).addClass(boxElement); - - if (($.isFunction(options.open) && options.open.call($this)) || options.open) { - launch($this[0]); - } - } - - return $this; - }; - - publicMethod.position = function (speed, loadedCallback) { - var - css, - top = 0, - left = 0, - offset = $box.offset(), - scrollTop, - scrollLeft; - - $window.unbind('resize.' + prefix); - - // remove the modal so that it doesn't influence the document width/height - $box.css({top: -9e4, left: -9e4}); - - scrollTop = $window.scrollTop(); - scrollLeft = $window.scrollLeft(); - - if (settings.fixed && !isIE6) { - offset.top -= scrollTop; - offset.left -= scrollLeft; - $box.css({position: 'fixed'}); - } else { - top = scrollTop; - left = scrollLeft; - $box.css({position: 'absolute'}); - } - - // keeps the top and left positions within the browser's viewport. - if (settings.right !== false) { - left += Math.max(winWidth() - settings.w - loadedWidth - interfaceWidth - setSize(settings.right, 'x'), 0); - } else if (settings.left !== false) { - left += setSize(settings.left, 'x'); - } else { - left += Math.round(Math.max(winWidth() - settings.w - loadedWidth - interfaceWidth, 0) / 2); - } - - if (settings.bottom !== false) { - top += Math.max(winHeight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.bottom, 'y'), 0); - } else if (settings.top !== false) { - top += setSize(settings.top, 'y'); - } else { - top += Math.round(Math.max(winHeight() - settings.h - loadedHeight - interfaceHeight, 0) / 2); - } - - $box.css({top: offset.top, left: offset.left}); - - // setting the speed to 0 to reduce the delay between same-sized content. - speed = ($box.width() === settings.w + loadedWidth && $box.height() === settings.h + loadedHeight) ? 0 : speed || 0; - - // this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly, - // but it has to be shrank down around the size of div#colorbox when it's done. If not, - // it can invoke an obscure IE bug when using iframes. - $wrap[0].style.width = $wrap[0].style.height = "9999px"; - - function modalDimensions(that) { - $topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = that.style.width; - $content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = that.style.height; - } - - css = {width: settings.w + loadedWidth, height: settings.h + loadedHeight, top: top, left: left}; - if(speed===0){ // temporary workaround to side-step jQuery-UI 1.8 bug (http://bugs.jquery.com/ticket/12273) - $box.css(css); - } - $box.dequeue().animate(css, { - duration: speed, - complete: function () { - modalDimensions(this); - - active = false; - - // shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation. - $wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px"; - $wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px"; - - if (settings.reposition) { - setTimeout(function () { // small delay before binding onresize due to an IE8 bug. - $window.bind('resize.' + prefix, publicMethod.position); - }, 1); - } - - if (loadedCallback) { - loadedCallback(); - } - }, - step: function () { - modalDimensions(this); - } - }); - }; - - publicMethod.resize = function (options) { - if (open) { - options = options || {}; - - if (options.width) { - settings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth; - } - if (options.innerWidth) { - settings.w = setSize(options.innerWidth, 'x'); - } - $loaded.css({width: settings.w}); - - if (options.height) { - settings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight; - } - if (options.innerHeight) { - settings.h = setSize(options.innerHeight, 'y'); - } - if (!options.innerHeight && !options.height) { - $loaded.css({height: "auto"}); - settings.h = $loaded.height(); - } - $loaded.css({height: settings.h}); - - publicMethod.position(settings.transition === "none" ? 0 : settings.speed); - } - }; - - publicMethod.prep = function (object) { - if (!open) { - return; - } - - var callback, speed = settings.transition === "none" ? 0 : settings.speed; - - $loaded.remove(); - $loaded = $tag(div, 'LoadedContent').append(object); - - function getWidth() { - settings.w = settings.w || $loaded.width(); - settings.w = settings.minw && settings.minw > settings.w ? settings.minw : settings.w; - settings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w; - return settings.w; - } - function getHeight() { - settings.h = settings.h || $loaded.height(); - settings.h = settings.minh && settings.minh > settings.h ? settings.minh : settings.h; - settings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h; - return settings.h; - } - - $loaded.hide() - .appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations. - .css({width: getWidth(), overflow: settings.scrolling ? 'auto' : 'hidden'}) - .css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height. - .prependTo($content); - - $loadingBay.hide(); - - // floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width. - //$(photo).css({'float': 'none', marginLeft: 'auto', marginRight: 'auto'}); - - $(photo).css({'float': 'none'}); - - // Hides SELECT elements in IE6 because they would otherwise sit on top of the overlay. - if (isIE6) { - $('select').not($box.find('select')).filter(function () { - return this.style.visibility !== 'hidden'; - }).css({'visibility': 'hidden'}).one(event_cleanup, function () { - this.style.visibility = 'inherit'; - }); - } - - callback = function () { - var preload, - i, - total = $related.length, - iframe, - frameBorder = 'frameBorder', - allowTransparency = 'allowTransparency', - complete, - src, - img, - data; - - if (!open) { - return; - } - - function removeFilter() { - if (isIE) { - $box[0].style.removeAttribute('filter'); - } - } - - complete = function () { - clearTimeout(loadingTimer); - // Detaching forces Andriod stock browser to redraw the area underneat the loading overlay. Hiding alone isn't enough. - $loadingOverlay.detach().hide(); - trigger(event_complete, settings.onComplete); - }; - - if (isIE) { - //This fadeIn helps the bicubic resampling to kick-in. - if (photo) { - $loaded.fadeIn(100); - } - } - - $title.html(settings.title).add($loaded).show(); - - if (total > 1) { // handle grouping - if (typeof settings.current === "string") { - $current.html(settings.current.replace('{current}', index + 1).replace('{total}', total)).show(); - } - - $next[(settings.loop || index < total - 1) ? "show" : "hide"]().html(settings.next); - $prev[(settings.loop || index) ? "show" : "hide"]().html(settings.previous); - - if (settings.slideshow) { - $slideshow.show(); - } - - // Preloads images within a rel group - if (settings.preloading) { - preload = [ - getIndex(-1), - getIndex(1) - ]; - while (i = $related[preload.pop()]) { - data = $.data(i, colorbox); - - if (data && data.href) { - src = data.href; - if ($.isFunction(src)) { - src = src.call(i); - } - } else { - src = i.href; - } - - if (isImage(src)) { - img = new Image(); - img.src = src; - } - } - } - } else { - $groupControls.hide(); - } - - if (settings.iframe) { - iframe = $tag('iframe')[0]; - - if (frameBorder in iframe) { - iframe[frameBorder] = 0; - } - if (allowTransparency in iframe) { - iframe[allowTransparency] = "true"; - } - // give the iframe a unique name to prevent caching - iframe.name = prefix + (+new Date()); - if (settings.fastIframe) { - complete(); - } else { - $(iframe).one('load', complete); - } - iframe.src = settings.href; - if (!settings.scrolling) { - iframe.scrolling = "no"; - } - $(iframe).addClass(prefix + 'Iframe').appendTo($loaded).one(event_purge, function () { - iframe.src = "//about:blank"; - }); - } else { - complete(); - } - - if (settings.transition === 'fade') { - $box.fadeTo(speed, 1, removeFilter); - } else { - removeFilter(); - } - }; - - if (settings.transition === 'fade') { - $box.fadeTo(speed, 0, function () { - publicMethod.position(0, callback); - }); - } else { - publicMethod.position(speed, callback); - } - }; - - publicMethod.load = function (launched) { - var href, setResize, prep = publicMethod.prep; - - active = true; - - photo = false; - - element = $related[index]; - - if (!launched) { - makeSettings(); - } - - trigger(event_purge); - - trigger(event_load, settings.onLoad); - - settings.h = settings.height ? - setSize(settings.height, 'y') - loadedHeight - interfaceHeight : - settings.innerHeight && setSize(settings.innerHeight, 'y'); - - settings.w = settings.width ? - setSize(settings.width, 'x') - loadedWidth - interfaceWidth : - settings.innerWidth && setSize(settings.innerWidth, 'x'); - - // Sets the minimum dimensions for use in image scaling - settings.mw = settings.w; - settings.mh = settings.h; - settings.minw = settings.w; - settings.minh = settings.h; - - // Re-evaluate the minimum width and height based on maxWidth and maxHeight values. - // If the width or height exceed the maxWidth or maxHeight, use the maximum values instead. - if (settings.maxWidth) { - settings.mw = setSize(settings.maxWidth, 'x') - loadedWidth - interfaceWidth; - settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw; - } - if(settings.minWidth){ - settings.minw = setSize(settings.minWidth, 'x') - loadedWidth - interfaceWidth; - settings.minw = settings.w && settings.w > settings.minw ? settings.w : settings.minw; - } - if (settings.maxHeight) { - settings.mh = setSize(settings.maxHeight, 'y') - loadedHeight - interfaceHeight; - settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh; - } - if(settings.minHeight){ - settings.minh = setSize(settings.minHeight, 'y') - loadedHeight - interfaceHeight; - settings.minh = settings.h && settings.h > settings.minh ? settings.h : settings.minh; - } - - href = settings.href; - - loadingTimer = setTimeout(function () { - $loadingOverlay.show().appendTo($content); - }, 100); - - if (settings.inline) { - // Inserts an empty placeholder where inline content is being pulled from. - // An event is bound to put inline content back when ColorBox closes or loads new content. - $tag(div).hide().insertBefore($(href)[0]).one(event_purge, function () { - $(this).replaceWith($loaded.children()); - }); - prep($(href)); - } else if (settings.iframe) { - // IFrame element won't be added to the DOM until it is ready to be displayed, - // to avoid problems with DOM-ready JS that might be trying to run in that iframe. - prep(" "); - } else if (settings.html) { - prep(settings.html); - } else if (isImage(href)) { - $(photo = new Image()) - .addClass(prefix + 'Photo') - .error(function () { - settings.title = false; - prep($tag(div, 'Error').html(settings.imgError)); - }) - .load(function () { - var percent; - photo.onload = null; //stops animated gifs from firing the onload repeatedly. - - if (settings.scalePhotos) { - setResize = function () { - photo.height -= photo.height * percent; - photo.width -= photo.width * percent; - }; - if (settings.mw && photo.width > settings.mw) { - percent = (photo.width - settings.mw) / photo.width; - setResize(); - } - if (settings.mh && photo.height > settings.mh) { - percent = (photo.height - settings.mh) / photo.height; - setResize(); - } - } - - if (settings.h) { - photo.style.marginTop = Math.max(settings.h - photo.height, 0) / 2 + 'px'; - } - - if ($related[1] && (settings.loop || $related[index + 1])) { - photo.style.cursor = 'pointer'; - photo.onclick = function () { - publicMethod.next(); - }; - } - - if (isIE) { - photo.style.msInterpolationMode = 'bicubic'; - } - - setTimeout(function () { // A pause because Chrome will sometimes report a 0 by 0 size otherwise. - prep(photo); - }, 1); - }); - - setTimeout(function () { // A pause because Opera 10.6+ will sometimes not run the onload function otherwise. - photo.src = href; - }, 1); - } else if (href) { - $loadingBay.load(href, settings.data, function (data, status, xhr) { - prep(status === 'error' ? $tag(div, 'Error').html(settings.xhrError) : $(this).contents()); - }); - } - }; - - // Navigates to the next page/image in a set. - publicMethod.next = function () { - if (!active && $related[1] && (settings.loop || $related[index + 1])) { - index = getIndex(1); - publicMethod.load(); - } - }; - - publicMethod.prev = function () { - if (!active && $related[1] && (settings.loop || index)) { - index = getIndex(-1); - publicMethod.load(); - } - }; - - // Note: to use this within an iframe use the following format: parent.$.fn.colorbox.close(); - publicMethod.close = function () { - if (open && !closing) { - - closing = true; - - open = false; - - trigger(event_cleanup, settings.onCleanup); - - $window.unbind('.' + prefix + ' .' + event_ie6); - - $overlay.fadeTo(200, 0); - - $box.stop().fadeTo(300, 0, function () { - - $box.add($overlay).css({'opacity': 1, cursor: 'auto'}).hide(); - - trigger(event_purge); - - $loaded.remove(); - - setTimeout(function () { - closing = false; - trigger(event_closed, settings.onClosed); - }, 1); - }); - } - }; - - // Removes changes ColorBox made to the document, but does not remove the plugin - // from jQuery. - publicMethod.remove = function () { - $([]).add($box).add($overlay).remove(); - $box = null; - $('.' + boxElement) - .removeData(colorbox) - .removeClass(boxElement) - .die(); - }; - - // A method for fetching the current element ColorBox is referencing. - // returns a jQuery object. - publicMethod.element = function () { - return $(element); - }; - - publicMethod.settings = defaults; - -}(jQuery, document, this)); \ No newline at end of file +/*! + Colorbox 1.6.4 + license: MIT + http://www.jacklmoore.com/colorbox +*/ +(function ($, document, window) { + var + // Default settings object. + // See http://jacklmoore.com/colorbox for details. + defaults = { + // data sources + html: false, + photo: false, + iframe: false, + inline: false, + + // behavior and appearance + transition: "elastic", + speed: 300, + fadeOut: 300, + width: false, + initialWidth: "600", + innerWidth: false, + maxWidth: false, + minWidth:false, + height: false, + initialHeight: "450", + innerHeight: false, + maxHeight: false, + minHeight:false, + scalePhotos: true, + scrolling: true, + opacity: 0.9, + preloading: true, + className: false, + overlayClose: true, + escKey: true, + arrowKey: true, + top: false, + bottom: false, + left: false, + right: false, + fixed: false, + data: undefined, + closeButton: true, + fastIframe: true, + open: false, + reposition: true, + loop: true, + slideshow: false, + slideshowAuto: true, + slideshowSpeed: 2500, + slideshowStart: "start slideshow", + slideshowStop: "stop slideshow", + photoRegex: /\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i, + + // alternate image paths for high-res displays + retinaImage: false, + retinaUrl: false, + retinaSuffix: '@2x.$1', + + // internationalization + current: "image {current} of {total}", + previous: "previous", + next: "next", + close: "close", + xhrError: "This content failed to load.", + imgError: "This image failed to load.", + + // accessbility + returnFocus: true, + trapFocus: true, + + // callbacks + onOpen: false, + onLoad: false, + onComplete: false, + onCleanup: false, + onClosed: false, + + rel: function() { + return this.rel; + }, + href: function() { + // using this.href would give the absolute url, when the href may have been inteded as a selector (e.g. '#container') + return $(this).attr('href'); + }, + title: function() { + return this.title; + }, + createImg: function() { + var img = new Image(); + var attrs = $(this).data('cbox-img-attrs'); + + if (typeof attrs === 'object') { + $.each(attrs, function(key, val){ + img[key] = val; + }); + } + + return img; + }, + createIframe: function() { + var iframe = document.createElement('iframe'); + var attrs = $(this).data('cbox-iframe-attrs'); + + if (typeof attrs === 'object') { + $.each(attrs, function(key, val){ + iframe[key] = val; + }); + } + + if ('frameBorder' in iframe) { + iframe.frameBorder = 0; + } + if ('allowTransparency' in iframe) { + iframe.allowTransparency = "true"; + } + iframe.name = (new Date()).getTime(); // give the iframe a unique name to prevent caching + iframe.allowFullscreen = true; + + return iframe; + } + }, + + // Abstracting the HTML and event identifiers for easy rebranding + colorbox = 'colorbox', + colorbox_class = 'box_mediabox box_modalbox', + prefix = 'cbox', + boxElement = prefix + 'Element', + + // Events + event_open = prefix + '_open', + event_load = prefix + '_load', + event_complete = prefix + '_complete', + event_cleanup = prefix + '_cleanup', + event_closed = prefix + '_closed', + event_purge = prefix + '_purge', + + // Cached jQuery Object Variables + $overlay, + $box, + $wrap, + $content, + $topBorder, + $leftBorder, + $rightBorder, + $bottomBorder, + $related, + $window, + $loaded, + $loadingBay, + $loadingOverlay, + $title, + $current, + $slideshow, + $next, + $prev, + $close, + $groupControls, + $events = $(''), // $({}) would be prefered, but there is an issue with jQuery 1.4.2 + + // Variables for cached values or use across multiple functions + settings, + interfaceHeight, + interfaceWidth, + loadedHeight, + loadedWidth, + index, + photo, + open, + active, + closing, + loadingTimer, + publicMethod, + div = "div", + requests = 0, + previousCSS = {}, + init; + + // **************** + // HELPER FUNCTIONS + // **************** + + // Convenience function for creating new jQuery objects + function $tag(tag, id, css) { + var element = document.createElement(tag); + + if (id) { + element.id = prefix + id; + } + + if (css) { + element.style.cssText = css; + } + + return $(element); + } + + // Get the window height using innerHeight when available to avoid an issue with iOS + // http://bugs.jquery.com/ticket/6724 + function winheight() { + return window.innerHeight ? window.innerHeight : $(window).height(); + } + + function Settings(element, options) { + if (options !== Object(options)) { + options = {}; + } + + this.cache = {}; + this.el = element; + + this.value = function(key) { + var dataAttr; + + if (this.cache[key] === undefined) { + dataAttr = $(this.el).attr('data-cbox-'+key); + + if (dataAttr !== undefined) { + this.cache[key] = dataAttr; + } else if (options[key] !== undefined) { + this.cache[key] = options[key]; + } else if (defaults[key] !== undefined) { + this.cache[key] = defaults[key]; + } + } + + return this.cache[key]; + }; + + this.get = function(key) { + var value = this.value(key); + return $.isFunction(value) ? value.call(this.el, this) : value; + }; + } + + // Determine the next and previous members in a group. + function getIndex(increment) { + var + max = $related.length, + newIndex = (index + increment) % max; + + return (newIndex < 0) ? max + newIndex : newIndex; + } + + // Convert '%' and 'px' values to integers + function setSize(size, dimension) { + return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : winheight()) / 100) : 1) * parseInt(size, 10)); + } + + // Checks an href to see if it is a photo. + // There is a force photo option (photo: true) for hrefs that cannot be matched by the regex. + function isImage(settings, url) { + return settings.get('photo') || settings.get('photoRegex').test(url); + } + + function retinaUrl(settings, url) { + return settings.get('retinaUrl') && window.devicePixelRatio > 1 ? url.replace(settings.get('photoRegex'), settings.get('retinaSuffix')) : url; + } + + function trapFocus(e) { + if ('contains' in $box[0] && !$box[0].contains(e.target) && e.target !== $overlay[0]) { + e.stopPropagation(); + $box.focus(); + } + } + + function setClass(str) { + if (setClass.str !== str) { + $box.add($overlay).removeClass(setClass.str).addClass(str); + setClass.str = str; + } + } + + function getRelated(rel) { + index = 0; + + if (rel && rel !== false && rel !== 'nofollow') { + $related = $('.' + boxElement).filter(function () { + var options = $.data(this, colorbox); + var settings = new Settings(this, options); + return (settings.get('rel') === rel); + }); + index = $related.index(settings.el); + + // Check direct calls to Colorbox. + if (index === -1) { + $related = $related.add(settings.el); + index = $related.length - 1; + } + } else { + $related = $(settings.el); + } + } + + function trigger(event) { + // for external use + $(document).trigger(event); + // for internal use + $events.triggerHandler(event); + } + + var slideshow = (function(){ + var active, + className = prefix + "Slideshow_", + click = "click." + prefix, + timeOut; + + function clear () { + clearTimeout(timeOut); + } + + function set() { + if (settings.get('loop') || $related[index + 1]) { + clear(); + timeOut = setTimeout(publicMethod.next, settings.get('slideshowSpeed')); + } + } + + function start() { + $slideshow + .html(settings.get('slideshowStop')) + .unbind(click) + .one(click, stop); + + $events + .bind(event_complete, set) + .bind(event_load, clear); + + $box.removeClass(className + "off").addClass(className + "on"); + } + + function stop() { + clear(); + + $events + .unbind(event_complete, set) + .unbind(event_load, clear); + + $slideshow + .html(settings.get('slideshowStart')) + .unbind(click) + .one(click, function () { + publicMethod.next(); + start(); + }); + + $box.removeClass(className + "on").addClass(className + "off"); + } + + function reset() { + active = false; + $slideshow.hide(); + clear(); + $events + .unbind(event_complete, set) + .unbind(event_load, clear); + $box.removeClass(className + "off " + className + "on"); + } + + return function(){ + if (active) { + if (!settings.get('slideshow')) { + $events.unbind(event_cleanup, reset); + reset(); + } + } else { + if (settings.get('slideshow') && $related[1]) { + active = true; + $events.one(event_cleanup, reset); + if (settings.get('slideshowAuto')) { + start(); + } else { + stop(); + } + $slideshow.show(); + } + } + }; + + }()); + + + function launch(element) { + var options; + + if (!closing) { + + options = $(element).data(colorbox); + + settings = new Settings(element, options); + + getRelated(settings.get('rel')); + + if (!open) { + open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys. + + setClass(settings.get('className')); + + // Show colorbox so the sizes can be calculated in older versions of jQuery + $box.css({visibility:'hidden', display:'block', opacity:''}); + + $loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden; visibility:hidden'); + $content.css({width:'', height:''}).append($loaded); + + // Cache values needed for size calculations + interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height(); + interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width(); + loadedHeight = $loaded.outerHeight(true); + loadedWidth = $loaded.outerWidth(true); + + // Opens inital empty Colorbox prior to content being loaded. + var initialWidth = setSize(settings.get('initialWidth'), 'x'); + var initialHeight = setSize(settings.get('initialHeight'), 'y'); + var maxWidth = settings.get('maxWidth'); + var maxHeight = settings.get('maxHeight'); + + settings.w = Math.max((maxWidth !== false ? Math.min(initialWidth, setSize(maxWidth, 'x')) : initialWidth) - loadedWidth - interfaceWidth, 0); + settings.h = Math.max((maxHeight !== false ? Math.min(initialHeight, setSize(maxHeight, 'y')) : initialHeight) - loadedHeight - interfaceHeight, 0); + + $loaded.css({width:'', height:settings.h}); + publicMethod.position(); + + trigger(event_open); + settings.get('onOpen'); + + $groupControls.add($title).hide(); + + $box.focus(); + + if (settings.get('trapFocus')) { + // Confine focus to the modal + // Uses event capturing that is not supported in IE8- + if (document.addEventListener) { + + document.addEventListener('focus', trapFocus, true); + + $events.one(event_closed, function () { + document.removeEventListener('focus', trapFocus, true); + }); + } + } + + // Return focus on closing + if (settings.get('returnFocus')) { + $events.one(event_closed, function () { + $(settings.el).focus(); + }); + } + } + + var opacity = parseFloat(settings.get('opacity')); + $overlay.css({ + opacity: opacity === opacity ? opacity : '', + cursor: settings.get('overlayClose') ? 'pointer' : '', + visibility: 'visible' + }).show(); + + if (settings.get('closeButton')) { + $close.html(settings.get('close')).appendTo($content); + } else { + $close.appendTo('
      '); // replace with .detach() when dropping jQuery < 1.4 + } + + load(); + } + } + + // Colorbox's markup needs to be added to the DOM prior to being called + // so that the browser will go ahead and load the CSS background images. + function appendHTML() { + if (!$box) { + init = false; + $window = $(window); + $box = $tag(div).attr({ + id: colorbox, + 'class': ($.support.opacity === false ? prefix + 'IE ' : '')+colorbox_class, // class for optional IE8 & lower targeted CSS. + role: 'dialog', + tabindex: '-1' + }).hide(); + $overlay = $tag(div, "Overlay").hide(); + $loadingOverlay = $([$tag(div, "LoadingOverlay")[0],$tag(div, "LoadingGraphic")[0]]); + $wrap = $tag(div, "Wrapper"); + $content = $tag(div, "Content").append( + $title = $tag(div, "Title"), + $current = $tag(div, "Current"), + $prev = $('
      \ No newline at end of file diff --git a/www/plugins-dist/medias/formulaires/changer_fichier_document.php b/www/plugins-dist/medias/formulaires/changer_fichier_document.php index 6086a937..592e5d0b 100644 --- a/www/plugins-dist/medias/formulaires/changer_fichier_document.php +++ b/www/plugins-dist/medias/formulaires/changer_fichier_document.php @@ -10,51 +10,54 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function formulaires_changer_fichier_document_charger_dist($id_document){ - $valeurs = sql_fetsel('id_document,fichier,distant','spip_documents','id_document='.intval($id_document)); - if (!$valeurs) - return array('editable'=>false); +function formulaires_changer_fichier_document_charger_dist($id_document) { + $valeurs = sql_fetsel('id_document,fichier,distant', 'spip_documents', 'id_document=' . intval($id_document)); + if (!$valeurs) { + return array('editable' => false); + } - $charger = charger_fonction('charger','formulaires/joindre_document'); - $valeurs = array_merge($valeurs,$charger($id_document,0,'','choix')); + $charger = charger_fonction('charger', 'formulaires/joindre_document'); + $valeurs = array_merge($valeurs, $charger($id_document, 0, '', 'choix')); $valeurs['_hidden'] .= ""; - + return $valeurs; } -function formulaires_changer_fichier_document_verifier_dist($id_document){ +function formulaires_changer_fichier_document_verifier_dist($id_document) { $erreurs = array(); - if (_request('copier_local')){ - } - else { - $verifier = charger_fonction('verifier','formulaires/joindre_document'); + if (_request('copier_local')) { + } else { + $verifier = charger_fonction('verifier', 'formulaires/joindre_document'); $erreurs = $verifier($id_document); } + return $erreurs; } -function formulaires_changer_fichier_document_traiter_dist($id_document){ - if (_request('copier_local')){ - $copier_local = charger_fonction('copier_local','action'); - $res = array('editable'=>true); - if (($err=$copier_local($id_document))===true) +function formulaires_changer_fichier_document_traiter_dist($id_document) { + if (_request('copier_local')) { + $copier_local = charger_fonction('copier_local', 'action'); + $res = array('editable' => true); + if (($err = $copier_local($id_document)) === true) { $res['message_ok'] = _T('medias:document_copie_locale_succes'); - else + } else { $res['message_erreur'] = $err; - } - else { + } + } else { // liberer le nom de l'ancien fichier pour permettre le remplacement par un fichier du meme nom - if ($ancien_fichier = sql_getfetsel('fichier','spip_documents','id_document='.intval($id_document)) - AND @file_exists($f = get_spip_doc($ancien_fichier))){ + if ($ancien_fichier = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($id_document)) + and @file_exists($f = get_spip_doc($ancien_fichier)) + ) { spip_unlink($f); } - $traiter = charger_fonction('traiter','formulaires/joindre_document'); + $traiter = charger_fonction('traiter', 'formulaires/joindre_document'); $res = $traiter($id_document); } + return $res; } - -?> \ No newline at end of file diff --git a/www/plugins-dist/medias/formulaires/configurer_documents.html b/www/plugins-dist/medias/formulaires/configurer_documents.html index dd14da03..f2fe34b2 100644 --- a/www/plugins-dist/medias/formulaires/configurer_documents.html +++ b/www/plugins-dist/medias/formulaires/configurer_documents.html @@ -8,16 +8,16 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
        + #ACTION_FORMULAIRE +
        #SET{name,documents_objets}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ]#INCLURE{fond=formulaires/inc-choisir-objets,name=#GET{name},selected=#ENV**{#GET{name}},exclus=spip_documents} -
      • +
        #SET{name,documents_date}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ]
        @@ -28,8 +28,8 @@
        -
      • -
      +
      +
      [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

       

      diff --git a/www/plugins-dist/medias/formulaires/configurer_documents.php b/www/plugins-dist/medias/formulaires/configurer_documents.php index bd94e0d9..d0b559ec 100644 --- a/www/plugins-dist/medias/formulaires/configurer_documents.php +++ b/www/plugins-dist/medias/formulaires/configurer_documents.php @@ -10,27 +10,51 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; - -function formulaires_configurer_documents_charger_dist(){ - foreach(array( - "documents_objets", - "documents_date", - ) as $m) - $valeurs[$m] = $GLOBALS['meta'][$m]; - $valeurs['documents_objets']=explode(',',$valeurs['documents_objets']); - return $valeurs; +/** + * Gestion du formulaire de configuration des documents + * + * @package SPIP\Medias\Formulaires + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; } +/** + * Chargement du formulaire de configuration des documents + * + * @return array + * Environnement du formulaire + **/ +function formulaires_configurer_documents_charger_dist() { + $valeurs = array(); + foreach (array( + 'documents_objets', + 'documents_date', + ) as $m) { + $valeurs[$m] = isset($GLOBALS['meta'][$m]) ? $GLOBALS['meta'][$m] : ''; + } + $valeurs['documents_objets'] = explode(',', $valeurs['documents_objets']); -function formulaires_configurer_documents_traiter_dist(){ - $res = array('editable'=>true); - if (!is_null($v=_request($m='documents_date'))) - ecrire_meta($m, $v=='oui'?'oui':'non'); - if (!is_null($v=_request($m='documents_objets'))) - ecrire_meta($m, is_array($v)?implode(',',$v):''); + return $valeurs; +} + +/** + * Traitement du formulaire de configuration des documents + * + * @return array + * Retours du traitement + **/ +function formulaires_configurer_documents_traiter_dist() { + $res = array('editable' => true); + if (!is_null($v = _request($m = 'documents_date'))) { + ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); + } + if (!is_null($v = _request($m = 'documents_objets'))) { + ecrire_meta($m, is_array($v) ? implode(',', $v) : ''); + } $res['message_ok'] = _T('config_info_enregistree'); + return $res; } - diff --git a/www/plugins-dist/medias/formulaires/editer_document.html b/www/plugins-dist/medias/formulaires/editer_document.html index 85a936d2..89902a60 100644 --- a/www/plugins-dist/medias/formulaires/editer_document.html +++ b/www/plugins-dist/medias/formulaires/editer_document.html @@ -5,72 +5,77 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} - + #ACTION_FORMULAIRE + [(#REM) un bouton submit pour enregistrer qui sera declenche par le return il ne doit pas etre hidden pour marcher dans safari ] -
      -
        -
      • - [ +
        + [(#REM) en cas d'appel en pop-in + on ajoute un bouton enregistrer en haut pour l'ergonomie + ][(#ENV{action}|match{popin}|oui)

        ] +
        +
        + [ (#ENV**{erreurs}|table_valeur{titre}) ] -
      • -
      • - [ - (#ENV**{erreurs}|table_valeur{parents}) - ] -
      • - [
      • +
      +
      + [ + (#ENV**{erreurs}|table_valeur{parents}) + ] +
      + [
      [ (#ENV**{erreurs}|table_valeur{fichier}) ] (#ENV{fichier})

      - [(#ENV{distant}|=={oui}|oui) ] + [(#ENV{distant}|=={oui}|et{#TAILLE|<{#CONST{_COPIE_LOCALE_MAX_SIZE}}}|oui)] [(#PIPELINE{editer_document_actions,#ARRAY{args,#ARRAY{id_document,#ENV{id_document,nouveau}},data,''}})] [<:bouton_changer:>]

      - #SET{upload,#INCLURE{fond=formulaires/inc-upload_document, env, joindre_upload=oui}} + #SET{upload,#INCLURE{fond=formulaires/inc-upload_document, env, joindre_upload=oui, multi=non}}
      #GET{upload}
      - ] -
    • - - [(#ENV{apercu}|oui) +
    • ] +
      + + [(#ENV{apercu}|oui)
      - [(#ENV{apercu}|image_reduire{300,200})] + [(#ENV{apercu}|image_reduire{320,200})] ] - [(#ENV{apercu}|non) + [(#ENV{apercu}|non) + #SET{hauteur,#HAUTEUR|et{#LARGEUR}|?{#HAUTEUR|div{#LARGEUR}|mult{320}|round{0},200}} + [(#MEDIA|=={audio}|oui) #SET{hauteur,0}] [(#ENV**{_inclus}|=={embed}|?{ - [(#MODELE{emb,id_document=#ENV{id_document,''},hauteur=200,largeur=300})] + [(#MODELE{emb,id_document=#ENV{id_document,''},largeur=320,hauteur=#GET{hauteur}})] , - [(#MODELE{doc,id_document=#ENV{id_document,''},hauteur=200,largeur=300}|extraire_balise{a})] + [(#MODELE{doc,id_document=#ENV{id_document,''},largeur=320,hauteur=#GET{hauteur}}|extraire_balise{a})] })] ] - -
    • - - [(#ENV{type_document}) - ] +
    • +
      + + [(#ENV{type_document}) - ] [(#LARGEUR|ou{#HAUTEUR}|oui)[(#VAL{info_largeur_vignette}|_T{#ARRAY{largeur_vignette,#LARGEUR,hauteur_vignette,#HAUTEUR}})] - ][(#TAILLE|taille_en_octets|texte_backend)] [(#ENV{_taille_modif}|oui)
      <:medias:fichier_modifie:>
      [(#ENV{_largeur_modif}|ou{#ENV{_hauteur_modif}}|oui)[(#VAL{info_largeur_vignette}|_T{#ARRAY{largeur_vignette,#ENV{_largeur_modif},hauteur_vignette,#ENV{_hauteur_modif}}})] - ][(#ENV{_taille_modif}|taille_en_octets|texte_backend)]
      ] [(#PIPELINE{afficher_metas_document,#ARRAY{args,#ARRAY{'quoi','editer_document','id_document',#ENV{id_document}},data,''}})] - -
    • +
    • +
      [ (#ENV**{erreurs}|table_valeur{descriptif}) ] - - [(#ENV{_editer_date}) -
    • +
    • + [(#ENV{_editer_date}) +
      [ (#ENV**{erreurs}|table_valeur{saisie_date}) ] @@ -79,33 +84,29 @@ (#ENV**{erreurs}|table_valeur{saisie_heure})] - - ] -
    • - [ +
    • ] +
      + [ (#ENV**{erreurs}|table_valeur{credits}) ] - - [(#ENV{_editer_dimension}) -
    • +
    • + [(#ENV{_editer_dimension}) +
      [ - (#ENV**{erreurs}|table_valeur{dimensions}) - ] + (#ENV**{erreurs}|table_valeur{dimensions})] - + - - ] - - [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] - -

       

      +
      ] +
      + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] + +

       

      - #INCLURE{fond=formulaires/dateur/inc-dateur} - ] + #INCLURE{fond=formulaires/dateur/inc-dateur}] diff --git a/www/plugins-dist/medias/formulaires/editer_document.php b/www/plugins-dist/medias/formulaires/editer_document.php index d41f5654..7f92a703 100644 --- a/www/plugins-dist/medias/formulaires/editer_document.php +++ b/www/plugins-dist/medias/formulaires/editer_document.php @@ -10,70 +10,87 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/actions'); include_spip('inc/editer'); include_spip('inc/documents'); include_spip('inc/config'); -function formulaires_editer_document_charger_dist($id_document='new', $id_parent='', $retour='', $lier_trad=0, $config_fonc='documents_edit_config', $row=array(), $hidden=''){ - $valeurs = formulaires_editer_objet_charger('document',$id_document,$id_parent,$lier_trad,$retour,$config_fonc,$row,$hidden); +function formulaires_editer_document_charger_dist( + $id_document = 'new', + $id_parent = '', + $retour = '', + $lier_trad = 0, + $config_fonc = 'documents_edit_config', + $row = array(), + $hidden = '' +) { + $valeurs = formulaires_editer_objet_charger('document', $id_document, $id_parent, $lier_trad, $retour, $config_fonc, $row, $hidden); // relier les parents $valeurs['parents'] = array(); - $valeurs['_hidden'] = ""; - $parents = sql_allfetsel('objet,id_objet','spip_documents_liens','id_document='.intval($id_document)); - foreach($parents as $p){ - if (in_array($p['objet'],array('article','rubrique')) AND $p['id_objet']>0) - $valeurs['parents'][] = $p['objet'].'|'.$p['id_objet']; - else - $valeurs['_hidden'] .= ""; + $valeurs['_hidden'] = ''; + $parents = sql_allfetsel('objet,id_objet', 'spip_documents_liens', 'id_document=' . intval($id_document)); + foreach ($parents as $p) { + if (in_array($p['objet'], array('article', 'rubrique')) and $p['id_objet'] > 0) { + $valeurs['parents'][] = $p['objet'] . '|' . $p['id_objet']; + } else { + $valeurs['_hidden'] .= ""; + } } // en fonction de la config du site on a le droit ou pas de modifier la date - if ($valeurs['_editer_date'] = (lire_config('documents_date') == 'oui' ? ' ' : '')){ - $valeurs['saisie_date'] = affdate($valeurs['date'],'d/m/Y'); - $valeurs['saisie_heure'] = affdate($valeurs['date'],'H:i'); - } - elseif (isset($valeurs['date'])){ + if ($valeurs['_editer_date'] = (lire_config('documents_date') == 'oui' ? ' ' : '')) { + $valeurs['saisie_date'] = affdate($valeurs['date'], 'd/m/Y'); + $valeurs['saisie_heure'] = affdate($valeurs['date'], 'H:i'); + } elseif (isset($valeurs['date'])) { unset($valeurs['date']); } - + // en fonction du format - $valeurs['_editer_dimension'] = autoriser('tailler','document',$id_document)?' ':''; + $valeurs['_editer_dimension'] = autoriser('tailler', 'document', $id_document) ? ' ' : ''; // type du document et inclusion - $row = sql_fetsel('titre as type_document,inclus','spip_types_documents','extension='.sql_quote($valeurs['extension'])); + $row = sql_fetsel( + 'titre as type_document,inclus', + 'spip_types_documents', + 'extension=' . sql_quote($valeurs['extension']) + ); $valeurs['type_document'] = $row['type_document']; $valeurs['_inclus'] = $row['inclus']; - if (in_array($valeurs['extension'],array('jpg','gif','png'))){ + if (in_array($valeurs['extension'], array('jpg', 'gif', 'png'))) { $valeurs['apercu'] = get_spip_doc($valeurs['fichier']); } // verifier les infos de taille et dimensions sur les fichiers locaux // cas des maj de fichier directes par ftp - if ($valeurs['distant']!=='oui'){ + if ($valeurs['distant'] !== 'oui') { include_spip('inc/renseigner_document'); - $infos = renseigner_taille_dimension_image(get_spip_doc($valeurs['fichier']),$valeurs['extension']); - if ($infos['taille']!=$valeurs['taille'] - OR ($infos['type_image'] && ($infos['largeur']!=$valeurs['largeur'])) - OR ($infos['type_image'] && ($infos['hauteur']!=$valeurs['hauteur']))){ - $valeurs['_taille_modif'] = $infos['taille']; - $valeurs['_largeur_modif'] = $infos['largeur']; - $valeurs['_hauteur_modif'] = $infos['hauteur']; - $valeurs['_hidden'].= - "" - . "" - . ""; + $infos = renseigner_taille_dimension_image(get_spip_doc($valeurs['fichier']), $valeurs['extension']); + if ($infos and is_array($infos) and isset($infos['taille'])) { + if ($infos['taille'] != $valeurs['taille'] + or ($infos['type_image'] && ($infos['largeur'] != $valeurs['largeur'])) + or ($infos['type_image'] && ($infos['hauteur'] != $valeurs['hauteur'])) + ) { + $valeurs['_taille_modif'] = $infos['taille']; + $valeurs['_largeur_modif'] = $infos['largeur']; + $valeurs['_hauteur_modif'] = $infos['hauteur']; + $valeurs['_hidden'] .= + "" + . "" + . ""; + } } } // pour l'upload d'un nouveau doc - if ($valeurs['fichier']){ - $charger = charger_fonction('charger','formulaires/joindre_document'); - $valeurs = array_merge($valeurs,$charger($id_document,0,'','choix')); + if ($valeurs['fichier']) { + $charger = charger_fonction('charger', 'formulaires/joindre_document'); + $valeurs = array_merge($valeurs, $charger($id_document, 0, '', 'choix')); $valeurs['_hidden'] .= ""; } @@ -81,8 +98,7 @@ function formulaires_editer_document_charger_dist($id_document='new', $id_parent } // Choix par defaut des options de presentation -function documents_edit_config($row) -{ +function documents_edit_config($row) { global $spip_lang; $config = array();//$GLOBALS['meta']; @@ -90,31 +106,40 @@ function documents_edit_config($row) $config['langue'] = $spip_lang; $config['restreint'] = ($row['statut'] == 'publie'); + return $config; } -function formulaires_editer_document_verifier_dist($id_document='new', $id_parent='', $retour='', $lier_trad=0, $config_fonc='documents_edit_config', $row=array(), $hidden=''){ - $erreurs = formulaires_editer_objet_verifier('document',$id_document,is_numeric($id_document)?array():array('titre')); +function formulaires_editer_document_verifier_dist( + $id_document = 'new', + $id_parent = '', + $retour = '', + $lier_trad = 0, + $config_fonc = 'documents_edit_config', + $row = array(), + $hidden = '' +) { + $erreurs = formulaires_editer_objet_verifier('document', $id_document, is_numeric($id_document) ? array() : array('titre')); // verifier l'upload si on a demande a changer le document - if (_request('joindre_upload') OR _request('joindre_ftp') OR _request('joindre_distant')){ - if (_request('copier_local')){ - } - else { - $verifier = charger_fonction('verifier','formulaires/joindre_document'); - $erreurs = array_merge($erreurs,$verifier($id_document)); + if (_request('joindre_upload') or _request('joindre_ftp') or _request('joindre_distant')) { + if (_request('copier_local')) { + } else { + $verifier = charger_fonction('verifier', 'formulaires/joindre_document'); + $erreurs = array_merge($erreurs, $verifier($id_document)); } } - + // On ne vérifie la date que si on avait le droit de la modifier - if (lire_config('documents_date') == 'oui'){ - if (!$date = recup_date(_request('saisie_date').' '._request('saisie_heure').':00') - OR !($date = mktime($date[3],$date[4],0,$date[1],$date[2],$date[0]))) - $erreurs['saisie_date'] = _T('medias:format_date_incorrect'); - else { - set_request('saisie_date',date('d/m/Y',$date)); - set_request('saisie_heure',date('H:i',$date)); - set_request('date',date("Y-m-d H:i:s",$date)); + if (lire_config('documents_date') == 'oui') { + if (!$date = recup_date(_request('saisie_date') . ' ' . _request('saisie_heure') . ':00') + or !($date = mktime($date[3], $date[4], 0, $date[1], $date[2], $date[0])) + ) { + $erreurs['saisie_date'] = _T('medias:format_date_incorrect'); + } else { + set_request('saisie_date', date('d/m/Y', $date)); + set_request('saisie_heure', date('H:i', $date)); + set_request('date', date('Y-m-d H:i:s', $date)); } } @@ -122,85 +147,100 @@ function formulaires_editer_document_verifier_dist($id_document='new', $id_paren } // https://code.spip.net/@inc_editer_article_dist -function formulaires_editer_document_traiter_dist($id_document='new', $id_parent='', $retour='', $lier_trad=0, $config_fonc='documents_edit_config', $row=array(), $hidden=''){ - if (is_null(_request('parents'))) - set_request('parents',array()); +function formulaires_editer_document_traiter_dist( + $id_document = 'new', + $id_parent = '', + $retour = '', + $lier_trad = 0, + $config_fonc = 'documents_edit_config', + $row = array(), + $hidden = '' +) { + if (is_null(_request('parents'))) { + set_request('parents', array()); + } // verifier les infos de taille et dimensions sur les fichiers locaux // cas des maj de fichier directes par ftp - foreach(array('taille','largeur','hauteur') as $c) - if (($v=_request("_{$c}_modif")) AND !_request($c)){ - set_request($c,$v); + foreach (array('taille', 'largeur', 'hauteur') as $c) { + if (($v = _request("_{$c}_modif")) and !_request($c)) { + set_request($c, $v); + } } - $res = formulaires_editer_objet_traiter('document',$id_document,$id_parent,$lier_trad,$retour,$config_fonc,$row,$hidden); + $res = formulaires_editer_objet_traiter('document', $id_document, $id_parent, $lier_trad, $retour, $config_fonc, $row, $hidden); set_request('parents'); $autoclose = ""; if (_request('copier_local') - OR _request('joindre_upload') - OR _request('joindre_ftp') - OR _request('joindre_distant') - OR _request('joindre_zip')){ - $autoclose = ""; - if (_request('copier_local')){ - $copier_local = charger_fonction('copier_local','action'); - $res = array('editable'=>true); - if (($err=$copier_local($id_document))===true) - $res['message_ok'] = (isset($res['message_ok'])?$res['message_ok'].'
      ':'')._T('medias:document_copie_locale_succes'); - else - $res['message_erreur'] = (isset($res['message_erreur'])?$res['message_erreur'].'
      ':'').$err; + or _request('joindre_upload') + or _request('joindre_ftp') + or _request('joindre_distant') + or _request('joindre_zip') + ) { + $autoclose = ''; + if (_request('copier_local')) { + $copier_local = charger_fonction('copier_local', 'action'); + $res = array('editable' => true); + if (($err = $copier_local($id_document)) === true) { + $res['message_ok'] = (isset($res['message_ok']) ? $res['message_ok'] . '
      ' : '') . _T('medias:document_copie_locale_succes'); + } else { + $res['message_erreur'] = (isset($res['message_erreur']) ? $res['message_erreur'] . '
      ' : '') . $err; + } set_request('credits'); // modifie par la copie locale - } - else { + } else { // liberer le nom de l'ancien fichier pour permettre le remplacement par un fichier du meme nom - if ($ancien_fichier = sql_getfetsel('fichier','spip_documents','id_document='.intval($id_document)) - AND !tester_url_absolue($ancien_fichier) - AND @file_exists($rename = get_spip_doc($ancien_fichier))){ - @rename($rename,"$rename--.old"); - + if ($ancien_fichier = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($id_document)) + and !tester_url_absolue($ancien_fichier) + and @file_exists($rename = get_spip_doc($ancien_fichier)) + ) { + @rename($rename, "$rename--.old"); } - $traiter = charger_fonction('traiter','formulaires/joindre_document'); + $traiter = charger_fonction('traiter', 'formulaires/joindre_document'); $res2 = $traiter($id_document); - if (isset($res2['message_erreur'])){ + if (isset($res2['message_erreur'])) { $res['message_erreur'] = $res2['message_erreur']; // retablir le fichier ! - if ($rename) - @rename("$rename--.old",$rename); - } - else - // supprimer vraiment le fichier initial + if ($rename) { + @rename("$rename--.old", $rename); + } + } else // supprimer vraiment le fichier initial + { spip_unlink("$rename--.old"); + } } // on annule les saisies largeur/hauteur : l'upload a pu charger les siens set_request('largeur'); set_request('hauteur'); - } - else{ + } else { // regarder si une demande de rotation a eu lieu // c'est un bouton image, dont on a pas toujours le name en request, on fait avec $angle = 0; - if (_request('tournerL90') OR _request('tournerL90_x')) + if (_request('tournerL90') or _request('tournerL90_x')) { $angle = -90; - if (_request('tournerR90') OR _request('tournerR90_x')) + } + if (_request('tournerR90') or _request('tournerR90_x')) { $angle = 90; - if (_request('tourner180') OR _request('tourner180_x')) + } + if (_request('tourner180') or _request('tourner180_x')) { $angle = 180; - if ($angle){ - $autoclose = ""; - $tourner = charger_fonction('tourner','action'); - action_tourner_post($id_document,$angle); + } + if ($angle) { + $autoclose = ''; + $tourner = charger_fonction('tourner', 'action'); + action_tourner_post($id_document, $angle); } } - if (!isset($res['redirect'])) + if (!isset($res['redirect'])) { $res['editable'] = true; - if (!isset($res['message_erreur'])) - $res['message_ok'] = _T('info_modification_enregistree').$autoclose; + } + if (!isset($res['message_erreur'])) { + $res['message_ok'] = _T('info_modification_enregistree') . $autoclose; + } - if ($res['message_ok']) - $res['message_ok'].=''; + if ($res['message_ok']) { + $res['message_ok'] .= ''; + } return $res; } - -?> diff --git a/www/plugins-dist/medias/formulaires/illustrer_document.html b/www/plugins-dist/medias/formulaires/illustrer_document.html index 71f33ec3..3a344144 100644 --- a/www/plugins-dist/medias/formulaires/illustrer_document.html +++ b/www/plugins-dist/medias/formulaires/illustrer_document.html @@ -1,11 +1,11 @@
      [

      (#ENV*{message_ok})

      ] [

      (#ENV*{message_erreur})

      ] - [(#ENV{editable}) + [(#ENV{editable})
      - [(#ACTION_FORMULAIRE{#ENV{action}})] -
        -
      • + #ACTION_FORMULAIRE +
        +
        [ (#ENV**{erreurs}|table_valeur{fichier}) ][ @@ -14,15 +14,14 @@ [(#CONFIG{creer_preview}|=={oui}|et{#ENV{media}|=={image}})
        <:medias:miniature_automatique_active:>] ]

        - [(#ENV{id_vignette}|oui|et{#AUTORISER{supprimer,document,#ENV{id_vignette}}}) ] + [(#ENV{id_vignette}|oui|et{#AUTORISER{supprimer,document,#ENV{id_vignette}}}) ] [(#ENV{id_vignette}|non|ou{#AUTORISER{modifier,document,#ENV{id_vignette}}}) [<:bouton_changer:>]]  

        -
      • -
      -
      - ] +
      + + ] \ No newline at end of file diff --git a/www/plugins-dist/medias/formulaires/illustrer_document.php b/www/plugins-dist/medias/formulaires/illustrer_document.php index d34d98b2..c45a7198 100644 --- a/www/plugins-dist/medias/formulaires/illustrer_document.php +++ b/www/plugins-dist/medias/formulaires/illustrer_document.php @@ -10,74 +10,73 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function formulaires_illustrer_document_charger_dist($id_document){ +function formulaires_illustrer_document_charger_dist($id_document) { include_spip('inc/documents'); - $valeurs = sql_fetsel('id_document,mode,id_vignette,extension,media','spip_documents','id_document='.intval($id_document)); - if (!$valeurs /*OR in_array($valeurs['extension'],array('jpg','gif','png'))*/) - return array('editable'=>false,'id'=>$id_document); + $valeurs = sql_fetsel('id_document,mode,id_vignette,extension,media', 'spip_documents', 'id_document=' . intval($id_document)); + if (!$valeurs /*OR in_array($valeurs['extension'],array('jpg','gif','png'))*/) { + return array('editable' => false, 'id' => $id_document); + } $valeurs['id'] = $id_document; $valeurs['_hidden'] = ""; $valeurs['mode'] = 'vignette'; // pour les id dans le dom - $vignette = sql_fetsel('fichier,largeur,hauteur,id_document','spip_documents','id_document='.$valeurs['id_vignette']); + $vignette = sql_fetsel('fichier,largeur,hauteur,id_document', 'spip_documents', 'id_document=' . $valeurs['id_vignette']); $valeurs['vignette'] = get_spip_doc($vignette['fichier']); $valeurs['hauteur'] = $vignette['hauteur']; $valeurs['largeur'] = $vignette['largeur']; $valeurs['id_vignette'] = $vignette['id_document']; - $valeurs['_pipeline'] = array('editer_contenu_objet',array('type'=>'illustrer_document','id'=>$id_document)); + $valeurs['_pipeline'] = array('editer_contenu_objet', array('type' => 'illustrer_document', 'id' => $id_document)); return $valeurs; } -function formulaires_illustrer_document_verifier_dist($id_document){ +function formulaires_illustrer_document_verifier_dist($id_document) { $erreurs = array(); - if (_request('supprimer')){ - + if (_request('supprimer')) { + } else { + $id_vignette = sql_getfetsel('id_vignette', 'spip_documents', 'id_document=' . intval($id_document)); + $verifier = charger_fonction('verifier', 'formulaires/joindre_document'); + $erreurs = $verifier($id_vignette, 0, '', 'vignette'); } - else { - $id_vignette = sql_getfetsel('id_vignette','spip_documents','id_document='.intval($id_document)); - $verifier = charger_fonction('verifier','formulaires/joindre_document'); - $erreurs = $verifier($id_vignette,0,'','vignette'); - } return $erreurs; } -function formulaires_illustrer_document_traiter_dist($id_document){ - $id_vignette = sql_getfetsel('id_vignette','spip_documents','id_document='.intval($id_document)); - $res = array('editable'=>true); - if (_request('supprimer')){ - $supprimer_document = charger_fonction('supprimer_document','action'); - if ($id_vignette AND $supprimer_document($id_vignette)) +function formulaires_illustrer_document_traiter_dist($id_document) { + $id_vignette = sql_getfetsel('id_vignette', 'spip_documents', 'id_document=' . intval($id_document)); + $res = array('editable' => true); + if (_request('supprimer')) { + $supprimer_document = charger_fonction('supprimer_document', 'action'); + if ($id_vignette and $supprimer_document($id_vignette)) { $res['message_ok'] = _T('medias:vignette_supprimee'); - else - $res['message_erreur'] = _T('medias:erreur_suppression_vignette'); - } - else { + } else { + $res['message_erreur'] = _T('medias:erreur_suppression_vignette'); + } + } else { $ajouter_documents = charger_fonction('ajouter_documents', 'action'); include_spip('inc/joindre_document'); $files = joindre_trouver_fichier_envoye(); - $ajoute = $ajouter_documents($id_vignette,$files,'',0,'vignette'); + $ajoute = $ajouter_documents($id_vignette, $files, '', 0, 'vignette'); if (is_numeric(reset($ajoute)) - AND $id_vignette = reset($ajoute)){ + and $id_vignette = reset($ajoute) + ) { include_spip('action/editer_document'); - document_modifier($id_document,array("id_vignette" => $id_vignette,'mode'=>'document')); + document_modifier($id_document, array('id_vignette' => $id_vignette, 'mode' => 'document')); $res['message_ok'] = _T('medias:document_installe_succes'); - } - else + } else { $res['message_erreur'] = reset($ajoute); + } } // todo : // generer les case docs si c'est necessaire // rediriger sinon return $res; - } - -?> \ No newline at end of file diff --git a/www/plugins-dist/medias/formulaires/inc-lister_archive_jointe.html b/www/plugins-dist/medias/formulaires/inc-lister_archive_jointe.html index 47a0effa..7d2258b5 100644 --- a/www/plugins-dist/medias/formulaires/inc-lister_archive_jointe.html +++ b/www/plugins-dist/medias/formulaires/inc-lister_archive_jointe.html @@ -1,8 +1,8 @@
      <:medias:upload_fichier_zip:>
      <:medias:upload_fichier_zip_texte:>
      -
        -
      • +
        +
        -
          -
        • +
          +
          @@ -31,16 +31,16 @@
          -
        • -
        +
        +
        ] [
        (#ENV*{erreurs_fichier_zip}|joindre_liste_erreurs_to_li)
        ] -
      • -
      + +

      \ No newline at end of file diff --git a/www/plugins-dist/medias/formulaires/inc-upload_document.html b/www/plugins-dist/medias/formulaires/inc-upload_document.html index c346a540..64d0c2fe 100644 --- a/www/plugins-dist/medias/formulaires/inc-upload_document.html +++ b/www/plugins-dist/medias/formulaires/inc-upload_document.html @@ -1,147 +1,55 @@ -#SET{domid,_#ENV{mode}|concat{'_',#ENV{id,new}}} -#SET{methode,upload} -[(#ENV{joindre_mediatheque}|oui)#SET{methode,mediatheque}] -[(#ENV{joindre_distant}|oui)#SET{methode,distant}] -[(#ENV{joindre_ftp}|oui)#SET{methode,ftp}] - -
      -[ - - -(#REM) Formulaire d'upload de fichier -]
      -
        -
      • - [ - (#ENV**{erreurs}|table_valeur{fichier_upload}) - ] - -
      • -
      -
      - <:medias:bouton_download_depuis:> - <:medias:bouton_download_local:> - [(#ENV{mediatheque,''}|oui) - | <:medias:bouton_download_par_mediatheque:>] - [(#ENV{proposer_ftp,''}|oui) - | <:medias:bouton_download_par_ftp:>] - | <:medias:bouton_download_sur_le_web:> -
      -

      -
      [ - - - - -(#REM) Formulaire pour document dans mediatheque -][(#ENV{mediatheque,''}|oui) -
      -
        -
      • - [ - (#ENV**{erreurs}|table_valeur{refdoc_joindre}) - ] - - -
      • -
      - -
      - <:medias:bouton_download_depuis:> - <:medias:bouton_download_local:> - | <:medias:bouton_download_par_mediatheque:> - [(#ENV{proposer_ftp,''}|oui) - | <:medias:bouton_download_par_ftp:>] - | <:medias:bouton_download_sur_le_web:> -
      -

      -
      -][ - - - - -(#REM) Formulaire pour upload ftp -][(#ENV{proposer_ftp,''}|oui) -
      - [ -
        -
      • - [ - (#ENV**{erreurs}|table_valeur{cheminftp}) - ] - -
      • -
      ][(#ENV{_dir_upload_ftp}|et{#ENV{_options_upload_ftp}|non}|oui) -

      - [(#VAL{info_installer_ftp}|_T{#ARRAY{upload,#ENV*{_dir_upload_ftp}}})] #AIDER{ins_upload} -

      - ] -
      - <:medias:bouton_download_depuis:> - <:medias:bouton_download_local:> - [(#ENV{mediatheque,''}|oui) - | <:medias:bouton_download_par_mediatheque:>] - | <:medias:bouton_download_par_ftp:> - | <:medias:bouton_download_sur_le_web:> -
      -

      - [(#ENV*{_options_upload_ftp}|oui) - - ] -

      -
      -][ - - - - -(#REM) Formulaire pour document distant -]
      -
        -
      • - [ - (#ENV**{erreurs}|table_valeur{url}) - ] - -
      • -
      -
      - <:medias:bouton_download_depuis:> - <:medias:bouton_download_local:> - [(#ENV{mediatheque,''}|oui) - | <:medias:bouton_download_par_mediatheque:>] - [(#ENV{proposer_ftp,''}|oui) - | <:medias:bouton_download_par_ftp:>] - | <:medias:bouton_download_sur_le_web:> -
      -

      -
      [ - - - - -(#REM) Formulaire pour deballer un zip -][
      • (#ENV**{erreurs}|table_valeur{lister_contenu_archive})
      ] - - +#SET{domid,_#ENV{mode}|concat{'_',#ENV{id,new}}} +#SET{methode,upload} +[(#ENV{joindre_mediatheque}|oui)#SET{methode,mediatheque}] +[(#ENV{joindre_distant}|oui)#SET{methode,distant}] +[(#ENV{joindre_ftp}|oui)#SET{methode,ftp}] + +#SET{methodes_upload,#ENV**|medias_lister_methodes_upload} +[(#ENV{methode_focus}|et{#GET{methodes_upload}|is_array}|et{#ENV{methode_focus}|array_key_exists{#GET{methodes_upload}}}|oui)#SET{methode,#ENV{methode_focus}}] + +
      + + #SET{methode_upload,#CLE} +
      + + + +
      + [(#SET{cpt,1})] + <:medias:bouton_download_depuis:> + + [(#GET{cpt}|>{1}|oui) + [(#VAL{'|'})] + ] + [(#GET{methode_upload}|=={#CLE}|oui) + #VALEUR{label_lien} + ] + [(#GET{methode_upload}|=={#CLE}|non) + #VALEUR{label_lien} + ] + [(#SET{cpt,#GET{cpt}|plus{1}})] + +
      +

      +
      + + +[(#REM) Formulaire pour deballer un zip] +[
      (#ENV**{erreurs}|table_valeur{lister_contenu_archive})
      ] + + \ No newline at end of file diff --git a/www/plugins-dist/medias/formulaires/joindre_document.html b/www/plugins-dist/medias/formulaires/joindre_document.html index fd19b80b..d0753cdb 100644 --- a/www/plugins-dist/medias/formulaires/joindre_document.html +++ b/www/plugins-dist/medias/formulaires/joindre_document.html @@ -12,12 +12,11 @@ [

      (#ENV**{message_erreur})

      ]
      - [(#ACTION_FORMULAIRE{#ENV{action}})] + #ACTION_FORMULAIRE [(#INCLURE{fond=formulaires/inc-upload_document, env, mediatheque=#ENV{objet,''}|et{#ENV{id_objet,''}}|et{#ENV{proposer_media}}})]
      - ] [(#ENV{_galerie,''}|oui) [(#INCLURE{fond=#ENV{_galerie}, env, ajax})] diff --git a/www/plugins-dist/medias/formulaires/joindre_document.php b/www/plugins-dist/medias/formulaires/joindre_document.php index 8869e1c7..50243afa 100644 --- a/www/plugins-dist/medias/formulaires/joindre_document.php +++ b/www/plugins-dist/medias/formulaires/joindre_document.php @@ -1,328 +1,506 @@ -".joli_repertoire($dir)."
      "; - } - } - // On ne propose le FTP que si on a des choses a afficher - $valeurs['proposer_ftp'] = ($valeurs['_options_upload_ftp'] or $valeurs['_dir_upload_ftp']); - - if ($galerie){ - # passer optionnellement une galerie jointe au form - # plus utilise nativement, on prefere la mise a jour - # apres upload par ajaxReload('documents') - $valeurs['_galerie'] = $galerie; - } - if ($objet AND $id_objet){ - $valeurs['id_objet'] = $id_objet; - $valeurs['objet'] = $objet; - $valeurs['refdoc_joindre'] = ''; - if ($valeurs['editable']){ - include_spip('inc/autoriser'); - $valeurs['editable'] = autoriser('joindredocument',$objet,$id_objet)?' ':''; - } - } - - return $valeurs; -} - - -function formulaires_joindre_document_verifier_dist($id_document='new',$id_objet=0,$objet='',$mode = 'auto',$galerie = false, $proposer_media=true, $proposer_ftp=true){ - include_spip('inc/joindre_document'); - - $erreurs = array(); - // on joint un document deja dans le site - if (_request('joindre_mediatheque')){ - $refdoc_joindre = intval(preg_replace(',^(doc|document|img),','',_request('refdoc_joindre'))); - if (!sql_getfetsel('id_document','spip_documents','id_document='.intval($refdoc_joindre))) - $erreurs['message_erreur'] = _T('medias:erreur_aucun_document'); - } - // sinon c'est un upload - else { - $files = joindre_trouver_fichier_envoye(); - if (is_string($files)) - $erreurs['message_erreur'] = $files; - elseif(is_array($files)){ - // erreur si on a pas trouve de fichier - if (!count($files)) - $erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier'); - - else{ - // regarder si on a eu une erreur sur l'upload d'un fichier - foreach($files as $file){ - if (isset($file['error']) - AND $test = joindre_upload_error($file['error'])){ - if (is_string($test)) - $erreurs['message_erreur'] = $test; - else - $erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier'); - } - } - - // si ce n'est pas deja un post de zip confirme - // regarder si il faut lister le contenu du zip et le presenter - if (!count($erreurs) - AND !_request('joindre_zip') - AND $contenu_zip = joindre_verifier_zip($files)){ - list($fichiers,$erreurs,$tmp_zip) = $contenu_zip; - if ($fichiers){ - // on passe le md5 du fichier uniquement, on le retrouvera dans zip_to_clean de la session - $token_zip = md5($tmp_zip); - $erreurs['lister_contenu_archive'] = recuperer_fond("formulaires/inc-lister_archive_jointe",array('chemin_zip'=>$token_zip,'liste_fichiers_zip'=>$fichiers,'erreurs_fichier_zip'=>$erreurs)); - } - else - $erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier'); - } - } - } - - if (count($erreurs) AND defined('_tmp_dir')) - effacer_repertoire_temporaire(_tmp_dir); - } - - return $erreurs; -} - -function formulaires_joindre_document_traiter_dist($id_document='new',$id_objet=0,$objet='',$mode = 'auto',$galerie = false, $proposer_media=true, $proposer_ftp=true){ - $res = array('editable'=>true); - $ancre = ''; - // on joint un document deja dans le site - if (_request('joindre_mediatheque')){ - $refdoc_joindre = _request('refdoc_joindre'); - $refdoc_joindre = strtr($refdoc_joindre,";,"," "); - $refdoc_joindre = preg_replace(',\b(doc|document|img),','',$refdoc_joindre); - // expliciter les intervales xxx-yyy - while(preg_match(",\b(\d+)-(\d+)\b,",$refdoc_joindre,$m)) - $refdoc_joindre = str_replace($m[0],implode(" ",range($m[1],$m[2])),$refdoc_joindre); - $refdoc_joindre = explode(" ",$refdoc_joindre); - include_spip('action/editer_document'); - foreach($refdoc_joindre as $j){ - if ($j = intval(preg_replace(',^(doc|document|img),','',$j))){ - // lier le parent en plus - $champs = array('ajout_parents' => array("$objet|$id_objet")); - document_modifier($j,$champs); - if (!$ancre) - $ancre = $j; - $sel[] = $j; - $res['message_ok'] = _T('medias:document_attache_succes'); - } - } - if ($sel) - $res['message_ok'] = singulier_ou_pluriel(count($sel),'medias:document_attache_succes','medias:nb_documents_attache_succes'); - set_request('refdoc_joindre',''); // vider la saisie - } - // sinon c'est un upload - else { - $ajouter_documents = charger_fonction('ajouter_documents', 'action'); - - $mode = joindre_determiner_mode($mode,$id_document,$objet); - include_spip('inc/joindre_document'); - $files = joindre_trouver_fichier_envoye(); - - $nouveaux_doc = $ajouter_documents($id_document,$files,$objet,$id_objet,$mode); - - if (defined('_tmp_zip')) - unlink(_tmp_zip); - if (defined('_tmp_dir')) - effacer_repertoire_temporaire(_tmp_dir); - - // checker les erreurs eventuelles - $messages_erreur = array(); - $nb_docs = 0; - $sel = array(); - foreach ($nouveaux_doc as $doc) { - if (!is_numeric($doc)) - $messages_erreur[] = $doc; - // cas qui devrait etre traite en amont - elseif(!$doc) - $messages_erreur[] = _T('medias:erreur_insertion_document_base',array('fichier'=>'???')); - else{ - if (!$ancre) - $ancre = $doc; - $sel[] = $doc; - } - } - if (count($messages_erreur)) - $res['message_erreur'] = implode('
      ',$messages_erreur); - if ($sel) - $res['message_ok'] = singulier_ou_pluriel(count($sel),'medias:document_installe_succes','medias:nb_documents_installe_succes'); - if ($ancre) - $res['redirect'] = "#doc$ancre"; - } - if (count($sel) OR isset($res['message_ok'])){ - $callback = ""; - if ($ancre) - $callback .= "jQuery('#doc$ancre a.editbox').eq(0).focus();"; - if (count($sel)){ - // passer les ids document selectionnes aux pipelines - $res['ids'] = $sel; - - $sel = "#doc".implode(",#doc",$sel); - $callback .= "jQuery('$sel').animateAppend();"; - } - $js = "if (window.jQuery) jQuery(function(){ajaxReload('documents',{callback:function(){ $callback }});});"; - $js = ""; - if (isset($res['message_erreur'])) - $res['message_erreur'].= $js; - else - $res['message_ok'] .= $js; - } - - return $res; -} - -/** - * Retourner le contenu du select HTML d'utilisation de fichiers envoyes - * - * @param string $dir - * @param string $mode - * @return string - */ -function joindre_options_upload_ftp($dir, $mode = 'document') { - $fichiers = preg_files($dir); - $exts = $dirs = $texte_upload = array(); - - // en mode "charger une image", ne proposer que les inclus - $inclus = ($mode == 'image' OR $mode =='vignette') - ? " AND inclus='image'" - : ''; - - foreach ($fichiers as $f) { - $f = preg_replace(",^$dir,",'',$f); - if (preg_match(",\.([^.]+)$,", $f, $match)) { - $ext = strtolower($match[1]); - if (!isset($exts[$ext])) { - include_spip('action/ajouter_documents'); - $ext = corriger_extension($ext); - if (sql_fetsel('extension', 'spip_types_documents', $a = "extension='$ext'" . $inclus)) - $exts[$ext] = 'oui'; - else $exts[$ext] = 'non'; - } - - $k = 2*substr_count($f,'/'); - $n = strrpos($f, "/"); - if ($n === false) - $lefichier = $f; - else { - $lefichier = substr($f, $n+1, strlen($f)); - $ledossier = substr($f, 0, $n); - if (!in_array($ledossier, $dirs)) { - $texte_upload[] = "\n"; - $dirs[]= $ledossier; - } - } - - if ($exts[$ext] == 'oui') - $texte_upload[] = "\n"; - } - } - - $texte = join('', $texte_upload); - if (count($texte_upload)>1) { - $texte = "\n" . $texte; - } - - return $texte; -} - -/** - * Lister les fichiers contenus dans un zip - * - * @param unknown_type $files - * @return unknown - */ -function joindre_liste_contenu_tailles_archive($files) { - include_spip('inc/charsets'); # pour le nom de fichier - - $res = ''; - if (is_array($files)) - foreach ($files as $nom => $file) { - $nom = translitteration($nom); - $date = date_interface(date("Y-m-d H:i:s", $file['mtime'])); - - $taille = taille_en_octets($file['size']); - $res .= "
    • $nom – $taille
        $date
    • \n"; - } - - return $res; -} - -function joindre_liste_erreurs_to_li($erreurs){ - if (count($erreurs)==1) - return "

      ".reset($erreurs)."

      "; - - $res = implode("
    • ",$erreurs); - if (strlen($res)) $res = "
    • $res
    • "; - if (count($erreurs)>4) - $res = "

      "._T("medias:erreurs_voir",array('nb'=>count($erreurs)))."

        ".$res."
      "; - else - $res = "
        $res
      "; - return $res; -} - -?> +' . joli_repertoire($dir) . '
      '; + } + } + } + // On ne propose le FTP que si on a des choses a afficher + $valeurs['proposer_ftp'] = ($valeurs['_options_upload_ftp'] or $valeurs['_dir_upload_ftp']); + + if ($galerie) { + # passer optionnellement une galerie jointe au form + # plus utilise nativement, on prefere la mise a jour + # apres upload par ajaxReload('documents') + $valeurs['_galerie'] = $galerie; + } + if ($objet and $id_objet) { + $valeurs['id_objet'] = $id_objet; + $valeurs['objet'] = $objet; + $valeurs['refdoc_joindre'] = ''; + if ($valeurs['editable']) { + include_spip('inc/autoriser'); + $valeurs['editable'] = autoriser('joindredocument', $objet, $id_objet) ? ' ' : ''; + } + } + + return $valeurs; +} + +/** + * Vérification du formulaire + * + * @param int|string $id_document + * L'identidiant numérique du document s'il est à remplacer, sinon "new" + * @param int $id_objet + * L'identifiant numérique de l'objet sur lequel on ajoute le document + * @param string $objet + * Le type de l'objet sur lequel on ajoute le document + * @param string $mode + * Le mode du document (auto,choix,document,image,vignette...), par défaut auto + * @param string $galerie + * Passer optionnellement une galerie jointe au form, plus utilise nativement, + * on prefere la mise a jour apres upload par ajaxReload('documents') + * @param bool|string $proposer_media + * Doit on afficher la médiathèque ? par défaut oui + * Valeurs possibles si string : false,'non','no'. + * @param bool|string $proposer_ftp + * Doit on afficher le ftp ? par défaut oui + * Valeurs possibles si string : false,'non','no'. + * @return array $erreurs + * Les erreurs éventuelles dans un tableau + */ +function formulaires_joindre_document_verifier_dist( + $id_document = 'new', + $id_objet = 0, + $objet = '', + $mode = 'auto', + $galerie = false, + $proposer_media = true, + $proposer_ftp = true +) { + include_spip('inc/joindre_document'); + + $erreurs = array(); + // on joint un document deja dans le site + if (_request('joindre_mediatheque')) { + $refdoc_joindre = intval(preg_replace(',^(doc|document|img),', '', _request('refdoc_joindre'))); + if (!sql_getfetsel('id_document', 'spip_documents', 'id_document=' . intval($refdoc_joindre))) { + $erreurs['message_erreur'] = _T('medias:erreur_aucun_document'); + } + } // sinon c'est un upload + else { + $files = joindre_trouver_fichier_envoye(); + if (is_string($files)) { + $erreurs['message_erreur'] = $files; + } elseif (is_array($files)) { + // erreur si on a pas trouve de fichier + if (!count($files)) { + $erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier'); + } else { + // regarder si on a eu une erreur sur l'upload d'un fichier + foreach ($files as $file) { + if (isset($file['error']) + and $test = joindre_upload_error($file['error']) + ) { + if (is_string($test)) { + $erreurs['message_erreur'] = $test; + } else { + $erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier'); + } + } + } + + // si ce n'est pas deja un post de zip confirme + // regarder si il faut lister le contenu du zip et le presenter + if (!count($erreurs) + and !_request('joindre_zip') + and $contenu_zip = joindre_verifier_zip($files) + ) { + list($fichiers, $erreurs, $tmp_zip) = $contenu_zip; + if ($fichiers) { + // on passe le md5 du fichier uniquement, on le retrouvera dans zip_to_clean de la session + $token_zip = md5($tmp_zip); + $erreurs['message_erreur'] = ''; + $erreurs['lister_contenu_archive'] = recuperer_fond( + 'formulaires/inc-lister_archive_jointe', + array( + 'chemin_zip' => $token_zip, + 'liste_fichiers_zip' => $fichiers, + 'erreurs_fichier_zip' => $erreurs + ) + ); + } else { + $erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier'); + } + } + } + } + + if (count($erreurs) and defined('_TMP_DIR')) { + effacer_repertoire_temporaire(_TMP_DIR); + } + } + + return $erreurs; +} + +/** + * Traitement du formulaire + * + * @param int|string $id_document + * L'identidiant numérique du document s'il est à remplacer, sinon "new" + * @param int $id_objet + * L'identifiant numérique de l'objet sur lequel on ajoute le document + * @param string $objet + * Le type de l'objet sur lequel on ajoute le document + * @param string $mode + * Le mode du document (auto,choix,document,image,vignette...), par défaut auto + * @param string $galerie + * Passer optionnellement une galerie jointe au form, plus utilise nativement, + * on prefere la mise a jour apres upload par ajaxReload('documents') + * @param bool|string $proposer_media + * Doit on afficher la médiathèque ? par défaut oui + * Valeurs possibles si string : false,'non','no'. + * @param bool|string $proposer_ftp + * Doit on afficher le ftp ? par défaut oui + * Valeurs possibles si string : false,'non','no'. + * @return array $res + * Le tableau renvoyé par les CVT avec le message et editable + */ +function formulaires_joindre_document_traiter_dist( + $id_document = 'new', + $id_objet = 0, + $objet = '', + $mode = 'auto', + $galerie = false, + $proposer_media = true, + $proposer_ftp = true +) { + $res = array('editable' => true); + $ancre = ''; + // on joint un document deja dans le site + if (_request('joindre_mediatheque')) { + $sel = array(); + $refdoc_joindre = _request('refdoc_joindre'); + $refdoc_joindre = strtr($refdoc_joindre, ';,', ' '); + $refdoc_joindre = preg_replace(',\b(doc|document|img),', '', $refdoc_joindre); + // expliciter les intervales xxx-yyy + while (preg_match(",\b(\d+)-(\d+)\b,", $refdoc_joindre, $m)) { + $refdoc_joindre = str_replace($m[0], implode(' ', range($m[1], $m[2])), $refdoc_joindre); + } + $refdoc_joindre = explode(' ', $refdoc_joindre); + include_spip('action/editer_document'); + foreach ($refdoc_joindre as $j) { + if ($j = intval(preg_replace(',^(doc|document|img),', '', $j))) { + // lier le parent en plus + $champs = array('ajout_parents' => array("$objet|$id_objet")); + document_modifier($j, $champs); + if (!$ancre) { + $ancre = $j; + } + $sel[] = $j; + $res['message_ok'] = _T('medias:document_attache_succes'); + } + } + if ($sel) { + $res['message_ok'] = singulier_ou_pluriel( + count($sel), + 'medias:document_attache_succes', + 'medias:nb_documents_attache_succes' + ); + } + set_request('refdoc_joindre', ''); // vider la saisie + } // sinon c'est un upload + else { + $ajouter_documents = charger_fonction('ajouter_documents', 'action'); + + $mode = joindre_determiner_mode($mode, $id_document, $objet); + include_spip('inc/joindre_document'); + $files = joindre_trouver_fichier_envoye(); + + $nouveaux_doc = $ajouter_documents($id_document, $files, $objet, $id_objet, $mode); + + if (defined('_TMP_ZIP')) { + unlink(_TMP_ZIP); + } + if (defined('_TMP_DIR')) { + effacer_repertoire_temporaire(_TMP_DIR); + } + + // checker les erreurs eventuelles + $messages_erreur = array(); + $sel = array(); + foreach ($nouveaux_doc as $doc) { + if (!is_numeric($doc)) { + $messages_erreur[] = $doc; + } // cas qui devrait etre traite en amont + elseif (!$doc) { + $messages_erreur[] = _T('medias:erreur_insertion_document_base', array('fichier' => '???')); + } else { + if (!$ancre) { + $ancre = $doc; + } + $sel[] = $doc; + } + } + if (count($messages_erreur)) { + $res['message_erreur'] = implode('
      ', $messages_erreur); + } + if ($sel) { + $res['message_ok'] = singulier_ou_pluriel( + count($sel), + 'medias:document_installe_succes', + 'medias:nb_documents_installe_succes' + ); + } + if ($ancre) { + $res['redirect'] = "#doc$ancre"; + } + } + if (count($sel) or isset($res['message_ok'])) { + $callback = ''; + if ($ancre) { + $callback .= "jQuery('#doc$ancre a.editbox').eq(0).focus();"; + } + if (count($sel)) { + // passer les ids document selectionnes aux pipelines + $res['ids'] = $sel; + + $sel = '#doc' . implode(',#doc', $sel); + $callback .= "jQuery('$sel').animateAppend();"; + } + $js = "if (window.jQuery) jQuery(function(){ajaxReload('documents',{callback:function(){ $callback }});});"; + $js = ""; + if (isset($res['message_erreur'])) { + $res['message_erreur'] .= $js; + } else { + $res['message_ok'] .= $js; + } + } + + return $res; +} + +/** + * Retourner le contenu du select HTML d'utilisation de fichiers envoyes par le serveur + * + * @param string $dir + * Le répertoire de recherche des documents + * @param string $mode + * Le mode d'ajout de document + * @return string $texte + * Le contenu HTML du selecteur de documents + */ +function joindre_options_upload_ftp($dir, $mode = 'document') { + $fichiers = preg_files($dir); + $exts = $dirs = $texte_upload = array(); + + // en mode "charger une image", ne proposer que les inclus + $inclus = ($mode == 'image' or $mode == 'vignette') + ? " AND inclus='image'" + : ''; + + foreach ($fichiers as $f) { + $f = preg_replace(",^$dir,", '', $f); + if (preg_match(',\.([^.]+)$,', $f, $match)) { + $ext = strtolower($match[1]); + if (!isset($exts[$ext])) { + include_spip('action/ajouter_documents'); + $ext = corriger_extension($ext); + if (sql_fetsel('extension', 'spip_types_documents', $a = "extension='$ext'" . $inclus)) { + $exts[$ext] = 'oui'; + } else { + $exts[$ext] = 'non'; + } + } + + $k = 2 * substr_count($f, '/'); + $n = strrpos($f, '/'); + if ($n === false) { + $lefichier = $f; + } else { + $lefichier = substr($f, $n + 1, strlen($f)); + $ledossier = substr($f, 0, $n); + if (!in_array($ledossier, $dirs)) { + $texte_upload[] = "\n'; + $dirs[] = $ledossier; + } + } + + if ($exts[$ext] == 'oui') { + $texte_upload[] = "\n'; + } + } + } + + $texte = join('', $texte_upload); + if (count($texte_upload) > 1) { + $texte = "\n' . $texte; + } + + return $texte; +} + + +/** + * Lister les fichiers contenus dans un zip + * + * @param array $files + * La liste des fichiers + * @return string $res + * La liste HTML des fichiers
    • ...
    • + */ +function joindre_liste_contenu_tailles_archive($files) { + include_spip('inc/charsets'); # pour le nom de fichier + + $res = ''; + if (is_array($files)) { + foreach ($files as $nom => $file) { + $nom = translitteration($nom); + $date = date_interface(date('Y-m-d H:i:s', $file['mtime'])); + $taille = taille_en_octets($file['size']); + $res .= '
    • $nom – $taille
        $date
    • \n"; + } + } + + return $res; +} + +/** + * Lister les erreurs dans une archive jointe + * Utilisé formulaires/inc-lister_archive_jointe.html + * + * @param array $erreurs + * La liste des erreurs + * @return string $res + * Le code HTML des erreurs + */ +function joindre_liste_erreurs_to_li($erreurs) { + if (count($erreurs) == 1) { + return '

      ' . reset($erreurs) . '

      '; + } + + $res = implode('
    • ', $erreurs); + if (strlen($res)) { + $res = "
    • $res
    • "; + } + if (count($erreurs) > 4) { + $res = "

      " . _T( + 'medias:erreurs_voir', + array('nb' => count($erreurs)) + ) . '

        ' . $res . '
      '; + } else { + $res = "
        $res
      "; + } + + return $res; +} diff --git a/www/plugins-dist/medias/formulaires/methodes_upload/distant.html b/www/plugins-dist/medias/formulaires/methodes_upload/distant.html new file mode 100644 index 00000000..ecf37c6b --- /dev/null +++ b/www/plugins-dist/medias/formulaires/methodes_upload/distant.html @@ -0,0 +1,8 @@ +
      +
      + [ + (#ENV**{erreurs}|table_valeur{url}) + ] + +
      +
      \ No newline at end of file diff --git a/www/plugins-dist/medias/formulaires/methodes_upload/ftp.html b/www/plugins-dist/medias/formulaires/methodes_upload/ftp.html new file mode 100644 index 00000000..b55287c2 --- /dev/null +++ b/www/plugins-dist/medias/formulaires/methodes_upload/ftp.html @@ -0,0 +1,16 @@ +
      + [
      + [ + (#ENV**{erreurs}|table_valeur{cheminftp}) + ] + +
      ] +
      +[(#ENV{_dir_upload_ftp}|et{#ENV{_options_upload_ftp}|non}|oui) +

      +[(#VAL{info_installer_ftp}|_T{#ARRAY{upload,#ENV*{_dir_upload_ftp}}})] #AIDER{ins_upload} +

      +] \ No newline at end of file diff --git a/www/plugins-dist/medias/formulaires/methodes_upload/mediatheque.html b/www/plugins-dist/medias/formulaires/methodes_upload/mediatheque.html new file mode 100644 index 00000000..0efa785f --- /dev/null +++ b/www/plugins-dist/medias/formulaires/methodes_upload/mediatheque.html @@ -0,0 +1,14 @@ +
      +
      + [ + (#ENV**{erreurs}|table_valeur{refdoc_joindre}) + ] + + +
      +
      + \ No newline at end of file diff --git a/www/plugins-dist/medias/formulaires/methodes_upload/upload.html b/www/plugins-dist/medias/formulaires/methodes_upload/upload.html new file mode 100644 index 00000000..31dc5c9d --- /dev/null +++ b/www/plugins-dist/medias/formulaires/methodes_upload/upload.html @@ -0,0 +1,8 @@ +
      +
      + [ + (#ENV**{erreurs}|table_valeur{fichier_upload}) + ] + +
      +
      \ No newline at end of file diff --git a/www/plugins-dist/medias/inc/choisir_mode_document.php b/www/plugins-dist/medias/inc/choisir_mode_document.php index 270ce404..e73457cf 100644 --- a/www/plugins-dist/medias/inc/choisir_mode_document.php +++ b/www/plugins-dist/medias/inc/choisir_mode_document.php @@ -10,27 +10,39 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Gestion des modes de documents + * + * @package SPIP\Medias\Modes + */ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Choisir le mode du document : image/document - * fonction surchargeable * - * @param unknown_type $fichier - * @param unknown_type $type_image - * @param unknown_type $largeur - * @param unknown_type $hauteur + * @param array $infos + * Informations sur le document (en base + prises sur le fichier) + * @param bool $type_inclus_image + * Type d'inclusion demandée : true si image + * @param string $objet + * Objet sur lequel est placé le document + * @return string + * Mode du document */ -function inc_choisir_mode_document($infos, $type_inclus_image, $objet){ - +function inc_choisir_mode_document($infos, $type_inclus_image, $objet) { + // si ce n'est pas une image, c'est forcement un document - if (!$infos['type_image'] OR !$type_inclus_image) + if (!$infos['type_image'] or !$type_inclus_image) { return 'document'; + } // si on a pas le droit d'ajouter de document a l'objet, c'est donc un mode image - if ($objet AND isset($GLOBALS['meta']["documents_$objet"]) AND ($GLOBALS['meta']["documents_$objet"]=='non')) + if ($objet and isset($GLOBALS['meta']["documents_$objet"]) and ($GLOBALS['meta']["documents_$objet"] == 'non')) { return 'image'; - + } + // _INTERFACE_DOCUMENTS // en fonction de la taille de l'image @@ -40,15 +52,16 @@ function inc_choisir_mode_document($infos, $type_inclus_image, $objet){ // define('_LARGEUR_MODE_IMAGE', 450); // pour beneficier de cette detection auto @define('_LARGEUR_MODE_IMAGE', 0); - - if (!_LARGEUR_MODE_IMAGE) + + if (!_LARGEUR_MODE_IMAGE) { return 'image'; - + } + if ($infos['largeur'] > 0 - AND $infos['largeur'] < _LARGEUR_MODE_IMAGE) + and $infos['largeur'] < _LARGEUR_MODE_IMAGE + ) { return 'image'; - else + } else { return 'document'; + } } - -?> \ No newline at end of file diff --git a/www/plugins-dist/medias/inc/documenter_objet.php b/www/plugins-dist/medias/inc/documenter_objet.php index 13c54aa8..7afe9f5e 100644 --- a/www/plugins-dist/medias/inc/documenter_objet.php +++ b/www/plugins-dist/medias/inc/documenter_objet.php @@ -10,25 +10,41 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Calcul du portfolio / liste de documents de l'espace privé + * + * @package SPIP\Medias\Fonctions + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -// https://code.spip.net/@naviguer_doc +/** + * Retourne le code HTML du portfolio, liste des documents et formulaire d'ajout de documents + * + * @note + * Marque les documents vus dans les textes de l'objet avant le calcul ! + * + * @uses inc_marquer_doublons_doc_dist() + * + * @param int $id Identifiant de l'objet + * @param string $type Type d'objet + * @return string code HTML + **/ function inc_documenter_objet_dist($id, $type) { $serveur = ''; + // avant de documenter un objet, on verifie que ses documents vus sont bien lies ! $spip_table_objet = table_objet_sql($type); $table_objet = table_objet($type); - $id_table_objet = id_table_objet($type,$serveur); - $champs = sql_fetsel('*',$spip_table_objet,addslashes($id_table_objet)."=".intval($id)); - - $marquer_doublons_doc = charger_fonction('marquer_doublons_doc','inc'); - $marquer_doublons_doc($champs,$id,$type,$id_table_objet,$table_objet,$spip_table_objet, '', $serveur); + $id_table_objet = id_table_objet($type, $serveur); + $champs = sql_fetsel('*', $spip_table_objet, addslashes($id_table_objet) . '=' . intval($id)); - $contexte = array('objet'=>$type,'id_objet'=>$id); - return recuperer_fond('prive/objets/contenu/portfolio_document',array_merge($_GET,$contexte)); + $marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc'); + $marquer_doublons_doc($champs, $id, $type, $id_table_objet, $table_objet, $spip_table_objet, '', $serveur); + $contexte = array('objet' => $type, 'id_objet' => $id); + return recuperer_fond('prive/objets/contenu/portfolio_document', array_merge($_GET, $contexte)); } - - -?> \ No newline at end of file diff --git a/www/plugins-dist/medias/inc/documents.php b/www/plugins-dist/medias/inc/documents.php index d25bc14a..1cff6ade 100644 --- a/www/plugins-dist/medias/inc/documents.php +++ b/www/plugins-dist/medias/inc/documents.php @@ -10,33 +10,39 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} // inclure les fonctions bases du core -include_once _DIR_RESTREINT . "inc/documents.php"; +include_once _DIR_RESTREINT . 'inc/documents.php'; include_spip('inc/actions'); // *action_auteur et determine_upload // Constante indiquant le charset probable des documents non utf-8 joints -if (!defined('CHARSET_JOINT')) define('CHARSET_JOINT', 'iso-8859-1'); +if (!defined('CHARSET_JOINT')) { + define('CHARSET_JOINT', 'iso-8859-1'); +} // Filtre pour #FICHIER permettant d'incruster le contenu d'un document // Si 2e arg fourni, conversion dans le charset du site si possible // https://code.spip.net/@contenu_document -function contenu_document($arg, $charset='') -{ +function contenu_document($arg, $charset = '') { + include_spip('inc/distant'); if (is_numeric($arg)) { - $r = sql_fetsel("fichier,distant", "spip_documents", "id_document=".intval($arg)); - if (!$r) return ''; + $r = sql_fetsel('fichier,distant', 'spip_documents', 'id_document=' . intval($arg)); + if (!$r) { + return ''; + } $f = $r['fichier']; - $f = ($r['distant'] =='oui') ? _DIR_RACINE . copie_locale($f) : get_spip_doc($f); - } - else { - if (!@file_exists($f=$arg)){ - if (!$f = copie_locale($f)) + $f = ($r['distant'] == 'oui') ? _DIR_RACINE . copie_locale($f) : get_spip_doc($f); + } else { + if (!@file_exists($f = $arg)) { + if (!$f = copie_locale($f)) { return ''; + } $f = _DIR_RACINE . $f; } } @@ -47,42 +53,54 @@ function contenu_document($arg, $charset='') include_spip('inc/charsets'); if ($charset !== 'auto') { $r = importer_charset($r, $charset); - } elseif ($GLOBALS['meta']['charset'] == 'utf-8' AND !is_utf8($r)) + } elseif ($GLOBALS['meta']['charset'] == 'utf-8' and !is_utf8($r)) { $r = importer_charset($r, CHARSET_JOINT); + } } + return $r; } // https://code.spip.net/@generer_url_document_dist -function generer_url_document_dist($id_document, $args='', $ancre='') { +function generer_url_document_dist($id_document, $args = '', $ancre = '') { include_spip('inc/autoriser'); - if (!autoriser('voir', 'document', $id_document)) return ''; + if (!autoriser('voir', 'document', $id_document)) { + return ''; + } - $r = sql_fetsel("fichier,distant", "spip_documents", "id_document=".intval($id_document)); + $r = sql_fetsel('fichier,distant', 'spip_documents', 'id_document=' . intval($id_document)); - if (!$r) return ''; + if (!$r) { + return ''; + } $f = $r['fichier']; - if ($r['distant'] == 'oui') return $f; + if ($r['distant'] == 'oui') { + return $f; + } // Si droit de voir tous les docs, pas seulement celui-ci // il est inutilement couteux de rajouter une protection $r = (autoriser('voir', 'document')); - if (($r AND $r !== 'htaccess')) + if (($r and $r !== 'htaccess')) { return get_spip_doc($f); + } include_spip('inc/securiser_action'); // cette action doit etre publique ! - return generer_url_action('acceder_document', - $args . ($args ? "&" : '') - . 'arg='.$id_document + return generer_url_action( + 'acceder_document', + $args . ($args ? '&' : '') + . 'arg=' . $id_document . ($ancre ? "&ancre=$ancre" : '') - . '&cle=' . calculer_cle_action($id_document.','.$f) - . '&file=' . rawurlencode($f) - ,true,true); + . '&cle=' . calculer_cle_action($id_document . ',' . $f) + . '&file=' . rawurlencode($f), + true, + true + ); } // @@ -94,46 +112,51 @@ function generer_url_document_dist($id_document, $args='', $ancre='') { // // A noter : dans le portfolio prive on pousse le vice jusqu'a reduire la taille // de la vignette -> c'est a ca que sert la variable $portfolio -// https://code.spip.net/@vignette_automatique -function vignette_automatique($img, $doc, $lien, $x=0, $y=0, $align='', $class='spip_logos') -{ +function vignette_automatique($img, $doc, $lien, $x = 0, $y = 0, $align = '', $class = null, $connect = null) { include_spip('inc/distant'); include_spip('inc/texte'); include_spip('inc/filtres_images_mini'); + if (is_null($class)) { + $class = 'spip_logo spip_logos'; + } $e = $doc['extension']; if (!$img) { - if ($img = image_du_document($doc)) { - if (!$x AND !$y) // eviter une double reduction + if ($img = image_du_document($doc, $connect)) { + if (!$x and !$y) { + // eviter une double reduction $img = image_reduire($img); - } - else{ - $f = charger_fonction('vignette','inc'); + } + } else { + $f = charger_fonction('vignette', 'inc'); $img = $f($e, false); $size = @getimagesize($img); - $img = ""; + $img = "'; } - } - else{ + } else { $size = @getimagesize($img); - $img = ""; + $img = "'; } // on appelle image_reduire independamment de la presence ou non // des librairies graphiques // la fonction sait se debrouiller et faire de son mieux dans tous les cas - if ($x OR $y) { + if ($x or $y) { $img = image_reduire($img, $x, $y); } $img = inserer_attribut($img, 'alt', ''); $img = inserer_attribut($img, 'class', $class); - if ($align) $img = inserer_attribut($img, 'align', $align); + if ($align) { + $img = inserer_attribut($img, 'align', $align); + } - if (!$lien) return $img; + if (!$lien) { + return $img; + } $titre = supprimer_tags(typo($doc['titre'])); - $titre = " - " .taille_en_octets($doc['taille']) - . ($titre ? " - $titre" : ""); + $titre = ' - ' . taille_en_octets($doc['taille']) + . ($titre ? " - $titre" : ''); - $type = sql_fetsel('titre, mime_type','spip_types_documents', "extension = " . sql_quote($e)); + $type = sql_fetsel('titre, mime_type', 'spip_types_documents', 'extension = ' . sql_quote($e)); $mime = $type['mime_type']; $titre = attribut_html(couper($type['titre'] . $titre, 80)); @@ -141,29 +164,43 @@ function vignette_automatique($img, $doc, $lien, $x=0, $y=0, $align='', $class=' return "$img"; } -// Trouve une image caracteristique d'un document. -// Si celui-ci est une image et que les outils graphiques sont dispos, -// retourner le document (en exploitant sa copie locale s'il est distant). -// Autrement retourner la vignette fournie par SPIP pour ce type MIME -// Resultat: un fichier local existant - -function image_du_document($document) -{ - $e = $document['extension']; - if ($e AND (strpos($GLOBALS['meta']['formats_graphiques'], $e) !== false) - AND (!test_espace_prive() OR $GLOBALS['meta']['creer_preview']=='oui') - AND $document['fichier']) { +/** + * Trouve une image caractéristique d'un document. + * + * Si celui-ci est une image et que les outils graphiques sont dispos, + * retourner le document (en exploitant sa copie locale s'il est distant). + * + * Si on a un connecteur externe, on utilise l’URL externe. + * + * Autrement retourner la vignette fournie par SPIP pour ce type MIME + * + * @param array $document + * @param null|string $connect + * @return string Chemin de l’image + */ +function image_du_document($document, $connect = null) { + if ($e = $document['extension'] + and isset($GLOBALS['meta']['formats_graphiques']) + and (strpos($GLOBALS['meta']['formats_graphiques'], $e) !== false) + and (!test_espace_prive() or $GLOBALS['meta']['creer_preview'] == 'oui') + and $document['fichier'] + ) { + include_spip('inc/quete'); if ($document['distant'] == 'oui') { - $image = _DIR_RACINE.copie_locale($document['fichier']); - } - else + $image = _DIR_RACINE . copie_locale($document['fichier']); + } elseif ($image = document_spip_externe($document['fichier'], $connect)) { + return $image; + } else { $image = get_spip_doc($document['fichier']); - if (@file_exists($image)) return $image; + } + if (@file_exists($image)) { + return $image; + } } + return ''; } - /** * Afficher un document dans la colonne de gauche * @@ -181,8 +218,8 @@ function image_du_document($document) * @return string * Code HTML permettant de gérer des documents */ -function afficher_documents_colonne($id, $type="article", $script=NULL) { - return recuperer_fond('prive/objets/editer/colonne_document', array('objet'=>$type,'id_objet'=>$id)); +function afficher_documents_colonne($id, $type = 'article', $script = null) { + return recuperer_fond('prive/objets/editer/colonne_document', array('objet' => $type, 'id_objet' => $id)); } @@ -190,30 +227,33 @@ function afficher_documents_colonne($id, $type="article", $script=NULL) { * Affiche le code d'un raccourcis de document, tel que * * Affiche un code de raccourcis de document, et l'insère - * dans le textarea principal de l'objet (champ 'texte') sur un double-clic + * dans le textarea principal de l'objet (champ 'texte') sur un double-clic * * @param string $doc - * Type de raccourcis : doc,img,emb... + * Type de raccourcis : doc,img,emb... * @param int $id - * Identifiant du document + * Identifiant du document * @param string $align - * Alignement du document : left,center,right - * + * Alignement du document : left,center,right + * * @return string - * Texte du raccourcis -**/ + * Texte du raccourcis + **/ function affiche_raccourci_doc($doc, $id, $align) { static $num = 0; - $pipe = $onclick = ""; + $pipe = $onclick = ''; if ($align) { $pipe = "|$align"; - $onclick = "\nondblclick=\"barre_inserer('\\x3C$doc$id$pipe>', $('textarea[name=texte]')[0]);\"\ntitle=\"". str_replace('&', '&', entites_html(_T('medias:double_clic_inserer_doc')))."\""; + $onclick = "\nondblclick=\"barre_inserer('\\x3C$doc$id$pipe>', $('textarea[name=texte]')[0]);\"\ntitle=\"" . + str_replace( + '&', + '&', + entites_html(_T('medias:double_clic_inserer_doc')) + ) . '"'; } else { - $align='center'; + $align = 'center'; } return "\n
      <$doc$id$pipe>
      \n"; } - -?> diff --git a/www/plugins-dist/medias/inc/getdocument.php b/www/plugins-dist/medias/inc/getdocument.php index 23f928c7..aa4d290c 100644 --- a/www/plugins-dist/medias/inc/getdocument.php +++ b/www/plugins-dist/medias/inc/getdocument.php @@ -9,37 +9,50 @@ * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ + +/** + * Gère un cas d'upload trop gros + * + * Fichier obsolète, à supprimer. + * Mais fonction utilisée encore dans medias_detecter_fond_par_defaut() + * + * @package SPIP\Medias\Upload + **/ + # # Fichier obsolete, a supprimer # -# -# -# -# -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} // inclure les fonctions bases du core -include_once _DIR_RESTREINT . "inc/documents.php"; +include_once _DIR_RESTREINT . 'inc/documents.php'; include_spip('inc/minipres'); -// Erreur appelee depuis public.php (la precedente ne fonctionne plus -// depuis qu'on est sortis de spip_image.php, apparemment). -// https://code.spip.net/@erreur_upload_trop_gros + +/** + * Traite l'erreur d'un upload trop gros + * + * L'erreur est appelée depuis public.php et medias_detecter_fond_par_defaut + * et affiche un minipres avec la taille limite de documents possibles + * + * @see minipres() + **/ function erreur_upload_trop_gros() { include_spip('inc/filtres'); - - $msg = "

      " - .taille_en_octets($_SERVER["CONTENT_LENGTH"]) - .'
      ' - ._T('medias:upload_limit', - array('max' => ini_get('upload_max_filesize'))) - ."

      "; - - echo minipres(_T('pass_erreur'),"
      ".$msg."
      "); - exit; -} + $msg = '

      ' + . taille_en_octets($_SERVER['CONTENT_LENGTH']) + . '
      ' + . _T( + 'medias:upload_limit', + array('max' => ini_get('upload_max_filesize')) + ) + . '

      '; -?> + echo minipres(_T('pass_erreur'), "
      " . $msg . '
      '); + exit; +} diff --git a/www/plugins-dist/medias/inc/joindre_document.php b/www/plugins-dist/medias/inc/joindre_document.php index 090038f3..63324e78 100644 --- a/www/plugins-dist/medias/inc/joindre_document.php +++ b/www/plugins-dist/medias/inc/joindre_document.php @@ -1,350 +1,396 @@ -array_shift($file['error']), - 'name'=>array_shift($file['name']), - 'tmp_name'=>array_shift($file['tmp_name']), - 'type'=>array_shift($file['type']), - ); - if (!($test['error'] == 4)){ - if (is_string($err = joindre_upload_error($test['error']))) - return $err; // un erreur upload - if (!is_array(verifier_upload_autorise($test['name']))) - return _T('medias:erreur_upload_type_interdit',array('nom'=>$test['name'])); - $files[]=$test; - } - } - } - else { - //UPLOAD_ERR_NO_FILE - if (!($file['error'] == 4)){ - if (is_string($err = joindre_upload_error($file['error']))) - return $err; // un erreur upload - if (!is_array(verifier_upload_autorise($file['name']))) - return _T('medias:erreur_upload_type_interdit',array('nom'=>$file['name'])); - $files[]=$file; - } - } - } - if (!count($files)) - return _T('medias:erreur_indiquez_un_fichier'); - } - return $files; - } - elseif (_request('joindre_distant')){ - $path = _request('url'); - if (!strlen($path) OR $path=='http://') - return _T('medias:erreur_indiquez_un_fichier'); - include_spip('action/ajouter_documents'); - $infos = renseigner_source_distante($path); - if (!is_array($infos)) - return $infos; // message d'erreur - else - return array( - array( - 'name' => basename($path), - 'tmp_name' => $path, - 'distant' => true, - ) - ); - } - elseif (_request('joindre_ftp')){ - $path = _request('cheminftp'); - if (!$path || strstr($path, '..')) return _T('medias:erreur_indiquez_un_fichier'); - - include_spip('inc/documents'); - include_spip('inc/actions'); - $upload = determine_upload(); - if ($path != '/' AND $path != './') $upload .= $path; - - if (!is_dir($upload)) - // seul un fichier est demande - return array( - array ( - 'name' => basename($upload), - 'tmp_name' => $upload - ) - ); - else { - // on upload tout un repertoire - $files = array(); - foreach (preg_files($upload) as $fichier) { - $files[]= array ( - 'name' => basename($fichier), - 'tmp_name' => $fichier - ); - } - return $files; - } - } - elseif (_request('joindre_zip') and $token_zip = _request('chemin_zip')) { - - $zip_to_clean = (isset($GLOBALS['visiteur_session']['zip_to_clean']) ? unserialize($GLOBALS['visiteur_session']['zip_to_clean']) : array()); - if (!$zip_to_clean or !isset($zip_to_clean[$token_zip]) or !$path = $zip_to_clean[$token_zip]){ - return _T('avis_operation_impossible'); - } - - include_spip('inc/documents'); //pour creer_repertoire_documents - define('_tmp_zip', $path); - define('_tmp_dir', creer_repertoire_documents(md5($path.$GLOBALS['visiteur_session']['id_auteur']))); - if (_tmp_dir == _DIR_IMG) - return _T('avis_operation_impossible'); - - $files = array(); - if (_request('options_upload_zip')=='deballe') - $files = joindre_deballer_lister_zip($path,_tmp_dir); - - // si le zip doit aussi etre conserve, l'ajouter - if (_request('options_upload_zip')=='upload' OR _request('options_deballe_zip_conserver')){ - $files[] = array( - 'name' => basename($path), - 'tmp_name' => $path, - ); - } - - return $files; - - } - - return array(); -} - - -// Erreurs d'upload -// renvoie false si pas d'erreur -// et true si erreur = pas de fichier -// pour les autres erreurs renvoie le message d'erreur -function joindre_upload_error($error) { - - if (!$error) return false; - spip_log("Erreur upload $error -- cf. http://php.net/manual/fr/features.file-upload.errors.php"); - switch ($error) { - - case 4: /* UPLOAD_ERR_NO_FILE */ - return true; - - # on peut affiner les differents messages d'erreur - case 1: /* UPLOAD_ERR_INI_SIZE */ - $msg = _T('medias:upload_limit', - array('max' => ini_get('upload_max_filesize'))); - break; - case 2: /* UPLOAD_ERR_FORM_SIZE */ - $msg = _T('medias:upload_limit', - array('max' => ini_get('upload_max_filesize'))); - break; - case 3: /* UPLOAD_ERR_PARTIAL */ - $msg = _T('medias:upload_limit', - array('max' => ini_get('upload_max_filesize'))); - break; - case 6: /* UPLOAD_ERR_NO_TMP_DIR */ - $msg = _T('medias:erreur_dossier_tmp_manquant'); - break; - case 7: /* UPLOAD_ERR_CANT_WRITE */ - $msg = _T('medias:erreur_ecriture_fichier'); - - default: /* autre */ - if (!$msg) - $msg = _T('pass_erreur').' '. $error - . '
      ' . propre("[->http://php.net/manual/fr/features.file-upload.errors.php]"); - break; - } - - spip_log ("erreur upload $error"); - return $msg; - -} - -/** - * Verifier si le fichier poste est un zip - * Si on sait le deballer, proposer les options necessaires - * - * @param array $files - * @return string - */ -function joindre_verifier_zip($files){ - if (function_exists('gzopen') - AND (count($files) == 1) - AND !isset($files[0]['distant']) - AND - (preg_match('/\.zip$/i', $files[0]['name']) - OR (isset($files[0]['type']) AND $files[0]['type'] == 'application/zip')) - ){ - - // on pose le fichier dans le repertoire zip - // (nota : copier_document n'ecrase pas un fichier avec lui-meme - // ca autorise a boucler) - include_spip('inc/getdocument'); - $desc = $files[0]; - $zip = copier_document("zip", - $desc['name'], - $desc['tmp_name'] - ); - - // Est-ce qu'on sait le lire ? - include_spip('inc/pclzip'); - if ($zip - AND $archive = new PclZip($zip) - AND $contenu = joindre_decrire_contenu_zip($archive) - AND $tmp = sous_repertoire(_DIR_TMP,"zip") - AND rename($zip, $tmp = $tmp.basename($zip)) - ){ - $zip_to_clean = (isset($GLOBALS['visiteur_session']['zip_to_clean'])?unserialize($GLOBALS['visiteur_session']['zip_to_clean']):array()); - $zip_to_clean[md5($tmp)] = $tmp; - session_set('zip_to_clean',serialize($zip_to_clean)); - $contenu[] = $tmp; - return $contenu; - } - } - - // ce n'est pas un zip sur lequel il faut demander plus de precisions - return false; -} - -/** - * Verifier et decrire les fichiers de l'archive, en deux listes : - * - une liste des noms de fichiers ajoutables - * - une liste des erreurs (fichiers refuses) - * - * @param object $zip - * @return array - */ -function joindre_decrire_contenu_zip($zip) { - include_spip('action/ajouter_documents'); - // si pas possible de decompacter: installer comme fichier zip joint - if (!$list = $zip->listContent()) return false; - - // Verifier si le contenu peut etre uploade (verif extension) - $fichiers = array(); - $erreurs = array(); - foreach ($list as $file) { - if (accepte_fichier_upload($f = $file['stored_filename'])) - $fichiers[$f] = $file; - else - // pas de message pour les dossiers et fichiers caches - if (substr($f,-1)!=='/' AND substr(basename($f),0,1)!=='.') - $erreurs[] = _T('medias:erreur_upload_type_interdit',array('nom'=>$f)); - } - - // si aucun fichier uploadable : installer comme fichier zip joint - if (!count($fichiers)) - return false; - - ksort($fichiers); - return array($fichiers,$erreurs); -} - - - -// https://code.spip.net/@joindre_deballes -function joindre_deballer_lister_zip($path,$tmp_dir) { - include_spip('inc/pclzip'); - $archive = new PclZip($path); - $archive->extract( - PCLZIP_OPT_PATH, _tmp_dir, - PCLZIP_CB_PRE_EXTRACT, 'callback_deballe_fichier' - ); - if ($contenu = joindre_decrire_contenu_zip($archive)){ - $files = array(); - $fichiers = reset($contenu); - foreach($fichiers as $fichier){ - $f = basename($fichier['filename']); - $files[] = array('tmp_name'=>$tmp_dir. $f,'name'=>$f,'titrer'=>_request('options_deballe_zip_titrer'),'mode'=>_request('options_deballe_zip_mode_document')?'document':null); - } - return $files; - } - return _T('avis_operation_impossible'); -} - -if (!function_exists('fixer_extension_document')){ -/** - * Cherche dans la base le type-mime du tableau representant le document - * et corrige le nom du fichier ; retourne array(extension, nom corrige) - * s'il ne trouve pas, retourne '' et le nom inchange - * - * @param unknown_type $doc - * @return unknown - */ -// https://code.spip.net/@fixer_extension_document -function fixer_extension_document($doc) { - $extension = ''; - $name = $doc['name']; - if (preg_match(',\.([^.]+)$,', $name, $r) - AND $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote(corriger_extension($r[1]))) - ) { - $extension = $t['extension']; - $name = preg_replace(',\.[^.]*$,', '', $doc['name']).'.'.$extension; - } - else if ($t = sql_fetsel("extension", "spip_types_documents", "mime_type=" . sql_quote($doc['type']))) { - $extension = $t['extension']; - $name = preg_replace(',\.[^.]*$,', '', $doc['name']).'.'.$extension; - } - - return array($extension,$name); -} -} - -// -// Gestion des fichiers ZIP -// -// https://code.spip.net/@accepte_fichier_upload - -function accepte_fichier_upload ($f) { - if (!preg_match(",.*__MACOSX/,", $f) - AND !preg_match(",^\.,", basename($f))) { - include_spip('action/ajouter_documents'); - $ext = corriger_extension((strtolower(substr(strrchr($f, "."), 1)))); - return sql_countsel('spip_types_documents', "extension=" . sql_quote($ext) . " AND upload='oui'"); - } -} - -# callback pour le deballage d'un zip telecharge -# http://www.phpconcept.net/pclzip/man/en/?options-pclzip_cb_pre_extractfunction -// https://code.spip.net/@callback_deballe_fichier - -function callback_deballe_fichier($p_event, &$p_header) { - if (accepte_fichier_upload($p_header['filename'])) { - $p_header['filename'] = _tmp_dir . basename($p_header['filename']); - return 1; - } else { - return 0; - } -} - -?> + array_shift($file['error']), + 'name' => array_shift($file['name']), + 'tmp_name' => array_shift($file['tmp_name']), + 'type' => array_shift($file['type']), + ); + if (!($test['error'] == 4)) { + if (is_string($err = joindre_upload_error($test['error']))) { + return $err; + } // un erreur upload + if (!is_array(verifier_upload_autorise($test['name']))) { + return _T('medias:erreur_upload_type_interdit', array('nom' => $test['name'])); + } + $files[] = $test; + } + } + } else { + //UPLOAD_ERR_NO_FILE + if (!($file['error'] == 4)) { + if (is_string($err = joindre_upload_error($file['error']))) { + return $err; + } // un erreur upload + if (!is_array(verifier_upload_autorise($file['name']))) { + return _T('medias:erreur_upload_type_interdit', array('nom' => $file['name'])); + } + $files[] = $file; + } + } + } + if (!count($files)) { + return _T('medias:erreur_indiquez_un_fichier'); + } + } + + return $files; + } elseif (_request('joindre_distant')) { + $path = _request('url'); + if (!strlen($path) or $path == 'http://') { + return _T('medias:erreur_indiquez_un_fichier'); + } + include_spip('action/ajouter_documents'); + $infos = renseigner_source_distante($path); + if (!is_array($infos)) { + return $infos; + } // message d'erreur + else { + return array( + array( + 'name' => basename($path), + 'tmp_name' => $path, + 'distant' => true, + ) + ); + } + } elseif (_request('joindre_ftp')) { + $path = _request('cheminftp'); + if (!$path || strstr($path, '..')) { + return _T('medias:erreur_indiquez_un_fichier'); + } + + include_spip('inc/documents'); + include_spip('inc/actions'); + $upload = determine_upload(); + if ($path != '/' and $path != './') { + $upload .= $path; + } + + if (!is_dir($upload)) { + // seul un fichier est demande + return array( + array( + 'name' => basename($upload), + 'tmp_name' => $upload + ) + ); + } else { + // on upload tout un repertoire + $files = array(); + foreach (preg_files($upload) as $fichier) { + $files[] = array( + 'name' => basename($fichier), + 'tmp_name' => $fichier + ); + } + + return $files; + } + } elseif (_request('joindre_zip') and $token_zip = _request('chemin_zip')) { + $zip_to_clean = (isset($GLOBALS['visiteur_session']['zip_to_clean']) ? + unserialize($GLOBALS['visiteur_session']['zip_to_clean']) : array()); + if (!$zip_to_clean + or !isset($zip_to_clean[$token_zip]) + or !$path = $zip_to_clean[$token_zip]) { + return _T('avis_operation_impossible'); + } + + include_spip('inc/documents'); //pour creer_repertoire_documents + define('_TMP_ZIP', $path); + define('_TMP_DIR', creer_repertoire_documents(md5($path . $GLOBALS['visiteur_session']['id_auteur']))); + if (_TMP_DIR == _DIR_IMG) { + return _T('avis_operation_impossible'); + } + + $files = array(); + if (_request('options_upload_zip') == 'deballe') { + $files = joindre_deballer_lister_zip($path, _TMP_DIR); + } + + // si le zip doit aussi etre conserve, l'ajouter + if (_request('options_upload_zip') == 'upload' or _request('options_deballe_zip_conserver')) { + $files[] = array( + 'name' => basename($path), + 'tmp_name' => $path, + ); + } + return $files; + } + + return array(); +} + + +// Erreurs d'upload +// renvoie false si pas d'erreur +// et true si erreur = pas de fichier +// pour les autres erreurs renvoie le message d'erreur +function joindre_upload_error($error) { + + if (!$error) { + return false; + } + spip_log("Erreur upload $error -- cf. http://php.net/manual/fr/features.file-upload.errors.php"); + switch ($error) { + case 4: /* UPLOAD_ERR_NO_FILE */ + return true; + + # on peut affiner les differents messages d'erreur + case 1: /* UPLOAD_ERR_INI_SIZE */ + $msg = _T( + 'medias:upload_limit', + array('max' => ini_get('upload_max_filesize')) + ); + break; + case 2: /* UPLOAD_ERR_FORM_SIZE */ + $msg = _T( + 'medias:upload_limit', + array('max' => ini_get('upload_max_filesize')) + ); + break; + case 3: /* UPLOAD_ERR_PARTIAL */ + $msg = _T( + 'medias:upload_limit', + array('max' => ini_get('upload_max_filesize')) + ); + break; + case 6: /* UPLOAD_ERR_NO_TMP_DIR */ + $msg = _T('medias:erreur_dossier_tmp_manquant'); + break; + case 7: /* UPLOAD_ERR_CANT_WRITE */ + $msg = _T('medias:erreur_ecriture_fichier'); + break; + default: /* autre */ + if (!$msg) { + $msg = _T('pass_erreur') . ' ' . $error + . '
      ' . propre('[->http://php.net/manual/fr/features.file-upload.errors.php]'); + } + break; + } + spip_log("erreur upload $error"); + return $msg; +} + +/** + * Verifier si le fichier poste est un zip + * Si on sait le deballer, proposer les options necessaires + * + * @param array $files + * @return string + */ +function joindre_verifier_zip($files) { + if (function_exists('gzopen') + and (count($files) == 1) + and !isset($files[0]['distant']) + and + (preg_match('/\.zip$/i', $files[0]['name']) + or (isset($files[0]['type']) and $files[0]['type'] == 'application/zip')) + ) { + // on pose le fichier dans le repertoire zip + // (nota : copier_document n'ecrase pas un fichier avec lui-meme + // ca autorise a boucler) + include_spip('inc/getdocument'); + $desc = $files[0]; + $zip = copier_document( + 'zip', + $desc['name'], + $desc['tmp_name'] + ); + + // Est-ce qu'on sait le lire ? + include_spip('inc/pclzip'); + if ($zip + and $archive = new PclZip($zip) + and $contenu = joindre_decrire_contenu_zip($archive) + and $tmp = sous_repertoire(_DIR_TMP, 'zip') + and rename($zip, $tmp = $tmp . basename($zip)) + ) { + $zip_to_clean = (isset($GLOBALS['visiteur_session']['zip_to_clean']) ? + unserialize($GLOBALS['visiteur_session']['zip_to_clean']) : array()); + $zip_to_clean[md5($tmp)] = $tmp; + session_set('zip_to_clean', serialize($zip_to_clean)); + $contenu[] = $tmp; + + return $contenu; + } + } + + // ce n'est pas un zip sur lequel il faut demander plus de precisions + return false; +} + +/** + * Verifier et decrire les fichiers de l'archive, en deux listes : + * - une liste des noms de fichiers ajoutables + * - une liste des erreurs (fichiers refuses) + * + * @param object $zip + * @return array + */ +function joindre_decrire_contenu_zip($zip) { + include_spip('action/ajouter_documents'); + // si pas possible de decompacter: installer comme fichier zip joint + if (!$list = $zip->listContent()) { + return false; + } + + // Verifier si le contenu peut etre uploade (verif extension) + $fichiers = array(); + $erreurs = array(); + foreach ($list as $file) { + if (accepte_fichier_upload($f = $file['stored_filename'])) { + $fichiers[$f] = $file; + } else // pas de message pour les dossiers et fichiers caches + { + if (substr($f, -1) !== '/' and substr(basename($f), 0, 1) !== '.') { + $erreurs[] = _T('medias:erreur_upload_type_interdit', array('nom' => $f)); + } + } + } + + // si aucun fichier uploadable : installer comme fichier zip joint + if (!count($fichiers)) { + return false; + } + + ksort($fichiers); + + return array($fichiers, $erreurs); +} + + +// https://code.spip.net/@joindre_deballes +function joindre_deballer_lister_zip($path, $tmp_dir) { + include_spip('inc/pclzip'); + $archive = new PclZip($path); + $archive->extract( + PCLZIP_OPT_PATH, + _TMP_DIR, + PCLZIP_CB_PRE_EXTRACT, + 'callback_deballe_fichier' + ); + if ($contenu = joindre_decrire_contenu_zip($archive)) { + $files = array(); + $fichiers = reset($contenu); + foreach ($fichiers as $fichier) { + $f = basename($fichier['filename']); + $files[] = array( + 'tmp_name' => $tmp_dir . $f, + 'name' => $f, + 'titrer' => _request('options_deballe_zip_titrer'), + 'mode' => _request('options_deballe_zip_mode_document') ? 'document' : null + ); + } + + return $files; + } + + return _T('avis_operation_impossible'); +} + +if (!function_exists('fixer_extension_document')) { + /** + * Cherche dans la base le type-mime du tableau representant le document + * et corrige le nom du fichier ; retourne array(extension, nom corrige) + * s'il ne trouve pas, retourne '' et le nom inchange + * + * @param unknown_type $doc + * @return unknown + */ +// https://code.spip.net/@fixer_extension_document + function fixer_extension_document($doc) { + $extension = ''; + $name = $doc['name']; + if (preg_match(',\.([^.]+)$,', $name, $r) + and $t = sql_fetsel( + 'extension', + 'spip_types_documents', + 'extension=' . sql_quote(corriger_extension($r[1])) + ) + ) { + $extension = $t['extension']; + $name = preg_replace(',\.[^.]*$,', '', $doc['name']) . '.' . $extension; + } else { + if ($t = sql_fetsel('extension', 'spip_types_documents', 'mime_type=' . sql_quote($doc['type']))) { + $extension = $t['extension']; + $name = preg_replace(',\.[^.]*$,', '', $doc['name']) . '.' . $extension; + } + } + + return array($extension, $name); + } +} + +// +// Gestion des fichiers ZIP +// +// https://code.spip.net/@accepte_fichier_upload + +function accepte_fichier_upload($f) { + if (!preg_match(',.*__MACOSX/,', $f) + and !preg_match(',^\.,', basename($f)) + ) { + include_spip('action/ajouter_documents'); + $ext = corriger_extension((strtolower(substr(strrchr($f, '.'), 1)))); + + return sql_countsel( + 'spip_types_documents', + 'extension=' . sql_quote($ext) . " AND upload='oui'" + ); + } +} + +# callback pour le deballage d'un zip telecharge +# http://www.phpconcept.net/pclzip/man/en/?options-pclzip_cb_pre_extractfunction +// https://code.spip.net/@callback_deballe_fichier + +function callback_deballe_fichier($p_event, &$p_header) { + if (accepte_fichier_upload($p_header['filename'])) { + $p_header['filename'] = _TMP_DIR . basename($p_header['filename']); + + return 1; + } else { + return 0; + } +} diff --git a/www/plugins-dist/medias/inc/marquer_doublons_doc.php b/www/plugins-dist/medias/inc/marquer_doublons_doc.php index e5c94ab7..382166cb 100644 --- a/www/plugins-dist/medias/inc/marquer_doublons_doc.php +++ b/www/plugins-dist/medias/inc/marquer_doublons_doc.php @@ -1,78 +1,156 @@ - $type, - 'id_objet' => $id, - $id_table_objet => $id - ); - traiter_modeles($champs_a_traiter,array('documents'=>$modeles),'','',null,$env); // detecter les doublons - objet_qualifier_liens(array('document'=>'*'),array($type=>$id),array('vu'=>'non')); - if (count($GLOBALS['doublons_documents_inclus'])){ - // on repasse par une requete sur spip_documents pour verifier que les documents existent bien ! - $in_liste = sql_in('id_document',$GLOBALS['doublons_documents_inclus']); - $res = sql_allfetsel("id_document", "spip_documents", $in_liste); - $res = array_map('reset',$res); - // Creer le lien s'il n'existe pas deja - objet_associer(array('document'=>$res),array($type=>$id),array('vu'=>'oui')); - objet_qualifier_liens(array('document'=>$res),array($type=>$id),array('vu'=>'oui')); - } -} - -?> \ No newline at end of file + valeur] connus de l'objet + * @param int $id + * Identifiant de l'objet + * @param string $type + * Type d'objet éditorial (ex: article) + * @param string $id_table_objet + * Nom de la clé primaire sur la table sql de l'objet + * @param string $table_objet + * Nom de l'objet éditorial (ex: articles) + * @param string $spip_table_objet + * Nom de la table sql de l'objet + * @param array $desc + * Description de l'objet, si déjà calculé + * @param string $serveur + * Serveur sql utilisé. + * @return void|null + **/ +function inc_marquer_doublons_doc_dist( + $champs, + $id, + $type, + $id_table_objet, + $table_objet, + $spip_table_objet, + $desc = array(), + $serveur = '' +) { + + // On conserve uniquement les champs qui modifient le calcul des doublons de documents + // S'il n'y en a aucun, les doublons ne sont pas impactés, donc rien à faire d'autre.. + if (!$champs = array_intersect_key($champs, array_flip($GLOBALS['medias_liste_champs']))) { + return; + } + + if (!$desc) { + $trouver_table = charger_fonction('trouver_table', 'base'); + $desc = $trouver_table($table_objet, $serveur); + } + + // Il faut récupérer toutes les données qui impactent les liens de documents vus + // afin de savoir lesquels sont présents dans les textes, et pouvoir actualiser avec + // les liens actuellement enregistrés. + $absents = array(); + + // Récupérer chaque champ impactant qui existe dans la table de l'objet et qui nous manque + foreach ($GLOBALS['medias_liste_champs'] as $champ) { + if (isset($desc['field'][$champ]) and !isset($champs[$champ])) { + $absents[] = $champ; + } + } + + // Retrouver les textes des champs manquants + if ($absents) { + $row = sql_fetsel($absents, $spip_table_objet, "$id_table_objet=" . sql_quote($id)); + if ($row) { + $champs = array_merge($row, $champs); + } + } + + include_spip('inc/texte'); + include_spip('base/abstract_sql'); + include_spip('action/editer_liens'); + include_spip('base/objets'); + + // récupérer la liste des modèles qui considèrent un document comme vu s'ils sont utilisés dans un texte + $modeles = lister_tables_objets_sql('spip_documents'); + $modeles = $modeles['modeles']; + + // liste d'id_documents trouvés dans les textes + $GLOBALS['doublons_documents_inclus'] = array(); + + // detecter les doublons dans ces textes + traiter_modeles(implode(' ', $champs), array('documents' => $modeles), '', '', null, array( + 'objet' => $type, + 'id_objet' => $id, + $id_table_objet => $id + )); + + $texte_documents_vus = $GLOBALS['doublons_documents_inclus']; + + // on ne modifie les liaisons que si c'est nécessaire + $bdd_documents_vus = array( + 'oui' => array(), + 'non' => array() + ); + + $liaisons = objet_trouver_liens(array('document' => '*'), array($type => $id)); + foreach ($liaisons as $l) { + $bdd_documents_vus[$l['vu']][] = $l['id_document']; + } + + // il y a des nouveaux documents vus dans le texte + $nouveaux = array_diff($texte_documents_vus, $bdd_documents_vus['oui']); + + // il y a des anciens documents vus dans la bdd + $anciens = array_diff($bdd_documents_vus['oui'], $texte_documents_vus); + + if ($nouveaux) { + // on vérifie que les documents indiqués vus existent réellement tout de même (en cas d'erreur de saisie) + $ids = sql_allfetsel('id_document', 'spip_documents', sql_in('id_document', $nouveaux)); + $ids = array_map('reset', $ids); + if ($ids) { + // Creer le lien s'il n'existe pas déjà + objet_associer(array('document' => $ids), array($type => $id), array('vu' => 'oui')); + objet_qualifier_liens(array('document' => $ids), array($type => $id), array('vu' => 'oui')); + } + } + + if ($anciens) { + objet_qualifier_liens(array('document' => $anciens), array($type => $id), array('vu' => 'non')); + } +} diff --git a/www/plugins-dist/medias/inc/renseigner_document.php b/www/plugins-dist/medias/inc/renseigner_document.php index 427abac5..8ab77f98 100644 --- a/www/plugins-dist/medias/inc/renseigner_document.php +++ b/www/plugins-dist/medias/inc/renseigner_document.php @@ -10,34 +10,58 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Fonctions pour compléter les informations connues d'un document + * + * @package SPIP\Medias\Renseigner + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** - * recuperer les infos distantes d'une url, + * Récuperer les infos distantes d'une URL, * et renseigner pour une insertion en base - * utilise une variable static car appellee plusieurs fois au cours du meme hit - * (verification puis traitement) + * + * Utilise une variable static car appellée plusieurs fois au cours du même hit + * (vérification puis traitement) + * + * Un plugin peut avec le pipeline renseigner_document_distant renseigner + * les informations fichier et mode avant l'analyse et traitement par ce plugin, + * qui dans ce cas ne les fera pas. Exemple : OEmbed + * + * @pipeline_appel renseigner_document_distant * * @param string $source - * @return string + * URL du document + * @return array|string + * Informations sur le fichier distant, sinon message d'erreur. + * Sans erreur, retourne un tableau : + * + * - source : URL du fichier + * - distant : Est-ce un fichier distant ? + * - mode : Mode d'inclusion + * - fichier : Chemin local du fichier s'il a été recopié */ -function renseigner_source_distante($source){ +function renseigner_source_distante($source) { static $infos = array(); - if (isset($infos[$source])) + if (isset($infos[$source])) { return $infos[$source]; - + } + include_spip('inc/distant'); // on passe la source dans le pipeline, le premier plugin // qui est capable de renseigner complete // fichier et mode + tous les autres champs a son gout // ex : oembed - $a = pipeline('renseigner_document_distant',array('source'=>$source)); + $a = pipeline('renseigner_document_distant', array('source' => $source)); // si la source est encore la, en revenir a la // methode traditionnelle : chargement de l'url puis analyse - if (!isset($a['fichier']) OR !isset($a['mode'])){ + if (!isset($a['fichier']) or !isset($a['mode'])) { if (!$a = recuperer_infos_distantes($a['source'])) { - return _T('medias:erreur_chemin_distant',array('nom'=>$source)); + return _T('medias:erreur_chemin_distant', array('nom' => $source)); } # NB: dans les bonnes conditions (fichier autorise et pas trop gros) # $a['fichier'] est une copie locale du fichier @@ -53,62 +77,85 @@ function renseigner_source_distante($source){ /** * Renseigner les informations de taille et dimension d'un document - * + * * Récupère les informations de taille (largeur / hauteur / type_image / taille) d'un document * Utilise pour cela les fonctions du répertoire metadatas/* - * + * * Ces fonctions de récupérations peuvent retourner d'autres champs si ces champs sont définis * comme editable dans la déclaration de la table spip_documents - * - * TODO Renommer cette fonction sans "_image" * - * @param string $fichier - * Le fichier à examiner + * @todo + * Renommer cette fonction sans "_image" + * + * @param string $fichier + * Le fichier à examiner * @param string $ext - * L'extension du fichier à examiner + * L'extension du fichier à examiner + * @param bool $distant + * Indique que le fichier peut etre distant, on essaiera alors d'en recuperer un bout pour en lire les meta infos * @return array|string $infos - * Si c'est une chaine, c'est une erreur - * Si c'est un tableau, l'ensemble des informations récupérées du fichier + * + * - Si c'est une chaîne, c'est une erreur + * - Si c'est un tableau, l'ensemble des informations récupérées du fichier */ -function renseigner_taille_dimension_image($fichier,$ext){ +function renseigner_taille_dimension_image($fichier, $ext, $distant = false) { $infos = array( - 'largeur'=>0, - 'hauteur'=>0, - 'type_image'=>'', - 'taille'=>0 + 'largeur' => 0, + 'hauteur' => 0, + 'type_image' => '', + 'taille' => 0 ); - + // Quelques infos sur le fichier if ( !$fichier - OR !@file_exists($fichier) - OR !$infos['taille'] = @intval(filesize($fichier))) { - spip_log ("Echec copie du fichier $fichier"); - return _T('medias:erreur_copie_fichier',array('nom'=> $fichier)); + or !@file_exists($fichier) + or !$infos['taille'] = @intval(filesize($fichier)) + ) { + if ($distant) { + // on ne saura pas la taille + unset($infos['taille']); + + // recuperer un debut de fichier 512ko semblent suffire + $tmp = _DIR_TMP . md5($fichier); + $res = recuperer_url($fichier, array('file' => $tmp, 'taille_max' => 512 * 1024)); + if (!$res) { + spip_log("Echec copie du fichier $fichier", 'medias'); + + return _T('medias:erreur_copie_fichier', array('nom' => $fichier)); + } + $fichier = $tmp; + } else { + spip_log("Echec copie du fichier $fichier", 'medias'); + + return _T('medias:erreur_copie_fichier', array('nom' => $fichier)); + } } // chercher une fonction de description $meta = array(); - if ($metadata = charger_fonction($ext,"metadata",true)){ + if ($metadata = charger_fonction($ext, 'metadata', true)) { $meta = $metadata($fichier); - } - else { - $media = sql_getfetsel('media_defaut','spip_types_documents','extension='.sql_quote($ext)); - if ($metadata = charger_fonction($media,"metadata",true)){ + } else { + $media = sql_getfetsel('media_defaut', 'spip_types_documents', 'extension=' . sql_quote($ext)); + if ($metadata = charger_fonction($media, 'metadata', true)) { $meta = $metadata($fichier); } } - $meta = pipeline('renseigner_document',array('args'=>array('extension'=>$ext,'fichier'=>$fichier),'data' => $meta)); + $meta = pipeline( + 'renseigner_document', + array('args' => array('extension' => $ext, 'fichier' => $fichier), 'data' => $meta) + ); include_spip('inc/filtres'); # pour objet_info() - $editables = objet_info('document','champs_editables'); - foreach($meta as $m=>$v) - if (isset($infos[$m]) OR in_array($m,$editables)) + $editables = objet_info('document', 'champs_editables'); + foreach ($meta as $m => $v) { + if (isset($infos[$m]) or in_array($m, $editables)) { $infos[$m] = $v; + } + } return $infos; } - -?> \ No newline at end of file diff --git a/www/plugins-dist/medias/inc/verifier_document_mode_image.php b/www/plugins-dist/medias/inc/verifier_document_mode_image.php index 543eefb9..0023505a 100644 --- a/www/plugins-dist/medias/inc/verifier_document_mode_image.php +++ b/www/plugins-dist/medias/inc/verifier_document_mode_image.php @@ -9,18 +9,22 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function inc_verifier_document_mode_image_dist($infos){ +function inc_verifier_document_mode_image_dist($infos) { // Si on veut uploader une image, il faut qu'elle ait ete bien lue - if ($infos['inclus'] != 'image') - return _T('medias:erreur_format_fichier_image',array('nom'=> $infos['fichier'])); #SVG + if ($infos['inclus'] != 'image') { + return _T('medias:erreur_format_fichier_image', array('nom' => $infos['fichier'])); + } #SVG - if (isset($infos['largeur']) AND isset($infos['hauteur'])){ - if (!($infos['largeur'] OR $infos['hauteur'])) - return _T('medias:erreur_upload_vignette',array('nom'=>$infos['fichier'])); + if (isset($infos['largeur']) and isset($infos['hauteur'])) { + if (!($infos['largeur'] or $infos['hauteur'])) { + return _T('medias:erreur_upload_vignette', array('nom' => $infos['fichier'])); + } } return true; -} \ No newline at end of file +} diff --git a/www/plugins-dist/medias/inc/verifier_document_mode_vignette.php b/www/plugins-dist/medias/inc/verifier_document_mode_vignette.php index 94d3373e..44dc6f4e 100644 --- a/www/plugins-dist/medias/inc/verifier_document_mode_vignette.php +++ b/www/plugins-dist/medias/inc/verifier_document_mode_vignette.php @@ -9,18 +9,22 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function inc_verifier_document_mode_vignette_dist($infos){ +function inc_verifier_document_mode_vignette_dist($infos) { // Si on veut uploader une vignette, il faut qu'elle ait ete bien lue - if ($infos['inclus'] != 'image') - return _T('medias:erreur_format_fichier_image',array('nom'=> $infos['fichier'])); #SVG + if ($infos['inclus'] != 'image') { + return _T('medias:erreur_format_fichier_image', array('nom' => $infos['fichier'])); + } #SVG - if (isset($infos['largeur']) AND isset($infos['hauteur'])){ - if (!($infos['largeur'] OR $infos['hauteur'])) - return _T('medias:erreur_upload_vignette',array('nom'=>$infos['fichier'])); + if (isset($infos['largeur']) and isset($infos['hauteur'])) { + if (!($infos['largeur'] or $infos['hauteur'])) { + return _T('medias:erreur_upload_vignette', array('nom' => $infos['fichier'])); + } } return true; -} \ No newline at end of file +} diff --git a/www/plugins-dist/medias/inc/vignette.php b/www/plugins-dist/medias/inc/vignette.php index 11f6d9e1..9e6a8222 100644 --- a/www/plugins-dist/medias/inc/vignette.php +++ b/www/plugins-dist/medias/inc/vignette.php @@ -9,46 +9,64 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion des vignettes de types de fichier + * + * @package SPIP\Medias\Vignette + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** - * Vignette pour les documents lies - * rechercher les fichiers d'icone au format png pour l'extension demandee + * Vignette pour une extension de document * - * on cherche prive/vignettes/ext.png dans le path + * Recherche les fichiers d'icones au format png pour l'extension demandée. + * On cherche prive/vignettes/ext.png dans le path. * * @param string $ext + * Extension du fichier. Exemple : png * @param bool $size + * true pour retourner un tableau avec les tailles de la vignette + * false pour retourner uniquement le chemin du fichier * @param bool $loop - * @return array|bool|int|string + * Autoriser la fonction à s'appeler sur elle-même + * (paramètre interne). + * @return array|bool|string + * False si l'image n'est pas trouvée + * Chaîne (chemin vers l'image) si on ne demande pas de taille + * Tableau (chemin, largeur, hauteur) si on demande avec la taille. */ -function inc_vignette_dist($ext, $size=true, $loop = true) { +function inc_vignette_dist($ext, $size = true, $loop = true) { - if (!$ext) + if (!$ext) { $ext = 'txt'; + } // Chercher la vignette correspondant a ce type de document // dans les vignettes persos, ou dans les vignettes standard if ( - # installation dans un dossier /vignettes personnel, par exemple /squelettes/vignettes - !$v = find_in_path("prive/vignettes/".$ext.".png") - ) - if ($loop){ - $f = charger_fonction('vignette','inc'); - $v = $f('defaut', false, $loop=false); + # installation dans un dossier /vignettes personnel, par exemple /squelettes/vignettes + !$v = find_in_path('prive/vignettes/' . $ext . '.png') + ) { + if ($loop) { + $f = charger_fonction('vignette', 'inc'); + $v = $f('defaut', false, $loop = false); + } else { + $v = false; } - else - $v = false; # pas trouve l'icone de base + } # pas trouve l'icone de base - if (!$size) return $v; + if (!$size) { + return $v; + } $largeur = $hauteur = 0; - if ($v AND $size = @getimagesize($v)) { + if ($v and $size = @getimagesize($v)) { $largeur = $size[0]; $hauteur = $size[1]; } return array($v, $largeur, $hauteur); } - -?> diff --git a/www/plugins-dist/medias/javascript/gestion_listes_documents.js.html b/www/plugins-dist/medias/javascript/gestion_listes_documents.js.html new file mode 100644 index 00000000..dcbea67a --- /dev/null +++ b/www/plugins-dist/medias/javascript/gestion_listes_documents.js.html @@ -0,0 +1,195 @@ +#HTTP_HEADER{Content-Type: text/javascript; charset=#CHARSET} +[(#REM)] +[(#ENV{skin}|oui)[]] + + \ No newline at end of file diff --git a/www/plugins-dist/medias/modeles/doc.html b/www/plugins-dist/medias/modeles/doc.html index 4e59fff5..022adb6a 100644 --- a/www/plugins-dist/medias/modeles/doc.html +++ b/www/plugins-dist/medias/modeles/doc.html @@ -33,12 +33,13 @@ #SET{height,#GET{fichier}|hauteur} #SET{fichier,#GET{fichier}|extraire_attribut{src}} ] - +[(#SET{title,[(#TYPE_DOCUMENT) - [(#TAILLE|taille_en_octets)]]})] +[(#MEDIA|=={image}|oui) #SET{title,#TITRE|sinon{#GET{title}}]
      []#TYPE_DOCUMENT - [(#TAILLE|taille_en_octets|texte_backend)][(#GET{url}|?{})]
      [ + class="(#ENV{lien_class})"] title='[(#GET{title}|attribut_html)]'[ + (#ENV{lien}|?{'',type="#MIME_TYPE"})]>][(#GET{url}|?{})][
      (#TITRE)
      ][
      (#DESCRIPTIF|PtoBR)[(#NOTES|PtoBR)]
      ]
      diff --git a/www/plugins-dist/medias/modeles/document_case.html b/www/plugins-dist/medias/modeles/document_case.html index 3ca2708f..beb90277 100644 --- a/www/plugins-dist/medias/modeles/document_case.html +++ b/www/plugins-dist/medias/modeles/document_case.html @@ -29,7 +29,7 @@ ] [(#ID_DOCUMENT|medias_raccourcis_doc{#_docslies:TITRE,#_docslies:DESCRIPTIF,#INCLUS,#LARGEUR,#HAUTEUR,#MODE,#VU,#MEDIA})] - [
      (#INCLUS|=={image}|et{#EVAL{_BOUTON_MODE_IMAGE}}|oui) + [
      (#INCLUS|=={image}|et{#CONST{_BOUTON_MODE_IMAGE}}|oui) [(#MODE|=={image}|oui) [(#BOUTON_ACTION{<:medias:upload_info_mode_document:>,#URL_ACTION_AUTEUR{changer_mode_document,#ID_DOCUMENT-document,#SELF},ajax})] ][(#MODE|=={image}|non) @@ -38,14 +38,14 @@
      ]
      - [(#TOTAL_BOUCLE|=={1}|et{#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET}})[(#BOUTON_ACTION{<:medias:bouton_enlever_supprimer_document:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-#ID_DOCUMENT-suppr,#SELF},ajax,<:medias:bouton_enlever_supprimer_document_confirmation:>,'',[(function(){jQuery("#doc(#ID_DOCUMENT)").animateRemove();return true;})()]})]|] - [(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})[(#BOUTON_ACTION{<:medias:bouton_enlever_document:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-#ID_DOCUMENT,#SELF},ajax,'','',[(function(){jQuery("#doc(#ID_DOCUMENT)").animateRemove();return true;})()]})]|] + [(#TOTAL_BOUCLE|=={1}|et{#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET}})[(#BOUTON_ACTION{<:medias:bouton_enlever_supprimer_document:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-#ID_DOCUMENT-suppr,#SELF},ajax,<:medias:bouton_enlever_supprimer_document_confirmation:>,'',[(function(){jQuery("#doc(#ID_DOCUMENT)").animateRemove();return true;})()]})]] + [(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})[(#BOUTON_ACTION{<:medias:bouton_enlever_document:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-#ID_DOCUMENT,#SELF},ajax,'','',[(function(){jQuery("#doc(#ID_DOCUMENT)").animateRemove();return true;})()]})]] [(#AUTORISER{modifier,document,#ID_DOCUMENT}|oui) <:medias:bouton_modifier_document:> ] - [(#PIPELINE{document_desc_actions,#ARRAY{args,#ARRAY{id_document,#ID_DOCUMENT,position,document_case},data,''}})] + [(#PIPELINE{document_desc_actions,#ARRAY{args,#ARRAY{id_document,#ID_DOCUMENT,position,document_case,objet,#OBJET,id_objet,#ID_OBJET},data,''}})]
      [(#PIPELINE{afficher_metas_document,#ARRAY{args,#ARRAY{'quoi','document_case','id_document',#ID_DOCUMENT},data,''}})]
      - + \ No newline at end of file diff --git a/www/plugins-dist/medias/modeles/document_case_fonctions.php b/www/plugins-dist/medias/modeles/document_case_fonctions.php index 2b9000c0..e79b12a7 100644 --- a/www/plugins-dist/medias/modeles/document_case_fonctions.php +++ b/www/plugins-dist/medias/modeles/document_case_fonctions.php @@ -1,42 +1,56 @@ correspondant - $raccourci = - affiche_raccourci_doc($doc, $id_document, 'left') + $raccourci = + affiche_raccourci_doc($doc, $id_document, 'left') . affiche_raccourci_doc($doc, $id_document, 'center') . affiche_raccourci_doc($doc, $id_document, 'right'); - if ($mode=='document' - AND ($inclus == "embed" OR $inclus == "image") - AND (($largeur > 0 AND $hauteur > 0) - OR in_array($media,array('video','audio')))) { + if ($mode == 'document' + and ($inclus == 'embed' or $inclus == 'image') + and (($largeur > 0 and $hauteur > 0) + or in_array($media, array('video', 'audio'))) + ) { $raccourci = - ""._T('medias:info_inclusion_vignette')."" - . $raccourci - . ""._T('medias:info_inclusion_directe')."" - . affiche_raccourci_doc('emb', $id_document, 'left') - . affiche_raccourci_doc('emb', $id_document, 'center') - . affiche_raccourci_doc('emb', $id_document, 'right'); + '' . _T('medias:info_inclusion_vignette') . '' + . $raccourci + . '' . _T('medias:info_inclusion_directe') . '' + . affiche_raccourci_doc('emb', $id_document, 'left') + . affiche_raccourci_doc('emb', $id_document, 'center') + . affiche_raccourci_doc('emb', $id_document, 'right'); } - return "
      ".$raccourci."
      "; -} - -?> + return "
      " . $raccourci . '
      '; +} diff --git a/www/plugins-dist/medias/modeles/document_desc.html b/www/plugins-dist/medias/modeles/document_desc.html index 345441b4..9d49e4aa 100644 --- a/www/plugins-dist/medias/modeles/document_desc.html +++ b/www/plugins-dist/medias/modeles/document_desc.html @@ -1,46 +1,102 @@ [(#REM) - Squelette - (c) xxx - Distribue sous licence GPL +Squelette +(c) xxx +Distribue sous licence GPL ] -
      - [(#EXTENSION|match{gif|png|jpg}|oui) #SET{id,#ID_VIGNETTE|?{#ID_VIGNETTE,#ID_DOCUMENT}} -
      - [(#BOUTON_ACTION{[(#CHEMIN_IMAGE{tourner-gauche-12.png}|balise_img{<:medias:image_tourner_gauche:>})],#URL_ACTION_AUTEUR{tourner,#GET{id}|concat{',-90'},#SELF},ajax})] - [(#BOUTON_ACTION{[(#CHEMIN_IMAGE{tourner-droite-12.png}|balise_img{<:medias:image_tourner_droite:>})],#URL_ACTION_AUTEUR{tourner,#GET{id}|concat{',90'},#SELF},ajax})] - [(#BOUTON_ACTION{[(#CHEMIN_IMAGE{tourner-180-12.png}|balise_img{<:medias:image_tourner_180:>})],#URL_ACTION_AUTEUR{tourner,#GET{id}|concat{',180'},#SELF},ajax})] -
      ] +
      +
      [
      (#LOGO_DOCUMENT{#URL_DOCUMENT,150,150})
      ] -

      - [(#VU|=={oui}|oui)<:medias:document_vu:> ] - [(#FICHIER*|basename)] - [(#TITRE|sinon{<:info_sans_titre:>})] - -

      -
      - [(#DISTANT|=={oui}|oui)<:medias:fichier_distant:> ]<:info_numero_abbreviation:>#ID_DOCUMENT - #EXTENSION - [(#TAILLE|taille_en_octets)] - [(#PIPELINE{afficher_metas_document,#ARRAY{args,#ARRAY{'quoi','document_desc','id_document',#ID_DOCUMENT},data,''}})] + +
      +

      + [(#VU|=={oui}|oui)<:medias:document_vu|attribut_html:> ] + + [(#TITRE|oui)#TITRE] + [(#TITRE|non) + <:info_sans_titre:> + [(#FICHIER*|basename)] + ] + + +

      + +
      [(#DESCRIPTIF|couper{100})]
      + +
      +
      + [(#DISTANT|=={oui}|oui)<:medias:fichier_distant|attribut_html:> ]<:info_numero_abbreviation:>#ID_DOCUMENT - #EXTENSION + [(#LARGEUR|ou{#HAUTEUR}|et{#MEDIA|=={image}}) + [- (#VAL{info_largeur_vignette}|_T{#ARRAY{largeur_vignette,#LARGEUR,hauteur_vignette,#HAUTEUR}})] + ][(#MEDIA|in_array{#LISTE{audio,video}}|et{#DUREE|intval}|oui) + - [(#DUREE|duree_en_secondes)] + ] + <:medias:details_document:> +
      +
      + [(#SET{data,[(#VAL{ + + + + + + [(#LARGEUR|ou{#HAUTEUR}|oui) + + + + + + + + + ][(#DUREE|intval|oui) + + + + ] + + + + + + + + + + + + + +
      <:medias:label_credits:>[(#CREDITS|sinon{Crédits non renseignés})]
      <:medias:info_dimensions_image:>[(#VAL{info_largeur_vignette}|_T{#ARRAY{largeur_vignette,#LARGEUR,hauteur_vignette,#HAUTEUR}})]
      <:medias:info_resolution_image:>[(#VAL{medias:info_resolution_mpx}|_T{#ARRAY{resolution,#LARGEUR|mult{#HAUTEUR}|div{1000000}|round{1}|number_format{1}}})]
      <:medias:info_duree:>[(#DUREE|duree_en_secondes{precis})]
      <:medias:info_taille:>[(#TAILLE|taille_en_octets)]
      <:date:>[(#DATE|affdate)]
      <:medias:label_fichier:>[(#FICHIER|basename)]
      + })]})] + [(#PIPELINE{afficher_metas_document,#ARRAY{args,#ARRAY{'quoi','document_desc','id_document',#ID_DOCUMENT},data,#GET{data}}})] +
      +
      - [
      (#INCLUS|=={image}|et{#EVAL{_BOUTON_MODE_IMAGE}}|oui) - [(#MODE|=={image}|oui) - [(#BOUTON_ACTION{<:medias:upload_info_mode_document:>,#URL_ACTION_AUTEUR{changer_mode_document,#ID_DOCUMENT-document,#SELF},ajax})] - ][(#MODE|=={image}|non) - [(#BOUTON_ACTION{<:medias:upload_info_mode_image:>,#URL_ACTION_AUTEUR{changer_mode_document,#ID_DOCUMENT-image,#SELF},ajax})] - ] +
      + +
      + [(#INCLUS|=={image}|et{#CONST{_BOUTON_MODE_IMAGE}}|oui) +
      + [(#MODE|=={image}|oui)[(#BOUTON_ACTION{<:medias:upload_info_mode_document:>,#URL_ACTION_AUTEUR{changer_mode_document,#ID_DOCUMENT-document,#SELF},ajax})] + ][(#MODE|=={image}|non)[(#BOUTON_ACTION{<:medias:upload_info_mode_image:>,#URL_ACTION_AUTEUR{changer_mode_document,#ID_DOCUMENT-image,#SELF},ajax})]]
      ] -
      - - [(#TOTAL_BOUCLE|=={1}|et{#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET}}|et{#VU|=={non}})[(#BOUTON_ACTION{<:medias:bouton_enlever_supprimer_document:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-#ID_DOCUMENT-suppr-safe,#SELF},ajax,<:medias:bouton_enlever_supprimer_document_confirmation:>,'',[(function(){jQuery("#doc(#ID_DOCUMENT)").animateRemove();return true;})()]})]|] - [(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})[(#BOUTON_ACTION{<:medias:bouton_enlever_document:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-#ID_DOCUMENT--safe,#SELF},ajax,'','',[(function(){jQuery("#doc(#ID_DOCUMENT)").animateRemove();return true;})()]})]|] - [(#AUTORISER{modifier,document,#ID_DOCUMENT}|oui) - <:medias:bouton_modifier_document:> - ] - [(#PIPELINE{document_desc_actions,#ARRAY{args,#ARRAY{id_document,#ID_DOCUMENT,position,document_desc},data,''}})] -
      -
      + + [(#TOTAL_BOUCLE|=={1}|et{#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET}}|et{#VU|=={non}})[(#BOUTON_ACTION{<:medias:bouton_enlever_supprimer_document:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-#ID_DOCUMENT-suppr-safe,#SELF},ajax,<:medias:bouton_enlever_supprimer_document_confirmation:>,'',[(function(){jQuery("#doc(#ID_DOCUMENT)").animateRemove();return true;})()]})]] + [(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})[(#BOUTON_ACTION{<:medias:bouton_enlever_document:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-#ID_DOCUMENT--safe,#SELF},ajax,'','',[(function(){jQuery("#doc(#ID_DOCUMENT)").animateRemove();return true;})()]})]] + [(#AUTORISER{modifier,document,#ID_DOCUMENT}|oui) + + ] + [(#PIPELINE{document_desc_actions,#ARRAY{args,#ARRAY{id_document,#ID_DOCUMENT,position,document_desc,objet,#OBJET,id_objet,#ID_OBJET},data,''}})]
      - + +
      +
      + \ No newline at end of file diff --git a/www/plugins-dist/medias/modeles/document_desc_fonctions.php b/www/plugins-dist/medias/modeles/document_desc_fonctions.php new file mode 100644 index 00000000..6f94a62b --- /dev/null +++ b/www/plugins-dist/medias/modeles/document_desc_fonctions.php @@ -0,0 +1,16 @@ + -[(#VAL**{emb_[(#EXTENSION)]}|trouver_fond{modeles/}|?{[(#INCLURE -{fond=modeles/emb_[(#EXTENSION)]}{id=#ID_DOCUMENT}{env}{emb=' '} -)],[(#INCLURE -{fond=modeles/[(#MIME_TYPE|trouver_modele_mime)]}{id=#ID_DOCUMENT}{env}{emb=' '} -)]})] + diff --git a/www/plugins-dist/medias/modeles/emb_fonctions.php b/www/plugins-dist/medias/modeles/emb_fonctions.php index 0c63858f..98385298 100644 --- a/www/plugins-dist/medias/modeles/emb_fonctions.php +++ b/www/plugins-dist/medias/modeles/emb_fonctions.php @@ -1,20 +1,30 @@ modeles/emb_html.html si il existe * => modeles/text_html.html si il existe, * => modeles/text.html sinon - * + * + * @param $extension * @param $mime_type * @return mixed */ -function trouver_modele_mime($mime_type){ - $fond = preg_replace(',\W,','_',$mime_type); - if (trouve_modele($fond)) +function trouver_modele_emb($extension, $mime_type) { + if ($extension and trouve_modele($fond = 'emb_' . $extension)) { return $fond; - else - return preg_replace(',\W.*$,','',$mime_type); -} \ No newline at end of file + } + $fond = preg_replace(',\W,', '_', $mime_type); + if (trouve_modele($fond)) { + return $fond; + } else { + return preg_replace(',\W.*$,', '', $mime_type); + } +} diff --git a/www/plugins-dist/medias/modeles/emb_mp4.html b/www/plugins-dist/medias/modeles/emb_mp4.html new file mode 100644 index 00000000..97af8c35 --- /dev/null +++ b/www/plugins-dist/medias/modeles/emb_mp4.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/plugins-dist/medias/modeles/image.html b/www/plugins-dist/medias/modeles/image.html index 2cd9ba70..5ced491d 100644 --- a/www/plugins-dist/medias/modeles/image.html +++ b/www/plugins-dist/medias/modeles/image.html @@ -4,7 +4,7 @@ ][(#INCLUS|=={image}|et{#ENV{emb,''}|non}|oui) [ + style='float:(#ENV{align}|match{left|right});']>[ ] pour une image en mode image #SET{url,#ENV{lien}}
      -
      []#TYPE_DOCUMENT - [(#TAILLE|taille_en_octets|texte_backend)][(#GET{url}|?{})]
      [ +
      [][(#GET{url}|?{})]
      [
      (#TITRE)
      ][
      (#DESCRIPTIF|PtoBR)[(#NOTES|PtoBR)]
      ]
      @@ -42,8 +42,8 @@ style='[(#ENV{align}|match{^(left|right)$}|?{' '})float:#ENV{align};] (#ENV{alig [(#ID_DOCUMENT|appliquer_filtre{#MIME_TYPE})]
      [ -
      (#TITRE)
      +
      (#TITRE)
      ][ -
      (#DESCRIPTIF|PtoBR)[(#NOTES|PtoBR)]
      +
      (#DESCRIPTIF|PtoBR)[(#NOTES|PtoBR)]
      ]] diff --git a/www/plugins-dist/medias/modeles/img.html b/www/plugins-dist/medias/modeles/img.html index d8bd9d01..0ef76e60 100644 --- a/www/plugins-dist/medias/modeles/img.html +++ b/www/plugins-dist/medias/modeles/img.html @@ -21,7 +21,7 @@ - sinon alt vide Dans le cas mode "document", le contenu de l'attribut - alt et title se construit selon le même schema a ceci pres + alt et title se construit selon le meme schema a ceci pres qu'on ajoute #TYPE_DOCUMENT - #TAILLE sauf si #ENV{lien} est passe @@ -37,7 +37,7 @@ ][(#GET{image}) + style='float:(#ENV{align}|match{left|right});']> [][(#TITRE|texte_backend)][(#ENV{lien}|?{})] ][ diff --git a/www/plugins-dist/medias/modeles/text.html b/www/plugins-dist/medias/modeles/text.html index fb2bc509..d8d3ffcc 100644 --- a/www/plugins-dist/medias/modeles/text.html +++ b/www/plugins-dist/medias/modeles/text.html @@ -1,6 +1,6 @@ [
      (#FICHIER|contenu_document{#ENV{charset,auto}}|echapper_tags)
      -[
      (#TITRE)
      ][
      (#DESCRIPTIF|PtoBR)[(#NOTES|PtoBR)]
      ] +[
      (#TITRE)
      ][
      (#DESCRIPTIF|PtoBR)[(#NOTES|PtoBR)]
      ]
      ]
      diff --git a/www/plugins-dist/medias/modeles/text_html.html b/www/plugins-dist/medias/modeles/text_html.html index d11551a5..4e877439 100644 --- a/www/plugins-dist/medias/modeles/text_html.html +++ b/www/plugins-dist/medias/modeles/text_html.html @@ -1,6 +1,6 @@ [
      #FICHIER -[
      (#TITRE)
      ][
      (#DESCRIPTIF|PtoBR)[(#NOTES|PtoBR)]
      ] +[
      (#TITRE)
      ][
      (#DESCRIPTIF|PtoBR)[(#NOTES|PtoBR)]
      ]
      ]
      diff --git a/www/plugins-dist/medias/modeles/video.html b/www/plugins-dist/medias/modeles/video.html index 930fddbb..0a4ea991 100644 --- a/www/plugins-dist/medias/modeles/video.html +++ b/www/plugins-dist/medias/modeles/video.html @@ -1,38 +1,47 @@ -[ +[ (#REM) on trouvera plusieurs variable de hauteur/largeur - les balises #HAUTEUR et #LARGEUR - #ENV{hauteur} et {largeur} correspondant - #GET{hauteur} et #GET{largeur} correspondent prioritairement a #ENV, puis #LARGEUR/HAUTEUR sauf si il y a un controleur ] -#SET{hauteur,#ENV{hauteur,#HAUTEUR}} #SET{largeur,#ENV{largeur,#LARGEUR}} -[(#REM) +#SET{largeur,#ENV{largeur, #LARGEUR|?{#LARGEUR,480}}|max{120}} +#SET{hauteur,#ENV{hauteur, #HAUTEUR|?{#HAUTEUR,300}}|max{75}} +
      +
      +
      + +
      +
      +[
      (#TITRE)
      ] +[
      (#DESCRIPTIF|PtoBR)[(#NOTES|PtoBR)]
      ] +[] +[(#ENV{skin}|oui)[]] +
      +
      \ No newline at end of file diff --git a/www/plugins-dist/medias/paquet.xml b/www/plugins-dist/medias/paquet.xml index 903d8779..f0e88b79 100644 --- a/www/plugins-dist/medias/paquet.xml +++ b/www/plugins-dist/medias/paquet.xml @@ -1,18 +1,20 @@ Medias Collectif SPIP - Cédric Morin, Tetue pour la médiathèque + Cédric Morin, Romy Duhem-Verdière pour la médiathèque + getID3() + MediaElement.js @@ -34,14 +36,22 @@ + + + - - - + + + + + + + + diff --git a/www/plugins-dist/medias/prive/objets/contenu/portfolio_document.html b/www/plugins-dist/medias/prive/objets/contenu/portfolio_document.html index 0b8a3550..dfc567f2 100644 --- a/www/plugins-dist/medias/prive/objets/contenu/portfolio_document.html +++ b/www/plugins-dist/medias/prive/objets/contenu/portfolio_document.html @@ -6,7 +6,7 @@ ] [ -(#INCLURE{fond=prive/squelettes/inclure/portfolio-documents, env, ajax=documents}) +(#INCLURE{fond=prive/squelettes/inclure/portfolio-documents, env, id_unique='', ajax=documents}) ] [ (#INCLURE{fond=prive/squelettes/inclure/ajouter-documents, env, ajax}) diff --git a/www/plugins-dist/medias/prive/objets/liste/documents.html b/www/plugins-dist/medias/prive/objets/liste/documents.html index d38c374f..38764754 100644 --- a/www/plugins-dist/medias/prive/objets/liste/documents.html +++ b/www/plugins-dist/medias/prive/objets/liste/documents.html @@ -13,7 +13,7 @@ [(#TRI{statut,#,ajax})] [(#TRI{num titre,<:info_titre:>,ajax})] - <:auteur:> + <:medias:info_utilisation:> [(#TRI{date,<:date:>,ajax})] [(#TRI{id_document,<:info_numero_abbreviation:>,ajax})] @@ -27,7 +27,7 @@ [(#RANG). ][(#TITRE|sinon{[(#FICHIER|basename)]})] - #NOM + [(#TOTAL_BOUCLE|singulier_ou_pluriel{medias:une_utilisation,medias:des_utilisations})] [(#DATE|affdate_jourcourt)] [(#AUTORISER{modifier,document,#ID_DOCUMENT}|?{ #ID_DOCUMENT, diff --git a/www/plugins-dist/medias/prive/squelettes/contenu/documents.html b/www/plugins-dist/medias/prive/squelettes/contenu/documents.html index 4264fda3..d379bdbf 100644 --- a/www/plugins-dist/medias/prive/squelettes/contenu/documents.html +++ b/www/plugins-dist/medias/prive/squelettes/contenu/documents.html @@ -1,6 +1,6 @@ [(#AUTORISER{administrer,mediatheque}|sinon_interdire_acces)] \ No newline at end of file diff --git a/www/plugins-dist/medias/prive/squelettes/inclure/ajouter-documents_fonctions.php b/www/plugins-dist/medias/prive/squelettes/inclure/ajouter-documents_fonctions.php index ba8e49a6..da5e43c7 100644 --- a/www/plugins-dist/medias/prive/squelettes/inclure/ajouter-documents_fonctions.php +++ b/www/plugins-dist/medias/prive/squelettes/inclure/ajouter-documents_fonctions.php @@ -11,6 +11,8 @@ \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -include_spip('formulaires/joindre_document'); \ No newline at end of file +include_spip('formulaires/joindre_document'); diff --git a/www/plugins-dist/medias/prive/squelettes/inclure/colonne-documents.html b/www/plugins-dist/medias/prive/squelettes/inclure/colonne-documents.html index d87139a5..99ab9273 100644 --- a/www/plugins-dist/medias/prive/squelettes/inclure/colonne-documents.html +++ b/www/plugins-dist/medias/prive/squelettes/inclure/colonne-documents.html @@ -5,11 +5,13 @@ Distribue sous licence GPL ] +
      - + #MODELE{document_case,id_document=#ID_DOCUMENT,id_objet,objet,ajax}
      +
      diff --git a/www/plugins-dist/medias/prive/style_prive_plugin_medias.html b/www/plugins-dist/medias/prive/style_prive_plugin_medias.html index a17554c1..ba5a227c 100644 --- a/www/plugins-dist/medias/prive/style_prive_plugin_medias.html +++ b/www/plugins-dist/medias/prive/style_prive_plugin_medias.html @@ -30,16 +30,18 @@ .formulaire_editer_document .editer_apercu .tourner {display:block;float:#GET{right};} .formulaire_editer_document .editer_apercu .tourner input.image {padding:5px;border:1px solid #eee;} +.formulaire_joindre_document {margin-top: 0} .formulaire_joindre_document .sourceup {} .formulaire_joindre_document .infos {} .formulaire_joindre_document .deballer_zip ul {font-size:0.9em;} .formulaire_joindre_document .deballer_zip ul ul {font-size:1em;} .formulaire_joindre_document .deballer_zip ol {padding-#GET{left}:0;margin:0;word-wrap:break-word;} +.lat .formulaire_joindre_document { margin-top: [(#ENV{margin-bottom}|strmult{1.5})em]; } .lat .formulaire_joindre_document .deballer_zip ol {max-width: 185px;} .formulaire_joindre_document .deballer_zip .editer_options_upload_zip li {padding:0;} .formulaire_joindre_document .deballer_zip .editer_options_upload_zip .erreur_message {margin-bottom:1em;} -#navigation .formulaire_joindre_document .sourceup, #extra .formulaire_joindre_document .sourceup {font-size:0.9em;} +#navigation .formulaire_joindre_document .sourceup, #extra .formulaire_joindre_document .sourceup {font-size:0.85em;} #navigation .formulaire_joindre_document .deballer_zip .editer_options_upload_zip > label, #extra .formulaire_joindre_document .deballer_zip .editer_options_upload_zip > label {float:none;} #navigation .formulaire_joindre_document .deballer_zip .editer_options_upload_zip .choix input, @@ -52,17 +54,19 @@ .onglets_simple .medias .audio a,.onglets_simple .medias .audio strong {padding-left:27px;background: url(#CHEMIN_IMAGE{media-audio-16.png}) no-repeat 5px center;} .onglets_simple .medias .video a,.onglets_simple .medias .video strong {padding-left:27px;background: url(#CHEMIN_IMAGE{media-video-16.png}) no-repeat 5px center;} -.onglets_simple.second ul.distant li.first,.onglets_simple.second ul.brises li.first,.onglets_simple.second ul.sanstitre li.first {margin-#GET{left}:10px;} +.onglets_simple.second ul.distant li.first,.onglets_simple.second ul.brises li.first,.onglets_simple.second ul.sanstitre li.first {margin-#GET{left}:30px;} .choix-type, .choix-type li {display:inline;list-style:none;margin:0;padding:0;} .choix-type {margin:1em 0;padding:0;} + a.bouton_fermer {display:block;text-align:#GET{right};} -.galerie { float: none; width: 100%; padding:0;} -.galerie .pagination {clear:both;} -.galerie table { width: 100%; border: none; } -.galerie table thead { background: [#(#GET{foncee}|couleur_foncer)];color:#fff; } +.galerie { float: none; width: 100%; padding:0;margin-bottom: #ENV{margin-bottom};} +.galerie .pagination {clear:both;font-size:0.95em;} +.galerie .pagination + .pagination {border-top: 0;margin-top:-1px;} +.galerie table { width: 100%; border: none; margin-bottom: 0} +.galerie table thead,.galerie table thead th { background: #e5e5e5;background: -webkit-gradient(linear, left top, left bottom, from(#f0f0f0), to(#e0e0e0));background-image: -webkit-linear-gradient(top, #f0f0f0, #e0e0e0);background-image: -moz-linear-gradient(top, #f0f0f0, #e0e0e0);background-image: -ms-linear-gradient(top, #f0f0f0, #e0e0e0);background-image: -o-linear-gradient(top, #f0f0f0, #e0e0e0);background-image: linear-gradient(top, #f0f0f0, #e0e0e0);filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#f0f0f0', endColorstr='#e0e0e0');} .galerie table tbody tr:hover { background: [#(#GET{claire}|couleur_eclaircir|couleur_eclaircir)]; } .galerie table td { min-height: 100px; vertical-align: top; } .galerie table th, .galerie table td { padding: 0.5em .3em; border-bottom: 1px solid #ccc; } @@ -123,7 +127,7 @@ p.actions {clear:both;} #documents_joints .item .type {font-size:x-small;} #documents_joints .item .raccourcis {font-size:x-small;padding:2px;} #documents_joints .item .raccourcis span {display:block;font-weight:bold;text-align:left;} -#documents_joints .item div.mode {text-align:right;} +#documents_joints .item div.mode {text-align:right;font-size:x-small;} #documents_joints .item .actions {display:block;text-align:right;font-size:x-small;} .lte7 #documents_joints .item div.mode button,.lte7 #documents_joints .item .actions button {font-size: 11px;} #documents_joints .item .tourner {display:block;float:#GET{right};} @@ -132,46 +136,225 @@ p.actions {clear:both;} #documents_joints .item .actions > *, #documents_joints .item .tourner, -#documents_joints .item .mode {opacity:0.1;-moz-opacity:0.1;} -#documents_joints .item .actions a.editbox {visibility:visible;opacity:1;-moz-opacity:1;font-weight:bold;} +#documents_joints .item .mode {opacity:0.4;} +#documents_joints .item .actions .deplacer-modifier {visibility:visible;opacity:1;font-weight:bold;} #documents_joints .item:hover .actions > *, #documents_joints .item:hover .tourner, #documents_joints .item:hover .mode, #documents_joints .item.hover .actions > *, #documents_joints .item.hover .tourner, -#documents_joints .item.hover .mode {visibility:visible;opacity:1;-moz-opacity:1;} - -#portfolios {} -#portfolios h3 {background-color:#GET{claire};padding:2px 10px;color:#000;margin-bottom:0;} -#portfolios .liste_items {margin-top:0;} -#portfolios .item {clear:both;padding-#GET{left}:160px;padding-#GET{right}:2px;} -#portfolios .item .tourner {display:block;float:#GET{right};} -#portfolios .item .tourner button {border:1px solid #999;padding:0;display:block;float:#GET{left};margin-#GET{left}:4px;} - -#portfolios .item .vignette {margin-#GET{left}:-160px; width: 150px; text-align: center; float:#GET{left};} -.ie6 #portfolios .item .spip_logos {display:inline;position:relative;} -#portfolios .item .titrem {margin:0 0 5px;font-size:1em;} -#portfolios .item .titrem .fichier {font-weight:normal;font-size:0.9em;font-style:italic;} -#portfolios .item .titrem .titre {display:block;font-size:1.1em;} -#portfolios .item .infos {display:block;float:#GET{left};} -#portfolios .item div.mode {display:block;float:#GET{right};clear:#GET{right};margin-top:-1.5em;position:relative;padding:0.2em 0.2em 0;padding-#GET{right}:0;} -#portfolios .item .actions {display:block;float:#GET{right};clear:#GET{right};position:relative;} -#portfolios .item div.mode,#portfolios .item .actions, -#portfolios .item div.mode button,#portfolios .item .actions button {font-size:x-small;} - -#portfolios .item .actions > *, -#portfolios .item .tourner, -#portfolios .item .mode {opacity:0.1;-moz-opacity:0.1;} -#portfolios .item .actions a.editbox {visibility:visible;opacity:1;-moz-opacity:1;font-weight:bold;} -#portfolios .item:hover .actions > *, -#portfolios .item:hover .tourner, -#portfolios .item:hover .mode {visibility:visible;opacity:1;-moz-opacity:1;z-index:1000;background:[#(#GET{claire}|couleur_eclaircir|couleur_eclaircir)];} -#portfolios .item.hover .actions > *, -#portfolios .item.hover .tourner, -#portfolios .item.hover .mode {visibility:visible;opacity:1;-moz-opacity:1;z-index:1000;} - -#portfolios .item .titre > .sanstitre {opacity:0.1;-moz-opacity:0.1;} - -#portfolios .tout_supprimer span {display:block;text-align:#GET{right};} - -.item.vu_oui {background:#f9f9f9;} \ No newline at end of file +#documents_joints .item.hover .mode {visibility:visible;opacity:1;} + +.portfolios {} +.portfolios h3 {background-color:#GET{claire};padding:2px 10px;color:#000;margin-bottom:0;} +.portfolios .liste_items {margin-top:0;} +.portfolios .liste_items .pagination { clear:both; width:100%; } +.portfolios .liste_items > .pagination:first-child { margin-top:0; margin-bottom:.6925em; } +.portfolios .item { clear:both; } +.portfolios .item .presentation { display:-webkit-box; display:-ms-flexbox; display:flex; -webkit-box-orient:horizontal; -webkit-box-direction:normal; -ms-flex-direction:row; flex-direction:row; width:100%; } +.portfolios .item .vignette { width: 150px; min-width:150px; text-align: center; } +.portfolios .item .descriptions { display:-webkit-box; display:-ms-flexbox; display:flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; padding-#GET{right}: 0.6925em; margin-#GET{left}:1em; width: 100%; -webkit-box-flex:1; -ms-flex-positive:1; flex-grow:1; } +.portfolios .item .titrem .vu { float:left; margin-#GET{right}:4px; } +.portfolios .item .titrem {margin:0 0 5px;font-size:1em;} +.portfolios .item .titrem .fichier {font-weight:normal;font-size:0.9em; font-style:italic; display:block; } +.portfolios .item .titrem .titre {display:block;font-size:1.1em;} +.portfolios .item .descriptif { color:#444; margin-bottom:.6925em; -webkit-box-flex: 1; -ms-flex-positive: 1; flex-grow: 1; } +.portfolios .item .infos .permanentes { + display: block; + padding:2px 4px; margin-top:.5em; color:rgba(0,0,0,.8); + border-top:1px solid rgba(100, 100, 100, .1); + border-bottom:1px solid rgba(100, 100, 100, .1); +} +.portfolios .item .infos .lien_details { float:#GET{right}; cursor:pointer; } +.portfolios .item .infos .detaillees { display:none; } +.portfolios .item .infos .detaillees table.compact:first-child tr { border-top:0; } +.portfolios .item table.compact { background-color:rgba(255,255,255,.6); } +.portfolios .item table.compact th, +.portfolios .item table.compact td { padding:.3em .3em; } +.portfolios .item table.compact tr { border-top:1px solid rgba(100, 100, 100, .1); border-bottom:1px solid rgba(100, 100, 100, .1); } +.portfolios .item table.compact tr:nth-child(2n) td, +.portfolios .item table.compact tr:nth-child(2n) th { background:none; } +.portfolios .item .infos .credits .vide { font-style:italic; opacity:.5; } +.portfolios .item div.mode {display:inline-block; clear:#GET{right};} +.portfolios .item .actions { clear:both; overflow:visible; margin-top:.6925em; padding-#GET{right}: .6925em; margin-bottom:-3px; } +.portfolios .item div.mode, +.portfolios .item .actions, +.portfolios .item div.mode button, +.portfolios .item .actions button {text-align: #GET{left}; clear: none;} +.portfolios .item div.mode button, +.portfolios .item .actions button {display: inline;} + +.portfolios .item .actions > *, +.portfolios .item .mode {opacity:0.4;} +.portfolios .item .actions .deplacer-modifier { visibility: visible; opacity: 1; float: #GET{right}; font-weight: bold; } +.portfolios .item:hover .actions > *, +.portfolios .item:hover .mode, +.portfolios .item.hover .actions > *, +.portfolios .item.hover .mode {visibility:visible;opacity:1;z-index:1000;} + +.portfolios .item .titre > .sanstitre, +.portfolios .item .titre > .sanstitre + .fichier {opacity:0.4;} + +.portfolios .actions-liste { clear:both; margin-top:.6925em; display:block; } +.portfolios .actions-liste > * {display:inline; } +.portfolios .tout_supprimer span {display:block; text-align:#GET{right};} + +.item.vu_oui {background:#f9f9f9;} + +.deplacer-document-placeholder { height:130px; } +.deplacer-document { margin-#GET{right}:0.5em; float: #GET{left}; margin-top:1px; cursor:move; } +.document-en-mouvement { cursor:move; } + + +/* Types d'affichages des listes de douments */ +h3 .affichages { + float:#GET{right}; +} + +.affichages .icone { + width:16px; + height:16px; + margin:0; + padding:2px; + display:inline-block; + background:rgba(255, 255, 255, 0.5) center center no-repeat; + border-radius:3px; + cursor:pointer; +} +.affichages .icone + .icone { + margin-#GET{left}:5px; +} +.affichages .icone.grand { + background-image: url([(#CHEMIN_IMAGE{documents-liste-16.png})]); +} +.affichages .icone.liste { + background-image: url([(#CHEMIN_IMAGE{documents-liste-courte-16.png})]); +} +.affichages .icone.cases { + background-image: url([(#CHEMIN_IMAGE{documents-cases-16.png})]); +} +.affichages .icone.on { + background-color:rgba(255, 255, 255, 0.9); +} +.affichages .icone.on:hover, +.affichages .icone:hover { + background-color:rgba(255, 255, 255, 1); +} + +/* Liste courte de documents */ +.portfolios .documents_liste .item { + position:relative; + padding:7px; + display:flex; +} +.portfolios .documents_liste .item .vignette { + width:65px; + min-width: 65px; +} +.portfolios .documents_liste .item .vignette img { + max-height: 36px; + max-width:65px; + height:auto; + width:auto; +} +.portfolios .documents_liste .item .presentation { + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; + -webkit-box-flex:1; + -ms-flex-positive:1; + flex-grow:1; + overflow:hidden; +} +.portfolios .item .descriptions { overflow: hidden; } +.portfolios .documents_liste .item .infos, +.portfolios .documents_liste .item .descriptif, +.portfolios .documents_liste .item .mode, +.portfolios .documents_liste .item .actions > * { + display:none; +} +.portfolios .documents_liste .item .titrem { + margin-bottom:0; +} +.portfolios .documents_liste .item .titrem .fichier, +.portfolios .documents_liste .item .titrem .titre { + max-height:2.4em; + line-height:1.2em; + overflow:hidden; + white-space: nowrap; + display:block; + text-overflow:ellipsis; /* necessite des overflow:hidden; sur les parents */ +} +.portfolios .documents_liste .item .actions { + align-items:center; + text-align:#GET{right}; + padding-#GET{right}:0; + min-width:80px; +} +.portfolios .documents_liste .item .actions .deplacer-modifier { + display:inline-block; + float:none; + margin-#GET{right}:0; +} +.documents_liste .deplacer-document-placeholder { height:40px; } + + +/* Grille en cases des documents. */ +.portfolios .documents_cases .sortable { + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +.portfolios .documents_cases .item { + padding: 2px; + margin: 2px; + border:1px solid #eee; + border-radius:5px; + width:113px; + height:130px; + display:-webkit-box; + display:-ms-flexbox; + display:flex; + -webkit-box-orient:vertical; + -webkit-box-direction:normal; + -ms-flex-direction:column; + flex-direction:column; + -webkit-box-align:center; + -ms-flex-align:center; + align-items:center; +} +.portfolios .documents_cases .item .presentation { -webkit-box-flex:1; -ms-flex-positive:1; flex-grow:1; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; } +.portfolios .documents_cases .item .descriptions, +.portfolios .documents_cases .item .mode, +.portfolios .documents_cases .item .actions > * { + display:none; +} +.portfolios .documents_cases .item .actions .deplacer-modifier { display:block; width:100%;} +.portfolios .documents_cases .item .actions .editbox { float:right; } +.documents_cases .deplacer-document-placeholder { height:130px; width:113px; padding: 2px; margin: 2px;} + +.portfolios .documents_cases .item .vignette { + width:auto; + height:auto; + min-width:auto; +} +.portfolios .documents_cases .item .vignette img { + max-height: 95px; + max-width:110px; + width: auto; + height: auto; +} + +.portfolios .documents_cases .item .actions { + display:block; + width:100%; + margin-bottom:0; + box-sizing:border-box; + padding: 2px 5px 1px 5px; +} +.portfolios .documents_cases .tout_supprimer { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; +} \ No newline at end of file diff --git a/www/plugins-dist/medias/prive/themes/spip/images/deplacer-16.png b/www/plugins-dist/medias/prive/themes/spip/images/deplacer-16.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a5e4b2a7a9610daab3f7e533f567c984a1d745 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPt6SIH}@83w7nLwc^PZ!4!i_>o>Y~*b);9vqkY})j+q;aMu?ceOR9omod1=abhvVUjlIK~5QVeoYIb6Mw<&;$Uw=|cAa literal 0 HcmV?d00001 diff --git a/www/plugins-dist/medias/prive/themes/spip/images/documents-cases-16.png b/www/plugins-dist/medias/prive/themes/spip/images/documents-cases-16.png new file mode 100644 index 0000000000000000000000000000000000000000..80d989da31b02f8e3996a747bbac8690b596fa81 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHiEr|np9aBp31z#jFD9u= zN=WQ;x@p71!;{8xL^9$6&yTJp6C?`R)V%)ozGKQ$G2<6}G=*JBcEr|npN5GtTVKrbGc+)$ zQCu*yy|M8i&#^?u$$t(VIPhVrNV;+0t9&t?bIA&axUX=#sAaj|&Ct1^cJs0X1H+XP V4#k3|I4z)g44$rjF6*2UngFl~II#c# literal 0 HcmV?d00001 diff --git a/www/plugins-dist/medias/prive/themes/spip/images/documents-liste-courte-16.png b/www/plugins-dist/medias/prive/themes/spip/images/documents-liste-courte-16.png new file mode 100644 index 0000000000000000000000000000000000000000..330ff51e44f6e0aaf87904be68cb842c48831312 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHi -

      Index des vignettes de SPIP

      - - +

      Index des vignettes de SPIP

      +
      Format png & gif
      + + $file
      $file"; - if ($i%10) echo $r; else echo "\n", $r; + if ($i % 10) { + echo $r; + } else { + echo "\n", $r; + } $i++; - } } + } ?> - -
      Format png & gif
      + + \ No newline at end of file diff --git a/www/plugins-dist/medias/puce_statut/document.php b/www/plugins-dist/medias/puce_statut/document.php index ca29e05a..b9475ffe 100644 --- a/www/plugins-dist/medias/puce_statut/document.php +++ b/www/plugins-dist/medias/puce_statut/document.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** @@ -24,6 +26,6 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * @param string $ajax * @return string */ -function puce_statut_document_dist($id, $statut, $id_rubrique, $type, $ajax='') { - return ""; +function puce_statut_document_dist($id, $statut, $id_rubrique, $type, $ajax = '') { + return ""; } diff --git a/www/plugins-dist/medias/urls/generer_url_document.php b/www/plugins-dist/medias/urls/generer_url_document.php index 0c9c81dd..c79a32b7 100644 --- a/www/plugins-dist/medias/urls/generer_url_document.php +++ b/www/plugins-dist/medias/urls/generer_url_document.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** @@ -26,7 +28,8 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * * https://code.spip.net/@generer_url_ecrire_document */ -function urls_generer_url_document_dist($id, $args='', $ancre='', $public=null, $connect='') { +function urls_generer_url_document_dist($id, $args = '', $ancre = '', $public = null, $connect = '') { include_spip('inc/documents'); + return generer_url_document_dist($id, $args, $ancre); -} \ No newline at end of file +} diff --git a/www/plugins-dist/medias/urls/generer_url_ecrire_document.php b/www/plugins-dist/medias/urls/generer_url_ecrire_document.php index 07f4cd82..32f08074 100644 --- a/www/plugins-dist/medias/urls/generer_url_ecrire_document.php +++ b/www/plugins-dist/medias/urls/generer_url_ecrire_document.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** @@ -26,7 +28,8 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * * https://code.spip.net/@generer_url_ecrire_document */ -function urls_generer_url_ecrire_document_dist($id, $args='', $ancre='', $public=null, $connect='') { +function urls_generer_url_ecrire_document_dist($id, $args = '', $ancre = '', $public = null, $connect = '') { include_spip('inc/documents'); + return generer_url_document_dist($id); -} \ No newline at end of file +} diff --git a/www/plugins-dist/mots/action/editer_groupe_mots.php b/www/plugins-dist/mots/action/editer_groupe_mots.php index 95c03b6d..d49e09a0 100644 --- a/www/plugins-dist/mots/action/editer_groupe_mots.php +++ b/www/plugins-dist/mots/action/editer_groupe_mots.php @@ -15,7 +15,9 @@ * * @package SPIP\Mots\Actions */ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/filtres'); @@ -26,16 +28,15 @@ include_spip('inc/filtres'); * * Si aucun identifiant n'est donné, on crée alors un nouveau groupe de * mots clés. - * + * * @param null|int $id_groupe * Identifiant du groupe de mot-clé. En absence utilise l'argument * de l'action sécurisée. * @return array * Liste (identifiant du groupe de mot clé, Texte d'erreur éventuel) -**/ -function action_editer_groupe_mots_dist($id_groupe=null) -{ - if (is_null($id_groupe)){ + **/ +function action_editer_groupe_mots_dist($id_groupe = null) { + if (is_null($id_groupe)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $id_groupe = $securiser_action(); } @@ -44,10 +45,11 @@ function action_editer_groupe_mots_dist($id_groupe=null) $id_groupe = groupe_mots_inserer(); } - if ($id_groupe>0) + if ($id_groupe > 0) { $err = groupe_mots_modifier($id_groupe); + } - return array($id_groupe,$err); + return array($id_groupe, $err); } @@ -56,25 +58,42 @@ function action_editer_groupe_mots_dist($id_groupe=null) * * @pipeline_appel pre_insertion * @pipeline_appel post_insertion - * - * @param string $table - * Tables sur lesquels des mots de ce groupe pourront être liés + * + * @param int $id_parent + * inutilise, pour consistance de l'API + * @param null|array $set * @return int|bool * Identifiant du nouveau groupe de mots clés. */ -function groupe_mots_inserer($table='') { +function groupe_mots_inserer($id_parent = null, $set = null) { + + // support de la signature derogatoire pour compat + // groupe_mots_inserer($table='') + if (is_string($id_parent) and strlen($id_parent)) { + if (is_null($set)) { + $set = array(); + } + $set['tables_liees'] = $id_parent; + } + + $champs = array( 'titre' => '', 'unseul' => 'non', 'obligatoire' => 'non', - 'tables_liees' => $table, - 'minirezo' => 'oui', - 'comite' => 'non', + 'tables_liees' => '', + 'minirezo' => 'oui', + 'comite' => 'non', 'forum' => 'non' ); + if ($set) { + $champs = array_merge($champs, $set); + } + // Envoyer aux plugins - $champs = pipeline('pre_insertion', + $champs = pipeline( + 'pre_insertion', array( 'args' => array( 'table' => 'spip_groupes_mots', @@ -83,9 +102,10 @@ function groupe_mots_inserer($table='') { ) ); - $id_groupe = sql_insertq("spip_groupes_mots", $champs) ; + $id_groupe = sql_insertq('spip_groupes_mots', $champs); - pipeline('post_insertion', + pipeline( + 'post_insertion', array( 'args' => array( 'table' => 'spip_groupes_mots', @@ -101,7 +121,7 @@ function groupe_mots_inserer($table='') { /** * Modifier un groupe de mot - * + * * @param int $id_groupe * Identifiant du grope de mots clés à modifier * @param array|null $set @@ -113,16 +133,22 @@ function groupe_mots_inserer($table='') { * Null si aucun champ à modifier, * Chaîne contenant un texte d'erreur sinon. */ -function groupe_mots_modifier($id_groupe, $set=null) { +function groupe_mots_modifier($id_groupe, $set = null) { $err = ''; include_spip('inc/modifier'); $c = collecter_requests( // white list array( - 'titre', 'descriptif', 'texte', 'tables_liees', - 'obligatoire', 'unseul', - 'comite', 'forum', 'minirezo', + 'titre', + 'descriptif', + 'texte', + 'tables_liees', + 'obligatoire', + 'unseul', + 'comite', + 'forum', + 'minirezo', ), // black list array(), @@ -131,20 +157,30 @@ function groupe_mots_modifier($id_groupe, $set=null) { ); // normaliser les champ oui/non foreach (array( - 'obligatoire', 'unseul', - 'comite', 'forum', 'minirezo' - ) as $champ) - if (isset($c[$champ])) - $c[$champ] = ($c[$champ]=='oui'?'oui':'non'); + 'obligatoire', + 'unseul', + 'comite', + 'forum', + 'minirezo' + ) as $champ) { + if (isset($c[$champ])) { + $c[$champ] = ($c[$champ] == 'oui' ? 'oui' : 'non'); + } + } - if (isset($c['tables_liees']) AND is_array($c['tables_liees'])) - $c['tables_liees'] = implode(',',array_diff($c['tables_liees'],array(''))); + if (isset($c['tables_liees']) and is_array($c['tables_liees'])) { + $c['tables_liees'] = implode(',', array_diff($c['tables_liees'], array(''))); + } - $err = objet_modifier_champs('groupe_mot', $id_groupe, + $err = objet_modifier_champs( + 'groupe_mot', + $id_groupe, array( + 'data' => $set, 'nonvide' => array('titre' => _T('info_sans_titre')) ), - $c); + $c + ); return $err; } @@ -157,7 +193,7 @@ function groupe_mots_modifier($id_groupe, $set=null) { * * @deprecated Utiliser groupe_mots_modifier() * @see groupe_mots_modifier() - * + * * @param int $id_groupe * Identifiant du grope de mots clés à modifier * @param array|null $c @@ -169,8 +205,8 @@ function groupe_mots_modifier($id_groupe, $set=null) { * Null si aucun champ à modifier, * Chaîne contenant un texte d'erreur sinon. */ -function revision_groupe_mot($id_groupe, $c=false) { - return groupe_mots_modifier($id_groupe,$c); +function revision_groupe_mot($id_groupe, $c = false) { + return groupe_mots_modifier($id_groupe, $c); } @@ -179,14 +215,15 @@ function revision_groupe_mot($id_groupe, $c=false) { * * @deprecated Utiliser groupe_mots_inserer() ou objet_inserer() * @see groupe_mots_inserer() - * + * * @param string $table * Tables sur lesquels des mots de ce groupe pourront être liés + * @param null|array $set * @return int|bool * Identifiant du nouveau groupe de mots clés. */ -function groupemots_inserer($table='') { - return groupe_mots_inserer($table); +function groupemots_inserer($table = '', $set = null) { + return groupe_mots_inserer($table, $set); } /** @@ -194,7 +231,7 @@ function groupemots_inserer($table='') { * * @deprecated Utiliser groupe_mots_modifier() ou objet_modifier() * @see groupe_mots_modifier() - * + * * @param int $id_groupe * Identifiant du grope de mots clés à modifier * @param array|null $set @@ -206,7 +243,6 @@ function groupemots_inserer($table='') { * Null si aucun champ à modifier, * Chaîne contenant un texte d'erreur sinon. */ -function groupemots_modifier($id_groupe, $set=null) { +function groupemots_modifier($id_groupe, $set = null) { return groupe_mots_modifier($id_groupe, $set); } -?> diff --git a/www/plugins-dist/mots/action/editer_mot.php b/www/plugins-dist/mots/action/editer_mot.php index 5e988555..01d5e9e6 100644 --- a/www/plugins-dist/mots/action/editer_mot.php +++ b/www/plugins-dist/mots/action/editer_mot.php @@ -10,50 +10,80 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Gestion de l'action editer_mot + * + * @package SPIP\Mots\Actions + */ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/filtres'); -// Editer (modification) d'un mot-cle -// https://code.spip.net/@action_editer_mot_dist -function action_editer_mot_dist($arg=null) -{ - if (is_null($arg)){ +/** + * Action d'édition d'un mot clé dans la base de données dont + * l'identifiant est donné en paramètre de cette fonction ou + * en argument de l'action sécurisée + * + * Si aucun identifiant n'est donné, on crée alors un nouveau mot clé. + * + * @param null|int $arg + * Identifiant du mot-clé. En absence utilise l'argument + * de l'action sécurisée. + * @return array + * Liste (identifiant du mot clé, Texte d'erreur éventuel) + **/ +function action_editer_mot_dist($arg = null) { + if (is_null($arg)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } $id_mot = intval($arg); $id_groupe = intval(_request('id_groupe')); - if (!$id_mot AND $id_groupe) { + if (!$id_mot and $id_groupe) { $id_mot = mot_inserer($id_groupe); } // Enregistre l'envoi dans la BD - if ($id_mot > 0) $err = mot_modifier($id_mot); - - return array($id_mot,$err); + if ($id_mot > 0) { + $err = mot_modifier($id_mot); + } + + return array($id_mot, $err); } /** * Insertion d'un mot dans un groupe + * + * @pipeline_appel pre_insertion + * @pipeline_appel post_insertion + * * @param int $id_groupe - * @return int + * Identifiant du groupe de mot + * @param array|null $set + * @return int|bool + * Identifiant du nouveau mot clé, false si erreur. */ -function mot_inserer($id_groupe) { +function mot_inserer($id_groupe, $set = null) { $champs = array(); - $row = sql_fetsel("titre", "spip_groupes_mots", "id_groupe=".intval($id_groupe)); + $row = sql_fetsel('titre', 'spip_groupes_mots', 'id_groupe=' . intval($id_groupe)); if ($row) { $champs['id_groupe'] = $id_groupe; $champs['type'] = $row['titre']; - } - else + } else { return false; + } + if ($set) { + $champs = array_merge($champs, $set); + } // Envoyer aux plugins - $champs = pipeline('pre_insertion', + $champs = pipeline( + 'pre_insertion', array( 'args' => array( 'table' => 'spip_mots', @@ -62,9 +92,10 @@ function mot_inserer($id_groupe) { ) ); - $id_mot = sql_insertq("spip_mots", $champs); + $id_mot = sql_insertq('spip_mots', $champs); - pipeline('post_insertion', + pipeline( + 'post_insertion', array( 'args' => array( 'table' => 'spip_mots', @@ -79,46 +110,70 @@ function mot_inserer($id_groupe) { /** * Modifier un mot + * * @param int $id_mot - * @param array $set - * @return string + * Identifiant du mot clé à modifier + * @param array|null $set + * Couples (colonne => valeur) de données à modifier. + * En leur absence, on cherche les données dans les champs éditables + * qui ont été postés (via _request()) + * @return string|null + * - Chaîne vide si aucune erreur, + * - Null si aucun champ n'est à modifier, + * - Chaîne contenant un texte d'erreur sinon. */ -function mot_modifier($id_mot, $set=null) { +function mot_modifier($id_mot, $set = null) { include_spip('inc/modifier'); $c = collecter_requests( // white list array( - 'titre', 'descriptif', 'texte', 'id_groupe' + 'titre', + 'descriptif', + 'texte', + 'id_groupe' ), // black list array('id_groupe'), // donnees eventuellement fournies $set ); - - if ($err = objet_modifier_champs('mot', $id_mot, + + if ($err = objet_modifier_champs( + 'mot', + $id_mot, array( + 'data' => $set, 'nonvide' => array('titre' => _T('info_sans_titre')) ), - $c)) + $c + )) { return $err; + } - $c = collecter_requests(array('id_groupe', 'type'),array(),$set); + $c = collecter_requests(array('id_groupe', 'type'), array(), $set); $err = mot_instituer($id_mot, $c); + return $err; } /** - * Modifier le groupe parent d'un mot - * @param $id_mot - * @param $c - * @return void + * Instituer un mot clé : modifier son groupe parent + * + * @pipeline_appel pre_insertion + * @pipeline_appel post_insertion + * + * @param int $id_mot + * Identifiant du mot clé + * @param array $c + * Couples (colonne => valeur) des données à instituer + * @return null|string + * Null si aucun champ à modifier, chaîne vide sinon. */ -function mot_instituer($id_mot, $c){ +function mot_instituer($id_mot, $c) { $champs = array(); // regler le groupe - if (isset($c['id_groupe']) OR isset($c['type'])) { - $row = sql_fetsel("titre", "spip_groupes_mots", "id_groupe=".intval($c['id_groupe'])); + if (isset($c['id_groupe']) or isset($c['type'])) { + $row = sql_fetsel('titre', 'spip_groupes_mots', 'id_groupe=' . intval($c['id_groupe'])); if ($row) { $champs['id_groupe'] = $c['id_groupe']; $champs['type'] = $row['titre']; @@ -126,20 +181,23 @@ function mot_instituer($id_mot, $c){ } // Envoyer aux plugins - $champs = pipeline('pre_edition', + $champs = pipeline( + 'pre_edition', array( 'args' => array( 'table' => 'spip_mots', 'id_objet' => $id_mot, - 'action'=>'instituer', + 'action' => 'instituer', ), 'data' => $champs ) ); - if (!$champs) return; + if (!$champs) { + return; + } - sql_updateq('spip_mots', $champs, "id_mot=".intval($id_mot)); + sql_updateq('spip_mots', $champs, 'id_mot=' . intval($id_mot)); // // Post-modifications @@ -150,12 +208,13 @@ function mot_instituer($id_mot, $c){ suivre_invalideur("id='mot/$id_mot'"); // Pipeline - pipeline('post_edition', + pipeline( + 'post_edition', array( 'args' => array( 'table' => 'spip_mots', 'id_objet' => $id_mot, - 'action'=>'instituer', + 'action' => 'instituer', ), 'data' => $champs ) @@ -173,114 +232,193 @@ function mot_instituer($id_mot, $c){ /** * Supprimer un mot + * + * @pipeline_appel trig_supprimer_objets_lies + * * @param int $id_mot + * Identifiant du mot clé à supprimer * @return void */ function mot_supprimer($id_mot) { - sql_delete("spip_mots", "id_mot=".intval($id_mot)); + sql_delete('spip_mots', 'id_mot=' . intval($id_mot)); mot_dissocier($id_mot, '*'); - pipeline('trig_supprimer_objets_lies', + pipeline( + 'trig_supprimer_objets_lies', array( - array('type'=>'mot','id'=>$id_mot) + array('type' => 'mot', 'id' => $id_mot) ) ); } - /** - * Associer un mot a des objets listes sous forme - * array($objet=>$id_objets,...) - * $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type + * Associer un mot à des objets listés sous forme + * `array($objet=>$id_objets,...)` * - * on peut passer optionnellement une qualification du (des) lien(s) qui sera - * alors appliquee dans la foulee. - * En cas de lot de liens, c'est la meme qualification qui est appliquee a tous + * $id_objets peut lui-même être un scalaire ou un tableau pour une + * liste d'objets du même type + * + * On peut passer optionnellement une qualification du (des) lien(s) qui sera + * alors appliquée dans la foulée. En cas de lot de liens, c'est la + * même qualification qui est appliquée à tous. + * + * @example + * ``` + * mot_associer(3, array('auteur'=>2)); + * // Ne fonctionnera pas ici car pas de champ 'vu' sur spip_mots_liens : + * mot_associer(3, array('auteur'=>2), array('vu'=>'oui)); + * ``` * - * Exemples: - * mot_associer(3, array('auteur'=>2)); - * mot_associer(3, array('auteur'=>2), array('vu'=>'oui)); // ne fonctionnera pas ici car pas de champ 'vu' sur spip_mots_liens - * * @param int $id_mot + * Identifiant du mot à faire associer * @param array $objets + * Description des associations à faire * @param array $qualif - * @return string + * Couples (colonne => valeur) de qualifications à faire appliquer + * @return int|bool + * Nombre de modifications, false si erreur */ -function mot_associer($id_mot,$objets, $qualif = null){ +function mot_associer($id_mot, $objets, $qualif = null) { include_spip('action/editer_liens'); // si il s'agit d'un groupe avec 'unseul', alors supprimer d'abord les autres // mots de ce groupe associe a ces objets - $id_groupe = sql_getfetsel('id_groupe','spip_mots','id_mot='.intval($id_mot)); + $id_groupe = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot=' . intval($id_mot)); if (un_seul_mot_dans_groupe($id_groupe)) { - $mots_groupe = sql_allfetsel("id_mot", "spip_mots", "id_groupe=".intval($id_groupe)); - $mots_groupe = array_map('reset',$mots_groupe); - objet_dissocier(array('mot'=>$mots_groupe), $objets); + $mots_groupe = sql_allfetsel('id_mot', 'spip_mots', 'id_groupe=' . intval($id_groupe)); + $mots_groupe = array_map('reset', $mots_groupe); + objet_dissocier(array('mot' => $mots_groupe), $objets); } - return objet_associer(array('mot'=>$id_mot), $objets, $qualif); + return objet_associer(array('mot' => $id_mot), $objets, $qualif); } - /** - * Dossocier un mot des objets listes sous forme - * array($objet=>$id_objets,...) - * $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type + * Dissocier un mot des objets listés sous forme + * `array($objet=>$id_objets,...)` + * + * $id_objets peut lui-même être un scalaire ou un tableau pour une + * liste d'objets du même type * * un * pour $id_mot,$objet,$id_objet permet de traiter par lot * * @param int $id_mot + * Identifiant du mot à faire dissocier * @param array $objets - * @return string + * Description des dissociations à faire + * @return int|bool + * Nombre de modifications, false si erreur */ -function mot_dissocier($id_mot,$objets){ +function mot_dissocier($id_mot, $objets) { include_spip('action/editer_liens'); - return objet_dissocier(array('mot'=>$id_mot), $objets); + + return objet_dissocier(array('mot' => $id_mot), $objets); } /** - * Qualifier le lien d'un mot avec les objets listes - * array($objet=>$id_objets,...) - * $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type - * exemple : - * $c = array('vu'=>'oui'); - * un * pour $id_auteur,$objet,$id_objet permet de traiter par lot + * Qualifier le lien d'un mot avec les objets listés + * `array($objet=>$id_objets,...)` + * + * $id_objets peut lui-même être un scalaire ou un tableau pour une + * liste d'objets du même type + * + * Une * pour $id_auteur,$objet,$id_objet permet de traiter par lot + * + * @example + * ``` + * $c = array('vu'=>'oui'); + * ``` * * @param int $id_mot + * Identifiant du mot à faire associer * @param array $objets + * Description des associations à faire * @param array $qualif + * Couples (colonne => valeur) de qualifications à faire appliquer + * @return int|bool + * Nombre de modifications, false si erreur */ -function mot_qualifier($id_mot,$objets,$qualif){ +function mot_qualifier($id_mot, $objets, $qualif) { include_spip('action/editer_liens'); - return objet_qualifier(array('mot'=>$id_mot), $objets, $qualif); -} + return objet_qualifier(array('mot' => $id_mot), $objets, $qualif); +} /** - * Renvoyer true si le groupe de mot ne doit etre associe qu'une fois aux objet - * (maximum un seul mot de ce groupe associe a chaque objet) + * Teste si un groupe ne doit avoir qu'un seul mot clé associé + * + * Renvoyer TRUE si le groupe de mot ne doit être associé qu'une fois aux objet + * (maximum un seul mot de ce groupe associé à chaque objet) * * @param int $id_groupe + * Identifiant du groupe de mot clé * @return bool + * true si un seul mot doit être lié avec ce groupe, false sinon. */ -function un_seul_mot_dans_groupe($id_groupe) -{ +function un_seul_mot_dans_groupe($id_groupe) { return sql_countsel('spip_groupes_mots', "id_groupe=$id_groupe AND unseul='oui'"); } +// Fonctions Dépréciées +// -------------------- +/** + * Insertion d'un mot dans un groupe + * + * @deprecated Utiliser mot_inserer() + * @see mot_inserer() + * + * @param int $id_groupe + * Identifiant du groupe de mot + * @return int|bool + * Identifiant du nouveau mot clé, false si erreur. + */ function insert_mot($id_groupe) { return mot_inserer($id_groupe); } -function mots_set($id_mot, $set=null) { + +/** + * Modifier un mot + * + * @deprecated Utiliser mot_modifier() + * @see mot_modifier() + * + * @param int $id_mot + * Identifiant du mot clé à modifier + * @param array|null $set + * Couples (colonne => valeur) de données à modifier. + * En leur absence, on cherche les données dans les champs éditables + * qui ont été postés + * @return string|null + * - Chaîne vide si aucune erreur, + * - Null si aucun champ à modifier, + * - Chaîne contenant un texte d'erreur sinon. + */ +function mots_set($id_mot, $set = null) { return mot_modifier($id_mot, $set); } -function revision_mot($id_mot, $c=false) { + +/** + * Créer une révision d'un mot + * + * @deprecated Utiliser mot_modifier() + * @see mot_modifier() + * + * @param int $id_mot + * Identifiant du mot clé à modifier + * @param array|null $c + * Couples (colonne => valeur) de données à modifier. + * En leur absence, on cherche les données dans les champs éditables + * qui ont été postés + * @return string|null + * - Chaîne vide si aucune erreur, + * - Null si aucun champ à modifier, + * - Chaîne contenant un texte d'erreur sinon. + */ +function revision_mot($id_mot, $c = false) { return mot_modifier($id_mot, $c); } - -?> diff --git a/www/plugins-dist/mots/action/supprimer_groupe_mots.php b/www/plugins-dist/mots/action/supprimer_groupe_mots.php index b4036d60..c05fbea4 100644 --- a/www/plugins-dist/mots/action/supprimer_groupe_mots.php +++ b/www/plugins-dist/mots/action/supprimer_groupe_mots.php @@ -10,24 +10,40 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Gestion de l'action supprimer_groupe_mots + * + * @package SPIP\Mots\Actions + */ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/filtres'); - -function action_supprimer_groupe_mots_dist($id_groupe=null){ - - if (is_null($id_groupe)){ +/** + * Action supprimant un groupe de mots clés dans la base de données + * dont l'identifiant du groupe est donné en paramètre de cette fonction + * ou en argument de l'action sécurisée + * + * Supprime le groupe uniquement si on en a l'autorisation. Cela implique + * qu'il n'y ait pas de mots clés dans le groupe. + * + * @param null|int $id_groupe + * Identifiant du groupe à supprimer. En absence utilise l'argument + * de l'action sécurisée. + */ +function action_supprimer_groupe_mots_dist($id_groupe = null) { + + if (is_null($id_groupe)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $id_groupe = $securiser_action(); } - if (autoriser('supprimer','groupemots',$id_groupe)){ - sql_delete("spip_groupes_mots", "id_groupe=" .intval($id_groupe)); + include_spip('inc/autoriser'); + if (autoriser('supprimer', 'groupemots', $id_groupe)) { + sql_delete('spip_groupes_mots', 'id_groupe=' . intval($id_groupe)); + } else { + spip_log("action_supprimer_groupe_mots_dist $id_groupe interdit", _LOG_INFO_IMPORTANTE); } - else - spip_log("action_supprimer_groupe_mots_dist $id_groupe interdit",_LOG_INFO_IMPORTANTE); } - - -?> diff --git a/www/plugins-dist/mots/action/supprimer_mot.php b/www/plugins-dist/mots/action/supprimer_mot.php index 5cb3a975..ce2568bc 100644 --- a/www/plugins-dist/mots/action/supprimer_mot.php +++ b/www/plugins-dist/mots/action/supprimer_mot.php @@ -10,8 +10,19 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Gestion de l'action supprimer_mot + * + * @package SPIP\Mots\Actions + */ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} +/** + * Action supprimant un mot clé dans la base de données dont l'identifiant + * est en argument de l'action sécurisée + */ function action_supprimer_mot_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); @@ -20,5 +31,3 @@ function action_supprimer_mot_dist() { include_spip('action/editer_mot'); mot_supprimer($id_mot); } - -?> diff --git a/www/plugins-dist/mots/base/mots.php b/www/plugins-dist/mots/base/mots.php index bd38c00a..4ea47731 100644 --- a/www/plugins-dist/mots/base/mots.php +++ b/www/plugins-dist/mots/base/mots.php @@ -10,18 +10,31 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Déclarations relatives à la base de données + * + * @package SPIP\Mots\Pipelines + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** - * Interfaces des tables mots et groupes de mots pour le compilateur + * Déclarer les interfaces des tables mots et groupes de mots pour le compilateur * + * @pipeline declarer_tables_interfaces * @param array $interfaces + * Déclarations d'interface pour le compilateur * @return array + * Déclarations d'interface pour le compilateur */ -function mots_declarer_tables_interfaces($interfaces){ +function mots_declarer_tables_interfaces($interfaces) { - $interfaces['table_des_tables']['mots']='mots'; - $interfaces['table_des_tables']['groupes_mots']='groupes_mots'; + $interfaces['table_des_tables']['mots'] = 'mots'; + $interfaces['table_des_tables']['groupes_mots'] = 'groupes_mots'; + + $interfaces['exceptions_des_tables']['mots']['titre_mot'] = 'titre'; + $interfaces['table_des_traitements']['TYPE']['mots'] = _TRAITEMENT_TYPO_SANS_NUMERO; $interfaces['exceptions_des_jointures']['titre_mot'] = array('spip_mots', 'titre'); $interfaces['exceptions_des_jointures']['type_mot'] = array('spip_mots', 'type'); @@ -30,29 +43,34 @@ function mots_declarer_tables_interfaces($interfaces){ $interfaces['exceptions_des_jointures']['type_mot_syndic'] = array('spip_mots', 'type'); $interfaces['exceptions_des_jointures']['spip_articles']['id_groupe'] = array('spip_mots', 'id_groupe'); $interfaces['exceptions_des_jointures']['spip_rubriques']['id_groupe'] = array('spip_mots', 'id_groupe'); + $interfaces['exceptions_des_jointures']['spip_syndic']['id_groupe'] = array('spip_mots', 'id_groupe'); return $interfaces; } /** - * Table auxilaire spip_mots_xx + * Déclarer les tables auxiliaires des mots * + * @pipeline declarer_tables_auxiliaires * @param array $tables_auxiliaires + * Description des tables * @return array + * Description complétée des tables */ -function mots_declarer_tables_auxiliaires($tables_auxiliaires){ +function mots_declarer_tables_auxiliaires($tables_auxiliaires) { $spip_mots_liens = array( - "id_mot" => "bigint(21) DEFAULT '0' NOT NULL", - "id_objet" => "bigint(21) DEFAULT '0' NOT NULL", - "objet" => "VARCHAR (25) DEFAULT '' NOT NULL"); + 'id_mot' => "bigint(21) DEFAULT '0' NOT NULL", + 'id_objet' => "bigint(21) DEFAULT '0' NOT NULL", + 'objet' => "VARCHAR (25) DEFAULT '' NOT NULL" + ); $spip_mots_liens_key = array( - "PRIMARY KEY" => "id_mot,id_objet,objet", - "KEY id_mot" => "id_mot", - "KEY id_objet" => "id_objet", - "KEY objet" => "objet", + 'PRIMARY KEY' => 'id_mot,id_objet,objet', + 'KEY id_mot' => 'id_mot', + 'KEY id_objet' => 'id_objet', + 'KEY objet' => 'objet', ); $tables_auxiliaires['spip_mots_liens'] = @@ -63,12 +81,15 @@ function mots_declarer_tables_auxiliaires($tables_auxiliaires){ /** - * Declarer les objets mots et les jointures mots pour tous les objets + * Déclarer les objets éditoriaux des mots et groupes de mots * + * @pipeline declarer_tables_objets_sql * @param array $tables + * Description des tables * @return array + * Description complétée des tables */ -function mots_declarer_tables_objets_sql($tables){ +function mots_declarer_tables_objets_sql($tables) { $tables['spip_mots'] = array( 'type' => 'mot', 'type_surnoms' => array('mot-cle'), // pour les icones... @@ -80,86 +101,109 @@ function mots_declarer_tables_objets_sql($tables){ 'texte_creer' => 'titre_ajouter_un_mot', 'texte_logo_objet' => 'mots:logo_mot_cle', 'texte_creer_associer' => 'mots:creer_et_associer_un_mot', - 'info_aucun_objet'=> 'mots:info_aucun_mot_cle', + 'info_aucun_objet' => 'mots:info_aucun_mot_cle', 'info_1_objet' => 'info_1_mot_cle', 'info_nb_objets' => 'info_nb_mots_cles', 'titre' => "titre, '' AS lang", 'date' => 'date', 'principale' => 'oui', - 'field'=> array( - "id_mot" => "bigint(21) NOT NULL", - "titre" => "text DEFAULT '' NOT NULL", - "descriptif" => "text DEFAULT '' NOT NULL", - "texte" => "longtext DEFAULT '' NOT NULL", - "id_groupe" => "bigint(21) DEFAULT 0 NOT NULL", - "type" => "text DEFAULT '' NOT NULL", - "maj" => "TIMESTAMP" + 'field' => array( + 'id_mot' => 'bigint(21) NOT NULL', + 'titre' => "text DEFAULT '' NOT NULL", + 'descriptif' => "text DEFAULT '' NOT NULL", + 'texte' => "longtext DEFAULT '' NOT NULL", + 'id_groupe' => 'bigint(21) DEFAULT 0 NOT NULL', + 'type' => "text DEFAULT '' NOT NULL", + 'maj' => 'TIMESTAMP' ), 'key' => array( - "PRIMARY KEY" => "id_mot", - "KEY id_groupe" => "id_groupe" + 'PRIMARY KEY' => 'id_mot', + 'KEY id_groupe' => 'id_groupe' ), + 'parent' => array('type' => 'groupe_mot', 'champ' => 'id_groupe'), 'rechercher_champs' => array( - 'titre' => 8, 'texte' => 1, 'descriptif' => 5 + 'titre' => 8, + 'texte' => 1, + 'descriptif' => 5 ), - 'tables_jointures' => array( - #'mots_liens' // declare generiquement ci dessous + 'tables_jointures' => array(#'mots_liens' // declare generiquement ci dessous ), - 'champs_versionnes' => array('titre', 'descriptif', 'texte','id_groupe'), + 'champs_versionnes' => array('titre', 'descriptif', 'texte', 'id_groupe'), ); $tables['spip_groupes_mots'] = array( - 'table_objet_surnoms' => array('groupemot','groupe_mots' /*hum*/,'groupe_mot' /* hum*/,'groupe' /*hum (EXPOSE)*/), - 'type'=>'groupe_mots', - 'type_surnoms' => array('groupes_mot','groupemot','groupe_mot'), + 'table_objet_surnoms' => array( + 'groupemot', + 'groupe_mots' + /*hum*/, + 'groupe_mot' + /* hum*/, + 'groupe' + /*hum (EXPOSE)*/ + ), + 'type' => 'groupe_mots', + 'type_surnoms' => array('groupes_mot', 'groupemot', 'groupe_mot'), 'texte_retour' => 'icone_retour', 'texte_objets' => 'mots:titre_groupes_mots', 'texte_objet' => 'mots:titre_groupe_mots', 'texte_modifier' => 'mots:icone_modif_groupe_mots', 'texte_creer' => 'mots:icone_creation_groupe_mots', 'texte_logo_objet' => 'mots:logo_groupe', - 'info_aucun_objet'=> 'mots:info_aucun_groupemots', + 'info_aucun_objet' => 'mots:info_aucun_groupemots', 'info_1_objet' => 'mots:info_1_groupemots', 'info_nb_objets' => 'mots:info_nb_groupemots', 'titre' => "titre, '' AS lang", 'date' => 'date', 'principale' => 'oui', 'page' => '', // pas de page publique pour les groupes - 'field'=> array( - "id_groupe" => "bigint(21) NOT NULL", - "titre" => "text DEFAULT '' NOT NULL", - "descriptif" => "text DEFAULT '' NOT NULL", - "texte" => "longtext DEFAULT '' NOT NULL", - "unseul" => "varchar(3) DEFAULT '' NOT NULL", - "obligatoire" => "varchar(3) DEFAULT '' NOT NULL", - "tables_liees" => "text DEFAULT '' NOT NULL", - "minirezo" => "varchar(3) DEFAULT '' NOT NULL", - "comite" => "varchar(3) DEFAULT '' NOT NULL", - "forum" => "varchar(3) DEFAULT '' NOT NULL", - "maj" => "TIMESTAMP" + 'field' => array( + 'id_groupe' => 'bigint(21) NOT NULL', + 'titre' => "text DEFAULT '' NOT NULL", + 'descriptif' => "text DEFAULT '' NOT NULL", + 'texte' => "longtext DEFAULT '' NOT NULL", + 'unseul' => "varchar(3) DEFAULT '' NOT NULL", + 'obligatoire' => "varchar(3) DEFAULT '' NOT NULL", + 'tables_liees' => "text DEFAULT '' NOT NULL", + 'minirezo' => "varchar(3) DEFAULT '' NOT NULL", + 'comite' => "varchar(3) DEFAULT '' NOT NULL", + 'forum' => "varchar(3) DEFAULT '' NOT NULL", + 'maj' => 'TIMESTAMP' ), 'key' => array( - "PRIMARY KEY" => "id_groupe" + 'PRIMARY KEY' => 'id_groupe' ), 'rechercher_champs' => array( - 'titre' => 8, 'texte' => 1, 'descriptif' => 5 + 'titre' => 8, + 'texte' => 1, + 'descriptif' => 5 ), 'tables_jointures' => array( 'mots' ), - 'champs_versionnes' => array('titre', 'descriptif', 'texte','un_seul','obligatoire','tables_liees','minirezo','forum','comite'), + 'champs_versionnes' => array( + 'titre', + 'descriptif', + 'texte', + 'un_seul', + 'obligatoire', + 'tables_liees', + 'minirezo', + 'forum', + 'comite' + ), ); // jointures sur les mots pour tous les objets - $tables[]['tables_jointures'][]= 'mots_liens'; - $tables[]['tables_jointures'][]= 'mots'; + $tables[]['tables_jointures'][] = 'mots_liens'; + $tables[]['tables_jointures'][] = 'mots'; // cas particulier des auteurs et mots : declarer explicitement mots_liens comme jointure privilegiee // cf https://core.spip.net/issues/2329 - $tables['spip_auteurs']['tables_jointures'][]= 'mots_liens'; - $tables['spip_auteurs']['tables_jointures'][]= 'mots'; - $tables['spip_mots']['tables_jointures'][]= 'mots_liens'; - $tables['spip_mots']['tables_jointures'][]= 'mots'; + $tables['spip_auteurs']['tables_jointures'][] = 'mots_liens'; + $tables['spip_auteurs']['tables_jointures'][] = 'mots'; + $tables['spip_mots']['tables_jointures'][] = 'mots_liens'; + $tables['spip_mots']['tables_jointures'][] = 'mots'; + // recherche jointe sur les mots pour tous les objets $tables[]['rechercher_jointures']['mot'] = array('titre' => 3); @@ -168,4 +212,3 @@ function mots_declarer_tables_objets_sql($tables){ return $tables; } -?> diff --git a/www/plugins-dist/mots/formulaires/administrer_mot.html b/www/plugins-dist/mots/formulaires/administrer_mot.html new file mode 100644 index 00000000..3defa801 --- /dev/null +++ b/www/plugins-dist/mots/formulaires/administrer_mot.html @@ -0,0 +1,64 @@ +
      +

      <:adminmots:titre_formulaire_administrer_mot:>

      + + [

      (#ENV*{message_ok})

      ] + [

      (#ENV*{message_erreur})

      ] +
      + #ACTION_FORMULAIRE + #SET{fl,adminmots} + [ + ] +
      +
        + #SET{name,associer_objets_mot}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} +
      • + [ + (#GET{erreurs}) + ] + +
      • +
      +

      +
      +
      +
        + #SET{name,dissocier_objets_mot}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} +
      • + [ + (#GET{erreurs}) + ] + +
      • +
      +

      +
      +
      +
        + #SET{name,fusionner_mot}#SET{obli,''}#SET{defaut,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} +
      • + [ + (#GET{erreurs}) + ] + +
      • +
      +

      +
      +
      + +
      \ No newline at end of file diff --git a/www/plugins-dist/mots/formulaires/administrer_mot.php b/www/plugins-dist/mots/formulaires/administrer_mot.php new file mode 100644 index 00000000..b313258b --- /dev/null +++ b/www/plugins-dist/mots/formulaires/administrer_mot.php @@ -0,0 +1,243 @@ + '', + 'dissocier_objets_mot' => '', + 'fusionner_mot' => '', + 'associer_objets_mot_id' => '', + 'dissocier_objets_mot_id' => '', + 'fusionner_mot_id' => '', + 'revert_action' => '', + ); + + return $valeurs; +} + +function afficher_options_mots($id_selected) { + static $options; + if (is_null($options)){ + // d'abord les count en 1 coup + $counts = sql_allfetsel('id_mot,count(id_objet) as n','spip_mots_liens','','id_mot','id_mot'); + $counts = array_combine(array_map('reset',$counts), array_map('end',$counts)); + + // puis les groupes + $groupes = sql_allfetsel('*', 'spip_groupes_mots', '', '', '0+ titre, titre'); + foreach($groupes as $groupe) { + $options['groupeopen-'.$groupe['id_groupe']] = ''; + $res = sql_select('id_mot, titre', 'spip_mots', 'id_groupe='.intval($groupe['id_groupe']), '', '0+ titre, titre'); + while($row = sql_fetch($res)) { + $id_mot = $row['id_mot']; + if (isset($counts[$id_mot]) and $n = $counts[$id_mot]) { + $options[$id_mot] = '"; + } + } + $options['groupeclose-'.$groupe['id_groupe']] = ''; + } + + } + if ($id_selected and isset($options[$id_selected])) { + $options[$id_selected] = inserer_attribut($options[$id_selected], 'selected', 'selected'); + } + $s = implode("\n",$options); + if ($id_selected and isset($options[$id_selected])) { + $options[$id_selected] = vider_attribut($options[$id_selected], 'selected'); + } + return $s; +} + + +function formulaires_administrer_mot_verifier_dist($id_mot){ + + $erreurs = array(); + + $check = ""; + if (_request('associer')){ + $check = 'associer_objets_mot'; + } + elseif (_request('dissocier')){ + $check = 'dissocier_objets_mot'; + } + elseif (_request('fusionner')){ + $check = 'fusionner_mot'; + } + + if (!$check AND (!_request('revert') OR !_request('revert_action'))){ + $erreurs['message_erreur'] = _T('adminmots:erreur_admin_mot_action_inconnue'); + } + elseif($check) { + $id = admot_recupere_id_mot($check); + if (!$id){ + $erreurs[$check] = _T('adminmots:erreur_selection_id'); + } + elseif($id == $id_mot){ + $erreurs[$check] = _T('adminmots:erreur_mot_cle_deja'); + } + elseif($check=='fusionner_mot' AND !_request('confirm_fusionner_mot')){ + $counts = sql_allfetsel("objet,count(id_objet) as N","spip_mots_liens","id_mot=".intval($id_mot),"objet"); + $detail = array(); + foreach($counts as $count){ + $detail [] = objet_afficher_nb($count['N'],$count['objet']); + } + $detail = implode(", ",$detail); + if (!isset($erreurs['message_erreur'])) { + $erreurs['message_erreur'] = ''; + } + $erreurs[$check] = + _T('adminmots:label_confirm_fusion',array('id_mot'=>$id_mot,'id_mot_new'=>$id)) + . " $detail" . "
      \n" + . " " + . ""; + } + } + + return $erreurs; +} + +function admot_recupere_id_mot($name){ + if (!$id_mot = intval(_request($name . '_id'))) + $id_mot = intval(_request($name)); + + return $id_mot; +} + +function admot_associer_objets_mot($id_mot, $objet, $ids){ + if (count($ids)){ + $couples = array(); + foreach($ids as $id){ + $couples[] = array( + 'id_mot' => $id_mot, + 'id_objet' => $id, + 'objet' => $objet + ); + } + return sql_insertq_multi("spip_mots_liens",$couples); + } + return false; +} + +function admot_dissocier_objets_mot($id_mot, $objet, $ids){ + if (count($ids)){ + return sql_delete("spip_mots_liens","id_mot=".intval($id_mot)." AND objet=".sql_quote($objet)." AND ".sql_in('id_objet',$ids)); + } + return false; +} + + +function formulaires_administrer_mot_traiter_dist($id_mot){ + + refuser_traiter_formulaire_ajax(); + if (_request('revert')){ + $action = _request('revert_action'); + $action = explode("/",$action); + $quoi = array_shift($action); + foreach($action as $a) { + list($objet, $ids) = explode(':', $a); + $ids = explode(',',$ids); + if ($objet and $ids) { + if ($quoi=="add"){ + admot_associer_objets_mot($id_mot, $objet, $ids); + } + if ($quoi=="del"){ + admot_dissocier_objets_mot($id_mot, $objet, $ids); + } + } + } + $res['message_ok'] = _T('adminmots:result_cancel_ok'); + set_request('revert_action',''); + } + else { + $check = ''; + if (_request('associer')){ + $check = 'associer_objets_mot'; + } + elseif (_request('dissocier')){ + $check = 'dissocier_objets_mot'; + } + elseif (_request('fusionner')){ + $check = 'fusionner_mot'; + } + $id = admot_recupere_id_mot($check); + + $revert = ""; + $res = array(); + // associer + if ($check=="associer_objets_mot"){ + $revert = array(); + $message = array(); + $objets = sql_allfetsel("distinct objet","spip_mots_liens","id_mot=".intval($id),'','objet'); + $objets = array_map('reset',$objets); + foreach($objets as $objet) { + $all = sql_allfetsel("id_objet","spip_mots_liens","id_mot=".intval($id)." AND objet=".sql_quote($objet)); + $all = array_map('reset',$all); + $deja = sql_allfetsel("id_objet","spip_mots_liens","id_mot=".intval($id_mot)." AND objet=".sql_quote($objet)." AND ".sql_in('id_objet',$all)); + $deja = array_map('reset',$deja); + $add = array_diff($all,$deja); + if (count($add)){ + $revert[] = "$objet:".implode(",",$add); + admot_associer_objets_mot($id_mot, $objet, $add); + $message[] = objet_afficher_nb(count($add), $objet); + } + } + if (count($message)){ + $revert = "del/".implode("/",$revert); + $message = implode(', ', $message); + $res['message_ok'] = $message . _T('adminmots:result_associer_nb'); + } + else { + $res['message_ok'] = _T('adminmots:result_associer_ras'); + } + } + // dissocier + if ($check=="dissocier_objets_mot"){ + $revert = array(); + $message = array(); + $objets = sql_allfetsel("distinct objet","spip_mots_liens","id_mot=".intval($id),'','objet'); + $objets = array_map('reset',$objets); + foreach($objets as $objet){ + $all = sql_allfetsel("id_objet", "spip_mots_liens", "id_mot=" . intval($id) . " AND objet=" . sql_quote($objet)); + $all = array_map('reset', $all); + $has = sql_allfetsel("id_objet", "spip_mots_liens", "id_mot=" . intval($id_mot) . " AND objet=" . sql_quote($objet) . " AND " . sql_in('id_objet', $all)); + $has = array_map('reset', $has); + if (count($has)){ + $revert[] = "$objet:".implode(",",$has); + admot_dissocier_objets_mot($id_mot, $objet, $has); + $message[] = objet_afficher_nb(count($has), $objet); + } + } + if (count($message)){ + $revert = "add/".implode("/",$revert); + $message = implode(', ', $message); + $res['message_ok'] = $message . _T('adminmots:result_dissocier_nb'); + } + else { + $res['message_ok'] = _T('adminmots:result_dissocier_ras'); + } + } + + // fusionner + if ($check=="fusionner_mot"){ + $all = sql_allfetsel("id_objet,objet,id_mot","spip_mots_liens","id_mot=".intval($id_mot)); + $mot = sql_fetsel("*","spip_mots","id_mot=".intval($id_mot)); + $dump = var_export($mot,true) . "\n\n". var_export($all,true); + ecrire_fichier(_DIR_LOG."fusion_mot_{$id_mot}_vers_{$id}_".date('Y-m-d-His').".dump",$dump); + foreach($all as $a){ + $a['id_mot'] = $id; + sql_insertq('spip_mots_liens',$a); + } + sql_delete("spip_mots_liens","id_mot=".$id_mot); + $link = "".objet_info('mot','texte_objet')." #$id"; + $res['message_ok'] = _T('adminmots:result_fusionner_ok',array('mot'=>$link)); + } + + if ($revert) + set_request('revert_action',$revert); + } + set_request('administrer','oui'); + + return $res; +} diff --git a/www/plugins-dist/mots/formulaires/configurer_mots.html b/www/plugins-dist/mots/formulaires/configurer_mots.html index e6e3fc26..025ade9a 100644 --- a/www/plugins-dist/mots/formulaires/configurer_mots.html +++ b/www/plugins-dist/mots/formulaires/configurer_mots.html @@ -7,25 +7,29 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
        + #ACTION_FORMULAIRE +
        #SET{name,articles_mots}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ]
        + onclick="$(this).blur();" + onchange="if ($(this).prop('checked')) $('.editer_articles_mots').siblings('.editer').show('fast');" + [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] + />
        + onclick="$(this).blur();" + onchange="if ($(this).prop('checked')) $('.editer_articles_mots').siblings('.editer').hide('fast');" + [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] + />
        -
      • +
        #SET{name,config_precise_groupes}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ]

        <:mots:texte_config_groupe_mots_cles:>

        @@ -37,9 +41,9 @@
        -
      • +
      #SET{name,mots_cles_forums}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
    • +
      [ (#GET{erreurs}) ]

      <:mots:texte_mots_cles_dans_forum:>

      @@ -51,8 +55,8 @@
      -
    • - + + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

       

      diff --git a/www/plugins-dist/mots/formulaires/configurer_mots.php b/www/plugins-dist/mots/formulaires/configurer_mots.php index 0f20db54..528d87ef 100644 --- a/www/plugins-dist/mots/formulaires/configurer_mots.php +++ b/www/plugins-dist/mots/formulaires/configurer_mots.php @@ -10,32 +10,54 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Gestion du formulaire de configuration des groupes de mots + * + * @package SPIP\Mots\Formulaires + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + include_spip('inc/presentation'); -function formulaires_configurer_mots_charger_dist(){ - foreach(array( - "articles_mots", - "config_precise_groupes", - "mots_cles_forums", - ) as $m) +/** + * Chargement du formulaire de configuration des mots + * + * @return array + * Environnement du formulaire + **/ +function formulaires_configurer_mots_charger_dist() { + foreach (array( + 'articles_mots', + 'config_precise_groupes', + 'mots_cles_forums', + ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; + } return $valeurs; } - -function formulaires_configurer_mots_traiter_dist(){ - $res = array('editable'=>true); - foreach(array( - "articles_mots", - "config_precise_groupes", - "mots_cles_forums", - ) as $m) - if (!is_null($v=_request($m))) - ecrire_meta($m, $v=='oui'?'oui':'non'); +/** + * Traitement du formulaire de configuration des mots + * + * @return array + * Retours du traitement + **/ +function formulaires_configurer_mots_traiter_dist() { + $res = array('editable' => true); + foreach (array( + 'articles_mots', + 'config_precise_groupes', + 'mots_cles_forums', + ) as $m) { + if (!is_null($v = _request($m))) { + ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); + } + } $res['message_ok'] = _T('config_info_enregistree'); + return $res; } - diff --git a/www/plugins-dist/mots/formulaires/editer_groupe_mot.html b/www/plugins-dist/mots/formulaires/editer_groupe_mot.html index 9a4d3f25..9d34aaf9 100644 --- a/www/plugins-dist/mots/formulaires/editer_groupe_mot.html +++ b/www/plugins-dist/mots/formulaires/editer_groupe_mot.html @@ -5,40 +5,40 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE -
        -
      • +
        +
        [ (#ENV**{erreurs}|table_valeur{titre}) ] -
      • -
      • +
      +
      [ (#ENV**{erreurs}|table_valeur{descriptif}) ] - -
    • +
    • +
      [ (#ENV**{erreurs}|table_valeur{texte}) ][(#ENV**{_texte_trop_long,''}) ] - -
    • +
    • +
      -
        -
      • +
        +
        -
      • +
      [(#ENV{config}|table_valeur{config_precise_groupes}|=={oui}|ou{#ENV{unseul}|=={oui}}|ou{#ENV{obligatoire}|=={oui}}|oui) -
    • +
      -
    • + ] -
    • +
      @@ -48,10 +48,10 @@ ] ] -
    • - - - + + + + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

      diff --git a/www/plugins-dist/mots/formulaires/editer_groupe_mot.php b/www/plugins-dist/mots/formulaires/editer_groupe_mot.php index 5b1c12bd..634a2175 100644 --- a/www/plugins-dist/mots/formulaires/editer_groupe_mot.php +++ b/www/plugins-dist/mots/formulaires/editer_groupe_mot.php @@ -10,15 +10,44 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Gestion du formulaire de d'édition d'un groupe de mots + * + * @package SPIP\Mots\Formulaires + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/actions'); include_spip('inc/editer'); -function formulaires_editer_groupe_mot_charger_dist($id_groupe='new',$retour='', $config_fonc='groupes_mots_edit_config', $row=array(), $hidden=''){ - $valeurs = formulaires_editer_objet_charger('groupe_mots',$id_groupe,0,'',$retour,$config_fonc,$row,$hidden); - - $valeurs['tables_liees'] = explode(',',$valeurs['tables_liees']); +/** + * Chargement du formulaire d'édition d'un groupe de mots + * + * @param int|string $id_groupe + * Identifiant du groupe de mots. 'new' pour un nouveau groupe. + * @param string $retour + * URL de redirection après le traitement + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL du groupe de mot, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Environnement du formulaire + **/ +function formulaires_editer_groupe_mot_charger_dist( + $id_groupe = 'new', + $retour = '', + $config_fonc = 'groupes_mots_edit_config', + $row = array(), + $hidden = '' +) { + $valeurs = formulaires_editer_objet_charger('groupe_mots', $id_groupe, 0, '', $retour, $config_fonc, $row, $hidden); + + $valeurs['tables_liees'] = explode(',', $valeurs['tables_liees']); // par defaut a la creation de groupe if (!intval($id_groupe)) { @@ -31,45 +60,117 @@ function formulaires_editer_groupe_mot_charger_dist($id_groupe='new',$retour='', } /** - * Identifier le formulaire en faisant abstraction des parametres qui - * ne representent pas l'objet edite + * Identifier le formulaire en faisant abstraction des paramètres qui + * ne representent pas l'objet édité + * + * @param int|string $id_groupe + * Identifiant du groupe de mots. 'new' pour un nouveau groupe. + * @param string $retour + * URL de redirection après le traitement + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL du groupe de mot, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return string + * Hash du formulaire */ -function formulaires_editer_groupe_mot_identifier_dist($id_groupe='new',$retour='', $config_fonc='groupes_mots_edit_config', $row=array(), $hidden=''){ +function formulaires_editer_groupe_mot_identifier_dist( + $id_groupe = 'new', + $retour = '', + $config_fonc = 'groupes_mots_edit_config', + $row = array(), + $hidden = '' +) { return serialize(array(intval($id_groupe))); } -// Choix par defaut des options de presentation -// https://code.spip.net/@articles_edit_config -function groupes_mots_edit_config($row) -{ +/** + * Choix par défaut des options de présentation + * + * @param array $row + * Valeurs de la ligne SQL du groupe de mot, si connu + * return array + * Configuration pour le formulaire + */ +function groupes_mots_edit_config($row) { global $spip_ecran, $spip_lang; $config = $GLOBALS['meta']; - $config['lignes'] = ($spip_ecran == "large")? 8 : 5; + $config['lignes'] = ($spip_ecran == 'large') ? 8 : 5; $config['langue'] = $spip_lang; + return $config; } -function formulaires_editer_groupe_mot_verifier_dist($id_groupe='new',$retour='', $config_fonc='groupes_mots_edit_config', $row=array(), $hidden=''){ +/** + * Vérification du formulaire d'édition d'un groupe de mots + * + * @param int|string $id_groupe + * Identifiant du groupe de mots. 'new' pour un nouveau groupe. + * @param string $retour + * URL de redirection après le traitement + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL du groupe de mot, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Tableau des erreurs + **/ +function formulaires_editer_groupe_mot_verifier_dist( + $id_groupe = 'new', + $retour = '', + $config_fonc = 'groupes_mots_edit_config', + $row = array(), + $hidden = '' +) { + + $erreurs = formulaires_editer_objet_verifier('groupe_mots', 0, array('titre')); - $erreurs = formulaires_editer_objet_verifier('groupe_mots',0,array('titre')); return $erreurs; } -// https://code.spip.net/@inc_editer_groupe_mot_dist -function formulaires_editer_groupe_mot_traiter_dist($id_groupe='new',$retour='', $config_fonc='groupes_mots_edit_config', $row=array(), $hidden=''){ - set_request('redirect',''); +/** + * Traitement du formulaire d'édition d'un groupe de mots + * + * @param int|string $id_groupe + * Identifiant du groupe de mots. 'new' pour un nouveau groupe. + * @param string $retour + * URL de redirection après le traitement + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL du groupe de mot, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Retour des traitements + **/ +function formulaires_editer_groupe_mot_traiter_dist( + $id_groupe = 'new', + $retour = '', + $config_fonc = 'groupes_mots_edit_config', + $row = array(), + $hidden = '' +) { + set_request('redirect', ''); // cas des checkbox : injecter la valeur non si rien de coche foreach (array( - 'obligatoire', 'unseul', - 'comite', 'forum', 'minirezo' - ) as $champ) - if (!_request($champ)) - set_request($champ,'non'); + 'obligatoire', + 'unseul', + 'comite', + 'forum', + 'minirezo' + ) as $champ) { + if (!_request($champ)) { + set_request($champ, 'non'); + } + } + + $res = formulaires_editer_objet_traiter('groupe_mots', $id_groupe, 0, 0, $retour, $config_fonc, $row, $hidden); - $res = formulaires_editer_objet_traiter('groupe_mots',$id_groupe,0,0,$retour,$config_fonc,$row,$hidden); return $res; } - - -?> diff --git a/www/plugins-dist/mots/formulaires/editer_mot.html b/www/plugins-dist/mots/formulaires/editer_mot.html index 31ec6bb5..95d8db97 100644 --- a/www/plugins-dist/mots/formulaires/editer_mot.html +++ b/www/plugins-dist/mots/formulaires/editer_mot.html @@ -6,31 +6,31 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE -
        -
      • +
        +
        [ (#ENV**{erreurs}|table_valeur{titre}) ] -
      • -
      • +
      +
      [ (#ENV**{erreurs}|table_valeur{id_groupe}) ][(#INCLURE{fond=formulaires/selecteur_groupe_mot, id_groupe=#ENV{id_groupe}, table=#ENV{table,''}, name=id_groupe, id=id_groupe})] - -
    • +
    • +
      [ (#ENV**{erreurs}|table_valeur{descriptif}) ] - -
    • +
    • +
      [ (#ENV**{erreurs}|table_valeur{texte}) ][(#ENV**{_texte_trop_long,''}) ] - - +
      + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

      diff --git a/www/plugins-dist/mots/formulaires/editer_mot.php b/www/plugins-dist/mots/formulaires/editer_mot.php index ff0496c4..8ca8c499 100644 --- a/www/plugins-dist/mots/formulaires/editer_mot.php +++ b/www/plugins-dist/mots/formulaires/editer_mot.php @@ -10,122 +10,272 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Gestion du formulaire d'édition d'un mot + * + * @package SPIP\Mots\Formulaires + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/actions'); include_spip('inc/editer'); -// https://code.spip.net/@inc_editer_mot_dist -function formulaires_editer_mot_charger_dist($id_mot='new', $id_groupe=0, $retour='', $associer_objet='', $dummy1='', $dummy2='', $config_fonc='mots_edit_config', $row=array(), $hidden=''){ - $valeurs = formulaires_editer_objet_charger('mot',$id_mot,$id_groupe,'',$retour,$config_fonc,$row,$hidden); - if ($valeurs['id_parent'] && !$valeurs['id_groupe']) +/** + * Chargement du formulaire d'édition d'un mot + * + * @see formulaires_editer_objet_charger() + * + * @param int|string $id_mot + * Identifiant du mot. 'new' pour un nouveau mot. + * @param int $id_groupe + * Identifiant du groupe parent (si connu) + * @param string $retour + * URL de redirection après le traitement + * @param string $associer_objet + * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet, + * tel que 'article|3' + * @param string $dummy1 ? + * @param string $dummy2 ? + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL du mot, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Environnement du formulaire + **/ +function formulaires_editer_mot_charger_dist( + $id_mot = 'new', + $id_groupe = 0, + $retour = '', + $associer_objet = '', + $dummy1 = '', + $dummy2 = '', + $config_fonc = 'mots_edit_config', + $row = array(), + $hidden = '' +) { + $valeurs = formulaires_editer_objet_charger('mot', $id_mot, $id_groupe, '', $retour, $config_fonc, $row, $hidden); + if ($valeurs['id_parent'] && !$valeurs['id_groupe']) { $valeurs['id_groupe'] = $valeurs['id_parent']; - - if ($associer_objet){ - if (intval($associer_objet)){ + } + + if ($associer_objet) { + if (intval($associer_objet)) { // compat avec l'appel de la forme ajouter_id_article $objet = 'article'; $id_objet = intval($associer_objet); - } - else { - list($objet,$id_objet) = explode('|',$associer_objet); + } else { + list($objet, $id_objet) = explode('|', $associer_objet); } } - $valeurs['table'] = ($associer_objet?table_objet($objet):''); + $valeurs['table'] = ($associer_objet ? table_objet($objet) : ''); // Si nouveau et titre dans l'url : fixer le titre if ($id_mot == 'oui' - AND strlen($titre = _request('titre'))) + and strlen($titre = _request('titre')) + ) { $valeurs['titre'] = $titre; + } return $valeurs; } + /** - * Identifier le formulaire en faisant abstraction des parametres qui - * ne representent pas l'objet edite - */ -function formulaires_editer_mot_identifier_dist($id_mot='new', $id_groupe=0, $retour='', $associer_objet='', $dummy1='', $dummy2='', $config_fonc='mots_edit_config', $row=array(), $hidden=''){ - return serialize(array(intval($id_mot),$associer_objet)); + * Identifier le formulaire en faisant abstraction des paramètres qui + * ne representent pas l'objet edité + * + * @param int|string $id_mot + * Identifiant du mot. 'new' pour un nouveau mot. + * @param int $id_groupe + * Identifiant du groupe parent (si connu) + * @param string $retour + * URL de redirection après le traitement + * @param string $associer_objet + * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet, + * tel que 'article|3' + * @param string $dummy1 ? + * @param string $dummy2 ? + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL du mot, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return string + * Hash du formulaire + **/ +function formulaires_editer_mot_identifier_dist( + $id_mot = 'new', + $id_groupe = 0, + $retour = '', + $associer_objet = '', + $dummy1 = '', + $dummy2 = '', + $config_fonc = 'mots_edit_config', + $row = array(), + $hidden = '' +) { + return serialize(array(intval($id_mot), $associer_objet)); } -// Choix par defaut des options de presentation -// https://code.spip.net/@articles_edit_config -function mots_edit_config($row) -{ +/** + * Choix par défaut des options de présentation + * + * @param array $row + * Valeurs de la ligne SQL d'un mot, si connu + * return array + * Configuration pour le formulaire + */ +function mots_edit_config($row) { global $spip_ecran, $spip_lang; $config = $GLOBALS['meta']; - $config['lignes'] = ($spip_ecran == "large")? 8 : 5; + $config['lignes'] = ($spip_ecran == 'large') ? 8 : 5; $config['langue'] = $spip_lang; $config['restreint'] = false; + return $config; } -function formulaires_editer_mot_verifier_dist($id_mot='new', $id_groupe=0, $retour='', $associer_objet='', $dummy1='', $dummy2='', $config_fonc='mots_edit_config', $row=array(), $hidden=''){ +/** + * Vérification du formulaire d'édition d'un mot + * + * @see formulaires_editer_objet_verifier() + * + * @param int|string $id_mot + * Identifiant du mot. 'new' pour un nouveau mot. + * @param int $id_groupe + * Identifiant du groupe parent (si connu) + * @param string $retour + * URL de redirection après le traitement + * @param string $associer_objet + * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet, + * tel que 'article|3' + * @param string $dummy1 ? + * @param string $dummy2 ? + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL du mot, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Tableau des erreurs + **/ +function formulaires_editer_mot_verifier_dist( + $id_mot = 'new', + $id_groupe = 0, + $retour = '', + $associer_objet = '', + $dummy1 = '', + $dummy2 = '', + $config_fonc = 'mots_edit_config', + $row = array(), + $hidden = '' +) { - $erreurs = formulaires_editer_objet_verifier('mot',$id_mot,array('titre')); + $erreurs = formulaires_editer_objet_verifier('mot', $id_mot, array('titre')); // verifier qu'un mot du meme groupe n'existe pas avec le meme titre // la comparaison accepte un numero absent ou different // sinon avertir // on ne fait la verification que si c'est une creation de mot ou un retitrage if (!intval($id_mot) - OR supprimer_numero(_request('titre'))!==supprimer_numero(sql_getfetsel('titre','spip_mots','id_mot='.intval($id_mot)))){ - if (!count($erreurs) AND !_request('confirm_titre_mot')){ - if (sql_countsel("spip_mots", - "titre REGEXP ".sql_quote("^([0-9]+[.] )?".preg_quote(supprimer_numero(_request('titre')))."$") - ." AND id_mot<>".intval($id_mot))) + or supprimer_numero(_request('titre')) + !== supprimer_numero(sql_getfetsel('titre', 'spip_mots', 'id_mot=' . intval($id_mot))) + ) { + if (!count($erreurs) and !_request('confirm_titre_mot')) { + if (sql_countsel( + 'spip_mots', + 'titre REGEXP ' . sql_quote('^([0-9]+[.] )?' . preg_quote(supprimer_numero(_request('titre'))) . '$') + . ' AND id_mot<>' . intval($id_mot) + )) { $erreurs['titre'] = - _T('mots:avis_doublon_mot_cle') - ." "; + _T('mots:avis_doublon_mot_cle') + . " "; + } } } + return $erreurs; } -// https://code.spip.net/@inc_editer_mot_dist -function formulaires_editer_mot_traiter_dist($id_mot='new', $id_groupe=0, $retour='', $associer_objet='', $dummy1='', $dummy2='', $config_fonc='mots_edit_config', $row=array(), $hidden=''){ +/** + * Traitements du formulaire d'édition d'un mot + * + * @param int|string $id_mot + * Identifiant du mot. 'new' pour un nouveau mot. + * @param int $id_groupe + * Identifiant du groupe parent (si connu) + * @param string $retour + * URL de redirection après le traitement + * @param string $associer_objet + * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet, + * tel que 'article|3' + * @param string $dummy1 ? + * @param string $dummy2 ? + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL du mot, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Retour des traitements + **/ +function formulaires_editer_mot_traiter_dist( + $id_mot = 'new', + $id_groupe = 0, + $retour = '', + $associer_objet = '', + $dummy1 = '', + $dummy2 = '', + $config_fonc = 'mots_edit_config', + $row = array(), + $hidden = '' +) { $res = array(); - set_request('redirect',''); - $action_editer = charger_fonction("editer_mot",'action'); - list($id_mot,$err) = $action_editer(); - if ($err){ + set_request('redirect', ''); + $action_editer = charger_fonction('editer_mot', 'action'); + list($id_mot, $err) = $action_editer(); + if ($err) { $res['message_erreur'] = $err; - } - else { - $res['message_ok'] = ""; - if ($retour){ - if (strncmp($retour,'javascript:',11)==0){ - $res['message_ok'] .= ''; + } else { + $res['message_ok'] = ''; + $res['id_mot'] = $id_mot; + if ($retour) { + if (strncmp($retour, 'javascript:', 11) == 0) { + $res['message_ok'] .= ''; $res['editable'] = true; - } - else { + } else { $res['redirect'] = $retour; - if (strlen(parametre_url($retour,'id_mot'))) - $res['redirect'] = parametre_url($res['redirect'],'id_mot',$id_mot); + if (strlen(parametre_url($retour, 'id_mot'))) { + $res['redirect'] = parametre_url($res['redirect'], 'id_mot', $id_mot); + } } } - if ($associer_objet){ - if (intval($associer_objet)){ + if ($associer_objet) { + if (intval($associer_objet)) { // compat avec l'appel de la forme ajouter_id_article $objet = 'article'; $id_objet = intval($associer_objet); + } else { + list($objet, $id_objet) = explode('|', $associer_objet); } - else { - list($objet,$id_objet) = explode('|',$associer_objet); - } - if ($objet AND $id_objet AND autoriser('modifier',$objet,$id_objet)){ + if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) { include_spip('action/editer_mot'); - mot_associer($id_mot, array($objet=>$id_objet)); - if (isset($res['redirect'])) - $res['redirect'] = parametre_url ($res['redirect'], "id_lien_ajoute", $id_mot, '&'); + mot_associer($id_mot, array($objet => $id_objet)); + if (isset($res['redirect'])) { + $res['redirect'] = parametre_url($res['redirect'], 'id_lien_ajoute', $id_mot, '&'); + } } } - } + return $res; } - - -?> diff --git a/www/plugins-dist/mots/inc/mots.php b/www/plugins-dist/mots/inc/mots.php index 06028cc6..2bc85d06 100644 --- a/www/plugins-dist/mots/inc/mots.php +++ b/www/plugins-dist/mots/inc/mots.php @@ -10,80 +10,119 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Déclaration de filtres pour les squelettes + * + * @package SPIP\Mots\Filtres + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/presentation'); include_spip('inc/actions'); include_spip('base/abstract_sql'); -function filtre_objets_associes_mot_dist($id_mot,$id_groupe) { +/** + * Compte le nombre d'objets associés pour chaque type d'objet, liés + * à un mot clé donné. + * + * @pipeline_appel afficher_nombre_objets_associes_a + * + * @param int $id_mot + * Identifiant du mot clé + * @param int $id_groupe + * Identifiant du groupe parent + * @return string[] + * Tableau de textes indiquant le nombre d'éléments tel que '3 articles' + **/ +function filtre_objets_associes_mot_dist($id_mot, $id_groupe) { static $occurrences = array(); // calculer tous les liens du groupe d'un coup - if (!isset ($occurrences[$id_groupe])) + if (!isset($occurrences[$id_groupe])) { $occurrences[$id_groupe] = calculer_utilisations_mots($id_groupe); + } $associes = array(); $tables = lister_tables_objets_sql(); - foreach ($tables as $table_objet_sql=>$infos) { + foreach ($tables as $table_objet_sql => $infos) { $nb = (isset($occurrences[$id_groupe][$table_objet_sql][$id_mot]) ? $occurrences[$id_groupe][$table_objet_sql][$id_mot] : 0); - if ($nb) - $associes[] = objet_afficher_nb($nb,$infos['type']); + if ($nb) { + $associes[] = objet_afficher_nb($nb, $infos['type']); + } } - $associes = pipeline('afficher_nombre_objets_associes_a',array('args'=>array('objet'=>'mot','id_objet'=>$id_mot),'data'=>$associes)); + $associes = pipeline( + 'afficher_nombre_objets_associes_a', + array('args' => array('objet' => 'mot', 'id_objet' => $id_mot), + 'data' => $associes) + ); + return $associes; } /** - * Calculer les nombres d'elements (articles, etc.) lies a chaque mot + * Calculer les nombres d'éléments (articles, etc.) liés à chaque mot + * d'un groupe de mots * * @param int $id_groupe + * Identifiant du groupe de mots * @return array + * Couples (tables de liaison => mots). + * Mots est un tableau de couples (id_mot => nombre d'utilisation) */ -function calculer_utilisations_mots($id_groupe) -{ +function calculer_utilisations_mots($id_groupe) { $retour = array(); - $objets = sql_allfetsel('DISTINCT objet', array('spip_mots_liens AS L', 'spip_mots AS M'), array('L.id_mot=M.id_mot', 'M.id_groupe='.intval($id_groupe))); + $objets = sql_allfetsel( + 'DISTINCT objet', + array('spip_mots_liens AS L', 'spip_mots AS M'), + array('L.id_mot=M.id_mot', 'M.id_groupe=' . intval($id_groupe)) + ); - foreach($objets as $o) { - $objet=$o['objet']; + foreach ($objets as $o) { + $objet = $o['objet']; $_id_objet = id_table_objet($objet); $table_objet_sql = table_objet_sql($objet); $infos = lister_tables_objets_sql($table_objet_sql); - if (isset($infos['field']) AND $infos['field']){ + if (isset($infos['field']) and $infos['field']) { // uniquement certains statut d'objet, // et uniquement si la table dispose du champ statut. - $statuts = ""; - if (isset($infos['field']['statut']) OR isset($infos['statut'][0]['champ'])) { + $statuts = ''; + if (isset($infos['field']['statut']) or isset($infos['statut'][0]['champ'])) { // on s'approche au mieux de la declaration de l'objet. // il faudrait ameliorer ce point. $c_statut = isset($infos['statut'][0]['champ']) ? $infos['statut'][0]['champ'] : 'statut'; // bricoler les statuts d'apres la declaration de l'objet (champ previsu a defaut de mieux) - if (array_key_exists('previsu', $infos['statut'][0]) AND strlen($infos['statut'][0]['previsu'])>1) { + if (array_key_exists('previsu', $infos['statut'][0]) and strlen($infos['statut'][0]['previsu']) > 1) { $str_statuts = $infos['statut'][0]['previsu']; - if ($GLOBALS['connect_statut'] !="0minirezo") - $str_statuts = str_replace('prepa','',$str_statuts); - $not = (substr($str_statuts, 0, 1) == '!'? 'NOT' : ''); - $str_statuts = str_replace('!','',$str_statuts); + if ($GLOBALS['connect_statut'] != '0minirezo') { + $str_statuts = str_replace('prepa', '', $str_statuts); + } + $not = (substr($str_statuts, 0, 1) == '!' ? 'NOT' : ''); + $str_statuts = str_replace('!', '', $str_statuts); $Tstatuts = array_filter(explode(',', $str_statuts)); - $statuts = " AND " . sql_in("O.$c_statut", $Tstatuts, $not); + $statuts = ' AND ' . sql_in("O.$c_statut", $Tstatuts, $not); + } // objets sans champ previsu ou avec un previsu == '!' (par ex les rubriques) + else { + $statuts = ' AND ' . sql_in( + "O.$c_statut", + ($GLOBALS['connect_statut'] == '0minirezo') ? array('prepa', 'prop', 'publie') : array('prop', 'publie') + ); } - // objets sans champ previsu ou avec un previsu == '!' (par ex les rubriques) - else - $statuts = " AND " . sql_in("O.$c_statut", ($GLOBALS['connect_statut'] =="0minirezo") ? array('prepa','prop','publie') : array('prop','publie')); } $res = sql_allfetsel( - "COUNT(*) AS cnt, L.id_mot", - "spip_mots_liens AS L + 'COUNT(*) AS cnt, L.id_mot', + 'spip_mots_liens AS L LEFT JOIN spip_mots AS M ON L.id_mot=M.id_mot - AND L.objet=" . sql_quote($objet) . " - LEFT JOIN " . $table_objet_sql . " AS O ON L.id_objet=O.$_id_objet" , + AND L.objet=' . sql_quote($objet) . ' + LEFT JOIN ' . $table_objet_sql . " AS O ON L.id_objet=O.$_id_objet", "M.id_groupe=$id_groupe$statuts", - "L.id_mot"); - foreach($res as $row) { + 'L.id_mot' + ); + foreach ($res as $row) { $retour[$table_objet_sql][$row['id_mot']] = $row['cnt']; } } @@ -91,4 +130,3 @@ function calculer_utilisations_mots($id_groupe) return $retour; } -?> diff --git a/www/plugins-dist/mots/lang/adminmots_en.php b/www/plugins-dist/mots/lang/adminmots_en.php new file mode 100644 index 00000000..5dfa062c --- /dev/null +++ b/www/plugins-dist/mots/lang/adminmots_en.php @@ -0,0 +1,44 @@ + 'Manage this keyword', + + 'bouton_associer' => 'Link', + 'bouton_dissocier' => 'Unlink', + 'bouton_fusionner' => 'Merge', + 'label_associer_objets_mot' => 'Link this keyword to objects with the keyword', + 'label_dissocier_objets_mot' => 'Unlink this keyword from objects with the keyword', + 'label_fusionner_mot' => 'Merge with the keyword', + + 'erreur_admin_mot_action_inconnue' => 'What do you want to do?', + 'erreur_selection_id' => 'Select a keyword or enter it\'s ID in input field', + 'erreur_mot_cle_deja' => 'Impossible: this is the same keyword.', + + 'label_confirm_fusion' => 'This operation can\'t be canceled.
      +This keyword #@id_mot@ will be deleted and following links will be moved on keyword #@id_mot_new@: ', + 'label_confirm_fusion_check' => 'Check to confirm merging keyword #@id_mot@ with keyword #@id_mot_new@', + + 'result_associer_ras' => 'Nothing to do: all objects are already linked to this keyword', + 'result_associer_nb' => ' have been linked to this keyword', + 'result_dissocier_ras' => 'Nothing to do: no targeted object is linked to this keyword', + 'result_dissocier_nb' => ' have been unlinked from this keyword', + + 'result_fusionner_ok' => 'You can now delete this keyword: all links have been moved to other keyword @mot@.', + + 'result_cancel_ok' => 'Last operation has been canceled.', + + 'icone_administrer_mot' => 'Advanced operations', + + 'label_mot_parent' => 'Parent:', + 'label_mot_1_enfant' => 'Child:', + 'label_mot_nb_enfants' => 'Children:', + 'placeholder_id_mot' => 'or #ID_MOT', + 'placeholder_select' => 'Select…', + +); + +?> diff --git a/www/plugins-dist/mots/lang/adminmots_fr.php b/www/plugins-dist/mots/lang/adminmots_fr.php new file mode 100644 index 00000000..ac36b4ad --- /dev/null +++ b/www/plugins-dist/mots/lang/adminmots_fr.php @@ -0,0 +1,44 @@ + 'Administrer le mot', + + 'bouton_associer' => 'Associer', + 'bouton_dissocier' => 'Dissocier', + 'bouton_fusionner' => 'Fusionner', + 'label_associer_objets_mot' => 'Associer ce mot aux objets ayant déjà le mot', + 'label_dissocier_objets_mot' => 'Dissocier ce mot des objets ayant aussi le mot', + 'label_fusionner_mot' => 'Fusionner avec le mot-clé', + + 'erreur_admin_mot_action_inconnue' => 'Que voulez-vous faire ?', + 'erreur_selection_id' => 'Selectionnez un mot-clé ou indiquez son ID dans le champ de saisie', + 'erreur_mot_cle_deja' => 'Impossible : c\'est déjà le mot-clé sur lequel vous êtes.', + + 'label_confirm_fusion' => 'Cette opération n\'est pas annulable.
      +Le mot-clé courant #@id_mot@ sera supprimé et les liens suivants seront transférés sur le mot #@id_mot_new@ : ', + 'label_confirm_fusion_check' => 'Cochez pour confirmer la fusion du mot #@id_mot@ avec le mot #@id_mot_new@', + + 'result_associer_ras' => 'Rien à faire : tous les objets ont déjà ce mot-clé', + 'result_associer_nb' => ' ont été associé à ce mot-clé', + 'result_dissocier_ras' => 'Rien à faire : aucun objet concerné n\'est associé à ce mot-clé', + 'result_dissocier_nb' => ' ont été dissociés de ce mot-clé', + + 'result_fusionner_ok' => 'Vous pouvez maintenant supprimer ce mot : tous les liens ont été transférés sur l\'autre @mot@.', + + 'result_cancel_ok' => 'La dernière opération a été annulée.', + + 'icone_administrer_mot' => 'Admin. avancée', + + 'label_mot_parent' => 'Parent :', + 'label_mot_1_enfant' => 'Enfant :', + 'label_mot_nb_enfants' => 'Enfants :', + 'placeholder_id_mot' => 'ou #ID_MOT', + 'placeholder_select' => 'Selectionner…', + +); + +?> diff --git a/www/plugins-dist/mots/lang/mots.xml b/www/plugins-dist/mots/lang/mots.xml index d3c2e7f3..9f04ebd4 100644 --- a/www/plugins-dist/mots/lang/mots.xml +++ b/www/plugins-dist/mots/lang/mots.xml @@ -26,8 +26,9 @@ - + + @@ -81,13 +82,14 @@ - + + @@ -104,6 +106,9 @@ + + + @@ -113,12 +118,14 @@ - + + - + + @@ -128,6 +135,10 @@ + + + + diff --git a/www/plugins-dist/mots/lang/mots_an.php b/www/plugins-dist/mots/lang/mots_an.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_an.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_ar.php b/www/plugins-dist/mots/lang/mots_ar.php index 0ea05887..801cfe0a 100644 --- a/www/plugins-dist/mots/lang/mots_ar.php +++ b/www/plugins-dist/mots/lang/mots_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -62,8 +64,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // L 'lien_ajouter_mot' => 'إضافة هذا المفتاح', - 'logo_groupe' => 'شعار هذه المجموعة', - 'logo_mot_cle' => 'شعار المفتاح', + 'logo_groupe' => 'رمز هذه المجموعة', + 'logo_mot_cle' => 'رمز المفتاح', // T 'texte_config_groupe_mots_cles' => 'هل تريد تفعيل إعداد مجموعات المفاتيح المتطور بتحديد، مثلاً، إمكان اختيار مفتاح وحيد في كل مجموعة او التشديد على اهمية مجموعة معينة...؟', @@ -84,5 +86,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_objets_lies_mot' => 'مرتبطة بهذا المفتاح:', 'titre_page_mots_tous' => 'المفاتيح' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_ast.php b/www/plugins-dist/mots/lang/mots_ast.php index c9d3440e..4a8e168d 100644 --- a/www/plugins-dist/mots/lang/mots_ast.php +++ b/www/plugins-dist/mots/lang/mots_ast.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=ast // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -76,5 +78,3 @@ con @texte_lie@ debes confirmar esta decisión:', # MODIF 'titre_nouveau_groupe' => 'Grupu nuevu', 'titre_page_mots_tous' => 'Pallabres-clave' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_ay.php b/www/plugins-dist/mots/lang/mots_ay.php index af5defdb..95db4fe0 100644 --- a/www/plugins-dist/mots/lang/mots_ay.php +++ b/www/plugins-dist/mots/lang/mots_ay.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=ay // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -31,5 +33,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_retirer_mot' => 'Aru apaqaña', 'info_retirer_mots' => 'Taqpach arunak apaqaña' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_bg.php b/www/plugins-dist/mots/lang/mots_bg.php index 61d7d609..3a4f38cd 100644 --- a/www/plugins-dist/mots/lang/mots_bg.php +++ b/www/plugins-dist/mots/lang/mots_bg.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=bg // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Нова група', 'titre_page_mots_tous' => 'Ключови думи' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_bn.php b/www/plugins-dist/mots/lang/mots_bn.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_bn.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_bo.php b/www/plugins-dist/mots/lang/mots_bo.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_bo.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_bois.php b/www/plugins-dist/mots/lang/mots_bois.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_bois.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_br.php b/www/plugins-dist/mots/lang/mots_br.php index a5fdfbd6..26f4f1ed 100644 --- a/www/plugins-dist/mots/lang/mots_br.php +++ b/www/plugins-dist/mots/lang/mots_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Strollad nevez', 'titre_page_mots_tous' => 'Gerioù-stur' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_bs.php b/www/plugins-dist/mots/lang/mots_bs.php index 865774f1..5e456103 100644 --- a/www/plugins-dist/mots/lang/mots_bs.php +++ b/www/plugins-dist/mots/lang/mots_bs.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=bs // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -62,5 +64,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Nova grupa', 'titre_page_mots_tous' => 'Kljucne rijeci' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_ca.php b/www/plugins-dist/mots/lang/mots_ca.php index 88bdf531..51d70e37 100644 --- a/www/plugins-dist/mots/lang/mots_ca.php +++ b/www/plugins-dist/mots/lang/mots_ca.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=ca // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -76,5 +78,3 @@ enriquir la navegació del vostre lloc, inclús utilitzar aquestes propietats 'titre_nouveau_groupe' => 'Grup nou', 'titre_page_mots_tous' => 'Paraules clau' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_co.php b/www/plugins-dist/mots/lang/mots_co.php index 6dd51633..0decfc0e 100644 --- a/www/plugins-dist/mots/lang/mots_co.php +++ b/www/plugins-dist/mots/lang/mots_co.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=co // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Nuvellu gruppu', 'titre_page_mots_tous' => 'Segni' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_co_attic.php b/www/plugins-dist/mots/lang/mots_co_attic.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_co_attic.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_cpf.php b/www/plugins-dist/mots/lang/mots_cpf.php index 1bd8810c..22d1e80c 100644 --- a/www/plugins-dist/mots/lang/mots_cpf.php +++ b/www/plugins-dist/mots/lang/mots_cpf.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=cpf // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -70,5 +72,3 @@ Li pé permèt alor swazi inn sèl molaklé sanm group, o rand inn group pli im 'titre_nouveau_groupe' => 'Nouvo group', 'titre_page_mots_tous' => 'Bann molaklé' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_cpf_hat.php b/www/plugins-dist/mots/lang/mots_cpf_hat.php index dcaf1ddc..70d25351 100644 --- a/www/plugins-dist/mots/lang/mots_cpf_hat.php +++ b/www/plugins-dist/mots/lang/mots_cpf_hat.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=cpf_hat // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -67,5 +69,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Nouvo gwoup', 'titre_page_mots_tous' => 'Tout moklé yo' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_cs.php b/www/plugins-dist/mots/lang/mots_cs.php index f004aa20..c9559ff4 100644 --- a/www/plugins-dist/mots/lang/mots_cs.php +++ b/www/plugins-dist/mots/lang/mots_cs.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=cs // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Nová skupina', 'titre_page_mots_tous' => 'Klíčová slova' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_da.php b/www/plugins-dist/mots/lang/mots_da.php index 4ee93cac..035b2942 100644 --- a/www/plugins-dist/mots/lang/mots_da.php +++ b/www/plugins-dist/mots/lang/mots_da.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=da // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -67,5 +69,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Nyhedsgruppe', 'titre_page_mots_tous' => 'Nøgleord' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_de.php b/www/plugins-dist/mots/lang/mots_de.php index b056543f..c0b9c5cd 100644 --- a/www/plugins-dist/mots/lang/mots_de.php +++ b/www/plugins-dist/mots/lang/mots_de.php @@ -3,13 +3,15 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // A 'avis_conseil_selection_mot_cle' => 'Wichtige Kategorie: Bitte wählen Sie ein Schlüsselwort dieser Gruppe.', - 'avis_doublon_mot_cle' => 'Ein Schlagwort mit dieser Bezeichung gibt es bereits. Wollen sie es wirklich erneut anlegen?', # MODIF + 'avis_doublon_mot_cle' => 'Ein Schlagwort mit dieser Bezeichung gibt es bereits. Wollen sie es wirklich erneut anlegen?', // B 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'Administratoren der Website', @@ -80,5 +82,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_objets_lies_mot' => 'Diesem Schlagwort zugeordnet:', 'titre_page_mots_tous' => 'Schlagworte' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_en.php b/www/plugins-dist/mots/lang/mots_en.php index 3b4c3d20..00c3a8be 100644 --- a/www/plugins-dist/mots/lang/mots_en.php +++ b/www/plugins-dist/mots/lang/mots_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -85,5 +87,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_objets_lies_mot' => 'Linked to that keyword:', 'titre_page_mots_tous' => 'Keywords' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_en_hx.php b/www/plugins-dist/mots/lang/mots_en_hx.php index b42657a1..599ca253 100644 --- a/www/plugins-dist/mots/lang/mots_en_hx.php +++ b/www/plugins-dist/mots/lang/mots_en_hx.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=en_hx // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'N3w gr0up', 'titre_page_mots_tous' => 'K3yw0rd5' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_eo.php b/www/plugins-dist/mots/lang/mots_eo.php index edb931b9..73e6b5d2 100644 --- a/www/plugins-dist/mots/lang/mots_eo.php +++ b/www/plugins-dist/mots/lang/mots_eo.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=eo // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -71,5 +73,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Nova grupo', 'titre_page_mots_tous' => 'Ŝlosilvortoj' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_es.php b/www/plugins-dist/mots/lang/mots_es.php index e6ada728..a2f79583 100644 --- a/www/plugins-dist/mots/lang/mots_es.php +++ b/www/plugins-dist/mots/lang/mots_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -82,5 +84,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_objets_lies_mot' => 'Relacionados a esta palabra clave:', 'titre_page_mots_tous' => 'Palabras clave' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_es_mx_pop.php b/www/plugins-dist/mots/lang/mots_es_mx_pop.php deleted file mode 100644 index d98f0ca7..00000000 --- a/www/plugins-dist/mots/lang/mots_es_mx_pop.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Palabras clave', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirar la palabra', # NEW - 'info_retirer_mots' => 'Retirar todas las palabras', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_eu.php b/www/plugins-dist/mots/lang/mots_eu.php index 45ea7036..93e6b556 100644 --- a/www/plugins-dist/mots/lang/mots_eu.php +++ b/www/plugins-dist/mots/lang/mots_eu.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=eu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -64,5 +66,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Talde berria', 'titre_page_mots_tous' => 'Gako-hitzak' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_fa.php b/www/plugins-dist/mots/lang/mots_fa.php index f3b76005..67cff6d5 100644 --- a/www/plugins-dist/mots/lang/mots_fa.php +++ b/www/plugins-dist/mots/lang/mots_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -80,5 +82,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_objets_lies_mot' => 'وابسته به اين كليدواژه:', 'titre_page_mots_tous' => 'واژه-كليدها' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_fi.php b/www/plugins-dist/mots/lang/mots_fi.php index 5cbb42ae..a1b72179 100644 --- a/www/plugins-dist/mots/lang/mots_fi.php +++ b/www/plugins-dist/mots/lang/mots_fi.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=fi // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -40,5 +42,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Uusi ryhmä', 'titre_page_mots_tous' => 'Hakusanoja' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_fon.php b/www/plugins-dist/mots/lang/mots_fon.php index a98bb3cb..3312ceb4 100644 --- a/www/plugins-dist/mots/lang/mots_fon.php +++ b/www/plugins-dist/mots/lang/mots_fon.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=fon // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -62,5 +64,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'àgùn yɔyɔ', 'titre_page_mots_tous' => 'gbètákɛn' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_fr.php b/www/plugins-dist/mots/lang/mots_fr.php index 7e793ae4..269b4640 100644 --- a/www/plugins-dist/mots/lang/mots_fr.php +++ b/www/plugins-dist/mots/lang/mots_fr.php @@ -1,7 +1,9 @@ 'Liés à ce mot-clé :', 'titre_page_mots_tous' => 'Mots-clés' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_fr_fem.php b/www/plugins-dist/mots/lang/mots_fr_fem.php index 958220ec..83106649 100644 --- a/www/plugins-dist/mots/lang/mots_fr_fem.php +++ b/www/plugins-dist/mots/lang/mots_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -83,5 +85,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', 'titre_page_mots_tous' => 'Mots-clés' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_fr_sc.php b/www/plugins-dist/mots/lang/mots_fr_sc.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_fr_sc.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_fr_tu.php b/www/plugins-dist/mots/lang/mots_fr_tu.php index 6b69f046..dc1b4916 100644 --- a/www/plugins-dist/mots/lang/mots_fr_tu.php +++ b/www/plugins-dist/mots/lang/mots_fr_tu.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=fr_tu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -83,5 +85,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', 'titre_page_mots_tous' => 'Mots-clés' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_gl.php b/www/plugins-dist/mots/lang/mots_gl.php index ad262263..28b8c8fb 100644 --- a/www/plugins-dist/mots/lang/mots_gl.php +++ b/www/plugins-dist/mots/lang/mots_gl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=gl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -76,5 +78,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Novo grupo', 'titre_page_mots_tous' => 'Palabras chave' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_gr.php b/www/plugins-dist/mots/lang/mots_gr.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_gr.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_hac.php b/www/plugins-dist/mots/lang/mots_hac.php index 8947f706..4f96ddfe 100644 --- a/www/plugins-dist/mots/lang/mots_hac.php +++ b/www/plugins-dist/mots/lang/mots_hac.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=hac // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -12,5 +14,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_retirer_mot' => 'اين واژه را برداريد', 'info_retirer_mots' => 'تمام واژه ها را برداريد' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_he.php b/www/plugins-dist/mots/lang/mots_he.php index c42c10ec..096b03ad 100644 --- a/www/plugins-dist/mots/lang/mots_he.php +++ b/www/plugins-dist/mots/lang/mots_he.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=he // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -46,5 +48,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_mots_tous' => 'מילות מפתח', 'titre_page_mots_tous' => 'מילות מפתח' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_hu.php b/www/plugins-dist/mots/lang/mots_hu.php index 3233790d..49431d8a 100644 --- a/www/plugins-dist/mots/lang/mots_hu.php +++ b/www/plugins-dist/mots/lang/mots_hu.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=hu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -67,5 +69,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Új csoport', 'titre_page_mots_tous' => 'Kulcsszavak' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_id.php b/www/plugins-dist/mots/lang/mots_id.php index 383a526a..88f7a5ec 100644 --- a/www/plugins-dist/mots/lang/mots_id.php +++ b/www/plugins-dist/mots/lang/mots_id.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=id // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Kelompok baru', 'titre_page_mots_tous' => 'Kata kunci' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_is.php b/www/plugins-dist/mots/lang/mots_is.php index c9ec3090..f410a902 100644 --- a/www/plugins-dist/mots/lang/mots_is.php +++ b/www/plugins-dist/mots/lang/mots_is.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=is // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -17,5 +19,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // L 'logo_mot_cle' => 'TÁKN LYKILORÐSINS' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_it.php b/www/plugins-dist/mots/lang/mots_it.php index acfd70ba..f00fcd37 100644 --- a/www/plugins-dist/mots/lang/mots_it.php +++ b/www/plugins-dist/mots/lang/mots_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -83,5 +85,3 @@ per personalizzare la presentazione degli articoli nei tuoi modelli di layout.', 'titre_objets_lies_mot' => 'Correlati a questa parola chiave :', 'titre_page_mots_tous' => 'Parole chiave' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_it_fem.php b/www/plugins-dist/mots/lang/mots_it_fem.php index 8fdaa790..50d5a5b3 100644 --- a/www/plugins-dist/mots/lang/mots_it_fem.php +++ b/www/plugins-dist/mots/lang/mots_it_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=it_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -71,5 +73,3 @@ per personalizzare la presentazione degli articoli nei tuoi modelli di layout.', 'titre_nouveau_groupe' => 'Nuovo gruppo', 'titre_page_mots_tous' => 'Parole chiave' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_iu.php b/www/plugins-dist/mots/lang/mots_iu.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_iu.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_ja.php b/www/plugins-dist/mots/lang/mots_ja.php index 1df458b3..8c799ff2 100644 --- a/www/plugins-dist/mots/lang/mots_ja.php +++ b/www/plugins-dist/mots/lang/mots_ja.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=ja // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -64,5 +66,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => '新しいグループ', 'titre_page_mots_tous' => 'キーワード' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_km.php b/www/plugins-dist/mots/lang/mots_km.php index 4bdfd326..c0cbacb0 100644 --- a/www/plugins-dist/mots/lang/mots_km.php +++ b/www/plugins-dist/mots/lang/mots_km.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=km // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -64,5 +66,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'ក្រុម​ថ្មី', 'titre_page_mots_tous' => 'ពាក្យ​គន្លឹះ' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_lb.php b/www/plugins-dist/mots/lang/mots_lb.php index 31fbd221..9c966f28 100644 --- a/www/plugins-dist/mots/lang/mots_lb.php +++ b/www/plugins-dist/mots/lang/mots_lb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -80,5 +82,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_objets_lies_mot' => 'Mat dësem Schlësselwuert verbonnen:', 'titre_page_mots_tous' => 'Schlësselwierder' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_mg.php b/www/plugins-dist/mots/lang/mots_mg.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_mg.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_mk.php b/www/plugins-dist/mots/lang/mots_mk.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_mk.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_my.php b/www/plugins-dist/mots/lang/mots_my.php index 69659479..b327db09 100644 --- a/www/plugins-dist/mots/lang/mots_my.php +++ b/www/plugins-dist/mots/lang/mots_my.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=my // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -64,5 +66,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'အုပ်စုအသစ်', 'titre_page_mots_tous' => 'သော့ချက်စကားလုံးများ' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_nl.php b/www/plugins-dist/mots/lang/mots_nl.php index 64d962e0..689027b7 100644 --- a/www/plugins-dist/mots/lang/mots_nl.php +++ b/www/plugins-dist/mots/lang/mots_nl.php @@ -3,13 +3,15 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // A - 'avis_conseil_selection_mot_cle' => 'Belangrijke groep: het is erg aan te bevelen een trefwoord uit deze groep te kiezen.', - 'avis_doublon_mot_cle' => 'Het woord bestaat reeds met deze titel. Weet u zeker dat u hetzelfde te creëren?', + 'avis_conseil_selection_mot_cle' => 'Belangrijke groep: het wordt aanbevolen een trefwoord uit deze groep te kiezen.', + 'avis_doublon_mot_cle' => 'Een trefwoord met deze titel bestaat al. Weet je zeker dat je hetzelfde wilt maken?', // B 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'beheerders van de site', @@ -17,21 +19,21 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'bezoekers van de publieke site die een bericht op het forum posten', // C - 'creer_et_associer_un_mot' => 'Maken en toewijzen een trefwoord', + 'creer_et_associer_un_mot' => 'Een trefwoord maken en toewijzen', // I 'icone_creation_groupe_mots' => 'Een nieuwe groep van trefwoorden aanmaken', 'icone_creation_mots_cles' => 'Een nieuw trefwoord aanmaken', 'icone_modif_groupe_mots' => 'Deze groep van trefwoorden wijzigen', - 'icone_modifier_mot' => 'Dit sleutelwoord wijzigen', + 'icone_modifier_mot' => 'Dit trefwoord wijzigen', 'icone_mots_cles' => 'Trefwoorden', 'icone_supprimer_groupe_mots' => 'Deze groep wissen', - 'icone_voir_groupe_mots' => 'Zie deze zin', + 'icone_voir_groupe_mots' => 'Deze groep trefwoorden zien', 'icone_voir_tous_mots_cles' => 'Alle trefwoorden bekijken', - 'info_1_groupe_mots' => '1 groep woorden', + 'info_1_groupe_mots' => '1 groep trefwoorden', 'info_articles_lies_mot' => 'Artikels gekoppeld aan dit trefwoord', - 'info_aucun_groupe_mots' => 'Geen enkele groep van woorden', - 'info_aucun_mot_cle' => 'Geen Trefwoord', + 'info_aucun_groupe_mots' => 'Geen enkele groep trefwoorden', + 'info_aucun_mot_cle' => 'Geen trefwoord', 'info_changer_nom_groupe' => 'De naam van deze groep veranderen:', 'info_creation_mots_cles' => 'Creëer en configureer hier de trefwoorden van de site', 'info_dans_groupe' => 'In de groep:', @@ -39,20 +41,20 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( @titre_mot@ (@type_mot@) te verwijderen. Dit trefwoord is gekoppeld aan @texte_lie@, je dient je beslissing te bevestigen:', 'info_groupe_important' => 'Belangrijke groep', - 'info_modifier_mot' => 'Het sleutelwoord wijzigen :', + 'info_modifier_mot' => 'Wijzigen van trefwoord:', 'info_mots_cles' => 'Trefwoorden', 'info_mots_cles_association' => 'Trefwoorden uit deze groep kunnen verbonden worden met:', - 'info_nb_groupe_mots' => '@nb@ groepen van woorden', + 'info_nb_groupe_mots' => '@nb@ groepen van trefwoorden', 'info_oui_suppression_mot_cle' => 'Ik wil dit trefwoord definitief verwijderen.', - 'info_question_mots_cles' => 'Wil je gebruik maken van trefwoorden op je site?', - 'info_qui_attribue_mot_cle' => 'De woorden uit deze groep kunnen toegekend worden door:', + 'info_question_mots_cles' => 'Wil je op je site gebruik maken van trefwoorden?', + 'info_qui_attribue_mot_cle' => 'De trefwoorden uit deze groep kunnen toegekend worden door:', 'info_remplacer_mot' => '"@titre@" te vervangen', - 'info_retirer_mot' => 'Verwijder het woord', + 'info_retirer_mot' => 'Verwijder dit trefwoord', 'info_retirer_mots' => 'Alle trefwoorden intrekken', 'info_rubriques_liees_mot' => 'Rubrieken gekoppeld aan dit trefwoord', - 'info_selection_un_seul_mot_cle' => 'Men kan slechts één enkel trefwoord tegelijk kiezen uit deze groep.', - 'info_supprimer_mot' => 'dit woord verwijderen', - 'info_titre_mot_cle' => 'Name of titel voor slautelwoord', + 'info_selection_un_seul_mot_cle' => 'Je kan slechts één enkel trefwoord tegelijk kiezen uit deze groep.', + 'info_supprimer_mot' => 'dit trefwoord verwijderen', + 'info_titre_mot_cle' => 'Naam of titel voor het trefwoord', 'info_un_mot' => 'Een enkel trefwoord', 'item_ajout_mots_cles' => 'Gebruik van trefwoorden toestaan op de forums', 'item_non_ajout_mots_cles' => 'Gebruik van trefwoorden in de forums niet toestaan', @@ -62,30 +64,24 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'item_utiliser_mots_cles' => 'Trefwoorden gebruiken', // L - 'lien_ajouter_mot' => 'Voeg dit trefwoord', + 'lien_ajouter_mot' => 'Voeg dit trefwoord toe', 'logo_groupe' => 'LOGO VOOR DEZE GROEP', 'logo_mot_cle' => 'LOGO VAN HET TREFWOORD', // T - 'texte_config_groupe_mots_cles' => 'Wilt u de geavanceerde configuratie van de sleutelwoorden activeren, - door mede te delen bijvoorbeeld dat men een enig woord - kan selecteren per groep, dat een groep belangrijk is... ?', - 'texte_mots_cles' => 'Met behulp van trefwoorden kan je thematische verbanden leggen tussen je artikels, - onafhankelijk van hun plaats in de rubrieken. Zo kan je - de navigatie op je site verbeteren maar ook de weergave - van artikels aanpassen aan de inhoud.', - 'texte_mots_cles_dans_forum' => 'Wilt u het gebruik van sleutelwoorden geselecteren door de bezoekers in de forums van de openbare site toelaten? (Aandacht : deze keuze is betrekkelijk ingewikkeld juist te gebruiken.)', + 'texte_config_groupe_mots_cles' => 'Wil je de geavanceerde configuratie van trefwoorden activeren door bijvoorbeeld aan te geven dat slechts één trefwoord per groep kan worden geselecteerd, of dat een groep belangrijk is?', + 'texte_mots_cles' => 'Met behulp van trefwoorden kan je thematische verbanden leggen tussen je artikelen, onafhankelijk van hun plaats in de rubrieken. Zo kan je de navigatie op je site verbeteren maar ook de weergave +van artikelen aanpassen aan hun inhoud.', + 'texte_mots_cles_dans_forum' => 'Wil je het gebruik van door forumbezoekers te selecteren trefwoorden in de publieke site toelaten? (Let op: deze optie is relatief ingewikkeld te gebruiken.)', 'texte_nouveau_mot' => 'Nieuw trefwoord', 'titre_config_groupe_mots_cles' => 'Configuratie van de groepen trefwoorden', - 'titre_gauche_mots_edit' => 'WOORD NUMMER:', - 'titre_groupe_mots' => 'Groep van trefwoord', - 'titre_groupe_mots_numero' => 'GROEP WOORDEN NUMBER :', + 'titre_gauche_mots_edit' => 'TREFWOORD NUMMER:', + 'titre_groupe_mots' => 'Groep van trefwoorden', + 'titre_groupe_mots_numero' => 'GROEPSNUMMER:', 'titre_groupes_mots' => 'Groepen van trefwoorden', 'titre_mots_cles_dans_forum' => 'Trefwoorden in de forums van de publieke site', 'titre_mots_tous' => 'Trefwoorden', 'titre_nouveau_groupe' => 'Nieuwe groep', - 'titre_objets_lies_mot' => 'Gerelateerd aan dit trefwoord :', + 'titre_objets_lies_mot' => 'Gerelateerd aan dit trefwoord:', 'titre_page_mots_tous' => 'Trefwoorden' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_no.php b/www/plugins-dist/mots/lang/mots_no.php index 832e6208..a967697b 100644 --- a/www/plugins-dist/mots/lang/mots_no.php +++ b/www/plugins-dist/mots/lang/mots_no.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=no // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -26,5 +28,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_groupe_mots' => 'Groupe de mots-clés', 'titre_objets_lies_mot' => 'Liés à ce mot-clé :' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_oc_auv.php b/www/plugins-dist/mots/lang/mots_oc_auv.php index 2322f476..64406160 100644 --- a/www/plugins-dist/mots/lang/mots_oc_auv.php +++ b/www/plugins-dist/mots/lang/mots_oc_auv.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=oc_auv // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Grop novèl', 'titre_page_mots_tous' => 'Mots clau' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_oc_gsc.php b/www/plugins-dist/mots/lang/mots_oc_gsc.php index 8ee2bd5b..b128fee1 100644 --- a/www/plugins-dist/mots/lang/mots_oc_gsc.php +++ b/www/plugins-dist/mots/lang/mots_oc_gsc.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=oc_gsc // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Grop navèth', 'titre_page_mots_tous' => 'Mots clau' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_oc_lms.php b/www/plugins-dist/mots/lang/mots_oc_lms.php index 5ea78d02..3c1300c4 100644 --- a/www/plugins-dist/mots/lang/mots_oc_lms.php +++ b/www/plugins-dist/mots/lang/mots_oc_lms.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=oc_lms // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Grop noveu', 'titre_page_mots_tous' => 'Mots clau' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_oc_lnc.php b/www/plugins-dist/mots/lang/mots_oc_lnc.php index f13f9e57..f0c1dba0 100644 --- a/www/plugins-dist/mots/lang/mots_oc_lnc.php +++ b/www/plugins-dist/mots/lang/mots_oc_lnc.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=oc_lnc // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Grop novèl', 'titre_page_mots_tous' => 'Mots clau' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_oc_ni.php b/www/plugins-dist/mots/lang/mots_oc_ni.php index 661b1889..072508ab 100644 --- a/www/plugins-dist/mots/lang/mots_oc_ni.php +++ b/www/plugins-dist/mots/lang/mots_oc_ni.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=oc_ni // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Novèu grop', 'titre_page_mots_tous' => 'Mòts claus' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_oc_ni_la.php b/www/plugins-dist/mots/lang/mots_oc_ni_la.php index 6f572f2b..9a42212f 100644 --- a/www/plugins-dist/mots/lang/mots_oc_ni_la.php +++ b/www/plugins-dist/mots/lang/mots_oc_ni_la.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=oc_ni_la // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Grop novèu', 'titre_page_mots_tous' => 'Lu mots clau' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_oc_ni_mis.php b/www/plugins-dist/mots/lang/mots_oc_ni_mis.php new file mode 100644 index 00000000..128b4f61 --- /dev/null +++ b/www/plugins-dist/mots/lang/mots_oc_ni_mis.php @@ -0,0 +1,87 @@ + 'Group empourtant : es fouòrt acounsilhat de seleciounà un mot clau en aqueu group.', + 'avis_doublon_mot_cle' => 'Un mot esistà ja embé aqueu titre. Sias segur de voulé creà lou meme ?', + + // B + 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'Lu aministratour dóu sit', + 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'lu redatour', + 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'lu visitaire dóu sit pùblicou coura pouòston un message en un fòrou.', + + // C + 'creer_et_associer_un_mot' => 'Creà e assoucià un mot clau', + + // I + 'icone_creation_groupe_mots' => 'Creà un nouvèu group de mot', + 'icone_creation_mots_cles' => 'Creà un mot clau nouvèu', + 'icone_modif_groupe_mots' => 'Moudificà aqueu group de mot', + 'icone_modifier_mot' => 'Moudificà aqueu mot clau', + 'icone_mots_cles' => 'Mot clau', + 'icone_supprimer_groupe_mots' => 'Suprimà aqueu group', + 'icone_voir_groupe_mots' => 'Veire aqueu group de mot', + 'icone_voir_tous_mots_cles' => 'Veire toui lu mot clau', + 'info_1_groupe_mots' => '1 group de mot', + 'info_articles_lies_mot' => 'Lu article ligat en aqueu mot clau', + 'info_aucun_groupe_mots' => 'Mìnga group de mot', + 'info_aucun_mot_cle' => 'Mìnga mot clau', + 'info_changer_nom_groupe' => 'Cambià lou noum d’aqueu goup :', + 'info_creation_mots_cles' => 'Creas e counfiguras aquì lu mot clau dóu sit', + 'info_dans_groupe' => 'En lou group :', + 'info_delet_mots_cles' => 'Avès demandat de suprimà lou mot clau @titre_mot@ (@type_mot@). Couma aqueu mot clau es ligat en @texte_lie@ devès counfirmà aqueula dechisioun :', + 'info_groupe_important' => 'Group empourtant', + 'info_modifier_mot' => 'Moudificà lou mot clau', + 'info_mots_cles' => 'Lu mot clau', + 'info_mots_cles_association' => 'Lu mot clau d’aqueu group pouòdon estre assouciat :', + 'info_nb_groupe_mots' => '@nb@ group de mot', + 'info_oui_suppression_mot_cle' => 'vouòli suprimà definitivamen aqueu mot clau.', + 'info_question_mots_cles' => 'Vourìas utilisà lu mot clau sus lou vouòstre sit ?', + 'info_qui_attribue_mot_cle' => 'Lu mot d’aqueu group pouòdon estre atribuit per :', + 'info_remplacer_mot' => 'Remplaçà "@titre@"', + 'info_retirer_mot' => 'Retirà aqueu mot', + 'info_retirer_mots' => 'Retirà toui lu mot', + 'info_rubriques_liees_mot' => 'Li rùbrica ligadi en aqueu mot clau', + 'info_selection_un_seul_mot_cle' => 'Si pòu seleciounà qu’un mot clau soulèt a l’encòu en aqueu group.', + 'info_supprimer_mot' => 'suprimà aqueu mot', + 'info_titre_mot_cle' => 'Noum o titre dóu mot clau', + 'info_un_mot' => 'Basta un mot a l’encòu', + 'item_ajout_mots_cles' => 'Autourisà l’ajountamen de mot clau ai fòrou', + 'item_non_ajout_mots_cles' => 'Prouhibì l’utilisacioun dei mot clau en lu fòrou', + 'item_non_utiliser_config_groupe_mots_cles' => 'Noun utilisà la counfiguracioun avançada dei group de mot clau', + 'item_non_utiliser_mots_cles' => 'Noun utilisà lu mot clau', + 'item_utiliser_config_groupe_mots_cles' => 'Utilisà la counfiguracioun avançada dei group de mot clau', + 'item_utiliser_mots_cles' => 'Utilisà lu mot clau', + + // L + 'lien_ajouter_mot' => 'Ajustà aqueu mot clau', + 'logo_groupe' => 'LOGOU D’AQUEU GROUP', + 'logo_mot_cle' => 'LOGOU DÓU MOT CLAU', + + // T + 'texte_config_groupe_mots_cles' => 'Vourìas ativà la counfiguracioun avançada dei mot clau, en endicant per isemple que si pòu seleciounà un mot soulet per group, qu’un group es empourtant… ?', + 'texte_mots_cles' => 'Lu mot clau permeton de creà dei estac temàticou tra lu vouòstre article + quauque que sigue la sieu plaça en li rùbrica. Acò vi permete + d’enriquì la navigacioun dóu vouòstre sit, e mai d’utilisà aqueli prouprietà + per persounalisà la presentacioun dei article en li esquèletrou.', + 'texte_mots_cles_dans_forum' => 'Vourìas permetre l’utilisacioun de mot clau seleciounable dai visitaire en lu fòrou dóu sit public ? (Mèfi : utilisà courretamen aquela oupcioun es proun coumplesse.)', + 'texte_nouveau_mot' => 'Mot nouvèu', + 'titre_config_groupe_mots_cles' => 'Configuracioun dei group de mot clau', + 'titre_gauche_mots_edit' => 'MOT NÙMERO :', + 'titre_groupe_mots' => 'Group de mot clau', + 'titre_groupe_mots_numero' => 'GROUP DE MOT NÙMERO :', + 'titre_groupes_mots' => 'Group de mot clau', + 'titre_mots_cles_dans_forum' => 'Mot clau en lu fòrou dóu sit public', + 'titre_mots_tous' => 'Lu mot clau', + 'titre_nouveau_groupe' => 'Group nouvèu', + 'titre_objets_lies_mot' => 'Ligat en aqueu mot clau :', + 'titre_page_mots_tous' => 'Mot clau' +); diff --git a/www/plugins-dist/mots/lang/mots_oc_pro.php b/www/plugins-dist/mots/lang/mots_oc_pro.php index affe5371..9af5c577 100644 --- a/www/plugins-dist/mots/lang/mots_oc_pro.php +++ b/www/plugins-dist/mots/lang/mots_oc_pro.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://www.spip.net/trad-lang/ // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -87,5 +89,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW 'titre_page_mots_tous' => 'Mots-clés' # NEW ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_oc_prv.php b/www/plugins-dist/mots/lang/mots_oc_prv.php index 4974396c..a8e913dc 100644 --- a/www/plugins-dist/mots/lang/mots_oc_prv.php +++ b/www/plugins-dist/mots/lang/mots_oc_prv.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=oc_prv // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Grop novèu', 'titre_page_mots_tous' => 'Mots clau' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_oc_va.php b/www/plugins-dist/mots/lang/mots_oc_va.php index 8d4e11d6..68441e72 100644 --- a/www/plugins-dist/mots/lang/mots_oc_va.php +++ b/www/plugins-dist/mots/lang/mots_oc_va.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=oc_va // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Grop novèu', 'titre_page_mots_tous' => 'Mots clau' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_oci_va.php b/www/plugins-dist/mots/lang/mots_oci_va.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_oci_va.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_pl.php b/www/plugins-dist/mots/lang/mots_pl.php index a528a6ab..03ab1bce 100644 --- a/www/plugins-dist/mots/lang/mots_pl.php +++ b/www/plugins-dist/mots/lang/mots_pl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=pl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -69,5 +71,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Nowa grupa', 'titre_page_mots_tous' => 'Słowa kluczowe' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_pt.php b/www/plugins-dist/mots/lang/mots_pt.php index e6493162..b8f8fc11 100644 --- a/www/plugins-dist/mots/lang/mots_pt.php +++ b/www/plugins-dist/mots/lang/mots_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -87,5 +89,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_objets_lies_mot' => 'Ligado à palavra-chave :', 'titre_page_mots_tous' => 'Palavras-chave' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_pt_br.php b/www/plugins-dist/mots/lang/mots_pt_br.php index 324de36a..84db3202 100644 --- a/www/plugins-dist/mots/lang/mots_pt_br.php +++ b/www/plugins-dist/mots/lang/mots_pt_br.php @@ -3,17 +3,19 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=pt_br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // A 'avis_conseil_selection_mot_cle' => 'Grupo importante: é fortemente aconselhável selecionar uma palavra-chave deste grupo.', - 'avis_doublon_mot_cle' => 'Já existe uma palavra com esse título. Você quer realmente criá-la assim mesmo?', # MODIF + 'avis_doublon_mot_cle' => 'Já existe uma palavra-chave com esse título. Quer criá-la mesmo assim?', // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'os administradores do site', - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'os redatores', + 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'administradores do site', + 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'redatores', 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'os visitantes do site público desde que eles postem uma mensagem num fórum.', // C @@ -25,7 +27,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_modif_groupe_mots' => 'Editar este grupo de palavras', 'icone_modifier_mot' => 'Editar esta palavra-chave', 'icone_mots_cles' => 'Palavras-chave', - 'icone_supprimer_groupe_mots' => 'Suprimir este grupo', + 'icone_supprimer_groupe_mots' => 'Remover este grupo', 'icone_voir_groupe_mots' => 'Exibir este grupo de palavras-chave', 'icone_voir_tous_mots_cles' => 'Ver todas as palavras-chave', 'info_1_groupe_mots' => '1 grupo de palavras-chave', @@ -39,7 +41,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_groupe_important' => 'Grupo importante', 'info_modifier_mot' => 'Editar a palavra-chave:', 'info_mots_cles' => 'As palavras-chave', - 'info_mots_cles_association' => 'As palavras-chave deste grupo podem ser associadas:', + 'info_mots_cles_association' => 'As palavras-chave deste grupo podem ser associadas a:', 'info_nb_groupe_mots' => '@nb@ grupos de palavras-chave', 'info_oui_suppression_mot_cle' => 'Eu quero excluir definitivamente esta palavra-chave.', 'info_question_mots_cles' => 'Deseja utilizar palavras-chave no seu site?', @@ -67,7 +69,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // T 'texte_config_groupe_mots_cles' => 'Você deseja ativar a configuração avançada das palavras-chave, indicando, por exemplo, que se pode selecionar uma única palavra-chave por grupo, ou que um grupo é importante...?', 'texte_mots_cles' => 'As palavras-chave permitem criar links temáticos entre as suas matérias, independentemente de sua localização nas seções. Você poderá dessa forma enriquecer a navegação do seu site, utilizando essas propriedades para personalizar a apresentação das matérias nos seus templates.', - 'texte_mots_cles_dans_forum' => 'Você deseja permitir a utilização de palavras-chaves, selecionáveis pelos visitantes, nos fóruns do site público? (Atenção: esta opção é relativamente complexa de se utilizar corretamente.)', + 'texte_mots_cles_dans_forum' => 'Você deseja permitir a utilização de palavras-chave, selecionáveis pelos visitantes, nos fóruns do site público? (Atenção: esta opção é relativamente complexa de se utilizar corretamente.)', 'texte_nouveau_mot' => 'Nova palavra-chave', 'titre_config_groupe_mots_cles' => 'Configuração dos grupos de palavras-chave', 'titre_gauche_mots_edit' => 'PALAVRA-CHAVE NÚMERO:', @@ -80,5 +82,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_objets_lies_mot' => 'Vinculadas a esta palavra-chave:', 'titre_page_mots_tous' => 'Palavras-chave' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_qu.php b/www/plugins-dist/mots/lang/mots_qu.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_qu.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_ro.php b/www/plugins-dist/mots/lang/mots_ro.php index f9492b6f..b7f5b2fc 100644 --- a/www/plugins-dist/mots/lang/mots_ro.php +++ b/www/plugins-dist/mots/lang/mots_ro.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=ro // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -71,5 +73,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Grup nou', 'titre_page_mots_tous' => 'Cuvinte-cheie' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_ru.php b/www/plugins-dist/mots/lang/mots_ru.php index f7cdace1..b2d25638 100644 --- a/www/plugins-dist/mots/lang/mots_ru.php +++ b/www/plugins-dist/mots/lang/mots_ru.php @@ -3,17 +3,19 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // A 'avis_conseil_selection_mot_cle' => 'Выделить группу: данная группа будет визуально более заметной. Удобно использовать для обозначения важных групп ключей.', - 'avis_doublon_mot_cle' => 'Ключ с таким название уже существует. Вы уверенны, что хотите создать новый?', # MODIF + 'avis_doublon_mot_cle' => 'Ключ с таким название уже существует. Вы уверены, что хотите создать новый?', // B 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'Администраторы', - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'Автора', + 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'Авторы', 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'Посетители для комментариев на сайте', // C @@ -35,21 +37,21 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_changer_nom_groupe' => 'Название группы:', 'info_creation_mots_cles' => 'Создание и настройка ключей', 'info_dans_groupe' => 'В группе:', - 'info_delet_mots_cles' => 'Вы хотите удалить ключ @titre_mot@ (@type_mot@).Он связан с @texte_lie@. Подтвердите удаление: ', + 'info_delet_mots_cles' => 'Вы хотите удалить ключ @titre_mot@ (@type_mot@). Он связан с @texte_lie@. Подтвердите удаление: ', 'info_groupe_important' => 'Важная группа', 'info_modifier_mot' => 'Изменить ключ:', 'info_mots_cles' => 'Ключи', - 'info_mots_cles_association' => 'Ключи можно добавлять к:', + 'info_mots_cles_association' => 'Ключи этой группы можно добавлять к:', 'info_nb_groupe_mots' => '@nb@ групп ключей', 'info_oui_suppression_mot_cle' => 'Я хочу удалить ключ.', 'info_question_mots_cles' => 'Включить ключи на сайте?', 'info_qui_attribue_mot_cle' => 'Ключи к материалам могут добавлять:', - 'info_remplacer_mot' => 'Заменить "@titre@"', + 'info_remplacer_mot' => 'Заменить «@titre@»', 'info_retirer_mot' => 'Убрать ключ', 'info_retirer_mots' => 'Удалить все ключи', - 'info_rubriques_liees_mot' => 'Разделы с ключем', - 'info_selection_un_seul_mot_cle' => 'К материалу можно добавить только один ключ из этой группы.', - 'info_supprimer_mot' => 'удалить ключ', + 'info_rubriques_liees_mot' => 'Разделы с ключом', + 'info_selection_un_seul_mot_cle' => 'К материалу можно добавить только один ключ из этой группы.', + 'info_supprimer_mot' => 'удалить', 'info_titre_mot_cle' => 'Название ключа', 'info_un_mot' => 'Только один ключ', 'item_ajout_mots_cles' => 'Включить добавление ключей к комментариям на сайте', @@ -65,20 +67,18 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'logo_mot_cle' => 'ЛОГОТИП КЛЮЧА', // T - 'texte_config_groupe_mots_cles' => 'В настройках группы вы можете задавать к каким типам материалов можно добавлять ключи, выделять важные группы и ряд других настроек.', - 'texte_mots_cles' => 'Ключи - это возможность создать дополнительную навигацию между материалами сайта. Так же они используются для создания дополнительного функционала вашего сайта.', + 'texte_config_groupe_mots_cles' => 'В настройках группы вы можете задавать, к каким типам материалов можно добавлять ключи, выделять важные группы и ряд других настроек.', + 'texte_mots_cles' => 'Ключи - это возможность создать дополнительную навигацию между материалами сайта. Они также используются для создания дополнительного функционала вашего сайта.', 'texte_mots_cles_dans_forum' => 'Разрешить посетителям добавлять ключи к своим комментариям на сайте?', 'texte_nouveau_mot' => 'Новый ключ', 'titre_config_groupe_mots_cles' => 'Настройка групп ключей', 'titre_gauche_mots_edit' => 'НОМЕР КЛЮЧА:', - 'titre_groupe_mots' => 'Группы ключей', - 'titre_groupe_mots_numero' => 'НОМЕР ГРУППЫ :', + 'titre_groupe_mots' => 'Группа ключей', + 'titre_groupe_mots_numero' => 'НОМЕР ГРУППЫ:', 'titre_groupes_mots' => 'Группы ключей', 'titre_mots_cles_dans_forum' => 'Ключи для комментариев', 'titre_mots_tous' => 'Ключи', 'titre_nouveau_groupe' => 'Новая группа', - 'titre_objets_lies_mot' => 'Материалы с этим ключем :', + 'titre_objets_lies_mot' => 'Материалы с этим ключом:', 'titre_page_mots_tous' => 'Ключи' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_scn.php b/www/plugins-dist/mots/lang/mots_scn.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_scn.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_sk.php b/www/plugins-dist/mots/lang/mots_sk.php index 0b1fdd5d..2bfb3bb7 100644 --- a/www/plugins-dist/mots/lang/mots_sk.php +++ b/www/plugins-dist/mots/lang/mots_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -83,5 +85,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_objets_lies_mot' => 'Prepojené s týmto kľúčovým slovom:', 'titre_page_mots_tous' => 'Kľúčové slová' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_src.php b/www/plugins-dist/mots/lang/mots_src.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_src.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_sro.php b/www/plugins-dist/mots/lang/mots_sro.php deleted file mode 100644 index d29205b5..00000000 --- a/www/plugins-dist/mots/lang/mots_sro.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Parole chiave', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Rimuovere questa parola', # NEW - 'info_retirer_mots' => 'Rimuovere tutte le parole', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_sv.php b/www/plugins-dist/mots/lang/mots_sv.php index f18dd660..c2030560 100644 --- a/www/plugins-dist/mots/lang/mots_sv.php +++ b/www/plugins-dist/mots/lang/mots_sv.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=sv // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -63,5 +65,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_mots_tous' => 'Nyckelord', 'titre_nouveau_groupe' => 'Ny grupp' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_sw.php b/www/plugins-dist/mots/lang/mots_sw.php deleted file mode 100644 index aa7e9e0d..00000000 --- a/www/plugins-dist/mots/lang/mots_sw.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Keywords', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Remove this keyword', # NEW - 'info_retirer_mots' => 'Remove all keywords', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_ta.php b/www/plugins-dist/mots/lang/mots_ta.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_ta.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_tr.php b/www/plugins-dist/mots/lang/mots_tr.php index ebf0d0c6..c1eb88e1 100644 --- a/www/plugins-dist/mots/lang/mots_tr.php +++ b/www/plugins-dist/mots/lang/mots_tr.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=tr // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -67,5 +69,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Yeni grup', 'titre_page_mots_tous' => 'Anahtar sözcükler' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_ty.php b/www/plugins-dist/mots/lang/mots_ty.php deleted file mode 100644 index affe5371..00000000 --- a/www/plugins-dist/mots/lang/mots_ty.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Mots-clés', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Retirer ce mot', # NEW - 'info_retirer_mots' => 'Retirer tous les mots', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_uk.php b/www/plugins-dist/mots/lang/mots_uk.php new file mode 100644 index 00000000..a60000e4 --- /dev/null +++ b/www/plugins-dist/mots/lang/mots_uk.php @@ -0,0 +1,84 @@ + 'Виділити групу: дана група буде візуально більш помітною. Зручно використовувати для позначення важливих груп ключів.', + 'avis_doublon_mot_cle' => 'Ключ з такою назвою вже існує. Ви впевнені, що бажаєте створити новий?', + + // B + 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'адміністратори', + 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'редактори', + 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'відвідувачі загальнодоступного сайту, якщо вони відправляють повідомлення в форум.', + + // C + 'creer_et_associer_un_mot' => 'Створити і додати ключ', + + // I + 'icone_creation_groupe_mots' => 'Створити нову групу ключів', + 'icone_creation_mots_cles' => 'Новий ключ', + 'icone_modif_groupe_mots' => 'Змінити групу ключів', + 'icone_modifier_mot' => 'Змінити цей ключ', + 'icone_mots_cles' => 'Ключі', + 'icone_supprimer_groupe_mots' => 'Видалити цю групу', + 'icone_voir_groupe_mots' => 'Переглянути групу', + 'icone_voir_tous_mots_cles' => 'Показати усі ключі', + 'info_1_groupe_mots' => '1 група ключів', + 'info_articles_lies_mot' => 'Статті з ключем', + 'info_aucun_groupe_mots' => 'Нема груп ключів', + 'info_aucun_mot_cle' => 'Нема ключів', + 'info_changer_nom_groupe' => 'Поміняти назву цієї групи:', + 'info_creation_mots_cles' => 'Створіть та налаштуйте тут ключі сайту ', + 'info_dans_groupe' => 'У групі:', + 'info_delet_mots_cles' => 'Ви хочете видалити ключ @titre_mot@ (@type_mot@). Він пов’язаний з @texte_lie@. Підтвердіть видалення: ', + 'info_groupe_important' => 'Важлива група', + 'info_modifier_mot' => 'Змінити ключ:', + 'info_mots_cles' => 'Ключі', + 'info_mots_cles_association' => 'Ключі цієї групи можна додавати до:', + 'info_nb_groupe_mots' => '@nb@ груп ключових слів', + 'info_oui_suppression_mot_cle' => 'Я хочу видалити ключ.', + 'info_question_mots_cles' => 'Включити ключі на сайті?', + 'info_qui_attribue_mot_cle' => 'Ключі з цієї групи до матеріалів можуть додавати:', + 'info_remplacer_mot' => 'Замінити „@titre@”', + 'info_retirer_mot' => 'Видалити ключ', + 'info_retirer_mots' => 'Видалити всі ключі', + 'info_rubriques_liees_mot' => 'Рубрики з ключовими словами', + 'info_selection_un_seul_mot_cle' => 'До матеріалу можна додати лише один ключ з цієї групи.', + 'info_supprimer_mot' => 'видалити ключ', + 'info_titre_mot_cle' => 'Назва ключа', + 'info_un_mot' => 'Тільки один ключ', + 'item_ajout_mots_cles' => 'Увімкнути додання ключів до коментарів на сайті', + 'item_non_ajout_mots_cles' => 'Вимкнути додання ключів до коментарів на сайті', + 'item_non_utiliser_config_groupe_mots_cles' => 'Вимкнути налаштування груп ключів', + 'item_non_utiliser_mots_cles' => 'Вимкнути ключі і групи ключів', + 'item_utiliser_config_groupe_mots_cles' => 'Увімкнути налашування груп ключів', + 'item_utiliser_mots_cles' => 'Увімкнути ключі і групи ключів', + + // L + 'lien_ajouter_mot' => 'Додати ключ', + 'logo_groupe' => 'ЛОГОТИП ГРУПИ', + 'logo_mot_cle' => 'ЛОГОТИП КЛЮЧА', + + // T + 'texte_config_groupe_mots_cles' => 'В налаштуваннях групи ви можете задавати, до яких типів матеріалів можна додавати ключі, виділяти важливі групи і ряд інших налаштувань.', + 'texte_mots_cles' => 'Ключі - це можливість створити додаткову навігацію між матеріалами сайту. Також вони використовуються для створення додаткового функціоналу вашого сайту.', + 'texte_mots_cles_dans_forum' => 'Дозволити відвідувачам додавати ключі до своїх коментарів на сайті?', + 'texte_nouveau_mot' => 'Новий ключ', + 'titre_config_groupe_mots_cles' => 'Налаштування груп ключів', + 'titre_gauche_mots_edit' => 'НОМЕР КЛЮЧА:', + 'titre_groupe_mots' => 'Групи ключів', + 'titre_groupe_mots_numero' => 'НОМЕР ГРУПИ:', + 'titre_groupes_mots' => 'Групи ключів', + 'titre_mots_cles_dans_forum' => 'Ключі для коментарів', + 'titre_mots_tous' => 'Ключі', + 'titre_nouveau_groupe' => 'Нова група', + 'titre_objets_lies_mot' => 'Матеріали з цим ключем:', + 'titre_page_mots_tous' => 'Ключі' +); diff --git a/www/plugins-dist/mots/lang/mots_ur.php b/www/plugins-dist/mots/lang/mots_ur.php deleted file mode 100644 index aa7e9e0d..00000000 --- a/www/plugins-dist/mots/lang/mots_ur.php +++ /dev/null @@ -1,91 +0,0 @@ - 'Groupe important : il est fortement conseillé de sélectionner un mot-clé dans ce groupe.', # NEW - 'avis_doublon_mot_cle' => 'Un mot existe deja avec ce titre. Êtes vous sûr de vouloir créer le même ?', # NEW - - // B - 'bouton_checkbox_qui_attribue_mot_cle_administrateurs' => 'les administrateurs du site', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_redacteurs' => 'les rédacteurs', # NEW - 'bouton_checkbox_qui_attribue_mot_cle_visiteurs' => 'les visiteurs du site public lorsqu\'ils postent un message dans un forum.', # NEW - - // C - 'creer_et_associer_un_mot' => 'Créér et associer un mot-clé', # NEW - - // I - 'icone_creation_groupe_mots' => 'Créer un nouveau groupe de mots', # NEW - 'icone_creation_mots_cles' => 'Créer un nouveau mot-clé', # NEW - 'icone_modif_groupe_mots' => 'Modifier ce groupe de mots', # NEW - 'icone_modifier_mot' => 'Modifier ce mot-clé', # NEW - 'icone_mots_cles' => 'Keywords', # NEW - 'icone_supprimer_groupe_mots' => 'Supprimer ce groupe', # NEW - 'icone_voir_groupe_mots' => 'Voir ce groupe de mots', # NEW - 'icone_voir_tous_mots_cles' => 'Voir tous les mots-clés', # NEW - 'info_1_groupe_mots' => '1 groupe de mots', # NEW - 'info_articles_lies_mot' => 'Les articles liés à ce mot-clé', # NEW - 'info_aucun_groupe_mots' => 'Aucun groupe de mots', # NEW - 'info_aucun_mot_cle' => 'Aucun mot-clé', # NEW - 'info_changer_nom_groupe' => 'Changer le nom de ce groupe :', # NEW - 'info_creation_mots_cles' => 'Créez et configurez ici les mots-clés du site', # NEW - 'info_dans_groupe' => 'Dans le groupe :', # NEW - 'info_delet_mots_cles' => 'Vous avez demandé à supprimer le mot-clé -@titre_mot@ (@type_mot@). Ce mot-clé étant lié à -@texte_lie@ vous devez confirmer cette décision :', # NEW - 'info_groupe_important' => 'Groupe important', # NEW - 'info_modifier_mot' => 'Modifier le mot-clé :', # NEW - 'info_mots_cles' => 'Les mots-clés', # NEW - 'info_mots_cles_association' => 'Les mots-clés de ce groupe peuvent être associés :', # NEW - 'info_nb_groupe_mots' => '@nb@ groupes de mots', # NEW - 'info_oui_suppression_mot_cle' => 'je veux supprimer définitivement ce mot-clé.', # NEW - 'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?', # NEW - 'info_qui_attribue_mot_cle' => 'Les mots de ce groupe peuvent être attribués par :', # NEW - 'info_remplacer_mot' => 'Remplacer "@titre@"', # NEW - 'info_retirer_mot' => 'Remove this keyword', # NEW - 'info_retirer_mots' => 'Remove all keywords', # NEW - 'info_rubriques_liees_mot' => 'Les rubriques liées à ce mot-clé', # NEW - 'info_selection_un_seul_mot_cle' => 'On ne peut sélectionner qu\'un seul mot-clé à la fois dans ce groupe.', # NEW - 'info_supprimer_mot' => 'supprimer ce mot', # NEW - 'info_titre_mot_cle' => 'Nom ou titre du mot-clé', # NEW - 'info_un_mot' => 'Un seul mot à la fois', # NEW - 'item_ajout_mots_cles' => 'Autoriser l\'ajout de mots-clés aux forums', # NEW - 'item_non_ajout_mots_cles' => 'Interdire l\'utilisation des mots-clés dans les forums', # NEW - 'item_non_utiliser_config_groupe_mots_cles' => 'Ne pas utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_non_utiliser_mots_cles' => 'Ne pas utiliser les mots-clés', # NEW - 'item_utiliser_config_groupe_mots_cles' => 'Utiliser la configuration avancée des groupes de mots-clés', # NEW - 'item_utiliser_mots_cles' => 'Utiliser les mots-clés', # NEW - - // L - 'lien_ajouter_mot' => 'Ajouter ce mot-clé', # NEW - 'logo_groupe' => 'LOGO DE CE GROUPE', # NEW - 'logo_mot_cle' => 'LOGO DU MOT-CLÉ', # NEW - - // T - 'texte_config_groupe_mots_cles' => 'Souhaitez-vous activer la configuration avancée des mots-clés, - en indiquant par exemple qu\'on peut sélectionner un mot unique - par groupe, qu\'un groupe est important... ?', # NEW - 'texte_mots_cles' => 'Les mots-clés permettent de créer des liens thématiques entre vos articles - indépendamment de leur placement dans des rubriques. Vous pouvez ainsi - enrichir la navigation de votre site, voire utiliser ces propriétés - pour personnaliser la présentation des articles dans vos squelettes.', # NEW - 'texte_mots_cles_dans_forum' => 'Souhaitez-vous permettre l\'utilisation de mots-clés sélectionnables par les visiteurs dans les forums du site public ? (Attention : cette option est relativement complexe à utiliser correctement.)', # NEW - 'texte_nouveau_mot' => 'Nouveau mot', # NEW - 'titre_config_groupe_mots_cles' => 'Configuration des groupes de mots-clés', # NEW - 'titre_gauche_mots_edit' => 'MOT NUMÉRO :', # NEW - 'titre_groupe_mots' => 'Groupe de mots-clés', # NEW - 'titre_groupe_mots_numero' => 'GROUPE DE MOTS NUMÉRO :', # NEW - 'titre_groupes_mots' => 'Groupes de mots-clés', # NEW - 'titre_mots_cles_dans_forum' => 'Mots-clés dans les forums du site public', # NEW - 'titre_mots_tous' => 'Les mots-clés', # NEW - 'titre_nouveau_groupe' => 'Nouveau groupe', # NEW - 'titre_objets_lies_mot' => 'Liés à ce mot-clé :', # NEW - 'titre_page_mots_tous' => 'Mots-clés' # NEW -); - -?> diff --git a/www/plugins-dist/mots/lang/mots_vi.php b/www/plugins-dist/mots/lang/mots_vi.php index b6e4c5ab..a14602f1 100644 --- a/www/plugins-dist/mots/lang/mots_vi.php +++ b/www/plugins-dist/mots/lang/mots_vi.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=vi // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -64,5 +66,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => 'Nhóm mới', 'titre_page_mots_tous' => 'Từ then chốt' ); - -?> diff --git a/www/plugins-dist/mots/lang/mots_zh.php b/www/plugins-dist/mots/lang/mots_zh.php index db687181..786b051e 100644 --- a/www/plugins-dist/mots/lang/mots_zh.php +++ b/www/plugins-dist/mots/lang/mots_zh.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/mots?lang_cible=zh // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -67,5 +69,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_nouveau_groupe' => '新组', 'titre_page_mots_tous' => '关键词' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots.xml b/www/plugins-dist/mots/lang/paquet-mots.xml index 6e116423..7e6b105e 100644 --- a/www/plugins-dist/mots/lang/paquet-mots.xml +++ b/www/plugins-dist/mots/lang/paquet-mots.xml @@ -19,15 +19,22 @@ + + + - + + + + + @@ -35,9 +42,13 @@ + + + + diff --git a/www/plugins-dist/mots/lang/paquet-mots_ar.php b/www/plugins-dist/mots/lang/paquet-mots_ar.php index 681a071f..829a514d 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_ar.php +++ b/www/plugins-dist/mots/lang/paquet-mots_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-mots?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mots_description' => 'المفاتيح ومجموعات المفاتيح', 'mots_slogan' => 'إدارة المفاتيح ومجموعات المفاتيح في SPIP' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_de.php b/www/plugins-dist/mots/lang/paquet-mots_de.php index 820443b3..3fb8075b 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_de.php +++ b/www/plugins-dist/mots/lang/paquet-mots_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-mots?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mots_description' => 'Schlagworte und Schlagwortgruppen', 'mots_slogan' => 'Verwaltung von Schlagworten und Schlagwortgruppen mit SPIP' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_en.php b/www/plugins-dist/mots/lang/paquet-mots_en.php index e5a88eb7..6fda795a 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_en.php +++ b/www/plugins-dist/mots/lang/paquet-mots_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-mots?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mots_description' => 'Keywords and keywords groups', 'mots_slogan' => 'Management of keywords and keywords groups in SPIP' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_es.php b/www/plugins-dist/mots/lang/paquet-mots_es.php index e8ae042f..d0b6cfb2 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_es.php +++ b/www/plugins-dist/mots/lang/paquet-mots_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-mots?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mots_description' => 'Palabras clave y grupos de palabras clave', 'mots_slogan' => 'Administración de las palabras clave y los grupos de palabras clave en SPIP' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_fa.php b/www/plugins-dist/mots/lang/paquet-mots_fa.php index 93a8d4e9..f122ff1e 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_fa.php +++ b/www/plugins-dist/mots/lang/paquet-mots_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-mots?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mots_description' => 'واژه‌ها و گروه‌ واژه‌ها', 'mots_slogan' => 'مديريت واژه‌ها و گروه‌واژه‌ها در اسپيپ' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_fr.php b/www/plugins-dist/mots/lang/paquet-mots_fr.php index a13065e5..d46abe80 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_fr.php +++ b/www/plugins-dist/mots/lang/paquet-mots_fr.php @@ -1,7 +1,9 @@ 'Mots et Groupes de mots', 'mots_slogan' => 'Gestion des mots et groupes de mots dans SPIP' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_fr_fem.php b/www/plugins-dist/mots/lang/paquet-mots_fr_fem.php index edc4b508..9aa7dc52 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_fr_fem.php +++ b/www/plugins-dist/mots/lang/paquet-mots_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-mots?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mots_description' => 'Mots-clef et Groupes de mots-clef', 'mots_slogan' => 'Gestion des mots-clef et groupes de mots-clef dans SPIP' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_fr_tu.php b/www/plugins-dist/mots/lang/paquet-mots_fr_tu.php new file mode 100644 index 00000000..975edbf9 --- /dev/null +++ b/www/plugins-dist/mots/lang/paquet-mots_fr_tu.php @@ -0,0 +1,15 @@ + 'Mots et Groupes de mots', + 'mots_slogan' => 'Gestion des mots et groupes de mots dans SPIP' +); diff --git a/www/plugins-dist/mots/lang/paquet-mots_it.php b/www/plugins-dist/mots/lang/paquet-mots_it.php index e457a52a..7f629adb 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_it.php +++ b/www/plugins-dist/mots/lang/paquet-mots_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-mots?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mots_description' => 'Parole e Gruppi di parole', 'mots_slogan' => 'Gestione delle parole e dei gruppi di parole di SPIP' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_lb.php b/www/plugins-dist/mots/lang/paquet-mots_lb.php index 31afe237..edadd374 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_lb.php +++ b/www/plugins-dist/mots/lang/paquet-mots_lb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-mots?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mots_description' => 'Schlësselwierder a Gruppen', 'mots_slogan' => 'Gestioun vun de Schlësselwierder a Gruppen am SPIP' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_nl.php b/www/plugins-dist/mots/lang/paquet-mots_nl.php index 5b52a4ff..08d1eeca 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_nl.php +++ b/www/plugins-dist/mots/lang/paquet-mots_nl.php @@ -3,13 +3,13 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-mots?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // M 'mots_description' => 'Terfwoorden en groepen van trefwoorden', - 'mots_slogan' => 'Beheer van terfwoorden en groepen van trefwoorden in SPIP' + 'mots_slogan' => 'Beheer van trefwoorden en groepen van trefwoorden in SPIP' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_oc_ni_mis.php b/www/plugins-dist/mots/lang/paquet-mots_oc_ni_mis.php new file mode 100644 index 00000000..6f78cb6f --- /dev/null +++ b/www/plugins-dist/mots/lang/paquet-mots_oc_ni_mis.php @@ -0,0 +1,15 @@ + 'Mot e Group de mot', + 'mots_slogan' => 'Gestioun dei mot e group de mot en SPIP' +); diff --git a/www/plugins-dist/mots/lang/paquet-mots_pt.php b/www/plugins-dist/mots/lang/paquet-mots_pt.php index 91555bb0..e1fa62c0 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_pt.php +++ b/www/plugins-dist/mots/lang/paquet-mots_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-mots?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mots_description' => 'Palavras e grupos de palavras', 'mots_slogan' => 'Gestão de palavras e grupos de palavras em SPIP' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_pt_br.php b/www/plugins-dist/mots/lang/paquet-mots_pt_br.php index 19bb900a..71d95e66 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_pt_br.php +++ b/www/plugins-dist/mots/lang/paquet-mots_pt_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-mots?lang_cible=pt_br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mots_description' => 'Palavras-chave e seus grupos', 'mots_slogan' => 'Gerenciamento de palavras-chave e grupos de palavras chave do SPIP' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_ru.php b/www/plugins-dist/mots/lang/paquet-mots_ru.php index 12b80eba..4b6514d8 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_ru.php +++ b/www/plugins-dist/mots/lang/paquet-mots_ru.php @@ -3,13 +3,13 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-mots?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // M 'mots_description' => 'Ключи и группы ключей', - 'mots_slogan' => 'Настройка групп ключей и ключей в SPIP' + 'mots_slogan' => 'Настройка ключей и групп ключей в SPIP' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_sk.php b/www/plugins-dist/mots/lang/paquet-mots_sk.php index f1e9d5a9..2f767663 100644 --- a/www/plugins-dist/mots/lang/paquet-mots_sk.php +++ b/www/plugins-dist/mots/lang/paquet-mots_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-mots?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'mots_description' => 'Kľúčové slová a skupiny kľúčových slov', 'mots_slogan' => 'Riadenie kľúčových slov a skupín kľúčových slov v SPIPe' ); - -?> diff --git a/www/plugins-dist/mots/lang/paquet-mots_uk.php b/www/plugins-dist/mots/lang/paquet-mots_uk.php new file mode 100644 index 00000000..75da0379 --- /dev/null +++ b/www/plugins-dist/mots/lang/paquet-mots_uk.php @@ -0,0 +1,15 @@ + 'Ключі та групи ключів', + 'mots_slogan' => 'Управління ключами та їх групами в SPIP' +); diff --git a/www/plugins-dist/mots/mots_administrations.php b/www/plugins-dist/mots/mots_administrations.php index be8e11d8..ffc3568a 100644 --- a/www/plugins-dist/mots/mots_administrations.php +++ b/www/plugins-dist/mots/mots_administrations.php @@ -10,65 +10,76 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Fichier gérant l'installation et désinstallation du plugin + * + * @package SPIP\Mots\Installation + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Installation/maj des tables mots et groupes de mots... * * @param string $nom_meta_base_version + * Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP * @param string $version_cible + * Version du schéma de données dans ce plugin (déclaré dans paquet.xml) + * @return void */ -function mots_upgrade($nom_meta_base_version,$version_cible){ +function mots_upgrade($nom_meta_base_version, $version_cible) { // cas particulier : // si plugin pas installe mais que la table existe // considerer que c'est un upgrade depuis v 1.0.0 // pour gerer l'historique des installations SPIP <=2.1 - if (!isset($GLOBALS['meta'][$nom_meta_base_version])){ - $trouver_table = charger_fonction('trouver_table','base'); + if (!isset($GLOBALS['meta'][$nom_meta_base_version])) { + $trouver_table = charger_fonction('trouver_table', 'base'); if ($desc = $trouver_table('spip_mots') - AND isset($desc['exist']) AND $desc['exist'] - AND $desc = $trouver_table('spip_mots_articles') - AND isset($desc['exist']) AND $desc['exist']){ - ecrire_meta($nom_meta_base_version,'1.0.0'); + and isset($desc['exist']) and $desc['exist'] + and $desc = $trouver_table('spip_mots_articles') + and isset($desc['exist']) and $desc['exist'] + ) { + ecrire_meta($nom_meta_base_version, '1.0.0'); } // si pas de table en base, on fera une simple creation de base } $maj = array(); $maj['create'] = array( - array('maj_tables',array('spip_groupes_mots','spip_mots','spip_mots_liens')), + array('maj_tables', array('spip_groupes_mots', 'spip_mots', 'spip_mots_liens')), ); $maj['1.0.0'] = array( - array('maj_tables',array('spip_groupes_mots','spip_mots','spip_mots_liens')), + array('maj_tables', array('spip_groupes_mots', 'spip_mots', 'spip_mots_liens')), ); include_spip('maj/svn10000'); $maj['2.0.0'] = array( - array('maj_liens','mot'), // creer la table liens - array('maj_liens','mot','breve'), - array('sql_drop_table',"spip_mots_breves"), - array('maj_liens','mot','rubrique'), - array('sql_drop_table',"spip_mots_rubriques"), - array('maj_liens','mot','syndic'), - array('sql_drop_table',"spip_mots_syndic"), - array('maj_liens','mot','forum'), - array('sql_drop_table',"spip_mots_forum"), - array('maj_liens','mot','auteur'), - array('sql_drop_table',"spip_mots_auteurs"), - array('maj_liens','mot','document'), - array('sql_drop_table',"spip_mots_documents"), - array('maj_liens','mot','article'), - array('sql_drop_table',"spip_mots_articles"), + array('maj_liens', 'mot'), // creer la table liens + array('maj_liens', 'mot', 'breve'), + array('sql_drop_table', 'spip_mots_breves'), + array('maj_liens', 'mot', 'rubrique'), + array('sql_drop_table', 'spip_mots_rubriques'), + array('maj_liens', 'mot', 'syndic'), + array('sql_drop_table', 'spip_mots_syndic'), + array('maj_liens', 'mot', 'forum'), + array('sql_drop_table', 'spip_mots_forum'), + array('maj_liens', 'mot', 'auteur'), + array('sql_drop_table', 'spip_mots_auteurs'), + array('maj_liens', 'mot', 'document'), + array('sql_drop_table', 'spip_mots_documents'), + array('maj_liens', 'mot', 'article'), + array('sql_drop_table', 'spip_mots_articles') ); $maj['2.0.1'] = array( - array('sql_updateq',"spip_mots_liens",array('objet'=>'site'),"objet='syndic'"), + array('sql_updateq', 'spip_mots_liens', array('objet' => 'site'), "objet='syndic'"), ); $maj['2.1.0'] = array( - array('sql_alter',"TABLE spip_mots_liens ADD INDEX id_objet (id_objet)"), - array('sql_alter',"TABLE spip_mots_liens ADD INDEX objet (objet)"), + array('sql_alter', 'TABLE spip_mots_liens ADD INDEX id_objet (id_objet)'), + array('sql_alter', 'TABLE spip_mots_liens ADD INDEX objet (objet)') ); $maj['2.1.1'] = array( - array('sql_alter',"TABLE spip_mots ADD INDEX id_groupe (id_groupe)") + array('sql_alter', 'TABLE spip_mots ADD INDEX id_groupe (id_groupe)') ); include_spip('base/upgrade'); @@ -77,19 +88,19 @@ function mots_upgrade($nom_meta_base_version,$version_cible){ /** - * Desinstallation/suppression des tables mots et groupes de mots + * Désinstallation/suppression des tables mots et groupes de mots * * @param string $nom_meta_base_version + * Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP + * @return void */ function mots_vider_tables($nom_meta_base_version) { - sql_drop_table("spip_mots"); - sql_drop_table("spip_groupes_mots"); - sql_drop_table("spip_mots_liens"); - + sql_drop_table('spip_mots'); + sql_drop_table('spip_groupes_mots'); + sql_drop_table('spip_mots_liens'); + effacer_meta('articles_mots'); effacer_meta('config_precise_groupes'); - + effacer_meta($nom_meta_base_version); } - -?> diff --git a/www/plugins-dist/mots/mots_autoriser.php b/www/plugins-dist/mots/mots_autoriser.php index 9a5eca4d..ead47e3b 100644 --- a/www/plugins-dist/mots/mots_autoriser.php +++ b/www/plugins-dist/mots/mots_autoriser.php @@ -11,54 +11,65 @@ \***************************************************************************/ /** - * Définit les autorisations du plugin mots + * Définit les autorisations du plugin mots * - * @package Mots\Autorisations -**/ -if (!defined('_ECRIRE_INC_VERSION')) return; + * @package SPIP\Mots\Autorisations + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -/** Fonction d'appel pour le pipeline */ -function mots_autoriser(){} +/** + * Fonction d'appel pour le pipeline + * + * @pipeline autoriser + */ +function mots_autoriser() { +} /** - * Autorisation de voir un élément de menu + * Autorisation de voir un élément de menu * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon -**/ -function autoriser_mots_menu_dist($faire, $type, $id, $qui, $opt){ - if ($qui['statut'] == '0minirezo') - return ($GLOBALS['meta']['articles_mots'] != 'non' OR sql_countsel('spip_groupes_mots')); - $where = ""; - if ($qui['statut']=='1comite') + **/ +function autoriser_mots_menu_dist($faire, $type, $id, $qui, $opt) { + if ($qui['statut'] == '0minirezo') { + return ($GLOBALS['meta']['articles_mots'] != 'non' or sql_countsel('spip_groupes_mots')); + } + $where = ''; + if ($qui['statut'] == '1comite') { $where = "comite='oui' OR forum='oui'"; - if ($qui['statut']=='6forum') + } + if ($qui['statut'] == '6forum') { $where = "forum='oui'"; + } + return ($where - AND $GLOBALS['meta']['articles_mots'] != 'non' - AND sql_countsel('spip_groupes_mots',$where)); + and $GLOBALS['meta']['articles_mots'] != 'non' + and sql_countsel('spip_groupes_mots', $where)); } /** * Autorisation de voir le bouton d'accès rapide à la création d'un mot clé * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon -**/ -function autoriser_motcreer_menu_dist($faire, $type, $id, $qui, $opt){ + **/ +function autoriser_motcreer_menu_dist($faire, $type, $id, $qui, $opt) { // [fixme] Meta 'article_mots' mal nommée maintenant // car elle désigne l'activation ou non des mots clés, quelque soit l'objet. return ($GLOBALS['meta']['articles_mots'] != 'non' - AND sql_countsel('spip_groupes_mots') - AND autoriser('creer','mot',null,$qui,$opt)); + and sql_countsel('spip_groupes_mots') + and autoriser('creer', 'mot', null, $qui, $opt)); } @@ -69,19 +80,24 @@ function autoriser_motcreer_menu_dist($faire, $type, $id, $qui, $opt){ * qui gère cela par type d'auteur (administrateur, rédacteurs, visiteurs) * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon -**/ + **/ function autoriser_groupemots_voir_dist($faire, $type, $id, $qui, $opt) { - if ($qui['statut'] == '0minirezo') return true; - $acces = sql_fetsel("comite,forum", "spip_groupes_mots", "id_groupe=".intval($id)); - if ($qui['statut']=='1comite' AND ($acces['comite'] == 'oui' OR $acces['forum'] == 'oui')) + if ($qui['statut'] == '0minirezo') { return true; - if ($qui['statut']=='6forum' AND $acces['forum'] == 'oui') + } + $acces = sql_fetsel('comite,forum', 'spip_groupes_mots', 'id_groupe=' . intval($id)); + if ($qui['statut'] == '1comite' and ($acces['comite'] == 'oui' or $acces['forum'] == 'oui')) { return true; + } + if ($qui['statut'] == '6forum' and $acces['forum'] == 'oui') { + return true; + } + return false; } @@ -89,16 +105,16 @@ function autoriser_groupemots_voir_dist($faire, $type, $id, $qui, $opt) { * Autorisation de créer un groupe de mots * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon -**/ + **/ function autoriser_groupemots_creer_dist($faire, $type, $id, $qui, $opt) { return $qui['statut'] == '0minirezo' - AND !$qui['restreint']; + and !$qui['restreint']; } @@ -108,16 +124,16 @@ function autoriser_groupemots_creer_dist($faire, $type, $id, $qui, $opt) { * Cela inclut également l'ajout ou modification des mots lui appartenant * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon -**/ + **/ function autoriser_groupemots_modifier_dist($faire, $type, $id, $qui, $opt) { return - $qui['statut'] == '0minirezo' AND !$qui['restreint'] - AND autoriser('voir','groupemots',$id,$qui,$opt); + $qui['statut'] == '0minirezo' and !$qui['restreint'] + and autoriser('voir', 'groupemots', $id, $qui, $opt); } @@ -125,40 +141,42 @@ function autoriser_groupemots_modifier_dist($faire, $type, $id, $qui, $opt) { * Autorisation de supprimer un groupe de mots * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon -**/ + **/ function autoriser_groupemots_supprimer_dist($faire, $type, $id, $qui, $opt) { - if (!autoriser('modifier','groupemots',$id)) + if (!autoriser('modifier', 'groupemots', $id)) { return false; - return sql_countsel('spip_mots','id_groupe='.intval($id))?false:true; + } + + return sql_countsel('spip_mots', 'id_groupe=' . intval($id)) ? false : true; } /** * Autorisation de modifier un mot * * Il faut avoir le droit de modifier le groupe parent - * + * * Note : passer l'id_groupe dans le tableau d'option * permet de gagner du CPU et une requête SQL (c'est ce que fait l'espace privé) - * + * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon -**/ + **/ function autoriser_mot_modifier_dist($faire, $type, $id, $qui, $opt) { return - isset($opt['id_groupe']) - ? autoriser('modifier', 'groupemots', $opt['id_groupe'], $qui, $opt) - : ( - $t = sql_getfetsel("id_groupe", "spip_mots", "id_mot=".intval($id)) - AND autoriser('modifier', 'groupemots', $t, $qui, $opt) + isset($opt['id_groupe']) + ? autoriser('modifier', 'groupemots', $opt['id_groupe'], $qui, $opt) + : ( + $t = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot=' . intval($id)) + and autoriser('modifier', 'groupemots', $t, $qui, $opt) ); } @@ -170,34 +188,39 @@ function autoriser_mot_modifier_dist($faire, $type, $id, $qui, $opt) { * * Si l'id_groupe est passé en option, * vérifie également que l'auteur a le droit de modifier ce groupe - * + * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon -**/ + **/ function autoriser_mot_creer_dist($faire, $type, $id, $qui, $opt) { - if ($qui['statut'] != '0minirezo' OR $qui['restreint']) + if ($qui['statut'] != '0minirezo' or $qui['restreint']) { return false; + } $where = ''; // si objet associe, verifier qu'un groupe peut etre associe // a la table correspondante if (isset($opt['associer_objet']) - AND $associer_objet = $opt['associer_objet']){ - if (!preg_match(',^(\w+)\|[0-9]+$,',$associer_objet,$match)) + and $associer_objet = $opt['associer_objet'] + ) { + if (!preg_match(',^(\w+)\|[0-9]+$,', $associer_objet, $match)) { return false; - $where = "tables_liees REGEXP '(^|,)".addslashes(table_objet($match[1]))."($|,)'"; + } + $where = "tables_liees REGEXP '(^|,)" . addslashes(table_objet($match[1])) . "($|,)'"; } // si pas de groupe de mot qui colle, pas le droit - if (!sql_countsel('spip_groupes_mots',$where)) + if (!sql_countsel('spip_groupes_mots', $where)) { return false; + } + + if (isset($opt['id_groupe'])) { + return autoriser('modifier', 'groupemots', $opt['id_groupe']); + } - if (isset($opt['id_groupe'])) - return autoriser('modifier','groupemots',$opt['id_groupe']); - return true; } @@ -207,17 +230,18 @@ function autoriser_mot_creer_dist($faire, $type, $id, $qui, $opt) { * Par défaut : pouvoir créer un mot dans le groupe * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon -**/ + **/ function autoriser_mot_supprimer_dist($faire, $type, $id, $qui, $opt) { // On cherche le groupe du mot - $id_groupe = $opt['id_groupe'] ? $opt['id_groupe'] : sql_getfetsel('id_groupe', 'spip_mots', 'id_mot = '.intval($id)); - - return autoriser('creer', 'mot', $id, $qui, array('id_groupe'=>$id_groupe)); + $id_groupe = $opt['id_groupe'] ? + $opt['id_groupe'] : sql_getfetsel('id_groupe', 'spip_mots', 'id_mot = ' . intval($id)); + + return autoriser('creer', 'mot', $id, $qui, array('id_groupe' => $id_groupe)); } @@ -230,72 +254,80 @@ function autoriser_mot_supprimer_dist($faire, $type, $id, $qui, $opt) { * On interdit aussi d'associer des mots à d'autres mots ou groupes de mots * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon */ -function autoriser_associermots_dist($faire,$type,$id,$qui,$opt){ +function autoriser_associermots_dist($faire, $type, $id, $qui, $opt) { // jamais de mots sur des mots - if ($type=='mot') return false; - if ($type=='groupemots') return false; - $droit = substr($qui['statut'],1); + if ($type == 'mot') { + return false; + } + if ($type == 'groupemots') { + return false; + } + $droit = substr($qui['statut'], 1); - if (!isset($opt['groupe_champs']) AND !isset($opt['id_groupe'])){ + if (!isset($opt['groupe_champs']) and !isset($opt['id_groupe'])) { // chercher si un groupe est autorise pour mon statut // et pour la table demandee $table = addslashes(table_objet($type)); - if (sql_countsel('spip_groupes_mots',"tables_liees REGEXP '(^|,)$table($|,)' AND ".addslashes($droit)."='oui'")) + if (sql_countsel('spip_groupes_mots', "tables_liees REGEXP '(^|,)$table($|,)' AND " . addslashes($droit) . "='oui'")) { return true; - } - // cas d'un groupe en particulier + } + } // cas d'un groupe en particulier else { // on recupere les champs du groupe s'ils ne sont pas passes en opt - if (!isset($opt['groupe_champs'])){ - if (!$id_groupe = $opt['id_groupe']) + if (!isset($opt['groupe_champs'])) { + if (!$id_groupe = $opt['id_groupe']) { return false; + } include_spip('base/abstract_sql'); - $opt['groupe_champs'] = sql_fetsel("*", "spip_groupes_mots", "id_groupe=".intval($id_groupe)); + $opt['groupe_champs'] = sql_fetsel('*', 'spip_groupes_mots', 'id_groupe=' . intval($id_groupe)); } $droit = $opt['groupe_champs'][$droit]; return ($droit == 'oui') - AND + and // on verifie que l'objet demande est bien dans les tables liees in_array( table_objet($type), explode(',', $opt['groupe_champs']['tables_liees']) ); } + return false; } - /** * Autorisation d'affichier le sélecteur de mots - * + * * Vérifie le droit d'afficher le selecteur de mots * pour un groupe de mot donné, dans un objet / id_objet donné * * C'est fonction de la configuration du groupe de mots. * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon */ -function autoriser_groupemots_afficherselecteurmots_dist($faire,$type,$id,$qui,$opt){ +function autoriser_groupemots_afficherselecteurmots_dist($faire, $type, $id, $qui, $opt) { if (!isset($opt['minirezo']) || !isset($opt['comite'])) { $i = sql_fetsel( array('minirezo', 'comite'), 'spip_groupes_mots', - 'id_groupe=' . intval($id)); - if (!$i) return false; # le groupe n'existe pas + 'id_groupe=' . intval($id) + ); + if (!$i) { + return false; + } # le groupe n'existe pas $admin = $i['minirezo']; $redac = $i['comite']; } else { @@ -303,8 +335,12 @@ function autoriser_groupemots_afficherselecteurmots_dist($faire,$type,$id,$qui,$ $redac = $opt['comite']; } $statuts = array(); - if ($admin == 'oui') $statuts[] = '0minirezo'; - if ($redac == 'oui') $statuts[] = '1comite'; + if ($admin == 'oui') { + $statuts[] = '0minirezo'; + } + if ($redac == 'oui') { + $statuts[] = '1comite'; + } return in_array($qui['statut'], $statuts); } @@ -312,30 +348,28 @@ function autoriser_groupemots_afficherselecteurmots_dist($faire,$type,$id,$qui,$ /** * Autorisation d'affichier le formulaire de logo - * + * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon */ -function autoriser_mot_iconifier_dist($faire,$type,$id,$qui,$opt){ - return (($qui['statut'] == '0minirezo') AND !$qui['restreint']); +function autoriser_mot_iconifier_dist($faire, $type, $id, $qui, $opt) { + return (($qui['statut'] == '0minirezo') and !$qui['restreint']); } /** * Autorisation d'affichier le formulaire de logo - * + * * @param string $faire Action demandée - * @param string $type Type d'objet sur lequel appliquer l'action - * @param int $id Identifiant de l'objet - * @param array $qui Description de l'auteur demandant l'autorisation - * @param array $opt Options de cette autorisation + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon */ -function autoriser_groupemots_iconifier_dist($faire,$type,$id,$qui,$opt){ - return (($qui['statut'] == '0minirezo') AND !$qui['restreint']); +function autoriser_groupemots_iconifier_dist($faire, $type, $id, $qui, $opt) { + return (($qui['statut'] == '0minirezo') and !$qui['restreint']); } - -?> diff --git a/www/plugins-dist/mots/mots_ieconfig.php b/www/plugins-dist/mots/mots_ieconfig.php index 3c73ff81..5692e347 100644 --- a/www/plugins-dist/mots/mots_ieconfig.php +++ b/www/plugins-dist/mots/mots_ieconfig.php @@ -1,13 +1,28 @@ - \ No newline at end of file + valeur par défaut * @return array + * Couples nom de la méta => valeur par défaut */ -function mots_configurer_liste_metas($metas){ - $metas['articles_mots'] = 'non'; - $metas['config_precise_groupes'] = 'non'; +function mots_configurer_liste_metas($metas) { + $metas['articles_mots'] = 'non'; + $metas['config_precise_groupes'] = 'non'; + #$metas['mots_cles_forums'] = 'non'; return $metas; } /** - * Configuration des mots + * Utilisation du pipeline affiche milieu + * + * - Ajoute le formulaire de configuration des mots sur la configuration des contenus + * - Ajoute le formulaire d'édition de mots sur les objets qui le peuvent + * + * @pipeline affiche_milieu * * @param array $flux + * Données du pipeline * @return array + * Données du pipeline */ -function mots_affiche_milieu($flux){ - if ($flux["args"]["exec"] == "configurer_contenu") { - $flux["data"] .= recuperer_fond('prive/squelettes/inclure/configurer',array('configurer'=>'configurer_mots')); +function mots_affiche_milieu($flux) { + if ($flux['args']['exec'] == 'configurer_contenu') { + $flux['data'] .= recuperer_fond('prive/squelettes/inclure/configurer', array('configurer' => 'configurer_mots')); } // si on est sur une page ou il faut inserer les mots cles... if ($en_cours = trouver_objet_exec($flux['args']['exec']) - AND $en_cours['edition']!==true // page visu - AND $type = $en_cours['type'] - AND $id_table_objet = $en_cours['id_table_objet'] - AND ($id = intval($flux['args'][$id_table_objet]))){ + and $en_cours['edition'] !== true // page visu + and $type = $en_cours['type'] + and $id_table_objet = $en_cours['id_table_objet'] + and isset($flux['args'][$id_table_objet]) + and ($id = intval($flux['args'][$id_table_objet])) + ) { $texte = recuperer_fond( - 'prive/objets/editer/liens', - array( - 'table_source'=>'mots', - 'objet'=>$type, - 'id_objet'=>$id, - ) + 'prive/objets/editer/liens', + array( + 'table_source' => 'mots', + 'objet' => $type, + 'id_objet' => $id, + ) ); - if ($p=strpos($flux['data'],"")) - $flux['data'] = substr_replace($flux['data'],$texte,$p,0); - else + if ($p = strpos($flux['data'], '')) { + $flux['data'] = substr_replace($flux['data'], $texte, $p, 0); + } else { $flux['data'] .= $texte; + } } - + return $flux; } /** - * Optimiser la base de donnee en supprimant les liens orphelins + * Optimise la base de données en supprimant les liens orphelins * - * @param int $n - * @return int + * @pipeline optimiser_base_disparus + * + * @param array $flux + * Données du pipeline + * @return array + * Données du pipeline */ -function mots_optimiser_base_disparus($flux){ +function mots_optimiser_base_disparus($flux) { $n = &$flux['data']; $mydate = $flux['args']['date']; - - $result = sql_delete("spip_mots", "length(titre)=0 AND maj < $mydate"); + + $result = sql_delete('spip_mots', 'length(titre)=0 AND maj < ' . sql_quote($mydate)); include_spip('action/editer_liens'); // optimiser les liens morts : // entre mots vers des objets effaces // depuis des mots effaces - $n+= objet_optimiser_liens(array('mot'=>'*'),'*'); + $n += objet_optimiser_liens(array('mot' => '*'), '*'); return $flux; @@ -84,20 +109,22 @@ function mots_optimiser_base_disparus($flux){ /** * Copier le type des groupes sur la table spip_mots - * a chaque changement d'un groupe. + * à chaque changement d'un groupe. + * + * @pipeline post_edition * * @param array $flux + * Données du pipeline * @return array + * Données du pipeline */ -function mots_post_edition($flux){ - if (($flux['args']['table'] == 'spip_groupes_mots') - and isset($flux['data']['titre'])) - { - sql_updateq('spip_mots', array('type' => $flux['data']['titre']), - 'id_groupe=' . $flux['args']['id_objet']); +function mots_post_edition($flux) { + if (isset($flux['args']['table']) + and ($flux['args']['table'] == 'spip_groupes_mots') + and isset($flux['data']['titre']) + ) { + sql_updateq('spip_mots', array('type' => $flux['data']['titre']), 'id_groupe=' . $flux['args']['id_objet']); } return $flux; } - -?> diff --git a/www/plugins-dist/mots/paquet.xml b/www/plugins-dist/mots/paquet.xml index 3e651cc1..67fc7c56 100644 --- a/www/plugins-dist/mots/paquet.xml +++ b/www/plugins-dist/mots/paquet.xml @@ -1,12 +1,12 @@ +> Mots diff --git a/www/plugins-dist/mots/prive/objets/contenu/groupe_mots.html b/www/plugins-dist/mots/prive/objets/contenu/groupe_mots.html index 6c92a3f7..f24e7dbb 100644 --- a/www/plugins-dist/mots/prive/objets/contenu/groupe_mots.html +++ b/www/plugins-dist/mots/prive/objets/contenu/groupe_mots.html @@ -8,26 +8,26 @@
      <:mots:info_un_mot:>
      -
      [(#UNSEUL|=={oui}|oui)<:mots:info_un_mot:>]
      +
      [(#UNSEUL|=={oui}|oui)<:mots:info_un_mot:>]
      <:mots:info_groupe_important:>
      -
      [(#OBLIGATOIRE|=={oui}|oui)<:mots:info_groupe_important:>]
      +
      [(#OBLIGATOIRE|=={oui}|oui)<:mots:info_groupe_important:>]
      <:info_administrateurs:>
      -
      [(#MINIREZO|=={oui}|oui)<:info_administrateurs:>]
      +
      [(#MINIREZO|=={oui}|oui)<:info_administrateurs:>]
      <:info_redacteurs:>
      -
      [(#COMITE|=={oui}|oui)<:info_redacteurs:>]
      +
      [(#COMITE|=={oui}|oui)<:info_redacteurs:>]
      <:info_visiteurs_02:>
      -
      [(#VISITEUR|=={oui}|oui)<:info_visiteurs_02:>]
      +
      [(#VISITEUR|=={oui}|oui)<:info_visiteurs_02:>]
      @@ -48,4 +48,4 @@
      <:info_notes:>
      (#NOTES)
      ] - \ No newline at end of file + diff --git a/www/plugins-dist/mots/prive/objets/infos/mot.html b/www/plugins-dist/mots/prive/objets/infos/mot.html index 2c6e2a85..de6dad9a 100644 --- a/www/plugins-dist/mots/prive/objets/infos/mot.html +++ b/www/plugins-dist/mots/prive/objets/infos/mot.html @@ -24,10 +24,10 @@ Bouton voir en ligne -][(#VAL{redirect} +][(#VAL{mot}|objet_info{page}|oui) +[(#VAL{redirect} |generer_url_action{type=mot&id=#ID_MOT} |parametre_url{var_mode,calcul} - |icone_horizontale{<:icone_voir_en_ligne:>,racine})] - + |icone_horizontale{<:icone_voir_en_ligne:>,racine})]] \ No newline at end of file diff --git a/www/plugins-dist/mots/prive/objets/infos/mot_fonctions.php b/www/plugins-dist/mots/prive/objets/infos/mot_fonctions.php index 42b29de0..7352c300 100644 --- a/www/plugins-dist/mots/prive/objets/infos/mot_fonctions.php +++ b/www/plugins-dist/mots/prive/objets/infos/mot_fonctions.php @@ -10,8 +10,13 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Charger les fonctions mots + * + * @package SPIP\Mots\Fonctions + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/mots'); - -?> diff --git a/www/plugins-dist/mots/prive/objets/liste/mots-admin.html b/www/plugins-dist/mots/prive/objets/liste/mots-admin.html index 9d3b0de5..aaf8ccb6 100644 --- a/www/plugins-dist/mots/prive/objets/liste/mots-admin.html +++ b/www/plugins-dist/mots/prive/objets/liste/mots-admin.html @@ -11,7 +11,7 @@ - [(#TRI{multi titre,<:info_titre:>,ajax})] + [(#TRI{multi titre,<:info_titre:>,ajax})] [(#TRI{id_mot,<:info_numero_abbreviation:>,ajax})] @@ -19,10 +19,12 @@ - #SET{url_edit,#AUTORISER{modifier,mot,#ID_MOT}|?{#ID_MOT|generer_url_entite{mot}|parametre_url{redirect,#ENV{retour}},''}} + #SET{url_voir,#AUTORISER{voir,mot,#ID_MOT}|?{#ID_MOT|generer_url_entite{mot}|parametre_url{redirect,#ENV{retour}},''}} + #SET{url_edit,#AUTORISER{modifier,mot,#ID_MOT}|?{#URL_ECRIRE{mot_edit,id_mot=#ID_MOT}|parametre_url{redirect,#ENV{retour}},''}} [(#VAL|puce_statut{mot,#ID_MOT,#ID_GROUPE})] - [(#LOGO_MOT|image_reduire{20,26})][][(#RANG). ]#TITRE[(#GET{url_edit}|oui)] + [][(#RANG). ]#TITRE[(#GET{url_voir}|oui)] + [(#LOGO_MOT|image_reduire{40,40})] #SET{utilise,#ID_MOT|objets_associes_mot{#ID_GROUPE}|implode{', '}}#GET{utilise} [(#GET{utilise}|non) diff --git a/www/plugins-dist/mots/prive/objets/liste/mots-admin_fonctions.php b/www/plugins-dist/mots/prive/objets/liste/mots-admin_fonctions.php index 42b29de0..7352c300 100644 --- a/www/plugins-dist/mots/prive/objets/liste/mots-admin_fonctions.php +++ b/www/plugins-dist/mots/prive/objets/liste/mots-admin_fonctions.php @@ -10,8 +10,13 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Charger les fonctions mots + * + * @package SPIP\Mots\Fonctions + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/mots'); - -?> diff --git a/www/plugins-dist/mots/prive/objets/liste/mots.html b/www/plugins-dist/mots/prive/objets/liste/mots.html index 0e1ae7f7..908f3836 100644 --- a/www/plugins-dist/mots/prive/objets/liste/mots.html +++ b/www/plugins-dist/mots/prive/objets/liste/mots.html @@ -12,7 +12,7 @@ - [(#TRI{titre,<:info_titre:>,ajax})] + [(#TRI{titre,<:info_titre:>,ajax})] [(#TRI{type,<:mots:info_dans_groupe:>,ajax})] [(#TRI{id_mot,<:info_numero_abbreviation:>,ajax})] @@ -21,8 +21,8 @@ [(#VAL|puce_statut{mot,#ID_MOT,#ID_GROUPE})] - [(#LOGO_MOT|image_reduire{20,26})][(#RANG). ]#TITRE + [(#RANG). ]#TITRE + [(#LOGO_MOT|image_reduire{40,40})] #TYPE [(#AUTORISER{modifier,mot,#ID_MOT}|?{ #ID_MOT, diff --git a/www/plugins-dist/mots/prive/objets/liste/mots_associer-recherche.html b/www/plugins-dist/mots/prive/objets/liste/mots_associer-recherche.html index a6bd0d26..add5c313 100644 --- a/www/plugins-dist/mots/prive/objets/liste/mots_associer-recherche.html +++ b/www/plugins-dist/mots/prive/objets/liste/mots_associer-recherche.html @@ -11,7 +11,7 @@ #SET{recherche,#ENV*{recherche}|table_valeur{#ID_GROUPE}} [(#GET{recherche}|non|et{#ENV*{recherche}|table_valeur{b#ID_GROUPE}}) #SET{recherche,'/./'} - + ] #ANCRE_PAGINATION diff --git a/www/plugins-dist/mots/prive/objets/liste/mots_associer.html b/www/plugins-dist/mots/prive/objets/liste/mots_associer.html index 87d66a82..4fdfcbac 100644 --- a/www/plugins-dist/mots/prive/objets/liste/mots_associer.html +++ b/www/plugins-dist/mots/prive/objets/liste/mots_associer.html @@ -1,5 +1,5 @@ #SET{groupes_vus,'0'} -[(#SET{_MAX_MOTS_LISTE,[(#VAL{_MAX_MOTS_LISTE}|defined|?{[(#VAL{_MAX_MOTS_LISTE}|constant)],50})]})] +[(#SET{_MAX_MOTS_LISTE,[(#VAL{_MAX_MOTS_LISTE}|defined|?{#CONST{_MAX_MOTS_LISTE},50})]})] #SET{exclus,#ENV{objet_source}|lister_objets_lies{#ENV{objet},#ENV{id_objet},#ENV{_objet_lien}}} [(#ID_GROUPE|unique|oui)#SET{groupes_vus,#GET{groupes_vus}|concat{',',#ID_GROUPE}} ] diff --git a/www/plugins-dist/mots/prive/objets/liste/mots_lies.html b/www/plugins-dist/mots/prive/objets/liste/mots_lies.html index 94c6fdfd..8ae97018 100644 --- a/www/plugins-dist/mots/prive/objets/liste/mots_lies.html +++ b/www/plugins-dist/mots/prive/objets/liste/mots_lies.html @@ -16,7 +16,7 @@ - [(#TRI{titre,<:info_titre:>,ajax})] + [(#TRI{titre,<:info_titre:>,ajax})] [(#TRI{type,<:mots:info_dans_groupe:>,ajax})]   @@ -25,8 +25,8 @@ [(#VAL|puce_statut{mot,#ID_MOT,#ID_GROUPE})] - [(#LOGO_MOT|image_reduire{20,20})][(#RANG). ]#TITRE + [(#RANG). ]#TITRE + [(#LOGO_MOT|image_reduire{40,40})] #TYPE @@ -34,7 +34,7 @@ [

      (#PAGINATION{prive})

      ] -[(#GRAND_TOTAL|>{3}|oui)
      ] +[(#GRAND_TOTAL|>{3}|oui)
      ]
      diff --git a/www/plugins-dist/mots/prive/squelettes/contenu/groupe_mots.html b/www/plugins-dist/mots/prive/squelettes/contenu/groupe_mots.html index a8627887..34938e02 100644 --- a/www/plugins-dist/mots/prive/squelettes/contenu/groupe_mots.html +++ b/www/plugins-dist/mots/prive/squelettes/contenu/groupe_mots.html @@ -4,7 +4,7 @@ [(#AUTORISER{modifier,groupemots,#ID_GROUPE}) [(#URL_ECRIRE{groupe_mots_edit,id_groupe=#ID_GROUPE}|icone_verticale{<:mots:icone_modif_groupe_mots:>,groupe_mots-24.png,edit,right ajax preload})] ] -

      [(#RANG). ](#TITRE|sinon{<:info_sans_titre:>})[(#CHEMIN_IMAGE{groupe_mots-24.png}|balise_img{groupe_mots,cadre-icone})]

      + [(#RANG). ](#TITRE|sinon{<:info_sans_titre:>})[(#CHEMIN_IMAGE{groupe_mots-24.png}|balise_img{groupe_mots,cadre-icone})] ],simple fiche_objet})]
      @@ -27,7 +27,7 @@ ] #PIPELINE{afficher_complement_objet,#ARRAY{args,#ARRAY{type,groupemots,id,#ID_GROUPE},data,'
      '}} -[(#EVAL{_AJAX}|oui) +[(#CONST{_AJAX}|oui) ] diff --git a/www/plugins-dist/mots/prive/squelettes/contenu/mot.html b/www/plugins-dist/mots/prive/squelettes/contenu/mot.html index 15089d31..11f9df36 100644 --- a/www/plugins-dist/mots/prive/squelettes/contenu/mot.html +++ b/www/plugins-dist/mots/prive/squelettes/contenu/mot.html @@ -3,7 +3,7 @@ [(#AUTORISER{modifier,mot,#ID_MOT}) [(#URL_ECRIRE{mot_edit,id_mot=#ID_MOT}|icone_verticale{<:mots:icone_modifier_mot:>,mot,edit,right ajax preload})] ] -

      [(#RANG). ](#TITRE|sinon{<:info_sans_titre:>})[(#CHEMIN_IMAGE{mot-24.png}|balise_img{mot,cadre-icone})]

      + [(#RANG). ](#TITRE|sinon{<:info_sans_titre:>})[(#CHEMIN_IMAGE{mot-24.png}|balise_img{mot,cadre-icone})] ],simple fiche_objet})]
      @@ -28,7 +28,9 @@ #BOITE_FERMER #PIPELINE{afficher_complement_objet,#ARRAY{args,#ARRAY{type,mot,id,#ID_MOT},data,'
      '}} -[(#EVAL{_AJAX}|oui) + + +[(#CONST{_AJAX}|oui) ] diff --git a/www/plugins-dist/mots/prive/squelettes/inclure/administrer_mot.html b/www/plugins-dist/mots/prive/squelettes/inclure/administrer_mot.html new file mode 100644 index 00000000..c806c9b9 --- /dev/null +++ b/www/plugins-dist/mots/prive/squelettes/inclure/administrer_mot.html @@ -0,0 +1,15 @@ +[(#AUTORISER{administrer,mot,#ID_MOT}) + + [(#ENV{administrer}|=={oui}|oui) +
      + [(#CHEMIN_IMAGE{fermer-16.png}|balise_img)] +
      + #FORMULAIRE_ADMINISTRER_MOT{#ID_MOT} +
      +
      + ] + [(#ENV{administrer}|=={oui}|non) + [(#SELF|parametre_url{administrer,oui}|icone{<:adminmots:icone_administrer_mot:>,mot-24.png,#LANG_RIGHT,edit,ajax})] + ] + +] \ No newline at end of file diff --git a/www/plugins-dist/mots/prive/squelettes/navigation/mots.html b/www/plugins-dist/mots/prive/squelettes/navigation/mots.html index c00277dd..af9e1cb0 100644 --- a/www/plugins-dist/mots/prive/squelettes/navigation/mots.html +++ b/www/plugins-dist/mots/prive/squelettes/navigation/mots.html @@ -6,7 +6,7 @@ [(#AUTORISER{voir,groupemots,#ID_GROUPE}|oui)
    • #TITRE
    • + >[(#RANG). ]#TITRE ] <:mots:icone_voir_tous_mots_cles:> diff --git a/www/plugins-dist/mots/puce_statut/mot.php b/www/plugins-dist/mots/puce_statut/mot.php index a39b42cf..d323e5dc 100644 --- a/www/plugins-dist/mots/puce_statut/mot.php +++ b/www/plugins-dist/mots/puce_statut/mot.php @@ -10,21 +10,37 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Puces d'actions rapides sur les mots clés + * + * @package SPIP\Mots\PucesStatut + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Afficher la puce statut d'un mot : - * en fait juste une icone independante du statut + * en fait juste une icone indépendante du statut * * @param int $id + * Identifiant du mot clé * @param string $statut - * @param int $id_rubrique + * Statut du mot (il n'en a pas) + * @param int $id_groupe + * Identifiant du groupe de mot clé parent * @param string $type + * Type d'objet * @param string $ajax + * Indique s'il ne faut renvoyer que le coeur du menu car on est + * dans une requete ajax suite à un post de changement rapide + * @param bool $menu_rapide + * Indique si l'on peut changer le statut, ou si on l'affiche simplement * @return string + * Code HTML de l'image de puce de statut à insérer */ -// https://code.spip.net/@puce_statut_mot_dist -function puce_statut_mot_dist($id, $statut, $id_groupe, $type, $ajax='', $menu_rapide=_ACTIVER_PUCE_RAPIDE) { - return ""; +function puce_statut_mot_dist($id, $statut, $id_groupe, $type, $ajax = '', $menu_rapide = _ACTIVER_PUCE_RAPIDE) { + return ""; } diff --git a/www/plugins-dist/msie_compat/formulaires/configurer_vieux_butineurs.html b/www/plugins-dist/msie_compat/formulaires/configurer_vieux_butineurs.html deleted file mode 100644 index b2419a2e..00000000 --- a/www/plugins-dist/msie_compat/formulaires/configurer_vieux_butineurs.html +++ /dev/null @@ -1,53 +0,0 @@ -
      -

      <:msiecompat:choix_titre:>

      - [

      (#ENV*{message_ok})

      ] - [

      (#ENV*{message_erreur})

      ] - [(#ENV{editable}) -

      <:msiecompat:choix_explication:>

      -
      - [(#REM) declarer les hidden qui declencheront le service du formulaire - parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
        - #SET{name,iecompat}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • - [ - (#GET{erreurs}) - ]
        - -

        -
        -
        - -

        <:msiecompat:choix_ifixpng:>

        - -
        -
        - -

        <:msiecompat:choix_ie7:>

        -
        -
        - -

        <:msiecompat:choix_ie7squish:>

        -
        -
        - -

        <:msiecompat:choix_ie8:>

        -
        -
        - -
        -
      • -
      - [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] - -

       

      -
      - ] -
      diff --git a/www/plugins-dist/msie_compat/formulaires/configurer_vieux_butineurs.php b/www/plugins-dist/msie_compat/formulaires/configurer_vieux_butineurs.php deleted file mode 100644 index ce6ca094..00000000 --- a/www/plugins-dist/msie_compat/formulaires/configurer_vieux_butineurs.php +++ /dev/null @@ -1,35 +0,0 @@ - $GLOBALS['meta']['iecompat']?$GLOBALS['meta']['iecompat']:'non', - ); - return $valeurs; -} - - -function formulaires_configurer_vieux_butineurs_traiter_dist(){ - $res = array('editable'=>true); - foreach(array( - "iecompat", - ) as $m) - if (!is_null($v=_request($m))) - ecrire_meta($m, $v); - - $res['message_ok'] = _T('config_info_enregistree'); - return $res; -} - diff --git a/www/plugins-dist/msie_compat/images/msiecompat-16.png b/www/plugins-dist/msie_compat/images/msiecompat-16.png deleted file mode 100644 index 342aad135f6dc7aad8ce9cc37e141b592613c5d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)0)rC*sLZcgn zkrai}0@Es#X{Rj|Xe-lR7lwp{(DW=%@;l$jCunivvDuG}cK;nAb?OJz#)VpTpnLr3 zYD?IRMKimFoT~1XRjsnC3cpvC`Qc4nDTQnW58NF$N?8lXN?^W!O~;wDczmZM(ENZI zi)KP&kBs8R8k;}9BBbDaco>AB?z#ZzC*k?G&olia5yMF*k(x&E`YjNW4f6}N?Glca zcn2Vw;ribyLI`&9S+;(D!x+3xwd7E+mh7SNsjyNiee44>7R~ex-#6UaKJA?W5Q2cN zp?N%1iaDJ1B|AJha}P)#>%fdfGyNkGL%9dE`?~=ULQvk>rn+6gS^H&&Cuhchg+rqs z#i7xMM&4S+)8WV0*@ciAo7M`+xlaVVUOW8w$runn8mj-tFaCr^Bf-3tKuVp}#qYST zi_kPu^Pf50=CcPUrjB6%JrR30+dCQw=GK>xQo~+0>ANz7m0F}$F4666I}roOiZ3vY zfc#1vgrw*44G@Cfo*-QwPg4varKYo2$kB7@8UXp_1*+u|j+L;7CZ?NW09ik%HTIn? zoYW#xllaeFq?Ab>w%rs1$mq*g4|cNYMq6iqVmd`G8K1k^Lh|7VzzbYGvfBj`tze}T Z{{Z3?@N2~MB4Gdk002ovPDHLkV1nQ&5!V0! diff --git a/www/plugins-dist/msie_compat/images/msiecompat-24.png b/www/plugins-dist/msie_compat/images/msiecompat-24.png deleted file mode 100644 index d6d60825578e9a62fb36f7bb5401c9cb308f24d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1060 zcmV+<1l#+GP)jsLVeATJvcmDJ>Y_&TbyZ52qx|tsk3$efq<|m&4 z3%*~5&Rn`lkBnLk2zXOlx6?WBJ<_oVvgs7`R1)<~&19?@Can%{AN-A!=gkiz=dM0x zwaCfgjjk^8d_SUo4^q(&DCDvTyPrePtRT4%M0Pm=NB?)IcXX0`&{%EoPN$=v;Gr25 z^c-@jWwGcOI4EwNOD2#`EWv7XfoXMpv}9qm!eet@0p}y)b$_;TaeAEeWymCABIx`q z`&PJp*FN&xi^diQwm3Ubq>r7XqAY?=vhd*=9x44M*~){lZ-vK5mc|yl2%>7%gb_Z9 zhC!acDV-1rqd-q5$qe$sLN&OpZVZ~Da^WGK{b)*R2PY`f05un(UuTR9(jX(lI8ZbhXl9Vx#r|mA+KX89HeVA z0jz}2``#hsaie?J5P9xJ;zMBZz{#^empxxZImo=(u_u3AJl)W`eT2ig=Ui7KmqCCa zhEagMeFrryX`uuUPEQhia5emBC0u5aX129oxAhJpGW(v2C@V4{O5Zzsb|dg^Tmbnq zJ|(=Xcc3a<-oT=i+jb$JLq3y+wn;-v?-0*rw7J?5d_O@IqlzMu@Oa2q6)taJ;`y6S zM#c5xq<^`BL~bupAUk^c;h%bq02%7qxd(~4*)QOi40V;L^a#=&gH?pFa9$EJi7sqqmccL8%=QJRH~%9I|QC z*hJI$`>`JnA3t{Vyv5qo!3&HxH4f6V=~y-RdjFj$t8QZ9G3M%&zsvH?(Bc0`I{Vi= eU(dit0R{k%;T}qn$Pusr0000GA>+b#0@422()17ygH9Qn9k$Qd+y9!7k6gbff5`#oWaR6Kkd6*qs~Leu-bNj zFquTi$MT)O;eOz~qo+Un7O1p3fO_rHxuCs&(BT?;mRur6A(uhVq_En%vD&&(E$#gK z>yKo-voD?c=*$(_Vmx5)A9OempCA$Tkxi~q(Tgn4{e_;-lDZ$Jkk)XHp1|tdcM-6t zt;5d;?EME^&O^sZMEsOXI;CtHi_K2|%lH*M`!D&-0QQjwH(o%qrsLP|i?SDp;{&{jjy=cZ>~2fRR(>Lyg0#v?wu`Wo@t zY8AB&YiAcZEshWpsVF2v{u=%&;M<79<4?hcvQLtTcsIoXgpeQvYbzmy+!Xgeh(9hs z10D-{=yvX%Yl)jB>pGh;SP zf;RVn(=lv*=aq5^J(oeTw6nd(fe?buZ5@OI9u&2WOfp7jVa~)O&Ev4X3Ds*qeEplv zJ>aO}EyHU8DuqniTTE*RA?jtW z@BZo#QfWC3W*@M)JH+zf{((2F_HIP=DQ0_*V;xr%(yL*#=u&KIdge7Y`BmFWfXeST z7h)66&TP-l?iZ!nhHC8q41`pu6pN&mLnK$j{ukc<@Xc1@wE$(H^wZT_UTZ;{8*uD8 zT*{_)":"","\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/":"","@(namespace|import)[^;\\n]+[;\\n]":"","'(\\\\.|[^'\\\\])*'":bJ,'"(\\\\.|[^"\\\\])*"':bJ,"\\s+":" "});function cB(a){return cA.exec(a)};function bI(c){return c.replace(cw,function(a,b){return bp[b-1]})};function bJ(c){return"\x01"+bp.push(c.replace(cz,function(a,b){return eval("'\\u"+"0000".slice(b.length)+b+"'")}).slice(1,-1).replace(cx,"\\'"))};function cC(a){return cy.test(a)?bp[a.slice(1)-1]:a};var cD=new D({Width:"Height",width:"height",Left:"Top",left:"top",Right:"Bottom",right:"bottom",onX:"onY"});function A(a){return cD.exec(a)};var bK=[];function bq(a){cF(a);w(window,"onresize",a)};function w(a,b,c){a.attachEvent(b,c);bK.push(arguments)};function cE(a,b,c){try{a.detachEvent(b,c)}catch(ignore){}};w(window,"onunload",function(){var a;while(a=bK.pop()){cE(a[0],a[1],a[2])}});function R(a,b,c){if(!a.elements)a.elements={};if(c)a.elements[b.uniqueID]=b;else delete a.elements[b.uniqueID];return c};w(window,"onbeforeprint",function(){if(!IE7.CSS.print)new bw("print");IE7.CSS.print.recalc()});var bL=/^\d+(px)?$/i;var J=/^\d+%$/;var E=function(a,b){if(bL.test(b))return parseInt(b);var c=a.style.left;var d=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;a.style.left=b||0;b=a.style.pixelLeft;a.style.left=c;a.runtimeStyle.left=d;return b};var br="ie7-";var bM=z.extend({constructor:function(){this.fixes=[];this.recalcs=[]},init:Q});var bs=[];function cF(a){bs.push(a)};IE7.recalc=function(){IE7.HTML.recalc();IE7.CSS.recalc();for(var a=0;a1?2:0;var h=T.exec(f[g])||"if(0){";if(o){h+=i("if(e%1.nodeName!='!'){",m)}var p=S>1?bV:"";h+=i(p+bW,m);h+=Array(I(h,/\{/g).length+1).join("}");d+=h}eval(i(bX,F)+T.unescape(d)+"return s?null:r}");be[a]=_h}return be[a](b||document,c)};var bd=k<6;var bO=/^(href|src)$/;var bu={"class":"className","for":"htmlFor"};IE7._5=1;IE7._e=function(a,b){var c=a.all[b]||null;if(!c||c.id==b)return c;for(var d=0;d+~,]|[^(]\+|^)([#.:\[])/g,cH=/(^|,)([^\s>+~])/g,cI=/\s*([\s>+~(),]|^|$)\s*/g,bQ=/\s\*\s/g;var bR=D.extend({constructor:function(a){this.base(a);this.sorter=new D;this.sorter.add(/:not\([^)]*\)/,D.IGNORE);this.sorter.add(/([ >](\*|[\w-]+))([^: >+~]*)(:\w+-child(\([^)]+\))?)([^: >+~]*)/,"$1$3$6$4")},ignoreCase:true,escape:function(a){return this.optimise(this.format(a))},format:function(a){return a.replace(cI,"$1").replace(cH,"$1 $2").replace(cG,"$1*$2")},optimise:function(a){return this.sorter.exec(a.replace(bQ,">* "))},unescape:function(a){return bI(a)}});var bS={"":"%1!=null","=":"%1=='%2'","~=":/(^| )%1( |$)/,"|=":/^%1(-|$)/,"^=":/^%1/,"$=":/%1$/,"*=":/%1/};var bT={"first-child":"!IE7._b(e%1)","link":"e%1.currentStyle['ie7-link']=='link'","visited":"e%1.currentStyle['ie7-link']=='visited'"};var bv="var p%2=0,i%2,e%2,n%2=e%1.";var bU="e%1.sourceIndex";var bV="var g="+bU+";if(!p[g]){p[g]=1;";var bW="r[r.length]=e%1;if(s)return e%1;";var bX="var _h=function(e0,s){IE7._5++;var r=[],p={},reg=[%1],d=document;";var F;var m;var o;var x;var S;var be={};var T=new bR({" (\\*|[\\w-]+)#([\\w-]+)":function(a,b,c){o=false;var d="var e%2=IE7._e(d,'%4');if(e%2&&";if(b!="*")d+="e%2.nodeName=='%3'&&";d+="(e%1==d||e%1.contains(e%2))){";if(x)d+=i("i%1=n%1.length;",x);return i(d,m++,m,b.toUpperCase(),c)}," (\\*|[\\w-]+)":function(a,b){S++;o=b=="*";var c=bv;c+=(o&&bd)?"all":"getElementsByTagName('%3')";c+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";return i(c,m++,x=m,b.toUpperCase())},">(\\*|[\\w-]+)":function(a,b){var c=x;o=b=="*";var d=bv;d+=c?"children":"childNodes";if(!o&&c)d+=".tags('%3')";d+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";if(o){d+="if(e%2.nodeType==1){";o=bd}else{if(!c)d+="if(e%2.nodeName=='%3'){"}return i(d,m++,x=m,b.toUpperCase())},"\\+(\\*|[\\w-]+)":function(a,b){var c="";if(o)c+="if(e%1.nodeName!='!'){";o=false;c+="e%1=IE7._a(e%1);if(e%1";if(b!="*")c+="&&e%1.nodeName=='%2'";c+="){";return i(c,m,b.toUpperCase())},"~(\\*|[\\w-]+)":function(a,b){var c="";if(o)c+="if(e%1.nodeName!='!'){";o=false;S=2;c+="while(e%1=e%1.nextSibling){if(e%1.ie7_adjacent==IE7._5)break;if(";if(b=="*"){c+="e%1.nodeType==1";if(bd)c+="&&e%1.nodeName!='!'"}else c+="e%1.nodeName=='%2'";c+="){e%1.ie7_adjacent=IE7._5;";return i(c,m,b.toUpperCase())},"#([\\w-]+)":function(a,b){o=false;var c="if(e%1.id=='%2'){";if(x)c+=i("i%1=n%1.length;",x);return i(c,m,b)},"\\.([\\w-]+)":function(a,b){o=false;F.push(new RegExp("(^|\\s)"+bb(b)+"(\\s|$)"));return i("if(e%1.className&®[%2].test(e%1.className)){",m,F.length-1)},"\\[([\\w-]+)\\s*([^=]?=)?\\s*([^\\]]*)\\]":function(a,b,c,d){var f=bu[b]||b;if(c){var g="e%1.getAttribute('%2',2)";if(!bO.test(b)){g="e%1.%3||"+g}b=i("("+g+")",m,b,f)}else{b=i("IE7._f(e%1,'%2')",m,b)}var h=bS[c||""]||"0";if(h&&h.source){F.push(new RegExp(i(h.source,bb(T.unescape(d)))));h="reg[%2].test(%1)";d=F.length-1}return"if("+i(h,b,d)+"){"},":+([\\w-]+)(\\(([^)]+)\\))?":function(a,b,c,d){b=bT[b];return"if("+(b?i(b,m,d||""):"0")+"){"}});var bY=/a(#[\w-]+)?(\.[\w-]+)?:(hover|active)/i;var bZ=/\s*\{\s*/,ca=/\s*\}\s*/,cb=/\s*\,\s*/;var cc=/(.*)(:first-(line|letter))/;var y=document.styleSheets;IE7.CSS=new(bM.extend({parser:new bH,screen:"",print:"",styles:[],rules:[],pseudoClasses:k<7?"first\\-child":"",dynamicPseudoClasses:{toString:function(){var a=[];for(var b in this)a.push(b);return a.join("|")}},init:function(){var a="^\x01$";var b="\\[class=?[^\\]]*\\]";var c=[];if(this.pseudoClasses)c.push(this.pseudoClasses);var d=this.dynamicPseudoClasses.toString();if(d)c.push(d);c=c.join("|");var f=k<7?["[>+~[(]|([:.])\\w+\\1"]:[b];if(c)f.push(":("+c+")");this.UNKNOWN=new RegExp(f.join("|")||a,"i");var g=k<7?["\\[[^\\]]+\\]|[^\\s(\\[]+\\s*[+~]"]:[b];var h=g.concat();if(c)h.push(":("+c+")");n.COMPLEX=new RegExp(h.join("|")||a,"ig");if(this.pseudoClasses)g.push(":("+this.pseudoClasses+")");L.COMPLEX=new RegExp(g.join("|")||a,"i");L.MATCH=new RegExp(d?"(.*):("+d+")(.*)":a,"i");this.createStyleSheet();this.refresh()},addEventHandler:function(){w.apply(null,arguments)},addFix:function(a,b){this.parser.add(a,b)},addRecalc:function(c,d,f,g){d=new RegExp("([{;\\s])"+c+"\\s*:\\s*"+d+"[^;}]*");var h=this.recalcs.length;if(g)g=c+":"+g;this.addFix(d,function(a,b){return(g?b+g:a)+";ie7-"+a.slice(1)+";ie7_recalc"+h+":1"});this.recalcs.push(arguments);return h},apply:function(){this.getInlineStyles();new bw("screen");this.trash()},createStyleSheet:function(){this.styleSheet=document.createStyleSheet();this.styleSheet.ie7=true;this.styleSheet.owningElement.ie7=true;this.styleSheet.cssText=G},getInlineStyles:function(){var a=document.getElementsByTagName("style"),b;for(var c=a.length-1;(b=a[c]);c--){if(!b.disabled&&!b.ie7){this.styles.push(b.innerHTML)}}},getText:function(a,b){try{var c=a.cssText}catch(e){c=""}if(H)c=cl(a.href,b)||c;return c},recalc:function(){this.screen.recalc();var a=/ie7_recalc\d+/g;var b=G.match(/[{,]/g).length;var c=b+(this.screen.cssText.match(/\{/g)||"").length;var d=this.styleSheet.rules,f;var g,h,p,t,q,j,u,l;for(q=b;q0&&n.CLASS.test(b)){b=b.replace(n.CLASS,"");d--}while(c>0&&n.TAG.test(b)){b=b.replace(n.TAG,"$1*");c--}b+="."+this.className;d=Math.min(d,2);c=Math.min(c,2);var f=-10*d-c;if(f>0){b=b+","+n.MAP[f]+" "+b}return b},remove:function(a){a.className=a.className.replace(this.MATCH,"$1")},toString:function(){return i("%1 {%2}",this.selectorText,this.cssText)}},{CHILD:/>/g,CLASS:/\.[\w-]+/,CLASSES:/[.:\[]/g,MULTI:/(\.[\w-]+)+/g,PREFIX:"ie7_class",TAG:/^\w+|([\s>+~])\w+/,TAGS:/^\w|[\s>+~]\w/g,MAP:{1:"html",2:"html body",10:".ie7_html",11:"html.ie7_html",12:"html.ie7_html body",20:".ie7_html .ie7_body",21:"html.ie7_html .ie7_body",22:"html.ie7_html body.ie7_body"}});var L=n.extend({constructor:function(a,b,c,d,f){this.attach=b||"*";this.dynamicPseudoClass=IE7.CSS.dynamicPseudoClasses[c];this.target=d;this.base(a,f)},recalc:function(){var a=B(this.attach),b;for(var c=0;b=a[c];c++){var d=this.target?B(this.target,b):[b];if(d.length)this.dynamicPseudoClass.apply(b,d,this)}}});var cd=z.extend({constructor:function(a,b){this.name=a;this.apply=b;this.instances={};IE7.CSS.dynamicPseudoClasses[a]=this},register:function(a){var b=a[2];a.id=b.id+a[0].uniqueID;if(!this.instances[a.id]){var c=a[1],d;for(d=0;d*:"+(b=="marginTop"?"first":"last")+"-child",a,true);if(d&&d.currentStyle.styleFloat=="none"&&IE7.hasLayout(d)){collapseMargin(d,b);margin=_9(a,a.currentStyle[b]);childMargin=_9(d,d.currentStyle[b]);if(margin<0||childMargin<0){a.runtimeStyle[b]=margin+childMargin}else{a.runtimeStyle[b]=Math.max(childMargin,margin)}d.runtimeStyle[b]="0px"}}};function _9(a,b){return b=="auto"?0:E(a,b)};var UNIT=/^[.\d][\w%]*$/,AUTO=/^(auto|0cm)$/;var applyWidth,applyHeight;IE7.Layout.borderBox=function(a){applyWidth(a);applyHeight(a)};var fixWidth=function(g){applyWidth=function(a){if(!J.test(a.currentStyle.width))h(a);collapseMargins(a)};function h(a,b){if(!a.runtimeStyle.fixedWidth){if(!b)b=a.currentStyle.width;a.runtimeStyle.fixedWidth=(UNIT.test(b))?Math.max(0,q(a,b)):b;K(a,"width",a.runtimeStyle.fixedWidth)}};function p(a){if(!bc(a)){var b=a.offsetParent;while(b&&!IE7.hasLayout(b))b=b.offsetParent}return(b||s).clientWidth};function t(a,b){if(J.test(b))return parseInt(parseFloat(b)/100*p(a));return E(a,b)};var q=function(a,b){var c=a.currentStyle["box-sizing"]=="border-box";var d=0;if(C&&!c)d+=j(a)+u(a,"padding");else if(!C&&c)d-=j(a)+u(a,"padding");return t(a,b)+d};function j(a){return a.offsetWidth-a.clientWidth};function u(a,b){return t(a,a.currentStyle[b+"Left"])+t(a,a.currentStyle[b+"Right"])};G+="*{minWidth:none;maxWidth:none;min-width:none;max-width:none}";layout.minWidth=function(a){if(a.currentStyle["min-width"]!=null){a.style.minWidth=a.currentStyle["min-width"]}if(R(arguments.callee,a,a.currentStyle.minWidth!="none")){layout.boxSizing(a);h(a);l(a)}};eval("IE7.Layout.maxWidth="+String(layout.minWidth).replace(/min/g,"max"));function l(a){var b=a.getBoundingClientRect();var c=b.right-b.left;if(a.currentStyle.minWidth!="none"&&c<=q(a,a.currentStyle.minWidth)){a.runtimeStyle.width=a.currentStyle.minWidth}else if(a.currentStyle.maxWidth!="none"&&c>=q(a,a.currentStyle.maxWidth)){a.runtimeStyle.width=a.currentStyle.maxWidth}else{a.runtimeStyle.width=a.runtimeStyle.fixedWidth}};function r(a){if(R(r,a,/^(fixed|absolute)$/.test(a.currentStyle.position)&&bt(a,"left")!="auto"&&bt(a,"right")!="auto"&&AUTO.test(bt(a,"width")))){N(a);IE7.Layout.boxSizing(a)}};IE7.Layout.fixRight=r;function N(a){var b=t(a,a.runtimeStyle._c||a.currentStyle.left);var c=p(a)-t(a,a.currentStyle.right)-b-u(a,"margin");if(parseInt(a.runtimeStyle.width)==c)return;a.runtimeStyle.width="";if(bc(a)||g||a.offsetWidth=5.5&&k<7){IE7.CSS.addFix(/background(-image)?\s*:\s*([^};]*)?url\(([^\)]+)\)([^;}]*)?/,function(a,b,c,d,f){d=cC(d);return bi.test(d)?"filter:"+i(bx,d,"crop")+";zoom:1;background"+(b||"")+":"+(c||"")+"none"+(f||""):a});IE7.HTML.addRecalc("img,input",function(a){if(a.tagName=="INPUT"&&a.type!="image")return;by(a);w(a,"onpropertychange",function(){if(!bj&&event.propertyName=="src"&&a.src.indexOf(bg)==-1)by(a)})});var bj=false;w(window,"onbeforeprint",function(){bj=true;for(var a=0;a=7)return;IE7.CSS.addRecalc("position","fixed",_6,"absolute");IE7.CSS.addRecalc("background(-attachment)?","[^};]*fixed",_2);var $viewport=C?"body":"documentElement";function _3(){if(v.currentStyle.backgroundAttachment!="fixed"){if(v.currentStyle.backgroundImage=="none"){v.runtimeStyle.backgroundRepeat="no-repeat";v.runtimeStyle.backgroundImage="url("+bg+")"}v.runtimeStyle.backgroundAttachment="fixed"}_3=Q};var _0=bN("img");function _1(a){return a?bc(a)||_1(a.parentElement):false};function _d(a,b,c){setTimeout("document.all."+a.uniqueID+".runtimeStyle.setExpression('"+b+"','"+c+"')",0)};function _2(a){if(R(_2,a,a.currentStyle.backgroundAttachment=="fixed"&&!a.contains(v))){_3();bgLeft(a);bgTop(a);_8(a)}};function _8(a){_0.src=a.currentStyle.backgroundImage.slice(5,-2);var b=a.canHaveChildren?a:a.parentElement;b.appendChild(_0);setOffsetLeft(a);setOffsetTop(a);b.removeChild(_0)};function bgLeft(a){a.style.backgroundPositionX=a.currentStyle.backgroundPositionX;if(!_1(a)){_d(a,"backgroundPositionX","(parseInt(runtimeStyle.offsetLeft)+document."+$viewport+".scrollLeft)||0")}};eval(A(bgLeft));function setOffsetLeft(a){var b=_1(a)?"backgroundPositionX":"offsetLeft";a.runtimeStyle[b]=getOffsetLeft(a,a.style.backgroundPositionX)-a.getBoundingClientRect().left-a.clientLeft+2};eval(A(setOffsetLeft));function getOffsetLeft(a,b){switch(b){case"left":case"top":return 0;case"right":case"bottom":return s.clientWidth-_0.offsetWidth;case"center":return(s.clientWidth-_0.offsetWidth)/2;default:if(J.test(b)){return parseInt((s.clientWidth-_0.offsetWidth)*parseFloat(b)/100)}_0.style.left=b;return _0.offsetLeft}};eval(A(getOffsetLeft));function _6(a){if(R(_6,a,bc(a))){K(a,"position","absolute");K(a,"left",a.currentStyle.left);K(a,"top",a.currentStyle.top);_3();IE7.Layout.fixRight(a);_4(a)}};function _4(a,b){positionTop(a,b);positionLeft(a,b,true);if(!a.runtimeStyle.autoLeft&&a.currentStyle.marginLeft=="auto"&&a.currentStyle.right!="auto"){var c=s.clientWidth-getPixelWidth(a,a.currentStyle.right)-getPixelWidth(a,a.runtimeStyle._c)-a.clientWidth;if(a.currentStyle.marginRight=="auto")c=parseInt(c/2);if(_1(a.offsetParent))a.runtimeStyle.pixelLeft+=c;else a.runtimeStyle.shiftLeft=c}clipWidth(a);clipHeight(a)};function clipWidth(a){var b=a.runtimeStyle.fixWidth;a.runtimeStyle.borderRightWidth="";a.runtimeStyle.width=b?getPixelWidth(a,b):"";if(a.currentStyle.width!="auto"){var c=a.getBoundingClientRect();var d=a.offsetWidth-s.clientWidth+c.left-2;if(d>=0){a.runtimeStyle.borderRightWidth="0px";d=Math.max(E(a,a.currentStyle.width)-d,0);K(a,"width",d);return d}}};eval(A(clipWidth));function positionLeft(a,b){if(!b&&J.test(a.currentStyle.width)){a.runtimeStyle.fixWidth=a.currentStyle.width}if(a.runtimeStyle.fixWidth){a.runtimeStyle.width=getPixelWidth(a,a.runtimeStyle.fixWidth)}a.runtimeStyle.shiftLeft=0;a.runtimeStyle._c=a.currentStyle.left;a.runtimeStyle.autoLeft=a.currentStyle.right!="auto"&&a.currentStyle.left=="auto";a.runtimeStyle.left="";a.runtimeStyle.screenLeft=getScreenLeft(a);a.runtimeStyle.pixelLeft=a.runtimeStyle.screenLeft;if(!b&&!_1(a.offsetParent)){_d(a,"pixelLeft","runtimeStyle.screenLeft+runtimeStyle.shiftLeft+document."+$viewport+".scrollLeft")}};eval(A(positionLeft));function getScreenLeft(a){var b=a.offsetLeft,c=1;if(a.runtimeStyle.autoLeft){b=s.clientWidth-a.offsetWidth-getPixelWidth(a,a.currentStyle.right)}if(a.currentStyle.marginLeft!="auto"){b-=getPixelWidth(a,a.currentStyle.marginLeft)}while(a=a.offsetParent){if(a.currentStyle.position!="static")c=-1;b+=a.offsetLeft*c}return b};eval(A(getScreenLeft));function getPixelWidth(a,b){return J.test(b)?parseInt(parseFloat(b)/100*s.clientWidth):E(a,b)};eval(A(getPixelWidth));function _g(){var a=_2.elements;for(var b in a)_8(a[b]);a=_6.elements;for(b in a){_4(a[b],true);_4(a[b],true)}_7=0};var _7;bq(function(){if(!_7)_7=setTimeout(_g,0)})};var bk={backgroundColor:"transparent",backgroundImage:"none",backgroundPositionX:null,backgroundPositionY:null,backgroundRepeat:null,borderTopWidth:0,borderRightWidth:0,borderBottomWidth:0,borderLeftStyle:"none",borderTopStyle:"none",borderRightStyle:"none",borderBottomStyle:"none",borderLeftWidth:0,height:null,marginTop:0,marginBottom:0,marginRight:0,marginLeft:0,width:"100%"};IE7.CSS.addRecalc("overflow","visible",function(a){if(a.parentNode.ie7_wrapped)return;if(IE7.Layout&&a.currentStyle["max-height"]!="auto"){IE7.Layout.maxHeight(a)}if(a.currentStyle.marginLeft=="auto")a.style.marginLeft=0;if(a.currentStyle.marginRight=="auto")a.style.marginRight=0;var b=document.createElement(bA);b.ie7_wrapped=a;for(var c in bk){b.style[c]=a.currentStyle[c];if(bk[c]!=null){a.runtimeStyle[c]=bk[c]}}b.style.display="block";b.style.position="relative";a.runtimeStyle.position="absolute";a.parentNode.insertBefore(b,a);b.appendChild(a)});function cf(){var f="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var g=0;g":"","\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/":"","@(namespace|import)[^;\\n]+[;\\n]":"","'(\\\\.|[^'\\\\])*'":bW,'"(\\\\.|[^"\\\\])*"':bW,"\\s+":" "});function cS(a){return bV.exec(a)};function bg(c){return c.replace(cO,function(a,b){return bA[b-1]})};function bW(c){return"\x01"+bA.push(c.replace(cR,function(a,b){return eval("'\\u"+"0000".slice(b.length)+b+"'")}).slice(1,-1).replace(cP,"\\'"))};function bB(a){return cQ.test(a)?bA[a.slice(1)-1]:a};var cT=new H({Width:"Height",width:"height",Left:"Top",left:"top",Right:"Bottom",right:"bottom",onX:"onY"});function C(a){return cT.exec(a)};var bX=[];function bC(a){cV(a);v(window,"onresize",a)};function v(a,b,c){a.attachEvent(b,c);bX.push(arguments)};function cU(a,b,c){try{a.detachEvent(b,c)}catch(ignore){}};v(window,"onunload",function(){var a;while(a=bX.pop()){cU(a[0],a[1],a[2])}});function X(a,b,c){if(!a.elements)a.elements={};if(c)a.elements[b.uniqueID]=b;else delete a.elements[b.uniqueID];return c};v(window,"onbeforeprint",function(){if(!IE7.CSS.print)new bJ("print");IE7.CSS.print.recalc()});var bY=/^\d+(px)?$/i;var M=/^\d+%$/;var D=function(a,b){if(bY.test(b))return parseInt(b);var c=a.style.left;var d=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;a.style.left=b||0;b=a.style.pixelLeft;a.style.left=c;a.runtimeStyle.left=d;return b};var bD="ie7-";var bZ=B.extend({constructor:function(){this.fixes=[];this.recalcs=[]},init:U});var bE=[];function cV(a){bE.push(a)};IE7.recalc=function(){IE7.HTML.recalc();IE7.CSS.recalc();for(var a=0;a1?2:0;var h=E.exec(f[g])||"if(0){";if(p){h+=i("if(e%1.nodeName!='!'){",l)}var j=Y>1?ch:"";h+=i(j+ci,l);h+=Array(L(h,/\{/g).length+1).join("}");d+=h}eval(i(cj,I)+E.unescape(d)+"return s?null:r}");bj[a]=_k}return bj[a](b||document,c)};var bi=m<6;var cb=/^(href|src)$/;var bG={"class":"className","for":"htmlFor"};IE7._1=1;IE7._e=function(a,b){var c=a.all[b]||null;if(!c||c.id==b)return c;for(var d=0;d+~,]|[^(]\+|^)([#.:\[])/g,cX=/(^|,)([^\s>+~])/g,cY=/\s*([\s>+~(),]|^|$)\s*/g,cd=/\s\*\s/g;var ce=H.extend({constructor:function(a){this.base(a);this.sorter=new H;this.sorter.add(/:not\([^)]*\)/,H.IGNORE);this.sorter.add(/([ >](\*|[\w-]+))([^: >+~]*)(:\w+-child(\([^)]+\))?)([^: >+~]*)/,"$1$3$6$4")},ignoreCase:true,escape:function(a){return this.optimise(this.format(a))},format:function(a){return a.replace(cY,"$1").replace(cX,"$1 $2").replace(cW,"$1*$2")},optimise:function(a){return this.sorter.exec(a.replace(cd,">* "))},unescape:function(a){return bg(a)}});var cf={"":"%1!=null","=":"%1=='%2'","~=":/(^| )%1( |$)/,"|=":/^%1(-|$)/,"^=":/^%1/,"$=":/%1$/,"*=":/%1/};var bH={"first-child":"!IE7._4(e%1)","link":"e%1.currentStyle['ie7-link']=='link'","visited":"e%1.currentStyle['ie7-link']=='visited'"};var bI="var p%2=0,i%2,e%2,n%2=e%1.";var cg="e%1.sourceIndex";var ch="var g="+cg+";if(!p[g]){p[g]=1;";var ci="r[r.length]=e%1;if(s)return e%1;";var cj="var _k=function(e0,s){IE7._1++;var r=[],p={},reg=[%1],d=document;";var I;var l;var p;var y;var Y;var bj={};var E=new ce({" (\\*|[\\w-]+)#([\\w-]+)":function(a,b,c){p=false;var d="var e%2=IE7._e(d,'%4');if(e%2&&";if(b!="*")d+="e%2.nodeName=='%3'&&";d+="(e%1==d||e%1.contains(e%2))){";if(y)d+=i("i%1=n%1.length;",y);return i(d,l++,l,b.toUpperCase(),c)}," (\\*|[\\w-]+)":function(a,b){Y++;p=b=="*";var c=bI;c+=(p&&bi)?"all":"getElementsByTagName('%3')";c+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";return i(c,l++,y=l,b.toUpperCase())},">(\\*|[\\w-]+)":function(a,b){var c=y;p=b=="*";var d=bI;d+=c?"children":"childNodes";if(!p&&c)d+=".tags('%3')";d+=";for(i%2=0;(e%2=n%2[i%2]);i%2++){";if(p){d+="if(e%2.nodeType==1){";p=bi}else{if(!c)d+="if(e%2.nodeName=='%3'){"}return i(d,l++,y=l,b.toUpperCase())},"\\+(\\*|[\\w-]+)":function(a,b){var c="";if(p)c+="if(e%1.nodeName!='!'){";p=false;c+="e%1=IE7._3(e%1);if(e%1";if(b!="*")c+="&&e%1.nodeName=='%2'";c+="){";return i(c,l,b.toUpperCase())},"~(\\*|[\\w-]+)":function(a,b){var c="";if(p)c+="if(e%1.nodeName!='!'){";p=false;Y=2;c+="while(e%1=e%1.nextSibling){if(e%1.ie7_adjacent==IE7._1)break;if(";if(b=="*"){c+="e%1.nodeType==1";if(bi)c+="&&e%1.nodeName!='!'"}else c+="e%1.nodeName=='%2'";c+="){e%1.ie7_adjacent=IE7._1;";return i(c,l,b.toUpperCase())},"#([\\w-]+)":function(a,b){p=false;var c="if(e%1.id=='%2'){";if(y)c+=i("i%1=n%1.length;",y);return i(c,l,b)},"\\.([\\w-]+)":function(a,b){p=false;I.push(new RegExp("(^|\\s)"+W(b)+"(\\s|$)"));return i("if(e%1.className&®[%2].test(e%1.className)){",l,I.length-1)},"\\[([\\w-]+)\\s*([^=]?=)?\\s*([^\\]]*)\\]":function(a,b,c,d){var f=bG[b]||b;if(c){var g="e%1.getAttribute('%2',2)";if(!cb.test(b)){g="e%1.%3||"+g}b=i("("+g+")",l,b,f)}else{b=i("IE7._f(e%1,'%2')",l,b)}var h=cf[c||""]||"0";if(h&&h.source){I.push(new RegExp(i(h.source,W(E.unescape(d)))));h="reg[%2].test(%1)";d=I.length-1}return"if("+i(h,b,d)+"){"},":+([\\w-]+)(\\(([^)]+)\\))?":function(a,b,c,d){b=bH[b];return"if("+(b?i(b,l,d||""):"0")+"){"}});var ck=/a(#[\w-]+)?(\.[\w-]+)?:(hover|active)/i;var cl=/\s*\{\s*/,cm=/\s*\}\s*/,cn=/\s*\,\s*/;var co=/(.*)(:first-(line|letter))/;var z=document.styleSheets;IE7.CSS=new(bZ.extend({parser:new bU,screen:"",print:"",styles:[],rules:[],pseudoClasses:m<7?"first\\-child":"",dynamicPseudoClasses:{toString:function(){var a=[];for(var b in this)a.push(b);return a.join("|")}},init:function(){var a="^\x01$";var b="\\[class=?[^\\]]*\\]";var c=[];if(this.pseudoClasses)c.push(this.pseudoClasses);var d=this.dynamicPseudoClasses.toString();if(d)c.push(d);c=c.join("|");var f=m<7?["[>+~[(]|([:.])\\w+\\1"]:[b];if(c)f.push(":("+c+")");this.UNKNOWN=new RegExp(f.join("|")||a,"i");var g=m<7?["\\[[^\\]]+\\]|[^\\s(\\[]+\\s*[+~]"]:[b];var h=g.concat();if(c)h.push(":("+c+")");o.COMPLEX=new RegExp(h.join("|")||a,"ig");if(this.pseudoClasses)g.push(":("+this.pseudoClasses+")");O.COMPLEX=new RegExp(g.join("|")||a,"i");O.MATCH=new RegExp(d?"(.*):("+d+")(.*)":a,"i");this.createStyleSheet();this.refresh()},addEventHandler:function(){v.apply(null,arguments)},addFix:function(a,b){this.parser.add(a,b)},addRecalc:function(c,d,f,g){d=new RegExp("([{;\\s])"+c+"\\s*:\\s*"+d+"[^;}]*");var h=this.recalcs.length;if(g)g=c+":"+g;this.addFix(d,function(a,b){return(g?b+g:a)+";ie7-"+a.slice(1)+";ie7_recalc"+h+":1"});this.recalcs.push(arguments);return h},apply:function(){this.getInlineStyles();new bJ("screen");this.trash()},createStyleSheet:function(){this.styleSheet=document.createStyleSheet();this.styleSheet.ie7=true;this.styleSheet.owningElement.ie7=true;this.styleSheet.cssText=J},getInlineStyles:function(){var a=document.getElementsByTagName("style"),b;for(var c=a.length-1;(b=a[c]);c--){if(!b.disabled&&!b.ie7){this.styles.push(b.innerHTML)}}},getText:function(a,b){try{var c=a.cssText}catch(e){c=""}if(K)c=cD(a.href,b)||c;return c},recalc:function(){this.screen.recalc();var a=/ie7_recalc\d+/g;var b=J.match(/[{,]/g).length;var c=b+(this.screen.cssText.match(/\{/g)||"").length;var d=this.styleSheet.rules,f;var g,h,j,q,r,k,u,n;for(r=b;r0&&o.CLASS.test(b)){b=b.replace(o.CLASS,"");d--}while(c>0&&o.TAG.test(b)){b=b.replace(o.TAG,"$1*");c--}b+="."+this.className;d=Math.min(d,2);c=Math.min(c,2);var f=-10*d-c;if(f>0){b=b+","+o.MAP[f]+" "+b}return b},remove:function(a){a.className=a.className.replace(this.MATCH,"$1")},toString:function(){return i("%1 {%2}",this.selectorText,this.cssText)}},{CHILD:/>/g,CLASS:/\.[\w-]+/,CLASSES:/[.:\[]/g,MULTI:/(\.[\w-]+)+/g,PREFIX:"ie7_class",TAG:/^\w+|([\s>+~])\w+/,TAGS:/^\w|[\s>+~]\w/g,MAP:{1:"html",2:"html body",10:".ie7_html",11:"html.ie7_html",12:"html.ie7_html body",20:".ie7_html .ie7_body",21:"html.ie7_html .ie7_body",22:"html.ie7_html body.ie7_body"}});var O=o.extend({constructor:function(a,b,c,d,f){this.attach=b||"*";this.dynamicPseudoClass=IE7.CSS.dynamicPseudoClasses[c];this.target=d;this.base(a,f)},recalc:function(){var a=x(this.attach),b;for(var c=0;b=a[c];c++){var d=this.target?x(this.target,b):[b];if(d.length)this.dynamicPseudoClass.apply(b,d,this)}}});var A=B.extend({constructor:function(a,b){this.name=a;this.apply=b;this.instances={};IE7.CSS.dynamicPseudoClasses[a]=this},register:function(a){var b=a[2];a.id=b.id+a[0].uniqueID;if(!this.instances[a.id]){var c=a[1],d;for(d=0;d*:"+(b=="marginTop"?"first":"last")+"-child",a,true);if(d&&d.currentStyle.styleFloat=="none"&&IE7.hasLayout(d)){collapseMargin(d,b);margin=_b(a,a.currentStyle[b]);childMargin=_b(d,d.currentStyle[b]);if(margin<0||childMargin<0){a.runtimeStyle[b]=margin+childMargin}else{a.runtimeStyle[b]=Math.max(childMargin,margin)}d.runtimeStyle[b]="0px"}}};function _b(a,b){return b=="auto"?0:D(a,b)};var UNIT=/^[.\d][\w%]*$/,AUTO=/^(auto|0cm)$/;var applyWidth,applyHeight;IE7.Layout.borderBox=function(a){applyWidth(a);applyHeight(a)};var fixWidth=function(g){applyWidth=function(a){if(!M.test(a.currentStyle.width))h(a);collapseMargins(a)};function h(a,b){if(!a.runtimeStyle.fixedWidth){if(!b)b=a.currentStyle.width;a.runtimeStyle.fixedWidth=(UNIT.test(b))?Math.max(0,r(a,b)):b;N(a,"width",a.runtimeStyle.fixedWidth)}};function j(a){if(!bh(a)){var b=a.offsetParent;while(b&&!IE7.hasLayout(b))b=b.offsetParent}return(b||t).clientWidth};function q(a,b){if(M.test(b))return parseInt(parseFloat(b)/100*j(a));return D(a,b)};var r=function(a,b){var c=a.currentStyle["box-sizing"]=="border-box";var d=0;if(G&&!c)d+=k(a)+u(a,"padding");else if(!G&&c)d-=k(a)+u(a,"padding");return q(a,b)+d};function k(a){return a.offsetWidth-a.clientWidth};function u(a,b){return q(a,a.currentStyle[b+"Left"])+q(a,a.currentStyle[b+"Right"])};J+="*{minWidth:none;maxWidth:none;min-width:none;max-width:none}";layout.minWidth=function(a){if(a.currentStyle["min-width"]!=null){a.style.minWidth=a.currentStyle["min-width"]}if(X(arguments.callee,a,a.currentStyle.minWidth!="none")){layout.boxSizing(a);h(a);n(a)}};eval("IE7.Layout.maxWidth="+String(layout.minWidth).replace(/min/g,"max"));function n(a){var b=a.getBoundingClientRect();var c=b.right-b.left;if(a.currentStyle.minWidth!="none"&&c<=r(a,a.currentStyle.minWidth)){a.runtimeStyle.width=a.currentStyle.minWidth}else if(a.currentStyle.maxWidth!="none"&&c>=r(a,a.currentStyle.maxWidth)){a.runtimeStyle.width=a.currentStyle.maxWidth}else{a.runtimeStyle.width=a.runtimeStyle.fixedWidth}};function s(a){if(X(s,a,/^(fixed|absolute)$/.test(a.currentStyle.position)&&bF(a,"left")!="auto"&&bF(a,"right")!="auto"&&AUTO.test(bF(a,"width")))){R(a);IE7.Layout.boxSizing(a)}};IE7.Layout.fixRight=s;function R(a){var b=q(a,a.runtimeStyle._c||a.currentStyle.left);var c=j(a)-q(a,a.currentStyle.right)-b-u(a,"margin");if(parseInt(a.runtimeStyle.width)==c)return;a.runtimeStyle.width="";if(bh(a)||g||a.offsetWidth=5.5&&m<7){IE7.CSS.addFix(/background(-image)?\s*:\s*([^};]*)?url\(([^\)]+)\)([^;}]*)?/,function(a,b,c,d,f){d=bB(d);return bm.test(d)?"filter:"+i(bK,d,"crop")+";zoom:1;background"+(b||"")+":"+(c||"")+"none"+(f||""):a});IE7.HTML.addRecalc("img,input",function(a){if(a.tagName=="INPUT"&&a.type!="image")return;bL(a);v(a,"onpropertychange",function(){if(!bn&&event.propertyName=="src"&&a.src.indexOf(bk)==-1)bL(a)})});var bn=false;v(window,"onbeforeprint",function(){bn=true;for(var a=0;a=7)return;IE7.CSS.addRecalc("position","fixed",_8,"absolute");IE7.CSS.addRecalc("background(-attachment)?","[^};]*fixed",_5);var $viewport=G?"body":"documentElement";function _6(){if(w.currentStyle.backgroundAttachment!="fixed"){if(w.currentStyle.backgroundImage=="none"){w.runtimeStyle.backgroundRepeat="no-repeat";w.runtimeStyle.backgroundImage="url("+bk+")"}w.runtimeStyle.backgroundAttachment="fixed"}_6=U};var _0=ca("img");function _2(a){return a?bh(a)||_2(a.parentElement):false};function _d(a,b,c){setTimeout("document.all."+a.uniqueID+".runtimeStyle.setExpression('"+b+"','"+c+"')",0)};function _5(a){if(X(_5,a,a.currentStyle.backgroundAttachment=="fixed"&&!a.contains(w))){_6();bgLeft(a);bgTop(a);_a(a)}};function _a(a){_0.src=a.currentStyle.backgroundImage.slice(5,-2);var b=a.canHaveChildren?a:a.parentElement;b.appendChild(_0);setOffsetLeft(a);setOffsetTop(a);b.removeChild(_0)};function bgLeft(a){a.style.backgroundPositionX=a.currentStyle.backgroundPositionX;if(!_2(a)){_d(a,"backgroundPositionX","(parseInt(runtimeStyle.offsetLeft)+document."+$viewport+".scrollLeft)||0")}};eval(C(bgLeft));function setOffsetLeft(a){var b=_2(a)?"backgroundPositionX":"offsetLeft";a.runtimeStyle[b]=getOffsetLeft(a,a.style.backgroundPositionX)-a.getBoundingClientRect().left-a.clientLeft+2};eval(C(setOffsetLeft));function getOffsetLeft(a,b){switch(b){case"left":case"top":return 0;case"right":case"bottom":return t.clientWidth-_0.offsetWidth;case"center":return(t.clientWidth-_0.offsetWidth)/2;default:if(M.test(b)){return parseInt((t.clientWidth-_0.offsetWidth)*parseFloat(b)/100)}_0.style.left=b;return _0.offsetLeft}};eval(C(getOffsetLeft));function _8(a){if(X(_8,a,bh(a))){N(a,"position","absolute");N(a,"left",a.currentStyle.left);N(a,"top",a.currentStyle.top);_6();IE7.Layout.fixRight(a);_7(a)}};function _7(a,b){positionTop(a,b);positionLeft(a,b,true);if(!a.runtimeStyle.autoLeft&&a.currentStyle.marginLeft=="auto"&&a.currentStyle.right!="auto"){var c=t.clientWidth-getPixelWidth(a,a.currentStyle.right)-getPixelWidth(a,a.runtimeStyle._c)-a.clientWidth;if(a.currentStyle.marginRight=="auto")c=parseInt(c/2);if(_2(a.offsetParent))a.runtimeStyle.pixelLeft+=c;else a.runtimeStyle.shiftLeft=c}clipWidth(a);clipHeight(a)};function clipWidth(a){var b=a.runtimeStyle.fixWidth;a.runtimeStyle.borderRightWidth="";a.runtimeStyle.width=b?getPixelWidth(a,b):"";if(a.currentStyle.width!="auto"){var c=a.getBoundingClientRect();var d=a.offsetWidth-t.clientWidth+c.left-2;if(d>=0){a.runtimeStyle.borderRightWidth="0px";d=Math.max(D(a,a.currentStyle.width)-d,0);N(a,"width",d);return d}}};eval(C(clipWidth));function positionLeft(a,b){if(!b&&M.test(a.currentStyle.width)){a.runtimeStyle.fixWidth=a.currentStyle.width}if(a.runtimeStyle.fixWidth){a.runtimeStyle.width=getPixelWidth(a,a.runtimeStyle.fixWidth)}a.runtimeStyle.shiftLeft=0;a.runtimeStyle._c=a.currentStyle.left;a.runtimeStyle.autoLeft=a.currentStyle.right!="auto"&&a.currentStyle.left=="auto";a.runtimeStyle.left="";a.runtimeStyle.screenLeft=getScreenLeft(a);a.runtimeStyle.pixelLeft=a.runtimeStyle.screenLeft;if(!b&&!_2(a.offsetParent)){_d(a,"pixelLeft","runtimeStyle.screenLeft+runtimeStyle.shiftLeft+document."+$viewport+".scrollLeft")}};eval(C(positionLeft));function getScreenLeft(a){var b=a.offsetLeft,c=1;if(a.runtimeStyle.autoLeft){b=t.clientWidth-a.offsetWidth-getPixelWidth(a,a.currentStyle.right)}if(a.currentStyle.marginLeft!="auto"){b-=getPixelWidth(a,a.currentStyle.marginLeft)}while(a=a.offsetParent){if(a.currentStyle.position!="static")c=-1;b+=a.offsetLeft*c}return b};eval(C(getScreenLeft));function getPixelWidth(a,b){return M.test(b)?parseInt(parseFloat(b)/100*t.clientWidth):D(a,b)};eval(C(getPixelWidth));function _j(){var a=_5.elements;for(var b in a)_a(a[b]);a=_8.elements;for(b in a){_7(a[b],true);_7(a[b],true)}_9=0};var _9;bC(function(){if(!_9)_9=setTimeout(_j,0)})};var bp={backgroundColor:"transparent",backgroundImage:"none",backgroundPositionX:null,backgroundPositionY:null,backgroundRepeat:null,borderTopWidth:0,borderRightWidth:0,borderBottomWidth:0,borderLeftStyle:"none",borderTopStyle:"none",borderRightStyle:"none",borderBottomStyle:"none",borderLeftWidth:0,height:null,marginTop:0,marginBottom:0,marginRight:0,marginLeft:0,width:"100%"};IE7.CSS.addRecalc("overflow","visible",function(a){if(a.parentNode.ie7_wrapped)return;if(IE7.Layout&&a.currentStyle["max-height"]!="auto"){IE7.Layout.maxHeight(a)}if(a.currentStyle.marginLeft=="auto")a.style.marginLeft=0;if(a.currentStyle.marginRight=="auto")a.style.marginRight=0;var b=document.createElement(bN);b.ie7_wrapped=a;for(var c in bp){b.style[c]=a.currentStyle[c];if(bp[c]!=null){a.runtimeStyle[c]=bp[c]}}b.style.display="block";b.style.position="relative";a.runtimeStyle.position="absolute";a.parentNode.insertBefore(b,a);b.appendChild(a)});function cq(){var f="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var g=0;g=%2",f,g,c,d,"&&","%","==");if(h)j="!("+j+")";return j};bH={"link":"e%1.currentStyle['ie7-link']=='link'","visited":"e%1.currentStyle['ie7-link']=='visited'","checked":"e%1.checked","contains":"e%1.innerText.indexOf('%2')!=-1","disabled":"e%1.isDisabled","empty":"IE7._g(e%1)","enabled":"e%1.disabled===false","first-child":"!IE7._4(e%1)","lang":"IE7._h(e%1,'%2')","last-child":"!IE7._3(e%1)","only-child":"!IE7._4(e%1)&&!IE7._3(e%1)","target":"e%1.id==location.hash.slice(1)","indeterminate":"e%1.indeterminate"};IE7._i=function(a){if(a.rows){a.ie7_length=a.rows.length;a.ie7_lookup="rowIndex"}else if(a.cells){a.ie7_length=a.cells.length;a.ie7_lookup="cellIndex"}else if(a.ie7_indexed!=IE7._1){var b=0;var c=a.firstChild;while(c){if(c.nodeType==1&&c.nodeName!="!"){c.ie7_index=++b}c=c.nextSibling}a.ie7_length=b;a.ie7_lookup="ie7_index"}a.ie7_indexed=IE7._1;return a};var ba=E[V];var cs=ba[ba.length-1];ba.length--;E.merge({":not\\((\\*|[\\w-]+)?([^)]*)\\)":function(a,b,c){var d=(b&&b!="*")?i("if(e%1.nodeName=='%2'){",l,b.toUpperCase()):"";d+=E.exec(c);return"if(!"+d.slice(2,-1).replace(/\)\{if\(/g,"&&")+"){"},":nth(-last)?-child\\(([^)]+)\\)":function(a,b,c){p=false;b=i("e%1.parentNode.ie7_length",l);var d="if(p%1!==e%1.parentNode)p%1=IE7._i(e%1.parentNode);";d+="var i=e%1[p%1.ie7_lookup];if(p%1.ie7_lookup!='ie7_index')i++;if(";return i(d,l)+cr(a,c,"i",b)+"){"}});ba.push(cs);var bM="\\([^)]*\\)";if(IE7.CSS.pseudoClasses)IE7.CSS.pseudoClasses+="|";IE7.CSS.pseudoClasses+="before|after|last\\-child|only\\-child|empty|root|"+"not|nth\\-child|nth\\-last\\-child|contains|lang".split("|").join(bM+"|")+bM;bV.add(/::/,":");var bb=new A("focus",function(a){var b=arguments;IE7.CSS.addEventHandler(a,"onfocus",function(){bb.unregister(b);bb.register(b)});IE7.CSS.addEventHandler(a,"onblur",function(){bb.unregister(b)});if(a==document.activeElement){bb.register(b)}});var bq=new A("active",function(a){var b=arguments;IE7.CSS.addEventHandler(a,"onmousedown",function(){bq.register(b)})});v(document,"onmouseup",function(){var a=bq.instances;for(var b in a)bq.unregister(a[b])});var br=new A("checked",function(a){if(typeof a.checked!="boolean")return;var b=arguments;IE7.CSS.addEventHandler(a,"onpropertychange",function(){if(event.propertyName=="checked"){if(a.checked)br.register(b);else br.unregister(b)}});if(a.checked)br.register(b)});var bs=new A("enabled",function(a){if(typeof a.disabled!="boolean")return;var b=arguments;IE7.CSS.addEventHandler(a,"onpropertychange",function(){if(event.propertyName=="disabled"){if(!a.isDisabled)bs.register(b);else bs.unregister(b)}});if(!a.isDisabled)bs.register(b)});var bt=new A("disabled",function(a){if(typeof a.disabled!="boolean")return;var b=arguments;IE7.CSS.addEventHandler(a,"onpropertychange",function(){if(event.propertyName=="disabled"){if(a.isDisabled)bt.register(b);else bt.unregister(b)}});if(a.isDisabled)bt.register(b)});var bu=new A("indeterminate",function(a){if(typeof a.indeterminate!="boolean")return;var b=arguments;IE7.CSS.addEventHandler(a,"onpropertychange",function(){if(event.propertyName=="indeterminate"){if(a.indeterminate)bu.register(b);else bu.unregister(b)}});IE7.CSS.addEventHandler(a,"onclick",function(){bu.unregister(b)})});var bv=new A("target",function(a){var b=arguments;if(!a.tabIndex)a.tabIndex=0;IE7.CSS.addEventHandler(document,"onpropertychange",function(){if(event.propertyName=="activeElement"){if(a.id&&a.id==location.hash.slice(1))bv.register(b);else bv.unregister(b)}});if(a.id&&a.id==location.hash.slice(1))bv.register(b)});var ct=/^attr/;var cu=/^url\s*\(\s*([^)]*)\)$/;var cv={before0:"beforeBegin",before1:"afterBegin",after0:"afterEnd",after1:"beforeEnd"};var F=IE7.PseudoElement=o.extend({constructor:function(a,b,c){this.position=b;var d=c.match(F.CONTENT),f,g;if(d){d=d[1];f=d.split(/\s+/);for(var h=0;(g=f[h]);h++){f[h]=ct.test(g)?{attr:g.slice(5,-1)}:(g.charAt(0)=="'")?bB(g):bg(g)}d=f}this.content=d;this.base(a,bg(c))},init:function(){this.match=x(this.selector);for(var a=0;a%4",MATCH:/(.*):(before|after).*/,count:0});var cw=/^(submit|reset|button)$/;IE7.HTML.addRecalc("button,input",function(a){if(a.tagName=="BUTTON"){var b=a.outerHTML.match(/ value="([^"]*)"/i);a.runtimeStyle.value=(b)?b[1]:""}if(a.type=="submit"){v(a,"onclick",function(){a.runtimeStyle.clicked=true;setTimeout("document.all."+a.uniqueID+".runtimeStyle.clicked=false",1)})}});IE7.HTML.addRecalc("form",function(c){v(c,"onsubmit",function(){for(var a,b=0;a=c[b];b++){if(cw.test(a.type)&&!a.disabled&&!a.runtimeStyle.clicked){a.disabled=true;setTimeout("document.all."+a.uniqueID+".disabled=false",1)}else if(a.tagName=="BUTTON"&&a.type=="submit"){setTimeout("document.all."+a.uniqueID+".value='"+a.value+"'",1);a.value=a.runtimeStyle.value}}})});IE7.HTML.addRecalc("img",function(a){if(a.alt&&!a.title)a.title=""});IE7.CSS.addRecalc("border-spacing",P,function(a){if(a.currentStyle.borderCollapse!="collapse"){a.cellSpacing=D(a,a.currentStyle["border-spacing"])}});IE7.CSS.addRecalc("box-sizing","content-box",IE7.Layout.boxSizing);IE7.CSS.addRecalc("box-sizing","border-box",IE7.Layout.borderBox);IE7.CSS.addFix(/opacity\s*:\s*([\d.]+)/,function(a,b){return"zoom:1;filter:Alpha(opacity="+((b*100)||1)+")"});var cx=/^image/i;IE7.HTML.addRecalc("object",function(a){if(cx.test(a.type)){a.body.style.cssText="margin:0;padding:0;border:none;overflow:hidden";return a}});IE7.loaded=true;(function(){try{bx.doScroll("left")}catch(e){setTimeout(arguments.callee,1);return}try{eval(bO.innerHTML)}catch(e){}bm=new RegExp(W(typeof IE7_PNG_SUFFIX=="string"?IE7_PNG_SUFFIX:"-trans.png")+"$","i");w=document.body;t=G?w:bx;w.className+=" ie7_body";bx.className+=" ie7_html";if(G)cq();IE7.CSS.init();IE7.HTML.init();IE7.HTML.apply();IE7.CSS.apply();IE7.recalc()})()})(); \ No newline at end of file diff --git a/www/plugins-dist/msie_compat/javascript/IE9.js b/www/plugins-dist/msie_compat/javascript/IE9.js deleted file mode 100644 index fec8166a..00000000 --- a/www/plugins-dist/msie_compat/javascript/IE9.js +++ /dev/null @@ -1,2886 +0,0 @@ -/* - IE7/IE8/IE9.js - copyright 2004-2010, Dean Edwards - http://code.google.com/p/ie7-js/ - http://www.opensource.org/licenses/mit-license.php -*/ - -/* W3C compliance for Microsoft Internet Explorer */ - -/* credits/thanks: - Shaggy, Martijn Wargers, Jimmy Cerra, Mark D Anderson, - Lars Dieckow, Erik Arvidsson, Gellért Gyuris, James Denny, - Unknown W Brackets, Benjamin Westfarer, Rob Eberhardt, - Bill Edney, Kevin Newman, James Crompton, Matthew Mastracci, - Doug Wright, Richard York, Kenneth Kolano, MegaZone, - Thomas Verelst, Mark 'Tarquin' Wilton-Jones, Rainer Åhlfors, - David Zulaica, Ken Kolano, Kevin Newman, Sjoerd Visscher, - Ingo Chao -*/ - -// timestamp: Sun, 07 Mar 2010 18:13:50 - -(function(window, document) { - -var IE7 = window.IE7 = { - version: "2.1(beta3)", - toString: K("[IE7]") -}; -IE7.compat = 9; -var appVersion = IE7.appVersion = navigator.appVersion.match(/MSIE (\d\.\d)/)[1] - 0; - -if (/ie7_off/.test(top.location.search) || appVersion < 5.5 || appVersion >= IE7.compat) return; - -var MSIE5 = appVersion < 6; - -var Undefined = K(); -var documentElement = document.documentElement, body, viewport; -var ANON = "!"; -var HEADER = ":link{ie7-link:link}:visited{ie7-link:visited}"; - -// ----------------------------------------------------------------------- -// external -// ----------------------------------------------------------------------- - -var RELATIVE = /^[\w\.]+[^:]*$/; -function makePath(href, path) { - if (RELATIVE.test(href)) href = (path || "") + href; - return href; -}; - -function getPath(href, path) { - href = makePath(href, path); - return href.slice(0, href.lastIndexOf("/") + 1); -}; - -// Get the path to this script -var script = document.scripts[document.scripts.length - 1]; -var path = getPath(script.src); - -// Use microsoft's http request object to load external files -try { - var httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); -} catch (ex) { - // ActiveX disabled -} - -var fileCache = {}; -function loadFile(href, path) { - try { - href = makePath(href, path); - if (!fileCache[href]) { - httpRequest.open("GET", href, false); - httpRequest.send(); - if (httpRequest.status == 0 || httpRequest.status == 200) { - fileCache[href] = httpRequest.responseText; - } - } - } catch (ex) { - // ignore errors - } - return fileCache[href] || ""; -}; - -// ----------------------------------------------------------------------- -// OO support -// ----------------------------------------------------------------------- - - -// This is a cut-down version of base2 (http://code.google.com/p/base2/) - -var _slice = Array.prototype.slice; - -// private -var _FORMAT = /%([1-9])/g; -var _LTRIM = /^\s\s*/; -var _RTRIM = /\s\s*$/; -var _RESCAPE = /([\/()[\]{}|*+-.,^$?\\])/g; // safe regular expressions -var _BASE = /\bbase\b/; -var _HIDDEN = ["constructor", "toString"]; // only override these when prototyping - -var prototyping; - -function Base(){}; -Base.extend = function(_instance, _static) { - // Build the prototype. - prototyping = true; - var _prototype = new this; - extend(_prototype, _instance); - prototyping = false; - - // Create the wrapper for the constructor function. - var _constructor = _prototype.constructor; - function klass() { - // Don't call the constructor function when prototyping. - if (!prototyping) _constructor.apply(this, arguments); - }; - _prototype.constructor = klass; - - // Build the static interface. - klass.extend = arguments.callee; - extend(klass, _static); - klass.prototype = _prototype; - return klass; -}; -Base.prototype.extend = function(source) { - return extend(this, source); -}; - - -// A collection of regular expressions and their associated replacement values. -// A Base class for creating parsers. - -var HASH = "#"; -var ITEMS = "#"; -var KEYS = "."; -var COMPILED = "/"; - -var REGGRP_BACK_REF = /\\(\d+)/g, - REGGRP_ESCAPE_COUNT = /\[(\\.|[^\]\\])+\]|\\.|\(\?/g, - REGGRP_PAREN = /\(/g, - REGGRP_LOOKUP = /\$(\d+)/, - REGGRP_LOOKUP_SIMPLE = /^\$\d+$/, - REGGRP_LOOKUPS = /(\[(\\.|[^\]\\])+\]|\\.|\(\?)|\(/g, - REGGRP_DICT_ENTRY = /^<#\w+>$/, - REGGRP_DICT_ENTRIES = /<#(\w+)>/g; - -var RegGrp = Base.extend({ - constructor: function(values) { - this[KEYS] = []; - this[ITEMS] = {}; - this.merge(values); - }, - - //dictionary: null, - //ignoreCase: false, - - add: function(expression, replacement) { - delete this[COMPILED]; - if (expression instanceof RegExp) { - expression = expression.source; - } - if (!this[HASH + expression]) this[KEYS].push(String(expression)); - return this[ITEMS][HASH + expression] = new RegGrp.Item(expression, replacement, this); - }, - - compile: function(recompile) { - if (recompile || !this[COMPILED]) { - this[COMPILED] = new RegExp(this, this.ignoreCase ? "gi" : "g"); - } - return this[COMPILED]; - }, - - merge: function(values) { - for (var i in values) this.add(i, values[i]); - }, - - exec: function(string) { - var group = this, - patterns = group[KEYS], - items = group[ITEMS], item; - var result = this.compile(true).exec(string); - if (result) { - // Loop through the RegGrp items. - var i = 0, offset = 1; - while ((item = items[HASH + patterns[i++]])) { - var next = offset + item.length + 1; - if (result[offset]) { // do we have a result? - if (item.replacement === 0) { - return group.exec(string); - } else { - var args = result.slice(offset, next), j = args.length; - while (--j) args[j] = args[j] || ""; // some platforms return null/undefined for non-matching sub-expressions - args[0] = {match: args[0], item: item}; - return args; - } - } - offset = next; - } - } - return null; - }, - - parse: function(string) { - string += ""; // type safe - var group = this, - patterns = group[KEYS], - items = group[ITEMS]; - return string.replace(this.compile(), function(match) { - var args = [], item, offset = 1, i = arguments.length; - while (--i) args[i] = arguments[i] || ""; // some platforms return null/undefined for non-matching sub-expressions - // Loop through the RegGrp items. - while ((item = items[HASH + patterns[i++]])) { - var next = offset + item.length + 1; - if (args[offset]) { // do we have a result? - var replacement = item.replacement; - switch (typeof replacement) { - case "function": - return replacement.apply(group, args.slice(offset, next)); - case "number": - return args[offset + replacement]; - default: - return replacement; - } - } - offset = next; - } - return match; - }); - }, - - toString: function() { - var strings = [], - keys = this[KEYS], - items = this[ITEMS], item; - for (var i = 0; item = items[HASH + keys[i]]; i++) { - strings[i] = item.source; - } - return "(" + strings.join(")|(") + ")"; - } -}, { - IGNORE: null, // a null replacement value means that there is no replacement. - - Item: Base.extend({ - constructor: function(source, replacement, owner) { - var length = source.indexOf("(") === -1 ? 0 : RegGrp.count(source); - - var dictionary = owner.dictionary; - if (dictionary && source.indexOf("<#") !== -1) { - if (REGGRP_DICT_ENTRY.test(source)) { - var entry = dictionary[ITEMS][HASH + source.slice(2, -1)]; - source = entry.replacement; - length = entry._length; - } else { - source = dictionary.parse(source); - } - } - - if (typeof replacement == "number") replacement = String(replacement); - else if (replacement == null) replacement = 0; - - // Does the expression use sub-expression lookups? - if (typeof replacement == "string" && REGGRP_LOOKUP.test(replacement)) { - if (REGGRP_LOOKUP_SIMPLE.test(replacement)) { // A simple lookup? (e.g. "$2"). - // Store the index (used for fast retrieval of matched strings). - var index = replacement.slice(1) - 0; - if (index && index <= length) replacement = index; - } else { - // A complicated lookup (e.g. "Hello $2 $1."). - var lookup = replacement, regexp; - replacement = function(match) { - if (!regexp) { - regexp = new RegExp(source, "g" + (this.ignoreCase ? "i": "")); - } - return match.replace(regexp, lookup); - }; - } - } - - this.length = length; - this.source = String(source); - this.replacement = replacement; - } - }), - - count: function(expression) { - return (String(expression).replace(REGGRP_ESCAPE_COUNT, "").match(REGGRP_PAREN) || "").length; - } -}); - -var Dictionary = RegGrp.extend({ - parse: function(phrase) { - // Prevent sub-expressions in dictionary entries from capturing. - var entries = this[ITEMS]; - return phrase.replace(REGGRP_DICT_ENTRIES, function(match, entry) { - entry = entries[HASH + entry]; - return entry ? entry._nonCapturing : match; - }); - }, - - add: function(expression, replacement) { - // Get the underlying replacement value. - if (replacement instanceof RegExp) { - replacement = replacement.source; - } - // Translate the replacement. - // The result is the original replacement recursively parsed by this dictionary. - var nonCapturing = replacement.replace(REGGRP_LOOKUPS, _nonCapture); - if (replacement.indexOf("(") !== -1) { - var realLength = RegGrp.count(replacement); - } - if (replacement.indexOf("<#") !== -1) { - replacement = this.parse(replacement); - nonCapturing = this.parse(nonCapturing); - } - var item = this.base(expression, replacement); - item._nonCapturing = nonCapturing; - item._length = realLength || item.length; // underlying number of sub-groups - return item; - }, - - toString: function() { - return "(<#" + this[PATTERNS].join(">)|(<#") + ">)"; - } -}); - -function _nonCapture(match, escaped) { - return escaped || "(?:"; // non-capturing -}; - -// ========================================================================= -// lang/extend.js -// ========================================================================= - -function extend(object, source) { // or extend(object, key, value) - if (object && source) { - var proto = (typeof source == "function" ? Function : Object).prototype; - // Add constructor, toString etc - var i = _HIDDEN.length, key; - if (prototyping) while (key = _HIDDEN[--i]) { - var value = source[key]; - if (value != proto[key]) { - if (_BASE.test(value)) { - _override(object, key, value) - } else { - object[key] = value; - } - } - } - // Copy each of the source object's properties to the target object. - for (key in source) if (typeof proto[key] == "undefined") { - var value = source[key]; - // Check for method overriding. - if (object[key] && typeof value == "function" && _BASE.test(value)) { - _override(object, key, value); - } else { - object[key] = value; - } - } - } - return object; -}; - -function _override(object, name, method) { - // Override an existing method. - var ancestor = object[name]; - object[name] = function() { - var previous = this.base; - this.base = ancestor; - var returnValue = method.apply(this, arguments); - this.base = previous; - return returnValue; - }; -}; - -function combine(keys, values) { - // Combine two arrays to make a hash. - if (!values) values = keys; - var hash = {}; - for (var i in keys) hash[i] = values[i]; - return hash; -}; - -function format(string) { - // Replace %n with arguments[n]. - // e.g. format("%1 %2%3 %2a %1%3", "she", "se", "lls"); - // ==> "she sells sea shells" - // Only %1 - %9 supported. - var args = arguments; - var _FORMAT = new RegExp("%([1-" + arguments.length + "])", "g"); - return String(string).replace(_FORMAT, function(match, index) { - return index < args.length ? args[index] : match; - }); -}; - -function match(string, expression) { - // Same as String.match() except that this function will return an empty - // array if there is no match. - return String(string).match(expression) || []; -}; - -function rescape(string) { - // Make a string safe for creating a RegExp. - return String(string).replace(_RESCAPE, "\\$1"); -}; - -// http://blog.stevenlevithan.com/archives/faster-trim-javascript -function trim(string) { - return String(string).replace(_LTRIM, "").replace(_RTRIM, ""); -}; - -function K(k) { - return function() { - return k; - }; -}; - -// ----------------------------------------------------------------------- -// parsing -// ----------------------------------------------------------------------- - -var Parser = RegGrp.extend({ignoreCase: true}); - -var SINGLE_QUOTES = /'/g, - ESCAPED = /'(\d+)'/g, - ESCAPE = /\\/g, - UNESCAPE = /\\([nrtf'"])/g; - -var strings = []; - -var encoder = new Parser({ - // comments - "": "", - "\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/": "", - // get rid - "@(namespace|import)[^;\\n]+[;\\n]": "", - // strings - "'(\\\\.|[^'\\\\])*'": encodeString, - '"(\\\\.|[^"\\\\])*"': encodeString, - // white space - "\\s+": " " -}); - -function encode(selector) { - return encoder.parse(selector).replace(UNESCAPE, "$1"); -}; - -function decode(query) { - // put string values back - return query.replace(ESCAPED, decodeString); -}; - -function encodeString(string) { - var index = strings.length; - strings[index] = string.slice(1, -1) - .replace(UNESCAPE, "$1") - .replace(SINGLE_QUOTES, "\\'"); - return "'" + index + "'"; -}; - -function decodeString(match, index) { - var string = strings[index]; - if (string == null) return match; - return "'" + strings[index] + "'"; -}; - -function getString(value) { - return value.indexOf("'") === 0 ? strings[value.slice(1, - 1)] : value; -}; - -// clone a "width" function to create a "height" function -var rotater = new RegGrp({ - Width: "Height", - width: "height", - Left: "Top", - left: "top", - Right: "Bottom", - right: "bottom", - onX: "onY" -}); - -function rotate(fn) { - return rotater.parse(fn); -}; - -// ----------------------------------------------------------------------- -// event handling -// ----------------------------------------------------------------------- - -var eventHandlers = []; - -function addResize(handler) { - addRecalc(handler); - addEventHandler(window, "onresize", handler); -}; - -// add an event handler (function) to an element -function addEventHandler(element, type, handler) { - element.attachEvent(type, handler); - // store the handler so it can be detached later - eventHandlers.push(arguments); -}; - -// remove an event handler assigned to an element by IE7 -function removeEventHandler(element, type, handler) { - try { - element.detachEvent(type, handler); - } catch (ex) { - // write a letter of complaint to microsoft.. - } -}; - -// remove event handlers (they eat memory) -addEventHandler(window, "onunload", function() { - var handler; - while (handler = eventHandlers.pop()) { - removeEventHandler(handler[0], handler[1], handler[2]); - } -}); - -function register(handler, element, condition) { // -@DRE - //var set = handler[element.uniqueID]; - if (!handler.elements) handler.elements = {}; - if (condition) handler.elements[element.uniqueID] = element; - else delete handler.elements[element.uniqueID]; - //return !set && condition; - return condition; -}; - -addEventHandler(window, "onbeforeprint", function() { - if (!IE7.CSS.print) new StyleSheet("print"); - IE7.CSS.print.recalc(); -}); - -// ----------------------------------------------------------------------- -// pixel conversion -// ----------------------------------------------------------------------- - -// this is handy because it means that web developers can mix and match -// measurement units in their style sheets. it is not uncommon to -// express something like padding in "em" units whilst border thickness -// is most often expressed in pixels. - -var PIXEL = /^\d+(px)?$/i; -var PERCENT = /^\d+%$/; -var getPixelValue = function(element, value) { - if (PIXEL.test(value)) return parseInt(value); - var style = element.style.left; - var runtimeStyle = element.runtimeStyle.left; - element.runtimeStyle.left = element.currentStyle.left; - element.style.left = value || 0; - value = element.style.pixelLeft; - element.style.left = style; - element.runtimeStyle.left = runtimeStyle; - return value; -}; - -// ----------------------------------------------------------------------- -// generic -// ----------------------------------------------------------------------- - -var $IE7 = "ie7-"; - -var Fix = Base.extend({ - constructor: function() { - this.fixes = []; - this.recalcs = []; - }, - init: Undefined -}); - -// a store for functions that will be called when refreshing IE7 -var recalcs = []; -function addRecalc(recalc) { - recalcs.push(recalc); -}; - -IE7.recalc = function() { - IE7.HTML.recalc(); - // re-apply style sheet rules (re-calculate ie7 classes) - IE7.CSS.recalc(); - // apply global fixes to the document - for (var i = 0; i < recalcs.length; i++) recalcs[i](); -}; - -function isFixed(element) { - return element.currentStyle["ie7-position"] == "fixed"; -}; - -// original style -function getDefinedStyle(element, propertyName) { - return element.currentStyle[$IE7 + propertyName] || element.currentStyle[propertyName]; -}; - -function setOverrideStyle(element, propertyName, value) { - if (element.currentStyle[$IE7 + propertyName] == null) { - element.runtimeStyle[$IE7 + propertyName] = element.currentStyle[propertyName]; - } - element.runtimeStyle[propertyName] = value; -}; - -// Create a temporary element which is used to inherit styles -// from the target element. -function createTempElement(tagName) { - var element = document.createElement(tagName || "object"); - element.style.cssText = "position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999"; - element.ie7_anon = true; - return element; -}; - - -// ========================================================================= -// ie7-css.js -// ========================================================================= - -var NEXT_SIBLING = "(e.nextSibling&&IE7._getElementSibling(e,'next'))", - PREVIOUS_SIBLING = NEXT_SIBLING.replace(/next/g, "previous"), - IS_ELEMENT = "e.nodeName>'@'", - IF_ELEMENT = "if(" + IS_ELEMENT + "){"; - -var ID_ATTRIBUTE = "(e.nodeName==='FORM'?IE7._getAttribute(e,'id'):e.id)"; - -var HYPERLINK = /a(#[\w-]+)?(\.[\w-]+)?:(hover|active)/i; -var FIRST_LINE_LETTER = /(.*)(:first-(line|letter))/; -var SPACE = /\s/; -var RULE = /((?:\\.|[^{\\])+)\{((?:\\.|[^}\\])+)\}/g; -var SELECTOR = /(?:\\.|[^,\\])+/g; - -var styleSheets = document.styleSheets; - -var inheritedProperties = []; - -IE7.CSS = new (Fix.extend({ // single instance - parser: new Parser, - screen: "", - print: "", - styles: [], - rules: [], - pseudoClasses: appVersion < 7 ? "first\\-child" : "", - dynamicPseudoClasses: { - toString: function() { - var strings = []; - for (var pseudoClass in this) strings.push(pseudoClass); - return strings.join("|"); - } - }, - - init: function() { - var NONE = "^\x01$"; - var CLASS = "\\[class=?[^\\]]*\\]"; - var pseudoClasses = []; - if (this.pseudoClasses) pseudoClasses.push(this.pseudoClasses); - var dynamicPseudoClasses = this.dynamicPseudoClasses.toString(); - if (dynamicPseudoClasses) pseudoClasses.push(dynamicPseudoClasses); - pseudoClasses = pseudoClasses.join("|"); - var unknown = appVersion < 7 ? ["[>+~\\[(]|([:.])[\\w-]+\\1"] : [CLASS]; - if (pseudoClasses) unknown.push(":(" + pseudoClasses + ")"); - this.UNKNOWN = new RegExp(unknown.join("|") || NONE, "i"); - var complex = appVersion < 7 ? ["\\[[^\\]]+\\]|[^\\s(\\[]+\\s*[+~]"] : [CLASS]; - var complexRule = complex.concat(); - if (pseudoClasses) complexRule.push(":(" + pseudoClasses + ")"); - Rule.COMPLEX = new RegExp(complexRule.join("|") || NONE, "ig"); - if (this.pseudoClasses) complex.push(":(" + this.pseudoClasses + ")"); - DynamicRule.COMPLEX = new RegExp(complex.join("|") || NONE, "i"); - dynamicPseudoClasses = "not\\(:" + dynamicPseudoClasses.split("|").join("\\)|not\\(:") + "\\)|" + dynamicPseudoClasses; - DynamicRule.MATCH = new RegExp(dynamicPseudoClasses ? "(.*?):(" + dynamicPseudoClasses + ")(.*)" : NONE, "i"); - - this.createStyleSheet(); - this.refresh(); - }, - - addEventHandler: function() { - addEventHandler.apply(null, arguments); - }, - - addFix: function(expression, replacement) { - this.parser.add(expression, replacement); - }, - - addRecalc: function(propertyName, test, handler, replacement) { - // recalcs occur whenever the document is refreshed using document.recalc() - propertyName = propertyName.source || propertyName; - test = new RegExp("([{;\\s])" + propertyName + "\\s*:\\s*" + test + "[^;}]*"); - var id = this.recalcs.length; - if (typeof replacement == "string") replacement = propertyName + ":" + replacement; - this.addFix(test, function(match) { - if (typeof replacement == "function") replacement = replacement(match); - return (replacement ? replacement : match) + ";ie7-" + match.slice(1) + ";ie7_recalc" + id + ":1"; - }); - this.recalcs.push(arguments); - return id; - }, - - apply: function() { - this.getInlineCSS(); - new StyleSheet("screen"); - this.trash(); - }, - - createStyleSheet: function() { - // create the IE7 style sheet - document.getElementsByTagName("head")[0].appendChild(document.createElement("style")); - this.styleSheet = styleSheets[styleSheets.length - 1]; - // flag it so we can ignore it during parsing - this.styleSheet.ie7 = true; - this.styleSheet.owningElement.ie7 = true; - this.styleSheet.cssText = HEADER; - }, - - getInlineCSS: function() {// load inline styles - var styleSheets = document.getElementsByTagName("style"), styleSheet; - for (var i = styleSheets.length - 1; styleSheet = styleSheets[i]; i--) { - if (!styleSheet.disabled && !styleSheet.ie7) { - styleSheet._cssText = styleSheet.innerHTML; - } - } - }, - - getText: function(styleSheet, path) { - // Internet Explorer will trash unknown selectors (it converts them to "UNKNOWN"). - // So we must reload external style sheets (internal style sheets can have their text - // extracted through the innerHTML property). - - // load the style sheet text from an external file - try { - var cssText = styleSheet.cssText; - } catch (e) { - cssText = ""; - } - if (httpRequest) cssText = loadFile(styleSheet.href, path) || cssText; - return cssText; - }, - - recalc: function() { - this.screen.recalc(); - // we're going to read through all style rules. - // certain rules have had ie7 properties added to them. - // e.g. p{top:0; ie7_recalc2:1; left:0} - // this flags a property in the rule as needing a fix. - // the selector text is then used to query the document. - // we can then loop through the results of the query - // and fix the elements. - // we ignore the IE7 rules - so count them in the header - var RECALCS = /ie7_recalc\d+/g; - var start = HEADER.match(/[{,]/g).length; - // only calculate screen fixes. print fixes don't show up anyway - var rules = this.styleSheet.rules, rule; - var calcs, calc, elements, element, i, j, k, id; - // loop through all rules - for (i = start; rule = rules[i]; i++) { - var cssText = rule.style.cssText; - // search for the "ie7_recalc" flag (there may be more than one) - if (calcs = cssText.match(RECALCS)) { - // use the selector text to query the document - elements = cssQuery(rule.selectorText); - // if there are matching elements then loop - // through the recalc functions and apply them - // to each element - if (elements.length) for (j = 0; j < calcs.length; j++) { - // get the matching flag (e.g. ie7_recalc3) - id = calcs[j]; - // extract the numeric id from the end of the flag - // and use it to index the collection of recalc - // functions - calc = IE7.CSS.recalcs[id.slice(10)][2]; - for (k = 0; (element = elements[k]); k++) { - // apply the fix - if (element.currentStyle[id]) calc(element, cssText); - } - } - } - } - }, - - refresh: function() { - this.styleSheet.cssText = HEADER + this.screen + this.print; - }, - - trash: function() { - // trash the old style sheets - for (var i = 0; i < styleSheets.length; i++) { - if (!styleSheets[i].ie7) { - try { - var cssText = styleSheets[i].cssText; - } catch (e) { - cssText = ""; - } - if (cssText) styleSheets[i].cssText = ""; - } - } - } -})); - -// ----------------------------------------------------------------------- -// IE7 StyleSheet class -// ----------------------------------------------------------------------- - -var StyleSheet = Base.extend({ - constructor: function(media) { - this.media = media; - this.load(); - IE7.CSS[media] = this; - IE7.CSS.refresh(); - }, - - createRule: function(selector, cssText) { - var match; - if (PseudoElement && (match = selector.match(PseudoElement.MATCH))) { - return new PseudoElement(match[1], match[2], cssText); - } else if (match = selector.match(DynamicRule.MATCH)) { - if (!HYPERLINK.test(match[0]) || DynamicRule.COMPLEX.test(match[0])) { - return new DynamicRule(selector, match[1], match[2], match[3], cssText); - } - } else { - return new Rule(selector, cssText); - } - return selector + " {" + cssText + "}"; - }, - - getText: function() { - // store for style sheet text - // parse media decalarations - var MEDIA = /@media\s+([^{]+?)\s*\{([^@]+\})\s*\}/gi; - var IMPORTS = /@import[^;\n]+/gi; - var TRIM_IMPORTS = /@import\s+url\s*\(\s*["']?|["']?\s*\)\s*/gi; - var URL = /(url\s*\(\s*['"]?)([\w\.]+[^:\)]*['"]?\))/gi; - - var self = this; - - // Store loaded cssText URLs - var fileCache = {}; - - function getCSSText(styleSheet, path, media, level) { - var cssText = ""; - if (!level) { - media = toSimpleMedia(styleSheet.media); - level = 0; - } - if (media === "none") { - styleSheet.disabled = true; - return ""; - } - if (media === "all" || media === self.media) { - // IE only allows importing style sheets three levels deep. - // it will crash if you try to access a level below this - if (level < 3 && styleSheet.cssText) { - var hrefs = styleSheet.cssText.match(IMPORTS); - // loop through imported style sheets - for (var i = 0, imported; i < styleSheet.imports.length; i++) { - var imported = styleSheet.imports[i]; - var href = styleSheet._href || styleSheet.href; - imported._href = hrefs[i].replace(TRIM_IMPORTS, ""); - // call this function recursively to get all imported style sheets - cssText += getCSSText(imported, getPath(href, path), media, level + 1); - } - } - // retrieve inline style or load an external style sheet - cssText += encode(styleSheet.href ? loadStyleSheet(styleSheet, path) : styleSheet.owningElement._cssText); - cssText = parseMedia(cssText, self.media); - } - return cssText; - }; - - // Load all style sheets in the document - for (var i = 0; i < styleSheets.length; i++) { - var styleSheet = styleSheets[i]; - if (!styleSheet.disabled && !styleSheet.ie7) this.cssText += getCSSText(styleSheet); - } - - // helper functions - function parseMedia(cssText, media) { - filterMedia.value = media; - return cssText.replace(MEDIA, filterMedia); - }; - - function filterMedia(match, media, cssText) { - media = toSimpleMedia(media); - switch (media) { - case "screen": - case "print": - if (media !== filterMedia.value) return ""; - case "all": - return cssText; - } - return ""; - }; - - function toSimpleMedia(media) { - if (!media) return "all"; - var split = media.toLowerCase().split(/\s*,\s*/); - media = "none"; - for (var i = 0; i < split.length; i++) { - if (split[i] === "all") return "all"; - if (split[i] === "screen") { - if (media === "print") return "all"; - media = "screen"; - } else if (split[i] === "print") { - if (media === "screen") return "all"; - media = "print"; - } - } - return media; - }; - - // Load an external style sheet - function loadStyleSheet(styleSheet, path) { - var href = styleSheet._href || styleSheet.href; - var url = makePath(href, path); - // If the style sheet has already loaded then don't reload it - if (fileCache[url]) return ""; - // Load from source - fileCache[url] = styleSheet.disabled ? "" : - fixUrls(IE7.CSS.getText(styleSheet, path), getPath(href, path)); - return fileCache[url]; - }; - - // Fix CSS paths. - // We're lumping all css text into one big style sheet so relative - // paths have to be fixed. This is necessary anyway because of other - // Internet Explorer bugs. - function fixUrls(cssText, pathname) { - // hack & slash - return cssText.replace(URL, "$1" + pathname.slice(0, pathname.lastIndexOf("/") + 1) + "$2"); - }; - }, - - load: function() { - this.cssText = ""; - this.getText(); - this.parse(); - if (inheritedProperties.length) { - this.cssText = parseInherited(this.cssText); - } - this.cssText = decode(this.cssText); - fileCache = {}; - }, - - parse: function() { - this.cssText = IE7.CSS.parser.parse(this.cssText); - - // Parse the style sheet - var offset = IE7.CSS.rules.length; - var rules = [], rule; - while ((rule = RULE.exec(this.cssText))) { - var cssText = rule[2]; - if (cssText) { - var fixDescendants = appVersion < 7 && cssText.indexOf("AlphaImageLoader") !== -1; - var selectors = rule[1].match(SELECTOR), selector; - for (var i = 0; selector = selectors[i]; i++) { - selector = trim(selector); - var isUnknown = IE7.CSS.UNKNOWN.test(selector); - selectors[i] = isUnknown ? this.createRule(selector, cssText) : selector + "{" + cssText + "}"; - if (fixDescendants) selectors[i] += this.createRule(selector + ">*", "position:relative"); - } - rules.push(selectors.join("\n")); - } - } - this.cssText = rules.join("\n"); - this.rules = IE7.CSS.rules.slice(offset); - }, - - recalc: function() { - var rule, i; - for (i = 0; (rule = this.rules[i]); i++) rule.recalc(); - }, - - toString: function() { - return "@media " + this.media + "{" + this.cssText + "}"; - } -}); - -var PseudoElement; - -// ----------------------------------------------------------------------- -// IE7 style rules -// ----------------------------------------------------------------------- - -var Rule = IE7.Rule = Base.extend({ - constructor: function(selector, cssText) { - this.id = IE7.CSS.rules.length; - this.className = Rule.PREFIX + this.id; - var pseudoElement = selector.match(FIRST_LINE_LETTER); - this.selector = (pseudoElement ? pseudoElement[1] : selector) || "*"; - this.selectorText = this.parse(this.selector) + (pseudoElement ? pseudoElement[2] : ""); - this.cssText = cssText; - this.MATCH = new RegExp("\\s" + this.className + "(\\s|$)", "g"); - IE7.CSS.rules.push(this); - this.init(); - }, - - init: Undefined, - - add: function(element) { - // allocate this class - element.className += " " + this.className; - }, - - recalc: function() { - // execute the underlying css query for this class - var match = cssQuery(this.selector); - // add the class name for all matching elements - for (var i = 0; i < match.length; i++) this.add(match[i]); - }, - - parse: function(selector) { - // attempt to preserve specificity for "loose" parsing by - // removing unknown tokens from a css selector but keep as - // much as we can.. - var simple = selector.replace(Rule.CHILD, " ").replace(Rule.COMPLEX, ""); - if (appVersion < 7) simple = simple.replace(Rule.MULTI, ""); - var tags = match(simple, Rule.TAGS).length - match(selector, Rule.TAGS).length; - var classes = match(simple, Rule.CLASSES).length - match(selector, Rule.CLASSES).length + 1; - while (classes > 0 && Rule.CLASS.test(simple)) { - simple = simple.replace(Rule.CLASS, ""); - classes--; - } - while (tags > 0 && Rule.TAG.test(simple)) { - simple = simple.replace(Rule.TAG, "$1*"); - tags--; - } - simple += "." + this.className; - classes = Math.min(classes, 2); - tags = Math.min(tags, 2); - var score = -10 * classes - tags; - if (score > 0) { - simple = simple + "," + Rule.MAP[score] + " " + simple; - } - return simple; - }, - - remove: function(element) { - // deallocate this class - element.className = element.className.replace(this.MATCH, "$1"); - }, - - toString: function() { - return format("%1 {%2}", this.selectorText, this.cssText); - } -}, { - CHILD: />/g, - CLASS: /\.[\w-]+/, - CLASSES: /[.:\[]/g, - MULTI: /(\.[\w-]+)+/g, - PREFIX: "ie7_class", - TAG: /^\w+|([\s>+~])\w+/, - TAGS: /^\w|[\s>+~]\w/g, - MAP: { - "1": "html", - "2": "html body", - "10": ".ie7_html", - "11": "html.ie7_html", - "12": "html.ie7_html body", - "20": ".ie7_html .ie7_body", - "21": "html.ie7_html .ie7_body", - "22": "html.ie7_html body.ie7_body" - } -}); - -// ----------------------------------------------------------------------- -// IE7 dynamic style -// ----------------------------------------------------------------------- - -// object properties: -// attach: the element that an event handler will be attached to -// target: the element that will have the IE7 class applied - -var DynamicRule = Rule.extend({ - // properties - constructor: function(selector, attach, dynamicPseudoClass, target, cssText) { - this.negated = dynamicPseudoClass.indexOf("not") === 0; - if (this.negated) dynamicPseudoClass = dynamicPseudoClass.slice(5, -1); - // initialise object properties - this.attach = attach || "*"; - this.dynamicPseudoClass = IE7.CSS.dynamicPseudoClasses[dynamicPseudoClass]; - this.target = target; - this.base(selector, cssText); - }, - - recalc: function() { - // execute the underlying css query for this class - var attaches = cssQuery(this.attach), attach; - // process results - for (var i = 0; attach = attaches[i]; i++) { - // retrieve the event handler's target element(s) - var target = this.target ? cssQuery(this.target, attach) : [attach]; - // attach event handlers for dynamic pseudo-classes - if (target.length) this.dynamicPseudoClass.apply(attach, target, this); - } - } -}); - -// ----------------------------------------------------------------------- -// IE7 dynamic pseudo-classes -// ----------------------------------------------------------------------- - -var DynamicPseudoClass = Base.extend({ - constructor: function(name, apply) { - this.name = name; - this.apply = apply; - this.instances = {}; - IE7.CSS.dynamicPseudoClasses[name] = this; - }, - - register: function(instance, negated) { - // an "instance" is actually an Arguments object - var _class = instance[2]; - if (!negated && _class.negated) { - this.unregister(instance, true); - } else { - instance.id = _class.id + instance[0].uniqueID; - if (!this.instances[instance.id]) { - var target = instance[1], j; - for (j = 0; j < target.length; j++) _class.add(target[j]); - this.instances[instance.id] = instance; - } - } - }, - - unregister: function(instance, negated) { - var _class = instance[2]; - if (!negated && _class.negated) { - this.register(instance, true); - } else { - if (this.instances[instance.id]) { - var target = instance[1], j; - for (j = 0; j < target.length; j++) _class.remove(target[j]); - delete this.instances[instance.id]; - } - } - } -}); - -// ----------------------------------------------------------------------- -// dynamic pseudo-classes -// ----------------------------------------------------------------------- - -if (appVersion < 7) { - var Hover = new DynamicPseudoClass("hover", function(element) { - var instance = arguments; - IE7.CSS.addEventHandler(element, "onmouseenter", function() { - Hover.register(instance); - }); - IE7.CSS.addEventHandler(element, "onmouseleave", function() { - Hover.unregister(instance); - }); - }); - - // globally trap the mouseup event (thanks Martijn!) - addEventHandler(document, "onmouseup", function() { - var instances = Hover.instances; - for (var i in instances) - if (!instances[i][0].contains(event.srcElement)) - Hover.unregister(instances[i]); - }); -} - -var ATTR = { - "=": "%1==='%2'", // "[@%1='%2']" - "~=": "(' '+%1+' ').indexOf(' %2 ')!==-1", // "[contains(concat(' ',@%1,' '),' %2 ')]", - "|=": "%1==='%2'||%1.indexOf('%2-')===0", // "[@%1='%2' or starts-with(@%1,'%2-')]", - "^=": "%1.indexOf('%2')===0", // "[starts-with(@%1,'%2')]", - "$=": "%1.slice(-'%2'.length)==='%2'", // "[ends-with(@%1,'%2')]", - "*=": "%1.indexOf('%2')!==-1" // "[contains(@%1,'%2')]" -}; -ATTR[""] = "%1!=null"; // "[@%1]" - -var FILTER = { - "<#attr>": function(match, name, operator, value) { - var attr = "IE7._getAttribute(e,'" + name + "')"; - value = getString(value); - if (operator.length > 1) { - if (!value || operator === "~=" && SPACE.test(value)) { - return "false&&"; - } - attr = "(" + attr + "||'')"; - } - return "(" + format(ATTR[operator], attr, value) + ")&&"; - }, - - "<#id>": ID_ATTRIBUTE + "==='$1'&&", - - "<#class>": "e.className&&(' '+e.className+' ').indexOf(' $1 ')!==-1&&", - - // PSEDUO - ":first-child": "!" + PREVIOUS_SIBLING + "&&", - ":link": "e.href&&(e.nodeName==='A'||e.nodeName==='AREA')&&", - ":visited": "false&&" // not implemented (security) -}; - -// ========================================================================= -// ie7-html.js -// ========================================================================= - -// default font-sizes -//HEADER += "h1{font-size:2em}h2{font-size:1.5em;}h3{font-size:1.17em;}h4{font-size:1em}h5{font-size:.83em}h6{font-size:.67em}"; - -IE7.HTML = new (Fix.extend({ // single instance - fixed: {}, - - init: Undefined, - - addFix: function() { - // fixes are a one-off, they are applied when the document is loaded - this.fixes.push(arguments); - }, - - apply: function() { - for (var i = 0; i < this.fixes.length; i++) { - var match = cssQuery(this.fixes[i][0]); - var fix = this.fixes[i][1]; - for (var j = 0; j < match.length; j++) fix(match[j]); - } - }, - - addRecalc: function() { - // recalcs occur whenever the document is refreshed using document.recalc() - this.recalcs.push(arguments); - }, - - recalc: function() { - // loop through the fixes - for (var i = 0; i < this.recalcs.length; i++) { - var match = cssQuery(this.recalcs[i][0]); - var recalc = this.recalcs[i][1], element; - var key = Math.pow(2, i); - for (var j = 0; (element = match[j]); j++) { - var uniqueID = element.uniqueID; - if ((this.fixed[uniqueID] & key) === 0) { - element = recalc(element) || element; - this.fixed[uniqueID] |= key; - } - } - } - } -})); - -if (appVersion < 7) { - // provide support for the tag. - document.createElement("abbr"); - - // bind to the first child control - IE7.HTML.addRecalc("label", function(label) { - if (!label.htmlFor) { - var firstChildControl = cssQuery("input,textarea", label, true); - if (firstChildControl) { - addEventHandler(label, "onclick", function() { - firstChildControl.click(); - }); - } - } - }); -} - -// ========================================================================= -// ie7-layout.js -// ========================================================================= - -var NUMERIC = "[.\\d]"; - -(function() { - var layout = IE7.Layout = {}; - - // big, ugly box-model hack + min/max stuff - - // #tantek > #erik > #dean { voice-family: hacker; } - - // ----------------------------------------------------------------------- - // "layout" - // ----------------------------------------------------------------------- - - HEADER += "*{boxSizing:content-box}"; - - // give an element "layout" - layout.boxSizing = function(element) { - if (!element.currentStyle.hasLayout) { - //# element.runtimeStyle.fixedHeight = - element.style.height = "0cm"; - if (element.currentStyle.verticalAlign === "auto") - element.runtimeStyle.verticalAlign = "top"; - // when an element acquires "layout", margins no longer collapse correctly - collapseMargins(element); - } - }; - - // ----------------------------------------------------------------------- - // Margin Collapse - // ----------------------------------------------------------------------- - - function collapseMargins(element) { - if (element != viewport && element.currentStyle.position !== "absolute") { - collapseMargin(element, "marginTop"); - collapseMargin(element, "marginBottom"); - } - }; - - function collapseMargin(element, type) { - if (!element.runtimeStyle[type]) { - var parentElement = element.parentElement; - var isTopMargin = type === "marginTop"; - if (parentElement && parentElement.currentStyle.hasLayout && !IE7._getElementSibling(element, isTopMargin ? "previous" : "next")) return; - var child = element[isTopMargin ? "firstChild" : "lastChild"]; - if (child && child.nodeName < "@") child = IE7._getElementSibling(child, isTopMargin ? "next" : "previous"); - if (child && child.currentStyle.styleFloat === "none" && child.currentStyle.hasLayout) { - collapseMargin(child, type); - margin = _getMargin(element, element.currentStyle[type]); - childMargin = _getMargin(child, child.currentStyle[type]); - if (margin < 0 || childMargin < 0) { - element.runtimeStyle[type] = margin + childMargin; - } else { - element.runtimeStyle[type] = Math.max(childMargin, margin); - } - child.runtimeStyle[type] = "0px"; - } - } - }; - - function _getMargin(element, value) { - return value === "auto" ? 0 : getPixelValue(element, value); - }; - - // ----------------------------------------------------------------------- - // box-model - // ----------------------------------------------------------------------- - - // constants - var UNIT = /^[.\d][\w]*$/, AUTO = /^(auto|0cm)$/; - - var apply = {}; - layout.borderBox = function(element){ - apply.Width(element); - apply.Height(element); - }; - - var _fixWidth = function(HEIGHT) { - apply.Width = function(element) { - if (!PERCENT.test(element.currentStyle.width)) _fixWidth(element); - if (HEIGHT) collapseMargins(element); - }; - - function _fixWidth(element, value) { - if (!element.runtimeStyle.fixedWidth) { - if (!value) value = element.currentStyle.width; - element.runtimeStyle.fixedWidth = UNIT.test(value) ? Math.max(0, getFixedWidth(element, value)) + "px" : value; - setOverrideStyle(element, "width", element.runtimeStyle.fixedWidth); - } - }; - - function layoutWidth(element) { - if (!isFixed(element)) { - var layoutParent = element.offsetParent; - while (layoutParent && !layoutParent.currentStyle.hasLayout) layoutParent = layoutParent.offsetParent; - } - return (layoutParent || viewport).clientWidth; - }; - - function getPixelWidth(element, value) { - if (PERCENT.test(value)) return parseInt(parseFloat(value) / 100 * layoutWidth(element)); - return getPixelValue(element, value); - }; - - var getFixedWidth = function(element, value) { - var borderBox = element.currentStyle["ie7-box-sizing"] === "border-box"; - var adjustment = 0; - if (MSIE5 && !borderBox) - adjustment += getBorderWidth(element) + getWidth(element, "padding"); - else if (!MSIE5 && borderBox) - adjustment -= getBorderWidth(element) + getWidth(element, "padding"); - return getPixelWidth(element, value) + adjustment; - }; - - // easy way to get border thickness for elements with "layout" - function getBorderWidth(element) { - return element.offsetWidth - element.clientWidth; - }; - - // have to do some pixel conversion to get padding/margin thickness :-( - function getWidth(element, type) { - return getPixelWidth(element, element.currentStyle[type + "Left"]) + getPixelWidth(element, element.currentStyle[type + "Right"]); - }; - - // ----------------------------------------------------------------------- - // min/max - // ----------------------------------------------------------------------- - - HEADER += "*{minWidth:none;maxWidth:none;min-width:none;max-width:none}"; - - // handle min-width property - layout.minWidth = function(element) { - // IE6 supports min-height so we frig it here - //#if (element.currentStyle.minHeight === "auto") element.runtimeStyle.minHeight = 0; - if (element.currentStyle["min-width"] != null) { - element.style.minWidth = element.currentStyle["min-width"]; - } - if (register(arguments.callee, element, element.currentStyle.minWidth !== "none")) { - layout.boxSizing(element); - _fixWidth(element); - resizeWidth(element); - } - }; - - // clone the minWidth function to make a maxWidth function - eval("IE7.Layout.maxWidth=" + String(layout.minWidth).replace(/min/g, "max")); - - // apply min/max restrictions - function resizeWidth(element) { - // check boundaries - if (element == document.body) { - var width = element.clientWidth; - } else { - var rect = element.getBoundingClientRect(); - width = rect.right - rect.left; - } - if (element.currentStyle.minWidth !== "none" && width < getFixedWidth(element, element.currentStyle.minWidth)) { - element.runtimeStyle.width = element.currentStyle.minWidth; - } else if (element.currentStyle.maxWidth !== "none" && width >= getFixedWidth(element, element.currentStyle.maxWidth)) { - element.runtimeStyle.width = element.currentStyle.maxWidth; - } else { - element.runtimeStyle.width = element.runtimeStyle.fixedWidth; - } - }; - - // ----------------------------------------------------------------------- - // right/bottom - // ----------------------------------------------------------------------- - - function fixRight(element) { - if (register(fixRight, element, /^(fixed|absolute)$/.test(element.currentStyle.position) && - getDefinedStyle(element, "left") !== "auto" && - getDefinedStyle(element, "right") !== "auto" && - AUTO.test(getDefinedStyle(element, "width")))) { - resizeRight(element); - layout.boxSizing(element); - } - }; - layout.fixRight = fixRight; - - function resizeRight(element) { - var left = getPixelWidth(element, element.runtimeStyle._left || element.currentStyle.left); - var width = layoutWidth(element) - getPixelWidth(element, element.currentStyle.right) - left - getWidth(element, "margin"); - if (parseInt(element.runtimeStyle.width) === width) return; - element.runtimeStyle.width = ""; - if (isFixed(element) || HEIGHT || element.offsetWidth < width) { - if (!MSIE5) width -= getBorderWidth(element) + getWidth(element, "padding"); - if (width < 0) width = 0; - element.runtimeStyle.fixedWidth = width; - setOverrideStyle(element, "width", width); - } - }; - - // ----------------------------------------------------------------------- - // window.onresize - // ----------------------------------------------------------------------- - - // handle window resize - var clientWidth = 0; - addResize(function() { - if (!viewport) return; - var i, wider = (clientWidth < viewport.clientWidth); - clientWidth = viewport.clientWidth; - // resize elements with "min-width" set - var elements = layout.minWidth.elements; - for (i in elements) { - var element = elements[i]; - var fixedWidth = (parseInt(element.runtimeStyle.width) === getFixedWidth(element, element.currentStyle.minWidth)); - if (wider && fixedWidth) element.runtimeStyle.width = ""; - if (wider == fixedWidth) resizeWidth(element); - } - // resize elements with "max-width" set - var elements = layout.maxWidth.elements; - for (i in elements) { - var element = elements[i]; - var fixedWidth = (parseInt(element.runtimeStyle.width) === getFixedWidth(element, element.currentStyle.maxWidth)); - if (!wider && fixedWidth) element.runtimeStyle.width = ""; - if (wider !== fixedWidth) resizeWidth(element); - } - // resize elements with "right" set - for (i in fixRight.elements) resizeRight(fixRight.elements[i]); - }); - - // ----------------------------------------------------------------------- - // fix CSS - // ----------------------------------------------------------------------- - if (MSIE5) { - IE7.CSS.addRecalc("width", NUMERIC, apply.Width); - } - if (appVersion < 7) { - IE7.CSS.addRecalc("max-width", NUMERIC, layout.maxWidth); - IE7.CSS.addRecalc("right", NUMERIC, fixRight); - } else if (appVersion == 7) { - if (HEIGHT) IE7.CSS.addRecalc("height", "[\\d.]+%", function(element) { - element.runtimeStyle.pixelHeight = parseInt(layoutWidth(element) * element.currentStyle["ie7-height"].slice(0, -1) / 100); - }); - } - }; - - eval("var _fixHeight=" + rotate(_fixWidth)); - - // apply box-model + min/max fixes - _fixWidth(); - _fixHeight(true); - - if (appVersion < 7) { - IE7.CSS.addRecalc("min-width", NUMERIC, layout.minWidth); - IE7.CSS.addFix(/\bmin-height\s*/, "height"); - } -})(); - -// ========================================================================= -// ie7-graphics.js -// ========================================================================= - -// a small transparent image used as a placeholder -var BLANK_GIF = makePath("blank.gif", path); - -var ALPHA_IMAGE_LOADER = "DXImageTransform.Microsoft.AlphaImageLoader"; -var PNG_FILTER = "progid:" + ALPHA_IMAGE_LOADER + "(src='%1',sizingMethod='%2')"; - -// regular expression version of the above -var PNG; - -var filtered = []; - -function fixImage(element) { - if (PNG.test(element.src)) { - // we have to preserve width and height - var image = new Image(element.width, element.height); - image.onload = function() { - element.width = image.width; - element.height = image.height; - image = null; - }; - image.src = element.src; - // store the original url (we'll put it back when it's printed) - element.pngSrc = element.src; - // add the AlphaImageLoader thingy - addFilter(element); - } -}; - -if (appVersion < 7) { - // ** IE7 VARIABLE - // e.g. apply the hack to all files ending in ".png" - // IE7_PNG_SUFFIX = ".png"; - // You can also set it to a RegExp - // IE7_PNG_SUFFIX = /\d+\.png$/; - - // replace background(-image): url(..) .. with background(-image): .. ;filter: ..; - IE7.CSS.addFix(/background(-image)?\s*:\s*([^};]*)?url\(([^\)]+)\)([^;}]*)?/, function(match, $1, $2, url, $4) { - url = getString(url); - return PNG.test(url) ? "filter:" + format(PNG_FILTER, url, $4.indexOf("no-repeat") === -1 ? "scale" : "crop") + - ";zoom:1;background" + ($1||"") + ":" + ($2||"") + "none" + ($4||"") : match; - }); - - // list-style-image - IE7.CSS.addRecalc(/list\-style(\-image)?/, "[^};]*url", function(element) { - var url = element.currentStyle.listStyleImage.slice(5, -2); - if (PNG.test(url)) { - if (element.nodeName === "LI") { - fixListStyleImage(element, url) - } else if (element.nodeName === "UL") { - for (var i = 0, li; li = element.childNodes[i]; i++) { - if (li.nodeName === "LI") fixListStyleImage(li, url); - } - } - } - }); - - function fixListStyleImage(element, src) { - var style = element.runtimeStyle; - var originalHeight = element.offsetHeight; - var image = new Image; - image.onload = function() { - var paddingLeft = element.currentStyle.paddingLeft; - paddingLeft = paddingLeft === "0px" ? 0 : getPixelValue(element, paddingLeft); - style.paddingLeft = (paddingLeft + this.width) + "px"; - style.marginLeft = -this.width + "px"; - style.listStyleType = "none"; - style.listStyleImage = "none"; - style.paddingTop = Math.max(originalHeight - element.offsetHeight, 0) + "px"; - addFilter(element, "crop", src); - element.style.zoom = "100%"; - }; - image.src = src; - }; - - // ----------------------------------------------------------------------- - // fix PNG transparency (HTML images) - // ----------------------------------------------------------------------- - - IE7.HTML.addRecalc("img,input", function(element) { - if (element.nodeName === "INPUT" && element.type !== "image") return; - fixImage(element); - addEventHandler(element, "onpropertychange", function() { - if (!printing && event.propertyName === "src" && - element.src.indexOf(BLANK_GIF) === -1) fixImage(element); - }); - }); - - // assume that background images should not be printed - // (if they are not transparent then they'll just obscure content) - // but we'll put foreground images back... - var printing = false; - addEventHandler(window, "onbeforeprint", function() { - printing = true; - for (var i = 0; i < filtered.length; i++) removeFilter(filtered[i]); - }); - addEventHandler(window, "onafterprint", function() { - for (var i = 0; i < filtered.length; i++) addFilter(filtered[i]); - printing = false; - }); -} - -// apply a filter -function addFilter(element, sizingMethod, src) { - var filter = element.filters[ALPHA_IMAGE_LOADER]; - if (filter) { - filter.src = src || element.src; - filter.enabled = true; - } else { - element.runtimeStyle.filter = format(PNG_FILTER, src || element.src, sizingMethod || "scale"); - filtered.push(element); - } - // remove the real image - element.src = BLANK_GIF; -}; - -function removeFilter(element) { - element.src = element.pngSrc; - element.filters[ALPHA_IMAGE_LOADER].enabled = false; -}; - -// ========================================================================= -// ie7-fixed.js -// ========================================================================= - -(function() { - if (appVersion >= 7) return; - - // some things to consider for this hack. - // the document body requires a fixed background. even if - // it is just a blank image. - // you have to use setExpression instead of onscroll, this - // together with a fixed body background helps avoid the - // annoying screen flicker of other solutions. - - IE7.CSS.addRecalc("position", "fixed", _positionFixed, "absolute"); - IE7.CSS.addRecalc("background(-attachment)?", "[^};]*fixed", _backgroundFixed); - - // scrolling is relative to the documentElement (HTML tag) when in - // standards mode, otherwise it's relative to the document body - var $viewport = MSIE5 ? "body" : "documentElement"; - - function _fixBackground() { - // this is required by both position:fixed and background-attachment:fixed. - // it is necessary for the document to also have a fixed background image. - // we can fake this with a blank image if necessary - if (body.currentStyle.backgroundAttachment !== "fixed") { - if (body.currentStyle.backgroundImage === "none") { - body.runtimeStyle.backgroundRepeat = "no-repeat"; - body.runtimeStyle.backgroundImage = "url(" + BLANK_GIF + ")"; // dummy - } - body.runtimeStyle.backgroundAttachment = "fixed"; - } - _fixBackground = Undefined; - }; - - var _tmp = createTempElement("img"); - - function _isFixed(element) { - return element ? isFixed(element) || _isFixed(element.parentElement) : false; - }; - - function _setExpression(element, propertyName, expression) { - setTimeout("document.all." + element.uniqueID + ".runtimeStyle.setExpression('" + propertyName + "','" + expression + "')", 0); - }; - - // ----------------------------------------------------------------------- - // backgroundAttachment: fixed - // ----------------------------------------------------------------------- - - function _backgroundFixed(element) { - if (register(_backgroundFixed, element, element.currentStyle.backgroundAttachment === "fixed" && !element.contains(body))) { - _fixBackground(); - util.bgLeft(element); - util.bgTop(element); - _backgroundPosition(element); - } - }; - - function _backgroundPosition(element) { - _tmp.src = element.currentStyle.backgroundImage.slice(5, -2); - var parentElement = element.canHaveChildren ? element : element.parentElement; - parentElement.appendChild(_tmp); - util.setOffsetLeft(element); - util.setOffsetTop(element); - parentElement.removeChild(_tmp); - }; - - // ----------------------------------------------------------------------- - // position: fixed - // ----------------------------------------------------------------------- - - function _positionFixed(element) { - if (register(_positionFixed, element, isFixed(element))) { - setOverrideStyle(element, "position", "absolute"); - setOverrideStyle(element, "left", element.currentStyle.left); - setOverrideStyle(element, "top", element.currentStyle.top); - _fixBackground(); - IE7.Layout.fixRight(element); - //IE7.Layout.fixBottom(element); - _foregroundPosition(element); - } - }; - - function _foregroundPosition(element, recalc) { - document.body.getBoundingClientRect(); // force a reflow - util.positionTop(element, recalc); - util.positionLeft(element, recalc, true); - if (!element.runtimeStyle.autoLeft && element.currentStyle.marginLeft === "auto" && - element.currentStyle.right !== "auto") { - var left = viewport.clientWidth - util.getPixelWidth(element, element.currentStyle.right) - - util.getPixelWidth(element, element.runtimeStyle._left) - element.clientWidth; - if (element.currentStyle.marginRight === "auto") left = parseInt(left / 2); - if (_isFixed(element.offsetParent)) element.runtimeStyle.pixelLeft += left; - else element.runtimeStyle.shiftLeft = left; - } - if (!element.runtimeStyle.fixedWidth) util.clipWidth(element); - if (!element.runtimeStyle.fixedHeight) util.clipHeight(element); - }; - - // ----------------------------------------------------------------------- - // capture window resize - // ----------------------------------------------------------------------- - - function _resize() { - // if the window has been resized then some positions need to be - // recalculated (especially those aligned to "right" or "top" - var elements = _backgroundFixed.elements; - for (var i in elements) _backgroundPosition(elements[i]); - elements = _positionFixed.elements; - for (i in elements) { - _foregroundPosition(elements[i], true); - _foregroundPosition(elements[i], true); - } - _timer = 0; - }; - - // use a timer (sometimes this is a good way to prevent resize loops) - var _timer; - addResize(function() { - if (!_timer) _timer = setTimeout(_resize, 100); - }); - - // ----------------------------------------------------------------------- - // rotated - // ----------------------------------------------------------------------- - - var util = {}; - - var _horizontal = function(util) { - util.bgLeft = function(element) { - element.style.backgroundPositionX = element.currentStyle.backgroundPositionX; - if (!_isFixed(element)) { - _setExpression(element, "backgroundPositionX", "(parseInt(runtimeStyle.offsetLeft)+document." + $viewport + ".scrollLeft)||0"); - } - }; - - util.setOffsetLeft = function(element) { - var propertyName = _isFixed(element) ? "backgroundPositionX" : "offsetLeft"; - element.runtimeStyle[propertyName] = - util.getOffsetLeft(element, element.style.backgroundPositionX) - - element.getBoundingClientRect().left - element.clientLeft + 2; - }; - - util.getOffsetLeft = function(element, position) { - switch (position) { - case "left": - case "top": - return 0; - case "right": - case "bottom": - return viewport.clientWidth - _tmp.offsetWidth; - case "center": - return (viewport.clientWidth - _tmp.offsetWidth) / 2; - default: - if (PERCENT.test(position)) { - return parseInt((viewport.clientWidth - _tmp.offsetWidth) * parseFloat(position) / 100); - } - _tmp.style.left = position; - return _tmp.offsetLeft; - } - }; - - util.clipWidth = function(element) { - var fixWidth = element.runtimeStyle.fixWidth; - element.runtimeStyle.borderRightWidth = ""; - element.runtimeStyle.width = fixWidth ? util.getPixelWidth(element, fixWidth) + "px" : ""; - if (element.currentStyle.width !== "auto") { - var rect = element.getBoundingClientRect(); - var width = element.offsetWidth - viewport.clientWidth + rect.left - 2; - if (width >= 0) { - element.runtimeStyle.borderRightWidth = "0px"; - width = Math.max(getPixelValue(element, element.currentStyle.width) - width, 0); - setOverrideStyle(element, "width", width); - return width; - } - } - }; - - util.positionLeft = function(element, recalc) { - // if the element's width is in % units then it must be recalculated - // with respect to the viewport - if (!recalc && PERCENT.test(element.currentStyle.width)) { - element.runtimeStyle.fixWidth = element.currentStyle.width; - } - if (element.runtimeStyle.fixWidth) { - element.runtimeStyle.width = util.getPixelWidth(element, element.runtimeStyle.fixWidth); - } - //if (recalc) { - // // if the element is fixed on the right then no need to recalculate - // if (!element.runtimeStyle.autoLeft) return; - //} else { - element.runtimeStyle.shiftLeft = 0; - element.runtimeStyle._left = element.currentStyle.left; - // is the element fixed on the right? - element.runtimeStyle.autoLeft = element.currentStyle.right !== "auto" && element.currentStyle.left === "auto"; - //} - // reset the element's "left" value and get it's natural position - element.runtimeStyle.left = ""; - element.runtimeStyle.screenLeft = util.getScreenLeft(element); - element.runtimeStyle.pixelLeft = element.runtimeStyle.screenLeft; - // if the element is contained by another fixed element then there is no need to - // continually recalculate it's left position - if (!recalc && !_isFixed(element.offsetParent)) { - // onsrcoll produces jerky movement, so we use an expression - _setExpression(element, "pixelLeft", "runtimeStyle.screenLeft+runtimeStyle.shiftLeft+document." + $viewport + ".scrollLeft"); - } - }; - - // I've forgotten how this works... - util.getScreenLeft = function(element) { // thanks to kevin newman (captainn) - var screenLeft = element.offsetLeft, nested = 1; - if (element.runtimeStyle.autoLeft) { - screenLeft = viewport.clientWidth - element.offsetWidth - util.getPixelWidth(element, element.currentStyle.right); - } - // accommodate margins - if (element.currentStyle.marginLeft !== "auto") { - screenLeft -= util.getPixelWidth(element, element.currentStyle.marginLeft); - } - while (element = element.offsetParent) { - if (element.currentStyle.position !== "static") nested = -1; - screenLeft += element.offsetLeft * nested; - } - return screenLeft; - }; - - util.getPixelWidth = function(element, value) { - return PERCENT.test(value) ? parseInt(parseFloat(value) / 100 * viewport.clientWidth) : getPixelValue(element, value); - }; - }; - eval("var _vertical=" + rotate(_horizontal)); - _horizontal(util); - _vertical(util); -})(); - -// ========================================================================= -// ie7-oveflow.js -// ========================================================================= - -/* --------------------------------------------------------------------- - - This module alters the structure of the document. - It may adversely affect other CSS rules. Be warned. - ---------------------------------------------------------------------- */ - -if (appVersion < 7) { - var WRAPPER_STYLE = { - backgroundColor: "transparent", - backgroundImage: "none", - backgroundPositionX: null, - backgroundPositionY: null, - backgroundRepeat: null, - borderTopWidth: 0, - borderRightWidth: 0, - borderBottomWidth: 0, - borderLeftStyle: "none", - borderTopStyle: "none", - borderRightStyle: "none", - borderBottomStyle: "none", - borderLeftWidth: 0, - borderLeftColor: "#000", - borderTopColor: "#000", - borderRightColor: "#000", - borderBottomColor: "#000", - height: null, - marginTop: 0, - marginBottom: 0, - marginRight: 0, - marginLeft: 0, - width: "100%" - }; - - IE7.CSS.addRecalc("overflow", "visible", function(element) { - if (element.currentStyle.position === "absolute") return; - - // don't do this again - if (element.parentNode.ie7_wrapped) return; - - // if max-height is applied, makes sure it gets applied first - if (IE7.Layout && element.currentStyle["max-height"] !== "auto") { - IE7.Layout.maxHeight(element); - } - - if (element.currentStyle.marginLeft === "auto") element.style.marginLeft = 0; - if (element.currentStyle.marginRight === "auto") element.style.marginRight = 0; - - var wrapper = document.createElement(ANON); - wrapper.ie7_wrapped = element; - for (var propertyName in WRAPPER_STYLE) { - wrapper.style[propertyName] = element.currentStyle[propertyName]; - if (WRAPPER_STYLE[propertyName] != null) { - element.runtimeStyle[propertyName] = WRAPPER_STYLE[propertyName]; - } - } - wrapper.style.display = "block"; - wrapper.style.position = "relative"; - element.runtimeStyle.position = "absolute"; - element.parentNode.insertBefore(wrapper, element); - wrapper.appendChild(element); - }); -} - -// ========================================================================= -// ie7-quirks.js -// ========================================================================= - -function ie7Quirks() { - var FONT_SIZES = "xx-small,x-small,small,medium,large,x-large,xx-large".split(","); - for (var i = 0; i < FONT_SIZES.length; i++) { - FONT_SIZES[FONT_SIZES[i]] = FONT_SIZES[i - 1] || "0.67em"; - } - - IE7.CSS.addFix(/(font(-size)?\s*:\s*)([\w.-]+)/, function(match, label, size, value) { - return label + (FONT_SIZES[value] || value); - }); - - var NEGATIVE = /^\-/, LENGTH = /(em|ex)$/i; - var EM = /em$/i, EX = /ex$/i; - - getPixelValue = function(element, value) { - if (PIXEL.test(value)) return parseInt(value)||0; - var scale = NEGATIVE.test(value)? -1 : 1; - if (LENGTH.test(value)) scale *= getFontScale(element); - temp.style.width = scale < 0 ? value.slice(1) : value; - body.appendChild(temp); - // retrieve pixel width - value = scale * temp.offsetWidth; - // remove the temporary element - temp.removeNode(); - return parseInt(value); - }; - - var temp = createTempElement(); - function getFontScale(element) { - var scale = 1; - temp.style.fontFamily = element.currentStyle.fontFamily; - temp.style.lineHeight = element.currentStyle.lineHeight; - //temp.style.fontSize = ""; - while (element != body) { - var fontSize = element.currentStyle["ie7-font-size"]; - if (fontSize) { - if (EM.test(fontSize)) scale *= parseFloat(fontSize); - else if (PERCENT.test(fontSize)) scale *= (parseFloat(fontSize) / 100); - else if (EX.test(fontSize)) scale *= (parseFloat(fontSize) / 2); - else { - temp.style.fontSize = fontSize; - return 1; - } - } - element = element.parentElement; - } - return scale; - }; - - // cursor:pointer (IE5.x) - IE7.CSS.addFix(/cursor\s*:\s*pointer/, "cursor:hand"); - // display:list-item (IE5.x) - IE7.CSS.addFix(/display\s*:\s*list-item/, "display:block"); - - // ----------------------------------------------------------------------- - // margin:auto - // ----------------------------------------------------------------------- - - function fixMargin(element) { - var parent = element.parentElement; - var margin = parent.offsetWidth - element.offsetWidth - getPaddingWidth(parent); - var autoRight = (element.currentStyle["ie7-margin"] && element.currentStyle.marginRight === "auto") || - element.currentStyle["ie7-margin-right"] === "auto"; - switch (parent.currentStyle.textAlign) { - case "right": - margin = autoRight ? parseInt(margin / 2) : 0; - element.runtimeStyle.marginRight = margin + "px"; - break; - case "center": - if (autoRight) margin = 0; - default: - if (autoRight) margin /= 2; - element.runtimeStyle.marginLeft = parseInt(margin) + "px"; - } - }; - - function getPaddingWidth(element) { - return getPixelValue(element, element.currentStyle.paddingLeft) + - getPixelValue(element, element.currentStyle.paddingRight); - }; - - IE7.CSS.addRecalc("margin(-left|-right)?", "[^};]*auto", function(element) { - if (register(fixMargin, element, - element.parentElement && - element.currentStyle.display === "block" && - element.currentStyle.marginLeft === "auto" && - element.currentStyle.position !== "absolute")) { - fixMargin(element); - } - }); - - addResize(function() { - for (var i in fixMargin.elements) { - var element = fixMargin.elements[i]; - element.runtimeStyle.marginLeft = - element.runtimeStyle.marginRight = ""; - fixMargin(element); - } - }); -}; - - -// ========================================================================= -// ie8-css.js -// ========================================================================= - -var BRACKETS = "\\([^)]+\\)"; - -// pseudo-elements can be declared with a double colon -encoder.add(/::(before|after)/, ":$1"); - -if (appVersion < 8) { - - if (IE7.CSS.pseudoClasses) IE7.CSS.pseudoClasses += "|"; - IE7.CSS.pseudoClasses += "before|after|lang" + BRACKETS; - - // ----------------------------------------------------------------------- - // propertyName: inherit; - // ----------------------------------------------------------------------- - - function parseInherited(cssText) { - return cssText.replace(new RegExp("([{;\\s])(" + inheritedProperties.join("|") + ")\\s*:\\s*([^;}]+)", "g"), "$1$2:$3;ie7-$2:$3"); - }; - - var INHERITED = /[\w-]+\s*:\s*inherit/g; - var STRIP_IE7_FLAGS = /ie7\-|\s*:\s*inherit/g; - var DASH_LOWER = /\-([a-z])/g; - function toUpper(match, chr) {return chr.toUpperCase()}; - - IE7.CSS.addRecalc("[\\w-]+", "inherit", function(element, cssText) { - if (element.parentElement) { - var inherited = cssText.match(INHERITED); - for (var i = 0; i < inherited.length; i++) { - var propertyName = inherited[i].replace(STRIP_IE7_FLAGS, ""); - if (element.currentStyle["ie7-" + propertyName] === "inherit") { - propertyName = propertyName.replace(DASH_LOWER, toUpper); - element.runtimeStyle[propertyName] = element.parentElement.currentStyle[propertyName]; - } - } - } - }, function(match) { - inheritedProperties.push(rescape(match.slice(1).split(":")[0])); - return match; - }); - - // ----------------------------------------------------------------------- - // dynamic pseudo-classes - // ----------------------------------------------------------------------- - - var Focus = new DynamicPseudoClass("focus", function(element) { - var instance = arguments; - - IE7.CSS.addEventHandler(element, "onfocus", function() { - Focus.unregister(instance); // in case it starts with focus - Focus.register(instance); - }); - - IE7.CSS.addEventHandler(element, "onblur", function() { - Focus.unregister(instance); - }); - - // check the active element for initial state - if (element == document.activeElement) { - Focus.register(instance) - } - }); - - var Active = new DynamicPseudoClass("active", function(element) { - var instance = arguments; - IE7.CSS.addEventHandler(element, "onmousedown", function() { - Active.register(instance); - }); - }); - - // globally trap the mouseup event (thanks Martijn!) - addEventHandler(document, "onmouseup", function() { - var instances = Active.instances; - for (var i in instances) Active.unregister(instances[i]); - }); - - // ----------------------------------------------------------------------- - // IE7 pseudo elements - // ----------------------------------------------------------------------- - - // constants - var URL = /^url\s*\(\s*([^)]*)\)$/; - var POSITION_MAP = { - before0: "beforeBegin", - before1: "afterBegin", - after0: "afterEnd", - after1: "beforeEnd" - }; - - var PseudoElement = IE7.PseudoElement = Rule.extend({ - constructor: function(selector, position, cssText) { - // initialise object properties - this.position = position; - var content = cssText.match(PseudoElement.CONTENT), match, entity; - if (content) { - content = content[1]; - match = content.split(/\s+/); - for (var i = 0; (entity = match[i]); i++) { - match[i] = /^attr/.test(entity) ? {attr: entity.slice(5, -1)} : - entity.charAt(0) === "'" ? getString(entity) : decode(entity); - } - content = match; - } - this.content = content; - // CSS text needs to be decoded immediately - this.base(selector, decode(cssText)); - }, - - init: function() { - // execute the underlying css query for this class - this.match = cssQuery(this.selector); - for (var i = 0; i < this.match.length; i++) { - var runtimeStyle = this.match[i].runtimeStyle; - if (!runtimeStyle[this.position]) runtimeStyle[this.position] = {cssText:""}; - runtimeStyle[this.position].cssText += ";" + this.cssText; - if (this.content != null) runtimeStyle[this.position].content = this.content; - } - }, - - create: function(target) { - var generated = target.runtimeStyle[this.position]; - if (generated) { - // copy the array of values - var content = [].concat(generated.content || ""); - for (var j = 0; j < content.length; j++) { - if (typeof content[j] == "object") { - content[j] = target.getAttribute(content[j].attr); - } - } - content = content.join(""); - var url = content.match(URL); - var cssText = "overflow:hidden;" + generated.cssText.replace(/'/g, '"'); - var position = POSITION_MAP[this.position + Number(target.canHaveChildren)]; - var id = 'ie7_pseudo' + PseudoElement.count++; - target.insertAdjacentHTML(position, format(PseudoElement.ANON, this.className, id, cssText, url ? "" : content)); - if (url) { - var src = getString(url[1]); - var pseudoElement = document.getElementById(id); - pseudoElement.src = src; - addFilter(pseudoElement, "crop"); - var targetIsFloated = target.currentStyle.styleFloat !== "none"; - if (pseudoElement.currentStyle.display === "inline" || targetIsFloated) { - if (appVersion < 7 && targetIsFloated && target.canHaveChildren) { - target.runtimeStyle.display = "inline"; - target.runtimeStyle.position = "relative"; - pseudoElement.runtimeStyle.position = "absolute"; - } - pseudoElement.style.display = "inline-block"; - if (target.currentStyle.styleFloat !== "none") { - pseudoElement.style.pixelWidth = target.offsetWidth; - } - var image = new Image; - image.onload = function() { - pseudoElement.style.pixelWidth = this.width; - pseudoElement.style.pixelHeight = Math.max(this.height, pseudoElement.offsetHeight); - }; - image.src = src; - } - } - target.runtimeStyle[this.position] = null; - } - }, - - recalc: function() { - if (this.content == null) return; - for (var i = 0; i < this.match.length; i++) { - this.create(this.match[i]); - } - }, - - toString: function() { - return "." + this.className + "{display:inline}"; - } - }, { - CONTENT: /content\s*:\s*([^;]*)(;|$)/, - ANON: "%4", - MATCH: /(.*):(before|after).*/, - - count: 0 - }); - - IE7._getLang = function(element) { - var lang = ""; - while (element && element.nodeType === 1) { - lang = element.lang || element.getAttribute("lang") || ""; - if (lang) break; - element = element.parentNode; - } - return lang; - }; - - FILTER = extend(FILTER, { - ":lang\\(([^)]+)\\)": "((ii=IE7._getLang(e))==='$1'||ii.indexOf('$1-')===0)&&" - }); -} - -// ========================================================================= -// ie8-html.js -// ========================================================================= - -var UNSUCCESSFUL = /^(submit|reset|button)$/; - -// ----------------------------------------------------------------------- -//
      [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

       

      diff --git a/www/plugins-dist/organiseur/formulaires/configurer_messagerie_agenda.php b/www/plugins-dist/organiseur/formulaires/configurer_messagerie_agenda.php index 2464bc68..58493f60 100644 --- a/www/plugins-dist/organiseur/formulaires/configurer_messagerie_agenda.php +++ b/www/plugins-dist/organiseur/formulaires/configurer_messagerie_agenda.php @@ -10,27 +10,31 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function formulaires_configurer_messagerie_agenda_charger_dist(){ - foreach(array( - "messagerie_agenda", - ) as $m) +function formulaires_configurer_messagerie_agenda_charger_dist() { + $valeurs = array(); + foreach (array( + 'messagerie_agenda', + ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; - + } return $valeurs; } - -function formulaires_configurer_messagerie_agenda_traiter_dist(){ - $res = array('editable'=>true); - foreach(array( - "messagerie_agenda", - ) as $m) - if (!is_null($v=_request($m))) - ecrire_meta($m, $v=='oui'?'oui':'non'); +function formulaires_configurer_messagerie_agenda_traiter_dist() { + $res = array('editable' => true); + foreach (array( + 'messagerie_agenda', + ) as $m) { + if (!is_null($v = _request($m))) { + ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); + } + } $res['message_ok'] = _T('config_info_enregistree'); + return $res; } - diff --git a/www/plugins-dist/organiseur/formulaires/editer_message.html b/www/plugins-dist/organiseur/formulaires/editer_message.html index 35e12685..01ac510f 100644 --- a/www/plugins-dist/organiseur/formulaires/editer_message.html +++ b/www/plugins-dist/organiseur/formulaires/editer_message.html @@ -5,61 +5,61 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE #SET{fl,organiseur} -
        +
        [(#ENV{_destiner}|oui) #SET{name,destinataires}#SET{obli,'obligatoire'}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ] #INCLURE{fond=formulaires/inc-destinataires-message,name=#GET{name},env} -
      • +
        ] #SET{name,titre}#SET{obli,'obligatoire'}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ] -
      • -
      • +
      +
      + onclick="if (this.checked==true) { $('.editer_date_debut_fin').show('fast');} else {$('.editer_date_debut_fin').hide('fast');}" /> [ (#ENV**{erreurs}|table_valeur{rv}) ]
      - -
    • +
    • +
      [ (#ENV**{erreurs}|table_valeur{date_debut}) ] - -
    • +
    • +
      [ (#ENV**{erreurs}|table_valeur{date_fin}) ] - +
      #SET{name,texte}#SET{obli,'obligatoire'}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
    • +
      [ (#GET{erreurs}) ] -
    • +
      [(#REM) Piege a robots spammeurs ] #SET{name,antispam}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
    • +
      [ (#GET{erreurs}) ] -
    • - +
      +

        [(#ENV{statut}|=={publie}|non) @@ -76,9 +76,13 @@ if (typeof formulaire_editer_message_init=="undefined"){ var formulaire_editer_message_init=''; // eviter double dl si plusieurs forms dans la page var url_trouver_destinataire = '[(#URL_ACTION_AUTEUR{quete_autocomplete,#SESSION{id_auteur}}|replace{&,&})]'; - jQuery.getScript('#CHEMIN{javascript/jquery.autocomplete.js}',function(){ - jQuery.getScript('#CHEMIN{formulaires/editer_message.js}'); - }); + jQuery.getScript('[(#CHEMIN{prive/javascript/ui/widget.js}|timestamp)]',function(){ + jQuery.getScript('[(#CHEMIN{prive/javascript/ui/position.js}|timestamp)]',function(){ + jQuery.getScript('[(#CHEMIN{prive/javascript/ui/menu.js}|timestamp)]',function(){ + jQuery.getScript('[(#CHEMIN{prive/javascript/ui/autocomplete.js}|timestamp)]',function(){ + jQuery.getScript('[(#CHEMIN{formulaires/editer_message.js}|timestamp)]'); + }); + });});}); } -] \ No newline at end of file +] diff --git a/www/plugins-dist/organiseur/formulaires/editer_message.js b/www/plugins-dist/organiseur/formulaires/editer_message.js index fb46a6e7..1cd8d85b 100644 --- a/www/plugins-dist/organiseur/formulaires/editer_message.js +++ b/www/plugins-dist/organiseur/formulaires/editer_message.js @@ -1,33 +1,43 @@ -function formulaire_editer_message_set_dest(input,data,value){ - console.log(data); - console.log(value); +function formulaire_editer_message_set_dest(input,item){ var id_auteur; var box = jQuery(input).siblings('.selected'); - if (data[1]) { - id_auteur = data[1]; - var nom = value; + if (item.value) { + id_auteur = item.value; + var nom = item.label; if (box.find('input[value='+id_auteur+']').length==0){ box.find('.on').removeClass('on'); box.append(" " - + value + + nom +" " + $(box).find('span.dest:first').html() +""); } - else + else { box.find('input[value='+id_auteur+']').closest('span').addClass('on').siblings('.on').removeClass('on'); + } } - jQuery(input).attr('value','');//.get(0).focus(); + jQuery(input).val('');//.get(0).focus(); } function formulaire_editer_message_init(){ jQuery("input.destinataires:not(.autocompleted)").each(function(){ var me = this; jQuery(me) - .autocomplete(url_trouver_destinataire, {minChars:2, mustMatchOrEmpty:1,autoFill:true,matchSubset:0, matchContains:1, cacheLength:10 }) - .bind('result',function(e,data,value){return formulaire_editer_message_set_dest(me,data,value);}) - .parent().bind('click',function(){jQuery(me).get(0).focus();}); + .autocomplete({ + source: url_trouver_destinataire, + minLength:2, + /*autoFocus:1,*/ + select: function(event,ui){ + event.preventDefault(); + formulaire_editer_message_set_dest(me, ui.item); + }, + focus: function(event, ui){ + event.preventDefault(); + jQuery(me).val(ui.item.label); + }, + }) + .parent().on('click', function(){jQuery(me).get(0).focus();}); }) .addClass('autocompleted'); } diff --git a/www/plugins-dist/organiseur/formulaires/editer_message.php b/www/plugins-dist/organiseur/formulaires/editer_message.php index a1929156..cbf475b4 100644 --- a/www/plugins-dist/organiseur/formulaires/editer_message.php +++ b/www/plugins-dist/organiseur/formulaires/editer_message.php @@ -10,123 +10,178 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/editer'); -function formulaires_editer_message_charger_dist($id_message='new',$type='message',$retour='',$accepter_email='oui',$destinataires='',$titre='',$texte=''){ +function formulaires_editer_message_charger_dist( + $id_message = 'new', + $type = 'message', + $retour = '', + $accepter_email = 'oui', + $destinataires = '', + $titre = '', + $texte = '' +) { include_spip('inc/autoriser'); if ( - (!intval($id_message) AND !autoriser('envoyermessage',$type)) - OR - (intval($id_message) AND !autoriser('modifier','message',$id_message)) - ) + (!intval($id_message) and !autoriser('envoyermessage', $type)) + or + (intval($id_message) and !autoriser('modifier', 'message', $id_message)) + ) { return false; + } - $valeurs = formulaires_editer_objet_charger('message',$id_message,0,0,$retour,''); + $valeurs = formulaires_editer_objet_charger('message', $id_message, 0, 0, $retour, ''); // les destinataires sont stockes en chaine separe par une virgule dans la base - if (strlen($valeurs['destinataires'])) - $valeurs['destinataires'] = explode(",",$valeurs['destinataires']); + if (strlen($valeurs['destinataires'])) { + $valeurs['destinataires'] = explode(',', $valeurs['destinataires']); + } - if (!intval($id_message)){ + if (!intval($id_message)) { $valeurs['type'] = $type; - $valeurs['destinataires'] = ($destinataires ? explode(",",$destinataires):array()); + $valeurs['destinataires'] = ($destinataires ? explode(',', $destinataires) : array()); $valeurs['titre'] = $titre; $valeurs['texte'] = $texte; - $t=time(); - $valeurs["date_heure"] = date('Y-m-d H:i:00',$t); - $valeurs["date_fin"] = date('Y-m-d H:i:00',$t+3600); - $valeurs["rv"] = ""; + $t = time(); + $valeurs['date_heure'] = date('Y-m-d H:i:00', $t); + $valeurs['date_fin'] = date('Y-m-d H:i:00', $t + 3600); + $valeurs['rv'] = ''; } - // dispatcher date et heure - list($valeurs["date_debut"],$valeurs["heure_debut"]) = explode(' ',date('d/m/Y H:i',strtotime($valeurs["date_heure"]))); - list($valeurs["date_fin"],$valeurs["heure_fin"]) = explode(' ',date('d/m/Y H:i',strtotime($valeurs["date_fin"]))); + $id_message_origine = intval(_request('id_message_origine')); + if (autoriser('voir', 'message', $id_message_origine)) { + $v = formulaires_editer_objet_charger('message', $id_message_origine, 0, 0, $retour, ''); + $valeurs['titre'] = _T('organiseur:re') . ' : ' . $v['titre']; + $valeurs['texte'] = '' . $v['texte'] . ''; + } - if (in_array($valeurs['type'],array('pb','affich'))) + // dispatcher date et heure + list($valeurs['date_debut'], $valeurs['heure_debut']) = explode( + ' ', + date('d/m/Y H:i', strtotime($valeurs['date_heure'])) + ); + list($valeurs['date_fin'], $valeurs['heure_fin']) = explode( + ' ', + date('d/m/Y H:i', strtotime($valeurs['date_fin'])) + ); + + if (in_array($valeurs['type'], array('pb', 'affich'))) { $valeurs['_destiner'] = ''; - else + } else { $valeurs['_destiner'] = ' '; + } return $valeurs; } -function formulaires_editer_message_verifier_dist($id_message='new',$type='message',$retour='',$accepter_email='oui',$destinataires='',$titre='',$texte=''){ +function formulaires_editer_message_verifier_dist( + $id_message = 'new', + $type = 'message', + $retour = '', + $accepter_email = 'oui', + $destinataires = '', + $titre = '', + $texte = '' +) { $oblis = array('titre'); - if (!_request('draft')) + if (!_request('draft')) { $oblis[] = 'texte'; - if (intval($id_message) AND $t=sql_getfetsel('type','spip_messages','id_message='.intval($id_message))) + } + if (intval($id_message) and $t = sql_getfetsel('type', 'spip_messages', 'id_message=' . intval($id_message))) { $type = $t; - if (!in_array($type,array('pb','affich')) + } + if (!in_array($type, array('pb', 'affich')) // pas de destinataire obligatoire pour un brouillon - AND !_request('draft')) + and !_request('draft') + ) { $oblis['destinataires'] = 'destinataires'; + } - if ($d=_request('destinataires')) - set_request('destinataires',implode(',',$d)); - $erreurs = formulaires_editer_objet_verifier('message',$id_message,$oblis); - if ($d) - set_request('destinataires',$d); + if ($d = _request('destinataires')) { + set_request('destinataires', implode(',', $d)); + } + $erreurs = formulaires_editer_objet_verifier('message', $id_message, $oblis); + if ($d) { + set_request('destinataires', $d); + } include_spip('inc/messages'); - if (!$erreurs['destinataires'] - AND isset($oblis['destinataires']) - AND $e = messagerie_verifier_destinataires(_request('destinataires'),array('accepter_email'=>($accepter_email=='oui')))) - $erreurs['destinataires'] = implode(', ',$e); + if ( + (!isset($erreurs['destinataires']) or !$erreurs['destinataires']) + and isset($oblis['destinataires']) + and $e = messagerie_verifier_destinataires( + _request('destinataires'), + array('accepter_email' => ($accepter_email == 'oui')) + )) { + $erreurs['destinataires'] = implode(', ', $e); + } - if (_request('rv')=='oui'){ + if (_request('rv') == 'oui') { include_spip('inc/date_gestion'); - $date_debut = verifier_corriger_date_saisie('debut',true,$erreurs); - $date_fin = verifier_corriger_date_saisie('fin',true,$erreurs); + $date_debut = verifier_corriger_date_saisie('debut', true, $erreurs); + $date_fin = verifier_corriger_date_saisie('fin', true, $erreurs); - if ($date_debut AND $date_fin AND $date_fin<$date_debut) + if ($date_debut and $date_fin and $date_fin < $date_debut) { $erreurs['date_fin'] = _T('organiseur:erreur_date_avant_apres'); + } + } else { + set_request('rv', ''); } - else - set_request('rv',''); return $erreurs; } -function formulaires_editer_message_traiter_dist($id_message='new',$type='message',$retour='',$accepter_email='oui',$destinataires='',$titre='',$texte=''){ +function formulaires_editer_message_traiter_dist( + $id_message = 'new', + $type = 'message', + $retour = '', + $accepter_email = 'oui', + $destinataires = '', + $titre = '', + $texte = '' +) { // preformater le post // fixer le type de message // sans modifier le type d'un message existant - if (intval($id_message) AND $t=sql_getfetsel('type','spip_messages','id_message='.intval($id_message))) + if (intval($id_message) and $t = sql_getfetsel('type', 'spip_messages', 'id_message=' . intval($id_message))) { $type = $t; - set_request('type',$type); + } + set_request('type', $type); // formater les destinataires $d = _request('destinataires'); - if (!$d) + if (!$d) { $d = array(); + } include_spip('inc/messages'); $d = messagerie_nettoyer_destinataires($d); // si email non acceptes, extraire les seuls id_auteur de la liste proposee - if ($accepter_email!=='oui'){ + if ($accepter_email !== 'oui') { // separer id_auteur et email $d = messagerie_destiner($d); // ne conserver que les id_auteur $d = reset($d); } // reinjecter sous forme de chaine - set_request('destinataires',implode(',',$d)); + set_request('destinataires', implode(',', $d)); // fixer l'auteur ! - set_request('id_auteur',$GLOBALS['visiteur_session']['id_auteur']); + set_request('id_auteur', $GLOBALS['visiteur_session']['id_auteur']); - if (_request('rv')=='oui'){ + if (_request('rv') == 'oui') { include_spip('inc/date_gestion'); $erreurs = array(); - $date_debut = verifier_corriger_date_saisie('debut',true,$erreurs); - $date_fin = verifier_corriger_date_saisie('fin',true,$erreurs); - set_request('date_heure',date('Y-m-d H:i:s',$date_debut)); - set_request('date_fin',date('Y-m-d H:i:s',$date_fin)); - } - else { + $date_debut = verifier_corriger_date_saisie('debut', true, $erreurs); + $date_fin = verifier_corriger_date_saisie('fin', true, $erreurs); + set_request('date_heure', date('Y-m-d H:i:s', $date_debut)); + set_request('date_fin', date('Y-m-d H:i:s', $date_fin)); + } else { set_request('date_heure'); set_request('date_fin'); } @@ -134,17 +189,21 @@ function formulaires_editer_message_traiter_dist($id_message='new',$type='messag // on gere par les traitements standard // la diffusion du message se fait par pipeline post_edition sur instituer // et notification - $res = formulaires_editer_objet_traiter('message',$id_message,0,0,$retour,''); + $res = formulaires_editer_objet_traiter('message', $id_message, 0, 0, $retour, ''); + if ($id_message = $res['id_message'] - AND !_request('draft')){ + and !_request('draft') + ) { include_spip('action/editer_objet'); - objet_modifier('message',$id_message,array('statut'=>'publie')); + objet_modifier('message', $id_message, array('statut' => 'publie', 'date_heure' => _request('date_heure'))); // apres en message envoyes, retourner sur la boite d'envoi plutot que sur le message - if ($res['redirect']==generer_url_ecrire('message','id_message='.$id_message)) - $res['redirect'] = generer_url_ecrire('messages','quoi=envoi'); + if (isset($res['redirect']) + and ($res['redirect'] == generer_url_ecrire('message', 'id_message=' . $id_message))) { + $res['redirect'] = generer_url_ecrire('messages', 'quoi=envoi'); + } } - set_request('destinataires',explode(',',_request('destinataires'))); + set_request('destinataires', explode(',', _request('destinataires'))); + return $res; } - diff --git a/www/plugins-dist/organiseur/inc/date_gestion.php b/www/plugins-dist/organiseur/inc/date_gestion.php index a3daa365..4a0f9471 100644 --- a/www/plugins-dist/organiseur/inc/date_gestion.php +++ b/www/plugins-dist/organiseur/inc/date_gestion.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Recuperer les champs date_xx et heure_xx, verifier leur coherence et les reformater @@ -20,28 +22,29 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * @param array $erreurs * @return int */ -function verifier_corriger_date_saisie($suffixe,$horaire,&$erreurs){ +function verifier_corriger_date_saisie($suffixe, $horaire, &$erreurs) { include_spip('inc/filtres'); - $date = _request("date_$suffixe").($horaire?' '.trim(_request("heure_$suffixe")).':00':''); + $date = _request("date_$suffixe") . ($horaire ? ' ' . trim(_request("heure_$suffixe")) . ':00' : ''); $date = recup_date($date); - if (!$date) + if (!$date) { return ''; + } $ret = null; - if (!$ret=mktime(0,0,0,$date[1],$date[2],$date[0])) + if (!$ret = mktime(0, 0, 0, $date[1], $date[2], $date[0])) { $erreurs["date_$suffixe"] = _T('organiseur:erreur_date'); - elseif (!$ret=mktime($date[3],$date[4],$date[5],$date[1],$date[2],$date[0])) + } elseif (!$ret = mktime($date[3], $date[4], $date[5], $date[1], $date[2], $date[0])) { $erreurs["date_$suffixe"] = _T('organiseur:erreur_heure'); - if ($ret){ - if (trim(_request("date_$suffixe")!==($d=date('d/m/Y',$ret)))){ + } + if ($ret) { + if (trim(_request("date_$suffixe") !== ($d = date('d/m/Y', $ret)))) { $erreurs["date_$suffixe"] = _T('organiseur:erreur_date_corrigee'); - set_request("date_$suffixe",$d); + set_request("date_$suffixe", $d); } - if ($horaire AND trim(_request("heure_$suffixe")!==($h=date('H:i',$ret)))){ + if ($horaire and trim(_request("heure_$suffixe") !== ($h = date('H:i', $ret)))) { $erreurs["heure_$suffixe"] = _T('organiseur:erreur_heure_corrigee'); - set_request("heure_$suffixe",$h); + set_request("heure_$suffixe", $h); } } + return $ret; } - -?> \ No newline at end of file diff --git a/www/plugins-dist/organiseur/inc/messages.php b/www/plugins-dist/organiseur/inc/messages.php index 761ea6c9..40cbfca2 100644 --- a/www/plugins-dist/organiseur/inc/messages.php +++ b/www/plugins-dist/organiseur/inc/messages.php @@ -10,36 +10,43 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/filtres'); include_spip('base/abstract_sql'); -if (!defined('_EMAIL_GENERAL')) - define('_EMAIL_GENERAL','general'); // permet aux admin d'envoyer un email a tout le monde +if (!defined('_EMAIL_GENERAL')) { + define('_EMAIL_GENERAL', 'general'); +} // permet aux admin d'envoyer un email a tout le monde /** * Lister les statuts des auteurs pouvant recevoir un message * c'est tous les auteurs au moins redacteur - * + * * @return array */ -function messagerie_statuts_destinataires_possibles(){ +function messagerie_statuts_destinataires_possibles() { include_spip('inc/filtres_ecrire'); - return pipeline('messagerie_statuts_destinataires_possibles', auteurs_lister_statuts('redacteurs',false)); + + return pipeline('messagerie_statuts_destinataires_possibles', auteurs_lister_statuts('redacteurs', false)); } /** * Nettoyer une liste de destinataires + * * @param $destinataires * @return array */ -function messagerie_nettoyer_destinataires($destinataires){ - foreach ($destinataires as $k=>$id){ +function messagerie_nettoyer_destinataires($destinataires) { + foreach ($destinataires as $k => $id) { // il se peut que l'id recupere l'ancre qui suit avec certains ie ... :( - if (preg_match(',^[0-9]+#[a-z_0-9]+,',$id)) + if (preg_match(',^[0-9]+#[a-z_0-9]+,', $id)) { $destinataires[$k] = intval($id); + } } + return $destinataires; } @@ -53,19 +60,21 @@ function messagerie_nettoyer_destinataires($destinataires){ * @param array $options * @return array */ -function messagerie_verifier_destinataires($destinataires,$options=array('accepter_email'=>true)){ +function messagerie_verifier_destinataires($destinataires, $options = array('accepter_email' => true)) { $erreurs = array(); $destinataires = messagerie_nettoyer_destinataires($destinataires); - foreach ($destinataires as $id){ - if (is_numeric($id)){ - if (!$id) - $erreurs[] = _T('organiseur:erreur_destinataire_invalide',array('dest'=>$id)); - } - else { + foreach ($destinataires as $id) { + if (is_numeric($id)) { + if (!$id) { + $erreurs[] = _T('organiseur:erreur_destinataire_invalide', array('dest' => entites_html($id))); + } + } else { if (!$options['accepter_email'] - OR !email_valide($id)) - $erreurs[] = _T('organiseur:erreur_destinataire_invalide',array('dest'=>$id)); + or !email_valide($id) + ) { + $erreurs[] = _T('organiseur:erreur_destinataire_invalide', array('dest' => entites_html($id))); + } } } @@ -78,28 +87,30 @@ function messagerie_verifier_destinataires($destinataires,$options=array('accept * @param array $dests * @return array */ -function messagerie_destiner($dests){ +function messagerie_destiner($dests) { // separer les destinataires auteur des destinataires email $auteurs_dest = array(); $email_dests = array(); $dests = messagerie_nettoyer_destinataires($dests); - foreach ($dests as $id){ - if (is_numeric($id)) + foreach ($dests as $id) { + if (is_numeric($id)) { $auteurs_dest[] = $id; - elseif (defined('_MESSAGERIE_EMAIL_GENERAL') AND $id!=_MESSAGERIE_EMAIL_GENERAL) + } elseif (defined('_MESSAGERIE_EMAIL_GENERAL') and $id != _MESSAGERIE_EMAIL_GENERAL) { $email_dests[] = $id; + } } if (count($email_dests)) { // retrouver les id des emails pour ceux qui sont en base - $res = sql_select('id_auteur,email','spip_auteurs',sql_in('email', $email_dests)); + $res = sql_select('id_auteur,email', 'spip_auteurs', sql_in('email', $email_dests)); $auteurs_dest_found = array(); - while ($row = sql_fetch($res)){ + while ($row = sql_fetch($res)) { $auteurs_dest_found[] = $row['id_auteur']; } - $auteurs_dest = array_merge($auteurs_dest,$auteurs_dest_found); + $auteurs_dest = array_merge($auteurs_dest, $auteurs_dest_found); } - return array($auteurs_dest,$email_dests); + + return array($auteurs_dest, $email_dests); } /** @@ -109,13 +120,15 @@ function messagerie_destiner($dests){ * @param array $auteurs_dest * @return bool|int */ -function messagerie_diffuser_message($id_message, $auteurs_dest=array()){ +function messagerie_diffuser_message($id_message, $auteurs_dest = array()) { $out = false; - if ($id_message=intval($id_message) - AND count($auteurs_dest)){ + if ($id_message = intval($id_message) + and count($auteurs_dest) + ) { include_spip('action/editer_liens'); - $out = objet_associer(array('auteur'=>$auteurs_dest),array('message'=>$id_message),array('vu'=>'non')); + $out = objet_associer(array('auteur' => $auteurs_dest), array('message' => $id_message), array('vu' => 'non')); } + return $out; } @@ -126,21 +139,25 @@ function messagerie_diffuser_message($id_message, $auteurs_dest=array()){ * @param array $emails_dest * @return bool */ -function messagerie_mailer_message($id_message, $emails_dest=array()){ - if ($id_message=intval($id_message) - AND count($emails_dest)) { - if ($row = sql_fetsel('titre,texte,id_auteur','spip_messages','id_message='.intval($id_message))){ - $from = sql_getfetsel('email','spip_auteurs','id_auteur='.$row['id_auteur']); - foreach($emails_dest as $email) +function messagerie_mailer_message($id_message, $emails_dest = array()) { + if ($id_message = intval($id_message) + and count($emails_dest) + ) { + if ($row = sql_fetsel('titre,texte,id_auteur', 'spip_messages', 'id_message=' . intval($id_message))) { + $from = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . $row['id_auteur']); + foreach ($emails_dest as $email) { job_queue_add( 'envoyer_mail', 'messagerie mail', - array($email,$row['titre'],array('texte'=>$row['texte'],'from'=>$from)), + array($email, $row['titre'], array('texte' => $row['texte'], 'from' => $from)), 'inc/' ); + } + return true; } } + return false; } @@ -152,22 +169,24 @@ function messagerie_mailer_message($id_message, $emails_dest=array()){ * @param string $vu * @return void */ -function messagerie_marquer_message($id_auteur,$liste,$vu){ +function messagerie_marquer_message($id_auteur, $liste, $vu) { include_spip('action/editer_liens'); - if (!is_array($liste)) + if (!is_array($liste)) { $liste = array($liste); + } // completer les liens qui n'existent pas encore // ex : pour marquer lue une annonce, on ajoute le lien d'abord (n'existe pas) // puis on le marque 'oui' - $liens = objet_trouver_liens(array('auteur'=>$id_auteur),array('message'=>$liste)); + $liens = objet_trouver_liens(array('auteur' => $id_auteur), array('message' => $liste)); $l = array(); - foreach($liens as $lien) + foreach ($liens as $lien) { $l[] = $lien['message']; - objet_associer(array('auteur'=>$id_auteur),array('message'=>array_diff($liste,$l)),array('vu'=>$vu)); + } + objet_associer(array('auteur' => $id_auteur), array('message' => array_diff($liste, $l)), array('vu' => $vu)); // puis les marquer tous lus - objet_qualifier_liens(array('auteur'=>$id_auteur),array('message'=>$liste),array('vu'=>$vu)); + objet_qualifier_liens(array('auteur' => $id_auteur), array('message' => $liste), array('vu' => $vu)); include_spip('inc/invalideur'); - suivre_invalideur("message/".implode(',',$liste)); + suivre_invalideur('message/' . implode(',', $liste)); } /** @@ -176,7 +195,9 @@ function messagerie_marquer_message($id_auteur,$liste,$vu){ * @param int $id_auteur * @param array $liste_id_message */ -function messagerie_marquer_lus($id_auteur,$liste_id_message){messagerie_marquer_message($id_auteur,$liste_id_message,'oui');} +function messagerie_marquer_lus($id_auteur, $liste_id_message) { + messagerie_marquer_message($id_auteur, $liste_id_message, 'oui'); +} /** * Marquer un message comme non lu @@ -184,7 +205,9 @@ function messagerie_marquer_lus($id_auteur,$liste_id_message){messagerie_marquer * @param int $id_auteur * @param array $liste_id_message */ -function messagerie_marquer_non_lus($id_auteur,$liste_id_message){messagerie_marquer_message($id_auteur,$liste_id_message,'non');} +function messagerie_marquer_non_lus($id_auteur, $liste_id_message) { + messagerie_marquer_message($id_auteur, $liste_id_message, 'non'); +} /** * Effacer un message recu @@ -192,6 +215,6 @@ function messagerie_marquer_non_lus($id_auteur,$liste_id_message){messagerie_mar * @param int $id_auteur * @param array $liste_id_message */ -function messagerie_effacer_message_recu($id_auteur,$liste_id_message){messagerie_marquer_message($id_auteur,$liste_id_message,'poub');} - -?> +function messagerie_effacer_message_recu($id_auteur, $liste_id_message) { + messagerie_marquer_message($id_auteur, $liste_id_message, 'poub'); +} diff --git a/www/plugins-dist/organiseur/inc/quete_calendrier.php b/www/plugins-dist/organiseur/inc/quete_calendrier.php index 74f638f2..2502a78d 100644 --- a/www/plugins-dist/organiseur/inc/quete_calendrier.php +++ b/www/plugins-dist/organiseur/inc/quete_calendrier.php @@ -10,37 +10,84 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Fonctions de quêtes pour les calendriers : obtient les listes + * des éléments à afficher dans des périodes données + * + * @package SPIP\Organiseur\Fonctions + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/filtres'); -// https://code.spip.net/@calendrier_categories -function calendrier_categories($table, $num, $objet) -{ - if (function_exists('generer_calendrier_class')) - return generer_calendrier_class($table, $num, $objet); - else { - // cf agenda.css - $num= sql_getfetsel((($objet != 'id_breve') ? 'id_secteur' : 'id_rubrique') . " AS id", $table, "$objet=$num"); - - return 'calendrier-couleur' . (($num%14)+1); - } + + +/** + * Retourne un nom de classe CSS représentant la catégorie de l'événement + * dans le calendrier + * + * S'appuie soit sur une fonction PHP `generer_calendrier_class()` si elle + * existe, soit à défaut sur le numéro de rubrique. + * + * @param string $table + * Nom de la table SQL d'où provient l'événement + * @param int $num + * Identifiant dans la table + * @param string $objet + * Nom de la clé primaire + * @return string + * Nom de classe CSS + **/ +function calendrier_categories($table, $num, $objet) { + if (function_exists('generer_calendrier_class')) { + return generer_calendrier_class($table, $num, $objet); + } else { + // cf agenda.css + $num = sql_getfetsel((($objet != 'id_breve') ? 'id_secteur' : 'id_rubrique') . ' AS id', $table, "$objet=$num"); + + return 'calendrier-couleur' . (($num % 14) + 1); + } } -// ici on prend en fait le jour, la veille et le lendemain +/** + * Pour une date donnée, retourne une période allant de la veille au lendemain + * + * @param int $annee + * @param int $mois + * @param int $jour + * @return array + * Liste (date de la veille à 0h, date du lendemain à 23h59:59) + **/ +function quete_calendrier_jour($annee, $mois, $jour) { + $avant = "'" . date('Y-m-d', mktime(0, 0, 0, $mois, $jour - 1, $annee)) . "'"; + $apres = "'" . date('Y-m-d', mktime(1, 1, 1, $mois, $jour + 1, $annee)) . + " 23:59:59'"; -// https://code.spip.net/@quete_calendrier_jour -function quete_calendrier_jour($annee,$mois,$jour) { - $avant = "'" . date("Y-m-d", mktime(0,0,0,$mois,$jour-1,$annee)) . "'"; - $apres = "'" . date("Y-m-d", mktime(1,1,1,$mois,$jour+1,$annee)) . - " 23:59:59'"; return array($avant, $apres); } -// retourne un tableau de 2 tableaux indexes par des dates -// - le premier indique les evenements du jour, sans indication de duree -// - le deuxime indique les evenements commencant ce jour, avec indication de duree -// https://code.spip.net/@quete_calendrier_interval +/** + * Retourne les publications et les messages pour une période donnée + * + * Retourne un tableau de 2 tableaux indéxés par des dates : + * - le premier indique les événements du jour, sans indication de durée + * (par exemple les publications d'articles) + * - le deuxième indique les événements commençant ce jour, avec indication de durée + * (par exemple les rendez-vous) + * + * @uses quete_calendrier_interval_articles() + * @uses quete_calendrier_interval_breves() + * @uses quete_calendrier_interval_rubriques() + * @uses quete_calendrier_interval_rv() + * + * @param array $limites + * Liste (date de début, date de fin) + * @return array + * Liste (événements sans durée, événements avec durée) + **/ function quete_calendrier_interval($limites) { include_spip('inc/urls'); list($avant, $apres) = $limites; @@ -48,176 +95,299 @@ function quete_calendrier_interval($limites) { quete_calendrier_interval_articles($avant, $apres, $evt); quete_calendrier_interval_breves($avant, $apres, $evt); quete_calendrier_interval_rubriques($avant, $apres, $evt); - return array($evt, quete_calendrier_interval_rv($avant, $apres)); -} -// https://code.spip.net/@quete_calendrier_interval_forums -function quete_calendrier_interval_forums($limites, &$evenements) { - list($avant, $apres) = $limites; - $result=sql_select("DISTINCT titre, date_heure, id_forum", "spip_forum", "date_heure >= $avant AND date_heure < $apres", '', "date_heure"); - while($row=sql_fetch($result)){ - $amj = date_anneemoisjour($row['date_heure']); - $id = $row['id_forum']; - if (autoriser('voir','forum',$id)) - $evenements[$amj][]= - array( - 'URL' => generer_url_entite($id, 'forum'), - 'CATEGORIES' => 'calendrier-couleur7', - 'SUMMARY' => $row['titre'], - 'DTSTART' => date_ical($row['date_heure'])); - } + return array($evt, quete_calendrier_interval_rv($avant, $apres)); } -# 3 fonctions retournant les evenements d'une periode +# 4 fonctions retournant les evenements d'une periode # le tableau retourne est indexe par les balises du format ics # afin qu'il soit facile de produire de tels documents. # L'URL de chacun de ces evenements est celle de l'espace prive # pour faciliter la navigation, ce qu'on obtient utilisant # le 4e argument des fonctions generer_url_ecrire_$table -// https://code.spip.net/@quete_calendrier_interval_articles +/** + * Retourne la liste des messages de forum (format ICS) écrits dans une période donnée + * + * @param array $limites + * Liste (date de début, date de fin) + * @param array $evenements + * Tableau des événements déjà présents qui sera complété par la fonction. + * Format : `$evenements[$amj][] = Tableau de description ICS` + **/ +function quete_calendrier_interval_forums($limites, &$evenements) { + list($avant, $apres) = $limites; + $result = sql_select( + 'DISTINCT titre, date_heure, id_forum', + 'spip_forum', + "date_heure >= $avant AND date_heure < $apres", + '', + 'date_heure' + ); + while ($row = sql_fetch($result)) { + $amj = date_anneemoisjour($row['date_heure']); + $id = $row['id_forum']; + if (autoriser('voir', 'forum', $id)) { + $evenements[$amj][] = + array( + 'URL' => generer_url_entite($id, 'forum'), + 'CATEGORIES' => 'calendrier-couleur7', + 'SUMMARY' => $row['titre'], + 'DTSTART' => date_ical($row['date_heure']) + ); + } + } +} + +/** + * Retourne la liste des articles (format ICS) publiés dans une période donnée + * + * @param string $avant + * Date de début + * @param string $apres + * Date de fin + * @param array $evenements + * Tableau des événements déjà présents qui sera complété par la fonction. + * Format : `$evenements[$amj][] = Tableau de description ICS` + **/ function quete_calendrier_interval_articles($avant, $apres, &$evenements) { - $result=sql_select('id_article, titre, date, descriptif, chapo, lang', 'spip_articles', "statut='publie' AND date >= $avant AND date < $apres", '', "date"); + $result = sql_select( + 'id_article, titre, date, descriptif, chapo, lang', + 'spip_articles', + "statut='publie' AND date >= $avant AND date < $apres", + '', + 'date' + ); // tables traduites $objets = explode(',', $GLOBALS['meta']['multi_objets']); if (in_array('spip_articles', $objets)) { - include_spip('inc/lang_liste'); - $langues = $GLOBALS['codes_langues']; - } else $langues = array(); - while($row=sql_fetch($result)){ + include_spip('inc/lang_liste'); + $langues = $GLOBALS['codes_langues']; + } else { + $langues = array(); + } + while ($row = sql_fetch($result)) { $amj = date_anneemoisjour($row['date']); $id = $row['id_article']; - if (autoriser('voir','article',$id)) - $evenements[$amj][]= - array( - 'CATEGORIES' => calendrier_categories('spip_articles', $id, 'id_article'), - 'DESCRIPTION' => $row['descriptif'] ? $row['descriptif'] : $langues[$row['lang']], - 'SUMMARY' => $row['titre'], - 'URL' => generer_url_ecrire_objet('article',$id, '','','prop')); + if (autoriser('voir', 'article', $id)) { + $evenements[$amj][] = + array( + 'CATEGORIES' => calendrier_categories('spip_articles', $id, 'id_article'), + 'DESCRIPTION' => $row['descriptif'] ? $row['descriptif'] : $langues[$row['lang']], + 'SUMMARY' => $row['titre'], + 'URL' => generer_url_ecrire_objet('article', $id, '', '', 'prop') + ); + } } } -// https://code.spip.net/@quete_calendrier_interval_rubriques +/** + * Retourne la liste des rubriques (format ICS) publiées dans une période donnée + * + * @param string $avant + * Date de début + * @param string $apres + * Date de fin + * @param array $evenements + * Tableau des événements déjà présents qui sera complété par la fonction. + * Format : `$evenements[$amj][] = Tableau de description ICS` + **/ function quete_calendrier_interval_rubriques($avant, $apres, &$evenements) { - $result=sql_select('DISTINCT R.id_rubrique, titre, descriptif, date', 'spip_rubriques AS R, spip_documents_liens AS L', "statut='publie' AND date >= $avant AND date < $apres AND R.id_rubrique = L.id_objet AND L.objet='rubrique'",'', "date"); - while($row=sql_fetch($result)){ + $result = sql_select( + 'DISTINCT R.id_rubrique, titre, descriptif, date', + 'spip_rubriques AS R, spip_documents_liens AS L', + "statut='publie' AND date >= $avant AND date < $apres + AND R.id_rubrique = L.id_objet AND L.objet='rubrique'", + '', + 'date' + ); + while ($row = sql_fetch($result)) { $amj = date_anneemoisjour($row['date']); $id = $row['id_rubrique']; - if (autoriser('voir','rubrique',$id)) - $evenements[$amj][]= - array( - 'CATEGORIES' => calendrier_categories('spip_rubriques', $id, 'id_rubrique'), - 'DESCRIPTION' => $row['descriptif'], - 'SUMMARY' => $row['titre'], - 'URL' => generer_url_ecrire_objet('rubrique',$id, '','', 'prop')); + if (autoriser('voir', 'rubrique', $id)) { + $evenements[$amj][] = + array( + 'CATEGORIES' => calendrier_categories('spip_rubriques', $id, 'id_rubrique'), + 'DESCRIPTION' => $row['descriptif'], + 'SUMMARY' => $row['titre'], + 'URL' => generer_url_ecrire_objet('rubrique', $id, '', '', 'prop') + ); + } } } -// https://code.spip.net/@quete_calendrier_interval_breves +/** + * Retourne la liste des brèves (format ICS) publiées dans une période donnée + * + * @param string $avant + * Date de début + * @param string $apres + * Date de fin + * @param array $evenements + * Tableau des événements déjà présents qui sera complété par la fonction. + * Format : `$evenements[$amj][] = Tableau de description ICS` + **/ function quete_calendrier_interval_breves($avant, $apres, &$evenements) { - $result=sql_select("id_breve, titre, date_heure, id_rubrique", 'spip_breves', "statut='publie' AND date_heure >= $avant AND date_heure < $apres", '', "date_heure"); - while($row=sql_fetch($result)){ + $result = sql_select( + 'id_breve, titre, date_heure, id_rubrique', + 'spip_breves', + "statut='publie' AND date_heure >= $avant AND date_heure < $apres", + '', + 'date_heure' + ); + while ($row = sql_fetch($result)) { $amj = date_anneemoisjour($row['date_heure']); $id = $row['id_breve']; $ir = $row['id_rubrique']; - if (autoriser('voir','breve',$id)) - $evenements[$amj][]= - array( - 'URL' => generer_url_ecrire_objet('breve',$id, '','', 'prop'), - 'CATEGORIES' => calendrier_categories('spip_breves', $ir, 'id_breve'), - 'SUMMARY' => $row['titre']); + if (autoriser('voir', 'breve', $id)) { + $evenements[$amj][] = + array( + 'URL' => generer_url_ecrire_objet('breve', $id, '', '', 'prop'), + 'CATEGORIES' => calendrier_categories('spip_breves', $ir, 'id_breve'), + 'SUMMARY' => $row['titre'] + ); + } } } -// https://code.spip.net/@quete_calendrier_interval_rv +/** + * Retourne la liste des messages (format ICS) de l'auteur connecté, + * pour une période donnée + * + * @param string $avant + * Date de début + * @param string $apres + * Date de fin + * @return array + * De la forme : `$evt[date][id_message] = Tableau des données ICS` + **/ function quete_calendrier_interval_rv($avant, $apres) { include_spip('inc/session'); $connect_id_auteur = session_get('id_auteur'); + $auteurs = array(); - $evenements= array(); - if (!$connect_id_auteur) return $evenements; - $result=sql_select("M.id_message, M.titre, M.texte, M.date_heure, M.date_fin, M.type", - "spip_messages AS M LEFT JOIN spip_auteurs_liens AS L ON (L.id_objet=M.id_message)", - "((L.objet='message' AND (L.id_auteur=$connect_id_auteur OR M.type='affich')) OR (L.objet IS NULL AND M.id_auteur=$connect_id_auteur AND ".sql_in('M.type',array('pb','affich'))."))" - ." AND M.rv='oui' AND ((M.date_fin >= $avant OR M.date_heure >= $avant) AND M.date_heure <= $apres) AND M.statut='publie'", - "M.id_message", "M.date_heure"); - while($row=sql_fetch($result)){ - $date_heure=$row["date_heure"]; - $date_fin=$row["date_fin"]; - $type=$row["type"]; - $id_message=$row['id_message']; - - if ($type=="pb") - $cat = 'calendrier-couleur2'; - else { - if ($type=="affich") - $cat = 'calendrier-couleur4'; - else { - if ($type!="normal") - $cat = 'calendrier-couleur12'; - else { - $cat = 'calendrier-couleur9'; - $auteurs = array_map('array_shift', sql_allfetsel("nom", "spip_auteurs AS A LEFT JOIN spip_auteurs_liens AS L ON L.id_auteur=A.id_auteur", "(L.objet='message' AND L.id_objet=$id_message AND (A.id_auteur!=$connect_id_auteur))")); - } - } + $evenements = array(); + if (!$connect_id_auteur) { + return $evenements; + } + $result = sql_select( + 'M.id_message, M.titre, M.texte, M.date_heure, M.date_fin, M.type', + 'spip_messages AS M LEFT JOIN spip_auteurs_liens AS L ON (L.id_objet=M.id_message)', + "((L.objet='message' AND (L.id_auteur=$connect_id_auteur OR M.type='affich')) + OR (L.objet IS NULL AND M.id_auteur=$connect_id_auteur AND " . sql_in( + 'M.type', + array('pb', 'affich') + ) . '))' + . " AND M.rv='oui' + AND ((M.date_fin >= $avant OR M.date_heure >= $avant) + AND M.date_heure <= $apres) + AND M.statut='publie'", + 'M.id_message', + 'M.date_heure' + ); + while ($row = sql_fetch($result)) { + $date_heure = $row['date_heure']; + $date_fin = $row['date_fin']; + $type = $row['type']; + $id_message = $row['id_message']; + + if ($type == 'pb') { + $cat = 'calendrier-couleur2'; + } else { + if ($type == 'affich') { + $cat = 'calendrier-couleur4'; + } else { + if ($type != 'normal') { + $cat = 'calendrier-couleur12'; + } else { + $cat = 'calendrier-couleur9'; + $auteurs = array_map( + 'array_shift', + sql_allfetsel( + 'nom', + 'spip_auteurs AS A LEFT JOIN spip_auteurs_liens AS L ON L.id_auteur=A.id_auteur', + "(L.objet='message' AND L.id_objet=$id_message AND (A.id_auteur!=$connect_id_auteur))" + ) + ); + } + } } - $jour_avant = substr($avant, 9,2); - $mois_avant = substr($avant, 6,2); - $annee_avant = substr($avant, 1,4); - $jour_apres = substr($apres, 9,2); - $mois_apres = substr($apres, 6,2); - $annee_apres = substr($apres, 1,4); - $ical_apres = date_anneemoisjour("$annee_apres-$mois_apres-".sprintf("%02d",$jour_apres)); + $jour_avant = substr($avant, 9, 2); + $mois_avant = substr($avant, 6, 2); + $annee_avant = substr($avant, 1, 4); + $jour_apres = substr($apres, 9, 2); + $mois_apres = substr($apres, 6, 2); + $annee_apres = substr($apres, 1, 4); + $ical_apres = date_anneemoisjour("$annee_apres-$mois_apres-" . sprintf('%02d', $jour_apres)); // Calcul pour les semaines a cheval sur deux mois - $j = 0; - $amj = date_anneemoisjour("$annee_avant-$mois_avant-".sprintf("%02d", $j+($jour_avant))); + $j = 0; + $amj = date_anneemoisjour("$annee_avant-$mois_avant-" . sprintf('%02d', $j + ($jour_avant))); while ($amj <= $ical_apres) { - if (!($amj == date_anneemoisjour($date_fin) AND preg_match(",00:00:00,", $date_fin))) // Ne pas prendre la fin a minuit sur jour precedent - $evenements[$amj][$id_message]= - array( - 'URL' => generer_url_ecrire("message","id_message=$id_message"), - 'DTSTART' => date_ical($date_heure), - 'DTEND' => date_ical($date_fin), - 'DESCRIPTION' => $row['texte'], - 'SUMMARY' => $row['titre'], - 'CATEGORIES' => $cat, - 'ATTENDEE' => (count($auteurs) == 0) ? '' : join($auteurs,", ")); - - $j ++; - $ladate = date("Y-m-d",mktime (1,1,1,$mois_avant, ($j + $jour_avant), $annee_avant)); + if (!($amj == date_anneemoisjour($date_fin) and preg_match( + ',00:00:00,', + $date_fin + ))) { + // Ne pas prendre la fin a minuit sur jour precedent + $evenements[$amj][$id_message] = + array( + 'URL' => generer_url_ecrire('message', "id_message=$id_message"), + 'DTSTART' => date_ical($date_heure), + 'DTEND' => date_ical($date_fin), + 'DESCRIPTION' => $row['texte'], + 'SUMMARY' => $row['titre'], + 'CATEGORIES' => $cat, + 'ATTENDEE' => (count($auteurs) == 0) ? '' : join($auteurs, ', ') + ); + } - $amj = date_anneemoisjour($ladate); + $j++; + $ladate = date('Y-m-d', mktime(1, 1, 1, $mois_avant, ($j + $jour_avant), $annee_avant)); + $amj = date_anneemoisjour($ladate); } - } - return $evenements; + return $evenements; } -// https://code.spip.net/@quete_calendrier_agenda -function quete_calendrier_agenda ($annee, $mois) { +/** + * Retourne la liste des rendez-vous de l'auteur connecté pour le mois indiqué + * + * @param int $annee + * @param int $mois + * @return array + **/ +function quete_calendrier_agenda($annee, $mois) { include_spip('inc/session'); $connect_id_auteur = session_get('id_auteur'); $rv = array(); - if (!$connect_id_auteur) return $rv; - $date = date("Y-m-d", mktime(0,0,0,$mois, 1, $annee)); + if (!$connect_id_auteur) { + return $rv; + } + $date = date('Y-m-d', mktime(0, 0, 0, $mois, 1, $annee)); $mois = mois($date); $annee = annee($date); // rendez-vous personnels dans le mois - $result_messages = sql_select("M.titre AS summary, M.texte AS description, M.id_message AS uid, M.date_heure", "spip_messages AS M, spip_auteurs_liens AS L", "((L.id_auteur=$connect_id_auteur AND L.id_objet=M.id_message AND L.objet='message') OR M.type='affich') AND M.rv='oui' AND M.date_heure >='$annee-$mois-1' AND date_heure < DATE_ADD('$annee-$mois-1', INTERVAL 1 MONTH) AND M.statut='publie'"); - while($row=sql_fetch($result_messages)) { + $result_messages = sql_select( + 'M.titre AS summary, M.texte AS description, M.id_message AS uid, M.date_heure', + 'spip_messages AS M, spip_auteurs_liens AS L', + "((L.id_auteur=$connect_id_auteur AND L.id_objet=M.id_message AND L.objet='message') OR M.type='affich') + AND M.rv='oui' + AND M.date_heure >='$annee-$mois-1' + AND date_heure < DATE_ADD('$annee-$mois-1', INTERVAL 1 MONTH) + AND M.statut='publie'" + ); + while ($row = sql_fetch($result_messages)) { $rv[journum($row['date_heure'])] = $row; } + return $rv; } - -?> diff --git a/www/plugins-dist/organiseur/javascript/jquery.autocomplete.js b/www/plugins-dist/organiseur/javascript/jquery.autocomplete.js deleted file mode 100644 index 58e6550b..00000000 --- a/www/plugins-dist/organiseur/javascript/jquery.autocomplete.js +++ /dev/null @@ -1,808 +0,0 @@ -/* - * jQuery Autocomplete plugin 1.1 - * - * Copyright (c) 2009 Jorn Zaefferer - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $ - */ - -;(function($) { - -$.fn.extend({ - autocomplete: function(urlOrData, options) { - var isUrl = typeof urlOrData == "string"; - options = $.extend({}, $.Autocompleter.defaults, { - url: isUrl ? urlOrData : null, - data: isUrl ? null : urlOrData, - delay: isUrl ? $.Autocompleter.defaults.delay : 10, - max: options && !options.scroll ? 10 : 150 - }, options); - - // if highlight is set to false, replace it with a do-nothing function - options.highlight = options.highlight || function(value) { return value; }; - - // if the formatMatch option is not specified, then use formatItem for backwards compatibility - options.formatMatch = options.formatMatch || options.formatItem; - - return this.each(function() { - new $.Autocompleter(this, options); - }); - }, - result: function(handler) { - return this.bind("result", handler); - }, - search: function(handler) { - return this.trigger("search", [handler]); - }, - flushCache: function() { - return this.trigger("flushCache"); - }, - setOptions: function(options){ - return this.trigger("setOptions", [options]); - }, - unautocomplete: function() { - return this.trigger("unautocomplete"); - } -}); - -$.Autocompleter = function(input, options) { - - var KEY = { - UP: 38, - DOWN: 40, - DEL: 46, - TAB: 9, - RETURN: 13, - ESC: 27, - COMMA: 188, - PAGEUP: 33, - PAGEDOWN: 34, - BACKSPACE: 8 - }; - - // Create $ object for input element - var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass); - - var timeout; - var previousValue = ""; - var cache = $.Autocompleter.Cache(options); - var hasFocus = 0; - var lastKeyPressCode; - var config = { - mouseDownOnSelect: false - }; - var select = $.Autocompleter.Select(options, input, selectCurrent, config); - - var blockSubmit; - - // prevent form submit in opera when selecting with return key - $.browser.opera && $(input.form).bind("submit.autocomplete", function() { - if (blockSubmit) { - blockSubmit = false; - return false; - } - }); - - // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all - $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) { - // a keypress means the input has focus - // avoids issue where input had focus before the autocomplete was applied - hasFocus = 1; - // track last key pressed - lastKeyPressCode = event.keyCode; - switch(event.keyCode) { - - case KEY.UP: - event.preventDefault(); - if ( select.visible() ) { - select.prev(); - } else { - onChange(0, true); - } - break; - - case KEY.DOWN: - event.preventDefault(); - if ( select.visible() ) { - select.next(); - } else { - onChange(0, true); - } - break; - - case KEY.PAGEUP: - event.preventDefault(); - if ( select.visible() ) { - select.pageUp(); - } else { - onChange(0, true); - } - break; - - case KEY.PAGEDOWN: - event.preventDefault(); - if ( select.visible() ) { - select.pageDown(); - } else { - onChange(0, true); - } - break; - - // matches also semicolon - case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA: - case KEY.TAB: - case KEY.RETURN: - if( selectCurrent() ) { - // stop default to prevent a form submit, Opera needs special handling - event.preventDefault(); - blockSubmit = true; - return false; - } - break; - - case KEY.ESC: - select.hide(); - break; - - default: - clearTimeout(timeout); - timeout = setTimeout(onChange, options.delay); - break; - } - }).focus(function(){ - // track whether the field has focus, we shouldn't process any - // results if the field no longer has focus - hasFocus++; - }).blur(function() { - hasFocus = 0; - if (!config.mouseDownOnSelect) { - hideResults(); - } - }).click(function() { - // show select when clicking in a focused field - if ( hasFocus++ > 1 && !select.visible() ) { - onChange(0, true); - } - }).bind("search", function() { - // TODO why not just specifying both arguments? - var fn = (arguments.length > 1) ? arguments[1] : null; - function findValueCallback(q, data) { - var result; - if( data && data.length ) { - for (var i=0; i < data.length; i++) { - if( data[i].result.toLowerCase() == q.toLowerCase() ) { - result = data[i]; - break; - } - } - } - if( typeof fn == "function" ) fn(result); - else $input.trigger("result", result && [result.data, result.value]); - } - $.each(trimWords($input.val()), function(i, value) { - request(value, findValueCallback, findValueCallback); - }); - }).bind("flushCache", function() { - cache.flush(); - }).bind("setOptions", function() { - $.extend(options, arguments[1]); - // if we've updated the data, repopulate - if ( "data" in arguments[1] ) - cache.populate(); - }).bind("unautocomplete", function() { - select.unbind(); - $input.unbind(); - $(input.form).unbind(".autocomplete"); - }); - - - function selectCurrent() { - var selected = select.selected(); - if( !selected ) - return false; - - var v = selected.result; - previousValue = v; - - if ( options.multiple ) { - var words = trimWords($input.val()); - if ( words.length > 1 ) { - var seperator = options.multipleSeparator.length; - var cursorAt = $(input).selection().start; - var wordAt, progress = 0; - $.each(words, function(i, word) { - progress += word.length; - if (cursorAt <= progress) { - wordAt = i; - return false; - } - progress += seperator; - }); - words[wordAt] = v; - // TODO this should set the cursor to the right position, but it gets overriden somewhere - //$.Autocompleter.Selection(input, progress + seperator, progress + seperator); - v = words.join( options.multipleSeparator ); - } - v += options.multipleSeparator; - } - - $input.val(v); - hideResultsNow(); - $input.trigger("result", [selected.data, selected.value]); - return true; - } - - function onChange(crap, skipPrevCheck) { - if( lastKeyPressCode == KEY.DEL ) { - select.hide(); - return; - } - - var currentValue = $input.val(); - - if ( !skipPrevCheck && currentValue == previousValue ) - return; - - previousValue = currentValue; - - currentValue = lastWord(currentValue); - if ( currentValue.length >= options.minChars) { - $input.addClass(options.loadingClass); - if (!options.matchCase) - currentValue = currentValue.toLowerCase(); - request(currentValue, receiveData, hideResultsNow); - } else { - stopLoading(); - select.hide(); - } - }; - - function trimWords(value) { - if (!value) - return [""]; - if (!options.multiple) - return [$.trim(value)]; - return $.map(value.split(options.multipleSeparator), function(word) { - return $.trim(value).length ? $.trim(word) : null; - }); - } - - function lastWord(value) { - if ( !options.multiple ) - return value; - var words = trimWords(value); - if (words.length == 1) - return words[0]; - var cursorAt = $(input).selection().start; - if (cursorAt == value.length) { - words = trimWords(value) - } else { - words = trimWords(value.replace(value.substring(cursorAt), "")); - } - return words[words.length - 1]; - } - - // fills in the input box w/the first match (assumed to be the best match) - // q: the term entered - // sValue: the first matching result - function autoFill(q, sValue){ - // autofill in the complete box w/the first match as long as the user hasn't entered in more data - // if the last user key pressed was backspace, don't autofill - if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) { - // fill in the value (keep the case the user has typed) - $input.val($input.val() + sValue.substring(lastWord(previousValue).length)); - // select the portion of the value not typed by the user (so the next character will erase) - $(input).selection(previousValue.length, previousValue.length + sValue.length); - } - }; - - function hideResults() { - clearTimeout(timeout); - timeout = setTimeout(hideResultsNow, 200); - }; - - function hideResultsNow() { - var wasVisible = select.visible(); - select.hide(); - clearTimeout(timeout); - stopLoading(); - if (options.mustMatch) { - // call search and run callback - $input.search( - function (result){ - // if no value found, clear the input box - if( !result ) { - if (options.multiple) { - var words = trimWords($input.val()).slice(0, -1); - $input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") ); - } - else { - $input.val( "" ); - $input.trigger("result", null); - } - } - } - ); - } - }; - - function receiveData(q, data) { - if ( data && data.length && hasFocus ) { - stopLoading(); - select.display(data, q); - autoFill(q, data[0].value); - select.show(); - } else { - hideResultsNow(); - } - }; - - function request(term, success, failure) { - if (!options.matchCase) - term = term.toLowerCase(); - var data = cache.load(term); - // recieve the cached data - if (data && data.length) { - success(term, data); - // if an AJAX url has been supplied, try loading the data now - } else if( (typeof options.url == "string") && (options.url.length > 0) ){ - - var extraParams = { - timestamp: +new Date() - }; - $.each(options.extraParams, function(key, param) { - extraParams[key] = typeof param == "function" ? param() : param; - }); - - $.ajax({ - // try to leverage ajaxQueue plugin to abort previous requests - mode: "abort", - // limit abortion to this input - port: "autocomplete" + input.name, - dataType: options.dataType, - url: options.url, - data: $.extend({ - q: lastWord(term), - limit: options.max - }, extraParams), - success: function(data) { - var parsed = options.parse && options.parse(data) || parse(data); - cache.add(term, parsed); - success(term, parsed); - } - }); - } else { - // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match - select.emptyList(); - failure(term); - } - }; - - function parse(data) { - var parsed = []; - var rows = data.split("\n"); - for (var i=0; i < rows.length; i++) { - var row = $.trim(rows[i]); - if (row) { - row = row.split("|"); - parsed[parsed.length] = { - data: row, - value: row[0], - result: options.formatResult && options.formatResult(row, row[0]) || row[0] - }; - } - } - return parsed; - }; - - function stopLoading() { - $input.removeClass(options.loadingClass); - }; - -}; - -$.Autocompleter.defaults = { - inputClass: "ac_input", - resultsClass: "ac_results", - loadingClass: "ac_loading", - minChars: 1, - delay: 400, - matchCase: false, - matchSubset: true, - matchContains: false, - cacheLength: 10, - max: 100, - mustMatch: false, - extraParams: {}, - selectFirst: true, - formatItem: function(row) { return row[0]; }, - formatMatch: null, - autoFill: false, - width: 0, - multiple: false, - multipleSeparator: ", ", - highlight: function(value, term) { - return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "$1"); - }, - scroll: true, - scrollHeight: 180 -}; - -$.Autocompleter.Cache = function(options) { - - var data = {}; - var length = 0; - - function matchSubset(s, sub) { - if (!options.matchCase) - s = s.toLowerCase(); - var i = s.indexOf(sub); - if (options.matchContains == "word"){ - i = s.toLowerCase().search("\\b" + sub.toLowerCase()); - } - if (i == -1) return false; - return i == 0 || options.matchContains; - }; - - function add(q, value) { - if (length > options.cacheLength){ - flush(); - } - if (!data[q]){ - length++; - } - data[q] = value; - } - - function populate(){ - if( !options.data ) return false; - // track the matches - var stMatchSets = {}, - nullData = 0; - - // no url was specified, we need to adjust the cache length to make sure it fits the local data store - if( !options.url ) options.cacheLength = 1; - - // track all options for minChars = 0 - stMatchSets[""] = []; - - // loop through the array and create a lookup structure - for ( var i = 0, ol = options.data.length; i < ol; i++ ) { - var rawValue = options.data[i]; - // if rawValue is a string, make an array otherwise just reference the array - rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue; - - var value = options.formatMatch(rawValue, i+1, options.data.length); - if ( value === false ) - continue; - - var firstChar = value.charAt(0).toLowerCase(); - // if no lookup array for this character exists, look it up now - if( !stMatchSets[firstChar] ) - stMatchSets[firstChar] = []; - - // if the match is a string - var row = { - value: value, - data: rawValue, - result: options.formatResult && options.formatResult(rawValue) || value - }; - - // push the current match into the set list - stMatchSets[firstChar].push(row); - - // keep track of minChars zero items - if ( nullData++ < options.max ) { - stMatchSets[""].push(row); - } - }; - - // add the data items to the cache - $.each(stMatchSets, function(i, value) { - // increase the cache size - options.cacheLength++; - // add to the cache - add(i, value); - }); - } - - // populate any existing data - setTimeout(populate, 25); - - function flush(){ - data = {}; - length = 0; - } - - return { - flush: flush, - add: add, - populate: populate, - load: function(q) { - if (!options.cacheLength || !length) - return null; - /* - * if dealing w/local data and matchContains than we must make sure - * to loop through all the data collections looking for matches - */ - if( !options.url && options.matchContains ){ - // track all matches - var csub = []; - // loop through all the data grids for matches - for( var k in data ){ - // don't search through the stMatchSets[""] (minChars: 0) cache - // this prevents duplicates - if( k.length > 0 ){ - var c = data[k]; - $.each(c, function(i, x) { - // if we've got a match, add it to the array - if (matchSubset(x.value, q)) { - csub.push(x); - } - }); - } - } - return csub; - } else - // if the exact item exists, use it - if (data[q]){ - return data[q]; - } else - if (options.matchSubset) { - for (var i = q.length - 1; i >= options.minChars; i--) { - var c = data[q.substr(0, i)]; - if (c) { - var csub = []; - $.each(c, function(i, x) { - if (matchSubset(x.value, q)) { - csub[csub.length] = x; - } - }); - return csub; - } - } - } - return null; - } - }; -}; - -$.Autocompleter.Select = function (options, input, select, config) { - var CLASSES = { - ACTIVE: "ac_over" - }; - - var listItems, - active = -1, - data, - term = "", - needsInit = true, - element, - list; - - // Create results - function init() { - if (!needsInit) - return; - element = $("

      ") - .hide() - .addClass(options.resultsClass) - .css("position", "absolute") - .appendTo(document.body); - - list = $("
        ").appendTo(element).mouseover( function(event) { - if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') { - active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event)); - $(target(event)).addClass(CLASSES.ACTIVE); - } - }).click(function(event) { - $(target(event)).addClass(CLASSES.ACTIVE); - select(); - // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus - input.focus(); - return false; - }).mousedown(function() { - config.mouseDownOnSelect = true; - }).mouseup(function() { - config.mouseDownOnSelect = false; - }); - - if( options.width > 0 ) - element.css("width", options.width); - - needsInit = false; - } - - function target(event) { - var element = event.target; - while(element && element.tagName != "LI") - element = element.parentNode; - // more fun with IE, sometimes event.target is empty, just ignore it then - if(!element) - return []; - return element; - } - - function moveSelect(step) { - listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE); - movePosition(step); - var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE); - if(options.scroll) { - var offset = 0; - listItems.slice(0, active).each(function() { - offset += this.offsetHeight; - }); - if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) { - list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight()); - } else if(offset < list.scrollTop()) { - list.scrollTop(offset); - } - } - }; - - function movePosition(step) { - active += step; - if (active < 0) { - active = listItems.size() - 1; - } else if (active >= listItems.size()) { - active = 0; - } - } - - function limitNumberOfItems(available) { - return options.max && options.max < available - ? options.max - : available; - } - - function fillList() { - list.empty(); - var max = limitNumberOfItems(data.length); - for (var i=0; i < max; i++) { - if (!data[i]) - continue; - var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term); - if ( formatted === false ) - continue; - var li = $("
      • ").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0]; - $.data(li, "ac_data", data[i]); - } - listItems = list.find("li"); - if ( options.selectFirst ) { - listItems.slice(0, 1).addClass(CLASSES.ACTIVE); - active = 0; - } - // apply bgiframe if available - if ( $.fn.bgiframe ) - list.bgiframe(); - } - - return { - display: function(d, q) { - init(); - data = d; - term = q; - fillList(); - }, - next: function() { - moveSelect(1); - }, - prev: function() { - moveSelect(-1); - }, - pageUp: function() { - if (active != 0 && active - 8 < 0) { - moveSelect( -active ); - } else { - moveSelect(-8); - } - }, - pageDown: function() { - if (active != listItems.size() - 1 && active + 8 > listItems.size()) { - moveSelect( listItems.size() - 1 - active ); - } else { - moveSelect(8); - } - }, - hide: function() { - element && element.hide(); - listItems && listItems.removeClass(CLASSES.ACTIVE); - active = -1; - }, - visible : function() { - return element && element.is(":visible"); - }, - current: function() { - return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]); - }, - show: function() { - var offset = $(input).offset(); - element.css({ - width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(), - top: offset.top + input.offsetHeight, - left: offset.left - }).show(); - if(options.scroll) { - list.scrollTop(0); - list.css({ - maxHeight: options.scrollHeight, - overflow: 'auto' - }); - - if($.browser.msie && typeof document.body.style.maxHeight === "undefined") { - var listHeight = 0; - listItems.each(function() { - listHeight += this.offsetHeight; - }); - var scrollbarsVisible = listHeight > options.scrollHeight; - list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight ); - if (!scrollbarsVisible) { - // IE doesn't recalculate width when scrollbar disappears - listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) ); - } - } - - } - }, - selected: function() { - var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE); - return selected && selected.length && $.data(selected[0], "ac_data"); - }, - emptyList: function (){ - list && list.empty(); - }, - unbind: function() { - element && element.remove(); - } - }; -}; - -$.fn.selection = function(start, end) { - if (start !== undefined) { - return this.each(function() { - if( this.createTextRange ){ - var selRange = this.createTextRange(); - if (end === undefined || start == end) { - selRange.move("character", start); - selRange.select(); - } else { - selRange.collapse(true); - selRange.moveStart("character", start); - selRange.moveEnd("character", end); - selRange.select(); - } - } else if( this.setSelectionRange ){ - this.setSelectionRange(start, end); - } else if( this.selectionStart ){ - this.selectionStart = start; - this.selectionEnd = end; - } - }); - } - var field = this[0]; - if ( field.createTextRange ) { - var range = document.selection.createRange(), - orig = field.value, - teststring = "<->", - textLength = range.text.length; - range.text = teststring; - var caretAt = field.value.indexOf(teststring); - field.value = orig; - this.selection(caretAt, caretAt + textLength); - return { - start: caretAt, - end: caretAt + textLength - } - } else if( field.selectionStart !== undefined ){ - return { - start: field.selectionStart, - end: field.selectionEnd - } - } -}; - -})(jQuery); \ No newline at end of file diff --git a/www/plugins-dist/organiseur/lang/organiseur.xml b/www/plugins-dist/organiseur/lang/organiseur.xml index 50251667..6921b131 100644 --- a/www/plugins-dist/organiseur/lang/organiseur.xml +++ b/www/plugins-dist/organiseur/lang/organiseur.xml @@ -1,37 +1,58 @@ - + - + + - + + - + + - + - + - + + - + + + + + + - + + - + + + + - + + + + + + - + + + + diff --git a/www/plugins-dist/organiseur/lang/organiseur_ar.php b/www/plugins-dist/organiseur/lang/organiseur_ar.php index 68475f88..82f4a20b 100644 --- a/www/plugins-dist/organiseur/lang/organiseur_ar.php +++ b/www/plugins-dist/organiseur/lang/organiseur_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/organiseur?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -32,6 +34,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_ecrire_nouvelle_annonce' => 'كتابة إعلان جديد', 'icone_effacer_message' => 'حذف هذه الرسالة', 'icone_modifier_annonce' => 'تعديل هذا الإعلان', + 'icone_modifier_message' => 'تعديل هذه الرسالة', 'icone_modifier_pensebete' => 'تعديل هذه المذكرة', 'icone_supprimer_message' => 'إزالة هذه الرسالة', 'info_1_message_envoye' => 'رسالة واحدة بعثت', @@ -77,5 +80,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_boite_envoi' => 'صندوق الارسال', 'titre_boite_reception' => 'صندوق التلقي' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/organiseur_de.php b/www/plugins-dist/organiseur/lang/organiseur_de.php index f9309ac7..937e379a 100644 --- a/www/plugins-dist/organiseur/lang/organiseur_de.php +++ b/www/plugins-dist/organiseur/lang/organiseur_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/organiseur?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -32,6 +34,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_ecrire_nouvelle_annonce' => 'Neue Ankündigung veröffentlichen', 'icone_effacer_message' => 'Nachricht löschen', 'icone_modifier_annonce' => 'Ankündigung bearbeiten', + 'icone_modifier_message' => 'Diese Nachricht bearbeiten', 'icone_modifier_pensebete' => 'Notiz ändern', 'icone_supprimer_message' => 'Nachricht löschen', 'info_1_message_envoye' => '1 Nachricht gesendet', @@ -77,5 +80,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_boite_envoi' => 'Postausgang', 'titre_boite_reception' => 'Posteingang' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/organiseur_en.php b/www/plugins-dist/organiseur/lang/organiseur_en.php index 3941e434..156ed9ab 100644 --- a/www/plugins-dist/organiseur/lang/organiseur_en.php +++ b/www/plugins-dist/organiseur/lang/organiseur_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/organiseur?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -32,6 +34,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_ecrire_nouvelle_annonce' => 'Send a new announcement', 'icone_effacer_message' => 'Delete this message', 'icone_modifier_annonce' => 'Edit this announcement', + 'icone_modifier_message' => 'Modify this message', 'icone_modifier_pensebete' => 'Edit this reminder', 'icone_supprimer_message' => 'Delete this message', 'info_1_message_envoye' => '1 message sent', @@ -77,5 +80,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_boite_envoi' => 'Outbox', 'titre_boite_reception' => 'Inbox' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/organiseur_es.php b/www/plugins-dist/organiseur/lang/organiseur_es.php index d5356f10..a52ebc2e 100644 --- a/www/plugins-dist/organiseur/lang/organiseur_es.php +++ b/www/plugins-dist/organiseur/lang/organiseur_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/organiseur?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -32,6 +34,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_ecrire_nouvelle_annonce' => 'Enviar un nuevo anuncio', 'icone_effacer_message' => 'Borrar este mensaje', 'icone_modifier_annonce' => 'Modificar este anuncio', + 'icone_modifier_message' => 'Modificar este mensaje', 'icone_modifier_pensebete' => 'Modificar esta nota', 'icone_supprimer_message' => 'Suprimir este mensaje', 'info_1_message_envoye' => '1 mensaje enviado', @@ -77,5 +80,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_boite_envoi' => 'Casilla de envío', 'titre_boite_reception' => 'Casilla de mensajes' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/organiseur_fa.php b/www/plugins-dist/organiseur/lang/organiseur_fa.php index c8094b5c..6b73e528 100644 --- a/www/plugins-dist/organiseur/lang/organiseur_fa.php +++ b/www/plugins-dist/organiseur/lang/organiseur_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/organiseur?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -77,5 +79,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_boite_envoi' => 'صندوق نامه', 'titre_boite_reception' => 'صندوق دريافت' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/organiseur_fr.php b/www/plugins-dist/organiseur/lang/organiseur_fr.php index 97dac232..c26fd278 100644 --- a/www/plugins-dist/organiseur/lang/organiseur_fr.php +++ b/www/plugins-dist/organiseur/lang/organiseur_fr.php @@ -1,7 +1,9 @@ 'Boîte d’envoi', 'titre_boite_reception' => 'Boîte de reception' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/organiseur_fr_fem.php b/www/plugins-dist/organiseur/lang/organiseur_fr_fem.php index 2ae23d05..41370f16 100644 --- a/www/plugins-dist/organiseur/lang/organiseur_fr_fem.php +++ b/www/plugins-dist/organiseur/lang/organiseur_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/organiseur?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -32,6 +34,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_ecrire_nouvelle_annonce' => 'Envoyer une nouvelle annonce', 'icone_effacer_message' => 'Effacer ce message', 'icone_modifier_annonce' => 'Modifier cette annonce', + 'icone_modifier_message' => 'Modifier ce message', 'icone_modifier_pensebete' => 'Modifier ce pense-bête', 'icone_supprimer_message' => 'Supprimer ce message', 'info_1_message_envoye' => '1 message envoyé', @@ -77,5 +80,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_boite_envoi' => 'Boîte d’envoi', 'titre_boite_reception' => 'Boîte de réception' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/organiseur_fr_tu.php b/www/plugins-dist/organiseur/lang/organiseur_fr_tu.php new file mode 100644 index 00000000..2ac73760 --- /dev/null +++ b/www/plugins-dist/organiseur/lang/organiseur_fr_tu.php @@ -0,0 +1,82 @@ + 'Enregistrer en brouillon', + 'bouton_envoyer_message' => 'Envoyer', + 'bouton_envoyer_message_maintenant' => 'Envoyer maintenant', + + // C + 'cal_jour_entier' => 'Journée', + 'cal_par_jour' => 'jour', + 'cal_par_mois' => 'mois', + 'cal_par_semaine' => 'semaine', + + // E + 'erreur_date' => 'Cette date est incorrecte', + 'erreur_date_avant_apres' => 'Indique une date de fin après la date de début !', + 'erreur_date_corrigee' => 'La date a été corrigée', + 'erreur_destinataire_invalide' => 'Le destinataire @dest@ n’est pas valide', + 'erreur_heure' => 'Cette heure est incorrecte', + 'erreur_heure_corrigee' => 'L’heure a été corrigée', + + // I + 'icone_ecrire_nouveau_message' => 'Envoyer un nouveau message', + 'icone_ecrire_nouveau_pensebete' => 'Écrire un nouveau pense-bête', + 'icone_ecrire_nouvelle_annonce' => 'Envoyer une nouvelle annonce', + 'icone_effacer_message' => 'Effacer ce message', + 'icone_modifier_annonce' => 'Modifier cette annonce', + 'icone_modifier_message' => 'Modifier ce message', + 'icone_modifier_pensebete' => 'Modifier ce pense-bête', + 'icone_supprimer_message' => 'Supprimer ce message', + 'info_1_message_envoye' => '1 message envoyé', + 'info_1_message_nonlu' => '1 nouveau message', + 'info_agenda_interne' => 'Agenda interne', + 'info_message_a' => 'À', + 'info_message_date' => 'Date', + 'info_message_date_debut' => 'Date début', + 'info_message_date_fin' => 'Date fin', + 'info_message_de' => 'De', + 'info_message_non_lu' => 'Nouveau message', + 'info_message_objet' => 'Objet', + 'info_nb_messages_envoyes' => '@nb@ messages envoyés', + 'info_nb_messages_nonlus' => '@nb@ nouveaux messages', + 'info_selection_annonces' => 'Annonces', + 'info_selection_messages' => 'Messages', + 'info_selection_pensebetes' => 'Pense-bêtes', + 'info_type_message_affich' => 'Annonce', + 'info_type_message_normal' => 'Message', + 'info_type_message_pb' => 'Pense-bête', + 'info_type_message_rv' => 'Rendez-vous', + + // L + 'label_destinataires' => 'À', + 'label_texte' => 'Texte', + 'label_titre' => 'Sujet', + 'loading' => 'Chargement…', + + // M + 'message' => 'Message', + 'messages' => 'Messages', + + // N + 'notification_annonce_lire_a_ladresse' => 'Tu peux la lire à l’adresse suivante @url@.', + 'notification_annonce_publie_1' => '[@nom_site_spip@] Annonce générale', + 'notification_message_lire_a_ladresse' => 'Tu peux le lire et y répondre à l’adresse suivante @url@.', + 'notification_message_publie_1' => '[@nom_site_spip@] Nouveau message', + 'notification_message_recu_de' => 'Tu as reçu un nouveau message de la part de @nom@.', + + // T + 'texte_message_brouillon' => 'Ce message est enregistré comme brouillon', + 'titre_agenda_rv' => 'Rendez-vous', + 'titre_boite_envoi' => 'Boîte d’envoi', + 'titre_boite_reception' => 'Boîte de reception' +); diff --git a/www/plugins-dist/organiseur/lang/organiseur_it.php b/www/plugins-dist/organiseur/lang/organiseur_it.php index 8b0c83c1..46fb2bfa 100644 --- a/www/plugins-dist/organiseur/lang/organiseur_it.php +++ b/www/plugins-dist/organiseur/lang/organiseur_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/organiseur?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -32,6 +34,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_ecrire_nouvelle_annonce' => 'Invia un nuovo annuncio', 'icone_effacer_message' => 'Cancella questo messaggio', 'icone_modifier_annonce' => 'Modifica questo annuncio', + 'icone_modifier_message' => 'Modificare questo messaggio', 'icone_modifier_pensebete' => 'Modifica questo promemoria', 'icone_supprimer_message' => 'Cancella questo messaggio', 'info_1_message_envoye' => '1 messaggio inviato', @@ -77,5 +80,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_boite_envoi' => 'Posta in uscita', 'titre_boite_reception' => 'Posta in entrata' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/organiseur_nl.php b/www/plugins-dist/organiseur/lang/organiseur_nl.php index 87b3220b..4e56f5f3 100644 --- a/www/plugins-dist/organiseur/lang/organiseur_nl.php +++ b/www/plugins-dist/organiseur/lang/organiseur_nl.php @@ -3,14 +3,16 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/organiseur?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // B - 'bouton_enregistrer_brouillon' => 'Ontwerp op te slaan', - 'bouton_envoyer_message' => 'Opsturen', - 'bouton_envoyer_message_maintenant' => 'Opsturen nu', + 'bouton_enregistrer_brouillon' => 'In klad opslaan', + 'bouton_envoyer_message' => 'Verzenden', + 'bouton_envoyer_message_maintenant' => 'Nu verzenden', // C 'cal_jour_entier' => 'Hele dag', @@ -20,38 +22,39 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // E 'erreur_date' => 'De datum is ongeldig', - 'erreur_date_avant_apres' => 'Geef een einddatum na de begindatum aan !', + 'erreur_date_avant_apres' => 'Geef een einddatum na de begindatum aan!', 'erreur_date_corrigee' => 'De datum werd verbeterd', 'erreur_destinataire_invalide' => 'De ontvanger @dest@ is niet geldig', - 'erreur_heure' => 'Uur is ongeldig', - 'erreur_heure_corrigee' => 'Het uur werd verbeterd', + 'erreur_heure' => 'Tijdstip is ongeldig', + 'erreur_heure_corrigee' => 'Het tijdstip werd verbeterd', // I - 'icone_ecrire_nouveau_message' => 'Een nieuwe boodschap opsturen', - 'icone_ecrire_nouveau_pensebete' => 'Een herinneringsnota aanmaken', + 'icone_ecrire_nouveau_message' => 'Een nieuwe bericht opsturen', + 'icone_ecrire_nouveau_pensebete' => 'Een herinneringsmemo aanmaken', 'icone_ecrire_nouvelle_annonce' => 'Een nieuwe aankondiging aanmaken', - 'icone_effacer_message' => 'Deze boodschap uitwissen', + 'icone_effacer_message' => 'Dit bericht wissen', 'icone_modifier_annonce' => 'Deze aankondiging veranderen', - 'icone_modifier_pensebete' => 'De herinneringsnota veranderen', - 'icone_supprimer_message' => 'Deze boodschap uitwissen', + 'icone_modifier_message' => 'Dit bericht aanpassen', + 'icone_modifier_pensebete' => 'De herinneringsmemo veranderen', + 'icone_supprimer_message' => 'Dit bericht wissen', 'info_1_message_envoye' => '1 boodschap opgestuurd', 'info_1_message_nonlu' => '1 nieuwe boodschap', 'info_agenda_interne' => 'Interne agenda', 'info_message_a' => 'Naar', 'info_message_date' => 'Datum', 'info_message_date_debut' => 'Begindatum', - 'info_message_date_fin' => 'Eindtum', + 'info_message_date_fin' => 'Einddatum', 'info_message_de' => 'Van', - 'info_message_non_lu' => 'Nieuwe boodschap', + 'info_message_non_lu' => 'Nieuwe bericht', 'info_message_objet' => 'Onderwerp', 'info_nb_messages_envoyes' => '@nb@ boodschapppen opgestuurd', 'info_nb_messages_nonlus' => '@nb@ nieuwe boodschappen', 'info_selection_annonces' => 'Aankondigingen', 'info_selection_messages' => 'Boodschappen', - 'info_selection_pensebetes' => 'Herinneringsnotas', + 'info_selection_pensebetes' => 'Herinneringsmemo’s', 'info_type_message_affich' => 'Aankondiging', - 'info_type_message_normal' => 'Boodschap', - 'info_type_message_pb' => 'Herinneringsnota', + 'info_type_message_normal' => 'Bericht', + 'info_type_message_pb' => 'Herinneringsmemo', 'info_type_message_rv' => 'Afspraak', // L @@ -61,21 +64,19 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'loading' => 'Aan het laden...', // M - 'message' => 'Boodschap', - 'messages' => 'Boodschappen', + 'message' => 'Bericht', + 'messages' => 'Berichten', // N - 'notification_annonce_lire_a_ladresse' => 'Je kan ze lezen op volgende address: @url@.', + 'notification_annonce_lire_a_ladresse' => 'Je kan ze lezen op het volgende addres: @url@.', 'notification_annonce_publie_1' => '[@nom_site_spip@] Algemene aankondiging', - 'notification_message_lire_a_ladresse' => 'Je kan het boodschap lezen en beantwoorden op het address: @url@.', - 'notification_message_publie_1' => '[@nom_site_spip@] Nieuwe boodschap', - 'notification_message_recu_de' => 'Je hebt een nieuwe boodschap gekregen vanuit @nom@.', + 'notification_message_lire_a_ladresse' => 'Je kan het bericht lezen en beantwoorden op het adres: @url@.', + 'notification_message_publie_1' => '[@nom_site_spip@] Nieuw bericht', + 'notification_message_recu_de' => 'Je hebt een nieuwe bericht gekregen van @nom@.', // T - 'texte_message_brouillon' => 'Deze boodschapsontwerp werd opgeslagen.', + 'texte_message_brouillon' => 'Deze bericht werd als klad opgeslagen.', 'titre_agenda_rv' => 'Afspraak', 'titre_boite_envoi' => 'Outbox', 'titre_boite_reception' => 'INBOX' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/organiseur_oc_ni_mis.php b/www/plugins-dist/organiseur/lang/organiseur_oc_ni_mis.php new file mode 100644 index 00000000..91ebae86 --- /dev/null +++ b/www/plugins-dist/organiseur/lang/organiseur_oc_ni_mis.php @@ -0,0 +1,82 @@ + 'Registrà couma un pastrouioun', + 'bouton_envoyer_message' => 'Mandà', + 'bouton_envoyer_message_maintenant' => 'Mandà ahura', + + // C + 'cal_jour_entier' => 'Journada', + 'cal_par_jour' => 'jou', + 'cal_par_mois' => 'mès', + 'cal_par_semaine' => 'semana', + + // E + 'erreur_date' => 'Aquela data es mau coureta', + 'erreur_date_avant_apres' => 'Endicas una data finala après la data iniciala !', + 'erreur_date_corrigee' => 'La data es estada courrejuda', + 'erreur_destinataire_invalide' => 'Lou destinatàri @dest@ noun es vàlidou', + 'erreur_heure' => 'Aquela oura es mau coureta', + 'erreur_heure_corrigee' => 'L’oura es estada courrejuda', + + // I + 'icone_ecrire_nouveau_message' => 'Mandà un message nouvèu', + 'icone_ecrire_nouveau_pensebete' => 'Escriéure una nota de renembrança nouvela', + 'icone_ecrire_nouvelle_annonce' => 'Mandà un anounci nouvèu', + 'icone_effacer_message' => 'Escassà aqueu message', + 'icone_modifier_annonce' => 'Moudificà aqueu anounci', + 'icone_modifier_message' => 'Moudificà aqueu message', + 'icone_modifier_pensebete' => 'Moudificà aquela nota de renembrança', + 'icone_supprimer_message' => 'Suprimà aqueu message', + 'info_1_message_envoye' => '1 message mandat', + 'info_1_message_nonlu' => '1 message nouvèu', + 'info_agenda_interne' => 'Agènda interna', + 'info_message_a' => 'A', + 'info_message_date' => 'Data', + 'info_message_date_debut' => 'Data iniciala', + 'info_message_date_fin' => 'Data finala', + 'info_message_de' => 'Da', + 'info_message_non_lu' => 'message nouvèu', + 'info_message_objet' => 'Ouget', + 'info_nb_messages_envoyes' => '@nb@ message mandat', + 'info_nb_messages_nonlus' => '@nb@ message nouvèu', + 'info_selection_annonces' => 'Anounci', + 'info_selection_messages' => 'Message', + 'info_selection_pensebetes' => 'Nota de renembrança', + 'info_type_message_affich' => 'Anounci', + 'info_type_message_normal' => 'Message', + 'info_type_message_pb' => 'Nota de renembrança', + 'info_type_message_rv' => 'Apountamen', + + // L + 'label_destinataires' => 'A', + 'label_texte' => 'Tèst', + 'label_titre' => 'Soujet', + 'loading' => 'Cargamen…', + + // M + 'message' => 'Message', + 'messages' => 'Message', + + // N + 'notification_annonce_lire_a_ladresse' => 'Poudès lou legì a l’adressa seguenta @url@.', + 'notification_annonce_publie_1' => '[@nom_site_spip@] Anounci general', + 'notification_message_lire_a_ladresse' => 'Poudès lou legì e li respouòndre a l’adressa seguenta @url@.', + 'notification_message_publie_1' => '[@nom_site_spip@] Message nouvèu', + 'notification_message_recu_de' => 'Avès receuput un message nouvèu da @nom@.', + + // T + 'texte_message_brouillon' => 'Aqueu message es registrat couma un pastrouioun', + 'titre_agenda_rv' => 'Apountamen', + 'titre_boite_envoi' => 'Bouòta d’espedissioun', + 'titre_boite_reception' => 'Bouòta de recevimen' +); diff --git a/www/plugins-dist/organiseur/lang/organiseur_pt.php b/www/plugins-dist/organiseur/lang/organiseur_pt.php index ddaa1df9..637808b8 100644 --- a/www/plugins-dist/organiseur/lang/organiseur_pt.php +++ b/www/plugins-dist/organiseur/lang/organiseur_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/organiseur?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -77,5 +79,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_boite_envoi' => 'Enviadas', 'titre_boite_reception' => 'Recebidas' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/organiseur_pt_br.php b/www/plugins-dist/organiseur/lang/organiseur_pt_br.php new file mode 100644 index 00000000..f156a888 --- /dev/null +++ b/www/plugins-dist/organiseur/lang/organiseur_pt_br.php @@ -0,0 +1,82 @@ + 'Salvar como rascunho', + 'bouton_envoyer_message' => 'Enviar', + 'bouton_envoyer_message_maintenant' => 'Enviar agora', + + // C + 'cal_jour_entier' => 'Jornada', + 'cal_par_jour' => 'dia', + 'cal_par_mois' => 'mês', + 'cal_par_semaine' => 'semana', + + // E + 'erreur_date' => 'A data está incorreta', + 'erreur_date_avant_apres' => 'Indique uma data final posterior à data de início!', + 'erreur_date_corrigee' => 'A data foi corrigida', + 'erreur_destinataire_invalide' => 'O destinatário @dest@ não é válido', + 'erreur_heure' => 'A hora está incorreta', + 'erreur_heure_corrigee' => 'A hora foi corrigida', + + // I + 'icone_ecrire_nouveau_message' => 'Enviar uma nova mensagem', + 'icone_ecrire_nouveau_pensebete' => 'Escrever um novo lembrete', + 'icone_ecrire_nouvelle_annonce' => 'Enviar um novo anúncio', + 'icone_effacer_message' => 'Apagar essa mensagem', + 'icone_modifier_annonce' => 'Modificar esse anúncio', + 'icone_modifier_message' => 'Modificar essa mensagem', + 'icone_modifier_pensebete' => 'Modificar esse lembrete', + 'icone_supprimer_message' => 'Excluir essa mensagem', + 'info_1_message_envoye' => '1 mensagem enviada', + 'info_1_message_nonlu' => '1 nova mensagem', + 'info_agenda_interne' => 'Agenda interna', + 'info_message_a' => 'Para', + 'info_message_date' => 'Data', + 'info_message_date_debut' => 'Data de início', + 'info_message_date_fin' => 'Data de término', + 'info_message_de' => 'De', + 'info_message_non_lu' => 'Nova mensagem', + 'info_message_objet' => 'Objeto', + 'info_nb_messages_envoyes' => '@nb@ mensagens enviadas', + 'info_nb_messages_nonlus' => '@nb@ novas mensagens', + 'info_selection_annonces' => 'Anúncios', + 'info_selection_messages' => 'Mensagens', + 'info_selection_pensebetes' => 'Lembretes', + 'info_type_message_affich' => 'Anúncio', + 'info_type_message_normal' => 'Mensagem', + 'info_type_message_pb' => 'Lembrete', + 'info_type_message_rv' => 'Reunião', + + // L + 'label_destinataires' => 'Para', + 'label_texte' => 'Texto', + 'label_titre' => 'Assunto', + 'loading' => 'Carregando…', + + // M + 'message' => 'Mensagem', + 'messages' => 'Mensagens', + + // N + 'notification_annonce_lire_a_ladresse' => 'Saiba mais em @url@.', + 'notification_annonce_publie_1' => '[@nom_site_spip@] Anúncio geral', + 'notification_message_lire_a_ladresse' => 'Ler e responder em: @url@.', + 'notification_message_publie_1' => '[@nom_site_spip@] Nova mensagem', + 'notification_message_recu_de' => 'Nova mensagem de @nom@.', + + // T + 'texte_message_brouillon' => 'Mensagem gravada como rascunho', + 'titre_agenda_rv' => 'Reunião', + 'titre_boite_envoi' => 'Enviadas', + 'titre_boite_reception' => 'Caixa de entrada' +); diff --git a/www/plugins-dist/organiseur/lang/organiseur_ru.php b/www/plugins-dist/organiseur/lang/organiseur_ru.php index ae4b7d54..458f8fa3 100644 --- a/www/plugins-dist/organiseur/lang/organiseur_ru.php +++ b/www/plugins-dist/organiseur/lang/organiseur_ru.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/organiseur?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -32,6 +34,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_ecrire_nouvelle_annonce' => 'Отправить объявление', 'icone_effacer_message' => 'Удалить сообщение', 'icone_modifier_annonce' => 'Изменить объявление', + 'icone_modifier_message' => 'Редактировать это сообщение', 'icone_modifier_pensebete' => 'Изменить напоминание', 'icone_supprimer_message' => 'Удалить сообщение', 'info_1_message_envoye' => '1 сообщение отправлено ', @@ -77,5 +80,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_boite_envoi' => 'Исходящие', 'titre_boite_reception' => 'Входящие' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/organiseur_sk.php b/www/plugins-dist/organiseur/lang/organiseur_sk.php index a0bfee99..d2543475 100644 --- a/www/plugins-dist/organiseur/lang/organiseur_sk.php +++ b/www/plugins-dist/organiseur/lang/organiseur_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/organiseur?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -32,6 +34,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_ecrire_nouvelle_annonce' => 'PoslaÅ¥ nový oznam', 'icone_effacer_message' => 'VymazaÅ¥ túto správu', 'icone_modifier_annonce' => 'UpraviÅ¥ tento oznam', + 'icone_modifier_message' => 'UpraviÅ¥ túto správu', 'icone_modifier_pensebete' => 'UpraviÅ¥ túto pripomienku', 'icone_supprimer_message' => 'OdstrániÅ¥ túto správu', 'info_1_message_envoye' => '1 odoslaná správa', @@ -77,5 +80,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'titre_boite_envoi' => 'Na odoslanie', 'titre_boite_reception' => 'Doručená poÅ¡ta' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/organiseur_uk.php b/www/plugins-dist/organiseur/lang/organiseur_uk.php new file mode 100644 index 00000000..b543fa9a --- /dev/null +++ b/www/plugins-dist/organiseur/lang/organiseur_uk.php @@ -0,0 +1,82 @@ + 'Зберегти як чернетку', + 'bouton_envoyer_message' => 'Відправити', + 'bouton_envoyer_message_maintenant' => 'Відправити зараз', + + // C + 'cal_jour_entier' => 'День', + 'cal_par_jour' => 'день', + 'cal_par_mois' => 'місяць', + 'cal_par_semaine' => 'тиждень', + + // E + 'erreur_date' => 'Дату вказано невірно', + 'erreur_date_avant_apres' => 'Вкажіть початкову і кінцеву дати!', + 'erreur_date_corrigee' => 'Дату виправлено', + 'erreur_destinataire_invalide' => 'Неправильний отримувач - @dest@ ', + 'erreur_heure' => 'Час вказано невірно', + 'erreur_heure_corrigee' => 'Час виправлено ', + + // I + 'icone_ecrire_nouveau_message' => 'Відправити нове повідомлення', + 'icone_ecrire_nouveau_pensebete' => 'Нове нагадування', + 'icone_ecrire_nouvelle_annonce' => 'Відправити оголошення', + 'icone_effacer_message' => 'Видалити повідомлення', + 'icone_modifier_annonce' => 'Змінити оголошення', + 'icone_modifier_message' => 'Редагувати це повідомлення', + 'icone_modifier_pensebete' => 'Змінити нагадування', + 'icone_supprimer_message' => 'Видалити повідомлення', + 'info_1_message_envoye' => '1 повідомлення відправлено ', + 'info_1_message_nonlu' => '1 нове повідомлення', + 'info_agenda_interne' => 'Розклад дня', + 'info_message_a' => 'Кому', + 'info_message_date' => 'Дата', + 'info_message_date_debut' => 'Початкова дата', + 'info_message_date_fin' => 'Кінцева дата', + 'info_message_de' => 'Від', + 'info_message_non_lu' => 'Нове повідомлення', + 'info_message_objet' => 'Об´єкт', + 'info_nb_messages_envoyes' => '@nb@ повідомлень відправлено', + 'info_nb_messages_nonlus' => '@nb@ нових повідомлень', + 'info_selection_annonces' => 'Оголошення', + 'info_selection_messages' => 'Повідомлення', + 'info_selection_pensebetes' => 'Нагадування', + 'info_type_message_affich' => 'Оголошення', + 'info_type_message_normal' => 'Повідомлення', + 'info_type_message_pb' => 'Нагадування', + 'info_type_message_rv' => 'Подія', + + // L + 'label_destinataires' => 'Кому', + 'label_texte' => 'Текст', + 'label_titre' => 'Тема', + 'loading' => 'Завантажується…', + + // M + 'message' => 'Повідомлення', + 'messages' => 'Повідомлення', + + // N + 'notification_annonce_lire_a_ladresse' => 'Ви можете прочитати його за посиланням @url@.', + 'notification_annonce_publie_1' => '[@nom_site_spip@] Загальне оголошення', + 'notification_message_lire_a_ladresse' => 'Ви можете прочитати повідомлення і відповісти автору за посиланням @url@.', + 'notification_message_publie_1' => '[@nom_site_spip@] Нове повідомлення', + 'notification_message_recu_de' => 'Ви отримали нове повідомлення від @nom@.', + + // T + 'texte_message_brouillon' => 'Повідомлення збережено в чернетках', + 'titre_agenda_rv' => 'Події', + 'titre_boite_envoi' => 'Вихідні', + 'titre_boite_reception' => 'Вхідні' +); diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur.xml b/www/plugins-dist/organiseur/lang/paquet-organiseur.xml index b43013a6..0d567e2b 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur.xml +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur.xml @@ -19,22 +19,35 @@ + + + - + + + + + + + + + + + diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_ar.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_ar.php index 5f2199b4..0b3f372d 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur_ar.php +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-organiseur?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'organiseur_description' => 'أدوات عمل تحريري جماعي', # أدوات عمل تحريري جماعي 'organiseur_slogan' => 'أدوات عمل تحريري جماعي' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_de.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_de.php index bc46222d..b5b8ef97 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur_de.php +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-organiseur?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'organiseur_description' => 'Werkzeuge für eine Online-Redaktion', 'organiseur_slogan' => 'Werkzeuge für eine Online-Redaktion' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_en.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_en.php index 9fec1552..b93621e4 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur_en.php +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-organiseur?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'organiseur_description' => 'Collaborative editorial working tools', 'organiseur_slogan' => 'Collaborative editorial working tools' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_es.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_es.php index 87ccf4bc..0be46880 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur_es.php +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-organiseur?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'organiseur_description' => 'Herramientas de trabajo editorial en grupo', 'organiseur_slogan' => 'Herramientas de trabajo editorial en grupo' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_fa.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_fa.php index 4da428f9..64bb66f8 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur_fa.php +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-organiseur?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'organiseur_description' => 'ابزارهاي گروه سردبيري', 'organiseur_slogan' => 'ابزارهاي كار گروه سردبيري ' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_fr.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_fr.php index 5ee1cc86..65f7e156 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur_fr.php +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_fr.php @@ -1,7 +1,9 @@ 'Outils de travail éditorial en groupe', 'organiseur_slogan' => 'Outils de travail éditorial en groupe' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_fr_fem.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_fr_fem.php index 129f02cc..253eb1be 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur_fr_fem.php +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-organiseur?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'organiseur_description' => 'Outils de travail éditorial en groupe', 'organiseur_slogan' => 'Outils de travail éditorial en groupe' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_fr_tu.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_fr_tu.php new file mode 100644 index 00000000..0f650132 --- /dev/null +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_fr_tu.php @@ -0,0 +1,15 @@ + 'Outils de travail éditorial en groupe', + 'organiseur_slogan' => 'Outils de travail éditorial en groupe' +); diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_it.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_it.php index b0010d66..61c9cd5b 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur_it.php +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-organiseur?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'organiseur_description' => 'Strumenti per il lavoro editoriale in gruppo', 'organiseur_slogan' => 'Strumenti per il lavoro editoriale in gruppo' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_lb.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_lb.php index 791261ab..1dcae3ff 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur_lb.php +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_lb.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-organiseur?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'organiseur_description' => 'Gruppenaarbecht', 'organiseur_slogan' => 'Gruppenaarbecht' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_nl.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_nl.php index 93b242b9..269c58a2 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur_nl.php +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_nl.php @@ -3,13 +3,13 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-organiseur?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // O - 'organiseur_description' => 'Samenwerking- en werkinstrument voor de redacteurs', - 'organiseur_slogan' => 'Samenwerking- en werkinstrument voor de redacteurs' + 'organiseur_description' => 'Tool voor samenwerking voor redacteurs', + 'organiseur_slogan' => 'Tool voor samenwerking voor redacteurs' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_oc_ni_mis.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_oc_ni_mis.php new file mode 100644 index 00000000..356f1f85 --- /dev/null +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_oc_ni_mis.php @@ -0,0 +1,15 @@ + 'Óutis de travai editourial éditorial en group', + 'organiseur_slogan' => 'Óutis de travai editourial éditorial en group' +); diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_pt.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_pt.php index 94d1f2de..cc7eb9cf 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur_pt.php +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-organiseur?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'organiseur_description' => 'Ferramentas de trabalho editorial em grupo', 'organiseur_slogan' => 'Ferramentas de trabalho editorial em grupo' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_pt_br.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_pt_br.php new file mode 100644 index 00000000..6420d142 --- /dev/null +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_pt_br.php @@ -0,0 +1,15 @@ + 'Utilitário para trabalho editorial em grupo', + 'organiseur_slogan' => 'Utilitário para trabalho editorial em grupo' +); diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_ru.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_ru.php index f11c8718..fa758129 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur_ru.php +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_ru.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-organiseur?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'organiseur_description' => 'Организация совместной работы', 'organiseur_slogan' => 'Организация совместной работы' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_sk.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_sk.php index 6f21ddd4..5c500deb 100644 --- a/www/plugins-dist/organiseur/lang/paquet-organiseur_sk.php +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-organiseur?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'organiseur_description' => 'Nástroje na redakčnú prácu v skupine', 'organiseur_slogan' => 'Nástroje na redakčnú prácu v skupine' ); - -?> diff --git a/www/plugins-dist/organiseur/lang/paquet-organiseur_uk.php b/www/plugins-dist/organiseur/lang/paquet-organiseur_uk.php new file mode 100644 index 00000000..8899e792 --- /dev/null +++ b/www/plugins-dist/organiseur/lang/paquet-organiseur_uk.php @@ -0,0 +1,15 @@ + 'Організація спільної роботи', + 'organiseur_slogan' => 'Організація спільної роботи' +); diff --git a/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.css b/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.css index 06af1a32..a2f76c96 100644 --- a/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.css +++ b/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.css @@ -1,613 +1,1404 @@ -/* - * FullCalendar v1.5 Stylesheet - * - * Copyright (c) 2011 Adam Shaw - * Dual licensed under the MIT and GPL licenses, located in - * MIT-LICENSE.txt and GPL-LICENSE.txt respectively. - * - * Date: Sat Mar 19 18:59:37 2011 -0700 - * +/*! + * FullCalendar v3.2.0 Stylesheet + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw */ .fc { direction: ltr; text-align: left; - } - -.fc table { - border-collapse: collapse; - border-spacing: 0; - } - -html .fc, -.fc table { +} + +.fc-rtl { + text-align: right; +} + +body .fc { /* extra precedence to overcome jqui */ font-size: 1em; - } - -.fc td, -.fc th { - padding: 0; - vertical-align: top; - } +} +/* Colors +--------------------------------------------------------------------------------------------------*/ -/* Header -------------------------------------------------------------------------*/ +.fc-unthemed th, +.fc-unthemed td, +.fc-unthemed thead, +.fc-unthemed tbody, +.fc-unthemed .fc-divider, +.fc-unthemed .fc-row, +.fc-unthemed .fc-content, /* for gutter border */ +.fc-unthemed .fc-popover, +.fc-unthemed .fc-list-view, +.fc-unthemed .fc-list-heading td { + border-color: #ddd; +} -.fc-header td { - white-space: nowrap; - } +.fc-unthemed .fc-popover { + background-color: #fff; +} -.fc-header-left { - width: 25%; - text-align: left; - } - -.fc-header-center { - text-align: center; - } - -.fc-header-right { - width: 25%; - text-align: right; - } - -.fc-header-title { - display: inline-block; - vertical-align: top; - } - -.fc-header-title h2 { - margin-top: 0; - white-space: nowrap; - } - -.fc .fc-header-space { - padding-left: 10px; - } - -.fc-header .fc-button { - margin-bottom: 1em; - vertical-align: top; - } - -/* buttons edges butting together */ +.fc-unthemed .fc-divider, +.fc-unthemed .fc-popover .fc-header, +.fc-unthemed .fc-list-heading td { + background: #eee; +} -.fc-header .fc-button { - margin-right: -1px; - } - -.fc-header .fc-corner-right { - margin-right: 1px; /* back to normal */ - } - -.fc-header .ui-corner-right { - margin-right: 0; /* back to normal */ - } - -/* button layering (for border precedence) */ - -.fc-header .fc-state-hover, -.fc-header .ui-state-hover { - z-index: 2; - } - -.fc-header .fc-state-down { - z-index: 3; - } +.fc-unthemed .fc-popover .fc-header .fc-close { + color: #666; +} -.fc-header .fc-state-active, -.fc-header .ui-state-active { - z-index: 4; - } - - - -/* Content -------------------------------------------------------------------------*/ - -.fc-content { - clear: both; - } - -.fc-view { - width: 100%; /* needed for view switching (when view is absolute) */ - overflow: hidden; - } - - +.fc-unthemed td.fc-today { + background: #fcf8e3; +} -/* Cell Styles -------------------------------------------------------------------------*/ +.fc-highlight { /* when user is selecting cells */ + background: #bce8f1; + opacity: .3; +} -.fc-widget-header, /* , usually */ -.fc-widget-content { /* , usually */ - border: 1px solid #ccc; - } - -.fc-state-highlight { /* today cell */ /* TODO: add .fc-today to */ - background: #ffc; - } - -.fc-cell-overlay { /* semi-transparent rectangle while dragging */ - background: #9cf; - opacity: .2; - filter: alpha(opacity=20); /* for IE */ - } - +.fc-bgevent { /* default look for background events */ + background: rgb(143, 223, 130); + opacity: .3; +} +.fc-nonbusiness { /* default look for non-business-hours areas */ + /* will inherit .fc-bgevent's styles */ + background: #d7d7d7; +} -/* Buttons -------------------------------------------------------------------------*/ -.fc-button { - position: relative; +/* Icons (inline elements with styled text that mock arrow icons) +--------------------------------------------------------------------------------------------------*/ + +.fc-icon { display: inline-block; - cursor: pointer; - } - -.fc-state-default { /* non-theme */ - border-style: solid; - border-width: 1px 0; - } - -.fc-button-inner { - position: relative; - float: left; + height: 1em; + line-height: 1em; + font-size: 1em; + text-align: center; overflow: hidden; + font-family: "Courier New", Courier, monospace; + + /* don't allow browser text-selection */ + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } - -.fc-state-default .fc-button-inner { /* non-theme */ - border-style: solid; - border-width: 0 1px; - } - -.fc-button-content { + +/* +Acceptable font-family overrides for individual icons: + "Arial", sans-serif + "Times New Roman", serif + +NOTE: use percentage font sizes or else old IE chokes +*/ + +.fc-icon:after { position: relative; - float: left; - height: 1.9em; - line-height: 1.9em; +} + +.fc-icon-left-single-arrow:after { + content: "\02039"; + font-weight: bold; + font-size: 200%; + top: -7%; +} + +.fc-icon-right-single-arrow:after { + content: "\0203A"; + font-weight: bold; + font-size: 200%; + top: -7%; +} + +.fc-icon-left-double-arrow:after { + content: "\000AB"; + font-size: 160%; + top: -7%; +} + +.fc-icon-right-double-arrow:after { + content: "\000BB"; + font-size: 160%; + top: -7%; +} + +.fc-icon-left-triangle:after { + content: "\25C4"; + font-size: 125%; + top: 3%; +} + +.fc-icon-right-triangle:after { + content: "\25BA"; + font-size: 125%; + top: 3%; +} + +.fc-icon-down-triangle:after { + content: "\25BC"; + font-size: 125%; + top: 2%; +} + +.fc-icon-x:after { + content: "\000D7"; + font-size: 200%; + top: 6%; +} + + +/* Buttons (styled ' + ) + .click(function(ev) { + // don't process clicks for disabled buttons + if (!button.hasClass(tm + '-state-disabled')) { + + buttonClick(ev); + + // after the click action, if the button becomes the "active" tab, or disabled, + // it should never have a hover class, so remove it now. + if ( + button.hasClass(tm + '-state-active') || + button.hasClass(tm + '-state-disabled') + ) { + button.removeClass(tm + '-state-hover'); + } + } + }) + .mousedown(function() { + // the *down* effect (mouse pressed in). + // only on buttons that are not the "active" tab, or disabled + button + .not('.' + tm + '-state-active') + .not('.' + tm + '-state-disabled') + .addClass(tm + '-state-down'); + }) + .mouseup(function() { + // undo the *down* effect + button.removeClass(tm + '-state-down'); + }) + .hover( + function() { + // the *hover* effect. + // only on buttons that are not the "active" tab, or disabled + button + .not('.' + tm + '-state-active') + .not('.' + tm + '-state-disabled') + .addClass(tm + '-state-hover'); + }, + function() { + // undo the *hover* effect + button + .removeClass(tm + '-state-hover') + .removeClass(tm + '-state-down'); // if mouseleave happens before mouseup + } + ); + + groupChildren = groupChildren.add(button); + } + } + }); + + if (isOnlyButtons) { + groupChildren + .first().addClass(tm + '-corner-left').end() + .last().addClass(tm + '-corner-right').end(); + } + + if (groupChildren.length > 1) { + groupEl = $('
        '); + if (isOnlyButtons) { + groupEl.addClass('fc-button-group'); + } + groupEl.append(groupChildren); + sectionEl.append(groupEl); + } + else { + sectionEl.append(groupChildren); // 1 or 0 children + } + }); + } + + return sectionEl; + } + + + function updateTitle(text) { + if (el) { + el.find('h2').text(text); + } + } + + + function activateButton(buttonName) { + if (el) { + el.find('.fc-' + buttonName + '-button') + .addClass(tm + '-state-active'); + } + } + + + function deactivateButton(buttonName) { + if (el) { + el.find('.fc-' + buttonName + '-button') + .removeClass(tm + '-state-active'); + } + } + + + function disableButton(buttonName) { + if (el) { + el.find('.fc-' + buttonName + '-button') + .prop('disabled', true) + .addClass(tm + '-state-disabled'); + } + } + + + function enableButton(buttonName) { + if (el) { + el.find('.fc-' + buttonName + '-button') + .prop('disabled', false) + .removeClass(tm + '-state-disabled'); + } + } + + + function getViewsWithButtons() { + return viewsWithButtons; + } + +} + +;; + +var Calendar = FC.Calendar = Class.extend({ + + dirDefaults: null, // option defaults related to LTR or RTL + localeDefaults: null, // option defaults related to current locale + overrides: null, // option overrides given to the fullCalendar constructor + dynamicOverrides: null, // options set with dynamic setter method. higher precedence than view overrides. + options: null, // all defaults combined with overrides + viewSpecCache: null, // cache of view definitions + view: null, // current View object + header: null, + footer: null, + loadingLevel: 0, // number of simultaneous loading tasks + + + // a lot of this class' OOP logic is scoped within this constructor function, + // but in the future, write individual methods on the prototype. + constructor: Calendar_constructor, + + + // Subclasses can override this for initialization logic after the constructor has been called + initialize: function() { + }, + + + // Computes the flattened options hash for the calendar and assigns to `this.options`. + // Assumes this.overrides and this.dynamicOverrides have already been initialized. + populateOptionsHash: function() { + var locale, localeDefaults; + var isRTL, dirDefaults; + + locale = firstDefined( // explicit locale option given? + this.dynamicOverrides.locale, + this.overrides.locale + ); + localeDefaults = localeOptionHash[locale]; + if (!localeDefaults) { // explicit locale option not given or invalid? + locale = Calendar.defaults.locale; + localeDefaults = localeOptionHash[locale] || {}; + } + + isRTL = firstDefined( // based on options computed so far, is direction RTL? + this.dynamicOverrides.isRTL, + this.overrides.isRTL, + localeDefaults.isRTL, + Calendar.defaults.isRTL + ); + dirDefaults = isRTL ? Calendar.rtlDefaults : {}; + + this.dirDefaults = dirDefaults; + this.localeDefaults = localeDefaults; + this.options = mergeOptions([ // merge defaults and overrides. lowest to highest precedence + Calendar.defaults, // global defaults + dirDefaults, + localeDefaults, + this.overrides, + this.dynamicOverrides + ]); + populateInstanceComputableOptions(this.options); // fill in gaps with computed options + }, + + + // Gets information about how to create a view. Will use a cache. + getViewSpec: function(viewType) { + var cache = this.viewSpecCache; + + return cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType)); + }, + + + // Given a duration singular unit, like "week" or "day", finds a matching view spec. + // Preference is given to views that have corresponding buttons. + getUnitViewSpec: function(unit) { + var viewTypes; + var i; + var spec; + + if ($.inArray(unit, intervalUnits) != -1) { + + // put views that have buttons first. there will be duplicates, but oh well + viewTypes = this.header.getViewsWithButtons(); // TODO: include footer as well? + $.each(FC.views, function(viewType) { // all views + viewTypes.push(viewType); + }); + + for (i = 0; i < viewTypes.length; i++) { + spec = this.getViewSpec(viewTypes[i]); + if (spec) { + if (spec.singleUnit == unit) { + return spec; + } + } + } + } + }, + + + // Builds an object with information on how to create a given view + buildViewSpec: function(requestedViewType) { + var viewOverrides = this.overrides.views || {}; + var specChain = []; // for the view. lowest to highest priority + var defaultsChain = []; // for the view. lowest to highest priority + var overridesChain = []; // for the view. lowest to highest priority + var viewType = requestedViewType; + var spec; // for the view + var overrides; // for the view + var duration; + var unit; + + // iterate from the specific view definition to a more general one until we hit an actual View class + while (viewType) { + spec = fcViews[viewType]; + overrides = viewOverrides[viewType]; + viewType = null; // clear. might repopulate for another iteration + + if (typeof spec === 'function') { // TODO: deprecate + spec = { 'class': spec }; + } + + if (spec) { + specChain.unshift(spec); + defaultsChain.unshift(spec.defaults || {}); + duration = duration || spec.duration; + viewType = viewType || spec.type; + } + + if (overrides) { + overridesChain.unshift(overrides); // view-specific option hashes have options at zero-level + duration = duration || overrides.duration; + viewType = viewType || overrides.type; + } + } + + spec = mergeProps(specChain); + spec.type = requestedViewType; + if (!spec['class']) { + return false; + } + + if (duration) { + duration = moment.duration(duration); + if (duration.valueOf()) { // valid? + spec.duration = duration; + unit = computeIntervalUnit(duration); + + // view is a single-unit duration, like "week" or "day" + // incorporate options for this. lowest priority + if (duration.as(unit) === 1) { + spec.singleUnit = unit; + overridesChain.unshift(viewOverrides[unit] || {}); + } + } + } + + spec.defaults = mergeOptions(defaultsChain); + spec.overrides = mergeOptions(overridesChain); + + this.buildViewSpecOptions(spec); + this.buildViewSpecButtonText(spec, requestedViewType); + + return spec; + }, + + + // Builds and assigns a view spec's options object from its already-assigned defaults and overrides + buildViewSpecOptions: function(spec) { + spec.options = mergeOptions([ // lowest to highest priority + Calendar.defaults, // global defaults + spec.defaults, // view's defaults (from ViewSubclass.defaults) + this.dirDefaults, + this.localeDefaults, // locale and dir take precedence over view's defaults! + this.overrides, // calendar's overrides (options given to constructor) + spec.overrides, // view's overrides (view-specific options) + this.dynamicOverrides // dynamically set via setter. highest precedence + ]); + populateInstanceComputableOptions(spec.options); + }, + + + // Computes and assigns a view spec's buttonText-related options + buildViewSpecButtonText: function(spec, requestedViewType) { + + // given an options object with a possible `buttonText` hash, lookup the buttonText for the + // requested view, falling back to a generic unit entry like "week" or "day" + function queryButtonText(options) { + var buttonText = options.buttonText || {}; + return buttonText[requestedViewType] || + // view can decide to look up a certain key + (spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) || + // a key like "month" + (spec.singleUnit ? buttonText[spec.singleUnit] : null); + } + + // highest to lowest priority + spec.buttonTextOverride = + queryButtonText(this.dynamicOverrides) || + queryButtonText(this.overrides) || // constructor-specified buttonText lookup hash takes precedence + spec.overrides.buttonText; // `buttonText` for view-specific options is a string + + // highest to lowest priority. mirrors buildViewSpecOptions + spec.buttonTextDefault = + queryButtonText(this.localeDefaults) || + queryButtonText(this.dirDefaults) || + spec.defaults.buttonText || // a single string. from ViewSubclass.defaults + queryButtonText(Calendar.defaults) || + (spec.duration ? this.humanizeDuration(spec.duration) : null) || // like "3 days" + requestedViewType; // fall back to given view name + }, + + + // Given a view name for a custom view or a standard view, creates a ready-to-go View object + instantiateView: function(viewType) { + var spec = this.getViewSpec(viewType); + + return new spec['class'](this, viewType, spec.options, spec.duration); + }, + + + // Returns a boolean about whether the view is okay to instantiate at some point + isValidViewType: function(viewType) { + return Boolean(this.getViewSpec(viewType)); + }, + + + // Should be called when any type of async data fetching begins + pushLoading: function() { + if (!(this.loadingLevel++)) { + this.publiclyTrigger('loading', null, true, this.view); + } + }, + + + // Should be called when any type of async data fetching completes + popLoading: function() { + if (!(--this.loadingLevel)) { + this.publiclyTrigger('loading', null, false, this.view); + } + }, + + + // Given arguments to the select method in the API, returns a span (unzoned start/end and other info) + buildSelectSpan: function(zonedStartInput, zonedEndInput) { + var start = this.moment(zonedStartInput).stripZone(); + var end; + + if (zonedEndInput) { + end = this.moment(zonedEndInput).stripZone(); + } + else if (start.hasTime()) { + end = start.clone().add(this.defaultTimedEventDuration); + } + else { + end = start.clone().add(this.defaultAllDayEventDuration); + } + + return { start: start, end: end }; + } + +}); + + +Calendar.mixin(EmitterMixin); + + +function Calendar_constructor(element, overrides) { + var t = this; + + // declare the current calendar instance relies on GlobalEmitter. needed for garbage collection. + GlobalEmitter.needed(); + + + // Exports + // ----------------------------------------------------------------------------------- + + t.render = render; + t.destroy = destroy; + t.rerenderEvents = rerenderEvents; + t.changeView = renderView; // `renderView` will switch to another view + t.select = select; + t.unselect = unselect; + t.prev = prev; + t.next = next; + t.prevYear = prevYear; + t.nextYear = nextYear; + t.today = today; + t.gotoDate = gotoDate; + t.incrementDate = incrementDate; + t.zoomTo = zoomTo; + t.getDate = getDate; + t.getCalendar = getCalendar; + t.getView = getView; + t.option = option; // getter/setter method + t.publiclyTrigger = publiclyTrigger; + + + // Options + // ----------------------------------------------------------------------------------- + + t.dynamicOverrides = {}; + t.viewSpecCache = {}; + t.optionHandlers = {}; // for Calendar.options.js + t.overrides = $.extend({}, overrides); // make a copy + + t.populateOptionsHash(); // sets this.options + + + + // Locale-data Internals + // ----------------------------------------------------------------------------------- + // Apply overrides to the current locale's data + + var localeData; + + // Called immediately, and when any of the options change. + // Happens before any internal objects rebuild or rerender, because this is very core. + t.bindOptions([ + 'locale', 'monthNames', 'monthNamesShort', 'dayNames', 'dayNamesShort', 'firstDay', 'weekNumberCalculation' + ], function(locale, monthNames, monthNamesShort, dayNames, dayNamesShort, firstDay, weekNumberCalculation) { + + // normalize + if (weekNumberCalculation === 'iso') { + weekNumberCalculation = 'ISO'; // normalize + } + + localeData = createObject( // make a cheap copy + getMomentLocaleData(locale) // will fall back to en + ); + + if (monthNames) { + localeData._months = monthNames; + } + if (monthNamesShort) { + localeData._monthsShort = monthNamesShort; + } + if (dayNames) { + localeData._weekdays = dayNames; + } + if (dayNamesShort) { + localeData._weekdaysShort = dayNamesShort; + } + + if (firstDay == null && weekNumberCalculation === 'ISO') { + firstDay = 1; + } + if (firstDay != null) { + var _week = createObject(localeData._week); // _week: { dow: # } + _week.dow = firstDay; + localeData._week = _week; + } + + if ( // whitelist certain kinds of input + weekNumberCalculation === 'ISO' || + weekNumberCalculation === 'local' || + typeof weekNumberCalculation === 'function' + ) { + localeData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it + } + + // If the internal current date object already exists, move to new locale. + // We do NOT need to do this technique for event dates, because this happens when converting to "segments". + if (date) { + localizeMoment(date); // sets to localeData + } + }); + + + // Calendar-specific Date Utilities + // ----------------------------------------------------------------------------------- + + + t.defaultAllDayEventDuration = moment.duration(t.options.defaultAllDayEventDuration); + t.defaultTimedEventDuration = moment.duration(t.options.defaultTimedEventDuration); + + + // Builds a moment using the settings of the current calendar: timezone and locale. + // Accepts anything the vanilla moment() constructor accepts. + t.moment = function() { + var mom; + + if (t.options.timezone === 'local') { + mom = FC.moment.apply(null, arguments); + + // Force the moment to be local, because FC.moment doesn't guarantee it. + if (mom.hasTime()) { // don't give ambiguously-timed moments a local zone + mom.local(); + } + } + else if (t.options.timezone === 'UTC') { + mom = FC.moment.utc.apply(null, arguments); // process as UTC + } + else { + mom = FC.moment.parseZone.apply(null, arguments); // let the input decide the zone + } + + localizeMoment(mom); + + return mom; + }; + + + // Updates the given moment's locale settings to the current calendar locale settings. + function localizeMoment(mom) { + mom._locale = localeData; + } + t.localizeMoment = localizeMoment; + + + // Returns a boolean about whether or not the calendar knows how to calculate + // the timezone offset of arbitrary dates in the current timezone. + t.getIsAmbigTimezone = function() { + return t.options.timezone !== 'local' && t.options.timezone !== 'UTC'; + }; + + + // Returns a copy of the given date in the current timezone. Has no effect on dates without times. + t.applyTimezone = function(date) { + if (!date.hasTime()) { + return date.clone(); + } + + var zonedDate = t.moment(date.toArray()); + var timeAdjust = date.time() - zonedDate.time(); + var adjustedZonedDate; + + // Safari sometimes has problems with this coersion when near DST. Adjust if necessary. (bug #2396) + if (timeAdjust) { // is the time result different than expected? + adjustedZonedDate = zonedDate.clone().add(timeAdjust); // add milliseconds + if (date.time() - adjustedZonedDate.time() === 0) { // does it match perfectly now? + zonedDate = adjustedZonedDate; + } + } + + return zonedDate; + }; + + + // Returns a moment for the current date, as defined by the client's computer or from the `now` option. + // Will return an moment with an ambiguous timezone. + t.getNow = function() { + var now = t.options.now; + if (typeof now === 'function') { + now = now(); + } + return t.moment(now).stripZone(); + }; + + + // Get an event's normalized end date. If not present, calculate it from the defaults. + t.getEventEnd = function(event) { + if (event.end) { + return event.end.clone(); + } + else { + return t.getDefaultEventEnd(event.allDay, event.start); + } + }; + + + // Given an event's allDay status and start date, return what its fallback end date should be. + // TODO: rename to computeDefaultEventEnd + t.getDefaultEventEnd = function(allDay, zonedStart) { + var end = zonedStart.clone(); + + if (allDay) { + end.stripTime().add(t.defaultAllDayEventDuration); + } + else { + end.add(t.defaultTimedEventDuration); + } + + if (t.getIsAmbigTimezone()) { + end.stripZone(); // we don't know what the tzo should be + } + + return end; + }; + + + // Produces a human-readable string for the given duration. + // Side-effect: changes the locale of the given duration. + t.humanizeDuration = function(duration) { + return duration.locale(t.options.locale).humanize(); + }; + + + + // Imports + // ----------------------------------------------------------------------------------- + + + EventManager.call(t); + + + + // Locals + // ----------------------------------------------------------------------------------- + + + var _element = element[0]; + var toolbarsManager; + var header; + var footer; + var content; + var tm; // for making theme classes + var currentView; // NOTE: keep this in sync with this.view + var viewsByType = {}; // holds all instantiated view instances, current or not + var suggestedViewHeight; + var windowResizeProxy; // wraps the windowResize function + var ignoreWindowResize = 0; + var date; // unzoned + + + + // Main Rendering + // ----------------------------------------------------------------------------------- + + + // compute the initial ambig-timezone date + if (t.options.defaultDate != null) { + date = t.moment(t.options.defaultDate).stripZone(); + } + else { + date = t.getNow(); // getNow already returns unzoned + } + + + function render() { + if (!content) { + initialRender(); + } + else if (elementVisible()) { + // mainly for the public API + calcSize(); + renderView(); + } + } + + + function initialRender() { + element.addClass('fc'); + + // event delegation for nav links + element.on('click.fc', 'a[data-goto]', function(ev) { + var anchorEl = $(this); + var gotoOptions = anchorEl.data('goto'); // will automatically parse JSON + var date = t.moment(gotoOptions.date); + var viewType = gotoOptions.type; + + // property like "navLinkDayClick". might be a string or a function + var customAction = currentView.opt('navLink' + capitaliseFirstLetter(viewType) + 'Click'); + + if (typeof customAction === 'function') { + customAction(date, ev); + } + else { + if (typeof customAction === 'string') { + viewType = customAction; + } + zoomTo(date, viewType); + } + }); + + // called immediately, and upon option change + t.bindOption('theme', function(theme) { + tm = theme ? 'ui' : 'fc'; // affects a larger scope + element.toggleClass('ui-widget', theme); + element.toggleClass('fc-unthemed', !theme); + }); + + // called immediately, and upon option change. + // HACK: locale often affects isRTL, so we explicitly listen to that too. + t.bindOptions([ 'isRTL', 'locale' ], function(isRTL) { + element.toggleClass('fc-ltr', !isRTL); + element.toggleClass('fc-rtl', isRTL); + }); + + content = $("
        ").prependTo(element); + + var toolbars = buildToolbars(); + toolbarsManager = new Iterator(toolbars); + + header = t.header = toolbars[0]; + footer = t.footer = toolbars[1]; + + renderHeader(); + renderFooter(); + renderView(t.options.defaultView); + + if (t.options.handleWindowResize) { + windowResizeProxy = debounce(windowResize, t.options.windowResizeDelay); // prevents rapid calls + $(window).resize(windowResizeProxy); + } + } + + + function destroy() { + + if (currentView) { + currentView.removeElement(); + + // NOTE: don't null-out currentView/t.view in case API methods are called after destroy. + // It is still the "current" view, just not rendered. + } + + toolbarsManager.proxyCall('removeElement'); + content.remove(); + element.removeClass('fc fc-ltr fc-rtl fc-unthemed ui-widget'); + + element.off('.fc'); // unbind nav link handlers + + if (windowResizeProxy) { + $(window).unbind('resize', windowResizeProxy); + } + + GlobalEmitter.unneeded(); + } + + + function elementVisible() { + return element.is(':visible'); + } + + + + // View Rendering + // ----------------------------------------------------------------------------------- + + + // Renders a view because of a date change, view-type change, or for the first time. + // If not given a viewType, keep the current view but render different dates. + // Accepts an optional scroll state to restore to. + function renderView(viewType, forcedScroll) { + ignoreWindowResize++; + + var needsClearView = currentView && viewType && currentView.type !== viewType; + + // if viewType is changing, remove the old view's rendering + if (needsClearView) { + freezeContentHeight(); // prevent a scroll jump when view element is removed + clearView(); + } + + // if viewType changed, or the view was never created, create a fresh view + if (!currentView && viewType) { + currentView = t.view = + viewsByType[viewType] || + (viewsByType[viewType] = t.instantiateView(viewType)); + + currentView.setElement( + $("
        ").appendTo(content) + ); + toolbarsManager.proxyCall('activateButton', viewType); + } + + if (currentView) { + + // in case the view should render a period of time that is completely hidden + date = currentView.massageCurrentDate(date); + + // render or rerender the view + if ( + !currentView.isDateSet || + !( // NOT within interval range signals an implicit date window change + date >= currentView.intervalStart && + date < currentView.intervalEnd + ) + ) { + if (elementVisible()) { + + if (forcedScroll) { + currentView.captureInitialScroll(forcedScroll); + } + + currentView.setDate(date, forcedScroll); + + if (forcedScroll) { + currentView.releaseScroll(); + } + + // need to do this after View::render, so dates are calculated + // NOTE: view updates title text proactively + updateToolbarsTodayButton(); + } + } + } + + if (needsClearView) { + thawContentHeight(); + } + + ignoreWindowResize--; + } + + + // Unrenders the current view and reflects this change in the Header. + // Unregsiters the `currentView`, but does not remove from viewByType hash. + function clearView() { + toolbarsManager.proxyCall('deactivateButton', currentView.type); + currentView.removeElement(); + currentView = t.view = null; + } + + + // Destroys the view, including the view object. Then, re-instantiates it and renders it. + // Maintains the same scroll state. + // TODO: maintain any other user-manipulated state. + function reinitView() { + ignoreWindowResize++; + freezeContentHeight(); + + var viewType = currentView.type; + var scrollState = currentView.queryScroll(); + clearView(); + calcSize(); + renderView(viewType, scrollState); + + thawContentHeight(); + ignoreWindowResize--; + } + + + + // Resizing + // ----------------------------------------------------------------------------------- + + + t.getSuggestedViewHeight = function() { + if (suggestedViewHeight === undefined) { + calcSize(); + } + return suggestedViewHeight; + }; + + + t.isHeightAuto = function() { + return t.options.contentHeight === 'auto' || t.options.height === 'auto'; + }; + + + function updateSize(shouldRecalc) { + if (elementVisible()) { + + if (shouldRecalc) { + _calcSize(); + } + + ignoreWindowResize++; + currentView.updateSize(true); // isResize=true. will poll getSuggestedViewHeight() and isHeightAuto() + ignoreWindowResize--; + + return true; // signal success + } + } + + + function calcSize() { + if (elementVisible()) { + _calcSize(); + } + } + + + function _calcSize() { // assumes elementVisible + var contentHeightInput = t.options.contentHeight; + var heightInput = t.options.height; + + if (typeof contentHeightInput === 'number') { // exists and not 'auto' + suggestedViewHeight = contentHeightInput; + } + else if (typeof contentHeightInput === 'function') { // exists and is a function + suggestedViewHeight = contentHeightInput(); + } + else if (typeof heightInput === 'number') { // exists and not 'auto' + suggestedViewHeight = heightInput - queryToolbarsHeight(); + } + else if (typeof heightInput === 'function') { // exists and is a function + suggestedViewHeight = heightInput() - queryToolbarsHeight(); + } + else if (heightInput === 'parent') { // set to height of parent element + suggestedViewHeight = element.parent().height() - queryToolbarsHeight(); + } + else { + suggestedViewHeight = Math.round(content.width() / Math.max(t.options.aspectRatio, .5)); + } + } + + + function queryToolbarsHeight() { + return toolbarsManager.items.reduce(function(accumulator, toolbar) { + var toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin + return accumulator + toolbarHeight; + }, 0); + } + + + function windowResize(ev) { + if ( + !ignoreWindowResize && + ev.target === window && // so we don't process jqui "resize" events that have bubbled up + currentView.start // view has already been rendered + ) { + if (updateSize(true)) { + currentView.publiclyTrigger('windowResize', _element); + } + } + } + + + + /* Event Rendering + -----------------------------------------------------------------------------*/ + + + function rerenderEvents() { // API method. destroys old events if previously rendered. + if (elementVisible()) { + t.reportEventChange(); // will re-trasmit events to the view, causing a rerender + } + } + + + + /* Toolbars + -----------------------------------------------------------------------------*/ + + + function buildToolbars() { + return [ + new Toolbar(t, computeHeaderOptions()), + new Toolbar(t, computeFooterOptions()) + ]; + } + + + function computeHeaderOptions() { + return { + extraClasses: 'fc-header-toolbar', + layout: t.options.header + }; + } + + + function computeFooterOptions() { + return { + extraClasses: 'fc-footer-toolbar', + layout: t.options.footer + }; + } + + + // can be called repeatedly and Header will rerender + function renderHeader() { + header.setToolbarOptions(computeHeaderOptions()); + header.render(); + if (header.el) { + element.prepend(header.el); + } + } + + + // can be called repeatedly and Footer will rerender + function renderFooter() { + footer.setToolbarOptions(computeFooterOptions()); + footer.render(); + if (footer.el) { + element.append(footer.el); + } + } + + + t.setToolbarsTitle = function(title) { + toolbarsManager.proxyCall('updateTitle', title); + }; + + + function updateToolbarsTodayButton() { + var now = t.getNow(); + if (now >= currentView.intervalStart && now < currentView.intervalEnd) { + toolbarsManager.proxyCall('disableButton', 'today'); + } + else { + toolbarsManager.proxyCall('enableButton', 'today'); + } + } + + + + /* Selection + -----------------------------------------------------------------------------*/ + + + // this public method receives start/end dates in any format, with any timezone + function select(zonedStartInput, zonedEndInput) { + currentView.select( + t.buildSelectSpan.apply(t, arguments) + ); + } + + + function unselect() { // safe to be called before renderView + if (currentView) { + currentView.unselect(); + } + } + + + + /* Date + -----------------------------------------------------------------------------*/ + + + function prev() { + date = currentView.computePrevDate(date); + renderView(); + } + + + function next() { + date = currentView.computeNextDate(date); + renderView(); + } + + + function prevYear() { + date.add(-1, 'years'); + renderView(); + } + + + function nextYear() { + date.add(1, 'years'); + renderView(); + } + + + function today() { + date = t.getNow(); + renderView(); + } + + + function gotoDate(zonedDateInput) { + date = t.moment(zonedDateInput).stripZone(); + renderView(); + } + + + function incrementDate(delta) { + date.add(moment.duration(delta)); + renderView(); + } + + + // Forces navigation to a view for the given date. + // `viewType` can be a specific view name or a generic one like "week" or "day". + function zoomTo(newDate, viewType) { + var spec; + + viewType = viewType || 'day'; // day is default zoom + spec = t.getViewSpec(viewType) || t.getUnitViewSpec(viewType); + + date = newDate.clone(); + renderView(spec ? spec.type : null); + } + + + // for external API + function getDate() { + return t.applyTimezone(date); // infuse the calendar's timezone + } + + + + /* Height "Freezing" + -----------------------------------------------------------------------------*/ + + + t.freezeContentHeight = freezeContentHeight; + t.thawContentHeight = thawContentHeight; + + var freezeContentHeightDepth = 0; + + + function freezeContentHeight() { + if (!(freezeContentHeightDepth++)) { + content.css({ + width: '100%', + height: content.height(), + overflow: 'hidden' + }); + } + } + + + function thawContentHeight() { + if (!(--freezeContentHeightDepth)) { + content.css({ + width: '', + height: '', + overflow: '' + }); + } + } + + + + /* Misc + -----------------------------------------------------------------------------*/ + + + function getCalendar() { + return t; + } + + + function getView() { + return currentView; + } + + + function option(name, value) { + var newOptionHash; + + if (typeof name === 'string') { + if (value === undefined) { // getter + return t.options[name]; + } + else { // setter for individual option + newOptionHash = {}; + newOptionHash[name] = value; + setOptions(newOptionHash); + } + } + else if (typeof name === 'object') { // compound setter with object input + setOptions(name); + } + } + + + function setOptions(newOptionHash) { + var optionCnt = 0; + var optionName; + + for (optionName in newOptionHash) { + t.dynamicOverrides[optionName] = newOptionHash[optionName]; + } + + t.viewSpecCache = {}; // the dynamic override invalidates the options in this cache, so just clear it + t.populateOptionsHash(); // this.options needs to be recomputed after the dynamic override + + // trigger handlers after this.options has been updated + for (optionName in newOptionHash) { + t.triggerOptionHandlers(optionName); // recall bindOption/bindOptions + optionCnt++; + } + + // special-case handling of single option change. + // if only one option change, `optionName` will be its name. + if (optionCnt === 1) { + if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') { + updateSize(true); // true = allow recalculation of height + return; + } + else if (optionName === 'defaultDate') { + return; // can't change date this way. use gotoDate instead + } + else if (optionName === 'businessHours') { + if (currentView) { + currentView.unrenderBusinessHours(); + currentView.renderBusinessHours(); + } + return; + } + else if (optionName === 'timezone') { + t.rezoneArrayEventSources(); + t.refetchEvents(); + return; + } + } + + // catch-all. rerender the header and footer and rebuild/rerender the current view + renderHeader(); + renderFooter(); + viewsByType = {}; // even non-current views will be affected by this option change. do before rerender + reinitView(); + } + + + function publiclyTrigger(name, thisObj) { + var args = Array.prototype.slice.call(arguments, 2); + + thisObj = thisObj || _element; + this.triggerWith(name, thisObj, args); // Emitter's method + + if (t.options[name]) { + return t.options[name].apply(thisObj, args); + } + } + + t.initialize(); +} + +;; +/* +Options binding/triggering system. +*/ +Calendar.mixin({ + + // A map of option names to arrays of handler objects. Initialized to {} in Calendar. + // Format for a handler object: + // { + // func // callback function to be called upon change + // names // option names whose values should be given to func + // } + optionHandlers: null, + + // Calls handlerFunc immediately, and when the given option has changed. + // handlerFunc will be given the option value. + bindOption: function(optionName, handlerFunc) { + this.bindOptions([ optionName ], handlerFunc); + }, + + // Calls handlerFunc immediately, and when any of the given options change. + // handlerFunc will be given each option value as ordered function arguments. + bindOptions: function(optionNames, handlerFunc) { + var handlerObj = { func: handlerFunc, names: optionNames }; + var i; + + for (i = 0; i < optionNames.length; i++) { + this.registerOptionHandlerObj(optionNames[i], handlerObj); + } + + this.triggerOptionHandlerObj(handlerObj); + }, + + // Puts the given handler object into the internal hash + registerOptionHandlerObj: function(optionName, handlerObj) { + (this.optionHandlers[optionName] || (this.optionHandlers[optionName] = [])) + .push(handlerObj); + }, + + // Reports that the given option has changed, and calls all appropriate handlers. + triggerOptionHandlers: function(optionName) { + var handlerObjs = this.optionHandlers[optionName] || []; + var i; + + for (i = 0; i < handlerObjs.length; i++) { + this.triggerOptionHandlerObj(handlerObjs[i]); + } + }, + + // Calls the callback for a specific handler object, passing in the appropriate arguments. + triggerOptionHandlerObj: function(handlerObj) { + var optionNames = handlerObj.names; + var optionValues = []; + var i; + + for (i = 0; i < optionNames.length; i++) { + optionValues.push(this.options[optionNames[i]]); + } + + handlerObj.func.apply(this, optionValues); // maintain the Calendar's `this` context + } + +}); + +;; + +Calendar.defaults = { + + titleRangeSeparator: ' \u2013 ', // en dash + monthYearFormat: 'MMMM YYYY', // required for en. other locales rely on datepicker computable option + + defaultTimedEventDuration: '02:00:00', + defaultAllDayEventDuration: { days: 1 }, + forceEventDuration: false, + nextDayThreshold: '09:00:00', // 9am + + // display + defaultView: 'month', + aspectRatio: 1.35, + header: { + left: 'title', + center: '', + right: 'today prev,next' + }, + weekends: true, + weekNumbers: false, + + weekNumberTitle: 'W', + weekNumberCalculation: 'local', + + //editable: false, + + //nowIndicator: false, + + scrollTime: '06:00:00', + + // event ajax + lazyFetching: true, + startParam: 'start', + endParam: 'end', + timezoneParam: 'timezone', + + timezone: false, + + //allDayDefault: undefined, + + // locale + isRTL: false, + buttonText: { + prev: "prev", + next: "next", + prevYear: "prev year", + nextYear: "next year", + year: 'year', // TODO: locale files need to specify this + today: 'today', + month: 'month', + week: 'week', + day: 'day' + }, + + buttonIcons: { + prev: 'left-single-arrow', + next: 'right-single-arrow', + prevYear: 'left-double-arrow', + nextYear: 'right-double-arrow' + }, + + allDayText: 'all-day', + + // jquery-ui theming + theme: false, + themeButtonIcons: { + prev: 'circle-triangle-w', + next: 'circle-triangle-e', + prevYear: 'seek-prev', + nextYear: 'seek-next' + }, + + //eventResizableFromStart: false, + dragOpacity: .75, + dragRevertDuration: 500, + dragScroll: true, + + //selectable: false, + unselectAuto: true, + //selectMinDistance: 0, + + dropAccept: '*', + + eventOrder: 'title', + //eventRenderWait: null, + + eventLimit: false, + eventLimitText: 'more', + eventLimitClick: 'popover', + dayPopoverFormat: 'LL', + + handleWindowResize: true, + windowResizeDelay: 100, // milliseconds before an updateSize happens + + longPressDelay: 1000 + +}; + + +Calendar.englishDefaults = { // used by locale.js + dayPopoverFormat: 'dddd, MMMM D' +}; + + +Calendar.rtlDefaults = { // right-to-left defaults + header: { // TODO: smarter solution (first/center/last ?) + left: 'next,prev today', + center: '', + right: 'title' + }, + buttonIcons: { + prev: 'right-single-arrow', + next: 'left-single-arrow', + prevYear: 'right-double-arrow', + nextYear: 'left-double-arrow' + }, + themeButtonIcons: { + prev: 'circle-triangle-e', + next: 'circle-triangle-w', + nextYear: 'seek-prev', + prevYear: 'seek-next' + } +}; + +;; + +var localeOptionHash = FC.locales = {}; // initialize and expose + + +// TODO: document the structure and ordering of a FullCalendar locale file + + +// Initialize jQuery UI datepicker translations while using some of the translations +// Will set this as the default locales for datepicker. +FC.datepickerLocale = function(localeCode, dpLocaleCode, dpOptions) { + + // get the FullCalendar internal option hash for this locale. create if necessary + var fcOptions = localeOptionHash[localeCode] || (localeOptionHash[localeCode] = {}); + + // transfer some simple options from datepicker to fc + fcOptions.isRTL = dpOptions.isRTL; + fcOptions.weekNumberTitle = dpOptions.weekHeader; + + // compute some more complex options from datepicker + $.each(dpComputableOptions, function(name, func) { + fcOptions[name] = func(dpOptions); + }); + + // is jQuery UI Datepicker is on the page? + if ($.datepicker) { + + // Register the locale data. + // FullCalendar and MomentJS use locale codes like "pt-br" but Datepicker + // does it like "pt-BR" or if it doesn't have the locale, maybe just "pt". + // Make an alias so the locale can be referenced either way. + $.datepicker.regional[dpLocaleCode] = + $.datepicker.regional[localeCode] = // alias + dpOptions; + + // Alias 'en' to the default locale data. Do this every time. + $.datepicker.regional.en = $.datepicker.regional['']; + + // Set as Datepicker's global defaults. + $.datepicker.setDefaults(dpOptions); + } +}; + + +// Sets FullCalendar-specific translations. Will set the locales as the global default. +FC.locale = function(localeCode, newFcOptions) { + var fcOptions; + var momOptions; + + // get the FullCalendar internal option hash for this locale. create if necessary + fcOptions = localeOptionHash[localeCode] || (localeOptionHash[localeCode] = {}); + + // provided new options for this locales? merge them in + if (newFcOptions) { + fcOptions = localeOptionHash[localeCode] = mergeOptions([ fcOptions, newFcOptions ]); + } + + // compute locale options that weren't defined. + // always do this. newFcOptions can be undefined when initializing from i18n file, + // so no way to tell if this is an initialization or a default-setting. + momOptions = getMomentLocaleData(localeCode); // will fall back to en + $.each(momComputableOptions, function(name, func) { + if (fcOptions[name] == null) { + fcOptions[name] = func(momOptions, fcOptions); + } + }); + + // set it as the default locale for FullCalendar + Calendar.defaults.locale = localeCode; +}; + + +// NOTE: can't guarantee any of these computations will run because not every locale has datepicker +// configs, so make sure there are English fallbacks for these in the defaults file. +var dpComputableOptions = { + + buttonText: function(dpOptions) { + return { + // the translations sometimes wrongly contain HTML entities + prev: stripHtmlEntities(dpOptions.prevText), + next: stripHtmlEntities(dpOptions.nextText), + today: stripHtmlEntities(dpOptions.currentText) + }; + }, + + // Produces format strings like "MMMM YYYY" -> "September 2014" + monthYearFormat: function(dpOptions) { + return dpOptions.showMonthAfterYear ? + 'YYYY[' + dpOptions.yearSuffix + '] MMMM' : + 'MMMM YYYY[' + dpOptions.yearSuffix + ']'; + } + +}; + +var momComputableOptions = { + + // Produces format strings like "ddd M/D" -> "Fri 9/15" + dayOfMonthFormat: function(momOptions, fcOptions) { + var format = momOptions.longDateFormat('l'); // for the format like "M/D/YYYY" + + // strip the year off the edge, as well as other misc non-whitespace chars + format = format.replace(/^Y+[^\w\s]*|[^\w\s]*Y+$/g, ''); + + if (fcOptions.isRTL) { + format += ' ddd'; // for RTL, add day-of-week to end + } + else { + format = 'ddd ' + format; // for LTR, add day-of-week to beginning + } + return format; + }, + + // Produces format strings like "h:mma" -> "6:00pm" + mediumTimeFormat: function(momOptions) { // can't be called `timeFormat` because collides with option + return momOptions.longDateFormat('LT') + .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand + }, + + // Produces format strings like "h(:mm)a" -> "6pm" / "6:30pm" + smallTimeFormat: function(momOptions) { + return momOptions.longDateFormat('LT') + .replace(':mm', '(:mm)') + .replace(/(\Wmm)$/, '($1)') // like above, but for foreign locales + .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand + }, + + // Produces format strings like "h(:mm)t" -> "6p" / "6:30p" + extraSmallTimeFormat: function(momOptions) { + return momOptions.longDateFormat('LT') + .replace(':mm', '(:mm)') + .replace(/(\Wmm)$/, '($1)') // like above, but for foreign locales + .replace(/\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand + }, + + // Produces format strings like "ha" / "H" -> "6pm" / "18" + hourFormat: function(momOptions) { + return momOptions.longDateFormat('LT') + .replace(':mm', '') + .replace(/(\Wmm)$/, '') // like above, but for foreign locales + .replace(/\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand + }, + + // Produces format strings like "h:mm" -> "6:30" (with no AM/PM) + noMeridiemTimeFormat: function(momOptions) { + return momOptions.longDateFormat('LT') + .replace(/\s*a$/i, ''); // remove trailing AM/PM + } + +}; + + +// options that should be computed off live calendar options (considers override options) +// TODO: best place for this? related to locale? +// TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it +var instanceComputableOptions = { + + // Produces format strings for results like "Mo 16" + smallDayDateFormat: function(options) { + return options.isRTL ? + 'D dd' : + 'dd D'; + }, + + // Produces format strings for results like "Wk 5" + weekFormat: function(options) { + return options.isRTL ? + 'w[ ' + options.weekNumberTitle + ']' : + '[' + options.weekNumberTitle + ' ]w'; + }, + + // Produces format strings for results like "Wk5" + smallWeekFormat: function(options) { + return options.isRTL ? + 'w[' + options.weekNumberTitle + ']' : + '[' + options.weekNumberTitle + ']w'; + } + +}; + +function populateInstanceComputableOptions(options) { + $.each(instanceComputableOptions, function(name, func) { + if (options[name] == null) { + options[name] = func(options); + } + }); +} + + +// Returns moment's internal locale data. If doesn't exist, returns English. +function getMomentLocaleData(localeCode) { + return moment.localeData(localeCode) || moment.localeData('en'); +} + + +// Initialize English by forcing computation of moment-derived options. +// Also, sets it as the default. +FC.locale('en', Calendar.englishDefaults); + +;; + +FC.sourceNormalizers = []; +FC.sourceFetchers = []; + +var ajaxDefaults = { + dataType: 'json', + cache: false +}; + +var eventGUID = 1; + + +function EventManager() { // assumed to be a calendar + var t = this; + + + // exports + t.requestEvents = requestEvents; + t.reportEventChange = reportEventChange; + t.isFetchNeeded = isFetchNeeded; + t.fetchEvents = fetchEvents; + t.fetchEventSources = fetchEventSources; + t.refetchEvents = refetchEvents; + t.refetchEventSources = refetchEventSources; + t.getEventSources = getEventSources; + t.getEventSourceById = getEventSourceById; + t.addEventSource = addEventSource; + t.removeEventSource = removeEventSource; + t.removeEventSources = removeEventSources; + t.updateEvent = updateEvent; + t.updateEvents = updateEvents; + t.renderEvent = renderEvent; + t.renderEvents = renderEvents; + t.removeEvents = removeEvents; + t.clientEvents = clientEvents; + t.mutateEvent = mutateEvent; + t.normalizeEventDates = normalizeEventDates; + t.normalizeEventTimes = normalizeEventTimes; + + + // locals + var stickySource = { events: [] }; + var sources = [ stickySource ]; + var rangeStart, rangeEnd; + var pendingSourceCnt = 0; // outstanding fetch requests, max one per source + var cache = []; // holds events that have already been expanded + var prunedCache; // like cache, but only events that intersect with rangeStart/rangeEnd + + + $.each( + (t.options.events ? [ t.options.events ] : []).concat(t.options.eventSources || []), + function(i, sourceInput) { + var source = buildEventSource(sourceInput); + if (source) { + sources.push(source); + } + } + ); + + + + function requestEvents(start, end) { + if (!t.options.lazyFetching || isFetchNeeded(start, end)) { + return fetchEvents(start, end); + } + else { + return Promise.resolve(prunedCache); + } + } + + + function reportEventChange() { + prunedCache = filterEventsWithinRange(cache); + t.trigger('eventsReset', prunedCache); + } + + + function filterEventsWithinRange(events) { + var filteredEvents = []; + var i, event; + + for (i = 0; i < events.length; i++) { + event = events[i]; + + if ( + event.start.clone().stripZone() < rangeEnd && + t.getEventEnd(event).stripZone() > rangeStart + ) { + filteredEvents.push(event); + } + } + + return filteredEvents; + } + + + t.getEventCache = function() { + return cache; + }; + + + t.getPrunedEventCache = function() { + return prunedCache; + }; + + + + /* Fetching + -----------------------------------------------------------------------------*/ + + + // start and end are assumed to be unzoned + function isFetchNeeded(start, end) { + return !rangeStart || // nothing has been fetched yet? + start < rangeStart || end > rangeEnd; // is part of the new range outside of the old range? + } + + + function fetchEvents(start, end) { + rangeStart = start; + rangeEnd = end; + return refetchEvents(); + } + + + // poorly named. fetches all sources with current `rangeStart` and `rangeEnd`. + function refetchEvents() { + return fetchEventSources(sources, 'reset'); + } + + + // poorly named. fetches a subset of event sources. + function refetchEventSources(matchInputs) { + return fetchEventSources(getEventSourcesByMatchArray(matchInputs)); + } + + + // expects an array of event source objects (the originals, not copies) + // `specialFetchType` is an optimization parameter that affects purging of the event cache. + function fetchEventSources(specificSources, specialFetchType) { + var i, source; + + if (specialFetchType === 'reset') { + cache = []; + } + else if (specialFetchType !== 'add') { + cache = excludeEventsBySources(cache, specificSources); + } + + for (i = 0; i < specificSources.length; i++) { + source = specificSources[i]; + + // already-pending sources have already been accounted for in pendingSourceCnt + if (source._status !== 'pending') { + pendingSourceCnt++; + } + + source._fetchId = (source._fetchId || 0) + 1; + source._status = 'pending'; + } + + for (i = 0; i < specificSources.length; i++) { + source = specificSources[i]; + tryFetchEventSource(source, source._fetchId); + } + + if (pendingSourceCnt) { + return new Promise(function(resolve) { + t.one('eventsReceived', resolve); // will send prunedCache + }); + } + else { // executed all synchronously, or no sources at all + return Promise.resolve(prunedCache); + } + } + + + // fetches an event source and processes its result ONLY if it is still the current fetch. + // caller is responsible for incrementing pendingSourceCnt first. + function tryFetchEventSource(source, fetchId) { + _fetchEventSource(source, function(eventInputs) { + var isArraySource = $.isArray(source.events); + var i, eventInput; + var abstractEvent; + + if ( + // is this the source's most recent fetch? + // if not, rely on an upcoming fetch of this source to decrement pendingSourceCnt + fetchId === source._fetchId && + // event source no longer valid? + source._status !== 'rejected' + ) { + source._status = 'resolved'; + + if (eventInputs) { + for (i = 0; i < eventInputs.length; i++) { + eventInput = eventInputs[i]; + + if (isArraySource) { // array sources have already been convert to Event Objects + abstractEvent = eventInput; + } + else { + abstractEvent = buildEventFromInput(eventInput, source); + } + + if (abstractEvent) { // not false (an invalid event) + cache.push.apply( // append + cache, + expandEvent(abstractEvent) // add individual expanded events to the cache + ); + } + } + } + + decrementPendingSourceCnt(); + } + }); + } + + + function rejectEventSource(source) { + var wasPending = source._status === 'pending'; + + source._status = 'rejected'; + + if (wasPending) { + decrementPendingSourceCnt(); + } + } + + + function decrementPendingSourceCnt() { + pendingSourceCnt--; + if (!pendingSourceCnt) { + reportEventChange(cache); // updates prunedCache + t.trigger('eventsReceived', prunedCache); + } + } + + + function _fetchEventSource(source, callback) { + var i; + var fetchers = FC.sourceFetchers; + var res; + + for (i=0; i= eventStart && innerSpan.end <= eventEnd; +}; + + +// Returns a list of events that the given event should be compared against when being considered for a move to +// the specified span. Attached to the Calendar's prototype because EventManager is a mixin for a Calendar. +Calendar.prototype.getPeerEvents = function(span, event) { + var cache = this.getEventCache(); + var peerEvents = []; + var i, otherEvent; + + for (i = 0; i < cache.length; i++) { + otherEvent = cache[i]; + if ( + !event || + event._id !== otherEvent._id // don't compare the event to itself or other related [repeating] events + ) { + peerEvents.push(otherEvent); + } + } + + return peerEvents; +}; + + +// updates the "backup" properties, which are preserved in order to compute diffs later on. +function backupEventDates(event) { + event._allDay = event.allDay; + event._start = event.start.clone(); + event._end = event.end ? event.end.clone() : null; +} + + +/* Overlapping / Constraining +-----------------------------------------------------------------------------------------*/ + + +// Determines if the given event can be relocated to the given span (unzoned start/end with other misc data) +Calendar.prototype.isEventSpanAllowed = function(span, event) { + var source = event.source || {}; + + var constraint = firstDefined( + event.constraint, + source.constraint, + this.options.eventConstraint + ); + + var overlap = firstDefined( + event.overlap, + source.overlap, + this.options.eventOverlap + ); + + return this.isSpanAllowed(span, constraint, overlap, event) && + (!this.options.eventAllow || this.options.eventAllow(span, event) !== false); +}; + + +// Determines if an external event can be relocated to the given span (unzoned start/end with other misc data) +Calendar.prototype.isExternalSpanAllowed = function(eventSpan, eventLocation, eventProps) { + var eventInput; + var event; + + // note: very similar logic is in View's reportExternalDrop + if (eventProps) { + eventInput = $.extend({}, eventProps, eventLocation); + event = this.expandEvent( + this.buildEventFromInput(eventInput) + )[0]; + } + + if (event) { + return this.isEventSpanAllowed(eventSpan, event); + } + else { // treat it as a selection + + return this.isSelectionSpanAllowed(eventSpan); + } +}; + + +// Determines the given span (unzoned start/end with other misc data) can be selected. +Calendar.prototype.isSelectionSpanAllowed = function(span) { + return this.isSpanAllowed(span, this.options.selectConstraint, this.options.selectOverlap) && + (!this.options.selectAllow || this.options.selectAllow(span) !== false); +}; + + +// Returns true if the given span (caused by an event drop/resize or a selection) is allowed to exist +// according to the constraint/overlap settings. +// `event` is not required if checking a selection. +Calendar.prototype.isSpanAllowed = function(span, constraint, overlap, event) { + var constraintEvents; + var anyContainment; + var peerEvents; + var i, peerEvent; + var peerOverlap; + + // the range must be fully contained by at least one of produced constraint events + if (constraint != null) { + + // not treated as an event! intermediate data structure + // TODO: use ranges in the future + constraintEvents = this.constraintToEvents(constraint); + if (constraintEvents) { // not invalid + + anyContainment = false; + for (i = 0; i < constraintEvents.length; i++) { + if (this.spanContainsSpan(constraintEvents[i], span)) { + anyContainment = true; + break; + } + } + + if (!anyContainment) { + return false; + } + } + } + + peerEvents = this.getPeerEvents(span, event); + + for (i = 0; i < peerEvents.length; i++) { + peerEvent = peerEvents[i]; + + // there needs to be an actual intersection before disallowing anything + if (this.eventIntersectsRange(peerEvent, span)) { + + // evaluate overlap for the given range and short-circuit if necessary + if (overlap === false) { + return false; + } + // if the event's overlap is a test function, pass the peer event in question as the first param + else if (typeof overlap === 'function' && !overlap(peerEvent, event)) { + return false; + } + + // if we are computing if the given range is allowable for an event, consider the other event's + // EventObject-specific or Source-specific `overlap` property + if (event) { + peerOverlap = firstDefined( + peerEvent.overlap, + (peerEvent.source || {}).overlap + // we already considered the global `eventOverlap` + ); + if (peerOverlap === false) { + return false; + } + // if the peer event's overlap is a test function, pass the subject event as the first param + if (typeof peerOverlap === 'function' && !peerOverlap(event, peerEvent)) { + return false; + } + } + } + } + + return true; +}; + + +// Given an event input from the API, produces an array of event objects. Possible event inputs: +// 'businessHours' +// An event ID (number or string) +// An object with specific start/end dates or a recurring event (like what businessHours accepts) +Calendar.prototype.constraintToEvents = function(constraintInput) { + + if (constraintInput === 'businessHours') { + return this.getCurrentBusinessHourEvents(); + } + + if (typeof constraintInput === 'object') { + if (constraintInput.start != null) { // needs to be event-like input + return this.expandEvent(this.buildEventFromInput(constraintInput)); + } + else { + return null; // invalid + } + } + + return this.clientEvents(constraintInput); // probably an ID +}; + + +// Does the event's date range intersect with the given range? +// start/end already assumed to have stripped zones :( +Calendar.prototype.eventIntersectsRange = function(event, range) { + var eventStart = event.start.clone().stripZone(); + var eventEnd = this.getEventEnd(event).stripZone(); + + return range.start < eventEnd && range.end > eventStart; +}; + + +/* Business Hours +-----------------------------------------------------------------------------------------*/ + +var BUSINESS_HOUR_EVENT_DEFAULTS = { + id: '_fcBusinessHours', // will relate events from different calls to expandEvent + start: '09:00', + end: '17:00', + dow: [ 1, 2, 3, 4, 5 ], // monday - friday + rendering: 'inverse-background' + // classNames are defined in businessHoursSegClasses +}; + +// Return events objects for business hours within the current view. +// Abuse of our event system :( +Calendar.prototype.getCurrentBusinessHourEvents = function(wholeDay) { + return this.computeBusinessHourEvents(wholeDay, this.options.businessHours); +}; + +// Given a raw input value from options, return events objects for business hours within the current view. +Calendar.prototype.computeBusinessHourEvents = function(wholeDay, input) { + if (input === true) { + return this.expandBusinessHourEvents(wholeDay, [ {} ]); + } + else if ($.isPlainObject(input)) { + return this.expandBusinessHourEvents(wholeDay, [ input ]); + } + else if ($.isArray(input)) { + return this.expandBusinessHourEvents(wholeDay, input, true); + } + else { + return []; + } +}; + +// inputs expected to be an array of objects. +// if ignoreNoDow is true, will ignore entries that don't specify a day-of-week (dow) key. +Calendar.prototype.expandBusinessHourEvents = function(wholeDay, inputs, ignoreNoDow) { + var view = this.getView(); + var events = []; + var i, input; + + for (i = 0; i < inputs.length; i++) { + input = inputs[i]; + + if (ignoreNoDow && !input.dow) { + continue; + } + + // give defaults. will make a copy + input = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, input); + + // if a whole-day series is requested, clear the start/end times + if (wholeDay) { + input.start = null; + input.end = null; + } + + events.push.apply(events, // append + this.expandEvent( + this.buildEventFromInput(input), + view.start, + view.end + ) + ); + } + + return events; +}; + +;; + +/* An abstract class for the "basic" views, as well as month view. Renders one or more rows of day cells. +----------------------------------------------------------------------------------------------------------------------*/ +// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting. +// It is responsible for managing width/height. + +var BasicView = FC.BasicView = View.extend({ + + scroller: null, + + dayGridClass: DayGrid, // class the dayGrid will be instantiated from (overridable by subclasses) + dayGrid: null, // the main subcomponent that does most of the heavy lifting + + dayNumbersVisible: false, // display day numbers on each day cell? + colWeekNumbersVisible: false, // display week numbers along the side? + cellWeekNumbersVisible: false, // display week numbers in day cell? + + weekNumberWidth: null, // width of all the week-number cells running down the side + + headContainerEl: null, // div that hold's the dayGrid's rendered date header + headRowEl: null, // the fake row element of the day-of-week header + + + initialize: function() { + this.dayGrid = this.instantiateDayGrid(); + + this.scroller = new Scroller({ + overflowX: 'hidden', + overflowY: 'auto' + }); + }, + + + // Generates the DayGrid object this view needs. Draws from this.dayGridClass + instantiateDayGrid: function() { + // generate a subclass on the fly with BasicView-specific behavior + // TODO: cache this subclass + var subclass = this.dayGridClass.extend(basicDayGridMethods); + + return new subclass(this); + }, + + + // Sets the display range and computes all necessary dates + setRange: function(range) { + View.prototype.setRange.call(this, range); // call the super-method + + this.dayGrid.breakOnWeeks = /year|month|week/.test(this.intervalUnit); // do before setRange + this.dayGrid.setRange(range); + }, + + + // Compute the value to feed into setRange. Overrides superclass. + computeRange: function(date) { + var range = View.prototype.computeRange.call(this, date); // get value from the super-method + + // year and month views should be aligned with weeks. this is already done for week + if (/year|month/.test(range.intervalUnit)) { + range.start.startOf('week'); + range.start = this.skipHiddenDays(range.start); + + // make end-of-week if not already + if (range.end.weekday()) { + range.end.add(1, 'week').startOf('week'); + range.end = this.skipHiddenDays(range.end, -1, true); // exclusively move backwards + } + } + + return range; + }, + + + // Renders the view into `this.el`, which should already be assigned + renderDates: function() { + + this.dayNumbersVisible = this.dayGrid.rowCnt > 1; // TODO: make grid responsible + if (this.opt('weekNumbers')) { + if (this.opt('weekNumbersWithinDays')) { + this.cellWeekNumbersVisible = true; + this.colWeekNumbersVisible = false; + } + else { + this.cellWeekNumbersVisible = false; + this.colWeekNumbersVisible = true; + }; + } + this.dayGrid.numbersVisible = this.dayNumbersVisible || + this.cellWeekNumbersVisible || this.colWeekNumbersVisible; + + this.el.addClass('fc-basic-view').html(this.renderSkeletonHtml()); + this.renderHead(); + + this.scroller.render(); + var dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container'); + var dayGridEl = $('
        ').appendTo(dayGridContainerEl); + this.el.find('.fc-body > tr > td').append(dayGridContainerEl); + + this.dayGrid.setElement(dayGridEl); + this.dayGrid.renderDates(this.hasRigidRows()); + }, + + + // render the day-of-week headers + renderHead: function() { + this.headContainerEl = + this.el.find('.fc-head-container') + .html(this.dayGrid.renderHeadHtml()); + this.headRowEl = this.headContainerEl.find('.fc-row'); + }, + + + // Unrenders the content of the view. Since we haven't separated skeleton rendering from date rendering, + // always completely kill the dayGrid's rendering. + unrenderDates: function() { + this.dayGrid.unrenderDates(); + this.dayGrid.removeElement(); + this.scroller.destroy(); + }, + + + renderBusinessHours: function() { + this.dayGrid.renderBusinessHours(); + }, + + + unrenderBusinessHours: function() { + this.dayGrid.unrenderBusinessHours(); + }, + + + // Builds the HTML skeleton for the view. + // The day-grid component will render inside of a container defined by this HTML. + renderSkeletonHtml: function() { + return '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
        '; + }, + + + // Generates an HTML attribute string for setting the width of the week number column, if it is known + weekNumberStyleAttr: function() { + if (this.weekNumberWidth !== null) { + return 'style="width:' + this.weekNumberWidth + 'px"'; + } + return ''; + }, + + + // Determines whether each row should have a constant height + hasRigidRows: function() { + var eventLimit = this.opt('eventLimit'); + return eventLimit && typeof eventLimit !== 'number'; + }, + + + /* Dimensions + ------------------------------------------------------------------------------------------------------------------*/ + + + // Refreshes the horizontal dimensions of the view + updateWidth: function() { + if (this.colWeekNumbersVisible) { + // Make sure all week number cells running down the side have the same width. + // Record the width for cells created later. + this.weekNumberWidth = matchCellWidths( + this.el.find('.fc-week-number') + ); + } + }, + + + // Adjusts the vertical dimensions of the view to the specified values + setHeight: function(totalHeight, isAuto) { + var eventLimit = this.opt('eventLimit'); + var scrollerHeight; + var scrollbarWidths; + + // reset all heights to be natural + this.scroller.clear(); + uncompensateScroll(this.headRowEl); + + this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed + + // is the event limit a constant level number? + if (eventLimit && typeof eventLimit === 'number') { + this.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after + } + + // distribute the height to the rows + // (totalHeight is a "recommended" value if isAuto) + scrollerHeight = this.computeScrollerHeight(totalHeight); + this.setGridHeight(scrollerHeight, isAuto); + + // is the event limit dynamically calculated? + if (eventLimit && typeof eventLimit !== 'number') { + this.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set + } + + if (!isAuto) { // should we force dimensions of the scroll container? + + this.scroller.setHeight(scrollerHeight); + scrollbarWidths = this.scroller.getScrollbarWidths(); + + if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars? + + compensateScroll(this.headRowEl, scrollbarWidths); + + // doing the scrollbar compensation might have created text overflow which created more height. redo + scrollerHeight = this.computeScrollerHeight(totalHeight); + this.scroller.setHeight(scrollerHeight); + } + + // guarantees the same scrollbar widths + this.scroller.lockOverflow(scrollbarWidths); + } + }, + + + // given a desired total height of the view, returns what the height of the scroller should be + computeScrollerHeight: function(totalHeight) { + return totalHeight - + subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller + }, + + + // Sets the height of just the DayGrid component in this view + setGridHeight: function(height, isAuto) { + if (isAuto) { + undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding + } + else { + distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows + } + }, + + + /* Scroll + ------------------------------------------------------------------------------------------------------------------*/ + + + computeInitialScroll: function() { + return { top: 0 }; + }, + + + queryScroll: function() { + return { top: this.scroller.getScrollTop() }; + }, + + + setScroll: function(scroll) { + this.scroller.setScrollTop(scroll.top); + }, + + + /* Hit Areas + ------------------------------------------------------------------------------------------------------------------*/ + // forward all hit-related method calls to dayGrid + + + hitsNeeded: function() { + this.dayGrid.hitsNeeded(); + }, + + + hitsNotNeeded: function() { + this.dayGrid.hitsNotNeeded(); + }, + + + prepareHits: function() { + this.dayGrid.prepareHits(); + }, + + + releaseHits: function() { + this.dayGrid.releaseHits(); + }, + + + queryHit: function(left, top) { + return this.dayGrid.queryHit(left, top); + }, + + + getHitSpan: function(hit) { + return this.dayGrid.getHitSpan(hit); + }, + + + getHitEl: function(hit) { + return this.dayGrid.getHitEl(hit); + }, + + + /* Events + ------------------------------------------------------------------------------------------------------------------*/ + + + // Renders the given events onto the view and populates the segments array + renderEvents: function(events) { + this.dayGrid.renderEvents(events); + + this.updateHeight(); // must compensate for events that overflow the row + }, + + + // Retrieves all segment objects that are rendered in the view + getEventSegs: function() { + return this.dayGrid.getEventSegs(); + }, + + + // Unrenders all event elements and clears internal segment data + unrenderEvents: function() { + this.dayGrid.unrenderEvents(); + + // we DON'T need to call updateHeight() because + // a renderEvents() call always happens after this, which will eventually call updateHeight() + }, + + + /* Dragging (for both events and external elements) + ------------------------------------------------------------------------------------------------------------------*/ + + + // A returned value of `true` signals that a mock "helper" event has been rendered. + renderDrag: function(dropLocation, seg) { + return this.dayGrid.renderDrag(dropLocation, seg); + }, + + + unrenderDrag: function() { + this.dayGrid.unrenderDrag(); + }, + + + /* Selection + ------------------------------------------------------------------------------------------------------------------*/ + + + // Renders a visual indication of a selection + renderSelection: function(span) { + this.dayGrid.renderSelection(span); + }, + + + // Unrenders a visual indications of a selection + unrenderSelection: function() { + this.dayGrid.unrenderSelection(); + } + +}); + + +// Methods that will customize the rendering behavior of the BasicView's dayGrid +var basicDayGridMethods = { + + + // Generates the HTML that will go before the day-of week header cells + renderHeadIntroHtml: function() { + var view = this.view; + + if (view.colWeekNumbersVisible) { + return '' + + '' + + '' + // needed for matchCellWidths + htmlEscape(view.opt('weekNumberTitle')) + + '' + + ''; + } + + return ''; + }, + + + // Generates the HTML that will go before content-skeleton cells that display the day/week numbers + renderNumberIntroHtml: function(row) { + var view = this.view; + var weekStart = this.getCellDate(row, 0); + + if (view.colWeekNumbersVisible) { + return '' + + '' + + view.buildGotoAnchorHtml( // aside from link, important for matchCellWidths + { date: weekStart, type: 'week', forceOff: this.colCnt === 1 }, + weekStart.format('w') // inner HTML + ) + + ''; + } + + return ''; + }, + + + // Generates the HTML that goes before the day bg cells for each day-row + renderBgIntroHtml: function() { + var view = this.view; + + if (view.colWeekNumbersVisible) { + return ''; + } + + return ''; + }, + + + // Generates the HTML that goes before every other type of row generated by DayGrid. + // Affects helper-skeleton and highlight-skeleton rows. + renderIntroHtml: function() { + var view = this.view; + + if (view.colWeekNumbersVisible) { + return ''; + } + + return ''; + } + +}; + +;; + +/* A month view with day cells running in rows (one-per-week) and columns +----------------------------------------------------------------------------------------------------------------------*/ + +var MonthView = FC.MonthView = BasicView.extend({ + + // Produces information about what range to display + computeRange: function(date) { + var range = BasicView.prototype.computeRange.call(this, date); // get value from super-method + var rowCnt; + + // ensure 6 weeks + if (this.isFixedWeeks()) { + rowCnt = Math.ceil(range.end.diff(range.start, 'weeks', true)); // could be partial weeks due to hiddenDays + range.end.add(6 - rowCnt, 'weeks'); + } + + return range; + }, + + + // Overrides the default BasicView behavior to have special multi-week auto-height logic + setGridHeight: function(height, isAuto) { + + // if auto, make the height of each row the height that it would be if there were 6 weeks + if (isAuto) { + height *= this.rowCnt / 6; + } + + distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows + }, + + + isFixedWeeks: function() { + return this.opt('fixedWeekCount'); + } + +}); + +;; + +fcViews.basic = { + 'class': BasicView +}; + +fcViews.basicDay = { + type: 'basic', + duration: { days: 1 } +}; + +fcViews.basicWeek = { + type: 'basic', + duration: { weeks: 1 } +}; + +fcViews.month = { + 'class': MonthView, + duration: { months: 1 }, // important for prev/next + defaults: { + fixedWeekCount: true + } +}; +;; + +/* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically. +----------------------------------------------------------------------------------------------------------------------*/ +// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on). +// Responsible for managing width/height. + +var AgendaView = FC.AgendaView = View.extend({ + + scroller: null, + + timeGridClass: TimeGrid, // class used to instantiate the timeGrid. subclasses can override + timeGrid: null, // the main time-grid subcomponent of this view + + dayGridClass: DayGrid, // class used to instantiate the dayGrid. subclasses can override + dayGrid: null, // the "all-day" subcomponent. if all-day is turned off, this will be null + + axisWidth: null, // the width of the time axis running down the side + + headContainerEl: null, // div that hold's the timeGrid's rendered date header + noScrollRowEls: null, // set of fake row elements that must compensate when scroller has scrollbars + + // when the time-grid isn't tall enough to occupy the given height, we render an
        underneath + bottomRuleEl: null, + + + initialize: function() { + this.timeGrid = this.instantiateTimeGrid(); + + if (this.opt('allDaySlot')) { // should we display the "all-day" area? + this.dayGrid = this.instantiateDayGrid(); // the all-day subcomponent of this view + } + + this.scroller = new Scroller({ + overflowX: 'hidden', + overflowY: 'auto' + }); + }, + + + // Instantiates the TimeGrid object this view needs. Draws from this.timeGridClass + instantiateTimeGrid: function() { + var subclass = this.timeGridClass.extend(agendaTimeGridMethods); + + return new subclass(this); + }, + + + // Instantiates the DayGrid object this view might need. Draws from this.dayGridClass + instantiateDayGrid: function() { + var subclass = this.dayGridClass.extend(agendaDayGridMethods); + + return new subclass(this); + }, + + + /* Rendering + ------------------------------------------------------------------------------------------------------------------*/ + + + // Sets the display range and computes all necessary dates + setRange: function(range) { + View.prototype.setRange.call(this, range); // call the super-method + + this.timeGrid.setRange(range); + if (this.dayGrid) { + this.dayGrid.setRange(range); + } + }, + + + // Renders the view into `this.el`, which has already been assigned + renderDates: function() { + + this.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml()); + this.renderHead(); + + this.scroller.render(); + var timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container'); + var timeGridEl = $('
        ').appendTo(timeGridWrapEl); + this.el.find('.fc-body > tr > td').append(timeGridWrapEl); + + this.timeGrid.setElement(timeGridEl); + this.timeGrid.renderDates(); + + // the
        that sometimes displays under the time-grid + this.bottomRuleEl = $('
        ') + .appendTo(this.timeGrid.el); // inject it into the time-grid + + if (this.dayGrid) { + this.dayGrid.setElement(this.el.find('.fc-day-grid')); + this.dayGrid.renderDates(); + + // have the day-grid extend it's coordinate area over the
        dividing the two grids + this.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight(); + } + + this.noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)'); // fake rows not within the scroller + }, + + + // render the day-of-week headers + renderHead: function() { + this.headContainerEl = + this.el.find('.fc-head-container') + .html(this.timeGrid.renderHeadHtml()); + }, + + + // Unrenders the content of the view. Since we haven't separated skeleton rendering from date rendering, + // always completely kill each grid's rendering. + unrenderDates: function() { + this.timeGrid.unrenderDates(); + this.timeGrid.removeElement(); + + if (this.dayGrid) { + this.dayGrid.unrenderDates(); + this.dayGrid.removeElement(); + } + + this.scroller.destroy(); + }, + + + // Builds the HTML skeleton for the view. + // The day-grid and time-grid components will render inside containers defined by this HTML. + renderSkeletonHtml: function() { + return '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
        ' + + (this.dayGrid ? + '
        ' + + '
        ' : + '' + ) + + '
        '; + }, + + + // Generates an HTML attribute string for setting the width of the axis, if it is known + axisStyleAttr: function() { + if (this.axisWidth !== null) { + return 'style="width:' + this.axisWidth + 'px"'; + } + return ''; + }, + + + /* Business Hours + ------------------------------------------------------------------------------------------------------------------*/ + + + renderBusinessHours: function() { + this.timeGrid.renderBusinessHours(); + + if (this.dayGrid) { + this.dayGrid.renderBusinessHours(); + } + }, + + + unrenderBusinessHours: function() { + this.timeGrid.unrenderBusinessHours(); + + if (this.dayGrid) { + this.dayGrid.unrenderBusinessHours(); + } + }, + + + /* Now Indicator + ------------------------------------------------------------------------------------------------------------------*/ + + + getNowIndicatorUnit: function() { + return this.timeGrid.getNowIndicatorUnit(); + }, + + + renderNowIndicator: function(date) { + this.timeGrid.renderNowIndicator(date); + }, + + + unrenderNowIndicator: function() { + this.timeGrid.unrenderNowIndicator(); + }, + + + /* Dimensions + ------------------------------------------------------------------------------------------------------------------*/ + + + updateSize: function(isResize) { + this.timeGrid.updateSize(isResize); + + View.prototype.updateSize.call(this, isResize); // call the super-method + }, + + + // Refreshes the horizontal dimensions of the view + updateWidth: function() { + // make all axis cells line up, and record the width so newly created axis cells will have it + this.axisWidth = matchCellWidths(this.el.find('.fc-axis')); + }, + + + // Adjusts the vertical dimensions of the view to the specified values + setHeight: function(totalHeight, isAuto) { + var eventLimit; + var scrollerHeight; + var scrollbarWidths; + + // reset all dimensions back to the original state + this.bottomRuleEl.hide(); // .show() will be called later if this
        is necessary + this.scroller.clear(); // sets height to 'auto' and clears overflow + uncompensateScroll(this.noScrollRowEls); + + // limit number of events in the all-day area + if (this.dayGrid) { + this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed + + eventLimit = this.opt('eventLimit'); + if (eventLimit && typeof eventLimit !== 'number') { + eventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure "auto" goes to a real number + } + if (eventLimit) { + this.dayGrid.limitRows(eventLimit); + } + } + + if (!isAuto) { // should we force dimensions of the scroll container? + + scrollerHeight = this.computeScrollerHeight(totalHeight); + this.scroller.setHeight(scrollerHeight); + scrollbarWidths = this.scroller.getScrollbarWidths(); + + if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars? + + // make the all-day and header rows lines up + compensateScroll(this.noScrollRowEls, scrollbarWidths); + + // the scrollbar compensation might have changed text flow, which might affect height, so recalculate + // and reapply the desired height to the scroller. + scrollerHeight = this.computeScrollerHeight(totalHeight); + this.scroller.setHeight(scrollerHeight); + } + + // guarantees the same scrollbar widths + this.scroller.lockOverflow(scrollbarWidths); + + // if there's any space below the slats, show the horizontal rule. + // this won't cause any new overflow, because lockOverflow already called. + if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) { + this.bottomRuleEl.show(); + } + } + }, + + + // given a desired total height of the view, returns what the height of the scroller should be + computeScrollerHeight: function(totalHeight) { + return totalHeight - + subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller + }, + -} + /* Scroll + ------------------------------------------------------------------------------------------------------------------*/ -function countForwardSegs(levels) { - var i, j, k, level, segForward, segBack; - for (i=levels.length-1; i>0; i--) { - level = levels[i]; - for (j=0; j"); - var elements; - var segmentContainer = getDaySegmentContainer(); - var i; - var segCnt = segs.length; - var element; - tempContainer[0].innerHTML = daySegHTML(segs); // faster than .html() - elements = tempContainer.children(); - segmentContainer.append(elements); - daySegElementResolve(segs, elements); - daySegCalcHSides(segs); - daySegSetWidths(segs); - daySegCalcHeights(segs); - daySegSetTops(segs, getRowTops(getRowDivs())); - elements = []; - for (i=0; i" + - ""; - if (!event.allDay && seg.isStart) { - html += - "" + - htmlEscape(formatDates(event.start, event.end, opt('timeFormat'))) + - ""; - } - html += - "" + htmlEscape(event.title) + "" + - "
        "; - if (seg.isEnd && isEventResizable(event)) { - html += - "
        " + - "   " + // makes hit area a lot better for IE6/7 - "
        "; - } - html += - ""; - seg.left = left; - seg.outerWidth = right - left; - seg.startCol = leftCol; - seg.endCol = rightCol + 1; // needs to be exclusive + + // we DON'T need to call updateHeight() because + // a renderEvents() call always happens after this, which will eventually call updateHeight() + }, + + + /* Dragging (for events and external elements) + ------------------------------------------------------------------------------------------------------------------*/ + + + // A returned value of `true` signals that a mock "helper" event has been rendered. + renderDrag: function(dropLocation, seg) { + if (dropLocation.start.hasTime()) { + return this.timeGrid.renderDrag(dropLocation, seg); } - return html; - } - - - function daySegElementResolve(segs, elements) { // sets seg.element - var i; - var segCnt = segs.length; - var seg; - var event; - var element; - var triggerRes; - for (i=0; i' + + view.buildGotoAnchorHtml( // aside from link, important for matchCellWidths + { date: this.start, type: 'week', forceOff: this.colCnt > 1 }, + htmlEscape(weekText) // inner HTML + ) + + ''; } - } - - - function getRowDivs() { - var i; - var rowCnt = getRowCnt(); - var rowDivs = []; - for (i=0; i div'); // optimal selector? + else { + return ''; } - return rowDivs; + }, + + + // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column. + renderBgIntroHtml: function() { + var view = this.view; + + return ''; + }, + + + // Generates the HTML that goes before all other types of cells. + // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid. + renderIntroHtml: function() { + var view = this.view; + + return ''; } - - - function getRowTops(rowDivs) { - var i; - var rowCnt = rowDivs.length; - var tops = []; - for (i=0; i' + + '' + // needed for matchCellWidths + view.getAllDayHtml() + + '' + + ''; + }, + + + // Generates the HTML that goes before all other types of cells. + // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid. + renderIntroHtml: function() { + var view = this.view; + + return ''; } - - - function daySegSetTops(segs, rowTops) { // also triggers eventAfterRender - var i; - var segCnt = segs.length; - var seg; - var element; - var event; - for (i=0; i selection for IE - element - .mousedown(function(ev) { // prevent native selection for others - ev.preventDefault(); - }) - .click(function(ev) { - if (isResizing) { - ev.preventDefault(); // prevent link from being visited (only method that worked in IE6) - ev.stopImmediatePropagation(); // prevent fullcalendar eventClick handler from being called - // (eventElementHandlers needs to be bound after resizableDayEvent) - } - }); - - handle.mousedown(function(ev) { - if (ev.which != 1) { - return; // needs to be left mouse button - } - isResizing = true; - var hoverListener = t.getHoverListener(); - var rowCnt = getRowCnt(); - var colCnt = getColCnt(); - var dis = rtl ? -1 : 1; - var dit = rtl ? colCnt-1 : 0; - var elementTop = element.css('top'); - var dayDelta; - var helpers; - var eventCopy = $.extend({}, event); - var minCell = dateCell(event.start); - clearSelection(); - $('body') - .css('cursor', direction + '-resize') - .one('mouseup', mouseup); - trigger('eventResizeStart', this, event, ev); - hoverListener.start(function(cell, origCell) { - if (cell) { - var r = Math.max(minCell.row, cell.row); - var c = cell.col; - if (rowCnt == 1) { - r = 0; // hack for all-day area in agenda views - } - if (r == minCell.row) { - if (rtl) { - c = Math.min(minCell.col, c); - }else{ - c = Math.max(minCell.col, c); - } - } - dayDelta = (r*7 + c*dis+dit) - (origCell.row*7 + origCell.col*dis+dit); - var newEnd = addDays(eventEnd(event), dayDelta, true); - if (dayDelta) { - eventCopy.end = newEnd; - var oldHelpers = helpers; - helpers = renderTempDaySegs(compileDaySegs([eventCopy]), seg.row, elementTop); - helpers.find('*').css('cursor', direction + '-resize'); - if (oldHelpers) { - oldHelpers.remove(); - } - hideEvents(event); - }else{ - if (helpers) { - showEvents(event); - helpers.remove(); - helpers = null; - } - } - clearOverlays(); - renderDayOverlay(event.start, addDays(cloneDate(newEnd), 1)); // coordinate grid already rebuild at hoverListener.start - } - }, ev); - - function mouseup(ev) { - trigger('eventResizeStop', this, event, ev); - $('body').css('cursor', ''); - hoverListener.stop(); - clearOverlays(); - if (dayDelta) { - eventResize(this, event, dayDelta, 0, ev); - // event redraw will clear helpers - } - // otherwise, the drag handler already restored the old events - - setTimeout(function() { // make this happen after the element's click event - isResizing = false; - },0); - } - +}; + +fcViews.agendaDay = { + type: 'agenda', + duration: { days: 1 } +}; + +fcViews.agendaWeek = { + type: 'agenda', + duration: { weeks: 1 } +}; +;; + +/* +Responsible for the scroller, and forwarding event-related actions into the "grid" +*/ +var ListView = View.extend({ + + grid: null, + scroller: null, + + initialize: function() { + this.grid = new ListViewGrid(this); + this.scroller = new Scroller({ + overflowX: 'hidden', + overflowY: 'auto' }); + }, + + setRange: function(range) { + View.prototype.setRange.call(this, range); // super + + this.grid.setRange(range); // needs to process range-related options + }, + + renderSkeleton: function() { + this.el.addClass( + 'fc-list-view ' + + this.widgetContentClass + ); + + this.scroller.render(); + this.scroller.el.appendTo(this.el); + + this.grid.setElement(this.scroller.scrollEl); + }, + + unrenderSkeleton: function() { + this.scroller.destroy(); // will remove the Grid too + }, + + setHeight: function(totalHeight, isAuto) { + this.scroller.setHeight(this.computeScrollerHeight(totalHeight)); + }, + + computeScrollerHeight: function(totalHeight) { + return totalHeight - + subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller + }, + + renderEvents: function(events) { + this.grid.renderEvents(events); + }, + + unrenderEvents: function() { + this.grid.unrenderEvents(); + }, + + isEventResizable: function(event) { + return false; + }, + + isEventDraggable: function(event) { + return false; } - -} +}); -//BUG: unselect needs to be triggered when events are dragged+dropped +/* +Responsible for event rendering and user-interaction. +Its "el" is the inner-content of the above view's scroller. +*/ +var ListViewGrid = Grid.extend({ -function SelectionManager() { - var t = this; - - - // exports - t.select = select; - t.unselect = unselect; - t.reportSelection = reportSelection; - t.daySelectionMousedown = daySelectionMousedown; - - - // imports - var opt = t.opt; - var trigger = t.trigger; - var defaultSelectionEnd = t.defaultSelectionEnd; - var renderSelection = t.renderSelection; - var clearSelection = t.clearSelection; - - - // locals - var selected = false; + segSelector: '.fc-list-item', // which elements accept event actions + hasDayInteractions: false, // no day selection or day clicking + // slices by day + spanToSegs: function(span) { + var view = this.view; + var dayStart = view.start.clone().time(0); // timed, so segs get times! + var dayIndex = 0; + var seg; + var segs = []; + while (dayStart < view.end) { - // unselectAuto - if (opt('selectable') && opt('unselectAuto')) { - $(document).mousedown(function(ev) { - var ignore = opt('unselectCancel'); - if (ignore) { - if ($(ev.target).parents(ignore).length) { // could be optimized to stop after first match - return; - } + seg = intersectRanges(span, { + start: dayStart, + end: dayStart.clone().add(1, 'day') + }); + + if (seg) { + seg.dayIndex = dayIndex; + segs.push(seg); } - unselect(ev); - }); - } - - function select(startDate, endDate, allDay) { - unselect(); - if (!endDate) { - endDate = defaultSelectionEnd(startDate, allDay); - } - renderSelection(startDate, endDate, allDay); - reportSelection(startDate, endDate, allDay); - } - - - function unselect(ev) { - if (selected) { - selected = false; - clearSelection(); - trigger('unselect', null, ev); + dayStart.add(1, 'day'); + dayIndex++; + + // detect when span won't go fully into the next day, + // and mutate the latest seg to the be the end. + if ( + seg && !seg.isEnd && span.end.hasTime() && + span.end < dayStart.clone().add(this.view.nextDayThreshold) + ) { + seg.end = span.end.clone(); + seg.isEnd = true; + break; + } } - } - - - function reportSelection(startDate, endDate, allDay, ev) { - selected = true; - trigger('select', null, startDate, endDate, allDay, ev); - } - - - function daySelectionMousedown(ev) { // not really a generic manager method, oh well - var cellDate = t.cellDate; - var cellIsAllDay = t.cellIsAllDay; - var hoverListener = t.getHoverListener(); - var reportDayClick = t.reportDayClick; // this is hacky and sort of weird - if (ev.which == 1 && opt('selectable')) { // which==1 means left mouse button - unselect(ev); - var _mousedownElement = this; - var dates; - hoverListener.start(function(cell, origCell) { // TODO: maybe put cellDate/cellIsAllDay info in cell - clearSelection(); - if (cell && cellIsAllDay(cell)) { - dates = [ cellDate(origCell), cellDate(cell) ].sort(cmp); - renderSelection(dates[0], dates[1], true); - }else{ - dates = null; - } - }, ev); - $(document).one('mouseup', function(ev) { - hoverListener.stop(); - if (dates) { - if (+dates[0] == +dates[1]) { - reportDayClick(dates[0], true, ev); - } - reportSelection(dates[0], dates[1], true, ev); - } - }); + + return segs; + }, + + // like "4:00am" + computeEventTimeFormat: function() { + return this.view.opt('mediumTimeFormat'); + }, + + // for events with a url, the whole should be clickable, + // but it's impossible to wrap with an tag. simulate this. + handleSegClick: function(seg, ev) { + var url; + + Grid.prototype.handleSegClick.apply(this, arguments); // super. might prevent the default action + + // not clicking on or within an with an href + if (!$(ev.target).closest('a[href]').length) { + url = seg.event.url; + if (url && !ev.isDefaultPrevented()) { // jsEvent not cancelled in handler + window.location.href = url; // simulate link click + } } - } + }, + // returns list of foreground segs that were actually rendered + renderFgSegs: function(segs) { + segs = this.renderFgSegEls(segs); // might filter away hidden events -} - -function OverlayManager() { - var t = this; - - - // exports - t.renderOverlay = renderOverlay; - t.clearOverlays = clearOverlays; - - - // locals - var usedOverlays = []; - var unusedOverlays = []; - - - function renderOverlay(rect, parent) { - var e = unusedOverlays.shift(); - if (!e) { - e = $("
        "); + if (!segs.length) { + this.renderEmptyMessage(); } - if (e[0].parentNode != parent[0]) { - e.appendTo(parent); + else { + this.renderSegList(segs); } - usedOverlays.push(e.css(rect).show()); - return e; - } - - function clearOverlays() { - var e; - while (e = usedOverlays.shift()) { - unusedOverlays.push(e.hide().unbind()); - } - } + return segs; + }, + renderEmptyMessage: function() { + this.el.html( + '
        ' + // TODO: try less wraps + '
        ' + + '
        ' + + htmlEscape(this.view.opt('noEventsMessage')) + + '
        ' + + '
        ' + + '
        ' + ); + }, -} + // render the event segments in the view + renderSegList: function(allSegs) { + var segsByDay = this.groupSegsByDay(allSegs); // sparse array + var dayIndex; + var daySegs; + var i; + var tableEl = $('
        '); + var tbodyEl = tableEl.find('tbody'); -function CoordinateGrid(buildFunc) { + for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) { + daySegs = segsByDay[dayIndex]; + if (daySegs) { // sparse array, so might be undefined - var t = this; - var rows; - var cols; - - - t.build = function() { - rows = []; - cols = []; - buildFunc(rows, cols); - }; - - - t.cell = function(x, y) { - var rowCnt = rows.length; - var colCnt = cols.length; - var i, r=-1, c=-1; - for (i=0; i= rows[i][0] && y < rows[i][1]) { - r = i; - break; + // append a day header + tbodyEl.append(this.dayHeaderHtml( + this.view.start.clone().add(dayIndex, 'days') + )); + + this.sortEventSegs(daySegs); + + for (i = 0; i < daySegs.length; i++) { + tbodyEl.append(daySegs[i].el); // append event row + } } } - for (i=0; i= cols[i][0] && x < cols[i][1]) { - c = i; - break; - } + + this.el.empty().append(tableEl); + }, + + // Returns a sparse array of arrays, segs grouped by their dayIndex + groupSegsByDay: function(segs) { + var segsByDay = []; // sparse array + var i, seg; + + for (i = 0; i < segs.length; i++) { + seg = segs[i]; + (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = [])) + .push(seg); } - return (r>=0 && c>=0) ? { row:r, col:c } : null; - }; - - - t.rect = function(row0, col0, row1, col1, originElement) { // row1,col1 is inclusive - var origin = originElement.offset(); - return { - top: rows[row0][0] - origin.top, - left: cols[col0][0] - origin.left, - width: cols[col1][1] - cols[col0][0], - height: rows[row1][1] - rows[row0][0] - }; - }; -} + return segsByDay; + }, -function HoverListener(coordinateGrid) { + // generates the HTML for the day headers that live amongst the event rows + dayHeaderHtml: function(dayDate) { + var view = this.view; + var mainFormat = view.opt('listDayFormat'); + var altFormat = view.opt('listDayAltFormat'); + + return '' + + '' + + (mainFormat ? + view.buildGotoAnchorHtml( + dayDate, + { 'class': 'fc-list-heading-main' }, + htmlEscape(dayDate.format(mainFormat)) // inner HTML + ) : + '') + + (altFormat ? + view.buildGotoAnchorHtml( + dayDate, + { 'class': 'fc-list-heading-alt' }, + htmlEscape(dayDate.format(altFormat)) // inner HTML + ) : + '') + + '' + + ''; + }, + // generates the HTML for a single event row + fgSegHtml: function(seg) { + var view = this.view; + var classes = [ 'fc-list-item' ].concat(this.getSegCustomClasses(seg)); + var bgColor = this.getSegBackgroundColor(seg); + var event = seg.event; + var url = event.url; + var timeHtml; - var t = this; - var bindType; - var change; - var firstCell; - var cell; - - - t.start = function(_change, ev, _bindType) { - change = _change; - firstCell = cell = null; - coordinateGrid.build(); - mouse(ev); - bindType = _bindType || 'mousemove'; - $(document).bind(bindType, mouse); - }; - - - function mouse(ev) { - var newCell = coordinateGrid.cell(ev.pageX, ev.pageY); - if (!newCell != !cell || newCell && (newCell.row != cell.row || newCell.col != cell.col)) { - if (newCell) { - if (!firstCell) { - firstCell = newCell; - } - change(newCell, firstCell, newCell.row-firstCell.row, newCell.col-firstCell.col); - }else{ - change(newCell, firstCell); + if (event.allDay) { + timeHtml = view.getAllDayHtml(); + } + else if (view.isMultiDayEvent(event)) { // if the event appears to span more than one day + if (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day + timeHtml = htmlEscape(this.getEventTimeText(seg)); } - cell = newCell; + else { // inner segment that lasts the whole day + timeHtml = view.getAllDayHtml(); + } + } + else { + // Display the normal time text for the *event's* times + timeHtml = htmlEscape(this.getEventTimeText(event)); } + + if (url) { + classes.push('fc-has-url'); + } + + return '' + + (this.displayEventTime ? + '' + + (timeHtml || '') + + '' : + '') + + '' + + '' + + '' + + '' + + '' + + htmlEscape(seg.event.title || '') + + '
        ' + + '' + + ''; } - - - t.stop = function() { - $(document).unbind(bindType, mouse); - return cell; - }; - - -} -function HorizontalPositionCache(getElement) { +}); + +;; - var t = this, - elements = {}, - lefts = {}, - rights = {}; - - function e(i) { - return elements[i] = elements[i] || getElement(i); +fcViews.list = { + 'class': ListView, + buttonTextKey: 'list', // what to lookup in locale files + defaults: { + buttonText: 'list', // text to display for English + listDayFormat: 'LL', // like "January 1, 2016" + noEventsMessage: 'No events to display' } - - t.left = function(i) { - return lefts[i] = lefts[i] === undefined ? e(i).position().left : lefts[i]; - }; - - t.right = function(i) { - return rights[i] = rights[i] === undefined ? t.left(i) + e(i).width() : rights[i]; - }; - - t.clear = function() { - elements = {}; - lefts = {}; - rights = {}; - }; - -} +}; + +fcViews.listDay = { + type: 'list', + duration: { days: 1 }, + defaults: { + listDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header + } +}; + +fcViews.listWeek = { + type: 'list', + duration: { weeks: 1 }, + defaults: { + listDayFormat: 'dddd', // day-of-week is more important + listDayAltFormat: 'LL' + } +}; + +fcViews.listMonth = { + type: 'list', + duration: { month: 1 }, + defaults: { + listDayAltFormat: 'dddd' // day-of-week is nice-to-have + } +}; + +fcViews.listYear = { + type: 'list', + duration: { year: 1 }, + defaults: { + listDayAltFormat: 'dddd' // day-of-week is nice-to-have + } +}; + +;; -})(jQuery); \ No newline at end of file +return FC; // export for Node/CommonJS +}); \ No newline at end of file diff --git a/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.min.css b/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.min.css new file mode 100644 index 00000000..255dbfff --- /dev/null +++ b/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.min.css @@ -0,0 +1,5 @@ +/*! + * FullCalendar v3.2.0 Stylesheet + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw + */.fc-icon,body .fc{font-size:1em}.fc-button-group,.fc-icon{display:inline-block}.fc-bg,.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc-icon,.fc-unselectable{-khtml-user-select:none;-webkit-touch-callout:none}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}.fc th,.fc-basic-view td.fc-week-number,.fc-icon,.fc-toolbar{text-align:center}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed .fc-popover .fc-header .fc-close{color:#666}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc-icon{height:1em;line-height:1em;overflow:hidden;font-family:"Courier New",Courier,monospace;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fc-icon:after{position:relative}.fc-icon-left-single-arrow:after{content:"\02039";font-weight:700;font-size:200%;top:-7%}.fc-icon-right-single-arrow:after{content:"\0203A";font-weight:700;font-size:200%;top:-7%}.fc-icon-left-double-arrow:after{content:"\000AB";font-size:160%;top:-7%}.fc-icon-right-double-arrow:after{content:"\000BB";font-size:160%;top:-7%}.fc-icon-left-triangle:after{content:"\25C4";font-size:125%;top:3%}.fc-icon-right-triangle:after{content:"\25BA";font-size:125%;top:3%}.fc-icon-down-triangle:after{content:"\25BC";font-size:125%;top:2%}.fc-icon-x:after{content:"\000D7";font-size:200%;top:6%}.fc button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;height:2.1em;padding:0 .6em;font-size:1em;white-space:nowrap;cursor:pointer}.fc button::-moz-focus-inner{margin:0;padding:0}.fc-state-default{border:1px solid;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.fc-state-default.fc-corner-left{border-top-left-radius:4px;border-bottom-left-radius:4px}.fc-state-default.fc-corner-right{border-top-right-radius:4px;border-bottom-right-radius:4px}.fc button .fc-icon{position:relative;top:-.05em;margin:0 .2em;vertical-align:middle}.fc-state-active,.fc-state-disabled,.fc-state-down,.fc-state-hover{color:#333;background-color:#e6e6e6}.fc-state-hover{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.fc-state-active,.fc-state-down{background-color:#ccc;background-image:none;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.fc-state-disabled{cursor:default;background-image:none;opacity:.65;box-shadow:none}.fc-event.fc-draggable,.fc-event[href],.fc-popover .fc-header .fc-close,a[data-goto]{cursor:pointer}.fc .fc-button-group>*{float:left;margin:0 0 0 -1px}.fc .fc-button-group>:first-child{margin-left:0}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{padding:2px 4px}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-ltr .fc-popover .fc-header .fc-title,.fc-rtl .fc-popover .fc-header .fc-close{float:left}.fc-ltr .fc-popover .fc-header .fc-close,.fc-rtl .fc-popover .fc-header .fc-title{float:right}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-popover .fc-header .fc-close{font-size:.9em;margin-top:2px}.fc-popover>.ui-widget-header+.ui-widget-content{border-top:0}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-bg table,.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-clear{clear:both}.fc-bg,.fc-bgevent-skeleton,.fc-helper-skeleton,.fc-highlight-skeleton{position:absolute;top:0;left:0;right:0}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}a[data-goto]:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-helper-skeleton{z-index:5}.fc-row .fc-content-skeleton td,.fc-row .fc-helper-skeleton td{background:0 0;border-color:transparent;border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-helper-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-row.fc-rigid,.fc-time-grid-event{overflow:hidden}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.3;border-radius:3px;border:1px solid #3a87ad;font-weight:400}.fc-event,.fc-event-dot{background-color:#3a87ad}.fc-event,.fc-event:hover,.ui-widget .fc-event{color:#fff;text-decoration:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-bg{z-index:1;background:#fff;opacity:.25}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4;display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected.fc-dragging{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-day-grid-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;cursor:pointer;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.fc-toolbar.fc-header-toolbar{margin-bottom:1em}.fc-toolbar.fc-footer-toolbar{margin-top:1em}.fc-toolbar .fc-left{float:left}.fc-toolbar .fc-right{float:right}.fc-toolbar .fc-center{display:inline-block}.fc .fc-toolbar>*>*{float:left;margin-left:.75em}.fc .fc-toolbar>*>:first-child{margin-left:0}.fc-toolbar h2{margin:0}.fc-toolbar button{position:relative}.fc-toolbar .fc-state-hover,.fc-toolbar .ui-state-hover{z-index:2}.fc-toolbar .fc-state-down{z-index:3}.fc-toolbar .fc-state-active,.fc-toolbar .ui-state-active{z-index:4}.fc-toolbar button:focus{z-index:5}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}.fc-basicDay-view .fc-content-skeleton,.fc-basicWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-basic-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-basic-view .fc-day-number,.fc-basic-view .fc-week-number{padding:2px}.fc-basic-view th.fc-day-number,.fc-basic-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-basic-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-basic-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-basic-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px}.fc-rtl .fc-basic-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-basic-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-basic-view td.fc-week-number>*{display:inline-block;min-width:1.25em}.fc-agenda-view .fc-day-grid{position:relative;z-index:2}.fc-agenda-view .fc-day-grid .fc-row{min-height:3em}.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.ui-widget td.fc-axis{font-weight:400}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{z-index:3;position:relative}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-helper-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-slats .ui-widget-content{background:0 0}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-v-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event.fc-selected{overflow:visible}.fc-time-grid-event.fc-selected .fc-bg{display:none}.fc-time-grid-event .fc-content{overflow:hidden}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:"\000A0-\000A0"}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt,.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item:hover td{background-color:#f5f5f5}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title a[href]:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee} \ No newline at end of file diff --git a/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.min.js b/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.min.js index 7e31e42d..c5eb8c75 100644 --- a/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.min.js +++ b/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.min.js @@ -1,113 +1,10 @@ -/* - - FullCalendar v1.5 - http://arshaw.com/fullcalendar/ - - Use fullcalendar.css for basic styling. - For event drag & drop, requires jQuery UI draggable. - For event resizing, requires jQuery UI resizable. - - Copyright (c) 2011 Adam Shaw - Dual licensed under the MIT and GPL licenses, located in - MIT-LICENSE.txt and GPL-LICENSE.txt respectively. - - Date: Sat Mar 19 18:59:37 2011 -0700 - -*/ -(function(m,oa){function wb(a){m.extend(true,Ya,a)}function Yb(a,b,e){function d(k){if(E){u();q();ma();S(k)}else f()}function f(){B=b.theme?"ui":"fc";a.addClass("fc");b.isRTL&&a.addClass("fc-rtl");b.theme&&a.addClass("ui-widget");E=m("
        ").prependTo(a);C=new Zb(X,b);(P=C.render())&&a.prepend(P);y(b.defaultView);m(window).resize(na);t()||g()}function g(){setTimeout(function(){!n.start&&t()&&S()},0)}function l(){m(window).unbind("resize",na);C.destroy(); -E.remove();a.removeClass("fc fc-rtl ui-widget")}function j(){return i.offsetWidth!==0}function t(){return m("body")[0].offsetWidth!==0}function y(k){if(!n||k!=n.name){F++;pa();var D=n,Z;if(D){(D.beforeHide||xb)();Za(E,E.height());D.element.hide()}else Za(E,1);E.css("overflow","hidden");if(n=Y[k])n.element.show();else n=Y[k]=new Ja[k](Z=s=m("
        ").appendTo(E),X);D&&C.deactivateButton(D.name);C.activateButton(k);S();E.css("overflow","");D&& -Za(E,1);Z||(n.afterShow||xb)();F--}}function S(k){if(j()){F++;pa();o===oa&&u();var D=false;if(!n.start||k||r=n.end){n.render(r,k||0);fa(true);D=true}else if(n.sizeDirty){n.clearEvents();fa();D=true}else if(n.eventsDirty){n.clearEvents();D=true}n.sizeDirty=false;n.eventsDirty=false;ga(D);W=a.outerWidth();C.updateTitle(n.title);k=new Date;k>=n.start&&k").append(m("").append(f("left")).append(f("center")).append(f("right")))}function d(){Q.remove()}function f(u){var fa=m("");(u=b.header[u])&&m.each(u.split(" "),function(na){na>0&&fa.append("");var ga; -m.each(this.split(","),function(ra,sa){if(sa=="title"){fa.append("

         

        ");ga&&ga.addClass(q+"-corner-right");ga=null}else{var ha;if(a[sa])ha=a[sa];else if(Ja[sa])ha=function(){ma.removeClass(q+"-state-hover");a.changeView(sa)};if(ha){ra=b.theme?jb(b.buttonIcons,sa):null;var da=jb(b.buttonText,sa),ma=m(""+(ra?"":da)+"");if(ma){ma.click(function(){ma.hasClass(q+"-state-disabled")||ha()}).mousedown(function(){ma.not("."+q+"-state-active").not("."+q+"-state-disabled").addClass(q+"-state-down")}).mouseup(function(){ma.removeClass(q+"-state-down")}).hover(function(){ma.not("."+q+"-state-active").not("."+q+"-state-disabled").addClass(q+"-state-hover")},function(){ma.removeClass(q+"-state-hover").removeClass(q+"-state-down")}).appendTo(fa); -ga||ma.addClass(q+"-corner-left");ga=ma}}}});ga&&ga.addClass(q+"-corner-right")});return fa}function g(u){Q.find("h2").html(u)}function l(u){Q.find("span.fc-button-"+u).addClass(q+"-state-active")}function j(u){Q.find("span.fc-button-"+u).removeClass(q+"-state-active")}function t(u){Q.find("span.fc-button-"+u).addClass(q+"-state-disabled")}function y(u){Q.find("span.fc-button-"+u).removeClass(q+"-state-disabled")}var S=this;S.render=e;S.destroy=d;S.updateTitle=g;S.activateButton=l;S.deactivateButton= -j;S.disableButton=t;S.enableButton=y;var Q=m([]),q}function $b(a,b){function e(c,z){return!ca||cka}function d(c,z){ca=c;ka=z;L=[];c=++qa;G=z=U.length;for(var H=0;Hl;y--)if(S=dc[e.substring(l,y)]){if(f)Q+=S(f,d);l=y-1;break}if(y==l)if(f)Q+=t}}return Q}function Ua(a){return a.end?ec(a.end,a.allDay):ba(N(a.start),1)}function ec(a,b){a=N(a);return b||a.getHours()||a.getMinutes()?ba(a,1):Ka(a)}function fc(a,b){return(b.msLength-a.msLength)*100+(a.event.start-b.event.start)}function Cb(a,b){return a.end>b.start&&a.starte&&td){y=N(d);Q=false}else{y=y;Q=true}f.push({event:j,start:t,end:y,isStart:S,isEnd:Q,msLength:y-t})}}return f.sort(fc)}function ob(a){var b=[],e,d=a.length,f,g,l,j;for(e=0;e=0;e--){d=a[b[e].toLowerCase()];if(d!==oa)return d}return a[""]}function Qa(a){return a.replace(/&/g, -"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"
        ")}function Ib(a){return a.id+"/"+a.className+"/"+a.style.cssText.replace(/(^|;)\s*(top|left|width|height)\s*:[^;]*/ig,"")}function qb(a){a.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})}function ab(a){a.children().removeClass("fc-first fc-last").filter(":first-child").addClass("fc-first").end().filter(":last-child").addClass("fc-last")} -function rb(a,b){a.each(function(e,d){d.className=d.className.replace(/^fc-\w*/,"fc-"+lc[b.getDay()])})}function Jb(a,b){var e=a.source||{},d=a.color,f=e.color,g=b("eventColor"),l=a.backgroundColor||d||e.backgroundColor||f||b("eventBackgroundColor")||g;d=a.borderColor||d||e.borderColor||f||b("eventBorderColor")||g;a=a.textColor||e.textColor||b("eventTextColor");b=[];l&&b.push("background-color:"+l);d&&b.push("border-color:"+d);a&&b.push("color:"+a);return b.join(";")}function $a(a,b,e){if(m.isFunction(a))a= -[a];if(a){var d,f;for(d=0;d";for(aa=0;aa";R+="";for(aa=0;aa";for(V=0;V
        "+(I?"
        ":"")+"
         
        ";R+=""}R+="";w= -m(R).appendTo(a);K=w.find("thead");i=K.find("th");C=w.find("tbody");P=C.find("tr");E=C.find("td");B=E.filter(":first-child");n=P.eq(0).find("div.fc-day-content div");ab(K.add(K.find("tr")));ab(P);P.eq(0).addClass("fc-first");y(E);Y=m("
        ").appendTo(a)}function l(w){var I=w||v==1,R=p.start.getMonth(),V=Ka(new Date),ea,aa,va;I&&i.each(function(wa,Ga){ea=m(Ga);aa=ca(wa);ea.html(ya(aa,$));rb(ea,aa)});E.each(function(wa,Ga){ea=m(Ga);aa=ca(wa);aa.getMonth()== -R?ea.removeClass("fc-other-month"):ea.addClass("fc-other-month");+aa==+V?ea.addClass(la+"-state-highlight fc-today"):ea.removeClass(la+"-state-highlight fc-today");ea.find("div.fc-day-number").text(aa.getDate());I&&rb(ea,aa)});P.each(function(wa,Ga){va=m(Ga);if(wa div"),(ea==v-1?R:I)-Sa(V))}})}function t(w){W=w;M.clear();s=Math.floor(W/F);Va(i.slice(0,-1),s)}function y(w){w.click(S).mousedown(X)}function S(w){if(!L("selectable")){var I=parseInt(this.className.match(/fc\-day(\d+)/)[1]);I=ca(I);c("dayClick",this,I,true,w)}}function Q(w,I,R){R&&r.build();R=N(p.visStart);for(var V=ba(N(R),F),ea=0;ea ";for(A=0;A";x+="  ";for(A=0;A
         
        ";x+=" ";v=m(x).appendTo(a);F=v.find("thead");r=F.find("th").slice(1,-1);J=v.find("tbody");M=J.find("td").slice(0,-1);k=M.find("div.fc-day-content div");D=M.eq(0);Z=D.find("> div");ab(F.add(F.find("tr")));ab(J.add(J.find("tr")));aa=F.find("th:first");va=v.find(".fc-agenda-gutter");ja=m("
        ").appendTo(a); -if(i("allDaySlot")){ia=m("
        ").appendTo(ja);x="
        "+i("allDayText")+"
         
        ";la=m(x).appendTo(ja);$=la.find("tr");q($.find("td"));aa=aa.add(la.find("th:first"));va=va.add(la.find("th.fc-agenda-gutter"));ja.append("
        ")}else ia=m([]);w=m("
        ").appendTo(ja);I=m("
        ").appendTo(w);R=m("
        ").appendTo(I);x="";ta=zb();za=xa(N(ta),bb);xa(ta,La);for(A=tb=0;ta";xa(ta,i("slotMinutes"));tb++}x+="
        "+(!Ea||!Da?s(ta,i("axisFormat")):" ")+"
         
        ";V=m(x).appendTo(I);ea=V.find("div:first");u(V.find("td"));aa=aa.add(V.find("th:first"))}function l(){var h,O,x,A,ta=Ka(new Date);for(h=0;h=0&&xa(O,La+h*i("slotMinutes"));return O}function ua(h){return ba(N(K.visStart),h*Ha+Ia)}function pa(h){return i("allDaySlot")&&!h.row}function U(h){return(h-Math.max(Tb,Sb)+Ba)%Ba*Ha+Ia}function ca(h,O){h=N(h,true);if(O=xa(N(h),bb))return V.height(); -h=i("slotMinutes");O=O.getHours()*60+O.getMinutes()-La;var x=Math.floor(O/h),A=ub[x];if(A===oa)A=ub[x]=V.find("tr:eq("+x+") td div")[0].offsetTop;return Math.max(0,Math.round(A-1+Xa*(O%h/h)))}function ka(){return{left:Ma,right:Ga-vb}}function qa(){return $}function G(h){var O=N(h.start);if(h.allDay)return O;return xa(O,i("defaultEventMinutes"))}function p(h,O){if(O)return N(h);return xa(N(h),i("slotMinutes"))}function L(h,O,x){if(x)i("allDaySlot")&&na(h,ba(N(O),1),true);else c(h,O)}function c(h,O){var x= -i("selectHelper");Na.build();if(x){var A=Ca(h,K.visStart)*Ha+Ia;if(A>=0&&Ata){A.top=ta;A.height=za-ta;A.left+=2;A.width-=5;if(m.isFunction(x)){if(h=x(h,O)){A.position="absolute";A.zIndex=8;wa=m(h).css(A).appendTo(I)}}else{A.isStart=true;A.isEnd=true;wa=m(o({title:"",start:h,end:O,className:["fc-select-helper"],editable:false},A));wa.css("opacity",i("dragOpacity"))}if(wa){u(wa);I.append(wa);Va(wa,A.width,true);Eb(wa,A.height,true)}}}}else ra(h, -O)}function z(){B();if(wa){wa.remove();wa=null}}function H(h){if(h.which==1&&i("selectable")){Y(h);var O;Ra.start(function(x,A){z();if(x&&x.col==A.col&&!pa(x)){A=ma(A);x=ma(x);O=[A,xa(N(A),i("slotMinutes")),x,xa(N(x),i("slotMinutes"))].sort(Gb);c(O[0],O[3])}else O=null},h);m(document).one("mouseup",function(x){Ra.stop();if(O){+O[0]==+O[1]&&T(O[0],false,x);n(O[0],O[3],false,x)}})}}function T(h,O,x){C("dayClick",M[U(h.getDay())],h,O,x)}function X(h,O){Ra.start(function(x){B();if(x)if(pa(x))ga(x.row, -x.col,x.row,x.col);else{x=ma(x);var A=xa(N(x),i("defaultEventMinutes"));ra(x,A)}},O)}function ya(h,O,x){var A=Ra.stop();B();A&&C("drop",h,ma(A),pa(A),O,x)}var K=this;K.renderAgenda=d;K.setWidth=t;K.setHeight=j;K.beforeHide=S;K.afterShow=Q;K.defaultEventEnd=G;K.timePosition=ca;K.dayOfWeekCol=U;K.dateCell=da;K.cellDate=ma;K.cellIsAllDay=pa;K.allDayRow=qa;K.allDayBounds=ka;K.getHoverListener=function(){return Ra};K.colContentLeft=sa;K.colContentRight=ha;K.getDaySegmentContainer=function(){return ia}; -K.getSlotSegmentContainer=function(){return R};K.getMinMinute=function(){return La};K.getMaxMinute=function(){return bb};K.getBodyContent=function(){return I};K.getRowCnt=function(){return 1};K.getColCnt=function(){return Ba};K.getColWidth=function(){return db};K.getSlotHeight=function(){return Xa};K.defaultSelectionEnd=p;K.renderDayOverlay=na;K.renderSelection=L;K.clearSelection=z;K.reportDayClick=T;K.dragStart=X;K.dragStop=ya;Kb.call(K,a,b,e);Lb.call(K);Mb.call(K);sc.call(K);var i=K.opt,C=K.trigger, -P=K.clearEvents,E=K.renderOverlay,B=K.clearOverlays,n=K.reportSelection,Y=K.unselect,W=K.daySelectionMousedown,o=K.slotSegHtml,s=b.formatDate,v,F,r,J,M,k,D,Z,ja,ia,la,$,w,I,R,V,ea,aa,va,wa,Ga,Wb,Ma,db,vb,Xa,Xb,Ba,tb,Na,Ra,cb,ub={},Wa,Tb,Sb,Ub,Ha,Ia,La,bb,Vb;qb(a.addClass("fc-agenda"));Na=new Nb(function(h,O){function x(eb){return Math.max(Ea,Math.min(tc,eb))}var A,ta,za;r.each(function(eb,uc){A=m(uc);ta=A.offset().left;if(eb)za[1]=ta;za=[ta];O[eb]=za});za[1]=ta+A.outerWidth();if(i("allDaySlot")){A= -$;ta=A.offset().top;h[0]=[ta,ta+A.outerHeight()]}for(var Da=I.offset().top,Ea=w.offset().top,tc=Ea+w.outerHeight(),fb=0;fb
        "+Qa(W(o.start,o.end,u("timeFormat")))+"
        "+Qa(o.title)+"
        ";if(s.isEnd&&ga(o))v+="
        =
        "; -v+="";return v}function j(o,s,v){na(o)&&y(o,s,v.isStart);v.isEnd&&ga(o)&&c(o,s,v);da(o,s)}function t(o,s,v){var F=s.find("div.fc-event-time");na(o)&&S(o,s,F);v.isEnd&&ga(o)&&Q(o,s,F);da(o,s)}function y(o,s,v){function F(){if(!M){s.width(r).height("").draggable("option","grid",null);M=true}}var r,J,M=true,k,D=u("isRTL")?-1:1,Z=U(),ja=H(),ia=T(),la=ka();s.draggable({zIndex:9,opacity:u("dragOpacity","month"),revertDuration:u("dragRevertDuration"),start:function($,w){fa("eventDragStart", -s,o,$,w);i(o,s);r=s.width();Z.start(function(I,R,V,ea){B();if(I){J=false;k=ea*D;if(I.row)if(v){if(M){s.width(ja-10);Eb(s,ia*Math.round((o.end?(o.end-o.start)/wc:u("defaultEventMinutes"))/u("slotMinutes")));s.draggable("option","grid",[ja,1]);M=false}}else J=true;else{E(ba(N(o.start),k),ba(Ua(o),k));F()}J=J||M&&!k}else{F();J=true}s.draggable("option","revert",J)},$,"drag")},stop:function($,w){Z.stop();B();fa("eventDragStop",s,o,$,w);if(J){F();s.css("filter","");K(o,s)}else{var I=0;M||(I=Math.round((s.offset().top- -X().offset().top)/ia)*u("slotMinutes")+la-(o.start.getHours()*60+o.start.getMinutes()));C(this,o,k,I,M,$,w)}}})}function S(o,s,v){function F(I){var R=xa(N(o.start),I),V;if(o.end)V=xa(N(o.end),I);v.text(W(R,V,u("timeFormat")))}function r(){if(M){v.css("display","");s.draggable("option","grid",[$,w]);M=false}}var J,M=false,k,D,Z,ja=u("isRTL")?-1:1,ia=U(),la=z(),$=H(),w=T();s.draggable({zIndex:9,scroll:false,grid:[$,w],axis:la==1?"y":false,opacity:u("dragOpacity"),revertDuration:u("dragRevertDuration"), -start:function(I,R){fa("eventDragStart",s,o,I,R);i(o,s);J=s.position();D=Z=0;ia.start(function(V,ea,aa,va){s.draggable("option","revert",!V);B();if(V){k=va*ja;if(u("allDaySlot")&&!V.row){if(!M){M=true;v.hide();s.draggable("option","grid",null)}E(ba(N(o.start),k),ba(Ua(o),k))}else r()}},I,"drag")},drag:function(I,R){D=Math.round((R.position.top-J.top)/w)*u("slotMinutes");if(D!=Z){M||F(D);Z=D}},stop:function(I,R){var V=ia.stop();B();fa("eventDragStop",s,o,I,R);if(V&&(k||D||M))C(this,o,k,M?0:D,M,I,R); -else{r();s.css("filter","");s.css(J);F(0);K(o,s)}}})}function Q(o,s,v){var F,r,J=T();s.resizable({handles:{s:"div.ui-resizable-s"},grid:J,start:function(M,k){F=r=0;i(o,s);s.css("z-index",9);fa("eventResizeStart",this,o,M,k)},resize:function(M,k){F=Math.round((Math.max(J,s.height())-k.originalSize.height)/J);if(F!=r){v.text(W(o.start,!F&&!o.end?null:xa(ra(o),u("slotMinutes")*F),u("timeFormat")));r=F}},stop:function(M,k){fa("eventResizeStop",this,o,M,k);if(F)P(this,o,0,u("slotMinutes")*F,M,k);else{s.css("z-index", -8);K(o,s)}}})}var q=this;q.renderEvents=a;q.compileDaySegs=e;q.clearEvents=b;q.slotSegHtml=l;q.bindDaySeg=j;Qb.call(q);var u=q.opt,fa=q.trigger,na=q.isEventDraggable,ga=q.isEventResizable,ra=q.eventEnd,sa=q.reportEvents,ha=q.reportEventClear,da=q.eventElementHandlers,ma=q.setHeight,ua=q.getDaySegmentContainer,pa=q.getSlotSegmentContainer,U=q.getHoverListener,ca=q.getMaxMinute,ka=q.getMinMinute,qa=q.timePosition,G=q.colContentLeft,p=q.colContentRight,L=q.renderDaySegs,c=q.resizableDayEvent,z=q.getColCnt, -H=q.getColWidth,T=q.getSlotHeight,X=q.getBodyContent,ya=q.reportEventElement,K=q.showEvents,i=q.hideEvents,C=q.eventDrop,P=q.eventResize,E=q.renderDayOverlay,B=q.clearOverlays,n=q.calendar,Y=n.formatDate,W=n.formatDates}function vc(a){var b,e,d,f,g,l;for(b=a.length-1;b>0;b--){f=a[b];for(e=0;e"),B=z(),n=i.length,Y;E[0].innerHTML=e(i);E=E.children();B.append(E);d(i,E);l(i);j(i);t(i);Q(i,S(y()));E=[];for(B=0;B
        ";if(!n.allDay&&B.isStart)k+=""+Qa(T(n.start,n.end,fa("timeFormat")))+"";k+=""+Qa(n.title)+"
        ";if(B.isEnd&&ra(n))k+="
           
        ";k+="";B.left=r;B.outerWidth=J-r;B.startCol=v;B.endCol=F+1}return k}function d(i,C){var P,E=i.length,B,n,Y;for(P=0;P div");return P}function S(i){var C,P=i.length,E=[];for(C=0;C"));j[0].parentNode!=l[0]&&j.appendTo(l);d.push(j.css(g).show());return j}function b(){for(var g;g=d.shift();)f.push(g.hide().unbind())}var e=this;e.renderOverlay=a;e.clearOverlays=b;var d=[],f=[]}function Nb(a){var b=this,e,d;b.build=function(){e=[];d=[];a(e,d)};b.cell=function(f,g){var l=e.length,j=d.length, -t,y=-1,S=-1;for(t=0;t=e[t][0]&&g=d[t][0]&&f=0&&S>=0?{row:y,col:S}:null};b.rect=function(f,g,l,j,t){t=t.offset();return{top:e[f][0]-t.top,left:d[g][0]-t.left,width:d[j][1]-d[g][0],height:e[l][1]-e[f][0]}}}function Ob(a){function b(j){j=a.cell(j.pageX,j.pageY);if(!j!=!l||j&&(j.row!=l.row||j.col!=l.col)){if(j){g||(g=j);f(j,g,j.row-g.row,j.col-g.col)}else f(j,g);l=j}}var e=this,d,f,g,l;e.start=function(j,t,y){f=j;g=l=null; -a.build();b(t);d=y||"mousemove";m(document).bind(d,b)};e.stop=function(){m(document).unbind(d,b);return l}}function Pb(a){function b(l){return d[l]=d[l]||a(l)}var e=this,d={},f={},g={};e.left=function(l){return f[l]=f[l]===oa?b(l).position().left:f[l]};e.right=function(l){return g[l]=g[l]===oa?e.left(l)+b(l).width():g[l]};e.clear=function(){d={};f={};g={}}}var Ya={defaultView:"month",aspectRatio:1.35,header:{left:"title",center:"",right:"today prev,next"},weekends:true,allDayDefault:true,ignoreTimezone:true, -lazyFetching:true,startParam:"start",endParam:"end",titleFormat:{month:"MMMM yyyy",week:"MMM d[ yyyy]{ '—'[ MMM] d yyyy}",day:"dddd, MMM d, yyyy"},columnFormat:{month:"ddd",week:"ddd M/d",day:"dddd M/d"},timeFormat:{"":"h(:mm)t"},isRTL:false,firstDay:0,monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday", -"Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],buttonText:{prev:" ◄ ",next:" ► ",prevYear:" << ",nextYear:" >> ",today:"today",month:"month",week:"week",day:"day"},theme:false,buttonIcons:{prev:"circle-triangle-w",next:"circle-triangle-e"},unselectAuto:true,dropAccept:"*"},xc={header:{left:"next,prev today",center:"",right:"title"},buttonText:{prev:" ► ",next:" ◄ ", -prevYear:" >> ",nextYear:" << "},buttonIcons:{prev:"circle-triangle-e",next:"circle-triangle-w"}},Aa=m.fullCalendar={version:"1.5"},Ja=Aa.views={};m.fn.fullCalendar=function(a){if(typeof a=="string"){var b=Array.prototype.slice.call(arguments,1),e;this.each(function(){var f=m.data(this,"fullCalendar");if(f&&m.isFunction(f[a])){f=f[a].apply(f,b);if(e===oa)e=f;a=="destroy"&&m.removeData(this,"fullCalendar")}});if(e!==oa)return e;return this}var d=a.eventSources||[];delete a.eventSources; -if(a.events){d.push(a.events);delete a.events}a=m.extend(true,{},Ya,a.isRTL||a.isRTL===oa&&Ya.isRTL?xc:{},a);this.each(function(f,g){f=m(g);g=new Yb(f,a,d);f.data("fullCalendar",g);g.render()});return this};Aa.sourceNormalizers=[];Aa.sourceFetchers=[];var ac={dataType:"json",cache:false},bc=1;Aa.addDays=ba;Aa.cloneDate=N;Aa.parseDate=kb;Aa.parseISO8601=Bb;Aa.parseTime=mb;Aa.formatDate=Oa;Aa.formatDates=ib;var lc=["sun","mon","tue","wed","thu","fri","sat"],Ab=864E5,cc=36E5,wc=6E4,dc={s:function(a){return a.getSeconds()}, -ss:function(a){return Pa(a.getSeconds())},m:function(a){return a.getMinutes()},mm:function(a){return Pa(a.getMinutes())},h:function(a){return a.getHours()%12||12},hh:function(a){return Pa(a.getHours()%12||12)},H:function(a){return a.getHours()},HH:function(a){return Pa(a.getHours())},d:function(a){return a.getDate()},dd:function(a){return Pa(a.getDate())},ddd:function(a,b){return b.dayNamesShort[a.getDay()]},dddd:function(a,b){return b.dayNames[a.getDay()]},M:function(a){return a.getMonth()+1},MM:function(a){return Pa(a.getMonth()+ -1)},MMM:function(a,b){return b.monthNamesShort[a.getMonth()]},MMMM:function(a,b){return b.monthNames[a.getMonth()]},yy:function(a){return(a.getFullYear()+"").substring(2)},yyyy:function(a){return a.getFullYear()},t:function(a){return a.getHours()<12?"a":"p"},tt:function(a){return a.getHours()<12?"am":"pm"},T:function(a){return a.getHours()<12?"A":"P"},TT:function(a){return a.getHours()<12?"AM":"PM"},u:function(a){return Oa(a,"yyyy-MM-dd'T'HH:mm:ss'Z'")},S:function(a){a=a.getDate();if(a>10&&a<20)return"th"; -return["st","nd","rd"][a%10-1]||"th"}};Aa.applyAll=$a;Ja.month=mc;Ja.basicWeek=nc;Ja.basicDay=oc;wb({weekMode:"fixed"});Ja.agendaWeek=qc;Ja.agendaDay=rc;wb({allDaySlot:true,allDayText:"all-day",firstHour:6,slotMinutes:30,defaultEventMinutes:120,axisFormat:"h(:mm)tt",timeFormat:{agenda:"h:mm{ - h:mm}"},dragOpacity:{agenda:0.5},minTime:0,maxTime:24})})(jQuery); +/*! + * FullCalendar v3.2.0 + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw + */ +!function(t){"function"==typeof define&&define.amd?define(["jquery","moment"],t):"object"==typeof exports?module.exports=t(require("jquery"),require("moment")):t(jQuery,moment)}(function(t,e){function n(t){return q(t,Vt)}function i(t,e){e.left&&t.css({"border-left-width":1,"margin-left":e.left-1}),e.right&&t.css({"border-right-width":1,"margin-right":e.right-1})}function r(t){t.css({"margin-left":"","margin-right":"","border-left-width":"","border-right-width":""})}function s(){t("body").addClass("fc-not-allowed")}function o(){t("body").removeClass("fc-not-allowed")}function l(e,n,i){var r=Math.floor(n/e.length),s=Math.floor(n-r*(e.length-1)),o=[],l=[],u=[],c=0;a(e),e.each(function(n,i){var a=n===e.length-1?s:r,d=t(i).outerHeight(!0);d *").each(function(e,i){var r=t(i).outerWidth();r>n&&(n=r)}),n++,e.width(n),n}function c(t,e){var n,i=t.add(e);return i.css({position:"relative",left:-1}),n=t.outerHeight()-e.outerHeight(),i.css({position:"",left:""}),n}function d(e){var n=e.css("position"),i=e.parents().filter(function(){var e=t(this);return/(auto|scroll)/.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==n&&i.length?i:t(e[0].ownerDocument||document)}function h(t,e){var n=t.offset(),i=n.left-(e?e.left:0),r=n.top-(e?e.top:0);return{left:i,right:i+t.outerWidth(),top:r,bottom:r+t.outerHeight()}}function f(t,e){var n=t.offset(),i=p(t),r=n.left+S(t,"border-left-width")+i.left-(e?e.left:0),s=n.top+S(t,"border-top-width")+i.top-(e?e.top:0);return{left:r,right:r+t[0].clientWidth,top:s,bottom:s+t[0].clientHeight}}function g(t,e){var n=t.offset(),i=n.left+S(t,"border-left-width")+S(t,"padding-left")-(e?e.left:0),r=n.top+S(t,"border-top-width")+S(t,"padding-top")-(e?e.top:0);return{left:i,right:i+t.width(),top:r,bottom:r+t.height()}}function p(t){var e,n=t.innerWidth()-t[0].clientWidth,i=t.innerHeight()-t[0].clientHeight;return n=v(n),i=v(i),e={left:0,right:0,top:0,bottom:i},m()&&"rtl"==t.css("direction")?e.left=n:e.right=n,e}function v(t){return t=Math.max(0,t),t=Math.round(t)}function m(){return null===Pt&&(Pt=y()),Pt}function y(){var e=t("
        ").css({position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}).appendTo("body"),n=e.children(),i=n.offset().left>e.offset().left;return e.remove(),i}function S(t,e){return parseFloat(t.css(e))||0}function w(t){return 1==t.which&&!t.ctrlKey}function E(t){var e=t.originalEvent.touches;return e&&e.length?e[0].pageX:t.pageX}function b(t){var e=t.originalEvent.touches;return e&&e.length?e[0].pageY:t.pageY}function D(t){return/^touch/.test(t.type)}function T(t){t.addClass("fc-unselectable").on("selectstart",H)}function C(t){t.removeClass("fc-unselectable").off("selectstart",H)}function H(t){t.preventDefault()}function x(t,e){var n={left:Math.max(t.left,e.left),right:Math.min(t.right,e.right),top:Math.max(t.top,e.top),bottom:Math.min(t.bottom,e.bottom)};return n.lefta&&o=a?(n=o.clone(),r=!0):(n=a.clone(),r=!1),l<=u?(i=l.clone(),s=!0):(i=u.clone(),s=!1),{start:n,end:i,isStart:r,isEnd:s}}function z(t,n){return e.duration({days:t.clone().stripTime().diff(n.clone().stripTime(),"days"),ms:t.time()-n.time()})}function G(t,n){return e.duration({days:t.clone().stripTime().diff(n.clone().stripTime(),"days")})}function O(t,n,i){return e.duration(Math.round(t.diff(n,i,!0)),i)}function A(t,e){var n,i,r;for(n=0;n=1&&ot(r)));n++);return i}function V(t,n,i){return null!=i?i.diff(n,t,!0):e.isDuration(n)?n.as(t):n.end.diff(n.start,t,!0)}function P(t,e,n){var i;return W(n)?(e-t)/n:(i=n.asMonths(),Math.abs(i)>=1&&ot(i)?e.diff(t,"months",!0)/i:e.diff(t,"days",!0)/n.asDays())}function _(t,e){var n,i;return W(t)||W(e)?t/e:(n=t.asMonths(),i=e.asMonths(),Math.abs(n)>=1&&ot(n)&&Math.abs(i)>=1&&ot(i)?n/i:t.asDays()/e.asDays())}function Y(t,n){var i;return W(t)?e.duration(t*n):(i=t.asMonths(),Math.abs(i)>=1&&ot(i)?e.duration({months:i*n}):e.duration({days:t.asDays()*n}))}function W(t){return Boolean(t.hours()||t.minutes()||t.seconds()||t.milliseconds())}function U(t){return"[object Date]"===Object.prototype.toString.call(t)||t instanceof Date}function j(t){return/^\d+\:\d+(?:\:\d+\.?(?:\d{3})?)?$/.test(t)}function q(t,e){var n,i,r,s,o,l,a={};if(e)for(n=0;n=0;s--)if(o=t[s][i],"object"==typeof o)r.unshift(o);else if(void 0!==o){a[i]=o;break}r.length&&(a[i]=q(r))}for(n=t.length-1;n>=0;n--){l=t[n];for(i in l)i in a||(a[i]=l[i])}return a}function Z(t){var e=function(){};return e.prototype=t,new e}function $(t,e){for(var n in t)Q(t,n)&&(e[n]=t[n])}function Q(t,e){return Wt.call(t,e)}function X(e){return/undefined|null|boolean|number|string/.test(t.type(e))}function K(e,n,i){if(t.isFunction(e)&&(e=[e]),e){var r,s;for(r=0;r/g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"
        ")}function et(t){return t.replace(/&.*?;/g,"")}function nt(e){var n=[];return t.each(e,function(t,e){null!=e&&n.push(t+":"+e)}),n.join(";")}function it(e){var n=[];return t.each(e,function(t,e){null!=e&&n.push(t+'="'+tt(e)+'"')}),n.join(" ")}function rt(t){return t.charAt(0).toUpperCase()+t.slice(1)}function st(t,e){return t-e}function ot(t){return t%1===0}function lt(t,e){var n=t[e];return function(){return n.apply(t,arguments)}}function at(t,e,n){var i,r,s,o,l,a=function(){var u=+new Date-o;u=t.leftCol)return!0;return!1}function Ct(t,e){return t.leftCol-e.leftCol}function Ht(t){var e,n,i,r=[];for(e=0;ee.top&&t.top"),g.append(o("left")).append(o("right")).append(o("center")).append('
        ')):s()}function s(){g&&(g.remove(),g=f.el=null)}function o(i){var r=t('
        '),s=n.layout[i];return s&&t.each(s.split(" "),function(n){var i,s=t(),o=!0;t.each(this.split(","),function(n,i){var r,l,a,u,c,d,h,f,g,m;"title"==i?(s=s.add(t("

         

        ")),o=!1):((r=(e.options.customButtons||{})[i])?(a=function(t){r.click&&r.click.call(m[0],t)},u="",c=r.text):(l=e.getViewSpec(i))?(a=function(){e.changeView(i)},v.push(i),u=l.buttonTextOverride,c=l.buttonTextDefault):e[i]&&(a=function(){e[i]()},u=(e.overrides.buttonText||{})[i],c=e.options.buttonText[i]),a&&(d=r?r.themeIcon:e.options.themeButtonIcons[i],h=r?r.icon:e.options.buttonIcons[i],f=u?tt(u):d&&e.options.theme?"":h&&!e.options.theme?"":tt(c),g=["fc-"+i+"-button",p+"-button",p+"-state-default"],m=t('").click(function(t){m.hasClass(p+"-state-disabled")||(a(t),(m.hasClass(p+"-state-active")||m.hasClass(p+"-state-disabled"))&&m.removeClass(p+"-state-hover"))}).mousedown(function(){m.not("."+p+"-state-active").not("."+p+"-state-disabled").addClass(p+"-state-down")}).mouseup(function(){m.removeClass(p+"-state-down")}).hover(function(){m.not("."+p+"-state-active").not("."+p+"-state-disabled").addClass(p+"-state-hover")},function(){m.removeClass(p+"-state-hover").removeClass(p+"-state-down")}),s=s.add(m)))}),o&&s.first().addClass(p+"-corner-left").end().last().addClass(p+"-corner-right").end(),s.length>1?(i=t("
        "),o&&i.addClass("fc-button-group"),i.append(s),r.append(i)):r.append(s)}),r}function l(t){g&&g.find("h2").text(t)}function a(t){g&&g.find(".fc-"+t+"-button").addClass(p+"-state-active")}function u(t){g&&g.find(".fc-"+t+"-button").removeClass(p+"-state-active")}function c(t){g&&g.find(".fc-"+t+"-button").prop("disabled",!0).addClass(p+"-state-disabled")}function d(t){g&&g.find(".fc-"+t+"-button").prop("disabled",!1).removeClass(p+"-state-disabled")}function h(){return v}var f=this;f.setToolbarOptions=i,f.render=r,f.removeElement=s,f.updateTitle=l,f.activateButton=a,f.deactivateButton=u,f.disableButton=c,f.enableButton=d,f.getViewsWithButtons=h,f.el=null;var g,p,v=[]}function Bt(n,i){function r(t){t._locale=Y}function s(){q?a()&&(f(),u()):o()}function o(){n.addClass("fc"),n.on("click.fc","a[data-goto]",function(e){var n=t(this),i=n.data("goto"),r=_.moment(i.date),s=i.type,o=Q.opt("navLink"+rt(s)+"Click");"function"==typeof o?o(r,e):("string"==typeof o&&(s=o),B(r,s))}),_.bindOption("theme",function(t){$=t?"ui":"fc",n.toggleClass("ui-widget",t),n.toggleClass("fc-unthemed",!t)}),_.bindOptions(["isRTL","locale"],function(t){n.toggleClass("fc-ltr",!t),n.toggleClass("fc-rtl",t)}),q=t("
        ").prependTo(n);var e=y();W=new Lt(e),U=_.header=e[0],j=_.footer=e[1],E(),b(),u(_.options.defaultView),_.options.handleWindowResize&&(K=at(v,_.options.windowResizeDelay),t(window).resize(K))}function l(){Q&&Q.removeElement(),W.proxyCall("removeElement"),q.remove(),n.removeClass("fc fc-ltr fc-rtl fc-unthemed ui-widget"),n.off(".fc"),K&&t(window).unbind("resize",K),se.unneeded()}function a(){return n.is(":visible")}function u(e,n){nt++;var i=Q&&e&&Q.type!==e;i&&(F(),c()),!Q&&e&&(Q=_.view=et[e]||(et[e]=_.instantiateView(e)),Q.setElement(t("
        ").appendTo(q)),W.proxyCall("activateButton",e)),Q&&(J=Q.massageCurrentDate(J),Q.isDateSet&&J>=Q.intervalStart&&J=Q.intervalStart&&tq&&i.push(n);return i}function s(t,e){return!q||tZ}function o(t,e){return q=t,Z=e,l()}function l(){return u(tt,"reset")}function a(t){return u(E(t))}function u(t,e){var n,i;for("reset"===e?nt=[]:"add"!==e&&(nt=C(nt,t)),n=0;ns&&(!a[o]||u.isSame(c,a[o]))&&(o-1!==s||"."!==f[o]);o--)v=f[o]+v;for(l=s;l<=o;l++)m+=f[l],y+=g[l];return(m||y)&&(S=r?y+i+m:m+i+y),h(p+S+v)}function r(t){return w[t]||(w[t]=s(t))}function s(t){var e=o(t);return{fakeFormatString:a(e),sameUnits:u(e)}}function o(t){for(var e,n=[],i=/\[([^\]]*)\]|\(([^\)]*)\)|(LTS|LT|(\w)\4*o?)|([^\w\[\(]+)/g;e=i.exec(t);)e[1]?n.push.apply(n,l(e[1])):e[2]?n.push({maybe:o(e[2])}):e[3]?n.push({token:e[3]}):e[5]&&n.push.apply(n,l(e[5]));return n}function l(t){return". "===t?["."," "]:[t]}function a(t){var e,n,i=[];for(e=0;er.value)&&(r=i));return r?r.unit:null}Ot.formatDate=t,Ot.formatRange=n,Ot.oldMomentFormat=e,Ot.queryMostGranularFormatUnit=f;var g="\v",p="",v="",m=new RegExp(v+"([^"+v+"]*)"+v,"g"),y={t:function(t){return e(t,"a").charAt(0)},T:function(t){return e(t,"A").charAt(0)}},S={Y:{value:1,unit:"year"},M:{value:2,unit:"month"},W:{value:3,unit:"week"},w:{value:3,unit:"week"},D:{value:4,unit:"day"},d:{value:4,unit:"day"}},w={}}();var Qt=Ot.formatDate,Xt=Ot.formatRange,Kt=Ot.oldMomentFormat;Ot.Class=ct,ct.extend=function(){var t,e,n=arguments.length;for(t=0;t').addClass(n.className||"").css({top:0,left:0}).append(n.content).appendTo(n.parentEl),this.el.on("click",".fc-close",function(){e.hide()}),n.autoHide&&this.listenTo(t(document),"mousedown",this.documentMousedown)},documentMousedown:function(e){this.el&&!t(e.target).closest(this.el).length&&this.hide()},removeElement:function(){this.hide(),this.el&&(this.el.remove(),this.el=null),this.stopListeningTo(t(document),"mousedown")},position:function(){var e,n,i,r,s,o=this.options,l=this.el.offsetParent().offset(),a=this.el.outerWidth(),u=this.el.outerHeight(),c=t(window),h=d(this.el);r=o.top||0,s=void 0!==o.left?o.left:void 0!==o.right?o.right-a:0,h.is(window)||h.is(document)?(h=c,e=0,n=0):(i=h.offset(),e=i.top,n=i.left),e+=c.scrollTop(),n+=c.scrollLeft(),o.viewportConstrain!==!1&&(r=Math.min(r,e+h.outerHeight()-u-this.margin),r=Math.max(r,e+this.margin),s=Math.min(s,n+h.outerWidth()-a-this.margin),s=Math.max(s,n+this.margin)),this.el.css({top:r-l.top,left:s-l.left})},trigger:function(t){this.options[t]&&this.options[t].apply(this,Array.prototype.slice.call(arguments,1))}}),ne=Ot.CoordCache=ct.extend({els:null,forcedOffsetParentEl:null,origin:null,boundingRect:null,isHorizontal:!1,isVertical:!1,lefts:null,rights:null,tops:null,bottoms:null,constructor:function(e){this.els=t(e.els),this.isHorizontal=e.isHorizontal,this.isVertical=e.isVertical,this.forcedOffsetParentEl=e.offsetParent?t(e.offsetParent):null},build:function(){var t=this.forcedOffsetParentEl;!t&&this.els.length>0&&(t=this.els.eq(0).offsetParent()),this.origin=t?t.offset():null,this.boundingRect=this.queryBoundingRect(),this.isHorizontal&&this.buildElHorizontals(),this.isVertical&&this.buildElVerticals()},clear:function(){this.origin=null,this.boundingRect=null,this.lefts=null,this.rights=null,this.tops=null,this.bottoms=null},ensureBuilt:function(){this.origin||this.build()},buildElHorizontals:function(){var e=[],n=[];this.els.each(function(i,r){var s=t(r),o=s.offset().left,l=s.outerWidth();e.push(o),n.push(o+l)}),this.lefts=e,this.rights=n},buildElVerticals:function(){var e=[],n=[];this.els.each(function(i,r){var s=t(r),o=s.offset().top,l=s.outerHeight();e.push(o),n.push(o+l)}),this.tops=e,this.bottoms=n},getHorizontalIndex:function(t){this.ensureBuilt();var e,n=this.lefts,i=this.rights,r=n.length;for(e=0;e=n[e]&&t=n[e]&&t0&&(t=d(this.els.eq(0)),!t.is(document))?f(t):null},isPointInBounds:function(t,e){return this.isLeftInBounds(t)&&this.isTopInBounds(e)},isLeftInBounds:function(t){return!this.boundingRect||t>=this.boundingRect.left&&t=this.boundingRect.top&&t=r*r&&this.handleDistanceSurpassed(t)),this.isDragging&&this.handleDrag(n,i,t)},handleDrag:function(t,e,n){this.trigger("drag",t,e,n),this.updateAutoScroll(n)},endDrag:function(t){this.isDragging&&(this.isDragging=!1,this.handleDragEnd(t))},handleDragEnd:function(t){this.trigger("dragEnd",t)},startDelay:function(t){var e=this;this.delay?this.delayTimeoutId=setTimeout(function(){e.handleDelayEnd(t)},this.delay):this.handleDelayEnd(t)},handleDelayEnd:function(t){this.isDelayEnded=!0,this.isDistanceSurpassed&&this.startDrag(t)},handleDistanceSurpassed:function(t){this.isDistanceSurpassed=!0,this.isDelayEnded&&this.startDrag(t)},handleTouchMove:function(t){this.isDragging&&this.shouldCancelTouchScroll&&t.preventDefault(),this.handleMove(t)},handleMouseMove:function(t){this.handleMove(t)},handleTouchScroll:function(t){this.isDragging&&!this.scrollAlwaysKills||this.endInteraction(t,!0)},trigger:function(t){this.options[t]&&this.options[t].apply(this,Array.prototype.slice.call(arguments,1)),this["_"+t]&&this["_"+t].apply(this,Array.prototype.slice.call(arguments,1))}});ie.mixin({isAutoScroll:!1,scrollBounds:null,scrollTopVel:null,scrollLeftVel:null,scrollIntervalId:null,scrollSensitivity:30,scrollSpeed:200,scrollIntervalMs:50,initAutoScroll:function(){var t=this.scrollEl;this.isAutoScroll=this.options.scroll&&t&&!t.is(window)&&!t.is(document),this.isAutoScroll&&this.listenTo(t,"scroll",at(this.handleDebouncedScroll,100))},destroyAutoScroll:function(){this.endAutoScroll(),this.isAutoScroll&&this.stopListeningTo(this.scrollEl,"scroll")},computeScrollBounds:function(){this.isAutoScroll&&(this.scrollBounds=h(this.scrollEl))},updateAutoScroll:function(t){var e,n,i,r,s=this.scrollSensitivity,o=this.scrollBounds,l=0,a=0;o&&(e=(s-(b(t)-o.top))/s,n=(s-(o.bottom-b(t)))/s,i=(s-(E(t)-o.left))/s,r=(s-(o.right-E(t)))/s,e>=0&&e<=1?l=e*this.scrollSpeed*-1:n>=0&&n<=1&&(l=n*this.scrollSpeed),i>=0&&i<=1?a=i*this.scrollSpeed*-1:r>=0&&r<=1&&(a=r*this.scrollSpeed)),this.setScrollVel(l,a)},setScrollVel:function(t,e){this.scrollTopVel=t,this.scrollLeftVel=e,this.constrainScrollVel(),!this.scrollTopVel&&!this.scrollLeftVel||this.scrollIntervalId||(this.scrollIntervalId=setInterval(lt(this,"scrollIntervalFunc"),this.scrollIntervalMs))},constrainScrollVel:function(){var t=this.scrollEl;this.scrollTopVel<0?t.scrollTop()<=0&&(this.scrollTopVel=0):this.scrollTopVel>0&&t.scrollTop()+t[0].clientHeight>=t[0].scrollHeight&&(this.scrollTopVel=0),this.scrollLeftVel<0?t.scrollLeft()<=0&&(this.scrollLeftVel=0):this.scrollLeftVel>0&&t.scrollLeft()+t[0].clientWidth>=t[0].scrollWidth&&(this.scrollLeftVel=0)},scrollIntervalFunc:function(){var t=this.scrollEl,e=this.scrollIntervalMs/1e3;this.scrollTopVel&&t.scrollTop(t.scrollTop()+this.scrollTopVel*e),this.scrollLeftVel&&t.scrollLeft(t.scrollLeft()+this.scrollLeftVel*e),this.constrainScrollVel(),this.scrollTopVel||this.scrollLeftVel||this.endAutoScroll()},endAutoScroll:function(){this.scrollIntervalId&&(clearInterval(this.scrollIntervalId),this.scrollIntervalId=null,this.handleScrollEnd())},handleDebouncedScroll:function(){this.scrollIntervalId||this.handleScrollEnd()},handleScrollEnd:function(){}});var re=ie.extend({component:null,origHit:null,hit:null,coordAdjust:null,constructor:function(t,e){ie.call(this,e),this.component=t},handleInteractionStart:function(t){var e,n,i,r=this.subjectEl;this.component.hitsNeeded(),this.computeScrollBounds(),t?(n={left:E(t),top:b(t)},i=n,r&&(e=h(r),i=R(i,e)),this.origHit=this.queryHit(i.left,i.top),r&&this.options.subjectCenter&&(this.origHit&&(e=x(this.origHit,e)||e),i=I(e)),this.coordAdjust=k(i,n)):(this.origHit=null,this.coordAdjust=null),ie.prototype.handleInteractionStart.apply(this,arguments)},handleDragStart:function(t){var e;ie.prototype.handleDragStart.apply(this,arguments),e=this.queryHit(E(t),b(t)),e&&this.handleHitOver(e)},handleDrag:function(t,e,n){var i;ie.prototype.handleDrag.apply(this,arguments),i=this.queryHit(E(n),b(n)),pt(i,this.hit)||(this.hit&&this.handleHitOut(),i&&this.handleHitOver(i))},handleDragEnd:function(){this.handleHitDone(),ie.prototype.handleDragEnd.apply(this,arguments)},handleHitOver:function(t){var e=pt(t,this.origHit);this.hit=t,this.trigger("hitOver",this.hit,e,this.origHit)},handleHitOut:function(){this.hit&&(this.trigger("hitOut",this.hit),this.handleHitDone(),this.hit=null)},handleHitDone:function(){this.hit&&this.trigger("hitDone",this.hit)},handleInteractionEnd:function(){ie.prototype.handleInteractionEnd.apply(this,arguments),this.origHit=null,this.hit=null,this.component.hitsNotNeeded()},handleScrollEnd:function(){ie.prototype.handleScrollEnd.apply(this,arguments),this.isDragging&&(this.component.releaseHits(),this.component.prepareHits())},queryHit:function(t,e){return this.coordAdjust&&(t+=this.coordAdjust.left,e+=this.coordAdjust.top),this.component.queryHit(t,e)}});Ot.touchMouseIgnoreWait=500;var se=ct.extend(te,Jt,{isTouching:!1,mouseIgnoreDepth:0,handleScrollProxy:null,bind:function(){var e=this;this.listenTo(t(document),{touchstart:this.handleTouchStart,touchcancel:this.handleTouchCancel,touchend:this.handleTouchEnd,mousedown:this.handleMouseDown,mousemove:this.handleMouseMove,mouseup:this.handleMouseUp,click:this.handleClick,selectstart:this.handleSelectStart,contextmenu:this.handleContextMenu}),window.addEventListener("touchmove",this.handleTouchMoveProxy=function(n){e.handleTouchMove(t.Event(n))},{passive:!1}),window.addEventListener("scroll",this.handleScrollProxy=function(n){e.handleScroll(t.Event(n))},!0)},unbind:function(){this.stopListeningTo(t(document)),window.removeEventListener("touchmove",this.handleTouchMoveProxy),window.removeEventListener("scroll",this.handleScrollProxy,!0)},handleTouchStart:function(t){this.stopTouch(t,!0),this.isTouching=!0,this.trigger("touchstart",t)},handleTouchMove:function(t){this.isTouching&&this.trigger("touchmove",t)},handleTouchCancel:function(t){this.isTouching&&(this.trigger("touchcancel",t),this.stopTouch(t))},handleTouchEnd:function(t){this.stopTouch(t)},handleMouseDown:function(t){this.shouldIgnoreMouse()||this.trigger("mousedown",t)},handleMouseMove:function(t){this.shouldIgnoreMouse()||this.trigger("mousemove",t)},handleMouseUp:function(t){this.shouldIgnoreMouse()||this.trigger("mouseup",t)},handleClick:function(t){this.shouldIgnoreMouse()||this.trigger("click",t)},handleSelectStart:function(t){this.trigger("selectstart",t)},handleContextMenu:function(t){this.trigger("contextmenu",t)},handleScroll:function(t){this.trigger("scroll",t)},stopTouch:function(t,e){this.isTouching&&(this.isTouching=!1,this.trigger("touchend",t),e||this.startTouchMouseIgnore())},startTouchMouseIgnore:function(){var t=this,e=Ot.touchMouseIgnoreWait;e&&(this.mouseIgnoreDepth++,setTimeout(function(){t.mouseIgnoreDepth--},e))},shouldIgnoreMouse:function(){return this.isTouching||Boolean(this.mouseIgnoreDepth)}});!function(){var t=null,e=0;se.get=function(){return t||(t=new se,t.bind()),t},se.needed=function(){se.get(),e++},se.unneeded=function(){e--,e||(t.unbind(),t=null)}}();var oe=ct.extend(te,{options:null,sourceEl:null,el:null,parentEl:null,top0:null,left0:null,y0:null,x0:null,topDelta:null,leftDelta:null,isFollowing:!1,isHidden:!1,isAnimating:!1,constructor:function(e,n){this.options=n=n||{},this.sourceEl=e,this.parentEl=n.parentEl?t(n.parentEl):e.parent()},start:function(e){this.isFollowing||(this.isFollowing=!0,this.y0=b(e),this.x0=E(e),this.topDelta=0,this.leftDelta=0,this.isHidden||this.updatePosition(),D(e)?this.listenTo(t(document),"touchmove",this.handleMove):this.listenTo(t(document),"mousemove",this.handleMove))},stop:function(e,n){function i(){r.isAnimating=!1,r.removeElement(),r.top0=r.left0=null,n&&n()}var r=this,s=this.options.revertDuration;this.isFollowing&&!this.isAnimating&&(this.isFollowing=!1,this.stopListeningTo(t(document)),e&&s&&!this.isHidden?(this.isAnimating=!0,this.el.animate({top:this.top0,left:this.left0},{duration:s,complete:i})):i())},getEl:function(){var t=this.el;return t||(t=this.el=this.sourceEl.clone().addClass(this.options.additionalClass||"").css({position:"absolute",visibility:"",display:this.isHidden?"none":"",margin:0,right:"auto",bottom:"auto",width:this.sourceEl.width(),height:this.sourceEl.height(),opacity:this.options.opacity||"",zIndex:this.options.zIndex}),t.addClass("fc-unselectable"),t.appendTo(this.parentEl)),t},removeElement:function(){this.el&&(this.el.remove(),this.el=null)},updatePosition:function(){var t,e;this.getEl(),null===this.top0&&(t=this.sourceEl.offset(),e=this.el.offsetParent().offset(),this.top0=t.top-e.top,this.left0=t.left-e.left),this.el.css({top:this.top0+this.topDelta,left:this.left0+this.leftDelta})},handleMove:function(t){this.topDelta=b(t)-this.y0,this.leftDelta=E(t)-this.x0,this.isHidden||this.updatePosition()},hide:function(){this.isHidden||(this.isHidden=!0,this.el&&this.el.hide())},show:function(){this.isHidden&&(this.isHidden=!1,this.updatePosition(),this.getEl().show())}}),le=Ot.Grid=ct.extend(te,{hasDayInteractions:!0,view:null,isRTL:null,start:null,end:null,el:null,elsByFill:null,eventTimeFormat:null,displayEventTime:null,displayEventEnd:null,minResizeDuration:null,largeUnit:null,dayClickListener:null,daySelectListener:null,segDragListener:null,segResizeListener:null,externalDragListener:null,constructor:function(t){this.view=t,this.isRTL=t.opt("isRTL"),this.elsByFill={},this.dayClickListener=this.buildDayClickListener(),this.daySelectListener=this.buildDaySelectListener()},computeEventTimeFormat:function(){return this.view.opt("smallTimeFormat")},computeDisplayEventTime:function(){return!0},computeDisplayEventEnd:function(){return!0},setRange:function(t){this.start=t.start.clone(),this.end=t.end.clone(),this.rangeUpdated(),this.processRangeOptions()},rangeUpdated:function(){},processRangeOptions:function(){var t,e,n=this.view;this.eventTimeFormat=n.opt("eventTimeFormat")||n.opt("timeFormat")||this.computeEventTimeFormat(),t=n.opt("displayEventTime"),null==t&&(t=this.computeDisplayEventTime()),e=n.opt("displayEventEnd"),null==e&&(e=this.computeDisplayEventEnd()),this.displayEventTime=t,this.displayEventEnd=e},spanToSegs:function(t){},diffDates:function(t,e){return this.largeUnit?O(t,e,this.largeUnit):z(t,e)},hitsNeededDepth:0,hitsNeeded:function(){this.hitsNeededDepth++||this.prepareHits()},hitsNotNeeded:function(){this.hitsNeededDepth&&!--this.hitsNeededDepth&&this.releaseHits()},prepareHits:function(){},releaseHits:function(){},queryHit:function(t,e){},getHitSpan:function(t){},getHitEl:function(t){},setElement:function(t){this.el=t,this.hasDayInteractions&&(T(t),this.bindDayHandler("touchstart",this.dayTouchStart),this.bindDayHandler("mousedown",this.dayMousedown)),this.bindSegHandlers(),this.bindGlobalHandlers()},bindDayHandler:function(e,n){var i=this;this.el.on(e,function(e){if(!t(e.target).is(i.segSelector+","+i.segSelector+" *,.fc-more,a[data-goto]"))return n.call(i,e)})},removeElement:function(){this.unbindGlobalHandlers(),this.clearDragListeners(),this.el.remove()},renderSkeleton:function(){},renderDates:function(){},unrenderDates:function(){},bindGlobalHandlers:function(){this.listenTo(t(document),{dragstart:this.externalDragStart,sortstart:this.externalDragStart})},unbindGlobalHandlers:function(){this.stopListeningTo(t(document))},dayMousedown:function(t){var e=this.view;e.isSelected||e.selectedEvent||(this.dayClickListener.startInteraction(t),e.opt("selectable")&&this.daySelectListener.startInteraction(t,{distance:e.opt("selectMinDistance")}))},dayTouchStart:function(t){var e,n=this.view;n.isSelected||n.selectedEvent||(e=n.opt("selectLongPressDelay"),null==e&&(e=n.opt("longPressDelay")),this.dayClickListener.startInteraction(t),n.opt("selectable")&&this.daySelectListener.startInteraction(t,{delay:e}))},buildDayClickListener:function(){var t,e=this,n=this.view,i=new re(this,{scroll:n.opt("dragScroll"),interactionStart:function(){t=i.origHit},hitOver:function(e,n,i){n||(t=null)},hitOut:function(){t=null},interactionEnd:function(i,r){!r&&t&&n.triggerDayClick(e.getHitSpan(t),e.getHitEl(t),i)}});return i.shouldCancelTouchScroll=!1,i.scrollAlwaysKills=!0,i},buildDaySelectListener:function(){var t,e=this,n=this.view,i=new re(this,{scroll:n.opt("dragScroll"),interactionStart:function(){t=null},dragStart:function(){n.unselect()},hitOver:function(n,i,r){r&&(t=e.computeSelection(e.getHitSpan(r),e.getHitSpan(n)),t?e.renderSelection(t):t===!1&&s())},hitOut:function(){t=null,e.unrenderSelection()},hitDone:function(){o()},interactionEnd:function(e,i){!i&&t&&n.reportSelection(t,e)}});return i},clearDragListeners:function(){this.dayClickListener.endInteraction(),this.daySelectListener.endInteraction(),this.segDragListener&&this.segDragListener.endInteraction(),this.segResizeListener&&this.segResizeListener.endInteraction(),this.externalDragListener&&this.externalDragListener.endInteraction()},renderEventLocationHelper:function(t,e){var n=this.fabricateHelperEvent(t,e);return this.renderHelper(n,e)},fabricateHelperEvent:function(t,e){var n=e?Z(e.event):{};return n.start=t.start.clone(),n.end=t.end?t.end.clone():null,n.allDay=null,this.view.calendar.normalizeEventDates(n),n.className=(n.className||[]).concat("fc-helper"),e||(n.editable=!1),n},renderHelper:function(t,e){},unrenderHelper:function(){},renderSelection:function(t){this.renderHighlight(t)},unrenderSelection:function(){this.unrenderHighlight()},computeSelection:function(t,e){var n=this.computeSelectionSpan(t,e);return!(n&&!this.view.calendar.isSelectionSpanAllowed(n))&&n},computeSelectionSpan:function(t,e){var n=[t.start,t.end,e.start,e.end];return n.sort(st),{start:n[0].clone(),end:n[3].clone()}},renderHighlight:function(t){this.renderFill("highlight",this.spanToSegs(t))},unrenderHighlight:function(){this.unrenderFill("highlight")},highlightSegClasses:function(){return["fc-highlight"]},renderBusinessHours:function(){},unrenderBusinessHours:function(){},getNowIndicatorUnit:function(){},renderNowIndicator:function(t){},unrenderNowIndicator:function(){},renderFill:function(t,e){},unrenderFill:function(t){var e=this.elsByFill[t];e&&(e.remove(),delete this.elsByFill[t])},renderFillSegEls:function(e,n){var i,r=this,s=this[e+"SegEl"],o="",l=[];if(n.length){for(i=0;i"},getDayClasses:function(t,e){var n=this.view,i=n.calendar.getNow(),r=["fc-"+_t[t.day()]];return 1==n.intervalDuration.as("months")&&t.month()!=n.intervalStart.month()&&r.push("fc-other-month"),t.isSame(i,"day")?(r.push("fc-today"),e!==!0&&r.push(n.highlightStateClass)):t *",mousedOverSeg:null,isDraggingSeg:!1,isResizingSeg:!1,isDraggingExternal:!1,segs:null,renderEvents:function(t){var e,n=[],i=[];for(e=0;el&&o.push({start:l,end:n.start}),l=n.end;return l=e.length?e[e.length-1]+1:e[n]},computeColHeadFormat:function(){return this.rowCnt>1||this.colCnt>10?"ddd":this.colCnt>1?this.view.opt("dayOfMonthFormat"):"dddd"},sliceRangeByRow:function(t){var e,n,i,r,s,o=this.daysPerRow,l=this.view.computeDayRange(t),a=this.getDateDayIndex(l.start),u=this.getDateDayIndex(l.end.clone().subtract(1,"days")),c=[];for(e=0;e'+this.renderHeadTrHtml()+"
        "},renderHeadIntroHtml:function(){return this.renderIntroHtml()},renderHeadTrHtml:function(){return""+(this.isRTL?"":this.renderHeadIntroHtml())+this.renderHeadDateCellsHtml()+(this.isRTL?this.renderHeadIntroHtml():"")+""},renderHeadDateCellsHtml:function(){var t,e,n=[];for(t=0;t1?' colspan="'+e+'"':"")+(n?" "+n:"")+">"+i.buildGotoAnchorHtml({date:t,forceOff:this.rowCnt>1||1===this.colCnt},tt(t.format(this.colHeadFormat)))+""},renderBgTrHtml:function(t){return""+(this.isRTL?"":this.renderBgIntroHtml(t))+this.renderBgCellsHtml(t)+(this.isRTL?this.renderBgIntroHtml(t):"")+""},renderBgIntroHtml:function(t){return this.renderIntroHtml()},renderBgCellsHtml:function(t){var e,n,i=[];for(e=0;e"},renderIntroHtml:function(){},bookendCells:function(t){var e=this.renderIntroHtml();e&&(this.isRTL?t.append(e):t.prepend(e))}},ue=Ot.DayGrid=le.extend(ae,{numbersVisible:!1,bottomCoordPadding:0,rowEls:null,cellEls:null,helperEls:null,rowCoordCache:null,colCoordCache:null,renderDates:function(t){var e,n,i=this.view,r=this.rowCnt,s=this.colCnt,o="";for(e=0;e
        '+this.renderBgTrHtml(t)+'
        '+(this.numbersVisible?""+this.renderNumberTrHtml(t)+"":"")+"
        "},renderNumberTrHtml:function(t){return""+(this.isRTL?"":this.renderNumberIntroHtml(t))+this.renderNumberCellsHtml(t)+(this.isRTL?this.renderNumberIntroHtml(t):"")+""},renderNumberIntroHtml:function(t){return this.renderIntroHtml()},renderNumberCellsHtml:function(t){var e,n,i=[];for(e=0;e',this.view.cellWeekNumbersVisible&&t.day()==n&&(i+=this.view.buildGotoAnchorHtml({date:t,type:"week"},{class:"fc-week-number"},t.format("w"))),this.view.dayNumbersVisible&&(i+=this.view.buildGotoAnchorHtml(t,{class:"fc-day-number"},t.date())),i+=""):""},computeEventTimeFormat:function(){return this.view.opt("extraSmallTimeFormat")},computeDisplayEventEnd:function(){return 1==this.colCnt},rangeUpdated:function(){this.updateDayTable()},spanToSegs:function(t){var e,n,i=this.sliceRangeByRow(t);for(e=0;e');o=n&&n.row===e?n.el.position().top:l.find(".fc-content-skeleton tbody").position().top,a.css("top",o).find("table").append(i[e].tbodyEl),l.append(a),r.push(a[0])}),this.helperEls=t(r)},unrenderHelper:function(){this.helperEls&&(this.helperEls.remove(),this.helperEls=null)},fillSegTag:"td",renderFill:function(e,n,i){var r,s,o,l=[];for(n=this.renderFillSegEls(e,n),r=0;r
        '),s=r.find("tr"),l>0&&s.append(''),s.append(n.el.attr("colspan",a-l)),a'),this.bookendCells(s),r}});ue.mixin({rowStructs:null,unrenderEvents:function(){this.removeSegPopover(),le.prototype.unrenderEvents.apply(this,arguments)},getEventSegs:function(){return le.prototype.getEventSegs.call(this).concat(this.popoverSegs||[])},renderBgSegs:function(e){var n=t.grep(e,function(t){return t.event.allDay});return le.prototype.renderBgSegs.call(this,n)},renderFgSegs:function(e){var n;return e=this.renderFgSegEls(e),n=this.rowStructs=this.renderSegRows(e),this.rowEls.each(function(e,i){t(i).find(".fc-content-skeleton > table").append(n[e].tbodyEl)}),e},unrenderFgSegs:function(){for(var t,e=this.rowStructs||[];t=e.pop();)t.tbodyEl.remove();this.rowStructs=null},renderSegRows:function(t){var e,n,i=[];for(e=this.groupSegRows(t),n=0;n'+tt(n)+"")),i=''+(tt(s.title||"")||" ")+"",'
        '+(this.isRTL?i+" "+d:d+" "+i)+"
        "+(l?'
        ':"")+(a?'
        ':"")+""},renderSegRow:function(e,n){function i(e){for(;o"),l.append(c)),v[r][o]=c,m[r][o]=c,o++}var r,s,o,l,a,u,c,d=this.colCnt,h=this.buildSegLevels(n),f=Math.max(1,h.length),g=t(""),p=[],v=[],m=[];for(r=0;r"),p.push([]),v.push([]),m.push([]),s)for(a=0;a').append(u.el),u.leftCol!=u.rightCol?c.attr("colspan",u.rightCol-u.leftCol+1):m[r][o]=c;o<=u.rightCol;)v[r][o]=c,p[r][o]=u,o++;l.append(c)}i(d),this.bookendCells(l),g.append(l)}return{row:e,tbodyEl:g,cellMatrix:v,segMatrix:p,segLevels:h,segs:n}},buildSegLevels:function(t){var e,n,i,r=[];for(this.sortEventSegs(t),e=0;e td > :first-child").each(n),r.position().top+s>l)return i;return!1},limitRow:function(e,n){function i(i){for(;b").append(y),h.append(m),E.push(m[0])),b++}var r,s,o,l,a,u,c,d,h,f,g,p,v,m,y,S=this,w=this.rowStructs[e],E=[],b=0;if(n&&n').attr("rowspan",f),u=d[p],y=this.renderMoreLink(e,a.leftCol+p,[a].concat(u)),m=t("
        ").append(y),v.append(m),g.push(v[0]),E.push(v[0]);h.addClass("fc-limited").after(t(g)),o.push(h[0])}}i(this.colCnt),w.moreEls=t(E),w.limitedEls=t(o)}},unlimitRow:function(t){var e=this.rowStructs[t];e.moreEls&&(e.moreEls.remove(),e.moreEls=null),e.limitedEls&&(e.limitedEls.removeClass("fc-limited"),e.limitedEls=null)},renderMoreLink:function(e,n,i){var r=this,s=this.view;return t('').text(this.getMoreLinkText(i.length)).on("click",function(o){var l=s.opt("eventLimitClick"),a=r.getCellDate(e,n),u=t(this),c=r.getCellEl(e,n),d=r.getCellSegs(e,n),h=r.resliceDaySegs(d,a),f=r.resliceDaySegs(i,a);"function"==typeof l&&(l=s.publiclyTrigger("eventLimitClick",null,{date:a,dayEl:c,moreEl:u,segs:h,hiddenSegs:f},o)),"popover"===l?r.showSegPopover(e,n,u,h):"string"==typeof l&&s.calendar.zoomTo(a,l)})},showSegPopover:function(t,e,n,i){var r,s,o=this,l=this.view,a=n.parent();r=1==this.rowCnt?l.el:this.rowEls.eq(t),s={className:"fc-more-popover",content:this.renderSegPopoverContent(t,e,i),parentEl:this.view.el,top:r.offset().top,autoHide:!0,viewportConstrain:l.opt("popoverViewportConstrain"),hide:function(){if(o.popoverSegs)for(var t,e=0;e'+tt(l)+'
        '),u=a.find(".fc-event-container");for(i=this.renderFgSegEls(i,!0),this.popoverSegs=i,r=0;r'+this.renderBgTrHtml(0)+'
        "},renderSlatRowHtml:function(){for(var t,n,i,r=this.view,s=this.isRTL,o="",l=e.duration(+this.minTime);l"+(n?""+tt(t.format(this.labelFormat))+"":"")+"",o+='"+(s?"":i)+''+(s?i:"")+"",l.add(this.slotDuration);return o},processOptions:function(){var n,i=this.view,r=i.opt("slotDuration"),s=i.opt("snapDuration");r=e.duration(r),s=s?e.duration(s):r,this.slotDuration=r,this.snapDuration=s,this.snapsPerSlot=r/s,this.minResizeDuration=s,this.minTime=e.duration(i.opt("minTime")),this.maxTime=e.duration(i.opt("maxTime")),n=i.opt("slotLabelFormat"),t.isArray(n)&&(n=n[n.length-1]),this.labelFormat=n||i.opt("smallTimeFormat"),n=i.opt("slotLabelInterval"),this.labelInterval=n?e.duration(n):this.computeLabelInterval(r)},computeLabelInterval:function(t){var n,i,r;for(n=Re.length-1;n>=0;n--)if(i=e.duration(Re[n]),r=_(i,t),ot(r)&&r>1)return i;return e.duration(t)},computeEventTimeFormat:function(){return this.view.opt("noMeridiemTimeFormat")},computeDisplayEventEnd:function(){return!0},prepareHits:function(){this.colCoordCache.build(),this.slatCoordCache.build()},releaseHits:function(){this.colCoordCache.clear()},queryHit:function(t,e){var n=this.snapsPerSlot,i=this.colCoordCache,r=this.slatCoordCache;if(i.isLeftInBounds(t)&&r.isTopInBounds(e)){var s=i.getHorizontalIndex(t),o=r.getVerticalIndex(e);if(null!=s&&null!=o){var l=r.getTopOffset(o),a=r.getHeight(o),u=(e-l)/a,c=Math.floor(u*n),d=o*n+c,h=l+c/n*a,f=l+(c+1)/n*a;return{col:s,snap:d,component:this,left:i.getLeftOffset(s),right:i.getRightOffset(s),top:h,bottom:f}}}},getHitSpan:function(t){var e,n=this.getCellDate(0,t.col),i=this.computeSnapTime(t.snap);return n.time(i),e=n.clone().add(this.snapDuration),{start:n,end:e}},getHitEl:function(t){return this.colEls.eq(t.col)},rangeUpdated:function(){this.updateDayTable()},computeSnapTime:function(t){return e.duration(this.minTime+this.snapDuration*t)},spanToSegs:function(t){var e,n=this.sliceRangeByTimes(t);for(e=0;e
        ').css("top",r).appendTo(this.colContainerEls.eq(i[n].col))[0]);i.length>0&&s.push(t('
        ').css("top",r).appendTo(this.el.find(".fc-content-skeleton"))[0]),this.nowIndicatorEls=t(s)},unrenderNowIndicator:function(){this.nowIndicatorEls&&(this.nowIndicatorEls.remove(),this.nowIndicatorEls=null)},renderSelection:function(t){this.view.opt("selectHelper")?this.renderEventLocationHelper(t):this.renderHighlight(t)},unrenderSelection:function(){this.unrenderHelper(),this.unrenderHighlight()},renderHighlight:function(t){this.renderHighlightSegs(this.spanToSegs(t))},unrenderHighlight:function(){this.unrenderHighlightSegs()}});ce.mixin({colContainerEls:null,fgContainerEls:null,bgContainerEls:null,helperContainerEls:null,highlightContainerEls:null,businessContainerEls:null,fgSegs:null,bgSegs:null,helperSegs:null,highlightSegs:null,businessSegs:null,renderContentSkeleton:function(){var e,n,i="";for(e=0;e
        ';n=t('
        '+i+"
        "),this.colContainerEls=n.find(".fc-content-col"),this.helperContainerEls=n.find(".fc-helper-container"),this.fgContainerEls=n.find(".fc-event-container:not(.fc-helper-container)"),this.bgContainerEls=n.find(".fc-bgevent-container"),this.highlightContainerEls=n.find(".fc-highlight-container"),this.businessContainerEls=n.find(".fc-business-container"),this.bookendCells(n.find("tr")),this.el.append(n)},renderFgSegs:function(t){return t=this.renderFgSegsIntoContainers(t,this.fgContainerEls),this.fgSegs=t,t},unrenderFgSegs:function(){this.unrenderNamedSegs("fgSegs")},renderHelperSegs:function(e,n){var i,r,s,o=[];for(e=this.renderFgSegsIntoContainers(e,this.helperContainerEls),i=0;i
        '+(n?'
        '+tt(n)+"
        ":"")+(o.title?'
        '+tt(o.title)+"
        ":"")+'
        '+(u?'
        ':"")+""},updateSegVerticals:function(t){this.computeSegVerticals(t),this.assignSegVerticals(t)},computeSegVerticals:function(t){var e,n;for(e=0;e1?"ll":"LL"},formatRange:function(t,e,n){var i=t.end;return i.hasTime()||(i=i.clone().subtract(1)),Xt(t.start,i,e,n,this.opt("isRTL"))},getAllDayHtml:function(){return this.opt("allDayHtml")||tt(this.opt("allDayText"))},buildGotoAnchorHtml:function(e,n,i){var r,s,o,l;return t.isPlainObject(e)?(r=e.date,s=e.type,o=e.forceOff):r=e,r=Ot.moment(r),l={date:r.format("YYYY-MM-DD"),type:s||"day"},"string"==typeof n&&(i=n,n=null),n=n?" "+it(n):"",i=i||"",!o&&this.opt("navLinks")?"'+i+"":""+i+""},setElement:function(t){this.el=t,this.bindGlobalHandlers(),this.renderSkeleton()},removeElement:function(){this.unsetDate(),this.unrenderSkeleton(),this.unbindGlobalHandlers(),this.el.remove()},renderSkeleton:function(){},unrenderSkeleton:function(){},setDate:function(t){var e=this.isDateSet;this.isDateSet=!0,this.handleDate(t,e),this.trigger(e?"dateReset":"dateSet",t)},unsetDate:function(){this.isDateSet&&(this.isDateSet=!1,this.handleDateUnset(),this.trigger("dateUnset"))},handleDate:function(t,e){var n=this;this.unbindEvents(),this.requestDateRender(t).then(function(){n.bindEvents()})},handleDateUnset:function(){this.unbindEvents(),this.requestDateUnrender()},requestDateRender:function(t){var e=this;return this.dateRenderQueue.add(function(){return e.executeDateRender(t)})},requestDateUnrender:function(){var t=this;return this.dateRenderQueue.add(function(){return t.executeDateUnrender()})},executeDateRender:function(t){var e=this;return t?this.captureInitialScroll():this.captureScroll(),this.freezeHeight(),this.executeDateUnrender().then(function(){t&&e.setRange(e.computeRange(t)),e.render&&e.render(),e.renderDates(),e.updateSize(),e.renderBusinessHours(),e.startNowIndicator(),e.thawHeight(),e.releaseScroll(),e.isDateRendered=!0,e.onDateRender(),e.trigger("dateRender")})},executeDateUnrender:function(){var t=this;return t.isDateRendered?this.requestEventsUnrender().then(function(){t.unselect(),t.stopNowIndicator(),t.triggerUnrender(),t.unrenderBusinessHours(),t.unrenderDates(),t.destroy&&t.destroy(),t.isDateRendered=!1,t.trigger("dateUnrender")}):ft.resolve()},onDateRender:function(){this.triggerRender()},renderDates:function(){},unrenderDates:function(){},triggerRender:function(){this.publiclyTrigger("viewRender",this,this,this.el)},triggerUnrender:function(){this.publiclyTrigger("viewDestroy",this,this,this.el)},bindGlobalHandlers:function(){this.listenTo(se.get(),{touchstart:this.processUnselect,mousedown:this.handleDocumentMousedown})},unbindGlobalHandlers:function(){this.stopListeningTo(se.get())},initThemingProps:function(){var t=this.opt("theme")?"ui":"fc";this.widgetHeaderClass=t+"-widget-header",this.widgetContentClass=t+"-widget-content",this.highlightStateClass=t+"-state-highlight"},renderBusinessHours:function(){},unrenderBusinessHours:function(){},startNowIndicator:function(){var t,n,i,r=this;this.opt("nowIndicator")&&(t=this.getNowIndicatorUnit(),t&&(n=lt(this,"updateNowIndicator"),this.initialNowDate=this.calendar.getNow(),this.initialNowQueriedMs=+new Date,this.renderNowIndicator(this.initialNowDate),this.isNowIndicatorRendered=!0,i=this.initialNowDate.clone().startOf(t).add(1,t)-this.initialNowDate,this.nowIndicatorTimeoutID=setTimeout(function(){r.nowIndicatorTimeoutID=null,n(),i=+e.duration(1,t),i=Math.max(100,i),r.nowIndicatorIntervalID=setInterval(n,i)},i)))},updateNowIndicator:function(){this.isNowIndicatorRendered&&(this.unrenderNowIndicator(),this.renderNowIndicator(this.initialNowDate.clone().add(new Date-this.initialNowQueriedMs)))},stopNowIndicator:function(){this.isNowIndicatorRendered&&(this.nowIndicatorTimeoutID&&(clearTimeout(this.nowIndicatorTimeoutID),this.nowIndicatorTimeoutID=null),this.nowIndicatorIntervalID&&(clearTimeout(this.nowIndicatorIntervalID),this.nowIndicatorIntervalID=null),this.unrenderNowIndicator(),this.isNowIndicatorRendered=!1)},getNowIndicatorUnit:function(){},renderNowIndicator:function(t){},unrenderNowIndicator:function(){},updateSize:function(t){t&&this.captureScroll(),this.updateHeight(t),this.updateWidth(t),this.updateNowIndicator(),t&&this.releaseScroll()},updateWidth:function(t){},updateHeight:function(t){var e=this.calendar;this.setHeight(e.getSuggestedViewHeight(),e.isHeightAuto())},setHeight:function(t,e){},capturedScroll:null,capturedScrollDepth:0,captureScroll:function(){return!this.capturedScrollDepth++&&(this.capturedScroll=this.isDateRendered?this.queryScroll():{},!0)},captureInitialScroll:function(e){this.captureScroll()&&(this.capturedScroll.isInitial=!0,e?t.extend(this.capturedScroll,e):this.capturedScroll.isComputed=!0)},releaseScroll:function(){var e=this.capturedScroll,n=this.discardScroll();e.isComputed&&(n?t.extend(e,this.computeInitialScroll()):e=null),e&&(e.isInitial?this.hardSetScroll(e):this.setScroll(e))},discardScroll:function(){return!--this.capturedScrollDepth&&(this.capturedScroll=null,!0)},computeInitialScroll:function(){return{}},queryScroll:function(){return{}},hardSetScroll:function(t){var e=this,n=function(){e.setScroll(t)};n(),setTimeout(n,0)},setScroll:function(t){},freezeHeight:function(){this.calendar.freezeContentHeight()},thawHeight:function(){this.calendar.thawContentHeight()},bindEvents:function(){var t=this;this.isEventsBound||(this.isEventsBound=!0,this.rejectOn("eventsUnbind",this.requestEvents()).then(function(e){t.listenTo(t.calendar,"eventsReset",t.setEvents),t.setEvents(e)}))},unbindEvents:function(){this.isEventsBound&&(this.isEventsBound=!1,this.stopListeningTo(this.calendar,"eventsReset"),this.unsetEvents(),this.trigger("eventsUnbind"))},setEvents:function(t){var e=this.isEventSet;this.isEventsSet=!0,this.handleEvents(t,e),this.trigger(e?"eventsReset":"eventsSet",t)},unsetEvents:function(){this.isEventsSet&&(this.isEventsSet=!1,this.handleEventsUnset(),this.trigger("eventsUnset"))},whenEventsSet:function(){var t=this;return this.isEventsSet?ft.resolve(this.getCurrentEvents()):new ft(function(e){t.one("eventsSet",e)})},handleEvents:function(t,e){this.requestEventsRender(t)},handleEventsUnset:function(){this.requestEventsUnrender()},requestEventsRender:function(t){var e=this;return this.eventRenderQueue.add(function(){return e.executeEventsRender(t)})},requestEventsUnrender:function(){var t=this;return this.isEventsRendered?this.eventRenderQueue.addQuickly(function(){return t.executeEventsUnrender()}):ft.resolve()},requestCurrentEventsRender:function(){return this.isEventsSet?void this.requestEventsRender(this.getCurrentEvents()):ft.reject()},executeEventsRender:function(t){var e=this;return this.captureScroll(),this.freezeHeight(),this.executeEventsUnrender().then(function(){e.renderEvents(t),e.thawHeight(),e.releaseScroll(),e.isEventsRendered=!0,e.onEventsRender(),e.trigger("eventsRender")})},executeEventsUnrender:function(){return this.isEventsRendered&&(this.onBeforeEventsUnrender(),this.captureScroll(),this.freezeHeight(),this.destroyEvents&&this.destroyEvents(),this.unrenderEvents(),this.thawHeight(),this.releaseScroll(),this.isEventsRendered=!1,this.trigger("eventsUnrender")),ft.resolve()},onEventsRender:function(){this.renderedEventSegEach(function(t){this.publiclyTrigger("eventAfterRender",t.event,t.event,t.el)}),this.publiclyTrigger("eventAfterAllRender")},onBeforeEventsUnrender:function(){this.renderedEventSegEach(function(t){this.publiclyTrigger("eventDestroy",t.event,t.event,t.el)})},renderEvents:function(t){},unrenderEvents:function(){},requestEvents:function(){return this.calendar.requestEvents(this.start,this.end)},getCurrentEvents:function(){return this.calendar.getPrunedEventCache()},resolveEventEl:function(e,n){var i=this.publiclyTrigger("eventRender",e,e,n);return i===!1?n=null:i&&i!==!0&&(n=t(i)),n},showEvent:function(t){this.renderedEventSegEach(function(t){t.el.css("visibility","")},t)},hideEvent:function(t){this.renderedEventSegEach(function(t){t.el.css("visibility","hidden")},t)},renderedEventSegEach:function(t,e){var n,i=this.getEventSegs();for(n=0;n=this.nextDayThreshold&&r.add(1,"days")),(!i||r<=n)&&(r=n.clone().add(1,"days")),{start:n,end:r}},isMultiDayEvent:function(t){var e=this.computeDayRange(t);return e.end.diff(e.start,"days")>1}}),he=Ot.Scroller=ct.extend({el:null,scrollEl:null,overflowX:null,overflowY:null,constructor:function(t){t=t||{},this.overflowX=t.overflowX||t.overflow||"auto",this.overflowY=t.overflowY||t.overflow||"auto"},render:function(){this.el=this.renderEl(),this.applyOverflow()},renderEl:function(){return this.scrollEl=t('
        ')},clear:function(){this.setHeight("auto"),this.applyOverflow()},destroy:function(){this.el.remove()},applyOverflow:function(){this.scrollEl.css({"overflow-x":this.overflowX,"overflow-y":this.overflowY})},lockOverflow:function(t){var e=this.overflowX,n=this.overflowY;t=t||this.getScrollbarWidths(),"auto"===e&&(e=t.top||t.bottom||this.scrollEl[0].scrollWidth-1>this.scrollEl[0].clientWidth?"scroll":"hidden"),"auto"===n&&(n=t.left||t.right||this.scrollEl[0].scrollHeight-1>this.scrollEl[0].clientHeight?"scroll":"hidden"),this.scrollEl.css({"overflow-x":e,"overflow-y":n})},setHeight:function(t){this.scrollEl.height(t)},getScrollTop:function(){return this.scrollEl.scrollTop()},setScrollTop:function(t){this.scrollEl.scrollTop(t)},getClientWidth:function(){return this.scrollEl[0].clientWidth},getClientHeight:function(){return this.scrollEl[0].clientHeight},getScrollbarWidths:function(){return p(this.scrollEl)}});Lt.prototype.proxyCall=function(t){var e=Array.prototype.slice.call(arguments,1),n=[];return this.items.forEach(function(i){n.push(i[t].apply(i,e))}),n};var fe=Ot.Calendar=ct.extend({dirDefaults:null,localeDefaults:null,overrides:null,dynamicOverrides:null,options:null,viewSpecCache:null,view:null,header:null,footer:null,loadingLevel:0,constructor:Bt,initialize:function(){},populateOptionsHash:function(){var t,e,i,r;t=J(this.dynamicOverrides.locale,this.overrides.locale),e=ge[t],e||(t=fe.defaults.locale,e=ge[t]||{}),i=J(this.dynamicOverrides.isRTL,this.overrides.isRTL,e.isRTL,fe.defaults.isRTL),r=i?fe.rtlDefaults:{},this.dirDefaults=r,this.localeDefaults=e,this.options=n([fe.defaults,r,e,this.overrides,this.dynamicOverrides]),Nt(this.options)},getViewSpec:function(t){var e=this.viewSpecCache;return e[t]||(e[t]=this.buildViewSpec(t))},getUnitViewSpec:function(e){var n,i,r;if(t.inArray(e,Yt)!=-1)for(n=this.header.getViewsWithButtons(),t.each(Ot.views,function(t){n.push(t)}),i=0;i=n&&e.end<=i},fe.prototype.getPeerEvents=function(t,e){var n,i,r=this.getEventCache(),s=[];for(n=0;nn};var we={id:"_fcBusinessHours",start:"09:00",end:"17:00",dow:[1,2,3,4,5],rendering:"inverse-background"};fe.prototype.getCurrentBusinessHourEvents=function(t){return this.computeBusinessHourEvents(t,this.options.businessHours)},fe.prototype.computeBusinessHourEvents=function(e,n){return n===!0?this.expandBusinessHourEvents(e,[{}]):t.isPlainObject(n)?this.expandBusinessHourEvents(e,[n]):t.isArray(n)?this.expandBusinessHourEvents(e,n,!0):[]},fe.prototype.expandBusinessHourEvents=function(e,n,i){var r,s,o=this.getView(),l=[];for(r=0;r1,this.opt("weekNumbers")&&(this.opt("weekNumbersWithinDays")?(this.cellWeekNumbersVisible=!0,this.colWeekNumbersVisible=!1):(this.cellWeekNumbersVisible=!1,this.colWeekNumbersVisible=!0)),this.dayGrid.numbersVisible=this.dayNumbersVisible||this.cellWeekNumbersVisible||this.colWeekNumbersVisible,this.el.addClass("fc-basic-view").html(this.renderSkeletonHtml()),this.renderHead(),this.scroller.render();var e=this.scroller.el.addClass("fc-day-grid-container"),n=t('
        ').appendTo(e);this.el.find(".fc-body > tr > td").append(e),this.dayGrid.setElement(n),this.dayGrid.renderDates(this.hasRigidRows())},renderHead:function(){this.headContainerEl=this.el.find(".fc-head-container").html(this.dayGrid.renderHeadHtml()),this.headRowEl=this.headContainerEl.find(".fc-row")},unrenderDates:function(){this.dayGrid.unrenderDates(),this.dayGrid.removeElement(),this.scroller.destroy()},renderBusinessHours:function(){this.dayGrid.renderBusinessHours()},unrenderBusinessHours:function(){this.dayGrid.unrenderBusinessHours()},renderSkeletonHtml:function(){return'
        '},weekNumberStyleAttr:function(){return null!==this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},hasRigidRows:function(){var t=this.opt("eventLimit");return t&&"number"!=typeof t},updateWidth:function(){this.colWeekNumbersVisible&&(this.weekNumberWidth=u(this.el.find(".fc-week-number")))},setHeight:function(t,e){var n,s,o=this.opt("eventLimit");this.scroller.clear(),r(this.headRowEl),this.dayGrid.removeSegPopover(),o&&"number"==typeof o&&this.dayGrid.limitRows(o),n=this.computeScrollerHeight(t),this.setGridHeight(n,e),o&&"number"!=typeof o&&this.dayGrid.limitRows(o),e||(this.scroller.setHeight(n),s=this.scroller.getScrollbarWidths(),(s.left||s.right)&&(i(this.headRowEl,s),n=this.computeScrollerHeight(t),this.scroller.setHeight(n)),this.scroller.lockOverflow(s))},computeScrollerHeight:function(t){return t-c(this.el,this.scroller.el)},setGridHeight:function(t,e){e?a(this.dayGrid.rowEls):l(this.dayGrid.rowEls,t,!0)},computeInitialScroll:function(){return{top:0}},queryScroll:function(){return{top:this.scroller.getScrollTop()}},setScroll:function(t){this.scroller.setScrollTop(t.top)},hitsNeeded:function(){this.dayGrid.hitsNeeded()},hitsNotNeeded:function(){this.dayGrid.hitsNotNeeded()},prepareHits:function(){this.dayGrid.prepareHits()},releaseHits:function(){this.dayGrid.releaseHits()},queryHit:function(t,e){return this.dayGrid.queryHit(t,e)},getHitSpan:function(t){return this.dayGrid.getHitSpan(t)},getHitEl:function(t){return this.dayGrid.getHitEl(t)},renderEvents:function(t){this.dayGrid.renderEvents(t),this.updateHeight()},getEventSegs:function(){return this.dayGrid.getEventSegs()},unrenderEvents:function(){this.dayGrid.unrenderEvents()},renderDrag:function(t,e){return this.dayGrid.renderDrag(t,e)},unrenderDrag:function(){this.dayGrid.unrenderDrag()},renderSelection:function(t){this.dayGrid.renderSelection(t)},unrenderSelection:function(){this.dayGrid.unrenderSelection()}}),be={renderHeadIntroHtml:function(){var t=this.view;return t.colWeekNumbersVisible?'"+tt(t.opt("weekNumberTitle"))+"":""},renderNumberIntroHtml:function(t){var e=this.view,n=this.getCellDate(t,0);return e.colWeekNumbersVisible?'"+e.buildGotoAnchorHtml({date:n,type:"week",forceOff:1===this.colCnt},n.format("w"))+"":""},renderBgIntroHtml:function(){var t=this.view;return t.colWeekNumbersVisible?'":""},renderIntroHtml:function(){var t=this.view;return t.colWeekNumbersVisible?'":""}},De=Ot.MonthView=Ee.extend({computeRange:function(t){var e,n=Ee.prototype.computeRange.call(this,t);return this.isFixedWeeks()&&(e=Math.ceil(n.end.diff(n.start,"weeks",!0)),n.end.add(6-e,"weeks")),n},setGridHeight:function(t,e){e&&(t*=this.rowCnt/6),l(this.dayGrid.rowEls,t,!e)},isFixedWeeks:function(){return this.opt("fixedWeekCount")}});At.basic={class:Ee},At.basicDay={type:"basic",duration:{days:1}},At.basicWeek={type:"basic",duration:{weeks:1}},At.month={class:De,duration:{months:1},defaults:{fixedWeekCount:!0}};var Te=Ot.AgendaView=de.extend({scroller:null,timeGridClass:ce,timeGrid:null,dayGridClass:ue,dayGrid:null,axisWidth:null,headContainerEl:null,noScrollRowEls:null,bottomRuleEl:null,initialize:function(){this.timeGrid=this.instantiateTimeGrid(),this.opt("allDaySlot")&&(this.dayGrid=this.instantiateDayGrid()),this.scroller=new he({overflowX:"hidden",overflowY:"auto"})},instantiateTimeGrid:function(){var t=this.timeGridClass.extend(Ce);return new t(this)},instantiateDayGrid:function(){var t=this.dayGridClass.extend(He);return new t(this)},setRange:function(t){de.prototype.setRange.call(this,t),this.timeGrid.setRange(t),this.dayGrid&&this.dayGrid.setRange(t)},renderDates:function(){this.el.addClass("fc-agenda-view").html(this.renderSkeletonHtml()),this.renderHead(),this.scroller.render();var e=this.scroller.el.addClass("fc-time-grid-container"),n=t('
        ').appendTo(e);this.el.find(".fc-body > tr > td").append(e),this.timeGrid.setElement(n),this.timeGrid.renderDates(),this.bottomRuleEl=t('
        ').appendTo(this.timeGrid.el),this.dayGrid&&(this.dayGrid.setElement(this.el.find(".fc-day-grid")),this.dayGrid.renderDates(),this.dayGrid.bottomCoordPadding=this.dayGrid.el.next("hr").outerHeight()),this.noScrollRowEls=this.el.find(".fc-row:not(.fc-scroller *)")},renderHead:function(){this.headContainerEl=this.el.find(".fc-head-container").html(this.timeGrid.renderHeadHtml())},unrenderDates:function(){this.timeGrid.unrenderDates(),this.timeGrid.removeElement(),this.dayGrid&&(this.dayGrid.unrenderDates(),this.dayGrid.removeElement()),this.scroller.destroy()},renderSkeletonHtml:function(){return'
        '+(this.dayGrid?'

        ':"")+"
        "},axisStyleAttr:function(){return null!==this.axisWidth?'style="width:'+this.axisWidth+'px"':""},renderBusinessHours:function(){this.timeGrid.renderBusinessHours(),this.dayGrid&&this.dayGrid.renderBusinessHours()},unrenderBusinessHours:function(){this.timeGrid.unrenderBusinessHours(),this.dayGrid&&this.dayGrid.unrenderBusinessHours()},getNowIndicatorUnit:function(){return this.timeGrid.getNowIndicatorUnit()},renderNowIndicator:function(t){this.timeGrid.renderNowIndicator(t)},unrenderNowIndicator:function(){this.timeGrid.unrenderNowIndicator()},updateSize:function(t){this.timeGrid.updateSize(t),de.prototype.updateSize.call(this,t)},updateWidth:function(){this.axisWidth=u(this.el.find(".fc-axis"))},setHeight:function(t,e){var n,s,o;this.bottomRuleEl.hide(),this.scroller.clear(),r(this.noScrollRowEls),this.dayGrid&&(this.dayGrid.removeSegPopover(),n=this.opt("eventLimit"),n&&"number"!=typeof n&&(n=xe),n&&this.dayGrid.limitRows(n)),e||(s=this.computeScrollerHeight(t),this.scroller.setHeight(s),o=this.scroller.getScrollbarWidths(),(o.left||o.right)&&(i(this.noScrollRowEls,o),s=this.computeScrollerHeight(t),this.scroller.setHeight(s)),this.scroller.lockOverflow(o),this.timeGrid.getTotalSlatHeight()"+e.buildGotoAnchorHtml({date:this.start,type:"week",forceOff:this.colCnt>1},tt(t))+""):'"},renderBgIntroHtml:function(){var t=this.view;return'"},renderIntroHtml:function(){var t=this.view;return'"}},He={renderBgIntroHtml:function(){var t=this.view;return'"+t.getAllDayHtml()+""},renderIntroHtml:function(){var t=this.view;return'"}},xe=5,Re=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}];At.agenda={class:Te,defaults:{allDaySlot:!0,slotDuration:"00:30:00",minTime:"00:00:00",maxTime:"24:00:00",slotEventOverlap:!0}},At.agendaDay={type:"agenda",duration:{days:1}},At.agendaWeek={type:"agenda",duration:{weeks:1}};var Ie=de.extend({grid:null,scroller:null,initialize:function(){this.grid=new ke(this),this.scroller=new he({overflowX:"hidden",overflowY:"auto"})},setRange:function(t){de.prototype.setRange.call(this,t),this.grid.setRange(t)},renderSkeleton:function(){this.el.addClass("fc-list-view "+this.widgetContentClass),this.scroller.render(),this.scroller.el.appendTo(this.el),this.grid.setElement(this.scroller.scrollEl)},unrenderSkeleton:function(){this.scroller.destroy()},setHeight:function(t,e){this.scroller.setHeight(this.computeScrollerHeight(t))},computeScrollerHeight:function(t){return t-c(this.el,this.scroller.el)},renderEvents:function(t){this.grid.renderEvents(t)},unrenderEvents:function(){this.grid.unrenderEvents()},isEventResizable:function(t){return!1},isEventDraggable:function(t){return!1}}),ke=le.extend({segSelector:".fc-list-item",hasDayInteractions:!1,spanToSegs:function(t){for(var e,n=this.view,i=n.start.clone().time(0),r=0,s=[];i
        '+tt(this.view.opt("noEventsMessage"))+"
        ")},renderSegList:function(e){var n,i,r,s=this.groupSegsByDay(e),o=t('
        '),l=o.find("tbody");for(n=0;n'+(n?e.buildGotoAnchorHtml(t,{class:"fc-list-heading-main"},tt(t.format(n))):"")+(i?e.buildGotoAnchorHtml(t,{class:"fc-list-heading-alt"},tt(t.format(i))):"")+""},fgSegHtml:function(t){var e,n=this.view,i=["fc-list-item"].concat(this.getSegCustomClasses(t)),r=this.getSegBackgroundColor(t),s=t.event,o=s.url;return e=s.allDay?n.getAllDayHtml():n.isMultiDayEvent(s)?t.isStart||t.isEnd?tt(this.getEventTimeText(t)):n.getAllDayHtml():tt(this.getEventTimeText(s)),o&&i.push("fc-has-url"),''+(this.displayEventTime?''+(e||"")+"":"")+'"+tt(t.event.title||"")+""}});return At.list={class:Ie,buttonTextKey:"list",defaults:{buttonText:"list",listDayFormat:"LL",noEventsMessage:"No events to display"}},At.listDay={type:"list",duration:{days:1},defaults:{listDayFormat:"dddd"}},At.listWeek={type:"list",duration:{weeks:1},defaults:{listDayFormat:"dddd",listDayAltFormat:"LL"}},At.listMonth={type:"list",duration:{month:1},defaults:{listDayAltFormat:"dddd"}},At.listYear={type:"list",duration:{year:1},defaults:{listDayAltFormat:"dddd"}},Ot}); \ No newline at end of file diff --git a/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.print.css b/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.print.css index a678c7fd..c92bdd9d 100644 --- a/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.print.css +++ b/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.print.css @@ -1,61 +1,208 @@ +/*! + * FullCalendar v3.2.0 Print Stylesheet + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw + */ + /* - * FullCalendar v1.5 Print Stylesheet - * * Include this stylesheet on your page to get a more printer-friendly calendar. * When including this stylesheet, use the media='print' attribute of the tag. * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css. - * - * Copyright (c) 2011 Adam Shaw - * Dual licensed under the MIT and GPL licenses, located in - * MIT-LICENSE.txt and GPL-LICENSE.txt respectively. - * - * Date: Sat Mar 19 18:59:37 2011 -0700 - * */ - - - /* Events ------------------------------------------------------*/ - -.fc-event-skin { - background: none !important; + +.fc { + max-width: 100% !important; +} + + +/* Global Event Restyling +--------------------------------------------------------------------------------------------------*/ + +.fc-event { + background: #fff !important; color: #000 !important; - } - -/* horizontal events */ - -.fc-event-hori { - border-width: 0 0 1px 0 !important; - border-bottom-style: dotted !important; - border-bottom-color: #000 !important; - padding: 1px 0 0 0 !important; - } - -.fc-event-hori .fc-event-inner { - border-width: 0 !important; - padding: 0 1px !important; - } - -/* vertical events */ - -.fc-event-vert { - border-width: 0 0 0 1px !important; - border-left-style: dotted !important; - border-left-color: #000 !important; - padding: 0 1px 0 0 !important; - } - -.fc-event-vert .fc-event-inner { - border-width: 0 !important; - padding: 1px 0 !important; - } - -.fc-event-bg { - display: none !important; - } - -.fc-event .ui-resizable-handle { + page-break-inside: avoid; +} + +.fc-event .fc-resizer { + display: none; +} + + +/* Table & Day-Row Restyling +--------------------------------------------------------------------------------------------------*/ + +.fc th, +.fc td, +.fc hr, +.fc thead, +.fc tbody, +.fc-row { + border-color: #ccc !important; + background: #fff !important; +} + +/* kill the overlaid, absolutely-positioned components */ +/* common... */ +.fc-bg, +.fc-bgevent-skeleton, +.fc-highlight-skeleton, +.fc-helper-skeleton, +/* for timegrid. within cells within table skeletons... */ +.fc-bgevent-container, +.fc-business-container, +.fc-highlight-container, +.fc-helper-container { + display: none; +} + +/* don't force a min-height on rows (for DayGrid) */ +.fc tbody .fc-row { + height: auto !important; /* undo height that JS set in distributeHeight */ + min-height: 0 !important; /* undo the min-height from each view's specific stylesheet */ +} + +.fc tbody .fc-row .fc-content-skeleton { + position: static; /* undo .fc-rigid */ + padding-bottom: 0 !important; /* use a more border-friendly method for this... */ +} + +.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td { /* only works in newer browsers */ + padding-bottom: 1em; /* ...gives space within the skeleton. also ensures min height in a way */ +} + +.fc tbody .fc-row .fc-content-skeleton table { + /* provides a min-height for the row, but only effective for IE, which exaggerates this value, + making it look more like 3em. for other browers, it will already be this tall */ + height: 1em; +} + + +/* Undo month-view event limiting. Display all events and hide the "more" links +--------------------------------------------------------------------------------------------------*/ + +.fc-more-cell, +.fc-more { display: none !important; - } - - +} + +.fc tr.fc-limited { + display: table-row !important; +} + +.fc td.fc-limited { + display: table-cell !important; +} + +.fc-popover { + display: none; /* never display the "more.." popover in print mode */ +} + + +/* TimeGrid Restyling +--------------------------------------------------------------------------------------------------*/ + +/* undo the min-height 100% trick used to fill the container's height */ +.fc-time-grid { + min-height: 0 !important; +} + +/* don't display the side axis at all ("all-day" and time cells) */ +.fc-agenda-view .fc-axis { + display: none; +} + +/* don't display the horizontal lines */ +.fc-slats, +.fc-time-grid hr { /* this hr is used when height is underused and needs to be filled */ + display: none !important; /* important overrides inline declaration */ +} + +/* let the container that holds the events be naturally positioned and create real height */ +.fc-time-grid .fc-content-skeleton { + position: static; +} + +/* in case there are no events, we still want some height */ +.fc-time-grid .fc-content-skeleton table { + height: 4em; +} + +/* kill the horizontal spacing made by the event container. event margins will be done below */ +.fc-time-grid .fc-event-container { + margin: 0 !important; +} + + +/* TimeGrid *Event* Restyling +--------------------------------------------------------------------------------------------------*/ + +/* naturally position events, vertically stacking them */ +.fc-time-grid .fc-event { + position: static !important; + margin: 3px 2px !important; +} + +/* for events that continue to a future day, give the bottom border back */ +.fc-time-grid .fc-event.fc-not-end { + border-bottom-width: 1px !important; +} + +/* indicate the event continues via "..." text */ +.fc-time-grid .fc-event.fc-not-end:after { + content: "..."; +} + +/* for events that are continuations from previous days, give the top border back */ +.fc-time-grid .fc-event.fc-not-start { + border-top-width: 1px !important; +} + +/* indicate the event is a continuation via "..." text */ +.fc-time-grid .fc-event.fc-not-start:before { + content: "..."; +} + +/* time */ + +/* undo a previous declaration and let the time text span to a second line */ +.fc-time-grid .fc-event .fc-time { + white-space: normal !important; +} + +/* hide the the time that is normally displayed... */ +.fc-time-grid .fc-event .fc-time span { + display: none; +} + +/* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */ +.fc-time-grid .fc-event .fc-time:after { + content: attr(data-full); +} + + +/* Vertical Scroller & Containers +--------------------------------------------------------------------------------------------------*/ + +/* kill the scrollbars and allow natural height */ +.fc-scroller, +.fc-day-grid-container, /* these divs might be assigned height, which we need to cleared */ +.fc-time-grid-container { /* */ + overflow: visible !important; + height: auto !important; +} + +/* kill the horizontal border/padding used to compensate for scrollbars */ +.fc-row { + border: 0 !important; + margin: 0 !important; +} + + +/* Button Controls +--------------------------------------------------------------------------------------------------*/ + +.fc-button-group, +.fc button { + display: none; /* don't display any button-related controls */ +} diff --git a/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.print.min.css b/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.print.min.css new file mode 100644 index 00000000..c193968d --- /dev/null +++ b/www/plugins-dist/organiseur/lib/fullcalendar/fullcalendar.print.min.css @@ -0,0 +1,5 @@ +/*! + * FullCalendar v3.2.0 Print Stylesheet + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw + */.fc-bg,.fc-bgevent-container,.fc-bgevent-skeleton,.fc-business-container,.fc-event .fc-resizer,.fc-helper-container,.fc-helper-skeleton,.fc-highlight-container,.fc-highlight-skeleton{display:none}.fc tbody .fc-row,.fc-time-grid{min-height:0!important}.fc-time-grid .fc-event.fc-not-end:after,.fc-time-grid .fc-event.fc-not-start:before{content:"..."}.fc{max-width:100%!important}.fc-event{background:#fff!important;color:#000!important;page-break-inside:avoid}.fc hr,.fc tbody,.fc td,.fc th,.fc thead,.fc-row{border-color:#ccc!important;background:#fff!important}.fc tbody .fc-row{height:auto!important}.fc tbody .fc-row .fc-content-skeleton{position:static;padding-bottom:0!important}.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td{padding-bottom:1em}.fc tbody .fc-row .fc-content-skeleton table{height:1em}.fc-more,.fc-more-cell{display:none!important}.fc tr.fc-limited{display:table-row!important}.fc td.fc-limited{display:table-cell!important}.fc-agenda-view .fc-axis,.fc-popover{display:none}.fc-slats,.fc-time-grid hr{display:none!important}.fc button,.fc-button-group,.fc-time-grid .fc-event .fc-time span{display:none}.fc-time-grid .fc-content-skeleton{position:static}.fc-time-grid .fc-content-skeleton table{height:4em}.fc-time-grid .fc-event-container{margin:0!important}.fc-time-grid .fc-event{position:static!important;margin:3px 2px!important}.fc-time-grid .fc-event.fc-not-end{border-bottom-width:1px!important}.fc-time-grid .fc-event.fc-not-start{border-top-width:1px!important}.fc-time-grid .fc-event .fc-time{white-space:normal!important}.fc-time-grid .fc-event .fc-time:after{content:attr(data-full)}.fc-day-grid-container,.fc-scroller,.fc-time-grid-container{overflow:visible!important;height:auto!important}.fc-row{border:0!important;margin:0!important} \ No newline at end of file diff --git a/www/plugins-dist/organiseur/lib/fullcalendar/gcal.js b/www/plugins-dist/organiseur/lib/fullcalendar/gcal.js index 076d3ef3..7e895337 100644 --- a/www/plugins-dist/organiseur/lib/fullcalendar/gcal.js +++ b/www/plugins-dist/organiseur/lib/fullcalendar/gcal.js @@ -1,112 +1,180 @@ -/* - * FullCalendar v1.5 Google Calendar Plugin - * - * Copyright (c) 2011 Adam Shaw - * Dual licensed under the MIT and GPL licenses, located in - * MIT-LICENSE.txt and GPL-LICENSE.txt respectively. - * - * Date: Sat Mar 19 18:59:37 2011 -0700 - * +/*! + * FullCalendar v3.2.0 Google Calendar Plugin + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw */ -(function($) { +(function(factory) { + if (typeof define === 'function' && define.amd) { + define([ 'jquery' ], factory); + } + else if (typeof exports === 'object') { // Node/CommonJS + module.exports = factory(require('jquery')); + } + else { + factory(jQuery); + } +})(function($) { -var fc = $.fullCalendar; -var formatDate = fc.formatDate; -var parseISO8601 = fc.parseISO8601; -var addDays = fc.addDays; -var applyAll = fc.applyAll; +var API_BASE = 'https://www.googleapis.com/calendar/v3/calendars'; +var FC = $.fullCalendar; +var applyAll = FC.applyAll; -fc.sourceNormalizers.push(function(sourceOptions) { - if (sourceOptions.dataType == 'gcal' || - sourceOptions.dataType === undefined && - (sourceOptions.url || '').match(/^(http|https):\/\/www.google.com\/calendar\/feeds\//)) { - sourceOptions.dataType = 'gcal'; - if (sourceOptions.editable === undefined) { - sourceOptions.editable = false; - } +FC.sourceNormalizers.push(function(sourceOptions) { + var googleCalendarId = sourceOptions.googleCalendarId; + var url = sourceOptions.url; + var match; + + // if the Google Calendar ID hasn't been explicitly defined + if (!googleCalendarId && url) { + + // detect if the ID was specified as a single string. + // will match calendars like "asdf1234@calendar.google.com" in addition to person email calendars. + if (/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(url)) { + googleCalendarId = url; } -}); + // try to scrape it out of a V1 or V3 API feed URL + else if ( + (match = /^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(url)) || + (match = /^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(url)) + ) { + googleCalendarId = decodeURIComponent(match[1]); + } + + if (googleCalendarId) { + sourceOptions.googleCalendarId = googleCalendarId; + } + } -fc.sourceFetchers.push(function(sourceOptions, start, end) { - if (sourceOptions.dataType == 'gcal') { - return transformOptions(sourceOptions, start, end); + if (googleCalendarId) { // is this a Google Calendar? + + // make each Google Calendar source uneditable by default + if (sourceOptions.editable == null) { + sourceOptions.editable = false; + } + + // We want removeEventSource to work, but it won't know about the googleCalendarId primitive. + // Shoehorn it into the url, which will function as the unique primitive. Won't cause side effects. + // This hack is obsolete since 2.2.3, but keep it so this plugin file is compatible with old versions. + sourceOptions.url = googleCalendarId; } }); -function transformOptions(sourceOptions, start, end) { +FC.sourceFetchers.push(function(sourceOptions, start, end, timezone) { + if (sourceOptions.googleCalendarId) { + return transformOptions(sourceOptions, start, end, timezone, this); // `this` is the calendar + } +}); + +function transformOptions(sourceOptions, start, end, timezone, calendar) { + var url = API_BASE + '/' + encodeURIComponent(sourceOptions.googleCalendarId) + '/events?callback=?'; // jsonp + var apiKey = sourceOptions.googleCalendarApiKey || calendar.options.googleCalendarApiKey; var success = sourceOptions.success; - var data = $.extend({}, sourceOptions.data || {}, { - 'start-min': formatDate(start, 'u'), - 'start-max': formatDate(end, 'u'), - 'singleevents': true, - 'max-results': 9999 - }); - - var ctz = sourceOptions.currentTimezone; - if (ctz) { - data.ctz = ctz = ctz.replace(' ', '_'); + var data; + var timezoneArg; // populated when a specific timezone. escaped to Google's liking + + function reportError(message, apiErrorObjs) { + var errorObjs = apiErrorObjs || [ { message: message } ]; // to be passed into error handlers + + // call error handlers + (sourceOptions.googleCalendarError || $.noop).apply(calendar, errorObjs); + (calendar.options.googleCalendarError || $.noop).apply(calendar, errorObjs); + + // print error to debug console + FC.warn.apply(null, [ message ].concat(apiErrorObjs || [])); } + if (!apiKey) { + reportError("Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/"); + return {}; // an empty source to use instead. won't fetch anything. + } + + // The API expects an ISO8601 datetime with a time and timezone part. + // Since the calendar's timezone offset isn't always known, request the date in UTC and pad it by a day on each + // side, guaranteeing we will receive all events in the desired range, albeit a superset. + // .utc() will set a zone and give it a 00:00:00 time. + if (!start.hasZone()) { + start = start.clone().utc().add(-1, 'day'); + } + if (!end.hasZone()) { + end = end.clone().utc().add(1, 'day'); + } + + // when sending timezone names to Google, only accepts underscores, not spaces + if (timezone && timezone != 'local') { + timezoneArg = timezone.replace(' ', '_'); + } + + data = $.extend({}, sourceOptions.data || {}, { + key: apiKey, + timeMin: start.format(), + timeMax: end.format(), + timeZone: timezoneArg, + singleEvents: true, + maxResults: 9999 + }); + return $.extend({}, sourceOptions, { - url: sourceOptions.url.replace(/\/basic$/, '/full') + '?alt=json-in-script&callback=?', - dataType: 'jsonp', + googleCalendarId: null, // prevents source-normalizing from happening again + url: url, data: data, - startParam: false, - endParam: false, + startParam: false, // `false` omits this parameter. we already included it above + endParam: false, // same + timezoneParam: false, // same success: function(data) { var events = []; - if (data.feed.entry) { - $.each(data.feed.entry, function(i, entry) { - var startStr = entry['gd$when'][0]['startTime']; - var start = parseISO8601(startStr, true); - var end = parseISO8601(entry['gd$when'][0]['endTime'], true); - var allDay = startStr.indexOf('T') == -1; - var url; - $.each(entry.link, function(i, link) { - if (link.type == 'text/html') { - url = link.href; - if (ctz) { - url += (url.indexOf('?') == -1 ? '?' : '&') + 'ctz=' + ctz; - } - } - }); - if (allDay) { - addDays(end, -1); // make inclusive + var successArgs; + var successRes; + + if (data.error) { + reportError('Google Calendar API: ' + data.error.message, data.error.errors); + } + else if (data.items) { + $.each(data.items, function(i, entry) { + var url = entry.htmlLink || null; + + // make the URLs for each event show times in the correct timezone + if (timezoneArg && url !== null) { + url = injectQsComponent(url, 'ctz=' + timezoneArg); } + events.push({ - id: entry['gCal$uid']['value'], - title: entry['title']['$t'], + id: entry.id, + title: entry.summary, + start: entry.start.dateTime || entry.start.date, // try timed. will fall back to all-day + end: entry.end.dateTime || entry.end.date, // same url: url, - start: start, - end: end, - allDay: allDay, - location: entry['gd$where'][0]['valueString'], - description: entry['content']['$t'] + location: entry.location, + description: entry.description }); }); + + // call the success handler(s) and allow it to return a new events array + successArgs = [ events ].concat(Array.prototype.slice.call(arguments, 1)); // forward other jq args + successRes = applyAll(success, this, successArgs); + if ($.isArray(successRes)) { + return successRes; + } } - var args = [events].concat(Array.prototype.slice.call(arguments, 1)); - var res = applyAll(success, this, args); - if ($.isArray(res)) { - return res; - } + return events; } }); - } -// legacy -fc.gcalFeed = function(url, sourceOptions) { - return $.extend({}, sourceOptions, { url: url, dataType: 'gcal' }); -}; +// Injects a string like "arg=value" into the querystring of a URL +function injectQsComponent(url, component) { + // inject it after the querystring but before the fragment + return url.replace(/(\?.*?)?(#|$)/, function(whole, qs, hash) { + return (qs ? qs + '&' : '?') + component + hash; + }); +} -})(jQuery); +}); diff --git a/www/plugins-dist/organiseur/lib/fullcalendar/gcal.min.js b/www/plugins-dist/organiseur/lib/fullcalendar/gcal.min.js new file mode 100644 index 00000000..02e7ea4d --- /dev/null +++ b/www/plugins-dist/organiseur/lib/fullcalendar/gcal.min.js @@ -0,0 +1,6 @@ +/*! + * FullCalendar v3.2.0 Google Calendar Plugin + * Docs & License: https://fullcalendar.io/ + * (c) 2017 Adam Shaw + */ +!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){function a(a,t,d,c,i){function s(o,r){var l=r||[{message:o}];(a.googleCalendarError||e.noop).apply(i,l),(i.options.googleCalendarError||e.noop).apply(i,l),n.warn.apply(null,[o].concat(r||[]))}var u,g,p=r+"/"+encodeURIComponent(a.googleCalendarId)+"/events?callback=?",m=a.googleCalendarApiKey||i.options.googleCalendarApiKey,f=a.success;return m?(t.hasZone()||(t=t.clone().utc().add(-1,"day")),d.hasZone()||(d=d.clone().utc().add(1,"day")),c&&"local"!=c&&(g=c.replace(" ","_")),u=e.extend({},a.data||{},{key:m,timeMin:t.format(),timeMax:d.format(),timeZone:g,singleEvents:!0,maxResults:9999}),e.extend({},a,{googleCalendarId:null,url:p,data:u,startParam:!1,endParam:!1,timezoneParam:!1,success:function(a){var r,n,t=[];if(a.error)s("Google Calendar API: "+a.error.message,a.error.errors);else if(a.items&&(e.each(a.items,function(e,a){var r=a.htmlLink||null;g&&null!==r&&(r=o(r,"ctz="+g)),t.push({id:a.id,title:a.summary,start:a.start.dateTime||a.start.date,end:a.end.dateTime||a.end.date,url:r,location:a.location,description:a.description})}),r=[t].concat(Array.prototype.slice.call(arguments,1)),n=l(f,this,r),e.isArray(n)))return n;return t}})):(s("Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/"),{})}function o(e,a){return e.replace(/(\?.*?)?(#|$)/,function(e,o,r){return(o?o+"&":"?")+a+r})}var r="https://www.googleapis.com/calendar/v3/calendars",n=e.fullCalendar,l=n.applyAll;n.sourceNormalizers.push(function(e){var a,o=e.googleCalendarId,r=e.url;!o&&r&&(/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(r)?o=r:((a=/^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(r))||(a=/^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(r)))&&(o=decodeURIComponent(a[1])),o&&(e.googleCalendarId=o)),o&&(null==e.editable&&(e.editable=!1),e.url=o)}),n.sourceFetchers.push(function(e,o,r,n){if(e.googleCalendarId)return a(e,o,r,n,this)})}); \ No newline at end of file diff --git a/www/plugins-dist/organiseur/lib/fullcalendar/locale-all.js b/www/plugins-dist/organiseur/lib/fullcalendar/locale-all.js new file mode 100644 index 00000000..689a86e0 --- /dev/null +++ b/www/plugins-dist/organiseur/lib/fullcalendar/locale-all.js @@ -0,0 +1,5 @@ +!function(e){"function"==typeof define&&define.amd?define(["jquery","moment"],e):"object"==typeof exports?module.exports=e(require("jquery"),require("moment")):e(jQuery,moment)}(function(e,a){!function(){!function(){var e=a.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"vm":"VM":t?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("af","af",{closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("af",{buttonText:{year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayHtml:"Heeldag",eventLimitText:"Addisionele",noEventsMessage:"Daar is geen gebeurtenis"})}(),function(){!function(){var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},t={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},n=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},r={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},s=function(e){return function(a,t,s,d){var i=n(a),o=r[e][n(a)];return 2===i&&(o=o[t?0:1]),o.replace(/%d/i,a)}},d=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"],i=a.defineLocale("ar",{months:d,monthsShort:d,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,a,t){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:s("s"),m:s("m"),mm:s("m"),h:s("h"),hh:s("h"),d:s("d"),dd:s("d"),M:s("M"),MM:s("M"),y:s("y"),yy:s("y")},preparse:function(e){return e.replace(/\u200f/g,"").replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return t[e]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return e[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}});return i}(),e.fullCalendar.datepickerLocale("ar","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("ar",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})}(),function(){!function(){var e=a.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}});return e}(),e.fullCalendar.datepickerLocale("ar-dz","ar-DZ",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("ar-dz",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})}(),function(){!function(){var e={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},t=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},n={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},r=function(e){return function(a,r,s,d){var i=t(a),o=n[e][t(a)];return 2===i&&(o=o[r?0:1]),o.replace(/%d/i,a)}},s=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],d=a.defineLocale("ar-ly",{months:s,monthsShort:s,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,a,t){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:r("s"),m:r("m"),mm:r("m"),h:r("h"),hh:r("h"),d:r("d"),dd:r("d"),M:r("M"),MM:r("M"),y:r("y"),yy:r("y")},preparse:function(e){return e.replace(/\u200f/g,"").replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return e[a]}).replace(/,/g,"،")},week:{dow:6,doy:12}});return d}(),e.fullCalendar.datepickerLocale("ar-ly","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("ar-ly",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})}(),function(){!function(){var e=a.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}});return e}(),e.fullCalendar.datepickerLocale("ar-ma","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("ar-ma",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})}(),function(){!function(){var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},t={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},n=a.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,a,t){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return t[e]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return e[a]}).replace(/,/g,"،")},week:{dow:0,doy:6}});return n}(),e.fullCalendar.datepickerLocale("ar-sa","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("ar-sa",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})}(),function(){!function(){var e=a.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("ar-tn","ar",{closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("ar-tn",{buttonText:{month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"})}(),function(){!function(){var e=a.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-ев":0===t?e+"-ен":t>10&&t<20?e+"-ти":1===a?e+"-ви":2===a?e+"-ри":7===a||8===a?e+"-ми":e+"-ти"},week:{dow:1,doy:7}});return e}(),e.fullCalendar.datepickerLocale("bg","bg",{closeText:"затвори",prevText:"<назад",nextText:"напред>",nextBigText:">>",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("bg",{buttonText:{month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",eventLimitText:function(e){return"+още "+e},noEventsMessage:"Няма събития за показване"})}(),function(){!function(){var e=a.defineLocale("ca",{months:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),monthsShort:"gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd D MMMM YYYY H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,a){var t=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"è";return"w"!==a&&"W"!==a||(t="a"),e+t},week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("ca","ca",{closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("ca",{buttonText:{month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},allDayText:"Tot el dia",eventLimitText:"més",noEventsMessage:"No hi ha esdeveniments per mostrar"})}(),function(){!function(){function e(e){return e>1&&e<5&&1!==~~(e/10)}function t(a,t,n,r){var s=a+" ";switch(n){case"s":return t||r?"pár sekund":"pár sekundami";case"m":return t?"minuta":r?"minutu":"minutou";case"mm":return t||r?s+(e(a)?"minuty":"minut"):s+"minutami";case"h":return t?"hodina":r?"hodinu":"hodinou";case"hh":return t||r?s+(e(a)?"hodiny":"hodin"):s+"hodinami";case"d":return t||r?"den":"dnem";case"dd":return t||r?s+(e(a)?"dny":"dní"):s+"dny";case"M":return t||r?"měsíc":"měsícem";case"MM":return t||r?s+(e(a)?"měsíce":"měsíců"):s+"měsíci";case"y":return t||r?"rok":"rokem";case"yy":return t||r?s+(e(a)?"roky":"let"):s+"lety"}}var n="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),r="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),s=a.defineLocale("cs",{months:n,monthsShort:r,monthsParse:function(e,a){var t,n=[];for(t=0;t<12;t++)n[t]=new RegExp("^"+e[t]+"$|^"+a[t]+"$","i");return n}(n,r),shortMonthsParse:function(e){var a,t=[];for(a=0;a<12;a++)t[a]=new RegExp("^"+e[a]+"$","i");return t}(r),longMonthsParse:function(e){var a,t=[];for(a=0;a<12;a++)t[a]=new RegExp("^"+e[a]+"$","i");return t}(n),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return s}(),e.fullCalendar.datepickerLocale("cs","cs",{closeText:"Zavřít",prevText:"<Dříve",nextText:"Později>",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("cs",{buttonText:{month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},allDayText:"Celý den",eventLimitText:function(e){return"+další: "+e},noEventsMessage:"Žádné akce k zobrazení"})}(),function(){!function(){var e=a.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY HH:mm"},calendar:{sameDay:"[I dag kl.] LT",nextDay:"[I morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[I går kl.] LT",lastWeek:"[sidste] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("da","da",{closeText:"Luk",prevText:"<Forrige",nextText:"Næste>",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("da",{buttonText:{month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},allDayText:"Hele dagen",eventLimitText:"flere",noEventsMessage:"Ingen arrangementer at vise"})}(),function(){!function(){function e(e,a,t,n){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?r[t][0]:r[t][1]}var t=a.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return t}(),e.fullCalendar.datepickerLocale("de","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("de",{buttonText:{month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"})}(),function(){!function(){function e(e,a,t,n){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?r[t][0]:r[t][1]}var t=a.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return t}(),e.fullCalendar.datepickerLocale("de-at","de",{closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("de-at",{buttonText:{month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"})}(),function(){!function(){function e(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}var t=a.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(e,a){return/D/.test(a.substring(0,a.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(e,a,t){return e>11?t?"μμ":"ΜΜ":t?"πμ":"ΠΜ"},isPM:function(e){return"μ"===(e+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(a,t){var n=this._calendarEl[a],r=t&&t.hours();return e(n)&&(n=n.apply(t)),n.replace("{}",r%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},ordinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}});return t}(),e.fullCalendar.datepickerLocale("el","el",{closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Σήμερα",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("el",{buttonText:{month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},allDayText:"Ολοήμερο",eventLimitText:"περισσότερα",noEventsMessage:"Δεν υπάρχουν γεγονότα για να εμφανιστεί"})}(),function(){!function(){var e=a.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10,t=1===~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th";return e+t},week:{ +dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("en-au","en-AU",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("en-au")}(),function(){!function(){var e=a.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10,t=1===~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th";return e+t}});return e}(),e.fullCalendar.locale("en-ca")}(),function(){!function(){var e=a.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10,t=1===~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th";return e+t},week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("en-gb","en-GB",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("en-gb")}(),function(){!function(){var e=a.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10,t=1===~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th";return e+t},week:{dow:1,doy:4}});return e}(),e.fullCalendar.locale("en-ie")}(),function(){!function(){var e=a.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10,t=1===~~(e%100/10)?"th":1===a?"st":2===a?"nd":3===a?"rd":"th";return e+t},week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("en-nz","en-NZ",{closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("en-nz")}(),function(){!function(){var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),t="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),n=a.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,n){return/-MMM-/.test(n)?t[a.month()]:e[a.month()]},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return n}(),e.fullCalendar.datepickerLocale("es","es",{closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("es",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Agenda"},allDayHtml:"Todo
        el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"})}(),function(){!function(){var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),t="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),n=a.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,n){return/-MMM-/.test(n)?t[a.month()]:e[a.month()]},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return n}(),e.fullCalendar.datepickerLocale("es-do","es",{closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","jue","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("es-do",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Agenda"},allDayHtml:"Todo
        el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"})}(),function(){!function(){var e=a.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return e}(),e.fullCalendar.datepickerLocale("eu","eu",{closeText:"Egina",prevText:"<Aur",nextText:"Hur>",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("eu",{buttonText:{month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},allDayHtml:"Egun
        osoa",eventLimitText:"gehiago",noEventsMessage:"Ez dago ekitaldirik erakusteko"})}(),function(){!function(){var e={1:"Û±",2:"Û²",3:"Û³",4:"Û´",5:"Ûµ",6:"Û¶",7:"Û·",8:"Û¸",9:"Û¹",0:"Û°"},t={"Û±":"1","Û²":"2","Û³":"3","Û´":"4","Ûµ":"5","Û¶":"6","Û·":"7","Û¸":"8","Û¹":"9","Û°":"0"},n=a.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_Ù¾_ج_Ø´".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,a,t){return e<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چندین ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(e){return e.replace(/[Û°-Û¹]/g,function(e){return t[e]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return e[a]}).replace(/,/g,"،")},ordinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}});return n}(),e.fullCalendar.datepickerLocale("fa","fa",{closeText:"بستن",prevText:"<قبلی",nextText:"بعدی>",currentText:"امروز",monthNames:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","Ù¾","ج","Ø´"],dayNamesMin:["ی","د","س","چ","Ù¾","ج","Ø´"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("fa",{buttonText:{month:"ماه",week:"هفته",day:"روز",list:"برنامه"},allDayText:"تمام روز",eventLimitText:function(e){return"بیش از "+e},noEventsMessage:"هیچ رویدادی به نمایش"})}(),function(){!function(){function e(e,a,n,r){var s="";switch(n){case"s":return r?"muutaman sekunnin":"muutama sekunti";case"m":return r?"minuutin":"minuutti";case"mm":s=r?"minuutin":"minuuttia";break;case"h":return r?"tunnin":"tunti";case"hh":s=r?"tunnin":"tuntia";break;case"d":return r?"päivän":"päivä";case"dd":s=r?"päivän":"päivää";break;case"M":return r?"kuukauden":"kuukausi";case"MM":s=r?"kuukauden":"kuukautta";break;case"y":return r?"vuoden":"vuosi";case"yy":s=r?"vuoden":"vuotta"}return s=t(e,r)+" "+s}function t(e,a){return e<10?a?r[e]:n[e]:e}var n="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),r=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",n[7],n[8],n[9]],s=a.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return s}(),e.fullCalendar.datepickerLocale("fi","fi",{closeText:"Sulje",prevText:"«Edellinen",nextText:"Seuraava»",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("fi",{buttonText:{month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},allDayText:"Koko päivä",eventLimitText:"lisää",noEventsMessage:"Ei näytettäviä tapahtumia"})}(),function(){!function(){var e=a.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|)/,ordinal:function(e){return e+(1===e?"er":"")},week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("fr","fr",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("fr",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la
        journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})}(),function(){!function(){var e=a.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(e){return e+(1===e?"er":"e")}});return e}(),e.fullCalendar.datepickerLocale("fr-ca","fr-CA",{closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("fr-ca",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la
        journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})}(),function(){!function(){var e=a.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(e){return e+(1===e?"er":"e")},week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("fr-ch","fr-CH",{closeText:"Fermer",prevText:"<Préc",nextText:"Suiv>",currentText:"Courant",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("fr-ch",{buttonText:{year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},allDayHtml:"Toute la
        journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"})}(),function(){!function(){var e=a.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("gl","gl",{closeText:"Pechar",prevText:"<Ant",nextText:"Seg>",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("gl",{buttonText:{month:"Mes",week:"Semana",day:"Día",list:"Axenda"},allDayHtml:"Todo
        o día",eventLimitText:"máis",noEventsMessage:"Non hai eventos para amosar"})}(),function(){!function(){var e=a.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(e){return 2===e?"שעתיים":e+" שעות"},d:"יום",dd:function(e){return 2===e?"יומיים":e+" ימים"},M:"חודש",MM:function(e){return 2===e?"חודשיים":e+" חודשים"},y:"שנה",yy:function(e){return 2===e?"שנתיים":e%10===0&&10!==e?e+" שנה":e+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,a,t){return e<5?"לפנות בוקר":e<10?"בבוקר":e<12?t?'לפנה"צ':"לפני הצהריים":e<18?t?'אחה"צ':"אחרי הצהריים":"בערב"}});return e}(),e.fullCalendar.datepickerLocale("he","he",{closeText:"סגור",prevText:"<הקודם",nextText:"הבא>",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("he",{buttonText:{month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",eventLimitText:"אחר",noEventsMessage:"אין אירועים להצגה",weekNumberTitle:"שבוע"})}(),function(){!function(){var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},t={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},n=a.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return t[e]})},postformat:function(a){return a.replace(/\d/g,function(a){return e[a]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,a){return 12===e&&(e=0),"रात"===a?e<4?e:e+12:"सुबह"===a?e:"दोपहर"===a?e>=10?e:e+12:"शाम"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"रात":e<10?"सुबह":e<17?"दोपहर":e<20?"शाम":"रात"},week:{dow:0,doy:6}});return n}(),e.fullCalendar.datepickerLocale("hi","hi",{closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("hi",{buttonText:{month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},allDayText:"सभी दिन",eventLimitText:function(e){return"+अधिक "+e},noEventsMessage:"कोई घटनाओं को प्रदर्शित करने के लिए"})}(),function(){!function(){function e(e,a,t){var n=e+" ";switch(t){case"m":return a?"jedna minuta":"jedne minute";case"mm":return n+=1===e?"minuta":2===e||3===e||4===e?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return n+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return n+=1===e?"dan":"dana";case"MM":return n+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return n+=1===e?"godina":2===e||3===e||4===e?"godine":"godina"}}var t=a.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return t}(),e.fullCalendar.datepickerLocale("hr","hr",{closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"], +monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("hr",{buttonText:{prev:"Prijašnji",next:"Sljedeći",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikaz"})}(),function(){!function(){function e(e,a,t,n){var r=e;switch(t){case"s":return n||a?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(n||a?" perc":" perce");case"mm":return r+(n||a?" perc":" perce");case"h":return"egy"+(n||a?" óra":" órája");case"hh":return r+(n||a?" óra":" órája");case"d":return"egy"+(n||a?" nap":" napja");case"dd":return r+(n||a?" nap":" napja");case"M":return"egy"+(n||a?" hónap":" hónapja");case"MM":return r+(n||a?" hónap":" hónapja");case"y":return"egy"+(n||a?" év":" éve");case"yy":return r+(n||a?" év":" éve")}return""}function t(e){return(e?"":"[múlt] ")+"["+n[this.day()]+"] LT[-kor]"}var n="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" "),r=a.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,a,t){return e<12?t===!0?"de":"DE":t===!0?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return t.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return t.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return r}(),e.fullCalendar.datepickerLocale("hu","hu",{closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""}),e.fullCalendar.locale("hu",{buttonText:{month:"Hónap",week:"Hét",day:"Nap",list:"Napló"},allDayText:"Egész nap",eventLimitText:"további",noEventsMessage:"Nincs megjeleníthető események"})}(),function(){!function(){var e=a.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"siang"===a?e>=11?e:e+12:"sore"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}});return e}(),e.fullCalendar.datepickerLocale("id","id",{closeText:"Tutup",prevText:"<mundur",nextText:"maju>",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("id",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayHtml:"Sehari
        penuh",eventLimitText:"lebih",noEventsMessage:"Tidak ada acara untuk ditampilkan"})}(),function(){!function(){function e(e){return e%100===11||e%10!==1}function t(a,t,n,r){var s=a+" ";switch(n){case"s":return t||r?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return t?"mínúta":"mínútu";case"mm":return e(a)?s+(t||r?"mínútur":"mínútum"):t?s+"mínúta":s+"mínútu";case"hh":return e(a)?s+(t||r?"klukkustundir":"klukkustundum"):s+"klukkustund";case"d":return t?"dagur":r?"dag":"degi";case"dd":return e(a)?t?s+"dagar":s+(r?"daga":"dögum"):t?s+"dagur":s+(r?"dag":"degi");case"M":return t?"mánuður":r?"mánuð":"mánuði";case"MM":return e(a)?t?s+"mánuðir":s+(r?"mánuði":"mánuðum"):t?s+"mánuður":s+(r?"mánuð":"mánuði");case"y":return t||r?"ár":"ári";case"yy":return e(a)?s+(t||r?"ár":"árum"):s+(t||r?"ár":"ári")}}var n=a.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:t,m:t,mm:t,h:"klukkustund",hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return n}(),e.fullCalendar.datepickerLocale("is","is",{closeText:"Loka",prevText:"< Fyrri",nextText:"Næsti >",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd.mm.yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("is",{buttonText:{month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},allDayHtml:"Allan
        daginn",eventLimitText:"meira",noEventsMessage:"Engir viðburðir til að sýna"})}(),function(){!function(){var e=a.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),weekdaysShort:"Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),weekdaysMin:"Do_Lu_Ma_Me_Gi_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("it","it",{closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("it",{buttonText:{month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},allDayHtml:"Tutto il
        giorno",eventLimitText:function(e){return"+altri "+e},noEventsMessage:"Non ci sono eventi da visualizzare"})}(),function(){!function(){var e=a.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_æ°´_木_金_土".split("_"),weekdaysMin:"日_月_火_æ°´_木_金_土".split("_"),longDateFormat:{LT:"Ah時m分",LTS:"Ah時m分s秒",L:"YYYY/MM/DD",LL:"YYYYå¹´M月D日",LLL:"YYYYå¹´M月D日Ah時m分",LLLL:"YYYYå¹´M月D日Ah時m分 dddd"},meridiemParse:/午前|午後/i,isPM:function(e){return"午後"===e},meridiem:function(e,a,t){return e<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},ordinalParse:/\d{1,2}日/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"日";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1å¹´",yy:"%då¹´"}});return e}(),e.fullCalendar.datepickerLocale("ja","ja",{closeText:"閉じる",prevText:"<前",nextText:"次>",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","æ°´","木","金","土"],dayNamesMin:["日","月","火","æ°´","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"å¹´"}),e.fullCalendar.locale("ja",{buttonText:{month:"月",week:"週",day:"日",list:"予定リスト"},allDayText:"終日",eventLimitText:function(e){return"他 "+e+" 件"},noEventsMessage:"イベントが表示されないように"})}(),function(){!function(){var e={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"},t=a.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},ordinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(a){var t=a%10,n=a>=100?100:null;return a+(e[a]||e[t]||e[n])},week:{dow:1,doy:7}});return t}(),e.fullCalendar.datepickerLocale("kk","kk",{closeText:"Жабу",prevText:"<Алдыңғы",nextText:"Келесі>",currentText:"Бүгін",monthNames:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthNamesShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],dayNamesShort:["жкс","дсн","ссн","срс","бсн","жма","снб"],dayNamesMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],weekHeader:"Не",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("kk",{buttonText:{month:"Ай",week:"Апта",day:"Күн",list:"Күн тәртібі"},allDayText:"Күні бойы",eventLimitText:function(e){return"+ тағы "+e},noEventsMessage:"Көрсету үшін оқиғалар жоқ"})}(),function(){!function(){var e=a.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h시 m분",LTS:"A h시 m분 s초",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h시 m분",LLLL:"YYYY년 MMMM D일 dddd A h시 m분"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"일분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},ordinalParse:/\d{1,2}일/,ordinal:"%d일",meridiemParse:/오전|오후/,isPM:function(e){return"오후"===e},meridiem:function(e,a,t){return e<12?"오전":"오후"}});return e}(),e.fullCalendar.datepickerLocale("ko","ko",{closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"주",dateFormat:"yy. m. d.",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"}),e.fullCalendar.locale("ko",{buttonText:{month:"월",week:"주",day:"일",list:"일정목록"},allDayText:"종일",eventLimitText:"개",noEventsMessage:"일정이 표시 없습니다"})}(),function(){!function(){function e(e,a,t,n){var r={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return a?r[t][0]:r[t][1]}function t(e){var a=e.substr(0,e.indexOf(" "));return r(a)?"a "+e:"an "+e}function n(e){var a=e.substr(0,e.indexOf(" "));return r(a)?"viru "+e:"virun "+e}function r(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var a=e%10,t=e/10;return r(0===a?t:a)}if(e<1e4){for(;e>=10;)e/=10;return r(e)}return e/=1e3,r(e)}var s=a.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:t,past:n,s:"e puer Sekonnen",m:e,mm:"%d Minutten",h:e,hh:"%d Stonnen",d:e,dd:"%d Deeg",M:e,MM:"%d Méint",y:e,yy:"%d Joer"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return s}(),e.fullCalendar.datepickerLocale("lb","lb",{closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("lb",{buttonText:{month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},allDayText:"Ganzen Dag",eventLimitText:"méi",noEventsMessage:"Nee Evenementer ze affichéieren"})}(),function(){!function(){function e(e,a,t,n){return a?"kelios sekundės":n?"kelių sekundžių":"kelias sekundes"}function t(e,a,t,n){return a?r(t)[0]:n?r(t)[1]:r(t)[2]}function n(e){return e%10===0||e>10&&e<20}function r(e){return d[e].split("_")}function s(e,a,s,d){var i=e+" ";return 1===e?i+t(e,a,s[0],d):a?i+(n(e)?r(s)[1]:r(s)[0]):d?i+r(s)[1]:i+(n(e)?r(s)[1]:r(s)[2])}var d={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"},i=a.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjÅ«tis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_Å¡eÅ¡tadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_Å¡eÅ¡tadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Å eÅ¡".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Å ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Å iandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieÅ¡ %s",s:e,m:t,mm:s,h:t,hh:s,d:t,dd:s,M:t,MM:s,y:t,yy:s},ordinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}});return i}(),e.fullCalendar.datepickerLocale("lt","lt",{closeText:"Uždaryti",prevText:"<Atgal",nextText:"Pirmyn>",currentText:"Å iandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","RugpjÅ«tis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","Å¡eÅ¡tadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","Å¡eÅ¡"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Å e"],weekHeader:"SAV",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""}),e.fullCalendar.locale("lt",{buttonText:{month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},allDayText:"Visą dieną",eventLimitText:"daugiau",noEventsMessage:"Nėra įvykių rodyti"})}(),function(){!function(){function e(e,a,t){return t?a%10===1&&a%100!==11?e[2]:e[3]:a%10===1&&a%100!==11?e[0]:e[1]}function t(a,t,n){return a+" "+e(s[n],a,t)}function n(a,t,n){return e(s[n],a,t)}function r(e,a){return a?"dažas sekundes":"dažām sekundēm"}var s={m:"minÅ«tes_minÅ«tēm_minÅ«te_minÅ«tes".split("_"),mm:"minÅ«tes_minÅ«tēm_minÅ«te_minÅ«tes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneÅ¡a_mēneÅ¡iem_mēnesis_mēneÅ¡i".split("_"),MM:"mēneÅ¡a_mēneÅ¡iem_mēnesis_mēneÅ¡i".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")},d=a.defineLocale("lv",{months:"janvāris_februāris_marts_aprÄ«lis_maijs_jÅ«nijs_jÅ«lijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jÅ«n_jÅ«l_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_treÅ¡diena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Å odien pulksten] LT",nextDay:"[RÄ«t pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:r,m:n,mm:t,h:n,hh:t,d:n,dd:t,M:n,MM:t,y:n,yy:t},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return d}(),e.fullCalendar.datepickerLocale("lv","lv",{closeText:"Aizvērt",prevText:"Iepr.",nextText:"Nāk.",currentText:"Å odien",monthNames:["Janvāris","Februāris","Marts","AprÄ«lis","Maijs","JÅ«nijs","JÅ«lijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","JÅ«n","JÅ«l","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","treÅ¡diena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Ned.",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("lv",{buttonText:{month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtÄ«ba"},allDayText:"Visu dienu",eventLimitText:function(e){return"+vēl "+e},noEventsMessage:"Nav notikumu, lai parādÄ«tu"})}(),function(){!function(){var e=a.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-ев":0===t?e+"-ен":t>10&&t<20?e+"-ти":1===a?e+"-ви":2===a?e+"-ри":7===a||8===a?e+"-ми":e+"-ти"},week:{dow:1,doy:7}});return e}(),e.fullCalendar.datepickerLocale("mk","mk",{closeText:"Затвори",prevText:"<",nextText:">",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("mk",{buttonText:{month:"Месец",week:"Недела",day:"Ден",list:"График"},allDayText:"Цел ден",eventLimitText:function(e){return"+повеќе "+e},noEventsMessage:"Нема настани за прикажување"})}(),function(){!function(){var e=a.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?e>=11?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}});return e}(),e.fullCalendar.datepickerLocale("ms","ms",{closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("ms",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"})}(),function(){!function(){var e=a.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?e>=11?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}});return e}(),e.fullCalendar.datepickerLocale("ms-my","ms",{closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("ms-my",{buttonText:{month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"})}(),function(){!function(){var e=a.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i gÃ¥r kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en mÃ¥ned",MM:"%d mÃ¥neder",y:"ett Ã¥r",yy:"%d Ã¥r"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("nb","nb",{closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("nb",{buttonText:{month:"MÃ¥ned",week:"Uke",day:"Dag",list:"Agenda"},allDayText:"Hele dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser Ã¥ vise"})}(),function(){!function(){var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),t="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,s=a.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,n){return/-MMM-/.test(n)?t[a.month()]:e[a.month()]},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT", +lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}});return s}(),e.fullCalendar.datepickerLocale("nl","nl",{closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("nl",{buttonText:{month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"})}(),function(){!function(){var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),t="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,s=a.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,n){return/-MMM-/.test(n)?t[a.month()]:e[a.month()]},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}});return s}(),e.fullCalendar.datepickerLocale("nl-be","nl-BE",{closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("nl-be",{buttonText:{month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"})}(),function(){!function(){var e=a.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_mÃ¥ndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mÃ¥n_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_mÃ¥_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I gÃ¥r klokka] LT",lastWeek:"[FøregÃ¥ande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein mÃ¥nad",MM:"%d mÃ¥nader",y:"eit Ã¥r",yy:"%d Ã¥r"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("nn","nn",{closeText:"Lukk",prevText:"«Førre",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mÃ¥n","tys","ons","tor","fre","lau"],dayNames:["sundag","mÃ¥ndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","mÃ¥","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("nn",{buttonText:{month:"MÃ¥nad",week:"Veke",day:"Dag",list:"Agenda"},allDayText:"Heile dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser Ã¥ vise"})}(),function(){!function(){function e(e){return e%10<5&&e%10>1&&~~(e/10)%10!==1}function t(a,t,n){var r=a+" ";switch(n){case"m":return t?"minuta":"minutę";case"mm":return r+(e(a)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return r+(e(a)?"godziny":"godzin");case"MM":return r+(e(a)?"miesiące":"miesięcy");case"yy":return r+(e(a)?"lata":"lat")}}var n="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),r="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"),s=a.defineLocale("pl",{months:function(e,a){return""===a?"("+r[e.month()]+"|"+n[e.month()]+")":/D MMMM/.test(a)?r[e.month()]:n[e.month()]},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:t,mm:t,h:t,hh:t,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:t,y:"rok",yy:t},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return s}(),e.fullCalendar.datepickerLocale("pl","pl",{closeText:"Zamknij",prevText:"<Poprzedni",nextText:"Następny>",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("pl",{buttonText:{month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},allDayText:"Cały dzień",eventLimitText:"więcej",noEventsMessage:"Brak wydarzeń do wyświetlenia"})}(),function(){!function(){var e=a.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("pt","pt",{closeText:"Fechar",prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("pt",{buttonText:{month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},allDayText:"Todo o dia",eventLimitText:"mais",noEventsMessage:"Não há eventos para mostrar"})}(),function(){!function(){var e=a.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº"});return e}(),e.fullCalendar.datepickerLocale("pt-br","pt-BR",{closeText:"Fechar",prevText:"<Anterior",nextText:"Próximo>",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("pt-br",{buttonText:{month:"Mês",week:"Semana",day:"Dia",list:"Compromissos"},allDayText:"dia inteiro",eventLimitText:function(e){return"mais +"+e},noEventsMessage:"Não há eventos para mostrar"})}(),function(){!function(){function e(e,a,t){var n={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},r=" ";return(e%100>=20||e>=100&&e%100===0)&&(r=" de "),e+r+n[t]}var t=a.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:e,h:"o oră",hh:e,d:"o zi",dd:e,M:"o lună",MM:e,y:"un an",yy:e},week:{dow:1,doy:7}});return t}(),e.fullCalendar.datepickerLocale("ro","ro",{closeText:"Închide",prevText:"« Luna precedentă",nextText:"Luna următoare »",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","MarÅ£i","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("ro",{buttonText:{prev:"precedentă",next:"următoare",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},allDayText:"Toată ziua",eventLimitText:function(e){return"+alte "+e},noEventsMessage:"Nu există evenimente de afișat"})}(),function(){!function(){function e(e,a){var t=e.split("_");return a%10===1&&a%100!==11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(a,t,n){var r={mm:t?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===n?t?"минута":"минуту":a+" "+e(r[n],+a)}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i],r=a.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:t,mm:t,h:"час",hh:t,d:"день",dd:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,a,t){return e<4?"ночи":e<12?"утра":e<17?"дня":"вечера"},ordinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":return e+"-й";case"D":return e+"-го";case"w":case"W":return e+"-я";default:return e}},week:{dow:1,doy:7}});return r}(),e.fullCalendar.datepickerLocale("ru","ru",{closeText:"Закрыть",prevText:"<Пред",nextText:"След>",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("ru",{buttonText:{month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},allDayText:"Весь день",eventLimitText:function(e){return"+ ещё "+e},noEventsMessage:"Нет событий для отображения"})}(),function(){!function(){function e(e){return e>1&&e<5}function t(a,t,n,r){var s=a+" ";switch(n){case"s":return t||r?"pár sekúnd":"pár sekundami";case"m":return t?"minúta":r?"minútu":"minútou";case"mm":return t||r?s+(e(a)?"minúty":"minút"):s+"minútami";case"h":return t?"hodina":r?"hodinu":"hodinou";case"hh":return t||r?s+(e(a)?"hodiny":"hodín"):s+"hodinami";case"d":return t||r?"deň":"dňom";case"dd":return t||r?s+(e(a)?"dni":"dní"):s+"dňami";case"M":return t||r?"mesiac":"mesiacom";case"MM":return t||r?s+(e(a)?"mesiace":"mesiacov"):s+"mesiacmi";case"y":return t||r?"rok":"rokom";case"yy":return t||r?s+(e(a)?"roky":"rokov"):s+"rokmi"}}var n="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),r="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_"),s=a.defineLocale("sk",{months:n,monthsShort:r,weekdays:"nedeľa_pondelok_utorok_streda_Å¡tvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_Å¡t_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_Å¡t_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo Å¡tvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});return s}(),e.fullCalendar.datepickerLocale("sk","sk",{closeText:"ZavrieÅ¥",prevText:"<Predchádzajúci",nextText:"Nasledujúci>",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","Å¡tvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Å tv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Å t","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("sk",{buttonText:{month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},allDayText:"Celý deň",eventLimitText:function(e){return"+ďalÅ¡ie: "+e},noEventsMessage:"Žiadne akcie na zobrazenie"})}(),function(){!function(){function e(e,a,t,n){var r=e+" ";switch(t){case"s":return a||n?"nekaj sekund":"nekaj sekundami";case"m":return a?"ena minuta":"eno minuto";case"mm":return r+=1===e?a?"minuta":"minuto":2===e?a||n?"minuti":"minutama":e<5?a||n?"minute":"minutami":a||n?"minut":"minutami";case"h":return a?"ena ura":"eno uro";case"hh":return r+=1===e?a?"ura":"uro":2===e?a||n?"uri":"urama":e<5?a||n?"ure":"urami":a||n?"ur":"urami";case"d":return a||n?"en dan":"enim dnem";case"dd":return r+=1===e?a||n?"dan":"dnem":2===e?a||n?"dni":"dnevoma":a||n?"dni":"dnevi";case"M":return a||n?"en mesec":"enim mesecem";case"MM":return r+=1===e?a||n?"mesec":"mesecem":2===e?a||n?"meseca":"mesecema":e<5?a||n?"mesece":"meseci":a||n?"mesecev":"meseci";case"y":return a||n?"eno leto":"enim letom";case"yy":return r+=1===e?a||n?"leto":"letom":2===e?a||n?"leti":"letoma":e<5?a||n?"leta":"leti":a||n?"let":"leti"}}var t=a.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejÅ¡njo] [nedeljo] [ob] LT";case 3:return"[prejÅ¡njo] [sredo] [ob] LT";case 6:return"[prejÅ¡njo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejÅ¡nji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return t}(),e.fullCalendar.datepickerLocale("sl","sl",{closeText:"Zapri",prevText:"<PrejÅ¡nji",nextText:"Naslednji>",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("sl",{buttonText:{month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},allDayText:"Ves dan",eventLimitText:"več",noEventsMessage:"Ni dogodkov za prikaz"})}(),function(){!function(){var e={words:{m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:e>=2&&e<=4?a[1]:a[2]},translate:function(a,t,n){var r=e.words[n];return 1===n.length?t?r[0]:r[1]:a+" "+e.correctGrammaticalCase(a,r)}},t=a.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var e=["[proÅ¡le] [nedelje] [u] LT","[proÅ¡log] [ponedeljka] [u] LT","[proÅ¡log] [utorka] [u] LT","[proÅ¡le] [srede] [u] LT","[proÅ¡log] [četvrtka] [u] LT","[proÅ¡log] [petka] [u] LT","[proÅ¡le] [subote] [u] LT"];return e[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mesec",MM:e.translate,y:"godinu",yy:e.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return t}(),e.fullCalendar.datepickerLocale("sr","sr",{closeText:"Затвори",prevText:"<",nextText:">",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("sr",{buttonText:{month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},allDayText:"Цео дан",eventLimitText:function(e){return"+ још "+e},noEventsMessage:"Нема догађаја за приказ"})}(),function(){!function(){var e={words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:e>=2&&e<=4?a[1]:a[2]},translate:function(a,t,n){var r=e.words[n];return 1===n.length?t?r[0]:r[1]:a+" "+e.correctGrammaticalCase(a,r)}},t=a.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var e=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return e[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"дан",dd:e.translate,M:"месец",MM:e.translate,y:"годину",yy:e.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});return t}(),e.fullCalendar.datepickerLocale("sr-cyrl","sr",{closeText:"Затвори",prevText:"<",nextText:">",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("sr-cyrl",{buttonText:{month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},allDayText:"Цео дан",eventLimitText:function(e){return"+ још "+e},noEventsMessage:"Нема догађаја за приказ"})}(),function(){!function(){var e=a.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_mÃ¥ndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mÃ¥n_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_mÃ¥_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[IgÃ¥r] LT",nextWeek:"[PÃ¥] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"nÃ¥gra sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en mÃ¥nad",MM:"%d mÃ¥nader",y:"ett Ã¥r",yy:"%d Ã¥r"},ordinalParse:/\d{1,2}(e|a)/,ordinal:function(e){var a=e%10,t=1===~~(e%100/10)?"e":1===a?"a":2===a?"a":"e";return e+t},week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("sv","sv",{closeText:"Stäng",prevText:"«Förra",nextText:"Nästa»",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","MÃ¥n","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","MÃ¥ndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","MÃ¥","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("sv",{buttonText:{month:"MÃ¥nad",week:"Vecka",day:"Dag",list:"Program"},allDayText:"Heldag",eventLimitText:"till",noEventsMessage:"Inga händelser att visa"})}(),function(){!function(){var e=a.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY/MM/DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return"หลังเที่ยง"===e},meridiem:function(e,a,t){return e<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน", +y:"1 ปี",yy:"%d ปี"}});return e}(),e.fullCalendar.datepickerLocale("th","th",{closeText:"ปิด",prevText:"« à¸¢à¹‰à¸­à¸™",nextText:"ถัดไป »",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("th",{buttonText:{month:"เดือน",week:"สัปดาห์",day:"วัน",list:"แผนงาน"},allDayText:"ตลอดวัน",eventLimitText:"เพิ่มเติม",noEventsMessage:"ไม่มีกิจกรรมที่จะแสดง"})}(),function(){!function(){var e={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"},t=a.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(a){if(0===a)return a+"'ıncı";var t=a%10,n=a%100-t,r=a>=100?100:null;return a+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}});return t}(),e.fullCalendar.datepickerLocale("tr","tr",{closeText:"kapat",prevText:"<geri",nextText:"ileri>",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("tr",{buttonText:{next:"ileri",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},allDayText:"Tüm gün",eventLimitText:"daha fazla",noEventsMessage:"Herhangi bir etkinlik görüntülemek için"})}(),function(){!function(){function e(e,a){var t=e.split("_");return a%10===1&&a%100!==11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(a,t,n){var r={mm:t?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:t?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===n?t?"хвилина":"хвилину":"h"===n?t?"година":"годину":a+" "+e(r[n],+a)}function n(e,a){var t={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")},n=/(\[[ВвУу]\]) ?dddd/.test(a)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(a)?"genitive":"nominative";return t[n][e.day()]}function r(e){return function(){return e+"о"+(11===this.hours()?"б":"")+"] LT"}}var s=a.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:n,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:r("[Сьогодні "),nextDay:r("[Завтра "),lastDay:r("[Вчора "),nextWeek:r("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return r("[Минулої] dddd [").call(this);case 1:case 2:case 4:return r("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:t,mm:t,h:"годину",hh:t,d:"день",dd:t,M:"місяць",MM:t,y:"рік",yy:t},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,a,t){return e<4?"ночі":e<12?"ранку":e<17?"дня":"вечора"},ordinalParse:/\d{1,2}-(й|го)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e+"-й";case"D":return e+"-го";default:return e}},week:{dow:1,doy:7}});return s}(),e.fullCalendar.datepickerLocale("uk","uk",{closeText:"Закрити",prevText:"<",nextText:">",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("uk",{buttonText:{month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},allDayText:"Увесь день",eventLimitText:function(e){return"+ще "+e+"..."},noEventsMessage:"Немає подій для відображення"})}(),function(){!function(){var e=a.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tÆ°_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"sa":"SA":t?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},ordinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}});return e}(),e.fullCalendar.datepickerLocale("vi","vi",{closeText:"Đóng",prevText:"<Trước",nextText:"Tiếp>",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng TÆ°","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ TÆ°","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""}),e.fullCalendar.locale("vi",{buttonText:{month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},allDayText:"Cả ngày",eventLimitText:function(e){return"+ thêm "+e},noEventsMessage:"Không có sá»± kiện để hiển thị"})}(),function(){!function(){var e=a.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah点mm分",LTS:"Ah点m分s秒",L:"YYYY-MM-DD",LL:"YYYYå¹´MMMD日",LLL:"YYYYå¹´MMMD日Ah点mm分",LLLL:"YYYYå¹´MMMD日ddddAh点mm分",l:"YYYY-MM-DD",ll:"YYYYå¹´MMMD日",lll:"YYYYå¹´MMMD日Ah点mm分",llll:"YYYYå¹´MMMD日ddddAh点mm分"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,a){return 12===e&&(e=0),"凌晨"===a||"早上"===a||"上午"===a?e:"下午"===a||"晚上"===a?e+12:e>=11?e:e+12},meridiem:function(e,a,t){var n=100*e+a;return n<600?"凌晨":n<900?"早上":n<1130?"上午":n<1230?"中午":n<1800?"下午":"晚上"},calendar:{sameDay:function(){return 0===this.minutes()?"[今天]Ah[点整]":"[今天]LT"},nextDay:function(){return 0===this.minutes()?"[明天]Ah[点整]":"[明天]LT"},lastDay:function(){return 0===this.minutes()?"[昨天]Ah[点整]":"[昨天]LT"},nextWeek:function(){var e,t;return e=a().startOf("week"),t=this.diff(e,"days")>=7?"[下]":"[本]",0===this.minutes()?t+"dddAh点整":t+"dddAh点mm"},lastWeek:function(){var e,t;return e=a().startOf("week"),t=this.unix()=11?e:e+12:"下午"===a||"晚上"===a?e+12:void 0},meridiem:function(e,a,t){var n=100*e+a;return n<600?"凌晨":n<900?"早上":n<1130?"上午":n<1230?"中午":n<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 å¹´",yy:"%d å¹´"}});return e}(),e.fullCalendar.datepickerLocale("zh-tw","zh-TW",{closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"å¹´"}),e.fullCalendar.locale("zh-tw",{buttonText:{month:"月",week:"週",day:"天",list:"活動列表"},allDayText:"整天",eventLimitText:"顯示更多",noEventsMessage:"没有任何活動"})}(),a.locale("en"),e.fullCalendar.locale("en"),e.datepicker&&e.datepicker.setDefaults(e.datepicker.regional[""])}); \ No newline at end of file diff --git a/www/plugins-dist/organiseur/lib/moment/moment-with-locales.js b/www/plugins-dist/organiseur/lib/moment/moment-with-locales.js new file mode 100644 index 00000000..b5b06687 --- /dev/null +++ b/www/plugins-dist/organiseur/lib/moment/moment-with-locales.js @@ -0,0 +1,12910 @@ +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + global.moment = factory() +}(this, (function () { 'use strict'; + +var hookCallback; + +function hooks () { + return hookCallback.apply(null, arguments); +} + +// This is done to register the method called with moment() +// without creating circular dependencies. +function setHookCallback (callback) { + hookCallback = callback; +} + +function isArray(input) { + return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; +} + +function isObject(input) { + // IE8 will treat undefined and null as object if it wasn't for + // input != null + return input != null && Object.prototype.toString.call(input) === '[object Object]'; +} + +function isObjectEmpty(obj) { + var k; + for (k in obj) { + // even if its not own property I'd still call it non-empty + return false; + } + return true; +} + +function isNumber(input) { + return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]'; +} + +function isDate(input) { + return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; +} + +function map(arr, fn) { + var res = [], i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; +} + +function hasOwnProp(a, b) { + return Object.prototype.hasOwnProperty.call(a, b); +} + +function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } + + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } + + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } + + return a; +} + +function createUTC (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, true).utc(); +} + +function defaultParsingFlags() { + // We need to deep clone this object. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso : false, + parsedDateParts : [], + meridiem : null + }; +} + +function getParsingFlags(m) { + if (m._pf == null) { + m._pf = defaultParsingFlags(); + } + return m._pf; +} + +var some; +if (Array.prototype.some) { + some = Array.prototype.some; +} else { + some = function (fun) { + var t = Object(this); + var len = t.length >>> 0; + + for (var i = 0; i < len; i++) { + if (i in t && fun.call(this, t[i], i, t)) { + return true; + } + } + + return false; + }; +} + +var some$1 = some; + +function isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m); + var parsedParts = some$1.call(flags.parsedDateParts, function (i) { + return i != null; + }); + var isNowValid = !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); + + if (m._strict) { + isNowValid = isNowValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } + else { + return isNowValid; + } + } + return m._isValid; +} + +function createInvalid (flags) { + var m = createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } + else { + getParsingFlags(m).userInvalidated = true; + } + + return m; +} + +function isUndefined(input) { + return input === void 0; +} + +// Plugins that add properties should also add the key here (null value), +// so we can properly clone ourselves. +var momentProperties = hooks.momentProperties = []; + +function copyConfig(to, from) { + var i, prop, val; + + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject; + } + if (!isUndefined(from._i)) { + to._i = from._i; + } + if (!isUndefined(from._f)) { + to._f = from._f; + } + if (!isUndefined(from._l)) { + to._l = from._l; + } + if (!isUndefined(from._strict)) { + to._strict = from._strict; + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm; + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC; + } + if (!isUndefined(from._offset)) { + to._offset = from._offset; + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from); + } + if (!isUndefined(from._locale)) { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i in momentProperties) { + prop = momentProperties[i]; + val = from[prop]; + if (!isUndefined(val)) { + to[prop] = val; + } + } + } + + return to; +} + +var updateInProgress = false; + +// Moment prototype object +function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + if (!this.isValid()) { + this._d = new Date(NaN); + } + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + hooks.updateOffset(this); + updateInProgress = false; + } +} + +function isMoment (obj) { + return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); +} + +function absFloor (number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } +} + +function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; +} + +// compare two arrays, return the number of differences +function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; +} + +function warn(msg) { + if (hooks.suppressDeprecationWarnings === false && + (typeof console !== 'undefined') && console.warn) { + console.warn('Deprecation warning: ' + msg); + } +} + +function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(null, msg); + } + if (firstTime) { + var args = []; + var arg; + for (var i = 0; i < arguments.length; i++) { + arg = ''; + if (typeof arguments[i] === 'object') { + arg += '\n[' + i + '] '; + for (var key in arguments[0]) { + arg += key + ': ' + arguments[0][key] + ', '; + } + arg = arg.slice(0, -2); // Remove trailing comma and space + } else { + arg = arguments[i]; + } + args.push(arg); + } + warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); +} + +var deprecations = {}; + +function deprecateSimple(name, msg) { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(name, msg); + } + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } +} + +hooks.suppressDeprecationWarnings = false; +hooks.deprecationHandler = null; + +function isFunction(input) { + return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; +} + +function set (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _ordinalParseLenient. + this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); +} + +function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + for (prop in parentConfig) { + if (hasOwnProp(parentConfig, prop) && + !hasOwnProp(childConfig, prop) && + isObject(parentConfig[prop])) { + // make sure changes to properties don't modify parent config + res[prop] = extend({}, res[prop]); + } + } + return res; +} + +function Locale(config) { + if (config != null) { + this.set(config); + } +} + +var keys; + +if (Object.keys) { + keys = Object.keys; +} else { + keys = function (obj) { + var i, res = []; + for (i in obj) { + if (hasOwnProp(obj, i)) { + res.push(i); + } + } + return res; + }; +} + +var keys$1 = keys; + +var defaultCalendar = { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' +}; + +function calendar (key, mom, now) { + var output = this._calendar[key] || this._calendar['sameElse']; + return isFunction(output) ? output.call(mom, now) : output; +} + +var defaultLongDateFormat = { + LTS : 'h:mm:ss A', + LT : 'h:mm A', + L : 'MM/DD/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY h:mm A', + LLLL : 'dddd, MMMM D, YYYY h:mm A' +}; + +function longDateFormat (key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + + if (format || !formatUpper) { + return format; + } + + this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); + + return this._longDateFormat[key]; +} + +var defaultInvalidDate = 'Invalid date'; + +function invalidDate () { + return this._invalidDate; +} + +var defaultOrdinal = '%d'; +var defaultOrdinalParse = /\d{1,2}/; + +function ordinal (number) { + return this._ordinal.replace('%d', number); +} + +var defaultRelativeTime = { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' +}; + +function relativeTime (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (isFunction(output)) ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); +} + +function pastFuture (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return isFunction(format) ? format(output) : format.replace(/%s/i, output); +} + +var aliases = {}; + +function addUnitAlias (unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; +} + +function normalizeUnits(units) { + return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; +} + +function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; +} + +var priorities = {}; + +function addUnitPriority(unit, priority) { + priorities[unit] = priority; +} + +function getPrioritizedUnits(unitsObj) { + var units = []; + for (var u in unitsObj) { + units.push({unit: u, priority: priorities[u]}); + } + units.sort(function (a, b) { + return a.priority - b.priority; + }); + return units; +} + +function makeGetSet (unit, keepTime) { + return function (value) { + if (value != null) { + set$1(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); + } + }; +} + +function get (mom, unit) { + return mom.isValid() ? + mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; +} + +function set$1 (mom, unit, value) { + if (mom.isValid()) { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } +} + +// MOMENTS + +function stringGet (units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; +} + + +function stringSet (units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units); + for (var i = 0; i < prioritized.length; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; +} + +function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; +} + +var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; + +var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; + +var formatFunctions = {}; + +var formatTokenFunctions = {}; + +// token: 'M' +// padded: ['MM', 2] +// ordinal: 'Mo' +// callback: function () { this.month() + 1 } +function addFormatToken (token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal(func.apply(this, arguments), token); + }; + } +} + +function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); +} + +function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = '', i; + for (i = 0; i < length; i++) { + output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; + } + return output; + }; +} + +// format date using native date object +function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); + + return formatFunctions[format](m); +} + +function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; +} + +var match1 = /\d/; // 0 - 9 +var match2 = /\d\d/; // 00 - 99 +var match3 = /\d{3}/; // 000 - 999 +var match4 = /\d{4}/; // 0000 - 9999 +var match6 = /[+-]?\d{6}/; // -999999 - 999999 +var match1to2 = /\d\d?/; // 0 - 99 +var match3to4 = /\d\d\d\d?/; // 999 - 9999 +var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 +var match1to3 = /\d{1,3}/; // 0 - 999 +var match1to4 = /\d{1,4}/; // 0 - 9999 +var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 + +var matchUnsigned = /\d+/; // 0 - inf +var matchSigned = /[+-]?\d+/; // -inf - inf + +var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z +var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z + +var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 + +// any word (or two) characters or numbers including two/three word month in arabic. +// includes scottish gaelic two word and hyphenated months +var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; + + +var regexes = {}; + +function addRegexToken (token, regex, strictRegex) { + regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { + return (isStrict && strictRegex) ? strictRegex : regex; + }; +} + +function getParseRegexForToken (token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); +} + +// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript +function unescapeFormat(s) { + return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + })); +} + +function regexEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); +} + +var tokens = {}; + +function addParseToken (token, callback) { + var i, func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (isNumber(callback)) { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } +} + +function addWeekParseToken (token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); +} + +function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } +} + +var YEAR = 0; +var MONTH = 1; +var DATE = 2; +var HOUR = 3; +var MINUTE = 4; +var SECOND = 5; +var MILLISECOND = 6; +var WEEK = 7; +var WEEKDAY = 8; + +var indexOf; + +if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf; +} else { + indexOf = function (o) { + // I know + var i; + for (i = 0; i < this.length; ++i) { + if (this[i] === o) { + return i; + } + } + return -1; + }; +} + +var indexOf$1 = indexOf; + +function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); +} + +// FORMATTING + +addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; +}); + +addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); +}); + +addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); +}); + +// ALIASES + +addUnitAlias('month', 'M'); + +// PRIORITY + +addUnitPriority('month', 8); + +// PARSING + +addRegexToken('M', match1to2); +addRegexToken('MM', match1to2, match2); +addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict); +}); +addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict); +}); + +addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; +}); + +addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; + } +}); + +// LOCALES + +var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/; +var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); +function localeMonths (m, format) { + if (!m) { + return this._months; + } + return isArray(this._months) ? this._months[m.month()] : + this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()]; +} + +var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); +function localeMonthsShort (m, format) { + if (!m) { + return this._monthsShort; + } + return isArray(this._monthsShort) ? this._monthsShort[m.month()] : + this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; +} + +function handleStrictParse(monthName, format, strict) { + var i, ii, mom, llc = monthName.toLocaleLowerCase(); + if (!this._monthsParse) { + // this is not used + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + for (i = 0; i < 12; ++i) { + mom = createUTC([2000, i]); + this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase(); + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'MMM') { + ii = indexOf$1.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'MMM') { + ii = indexOf$1.call(this._shortMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._longMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } +} + +function localeMonthsParse (monthName, format, strict) { + var i, mom, regex; + + if (this._monthsParseExact) { + return handleStrictParse.call(this, monthName, format, strict); + } + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + // TODO: add sorting + // Sorting makes sure if one month (or abbr) is a prefix of another + // see sorting in computeMonthsParse + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); + this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); + } + if (!strict && !this._monthsParse[i]) { + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { + return i; + } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } +} + +// MOMENTS + +function setMonth (mom, value) { + var dayOfMonth; + + if (!mom.isValid()) { + // No op + return mom; + } + + if (typeof value === 'string') { + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (!isNumber(value)) { + return mom; + } + } + } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; +} + +function getSetMonth (value) { + if (value != null) { + setMonth(this, value); + hooks.updateOffset(this, true); + return this; + } else { + return get(this, 'Month'); + } +} + +function getDaysInMonth () { + return daysInMonth(this.year(), this.month()); +} + +var defaultMonthsShortRegex = matchWord; +function monthsShortRegex (isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsShortStrictRegex; + } else { + return this._monthsShortRegex; + } + } else { + if (!hasOwnProp(this, '_monthsShortRegex')) { + this._monthsShortRegex = defaultMonthsShortRegex; + } + return this._monthsShortStrictRegex && isStrict ? + this._monthsShortStrictRegex : this._monthsShortRegex; + } +} + +var defaultMonthsRegex = matchWord; +function monthsRegex (isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsStrictRegex; + } else { + return this._monthsRegex; + } + } else { + if (!hasOwnProp(this, '_monthsRegex')) { + this._monthsRegex = defaultMonthsRegex; + } + return this._monthsStrictRegex && isStrict ? + this._monthsStrictRegex : this._monthsRegex; + } +} + +function computeMonthsParse () { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var shortPieces = [], longPieces = [], mixedPieces = [], + i, mom; + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + shortPieces.push(this.monthsShort(mom, '')); + longPieces.push(this.months(mom, '')); + mixedPieces.push(this.months(mom, '')); + mixedPieces.push(this.monthsShort(mom, '')); + } + // Sorting makes sure if one month (or abbr) is a prefix of another it + // will match the longer piece. + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 12; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + } + for (i = 0; i < 24; i++) { + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._monthsShortRegex = this._monthsRegex; + this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); + this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); +} + +// FORMATTING + +addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? '' + y : '+' + y; +}); + +addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; +}); + +addFormatToken(0, ['YYYY', 4], 0, 'year'); +addFormatToken(0, ['YYYYY', 5], 0, 'year'); +addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + +// ALIASES + +addUnitAlias('year', 'y'); + +// PRIORITIES + +addUnitPriority('year', 1); + +// PARSING + +addRegexToken('Y', matchSigned); +addRegexToken('YY', match1to2, match2); +addRegexToken('YYYY', match1to4, match4); +addRegexToken('YYYYY', match1to6, match6); +addRegexToken('YYYYYY', match1to6, match6); + +addParseToken(['YYYYY', 'YYYYYY'], YEAR); +addParseToken('YYYY', function (input, array) { + array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); +}); +addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); +}); +addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); +}); + +// HELPERS + +function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; +} + +function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; +} + +// HOOKS + +hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); +}; + +// MOMENTS + +var getSetYear = makeGetSet('FullYear', true); + +function getIsLeapYear () { + return isLeapYear(this.year()); +} + +function createDate (y, m, d, h, M, s, ms) { + //can't just apply() to create a date: + //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + var date = new Date(y, m, d, h, M, s, ms); + + //the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { + date.setFullYear(y); + } + return date; +} + +function createUTCDate (y) { + var date = new Date(Date.UTC.apply(null, arguments)); + + //the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y); + } + return date; +} + +// start-of-first-week - start-of-year +function firstWeekOffset(year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + dow - doy, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; + + return -fwdlw + fwd - 1; +} + +//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday +function dayOfYearFromWeeks(year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, + weekOffset = firstWeekOffset(year, dow, doy), + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, resDayOfYear; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } + + return { + year: resYear, + dayOfYear: resDayOfYear + }; +} + +function weekOfYear(mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), + week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, + resWeek, resYear; + + if (week < 1) { + resYear = mom.year() - 1; + resWeek = week + weeksInYear(resYear, dow, doy); + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy); + resYear = mom.year() + 1; + } else { + resYear = mom.year(); + resWeek = week; + } + + return { + week: resWeek, + year: resYear + }; +} + +function weeksInYear(year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy); + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; +} + +// FORMATTING + +addFormatToken('w', ['ww', 2], 'wo', 'week'); +addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + +// ALIASES + +addUnitAlias('week', 'w'); +addUnitAlias('isoWeek', 'W'); + +// PRIORITIES + +addUnitPriority('week', 5); +addUnitPriority('isoWeek', 5); + +// PARSING + +addRegexToken('w', match1to2); +addRegexToken('ww', match1to2, match2); +addRegexToken('W', match1to2); +addRegexToken('WW', match1to2, match2); + +addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { + week[token.substr(0, 1)] = toInt(input); +}); + +// HELPERS + +// LOCALES + +function localeWeek (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; +} + +var defaultLocaleWeek = { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. +}; + +function localeFirstDayOfWeek () { + return this._week.dow; +} + +function localeFirstDayOfYear () { + return this._week.doy; +} + +// MOMENTS + +function getSetWeek (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); +} + +function getSetISOWeek (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); +} + +// FORMATTING + +addFormatToken('d', 0, 'do', 'day'); + +addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); +}); + +addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); +}); + +addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); +}); + +addFormatToken('e', 0, 0, 'weekday'); +addFormatToken('E', 0, 0, 'isoWeekday'); + +// ALIASES + +addUnitAlias('day', 'd'); +addUnitAlias('weekday', 'e'); +addUnitAlias('isoWeekday', 'E'); + +// PRIORITY +addUnitPriority('day', 11); +addUnitPriority('weekday', 11); +addUnitPriority('isoWeekday', 11); + +// PARSING + +addRegexToken('d', match1to2); +addRegexToken('e', match1to2); +addRegexToken('E', match1to2); +addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict); +}); +addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict); +}); +addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict); +}); + +addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; + } +}); + +addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); +}); + +// HELPERS + +function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; +} + +function parseIsoWeekday(input, locale) { + if (typeof input === 'string') { + return locale.weekdaysParse(input) % 7 || 7; + } + return isNaN(input) ? null : input; +} + +// LOCALES + +var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); +function localeWeekdays (m, format) { + if (!m) { + return this._weekdays; + } + return isArray(this._weekdays) ? this._weekdays[m.day()] : + this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; +} + +var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); +function localeWeekdaysShort (m) { + return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort; +} + +var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); +function localeWeekdaysMin (m) { + return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin; +} + +function handleStrictParse$1(weekdayName, format, strict) { + var i, ii, mom, llc = weekdayName.toLocaleLowerCase(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._shortWeekdaysParse = []; + this._minWeekdaysParse = []; + + for (i = 0; i < 7; ++i) { + mom = createUTC([2000, 1]).day(i); + this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase(); + this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase(); + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'dddd') { + ii = indexOf$1.call(this._weekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'dddd') { + ii = indexOf$1.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._minWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } +} + +function localeWeekdaysParse (weekdayName, format, strict) { + var i, mom, regex; + + if (this._weekdaysParseExact) { + return handleStrictParse$1.call(this, weekdayName, format, strict); + } + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._minWeekdaysParse = []; + this._shortWeekdaysParse = []; + this._fullWeekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + + mom = createUTC([2000, 1]).day(i); + if (strict && !this._fullWeekdaysParse[i]) { + this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i'); + this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i'); + this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i'); + } + if (!this._weekdaysParse[i]) { + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } +} + +// MOMENTS + +function getSetDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } +} + +function getSetLocaleDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); +} + +function getSetISODayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + + if (input != null) { + var weekday = parseIsoWeekday(input, this.localeData()); + return this.day(this.day() % 7 ? weekday : weekday - 7); + } else { + return this.day() || 7; + } +} + +var defaultWeekdaysRegex = matchWord; +function weekdaysRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysStrictRegex; + } else { + return this._weekdaysRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysRegex')) { + this._weekdaysRegex = defaultWeekdaysRegex; + } + return this._weekdaysStrictRegex && isStrict ? + this._weekdaysStrictRegex : this._weekdaysRegex; + } +} + +var defaultWeekdaysShortRegex = matchWord; +function weekdaysShortRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysShortStrictRegex; + } else { + return this._weekdaysShortRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysShortRegex')) { + this._weekdaysShortRegex = defaultWeekdaysShortRegex; + } + return this._weekdaysShortStrictRegex && isStrict ? + this._weekdaysShortStrictRegex : this._weekdaysShortRegex; + } +} + +var defaultWeekdaysMinRegex = matchWord; +function weekdaysMinRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysMinStrictRegex; + } else { + return this._weekdaysMinRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysMinRegex')) { + this._weekdaysMinRegex = defaultWeekdaysMinRegex; + } + return this._weekdaysMinStrictRegex && isStrict ? + this._weekdaysMinStrictRegex : this._weekdaysMinRegex; + } +} + + +function computeWeekdaysParse () { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], + i, mom, minp, shortp, longp; + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, 1]).day(i); + minp = this.weekdaysMin(mom, ''); + shortp = this.weekdaysShort(mom, ''); + longp = this.weekdays(mom, ''); + minPieces.push(minp); + shortPieces.push(shortp); + longPieces.push(longp); + mixedPieces.push(minp); + mixedPieces.push(shortp); + mixedPieces.push(longp); + } + // Sorting makes sure if one weekday (or abbr) is a prefix of another it + // will match the longer piece. + minPieces.sort(cmpLenRev); + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 7; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._weekdaysShortRegex = this._weekdaysRegex; + this._weekdaysMinRegex = this._weekdaysRegex; + + this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); + this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); + this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i'); +} + +// FORMATTING + +function hFormat() { + return this.hours() % 12 || 12; +} + +function kFormat() { + return this.hours() || 24; +} + +addFormatToken('H', ['HH', 2], 0, 'hour'); +addFormatToken('h', ['hh', 2], 0, hFormat); +addFormatToken('k', ['kk', 2], 0, kFormat); + +addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); +}); + +addFormatToken('hmmss', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2); +}); + +addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2); +}); + +addFormatToken('Hmmss', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2); +}); + +function meridiem (token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); + }); +} + +meridiem('a', true); +meridiem('A', false); + +// ALIASES + +addUnitAlias('hour', 'h'); + +// PRIORITY +addUnitPriority('hour', 13); + +// PARSING + +function matchMeridiem (isStrict, locale) { + return locale._meridiemParse; +} + +addRegexToken('a', matchMeridiem); +addRegexToken('A', matchMeridiem); +addRegexToken('H', match1to2); +addRegexToken('h', match1to2); +addRegexToken('HH', match1to2, match2); +addRegexToken('hh', match1to2, match2); + +addRegexToken('hmm', match3to4); +addRegexToken('hmmss', match5to6); +addRegexToken('Hmm', match3to4); +addRegexToken('Hmmss', match5to6); + +addParseToken(['H', 'HH'], HOUR); +addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; +}); +addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; +}); +addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + getParsingFlags(config).bigHour = true; +}); +addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4; + var pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + getParsingFlags(config).bigHour = true; +}); +addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); +}); +addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4; + var pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); +}); + +// LOCALES + +function localeIsPM (input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); +} + +var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; +function localeMeridiem (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } +} + + +// MOMENTS + +// Setting the hour should keep the time, because the user explicitly +// specified which hour he wants. So trying to maintain the same hour (in +// a new timezone) makes sense. Adding/subtracting hours does not follow +// this rule. +var getSetHour = makeGetSet('Hours', true); + +// months +// week +// weekdays +// meridiem +var baseConfig = { + calendar: defaultCalendar, + longDateFormat: defaultLongDateFormat, + invalidDate: defaultInvalidDate, + ordinal: defaultOrdinal, + ordinalParse: defaultOrdinalParse, + relativeTime: defaultRelativeTime, + + months: defaultLocaleMonths, + monthsShort: defaultLocaleMonthsShort, + + week: defaultLocaleWeek, + + weekdays: defaultLocaleWeekdays, + weekdaysMin: defaultLocaleWeekdaysMin, + weekdaysShort: defaultLocaleWeekdaysShort, + + meridiemParse: defaultLocaleMeridiemParse +}; + +// internal storage for locale config files +var locales = {}; +var localeFamilies = {}; +var globalLocale; + +function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; +} + +// pick the locale from the array +// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each +// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root +function chooseLocale(names) { + var i = 0, j, next, locale, split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return null; +} + +function loadLocale(name) { + var oldLocale = null; + // TODO: Find a better way to register and load all the locales in Node + if (!locales[name] && (typeof module !== 'undefined') && + module && module.exports) { + try { + oldLocale = globalLocale._abbr; + require('./locale/' + name); + // because defineLocale currently also sets the global locale, we + // want to undo that for lazy loaded locales + getSetGlobalLocale(oldLocale); + } catch (e) { } + } + return locales[name]; +} + +// This function will load locale and then set the global locale. If +// no arguments are passed in, it will simply return the current global +// locale key. +function getSetGlobalLocale (key, values) { + var data; + if (key) { + if (isUndefined(values)) { + data = getLocale(key); + } + else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } + } + + return globalLocale._abbr; +} + +function defineLocale (name, config) { + if (config !== null) { + var parentConfig = baseConfig; + config.abbr = name; + if (locales[name] != null) { + deprecateSimple('defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale ' + + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'); + parentConfig = locales[name]._config; + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + parentConfig = locales[config.parentLocale]._config; + } else { + if (!localeFamilies[config.parentLocale]) { + localeFamilies[config.parentLocale] = []; + } + localeFamilies[config.parentLocale].push({ + name: name, + config: config + }); + return null; + } + } + locales[name] = new Locale(mergeConfigs(parentConfig, config)); + + if (localeFamilies[name]) { + localeFamilies[name].forEach(function (x) { + defineLocale(x.name, x.config); + }); + } + + // backwards compat for now: also set the locale + // make sure we set the locale AFTER all child locales have been + // created, so we won't end up with the child locale set. + getSetGlobalLocale(name); + + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } +} + +function updateLocale(name, config) { + if (config != null) { + var locale, parentConfig = baseConfig; + // MERGE + if (locales[name] != null) { + parentConfig = locales[name]._config; + } + config = mergeConfigs(parentConfig, config); + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + + // backwards compat for now: also set the locale + getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; +} + +// returns locale data +function getLocale (key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); +} + +function listLocales() { + return keys$1(locales); +} + +function checkOverflow (m) { + var overflow; + var a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : + a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : + a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : + a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : + a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : + a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : + -1; + + if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + if (getParsingFlags(m)._overflowWeeks && overflow === -1) { + overflow = WEEK; + } + if (getParsingFlags(m)._overflowWeekday && overflow === -1) { + overflow = WEEKDAY; + } + + getParsingFlags(m).overflow = overflow; + } + + return m; +} + +// iso 8601 regex +// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) +var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; +var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; + +var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; + +var isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], + ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], + ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], + ['GGGG-[W]WW', /\d{4}-W\d\d/, false], + ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-MM', /\d{4}-\d\d/, false], + ['YYYYYYMMDD', /[+-]\d{10}/], + ['YYYYMMDD', /\d{8}/], + // YYYYMM is NOT allowed by the standard + ['GGGG[W]WWE', /\d{4}W\d{3}/], + ['GGGG[W]WW', /\d{4}W\d{2}/, false], + ['YYYYDDD', /\d{7}/] +]; + +// iso time formats and regexes +var isoTimes = [ + ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], + ['HH:mm:ss', /\d\d:\d\d:\d\d/], + ['HH:mm', /\d\d:\d\d/], + ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], + ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], + ['HHmmss', /\d\d\d\d\d\d/], + ['HHmm', /\d\d\d\d/], + ['HH', /\d\d/] +]; + +var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; + +// date from iso format +function configFromISO(config) { + var i, l, + string = config._i, + match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), + allowTime, dateFormat, timeFormat, tzFormat; + + if (match) { + getParsingFlags(config).iso = true; + + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0]; + allowTime = isoDates[i][2] !== false; + break; + } + } + if (dateFormat == null) { + config._isValid = false; + return; + } + if (match[3]) { + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { + // match[2] should be 'T' or space + timeFormat = (match[2] || ' ') + isoTimes[i][0]; + break; + } + } + if (timeFormat == null) { + config._isValid = false; + return; + } + } + if (!allowTime && timeFormat != null) { + config._isValid = false; + return; + } + if (match[4]) { + if (tzRegex.exec(match[4])) { + tzFormat = 'Z'; + } else { + config._isValid = false; + return; + } + } + config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); + configFromStringAndFormat(config); + } else { + config._isValid = false; + } +} + +// date from iso format or fallback +function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + hooks.createFromInputFallback(config); + } +} + +hooks.createFromInputFallback = deprecate( + 'value provided is not in a recognized ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non ISO date formats are ' + + 'discouraged and will be removed in an upcoming major release. Please refer to ' + + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } +); + +// Pick the first defined of two or three arguments. +function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; +} + +function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(hooks.now()); + if (config._useUTC) { + return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; +} + +// convert an array to a date. +// the array should mirror the parameters below +// note: all values past the year are optional and will default to the lowest possible value. +// [year, month, day , hour, minute, second, millisecond] +function configFromArray (config) { + var i, date, input = [], currentDate, yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if (config._dayOfYear > daysInYear(yearToUse)) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if (config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } +} + +function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + var curWeek = weekOfYear(createLocal(), dow, doy); + + weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); + + // Default to current week. + week = defaults(w.w, curWeek.week); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to begining of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } +} + +// constant that refers to the ISO standard +hooks.ISO_8601 = function () {}; + +// date from string and format string +function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === hooks.ISO_8601) { + configFromISO(config); + return; + } + + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; + + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + // console.log('token', token, 'parsedInput', parsedInput, + // 'regex', getParseRegexForToken(token, config)); + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } + else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } + else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if (config._a[HOUR] <= 12 && + getParsingFlags(config).bigHour === true && + config._a[HOUR] > 0) { + getParsingFlags(config).bigHour = undefined; + } + + getParsingFlags(config).parsedDateParts = config._a.slice(0); + getParsingFlags(config).meridiem = config._meridiem; + // handle meridiem + config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); + + configFromArray(config); + checkOverflow(config); +} + + +function meridiemFixWrap (locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } +} + +// date from string and array of format strings +function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + + scoreToBeat, + i, + currentScore; + + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (!isValid(tempConfig)) { + continue; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; + + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + + getParsingFlags(tempConfig).score = currentScore; + + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + + extend(config, bestMoment || tempConfig); +} + +function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i); + config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { + return obj && parseInt(obj, 10); + }); + + configFromArray(config); +} + +function createFromConfig (config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; +} + +function prepareConfig (config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return createInvalid({nullInput: true}); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isDate(input)) { + config._d = input; + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } + + if (!isValid(config)) { + config._d = null; + } + + return config; +} + +function configFromInput(config) { + var input = config._i; + if (input === undefined) { + config._d = new Date(hooks.now()); + } else if (isDate(input)) { + config._d = new Date(input.valueOf()); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (typeof(input) === 'object') { + configFromObject(config); + } else if (isNumber(input)) { + // from milliseconds + config._d = new Date(input); + } else { + hooks.createFromInputFallback(config); + } +} + +function createLocalOrUTC (input, format, locale, strict, isUTC) { + var c = {}; + + if (locale === true || locale === false) { + strict = locale; + locale = undefined; + } + + if ((isObject(input) && isObjectEmpty(input)) || + (isArray(input) && input.length === 0)) { + input = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); +} + +function createLocal (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); +} + +var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other < this ? this : other; + } else { + return createInvalid(); + } + } +); + +var prototypeMax = deprecate( + 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other > this ? this : other; + } else { + return createInvalid(); + } + } +); + +// Pick a moment m from moments so that m[fn](other) is true for all +// other. This relies on the function fn to be transitive. +// +// moments should either be an array of moment objects or an array, whose +// first element is an array of moment objects. +function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; +} + +// TODO: Use [].sort instead? +function min () { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); +} + +function max () { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); +} + +var now = function () { + return Date.now ? Date.now() : +(new Date()); +}; + +function Duration (duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; + + this._data = {}; + + this._locale = getLocale(); + + this._bubble(); +} + +function isDuration (obj) { + return obj instanceof Duration; +} + +function absRound (number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } +} + +// FORMATTING + +function offset (token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(); + var sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); + }); +} + +offset('Z', ':'); +offset('ZZ', ''); + +// PARSING + +addRegexToken('Z', matchShortOffset); +addRegexToken('ZZ', matchShortOffset); +addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(matchShortOffset, input); +}); + +// HELPERS + +// timezone chunker +// '+10:00' > ['10', '00'] +// '-1530' > ['-15', '30'] +var chunkOffset = /([\+\-]|\d\d)/gi; + +function offsetFromString(matcher, string) { + var matches = (string || '').match(matcher); + + if (matches === null) { + return null; + } + + var chunk = matches[matches.length - 1] || []; + var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + var minutes = +(parts[1] * 60) + toInt(parts[2]); + + return minutes === 0 ? + 0 : + parts[0] === '+' ? minutes : -minutes; +} + +// Return a moment from input, that is local/utc/zone equivalent to model. +function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); + // Use low-level api, because this fn is low-level api. + res._d.setTime(res._d.valueOf() + diff); + hooks.updateOffset(res, false); + return res; + } else { + return createLocal(input).local(); + } +} + +function getDateOffset (m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset() / 15) * 15; +} + +// HOOKS + +// This function will be called whenever a moment is mutated. +// It is intended to keep the offset in sync with the timezone. +hooks.updateOffset = function () {}; + +// MOMENTS + +// keepLocalTime = true means only change the timezone, without +// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> +// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset +// +0200, so we adjust the time as needed, to be valid. +// +// Keeping the time actually adds/subtracts (one hour) +// from the actual represented time. That is why we call updateOffset +// a second time. In case it wants us to change the offset again +// _changeInProgress == true case, then we have to adjust, because +// there is no such time in the given timezone. +function getSetOffset (input, keepLocalTime) { + var offset = this._offset || 0, + localAdjust; + if (!this.isValid()) { + return input != null ? this : NaN; + } + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(matchShortOffset, input); + if (input === null) { + return this; + } + } else if (Math.abs(input) < 16) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addSubtract(this, createDuration(input - offset, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } +} + +function getSetZone (input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } +} + +function setOffsetToUTC (keepLocalTime) { + return this.utcOffset(0, keepLocalTime); +} + +function setOffsetToLocal (keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; +} + +function setOffsetToParsedOffset () { + if (this._tzm != null) { + this.utcOffset(this._tzm); + } else if (typeof this._i === 'string') { + var tZone = offsetFromString(matchOffset, this._i); + if (tZone != null) { + this.utcOffset(tZone); + } + else { + this.utcOffset(0, true); + } + } + return this; +} + +function hasAlignedHourOffset (input) { + if (!this.isValid()) { + return false; + } + input = input ? createLocal(input).utcOffset() : 0; + + return (this.utcOffset() - input) % 60 === 0; +} + +function isDaylightSavingTime () { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); +} + +function isDaylightSavingTimeShifted () { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted; + } + + var c = {}; + + copyConfig(c, this); + c = prepareConfig(c); + + if (c._a) { + var other = c._isUTC ? createUTC(c._a) : createLocal(c._a); + this._isDSTShifted = this.isValid() && + compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } + + return this._isDSTShifted; +} + +function isLocal () { + return this.isValid() ? !this._isUTC : false; +} + +function isUtcOffset () { + return this.isValid() ? this._isUTC : false; +} + +function isUtc () { + return this.isValid() ? this._isUTC && this._offset === 0 : false; +} + +// ASP.NET json date format regex +var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/; + +// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html +// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere +// and further modified to allow for strings containing both week and day +var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/; + +function createDuration (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms : input._milliseconds, + d : input._days, + M : input._months + }; + } else if (isNumber(input)) { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : 0, + d : toInt(match[DATE]) * sign, + h : toInt(match[HOUR]) * sign, + m : toInt(match[MINUTE]) * sign, + s : toInt(match[SECOND]) * sign, + ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match + }; + } else if (!!(match = isoRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : parseIso(match[2], sign), + M : parseIso(match[3], sign), + w : parseIso(match[4], sign), + d : parseIso(match[5], sign), + h : parseIso(match[6], sign), + m : parseIso(match[7], sign), + s : parseIso(match[8], sign) + }; + } else if (duration == null) {// checks for null or undefined + duration = {}; + } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to)); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + return ret; +} + +createDuration.fn = Duration.prototype; + +function parseIso (inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; +} + +function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; + + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + + return res; +} + +function momentsDifference(base, other) { + var res; + if (!(base.isValid() && other.isValid())) { + return {milliseconds: 0, months: 0}; + } + + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; +} + +// TODO: remove 'name' arg after deprecation is removed +function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'); + tmp = val; val = period; period = tmp; + } + + val = typeof val === 'string' ? +val : val; + dur = createDuration(val, period); + addSubtract(this, dur, direction); + return this; + }; +} + +function addSubtract (mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = absRound(duration._days), + months = absRound(duration._months); + + if (!mom.isValid()) { + // No op + return; + } + + updateOffset = updateOffset == null ? true : updateOffset; + + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + } + if (days) { + set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); + } + if (months) { + setMonth(mom, get(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + hooks.updateOffset(mom, days || months); + } +} + +var add = createAdder(1, 'add'); +var subtract = createAdder(-1, 'subtract'); + +function getCalendarFormat(myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + return diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; +} + +function calendar$1 (time, formats) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + format = hooks.calendarFormat(this, sod) || 'sameElse'; + + var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]); + + return this.format(output || this.localeData().calendar(format, this, createLocal(now))); +} + +function clone () { + return new Moment(this); +} + +function isAfter (input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf(); + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf(); + } +} + +function isBefore (input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf(); + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf(); + } +} + +function isBetween (from, to, units, inclusivity) { + inclusivity = inclusivity || '()'; + return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) && + (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units)); +} + +function isSame (input, units) { + var localInput = isMoment(input) ? input : createLocal(input), + inputMs; + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units || 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf(); + } else { + inputMs = localInput.valueOf(); + return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf(); + } +} + +function isSameOrAfter (input, units) { + return this.isSame(input, units) || this.isAfter(input,units); +} + +function isSameOrBefore (input, units) { + return this.isSame(input, units) || this.isBefore(input,units); +} + +function diff (input, units, asFloat) { + var that, + zoneDelta, + delta, output; + + if (!this.isValid()) { + return NaN; + } + + that = cloneWithOffset(input, this); + + if (!that.isValid()) { + return NaN; + } + + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; + + units = normalizeUnits(units); + + if (units === 'year' || units === 'month' || units === 'quarter') { + output = monthDiff(this, that); + if (units === 'quarter') { + output = output / 3; + } else if (units === 'year') { + output = output / 12; + } + } else { + delta = this - that; + output = units === 'second' ? delta / 1e3 : // 1000 + units === 'minute' ? delta / 6e4 : // 1000 * 60 + units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + delta; + } + return asFloat ? output : absFloor(output); +} + +function monthDiff (a, b) { + // difference in months + var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + //check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0; +} + +hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; +hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; + +function toString () { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); +} + +function toISOString () { + var m = this.clone().utc(); + if (0 < m.year() && m.year() <= 9999) { + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + return this.toDate().toISOString(); + } else { + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + } else { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } +} + +/** + * Return a human readable representation of a moment that can + * also be evaluated to get a new moment which is the same + * + * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects + */ +function inspect () { + if (!this.isValid()) { + return 'moment.invalid(/* ' + this._i + ' */)'; + } + var func = 'moment'; + var zone = ''; + if (!this.isLocal()) { + func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; + zone = 'Z'; + } + var prefix = '[' + func + '("]'; + var year = (0 < this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY'; + var datetime = '-MM-DD[T]HH:mm:ss.SSS'; + var suffix = zone + '[")]'; + + return this.format(prefix + year + datetime + suffix); +} + +function format (inputString) { + if (!inputString) { + inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat; + } + var output = formatMoment(this, inputString); + return this.localeData().postformat(output); +} + +function from (time, withoutSuffix) { + if (this.isValid() && + ((isMoment(time) && time.isValid()) || + createLocal(time).isValid())) { + return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } +} + +function fromNow (withoutSuffix) { + return this.from(createLocal(), withoutSuffix); +} + +function to (time, withoutSuffix) { + if (this.isValid() && + ((isMoment(time) && time.isValid()) || + createLocal(time).isValid())) { + return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } +} + +function toNow (withoutSuffix) { + return this.to(createLocal(), withoutSuffix); +} + +// If passed a locale key, it will set the locale for this +// instance. Otherwise, it will return the locale configuration +// variables for this instance. +function locale (key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } +} + +var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } +); + +function localeData () { + return this._locale; +} + +function startOf (units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + case 'date': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + } + + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } + if (units === 'isoWeek') { + this.isoWeekday(1); + } + + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } + + return this; +} + +function endOf (units) { + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond') { + return this; + } + + // 'date' is an alias for 'day', so it should be considered as such. + if (units === 'date') { + units = 'day'; + } + + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); +} + +function valueOf () { + return this._d.valueOf() - ((this._offset || 0) * 60000); +} + +function unix () { + return Math.floor(this.valueOf() / 1000); +} + +function toDate () { + return new Date(this.valueOf()); +} + +function toArray () { + var m = this; + return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; +} + +function toObject () { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds() + }; +} + +function toJSON () { + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; +} + +function isValid$1 () { + return isValid(this); +} + +function parsingFlags () { + return extend({}, getParsingFlags(this)); +} + +function invalidAt () { + return getParsingFlags(this).overflow; +} + +function creationData() { + return { + input: this._i, + format: this._f, + locale: this._locale, + isUTC: this._isUTC, + strict: this._strict + }; +} + +// FORMATTING + +addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; +}); + +addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; +}); + +function addWeekYearFormatToken (token, getter) { + addFormatToken(0, [token, token.length], 0, getter); +} + +addWeekYearFormatToken('gggg', 'weekYear'); +addWeekYearFormatToken('ggggg', 'weekYear'); +addWeekYearFormatToken('GGGG', 'isoWeekYear'); +addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + +// ALIASES + +addUnitAlias('weekYear', 'gg'); +addUnitAlias('isoWeekYear', 'GG'); + +// PRIORITY + +addUnitPriority('weekYear', 1); +addUnitPriority('isoWeekYear', 1); + + +// PARSING + +addRegexToken('G', matchSigned); +addRegexToken('g', matchSigned); +addRegexToken('GG', match1to2, match2); +addRegexToken('gg', match1to2, match2); +addRegexToken('GGGG', match1to4, match4); +addRegexToken('gggg', match1to4, match4); +addRegexToken('GGGGG', match1to6, match6); +addRegexToken('ggggg', match1to6, match6); + +addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { + week[token.substr(0, 2)] = toInt(input); +}); + +addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = hooks.parseTwoDigitYear(input); +}); + +// MOMENTS + +function getSetWeekYear (input) { + return getSetWeekYearHelper.call(this, + input, + this.week(), + this.weekday(), + this.localeData()._week.dow, + this.localeData()._week.doy); +} + +function getSetISOWeekYear (input) { + return getSetWeekYearHelper.call(this, + input, this.isoWeek(), this.isoWeekday(), 1, 4); +} + +function getISOWeeksInYear () { + return weeksInYear(this.year(), 1, 4); +} + +function getWeeksInYear () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); +} + +function getSetWeekYearHelper(input, week, weekday, dow, doy) { + var weeksTarget; + if (input == null) { + return weekOfYear(this, dow, doy).year; + } else { + weeksTarget = weeksInYear(input, dow, doy); + if (week > weeksTarget) { + week = weeksTarget; + } + return setWeekAll.call(this, input, week, weekday, dow, doy); + } +} + +function setWeekAll(weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); + + this.year(date.getUTCFullYear()); + this.month(date.getUTCMonth()); + this.date(date.getUTCDate()); + return this; +} + +// FORMATTING + +addFormatToken('Q', 0, 'Qo', 'quarter'); + +// ALIASES + +addUnitAlias('quarter', 'Q'); + +// PRIORITY + +addUnitPriority('quarter', 7); + +// PARSING + +addRegexToken('Q', match1); +addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; +}); + +// MOMENTS + +function getSetQuarter (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); +} + +// FORMATTING + +addFormatToken('D', ['DD', 2], 'Do', 'date'); + +// ALIASES + +addUnitAlias('date', 'D'); + +// PRIOROITY +addUnitPriority('date', 9); + +// PARSING + +addRegexToken('D', match1to2); +addRegexToken('DD', match1to2, match2); +addRegexToken('Do', function (isStrict, locale) { + return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; +}); + +addParseToken(['D', 'DD'], DATE); +addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0], 10); +}); + +// MOMENTS + +var getSetDayOfMonth = makeGetSet('Date', true); + +// FORMATTING + +addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + +// ALIASES + +addUnitAlias('dayOfYear', 'DDD'); + +// PRIORITY +addUnitPriority('dayOfYear', 4); + +// PARSING + +addRegexToken('DDD', match1to3); +addRegexToken('DDDD', match3); +addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); +}); + +// HELPERS + +// MOMENTS + +function getSetDayOfYear (input) { + var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); +} + +// FORMATTING + +addFormatToken('m', ['mm', 2], 0, 'minute'); + +// ALIASES + +addUnitAlias('minute', 'm'); + +// PRIORITY + +addUnitPriority('minute', 14); + +// PARSING + +addRegexToken('m', match1to2); +addRegexToken('mm', match1to2, match2); +addParseToken(['m', 'mm'], MINUTE); + +// MOMENTS + +var getSetMinute = makeGetSet('Minutes', false); + +// FORMATTING + +addFormatToken('s', ['ss', 2], 0, 'second'); + +// ALIASES + +addUnitAlias('second', 's'); + +// PRIORITY + +addUnitPriority('second', 15); + +// PARSING + +addRegexToken('s', match1to2); +addRegexToken('ss', match1to2, match2); +addParseToken(['s', 'ss'], SECOND); + +// MOMENTS + +var getSetSecond = makeGetSet('Seconds', false); + +// FORMATTING + +addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); +}); + +addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); +}); + +addFormatToken(0, ['SSS', 3], 0, 'millisecond'); +addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; +}); +addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; +}); +addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; +}); +addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; +}); +addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; +}); +addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; +}); + + +// ALIASES + +addUnitAlias('millisecond', 'ms'); + +// PRIORITY + +addUnitPriority('millisecond', 16); + +// PARSING + +addRegexToken('S', match1to3, match1); +addRegexToken('SS', match1to3, match2); +addRegexToken('SSS', match1to3, match3); + +var token; +for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); +} + +function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); +} + +for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); +} +// MOMENTS + +var getSetMillisecond = makeGetSet('Milliseconds', false); + +// FORMATTING + +addFormatToken('z', 0, 0, 'zoneAbbr'); +addFormatToken('zz', 0, 0, 'zoneName'); + +// MOMENTS + +function getZoneAbbr () { + return this._isUTC ? 'UTC' : ''; +} + +function getZoneName () { + return this._isUTC ? 'Coordinated Universal Time' : ''; +} + +var proto = Moment.prototype; + +proto.add = add; +proto.calendar = calendar$1; +proto.clone = clone; +proto.diff = diff; +proto.endOf = endOf; +proto.format = format; +proto.from = from; +proto.fromNow = fromNow; +proto.to = to; +proto.toNow = toNow; +proto.get = stringGet; +proto.invalidAt = invalidAt; +proto.isAfter = isAfter; +proto.isBefore = isBefore; +proto.isBetween = isBetween; +proto.isSame = isSame; +proto.isSameOrAfter = isSameOrAfter; +proto.isSameOrBefore = isSameOrBefore; +proto.isValid = isValid$1; +proto.lang = lang; +proto.locale = locale; +proto.localeData = localeData; +proto.max = prototypeMax; +proto.min = prototypeMin; +proto.parsingFlags = parsingFlags; +proto.set = stringSet; +proto.startOf = startOf; +proto.subtract = subtract; +proto.toArray = toArray; +proto.toObject = toObject; +proto.toDate = toDate; +proto.toISOString = toISOString; +proto.inspect = inspect; +proto.toJSON = toJSON; +proto.toString = toString; +proto.unix = unix; +proto.valueOf = valueOf; +proto.creationData = creationData; + +// Year +proto.year = getSetYear; +proto.isLeapYear = getIsLeapYear; + +// Week Year +proto.weekYear = getSetWeekYear; +proto.isoWeekYear = getSetISOWeekYear; + +// Quarter +proto.quarter = proto.quarters = getSetQuarter; + +// Month +proto.month = getSetMonth; +proto.daysInMonth = getDaysInMonth; + +// Week +proto.week = proto.weeks = getSetWeek; +proto.isoWeek = proto.isoWeeks = getSetISOWeek; +proto.weeksInYear = getWeeksInYear; +proto.isoWeeksInYear = getISOWeeksInYear; + +// Day +proto.date = getSetDayOfMonth; +proto.day = proto.days = getSetDayOfWeek; +proto.weekday = getSetLocaleDayOfWeek; +proto.isoWeekday = getSetISODayOfWeek; +proto.dayOfYear = getSetDayOfYear; + +// Hour +proto.hour = proto.hours = getSetHour; + +// Minute +proto.minute = proto.minutes = getSetMinute; + +// Second +proto.second = proto.seconds = getSetSecond; + +// Millisecond +proto.millisecond = proto.milliseconds = getSetMillisecond; + +// Offset +proto.utcOffset = getSetOffset; +proto.utc = setOffsetToUTC; +proto.local = setOffsetToLocal; +proto.parseZone = setOffsetToParsedOffset; +proto.hasAlignedHourOffset = hasAlignedHourOffset; +proto.isDST = isDaylightSavingTime; +proto.isLocal = isLocal; +proto.isUtcOffset = isUtcOffset; +proto.isUtc = isUtc; +proto.isUTC = isUtc; + +// Timezone +proto.zoneAbbr = getZoneAbbr; +proto.zoneName = getZoneName; + +// Deprecations +proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); +proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); +proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); +proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone); +proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted); + +function createUnix (input) { + return createLocal(input * 1000); +} + +function createInZone () { + return createLocal.apply(null, arguments).parseZone(); +} + +function preParsePostFormat (string) { + return string; +} + +var proto$1 = Locale.prototype; + +proto$1.calendar = calendar; +proto$1.longDateFormat = longDateFormat; +proto$1.invalidDate = invalidDate; +proto$1.ordinal = ordinal; +proto$1.preparse = preParsePostFormat; +proto$1.postformat = preParsePostFormat; +proto$1.relativeTime = relativeTime; +proto$1.pastFuture = pastFuture; +proto$1.set = set; + +// Month +proto$1.months = localeMonths; +proto$1.monthsShort = localeMonthsShort; +proto$1.monthsParse = localeMonthsParse; +proto$1.monthsRegex = monthsRegex; +proto$1.monthsShortRegex = monthsShortRegex; + +// Week +proto$1.week = localeWeek; +proto$1.firstDayOfYear = localeFirstDayOfYear; +proto$1.firstDayOfWeek = localeFirstDayOfWeek; + +// Day of Week +proto$1.weekdays = localeWeekdays; +proto$1.weekdaysMin = localeWeekdaysMin; +proto$1.weekdaysShort = localeWeekdaysShort; +proto$1.weekdaysParse = localeWeekdaysParse; + +proto$1.weekdaysRegex = weekdaysRegex; +proto$1.weekdaysShortRegex = weekdaysShortRegex; +proto$1.weekdaysMinRegex = weekdaysMinRegex; + +// Hours +proto$1.isPM = localeIsPM; +proto$1.meridiem = localeMeridiem; + +function get$1 (format, index, field, setter) { + var locale = getLocale(); + var utc = createUTC().set(setter, index); + return locale[field](utc, format); +} + +function listMonthsImpl (format, index, field) { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return get$1(format, index, field, 'month'); + } + + var i; + var out = []; + for (i = 0; i < 12; i++) { + out[i] = get$1(format, i, field, 'month'); + } + return out; +} + +// () +// (5) +// (fmt, 5) +// (fmt) +// (true) +// (true, 5) +// (true, fmt, 5) +// (true, fmt) +function listWeekdaysImpl (localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } else { + format = localeSorted; + index = format; + localeSorted = false; + + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } + + var locale = getLocale(), + shift = localeSorted ? locale._week.dow : 0; + + if (index != null) { + return get$1(format, (index + shift) % 7, field, 'day'); + } + + var i; + var out = []; + for (i = 0; i < 7; i++) { + out[i] = get$1(format, (i + shift) % 7, field, 'day'); + } + return out; +} + +function listMonths (format, index) { + return listMonthsImpl(format, index, 'months'); +} + +function listMonthsShort (format, index) { + return listMonthsImpl(format, index, 'monthsShort'); +} + +function listWeekdays (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); +} + +function listWeekdaysShort (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); +} + +function listWeekdaysMin (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); +} + +getSetGlobalLocale('en', { + ordinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } +}); + +// Side effect imports +hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale); +hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale); + +var mathAbs = Math.abs; + +function abs () { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; +} + +function addSubtract$1 (duration, input, value, direction) { + var other = createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); +} + +// supports only 2.0-style add(1, 's') or add(duration) +function add$1 (input, value) { + return addSubtract$1(this, input, value, 1); +} + +// supports only 2.0-style subtract(1, 's') or subtract(duration) +function subtract$1 (input, value) { + return addSubtract$1(this, input, value, -1); +} + +function absCeil (number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } +} + +function bubble () { + var milliseconds = this._milliseconds; + var days = this._days; + var months = this._months; + var data = this._data; + var seconds, minutes, hours, years, monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if (!((milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0))) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; +} + +function daysToMonths (days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return days * 4800 / 146097; +} + +function monthsToDays (months) { + // the reverse of daysToMonths + return months * 146097 / 4800; +} + +function as (units) { + var days; + var months; + var milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + return units === 'month' ? months : months / 12; + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week' : return days / 7 + milliseconds / 6048e5; + case 'day' : return days + milliseconds / 864e5; + case 'hour' : return days * 24 + milliseconds / 36e5; + case 'minute' : return days * 1440 + milliseconds / 6e4; + case 'second' : return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': return Math.floor(days * 864e5) + milliseconds; + default: throw new Error('Unknown unit ' + units); + } + } +} + +// TODO: Use this.as('ms')? +function valueOf$1 () { + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); +} + +function makeAs (alias) { + return function () { + return this.as(alias); + }; +} + +var asMilliseconds = makeAs('ms'); +var asSeconds = makeAs('s'); +var asMinutes = makeAs('m'); +var asHours = makeAs('h'); +var asDays = makeAs('d'); +var asWeeks = makeAs('w'); +var asMonths = makeAs('M'); +var asYears = makeAs('y'); + +function get$2 (units) { + units = normalizeUnits(units); + return this[units + 's'](); +} + +function makeGetter(name) { + return function () { + return this._data[name]; + }; +} + +var milliseconds = makeGetter('milliseconds'); +var seconds = makeGetter('seconds'); +var minutes = makeGetter('minutes'); +var hours = makeGetter('hours'); +var days = makeGetter('days'); +var months = makeGetter('months'); +var years = makeGetter('years'); + +function weeks () { + return absFloor(this.days() / 7); +} + +var round = Math.round; +var thresholds = { + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month + M: 11 // months to year +}; + +// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize +function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); +} + +function relativeTime$1 (posNegDuration, withoutSuffix, locale) { + var duration = createDuration(posNegDuration).abs(); + var seconds = round(duration.as('s')); + var minutes = round(duration.as('m')); + var hours = round(duration.as('h')); + var days = round(duration.as('d')); + var months = round(duration.as('M')); + var years = round(duration.as('y')); + + var a = seconds < thresholds.s && ['s', seconds] || + minutes <= 1 && ['m'] || + minutes < thresholds.m && ['mm', minutes] || + hours <= 1 && ['h'] || + hours < thresholds.h && ['hh', hours] || + days <= 1 && ['d'] || + days < thresholds.d && ['dd', days] || + months <= 1 && ['M'] || + months < thresholds.M && ['MM', months] || + years <= 1 && ['y'] || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); +} + +// This function allows you to set the rounding function for relative time strings +function getSetRelativeTimeRounding (roundingFunction) { + if (roundingFunction === undefined) { + return round; + } + if (typeof(roundingFunction) === 'function') { + round = roundingFunction; + return true; + } + return false; +} + +// This function allows you to set a threshold for relative time strings +function getSetRelativeTimeThreshold (threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + return true; +} + +function humanize (withSuffix) { + var locale = this.localeData(); + var output = relativeTime$1(this, !withSuffix, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); +} + +var abs$1 = Math.abs; + +function toISOString$1() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + var seconds = abs$1(this._milliseconds) / 1000; + var days = abs$1(this._days); + var months = abs$1(this._months); + var minutes, hours, years; + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var Y = years; + var M = months; + var D = days; + var h = hours; + var m = minutes; + var s = seconds; + var total = this.asSeconds(); + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (total < 0 ? '-' : '') + + 'P' + + (Y ? Y + 'Y' : '') + + (M ? M + 'M' : '') + + (D ? D + 'D' : '') + + ((h || m || s) ? 'T' : '') + + (h ? h + 'H' : '') + + (m ? m + 'M' : '') + + (s ? s + 'S' : ''); +} + +var proto$2 = Duration.prototype; + +proto$2.abs = abs; +proto$2.add = add$1; +proto$2.subtract = subtract$1; +proto$2.as = as; +proto$2.asMilliseconds = asMilliseconds; +proto$2.asSeconds = asSeconds; +proto$2.asMinutes = asMinutes; +proto$2.asHours = asHours; +proto$2.asDays = asDays; +proto$2.asWeeks = asWeeks; +proto$2.asMonths = asMonths; +proto$2.asYears = asYears; +proto$2.valueOf = valueOf$1; +proto$2._bubble = bubble; +proto$2.get = get$2; +proto$2.milliseconds = milliseconds; +proto$2.seconds = seconds; +proto$2.minutes = minutes; +proto$2.hours = hours; +proto$2.days = days; +proto$2.weeks = weeks; +proto$2.months = months; +proto$2.years = years; +proto$2.humanize = humanize; +proto$2.toISOString = toISOString$1; +proto$2.toString = toISOString$1; +proto$2.toJSON = toISOString$1; +proto$2.locale = locale; +proto$2.localeData = localeData; + +// Deprecations +proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1); +proto$2.lang = lang; + +// Side effect imports + +// FORMATTING + +addFormatToken('X', 0, 0, 'unix'); +addFormatToken('x', 0, 0, 'valueOf'); + +// PARSING + +addRegexToken('x', matchSigned); +addRegexToken('X', matchTimestamp); +addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input, 10) * 1000); +}); +addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); +}); + +// Side effect imports + +//! moment.js +//! version : 2.17.1 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + +hooks.version = '2.17.1'; + +setHookCallback(createLocal); + +hooks.fn = proto; +hooks.min = min; +hooks.max = max; +hooks.now = now; +hooks.utc = createUTC; +hooks.unix = createUnix; +hooks.months = listMonths; +hooks.isDate = isDate; +hooks.locale = getSetGlobalLocale; +hooks.invalid = createInvalid; +hooks.duration = createDuration; +hooks.isMoment = isMoment; +hooks.weekdays = listWeekdays; +hooks.parseZone = createInZone; +hooks.localeData = getLocale; +hooks.isDuration = isDuration; +hooks.monthsShort = listMonthsShort; +hooks.weekdaysMin = listWeekdaysMin; +hooks.defineLocale = defineLocale; +hooks.updateLocale = updateLocale; +hooks.locales = listLocales; +hooks.weekdaysShort = listWeekdaysShort; +hooks.normalizeUnits = normalizeUnits; +hooks.relativeTimeRounding = getSetRelativeTimeRounding; +hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; +hooks.calendarFormat = getCalendarFormat; +hooks.prototype = proto; + +//! moment.js locale configuration +//! locale : Afrikaans [af] +//! author : Werner Mollentze : https://github.com/wernerm + +hooks.defineLocale('af', { + months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'), + weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), + weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), + meridiemParse: /vm|nm/i, + isPM : function (input) { + return /^nm$/i.test(input); + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'vm' : 'VM'; + } else { + return isLower ? 'nm' : 'NM'; + } + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Vandag om] LT', + nextDay : '[Môre om] LT', + nextWeek : 'dddd [om] LT', + lastDay : '[Gister om] LT', + lastWeek : '[Laas] dddd [om] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'oor %s', + past : '%s gelede', + s : '\'n paar sekondes', + m : '\'n minuut', + mm : '%d minute', + h : '\'n uur', + hh : '%d ure', + d : '\'n dag', + dd : '%d dae', + M : '\'n maand', + MM : '%d maande', + y : '\'n jaar', + yy : '%d jaar' + }, + ordinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter + }, + week : { + dow : 1, // Maandag is die eerste dag van die week. + doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Algeria) [ar-dz] +//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme + +hooks.defineLocale('ar-dz', { + months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 4 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Lybia) [ar-ly] +//! author : Ali Hmer: https://github.com/kikoanis + +var symbolMap = { + '1': '1', + '2': '2', + '3': '3', + '4': '4', + '5': '5', + '6': '6', + '7': '7', + '8': '8', + '9': '9', + '0': '0' +}; +var pluralForm = function (n) { + return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; +}; +var plurals = { + s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'], + m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'], + h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'], + d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'], + M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'], + y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام'] +}; +var pluralize = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm(number), + str = plurals[u][pluralForm(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; +}; +var months$1 = [ + 'يناير', + 'فبراير', + 'مارس', + 'أبريل', + 'مايو', + 'يونيو', + 'يوليو', + 'أغسطس', + 'سبتمبر', + 'أكتوبر', + 'نوفمبر', + 'ديسمبر' +]; + +hooks.defineLocale('ar-ly', { + months : months$1, + monthsShort : months$1, + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'Ø­_ن_Ø«_ر_Ø®_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/\u200FM/\u200FYYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'بعد %s', + past : 'منذ %s', + s : pluralize('s'), + m : pluralize('m'), + mm : pluralize('m'), + h : pluralize('h'), + hh : pluralize('h'), + d : pluralize('d'), + dd : pluralize('d'), + M : pluralize('M'), + MM : pluralize('M'), + y : pluralize('y'), + yy : pluralize('y') + }, + preparse: function (string) { + return string.replace(/\u200f/g, '').replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Morocco) [ar-ma] +//! author : ElFadili Yassine : https://github.com/ElFadiliY +//! author : Abdel Said : https://github.com/abdelsaid + +hooks.defineLocale('ar-ma', { + months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), + weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'Ø­_ن_Ø«_ر_Ø®_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Saudi Arabia) [ar-sa] +//! author : Suhail Alkowaileet : https://github.com/xsoh + +var symbolMap$1 = { + '1': 'Ù¡', + '2': 'Ù¢', + '3': 'Ù£', + '4': 'Ù¤', + '5': 'Ù¥', + '6': 'Ù¦', + '7': 'Ù§', + '8': 'Ù¨', + '9': 'Ù©', + '0': 'Ù ' +}; +var numberMap = { + 'Ù¡': '1', + 'Ù¢': '2', + 'Ù£': '3', + 'Ù¤': '4', + 'Ù¥': '5', + 'Ù¦': '6', + 'Ù§': '7', + 'Ù¨': '8', + 'Ù©': '9', + 'Ù ': '0' +}; + +hooks.defineLocale('ar-sa', { + months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'Ø­_ن_Ø«_ر_Ø®_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'في %s', + past : 'منذ %s', + s : 'ثوان', + m : 'دقيقة', + mm : '%d دقائق', + h : 'ساعة', + hh : '%d ساعات', + d : 'يوم', + dd : '%d أيام', + M : 'شهر', + MM : '%d أشهر', + y : 'سنة', + yy : '%d سنوات' + }, + preparse: function (string) { + return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$1[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic (Tunisia) [ar-tn] +//! author : Nader Toukabri : https://github.com/naderio + +hooks.defineLocale('ar-tn', { + months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin: 'Ø­_ن_Ø«_ر_Ø®_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[اليوم على الساعة] LT', + nextDay: '[غدا على الساعة] LT', + nextWeek: 'dddd [على الساعة] LT', + lastDay: '[أمس على الساعة] LT', + lastWeek: 'dddd [على الساعة] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'في %s', + past: 'منذ %s', + s: 'ثوان', + m: 'دقيقة', + mm: '%d دقائق', + h: 'ساعة', + hh: '%d ساعات', + d: 'يوم', + dd: '%d أيام', + M: 'شهر', + MM: '%d أشهر', + y: 'سنة', + yy: '%d سنوات' + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Arabic [ar] +//! author : Abdel Said: https://github.com/abdelsaid +//! author : Ahmed Elkhatib +//! author : forabi https://github.com/forabi + +var symbolMap$2 = { + '1': 'Ù¡', + '2': 'Ù¢', + '3': 'Ù£', + '4': 'Ù¤', + '5': 'Ù¥', + '6': 'Ù¦', + '7': 'Ù§', + '8': 'Ù¨', + '9': 'Ù©', + '0': 'Ù ' +}; +var numberMap$1 = { + 'Ù¡': '1', + 'Ù¢': '2', + 'Ù£': '3', + 'Ù¤': '4', + 'Ù¥': '5', + 'Ù¦': '6', + 'Ù§': '7', + 'Ù¨': '8', + 'Ù©': '9', + 'Ù ': '0' +}; +var pluralForm$1 = function (n) { + return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; +}; +var plurals$1 = { + s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'], + m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'], + h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'], + d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'], + M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'], + y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام'] +}; +var pluralize$1 = function (u) { + return function (number, withoutSuffix, string, isFuture) { + var f = pluralForm$1(number), + str = plurals$1[u][pluralForm$1(number)]; + if (f === 2) { + str = str[withoutSuffix ? 0 : 1]; + } + return str.replace(/%d/i, number); + }; +}; +var months$2 = [ + 'كانون الثاني يناير', + 'شباط فبراير', + 'آذار مارس', + 'نيسان أبريل', + 'أيار مايو', + 'حزيران يونيو', + 'تموز يوليو', + 'آب أغسطس', + 'أيلول سبتمبر', + 'تشرين الأول أكتوبر', + 'تشرين الثاني نوفمبر', + 'كانون الأول ديسمبر' +]; + +hooks.defineLocale('ar', { + months : months$2, + monthsShort : months$2, + weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), + weekdaysMin : 'Ø­_ن_Ø«_ر_Ø®_ج_س'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/\u200FM/\u200FYYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ص|م/, + isPM : function (input) { + return 'م' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ص'; + } else { + return 'م'; + } + }, + calendar : { + sameDay: '[اليوم عند الساعة] LT', + nextDay: '[غدًا عند الساعة] LT', + nextWeek: 'dddd [عند الساعة] LT', + lastDay: '[أمس عند الساعة] LT', + lastWeek: 'dddd [عند الساعة] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'بعد %s', + past : 'منذ %s', + s : pluralize$1('s'), + m : pluralize$1('m'), + mm : pluralize$1('m'), + h : pluralize$1('h'), + hh : pluralize$1('h'), + d : pluralize$1('d'), + dd : pluralize$1('d'), + M : pluralize$1('M'), + MM : pluralize$1('M'), + y : pluralize$1('y'), + yy : pluralize$1('y') + }, + preparse: function (string) { + return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { + return numberMap$1[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$2[match]; + }).replace(/,/g, '،'); + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Azerbaijani [az] +//! author : topchiyev : https://github.com/topchiyev + +var suffixes = { + 1: '-inci', + 5: '-inci', + 8: '-inci', + 70: '-inci', + 80: '-inci', + 2: '-nci', + 7: '-nci', + 20: '-nci', + 50: '-nci', + 3: '-üncü', + 4: '-üncü', + 100: '-üncü', + 6: '-ncı', + 9: '-uncu', + 10: '-uncu', + 30: '-uncu', + 60: '-ıncı', + 90: '-ıncı' +}; + +hooks.defineLocale('az', { + months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'), + monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), + weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'), + weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'), + weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[sabah saat] LT', + nextWeek : '[gələn həftə] dddd [saat] LT', + lastDay : '[dünən] LT', + lastWeek : '[keçən həftə] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s sonra', + past : '%s əvvəl', + s : 'birneçə saniyyə', + m : 'bir dəqiqə', + mm : '%d dəqiqə', + h : 'bir saat', + hh : '%d saat', + d : 'bir gün', + dd : '%d gün', + M : 'bir ay', + MM : '%d ay', + y : 'bir il', + yy : '%d il' + }, + meridiemParse: /gecə|səhər|gündüz|axşam/, + isPM : function (input) { + return /^(gündüz|axşam)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'gecə'; + } else if (hour < 12) { + return 'səhər'; + } else if (hour < 17) { + return 'gündüz'; + } else { + return 'axşam'; + } + }, + ordinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + '-ıncı'; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + return number + (suffixes[a] || suffixes[b] || suffixes[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Belarusian [be] +//! author : Dmitry Demidov : https://github.com/demidov91 +//! author: Praleska: http://praleska.pro/ +//! Author : Menelion Elensúle : https://github.com/Oire + +function plural(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін', + 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін', + 'dd': 'дзень_дні_дзён', + 'MM': 'месяц_месяцы_месяцаў', + 'yy': 'год_гады_гадоў' + }; + if (key === 'm') { + return withoutSuffix ? 'хвіліна' : 'хвіліну'; + } + else if (key === 'h') { + return withoutSuffix ? 'гадзіна' : 'гадзіну'; + } + else { + return number + ' ' + plural(format[key], +number); + } +} + +hooks.defineLocale('be', { + months : { + format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'), + standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_') + }, + monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'), + weekdays : { + format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'), + standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'), + isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/ + }, + weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY г.', + LLL : 'D MMMM YYYY г., HH:mm', + LLLL : 'dddd, D MMMM YYYY г., HH:mm' + }, + calendar : { + sameDay: '[Сёння ў] LT', + nextDay: '[Заўтра ў] LT', + lastDay: '[Учора ў] LT', + nextWeek: function () { + return '[У] dddd [ў] LT'; + }, + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return '[У мінулую] dddd [ў] LT'; + case 1: + case 2: + case 4: + return '[У мінулы] dddd [ў] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'праз %s', + past : '%s таму', + s : 'некалькі секунд', + m : relativeTimeWithPlural, + mm : relativeTimeWithPlural, + h : relativeTimeWithPlural, + hh : relativeTimeWithPlural, + d : 'дзень', + dd : relativeTimeWithPlural, + M : 'месяц', + MM : relativeTimeWithPlural, + y : 'год', + yy : relativeTimeWithPlural + }, + meridiemParse: /ночы|раніцы|дня|вечара/, + isPM : function (input) { + return /^(дня|вечара)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночы'; + } else if (hour < 12) { + return 'раніцы'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечара'; + } + }, + ordinalParse: /\d{1,2}-(і|ы|га)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы'; + case 'D': + return number + '-га'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Bulgarian [bg] +//! author : Krasen Borisov : https://github.com/kraz + +hooks.defineLocale('bg', { + months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'), + monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'), + weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'), + weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'), + weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'D.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Днес в] LT', + nextDay : '[Утре в] LT', + nextWeek : 'dddd [в] LT', + lastDay : '[Вчера в] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[В изминалата] dddd [в] LT'; + case 1: + case 2: + case 4: + case 5: + return '[В изминалия] dddd [в] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'след %s', + past : 'преди %s', + s : 'няколко секунди', + m : 'минута', + mm : '%d минути', + h : 'час', + hh : '%d часа', + d : 'ден', + dd : '%d дни', + M : 'месец', + MM : '%d месеца', + y : 'година', + yy : '%d години' + }, + ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Bengali [bn] +//! author : Kaushik Gandhi : https://github.com/kaushikgandhi + +var symbolMap$3 = { + '1': '১', + '2': '২', + '3': '৩', + '4': '৪', + '5': '৫', + '6': '৬', + '7': '৭', + '8': '৮', + '9': '৯', + '0': '০' +}; +var numberMap$2 = { + '১': '1', + '২': '2', + '৩': '3', + '৪': '4', + '৫': '5', + '৬': '6', + '৭': '7', + '৮': '8', + '৯': '9', + '০': '0' +}; + +hooks.defineLocale('bn', { + months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'), + monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'), + weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'), + weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'), + weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'), + longDateFormat : { + LT : 'A h:mm সময়', + LTS : 'A h:mm:ss সময়', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm সময়', + LLLL : 'dddd, D MMMM YYYY, A h:mm সময়' + }, + calendar : { + sameDay : '[আজ] LT', + nextDay : '[আগামীকাল] LT', + nextWeek : 'dddd, LT', + lastDay : '[গতকাল] LT', + lastWeek : '[গত] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s পরে', + past : '%s আগে', + s : 'কয়েক সেকেন্ড', + m : 'এক মিনিট', + mm : '%d মিনিট', + h : 'এক ঘন্টা', + hh : '%d ঘন্টা', + d : 'এক দিন', + dd : '%d দিন', + M : 'এক মাস', + MM : '%d মাস', + y : 'এক বছর', + yy : '%d বছর' + }, + preparse: function (string) { + return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { + return numberMap$2[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$3[match]; + }); + }, + meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'রাত' && hour >= 4) || + (meridiem === 'দুপুর' && hour < 5) || + meridiem === 'বিকাল') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'রাত'; + } else if (hour < 10) { + return 'সকাল'; + } else if (hour < 17) { + return 'দুপুর'; + } else if (hour < 20) { + return 'বিকাল'; + } else { + return 'রাত'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Tibetan [bo] +//! author : Thupten N. Chakrishar : https://github.com/vajradog + +var symbolMap$4 = { + '1': '༡', + '2': '༢', + '3': '༣', + '4': '༤', + '5': '༥', + '6': '༦', + '7': '༧', + '8': '༨', + '9': '༩', + '0': '༠' +}; +var numberMap$3 = { + '༡': '1', + '༢': '2', + '༣': '3', + '༤': '4', + '༥': '5', + '༦': '6', + '༧': '7', + '༨': '8', + '༩': '9', + '༠': '0' +}; + +hooks.defineLocale('bo', { + months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), + monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), + weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'), + weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), + weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[དི་རིང] LT', + nextDay : '[སང་ཉིན] LT', + nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT', + lastDay : '[ཁ་སང] LT', + lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ལ་', + past : '%s སྔན་ལ', + s : 'ལམ་སང', + m : 'སྐར་མ་གཅིག', + mm : '%d སྐར་མ', + h : 'ཆུ་ཚོད་གཅིག', + hh : '%d ཆུ་ཚོད', + d : 'ཉིན་གཅིག', + dd : '%d ཉིན་', + M : 'ཟླ་བ་གཅིག', + MM : '%d ཟླ་བ', + y : 'ལོ་གཅིག', + yy : '%d ལོ' + }, + preparse: function (string) { + return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { + return numberMap$3[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$4[match]; + }); + }, + meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'མཚན་མོ' && hour >= 4) || + (meridiem === 'ཉིན་གུང' && hour < 5) || + meridiem === 'དགོང་དག') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'མཚན་མོ'; + } else if (hour < 10) { + return 'ཞོགས་ཀས'; + } else if (hour < 17) { + return 'ཉིན་གུང'; + } else if (hour < 20) { + return 'དགོང་དག'; + } else { + return 'མཚན་མོ'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Breton [br] +//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou + +function relativeTimeWithMutation(number, withoutSuffix, key) { + var format = { + 'mm': 'munutenn', + 'MM': 'miz', + 'dd': 'devezh' + }; + return number + ' ' + mutation(format[key], number); +} +function specialMutationForYears(number) { + switch (lastNumber(number)) { + case 1: + case 3: + case 4: + case 5: + case 9: + return number + ' bloaz'; + default: + return number + ' vloaz'; + } +} +function lastNumber(number) { + if (number > 9) { + return lastNumber(number % 10); + } + return number; +} +function mutation(text, number) { + if (number === 2) { + return softMutation(text); + } + return text; +} +function softMutation(text) { + var mutationTable = { + 'm': 'v', + 'b': 'v', + 'd': 'z' + }; + if (mutationTable[text.charAt(0)] === undefined) { + return text; + } + return mutationTable[text.charAt(0)] + text.substring(1); +} + +hooks.defineLocale('br', { + months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'), + monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), + weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'), + weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), + weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h[e]mm A', + LTS : 'h[e]mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D [a viz] MMMM YYYY', + LLL : 'D [a viz] MMMM YYYY h[e]mm A', + LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A' + }, + calendar : { + sameDay : '[Hiziv da] LT', + nextDay : '[Warc\'hoazh da] LT', + nextWeek : 'dddd [da] LT', + lastDay : '[Dec\'h da] LT', + lastWeek : 'dddd [paset da] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'a-benn %s', + past : '%s \'zo', + s : 'un nebeud segondennoù', + m : 'ur vunutenn', + mm : relativeTimeWithMutation, + h : 'un eur', + hh : '%d eur', + d : 'un devezh', + dd : relativeTimeWithMutation, + M : 'ur miz', + MM : relativeTimeWithMutation, + y : 'ur bloaz', + yy : specialMutationForYears + }, + ordinalParse: /\d{1,2}(añ|vet)/, + ordinal : function (number) { + var output = (number === 1) ? 'añ' : 'vet'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Bosnian [bs] +//! author : Nedim Cholich : https://github.com/frontyard +//! based on (hr) translation by Bojan Marković + +function translate(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } +} + +hooks.defineLocale('bs', { + months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[proÅ¡lu] dddd [u] LT'; + case 6: + return '[proÅ¡le] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[proÅ¡li] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'par sekundi', + m : translate, + mm : translate, + h : translate, + hh : translate, + d : 'dan', + dd : translate, + M : 'mjesec', + MM : translate, + y : 'godinu', + yy : translate + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Catalan [ca] +//! author : Juan G. Hurtado : https://github.com/juanghurtado + +hooks.defineLocale('ca', { + months : 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'), + monthsShort : 'gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.'.split('_'), + monthsParseExact : true, + weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'), + weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), + weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd D MMMM YYYY H:mm' + }, + calendar : { + sameDay : function () { + return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextDay : function () { + return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastDay : function () { + return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'd\'aquí %s', + past : 'fa %s', + s : 'uns segons', + m : 'un minut', + mm : '%d minuts', + h : 'una hora', + hh : '%d hores', + d : 'un dia', + dd : '%d dies', + M : 'un mes', + MM : '%d mesos', + y : 'un any', + yy : '%d anys' + }, + ordinalParse: /\d{1,2}(r|n|t|è|a)/, + ordinal : function (number, period) { + var output = (number === 1) ? 'r' : + (number === 2) ? 'n' : + (number === 3) ? 'r' : + (number === 4) ? 't' : 'è'; + if (period === 'w' || period === 'W') { + output = 'a'; + } + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Czech [cs] +//! author : petrbela : https://github.com/petrbela + +var months$3 = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'); +var monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'); +function plural$1(n) { + return (n > 1) && (n < 5) && (~~(n / 10) !== 1); +} +function translate$1(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'minuty' : 'minut'); + } else { + return result + 'minutami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'hodiny' : 'hodin'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'den' : 'dnem'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'dny' : 'dní'); + } else { + return result + 'dny'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'měsíce' : 'měsíců'); + } else { + return result + 'měsíci'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokem'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$1(number) ? 'roky' : 'let'); + } else { + return result + 'lety'; + } + break; + } +} + +hooks.defineLocale('cs', { + months : months$3, + monthsShort : monthsShort, + monthsParse : (function (months, monthsShort) { + var i, _monthsParse = []; + for (i = 0; i < 12; i++) { + // use custom parser to solve problem with July (červenec) + _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i'); + } + return _monthsParse; + }(months$3, monthsShort)), + shortMonthsParse : (function (monthsShort) { + var i, _shortMonthsParse = []; + for (i = 0; i < 12; i++) { + _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i'); + } + return _shortMonthsParse; + }(monthsShort)), + longMonthsParse : (function (months) { + var i, _longMonthsParse = []; + for (i = 0; i < 12; i++) { + _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i'); + } + return _longMonthsParse; + }(months$3)), + weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'), + weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'), + weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'), + longDateFormat : { + LT: 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd D. MMMM YYYY H:mm', + l : 'D. M. YYYY' + }, + calendar : { + sameDay: '[dnes v] LT', + nextDay: '[zítra v] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v neděli v] LT'; + case 1: + case 2: + return '[v] dddd [v] LT'; + case 3: + return '[ve středu v] LT'; + case 4: + return '[ve čtvrtek v] LT'; + case 5: + return '[v pátek v] LT'; + case 6: + return '[v sobotu v] LT'; + } + }, + lastDay: '[včera v] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulou neděli v] LT'; + case 1: + case 2: + return '[minulé] dddd [v] LT'; + case 3: + return '[minulou středu v] LT'; + case 4: + case 5: + return '[minulý] dddd [v] LT'; + case 6: + return '[minulou sobotu v] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : 'před %s', + s : translate$1, + m : translate$1, + mm : translate$1, + h : translate$1, + hh : translate$1, + d : translate$1, + dd : translate$1, + M : translate$1, + MM : translate$1, + y : translate$1, + yy : translate$1 + }, + ordinalParse : /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Chuvash [cv] +//! author : Anatoly Mironov : https://github.com/mirontoli + +hooks.defineLocale('cv', { + months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'), + monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'), + weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'), + weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'), + weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]', + LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', + LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm' + }, + calendar : { + sameDay: '[Паян] LT [сехетре]', + nextDay: '[Ыран] LT [сехетре]', + lastDay: '[Ӗнер] LT [сехетре]', + nextWeek: '[Ҫитес] dddd LT [сехетре]', + lastWeek: '[Иртнӗ] dddd LT [сехетре]', + sameElse: 'L' + }, + relativeTime : { + future : function (output) { + var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран'; + return output + affix; + }, + past : '%s каялла', + s : 'пӗр-ик ҫеккунт', + m : 'пӗр минут', + mm : '%d минут', + h : 'пӗр сехет', + hh : '%d сехет', + d : 'пӗр кун', + dd : '%d кун', + M : 'пӗр уйӑх', + MM : '%d уйӑх', + y : 'пӗр ҫул', + yy : '%d ҫул' + }, + ordinalParse: /\d{1,2}-мӗш/, + ordinal : '%d-мӗш', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Welsh [cy] +//! author : Robert Allen : https://github.com/robgallen +//! author : https://github.com/ryangreaves + +hooks.defineLocale('cy', { + months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'), + monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'), + weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'), + weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'), + weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'), + weekdaysParseExact : true, + // time formats are the same as en-gb + longDateFormat: { + LT: 'HH:mm', + LTS : 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[Heddiw am] LT', + nextDay: '[Yfory am] LT', + nextWeek: 'dddd [am] LT', + lastDay: '[Ddoe am] LT', + lastWeek: 'dddd [diwethaf am] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'mewn %s', + past: '%s yn ôl', + s: 'ychydig eiliadau', + m: 'munud', + mm: '%d munud', + h: 'awr', + hh: '%d awr', + d: 'diwrnod', + dd: '%d diwrnod', + M: 'mis', + MM: '%d mis', + y: 'blwyddyn', + yy: '%d flynedd' + }, + ordinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, + // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh + ordinal: function (number) { + var b = number, + output = '', + lookup = [ + '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed + 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed + ]; + if (b > 20) { + if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) { + output = 'fed'; // not 30ain, 70ain or 90ain + } else { + output = 'ain'; + } + } else if (b > 0) { + output = lookup[b]; + } + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Danish [da] +//! author : Ulrik Nielsen : https://github.com/mrbase + +hooks.defineLocale('da', { + months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'), + weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd [d.] D. MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[I dag kl.] LT', + nextDay : '[I morgen kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[I gÃ¥r kl.] LT', + lastWeek : '[sidste] dddd [kl] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s siden', + s : 'fÃ¥ sekunder', + m : 'et minut', + mm : '%d minutter', + h : 'en time', + hh : '%d timer', + d : 'en dag', + dd : '%d dage', + M : 'en mÃ¥ned', + MM : '%d mÃ¥neder', + y : 'et Ã¥r', + yy : '%d Ã¥r' + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : German (Austria) [de-at] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Martin Groller : https://github.com/MadMG +//! author : Mikolaj Dadela : https://github.com/mik01aj + +function processRelativeTime(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +hooks.defineLocale('de-at', { + months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd, D. MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime, + mm : '%d Minuten', + h : processRelativeTime, + hh : '%d Stunden', + d : processRelativeTime, + dd : processRelativeTime, + M : processRelativeTime, + MM : processRelativeTime, + y : processRelativeTime, + yy : processRelativeTime + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : German [de] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Mikolaj Dadela : https://github.com/mik01aj + +function processRelativeTime$1(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eine Minute', 'einer Minute'], + 'h': ['eine Stunde', 'einer Stunde'], + 'd': ['ein Tag', 'einem Tag'], + 'dd': [number + ' Tage', number + ' Tagen'], + 'M': ['ein Monat', 'einem Monat'], + 'MM': [number + ' Monate', number + ' Monaten'], + 'y': ['ein Jahr', 'einem Jahr'], + 'yy': [number + ' Jahre', number + ' Jahren'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} + +hooks.defineLocale('de', { + months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), + weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY HH:mm', + LLLL : 'dddd, D. MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[heute um] LT [Uhr]', + sameElse: 'L', + nextDay: '[morgen um] LT [Uhr]', + nextWeek: 'dddd [um] LT [Uhr]', + lastDay: '[gestern um] LT [Uhr]', + lastWeek: '[letzten] dddd [um] LT [Uhr]' + }, + relativeTime : { + future : 'in %s', + past : 'vor %s', + s : 'ein paar Sekunden', + m : processRelativeTime$1, + mm : '%d Minuten', + h : processRelativeTime$1, + hh : '%d Stunden', + d : processRelativeTime$1, + dd : processRelativeTime$1, + M : processRelativeTime$1, + MM : processRelativeTime$1, + y : processRelativeTime$1, + yy : processRelativeTime$1 + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Maldivian [dv] +//! author : Jawish Hameed : https://github.com/jawish + +var months$4 = [ + 'ޖެނުއަރީ', + 'ފެބްރުއަރީ', + 'މާރިޗު', + 'އޭޕްރީލު', + 'މޭ', + 'ޖޫން', + 'ޖުލައި', + 'އޯގަސްޓު', + 'ސެޕްޓެމްބަރު', + 'އޮކްޓޯބަރު', + 'ނޮވެމްބަރު', + 'ޑިސެމްބަރު' +]; +var weekdays = [ + 'އާދިއްތަ', + 'ހޯމަ', + 'އަންގާރަ', + 'ބުދަ', + 'ބުރާސްފަތި', + 'ހުކުރު', + 'ހޮނިހިރު' +]; + +hooks.defineLocale('dv', { + months : months$4, + monthsShort : months$4, + weekdays : weekdays, + weekdaysShort : weekdays, + weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'), + longDateFormat : { + + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'D/M/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + meridiemParse: /މކ|މފ/, + isPM : function (input) { + return 'މފ' === input; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'މކ'; + } else { + return 'މފ'; + } + }, + calendar : { + sameDay : '[މިއަދު] LT', + nextDay : '[މާދަމާ] LT', + nextWeek : 'dddd LT', + lastDay : '[އިއްޔެ] LT', + lastWeek : '[ފާއިތުވި] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ތެރޭގައި %s', + past : 'ކުރިން %s', + s : 'ސިކުންތުކޮޅެއް', + m : 'މިނިޓެއް', + mm : 'މިނިޓު %d', + h : 'ގަޑިއިރެއް', + hh : 'ގަޑިއިރު %d', + d : 'ދުވަހެއް', + dd : 'ދުވަސް %d', + M : 'މަހެއް', + MM : 'މަސް %d', + y : 'އަހަރެއް', + yy : 'އަހަރު %d' + }, + preparse: function (string) { + return string.replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/,/g, '،'); + }, + week : { + dow : 7, // Sunday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Greek [el] +//! author : Aggelos Karalias : https://github.com/mehiel + +hooks.defineLocale('el', { + monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'), + monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'), + months : function (momentToFormat, format) { + if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM' + return this._monthsGenitiveEl[momentToFormat.month()]; + } else { + return this._monthsNominativeEl[momentToFormat.month()]; + } + }, + monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'), + weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'), + weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'), + weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'), + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'μμ' : 'ΜΜ'; + } else { + return isLower ? 'πμ' : 'ΠΜ'; + } + }, + isPM : function (input) { + return ((input + '').toLowerCase()[0] === 'μ'); + }, + meridiemParse : /[ΠΜ]\.?Μ?\.?/i, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendarEl : { + sameDay : '[Σήμερα {}] LT', + nextDay : '[Αύριο {}] LT', + nextWeek : 'dddd [{}] LT', + lastDay : '[Χθες {}] LT', + lastWeek : function () { + switch (this.day()) { + case 6: + return '[το προηγούμενο] dddd [{}] LT'; + default: + return '[την προηγούμενη] dddd [{}] LT'; + } + }, + sameElse : 'L' + }, + calendar : function (key, mom) { + var output = this._calendarEl[key], + hours = mom && mom.hours(); + if (isFunction(output)) { + output = output.apply(mom); + } + return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις')); + }, + relativeTime : { + future : 'σε %s', + past : '%s πριν', + s : 'λίγα δευτερόλεπτα', + m : 'ένα λεπτό', + mm : '%d λεπτά', + h : 'μία ώρα', + hh : '%d ώρες', + d : 'μία μέρα', + dd : '%d μέρες', + M : 'ένας μήνας', + MM : '%d μήνες', + y : 'ένας χρόνος', + yy : '%d χρόνια' + }, + ordinalParse: /\d{1,2}η/, + ordinal: '%dη', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : English (Australia) [en-au] +//! author : Jared Morse : https://github.com/jarcoal + +hooks.defineLocale('en-au', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + ordinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : English (Canada) [en-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca + +hooks.defineLocale('en-ca', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'YYYY-MM-DD', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY h:mm A', + LLLL : 'dddd, MMMM D, YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + ordinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } +}); + +//! moment.js locale configuration +//! locale : English (United Kingdom) [en-gb] +//! author : Chris Gedrim : https://github.com/chrisgedrim + +hooks.defineLocale('en-gb', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + ordinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : English (Ireland) [en-ie] +//! author : Chris Cartlidge : https://github.com/chriscartlidge + +hooks.defineLocale('en-ie', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + ordinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : English (New Zealand) [en-nz] +//! author : Luke McGregor : https://github.com/lukemcgregor + +hooks.defineLocale('en-nz', { + months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + ordinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Esperanto [eo] +//! author : Colin Dean : https://github.com/colindean +//! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko. +//! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni! + +hooks.defineLocale('eo', { + months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aÅ­gusto_septembro_oktobro_novembro_decembro'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aÅ­g_sep_okt_nov_dec'.split('_'), + weekdays : 'Dimanĉo_Lundo_Mardo_Merkredo_Ä´aÅ­do_Vendredo_Sabato'.split('_'), + weekdaysShort : 'Dim_Lun_Mard_Merk_Ä´aÅ­_Ven_Sab'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Ä´a_Ve_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D[-an de] MMMM, YYYY', + LLL : 'D[-an de] MMMM, YYYY HH:mm', + LLLL : 'dddd, [la] D[-an de] MMMM, YYYY HH:mm' + }, + meridiemParse: /[ap]\.t\.m/i, + isPM: function (input) { + return input.charAt(0).toLowerCase() === 'p'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'p.t.m.' : 'P.T.M.'; + } else { + return isLower ? 'a.t.m.' : 'A.T.M.'; + } + }, + calendar : { + sameDay : '[HodiaÅ­ je] LT', + nextDay : '[MorgaÅ­ je] LT', + nextWeek : 'dddd [je] LT', + lastDay : '[HieraÅ­ je] LT', + lastWeek : '[pasinta] dddd [je] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'je %s', + past : 'antaÅ­ %s', + s : 'sekundoj', + m : 'minuto', + mm : '%d minutoj', + h : 'horo', + hh : '%d horoj', + d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo + dd : '%d tagoj', + M : 'monato', + MM : '%d monatoj', + y : 'jaro', + yy : '%d jaroj' + }, + ordinalParse: /\d{1,2}a/, + ordinal : '%da', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Spanish (Dominican Republic) [es-do] + +var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'); +var monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); + +hooks.defineLocale('es-do', { + months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort : function (m, format) { + if (/-MMM-/.test(format)) { + return monthsShort$1[m.month()]; + } else { + return monthsShortDot[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY h:mm A', + LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A' + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'en %s', + past : 'hace %s', + s : 'unos segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'una hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un año', + yy : '%d años' + }, + ordinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Spanish [es] +//! author : Julio Napurí : https://github.com/julionc + +var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'); +var monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); + +hooks.defineLocale('es', { + months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), + monthsShort : function (m, format) { + if (/-MMM-/.test(format)) { + return monthsShort$2[m.month()]; + } else { + return monthsShortDot$1[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY H:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' + }, + calendar : { + sameDay : function () { + return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextDay : function () { + return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + nextWeek : function () { + return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastDay : function () { + return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + lastWeek : function () { + return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'en %s', + past : 'hace %s', + s : 'unos segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'una hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un año', + yy : '%d años' + }, + ordinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Estonian [et] +//! author : Henry Kehlmann : https://github.com/madhenry +//! improvements : Illimar Tambek : https://github.com/ragulka + +function processRelativeTime$2(number, withoutSuffix, key, isFuture) { + var format = { + 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'], + 'm' : ['ühe minuti', 'üks minut'], + 'mm': [number + ' minuti', number + ' minutit'], + 'h' : ['ühe tunni', 'tund aega', 'üks tund'], + 'hh': [number + ' tunni', number + ' tundi'], + 'd' : ['ühe päeva', 'üks päev'], + 'M' : ['kuu aja', 'kuu aega', 'üks kuu'], + 'MM': [number + ' kuu', number + ' kuud'], + 'y' : ['ühe aasta', 'aasta', 'üks aasta'], + 'yy': [number + ' aasta', number + ' aastat'] + }; + if (withoutSuffix) { + return format[key][2] ? format[key][2] : format[key][1]; + } + return isFuture ? format[key][0] : format[key][1]; +} + +hooks.defineLocale('et', { + months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'), + monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'), + weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'), + weekdaysShort : 'P_E_T_K_N_R_L'.split('_'), + weekdaysMin : 'P_E_T_K_N_R_L'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Täna,] LT', + nextDay : '[Homme,] LT', + nextWeek : '[Järgmine] dddd LT', + lastDay : '[Eile,] LT', + lastWeek : '[Eelmine] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s pärast', + past : '%s tagasi', + s : processRelativeTime$2, + m : processRelativeTime$2, + mm : processRelativeTime$2, + h : processRelativeTime$2, + hh : processRelativeTime$2, + d : processRelativeTime$2, + dd : '%d päeva', + M : processRelativeTime$2, + MM : processRelativeTime$2, + y : processRelativeTime$2, + yy : processRelativeTime$2 + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Basque [eu] +//! author : Eneko Illarramendi : https://github.com/eillarra + +hooks.defineLocale('eu', { + months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'), + monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'), + monthsParseExact : true, + weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'), + weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'), + weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'YYYY[ko] MMMM[ren] D[a]', + LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm', + LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', + l : 'YYYY-M-D', + ll : 'YYYY[ko] MMM D[a]', + lll : 'YYYY[ko] MMM D[a] HH:mm', + llll : 'ddd, YYYY[ko] MMM D[a] HH:mm' + }, + calendar : { + sameDay : '[gaur] LT[etan]', + nextDay : '[bihar] LT[etan]', + nextWeek : 'dddd LT[etan]', + lastDay : '[atzo] LT[etan]', + lastWeek : '[aurreko] dddd LT[etan]', + sameElse : 'L' + }, + relativeTime : { + future : '%s barru', + past : 'duela %s', + s : 'segundo batzuk', + m : 'minutu bat', + mm : '%d minutu', + h : 'ordu bat', + hh : '%d ordu', + d : 'egun bat', + dd : '%d egun', + M : 'hilabete bat', + MM : '%d hilabete', + y : 'urte bat', + yy : '%d urte' + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Persian [fa] +//! author : Ebrahim Byagowi : https://github.com/ebraminio + +var symbolMap$5 = { + '1': 'Û±', + '2': 'Û²', + '3': 'Û³', + '4': 'Û´', + '5': 'Ûµ', + '6': 'Û¶', + '7': 'Û·', + '8': 'Û¸', + '9': 'Û¹', + '0': 'Û°' +}; +var numberMap$4 = { + 'Û±': '1', + 'Û²': '2', + 'Û³': '3', + 'Û´': '4', + 'Ûµ': '5', + 'Û¶': '6', + 'Û·': '7', + 'Û¸': '8', + 'Û¹': '9', + 'Û°': '0' +}; + +hooks.defineLocale('fa', { + months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), + weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), + weekdaysMin : 'ی_د_س_چ_Ù¾_ج_Ø´'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + meridiemParse: /قبل از ظهر|بعد از ظهر/, + isPM: function (input) { + return /بعد از ظهر/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'قبل از ظهر'; + } else { + return 'بعد از ظهر'; + } + }, + calendar : { + sameDay : '[امروز ساعت] LT', + nextDay : '[فردا ساعت] LT', + nextWeek : 'dddd [ساعت] LT', + lastDay : '[دیروز ساعت] LT', + lastWeek : 'dddd [پیش] [ساعت] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'در %s', + past : '%s پیش', + s : 'چندین ثانیه', + m : 'یک دقیقه', + mm : '%d دقیقه', + h : 'یک ساعت', + hh : '%d ساعت', + d : 'یک روز', + dd : '%d روز', + M : 'یک ماه', + MM : '%d ماه', + y : 'یک سال', + yy : '%d سال' + }, + preparse: function (string) { + return string.replace(/[Û°-Û¹]/g, function (match) { + return numberMap$4[match]; + }).replace(/،/g, ','); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$5[match]; + }).replace(/,/g, '،'); + }, + ordinalParse: /\d{1,2}م/, + ordinal : '%dم', + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Finnish [fi] +//! author : Tarmo Aidantausta : https://github.com/bleadof + +var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '); +var numbersFuture = [ + 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', + numbersPast[7], numbersPast[8], numbersPast[9] + ]; +function translate$2(number, withoutSuffix, key, isFuture) { + var result = ''; + switch (key) { + case 's': + return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; + case 'm': + return isFuture ? 'minuutin' : 'minuutti'; + case 'mm': + result = isFuture ? 'minuutin' : 'minuuttia'; + break; + case 'h': + return isFuture ? 'tunnin' : 'tunti'; + case 'hh': + result = isFuture ? 'tunnin' : 'tuntia'; + break; + case 'd': + return isFuture ? 'päivän' : 'päivä'; + case 'dd': + result = isFuture ? 'päivän' : 'päivää'; + break; + case 'M': + return isFuture ? 'kuukauden' : 'kuukausi'; + case 'MM': + result = isFuture ? 'kuukauden' : 'kuukautta'; + break; + case 'y': + return isFuture ? 'vuoden' : 'vuosi'; + case 'yy': + result = isFuture ? 'vuoden' : 'vuotta'; + break; + } + result = verbalNumber(number, isFuture) + ' ' + result; + return result; +} +function verbalNumber(number, isFuture) { + return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number; +} + +hooks.defineLocale('fi', { + months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'), + monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'), + weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'), + weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'), + weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'Do MMMM[ta] YYYY', + LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm', + LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm', + l : 'D.M.YYYY', + ll : 'Do MMM YYYY', + lll : 'Do MMM YYYY, [klo] HH.mm', + llll : 'ddd, Do MMM YYYY, [klo] HH.mm' + }, + calendar : { + sameDay : '[tänään] [klo] LT', + nextDay : '[huomenna] [klo] LT', + nextWeek : 'dddd [klo] LT', + lastDay : '[eilen] [klo] LT', + lastWeek : '[viime] dddd[na] [klo] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s päästä', + past : '%s sitten', + s : translate$2, + m : translate$2, + mm : translate$2, + h : translate$2, + hh : translate$2, + d : translate$2, + dd : translate$2, + M : translate$2, + MM : translate$2, + y : translate$2, + yy : translate$2 + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Faroese [fo] +//! author : Ragnar Johannesen : https://github.com/ragnar123 + +hooks.defineLocale('fo', { + months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'), + weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'), + weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D. MMMM, YYYY HH:mm' + }, + calendar : { + sameDay : '[Í dag kl.] LT', + nextDay : '[Í morgin kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[Í gjár kl.] LT', + lastWeek : '[síðstu] dddd [kl] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'um %s', + past : '%s síðani', + s : 'fá sekund', + m : 'ein minutt', + mm : '%d minuttir', + h : 'ein tími', + hh : '%d tímar', + d : 'ein dagur', + dd : '%d dagar', + M : 'ein mánaði', + MM : '%d mánaðir', + y : 'eitt ár', + yy : '%d ár' + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : French (Canada) [fr-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca + +hooks.defineLocale('fr-ca', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Aujourd\'hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + ordinalParse: /\d{1,2}(er|e)/, + ordinal : function (number) { + return number + (number === 1 ? 'er' : 'e'); + } +}); + +//! moment.js locale configuration +//! locale : French (Switzerland) [fr-ch] +//! author : Gaspard Bucher : https://github.com/gaspard + +hooks.defineLocale('fr-ch', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Aujourd\'hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + ordinalParse: /\d{1,2}(er|e)/, + ordinal : function (number) { + return number + (number === 1 ? 'er' : 'e'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : French [fr] +//! author : John Fischer : https://github.com/jfroffice + +hooks.defineLocale('fr', { + months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), + monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), + monthsParseExact : true, + weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), + weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), + weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Aujourd\'hui à] LT', + nextDay: '[Demain à] LT', + nextWeek: 'dddd [à] LT', + lastDay: '[Hier à] LT', + lastWeek: 'dddd [dernier à] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'dans %s', + past : 'il y a %s', + s : 'quelques secondes', + m : 'une minute', + mm : '%d minutes', + h : 'une heure', + hh : '%d heures', + d : 'un jour', + dd : '%d jours', + M : 'un mois', + MM : '%d mois', + y : 'un an', + yy : '%d ans' + }, + ordinalParse: /\d{1,2}(er|)/, + ordinal : function (number) { + return number + (number === 1 ? 'er' : ''); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Frisian [fy] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v + +var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'); +var monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'); + +hooks.defineLocale('fy', { + months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'), + monthsShort : function (m, format) { + if (/-MMM-/.test(format)) { + return monthsShortWithoutDots[m.month()]; + } else { + return monthsShortWithDots[m.month()]; + } + }, + monthsParseExact : true, + weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'), + weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'), + weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[hjoed om] LT', + nextDay: '[moarn om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[juster om] LT', + lastWeek: '[ôfrûne] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'oer %s', + past : '%s lyn', + s : 'in pear sekonden', + m : 'ien minút', + mm : '%d minuten', + h : 'ien oere', + hh : '%d oeren', + d : 'ien dei', + dd : '%d dagen', + M : 'ien moanne', + MM : '%d moannen', + y : 'ien jier', + yy : '%d jierren' + }, + ordinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Scottish Gaelic [gd] +//! author : Jon Ashdown : https://github.com/jonashdown + +var months$5 = [ + 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd' +]; + +var monthsShort$3 = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh']; + +var weekdays$1 = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne']; + +var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis']; + +var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa']; + +hooks.defineLocale('gd', { + months : months$5, + monthsShort : monthsShort$3, + monthsParseExact : true, + weekdays : weekdays$1, + weekdaysShort : weekdaysShort, + weekdaysMin : weekdaysMin, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[An-diugh aig] LT', + nextDay : '[A-màireach aig] LT', + nextWeek : 'dddd [aig] LT', + lastDay : '[An-dè aig] LT', + lastWeek : 'dddd [seo chaidh] [aig] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ann an %s', + past : 'bho chionn %s', + s : 'beagan diogan', + m : 'mionaid', + mm : '%d mionaidean', + h : 'uair', + hh : '%d uairean', + d : 'latha', + dd : '%d latha', + M : 'mìos', + MM : '%d mìosan', + y : 'bliadhna', + yy : '%d bliadhna' + }, + ordinalParse : /\d{1,2}(d|na|mh)/, + ordinal : function (number) { + var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Galician [gl] +//! author : Juan G. Hurtado : https://github.com/juanghurtado + +hooks.defineLocale('gl', { + months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'), + monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), + weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), + weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY H:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' + }, + calendar : { + sameDay : function () { + return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextDay : function () { + return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; + }, + nextWeek : function () { + return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + lastDay : function () { + return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT'; + }, + lastWeek : function () { + return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; + }, + sameElse : 'L' + }, + relativeTime : { + future : function (str) { + if (str.indexOf('un') === 0) { + return 'n' + str; + } + return 'en ' + str; + }, + past : 'hai %s', + s : 'uns segundos', + m : 'un minuto', + mm : '%d minutos', + h : 'unha hora', + hh : '%d horas', + d : 'un día', + dd : '%d días', + M : 'un mes', + MM : '%d meses', + y : 'un ano', + yy : '%d anos' + }, + ordinalParse : /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Hebrew [he] +//! author : Tomer Cohen : https://github.com/tomer +//! author : Moshe Simantov : https://github.com/DevelopmentIL +//! author : Tal Ater : https://github.com/TalAter + +hooks.defineLocale('he', { + months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'), + monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'), + weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), + weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'), + weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [ב]MMMM YYYY', + LLL : 'D [ב]MMMM YYYY HH:mm', + LLLL : 'dddd, D [ב]MMMM YYYY HH:mm', + l : 'D/M/YYYY', + ll : 'D MMM YYYY', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd, D MMM YYYY HH:mm' + }, + calendar : { + sameDay : '[היום ב־]LT', + nextDay : '[מחר ב־]LT', + nextWeek : 'dddd [בשעה] LT', + lastDay : '[אתמול ב־]LT', + lastWeek : '[ביום] dddd [האחרון בשעה] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'בעוד %s', + past : 'לפני %s', + s : 'מספר שניות', + m : 'דקה', + mm : '%d דקות', + h : 'שעה', + hh : function (number) { + if (number === 2) { + return 'שעתיים'; + } + return number + ' שעות'; + }, + d : 'יום', + dd : function (number) { + if (number === 2) { + return 'יומיים'; + } + return number + ' ימים'; + }, + M : 'חודש', + MM : function (number) { + if (number === 2) { + return 'חודשיים'; + } + return number + ' חודשים'; + }, + y : 'שנה', + yy : function (number) { + if (number === 2) { + return 'שנתיים'; + } else if (number % 10 === 0 && number !== 10) { + return number + ' שנה'; + } + return number + ' שנים'; + } + }, + meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i, + isPM : function (input) { + return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 5) { + return 'לפנות בוקר'; + } else if (hour < 10) { + return 'בבוקר'; + } else if (hour < 12) { + return isLower ? 'לפנה"צ' : 'לפני הצהריים'; + } else if (hour < 18) { + return isLower ? 'אחה"צ' : 'אחרי הצהריים'; + } else { + return 'בערב'; + } + } +}); + +//! moment.js locale configuration +//! locale : Hindi [hi] +//! author : Mayank Singhal : https://github.com/mayanksinghal + +var symbolMap$6 = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}; +var numberMap$5 = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +hooks.defineLocale('hi', { + months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'), + monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'), + monthsParseExact: true, + weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat : { + LT : 'A h:mm बजे', + LTS : 'A h:mm:ss बजे', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm बजे', + LLLL : 'dddd, D MMMM YYYY, A h:mm बजे' + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[कल] LT', + nextWeek : 'dddd, LT', + lastDay : '[कल] LT', + lastWeek : '[पिछले] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s में', + past : '%s पहले', + s : 'कुछ ही क्षण', + m : 'एक मिनट', + mm : '%d मिनट', + h : 'एक घंटा', + hh : '%d घंटे', + d : 'एक दिन', + dd : '%d दिन', + M : 'एक महीने', + MM : '%d महीने', + y : 'एक वर्ष', + yy : '%d वर्ष' + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$5[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$6[match]; + }); + }, + // Hindi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. + meridiemParse: /रात|सुबह|दोपहर|शाम/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सुबह') { + return hour; + } else if (meridiem === 'दोपहर') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'शाम') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'रात'; + } else if (hour < 10) { + return 'सुबह'; + } else if (hour < 17) { + return 'दोपहर'; + } else if (hour < 20) { + return 'शाम'; + } else { + return 'रात'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Croatian [hr] +//! author : Bojan Marković : https://github.com/bmarkovic + +function translate$3(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'jedna minuta' : 'jedne minute'; + case 'mm': + if (number === 1) { + result += 'minuta'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'minute'; + } else { + result += 'minuta'; + } + return result; + case 'h': + return withoutSuffix ? 'jedan sat' : 'jednog sata'; + case 'hh': + if (number === 1) { + result += 'sat'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'sata'; + } else { + result += 'sati'; + } + return result; + case 'dd': + if (number === 1) { + result += 'dan'; + } else { + result += 'dana'; + } + return result; + case 'MM': + if (number === 1) { + result += 'mjesec'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'mjeseca'; + } else { + result += 'mjeseci'; + } + return result; + case 'yy': + if (number === 1) { + result += 'godina'; + } else if (number === 2 || number === 3 || number === 4) { + result += 'godine'; + } else { + result += 'godina'; + } + return result; + } +} + +hooks.defineLocale('hr', { + months : { + format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'), + standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_') + }, + monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'), + monthsParseExact: true, + weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danas u] LT', + nextDay : '[sutra u] LT', + nextWeek : function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[jučer u] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + return '[proÅ¡lu] dddd [u] LT'; + case 6: + return '[proÅ¡le] [subote] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[proÅ¡li] dddd [u] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'par sekundi', + m : translate$3, + mm : translate$3, + h : translate$3, + hh : translate$3, + d : 'dan', + dd : translate$3, + M : 'mjesec', + MM : translate$3, + y : 'godinu', + yy : translate$3 + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Hungarian [hu] +//! author : Adam Brunner : https://github.com/adambrunner + +var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); +function translate$4(number, withoutSuffix, key, isFuture) { + var num = number, + suffix; + switch (key) { + case 's': + return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce'; + case 'm': + return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'mm': + return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); + case 'h': + return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'hh': + return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); + case 'd': + return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'dd': + return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); + case 'M': + return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'MM': + return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); + case 'y': + return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); + case 'yy': + return num + (isFuture || withoutSuffix ? ' év' : ' éve'); + } + return ''; +} +function week(isFuture) { + return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]'; +} + +hooks.defineLocale('hu', { + months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'), + monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'), + weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'), + weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), + weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'YYYY.MM.DD.', + LL : 'YYYY. MMMM D.', + LLL : 'YYYY. MMMM D. H:mm', + LLLL : 'YYYY. MMMM D., dddd H:mm' + }, + meridiemParse: /de|du/i, + isPM: function (input) { + return input.charAt(1).toLowerCase() === 'u'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower === true ? 'de' : 'DE'; + } else { + return isLower === true ? 'du' : 'DU'; + } + }, + calendar : { + sameDay : '[ma] LT[-kor]', + nextDay : '[holnap] LT[-kor]', + nextWeek : function () { + return week.call(this, true); + }, + lastDay : '[tegnap] LT[-kor]', + lastWeek : function () { + return week.call(this, false); + }, + sameElse : 'L' + }, + relativeTime : { + future : '%s múlva', + past : '%s', + s : translate$4, + m : translate$4, + mm : translate$4, + h : translate$4, + hh : translate$4, + d : translate$4, + dd : translate$4, + M : translate$4, + MM : translate$4, + y : translate$4, + yy : translate$4 + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Armenian [hy-am] +//! author : Armendarabyan : https://github.com/armendarabyan + +hooks.defineLocale('hy-am', { + months : { + format: 'հունվարի_փետրվարի_մարտի_ապրիլի_Õ´Õ¡ÕµÕ«Õ½Õ«_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'), + standalone: 'հունվար_փետրվար_մարտ_ապրիլ_Õ´Õ¡ÕµÕ«Õ½_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_') + }, + monthsShort : 'Õ°Õ¶Õ¾_փտր_մրտ_ապր_Õ´ÕµÕ½_Õ°Õ¶Õ½_Õ°Õ¬Õ½_օգս_Õ½ÕºÕ¿_Õ°Õ¯Õ¿_Õ¶Õ´Õ¢_Õ¤Õ¯Õ¿'.split('_'), + weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«_ուրբաթ_Õ·Õ¡Õ¢Õ¡Õ©'.split('_'), + weekdaysShort : 'կրկ_երկ_երք_չրք_Õ°Õ¶Õ£_ուրբ_Õ·Õ¢Õ©'.split('_'), + weekdaysMin : 'կրկ_երկ_երք_չրք_Õ°Õ¶Õ£_ուրբ_Õ·Õ¢Õ©'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY Õ©.', + LLL : 'D MMMM YYYY Õ©., HH:mm', + LLLL : 'dddd, D MMMM YYYY Õ©., HH:mm' + }, + calendar : { + sameDay: '[այսօր] LT', + nextDay: '[Õ¾Õ¡Õ²Õ¨] LT', + lastDay: '[երեկ] LT', + nextWeek: function () { + return 'dddd [օրը ÕªÕ¡Õ´Õ¨] LT'; + }, + lastWeek: function () { + return '[անցած] dddd [օրը ÕªÕ¡Õ´Õ¨] LT'; + }, + sameElse: 'L' + }, + relativeTime : { + future : '%s Õ°Õ¥Õ¿Õ¸', + past : '%s Õ¡Õ¼Õ¡Õ»', + s : 'Õ´Õ« քանի վայրկյան', + m : 'րոպե', + mm : '%d րոպե', + h : 'ÕªÕ¡Õ´', + hh : '%d ÕªÕ¡Õ´', + d : 'օր', + dd : '%d օր', + M : 'Õ¡Õ´Õ«Õ½', + MM : '%d Õ¡Õ´Õ«Õ½', + y : 'տարի', + yy : '%d տարի' + }, + meridiemParse: /գիշերվա|Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡|ցերեկվա|երեկոյան/, + isPM: function (input) { + return /^(ցերեկվա|երեկոյան)$/.test(input); + }, + meridiem : function (hour) { + if (hour < 4) { + return 'գիշերվա'; + } else if (hour < 12) { + return 'Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡'; + } else if (hour < 17) { + return 'ցերեկվա'; + } else { + return 'երեկոյան'; + } + }, + ordinalParse: /\d{1,2}|\d{1,2}-(Õ«Õ¶|րդ)/, + ordinal: function (number, period) { + switch (period) { + case 'DDD': + case 'w': + case 'W': + case 'DDDo': + if (number === 1) { + return number + '-Õ«Õ¶'; + } + return number + '-րդ'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Indonesian [id] +//! author : Mohammad Satrio Utomo : https://github.com/tyok +//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan + +hooks.defineLocale('id', { + months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), + weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), + weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|siang|sore|malam/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'siang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sore' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'siang'; + } else if (hours < 19) { + return 'sore'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Besok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kemarin pukul] LT', + lastWeek : 'dddd [lalu pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lalu', + s : 'beberapa detik', + m : 'semenit', + mm : '%d menit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Icelandic [is] +//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik + +function plural$2(n) { + if (n % 100 === 11) { + return true; + } else if (n % 10 === 1) { + return false; + } + return true; +} +function translate$5(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum'; + case 'm': + return withoutSuffix ? 'mínúta' : 'mínútu'; + case 'mm': + if (plural$2(number)) { + return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum'); + } else if (withoutSuffix) { + return result + 'mínúta'; + } + return result + 'mínútu'; + case 'hh': + if (plural$2(number)) { + return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum'); + } + return result + 'klukkustund'; + case 'd': + if (withoutSuffix) { + return 'dagur'; + } + return isFuture ? 'dag' : 'degi'; + case 'dd': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'dagar'; + } + return result + (isFuture ? 'daga' : 'dögum'); + } else if (withoutSuffix) { + return result + 'dagur'; + } + return result + (isFuture ? 'dag' : 'degi'); + case 'M': + if (withoutSuffix) { + return 'mánuður'; + } + return isFuture ? 'mánuð' : 'mánuði'; + case 'MM': + if (plural$2(number)) { + if (withoutSuffix) { + return result + 'mánuðir'; + } + return result + (isFuture ? 'mánuði' : 'mánuðum'); + } else if (withoutSuffix) { + return result + 'mánuður'; + } + return result + (isFuture ? 'mánuð' : 'mánuði'); + case 'y': + return withoutSuffix || isFuture ? 'ár' : 'ári'; + case 'yy': + if (plural$2(number)) { + return result + (withoutSuffix || isFuture ? 'ár' : 'árum'); + } + return result + (withoutSuffix || isFuture ? 'ár' : 'ári'); + } +} + +hooks.defineLocale('is', { + months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'), + weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'), + weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'), + weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] H:mm', + LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm' + }, + calendar : { + sameDay : '[í dag kl.] LT', + nextDay : '[á morgun kl.] LT', + nextWeek : 'dddd [kl.] LT', + lastDay : '[í gær kl.] LT', + lastWeek : '[síðasta] dddd [kl.] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'eftir %s', + past : 'fyrir %s síðan', + s : translate$5, + m : translate$5, + mm : translate$5, + h : 'klukkustund', + hh : translate$5, + d : translate$5, + dd : translate$5, + M : translate$5, + MM : translate$5, + y : translate$5, + yy : translate$5 + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Italian [it] +//! author : Lorenzo : https://github.com/aliem +//! author: Mattia Larentis: https://github.com/nostalgiaz + +hooks.defineLocale('it', { + months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'), + monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), + weekdays : 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'), + weekdaysShort : 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'), + weekdaysMin : 'Do_Lu_Ma_Me_Gi_Ve_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Oggi alle] LT', + nextDay: '[Domani alle] LT', + nextWeek: 'dddd [alle] LT', + lastDay: '[Ieri alle] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[la scorsa] dddd [alle] LT'; + default: + return '[lo scorso] dddd [alle] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : function (s) { + return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s; + }, + past : '%s fa', + s : 'alcuni secondi', + m : 'un minuto', + mm : '%d minuti', + h : 'un\'ora', + hh : '%d ore', + d : 'un giorno', + dd : '%d giorni', + M : 'un mese', + MM : '%d mesi', + y : 'un anno', + yy : '%d anni' + }, + ordinalParse : /\d{1,2}º/, + ordinal: '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Japanese [ja] +//! author : LI Long : https://github.com/baryon + +hooks.defineLocale('ja', { + months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), + weekdaysShort : '日_月_火_æ°´_木_金_土'.split('_'), + weekdaysMin : '日_月_火_æ°´_木_金_土'.split('_'), + longDateFormat : { + LT : 'Ah時m分', + LTS : 'Ah時m分s秒', + L : 'YYYY/MM/DD', + LL : 'YYYYå¹´M月D日', + LLL : 'YYYYå¹´M月D日Ah時m分', + LLLL : 'YYYYå¹´M月D日Ah時m分 dddd' + }, + meridiemParse: /午前|午後/i, + isPM : function (input) { + return input === '午後'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return '午前'; + } else { + return '午後'; + } + }, + calendar : { + sameDay : '[今日] LT', + nextDay : '[明日] LT', + nextWeek : '[来週]dddd LT', + lastDay : '[昨日] LT', + lastWeek : '[前週]dddd LT', + sameElse : 'L' + }, + ordinalParse : /\d{1,2}日/, + ordinal : function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + default: + return number; + } + }, + relativeTime : { + future : '%s後', + past : '%s前', + s : '数秒', + m : '1分', + mm : '%d分', + h : '1時間', + hh : '%d時間', + d : '1日', + dd : '%d日', + M : '1ヶ月', + MM : '%dヶ月', + y : '1å¹´', + yy : '%då¹´' + } +}); + +//! moment.js locale configuration +//! locale : Javanese [jv] +//! author : Rony Lantip : https://github.com/lantip +//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa + +hooks.defineLocale('jv', { + months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'), + monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), + weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), + weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), + weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /enjing|siyang|sonten|ndalu/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'enjing') { + return hour; + } else if (meridiem === 'siyang') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'sonten' || meridiem === 'ndalu') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'enjing'; + } else if (hours < 15) { + return 'siyang'; + } else if (hours < 19) { + return 'sonten'; + } else { + return 'ndalu'; + } + }, + calendar : { + sameDay : '[Dinten puniko pukul] LT', + nextDay : '[Mbenjang pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kala wingi pukul] LT', + lastWeek : 'dddd [kepengker pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'wonten ing %s', + past : '%s ingkang kepengker', + s : 'sawetawis detik', + m : 'setunggal menit', + mm : '%d menit', + h : 'setunggal jam', + hh : '%d jam', + d : 'sedinten', + dd : '%d dinten', + M : 'sewulan', + MM : '%d wulan', + y : 'setaun', + yy : '%d taun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Georgian [ka] +//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili + +hooks.defineLocale('ka', { + months : { + standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), + format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_') + }, + monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), + weekdays : { + standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), + format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'), + isFormat: /(წინა|შემდეგ)/ + }, + weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'), + weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[დღეს] LT[-ზე]', + nextDay : '[ხვალ] LT[-ზე]', + lastDay : '[გუშინ] LT[-ზე]', + nextWeek : '[შემდეგ] dddd LT[-ზე]', + lastWeek : '[წინა] dddd LT-ზე', + sameElse : 'L' + }, + relativeTime : { + future : function (s) { + return (/(წამი|წუთი|საათი|წელი)/).test(s) ? + s.replace(/ი$/, 'ში') : + s + 'ში'; + }, + past : function (s) { + if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { + return s.replace(/(ი|ე)$/, 'ის წინ'); + } + if ((/წელი/).test(s)) { + return s.replace(/წელი$/, 'წლის წინ'); + } + }, + s : 'რამდენიმე წამი', + m : 'წუთი', + mm : '%d წუთი', + h : 'საათი', + hh : '%d საათი', + d : 'დღე', + dd : '%d დღე', + M : 'თვე', + MM : '%d თვე', + y : 'წელი', + yy : '%d წელი' + }, + ordinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/, + ordinal : function (number) { + if (number === 0) { + return number; + } + if (number === 1) { + return number + '-ლი'; + } + if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) { + return 'მე-' + number; + } + return number + '-ე'; + }, + week : { + dow : 1, + doy : 7 + } +}); + +//! moment.js locale configuration +//! locale : Kazakh [kk] +//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan + +var suffixes$1 = { + 0: '-ші', + 1: '-ші', + 2: '-ші', + 3: '-ші', + 4: '-ші', + 5: '-ші', + 6: '-шы', + 7: '-ші', + 8: '-ші', + 9: '-шы', + 10: '-шы', + 20: '-шы', + 30: '-шы', + 40: '-шы', + 50: '-ші', + 60: '-шы', + 70: '-ші', + 80: '-ші', + 90: '-шы', + 100: '-ші' +}; + +hooks.defineLocale('kk', { + months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'), + monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'), + weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'), + weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'), + weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Бүгін сағат] LT', + nextDay : '[Ертең сағат] LT', + nextWeek : 'dddd [сағат] LT', + lastDay : '[Кеше сағат] LT', + lastWeek : '[Өткен аптаның] dddd [сағат] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ішінде', + past : '%s бұрын', + s : 'бірнеше секунд', + m : 'бір минут', + mm : '%d минут', + h : 'бір сағат', + hh : '%d сағат', + d : 'бір күн', + dd : '%d күн', + M : 'бір ай', + MM : '%d ай', + y : 'бір жыл', + yy : '%d жыл' + }, + ordinalParse: /\d{1,2}-(ші|шы)/, + ordinal : function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Cambodian [km] +//! author : Kruy Vanna : https://github.com/kruyvanna + +hooks.defineLocale('km', { + months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS : 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd, D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[ថ្ងៃនេះ ម៉ោង] LT', + nextDay: '[ស្អែក ម៉ោង] LT', + nextWeek: 'dddd [ម៉ោង] LT', + lastDay: '[ម្សិលមិញ ម៉ោង] LT', + lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT', + sameElse: 'L' + }, + relativeTime: { + future: '%sទៀត', + past: '%sមុន', + s: 'ប៉ុន្មានវិនាទី', + m: 'មួយនាទី', + mm: '%d នាទី', + h: 'មួយម៉ោង', + hh: '%d ម៉ោង', + d: 'មួយថ្ងៃ', + dd: '%d ថ្ងៃ', + M: 'មួយខែ', + MM: '%d ខែ', + y: 'មួយឆ្នាំ', + yy: '%d ឆ្នាំ' + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Korean [ko] +//! author : Kyungwook, Park : https://github.com/kyungw00k +//! author : Jeeeyul Lee + +hooks.defineLocale('ko', { + months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'), + weekdaysShort : '일_월_화_수_목_금_토'.split('_'), + weekdaysMin : '일_월_화_수_목_금_토'.split('_'), + longDateFormat : { + LT : 'A h시 m분', + LTS : 'A h시 m분 s초', + L : 'YYYY.MM.DD', + LL : 'YYYY년 MMMM D일', + LLL : 'YYYY년 MMMM D일 A h시 m분', + LLLL : 'YYYY년 MMMM D일 dddd A h시 m분' + }, + calendar : { + sameDay : '오늘 LT', + nextDay : '내일 LT', + nextWeek : 'dddd LT', + lastDay : '어제 LT', + lastWeek : '지난주 dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s 후', + past : '%s 전', + s : '몇 초', + ss : '%d초', + m : '일분', + mm : '%d분', + h : '한 시간', + hh : '%d시간', + d : '하루', + dd : '%d일', + M : '한 달', + MM : '%d달', + y : '일 년', + yy : '%d년' + }, + ordinalParse : /\d{1,2}일/, + ordinal : '%d일', + meridiemParse : /오전|오후/, + isPM : function (token) { + return token === '오후'; + }, + meridiem : function (hour, minute, isUpper) { + return hour < 12 ? '오전' : '오후'; + } +}); + +//! moment.js locale configuration +//! locale : Kyrgyz [ky] +//! author : Chyngyz Arystan uulu : https://github.com/chyngyz + + +var suffixes$2 = { + 0: '-чү', + 1: '-чи', + 2: '-чи', + 3: '-чү', + 4: '-чү', + 5: '-чи', + 6: '-чы', + 7: '-чи', + 8: '-чи', + 9: '-чу', + 10: '-чу', + 20: '-чы', + 30: '-чу', + 40: '-чы', + 50: '-чү', + 60: '-чы', + 70: '-чи', + 80: '-чи', + 90: '-чу', + 100: '-чү' +}; + +hooks.defineLocale('ky', { + months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), + monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), + weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'), + weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'), + weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Бүгүн саат] LT', + nextDay : '[Эртең саат] LT', + nextWeek : 'dddd [саат] LT', + lastDay : '[Кече саат] LT', + lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ичинде', + past : '%s мурун', + s : 'бирнече секунд', + m : 'бир мүнөт', + mm : '%d мүнөт', + h : 'бир саат', + hh : '%d саат', + d : 'бир күн', + dd : '%d күн', + M : 'бир ай', + MM : '%d ай', + y : 'бир жыл', + yy : '%d жыл' + }, + ordinalParse: /\d{1,2}-(чи|чы|чү|чу)/, + ordinal : function (number) { + var a = number % 10, + b = number >= 100 ? 100 : null; + return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Luxembourgish [lb] +//! author : mweimerskirch : https://github.com/mweimerskirch +//! author : David Raison : https://github.com/kwisatz + +function processRelativeTime$3(number, withoutSuffix, key, isFuture) { + var format = { + 'm': ['eng Minutt', 'enger Minutt'], + 'h': ['eng Stonn', 'enger Stonn'], + 'd': ['een Dag', 'engem Dag'], + 'M': ['ee Mount', 'engem Mount'], + 'y': ['ee Joer', 'engem Joer'] + }; + return withoutSuffix ? format[key][0] : format[key][1]; +} +function processFutureTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'a ' + string; + } + return 'an ' + string; +} +function processPastTime(string) { + var number = string.substr(0, string.indexOf(' ')); + if (eifelerRegelAppliesToNumber(number)) { + return 'viru ' + string; + } + return 'virun ' + string; +} +/** + * Returns true if the word before the given number loses the '-n' ending. + * e.g. 'an 10 Deeg' but 'a 5 Deeg' + * + * @param number {integer} + * @returns {boolean} + */ +function eifelerRegelAppliesToNumber(number) { + number = parseInt(number, 10); + if (isNaN(number)) { + return false; + } + if (number < 0) { + // Negative Number --> always true + return true; + } else if (number < 10) { + // Only 1 digit + if (4 <= number && number <= 7) { + return true; + } + return false; + } else if (number < 100) { + // 2 digits + var lastDigit = number % 10, firstDigit = number / 10; + if (lastDigit === 0) { + return eifelerRegelAppliesToNumber(firstDigit); + } + return eifelerRegelAppliesToNumber(lastDigit); + } else if (number < 10000) { + // 3 or 4 digits --> recursively check first digit + while (number >= 10) { + number = number / 10; + } + return eifelerRegelAppliesToNumber(number); + } else { + // Anything larger than 4 digits: recursively check first n-3 digits + number = number / 1000; + return eifelerRegelAppliesToNumber(number); + } +} + +hooks.defineLocale('lb', { + months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'), + monthsParseExact : true, + weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'), + weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'), + weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm [Auer]', + LTS: 'H:mm:ss [Auer]', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm [Auer]', + LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]' + }, + calendar: { + sameDay: '[Haut um] LT', + sameElse: 'L', + nextDay: '[Muer um] LT', + nextWeek: 'dddd [um] LT', + lastDay: '[Gëschter um] LT', + lastWeek: function () { + // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule + switch (this.day()) { + case 2: + case 4: + return '[Leschten] dddd [um] LT'; + default: + return '[Leschte] dddd [um] LT'; + } + } + }, + relativeTime : { + future : processFutureTime, + past : processPastTime, + s : 'e puer Sekonnen', + m : processRelativeTime$3, + mm : '%d Minutten', + h : processRelativeTime$3, + hh : '%d Stonnen', + d : processRelativeTime$3, + dd : '%d Deeg', + M : processRelativeTime$3, + MM : '%d Méint', + y : processRelativeTime$3, + yy : '%d Joer' + }, + ordinalParse: /\d{1,2}\./, + ordinal: '%d.', + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Lao [lo] +//! author : Ryan Hart : https://github.com/ryanhart2 + +hooks.defineLocale('lo', { + months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), + monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), + weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), + weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'ວັນdddd D MMMM YYYY HH:mm' + }, + meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/, + isPM: function (input) { + return input === 'ຕອນແລງ'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ຕອນເຊົ້າ'; + } else { + return 'ຕອນແລງ'; + } + }, + calendar : { + sameDay : '[ມື້ນີ້ເວລາ] LT', + nextDay : '[ມື້ອື່ນເວລາ] LT', + nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT', + lastDay : '[ມື້ວານນີ້ເວລາ] LT', + lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ອີກ %s', + past : '%sຜ່ານມາ', + s : 'ບໍ່ເທົ່າໃດວິນາທີ', + m : '1 ນາທີ', + mm : '%d ນາທີ', + h : '1 ຊົ່ວໂມງ', + hh : '%d ຊົ່ວໂມງ', + d : '1 ມື້', + dd : '%d ມື້', + M : '1 ເດືອນ', + MM : '%d ເດືອນ', + y : '1 ປີ', + yy : '%d ປີ' + }, + ordinalParse: /(ທີ່)\d{1,2}/, + ordinal : function (number) { + return 'ທີ່' + number; + } +}); + +//! moment.js locale configuration +//! locale : Lithuanian [lt] +//! author : Mindaugas MozÅ«ras : https://github.com/mmozuras + +var units = { + 'm' : 'minutė_minutės_minutę', + 'mm': 'minutės_minučių_minutes', + 'h' : 'valanda_valandos_valandą', + 'hh': 'valandos_valandų_valandas', + 'd' : 'diena_dienos_dieną', + 'dd': 'dienos_dienų_dienas', + 'M' : 'mėnuo_mėnesio_mėnesį', + 'MM': 'mėnesiai_mėnesių_mėnesius', + 'y' : 'metai_metų_metus', + 'yy': 'metai_metų_metus' +}; +function translateSeconds(number, withoutSuffix, key, isFuture) { + if (withoutSuffix) { + return 'kelios sekundės'; + } else { + return isFuture ? 'kelių sekundžių' : 'kelias sekundes'; + } +} +function translateSingular(number, withoutSuffix, key, isFuture) { + return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]); +} +function special(number) { + return number % 10 === 0 || (number > 10 && number < 20); +} +function forms(key) { + return units[key].split('_'); +} +function translate$6(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + if (number === 1) { + return result + translateSingular(number, withoutSuffix, key[0], isFuture); + } else if (withoutSuffix) { + return result + (special(number) ? forms(key)[1] : forms(key)[0]); + } else { + if (isFuture) { + return result + forms(key)[1]; + } else { + return result + (special(number) ? forms(key)[1] : forms(key)[2]); + } + } +} +hooks.defineLocale('lt', { + months : { + format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'), + standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjÅ«tis_rugsėjis_spalis_lapkritis_gruodis'.split('_'), + isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/ + }, + monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), + weekdays : { + format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_Å¡eÅ¡tadienį'.split('_'), + standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_Å¡eÅ¡tadienis'.split('_'), + isFormat: /dddd HH:mm/ + }, + weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Å eÅ¡'.split('_'), + weekdaysMin : 'S_P_A_T_K_Pn_Å '.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'YYYY [m.] MMMM D [d.]', + LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', + l : 'YYYY-MM-DD', + ll : 'YYYY [m.] MMMM D [d.]', + lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', + llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]' + }, + calendar : { + sameDay : '[Å iandien] LT', + nextDay : '[Rytoj] LT', + nextWeek : 'dddd LT', + lastDay : '[Vakar] LT', + lastWeek : '[Praėjusį] dddd LT', + sameElse : 'L' + }, + relativeTime : { + future : 'po %s', + past : 'prieÅ¡ %s', + s : translateSeconds, + m : translateSingular, + mm : translate$6, + h : translateSingular, + hh : translate$6, + d : translateSingular, + dd : translate$6, + M : translateSingular, + MM : translate$6, + y : translateSingular, + yy : translate$6 + }, + ordinalParse: /\d{1,2}-oji/, + ordinal : function (number) { + return number + '-oji'; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Latvian [lv] +//! author : Kristaps Karlsons : https://github.com/skakri +//! author : Jānis Elmeris : https://github.com/JanisE + +var units$1 = { + 'm': 'minÅ«tes_minÅ«tēm_minÅ«te_minÅ«tes'.split('_'), + 'mm': 'minÅ«tes_minÅ«tēm_minÅ«te_minÅ«tes'.split('_'), + 'h': 'stundas_stundām_stunda_stundas'.split('_'), + 'hh': 'stundas_stundām_stunda_stundas'.split('_'), + 'd': 'dienas_dienām_diena_dienas'.split('_'), + 'dd': 'dienas_dienām_diena_dienas'.split('_'), + 'M': 'mēneÅ¡a_mēneÅ¡iem_mēnesis_mēneÅ¡i'.split('_'), + 'MM': 'mēneÅ¡a_mēneÅ¡iem_mēnesis_mēneÅ¡i'.split('_'), + 'y': 'gada_gadiem_gads_gadi'.split('_'), + 'yy': 'gada_gadiem_gads_gadi'.split('_') +}; +/** + * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. + */ +function format$1(forms, number, withoutSuffix) { + if (withoutSuffix) { + // E.g. "21 minÅ«te", "3 minÅ«tes". + return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3]; + } else { + // E.g. "21 minÅ«tes" as in "pēc 21 minÅ«tes". + // E.g. "3 minÅ«tēm" as in "pēc 3 minÅ«tēm". + return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1]; + } +} +function relativeTimeWithPlural$1(number, withoutSuffix, key) { + return number + ' ' + format$1(units$1[key], number, withoutSuffix); +} +function relativeTimeWithSingular(number, withoutSuffix, key) { + return format$1(units$1[key], number, withoutSuffix); +} +function relativeSeconds(number, withoutSuffix) { + return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm'; +} + +hooks.defineLocale('lv', { + months : 'janvāris_februāris_marts_aprÄ«lis_maijs_jÅ«nijs_jÅ«lijs_augusts_septembris_oktobris_novembris_decembris'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jÅ«n_jÅ«l_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'svētdiena_pirmdiena_otrdiena_treÅ¡diena_ceturtdiena_piektdiena_sestdiena'.split('_'), + weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY.', + LL : 'YYYY. [gada] D. MMMM', + LLL : 'YYYY. [gada] D. MMMM, HH:mm', + LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm' + }, + calendar : { + sameDay : '[Å odien pulksten] LT', + nextDay : '[RÄ«t pulksten] LT', + nextWeek : 'dddd [pulksten] LT', + lastDay : '[Vakar pulksten] LT', + lastWeek : '[Pagājušā] dddd [pulksten] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'pēc %s', + past : 'pirms %s', + s : relativeSeconds, + m : relativeTimeWithSingular, + mm : relativeTimeWithPlural$1, + h : relativeTimeWithSingular, + hh : relativeTimeWithPlural$1, + d : relativeTimeWithSingular, + dd : relativeTimeWithPlural$1, + M : relativeTimeWithSingular, + MM : relativeTimeWithPlural$1, + y : relativeTimeWithSingular, + yy : relativeTimeWithPlural$1 + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Montenegrin [me] +//! author : Miodrag Nikač : https://github.com/miodragnikac + +var translator = { + words: { //Different grammatical cases + m: ['jedan minut', 'jednog minuta'], + mm: ['minut', 'minuta', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mjesec', 'mjeseca', 'mjeseci'], + yy: ['godina', 'godine', 'godina'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator.correctGrammaticalCase(number, wordKey); + } + } +}; + +hooks.defineLocale('me', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact : true, + weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'), + weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sjutra u] LT', + + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedjelju] [u] LT'; + case 3: + return '[u] [srijedu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[juče u] LT', + lastWeek : function () { + var lastWeekDays = [ + '[proÅ¡le] [nedjelje] [u] LT', + '[proÅ¡log] [ponedjeljka] [u] LT', + '[proÅ¡log] [utorka] [u] LT', + '[proÅ¡le] [srijede] [u] LT', + '[proÅ¡log] [četvrtka] [u] LT', + '[proÅ¡log] [petka] [u] LT', + '[proÅ¡le] [subote] [u] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'prije %s', + s : 'nekoliko sekundi', + m : translator.translate, + mm : translator.translate, + h : translator.translate, + hh : translator.translate, + d : 'dan', + dd : translator.translate, + M : 'mjesec', + MM : translator.translate, + y : 'godinu', + yy : translator.translate + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Maori [mi] +//! author : John Corrigan : https://github.com/johnideal + +hooks.defineLocale('mi', { + months: 'Kohi-tāte_Hui-tanguru_PoutÅ«-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'), + monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'), + monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i, + monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i, + weekdays: 'Rātapu_Mane_TÅ«rei_Wenerei_Tāite_Paraire_Hātarei'.split('_'), + weekdaysShort: 'Ta_Ma_TÅ«_We_Tāi_Pa_Hā'.split('_'), + weekdaysMin: 'Ta_Ma_TÅ«_We_Tāi_Pa_Hā'.split('_'), + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY [i] HH:mm', + LLLL: 'dddd, D MMMM YYYY [i] HH:mm' + }, + calendar: { + sameDay: '[i teie mahana, i] LT', + nextDay: '[apopo i] LT', + nextWeek: 'dddd [i] LT', + lastDay: '[inanahi i] LT', + lastWeek: 'dddd [whakamutunga i] LT', + sameElse: 'L' + }, + relativeTime: { + future: 'i roto i %s', + past: '%s i mua', + s: 'te hēkona ruarua', + m: 'he meneti', + mm: '%d meneti', + h: 'te haora', + hh: '%d haora', + d: 'he ra', + dd: '%d ra', + M: 'he marama', + MM: '%d marama', + y: 'he tau', + yy: '%d tau' + }, + ordinalParse: /\d{1,2}º/, + ordinal: '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Macedonian [mk] +//! author : Borislav Mickov : https://github.com/B0k0 + +hooks.defineLocale('mk', { + months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'), + monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'), + weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'), + weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'), + weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'D.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[Денес во] LT', + nextDay : '[Утре во] LT', + nextWeek : '[Во] dddd [во] LT', + lastDay : '[Вчера во] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + case 3: + case 6: + return '[Изминатата] dddd [во] LT'; + case 1: + case 2: + case 4: + case 5: + return '[Изминатиот] dddd [во] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'после %s', + past : 'пред %s', + s : 'неколку секунди', + m : 'минута', + mm : '%d минути', + h : 'час', + hh : '%d часа', + d : 'ден', + dd : '%d дена', + M : 'месец', + MM : '%d месеци', + y : 'година', + yy : '%d години' + }, + ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, + ordinal : function (number) { + var lastDigit = number % 10, + last2Digits = number % 100; + if (number === 0) { + return number + '-ев'; + } else if (last2Digits === 0) { + return number + '-ен'; + } else if (last2Digits > 10 && last2Digits < 20) { + return number + '-ти'; + } else if (lastDigit === 1) { + return number + '-ви'; + } else if (lastDigit === 2) { + return number + '-ри'; + } else if (lastDigit === 7 || lastDigit === 8) { + return number + '-ми'; + } else { + return number + '-ти'; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Malayalam [ml] +//! author : Floyd Pink : https://github.com/floydpink + +hooks.defineLocale('ml', { + months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'), + monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'), + monthsParseExact : true, + weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'), + weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), + weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_à´¶'.split('_'), + longDateFormat : { + LT : 'A h:mm -നു', + LTS : 'A h:mm:ss -നു', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm -നു', + LLLL : 'dddd, D MMMM YYYY, A h:mm -നു' + }, + calendar : { + sameDay : '[ഇന്ന്] LT', + nextDay : '[നാളെ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ഇന്നലെ] LT', + lastWeek : '[കഴിഞ്ഞ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s കഴിഞ്ഞ്', + past : '%s മുൻപ്', + s : 'അൽപ നിമിഷങ്ങൾ', + m : 'ഒരു മിനിറ്റ്', + mm : '%d മിനിറ്റ്', + h : 'ഒരു മണിക്കൂർ', + hh : '%d മണിക്കൂർ', + d : 'ഒരു ദിവസം', + dd : '%d ദിവസം', + M : 'ഒരു മാസം', + MM : '%d മാസം', + y : 'ഒരു വർഷം', + yy : '%d വർഷം' + }, + meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if ((meridiem === 'രാത്രി' && hour >= 4) || + meridiem === 'ഉച്ച കഴിഞ്ഞ്' || + meridiem === 'വൈകുന്നേരം') { + return hour + 12; + } else { + return hour; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'രാത്രി'; + } else if (hour < 12) { + return 'രാവിലെ'; + } else if (hour < 17) { + return 'ഉച്ച കഴിഞ്ഞ്'; + } else if (hour < 20) { + return 'വൈകുന്നേരം'; + } else { + return 'രാത്രി'; + } + } +}); + +//! moment.js locale configuration +//! locale : Marathi [mr] +//! author : Harshad Kale : https://github.com/kalehv +//! author : Vivek Athalye : https://github.com/vnathalye + +var symbolMap$7 = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}; +var numberMap$6 = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +function relativeTimeMr(number, withoutSuffix, string, isFuture) +{ + var output = ''; + if (withoutSuffix) { + switch (string) { + case 's': output = 'काही सेकंद'; break; + case 'm': output = 'एक मिनिट'; break; + case 'mm': output = '%d मिनिटे'; break; + case 'h': output = 'एक तास'; break; + case 'hh': output = '%d तास'; break; + case 'd': output = 'एक दिवस'; break; + case 'dd': output = '%d दिवस'; break; + case 'M': output = 'एक महिना'; break; + case 'MM': output = '%d महिने'; break; + case 'y': output = 'एक वर्ष'; break; + case 'yy': output = '%d वर्षे'; break; + } + } + else { + switch (string) { + case 's': output = 'काही सेकंदां'; break; + case 'm': output = 'एका मिनिटा'; break; + case 'mm': output = '%d मिनिटां'; break; + case 'h': output = 'एका तासा'; break; + case 'hh': output = '%d तासां'; break; + case 'd': output = 'एका दिवसा'; break; + case 'dd': output = '%d दिवसां'; break; + case 'M': output = 'एका महिन्या'; break; + case 'MM': output = '%d महिन्यां'; break; + case 'y': output = 'एका वर्षा'; break; + case 'yy': output = '%d वर्षां'; break; + } + } + return output.replace(/%d/i, number); +} + +hooks.defineLocale('mr', { + months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'), + monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'), + monthsParseExact : true, + weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), + weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'), + weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), + longDateFormat : { + LT : 'A h:mm वाजता', + LTS : 'A h:mm:ss वाजता', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm वाजता', + LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता' + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[उद्या] LT', + nextWeek : 'dddd, LT', + lastDay : '[काल] LT', + lastWeek: '[मागील] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future: '%sमध्ये', + past: '%sपूर्वी', + s: relativeTimeMr, + m: relativeTimeMr, + mm: relativeTimeMr, + h: relativeTimeMr, + hh: relativeTimeMr, + d: relativeTimeMr, + dd: relativeTimeMr, + M: relativeTimeMr, + MM: relativeTimeMr, + y: relativeTimeMr, + yy: relativeTimeMr + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$6[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$7[match]; + }); + }, + meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'रात्री') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'सकाळी') { + return hour; + } else if (meridiem === 'दुपारी') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'सायंकाळी') { + return hour + 12; + } + }, + meridiem: function (hour, minute, isLower) { + if (hour < 4) { + return 'रात्री'; + } else if (hour < 10) { + return 'सकाळी'; + } else if (hour < 17) { + return 'दुपारी'; + } else if (hour < 20) { + return 'सायंकाळी'; + } else { + return 'रात्री'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Malay [ms-my] +//! note : DEPRECATED, the correct one is [ms] +//! author : Weldan Jamili : https://github.com/weldan + +hooks.defineLocale('ms-my', { + months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Esok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kelmarin pukul] LT', + lastWeek : 'dddd [lepas pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lepas', + s : 'beberapa saat', + m : 'seminit', + mm : '%d minit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Malay [ms] +//! author : Weldan Jamili : https://github.com/weldan + +hooks.defineLocale('ms', { + months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), + weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [pukul] HH.mm', + LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' + }, + meridiemParse: /pagi|tengahari|petang|malam/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'pagi') { + return hour; + } else if (meridiem === 'tengahari') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'petang' || meridiem === 'malam') { + return hour + 12; + } + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'pagi'; + } else if (hours < 15) { + return 'tengahari'; + } else if (hours < 19) { + return 'petang'; + } else { + return 'malam'; + } + }, + calendar : { + sameDay : '[Hari ini pukul] LT', + nextDay : '[Esok pukul] LT', + nextWeek : 'dddd [pukul] LT', + lastDay : '[Kelmarin pukul] LT', + lastWeek : 'dddd [lepas pukul] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'dalam %s', + past : '%s yang lepas', + s : 'beberapa saat', + m : 'seminit', + mm : '%d minit', + h : 'sejam', + hh : '%d jam', + d : 'sehari', + dd : '%d hari', + M : 'sebulan', + MM : '%d bulan', + y : 'setahun', + yy : '%d tahun' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Burmese [my] +//! author : Squar team, mysquar.com +//! author : David Rossellat : https://github.com/gholadr +//! author : Tin Aung Lin : https://github.com/thanyawzinmin + +var symbolMap$8 = { + '1': '၁', + '2': '၂', + '3': '၃', + '4': '၄', + '5': '၅', + '6': '၆', + '7': '၇', + '8': '၈', + '9': '၉', + '0': '၀' +}; +var numberMap$7 = { + '၁': '1', + '၂': '2', + '၃': '3', + '၄': '4', + '၅': '5', + '၆': '6', + '၇': '7', + '၈': '8', + '၉': '9', + '၀': '0' +}; + +hooks.defineLocale('my', { + months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'), + monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'), + weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'), + weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'), + + longDateFormat: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'DD/MM/YYYY', + LL: 'D MMMM YYYY', + LLL: 'D MMMM YYYY HH:mm', + LLLL: 'dddd D MMMM YYYY HH:mm' + }, + calendar: { + sameDay: '[ယနေ.] LT [မှာ]', + nextDay: '[မနက်ဖြန်] LT [မှာ]', + nextWeek: 'dddd LT [မှာ]', + lastDay: '[မနေ.က] LT [မှာ]', + lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]', + sameElse: 'L' + }, + relativeTime: { + future: 'လာမည့် %s မှာ', + past: 'လွန်ခဲ့သော %s က', + s: 'စက္ကန်.အနည်းငယ်', + m: 'တစ်မိနစ်', + mm: '%d မိနစ်', + h: 'တစ်နာရီ', + hh: '%d နာရီ', + d: 'တစ်ရက်', + dd: '%d ရက်', + M: 'တစ်လ', + MM: '%d လ', + y: 'တစ်နှစ်', + yy: '%d နှစ်' + }, + preparse: function (string) { + return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) { + return numberMap$7[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$8[match]; + }); + }, + week: { + dow: 1, // Monday is the first day of the week. + doy: 4 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Norwegian BokmÃ¥l [nb] +//! authors : Espen Hovlandsdal : https://github.com/rexxars +//! Sigurd Gartmann : https://github.com/sigurdga + +hooks.defineLocale('nb', { + months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'), + monthsParseExact : true, + weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), + weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'), + weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] HH:mm', + LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay: '[i dag kl.] LT', + nextDay: '[i morgen kl.] LT', + nextWeek: 'dddd [kl.] LT', + lastDay: '[i gÃ¥r kl.] LT', + lastWeek: '[forrige] dddd [kl.] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s siden', + s : 'noen sekunder', + m : 'ett minutt', + mm : '%d minutter', + h : 'en time', + hh : '%d timer', + d : 'en dag', + dd : '%d dager', + M : 'en mÃ¥ned', + MM : '%d mÃ¥neder', + y : 'ett Ã¥r', + yy : '%d Ã¥r' + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Nepalese [ne] +//! author : suvash : https://github.com/suvash + +var symbolMap$9 = { + '1': '१', + '2': '२', + '3': '३', + '4': '४', + '5': '५', + '6': '६', + '7': '७', + '8': '८', + '9': '९', + '0': '०' +}; +var numberMap$8 = { + '१': '1', + '२': '2', + '३': '3', + '४': '4', + '५': '5', + '६': '6', + '७': '7', + '८': '8', + '९': '9', + '०': '0' +}; + +hooks.defineLocale('ne', { + months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'), + monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'), + monthsParseExact : true, + weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'), + weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'), + weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'Aको h:mm बजे', + LTS : 'Aको h:mm:ss बजे', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, Aको h:mm बजे', + LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे' + }, + preparse: function (string) { + return string.replace(/[१२३४५६७८९०]/g, function (match) { + return numberMap$8[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$9[match]; + }); + }, + meridiemParse: /राति|बिहान|दिउँसो|साँझ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'राति') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'बिहान') { + return hour; + } else if (meridiem === 'दिउँसो') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'साँझ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 3) { + return 'राति'; + } else if (hour < 12) { + return 'बिहान'; + } else if (hour < 16) { + return 'दिउँसो'; + } else if (hour < 20) { + return 'साँझ'; + } else { + return 'राति'; + } + }, + calendar : { + sameDay : '[आज] LT', + nextDay : '[भोलि] LT', + nextWeek : '[आउँदो] dddd[,] LT', + lastDay : '[हिजो] LT', + lastWeek : '[गएको] dddd[,] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%sमा', + past : '%s अगाडि', + s : 'केही क्षण', + m : 'एक मिनेट', + mm : '%d मिनेट', + h : 'एक घण्टा', + hh : '%d घण्टा', + d : 'एक दिन', + dd : '%d दिन', + M : 'एक महिना', + MM : '%d महिना', + y : 'एक बर्ष', + yy : '%d बर्ष' + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Dutch (Belgium) [nl-be] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj + +var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'); +var monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); + +var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; +var monthsRegex$1 = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + +hooks.defineLocale('nl-be', { + months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), + monthsShort : function (m, format) { + if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$1[m.month()]; + } else { + return monthsShortWithDots$1[m.month()]; + } + }, + + monthsRegex: monthsRegex$1, + monthsShortRegex: monthsRegex$1, + monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse : monthsParse, + longMonthsParse : monthsParse, + shortMonthsParse : monthsParse, + + weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), + weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'over %s', + past : '%s geleden', + s : 'een paar seconden', + m : 'één minuut', + mm : '%d minuten', + h : 'één uur', + hh : '%d uur', + d : 'één dag', + dd : '%d dagen', + M : 'één maand', + MM : '%d maanden', + y : 'één jaar', + yy : '%d jaar' + }, + ordinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Dutch [nl] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj + +var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'); +var monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); + +var monthsParse$1 = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; +var monthsRegex$2 = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; + +hooks.defineLocale('nl', { + months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), + monthsShort : function (m, format) { + if (/-MMM-/.test(format)) { + return monthsShortWithoutDots$2[m.month()]; + } else { + return monthsShortWithDots$2[m.month()]; + } + }, + + monthsRegex: monthsRegex$2, + monthsShortRegex: monthsRegex$2, + monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i, + monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, + + monthsParse : monthsParse$1, + longMonthsParse : monthsParse$1, + shortMonthsParse : monthsParse$1, + + weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), + weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), + weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD-MM-YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[vandaag om] LT', + nextDay: '[morgen om] LT', + nextWeek: 'dddd [om] LT', + lastDay: '[gisteren om] LT', + lastWeek: '[afgelopen] dddd [om] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'over %s', + past : '%s geleden', + s : 'een paar seconden', + m : 'één minuut', + mm : '%d minuten', + h : 'één uur', + hh : '%d uur', + d : 'één dag', + dd : '%d dagen', + M : 'één maand', + MM : '%d maanden', + y : 'één jaar', + yy : '%d jaar' + }, + ordinalParse: /\d{1,2}(ste|de)/, + ordinal : function (number) { + return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Nynorsk [nn] +//! author : https://github.com/mechuwind + +hooks.defineLocale('nn', { + months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), + monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), + weekdays : 'sundag_mÃ¥ndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), + weekdaysShort : 'sun_mÃ¥n_tys_ons_tor_fre_lau'.split('_'), + weekdaysMin : 'su_mÃ¥_ty_on_to_fr_lø'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY [kl.] H:mm', + LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' + }, + calendar : { + sameDay: '[I dag klokka] LT', + nextDay: '[I morgon klokka] LT', + nextWeek: 'dddd [klokka] LT', + lastDay: '[I gÃ¥r klokka] LT', + lastWeek: '[FøregÃ¥ande] dddd [klokka] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : '%s sidan', + s : 'nokre sekund', + m : 'eit minutt', + mm : '%d minutt', + h : 'ein time', + hh : '%d timar', + d : 'ein dag', + dd : '%d dagar', + M : 'ein mÃ¥nad', + MM : '%d mÃ¥nader', + y : 'eit Ã¥r', + yy : '%d Ã¥r' + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Punjabi (India) [pa-in] +//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit + +var symbolMap$10 = { + '1': '੧', + '2': '੨', + '3': 'à©©', + '4': '੪', + '5': 'à©«', + '6': '੬', + '7': 'à©­', + '8': 'à©®', + '9': '੯', + '0': '੦' +}; +var numberMap$9 = { + '੧': '1', + '੨': '2', + 'à©©': '3', + '੪': '4', + 'à©«': '5', + '੬': '6', + 'à©­': '7', + 'à©®': '8', + '੯': '9', + '੦': '0' +}; + +hooks.defineLocale('pa-in', { + // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi. + months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), + monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), + weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'), + weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), + longDateFormat : { + LT : 'A h:mm ਵਜੇ', + LTS : 'A h:mm:ss ਵਜੇ', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm ਵਜੇ', + LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ' + }, + calendar : { + sameDay : '[ਅਜ] LT', + nextDay : '[ਕਲ] LT', + nextWeek : 'dddd, LT', + lastDay : '[ਕਲ] LT', + lastWeek : '[ਪਿਛਲੇ] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s ਵਿੱਚ', + past : '%s ਪਿਛਲੇ', + s : 'ਕੁਝ ਸਕਿੰਟ', + m : 'ਇਕ ਮਿੰਟ', + mm : '%d ਮਿੰਟ', + h : 'ਇੱਕ ਘੰਟਾ', + hh : '%d ਘੰਟੇ', + d : 'ਇੱਕ ਦਿਨ', + dd : '%d ਦਿਨ', + M : 'ਇੱਕ ਮਹੀਨਾ', + MM : '%d ਮਹੀਨੇ', + y : 'ਇੱਕ ਸਾਲ', + yy : '%d ਸਾਲ' + }, + preparse: function (string) { + return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) { + return numberMap$9[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$10[match]; + }); + }, + // Punjabi notation for meridiems are quite fuzzy in practice. While there exists + // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. + meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ਰਾਤ') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ਸਵੇਰ') { + return hour; + } else if (meridiem === 'ਦੁਪਹਿਰ') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'ਸ਼ਾਮ') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ਰਾਤ'; + } else if (hour < 10) { + return 'ਸਵੇਰ'; + } else if (hour < 17) { + return 'ਦੁਪਹਿਰ'; + } else if (hour < 20) { + return 'ਸ਼ਾਮ'; + } else { + return 'ਰਾਤ'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Polish [pl] +//! author : Rafal Hirsz : https://github.com/evoL + +var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'); +var monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_'); +function plural$3(n) { + return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1); +} +function translate$7(number, withoutSuffix, key) { + var result = number + ' '; + switch (key) { + case 'm': + return withoutSuffix ? 'minuta' : 'minutę'; + case 'mm': + return result + (plural$3(number) ? 'minuty' : 'minut'); + case 'h': + return withoutSuffix ? 'godzina' : 'godzinę'; + case 'hh': + return result + (plural$3(number) ? 'godziny' : 'godzin'); + case 'MM': + return result + (plural$3(number) ? 'miesiące' : 'miesięcy'); + case 'yy': + return result + (plural$3(number) ? 'lata' : 'lat'); + } +} + +hooks.defineLocale('pl', { + months : function (momentToFormat, format) { + if (format === '') { + // Hack: if format empty we know this is used to generate + // RegExp by moment. Give then back both valid forms of months + // in RegExp ready format. + return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')'; + } else if (/D MMMM/.test(format)) { + return monthsSubjective[momentToFormat.month()]; + } else { + return monthsNominative[momentToFormat.month()]; + } + }, + monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'), + weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'), + weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'), + weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Dziś o] LT', + nextDay: '[Jutro o] LT', + nextWeek: '[W] dddd [o] LT', + lastDay: '[Wczoraj o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[W zeszłą niedzielę o] LT'; + case 3: + return '[W zeszłą środę o] LT'; + case 6: + return '[W zeszłą sobotę o] LT'; + default: + return '[W zeszły] dddd [o] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : '%s temu', + s : 'kilka sekund', + m : translate$7, + mm : translate$7, + h : translate$7, + hh : translate$7, + d : '1 dzień', + dd : '%d dni', + M : 'miesiąc', + MM : translate$7, + y : 'rok', + yy : translate$7 + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Portuguese (Brazil) [pt-br] +//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira + +hooks.defineLocale('pt-br', { + months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), + weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY [às] HH:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm' + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : 'em %s', + past : '%s atrás', + s : 'poucos segundos', + m : 'um minuto', + mm : '%d minutos', + h : 'uma hora', + hh : '%d horas', + d : 'um dia', + dd : '%d dias', + M : 'um mês', + MM : '%d meses', + y : 'um ano', + yy : '%d anos' + }, + ordinalParse: /\d{1,2}º/, + ordinal : '%dº' +}); + +//! moment.js locale configuration +//! locale : Portuguese [pt] +//! author : Jefferson : https://github.com/jalex79 + +hooks.defineLocale('pt', { + months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'), + weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D [de] MMMM [de] YYYY', + LLL : 'D [de] MMMM [de] YYYY HH:mm', + LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm' + }, + calendar : { + sameDay: '[Hoje às] LT', + nextDay: '[Amanhã às] LT', + nextWeek: 'dddd [às] LT', + lastDay: '[Ontem às] LT', + lastWeek: function () { + return (this.day() === 0 || this.day() === 6) ? + '[Último] dddd [às] LT' : // Saturday + Sunday + '[Última] dddd [às] LT'; // Monday - Friday + }, + sameElse: 'L' + }, + relativeTime : { + future : 'em %s', + past : 'há %s', + s : 'segundos', + m : 'um minuto', + mm : '%d minutos', + h : 'uma hora', + hh : '%d horas', + d : 'um dia', + dd : '%d dias', + M : 'um mês', + MM : '%d meses', + y : 'um ano', + yy : '%d anos' + }, + ordinalParse: /\d{1,2}º/, + ordinal : '%dº', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Romanian [ro] +//! author : Vlad Gurdiga : https://github.com/gurdiga +//! author : Valentin Agachi : https://github.com/avaly + +function relativeTimeWithPlural$2(number, withoutSuffix, key) { + var format = { + 'mm': 'minute', + 'hh': 'ore', + 'dd': 'zile', + 'MM': 'luni', + 'yy': 'ani' + }, + separator = ' '; + if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { + separator = ' de '; + } + return number + separator + format[key]; +} + +hooks.defineLocale('ro', { + months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'), + monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'), + weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), + weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY H:mm', + LLLL : 'dddd, D MMMM YYYY H:mm' + }, + calendar : { + sameDay: '[azi la] LT', + nextDay: '[mâine la] LT', + nextWeek: 'dddd [la] LT', + lastDay: '[ieri la] LT', + lastWeek: '[fosta] dddd [la] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'peste %s', + past : '%s în urmă', + s : 'câteva secunde', + m : 'un minut', + mm : relativeTimeWithPlural$2, + h : 'o oră', + hh : relativeTimeWithPlural$2, + d : 'o zi', + dd : relativeTimeWithPlural$2, + M : 'o lună', + MM : relativeTimeWithPlural$2, + y : 'un an', + yy : relativeTimeWithPlural$2 + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Russian [ru] +//! author : Viktorminator : https://github.com/Viktorminator +//! Author : Menelion Elensúle : https://github.com/Oire +//! author : Коренберг Марк : https://github.com/socketpair + +function plural$4(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural$3(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут', + 'hh': 'час_часа_часов', + 'dd': 'день_дня_дней', + 'MM': 'месяц_месяца_месяцев', + 'yy': 'год_года_лет' + }; + if (key === 'm') { + return withoutSuffix ? 'минута' : 'минуту'; + } + else { + return number + ' ' + plural$4(format[key], +number); + } +} +var monthsParse$2 = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i]; + +// http://new.gramota.ru/spravka/rules/139-prop : § 103 +// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 +// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 +hooks.defineLocale('ru', { + months : { + format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'), + standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_') + }, + monthsShort : { + // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ? + format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'), + standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_') + }, + weekdays : { + standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'), + format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'), + isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/ + }, + weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'), + monthsParse : monthsParse$2, + longMonthsParse : monthsParse$2, + shortMonthsParse : monthsParse$2, + + // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки + monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // копия предыдущего + monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, + + // полные названия с падежами + monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i, + + // Выражение, которое соотвествует только сокращённым формам + monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY г.', + LLL : 'D MMMM YYYY г., HH:mm', + LLLL : 'dddd, D MMMM YYYY г., HH:mm' + }, + calendar : { + sameDay: '[Сегодня в] LT', + nextDay: '[Завтра в] LT', + lastDay: '[Вчера в] LT', + nextWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В следующее] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В следующий] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В следующую] dddd [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd [в] LT'; + } else { + return '[В] dddd [в] LT'; + } + } + }, + lastWeek: function (now) { + if (now.week() !== this.week()) { + switch (this.day()) { + case 0: + return '[В прошлое] dddd [в] LT'; + case 1: + case 2: + case 4: + return '[В прошлый] dddd [в] LT'; + case 3: + case 5: + case 6: + return '[В прошлую] dddd [в] LT'; + } + } else { + if (this.day() === 2) { + return '[Во] dddd [в] LT'; + } else { + return '[В] dddd [в] LT'; + } + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'через %s', + past : '%s назад', + s : 'несколько секунд', + m : relativeTimeWithPlural$3, + mm : relativeTimeWithPlural$3, + h : 'час', + hh : relativeTimeWithPlural$3, + d : 'день', + dd : relativeTimeWithPlural$3, + M : 'месяц', + MM : relativeTimeWithPlural$3, + y : 'год', + yy : relativeTimeWithPlural$3 + }, + meridiemParse: /ночи|утра|дня|вечера/i, + isPM : function (input) { + return /^(дня|вечера)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночи'; + } else if (hour < 12) { + return 'утра'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечера'; + } + }, + ordinalParse: /\d{1,2}-(й|го|я)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + return number + '-й'; + case 'D': + return number + '-го'; + case 'w': + case 'W': + return number + '-я'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Northern Sami [se] +//! authors : BÃ¥rd Rolstad Henriksen : https://github.com/karamell + + +hooks.defineLocale('se', { + months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'), + monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'), + weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'), + weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'), + weekdaysMin : 's_v_m_g_d_b_L'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'MMMM D. [b.] YYYY', + LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm', + LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm' + }, + calendar : { + sameDay: '[otne ti] LT', + nextDay: '[ihttin ti] LT', + nextWeek: 'dddd [ti] LT', + lastDay: '[ikte ti] LT', + lastWeek: '[ovddit] dddd [ti] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s geažes', + past : 'maŋit %s', + s : 'moadde sekunddat', + m : 'okta minuhta', + mm : '%d minuhtat', + h : 'okta diimmu', + hh : '%d diimmut', + d : 'okta beaivi', + dd : '%d beaivvit', + M : 'okta mánnu', + MM : '%d mánut', + y : 'okta jahki', + yy : '%d jagit' + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Sinhalese [si] +//! author : Sampath Sitinamaluwa : https://github.com/sampathsris + +/*jshint -W100*/ +hooks.defineLocale('si', { + months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'), + monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'), + weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'), + weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'), + weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'a h:mm', + LTS : 'a h:mm:ss', + L : 'YYYY/MM/DD', + LL : 'YYYY MMMM D', + LLL : 'YYYY MMMM D, a h:mm', + LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss' + }, + calendar : { + sameDay : '[අද] LT[ට]', + nextDay : '[හෙට] LT[ට]', + nextWeek : 'dddd LT[ට]', + lastDay : '[ඊයේ] LT[ට]', + lastWeek : '[පසුගිය] dddd LT[ට]', + sameElse : 'L' + }, + relativeTime : { + future : '%sකින්', + past : '%sකට පෙර', + s : 'තත්පර කිහිපය', + m : 'මිනිත්තුව', + mm : 'මිනිත්තු %d', + h : 'පැය', + hh : 'පැය %d', + d : 'දිනය', + dd : 'දින %d', + M : 'මාසය', + MM : 'මාස %d', + y : 'වසර', + yy : 'වසර %d' + }, + ordinalParse: /\d{1,2} වැනි/, + ordinal : function (number) { + return number + ' වැනි'; + }, + meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./, + isPM : function (input) { + return input === 'ප.ව.' || input === 'පස් වරු'; + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'ප.ව.' : 'පස් වරු'; + } else { + return isLower ? 'පෙ.ව.' : 'පෙර වරු'; + } + } +}); + +//! moment.js locale configuration +//! locale : Slovak [sk] +//! author : Martin Minka : https://github.com/k2s +//! based on work of petrbela : https://github.com/petrbela + +var months$6 = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'); +var monthsShort$4 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_'); +function plural$5(n) { + return (n > 1) && (n < 5); +} +function translate$8(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': // a few seconds / in a few seconds / a few seconds ago + return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami'; + case 'm': // a minute / in a minute / a minute ago + return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou'); + case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'minúty' : 'minút'); + } else { + return result + 'minútami'; + } + break; + case 'h': // an hour / in an hour / an hour ago + return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou'); + case 'hh': // 9 hours / in 9 hours / 9 hours ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'hodiny' : 'hodín'); + } else { + return result + 'hodinami'; + } + break; + case 'd': // a day / in a day / a day ago + return (withoutSuffix || isFuture) ? 'deň' : 'dňom'; + case 'dd': // 9 days / in 9 days / 9 days ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'dni' : 'dní'); + } else { + return result + 'dňami'; + } + break; + case 'M': // a month / in a month / a month ago + return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom'; + case 'MM': // 9 months / in 9 months / 9 months ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'mesiace' : 'mesiacov'); + } else { + return result + 'mesiacmi'; + } + break; + case 'y': // a year / in a year / a year ago + return (withoutSuffix || isFuture) ? 'rok' : 'rokom'; + case 'yy': // 9 years / in 9 years / 9 years ago + if (withoutSuffix || isFuture) { + return result + (plural$5(number) ? 'roky' : 'rokov'); + } else { + return result + 'rokmi'; + } + break; + } +} + +hooks.defineLocale('sk', { + months : months$6, + monthsShort : monthsShort$4, + weekdays : 'nedeľa_pondelok_utorok_streda_Å¡tvrtok_piatok_sobota'.split('_'), + weekdaysShort : 'ne_po_ut_st_Å¡t_pi_so'.split('_'), + weekdaysMin : 'ne_po_ut_st_Å¡t_pi_so'.split('_'), + longDateFormat : { + LT: 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd D. MMMM YYYY H:mm' + }, + calendar : { + sameDay: '[dnes o] LT', + nextDay: '[zajtra o] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[v nedeľu o] LT'; + case 1: + case 2: + return '[v] dddd [o] LT'; + case 3: + return '[v stredu o] LT'; + case 4: + return '[vo Å¡tvrtok o] LT'; + case 5: + return '[v piatok o] LT'; + case 6: + return '[v sobotu o] LT'; + } + }, + lastDay: '[včera o] LT', + lastWeek: function () { + switch (this.day()) { + case 0: + return '[minulú nedeľu o] LT'; + case 1: + case 2: + return '[minulý] dddd [o] LT'; + case 3: + return '[minulú stredu o] LT'; + case 4: + case 5: + return '[minulý] dddd [o] LT'; + case 6: + return '[minulú sobotu o] LT'; + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'za %s', + past : 'pred %s', + s : translate$8, + m : translate$8, + mm : translate$8, + h : translate$8, + hh : translate$8, + d : translate$8, + dd : translate$8, + M : translate$8, + MM : translate$8, + y : translate$8, + yy : translate$8 + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Slovenian [sl] +//! author : Robert SedovÅ¡ek : https://github.com/sedovsek + +function processRelativeTime$4(number, withoutSuffix, key, isFuture) { + var result = number + ' '; + switch (key) { + case 's': + return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami'; + case 'm': + return withoutSuffix ? 'ena minuta' : 'eno minuto'; + case 'mm': + if (number === 1) { + result += withoutSuffix ? 'minuta' : 'minuto'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'minuti' : 'minutama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'minute' : 'minutami'; + } else { + result += withoutSuffix || isFuture ? 'minut' : 'minutami'; + } + return result; + case 'h': + return withoutSuffix ? 'ena ura' : 'eno uro'; + case 'hh': + if (number === 1) { + result += withoutSuffix ? 'ura' : 'uro'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'uri' : 'urama'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'ure' : 'urami'; + } else { + result += withoutSuffix || isFuture ? 'ur' : 'urami'; + } + return result; + case 'd': + return withoutSuffix || isFuture ? 'en dan' : 'enim dnem'; + case 'dd': + if (number === 1) { + result += withoutSuffix || isFuture ? 'dan' : 'dnem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'dni' : 'dnevoma'; + } else { + result += withoutSuffix || isFuture ? 'dni' : 'dnevi'; + } + return result; + case 'M': + return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem'; + case 'MM': + if (number === 1) { + result += withoutSuffix || isFuture ? 'mesec' : 'mesecem'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'meseca' : 'mesecema'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'mesece' : 'meseci'; + } else { + result += withoutSuffix || isFuture ? 'mesecev' : 'meseci'; + } + return result; + case 'y': + return withoutSuffix || isFuture ? 'eno leto' : 'enim letom'; + case 'yy': + if (number === 1) { + result += withoutSuffix || isFuture ? 'leto' : 'letom'; + } else if (number === 2) { + result += withoutSuffix || isFuture ? 'leti' : 'letoma'; + } else if (number < 5) { + result += withoutSuffix || isFuture ? 'leta' : 'leti'; + } else { + result += withoutSuffix || isFuture ? 'let' : 'leti'; + } + return result; + } +} + +hooks.defineLocale('sl', { + months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'), + monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'), + weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'), + weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM YYYY', + LLL : 'D. MMMM YYYY H:mm', + LLLL : 'dddd, D. MMMM YYYY H:mm' + }, + calendar : { + sameDay : '[danes ob] LT', + nextDay : '[jutri ob] LT', + + nextWeek : function () { + switch (this.day()) { + case 0: + return '[v] [nedeljo] [ob] LT'; + case 3: + return '[v] [sredo] [ob] LT'; + case 6: + return '[v] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[v] dddd [ob] LT'; + } + }, + lastDay : '[včeraj ob] LT', + lastWeek : function () { + switch (this.day()) { + case 0: + return '[prejÅ¡njo] [nedeljo] [ob] LT'; + case 3: + return '[prejÅ¡njo] [sredo] [ob] LT'; + case 6: + return '[prejÅ¡njo] [soboto] [ob] LT'; + case 1: + case 2: + case 4: + case 5: + return '[prejÅ¡nji] dddd [ob] LT'; + } + }, + sameElse : 'L' + }, + relativeTime : { + future : 'čez %s', + past : 'pred %s', + s : processRelativeTime$4, + m : processRelativeTime$4, + mm : processRelativeTime$4, + h : processRelativeTime$4, + hh : processRelativeTime$4, + d : processRelativeTime$4, + dd : processRelativeTime$4, + M : processRelativeTime$4, + MM : processRelativeTime$4, + y : processRelativeTime$4, + yy : processRelativeTime$4 + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Albanian [sq] +//! author : Flakërim Ismani : https://github.com/flakerimi +//! author : Menelion Elensúle : https://github.com/Oire +//! author : Oerd Cukalla : https://github.com/oerd + +hooks.defineLocale('sq', { + months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'), + monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), + weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'), + weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), + weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'), + weekdaysParseExact : true, + meridiemParse: /PD|MD/, + isPM: function (input) { + return input.charAt(0) === 'M'; + }, + meridiem : function (hours, minutes, isLower) { + return hours < 12 ? 'PD' : 'MD'; + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[Sot në] LT', + nextDay : '[Nesër në] LT', + nextWeek : 'dddd [në] LT', + lastDay : '[Dje në] LT', + lastWeek : 'dddd [e kaluar në] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'në %s', + past : '%s më parë', + s : 'disa sekonda', + m : 'një minutë', + mm : '%d minuta', + h : 'një orë', + hh : '%d orë', + d : 'një ditë', + dd : '%d ditë', + M : 'një muaj', + MM : '%d muaj', + y : 'një vit', + yy : '%d vite' + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Serbian Cyrillic [sr-cyrl] +//! author : Milan Janačković : https://github.com/milan-j + +var translator$1 = { + words: { //Different grammatical cases + m: ['један минут', 'једне минуте'], + mm: ['минут', 'минуте', 'минута'], + h: ['један сат', 'једног сата'], + hh: ['сат', 'сата', 'сати'], + dd: ['дан', 'дана', 'дана'], + MM: ['месец', 'месеца', 'месеци'], + yy: ['година', 'године', 'година'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$1.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator$1.correctGrammaticalCase(number, wordKey); + } + } +}; + +hooks.defineLocale('sr-cyrl', { + months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'), + monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'), + monthsParseExact: true, + weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'), + weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'), + weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[данас у] LT', + nextDay: '[сутра у] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[у] [недељу] [у] LT'; + case 3: + return '[у] [среду] [у] LT'; + case 6: + return '[у] [суботу] [у] LT'; + case 1: + case 2: + case 4: + case 5: + return '[у] dddd [у] LT'; + } + }, + lastDay : '[јуче у] LT', + lastWeek : function () { + var lastWeekDays = [ + '[прошле] [недеље] [у] LT', + '[прошлог] [понедељка] [у] LT', + '[прошлог] [уторка] [у] LT', + '[прошле] [среде] [у] LT', + '[прошлог] [четвртка] [у] LT', + '[прошлог] [петка] [у] LT', + '[прошле] [суботе] [у] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'за %s', + past : 'пре %s', + s : 'неколико секунди', + m : translator$1.translate, + mm : translator$1.translate, + h : translator$1.translate, + hh : translator$1.translate, + d : 'дан', + dd : translator$1.translate, + M : 'месец', + MM : translator$1.translate, + y : 'годину', + yy : translator$1.translate + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Serbian [sr] +//! author : Milan Janačković : https://github.com/milan-j + +var translator$2 = { + words: { //Different grammatical cases + m: ['jedan minut', 'jedne minute'], + mm: ['minut', 'minute', 'minuta'], + h: ['jedan sat', 'jednog sata'], + hh: ['sat', 'sata', 'sati'], + dd: ['dan', 'dana', 'dana'], + MM: ['mesec', 'meseca', 'meseci'], + yy: ['godina', 'godine', 'godina'] + }, + correctGrammaticalCase: function (number, wordKey) { + return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]); + }, + translate: function (number, withoutSuffix, key) { + var wordKey = translator$2.words[key]; + if (key.length === 1) { + return withoutSuffix ? wordKey[0] : wordKey[1]; + } else { + return number + ' ' + translator$2.correctGrammaticalCase(number, wordKey); + } + } +}; + +hooks.defineLocale('sr', { + months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'), + monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'), + monthsParseExact: true, + weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'), + weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'), + weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'), + weekdaysParseExact : true, + longDateFormat: { + LT: 'H:mm', + LTS : 'H:mm:ss', + L: 'DD.MM.YYYY', + LL: 'D. MMMM YYYY', + LLL: 'D. MMMM YYYY H:mm', + LLLL: 'dddd, D. MMMM YYYY H:mm' + }, + calendar: { + sameDay: '[danas u] LT', + nextDay: '[sutra u] LT', + nextWeek: function () { + switch (this.day()) { + case 0: + return '[u] [nedelju] [u] LT'; + case 3: + return '[u] [sredu] [u] LT'; + case 6: + return '[u] [subotu] [u] LT'; + case 1: + case 2: + case 4: + case 5: + return '[u] dddd [u] LT'; + } + }, + lastDay : '[juče u] LT', + lastWeek : function () { + var lastWeekDays = [ + '[proÅ¡le] [nedelje] [u] LT', + '[proÅ¡log] [ponedeljka] [u] LT', + '[proÅ¡log] [utorka] [u] LT', + '[proÅ¡le] [srede] [u] LT', + '[proÅ¡log] [četvrtka] [u] LT', + '[proÅ¡log] [petka] [u] LT', + '[proÅ¡le] [subote] [u] LT' + ]; + return lastWeekDays[this.day()]; + }, + sameElse : 'L' + }, + relativeTime : { + future : 'za %s', + past : 'pre %s', + s : 'nekoliko sekundi', + m : translator$2.translate, + mm : translator$2.translate, + h : translator$2.translate, + hh : translator$2.translate, + d : 'dan', + dd : translator$2.translate, + M : 'mesec', + MM : translator$2.translate, + y : 'godinu', + yy : translator$2.translate + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : siSwati [ss] +//! author : Nicolai Davies : https://github.com/nicolaidavies + + +hooks.defineLocale('ss', { + months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'), + monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), + weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'), + weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), + weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Namuhla nga] LT', + nextDay : '[Kusasa nga] LT', + nextWeek : 'dddd [nga] LT', + lastDay : '[Itolo nga] LT', + lastWeek : 'dddd [leliphelile] [nga] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'nga %s', + past : 'wenteka nga %s', + s : 'emizuzwana lomcane', + m : 'umzuzu', + mm : '%d emizuzu', + h : 'lihora', + hh : '%d emahora', + d : 'lilanga', + dd : '%d emalanga', + M : 'inyanga', + MM : '%d tinyanga', + y : 'umnyaka', + yy : '%d iminyaka' + }, + meridiemParse: /ekuseni|emini|entsambama|ebusuku/, + meridiem : function (hours, minutes, isLower) { + if (hours < 11) { + return 'ekuseni'; + } else if (hours < 15) { + return 'emini'; + } else if (hours < 19) { + return 'entsambama'; + } else { + return 'ebusuku'; + } + }, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'ekuseni') { + return hour; + } else if (meridiem === 'emini') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') { + if (hour === 0) { + return 0; + } + return hour + 12; + } + }, + ordinalParse: /\d{1,2}/, + ordinal : '%d', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Swedish [sv] +//! author : Jens Alm : https://github.com/ulmus + +hooks.defineLocale('sv', { + months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'), + monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), + weekdays : 'söndag_mÃ¥ndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), + weekdaysShort : 'sön_mÃ¥n_tis_ons_tor_fre_lör'.split('_'), + weekdaysMin : 'sö_mÃ¥_ti_on_to_fr_lö'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'YYYY-MM-DD', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY [kl.] HH:mm', + LLLL : 'dddd D MMMM YYYY [kl.] HH:mm', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd D MMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Idag] LT', + nextDay: '[Imorgon] LT', + lastDay: '[IgÃ¥r] LT', + nextWeek: '[PÃ¥] dddd LT', + lastWeek: '[I] dddd[s] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'om %s', + past : 'för %s sedan', + s : 'nÃ¥gra sekunder', + m : 'en minut', + mm : '%d minuter', + h : 'en timme', + hh : '%d timmar', + d : 'en dag', + dd : '%d dagar', + M : 'en mÃ¥nad', + MM : '%d mÃ¥nader', + y : 'ett Ã¥r', + yy : '%d Ã¥r' + }, + ordinalParse: /\d{1,2}(e|a)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'e' : + (b === 1) ? 'a' : + (b === 2) ? 'a' : + (b === 3) ? 'e' : 'e'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Swahili [sw] +//! author : Fahad Kassim : https://github.com/fadsel + +hooks.defineLocale('sw', { + months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'), + monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), + weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'), + weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), + weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[leo saa] LT', + nextDay : '[kesho saa] LT', + nextWeek : '[wiki ijayo] dddd [saat] LT', + lastDay : '[jana] LT', + lastWeek : '[wiki iliyopita] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s baadaye', + past : 'tokea %s', + s : 'hivi punde', + m : 'dakika moja', + mm : 'dakika %d', + h : 'saa limoja', + hh : 'masaa %d', + d : 'siku moja', + dd : 'masiku %d', + M : 'mwezi mmoja', + MM : 'miezi %d', + y : 'mwaka mmoja', + yy : 'miaka %d' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Tamil [ta] +//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404 + +var symbolMap$11 = { + '1': '௧', + '2': '௨', + '3': '௩', + '4': '௪', + '5': '௫', + '6': '௬', + '7': '௭', + '8': '௮', + '9': '௯', + '0': '௦' +}; +var numberMap$10 = { + '௧': '1', + '௨': '2', + '௩': '3', + '௪': '4', + '௫': '5', + '௬': '6', + '௭': '7', + '௮': '8', + '௯': '9', + '௦': '0' +}; + +hooks.defineLocale('ta', { + months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), + monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), + weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'), + weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'), + weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, HH:mm', + LLLL : 'dddd, D MMMM YYYY, HH:mm' + }, + calendar : { + sameDay : '[இன்று] LT', + nextDay : '[நாளை] LT', + nextWeek : 'dddd, LT', + lastDay : '[நேற்று] LT', + lastWeek : '[கடந்த வாரம்] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s இல்', + past : '%s முன்', + s : 'ஒரு சில விநாடிகள்', + m : 'ஒரு நிமிடம்', + mm : '%d நிமிடங்கள்', + h : 'ஒரு மணி நேரம்', + hh : '%d மணி நேரம்', + d : 'ஒரு நாள்', + dd : '%d நாட்கள்', + M : 'ஒரு மாதம்', + MM : '%d மாதங்கள்', + y : 'ஒரு வருடம்', + yy : '%d ஆண்டுகள்' + }, + ordinalParse: /\d{1,2}வது/, + ordinal : function (number) { + return number + 'வது'; + }, + preparse: function (string) { + return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) { + return numberMap$10[match]; + }); + }, + postformat: function (string) { + return string.replace(/\d/g, function (match) { + return symbolMap$11[match]; + }); + }, + // refer http://ta.wikipedia.org/s/1er1 + meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/, + meridiem : function (hour, minute, isLower) { + if (hour < 2) { + return ' யாமம்'; + } else if (hour < 6) { + return ' வைகறை'; // வைகறை + } else if (hour < 10) { + return ' காலை'; // காலை + } else if (hour < 14) { + return ' நண்பகல்'; // நண்பகல் + } else if (hour < 18) { + return ' எற்பாடு'; // எற்பாடு + } else if (hour < 22) { + return ' மாலை'; // மாலை + } else { + return ' யாமம்'; + } + }, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'யாமம்') { + return hour < 2 ? hour : hour + 12; + } else if (meridiem === 'வைகறை' || meridiem === 'காலை') { + return hour; + } else if (meridiem === 'நண்பகல்') { + return hour >= 10 ? hour : hour + 12; + } else { + return hour + 12; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Telugu [te] +//! author : Krishna Chaitanya Thota : https://github.com/kcthota + +hooks.defineLocale('te', { + months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'), + monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'), + monthsParseExact : true, + weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'), + weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'), + weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_à°¶'.split('_'), + longDateFormat : { + LT : 'A h:mm', + LTS : 'A h:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY, A h:mm', + LLLL : 'dddd, D MMMM YYYY, A h:mm' + }, + calendar : { + sameDay : '[నేడు] LT', + nextDay : '[రేపు] LT', + nextWeek : 'dddd, LT', + lastDay : '[నిన్న] LT', + lastWeek : '[గత] dddd, LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s లో', + past : '%s క్రితం', + s : 'కొన్ని క్షణాలు', + m : 'ఒక నిమిషం', + mm : '%d నిమిషాలు', + h : 'ఒక గంట', + hh : '%d గంటలు', + d : 'ఒక రోజు', + dd : '%d రోజులు', + M : 'ఒక నెల', + MM : '%d నెలలు', + y : 'ఒక సంవత్సరం', + yy : '%d సంవత్సరాలు' + }, + ordinalParse : /\d{1,2}à°µ/, + ordinal : '%dà°µ', + meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === 'రాత్రి') { + return hour < 4 ? hour : hour + 12; + } else if (meridiem === 'ఉదయం') { + return hour; + } else if (meridiem === 'మధ్యాహ్నం') { + return hour >= 10 ? hour : hour + 12; + } else if (meridiem === 'సాయంత్రం') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'రాత్రి'; + } else if (hour < 10) { + return 'ఉదయం'; + } else if (hour < 17) { + return 'మధ్యాహ్నం'; + } else if (hour < 20) { + return 'సాయంత్రం'; + } else { + return 'రాత్రి'; + } + }, + week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Tetun Dili (East Timor) [tet] +//! author : Joshua Brooks : https://github.com/joshbrooks +//! author : Onorio De J. Afonso : https://github.com/marobo + +hooks.defineLocale('tet', { + months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'), + monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'), + weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'), + weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'), + weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Ohin iha] LT', + nextDay: '[Aban iha] LT', + nextWeek: 'dddd [iha] LT', + lastDay: '[Horiseik iha] LT', + lastWeek: 'dddd [semana kotuk] [iha] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'iha %s', + past : '%s liuba', + s : 'minutu balun', + m : 'minutu ida', + mm : 'minutus %d', + h : 'horas ida', + hh : 'horas %d', + d : 'loron ida', + dd : 'loron %d', + M : 'fulan ida', + MM : 'fulan %d', + y : 'tinan ida', + yy : 'tinan %d' + }, + ordinalParse: /\d{1,2}(st|nd|rd|th)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Thai [th] +//! author : Kridsada Thanabulpong : https://github.com/sirn + +hooks.defineLocale('th', { + months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'), + monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'), + monthsParseExact: true, + weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), + weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference + weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'H:mm', + LTS : 'H:mm:ss', + L : 'YYYY/MM/DD', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY เวลา H:mm', + LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm' + }, + meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/, + isPM: function (input) { + return input === 'หลังเที่ยง'; + }, + meridiem : function (hour, minute, isLower) { + if (hour < 12) { + return 'ก่อนเที่ยง'; + } else { + return 'หลังเที่ยง'; + } + }, + calendar : { + sameDay : '[วันนี้ เวลา] LT', + nextDay : '[พรุ่งนี้ เวลา] LT', + nextWeek : 'dddd[หน้า เวลา] LT', + lastDay : '[เมื่อวานนี้ เวลา] LT', + lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'อีก %s', + past : '%sที่แล้ว', + s : 'ไม่กี่วินาที', + m : '1 นาที', + mm : '%d นาที', + h : '1 ชั่วโมง', + hh : '%d ชั่วโมง', + d : '1 วัน', + dd : '%d วัน', + M : '1 เดือน', + MM : '%d เดือน', + y : '1 ปี', + yy : '%d ปี' + } +}); + +//! moment.js locale configuration +//! locale : Tagalog (Philippines) [tl-ph] +//! author : Dan Hagman : https://github.com/hagmandan + +hooks.defineLocale('tl-ph', { + months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'), + monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), + weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'), + weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), + weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'MM/D/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY HH:mm', + LLLL : 'dddd, MMMM DD, YYYY HH:mm' + }, + calendar : { + sameDay: 'LT [ngayong araw]', + nextDay: '[Bukas ng] LT', + nextWeek: 'LT [sa susunod na] dddd', + lastDay: 'LT [kahapon]', + lastWeek: 'LT [noong nakaraang] dddd', + sameElse: 'L' + }, + relativeTime : { + future : 'sa loob ng %s', + past : '%s ang nakalipas', + s : 'ilang segundo', + m : 'isang minuto', + mm : '%d minuto', + h : 'isang oras', + hh : '%d oras', + d : 'isang araw', + dd : '%d araw', + M : 'isang buwan', + MM : '%d buwan', + y : 'isang taon', + yy : '%d taon' + }, + ordinalParse: /\d{1,2}/, + ordinal : function (number) { + return number; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Klingon [tlh] +//! author : Dominika Kruk : https://github.com/amaranthrose + +var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_'); + +function translateFuture(output) { + var time = output; + time = (output.indexOf('jaj') !== -1) ? + time.slice(0, -3) + 'leS' : + (output.indexOf('jar') !== -1) ? + time.slice(0, -3) + 'waQ' : + (output.indexOf('DIS') !== -1) ? + time.slice(0, -3) + 'nem' : + time + ' pIq'; + return time; +} + +function translatePast(output) { + var time = output; + time = (output.indexOf('jaj') !== -1) ? + time.slice(0, -3) + 'Hu’' : + (output.indexOf('jar') !== -1) ? + time.slice(0, -3) + 'wen' : + (output.indexOf('DIS') !== -1) ? + time.slice(0, -3) + 'ben' : + time + ' ret'; + return time; +} + +function translate$9(number, withoutSuffix, string, isFuture) { + var numberNoun = numberAsNoun(number); + switch (string) { + case 'mm': + return numberNoun + ' tup'; + case 'hh': + return numberNoun + ' rep'; + case 'dd': + return numberNoun + ' jaj'; + case 'MM': + return numberNoun + ' jar'; + case 'yy': + return numberNoun + ' DIS'; + } +} + +function numberAsNoun(number) { + var hundred = Math.floor((number % 1000) / 100), + ten = Math.floor((number % 100) / 10), + one = number % 10, + word = ''; + if (hundred > 0) { + word += numbersNouns[hundred] + 'vatlh'; + } + if (ten > 0) { + word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH'; + } + if (one > 0) { + word += ((word !== '') ? ' ' : '') + numbersNouns[one]; + } + return (word === '') ? 'pagh' : word; +} + +hooks.defineLocale('tlh', { + months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'), + monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'), + monthsParseExact : true, + weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[DaHjaj] LT', + nextDay: '[wa’leS] LT', + nextWeek: 'LLL', + lastDay: '[wa’Hu’] LT', + lastWeek: 'LLL', + sameElse: 'L' + }, + relativeTime : { + future : translateFuture, + past : translatePast, + s : 'puS lup', + m : 'wa’ tup', + mm : translate$9, + h : 'wa’ rep', + hh : translate$9, + d : 'wa’ jaj', + dd : translate$9, + M : 'wa’ jar', + MM : translate$9, + y : 'wa’ DIS', + yy : translate$9 + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Turkish [tr] +//! authors : Erhan Gundogan : https://github.com/erhangundogan, +//! Burak Yiğit Kaya: https://github.com/BYK + +var suffixes$3 = { + 1: '\'inci', + 5: '\'inci', + 8: '\'inci', + 70: '\'inci', + 80: '\'inci', + 2: '\'nci', + 7: '\'nci', + 20: '\'nci', + 50: '\'nci', + 3: '\'üncü', + 4: '\'üncü', + 100: '\'üncü', + 6: '\'ncı', + 9: '\'uncu', + 10: '\'uncu', + 30: '\'uncu', + 60: '\'ıncı', + 90: '\'ıncı' +}; + +hooks.defineLocale('tr', { + months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'), + monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'), + weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'), + weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), + weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[bugün saat] LT', + nextDay : '[yarın saat] LT', + nextWeek : '[haftaya] dddd [saat] LT', + lastDay : '[dün] LT', + lastWeek : '[geçen hafta] dddd [saat] LT', + sameElse : 'L' + }, + relativeTime : { + future : '%s sonra', + past : '%s önce', + s : 'birkaç saniye', + m : 'bir dakika', + mm : '%d dakika', + h : 'bir saat', + hh : '%d saat', + d : 'bir gün', + dd : '%d gün', + M : 'bir ay', + MM : '%d ay', + y : 'bir yıl', + yy : '%d yıl' + }, + ordinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/, + ordinal : function (number) { + if (number === 0) { // special case for zero + return number + '\'ıncı'; + } + var a = number % 10, + b = number % 100 - a, + c = number >= 100 ? 100 : null; + return number + (suffixes$3[a] || suffixes$3[b] || suffixes$3[c]); + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Talossan [tzl] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v +//! author : Iustì Canun + +// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. +// This is currently too difficult (maybe even impossible) to add. +hooks.defineLocale('tzl', { + months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'), + monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), + weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), + weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), + weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), + longDateFormat : { + LT : 'HH.mm', + LTS : 'HH.mm.ss', + L : 'DD.MM.YYYY', + LL : 'D. MMMM [dallas] YYYY', + LLL : 'D. MMMM [dallas] YYYY HH.mm', + LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm' + }, + meridiemParse: /d\'o|d\'a/i, + isPM : function (input) { + return 'd\'o' === input.toLowerCase(); + }, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'd\'o' : 'D\'O'; + } else { + return isLower ? 'd\'a' : 'D\'A'; + } + }, + calendar : { + sameDay : '[oxhi à] LT', + nextDay : '[demà à] LT', + nextWeek : 'dddd [à] LT', + lastDay : '[ieiri à] LT', + lastWeek : '[sür el] dddd [lasteu à] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'osprei %s', + past : 'ja%s', + s : processRelativeTime$5, + m : processRelativeTime$5, + mm : processRelativeTime$5, + h : processRelativeTime$5, + hh : processRelativeTime$5, + d : processRelativeTime$5, + dd : processRelativeTime$5, + M : processRelativeTime$5, + MM : processRelativeTime$5, + y : processRelativeTime$5, + yy : processRelativeTime$5 + }, + ordinalParse: /\d{1,2}\./, + ordinal : '%d.', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +function processRelativeTime$5(number, withoutSuffix, key, isFuture) { + var format = { + 's': ['viensas secunds', '\'iensas secunds'], + 'm': ['\'n míut', '\'iens míut'], + 'mm': [number + ' míuts', '' + number + ' míuts'], + 'h': ['\'n þora', '\'iensa þora'], + 'hh': [number + ' þoras', '' + number + ' þoras'], + 'd': ['\'n ziua', '\'iensa ziua'], + 'dd': [number + ' ziuas', '' + number + ' ziuas'], + 'M': ['\'n mes', '\'iens mes'], + 'MM': [number + ' mesen', '' + number + ' mesen'], + 'y': ['\'n ar', '\'iens ar'], + 'yy': [number + ' ars', '' + number + ' ars'] + }; + return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]); +} + +//! moment.js locale configuration +//! locale : Central Atlas Tamazight Latin [tzm-latn] +//! author : Abdel Said : https://github.com/abdelsaid + +hooks.defineLocale('tzm-latn', { + months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), + monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), + weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[asdkh g] LT', + nextDay: '[aska g] LT', + nextWeek: 'dddd [g] LT', + lastDay: '[assant g] LT', + lastWeek: 'dddd [g] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'dadkh s yan %s', + past : 'yan %s', + s : 'imik', + m : 'minuḍ', + mm : '%d minuḍ', + h : 'saɛa', + hh : '%d tassaɛin', + d : 'ass', + dd : '%d ossan', + M : 'ayowr', + MM : '%d iyyirn', + y : 'asgas', + yy : '%d isgasn' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Central Atlas Tamazight [tzm] +//! author : Abdel Said : https://github.com/abdelsaid + +hooks.defineLocale('tzm', { + months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), + monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), + weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS: 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd D MMMM YYYY HH:mm' + }, + calendar : { + sameDay: '[ⴰⵙⴷⵅ â´´] LT', + nextDay: '[ⴰⵙⴽⴰ â´´] LT', + nextWeek: 'dddd [â´´] LT', + lastDay: '[ⴰⵚⴰⵏⵜ â´´] LT', + lastWeek: 'dddd [â´´] LT', + sameElse: 'L' + }, + relativeTime : { + future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s', + past : 'ⵢⴰⵏ %s', + s : 'ⵉⵎⵉⴽ', + m : 'ⵎⵉⵏⵓⴺ', + mm : '%d ⵎⵉⵏⵓⴺ', + h : 'ⵙⴰⵄⴰ', + hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ', + d : 'ⴰⵙⵙ', + dd : '%d oⵙⵙⴰⵏ', + M : 'â´°âµ¢oⵓⵔ', + MM : '%d ⵉⵢⵢⵉⵔⵏ', + y : 'ⴰⵙⴳⴰⵙ', + yy : '%d ⵉⵙⴳⴰⵙⵏ' + }, + week : { + dow : 6, // Saturday is the first day of the week. + doy : 12 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Ukrainian [uk] +//! author : zemlanin : https://github.com/zemlanin +//! Author : Menelion Elensúle : https://github.com/Oire + +function plural$6(word, num) { + var forms = word.split('_'); + return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); +} +function relativeTimeWithPlural$4(number, withoutSuffix, key) { + var format = { + 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин', + 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин', + 'dd': 'день_дні_днів', + 'MM': 'місяць_місяці_місяців', + 'yy': 'рік_роки_років' + }; + if (key === 'm') { + return withoutSuffix ? 'хвилина' : 'хвилину'; + } + else if (key === 'h') { + return withoutSuffix ? 'година' : 'годину'; + } + else { + return number + ' ' + plural$6(format[key], +number); + } +} +function weekdaysCaseReplace(m, format) { + var weekdays = { + 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), + 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'), + 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_') + }, + nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? + 'accusative' : + ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ? + 'genitive' : + 'nominative'); + return weekdays[nounCase][m.day()]; +} +function processHoursFunction(str) { + return function () { + return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; + }; +} + +hooks.defineLocale('uk', { + months : { + 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'), + 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_') + }, + monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'), + weekdays : weekdaysCaseReplace, + weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD.MM.YYYY', + LL : 'D MMMM YYYY р.', + LLL : 'D MMMM YYYY р., HH:mm', + LLLL : 'dddd, D MMMM YYYY р., HH:mm' + }, + calendar : { + sameDay: processHoursFunction('[Сьогодні '), + nextDay: processHoursFunction('[Завтра '), + lastDay: processHoursFunction('[Вчора '), + nextWeek: processHoursFunction('[У] dddd ['), + lastWeek: function () { + switch (this.day()) { + case 0: + case 3: + case 5: + case 6: + return processHoursFunction('[Минулої] dddd [').call(this); + case 1: + case 2: + case 4: + return processHoursFunction('[Минулого] dddd [').call(this); + } + }, + sameElse: 'L' + }, + relativeTime : { + future : 'за %s', + past : '%s тому', + s : 'декілька секунд', + m : relativeTimeWithPlural$4, + mm : relativeTimeWithPlural$4, + h : 'годину', + hh : relativeTimeWithPlural$4, + d : 'день', + dd : relativeTimeWithPlural$4, + M : 'місяць', + MM : relativeTimeWithPlural$4, + y : 'рік', + yy : relativeTimeWithPlural$4 + }, + // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason + meridiemParse: /ночі|ранку|дня|вечора/, + isPM: function (input) { + return /^(дня|вечора)$/.test(input); + }, + meridiem : function (hour, minute, isLower) { + if (hour < 4) { + return 'ночі'; + } else if (hour < 12) { + return 'ранку'; + } else if (hour < 17) { + return 'дня'; + } else { + return 'вечора'; + } + }, + ordinalParse: /\d{1,2}-(й|го)/, + ordinal: function (number, period) { + switch (period) { + case 'M': + case 'd': + case 'DDD': + case 'w': + case 'W': + return number + '-й'; + case 'D': + return number + '-го'; + default: + return number; + } + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 1st is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Uzbek [uz] +//! author : Sardor Muminov : https://github.com/muminoff + +hooks.defineLocale('uz', { + months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'), + monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), + weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'), + weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'), + weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'), + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'D MMMM YYYY, dddd HH:mm' + }, + calendar : { + sameDay : '[Бугун соат] LT [да]', + nextDay : '[Эртага] LT [да]', + nextWeek : 'dddd [куни соат] LT [да]', + lastDay : '[Кеча соат] LT [да]', + lastWeek : '[Утган] dddd [куни соат] LT [да]', + sameElse : 'L' + }, + relativeTime : { + future : 'Якин %s ичида', + past : 'Бир неча %s олдин', + s : 'фурсат', + m : 'бир дакика', + mm : '%d дакика', + h : 'бир соат', + hh : '%d соат', + d : 'бир кун', + dd : '%d кун', + M : 'бир ой', + MM : '%d ой', + y : 'бир йил', + yy : '%d йил' + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 7 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Vietnamese [vi] +//! author : Bang Nguyen : https://github.com/bangnk + +hooks.defineLocale('vi', { + months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'), + monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'), + monthsParseExact : true, + weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tÆ°_thứ năm_thứ sáu_thứ bảy'.split('_'), + weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + weekdaysParseExact : true, + meridiemParse: /sa|ch/i, + isPM : function (input) { + return /^ch$/i.test(input); + }, + meridiem : function (hours, minutes, isLower) { + if (hours < 12) { + return isLower ? 'sa' : 'SA'; + } else { + return isLower ? 'ch' : 'CH'; + } + }, + longDateFormat : { + LT : 'HH:mm', + LTS : 'HH:mm:ss', + L : 'DD/MM/YYYY', + LL : 'D MMMM [năm] YYYY', + LLL : 'D MMMM [năm] YYYY HH:mm', + LLLL : 'dddd, D MMMM [năm] YYYY HH:mm', + l : 'DD/M/YYYY', + ll : 'D MMM YYYY', + lll : 'D MMM YYYY HH:mm', + llll : 'ddd, D MMM YYYY HH:mm' + }, + calendar : { + sameDay: '[Hôm nay lúc] LT', + nextDay: '[Ngày mai lúc] LT', + nextWeek: 'dddd [tuần tới lúc] LT', + lastDay: '[Hôm qua lúc] LT', + lastWeek: 'dddd [tuần rồi lúc] LT', + sameElse: 'L' + }, + relativeTime : { + future : '%s tới', + past : '%s trước', + s : 'vài giây', + m : 'một phút', + mm : '%d phút', + h : 'một giờ', + hh : '%d giờ', + d : 'một ngày', + dd : '%d ngày', + M : 'một tháng', + MM : '%d tháng', + y : 'một năm', + yy : '%d năm' + }, + ordinalParse: /\d{1,2}/, + ordinal : function (number) { + return number; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Pseudo [x-pseudo] +//! author : Andrew Hood : https://github.com/andrewhood125 + +hooks.defineLocale('x-pseudo', { + months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'), + monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'), + monthsParseExact : true, + weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'), + weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'), + weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), + weekdaysParseExact : true, + longDateFormat : { + LT : 'HH:mm', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY HH:mm', + LLLL : 'dddd, D MMMM YYYY HH:mm' + }, + calendar : { + sameDay : '[T~ódá~ý át] LT', + nextDay : '[T~ómó~rró~w át] LT', + nextWeek : 'dddd [át] LT', + lastDay : '[Ý~ést~érdá~ý át] LT', + lastWeek : '[L~ást] dddd [át] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'í~ñ %s', + past : '%s á~gó', + s : 'á ~féw ~sécó~ñds', + m : 'á ~míñ~úté', + mm : '%d m~íñú~tés', + h : 'á~ñ hó~úr', + hh : '%d h~óúrs', + d : 'á ~dáý', + dd : '%d d~áýs', + M : 'á ~móñ~th', + MM : '%d m~óñt~hs', + y : 'á ~ýéár', + yy : '%d ý~éárs' + }, + ordinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (~~(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + }, + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Yoruba Nigeria [yo] +//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe + +hooks.defineLocale('yo', { + months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'), + monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'), + weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'), + weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'), + weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'), + longDateFormat : { + LT : 'h:mm A', + LTS : 'h:mm:ss A', + L : 'DD/MM/YYYY', + LL : 'D MMMM YYYY', + LLL : 'D MMMM YYYY h:mm A', + LLLL : 'dddd, D MMMM YYYY h:mm A' + }, + calendar : { + sameDay : '[Ònì ni] LT', + nextDay : '[Ọ̀la ni] LT', + nextWeek : 'dddd [Ọsẹ̀ tón\'bọ] [ni] LT', + lastDay : '[Àna ni] LT', + lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT', + sameElse : 'L' + }, + relativeTime : { + future : 'ní %s', + past : '%s kọjá', + s : 'ìsẹjú aayá die', + m : 'ìsẹjú kan', + mm : 'ìsẹjú %d', + h : 'wákati kan', + hh : 'wákati %d', + d : 'ọjọ́ kan', + dd : 'ọjọ́ %d', + M : 'osù kan', + MM : 'osù %d', + y : 'ọdún kan', + yy : 'ọdún %d' + }, + ordinalParse : /ọjọ́\s\d{1,2}/, + ordinal : 'ọjọ́ %d', + week : { + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Chinese (China) [zh-cn] +//! author : suupic : https://github.com/suupic +//! author : Zeno Zeng : https://github.com/zenozeng + +hooks.defineLocale('zh-cn', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'Ah点mm分', + LTS : 'Ah点m分s秒', + L : 'YYYY-MM-DD', + LL : 'YYYYå¹´MMMD日', + LLL : 'YYYYå¹´MMMD日Ah点mm分', + LLLL : 'YYYYå¹´MMMD日ddddAh点mm分', + l : 'YYYY-MM-DD', + ll : 'YYYYå¹´MMMD日', + lll : 'YYYYå¹´MMMD日Ah点mm分', + llll : 'YYYYå¹´MMMD日ddddAh点mm分' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour: function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || + meridiem === '上午') { + return hour; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } else { + // '中午' + return hour >= 11 ? hour : hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : function () { + return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT'; + }, + nextDay : function () { + return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT'; + }, + lastDay : function () { + return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT'; + }, + nextWeek : function () { + var startOfWeek, prefix; + startOfWeek = hooks().startOf('week'); + prefix = this.diff(startOfWeek, 'days') >= 7 ? '[下]' : '[本]'; + return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm'; + }, + lastWeek : function () { + var startOfWeek, prefix; + startOfWeek = hooks().startOf('week'); + prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]'; + return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm'; + }, + sameElse : 'LL' + }, + ordinalParse: /\d{1,2}(日|月|周)/, + ordinal : function (number, period) { + switch (period) { + case 'd': + case 'D': + case 'DDD': + return number + '日'; + case 'M': + return number + '月'; + case 'w': + case 'W': + return number + '周'; + default: + return number; + } + }, + relativeTime : { + future : '%s内', + past : '%s前', + s : '几秒', + m : '1 分钟', + mm : '%d 分钟', + h : '1 小时', + hh : '%d 小时', + d : '1 天', + dd : '%d 天', + M : '1 个月', + MM : '%d 个月', + y : '1 å¹´', + yy : '%d å¹´' + }, + week : { + // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 + dow : 1, // Monday is the first day of the week. + doy : 4 // The week that contains Jan 4th is the first week of the year. + } +}); + +//! moment.js locale configuration +//! locale : Chinese (Hong Kong) [zh-hk] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris +//! author : Konstantin : https://github.com/skfd + +hooks.defineLocale('zh-hk', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'Ah點mm分', + LTS : 'Ah點m分s秒', + L : 'YYYYå¹´MMMD日', + LL : 'YYYYå¹´MMMD日', + LLL : 'YYYYå¹´MMMD日Ah點mm分', + LLLL : 'YYYYå¹´MMMD日ddddAh點mm分', + l : 'YYYYå¹´MMMD日', + ll : 'YYYYå¹´MMMD日', + lll : 'YYYYå¹´MMMD日Ah點mm分', + llll : 'YYYYå¹´MMMD日ddddAh點mm分' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + ordinalParse: /\d{1,2}(日|月|週)/, + ordinal : function (number, period) { + switch (period) { + case 'd' : + case 'D' : + case 'DDD' : + return number + '日'; + case 'M' : + return number + '月'; + case 'w' : + case 'W' : + return number + '週'; + default : + return number; + } + }, + relativeTime : { + future : '%s內', + past : '%s前', + s : '幾秒', + m : '1 分鐘', + mm : '%d 分鐘', + h : '1 小時', + hh : '%d 小時', + d : '1 天', + dd : '%d 天', + M : '1 個月', + MM : '%d 個月', + y : '1 å¹´', + yy : '%d å¹´' + } +}); + +//! moment.js locale configuration +//! locale : Chinese (Taiwan) [zh-tw] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris + +hooks.defineLocale('zh-tw', { + months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), + weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), + weekdaysMin : '日_一_二_三_四_五_六'.split('_'), + longDateFormat : { + LT : 'Ah點mm分', + LTS : 'Ah點m分s秒', + L : 'YYYYå¹´MMMD日', + LL : 'YYYYå¹´MMMD日', + LLL : 'YYYYå¹´MMMD日Ah點mm分', + LLLL : 'YYYYå¹´MMMD日ddddAh點mm分', + l : 'YYYYå¹´MMMD日', + ll : 'YYYYå¹´MMMD日', + lll : 'YYYYå¹´MMMD日Ah點mm分', + llll : 'YYYYå¹´MMMD日ddddAh點mm分' + }, + meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, + meridiemHour : function (hour, meridiem) { + if (hour === 12) { + hour = 0; + } + if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { + return hour; + } else if (meridiem === '中午') { + return hour >= 11 ? hour : hour + 12; + } else if (meridiem === '下午' || meridiem === '晚上') { + return hour + 12; + } + }, + meridiem : function (hour, minute, isLower) { + var hm = hour * 100 + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1130) { + return '上午'; + } else if (hm < 1230) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } else { + return '晚上'; + } + }, + calendar : { + sameDay : '[今天]LT', + nextDay : '[明天]LT', + nextWeek : '[下]ddddLT', + lastDay : '[昨天]LT', + lastWeek : '[上]ddddLT', + sameElse : 'L' + }, + ordinalParse: /\d{1,2}(日|月|週)/, + ordinal : function (number, period) { + switch (period) { + case 'd' : + case 'D' : + case 'DDD' : + return number + '日'; + case 'M' : + return number + '月'; + case 'w' : + case 'W' : + return number + '週'; + default : + return number; + } + }, + relativeTime : { + future : '%s內', + past : '%s前', + s : '幾秒', + m : '1 分鐘', + mm : '%d 分鐘', + h : '1 小時', + hh : '%d 小時', + d : '1 天', + dd : '%d 天', + M : '1 個月', + MM : '%d 個月', + y : '1 å¹´', + yy : '%d å¹´' + } +}); + +hooks.locale('en'); + +return hooks; + +}))); diff --git a/www/plugins-dist/organiseur/lib/moment/moment-with-locales.min.js b/www/plugins-dist/organiseur/lib/moment/moment-with-locales.min.js new file mode 100644 index 00000000..fd7f8574 --- /dev/null +++ b/www/plugins-dist/organiseur/lib/moment/moment-with-locales.min.js @@ -0,0 +1,1216 @@ +!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return le.apply(null,arguments)} +// This is done to register the method called with moment() +// without creating circular dependencies. +function b(a){le=a}function c(a){return a instanceof Array||"[object Array]"===Object.prototype.toString.call(a)}function d(a){ +// IE8 will treat undefined and null as object if it wasn't for +// input != null +return null!=a&&"[object Object]"===Object.prototype.toString.call(a)}function e(a){var b;for(b in a) +// even if its not own property I'd still call it non-empty +return!1;return!0}function f(a){return"number"==typeof a||"[object Number]"===Object.prototype.toString.call(a)}function g(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function h(a,b){var c,d=[];for(c=0;c0)for(c in oe)d=oe[c],e=b[d],p(e)||(a[d]=e);return a} +// Moment prototype object +function r(b){q(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)), +// Prevent infinite loop in case updateOffset creates new moment +// objects. +pe===!1&&(pe=!0,a.updateOffset(this),pe=!1)}function s(a){return a instanceof r||null!=a&&null!=a._isAMomentObject}function t(a){return a<0?Math.ceil(a)||0:Math.floor(a)}function u(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=t(b)),c} +// compare two arrays, return the number of differences +function v(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;d0?"future":"past"];return z(c)?c(b):c.replace(/%s/i,b)}function J(a,b){var c=a.toLowerCase();Ae[c]=Ae[c+"s"]=Ae[b]=a}function K(a){return"string"==typeof a?Ae[a]||Ae[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)i(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(a,b){Be[a]=b}function N(a){var b=[];for(var c in a)b.push({unit:c,priority:Be[c]});return b.sort(function(a,b){return a.priority-b.priority}),b}function O(b,c){return function(d){return null!=d?(Q(this,b,d),a.updateOffset(this,c),this):P(this,b)}}function P(a,b){return a.isValid()?a._d["get"+(a._isUTC?"UTC":"")+b]():NaN}function Q(a,b,c){a.isValid()&&a._d["set"+(a._isUTC?"UTC":"")+b](c)} +// MOMENTS +function R(a){return a=K(a),z(this[a])?this[a]():this}function S(a,b){if("object"==typeof a){a=L(a);for(var c=N(a),d=0;d=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d} +// token: 'M' +// padded: ['MM', 2] +// ordinal: 'Mo' +// callback: function () { this.month() + 1 } +function U(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(Fe[a]=e),b&&(Fe[b[0]]=function(){return T(e.apply(this,arguments),b[1],b[2])}),c&&(Fe[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function V(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function W(a){var b,c,d=a.match(Ce);for(b=0,c=d.length;b=0&&De.test(a);)a=a.replace(De,c),De.lastIndex=0,d-=1;return a}function Z(a,b,c){Xe[a]=z(b)?b:function(a,d){return a&&c?c:b}}function $(a,b){return i(Xe,a)?Xe[a](b._strict,b._locale):new RegExp(_(a))} +// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript +function _(a){return aa(a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function aa(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ba(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),f(b)&&(d=function(a,c){c[b]=u(a)}),c=0;c=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function ta(a){var b=new Date(Date.UTC.apply(null,arguments)); +//the Date.UTC function remaps years 0-99 to 1900-1999 +return a<100&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b} +// start-of-first-week - start-of-year +function ua(a,b,c){var// first-week day -- which january is always in the first week (4 for iso, 1 for other) +d=7+b-c, +// first-week day local weekday -- which local weekday is fwd +e=(7+ta(a,0,d).getUTCDay()-b)%7;return-e+d-1} +//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday +function va(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ua(a,d,e),j=1+7*(b-1)+h+i;return j<=0?(f=a-1,g=pa(f)+j):j>pa(a)?(f=a+1,g=j-pa(a)):(f=a,g=j),{year:f,dayOfYear:g}}function wa(a,b,c){var d,e,f=ua(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return g<1?(e=a.year()-1,d=g+xa(e,b,c)):g>xa(a.year(),b,c)?(d=g-xa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function xa(a,b,c){var d=ua(a,b,c),e=ua(a+1,b,c);return(pa(a)-d+e)/7} +// HELPERS +// LOCALES +function ya(a){return wa(a,this._week.dow,this._week.doy).week}function za(){return this._week.dow}function Aa(){return this._week.doy} +// MOMENTS +function Ba(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function Ca(a){var b=wa(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")} +// HELPERS +function Da(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function Ea(a,b){return"string"==typeof a?b.weekdaysParse(a)%7||7:isNaN(a)?null:a}function Fa(a,b){return a?c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?"format":"standalone"][a.day()]:this._weekdays}function Ga(a){return a?this._weekdaysShort[a.day()]:this._weekdaysShort}function Ha(a){return a?this._weekdaysMin[a.day()]:this._weekdaysMin}function Ia(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;d<7;++d)f=k([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(f,"").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(f,"").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(f,"").toLocaleLowerCase();return c?"dddd"===b?(e=gf.call(this._weekdaysParse,g),e!==-1?e:null):"ddd"===b?(e=gf.call(this._shortWeekdaysParse,g),e!==-1?e:null):(e=gf.call(this._minWeekdaysParse,g),e!==-1?e:null):"dddd"===b?(e=gf.call(this._weekdaysParse,g),e!==-1?e:(e=gf.call(this._shortWeekdaysParse,g),e!==-1?e:(e=gf.call(this._minWeekdaysParse,g),e!==-1?e:null))):"ddd"===b?(e=gf.call(this._shortWeekdaysParse,g),e!==-1?e:(e=gf.call(this._weekdaysParse,g),e!==-1?e:(e=gf.call(this._minWeekdaysParse,g),e!==-1?e:null))):(e=gf.call(this._minWeekdaysParse,g),e!==-1?e:(e=gf.call(this._weekdaysParse,g),e!==-1?e:(e=gf.call(this._shortWeekdaysParse,g),e!==-1?e:null)))}function Ja(a,b,c){var d,e,f;if(this._weekdaysParseExact)return Ia.call(this,a,b,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;d<7;d++){ +// test the regex +if( +// make the regex if we don't have it already +e=k([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp("^"+this.weekdays(e,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[d]=new RegExp("^"+this.weekdaysShort(e,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[d]=new RegExp("^"+this.weekdaysMin(e,"").replace(".",".?")+"$","i")),this._weekdaysParse[d]||(f="^"+this.weekdays(e,"")+"|^"+this.weekdaysShort(e,"")+"|^"+this.weekdaysMin(e,""),this._weekdaysParse[d]=new RegExp(f.replace(".",""),"i")),c&&"dddd"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&"ddd"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&"dd"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}} +// MOMENTS +function Ka(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Da(a,this.localeData()),this.add(a-b,"d")):b}function La(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Ma(a){if(!this.isValid())return null!=a?this:NaN; +// behaves the same as moment#day except +// as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) +// as a setter, sunday should belong to the previous week. +if(null!=a){var b=Ea(a,this.localeData());return this.day(this.day()%7?b:b-7)}return this.day()||7}function Na(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysStrictRegex:this._weekdaysRegex):(i(this,"_weekdaysRegex")||(this._weekdaysRegex=sf),this._weekdaysStrictRegex&&a?this._weekdaysStrictRegex:this._weekdaysRegex)}function Oa(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(i(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=tf),this._weekdaysShortStrictRegex&&a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Pa(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(i(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=uf),this._weekdaysMinStrictRegex&&a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Qa(){function a(a,b){return b.length-a.length}var b,c,d,e,f,g=[],h=[],i=[],j=[];for(b=0;b<7;b++) +// make the regex if we don't have it already +c=k([2e3,1]).day(b),d=this.weekdaysMin(c,""),e=this.weekdaysShort(c,""),f=this.weekdays(c,""),g.push(d),h.push(e),i.push(f),j.push(d),j.push(e),j.push(f);for( +// Sorting makes sure if one weekday (or abbr) is a prefix of another it +// will match the longer piece. +g.sort(a),h.sort(a),i.sort(a),j.sort(a),b=0;b<7;b++)h[b]=aa(h[b]),i[b]=aa(i[b]),j[b]=aa(j[b]);this._weekdaysRegex=new RegExp("^("+j.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+g.join("|")+")","i")} +// FORMATTING +function Ra(){return this.hours()%12||12}function Sa(){return this.hours()||24}function Ta(a,b){U(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})} +// PARSING +function Ua(a,b){return b._meridiemParse} +// LOCALES +function Va(a){ +// IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays +// Using charAt should be more compatible. +return"p"===(a+"").toLowerCase().charAt(0)}function Wa(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Xa(a){return a?a.toLowerCase().replace("_","-"):a} +// pick the locale from the array +// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each +// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root +function Ya(a){for(var b,c,d,e,f=0;f0;){if(d=Za(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1) +//the next array item is better than a shallower substring of this one +break;b--}f++}return null}function Za(a){var b=null; +// TODO: Find a better way to register and load all the locales in Node +if(!zf[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=vf._abbr,require("./locale/"+a), +// because defineLocale currently also sets the global locale, we +// want to undo that for lazy loaded locales +$a(b)}catch(a){}return zf[a]} +// This function will load locale and then set the global locale. If +// no arguments are passed in, it will simply return the current global +// locale key. +function $a(a,b){var c; +// moment.duration._locale = moment._locale = data; +return a&&(c=p(b)?bb(a):_a(a,b),c&&(vf=c)),vf._abbr}function _a(a,b){if(null!==b){var c=yf;if(b.abbr=a,null!=zf[a])y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),c=zf[a]._config;else if(null!=b.parentLocale){if(null==zf[b.parentLocale])return Af[b.parentLocale]||(Af[b.parentLocale]=[]),Af[b.parentLocale].push({name:a,config:b}),null;c=zf[b.parentLocale]._config} +// backwards compat for now: also set the locale +// make sure we set the locale AFTER all child locales have been +// created, so we won't end up with the child locale set. +return zf[a]=new C(B(c,b)),Af[a]&&Af[a].forEach(function(a){_a(a.name,a.config)}),$a(a),zf[a]} +// useful for testing +return delete zf[a],null}function ab(a,b){if(null!=b){var c,d=yf; +// MERGE +null!=zf[a]&&(d=zf[a]._config),b=B(d,b),c=new C(b),c.parentLocale=zf[a],zf[a]=c, +// backwards compat for now: also set the locale +$a(a)}else +// pass null for config to unupdate, useful for tests +null!=zf[a]&&(null!=zf[a].parentLocale?zf[a]=zf[a].parentLocale:null!=zf[a]&&delete zf[a]);return zf[a]} +// returns locale data +function bb(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return vf;if(!c(a)){if( +//short-circuit everything else +b=Za(a))return b;a=[a]}return Ya(a)}function cb(){return te(zf)}function db(a){var b,c=a._a;return c&&m(a).overflow===-2&&(b=c[$e]<0||c[$e]>11?$e:c[_e]<1||c[_e]>ea(c[Ze],c[$e])?_e:c[af]<0||c[af]>24||24===c[af]&&(0!==c[bf]||0!==c[cf]||0!==c[df])?af:c[bf]<0||c[bf]>59?bf:c[cf]<0||c[cf]>59?cf:c[df]<0||c[df]>999?df:-1,m(a)._overflowDayOfYear&&(b_e)&&(b=_e),m(a)._overflowWeeks&&b===-1&&(b=ef),m(a)._overflowWeekday&&b===-1&&(b=ff),m(a).overflow=b),a} +// date from iso format +function eb(a){var b,c,d,e,f,g,h=a._i,i=Bf.exec(h)||Cf.exec(h);if(i){for(m(a).iso=!0,b=0,c=Ef.length;bpa(e)&&(m(a)._overflowDayOfYear=!0),c=ta(e,0,a._dayOfYear),a._a[$e]=c.getUTCMonth(),a._a[_e]=c.getUTCDate()),b=0;b<3&&null==a._a[b];++b)a._a[b]=f[b]=d[b]; +// Zero out whatever was not defaulted, including time +for(;b<7;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b]; +// Check for 24:00:00.000 +24===a._a[af]&&0===a._a[bf]&&0===a._a[cf]&&0===a._a[df]&&(a._nextDay=!0,a._a[af]=0),a._d=(a._useUTC?ta:sa).apply(null,f), +// Apply timezone offset from input. The actual utcOffset can be changed +// with parseZone. +null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[af]=24)}}function jb(a){var b,c,d,e,f,g,h,i;if(b=a._w,null!=b.GG||null!=b.W||null!=b.E)f=1,g=4, +// TODO: We need to take the current isoWeekYear, but that depends on +// how we interpret now (local, utc, fixed offset). So create +// a now version of current config (take local/utc/offset flags, and +// create now). +c=gb(b.GG,a._a[Ze],wa(sb(),1,4).year),d=gb(b.W,1),e=gb(b.E,1),(e<1||e>7)&&(i=!0);else{f=a._locale._week.dow,g=a._locale._week.doy;var j=wa(sb(),f,g);c=gb(b.gg,a._a[Ze],j.year), +// Default to current week. +d=gb(b.w,j.week),null!=b.d?( +// weekday -- low day numbers are considered next week +e=b.d,(e<0||e>6)&&(i=!0)):null!=b.e?( +// local weekday -- counting starts from begining of week +e=b.e+f,(b.e<0||b.e>6)&&(i=!0)): +// default to begining of week +e=f}d<1||d>xa(c,f,g)?m(a)._overflowWeeks=!0:null!=i?m(a)._overflowWeekday=!0:(h=va(c,d,e,f,g),a._a[Ze]=h.year,a._dayOfYear=h.dayOfYear)} +// date from string and format string +function kb(b){ +// TODO: Move this to another part of the creation flow to prevent circular deps +if(b._f===a.ISO_8601)return void eb(b);b._a=[],m(b).empty=!0; +// This array is used to make a Date, either with `new Date` or `Date.UTC` +var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=Y(b._f,b._locale).match(Ce)||[],c=0;c0&&m(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length), +// don't parse if it's not a known token +Fe[f]?(d?m(b).empty=!1:m(b).unusedTokens.push(f),da(f,d,b)):b._strict&&!d&&m(b).unusedTokens.push(f); +// add remaining unparsed input length to the string +m(b).charsLeftOver=i-j,h.length>0&&m(b).unusedInput.push(h), +// clear _12h flag if hour is <= 12 +b._a[af]<=12&&m(b).bigHour===!0&&b._a[af]>0&&(m(b).bigHour=void 0),m(b).parsedDateParts=b._a.slice(0),m(b).meridiem=b._meridiem, +// handle meridiem +b._a[af]=lb(b._locale,b._a[af],b._meridiem),ib(b),db(b)}function lb(a,b,c){var d; +// Fallback +return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&b<12&&(b+=12),d||12!==b||(b=0),b):b} +// date from string and array of format strings +function mb(a){var b,c,d,e,f;if(0===a._f.length)return m(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;e +// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset +// +0200, so we adjust the time as needed, to be valid. +// +// Keeping the time actually adds/subtracts (one hour) +// from the actual represented time. That is why we call updateOffset +// a second time. In case it wants us to change the offset again +// _changeInProgress == true case, then we have to adjust, because +// there is no such time in the given timezone. +function Db(b,c){var d,e=this._offset||0;if(!this.isValid())return null!=b?this:NaN;if(null!=b){if("string"==typeof b){if(b=Ab(Ue,b),null===b)return this}else Math.abs(b)<16&&(b=60*b);return!this._isUTC&&c&&(d=Cb(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?Tb(this,Ob(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?e:Cb(this)}function Eb(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Fb(a){return this.utcOffset(0,a)}function Gb(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Cb(this),"m")),this}function Hb(){if(null!=this._tzm)this.utcOffset(this._tzm);else if("string"==typeof this._i){var a=Ab(Te,this._i);null!=a?this.utcOffset(a):this.utcOffset(0,!0)}return this}function Ib(a){return!!this.isValid()&&(a=a?sb(a).utcOffset():0,(this.utcOffset()-a)%60===0)}function Jb(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Kb(){if(!p(this._isDSTShifted))return this._isDSTShifted;var a={};if(q(a,this),a=pb(a),a._a){var b=a._isUTC?k(a._a):sb(a._a);this._isDSTShifted=this.isValid()&&v(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Lb(){return!!this.isValid()&&!this._isUTC}function Mb(){return!!this.isValid()&&this._isUTC}function Nb(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ob(a,b){var c,d,e,g=a, +// matching against regexp is expensive, do it on demand +h=null;// checks for null or undefined +return xb(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:f(a)?(g={},b?g[b]=a:g.milliseconds=a):(h=Lf.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:u(h[_e])*c,h:u(h[af])*c,m:u(h[bf])*c,s:u(h[cf])*c,ms:u(yb(1e3*h[df]))*c}):(h=Mf.exec(a))?(c="-"===h[1]?-1:1,g={y:Pb(h[2],c),M:Pb(h[3],c),w:Pb(h[4],c),d:Pb(h[5],c),h:Pb(h[6],c),m:Pb(h[7],c),s:Pb(h[8],c)}):null==g?g={}:"object"==typeof g&&("from"in g||"to"in g)&&(e=Rb(sb(g.from),sb(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new wb(g),xb(a)&&i(a,"_locale")&&(d._locale=a._locale),d}function Pb(a,b){ +// We'd normally use ~~inp for this, but unfortunately it also +// converts floats to ints. +// inp may be undefined, so careful calling replace on it. +var c=a&&parseFloat(a.replace(",",".")); +// apply sign while we're at it +return(isNaN(c)?0:c)*b}function Qb(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function Rb(a,b){var c;return a.isValid()&&b.isValid()?(b=Bb(b,a),a.isBefore(b)?c=Qb(a,b):(c=Qb(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}} +// TODO: remove 'name' arg after deprecation is removed +function Sb(a,b){return function(c,d){var e,f; +//invert the arguments, but complain about it +return null===d||isNaN(+d)||(y(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Ob(c,d),Tb(this,e,a),this}}function Tb(b,c,d,e){var f=c._milliseconds,g=yb(c._days),h=yb(c._months);b.isValid()&&(e=null==e||e,f&&b._d.setTime(b._d.valueOf()+f*d),g&&Q(b,"Date",P(b,"Date")+g*d),h&&ja(b,P(b,"Month")+h*d),e&&a.updateOffset(b,g||h))}function Ub(a,b){var c=a.diff(b,"days",!0);return c<-6?"sameElse":c<-1?"lastWeek":c<0?"lastDay":c<1?"sameDay":c<2?"nextDay":c<7?"nextWeek":"sameElse"}function Vb(b,c){ +// We want to compare the start of today, vs this. +// Getting start-of-today depends on whether we're local/utc/offset or not. +var d=b||sb(),e=Bb(d,this).startOf("day"),f=a.calendarFormat(this,e)||"sameElse",g=c&&(z(c[f])?c[f].call(this,d):c[f]);return this.format(g||this.localeData().calendar(f,this,sb(d)))}function Wb(){return new r(this)}function Xb(a,b){var c=s(a)?a:sb(a);return!(!this.isValid()||!c.isValid())&&(b=K(p(b)?"millisecond":b),"millisecond"===b?this.valueOf()>c.valueOf():c.valueOf()f&&(b=f),Fc.call(this,a,b,c,d,e))}function Fc(a,b,c,d,e){var f=va(a,b,c,d,e),g=ta(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this} +// MOMENTS +function Gc(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)} +// HELPERS +// MOMENTS +function Hc(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function Ic(a,b){b[df]=u(1e3*("0."+a))} +// MOMENTS +function Jc(){return this._isUTC?"UTC":""}function Kc(){return this._isUTC?"Coordinated Universal Time":""}function Lc(a){return sb(1e3*a)}function Mc(){return sb.apply(null,arguments).parseZone()}function Nc(a){return a}function Oc(a,b,c,d){var e=bb(),f=k().set(d,b);return e[c](f,a)}function Pc(a,b,c){if(f(a)&&(b=a,a=void 0),a=a||"",null!=b)return Oc(a,b,c,"month");var d,e=[];for(d=0;d<12;d++)e[d]=Oc(a,d,c,"month");return e} +// () +// (5) +// (fmt, 5) +// (fmt) +// (true) +// (true, 5) +// (true, fmt, 5) +// (true, fmt) +function Qc(a,b,c,d){"boolean"==typeof a?(f(b)&&(c=b,b=void 0),b=b||""):(b=a,c=b,a=!1,f(b)&&(c=b,b=void 0),b=b||"");var e=bb(),g=a?e._week.dow:0;if(null!=c)return Oc(b,(c+g)%7,d,"day");var h,i=[];for(h=0;h<7;h++)i[h]=Oc(b,(h+g)%7,d,"day");return i}function Rc(a,b){return Pc(a,b,"months")}function Sc(a,b){return Pc(a,b,"monthsShort")}function Tc(a,b,c){return Qc(a,b,c,"weekdays")}function Uc(a,b,c){return Qc(a,b,c,"weekdaysShort")}function Vc(a,b,c){return Qc(a,b,c,"weekdaysMin")}function Wc(){var a=this._data;return this._milliseconds=Xf(this._milliseconds),this._days=Xf(this._days),this._months=Xf(this._months),a.milliseconds=Xf(a.milliseconds),a.seconds=Xf(a.seconds),a.minutes=Xf(a.minutes),a.hours=Xf(a.hours),a.months=Xf(a.months),a.years=Xf(a.years),this}function Xc(a,b,c,d){var e=Ob(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()} +// supports only 2.0-style add(1, 's') or add(duration) +function Yc(a,b){return Xc(this,a,b,1)} +// supports only 2.0-style subtract(1, 's') or subtract(duration) +function Zc(a,b){return Xc(this,a,b,-1)}function $c(a){return a<0?Math.floor(a):Math.ceil(a)}function _c(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data; +// if we have a mix of positive and negative values, bubble down first +// check: https://github.com/moment/moment/issues/2166 +// The following code bubbles up values, see the tests for +// examples of what that means. +// convert days to months +// 12 months -> 1 year +return f>=0&&g>=0&&h>=0||f<=0&&g<=0&&h<=0||(f+=864e5*$c(bd(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=t(f/1e3),i.seconds=a%60,b=t(a/60),i.minutes=b%60,c=t(b/60),i.hours=c%24,g+=t(c/24),e=t(ad(g)),h+=e,g-=$c(bd(e)),d=t(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function ad(a){ +// 400 years have 146097 days (taking into account leap year rules) +// 400 years have 12 months === 4800 +return 4800*a/146097}function bd(a){ +// the reverse of daysToMonths +return 146097*a/4800}function cd(a){var b,c,d=this._milliseconds;if(a=K(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+ad(b),"month"===a?c:c/12;switch( +// handle milliseconds separately because of floating point math errors (issue #1867) +b=this._days+Math.round(bd(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3; +// Math.floor prevents floating point math errors here +case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}} +// TODO: Use this.as('ms')? +function dd(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*u(this._months/12)}function ed(a){return function(){return this.as(a)}}function fd(a){return a=K(a),this[a+"s"]()}function gd(a){return function(){return this._data[a]}}function hd(){return t(this.days()/7)} +// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize +function id(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function jd(a,b,c){var d=Ob(a).abs(),e=lg(d.as("s")),f=lg(d.as("m")),g=lg(d.as("h")),h=lg(d.as("d")),i=lg(d.as("M")),j=lg(d.as("y")),k=e0,k[4]=c,id.apply(null,k)} +// This function allows you to set the rounding function for relative time strings +function kd(a){return void 0===a?lg:"function"==typeof a&&(lg=a,!0)} +// This function allows you to set a threshold for relative time strings +function ld(a,b){return void 0!==mg[a]&&(void 0===b?mg[a]:(mg[a]=b,!0))}function md(a){var b=this.localeData(),c=jd(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function nd(){ +// for ISO strings we do not use the normal bubbling rules: +// * milliseconds bubble up until they become hours +// * days do not bubble at all +// * months bubble up until they become years +// This is because there is no context-free conversion between hours and days +// (think of clock changes) +// and also not between days and months (28-31 days per month) +var a,b,c,d=ng(this._milliseconds)/1e3,e=ng(this._days),f=ng(this._months); +// 3600 seconds -> 60 minutes -> 1 hour +a=t(d/60),b=t(a/60),d%=60,a%=60, +// 12 months -> 1 year +c=t(f/12),f%=12; +// inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js +var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(m<0?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+(l?l+"S":""):"P0D"} +//! moment.js locale configuration +//! locale : Belarusian [be] +//! author : Dmitry Demidov : https://github.com/demidov91 +//! author: Praleska: http://praleska.pro/ +//! Author : Menelion Elensúle : https://github.com/Oire +function od(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function pd(a,b,c){var d={mm:b?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:b?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===c?b?"хвіліна":"хвіліну":"h"===c?b?"гадзіна":"гадзіну":a+" "+od(d[c],+a)} +//! moment.js locale configuration +//! locale : Breton [br] +//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou +function qd(a,b,c){var d={mm:"munutenn",MM:"miz",dd:"devezh"};return a+" "+td(d[c],a)}function rd(a){switch(sd(a)){case 1:case 3:case 4:case 5:case 9:return a+" bloaz";default:return a+" vloaz"}}function sd(a){return a>9?sd(a%10):a}function td(a,b){return 2===b?ud(a):a}function ud(a){var b={m:"v",b:"v",d:"z"};return void 0===b[a.charAt(0)]?a:b[a.charAt(0)]+a.substring(1)} +//! moment.js locale configuration +//! locale : Bosnian [bs] +//! author : Nedim Cholich : https://github.com/frontyard +//! based on (hr) translation by Bojan Marković +function vd(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function wd(a){return a>1&&a<5&&1!==~~(a/10)}function xd(a,b,c,d){var e=a+" ";switch(c){case"s":// a few seconds / in a few seconds / a few seconds ago +return b||d?"pár sekund":"pár sekundami";case"m":// a minute / in a minute / a minute ago +return b?"minuta":d?"minutu":"minutou";case"mm":// 9 minutes / in 9 minutes / 9 minutes ago +// 9 minutes / in 9 minutes / 9 minutes ago +return b||d?e+(wd(a)?"minuty":"minut"):e+"minutami";break;case"h":// an hour / in an hour / an hour ago +return b?"hodina":d?"hodinu":"hodinou";case"hh":// 9 hours / in 9 hours / 9 hours ago +// 9 hours / in 9 hours / 9 hours ago +return b||d?e+(wd(a)?"hodiny":"hodin"):e+"hodinami";break;case"d":// a day / in a day / a day ago +return b||d?"den":"dnem";case"dd":// 9 days / in 9 days / 9 days ago +// 9 days / in 9 days / 9 days ago +return b||d?e+(wd(a)?"dny":"dní"):e+"dny";break;case"M":// a month / in a month / a month ago +return b||d?"měsíc":"měsícem";case"MM":// 9 months / in 9 months / 9 months ago +// 9 months / in 9 months / 9 months ago +return b||d?e+(wd(a)?"měsíce":"měsíců"):e+"měsíci";break;case"y":// a year / in a year / a year ago +return b||d?"rok":"rokem";case"yy":// 9 years / in 9 years / 9 years ago +// 9 years / in 9 years / 9 years ago +return b||d?e+(wd(a)?"roky":"let"):e+"lety"}} +//! moment.js locale configuration +//! locale : German (Austria) [de-at] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Martin Groller : https://github.com/MadMG +//! author : Mikolaj Dadela : https://github.com/mik01aj +function yd(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]} +//! moment.js locale configuration +//! locale : German [de] +//! author : lluchs : https://github.com/lluchs +//! author: Menelion Elensúle: https://github.com/Oire +//! author : Mikolaj Dadela : https://github.com/mik01aj +function zd(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]} +//! moment.js locale configuration +//! locale : Estonian [et] +//! author : Henry Kehlmann : https://github.com/madhenry +//! improvements : Illimar Tambek : https://github.com/ragulka +function Ad(a,b,c,d){var e={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:[a+" minuti",a+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[a+" tunni",a+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[a+" kuu",a+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[a+" aasta",a+" aastat"]};return b?e[c][2]?e[c][2]:e[c][1]:d?e[c][0]:e[c][1]}function Bd(a,b,c,d){var e="";switch(c){case"s":return d?"muutaman sekunnin":"muutama sekunti";case"m":return d?"minuutin":"minuutti";case"mm":e=d?"minuutin":"minuuttia";break;case"h":return d?"tunnin":"tunti";case"hh":e=d?"tunnin":"tuntia";break;case"d":return d?"päivän":"päivä";case"dd":e=d?"päivän":"päivää";break;case"M":return d?"kuukauden":"kuukausi";case"MM":e=d?"kuukauden":"kuukautta";break;case"y":return d?"vuoden":"vuosi";case"yy":e=d?"vuoden":"vuotta"}return e=Cd(a,d)+" "+e}function Cd(a,b){return a<10?b?Sg[a]:Rg[a]:a} +//! moment.js locale configuration +//! locale : Croatian [hr] +//! author : Bojan Marković : https://github.com/bmarkovic +function Dd(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function Ed(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function Fd(a){return(a?"":"[múlt] ")+"["+ah[this.day()]+"] LT[-kor]"} +//! moment.js locale configuration +//! locale : Icelandic [is] +//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik +function Gd(a){return a%100===11||a%10!==1}function Hd(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return b?"mínúta":"mínútu";case"mm":return Gd(a)?e+(b||d?"mínútur":"mínútum"):b?e+"mínúta":e+"mínútu";case"hh":return Gd(a)?e+(b||d?"klukkustundir":"klukkustundum"):e+"klukkustund";case"d":return b?"dagur":d?"dag":"degi";case"dd":return Gd(a)?b?e+"dagar":e+(d?"daga":"dögum"):b?e+"dagur":e+(d?"dag":"degi");case"M":return b?"mánuður":d?"mánuð":"mánuði";case"MM":return Gd(a)?b?e+"mánuðir":e+(d?"mánuði":"mánuðum"):b?e+"mánuður":e+(d?"mánuð":"mánuði");case"y":return b||d?"ár":"ári";case"yy":return Gd(a)?e+(b||d?"ár":"árum"):e+(b||d?"ár":"ári")}} +//! moment.js locale configuration +//! locale : Luxembourgish [lb] +//! author : mweimerskirch : https://github.com/mweimerskirch +//! author : David Raison : https://github.com/kwisatz +function Id(a,b,c,d){var e={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return b?e[c][0]:e[c][1]}function Jd(a){var b=a.substr(0,a.indexOf(" "));return Ld(b)?"a "+a:"an "+a}function Kd(a){var b=a.substr(0,a.indexOf(" "));return Ld(b)?"viru "+a:"virun "+a}/** + * Returns true if the word before the given number loses the '-n' ending. + * e.g. 'an 10 Deeg' but 'a 5 Deeg' + * + * @param number {integer} + * @returns {boolean} + */ +function Ld(a){if(a=parseInt(a,10),isNaN(a))return!1;if(a<0) +// Negative Number --> always true +return!0;if(a<10) +// Only 1 digit +return 4<=a&&a<=7;if(a<100){ +// 2 digits +var b=a%10,c=a/10;return Ld(0===b?c:b)}if(a<1e4){ +// 3 or 4 digits --> recursively check first digit +for(;a>=10;)a/=10;return Ld(a)} +// Anything larger than 4 digits: recursively check first n-3 digits +return a/=1e3,Ld(a)}function Md(a,b,c,d){return b?"kelios sekundės":d?"kelių sekundžių":"kelias sekundes"}function Nd(a,b,c,d){return b?Pd(c)[0]:d?Pd(c)[1]:Pd(c)[2]}function Od(a){return a%10===0||a>10&&a<20}function Pd(a){return dh[a].split("_")}function Qd(a,b,c,d){var e=a+" ";return 1===a?e+Nd(a,b,c[0],d):b?e+(Od(a)?Pd(c)[1]:Pd(c)[0]):d?e+Pd(c)[1]:e+(Od(a)?Pd(c)[1]:Pd(c)[2])}/** + * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. + */ +function Rd(a,b,c){return c?b%10===1&&b%100!==11?a[2]:a[3]:b%10===1&&b%100!==11?a[0]:a[1]}function Sd(a,b,c){return a+" "+Rd(eh[c],a,b)}function Td(a,b,c){return Rd(eh[c],a,b)}function Ud(a,b){return b?"dažas sekundes":"dažām sekundēm"}function Vd(a,b,c,d){var e="";if(b)switch(c){case"s":e="काही सेकंद";break;case"m":e="एक मिनिट";break;case"mm":e="%d मिनिटे";break;case"h":e="एक तास";break;case"hh":e="%d तास";break;case"d":e="एक दिवस";break;case"dd":e="%d दिवस";break;case"M":e="एक महिना";break;case"MM":e="%d महिने";break;case"y":e="एक वर्ष";break;case"yy":e="%d वर्षे"}else switch(c){case"s":e="काही सेकंदां";break;case"m":e="एका मिनिटा";break;case"mm":e="%d मिनिटां";break;case"h":e="एका तासा";break;case"hh":e="%d तासां";break;case"d":e="एका दिवसा";break;case"dd":e="%d दिवसां";break;case"M":e="एका महिन्या";break;case"MM":e="%d महिन्यां";break;case"y":e="एका वर्षा";break;case"yy":e="%d वर्षां"}return e.replace(/%d/i,a)}function Wd(a){return a%10<5&&a%10>1&&~~(a/10)%10!==1}function Xd(a,b,c){var d=a+" ";switch(c){case"m":return b?"minuta":"minutę";case"mm":return d+(Wd(a)?"minuty":"minut");case"h":return b?"godzina":"godzinę";case"hh":return d+(Wd(a)?"godziny":"godzin");case"MM":return d+(Wd(a)?"miesiące":"miesięcy");case"yy":return d+(Wd(a)?"lata":"lat")}} +//! moment.js locale configuration +//! locale : Romanian [ro] +//! author : Vlad Gurdiga : https://github.com/gurdiga +//! author : Valentin Agachi : https://github.com/avaly +function Yd(a,b,c){var d={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},e=" ";return(a%100>=20||a>=100&&a%100===0)&&(e=" de "),a+e+d[c]} +//! moment.js locale configuration +//! locale : Russian [ru] +//! author : Viktorminator : https://github.com/Viktorminator +//! Author : Menelion Elensúle : https://github.com/Oire +//! author : Коренберг Марк : https://github.com/socketpair +function Zd(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function $d(a,b,c){var d={mm:b?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===c?b?"минута":"минуту":a+" "+Zd(d[c],+a)}function _d(a){return a>1&&a<5}function ae(a,b,c,d){var e=a+" ";switch(c){case"s":// a few seconds / in a few seconds / a few seconds ago +return b||d?"pár sekúnd":"pár sekundami";case"m":// a minute / in a minute / a minute ago +return b?"minúta":d?"minútu":"minútou";case"mm":// 9 minutes / in 9 minutes / 9 minutes ago +// 9 minutes / in 9 minutes / 9 minutes ago +return b||d?e+(_d(a)?"minúty":"minút"):e+"minútami";break;case"h":// an hour / in an hour / an hour ago +return b?"hodina":d?"hodinu":"hodinou";case"hh":// 9 hours / in 9 hours / 9 hours ago +// 9 hours / in 9 hours / 9 hours ago +return b||d?e+(_d(a)?"hodiny":"hodín"):e+"hodinami";break;case"d":// a day / in a day / a day ago +return b||d?"deň":"dňom";case"dd":// 9 days / in 9 days / 9 days ago +// 9 days / in 9 days / 9 days ago +return b||d?e+(_d(a)?"dni":"dní"):e+"dňami";break;case"M":// a month / in a month / a month ago +return b||d?"mesiac":"mesiacom";case"MM":// 9 months / in 9 months / 9 months ago +// 9 months / in 9 months / 9 months ago +return b||d?e+(_d(a)?"mesiace":"mesiacov"):e+"mesiacmi";break;case"y":// a year / in a year / a year ago +return b||d?"rok":"rokom";case"yy":// 9 years / in 9 years / 9 years ago +// 9 years / in 9 years / 9 years ago +return b||d?e+(_d(a)?"roky":"rokov"):e+"rokmi"}} +//! moment.js locale configuration +//! locale : Slovenian [sl] +//! author : Robert SedovÅ¡ek : https://github.com/sedovsek +function be(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nekaj sekund":"nekaj sekundami";case"m":return b?"ena minuta":"eno minuto";case"mm":return e+=1===a?b?"minuta":"minuto":2===a?b||d?"minuti":"minutama":a<5?b||d?"minute":"minutami":b||d?"minut":"minutami";case"h":return b?"ena ura":"eno uro";case"hh":return e+=1===a?b?"ura":"uro":2===a?b||d?"uri":"urama":a<5?b||d?"ure":"urami":b||d?"ur":"urami";case"d":return b||d?"en dan":"enim dnem";case"dd":return e+=1===a?b||d?"dan":"dnem":2===a?b||d?"dni":"dnevoma":b||d?"dni":"dnevi";case"M":return b||d?"en mesec":"enim mesecem";case"MM":return e+=1===a?b||d?"mesec":"mesecem":2===a?b||d?"meseca":"mesecema":a<5?b||d?"mesece":"meseci":b||d?"mesecev":"meseci";case"y":return b||d?"eno leto":"enim letom";case"yy":return e+=1===a?b||d?"leto":"letom":2===a?b||d?"leti":"letoma":a<5?b||d?"leta":"leti":b||d?"let":"leti"}}function ce(a){var b=a;return b=a.indexOf("jaj")!==-1?b.slice(0,-3)+"leS":a.indexOf("jar")!==-1?b.slice(0,-3)+"waQ":a.indexOf("DIS")!==-1?b.slice(0,-3)+"nem":b+" pIq"}function de(a){var b=a;return b=a.indexOf("jaj")!==-1?b.slice(0,-3)+"Hu’":a.indexOf("jar")!==-1?b.slice(0,-3)+"wen":a.indexOf("DIS")!==-1?b.slice(0,-3)+"ben":b+" ret"}function ee(a,b,c,d){var e=fe(a);switch(c){case"mm":return e+" tup";case"hh":return e+" rep";case"dd":return e+" jaj";case"MM":return e+" jar";case"yy":return e+" DIS"}}function fe(a){var b=Math.floor(a%1e3/100),c=Math.floor(a%100/10),d=a%10,e="";return b>0&&(e+=Fh[b]+"vatlh"),c>0&&(e+=(""!==e?" ":"")+Fh[c]+"maH"),d>0&&(e+=(""!==e?" ":"")+Fh[d]),""===e?"pagh":e}function ge(a,b,c,d){var e={s:["viensas secunds","'iensas secunds"],m:["'n míut","'iens míut"],mm:[a+" míuts",""+a+" míuts"],h:["'n þora","'iensa þora"],hh:[a+" þoras",""+a+" þoras"],d:["'n ziua","'iensa ziua"],dd:[a+" ziuas",""+a+" ziuas"],M:["'n mes","'iens mes"],MM:[a+" mesen",""+a+" mesen"],y:["'n ar","'iens ar"],yy:[a+" ars",""+a+" ars"]};return d?e[c][0]:b?e[c][0]:e[c][1]} +//! moment.js locale configuration +//! locale : Ukrainian [uk] +//! author : zemlanin : https://github.com/zemlanin +//! Author : Menelion Elensúle : https://github.com/Oire +function he(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function ie(a,b,c){var d={mm:b?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:b?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===c?b?"хвилина":"хвилину":"h"===c?b?"година":"годину":a+" "+he(d[c],+a)}function je(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")},d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function ke(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}}var le,me;me=Array.prototype.some?Array.prototype.some:function(a){for(var b=Object(this),c=b.length>>>0,d=0;d68?1900:2e3)}; +// MOMENTS +var nf=O("FullYear",!0); +// FORMATTING +U("w",["ww",2],"wo","week"),U("W",["WW",2],"Wo","isoWeek"), +// ALIASES +J("week","w"),J("isoWeek","W"), +// PRIORITIES +M("week",5),M("isoWeek",5), +// PARSING +Z("w",Le),Z("ww",Le,He),Z("W",Le),Z("WW",Le,He),ca(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=u(a)});var of={dow:0,// Sunday is the first day of the week. +doy:6}; +// FORMATTING +U("d",0,"do","day"),U("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),U("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),U("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),U("e",0,0,"weekday"),U("E",0,0,"isoWeekday"), +// ALIASES +J("day","d"),J("weekday","e"),J("isoWeekday","E"), +// PRIORITY +M("day",11),M("weekday",11),M("isoWeekday",11), +// PARSING +Z("d",Le),Z("e",Le),Z("E",Le),Z("dd",function(a,b){return b.weekdaysMinRegex(a)}),Z("ddd",function(a,b){return b.weekdaysShortRegex(a)}),Z("dddd",function(a,b){return b.weekdaysRegex(a)}),ca(["dd","ddd","dddd"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict); +// if we didn't get a weekday name, mark the date as invalid +null!=e?b.d=e:m(c).invalidWeekday=a}),ca(["d","e","E"],function(a,b,c,d){b[d]=u(a)}); +// LOCALES +var pf="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),qf="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),rf="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),sf=We,tf=We,uf=We;U("H",["HH",2],0,"hour"),U("h",["hh",2],0,Ra),U("k",["kk",2],0,Sa),U("hmm",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)}),U("hmmss",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),U("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),U("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ta("a",!0),Ta("A",!1), +// ALIASES +J("hour","h"), +// PRIORITY +M("hour",13),Z("a",Ua),Z("A",Ua),Z("H",Le),Z("h",Le),Z("HH",Le,He),Z("hh",Le,He),Z("hmm",Me),Z("hmmss",Ne),Z("Hmm",Me),Z("Hmmss",Ne),ba(["H","HH"],af),ba(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),ba(["h","hh"],function(a,b,c){b[af]=u(a),m(c).bigHour=!0}),ba("hmm",function(a,b,c){var d=a.length-2;b[af]=u(a.substr(0,d)),b[bf]=u(a.substr(d)),m(c).bigHour=!0}),ba("hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[af]=u(a.substr(0,d)),b[bf]=u(a.substr(d,2)),b[cf]=u(a.substr(e)),m(c).bigHour=!0}),ba("Hmm",function(a,b,c){var d=a.length-2;b[af]=u(a.substr(0,d)),b[bf]=u(a.substr(d))}),ba("Hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[af]=u(a.substr(0,d)),b[bf]=u(a.substr(d,2)),b[cf]=u(a.substr(e))});var vf,wf=/[ap]\.?m?\.?/i,xf=O("Hours",!0),yf={calendar:ue,longDateFormat:ve,invalidDate:we,ordinal:xe,ordinalParse:ye,relativeTime:ze,months:jf,monthsShort:kf,week:of,weekdays:pf,weekdaysMin:rf,weekdaysShort:qf,meridiemParse:wf},zf={},Af={},Bf=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Cf=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Df=/Z|[+-]\d\d(?::?\d\d)?/,Ef=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/], +// YYYYMM is NOT allowed by the standard +["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ff=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Gf=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=x("value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}), +// constant that refers to the ISO standard +a.ISO_8601=function(){};var Hf=x("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=sb.apply(null,arguments);return this.isValid()&&a.isValid()?athis?this:a:o()}),Jf=function(){return Date.now?Date.now():+new Date};zb("Z",":"),zb("ZZ",""), +// PARSING +Z("Z",Ue),Z("ZZ",Ue),ba(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Ab(Ue,a)}); +// HELPERS +// timezone chunker +// '+10:00' > ['10', '00'] +// '-1530' > ['-15', '30'] +var Kf=/([\+\-]|\d\d)/gi; +// HOOKS +// This function will be called whenever a moment is mutated. +// It is intended to keep the offset in sync with the timezone. +a.updateOffset=function(){}; +// ASP.NET json date format regex +var Lf=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Mf=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ob.fn=wb.prototype;var Nf=Sb(1,"add"),Of=Sb(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Pf=x("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)}); +// FORMATTING +U(0,["gg",2],0,function(){return this.weekYear()%100}),U(0,["GG",2],0,function(){return this.isoWeekYear()%100}),zc("gggg","weekYear"),zc("ggggg","weekYear"),zc("GGGG","isoWeekYear"),zc("GGGGG","isoWeekYear"), +// ALIASES +J("weekYear","gg"),J("isoWeekYear","GG"), +// PRIORITY +M("weekYear",1),M("isoWeekYear",1), +// PARSING +Z("G",Se),Z("g",Se),Z("GG",Le,He),Z("gg",Le,He),Z("GGGG",Pe,Je),Z("gggg",Pe,Je),Z("GGGGG",Qe,Ke),Z("ggggg",Qe,Ke),ca(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=u(a)}),ca(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}), +// FORMATTING +U("Q",0,"Qo","quarter"), +// ALIASES +J("quarter","Q"), +// PRIORITY +M("quarter",7), +// PARSING +Z("Q",Ge),ba("Q",function(a,b){b[$e]=3*(u(a)-1)}), +// FORMATTING +U("D",["DD",2],"Do","date"), +// ALIASES +J("date","D"), +// PRIOROITY +M("date",9), +// PARSING +Z("D",Le),Z("DD",Le,He),Z("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),ba(["D","DD"],_e),ba("Do",function(a,b){b[_e]=u(a.match(Le)[0],10)}); +// MOMENTS +var Qf=O("Date",!0); +// FORMATTING +U("DDD",["DDDD",3],"DDDo","dayOfYear"), +// ALIASES +J("dayOfYear","DDD"), +// PRIORITY +M("dayOfYear",4), +// PARSING +Z("DDD",Oe),Z("DDDD",Ie),ba(["DDD","DDDD"],function(a,b,c){c._dayOfYear=u(a)}), +// FORMATTING +U("m",["mm",2],0,"minute"), +// ALIASES +J("minute","m"), +// PRIORITY +M("minute",14), +// PARSING +Z("m",Le),Z("mm",Le,He),ba(["m","mm"],bf); +// MOMENTS +var Rf=O("Minutes",!1); +// FORMATTING +U("s",["ss",2],0,"second"), +// ALIASES +J("second","s"), +// PRIORITY +M("second",15), +// PARSING +Z("s",Le),Z("ss",Le,He),ba(["s","ss"],cf); +// MOMENTS +var Sf=O("Seconds",!1); +// FORMATTING +U("S",0,0,function(){return~~(this.millisecond()/100)}),U(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),U(0,["SSS",3],0,"millisecond"),U(0,["SSSS",4],0,function(){return 10*this.millisecond()}),U(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),U(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),U(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),U(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),U(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}), +// ALIASES +J("millisecond","ms"), +// PRIORITY +M("millisecond",16), +// PARSING +Z("S",Oe,Ge),Z("SS",Oe,He),Z("SSS",Oe,Ie);var Tf;for(Tf="SSSS";Tf.length<=9;Tf+="S")Z(Tf,Re);for(Tf="S";Tf.length<=9;Tf+="S")ba(Tf,Ic); +// MOMENTS +var Uf=O("Milliseconds",!1); +// FORMATTING +U("z",0,0,"zoneAbbr"),U("zz",0,0,"zoneName");var Vf=r.prototype;Vf.add=Nf,Vf.calendar=Vb,Vf.clone=Wb,Vf.diff=bc,Vf.endOf=oc,Vf.format=gc,Vf.from=hc,Vf.fromNow=ic,Vf.to=jc,Vf.toNow=kc,Vf.get=R,Vf.invalidAt=xc,Vf.isAfter=Xb,Vf.isBefore=Yb,Vf.isBetween=Zb,Vf.isSame=$b,Vf.isSameOrAfter=_b,Vf.isSameOrBefore=ac,Vf.isValid=vc,Vf.lang=Pf,Vf.locale=lc,Vf.localeData=mc,Vf.max=If,Vf.min=Hf,Vf.parsingFlags=wc,Vf.set=S,Vf.startOf=nc,Vf.subtract=Of,Vf.toArray=sc,Vf.toObject=tc,Vf.toDate=rc,Vf.toISOString=ec,Vf.inspect=fc,Vf.toJSON=uc,Vf.toString=dc,Vf.unix=qc,Vf.valueOf=pc,Vf.creationData=yc, +// Year +Vf.year=nf,Vf.isLeapYear=ra, +// Week Year +Vf.weekYear=Ac,Vf.isoWeekYear=Bc, +// Quarter +Vf.quarter=Vf.quarters=Gc, +// Month +Vf.month=ka,Vf.daysInMonth=la, +// Week +Vf.week=Vf.weeks=Ba,Vf.isoWeek=Vf.isoWeeks=Ca,Vf.weeksInYear=Dc,Vf.isoWeeksInYear=Cc, +// Day +Vf.date=Qf,Vf.day=Vf.days=Ka,Vf.weekday=La,Vf.isoWeekday=Ma,Vf.dayOfYear=Hc, +// Hour +Vf.hour=Vf.hours=xf, +// Minute +Vf.minute=Vf.minutes=Rf, +// Second +Vf.second=Vf.seconds=Sf, +// Millisecond +Vf.millisecond=Vf.milliseconds=Uf, +// Offset +Vf.utcOffset=Db,Vf.utc=Fb,Vf.local=Gb,Vf.parseZone=Hb,Vf.hasAlignedHourOffset=Ib,Vf.isDST=Jb,Vf.isLocal=Lb,Vf.isUtcOffset=Mb,Vf.isUtc=Nb,Vf.isUTC=Nb, +// Timezone +Vf.zoneAbbr=Jc,Vf.zoneName=Kc, +// Deprecations +Vf.dates=x("dates accessor is deprecated. Use date instead.",Qf),Vf.months=x("months accessor is deprecated. Use month instead",ka),Vf.years=x("years accessor is deprecated. Use year instead",nf),Vf.zone=x("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Eb),Vf.isDSTShifted=x("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Kb);var Wf=C.prototype;Wf.calendar=D,Wf.longDateFormat=E,Wf.invalidDate=F,Wf.ordinal=G,Wf.preparse=Nc,Wf.postformat=Nc,Wf.relativeTime=H,Wf.pastFuture=I,Wf.set=A, +// Month +Wf.months=fa,Wf.monthsShort=ga,Wf.monthsParse=ia,Wf.monthsRegex=na,Wf.monthsShortRegex=ma, +// Week +Wf.week=ya,Wf.firstDayOfYear=Aa,Wf.firstDayOfWeek=za, +// Day of Week +Wf.weekdays=Fa,Wf.weekdaysMin=Ha,Wf.weekdaysShort=Ga,Wf.weekdaysParse=Ja,Wf.weekdaysRegex=Na,Wf.weekdaysShortRegex=Oa,Wf.weekdaysMinRegex=Pa, +// Hours +Wf.isPM=Va,Wf.meridiem=Wa,$a("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===u(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}), +// Side effect imports +a.lang=x("moment.lang is deprecated. Use moment.locale instead.",$a),a.langData=x("moment.langData is deprecated. Use moment.localeData instead.",bb);var Xf=Math.abs,Yf=ed("ms"),Zf=ed("s"),$f=ed("m"),_f=ed("h"),ag=ed("d"),bg=ed("w"),cg=ed("M"),dg=ed("y"),eg=gd("milliseconds"),fg=gd("seconds"),gg=gd("minutes"),hg=gd("hours"),ig=gd("days"),jg=gd("months"),kg=gd("years"),lg=Math.round,mg={s:45,// seconds to minute +m:45,// minutes to hour +h:22,// hours to day +d:26,// days to month +M:11},ng=Math.abs,og=wb.prototype;og.abs=Wc,og.add=Yc,og.subtract=Zc,og.as=cd,og.asMilliseconds=Yf,og.asSeconds=Zf,og.asMinutes=$f,og.asHours=_f,og.asDays=ag,og.asWeeks=bg,og.asMonths=cg,og.asYears=dg,og.valueOf=dd,og._bubble=_c,og.get=fd,og.milliseconds=eg,og.seconds=fg,og.minutes=gg,og.hours=hg,og.days=ig,og.weeks=hd,og.months=jg,og.years=kg,og.humanize=md,og.toISOString=nd,og.toString=nd,og.toJSON=nd,og.locale=lc,og.localeData=mc, +// Deprecations +og.toIsoString=x("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",nd),og.lang=Pf, +// Side effect imports +// FORMATTING +U("X",0,0,"unix"),U("x",0,0,"valueOf"), +// PARSING +Z("x",Se),Z("X",Ve),ba("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),ba("x",function(a,b,c){c._d=new Date(u(a))}), +// Side effect imports +//! moment.js +//! version : 2.17.1 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com +a.version="2.17.1",b(sb),a.fn=Vf,a.min=ub,a.max=vb,a.now=Jf,a.utc=k,a.unix=Lc,a.months=Rc,a.isDate=g,a.locale=$a,a.invalid=o,a.duration=Ob,a.isMoment=s,a.weekdays=Tc,a.parseZone=Mc,a.localeData=bb,a.isDuration=xb,a.monthsShort=Sc,a.weekdaysMin=Vc,a.defineLocale=_a,a.updateLocale=ab,a.locales=cb,a.weekdaysShort=Uc,a.normalizeUnits=K,a.relativeTimeRounding=kd,a.relativeTimeThreshold=ld,a.calendarFormat=Ub,a.prototype=Vf, +//! moment.js locale configuration +//! locale : Afrikaans [af] +//! author : Werner Mollentze : https://github.com/wernerm +a.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(a){return/^nm$/i.test(a)},meridiem:function(a,b,c){return a<12?c?"vm":"VM":c?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,// Maandag is die eerste dag van die week. +doy:4}}), +//! moment.js locale configuration +//! locale : Arabic (Algeria) [ar-dz] +//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme +a.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,// Sunday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Arabic (Lybia) [ar-ly] +//! author : Ali Hmer: https://github.com/kikoanis +var pg={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},qg=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&a%100<=10?3:a%100>=11?4:5},rg={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},sg=function(a){return function(b,c,d,e){var f=qg(b),g=rg[a][qg(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},tg=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];a.defineLocale("ar-ly",{months:tg,monthsShort:tg,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"Ø­_ن_Ø«_ر_Ø®_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:sg("s"),m:sg("m"),mm:sg("m"),h:sg("h"),hh:sg("h"),d:sg("d"),dd:sg("d"),M:sg("M"),MM:sg("M"),y:sg("y"),yy:sg("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return pg[a]}).replace(/,/g,"،")},week:{dow:6,// Saturday is the first day of the week. +doy:12}}), +//! moment.js locale configuration +//! locale : Arabic (Morocco) [ar-ma] +//! author : ElFadili Yassine : https://github.com/ElFadiliY +//! author : Abdel Said : https://github.com/abdelsaid +a.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"Ø­_ن_Ø«_ر_Ø®_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,// Saturday is the first day of the week. +doy:12}}); +//! moment.js locale configuration +//! locale : Arabic (Saudi Arabia) [ar-sa] +//! author : Suhail Alkowaileet : https://github.com/xsoh +var ug={1:"Ù¡",2:"Ù¢",3:"Ù£",4:"Ù¤",5:"Ù¥",6:"Ù¦",7:"Ù§",8:"Ù¨",9:"Ù©",0:"Ù "},vg={"Ù¡":"1","Ù¢":"2","Ù£":"3","Ù¤":"4","Ù¥":"5","Ù¦":"6","Ù§":"7","Ù¨":"8","Ù©":"9","Ù ":"0"};a.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"Ø­_ن_Ø«_ر_Ø®_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return vg[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return ug[a]}).replace(/,/g,"،")},week:{dow:0,// Sunday is the first day of the week. +doy:6}}), +//! moment.js locale configuration +//! locale : Arabic (Tunisia) [ar-tn] +//! author : Nader Toukabri : https://github.com/naderio +a.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"Ø­_ن_Ø«_ر_Ø®_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Arabic [ar] +//! author : Abdel Said: https://github.com/abdelsaid +//! author : Ahmed Elkhatib +//! author : forabi https://github.com/forabi +var wg={1:"Ù¡",2:"Ù¢",3:"Ù£",4:"Ù¤",5:"Ù¥",6:"Ù¦",7:"Ù§",8:"Ù¨",9:"Ù©",0:"Ù "},xg={"Ù¡":"1","Ù¢":"2","Ù£":"3","Ù¤":"4","Ù¥":"5","Ù¦":"6","Ù§":"7","Ù¨":"8","Ù©":"9","Ù ":"0"},yg=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&a%100<=10?3:a%100>=11?4:5},zg={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},Ag=function(a){return function(b,c,d,e){var f=yg(b),g=zg[a][yg(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},Bg=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"];a.defineLocale("ar",{months:Bg,monthsShort:Bg,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"Ø­_ن_Ø«_ر_Ø®_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:Ag("s"),m:Ag("m"),mm:Ag("m"),h:Ag("h"),hh:Ag("h"),d:Ag("d"),dd:Ag("d"),M:Ag("M"),MM:Ag("M"),y:Ag("y"),yy:Ag("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return xg[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return wg[a]}).replace(/,/g,"،")},week:{dow:6,// Saturday is the first day of the week. +doy:12}}); +//! moment.js locale configuration +//! locale : Azerbaijani [az] +//! author : topchiyev : https://github.com/topchiyev +var Cg={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};a.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(a){return/^(gündüz|axşam)$/.test(a)},meridiem:function(a,b,c){return a<4?"gecə":a<12?"səhər":a<17?"gündüz":"axşam"},ordinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(a){if(0===a)// special case for zero +return a+"-ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(Cg[b]||Cg[c]||Cg[d])},week:{dow:1,// Monday is the first day of the week. +doy:7}}),a.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:pd,mm:pd,h:pd,hh:pd,d:"дзень",dd:pd,M:"месяц",MM:pd,y:"год",yy:pd},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(a){return/^(дня|вечара)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночы":a<12?"раніцы":a<17?"дня":"вечара"},ordinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a%10!==2&&a%10!==3||a%100===12||a%100===13?a+"-ы":a+"-і";case"D":return a+"-га";default:return a}},week:{dow:1,// Monday is the first day of the week. +doy:7}}), +//! moment.js locale configuration +//! locale : Bulgarian [bg] +//! author : Krasen Borisov : https://github.com/kraz +a.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&c<20?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,// Monday is the first day of the week. +doy:7}}); +//! moment.js locale configuration +//! locale : Bengali [bn] +//! author : Kaushik Gandhi : https://github.com/kaushikgandhi +var Dg={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},Eg={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};a.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(a){return a.replace(/[১২৩৪৫৬৭৮৯০]/g,function(a){return Eg[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Dg[a]})},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(a,b){return 12===a&&(a=0),"রাত"===b&&a>=4||"দুপুর"===b&&a<5||"বিকাল"===b?a+12:a},meridiem:function(a,b,c){return a<4?"রাত":a<10?"সকাল":a<17?"দুপুর":a<20?"বিকাল":"রাত"},week:{dow:0,// Sunday is the first day of the week. +doy:6}}); +//! moment.js locale configuration +//! locale : Tibetan [bo] +//! author : Thupten N. Chakrishar : https://github.com/vajradog +var Fg={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},Gg={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};a.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(a){return a.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(a){return Gg[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Fg[a]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(a,b){return 12===a&&(a=0),"མཚན་མོ"===b&&a>=4||"ཉིན་གུང"===b&&a<5||"དགོང་དག"===b?a+12:a},meridiem:function(a,b,c){return a<4?"མཚན་མོ":a<10?"ཞོགས་ཀས":a<17?"ཉིན་གུང":a<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,// Sunday is the first day of the week. +doy:6}}),a.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:qd,h:"un eur",hh:"%d eur",d:"un devezh",dd:qd,M:"ur miz",MM:qd,y:"ur bloaz",yy:rd},ordinalParse:/\d{1,2}(añ|vet)/,ordinal:function(a){var b=1===a?"añ":"vet";return a+b},week:{dow:1,// Monday is the first day of the week. +doy:4}}),a.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[proÅ¡lu] dddd [u] LT";case 6:return"[proÅ¡le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[proÅ¡li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:vd,mm:vd,h:vd,hh:vd,d:"dan",dd:vd,M:"mjesec",MM:vd,y:"godinu",yy:vd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:7}}), +//! moment.js locale configuration +//! locale : Catalan [ca] +//! author : Juan G. Hurtado : https://github.com/juanghurtado +a.defineLocale("ca",{months:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),monthsShort:"gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd D MMMM YYYY H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(a,b){var c=1===a?"r":2===a?"n":3===a?"r":4===a?"t":"è";return"w"!==b&&"W"!==b||(c="a"),a+c},week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Czech [cs] +//! author : petrbela : https://github.com/petrbela +var Hg="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),Ig="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");a.defineLocale("cs",{months:Hg,monthsShort:Ig,monthsParse:function(a,b){var c,d=[];for(c=0;c<12;c++) +// use custom parser to solve problem with July (červenec) +d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(Hg,Ig),shortMonthsParse:function(a){var b,c=[];for(b=0;b<12;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(Ig),longMonthsParse:function(a){var b,c=[];for(b=0;b<12;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(Hg),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:xd,m:xd,mm:xd,h:xd,hh:xd,d:xd,dd:xd,M:xd,MM:xd,y:xd,yy:xd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Chuvash [cv] +//! author : Anatoly Mironov : https://github.com/mirontoli +a.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(a){var b=/сехет$/i.exec(a)?"рен":/ҫул$/i.exec(a)?"тан":"ран";return a+b},past:"%s каялла",s:"пӗр-ик ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},ordinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,// Monday is the first day of the week. +doy:7}}), +//! moment.js locale configuration +//! locale : Welsh [cy] +//! author : Robert Allen : https://github.com/robgallen +//! author : https://github.com/ryangreaves +a.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0, +// time formats are the same as en-gb +longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},ordinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/, +// traditional ordinal numbers above 31 are not commonly used in colloquial Welsh +ordinal:function(a){var b=a,c="",d=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed",// 1af to 10fed +"eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];return b>20?c=40===b||50===b||60===b||80===b||100===b?"fed":"ain":b>0&&(c=d[b]),a+c},week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Danish [da] +//! author : Ulrik Nielsen : https://github.com/mrbase +a.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY HH:mm"},calendar:{sameDay:"[I dag kl.] LT",nextDay:"[I morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[I gÃ¥r kl.] LT",lastWeek:"[sidste] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"fÃ¥ sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en mÃ¥ned",MM:"%d mÃ¥neder",y:"et Ã¥r",yy:"%d Ã¥r"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}),a.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:yd,mm:"%d Minuten",h:yd,hh:"%d Stunden",d:yd,dd:yd,M:yd,MM:yd,y:yd,yy:yd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}),a.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:zd,mm:"%d Minuten",h:zd,hh:"%d Stunden",d:zd,dd:zd,M:zd,MM:zd,y:zd,yy:zd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Maldivian [dv] +//! author : Jawish Hameed : https://github.com/jawish +var Jg=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],Kg=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];a.defineLocale("dv",{months:Jg,monthsShort:Jg,weekdays:Kg,weekdaysShort:Kg,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(a){return"މފ"===a},meridiem:function(a,b,c){return a<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:7,// Sunday is the first day of the week. +doy:12}}), +//! moment.js locale configuration +//! locale : Greek [el] +//! author : Aggelos Karalias : https://github.com/mehiel +a.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},isPM:function(a){return"μ"===(a+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(a,b){var c=this._calendarEl[a],d=b&&b.hours();return z(c)&&(c=c.apply(b)),c.replace("{}",d%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},ordinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : English (Australia) [en-au] +//! author : Jared Morse : https://github.com/jarcoal +a.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : English (Canada) [en-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca +a.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}), +//! moment.js locale configuration +//! locale : English (United Kingdom) [en-gb] +//! author : Chris Gedrim : https://github.com/chrisgedrim +a.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : English (Ireland) [en-ie] +//! author : Chris Cartlidge : https://github.com/chriscartlidge +a.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : English (New Zealand) [en-nz] +//! author : Luke McGregor : https://github.com/lukemcgregor +a.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Esperanto [eo] +//! author : Colin Dean : https://github.com/colindean +//! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko. +//! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni! +a.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aÅ­gusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aÅ­g_sep_okt_nov_dec".split("_"),weekdays:"Dimanĉo_Lundo_Mardo_Merkredo_Ä´aÅ­do_Vendredo_Sabato".split("_"),weekdaysShort:"Dim_Lun_Mard_Merk_Ä´aÅ­_Ven_Sab".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Ä´a_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-an de] MMMM, YYYY",LLL:"D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-an de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(a){return"p"===a.charAt(0).toLowerCase()},meridiem:function(a,b,c){return a>11?c?"p.t.m.":"P.T.M.":c?"a.t.m.":"A.T.M."},calendar:{sameDay:"[HodiaÅ­ je] LT",nextDay:"[MorgaÅ­ je] LT",nextWeek:"dddd [je] LT",lastDay:"[HieraÅ­ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"je %s",past:"antaÅ­ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",//ne 'diurno', ĉar estas uzita por proksimumo +dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},ordinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,// Monday is the first day of the week. +doy:7}}); +//! moment.js locale configuration +//! locale : Spanish (Dominican Republic) [es-do] +var Lg="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Mg="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");a.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?Mg[a.month()]:Lg[a.month()]},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Spanish [es] +//! author : Julio Napurí : https://github.com/julionc +var Ng="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Og="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");a.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?Og[a.month()]:Ng[a.month()]},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week. +doy:4}}),a.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:Ad,m:Ad,mm:Ad,h:Ad,hh:Ad,d:Ad,dd:"%d päeva",M:Ad,MM:Ad,y:Ad,yy:Ad},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Basque [eu] +//! author : Eneko Illarramendi : https://github.com/eillarra +a.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:7}}); +//! moment.js locale configuration +//! locale : Persian [fa] +//! author : Ebrahim Byagowi : https://github.com/ebraminio +var Pg={1:"Û±",2:"Û²",3:"Û³",4:"Û´",5:"Ûµ",6:"Û¶",7:"Û·",8:"Û¸",9:"Û¹",0:"Û°"},Qg={"Û±":"1","Û²":"2","Û³":"3","Û´":"4","Ûµ":"5","Û¶":"6","Û·":"7","Û¸":"8","Û¹":"9","Û°":"0"};a.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_Ù¾_ج_Ø´".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(a){return/بعد از ظهر/.test(a)},meridiem:function(a,b,c){return a<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چندین ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[Û°-Û¹]/g,function(a){return Qg[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return Pg[a]}).replace(/,/g,"،")},ordinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,// Saturday is the first day of the week. +doy:12}}); +//! moment.js locale configuration +//! locale : Finnish [fi] +//! author : Tarmo Aidantausta : https://github.com/bleadof +var Rg="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),Sg=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",Rg[7],Rg[8],Rg[9]];a.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:Bd,m:Bd,mm:Bd,h:Bd,hh:Bd,d:Bd,dd:Bd,M:Bd,MM:Bd,y:Bd,yy:Bd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Faroese [fo] +//! author : Ragnar Johannesen : https://github.com/ragnar123 +a.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : French (Canada) [fr-ca] +//! author : Jonathan Abourbih : https://github.com/jonbca +a.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(a){return a+(1===a?"er":"e")}}), +//! moment.js locale configuration +//! locale : French (Switzerland) [fr-ch] +//! author : Gaspard Bucher : https://github.com/gaspard +a.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(a){return a+(1===a?"er":"e")},week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : French [fr] +//! author : John Fischer : https://github.com/jfroffice +a.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|)/,ordinal:function(a){return a+(1===a?"er":"")},week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Frisian [fy] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v +var Tg="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),Ug="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");a.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?Ug[a.month()]:Tg[a.month()]},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Scottish Gaelic [gd] +//! author : Jon Ashdown : https://github.com/jonashdown +var Vg=["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],Wg=["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],Xg=["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],Yg=["Did","Dil","Dim","Dic","Dia","Dih","Dis"],Zg=["Dò","Lu","Mà","Ci","Ar","Ha","Sa"];a.defineLocale("gd",{months:Vg,monthsShort:Wg,monthsParseExact:!0,weekdays:Xg,weekdaysShort:Yg,weekdaysMin:Zg,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},ordinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(a){var b=1===a?"d":a%10===2?"na":"mh";return a+b},week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Galician [gl] +//! author : Juan G. Hurtado : https://github.com/juanghurtado +a.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(a){return 0===a.indexOf("un")?"n"+a:"en "+a},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Hebrew [he] +//! author : Tomer Cohen : https://github.com/tomer +//! author : Moshe Simantov : https://github.com/DevelopmentIL +//! author : Tal Ater : https://github.com/TalAter +a.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a%10===0&&10!==a?a+" שנה":a+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(a){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(a)},meridiem:function(a,b,c){return a<5?"לפנות בוקר":a<10?"בבוקר":a<12?c?'לפנה"צ':"לפני הצהריים":a<18?c?'אחה"צ':"אחרי הצהריים":"בערב"}}); +//! moment.js locale configuration +//! locale : Hindi [hi] +//! author : Mayank Singhal : https://github.com/mayanksinghal +var $g={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},_g={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return _g[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return $g[a]})}, +// Hindi notation for meridiems are quite fuzzy in practice. While there exists +// a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. +meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात"===b?a<4?a:a+12:"सुबह"===b?a:"दोपहर"===b?a>=10?a:a+12:"शाम"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"रात":a<10?"सुबह":a<17?"दोपहर":a<20?"शाम":"रात"},week:{dow:0,// Sunday is the first day of the week. +doy:6}}),a.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[proÅ¡lu] dddd [u] LT";case 6:return"[proÅ¡le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[proÅ¡li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:Dd,mm:Dd,h:Dd,hh:Dd,d:"dan",dd:Dd,M:"mjesec",MM:Dd,y:"godinu",yy:Dd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:7}}); +//! moment.js locale configuration +//! locale : Hungarian [hu] +//! author : Adam Brunner : https://github.com/adambrunner +var ah="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");a.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(a){return"u"===a.charAt(1).toLowerCase()},meridiem:function(a,b,c){return a<12?c===!0?"de":"DE":c===!0?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return Fd.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return Fd.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:Ed,m:Ed,mm:Ed,h:Ed,hh:Ed,d:Ed,dd:Ed,M:Ed,MM:Ed,y:Ed,yy:Ed},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Armenian [hy-am] +//! author : Armendarabyan : https://github.com/armendarabyan +a.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_Õ´Õ¡ÕµÕ«Õ½Õ«_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_Õ´Õ¡ÕµÕ«Õ½_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"Õ°Õ¶Õ¾_փտր_մրտ_ապր_Õ´ÕµÕ½_Õ°Õ¶Õ½_Õ°Õ¬Õ½_օգս_Õ½ÕºÕ¿_Õ°Õ¯Õ¿_Õ¶Õ´Õ¢_Õ¤Õ¯Õ¿".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«_ուրբաթ_Õ·Õ¡Õ¢Õ¡Õ©".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_Õ°Õ¶Õ£_ուրբ_Õ·Õ¢Õ©".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_Õ°Õ¶Õ£_ուրբ_Õ·Õ¢Õ©".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY Õ©.",LLL:"D MMMM YYYY Õ©., HH:mm",LLLL:"dddd, D MMMM YYYY Õ©., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[Õ¾Õ¡Õ²Õ¨] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ÕªÕ¡Õ´Õ¨] LT"},lastWeek:function(){return"[անցած] dddd [օրը ÕªÕ¡Õ´Õ¨] LT"},sameElse:"L"},relativeTime:{future:"%s Õ°Õ¥Õ¿Õ¸",past:"%s Õ¡Õ¼Õ¡Õ»",s:"Õ´Õ« քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ÕªÕ¡Õ´",hh:"%d ÕªÕ¡Õ´",d:"օր",dd:"%d օր",M:"Õ¡Õ´Õ«Õ½",MM:"%d Õ¡Õ´Õ«Õ½",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡|ցերեկվա|երեկոյան/,isPM:function(a){return/^(ցերեկվա|երեկոյան)$/.test(a)},meridiem:function(a){return a<4?"գիշերվա":a<12?"Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿Õ¾Õ¡":a<17?"ցերեկվա":"երեկոյան"},ordinalParse:/\d{1,2}|\d{1,2}-(Õ«Õ¶|րդ)/,ordinal:function(a,b){switch(b){case"DDD":case"w":case"W":case"DDDo":return 1===a?a+"-Õ«Õ¶":a+"-րդ";default:return a}},week:{dow:1,// Monday is the first day of the week. +doy:7}}), +//! moment.js locale configuration +//! locale : Indonesian [id] +//! author : Mohammad Satrio Utomo : https://github.com/tyok +//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan +a.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"siang"===b?a>=11?a:a+12:"sore"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"siang":a<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,// Monday is the first day of the week. +doy:7}}),a.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:Hd,m:Hd,mm:Hd,h:"klukkustund",hh:Hd,d:Hd,dd:Hd,M:Hd,MM:Hd,y:Hd,yy:Hd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Italian [it] +//! author : Lorenzo : https://github.com/aliem +//! author: Mattia Larentis: https://github.com/nostalgiaz +a.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),weekdaysShort:"Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),weekdaysMin:"Do_Lu_Ma_Me_Gi_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Japanese [ja] +//! author : LI Long : https://github.com/baryon +a.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_æ°´_木_金_土".split("_"),weekdaysMin:"日_月_火_æ°´_木_金_土".split("_"),longDateFormat:{LT:"Ah時m分",LTS:"Ah時m分s秒",L:"YYYY/MM/DD",LL:"YYYYå¹´M月D日",LLL:"YYYYå¹´M月D日Ah時m分",LLLL:"YYYYå¹´M月D日Ah時m分 dddd"},meridiemParse:/午前|午後/i,isPM:function(a){return"午後"===a},meridiem:function(a,b,c){return a<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},ordinalParse:/\d{1,2}日/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";default:return a}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1å¹´",yy:"%då¹´"}}), +//! moment.js locale configuration +//! locale : Javanese [jv] +//! author : Rony Lantip : https://github.com/lantip +//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa +a.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(a,b){return 12===a&&(a=0),"enjing"===b?a:"siyang"===b?a>=11?a:a+12:"sonten"===b||"ndalu"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"enjing":a<15?"siyang":a<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,// Monday is the first day of the week. +doy:7}}), +//! moment.js locale configuration +//! locale : Georgian [ka] +//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili +a.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(a){return/(წამი|წუთი|საათი|წელი)/.test(a)?a.replace(/ი$/,"ში"):a+"ში"},past:function(a){return/(წამი|წუთი|საათი|დღე|თვე)/.test(a)?a.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(a)?a.replace(/წელი$/,"წლის წინ"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},ordinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(a){return 0===a?a:1===a?a+"-ლი":a<20||a<=100&&a%20===0||a%100===0?"მე-"+a:a+"-ე"},week:{dow:1,doy:7}}); +//! moment.js locale configuration +//! locale : Kazakh [kk] +//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan +var bh={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};a.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},ordinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(a){var b=a%10,c=a>=100?100:null;return a+(bh[a]||bh[b]||bh[c])},week:{dow:1,// Monday is the first day of the week. +doy:7}}), +//! moment.js locale configuration +//! locale : Cambodian [km] +//! author : Kruy Vanna : https://github.com/kruyvanna +a.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Korean [ko] +//! author : Kyungwook, Park : https://github.com/kyungw00k +//! author : Jeeeyul Lee +a.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h시 m분",LTS:"A h시 m분 s초",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h시 m분",LLLL:"YYYY년 MMMM D일 dddd A h시 m분"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"일분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},ordinalParse:/\d{1,2}일/,ordinal:"%d일",meridiemParse:/오전|오후/,isPM:function(a){return"오후"===a},meridiem:function(a,b,c){return a<12?"오전":"오후"}}); +//! moment.js locale configuration +//! locale : Kyrgyz [ky] +//! author : Chyngyz Arystan uulu : https://github.com/chyngyz +var ch={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};a.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кече саат] LT",lastWeek:"[Өткен аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},ordinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(a){var b=a%10,c=a>=100?100:null;return a+(ch[a]||ch[b]||ch[c])},week:{dow:1,// Monday is the first day of the week. +doy:7}}),a.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){ +// Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule +switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:Jd,past:Kd,s:"e puer Sekonnen",m:Id,mm:"%d Minutten",h:Id,hh:"%d Stonnen",d:Id,dd:"%d Deeg",M:Id,MM:"%d Méint",y:Id,yy:"%d Joer"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Lao [lo] +//! author : Ryan Hart : https://github.com/ryanhart2 +a.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(a){return"ຕອນແລງ"===a},meridiem:function(a,b,c){return a<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},ordinalParse:/(ທີ່)\d{1,2}/,ordinal:function(a){return"ທີ່"+a}}); +//! moment.js locale configuration +//! locale : Lithuanian [lt] +//! author : Mindaugas MozÅ«ras : https://github.com/mmozuras +var dh={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};a.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjÅ«tis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_Å¡eÅ¡tadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_Å¡eÅ¡tadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Å eÅ¡".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Å ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Å iandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieÅ¡ %s",s:Md,m:Nd,mm:Qd,h:Nd,hh:Qd,d:Nd,dd:Qd,M:Nd,MM:Qd,y:Nd,yy:Qd},ordinalParse:/\d{1,2}-oji/,ordinal:function(a){return a+"-oji"},week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Latvian [lv] +//! author : Kristaps Karlsons : https://github.com/skakri +//! author : Jānis Elmeris : https://github.com/JanisE +var eh={m:"minÅ«tes_minÅ«tēm_minÅ«te_minÅ«tes".split("_"),mm:"minÅ«tes_minÅ«tēm_minÅ«te_minÅ«tes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneÅ¡a_mēneÅ¡iem_mēnesis_mēneÅ¡i".split("_"),MM:"mēneÅ¡a_mēneÅ¡iem_mēnesis_mēneÅ¡i".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};a.defineLocale("lv",{months:"janvāris_februāris_marts_aprÄ«lis_maijs_jÅ«nijs_jÅ«lijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jÅ«n_jÅ«l_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_treÅ¡diena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Å odien pulksten] LT",nextDay:"[RÄ«t pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:Ud,m:Td,mm:Sd,h:Td,hh:Sd,d:Td,dd:Sd,M:Td,MM:Sd,y:Td,yy:Sd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Montenegrin [me] +//! author : Miodrag Nikač : https://github.com/miodragnikac +var fh={words:{//Different grammatical cases +m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=fh.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+fh.correctGrammaticalCase(a,d)}};a.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[proÅ¡le] [nedjelje] [u] LT","[proÅ¡log] [ponedjeljka] [u] LT","[proÅ¡log] [utorka] [u] LT","[proÅ¡le] [srijede] [u] LT","[proÅ¡log] [četvrtka] [u] LT","[proÅ¡log] [petka] [u] LT","[proÅ¡le] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",m:fh.translate,mm:fh.translate,h:fh.translate,hh:fh.translate,d:"dan",dd:fh.translate,M:"mjesec",MM:fh.translate,y:"godinu",yy:fh.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:7}}), +//! moment.js locale configuration +//! locale : Maori [mi] +//! author : John Corrigan : https://github.com/johnideal +a.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_PoutÅ«-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_TÅ«rei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_TÅ«_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_TÅ«_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Macedonian [mk] +//! author : Borislav Mickov : https://github.com/B0k0 +a.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&c<20?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,// Monday is the first day of the week. +doy:7}}), +//! moment.js locale configuration +//! locale : Malayalam [ml] +//! author : Floyd Pink : https://github.com/floydpink +a.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_à´¶".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(a,b){return 12===a&&(a=0),"രാത്രി"===b&&a>=4||"ഉച്ച കഴിഞ്ഞ്"===b||"വൈകുന്നേരം"===b?a+12:a},meridiem:function(a,b,c){return a<4?"രാത്രി":a<12?"രാവിലെ":a<17?"ഉച്ച കഴിഞ്ഞ്":a<20?"വൈകുന്നേരം":"രാത്രി"}}); +//! moment.js locale configuration +//! locale : Marathi [mr] +//! author : Harshad Kale : https://github.com/kalehv +//! author : Vivek Athalye : https://github.com/vnathalye +var gh={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},hh={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:Vd,m:Vd,mm:Vd,h:Vd,hh:Vd,d:Vd,dd:Vd,M:Vd,MM:Vd,y:Vd,yy:Vd},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return hh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return gh[a]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात्री"===b?a<4?a:a+12:"सकाळी"===b?a:"दुपारी"===b?a>=10?a:a+12:"सायंकाळी"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"रात्री":a<10?"सकाळी":a<17?"दुपारी":a<20?"सायंकाळी":"रात्री"},week:{dow:0,// Sunday is the first day of the week. +doy:6}}), +//! moment.js locale configuration +//! locale : Malay [ms-my] +//! note : DEPRECATED, the correct one is [ms] +//! author : Weldan Jamili : https://github.com/weldan +a.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"tengahari":a<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,// Monday is the first day of the week. +doy:7}}), +//! moment.js locale configuration +//! locale : Malay [ms] +//! author : Weldan Jamili : https://github.com/weldan +a.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"tengahari":a<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,// Monday is the first day of the week. +doy:7}}); +//! moment.js locale configuration +//! locale : Burmese [my] +//! author : Squar team, mysquar.com +//! author : David Rossellat : https://github.com/gholadr +//! author : Tin Aung Lin : https://github.com/thanyawzinmin +var ih={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},jh={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};a.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(a){return a.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(a){return jh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return ih[a]})},week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Norwegian BokmÃ¥l [nb] +//! authors : Espen Hovlandsdal : https://github.com/rexxars +//! Sigurd Gartmann : https://github.com/sigurdga +a.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i gÃ¥r kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en mÃ¥ned",MM:"%d mÃ¥neder",y:"ett Ã¥r",yy:"%d Ã¥r"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Nepalese [ne] +//! author : suvash : https://github.com/suvash +var kh={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},lh={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return lh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return kh[a]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(a,b){return 12===a&&(a=0),"राति"===b?a<4?a:a+12:"बिहान"===b?a:"दिउँसो"===b?a>=10?a:a+12:"साँझ"===b?a+12:void 0},meridiem:function(a,b,c){return a<3?"राति":a<12?"बिहान":a<16?"दिउँसो":a<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,// Sunday is the first day of the week. +doy:6}}); +//! moment.js locale configuration +//! locale : Dutch (Belgium) [nl-be] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj +var mh="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),nh="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),oh=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],ph=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;a.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?nh[a.month()]:mh[a.month()]},monthsRegex:ph,monthsShortRegex:ph,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:oh,longMonthsParse:oh,shortMonthsParse:oh,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Dutch [nl] +//! author : Joris Röling : https://github.com/jorisroling +//! author : Jacob Middag : https://github.com/middagj +var qh="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),rh="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),sh=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],th=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;a.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?rh[a.month()]:qh[a.month()]},monthsRegex:th,monthsShortRegex:th,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:sh,longMonthsParse:sh,shortMonthsParse:sh,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Nynorsk [nn] +//! author : https://github.com/mechuwind +a.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_mÃ¥ndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mÃ¥n_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_mÃ¥_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I gÃ¥r klokka] LT",lastWeek:"[FøregÃ¥ande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein mÃ¥nad",MM:"%d mÃ¥nader",y:"eit Ã¥r",yy:"%d Ã¥r"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Punjabi (India) [pa-in] +//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit +var uh={1:"੧",2:"੨",3:"à©©",4:"੪",5:"à©«",6:"੬",7:"à©­",8:"à©®",9:"੯",0:"੦"},vh={"੧":"1","੨":"2","à©©":"3","੪":"4","à©«":"5","੬":"6","à©­":"7","à©®":"8","੯":"9","੦":"0"};a.defineLocale("pa-in",{ +// There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi. +months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(a){return a.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(a){return vh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return uh[a]})}, +// Punjabi notation for meridiems are quite fuzzy in practice. While there exists +// a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. +meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(a,b){return 12===a&&(a=0),"ਰਾਤ"===b?a<4?a:a+12:"ਸਵੇਰ"===b?a:"ਦੁਪਹਿਰ"===b?a>=10?a:a+12:"ਸ਼ਾਮ"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"ਰਾਤ":a<10?"ਸਵੇਰ":a<17?"ਦੁਪਹਿਰ":a<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,// Sunday is the first day of the week. +doy:6}}); +//! moment.js locale configuration +//! locale : Polish [pl] +//! author : Rafal Hirsz : https://github.com/evoL +var wh="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),xh="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");a.defineLocale("pl",{months:function(a,b){return""===b?"("+xh[a.month()]+"|"+wh[a.month()]+")":/D MMMM/.test(b)?xh[a.month()]:wh[a.month()]},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:Xd,mm:Xd,h:Xd,hh:Xd,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:Xd,y:"rok",yy:Xd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Portuguese (Brazil) [pt-br] +//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira +a.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){// Saturday + Sunday +return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº"}), +//! moment.js locale configuration +//! locale : Portuguese [pt] +//! author : Jefferson : https://github.com/jalex79 +a.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){// Saturday + Sunday +return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week. +doy:4}}),a.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:Yd,h:"o oră",hh:Yd,d:"o zi",dd:Yd,M:"o lună",MM:Yd,y:"un an",yy:Yd},week:{dow:1,// Monday is the first day of the week. +doy:7}});var yh=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i]; +// http://new.gramota.ru/spravka/rules/139-prop : § 103 +// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637 +// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753 +a.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{ +// по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ? +format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:yh,longMonthsParse:yh,shortMonthsParse:yh, +// полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки +monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, +// копия предыдущего +monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i, +// полные названия с падежами +monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i, +// Выражение, которое соотвествует только сокращённым формам +monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:$d,mm:$d,h:"час",hh:$d,d:"день",dd:$d,M:"месяц",MM:$d,y:"год",yy:$d},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(a){return/^(дня|вечера)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночи":a<12?"утра":a<17?"дня":"вечера"},ordinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,// Monday is the first day of the week. +doy:7}}), +//! moment.js locale configuration +//! locale : Northern Sami [se] +//! authors : BÃ¥rd Rolstad Henriksen : https://github.com/karamell +a.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Sinhalese [si] +//! author : Sampath Sitinamaluwa : https://github.com/sampathsris +/*jshint -W100*/ +a.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},ordinalParse:/\d{1,2} වැනි/,ordinal:function(a){return a+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(a){return"ප.ව."===a||"පස් වරු"===a},meridiem:function(a,b,c){return a>11?c?"ප.ව.":"පස් වරු":c?"පෙ.ව.":"පෙර වරු"}}); +//! moment.js locale configuration +//! locale : Slovak [sk] +//! author : Martin Minka : https://github.com/k2s +//! based on work of petrbela : https://github.com/petrbela +var zh="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),Ah="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");a.defineLocale("sk",{months:zh,monthsShort:Ah,weekdays:"nedeľa_pondelok_utorok_streda_Å¡tvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_Å¡t_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_Å¡t_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo Å¡tvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:ae,m:ae,mm:ae,h:ae,hh:ae,d:ae,dd:ae,M:ae,MM:ae,y:ae,yy:ae},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}),a.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejÅ¡njo] [nedeljo] [ob] LT";case 3:return"[prejÅ¡njo] [sredo] [ob] LT";case 6:return"[prejÅ¡njo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejÅ¡nji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:be,m:be,mm:be,h:be,hh:be,d:be,dd:be,M:be,MM:be,y:be,yy:be},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:7}}), +//! moment.js locale configuration +//! locale : Albanian [sq] +//! author : Flakërim Ismani : https://github.com/flakerimi +//! author : Menelion Elensúle : https://github.com/Oire +//! author : Oerd Cukalla : https://github.com/oerd +a.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(a){return"M"===a.charAt(0)},meridiem:function(a,b,c){return a<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Serbian Cyrillic [sr-cyrl] +//! author : Milan Janačković : https://github.com/milan-j +var Bh={words:{//Different grammatical cases +m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=Bh.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+Bh.correctGrammaticalCase(a,d)}};a.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var a=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:Bh.translate,mm:Bh.translate,h:Bh.translate,hh:Bh.translate,d:"дан",dd:Bh.translate,M:"месец",MM:Bh.translate,y:"годину",yy:Bh.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:7}}); +//! moment.js locale configuration +//! locale : Serbian [sr] +//! author : Milan Janačković : https://github.com/milan-j +var Ch={words:{//Different grammatical cases +m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=Ch.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+Ch.correctGrammaticalCase(a,d)}};a.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[proÅ¡le] [nedelje] [u] LT","[proÅ¡log] [ponedeljka] [u] LT","[proÅ¡log] [utorka] [u] LT","[proÅ¡le] [srede] [u] LT","[proÅ¡log] [četvrtka] [u] LT","[proÅ¡log] [petka] [u] LT","[proÅ¡le] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:Ch.translate,mm:Ch.translate,h:Ch.translate,hh:Ch.translate,d:"dan",dd:Ch.translate,M:"mesec",MM:Ch.translate,y:"godinu",yy:Ch.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:7}}), +//! moment.js locale configuration +//! locale : siSwati [ss] +//! author : Nicolai Davies : https://github.com/nicolaidavies +a.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(a,b,c){return a<11?"ekuseni":a<15?"emini":a<19?"entsambama":"ebusuku"},meridiemHour:function(a,b){return 12===a&&(a=0),"ekuseni"===b?a:"emini"===b?a>=11?a:a+12:"entsambama"===b||"ebusuku"===b?0===a?0:a+12:void 0},ordinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Swedish [sv] +//! author : Jens Alm : https://github.com/ulmus +a.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_mÃ¥ndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mÃ¥n_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_mÃ¥_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[IgÃ¥r] LT",nextWeek:"[PÃ¥] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"nÃ¥gra sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en mÃ¥nad",MM:"%d mÃ¥nader",y:"ett Ã¥r",yy:"%d Ã¥r"},ordinalParse:/\d{1,2}(e|a)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":"e";return a+c},week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Swahili [sw] +//! author : Fahad Kassim : https://github.com/fadsel +a.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,// Monday is the first day of the week. +doy:7}}); +//! moment.js locale configuration +//! locale : Tamil [ta] +//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404 +var Dh={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},Eh={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};a.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},ordinalParse:/\d{1,2}வது/,ordinal:function(a){return a+"வது"},preparse:function(a){return a.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(a){return Eh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Dh[a]})}, +// refer http://ta.wikipedia.org/s/1er1 +meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(a,b,c){return a<2?" யாமம்":a<6?" வைகறை":a<10?" காலை":a<14?" நண்பகல்":a<18?" எற்பாடு":a<22?" மாலை":" யாமம்"},meridiemHour:function(a,b){return 12===a&&(a=0),"யாமம்"===b?a<2?a:a+12:"வைகறை"===b||"காலை"===b?a:"நண்பகல்"===b&&a>=10?a:a+12},week:{dow:0,// Sunday is the first day of the week. +doy:6}}), +//! moment.js locale configuration +//! locale : Telugu [te] +//! author : Krishna Chaitanya Thota : https://github.com/kcthota +a.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_à°¶".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},ordinalParse:/\d{1,2}à°µ/,ordinal:"%dà°µ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(a,b){return 12===a&&(a=0),"రాత్రి"===b?a<4?a:a+12:"ఉదయం"===b?a:"మధ్యాహ్నం"===b?a>=10?a:a+12:"సాయంత్రం"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"రాత్రి":a<10?"ఉదయం":a<17?"మధ్యాహ్నం":a<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,// Sunday is the first day of the week. +doy:6}}), +//! moment.js locale configuration +//! locale : Tetun Dili (East Timor) [tet] +//! author : Joshua Brooks : https://github.com/joshbrooks +//! author : Onorio De J. Afonso : https://github.com/marobo +a.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sext_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Sex_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutus %d",h:"horas ida",hh:"horas %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week. +doy:4}}), +//! moment.js locale configuration +//! locale : Thai [th] +//! author : Kridsada Thanabulpong : https://github.com/sirn +a.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),// yes, three characters difference +weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY/MM/DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(a){return"หลังเที่ยง"===a},meridiem:function(a,b,c){return a<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}}), +//! moment.js locale configuration +//! locale : Tagalog (Philippines) [tl-ph] +//! author : Dan Hagman : https://github.com/hagmandan +a.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},ordinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Klingon [tlh] +//! author : Dominika Kruk : https://github.com/amaranthrose +var Fh="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");a.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:ce,past:de,s:"puS lup",m:"wa’ tup",mm:ee,h:"wa’ rep",hh:ee,d:"wa’ jaj",dd:ee,M:"wa’ jar",MM:ee,y:"wa’ DIS",yy:ee},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}); +//! moment.js locale configuration +//! locale : Turkish [tr] +//! authors : Erhan Gundogan : https://github.com/erhangundogan, +//! Burak Yiğit Kaya: https://github.com/BYK +var Gh={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"}; +//! moment.js locale configuration +//! locale : Talossan [tzl] +//! author : Robin van der Vliet : https://github.com/robin0van0der0v +//! author : Iustì Canun +// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. +// This is currently too difficult (maybe even impossible) to add. +//! moment.js locale configuration +//! locale : Central Atlas Tamazight Latin [tzm-latn] +//! author : Abdel Said : https://github.com/abdelsaid +//! moment.js locale configuration +//! locale : Central Atlas Tamazight [tzm] +//! author : Abdel Said : https://github.com/abdelsaid +//! moment.js locale configuration +//! locale : Uzbek [uz] +//! author : Sardor Muminov : https://github.com/muminoff +//! moment.js locale configuration +//! locale : Vietnamese [vi] +//! author : Bang Nguyen : https://github.com/bangnk +//! moment.js locale configuration +//! locale : Pseudo [x-pseudo] +//! author : Andrew Hood : https://github.com/andrewhood125 +//! moment.js locale configuration +//! locale : Yoruba Nigeria [yo] +//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe +//! moment.js locale configuration +//! locale : Chinese (China) [zh-cn] +//! author : suupic : https://github.com/suupic +//! author : Zeno Zeng : https://github.com/zenozeng +//! moment.js locale configuration +//! locale : Chinese (Hong Kong) [zh-hk] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris +//! author : Konstantin : https://github.com/skfd +//! moment.js locale configuration +//! locale : Chinese (Taiwan) [zh-tw] +//! author : Ben : https://github.com/ben-lin +//! author : Chris Lam : https://github.com/hehachris +return a.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(a){if(0===a)// special case for zero +return a+"'ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(Gh[b]||Gh[c]||Gh[d])},week:{dow:1,// Monday is the first day of the week. +doy:7}}),a.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(a){return"d'o"===a.toLowerCase()},meridiem:function(a,b,c){return a>11?c?"d'o":"D'O":c?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:ge,m:ge,mm:ge,h:ge,hh:ge,d:ge,dd:ge,M:ge,MM:ge,y:ge,yy:ge},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week. +doy:4}}),a.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_É£wÅ¡t_Å¡wtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,// Saturday is the first day of the week. +doy:12}}),a.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ â´´] LT",nextDay:"[ⴰⵙⴽⴰ â´´] LT",nextWeek:"dddd [â´´] LT",lastDay:"[ⴰⵚⴰⵏⵜ â´´] LT",lastWeek:"dddd [â´´] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"â´°âµ¢oⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,// Saturday is the first day of the week. +doy:12}}),a.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:je,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:ke("[Сьогодні "),nextDay:ke("[Завтра "),lastDay:ke("[Вчора "),nextWeek:ke("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return ke("[Минулої] dddd [").call(this);case 1:case 2:case 4:return ke("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:ie,mm:ie,h:"годину",hh:ie,d:"день",dd:ie,M:"місяць",MM:ie,y:"рік",yy:ie}, +// M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason +meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(a){return/^(дня|вечора)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночі":a<12?"ранку":a<17?"дня":"вечора"},ordinalParse:/\d{1,2}-(й|го)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,// Monday is the first day of the week. +doy:7}}),a.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,// Monday is the first day of the week. +doy:7}}),a.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tÆ°_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(a){return/^ch$/i.test(a)},meridiem:function(a,b,c){return a<12?c?"sa":"SA":c?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},ordinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,// Monday is the first day of the week. +doy:4}}),a.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week. +doy:4}}),a.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},ordinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,// Monday is the first day of the week. +doy:4}}),a.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah点mm分",LTS:"Ah点m分s秒",L:"YYYY-MM-DD",LL:"YYYYå¹´MMMD日",LLL:"YYYYå¹´MMMD日Ah点mm分",LLLL:"YYYYå¹´MMMD日ddddAh点mm分",l:"YYYY-MM-DD",ll:"YYYYå¹´MMMD日",lll:"YYYYå¹´MMMD日Ah点mm分",llll:"YYYYå¹´MMMD日ddddAh点mm分"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"下午"===b||"晚上"===b?a+12:a>=11?a:a+12},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:function(){return 0===this.minutes()?"[今天]Ah[点整]":"[今天]LT"},nextDay:function(){return 0===this.minutes()?"[明天]Ah[点整]":"[明天]LT"},lastDay:function(){return 0===this.minutes()?"[昨天]Ah[点整]":"[昨天]LT"},nextWeek:function(){var b,c;return b=a().startOf("week"),c=this.diff(b,"days")>=7?"[下]":"[本]",0===this.minutes()?c+"dddAh点整":c+"dddAh点mm"},lastWeek:function(){var b,c;return b=a().startOf("week"),c=this.unix()=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 å¹´",yy:"%d å¹´"}}),a.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah點mm分",LTS:"Ah點m分s秒",L:"YYYYå¹´MMMD日",LL:"YYYYå¹´MMMD日",LLL:"YYYYå¹´MMMD日Ah點mm分",LLLL:"YYYYå¹´MMMD日ddddAh點mm分",l:"YYYYå¹´MMMD日",ll:"YYYYå¹´MMMD日",lll:"YYYYå¹´MMMD日Ah點mm分",llll:"YYYYå¹´MMMD日ddddAh點mm分"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 å¹´",yy:"%d å¹´"}}),a.locale("en"),a}); \ No newline at end of file diff --git a/www/plugins-dist/organiseur/lib/moment/moment.js b/www/plugins-dist/organiseur/lib/moment/moment.js new file mode 100644 index 00000000..f2269a1c --- /dev/null +++ b/www/plugins-dist/organiseur/lib/moment/moment.js @@ -0,0 +1,4301 @@ +//! moment.js +//! version : 2.17.1 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + global.moment = factory() +}(this, (function () { 'use strict'; + +var hookCallback; + +function hooks () { + return hookCallback.apply(null, arguments); +} + +// This is done to register the method called with moment() +// without creating circular dependencies. +function setHookCallback (callback) { + hookCallback = callback; +} + +function isArray(input) { + return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; +} + +function isObject(input) { + // IE8 will treat undefined and null as object if it wasn't for + // input != null + return input != null && Object.prototype.toString.call(input) === '[object Object]'; +} + +function isObjectEmpty(obj) { + var k; + for (k in obj) { + // even if its not own property I'd still call it non-empty + return false; + } + return true; +} + +function isNumber(input) { + return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]'; +} + +function isDate(input) { + return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; +} + +function map(arr, fn) { + var res = [], i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; +} + +function hasOwnProp(a, b) { + return Object.prototype.hasOwnProperty.call(a, b); +} + +function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } + + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } + + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } + + return a; +} + +function createUTC (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, true).utc(); +} + +function defaultParsingFlags() { + // We need to deep clone this object. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso : false, + parsedDateParts : [], + meridiem : null + }; +} + +function getParsingFlags(m) { + if (m._pf == null) { + m._pf = defaultParsingFlags(); + } + return m._pf; +} + +var some; +if (Array.prototype.some) { + some = Array.prototype.some; +} else { + some = function (fun) { + var t = Object(this); + var len = t.length >>> 0; + + for (var i = 0; i < len; i++) { + if (i in t && fun.call(this, t[i], i, t)) { + return true; + } + } + + return false; + }; +} + +var some$1 = some; + +function isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m); + var parsedParts = some$1.call(flags.parsedDateParts, function (i) { + return i != null; + }); + var isNowValid = !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); + + if (m._strict) { + isNowValid = isNowValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } + else { + return isNowValid; + } + } + return m._isValid; +} + +function createInvalid (flags) { + var m = createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } + else { + getParsingFlags(m).userInvalidated = true; + } + + return m; +} + +function isUndefined(input) { + return input === void 0; +} + +// Plugins that add properties should also add the key here (null value), +// so we can properly clone ourselves. +var momentProperties = hooks.momentProperties = []; + +function copyConfig(to, from) { + var i, prop, val; + + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject; + } + if (!isUndefined(from._i)) { + to._i = from._i; + } + if (!isUndefined(from._f)) { + to._f = from._f; + } + if (!isUndefined(from._l)) { + to._l = from._l; + } + if (!isUndefined(from._strict)) { + to._strict = from._strict; + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm; + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC; + } + if (!isUndefined(from._offset)) { + to._offset = from._offset; + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from); + } + if (!isUndefined(from._locale)) { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i in momentProperties) { + prop = momentProperties[i]; + val = from[prop]; + if (!isUndefined(val)) { + to[prop] = val; + } + } + } + + return to; +} + +var updateInProgress = false; + +// Moment prototype object +function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + if (!this.isValid()) { + this._d = new Date(NaN); + } + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + hooks.updateOffset(this); + updateInProgress = false; + } +} + +function isMoment (obj) { + return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); +} + +function absFloor (number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } +} + +function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; +} + +// compare two arrays, return the number of differences +function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; +} + +function warn(msg) { + if (hooks.suppressDeprecationWarnings === false && + (typeof console !== 'undefined') && console.warn) { + console.warn('Deprecation warning: ' + msg); + } +} + +function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(null, msg); + } + if (firstTime) { + var args = []; + var arg; + for (var i = 0; i < arguments.length; i++) { + arg = ''; + if (typeof arguments[i] === 'object') { + arg += '\n[' + i + '] '; + for (var key in arguments[0]) { + arg += key + ': ' + arguments[0][key] + ', '; + } + arg = arg.slice(0, -2); // Remove trailing comma and space + } else { + arg = arguments[i]; + } + args.push(arg); + } + warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); +} + +var deprecations = {}; + +function deprecateSimple(name, msg) { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(name, msg); + } + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } +} + +hooks.suppressDeprecationWarnings = false; +hooks.deprecationHandler = null; + +function isFunction(input) { + return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; +} + +function set (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _ordinalParseLenient. + this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); +} + +function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + for (prop in parentConfig) { + if (hasOwnProp(parentConfig, prop) && + !hasOwnProp(childConfig, prop) && + isObject(parentConfig[prop])) { + // make sure changes to properties don't modify parent config + res[prop] = extend({}, res[prop]); + } + } + return res; +} + +function Locale(config) { + if (config != null) { + this.set(config); + } +} + +var keys; + +if (Object.keys) { + keys = Object.keys; +} else { + keys = function (obj) { + var i, res = []; + for (i in obj) { + if (hasOwnProp(obj, i)) { + res.push(i); + } + } + return res; + }; +} + +var keys$1 = keys; + +var defaultCalendar = { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' +}; + +function calendar (key, mom, now) { + var output = this._calendar[key] || this._calendar['sameElse']; + return isFunction(output) ? output.call(mom, now) : output; +} + +var defaultLongDateFormat = { + LTS : 'h:mm:ss A', + LT : 'h:mm A', + L : 'MM/DD/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY h:mm A', + LLLL : 'dddd, MMMM D, YYYY h:mm A' +}; + +function longDateFormat (key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + + if (format || !formatUpper) { + return format; + } + + this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); + + return this._longDateFormat[key]; +} + +var defaultInvalidDate = 'Invalid date'; + +function invalidDate () { + return this._invalidDate; +} + +var defaultOrdinal = '%d'; +var defaultOrdinalParse = /\d{1,2}/; + +function ordinal (number) { + return this._ordinal.replace('%d', number); +} + +var defaultRelativeTime = { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' +}; + +function relativeTime (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (isFunction(output)) ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); +} + +function pastFuture (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return isFunction(format) ? format(output) : format.replace(/%s/i, output); +} + +var aliases = {}; + +function addUnitAlias (unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; +} + +function normalizeUnits(units) { + return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; +} + +function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; +} + +var priorities = {}; + +function addUnitPriority(unit, priority) { + priorities[unit] = priority; +} + +function getPrioritizedUnits(unitsObj) { + var units = []; + for (var u in unitsObj) { + units.push({unit: u, priority: priorities[u]}); + } + units.sort(function (a, b) { + return a.priority - b.priority; + }); + return units; +} + +function makeGetSet (unit, keepTime) { + return function (value) { + if (value != null) { + set$1(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); + } + }; +} + +function get (mom, unit) { + return mom.isValid() ? + mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; +} + +function set$1 (mom, unit, value) { + if (mom.isValid()) { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } +} + +// MOMENTS + +function stringGet (units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; +} + + +function stringSet (units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units); + for (var i = 0; i < prioritized.length; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; +} + +function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; +} + +var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; + +var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; + +var formatFunctions = {}; + +var formatTokenFunctions = {}; + +// token: 'M' +// padded: ['MM', 2] +// ordinal: 'Mo' +// callback: function () { this.month() + 1 } +function addFormatToken (token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal(func.apply(this, arguments), token); + }; + } +} + +function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); +} + +function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = '', i; + for (i = 0; i < length; i++) { + output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; + } + return output; + }; +} + +// format date using native date object +function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); + + return formatFunctions[format](m); +} + +function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; +} + +var match1 = /\d/; // 0 - 9 +var match2 = /\d\d/; // 00 - 99 +var match3 = /\d{3}/; // 000 - 999 +var match4 = /\d{4}/; // 0000 - 9999 +var match6 = /[+-]?\d{6}/; // -999999 - 999999 +var match1to2 = /\d\d?/; // 0 - 99 +var match3to4 = /\d\d\d\d?/; // 999 - 9999 +var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 +var match1to3 = /\d{1,3}/; // 0 - 999 +var match1to4 = /\d{1,4}/; // 0 - 9999 +var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 + +var matchUnsigned = /\d+/; // 0 - inf +var matchSigned = /[+-]?\d+/; // -inf - inf + +var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z +var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z + +var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 + +// any word (or two) characters or numbers including two/three word month in arabic. +// includes scottish gaelic two word and hyphenated months +var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; + + +var regexes = {}; + +function addRegexToken (token, regex, strictRegex) { + regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { + return (isStrict && strictRegex) ? strictRegex : regex; + }; +} + +function getParseRegexForToken (token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); +} + +// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript +function unescapeFormat(s) { + return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + })); +} + +function regexEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); +} + +var tokens = {}; + +function addParseToken (token, callback) { + var i, func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (isNumber(callback)) { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } +} + +function addWeekParseToken (token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); +} + +function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } +} + +var YEAR = 0; +var MONTH = 1; +var DATE = 2; +var HOUR = 3; +var MINUTE = 4; +var SECOND = 5; +var MILLISECOND = 6; +var WEEK = 7; +var WEEKDAY = 8; + +var indexOf; + +if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf; +} else { + indexOf = function (o) { + // I know + var i; + for (i = 0; i < this.length; ++i) { + if (this[i] === o) { + return i; + } + } + return -1; + }; +} + +var indexOf$1 = indexOf; + +function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); +} + +// FORMATTING + +addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; +}); + +addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); +}); + +addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); +}); + +// ALIASES + +addUnitAlias('month', 'M'); + +// PRIORITY + +addUnitPriority('month', 8); + +// PARSING + +addRegexToken('M', match1to2); +addRegexToken('MM', match1to2, match2); +addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict); +}); +addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict); +}); + +addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; +}); + +addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; + } +}); + +// LOCALES + +var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/; +var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); +function localeMonths (m, format) { + if (!m) { + return this._months; + } + return isArray(this._months) ? this._months[m.month()] : + this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()]; +} + +var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); +function localeMonthsShort (m, format) { + if (!m) { + return this._monthsShort; + } + return isArray(this._monthsShort) ? this._monthsShort[m.month()] : + this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; +} + +function handleStrictParse(monthName, format, strict) { + var i, ii, mom, llc = monthName.toLocaleLowerCase(); + if (!this._monthsParse) { + // this is not used + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + for (i = 0; i < 12; ++i) { + mom = createUTC([2000, i]); + this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase(); + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'MMM') { + ii = indexOf$1.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'MMM') { + ii = indexOf$1.call(this._shortMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._longMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } +} + +function localeMonthsParse (monthName, format, strict) { + var i, mom, regex; + + if (this._monthsParseExact) { + return handleStrictParse.call(this, monthName, format, strict); + } + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + // TODO: add sorting + // Sorting makes sure if one month (or abbr) is a prefix of another + // see sorting in computeMonthsParse + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); + this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); + } + if (!strict && !this._monthsParse[i]) { + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { + return i; + } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } +} + +// MOMENTS + +function setMonth (mom, value) { + var dayOfMonth; + + if (!mom.isValid()) { + // No op + return mom; + } + + if (typeof value === 'string') { + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (!isNumber(value)) { + return mom; + } + } + } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; +} + +function getSetMonth (value) { + if (value != null) { + setMonth(this, value); + hooks.updateOffset(this, true); + return this; + } else { + return get(this, 'Month'); + } +} + +function getDaysInMonth () { + return daysInMonth(this.year(), this.month()); +} + +var defaultMonthsShortRegex = matchWord; +function monthsShortRegex (isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsShortStrictRegex; + } else { + return this._monthsShortRegex; + } + } else { + if (!hasOwnProp(this, '_monthsShortRegex')) { + this._monthsShortRegex = defaultMonthsShortRegex; + } + return this._monthsShortStrictRegex && isStrict ? + this._monthsShortStrictRegex : this._monthsShortRegex; + } +} + +var defaultMonthsRegex = matchWord; +function monthsRegex (isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsStrictRegex; + } else { + return this._monthsRegex; + } + } else { + if (!hasOwnProp(this, '_monthsRegex')) { + this._monthsRegex = defaultMonthsRegex; + } + return this._monthsStrictRegex && isStrict ? + this._monthsStrictRegex : this._monthsRegex; + } +} + +function computeMonthsParse () { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var shortPieces = [], longPieces = [], mixedPieces = [], + i, mom; + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + shortPieces.push(this.monthsShort(mom, '')); + longPieces.push(this.months(mom, '')); + mixedPieces.push(this.months(mom, '')); + mixedPieces.push(this.monthsShort(mom, '')); + } + // Sorting makes sure if one month (or abbr) is a prefix of another it + // will match the longer piece. + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 12; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + } + for (i = 0; i < 24; i++) { + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._monthsShortRegex = this._monthsRegex; + this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); + this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); +} + +// FORMATTING + +addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? '' + y : '+' + y; +}); + +addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; +}); + +addFormatToken(0, ['YYYY', 4], 0, 'year'); +addFormatToken(0, ['YYYYY', 5], 0, 'year'); +addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + +// ALIASES + +addUnitAlias('year', 'y'); + +// PRIORITIES + +addUnitPriority('year', 1); + +// PARSING + +addRegexToken('Y', matchSigned); +addRegexToken('YY', match1to2, match2); +addRegexToken('YYYY', match1to4, match4); +addRegexToken('YYYYY', match1to6, match6); +addRegexToken('YYYYYY', match1to6, match6); + +addParseToken(['YYYYY', 'YYYYYY'], YEAR); +addParseToken('YYYY', function (input, array) { + array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); +}); +addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); +}); +addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); +}); + +// HELPERS + +function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; +} + +function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; +} + +// HOOKS + +hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); +}; + +// MOMENTS + +var getSetYear = makeGetSet('FullYear', true); + +function getIsLeapYear () { + return isLeapYear(this.year()); +} + +function createDate (y, m, d, h, M, s, ms) { + //can't just apply() to create a date: + //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + var date = new Date(y, m, d, h, M, s, ms); + + //the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { + date.setFullYear(y); + } + return date; +} + +function createUTCDate (y) { + var date = new Date(Date.UTC.apply(null, arguments)); + + //the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y); + } + return date; +} + +// start-of-first-week - start-of-year +function firstWeekOffset(year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + dow - doy, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; + + return -fwdlw + fwd - 1; +} + +//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday +function dayOfYearFromWeeks(year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, + weekOffset = firstWeekOffset(year, dow, doy), + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, resDayOfYear; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } + + return { + year: resYear, + dayOfYear: resDayOfYear + }; +} + +function weekOfYear(mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), + week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, + resWeek, resYear; + + if (week < 1) { + resYear = mom.year() - 1; + resWeek = week + weeksInYear(resYear, dow, doy); + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy); + resYear = mom.year() + 1; + } else { + resYear = mom.year(); + resWeek = week; + } + + return { + week: resWeek, + year: resYear + }; +} + +function weeksInYear(year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy); + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; +} + +// FORMATTING + +addFormatToken('w', ['ww', 2], 'wo', 'week'); +addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + +// ALIASES + +addUnitAlias('week', 'w'); +addUnitAlias('isoWeek', 'W'); + +// PRIORITIES + +addUnitPriority('week', 5); +addUnitPriority('isoWeek', 5); + +// PARSING + +addRegexToken('w', match1to2); +addRegexToken('ww', match1to2, match2); +addRegexToken('W', match1to2); +addRegexToken('WW', match1to2, match2); + +addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { + week[token.substr(0, 1)] = toInt(input); +}); + +// HELPERS + +// LOCALES + +function localeWeek (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; +} + +var defaultLocaleWeek = { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. +}; + +function localeFirstDayOfWeek () { + return this._week.dow; +} + +function localeFirstDayOfYear () { + return this._week.doy; +} + +// MOMENTS + +function getSetWeek (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); +} + +function getSetISOWeek (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); +} + +// FORMATTING + +addFormatToken('d', 0, 'do', 'day'); + +addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); +}); + +addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); +}); + +addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); +}); + +addFormatToken('e', 0, 0, 'weekday'); +addFormatToken('E', 0, 0, 'isoWeekday'); + +// ALIASES + +addUnitAlias('day', 'd'); +addUnitAlias('weekday', 'e'); +addUnitAlias('isoWeekday', 'E'); + +// PRIORITY +addUnitPriority('day', 11); +addUnitPriority('weekday', 11); +addUnitPriority('isoWeekday', 11); + +// PARSING + +addRegexToken('d', match1to2); +addRegexToken('e', match1to2); +addRegexToken('E', match1to2); +addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict); +}); +addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict); +}); +addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict); +}); + +addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; + } +}); + +addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); +}); + +// HELPERS + +function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; +} + +function parseIsoWeekday(input, locale) { + if (typeof input === 'string') { + return locale.weekdaysParse(input) % 7 || 7; + } + return isNaN(input) ? null : input; +} + +// LOCALES + +var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); +function localeWeekdays (m, format) { + if (!m) { + return this._weekdays; + } + return isArray(this._weekdays) ? this._weekdays[m.day()] : + this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; +} + +var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); +function localeWeekdaysShort (m) { + return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort; +} + +var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); +function localeWeekdaysMin (m) { + return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin; +} + +function handleStrictParse$1(weekdayName, format, strict) { + var i, ii, mom, llc = weekdayName.toLocaleLowerCase(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._shortWeekdaysParse = []; + this._minWeekdaysParse = []; + + for (i = 0; i < 7; ++i) { + mom = createUTC([2000, 1]).day(i); + this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase(); + this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase(); + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'dddd') { + ii = indexOf$1.call(this._weekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'dddd') { + ii = indexOf$1.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf$1.call(this._minWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf$1.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } +} + +function localeWeekdaysParse (weekdayName, format, strict) { + var i, mom, regex; + + if (this._weekdaysParseExact) { + return handleStrictParse$1.call(this, weekdayName, format, strict); + } + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._minWeekdaysParse = []; + this._shortWeekdaysParse = []; + this._fullWeekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + + mom = createUTC([2000, 1]).day(i); + if (strict && !this._fullWeekdaysParse[i]) { + this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i'); + this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i'); + this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i'); + } + if (!this._weekdaysParse[i]) { + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { + return i; + } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } +} + +// MOMENTS + +function getSetDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } +} + +function getSetLocaleDayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); +} + +function getSetISODayOfWeek (input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + + if (input != null) { + var weekday = parseIsoWeekday(input, this.localeData()); + return this.day(this.day() % 7 ? weekday : weekday - 7); + } else { + return this.day() || 7; + } +} + +var defaultWeekdaysRegex = matchWord; +function weekdaysRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysStrictRegex; + } else { + return this._weekdaysRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysRegex')) { + this._weekdaysRegex = defaultWeekdaysRegex; + } + return this._weekdaysStrictRegex && isStrict ? + this._weekdaysStrictRegex : this._weekdaysRegex; + } +} + +var defaultWeekdaysShortRegex = matchWord; +function weekdaysShortRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysShortStrictRegex; + } else { + return this._weekdaysShortRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysShortRegex')) { + this._weekdaysShortRegex = defaultWeekdaysShortRegex; + } + return this._weekdaysShortStrictRegex && isStrict ? + this._weekdaysShortStrictRegex : this._weekdaysShortRegex; + } +} + +var defaultWeekdaysMinRegex = matchWord; +function weekdaysMinRegex (isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysMinStrictRegex; + } else { + return this._weekdaysMinRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysMinRegex')) { + this._weekdaysMinRegex = defaultWeekdaysMinRegex; + } + return this._weekdaysMinStrictRegex && isStrict ? + this._weekdaysMinStrictRegex : this._weekdaysMinRegex; + } +} + + +function computeWeekdaysParse () { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], + i, mom, minp, shortp, longp; + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, 1]).day(i); + minp = this.weekdaysMin(mom, ''); + shortp = this.weekdaysShort(mom, ''); + longp = this.weekdays(mom, ''); + minPieces.push(minp); + shortPieces.push(shortp); + longPieces.push(longp); + mixedPieces.push(minp); + mixedPieces.push(shortp); + mixedPieces.push(longp); + } + // Sorting makes sure if one weekday (or abbr) is a prefix of another it + // will match the longer piece. + minPieces.sort(cmpLenRev); + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 7; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + mixedPieces[i] = regexEscape(mixedPieces[i]); + } + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._weekdaysShortRegex = this._weekdaysRegex; + this._weekdaysMinRegex = this._weekdaysRegex; + + this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); + this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); + this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i'); +} + +// FORMATTING + +function hFormat() { + return this.hours() % 12 || 12; +} + +function kFormat() { + return this.hours() || 24; +} + +addFormatToken('H', ['HH', 2], 0, 'hour'); +addFormatToken('h', ['hh', 2], 0, hFormat); +addFormatToken('k', ['kk', 2], 0, kFormat); + +addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); +}); + +addFormatToken('hmmss', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2); +}); + +addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2); +}); + +addFormatToken('Hmmss', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2); +}); + +function meridiem (token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); + }); +} + +meridiem('a', true); +meridiem('A', false); + +// ALIASES + +addUnitAlias('hour', 'h'); + +// PRIORITY +addUnitPriority('hour', 13); + +// PARSING + +function matchMeridiem (isStrict, locale) { + return locale._meridiemParse; +} + +addRegexToken('a', matchMeridiem); +addRegexToken('A', matchMeridiem); +addRegexToken('H', match1to2); +addRegexToken('h', match1to2); +addRegexToken('HH', match1to2, match2); +addRegexToken('hh', match1to2, match2); + +addRegexToken('hmm', match3to4); +addRegexToken('hmmss', match5to6); +addRegexToken('Hmm', match3to4); +addRegexToken('Hmmss', match5to6); + +addParseToken(['H', 'HH'], HOUR); +addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; +}); +addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; +}); +addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + getParsingFlags(config).bigHour = true; +}); +addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4; + var pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + getParsingFlags(config).bigHour = true; +}); +addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); +}); +addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4; + var pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); +}); + +// LOCALES + +function localeIsPM (input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); +} + +var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; +function localeMeridiem (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } +} + + +// MOMENTS + +// Setting the hour should keep the time, because the user explicitly +// specified which hour he wants. So trying to maintain the same hour (in +// a new timezone) makes sense. Adding/subtracting hours does not follow +// this rule. +var getSetHour = makeGetSet('Hours', true); + +// months +// week +// weekdays +// meridiem +var baseConfig = { + calendar: defaultCalendar, + longDateFormat: defaultLongDateFormat, + invalidDate: defaultInvalidDate, + ordinal: defaultOrdinal, + ordinalParse: defaultOrdinalParse, + relativeTime: defaultRelativeTime, + + months: defaultLocaleMonths, + monthsShort: defaultLocaleMonthsShort, + + week: defaultLocaleWeek, + + weekdays: defaultLocaleWeekdays, + weekdaysMin: defaultLocaleWeekdaysMin, + weekdaysShort: defaultLocaleWeekdaysShort, + + meridiemParse: defaultLocaleMeridiemParse +}; + +// internal storage for locale config files +var locales = {}; +var localeFamilies = {}; +var globalLocale; + +function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; +} + +// pick the locale from the array +// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each +// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root +function chooseLocale(names) { + var i = 0, j, next, locale, split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return null; +} + +function loadLocale(name) { + var oldLocale = null; + // TODO: Find a better way to register and load all the locales in Node + if (!locales[name] && (typeof module !== 'undefined') && + module && module.exports) { + try { + oldLocale = globalLocale._abbr; + require('./locale/' + name); + // because defineLocale currently also sets the global locale, we + // want to undo that for lazy loaded locales + getSetGlobalLocale(oldLocale); + } catch (e) { } + } + return locales[name]; +} + +// This function will load locale and then set the global locale. If +// no arguments are passed in, it will simply return the current global +// locale key. +function getSetGlobalLocale (key, values) { + var data; + if (key) { + if (isUndefined(values)) { + data = getLocale(key); + } + else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } + } + + return globalLocale._abbr; +} + +function defineLocale (name, config) { + if (config !== null) { + var parentConfig = baseConfig; + config.abbr = name; + if (locales[name] != null) { + deprecateSimple('defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale ' + + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'); + parentConfig = locales[name]._config; + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + parentConfig = locales[config.parentLocale]._config; + } else { + if (!localeFamilies[config.parentLocale]) { + localeFamilies[config.parentLocale] = []; + } + localeFamilies[config.parentLocale].push({ + name: name, + config: config + }); + return null; + } + } + locales[name] = new Locale(mergeConfigs(parentConfig, config)); + + if (localeFamilies[name]) { + localeFamilies[name].forEach(function (x) { + defineLocale(x.name, x.config); + }); + } + + // backwards compat for now: also set the locale + // make sure we set the locale AFTER all child locales have been + // created, so we won't end up with the child locale set. + getSetGlobalLocale(name); + + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } +} + +function updateLocale(name, config) { + if (config != null) { + var locale, parentConfig = baseConfig; + // MERGE + if (locales[name] != null) { + parentConfig = locales[name]._config; + } + config = mergeConfigs(parentConfig, config); + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + + // backwards compat for now: also set the locale + getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; +} + +// returns locale data +function getLocale (key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); +} + +function listLocales() { + return keys$1(locales); +} + +function checkOverflow (m) { + var overflow; + var a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : + a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : + a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : + a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : + a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : + a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : + -1; + + if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + if (getParsingFlags(m)._overflowWeeks && overflow === -1) { + overflow = WEEK; + } + if (getParsingFlags(m)._overflowWeekday && overflow === -1) { + overflow = WEEKDAY; + } + + getParsingFlags(m).overflow = overflow; + } + + return m; +} + +// iso 8601 regex +// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) +var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; +var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; + +var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; + +var isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], + ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], + ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], + ['GGGG-[W]WW', /\d{4}-W\d\d/, false], + ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-MM', /\d{4}-\d\d/, false], + ['YYYYYYMMDD', /[+-]\d{10}/], + ['YYYYMMDD', /\d{8}/], + // YYYYMM is NOT allowed by the standard + ['GGGG[W]WWE', /\d{4}W\d{3}/], + ['GGGG[W]WW', /\d{4}W\d{2}/, false], + ['YYYYDDD', /\d{7}/] +]; + +// iso time formats and regexes +var isoTimes = [ + ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], + ['HH:mm:ss', /\d\d:\d\d:\d\d/], + ['HH:mm', /\d\d:\d\d/], + ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], + ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], + ['HHmmss', /\d\d\d\d\d\d/], + ['HHmm', /\d\d\d\d/], + ['HH', /\d\d/] +]; + +var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; + +// date from iso format +function configFromISO(config) { + var i, l, + string = config._i, + match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), + allowTime, dateFormat, timeFormat, tzFormat; + + if (match) { + getParsingFlags(config).iso = true; + + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0]; + allowTime = isoDates[i][2] !== false; + break; + } + } + if (dateFormat == null) { + config._isValid = false; + return; + } + if (match[3]) { + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { + // match[2] should be 'T' or space + timeFormat = (match[2] || ' ') + isoTimes[i][0]; + break; + } + } + if (timeFormat == null) { + config._isValid = false; + return; + } + } + if (!allowTime && timeFormat != null) { + config._isValid = false; + return; + } + if (match[4]) { + if (tzRegex.exec(match[4])) { + tzFormat = 'Z'; + } else { + config._isValid = false; + return; + } + } + config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); + configFromStringAndFormat(config); + } else { + config._isValid = false; + } +} + +// date from iso format or fallback +function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + hooks.createFromInputFallback(config); + } +} + +hooks.createFromInputFallback = deprecate( + 'value provided is not in a recognized ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non ISO date formats are ' + + 'discouraged and will be removed in an upcoming major release. Please refer to ' + + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } +); + +// Pick the first defined of two or three arguments. +function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; +} + +function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(hooks.now()); + if (config._useUTC) { + return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; +} + +// convert an array to a date. +// the array should mirror the parameters below +// note: all values past the year are optional and will default to the lowest possible value. +// [year, month, day , hour, minute, second, millisecond] +function configFromArray (config) { + var i, date, input = [], currentDate, yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if (config._dayOfYear > daysInYear(yearToUse)) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if (config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } +} + +function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + var curWeek = weekOfYear(createLocal(), dow, doy); + + weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); + + // Default to current week. + week = defaults(w.w, curWeek.week); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to begining of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } +} + +// constant that refers to the ISO standard +hooks.ISO_8601 = function () {}; + +// date from string and format string +function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === hooks.ISO_8601) { + configFromISO(config); + return; + } + + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; + + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + // console.log('token', token, 'parsedInput', parsedInput, + // 'regex', getParseRegexForToken(token, config)); + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } + else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } + else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if (config._a[HOUR] <= 12 && + getParsingFlags(config).bigHour === true && + config._a[HOUR] > 0) { + getParsingFlags(config).bigHour = undefined; + } + + getParsingFlags(config).parsedDateParts = config._a.slice(0); + getParsingFlags(config).meridiem = config._meridiem; + // handle meridiem + config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); + + configFromArray(config); + checkOverflow(config); +} + + +function meridiemFixWrap (locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } +} + +// date from string and array of format strings +function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + + scoreToBeat, + i, + currentScore; + + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (!isValid(tempConfig)) { + continue; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; + + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + + getParsingFlags(tempConfig).score = currentScore; + + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + + extend(config, bestMoment || tempConfig); +} + +function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i); + config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { + return obj && parseInt(obj, 10); + }); + + configFromArray(config); +} + +function createFromConfig (config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; +} + +function prepareConfig (config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return createInvalid({nullInput: true}); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isDate(input)) { + config._d = input; + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } + + if (!isValid(config)) { + config._d = null; + } + + return config; +} + +function configFromInput(config) { + var input = config._i; + if (input === undefined) { + config._d = new Date(hooks.now()); + } else if (isDate(input)) { + config._d = new Date(input.valueOf()); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (typeof(input) === 'object') { + configFromObject(config); + } else if (isNumber(input)) { + // from milliseconds + config._d = new Date(input); + } else { + hooks.createFromInputFallback(config); + } +} + +function createLocalOrUTC (input, format, locale, strict, isUTC) { + var c = {}; + + if (locale === true || locale === false) { + strict = locale; + locale = undefined; + } + + if ((isObject(input) && isObjectEmpty(input)) || + (isArray(input) && input.length === 0)) { + input = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); +} + +function createLocal (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); +} + +var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other < this ? this : other; + } else { + return createInvalid(); + } + } +); + +var prototypeMax = deprecate( + 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other > this ? this : other; + } else { + return createInvalid(); + } + } +); + +// Pick a moment m from moments so that m[fn](other) is true for all +// other. This relies on the function fn to be transitive. +// +// moments should either be an array of moment objects or an array, whose +// first element is an array of moment objects. +function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; +} + +// TODO: Use [].sort instead? +function min () { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); +} + +function max () { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); +} + +var now = function () { + return Date.now ? Date.now() : +(new Date()); +}; + +function Duration (duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; + + this._data = {}; + + this._locale = getLocale(); + + this._bubble(); +} + +function isDuration (obj) { + return obj instanceof Duration; +} + +function absRound (number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } +} + +// FORMATTING + +function offset (token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(); + var sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); + }); +} + +offset('Z', ':'); +offset('ZZ', ''); + +// PARSING + +addRegexToken('Z', matchShortOffset); +addRegexToken('ZZ', matchShortOffset); +addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(matchShortOffset, input); +}); + +// HELPERS + +// timezone chunker +// '+10:00' > ['10', '00'] +// '-1530' > ['-15', '30'] +var chunkOffset = /([\+\-]|\d\d)/gi; + +function offsetFromString(matcher, string) { + var matches = (string || '').match(matcher); + + if (matches === null) { + return null; + } + + var chunk = matches[matches.length - 1] || []; + var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + var minutes = +(parts[1] * 60) + toInt(parts[2]); + + return minutes === 0 ? + 0 : + parts[0] === '+' ? minutes : -minutes; +} + +// Return a moment from input, that is local/utc/zone equivalent to model. +function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); + // Use low-level api, because this fn is low-level api. + res._d.setTime(res._d.valueOf() + diff); + hooks.updateOffset(res, false); + return res; + } else { + return createLocal(input).local(); + } +} + +function getDateOffset (m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset() / 15) * 15; +} + +// HOOKS + +// This function will be called whenever a moment is mutated. +// It is intended to keep the offset in sync with the timezone. +hooks.updateOffset = function () {}; + +// MOMENTS + +// keepLocalTime = true means only change the timezone, without +// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> +// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset +// +0200, so we adjust the time as needed, to be valid. +// +// Keeping the time actually adds/subtracts (one hour) +// from the actual represented time. That is why we call updateOffset +// a second time. In case it wants us to change the offset again +// _changeInProgress == true case, then we have to adjust, because +// there is no such time in the given timezone. +function getSetOffset (input, keepLocalTime) { + var offset = this._offset || 0, + localAdjust; + if (!this.isValid()) { + return input != null ? this : NaN; + } + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(matchShortOffset, input); + if (input === null) { + return this; + } + } else if (Math.abs(input) < 16) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addSubtract(this, createDuration(input - offset, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } +} + +function getSetZone (input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } +} + +function setOffsetToUTC (keepLocalTime) { + return this.utcOffset(0, keepLocalTime); +} + +function setOffsetToLocal (keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; +} + +function setOffsetToParsedOffset () { + if (this._tzm != null) { + this.utcOffset(this._tzm); + } else if (typeof this._i === 'string') { + var tZone = offsetFromString(matchOffset, this._i); + if (tZone != null) { + this.utcOffset(tZone); + } + else { + this.utcOffset(0, true); + } + } + return this; +} + +function hasAlignedHourOffset (input) { + if (!this.isValid()) { + return false; + } + input = input ? createLocal(input).utcOffset() : 0; + + return (this.utcOffset() - input) % 60 === 0; +} + +function isDaylightSavingTime () { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); +} + +function isDaylightSavingTimeShifted () { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted; + } + + var c = {}; + + copyConfig(c, this); + c = prepareConfig(c); + + if (c._a) { + var other = c._isUTC ? createUTC(c._a) : createLocal(c._a); + this._isDSTShifted = this.isValid() && + compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } + + return this._isDSTShifted; +} + +function isLocal () { + return this.isValid() ? !this._isUTC : false; +} + +function isUtcOffset () { + return this.isValid() ? this._isUTC : false; +} + +function isUtc () { + return this.isValid() ? this._isUTC && this._offset === 0 : false; +} + +// ASP.NET json date format regex +var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/; + +// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html +// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere +// and further modified to allow for strings containing both week and day +var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/; + +function createDuration (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms : input._milliseconds, + d : input._days, + M : input._months + }; + } else if (isNumber(input)) { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : 0, + d : toInt(match[DATE]) * sign, + h : toInt(match[HOUR]) * sign, + m : toInt(match[MINUTE]) * sign, + s : toInt(match[SECOND]) * sign, + ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match + }; + } else if (!!(match = isoRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : parseIso(match[2], sign), + M : parseIso(match[3], sign), + w : parseIso(match[4], sign), + d : parseIso(match[5], sign), + h : parseIso(match[6], sign), + m : parseIso(match[7], sign), + s : parseIso(match[8], sign) + }; + } else if (duration == null) {// checks for null or undefined + duration = {}; + } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to)); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + return ret; +} + +createDuration.fn = Duration.prototype; + +function parseIso (inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; +} + +function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; + + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + + return res; +} + +function momentsDifference(base, other) { + var res; + if (!(base.isValid() && other.isValid())) { + return {milliseconds: 0, months: 0}; + } + + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; +} + +// TODO: remove 'name' arg after deprecation is removed +function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'); + tmp = val; val = period; period = tmp; + } + + val = typeof val === 'string' ? +val : val; + dur = createDuration(val, period); + addSubtract(this, dur, direction); + return this; + }; +} + +function addSubtract (mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = absRound(duration._days), + months = absRound(duration._months); + + if (!mom.isValid()) { + // No op + return; + } + + updateOffset = updateOffset == null ? true : updateOffset; + + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + } + if (days) { + set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); + } + if (months) { + setMonth(mom, get(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + hooks.updateOffset(mom, days || months); + } +} + +var add = createAdder(1, 'add'); +var subtract = createAdder(-1, 'subtract'); + +function getCalendarFormat(myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + return diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; +} + +function calendar$1 (time, formats) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + format = hooks.calendarFormat(this, sod) || 'sameElse'; + + var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]); + + return this.format(output || this.localeData().calendar(format, this, createLocal(now))); +} + +function clone () { + return new Moment(this); +} + +function isAfter (input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf(); + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf(); + } +} + +function isBefore (input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf(); + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf(); + } +} + +function isBetween (from, to, units, inclusivity) { + inclusivity = inclusivity || '()'; + return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) && + (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units)); +} + +function isSame (input, units) { + var localInput = isMoment(input) ? input : createLocal(input), + inputMs; + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units || 'millisecond'); + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf(); + } else { + inputMs = localInput.valueOf(); + return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf(); + } +} + +function isSameOrAfter (input, units) { + return this.isSame(input, units) || this.isAfter(input,units); +} + +function isSameOrBefore (input, units) { + return this.isSame(input, units) || this.isBefore(input,units); +} + +function diff (input, units, asFloat) { + var that, + zoneDelta, + delta, output; + + if (!this.isValid()) { + return NaN; + } + + that = cloneWithOffset(input, this); + + if (!that.isValid()) { + return NaN; + } + + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; + + units = normalizeUnits(units); + + if (units === 'year' || units === 'month' || units === 'quarter') { + output = monthDiff(this, that); + if (units === 'quarter') { + output = output / 3; + } else if (units === 'year') { + output = output / 12; + } + } else { + delta = this - that; + output = units === 'second' ? delta / 1e3 : // 1000 + units === 'minute' ? delta / 6e4 : // 1000 * 60 + units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + delta; + } + return asFloat ? output : absFloor(output); +} + +function monthDiff (a, b) { + // difference in months + var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + //check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0; +} + +hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; +hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; + +function toString () { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); +} + +function toISOString () { + var m = this.clone().utc(); + if (0 < m.year() && m.year() <= 9999) { + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + return this.toDate().toISOString(); + } else { + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + } else { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } +} + +/** + * Return a human readable representation of a moment that can + * also be evaluated to get a new moment which is the same + * + * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects + */ +function inspect () { + if (!this.isValid()) { + return 'moment.invalid(/* ' + this._i + ' */)'; + } + var func = 'moment'; + var zone = ''; + if (!this.isLocal()) { + func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; + zone = 'Z'; + } + var prefix = '[' + func + '("]'; + var year = (0 < this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY'; + var datetime = '-MM-DD[T]HH:mm:ss.SSS'; + var suffix = zone + '[")]'; + + return this.format(prefix + year + datetime + suffix); +} + +function format (inputString) { + if (!inputString) { + inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat; + } + var output = formatMoment(this, inputString); + return this.localeData().postformat(output); +} + +function from (time, withoutSuffix) { + if (this.isValid() && + ((isMoment(time) && time.isValid()) || + createLocal(time).isValid())) { + return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } +} + +function fromNow (withoutSuffix) { + return this.from(createLocal(), withoutSuffix); +} + +function to (time, withoutSuffix) { + if (this.isValid() && + ((isMoment(time) && time.isValid()) || + createLocal(time).isValid())) { + return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } +} + +function toNow (withoutSuffix) { + return this.to(createLocal(), withoutSuffix); +} + +// If passed a locale key, it will set the locale for this +// instance. Otherwise, it will return the locale configuration +// variables for this instance. +function locale (key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } +} + +var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } +); + +function localeData () { + return this._locale; +} + +function startOf (units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + case 'date': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + } + + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } + if (units === 'isoWeek') { + this.isoWeekday(1); + } + + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } + + return this; +} + +function endOf (units) { + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond') { + return this; + } + + // 'date' is an alias for 'day', so it should be considered as such. + if (units === 'date') { + units = 'day'; + } + + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); +} + +function valueOf () { + return this._d.valueOf() - ((this._offset || 0) * 60000); +} + +function unix () { + return Math.floor(this.valueOf() / 1000); +} + +function toDate () { + return new Date(this.valueOf()); +} + +function toArray () { + var m = this; + return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; +} + +function toObject () { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds() + }; +} + +function toJSON () { + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; +} + +function isValid$1 () { + return isValid(this); +} + +function parsingFlags () { + return extend({}, getParsingFlags(this)); +} + +function invalidAt () { + return getParsingFlags(this).overflow; +} + +function creationData() { + return { + input: this._i, + format: this._f, + locale: this._locale, + isUTC: this._isUTC, + strict: this._strict + }; +} + +// FORMATTING + +addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; +}); + +addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; +}); + +function addWeekYearFormatToken (token, getter) { + addFormatToken(0, [token, token.length], 0, getter); +} + +addWeekYearFormatToken('gggg', 'weekYear'); +addWeekYearFormatToken('ggggg', 'weekYear'); +addWeekYearFormatToken('GGGG', 'isoWeekYear'); +addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + +// ALIASES + +addUnitAlias('weekYear', 'gg'); +addUnitAlias('isoWeekYear', 'GG'); + +// PRIORITY + +addUnitPriority('weekYear', 1); +addUnitPriority('isoWeekYear', 1); + + +// PARSING + +addRegexToken('G', matchSigned); +addRegexToken('g', matchSigned); +addRegexToken('GG', match1to2, match2); +addRegexToken('gg', match1to2, match2); +addRegexToken('GGGG', match1to4, match4); +addRegexToken('gggg', match1to4, match4); +addRegexToken('GGGGG', match1to6, match6); +addRegexToken('ggggg', match1to6, match6); + +addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { + week[token.substr(0, 2)] = toInt(input); +}); + +addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = hooks.parseTwoDigitYear(input); +}); + +// MOMENTS + +function getSetWeekYear (input) { + return getSetWeekYearHelper.call(this, + input, + this.week(), + this.weekday(), + this.localeData()._week.dow, + this.localeData()._week.doy); +} + +function getSetISOWeekYear (input) { + return getSetWeekYearHelper.call(this, + input, this.isoWeek(), this.isoWeekday(), 1, 4); +} + +function getISOWeeksInYear () { + return weeksInYear(this.year(), 1, 4); +} + +function getWeeksInYear () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); +} + +function getSetWeekYearHelper(input, week, weekday, dow, doy) { + var weeksTarget; + if (input == null) { + return weekOfYear(this, dow, doy).year; + } else { + weeksTarget = weeksInYear(input, dow, doy); + if (week > weeksTarget) { + week = weeksTarget; + } + return setWeekAll.call(this, input, week, weekday, dow, doy); + } +} + +function setWeekAll(weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); + + this.year(date.getUTCFullYear()); + this.month(date.getUTCMonth()); + this.date(date.getUTCDate()); + return this; +} + +// FORMATTING + +addFormatToken('Q', 0, 'Qo', 'quarter'); + +// ALIASES + +addUnitAlias('quarter', 'Q'); + +// PRIORITY + +addUnitPriority('quarter', 7); + +// PARSING + +addRegexToken('Q', match1); +addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; +}); + +// MOMENTS + +function getSetQuarter (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); +} + +// FORMATTING + +addFormatToken('D', ['DD', 2], 'Do', 'date'); + +// ALIASES + +addUnitAlias('date', 'D'); + +// PRIOROITY +addUnitPriority('date', 9); + +// PARSING + +addRegexToken('D', match1to2); +addRegexToken('DD', match1to2, match2); +addRegexToken('Do', function (isStrict, locale) { + return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; +}); + +addParseToken(['D', 'DD'], DATE); +addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0], 10); +}); + +// MOMENTS + +var getSetDayOfMonth = makeGetSet('Date', true); + +// FORMATTING + +addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + +// ALIASES + +addUnitAlias('dayOfYear', 'DDD'); + +// PRIORITY +addUnitPriority('dayOfYear', 4); + +// PARSING + +addRegexToken('DDD', match1to3); +addRegexToken('DDDD', match3); +addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); +}); + +// HELPERS + +// MOMENTS + +function getSetDayOfYear (input) { + var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); +} + +// FORMATTING + +addFormatToken('m', ['mm', 2], 0, 'minute'); + +// ALIASES + +addUnitAlias('minute', 'm'); + +// PRIORITY + +addUnitPriority('minute', 14); + +// PARSING + +addRegexToken('m', match1to2); +addRegexToken('mm', match1to2, match2); +addParseToken(['m', 'mm'], MINUTE); + +// MOMENTS + +var getSetMinute = makeGetSet('Minutes', false); + +// FORMATTING + +addFormatToken('s', ['ss', 2], 0, 'second'); + +// ALIASES + +addUnitAlias('second', 's'); + +// PRIORITY + +addUnitPriority('second', 15); + +// PARSING + +addRegexToken('s', match1to2); +addRegexToken('ss', match1to2, match2); +addParseToken(['s', 'ss'], SECOND); + +// MOMENTS + +var getSetSecond = makeGetSet('Seconds', false); + +// FORMATTING + +addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); +}); + +addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); +}); + +addFormatToken(0, ['SSS', 3], 0, 'millisecond'); +addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; +}); +addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; +}); +addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; +}); +addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; +}); +addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; +}); +addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; +}); + + +// ALIASES + +addUnitAlias('millisecond', 'ms'); + +// PRIORITY + +addUnitPriority('millisecond', 16); + +// PARSING + +addRegexToken('S', match1to3, match1); +addRegexToken('SS', match1to3, match2); +addRegexToken('SSS', match1to3, match3); + +var token; +for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); +} + +function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); +} + +for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); +} +// MOMENTS + +var getSetMillisecond = makeGetSet('Milliseconds', false); + +// FORMATTING + +addFormatToken('z', 0, 0, 'zoneAbbr'); +addFormatToken('zz', 0, 0, 'zoneName'); + +// MOMENTS + +function getZoneAbbr () { + return this._isUTC ? 'UTC' : ''; +} + +function getZoneName () { + return this._isUTC ? 'Coordinated Universal Time' : ''; +} + +var proto = Moment.prototype; + +proto.add = add; +proto.calendar = calendar$1; +proto.clone = clone; +proto.diff = diff; +proto.endOf = endOf; +proto.format = format; +proto.from = from; +proto.fromNow = fromNow; +proto.to = to; +proto.toNow = toNow; +proto.get = stringGet; +proto.invalidAt = invalidAt; +proto.isAfter = isAfter; +proto.isBefore = isBefore; +proto.isBetween = isBetween; +proto.isSame = isSame; +proto.isSameOrAfter = isSameOrAfter; +proto.isSameOrBefore = isSameOrBefore; +proto.isValid = isValid$1; +proto.lang = lang; +proto.locale = locale; +proto.localeData = localeData; +proto.max = prototypeMax; +proto.min = prototypeMin; +proto.parsingFlags = parsingFlags; +proto.set = stringSet; +proto.startOf = startOf; +proto.subtract = subtract; +proto.toArray = toArray; +proto.toObject = toObject; +proto.toDate = toDate; +proto.toISOString = toISOString; +proto.inspect = inspect; +proto.toJSON = toJSON; +proto.toString = toString; +proto.unix = unix; +proto.valueOf = valueOf; +proto.creationData = creationData; + +// Year +proto.year = getSetYear; +proto.isLeapYear = getIsLeapYear; + +// Week Year +proto.weekYear = getSetWeekYear; +proto.isoWeekYear = getSetISOWeekYear; + +// Quarter +proto.quarter = proto.quarters = getSetQuarter; + +// Month +proto.month = getSetMonth; +proto.daysInMonth = getDaysInMonth; + +// Week +proto.week = proto.weeks = getSetWeek; +proto.isoWeek = proto.isoWeeks = getSetISOWeek; +proto.weeksInYear = getWeeksInYear; +proto.isoWeeksInYear = getISOWeeksInYear; + +// Day +proto.date = getSetDayOfMonth; +proto.day = proto.days = getSetDayOfWeek; +proto.weekday = getSetLocaleDayOfWeek; +proto.isoWeekday = getSetISODayOfWeek; +proto.dayOfYear = getSetDayOfYear; + +// Hour +proto.hour = proto.hours = getSetHour; + +// Minute +proto.minute = proto.minutes = getSetMinute; + +// Second +proto.second = proto.seconds = getSetSecond; + +// Millisecond +proto.millisecond = proto.milliseconds = getSetMillisecond; + +// Offset +proto.utcOffset = getSetOffset; +proto.utc = setOffsetToUTC; +proto.local = setOffsetToLocal; +proto.parseZone = setOffsetToParsedOffset; +proto.hasAlignedHourOffset = hasAlignedHourOffset; +proto.isDST = isDaylightSavingTime; +proto.isLocal = isLocal; +proto.isUtcOffset = isUtcOffset; +proto.isUtc = isUtc; +proto.isUTC = isUtc; + +// Timezone +proto.zoneAbbr = getZoneAbbr; +proto.zoneName = getZoneName; + +// Deprecations +proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); +proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); +proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); +proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone); +proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted); + +function createUnix (input) { + return createLocal(input * 1000); +} + +function createInZone () { + return createLocal.apply(null, arguments).parseZone(); +} + +function preParsePostFormat (string) { + return string; +} + +var proto$1 = Locale.prototype; + +proto$1.calendar = calendar; +proto$1.longDateFormat = longDateFormat; +proto$1.invalidDate = invalidDate; +proto$1.ordinal = ordinal; +proto$1.preparse = preParsePostFormat; +proto$1.postformat = preParsePostFormat; +proto$1.relativeTime = relativeTime; +proto$1.pastFuture = pastFuture; +proto$1.set = set; + +// Month +proto$1.months = localeMonths; +proto$1.monthsShort = localeMonthsShort; +proto$1.monthsParse = localeMonthsParse; +proto$1.monthsRegex = monthsRegex; +proto$1.monthsShortRegex = monthsShortRegex; + +// Week +proto$1.week = localeWeek; +proto$1.firstDayOfYear = localeFirstDayOfYear; +proto$1.firstDayOfWeek = localeFirstDayOfWeek; + +// Day of Week +proto$1.weekdays = localeWeekdays; +proto$1.weekdaysMin = localeWeekdaysMin; +proto$1.weekdaysShort = localeWeekdaysShort; +proto$1.weekdaysParse = localeWeekdaysParse; + +proto$1.weekdaysRegex = weekdaysRegex; +proto$1.weekdaysShortRegex = weekdaysShortRegex; +proto$1.weekdaysMinRegex = weekdaysMinRegex; + +// Hours +proto$1.isPM = localeIsPM; +proto$1.meridiem = localeMeridiem; + +function get$1 (format, index, field, setter) { + var locale = getLocale(); + var utc = createUTC().set(setter, index); + return locale[field](utc, format); +} + +function listMonthsImpl (format, index, field) { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return get$1(format, index, field, 'month'); + } + + var i; + var out = []; + for (i = 0; i < 12; i++) { + out[i] = get$1(format, i, field, 'month'); + } + return out; +} + +// () +// (5) +// (fmt, 5) +// (fmt) +// (true) +// (true, 5) +// (true, fmt, 5) +// (true, fmt) +function listWeekdaysImpl (localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } else { + format = localeSorted; + index = format; + localeSorted = false; + + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } + + var locale = getLocale(), + shift = localeSorted ? locale._week.dow : 0; + + if (index != null) { + return get$1(format, (index + shift) % 7, field, 'day'); + } + + var i; + var out = []; + for (i = 0; i < 7; i++) { + out[i] = get$1(format, (i + shift) % 7, field, 'day'); + } + return out; +} + +function listMonths (format, index) { + return listMonthsImpl(format, index, 'months'); +} + +function listMonthsShort (format, index) { + return listMonthsImpl(format, index, 'monthsShort'); +} + +function listWeekdays (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); +} + +function listWeekdaysShort (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); +} + +function listWeekdaysMin (localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); +} + +getSetGlobalLocale('en', { + ordinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } +}); + +// Side effect imports +hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale); +hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale); + +var mathAbs = Math.abs; + +function abs () { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; +} + +function addSubtract$1 (duration, input, value, direction) { + var other = createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); +} + +// supports only 2.0-style add(1, 's') or add(duration) +function add$1 (input, value) { + return addSubtract$1(this, input, value, 1); +} + +// supports only 2.0-style subtract(1, 's') or subtract(duration) +function subtract$1 (input, value) { + return addSubtract$1(this, input, value, -1); +} + +function absCeil (number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } +} + +function bubble () { + var milliseconds = this._milliseconds; + var days = this._days; + var months = this._months; + var data = this._data; + var seconds, minutes, hours, years, monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if (!((milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0))) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; +} + +function daysToMonths (days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return days * 4800 / 146097; +} + +function monthsToDays (months) { + // the reverse of daysToMonths + return months * 146097 / 4800; +} + +function as (units) { + var days; + var months; + var milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + return units === 'month' ? months : months / 12; + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week' : return days / 7 + milliseconds / 6048e5; + case 'day' : return days + milliseconds / 864e5; + case 'hour' : return days * 24 + milliseconds / 36e5; + case 'minute' : return days * 1440 + milliseconds / 6e4; + case 'second' : return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': return Math.floor(days * 864e5) + milliseconds; + default: throw new Error('Unknown unit ' + units); + } + } +} + +// TODO: Use this.as('ms')? +function valueOf$1 () { + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); +} + +function makeAs (alias) { + return function () { + return this.as(alias); + }; +} + +var asMilliseconds = makeAs('ms'); +var asSeconds = makeAs('s'); +var asMinutes = makeAs('m'); +var asHours = makeAs('h'); +var asDays = makeAs('d'); +var asWeeks = makeAs('w'); +var asMonths = makeAs('M'); +var asYears = makeAs('y'); + +function get$2 (units) { + units = normalizeUnits(units); + return this[units + 's'](); +} + +function makeGetter(name) { + return function () { + return this._data[name]; + }; +} + +var milliseconds = makeGetter('milliseconds'); +var seconds = makeGetter('seconds'); +var minutes = makeGetter('minutes'); +var hours = makeGetter('hours'); +var days = makeGetter('days'); +var months = makeGetter('months'); +var years = makeGetter('years'); + +function weeks () { + return absFloor(this.days() / 7); +} + +var round = Math.round; +var thresholds = { + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month + M: 11 // months to year +}; + +// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize +function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); +} + +function relativeTime$1 (posNegDuration, withoutSuffix, locale) { + var duration = createDuration(posNegDuration).abs(); + var seconds = round(duration.as('s')); + var minutes = round(duration.as('m')); + var hours = round(duration.as('h')); + var days = round(duration.as('d')); + var months = round(duration.as('M')); + var years = round(duration.as('y')); + + var a = seconds < thresholds.s && ['s', seconds] || + minutes <= 1 && ['m'] || + minutes < thresholds.m && ['mm', minutes] || + hours <= 1 && ['h'] || + hours < thresholds.h && ['hh', hours] || + days <= 1 && ['d'] || + days < thresholds.d && ['dd', days] || + months <= 1 && ['M'] || + months < thresholds.M && ['MM', months] || + years <= 1 && ['y'] || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); +} + +// This function allows you to set the rounding function for relative time strings +function getSetRelativeTimeRounding (roundingFunction) { + if (roundingFunction === undefined) { + return round; + } + if (typeof(roundingFunction) === 'function') { + round = roundingFunction; + return true; + } + return false; +} + +// This function allows you to set a threshold for relative time strings +function getSetRelativeTimeThreshold (threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + return true; +} + +function humanize (withSuffix) { + var locale = this.localeData(); + var output = relativeTime$1(this, !withSuffix, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); +} + +var abs$1 = Math.abs; + +function toISOString$1() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + var seconds = abs$1(this._milliseconds) / 1000; + var days = abs$1(this._days); + var months = abs$1(this._months); + var minutes, hours, years; + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var Y = years; + var M = months; + var D = days; + var h = hours; + var m = minutes; + var s = seconds; + var total = this.asSeconds(); + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (total < 0 ? '-' : '') + + 'P' + + (Y ? Y + 'Y' : '') + + (M ? M + 'M' : '') + + (D ? D + 'D' : '') + + ((h || m || s) ? 'T' : '') + + (h ? h + 'H' : '') + + (m ? m + 'M' : '') + + (s ? s + 'S' : ''); +} + +var proto$2 = Duration.prototype; + +proto$2.abs = abs; +proto$2.add = add$1; +proto$2.subtract = subtract$1; +proto$2.as = as; +proto$2.asMilliseconds = asMilliseconds; +proto$2.asSeconds = asSeconds; +proto$2.asMinutes = asMinutes; +proto$2.asHours = asHours; +proto$2.asDays = asDays; +proto$2.asWeeks = asWeeks; +proto$2.asMonths = asMonths; +proto$2.asYears = asYears; +proto$2.valueOf = valueOf$1; +proto$2._bubble = bubble; +proto$2.get = get$2; +proto$2.milliseconds = milliseconds; +proto$2.seconds = seconds; +proto$2.minutes = minutes; +proto$2.hours = hours; +proto$2.days = days; +proto$2.weeks = weeks; +proto$2.months = months; +proto$2.years = years; +proto$2.humanize = humanize; +proto$2.toISOString = toISOString$1; +proto$2.toString = toISOString$1; +proto$2.toJSON = toISOString$1; +proto$2.locale = locale; +proto$2.localeData = localeData; + +// Deprecations +proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1); +proto$2.lang = lang; + +// Side effect imports + +// FORMATTING + +addFormatToken('X', 0, 0, 'unix'); +addFormatToken('x', 0, 0, 'valueOf'); + +// PARSING + +addRegexToken('x', matchSigned); +addRegexToken('X', matchTimestamp); +addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input, 10) * 1000); +}); +addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); +}); + +// Side effect imports + + +hooks.version = '2.17.1'; + +setHookCallback(createLocal); + +hooks.fn = proto; +hooks.min = min; +hooks.max = max; +hooks.now = now; +hooks.utc = createUTC; +hooks.unix = createUnix; +hooks.months = listMonths; +hooks.isDate = isDate; +hooks.locale = getSetGlobalLocale; +hooks.invalid = createInvalid; +hooks.duration = createDuration; +hooks.isMoment = isMoment; +hooks.weekdays = listWeekdays; +hooks.parseZone = createInZone; +hooks.localeData = getLocale; +hooks.isDuration = isDuration; +hooks.monthsShort = listMonthsShort; +hooks.weekdaysMin = listWeekdaysMin; +hooks.defineLocale = defineLocale; +hooks.updateLocale = updateLocale; +hooks.locales = listLocales; +hooks.weekdaysShort = listWeekdaysShort; +hooks.normalizeUnits = normalizeUnits; +hooks.relativeTimeRounding = getSetRelativeTimeRounding; +hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; +hooks.calendarFormat = getCalendarFormat; +hooks.prototype = proto; + +return hooks; + +}))); diff --git a/www/plugins-dist/organiseur/lib/moment/moment.min.js b/www/plugins-dist/organiseur/lib/moment/moment.min.js new file mode 100644 index 00000000..8c706712 --- /dev/null +++ b/www/plugins-dist/organiseur/lib/moment/moment.min.js @@ -0,0 +1,551 @@ +//! moment.js +//! version : 2.17.1 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com +!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return od.apply(null,arguments)} +// This is done to register the method called with moment() +// without creating circular dependencies. +function b(a){od=a}function c(a){return a instanceof Array||"[object Array]"===Object.prototype.toString.call(a)}function d(a){ +// IE8 will treat undefined and null as object if it wasn't for +// input != null +return null!=a&&"[object Object]"===Object.prototype.toString.call(a)}function e(a){var b;for(b in a) +// even if its not own property I'd still call it non-empty +return!1;return!0}function f(a){return"number"==typeof a||"[object Number]"===Object.prototype.toString.call(a)}function g(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function h(a,b){var c,d=[];for(c=0;c0)for(c in rd)d=rd[c],e=b[d],p(e)||(a[d]=e);return a} +// Moment prototype object +function r(b){q(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)), +// Prevent infinite loop in case updateOffset creates new moment +// objects. +sd===!1&&(sd=!0,a.updateOffset(this),sd=!1)}function s(a){return a instanceof r||null!=a&&null!=a._isAMomentObject}function t(a){return a<0?Math.ceil(a)||0:Math.floor(a)}function u(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=t(b)),c} +// compare two arrays, return the number of differences +function v(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;d0?"future":"past"];return z(c)?c(b):c.replace(/%s/i,b)}function J(a,b){var c=a.toLowerCase();Dd[c]=Dd[c+"s"]=Dd[b]=a}function K(a){return"string"==typeof a?Dd[a]||Dd[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)i(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(a,b){Ed[a]=b}function N(a){var b=[];for(var c in a)b.push({unit:c,priority:Ed[c]});return b.sort(function(a,b){return a.priority-b.priority}),b}function O(b,c){return function(d){return null!=d?(Q(this,b,d),a.updateOffset(this,c),this):P(this,b)}}function P(a,b){return a.isValid()?a._d["get"+(a._isUTC?"UTC":"")+b]():NaN}function Q(a,b,c){a.isValid()&&a._d["set"+(a._isUTC?"UTC":"")+b](c)} +// MOMENTS +function R(a){return a=K(a),z(this[a])?this[a]():this}function S(a,b){if("object"==typeof a){a=L(a);for(var c=N(a),d=0;d=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d} +// token: 'M' +// padded: ['MM', 2] +// ordinal: 'Mo' +// callback: function () { this.month() + 1 } +function U(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(Id[a]=e),b&&(Id[b[0]]=function(){return T(e.apply(this,arguments),b[1],b[2])}),c&&(Id[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function V(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function W(a){var b,c,d=a.match(Fd);for(b=0,c=d.length;b=0&&Gd.test(a);)a=a.replace(Gd,c),Gd.lastIndex=0,d-=1;return a}function Z(a,b,c){$d[a]=z(b)?b:function(a,d){return a&&c?c:b}}function $(a,b){return i($d,a)?$d[a](b._strict,b._locale):new RegExp(_(a))} +// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript +function _(a){return aa(a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function aa(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ba(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),f(b)&&(d=function(a,c){c[b]=u(a)}),c=0;c=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function ta(a){var b=new Date(Date.UTC.apply(null,arguments)); +//the Date.UTC function remaps years 0-99 to 1900-1999 +return a<100&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b} +// start-of-first-week - start-of-year +function ua(a,b,c){var// first-week day -- which january is always in the first week (4 for iso, 1 for other) +d=7+b-c, +// first-week day local weekday -- which local weekday is fwd +e=(7+ta(a,0,d).getUTCDay()-b)%7;return-e+d-1} +//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday +function va(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ua(a,d,e),j=1+7*(b-1)+h+i;return j<=0?(f=a-1,g=pa(f)+j):j>pa(a)?(f=a+1,g=j-pa(a)):(f=a,g=j),{year:f,dayOfYear:g}}function wa(a,b,c){var d,e,f=ua(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return g<1?(e=a.year()-1,d=g+xa(e,b,c)):g>xa(a.year(),b,c)?(d=g-xa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function xa(a,b,c){var d=ua(a,b,c),e=ua(a+1,b,c);return(pa(a)-d+e)/7} +// HELPERS +// LOCALES +function ya(a){return wa(a,this._week.dow,this._week.doy).week}function za(){return this._week.dow}function Aa(){return this._week.doy} +// MOMENTS +function Ba(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function Ca(a){var b=wa(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")} +// HELPERS +function Da(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function Ea(a,b){return"string"==typeof a?b.weekdaysParse(a)%7||7:isNaN(a)?null:a}function Fa(a,b){return a?c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?"format":"standalone"][a.day()]:this._weekdays}function Ga(a){return a?this._weekdaysShort[a.day()]:this._weekdaysShort}function Ha(a){return a?this._weekdaysMin[a.day()]:this._weekdaysMin}function Ia(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;d<7;++d)f=k([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(f,"").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(f,"").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(f,"").toLocaleLowerCase();return c?"dddd"===b?(e=je.call(this._weekdaysParse,g),e!==-1?e:null):"ddd"===b?(e=je.call(this._shortWeekdaysParse,g),e!==-1?e:null):(e=je.call(this._minWeekdaysParse,g),e!==-1?e:null):"dddd"===b?(e=je.call(this._weekdaysParse,g),e!==-1?e:(e=je.call(this._shortWeekdaysParse,g),e!==-1?e:(e=je.call(this._minWeekdaysParse,g),e!==-1?e:null))):"ddd"===b?(e=je.call(this._shortWeekdaysParse,g),e!==-1?e:(e=je.call(this._weekdaysParse,g),e!==-1?e:(e=je.call(this._minWeekdaysParse,g),e!==-1?e:null))):(e=je.call(this._minWeekdaysParse,g),e!==-1?e:(e=je.call(this._weekdaysParse,g),e!==-1?e:(e=je.call(this._shortWeekdaysParse,g),e!==-1?e:null)))}function Ja(a,b,c){var d,e,f;if(this._weekdaysParseExact)return Ia.call(this,a,b,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;d<7;d++){ +// test the regex +if( +// make the regex if we don't have it already +e=k([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp("^"+this.weekdays(e,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[d]=new RegExp("^"+this.weekdaysShort(e,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[d]=new RegExp("^"+this.weekdaysMin(e,"").replace(".",".?")+"$","i")),this._weekdaysParse[d]||(f="^"+this.weekdays(e,"")+"|^"+this.weekdaysShort(e,"")+"|^"+this.weekdaysMin(e,""),this._weekdaysParse[d]=new RegExp(f.replace(".",""),"i")),c&&"dddd"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&"ddd"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&"dd"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}} +// MOMENTS +function Ka(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Da(a,this.localeData()),this.add(a-b,"d")):b}function La(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Ma(a){if(!this.isValid())return null!=a?this:NaN; +// behaves the same as moment#day except +// as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) +// as a setter, sunday should belong to the previous week. +if(null!=a){var b=Ea(a,this.localeData());return this.day(this.day()%7?b:b-7)}return this.day()||7}function Na(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysStrictRegex:this._weekdaysRegex):(i(this,"_weekdaysRegex")||(this._weekdaysRegex=ue),this._weekdaysStrictRegex&&a?this._weekdaysStrictRegex:this._weekdaysRegex)}function Oa(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(i(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=ve),this._weekdaysShortStrictRegex&&a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Pa(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(i(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=we),this._weekdaysMinStrictRegex&&a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Qa(){function a(a,b){return b.length-a.length}var b,c,d,e,f,g=[],h=[],i=[],j=[];for(b=0;b<7;b++) +// make the regex if we don't have it already +c=k([2e3,1]).day(b),d=this.weekdaysMin(c,""),e=this.weekdaysShort(c,""),f=this.weekdays(c,""),g.push(d),h.push(e),i.push(f),j.push(d),j.push(e),j.push(f);for( +// Sorting makes sure if one weekday (or abbr) is a prefix of another it +// will match the longer piece. +g.sort(a),h.sort(a),i.sort(a),j.sort(a),b=0;b<7;b++)h[b]=aa(h[b]),i[b]=aa(i[b]),j[b]=aa(j[b]);this._weekdaysRegex=new RegExp("^("+j.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+g.join("|")+")","i")} +// FORMATTING +function Ra(){return this.hours()%12||12}function Sa(){return this.hours()||24}function Ta(a,b){U(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})} +// PARSING +function Ua(a,b){return b._meridiemParse} +// LOCALES +function Va(a){ +// IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays +// Using charAt should be more compatible. +return"p"===(a+"").toLowerCase().charAt(0)}function Wa(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Xa(a){return a?a.toLowerCase().replace("_","-"):a} +// pick the locale from the array +// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each +// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root +function Ya(a){for(var b,c,d,e,f=0;f0;){if(d=Za(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1) +//the next array item is better than a shallower substring of this one +break;b--}f++}return null}function Za(a){var b=null; +// TODO: Find a better way to register and load all the locales in Node +if(!Be[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=xe._abbr,require("./locale/"+a), +// because defineLocale currently also sets the global locale, we +// want to undo that for lazy loaded locales +$a(b)}catch(a){}return Be[a]} +// This function will load locale and then set the global locale. If +// no arguments are passed in, it will simply return the current global +// locale key. +function $a(a,b){var c; +// moment.duration._locale = moment._locale = data; +return a&&(c=p(b)?bb(a):_a(a,b),c&&(xe=c)),xe._abbr}function _a(a,b){if(null!==b){var c=Ae;if(b.abbr=a,null!=Be[a])y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),c=Be[a]._config;else if(null!=b.parentLocale){if(null==Be[b.parentLocale])return Ce[b.parentLocale]||(Ce[b.parentLocale]=[]),Ce[b.parentLocale].push({name:a,config:b}),null;c=Be[b.parentLocale]._config} +// backwards compat for now: also set the locale +// make sure we set the locale AFTER all child locales have been +// created, so we won't end up with the child locale set. +return Be[a]=new C(B(c,b)),Ce[a]&&Ce[a].forEach(function(a){_a(a.name,a.config)}),$a(a),Be[a]} +// useful for testing +return delete Be[a],null}function ab(a,b){if(null!=b){var c,d=Ae; +// MERGE +null!=Be[a]&&(d=Be[a]._config),b=B(d,b),c=new C(b),c.parentLocale=Be[a],Be[a]=c, +// backwards compat for now: also set the locale +$a(a)}else +// pass null for config to unupdate, useful for tests +null!=Be[a]&&(null!=Be[a].parentLocale?Be[a]=Be[a].parentLocale:null!=Be[a]&&delete Be[a]);return Be[a]} +// returns locale data +function bb(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return xe;if(!c(a)){if( +//short-circuit everything else +b=Za(a))return b;a=[a]}return Ya(a)}function cb(){return wd(Be)}function db(a){var b,c=a._a;return c&&m(a).overflow===-2&&(b=c[be]<0||c[be]>11?be:c[ce]<1||c[ce]>ea(c[ae],c[be])?ce:c[de]<0||c[de]>24||24===c[de]&&(0!==c[ee]||0!==c[fe]||0!==c[ge])?de:c[ee]<0||c[ee]>59?ee:c[fe]<0||c[fe]>59?fe:c[ge]<0||c[ge]>999?ge:-1,m(a)._overflowDayOfYear&&(bce)&&(b=ce),m(a)._overflowWeeks&&b===-1&&(b=he),m(a)._overflowWeekday&&b===-1&&(b=ie),m(a).overflow=b),a} +// date from iso format +function eb(a){var b,c,d,e,f,g,h=a._i,i=De.exec(h)||Ee.exec(h);if(i){for(m(a).iso=!0,b=0,c=Ge.length;bpa(e)&&(m(a)._overflowDayOfYear=!0),c=ta(e,0,a._dayOfYear),a._a[be]=c.getUTCMonth(),a._a[ce]=c.getUTCDate()),b=0;b<3&&null==a._a[b];++b)a._a[b]=f[b]=d[b]; +// Zero out whatever was not defaulted, including time +for(;b<7;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b]; +// Check for 24:00:00.000 +24===a._a[de]&&0===a._a[ee]&&0===a._a[fe]&&0===a._a[ge]&&(a._nextDay=!0,a._a[de]=0),a._d=(a._useUTC?ta:sa).apply(null,f), +// Apply timezone offset from input. The actual utcOffset can be changed +// with parseZone. +null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[de]=24)}}function jb(a){var b,c,d,e,f,g,h,i;if(b=a._w,null!=b.GG||null!=b.W||null!=b.E)f=1,g=4, +// TODO: We need to take the current isoWeekYear, but that depends on +// how we interpret now (local, utc, fixed offset). So create +// a now version of current config (take local/utc/offset flags, and +// create now). +c=gb(b.GG,a._a[ae],wa(sb(),1,4).year),d=gb(b.W,1),e=gb(b.E,1),(e<1||e>7)&&(i=!0);else{f=a._locale._week.dow,g=a._locale._week.doy;var j=wa(sb(),f,g);c=gb(b.gg,a._a[ae],j.year), +// Default to current week. +d=gb(b.w,j.week),null!=b.d?( +// weekday -- low day numbers are considered next week +e=b.d,(e<0||e>6)&&(i=!0)):null!=b.e?( +// local weekday -- counting starts from begining of week +e=b.e+f,(b.e<0||b.e>6)&&(i=!0)): +// default to begining of week +e=f}d<1||d>xa(c,f,g)?m(a)._overflowWeeks=!0:null!=i?m(a)._overflowWeekday=!0:(h=va(c,d,e,f,g),a._a[ae]=h.year,a._dayOfYear=h.dayOfYear)} +// date from string and format string +function kb(b){ +// TODO: Move this to another part of the creation flow to prevent circular deps +if(b._f===a.ISO_8601)return void eb(b);b._a=[],m(b).empty=!0; +// This array is used to make a Date, either with `new Date` or `Date.UTC` +var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=Y(b._f,b._locale).match(Fd)||[],c=0;c0&&m(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length), +// don't parse if it's not a known token +Id[f]?(d?m(b).empty=!1:m(b).unusedTokens.push(f),da(f,d,b)):b._strict&&!d&&m(b).unusedTokens.push(f); +// add remaining unparsed input length to the string +m(b).charsLeftOver=i-j,h.length>0&&m(b).unusedInput.push(h), +// clear _12h flag if hour is <= 12 +b._a[de]<=12&&m(b).bigHour===!0&&b._a[de]>0&&(m(b).bigHour=void 0),m(b).parsedDateParts=b._a.slice(0),m(b).meridiem=b._meridiem, +// handle meridiem +b._a[de]=lb(b._locale,b._a[de],b._meridiem),ib(b),db(b)}function lb(a,b,c){var d; +// Fallback +return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&b<12&&(b+=12),d||12!==b||(b=0),b):b} +// date from string and array of format strings +function mb(a){var b,c,d,e,f;if(0===a._f.length)return m(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;e +// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset +// +0200, so we adjust the time as needed, to be valid. +// +// Keeping the time actually adds/subtracts (one hour) +// from the actual represented time. That is why we call updateOffset +// a second time. In case it wants us to change the offset again +// _changeInProgress == true case, then we have to adjust, because +// there is no such time in the given timezone. +function Db(b,c){var d,e=this._offset||0;if(!this.isValid())return null!=b?this:NaN;if(null!=b){if("string"==typeof b){if(b=Ab(Xd,b),null===b)return this}else Math.abs(b)<16&&(b=60*b);return!this._isUTC&&c&&(d=Cb(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?Tb(this,Ob(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?e:Cb(this)}function Eb(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Fb(a){return this.utcOffset(0,a)}function Gb(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Cb(this),"m")),this}function Hb(){if(null!=this._tzm)this.utcOffset(this._tzm);else if("string"==typeof this._i){var a=Ab(Wd,this._i);null!=a?this.utcOffset(a):this.utcOffset(0,!0)}return this}function Ib(a){return!!this.isValid()&&(a=a?sb(a).utcOffset():0,(this.utcOffset()-a)%60===0)}function Jb(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Kb(){if(!p(this._isDSTShifted))return this._isDSTShifted;var a={};if(q(a,this),a=pb(a),a._a){var b=a._isUTC?k(a._a):sb(a._a);this._isDSTShifted=this.isValid()&&v(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Lb(){return!!this.isValid()&&!this._isUTC}function Mb(){return!!this.isValid()&&this._isUTC}function Nb(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ob(a,b){var c,d,e,g=a, +// matching against regexp is expensive, do it on demand +h=null;// checks for null or undefined +return xb(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:f(a)?(g={},b?g[b]=a:g.milliseconds=a):(h=Ne.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:u(h[ce])*c,h:u(h[de])*c,m:u(h[ee])*c,s:u(h[fe])*c,ms:u(yb(1e3*h[ge]))*c}):(h=Oe.exec(a))?(c="-"===h[1]?-1:1,g={y:Pb(h[2],c),M:Pb(h[3],c),w:Pb(h[4],c),d:Pb(h[5],c),h:Pb(h[6],c),m:Pb(h[7],c),s:Pb(h[8],c)}):null==g?g={}:"object"==typeof g&&("from"in g||"to"in g)&&(e=Rb(sb(g.from),sb(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new wb(g),xb(a)&&i(a,"_locale")&&(d._locale=a._locale),d}function Pb(a,b){ +// We'd normally use ~~inp for this, but unfortunately it also +// converts floats to ints. +// inp may be undefined, so careful calling replace on it. +var c=a&&parseFloat(a.replace(",",".")); +// apply sign while we're at it +return(isNaN(c)?0:c)*b}function Qb(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function Rb(a,b){var c;return a.isValid()&&b.isValid()?(b=Bb(b,a),a.isBefore(b)?c=Qb(a,b):(c=Qb(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}} +// TODO: remove 'name' arg after deprecation is removed +function Sb(a,b){return function(c,d){var e,f; +//invert the arguments, but complain about it +return null===d||isNaN(+d)||(y(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Ob(c,d),Tb(this,e,a),this}}function Tb(b,c,d,e){var f=c._milliseconds,g=yb(c._days),h=yb(c._months);b.isValid()&&(e=null==e||e,f&&b._d.setTime(b._d.valueOf()+f*d),g&&Q(b,"Date",P(b,"Date")+g*d),h&&ja(b,P(b,"Month")+h*d),e&&a.updateOffset(b,g||h))}function Ub(a,b){var c=a.diff(b,"days",!0);return c<-6?"sameElse":c<-1?"lastWeek":c<0?"lastDay":c<1?"sameDay":c<2?"nextDay":c<7?"nextWeek":"sameElse"}function Vb(b,c){ +// We want to compare the start of today, vs this. +// Getting start-of-today depends on whether we're local/utc/offset or not. +var d=b||sb(),e=Bb(d,this).startOf("day"),f=a.calendarFormat(this,e)||"sameElse",g=c&&(z(c[f])?c[f].call(this,d):c[f]);return this.format(g||this.localeData().calendar(f,this,sb(d)))}function Wb(){return new r(this)}function Xb(a,b){var c=s(a)?a:sb(a);return!(!this.isValid()||!c.isValid())&&(b=K(p(b)?"millisecond":b),"millisecond"===b?this.valueOf()>c.valueOf():c.valueOf()f&&(b=f),Fc.call(this,a,b,c,d,e))}function Fc(a,b,c,d,e){var f=va(a,b,c,d,e),g=ta(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this} +// MOMENTS +function Gc(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)} +// HELPERS +// MOMENTS +function Hc(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function Ic(a,b){b[ge]=u(1e3*("0."+a))} +// MOMENTS +function Jc(){return this._isUTC?"UTC":""}function Kc(){return this._isUTC?"Coordinated Universal Time":""}function Lc(a){return sb(1e3*a)}function Mc(){return sb.apply(null,arguments).parseZone()}function Nc(a){return a}function Oc(a,b,c,d){var e=bb(),f=k().set(d,b);return e[c](f,a)}function Pc(a,b,c){if(f(a)&&(b=a,a=void 0),a=a||"",null!=b)return Oc(a,b,c,"month");var d,e=[];for(d=0;d<12;d++)e[d]=Oc(a,d,c,"month");return e} +// () +// (5) +// (fmt, 5) +// (fmt) +// (true) +// (true, 5) +// (true, fmt, 5) +// (true, fmt) +function Qc(a,b,c,d){"boolean"==typeof a?(f(b)&&(c=b,b=void 0),b=b||""):(b=a,c=b,a=!1,f(b)&&(c=b,b=void 0),b=b||"");var e=bb(),g=a?e._week.dow:0;if(null!=c)return Oc(b,(c+g)%7,d,"day");var h,i=[];for(h=0;h<7;h++)i[h]=Oc(b,(h+g)%7,d,"day");return i}function Rc(a,b){return Pc(a,b,"months")}function Sc(a,b){return Pc(a,b,"monthsShort")}function Tc(a,b,c){return Qc(a,b,c,"weekdays")}function Uc(a,b,c){return Qc(a,b,c,"weekdaysShort")}function Vc(a,b,c){return Qc(a,b,c,"weekdaysMin")}function Wc(){var a=this._data;return this._milliseconds=Ze(this._milliseconds),this._days=Ze(this._days),this._months=Ze(this._months),a.milliseconds=Ze(a.milliseconds),a.seconds=Ze(a.seconds),a.minutes=Ze(a.minutes),a.hours=Ze(a.hours),a.months=Ze(a.months),a.years=Ze(a.years),this}function Xc(a,b,c,d){var e=Ob(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()} +// supports only 2.0-style add(1, 's') or add(duration) +function Yc(a,b){return Xc(this,a,b,1)} +// supports only 2.0-style subtract(1, 's') or subtract(duration) +function Zc(a,b){return Xc(this,a,b,-1)}function $c(a){return a<0?Math.floor(a):Math.ceil(a)}function _c(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data; +// if we have a mix of positive and negative values, bubble down first +// check: https://github.com/moment/moment/issues/2166 +// The following code bubbles up values, see the tests for +// examples of what that means. +// convert days to months +// 12 months -> 1 year +return f>=0&&g>=0&&h>=0||f<=0&&g<=0&&h<=0||(f+=864e5*$c(bd(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=t(f/1e3),i.seconds=a%60,b=t(a/60),i.minutes=b%60,c=t(b/60),i.hours=c%24,g+=t(c/24),e=t(ad(g)),h+=e,g-=$c(bd(e)),d=t(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function ad(a){ +// 400 years have 146097 days (taking into account leap year rules) +// 400 years have 12 months === 4800 +return 4800*a/146097}function bd(a){ +// the reverse of daysToMonths +return 146097*a/4800}function cd(a){var b,c,d=this._milliseconds;if(a=K(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+ad(b),"month"===a?c:c/12;switch( +// handle milliseconds separately because of floating point math errors (issue #1867) +b=this._days+Math.round(bd(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3; +// Math.floor prevents floating point math errors here +case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}} +// TODO: Use this.as('ms')? +function dd(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*u(this._months/12)}function ed(a){return function(){return this.as(a)}}function fd(a){return a=K(a),this[a+"s"]()}function gd(a){return function(){return this._data[a]}}function hd(){return t(this.days()/7)} +// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize +function id(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function jd(a,b,c){var d=Ob(a).abs(),e=of(d.as("s")),f=of(d.as("m")),g=of(d.as("h")),h=of(d.as("d")),i=of(d.as("M")),j=of(d.as("y")),k=e0,k[4]=c,id.apply(null,k)} +// This function allows you to set the rounding function for relative time strings +function kd(a){return void 0===a?of:"function"==typeof a&&(of=a,!0)} +// This function allows you to set a threshold for relative time strings +function ld(a,b){return void 0!==pf[a]&&(void 0===b?pf[a]:(pf[a]=b,!0))}function md(a){var b=this.localeData(),c=jd(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function nd(){ +// for ISO strings we do not use the normal bubbling rules: +// * milliseconds bubble up until they become hours +// * days do not bubble at all +// * months bubble up until they become years +// This is because there is no context-free conversion between hours and days +// (think of clock changes) +// and also not between days and months (28-31 days per month) +var a,b,c,d=qf(this._milliseconds)/1e3,e=qf(this._days),f=qf(this._months); +// 3600 seconds -> 60 minutes -> 1 hour +a=t(d/60),b=t(a/60),d%=60,a%=60, +// 12 months -> 1 year +c=t(f/12),f%=12; +// inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js +var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(m<0?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+(l?l+"S":""):"P0D"}var od,pd;pd=Array.prototype.some?Array.prototype.some:function(a){for(var b=Object(this),c=b.length>>>0,d=0;d68?1900:2e3)}; +// MOMENTS +var pe=O("FullYear",!0); +// FORMATTING +U("w",["ww",2],"wo","week"),U("W",["WW",2],"Wo","isoWeek"), +// ALIASES +J("week","w"),J("isoWeek","W"), +// PRIORITIES +M("week",5),M("isoWeek",5), +// PARSING +Z("w",Od),Z("ww",Od,Kd),Z("W",Od),Z("WW",Od,Kd),ca(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=u(a)});var qe={dow:0,// Sunday is the first day of the week. +doy:6}; +// FORMATTING +U("d",0,"do","day"),U("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),U("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),U("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),U("e",0,0,"weekday"),U("E",0,0,"isoWeekday"), +// ALIASES +J("day","d"),J("weekday","e"),J("isoWeekday","E"), +// PRIORITY +M("day",11),M("weekday",11),M("isoWeekday",11), +// PARSING +Z("d",Od),Z("e",Od),Z("E",Od),Z("dd",function(a,b){return b.weekdaysMinRegex(a)}),Z("ddd",function(a,b){return b.weekdaysShortRegex(a)}),Z("dddd",function(a,b){return b.weekdaysRegex(a)}),ca(["dd","ddd","dddd"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict); +// if we didn't get a weekday name, mark the date as invalid +null!=e?b.d=e:m(c).invalidWeekday=a}),ca(["d","e","E"],function(a,b,c,d){b[d]=u(a)}); +// LOCALES +var re="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),se="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),te="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ue=Zd,ve=Zd,we=Zd;U("H",["HH",2],0,"hour"),U("h",["hh",2],0,Ra),U("k",["kk",2],0,Sa),U("hmm",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)}),U("hmmss",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),U("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),U("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ta("a",!0),Ta("A",!1), +// ALIASES +J("hour","h"), +// PRIORITY +M("hour",13),Z("a",Ua),Z("A",Ua),Z("H",Od),Z("h",Od),Z("HH",Od,Kd),Z("hh",Od,Kd),Z("hmm",Pd),Z("hmmss",Qd),Z("Hmm",Pd),Z("Hmmss",Qd),ba(["H","HH"],de),ba(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),ba(["h","hh"],function(a,b,c){b[de]=u(a),m(c).bigHour=!0}),ba("hmm",function(a,b,c){var d=a.length-2;b[de]=u(a.substr(0,d)),b[ee]=u(a.substr(d)),m(c).bigHour=!0}),ba("hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[de]=u(a.substr(0,d)),b[ee]=u(a.substr(d,2)),b[fe]=u(a.substr(e)),m(c).bigHour=!0}),ba("Hmm",function(a,b,c){var d=a.length-2;b[de]=u(a.substr(0,d)),b[ee]=u(a.substr(d))}),ba("Hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[de]=u(a.substr(0,d)),b[ee]=u(a.substr(d,2)),b[fe]=u(a.substr(e))});var xe,ye=/[ap]\.?m?\.?/i,ze=O("Hours",!0),Ae={calendar:xd,longDateFormat:yd,invalidDate:zd,ordinal:Ad,ordinalParse:Bd,relativeTime:Cd,months:le,monthsShort:me,week:qe,weekdays:re,weekdaysMin:te,weekdaysShort:se,meridiemParse:ye},Be={},Ce={},De=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ee=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Fe=/Z|[+-]\d\d(?::?\d\d)?/,Ge=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/], +// YYYYMM is NOT allowed by the standard +["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],He=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Ie=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=x("value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}), +// constant that refers to the ISO standard +a.ISO_8601=function(){};var Je=x("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=sb.apply(null,arguments);return this.isValid()&&a.isValid()?athis?this:a:o()}),Le=function(){return Date.now?Date.now():+new Date};zb("Z",":"),zb("ZZ",""), +// PARSING +Z("Z",Xd),Z("ZZ",Xd),ba(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Ab(Xd,a)}); +// HELPERS +// timezone chunker +// '+10:00' > ['10', '00'] +// '-1530' > ['-15', '30'] +var Me=/([\+\-]|\d\d)/gi; +// HOOKS +// This function will be called whenever a moment is mutated. +// It is intended to keep the offset in sync with the timezone. +a.updateOffset=function(){}; +// ASP.NET json date format regex +var Ne=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Oe=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ob.fn=wb.prototype;var Pe=Sb(1,"add"),Qe=Sb(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Re=x("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)}); +// FORMATTING +U(0,["gg",2],0,function(){return this.weekYear()%100}),U(0,["GG",2],0,function(){return this.isoWeekYear()%100}),zc("gggg","weekYear"),zc("ggggg","weekYear"),zc("GGGG","isoWeekYear"),zc("GGGGG","isoWeekYear"), +// ALIASES +J("weekYear","gg"),J("isoWeekYear","GG"), +// PRIORITY +M("weekYear",1),M("isoWeekYear",1), +// PARSING +Z("G",Vd),Z("g",Vd),Z("GG",Od,Kd),Z("gg",Od,Kd),Z("GGGG",Sd,Md),Z("gggg",Sd,Md),Z("GGGGG",Td,Nd),Z("ggggg",Td,Nd),ca(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=u(a)}),ca(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}), +// FORMATTING +U("Q",0,"Qo","quarter"), +// ALIASES +J("quarter","Q"), +// PRIORITY +M("quarter",7), +// PARSING +Z("Q",Jd),ba("Q",function(a,b){b[be]=3*(u(a)-1)}), +// FORMATTING +U("D",["DD",2],"Do","date"), +// ALIASES +J("date","D"), +// PRIOROITY +M("date",9), +// PARSING +Z("D",Od),Z("DD",Od,Kd),Z("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),ba(["D","DD"],ce),ba("Do",function(a,b){b[ce]=u(a.match(Od)[0],10)}); +// MOMENTS +var Se=O("Date",!0); +// FORMATTING +U("DDD",["DDDD",3],"DDDo","dayOfYear"), +// ALIASES +J("dayOfYear","DDD"), +// PRIORITY +M("dayOfYear",4), +// PARSING +Z("DDD",Rd),Z("DDDD",Ld),ba(["DDD","DDDD"],function(a,b,c){c._dayOfYear=u(a)}), +// FORMATTING +U("m",["mm",2],0,"minute"), +// ALIASES +J("minute","m"), +// PRIORITY +M("minute",14), +// PARSING +Z("m",Od),Z("mm",Od,Kd),ba(["m","mm"],ee); +// MOMENTS +var Te=O("Minutes",!1); +// FORMATTING +U("s",["ss",2],0,"second"), +// ALIASES +J("second","s"), +// PRIORITY +M("second",15), +// PARSING +Z("s",Od),Z("ss",Od,Kd),ba(["s","ss"],fe); +// MOMENTS +var Ue=O("Seconds",!1); +// FORMATTING +U("S",0,0,function(){return~~(this.millisecond()/100)}),U(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),U(0,["SSS",3],0,"millisecond"),U(0,["SSSS",4],0,function(){return 10*this.millisecond()}),U(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),U(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),U(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),U(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),U(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}), +// ALIASES +J("millisecond","ms"), +// PRIORITY +M("millisecond",16), +// PARSING +Z("S",Rd,Jd),Z("SS",Rd,Kd),Z("SSS",Rd,Ld);var Ve;for(Ve="SSSS";Ve.length<=9;Ve+="S")Z(Ve,Ud);for(Ve="S";Ve.length<=9;Ve+="S")ba(Ve,Ic); +// MOMENTS +var We=O("Milliseconds",!1); +// FORMATTING +U("z",0,0,"zoneAbbr"),U("zz",0,0,"zoneName");var Xe=r.prototype;Xe.add=Pe,Xe.calendar=Vb,Xe.clone=Wb,Xe.diff=bc,Xe.endOf=oc,Xe.format=gc,Xe.from=hc,Xe.fromNow=ic,Xe.to=jc,Xe.toNow=kc,Xe.get=R,Xe.invalidAt=xc,Xe.isAfter=Xb,Xe.isBefore=Yb,Xe.isBetween=Zb,Xe.isSame=$b,Xe.isSameOrAfter=_b,Xe.isSameOrBefore=ac,Xe.isValid=vc,Xe.lang=Re,Xe.locale=lc,Xe.localeData=mc,Xe.max=Ke,Xe.min=Je,Xe.parsingFlags=wc,Xe.set=S,Xe.startOf=nc,Xe.subtract=Qe,Xe.toArray=sc,Xe.toObject=tc,Xe.toDate=rc,Xe.toISOString=ec,Xe.inspect=fc,Xe.toJSON=uc,Xe.toString=dc,Xe.unix=qc,Xe.valueOf=pc,Xe.creationData=yc, +// Year +Xe.year=pe,Xe.isLeapYear=ra, +// Week Year +Xe.weekYear=Ac,Xe.isoWeekYear=Bc, +// Quarter +Xe.quarter=Xe.quarters=Gc, +// Month +Xe.month=ka,Xe.daysInMonth=la, +// Week +Xe.week=Xe.weeks=Ba,Xe.isoWeek=Xe.isoWeeks=Ca,Xe.weeksInYear=Dc,Xe.isoWeeksInYear=Cc, +// Day +Xe.date=Se,Xe.day=Xe.days=Ka,Xe.weekday=La,Xe.isoWeekday=Ma,Xe.dayOfYear=Hc, +// Hour +Xe.hour=Xe.hours=ze, +// Minute +Xe.minute=Xe.minutes=Te, +// Second +Xe.second=Xe.seconds=Ue, +// Millisecond +Xe.millisecond=Xe.milliseconds=We, +// Offset +Xe.utcOffset=Db,Xe.utc=Fb,Xe.local=Gb,Xe.parseZone=Hb,Xe.hasAlignedHourOffset=Ib,Xe.isDST=Jb,Xe.isLocal=Lb,Xe.isUtcOffset=Mb,Xe.isUtc=Nb,Xe.isUTC=Nb, +// Timezone +Xe.zoneAbbr=Jc,Xe.zoneName=Kc, +// Deprecations +Xe.dates=x("dates accessor is deprecated. Use date instead.",Se),Xe.months=x("months accessor is deprecated. Use month instead",ka),Xe.years=x("years accessor is deprecated. Use year instead",pe),Xe.zone=x("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Eb),Xe.isDSTShifted=x("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Kb);var Ye=C.prototype;Ye.calendar=D,Ye.longDateFormat=E,Ye.invalidDate=F,Ye.ordinal=G,Ye.preparse=Nc,Ye.postformat=Nc,Ye.relativeTime=H,Ye.pastFuture=I,Ye.set=A, +// Month +Ye.months=fa,Ye.monthsShort=ga,Ye.monthsParse=ia,Ye.monthsRegex=na,Ye.monthsShortRegex=ma, +// Week +Ye.week=ya,Ye.firstDayOfYear=Aa,Ye.firstDayOfWeek=za, +// Day of Week +Ye.weekdays=Fa,Ye.weekdaysMin=Ha,Ye.weekdaysShort=Ga,Ye.weekdaysParse=Ja,Ye.weekdaysRegex=Na,Ye.weekdaysShortRegex=Oa,Ye.weekdaysMinRegex=Pa, +// Hours +Ye.isPM=Va,Ye.meridiem=Wa,$a("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===u(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}), +// Side effect imports +a.lang=x("moment.lang is deprecated. Use moment.locale instead.",$a),a.langData=x("moment.langData is deprecated. Use moment.localeData instead.",bb);var Ze=Math.abs,$e=ed("ms"),_e=ed("s"),af=ed("m"),bf=ed("h"),cf=ed("d"),df=ed("w"),ef=ed("M"),ff=ed("y"),gf=gd("milliseconds"),hf=gd("seconds"),jf=gd("minutes"),kf=gd("hours"),lf=gd("days"),mf=gd("months"),nf=gd("years"),of=Math.round,pf={s:45,// seconds to minute +m:45,// minutes to hour +h:22,// hours to day +d:26,// days to month +M:11},qf=Math.abs,rf=wb.prototype; +// Deprecations +// Side effect imports +// FORMATTING +// PARSING +// Side effect imports +return rf.abs=Wc,rf.add=Yc,rf.subtract=Zc,rf.as=cd,rf.asMilliseconds=$e,rf.asSeconds=_e,rf.asMinutes=af,rf.asHours=bf,rf.asDays=cf,rf.asWeeks=df,rf.asMonths=ef,rf.asYears=ff,rf.valueOf=dd,rf._bubble=_c,rf.get=fd,rf.milliseconds=gf,rf.seconds=hf,rf.minutes=jf,rf.hours=kf,rf.days=lf,rf.weeks=hd,rf.months=mf,rf.years=nf,rf.humanize=md,rf.toISOString=nd,rf.toString=nd,rf.toJSON=nd,rf.locale=lc,rf.localeData=mc,rf.toIsoString=x("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",nd),rf.lang=Re,U("X",0,0,"unix"),U("x",0,0,"valueOf"),Z("x",Vd),Z("X",Yd),ba("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),ba("x",function(a,b,c){c._d=new Date(u(a))}),a.version="2.17.1",b(sb),a.fn=Xe,a.min=ub,a.max=vb,a.now=Le,a.utc=k,a.unix=Lc,a.months=Rc,a.isDate=g,a.locale=$a,a.invalid=o,a.duration=Ob,a.isMoment=s,a.weekdays=Tc,a.parseZone=Mc,a.localeData=bb,a.isDuration=xb,a.monthsShort=Sc,a.weekdaysMin=Vc,a.defineLocale=_a,a.updateLocale=ab,a.locales=cb,a.weekdaysShort=Uc,a.normalizeUnits=K,a.relativeTimeRounding=kd,a.relativeTimeThreshold=ld,a.calendarFormat=Ub,a.prototype=Xe,a}); \ No newline at end of file diff --git a/www/plugins-dist/organiseur/notifications/instituermessage.php b/www/plugins-dist/organiseur/notifications/instituermessage.php index a19d6102..3fc1ea76 100644 --- a/www/plugins-dist/organiseur/notifications/instituermessage.php +++ b/www/plugins-dist/organiseur/notifications/instituermessage.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** @@ -21,21 +23,21 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * @param int $id_message * @param array $options */ -function notifications_instituermessage_dist($quoi, $id_message, $options=array()){ - +function notifications_instituermessage_dist($quoi, $id_message, $options = array()) { + // ne devrait jamais se produire if ($options['statut'] == $options['statut_ancien']) { - spip_log("statut inchange",'notifications'); + spip_log('statut inchange', 'notifications'); return; } - if ($options['statut']=='publie'){ + if ($options['statut'] == 'publie') { include_spip('inc/messages'); - $type = sql_getfetsel('type','spip_messages','id_message='.intval($id_message)); + $type = sql_getfetsel('type', 'spip_messages', 'id_message=' . intval($id_message)); $vue = "notifications/message_{$type}_publie"; - if (trouver_fond($vue)){ - $envoyer_mail = charger_fonction('envoyer_mail','inc'); // pour nettoyer_titre_email - $texte = recuperer_fond($vue,array('id_message'=>$id_message)); + if (trouver_fond($vue)) { + $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); // pour nettoyer_titre_email + $texte = recuperer_fond($vue, array('id_message' => $id_message)); // recuperer tous les emails des auteurs qui ont recu le message dans leur boite // si c'est une annonce generale, on envoie a tout le monde @@ -43,19 +45,19 @@ function notifications_instituermessage_dist($quoi, $id_message, $options=array( $where = array( "email!=''", "statut!='5poubelle'", - sql_in('statut',messagerie_statuts_destinataires_possibles()) + sql_in('statut', messagerie_statuts_destinataires_possibles()) ); // pour une annonce : tous ceux qui recoivent des messages - if ($type!=='affich'){ - $ids = sql_allfetsel('id_auteur','spip_auteurs_liens',"objet='message' AND id_objet=".intval($id_message)); - $ids = array_map('reset',$ids); - $where[] = sql_in('id_auteur',$ids); + if ($type !== 'affich') { + $ids = sql_allfetsel('id_auteur', 'spip_auteurs_liens', "objet='message' AND id_objet=" . intval($id_message)); + $ids = array_map('reset', $ids); + $where[] = sql_in('id_auteur', $ids); } - $emails = sql_allfetsel('email',"spip_auteurs",$where); - $emails = array_map('reset',$emails); + $emails = sql_allfetsel('email', 'spip_auteurs', $where); + $emails = array_map('reset', $emails); include_spip('inc/notifications'); - notifications_envoyer_mails($emails,$texte); + notifications_envoyer_mails($emails, $texte); } } -} \ No newline at end of file +} diff --git a/www/plugins-dist/organiseur/organiseur_administrations.php b/www/plugins-dist/organiseur/organiseur_administrations.php index dac0225b..be945888 100644 --- a/www/plugins-dist/organiseur/organiseur_administrations.php +++ b/www/plugins-dist/organiseur/organiseur_administrations.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Installation/maj des tables messagerie @@ -18,32 +20,33 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * @param string $nom_meta_base_version * @param string $version_cible */ -function organiseur_upgrade($nom_meta_base_version,$version_cible){ +function organiseur_upgrade($nom_meta_base_version, $version_cible) { // cas particulier : // si plugin pas installe mais que la table existe // considerer que c'est un upgrade depuis v 1.0.0 // pour gerer l'historique des installations SPIP <=2.1 - if (!isset($GLOBALS['meta'][$nom_meta_base_version])){ - $trouver_table = charger_fonction('trouver_table','base'); + if (!isset($GLOBALS['meta'][$nom_meta_base_version])) { + $trouver_table = charger_fonction('trouver_table', 'base'); if ($desc = $trouver_table('spip_messages') - AND isset($desc['exist']) AND $desc['exist']){ - ecrire_meta($nom_meta_base_version,'1.0.0'); + and isset($desc['exist']) and $desc['exist'] + ) { + ecrire_meta($nom_meta_base_version, '1.0.0'); } // si pas de table en base, on fera une simple creation de base } - + $maj = array(); $maj['create'] = array( array('maj_tables', array('spip_messages', 'spip_auteurs')), ); $maj['1.1.0'] = array( - array('sql_updateq',"spip_messages",array('statut'=>'prepa'),"statut='redac'"), + array('sql_updateq', 'spip_messages', array('statut' => 'prepa'), "statut='redac'"), array('maj_tables', array('spip_messages')), // champ destinataires ); $maj['1.1.1'] = array( - array('sql_alter',"TABLE spip_messages CHANGE id_auteur id_auteur bigint(21) DEFAULT 0 NOT NULL"), + array('sql_alter', 'TABLE spip_messages CHANGE id_auteur id_auteur bigint(21) DEFAULT 0 NOT NULL'), ); $maj['1.1.2'] = array( @@ -61,15 +64,11 @@ function organiseur_upgrade($nom_meta_base_version,$version_cible){ * @param string $nom_meta_base_version */ function organiseur_vider_tables($nom_meta_base_version) { - sql_drop_table("spip_messages"); - sql_alter("TABLE spip_auteurs DROP imessage"); - sql_alter("TABLE spip_auteurs DROP messagerie"); + sql_drop_table('spip_messages'); + sql_alter('TABLE spip_auteurs DROP imessage'); + sql_alter('TABLE spip_auteurs DROP messagerie'); effacer_meta('messagerie_agenda'); effacer_meta($nom_meta_base_version); } - - - -?> diff --git a/www/plugins-dist/organiseur/organiseur_autoriser.php b/www/plugins-dist/organiseur/organiseur_autoriser.php index 50a1719e..93ee4aa7 100644 --- a/www/plugins-dist/organiseur/organiseur_autoriser.php +++ b/www/plugins-dist/organiseur/organiseur_autoriser.php @@ -10,96 +10,135 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Fonction vide pour charger ce fichier sans declencher de warning + * * @return void */ -function organiseur_autoriser(){} +function organiseur_autoriser() { +} -function autoriser_calendrier_menu_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){ - if($GLOBALS['meta']['messagerie_agenda'] == 'oui') +function autoriser_calendrier_menu_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { + if ($GLOBALS['meta']['messagerie_agenda'] == 'oui') { return true; + } + return false; } -function autoriser_messagerie_menu_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){ - if($GLOBALS['meta']['messagerie_agenda'] == 'oui') +function autoriser_messagerie_menu_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { + if ($GLOBALS['meta']['messagerie_agenda'] == 'oui') { return true; + } + return false; } -function autoriser_message_modifier_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){ - if (!intval($qui['id_auteur'])) +function autoriser_message_modifier_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { + if (!intval($qui['id_auteur'])) { return false; - $row = sql_fetsel('statut,type,id_auteur','spip_messages','id_message='.intval($id)); + } + $row = sql_fetsel('statut,type,id_auteur', 'spip_messages', 'id_message=' . intval($id)); // on peut modifier ses penses betes ou ses messages brouillons - if ($row['id_auteur']==$qui['id_auteur'] AND ($row['statut']=='prepa' OR $row['type']=='pb')) + if ($row['id_auteur'] == $qui['id_auteur'] and ($row['statut'] == 'prepa' or $row['type'] == 'pb')) { return true; + } // on peut modifier les annonces si on est admin - if ($qui['statut']=='0minirezo' AND $row['type']=='affich') + if ($qui['statut'] == '0minirezo' and $row['type'] == 'affich') { return true; + } + return false; } -function autoriser_message_instituer_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){ +function autoriser_message_instituer_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { // rediriger vers la bonne autorisation en cas de suppression - if ($opt['statut'] == 'poub') - return autoriser('supprimer','message',$id,$qui,$opt); - return autoriser('modifier','message',$id,$qui,$opt); + if ($opt['statut'] == 'poub') { + return autoriser('supprimer', 'message', $id, $qui, $opt); + } + + return autoriser('modifier', 'message', $id, $qui, $opt); } -function autoriser_message_supprimer_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){ +function autoriser_message_supprimer_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { // on peut supprimer un message que l'on peut modifier - if (autoriser('modifier','message',$id,$qui,$opt)) + if (autoriser('modifier', 'message', $id, $qui, $opt)) { return true; + } // mais on peut aussi supprimer un message envoye par soi // si tous ses dest l'on supprime aussi if ( $qui['id_auteur'] - AND sql_countsel('spip_messages',"statut='publie' AND id_auteur=".intval($qui['id_auteur'])." AND id_message=".intval($id)) - AND !sql_countsel('spip_auteurs_liens',"objet='message' AND id_objet=".intval($id)." AND vu!='poub' AND id_auteur!=".intval($qui['id_auteur'])) - ) + and sql_countsel( + 'spip_messages', + "statut='publie' AND id_auteur=" . intval($qui['id_auteur']) . ' AND id_message=' . intval($id) + ) and !sql_countsel( + 'spip_auteurs_liens', + "objet='message' AND id_objet=" . intval($id) . " AND vu!='poub' AND id_auteur!=" . intval($qui['id_auteur']) + )) { return true; + } + return false; } -function autoriser_messagerecu_effacer_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){ - if (isset($opt['id_auteur'])) +function autoriser_messagerecu_effacer_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { + if (isset($opt['id_auteur'])) { $id_auteur = $opt['id_auteur']; - else + } else { $id_auteur = $qui['id_auteur']; + } // seul le destinataire peut supprimer un message qui lui est destine - if (!intval($id_auteur) OR intval($id_auteur) != intval($qui['id_auteur'])) + if (!intval($id_auteur) or intval($id_auteur) != intval($qui['id_auteur'])) { return false; + } + // rien d'autre a verifier?... return true; } -function autoriser_message_dater_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){ +function autoriser_message_dater_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { return false; } -function autoriser_envoyermessage_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){ - if (!($GLOBALS['meta']['messagerie_agenda'] == 'oui') OR !intval($qui['id_auteur'])) +function autoriser_envoyermessage_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { + if (!($GLOBALS['meta']['messagerie_agenda'] == 'oui') or !intval($qui['id_auteur'])) { return false; + } // on peut envoyer une annonce si on est admin - if (!($qui['statut']=='0minirezo') AND $type=='affich') + if (!($qui['statut'] == '0minirezo') and $type == 'affich') { return false; + } + return true; } -function autoriser_message_voir_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){ - if (!intval($qui['id_auteur'])) +function autoriser_message_voir_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { + if (!intval($qui['id_auteur'])) { return false; + } // message annonce ou message dont $qui est l'auteur : droit de le voir - if (sql_countsel('spip_messages','id_message='.intval($id).' AND (type=\'affich\' OR id_auteur='.intval($qui['id_auteur']).')')) + if (sql_countsel( + 'spip_messages', + 'id_message=' . intval($id) . ' AND (type=\'affich\' OR id_auteur=' . intval($qui['id_auteur']) . ')' + )) { return true; + } // message dont $qui est destinataire - if (sql_countsel('spip_auteurs_liens','objet=\'message\' AND id_objet='.intval($id)." AND vu!='poub' AND id_auteur=".intval($qui['id_auteur']))) + if (sql_countsel( + 'spip_auteurs_liens', + 'objet=\'message\' AND id_objet=' . intval($id) . " AND vu!='poub' AND id_auteur=" . intval($qui['id_auteur']) + )) { return true; + } return false; } +function autoriser_message_repondre_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { + return autoriser('ecrire', '', '', $qui['id_auteur']); +} diff --git a/www/plugins-dist/organiseur/organiseur_fonctions.php b/www/plugins-dist/organiseur/organiseur_fonctions.php index 0006deb2..7af0d328 100644 --- a/www/plugins-dist/organiseur/organiseur_fonctions.php +++ b/www/plugins-dist/organiseur/organiseur_fonctions.php @@ -10,51 +10,65 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} function critere_MESSAGES_destinataire_dist($idb, &$boucles, $crit) { $boucle = &$boucles[$idb]; $_auteur = calculer_liste($crit->param[0], array(), $boucles, $boucle->id_parent); - $boucle->join['auteurs_liens']=array("'".$boucle->id_table."'","'id_objet'","'".$boucle->primary."'","'auteurs_liens.objet=\'message\' AND auteurs_liens.id_auteur='.intval($_auteur)"); - $boucle->from['auteurs_liens']='spip_auteurs_liens'; + $boucle->join['auteurs_liens'] = array( + "'" . $boucle->id_table . "'", + "'id_objet'", + "'" . $boucle->primary . "'", + "'auteurs_liens.objet=\'message\' AND auteurs_liens.id_auteur='.intval($_auteur)" + ); + $boucle->from['auteurs_liens'] = 'spip_auteurs_liens'; $boucle->from_type['auteurs_liens'] = 'LEFT'; $where = - array("'OR'", - array("'AND'", - array("'!='","'".$boucle->id_table.".id_auteur'","intval($_auteur)"), + array( + "'OR'", + array( + "'AND'", + array("'!='", "'" . $boucle->id_table . ".id_auteur'", "intval($_auteur)"), array( "'AND'", - array("'='","'auteurs_liens.id_auteur'","intval($_auteur)"), - array("'!='","'auteurs_liens.vu'","'\'poub\''"), + array("'='", "'auteurs_liens.id_auteur'", "intval($_auteur)"), + array("'!='", "'auteurs_liens.vu'", "'\'poub\''"), ), ), - array("'OR'", - array("'='","'".$boucle->id_table.".type'","sql_quote('affich')"), + array( + "'OR'", + array("'='", "'" . $boucle->id_table . ".type'", "sql_quote('affich')"), array( "'AND'", - array("'='","'".$boucle->id_table.".type'","sql_quote('pb')"), - array("'='","'".$boucle->id_table.".id_auteur'","intval($_auteur)"), + array("'='", "'" . $boucle->id_table . ".type'", "sql_quote('pb')"), + array("'='", "'" . $boucle->id_table . ".id_auteur'", "intval($_auteur)"), ) ) ); $not = $crit->not; - if ($crit->cond) - $where = array("'?'","strlen($_auteur)", $where,"'1=1'"); + if ($crit->cond) { + $where = array("'?'", "strlen($_auteur)", $where, "'1=1'"); + } - if ($not) - $where = array("'NOT'",$where); + if ($not) { + $where = array("'NOT'", $where); + } $boucle->where[] = $where; } + function critere_MESSAGES_non_lu_dist($idb, &$boucles, $crit) { $boucle = &$boucles[$idb]; $boucle->where[] = - array("'OR'", - "'auteurs_liens.vu IS NULL'", - "sql_in('auteurs_liens.vu',array('poub','oui'),'NOT',\$connect)" + array( + "'OR'", + "'auteurs_liens.vu IS NULL'", + "sql_in('auteurs_liens.vu',array('poub','oui'),'NOT',\$connect)" ); } @@ -68,12 +82,13 @@ function critere_MESSAGES_non_lu_dist($idb, &$boucles, $crit) { * @param object $crit * * @return string code PHP concernant la date. -**/ + **/ function organiseur_calculer_date_reference($idb, &$boucles, $crit) { - if (isset($crit->param[0])) + if (isset($crit->param[0])) { return calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent); - else + } else { return "date('Y-m-d H:i:00')"; + } } @@ -90,9 +105,9 @@ function critere_MESSAGES_rv_a_venir_dist($idb, &$boucles, $crit) { $id_table = $boucle->id_table; $_dateref = organiseur_calculer_date_reference($idb, $boucles, $crit); - $_date = "$id_table.".(isset($boucle->show['date'])?$boucle->show['date']:"date_debut"); - $op = $crit->not ? "<=":">"; - $where = array("'$op'","'$_date'","sql_quote($_dateref)"); + $_date = "$id_table." . (isset($boucle->show['date']) ? $boucle->show['date'] : 'date_debut'); + $op = $crit->not ? '<=' : '>'; + $where = array("'$op'", "'$_date'", "sql_quote($_dateref)"); $boucle->where[] = $where; } @@ -111,9 +126,9 @@ function critere_MESSAGES_rv_passe_dist($idb, &$boucles, $crit) { $_dateref = organiseur_calculer_date_reference($idb, $boucles, $crit); $_date = "$id_table.date_fin"; - $op = $crit->not ? ">=":"<"; + $op = $crit->not ? '>=' : '<'; - $where = array("'$op'","'$_date'","sql_quote($_dateref)"); + $where = array("'$op'", "'$_date'", "sql_quote($_dateref)"); $boucle->where[] = $where; } @@ -130,34 +145,43 @@ function critere_MESSAGES_rv_en_cours_dist($idb, &$boucles, $crit) { $id_table = $boucle->id_table; $_dateref = organiseur_calculer_date_reference($idb, $boucles, $crit); - $_date_debut = "$id_table.".(isset($boucle->show['date'])?$boucle->show['date']:"date_debut"); + $_date_debut = "$id_table." . (isset($boucle->show['date']) ? $boucle->show['date'] : 'date_debut'); $_date_fin = "$id_table.date_fin"; $where = - array("'AND'", - array("'<='", "'$_date_debut'", "sql_quote($_dateref)"), - array("'>='", "'$_date_fin'", "sql_quote($_dateref)") - ); + array( + "'AND'", + array("'<='", "'$_date_debut'", "sql_quote($_dateref)"), + array("'>='", "'$_date_fin'", "sql_quote($_dateref)") + ); - if ($crit->not) - $where = array("'NOT'",$where); + if ($crit->not) { + $where = array("'NOT'", $where); + } $boucle->where[] = $where; } -function organiseur_icone_message($type,$taille=24){ - $icone = array('pb'=>'pensebete','affich'=>'annonce'); - $icone = isset($icone[$type])?$icone[$type]:'message'; +function organiseur_icone_message($type, $taille = 24) { + $icone = array('pb' => 'pensebete', 'affich' => 'annonce'); + $icone = isset($icone[$type]) ? $icone[$type] : 'message'; + return "$icone-$taille.png"; } -function organiseur_texte_modifier_message($type){ - $texte = array('pb'=>'organiseur:icone_modifier_pensebete','affich'=>'organiseur:icone_modifier_annonce'); - $texte = isset($texte[$type])?$texte[$type]:'organiseur:icone_modifier_message'; + +function organiseur_texte_modifier_message($type) { + $texte = array('pb' => 'organiseur:icone_modifier_pensebete', 'affich' => 'organiseur:icone_modifier_annonce'); + $texte = isset($texte[$type]) ? $texte[$type] : 'organiseur:icone_modifier_message'; + return _T($texte); } -function organiseur_texte_nouveau_message($type){ - $texte = array('pb'=>'organiseur:icone_ecrire_nouveau_pensebete','affich'=>'organiseur:icone_ecrire_nouvelle_annonce'); - $texte = isset($texte[$type])?$texte[$type]:'organiseur:icone_ecrire_nouveau_message'; + +function organiseur_texte_nouveau_message($type) { + $texte = array( + 'pb' => 'organiseur:icone_ecrire_nouveau_pensebete', + 'affich' => 'organiseur:icone_ecrire_nouvelle_annonce' + ); + $texte = isset($texte[$type]) ? $texte[$type] : 'organiseur:icone_ecrire_nouveau_message'; + return _T($texte); } -?> diff --git a/www/plugins-dist/organiseur/organiseur_ieconfig.php b/www/plugins-dist/organiseur/organiseur_ieconfig.php index 88f93a48..d6db886a 100644 --- a/www/plugins-dist/organiseur/organiseur_ieconfig.php +++ b/www/plugins-dist/organiseur/organiseur_ieconfig.php @@ -1,13 +1,29 @@ - \ No newline at end of file +"._T('organiseur:info_1_message_nonlu').""; + $id_message = $row['id_message']; + $flux['data'][] = "" . _T('organiseur:info_1_message_nonlu') . ''; + } elseif ($total_messages > 1) { + $flux['data'][] = "" . _T( + 'organiseur:info_nb_messages_nonlus', + array('nb' => $total_messages) + ) . ''; } - elseif ($total_messages > 1) - $flux['data'][] = ""._T('organiseur:info_nb_messages_nonlus', array('nb' => $total_messages)).""; return $flux; } @@ -84,102 +111,123 @@ function organiseur_alertes_auteur($flux) { * Afficher les interventions et objets en lien * avec un auteur (sur sa page) * + * @pipeline affiche_auteurs_interventions + * * @param array $flux * @return array */ -function organiseur_affiche_auteurs_interventions($flux){ +function organiseur_affiche_auteurs_interventions($flux) { - if ($id_auteur = intval($flux['args']['id_auteur'])){ + if ($id_auteur = intval($flux['args']['id_auteur'])) { include_spip('inc/message_select'); // Messages de l'auteur et discussions en cours if ($GLOBALS['meta']['messagerie_agenda'] != 'non' - AND $id_auteur != $GLOBALS['visiteur_session']['id_auteur'] - AND autoriser('ecrire', '', '', $flux['args']['auteur']) + and $id_auteur != $GLOBALS['visiteur_session']['id_auteur'] + and autoriser('repondre', 'message', '', $id_auteur) ) { - $flux['data'] .= recuperer_fond('prive/squelettes/inclure/organiseur-interventions',array('id_auteur'=>$id_auteur)); + $flux['data'] .= recuperer_fond( + 'prive/squelettes/inclure/organiseur-interventions', + array('id_auteur' => $id_auteur) + ); } } - return $flux; + + return $flux; } /** - * Declarer les metas de configuration de l'agenda/messagerie + * Déclarer les metas de configuration de l'agenda/messagerie + * + * @pipeline configurer_liste_metas * @param array $metas + * Couples nom de la méta => valeur par défaut * @return array + * Couples nom de la méta => valeur par défaut */ -function organiseur_configurer_liste_metas($metas){ +function organiseur_configurer_liste_metas($metas) { $metas['messagerie_agenda'] = 'oui'; + return $metas; } /** - * Inserer la css de l'agenda dans l'espace prive (hum) + * Insérer la css de l'agenda dans l'espace privé (hum) + * + * @pipeline header_prive * @param string $head * @return string */ -function organiseur_header_prive($head){ +function organiseur_header_prive($head) { // CSS calendrier - if ($GLOBALS['meta']['messagerie_agenda'] != 'non') + if ($GLOBALS['meta']['messagerie_agenda'] != 'non') { $head .= '' . "\n"; + . url_absolue(find_in_path('calendrier.css')) . '" />' . "\n"; + } - return $head; + return $head; } /** * Afficher agenda, messages et annonces sur la page d'accueil * + * @pipeline affiche_droite * @param array $flux * @return array */ -function organiseur_affiche_droite($flux){ - if ($flux['args']['exec']=='accueil'){ +function organiseur_affiche_droite($flux) { + if ($flux['args']['exec'] == 'accueil') { $flux['data'] .= recuperer_fond( 'prive/squelettes/inclure/organiseur-rappels', array( - 'id_auteur'=>$GLOBALS['visiteur_session']['id_auteur'], + 'id_auteur' => $GLOBALS['visiteur_session']['id_auteur'], 'last' => $GLOBALS['visiteur_session']['quand'], ) ); } - return $flux; + + return $flux; } /** - * Afficher le formulaire de configuration sur la page concernee + * Afficher le formulaire de configuration sur la page concernée * + * @pipeline affiche_milieu * @param array $flux * @return array */ -function organiseur_affiche_milieu($flux){ - if ($flux['args']['exec']=='configurer_interactions'){ - $c = recuperer_fond('prive/squelettes/inclure/configurer_messagerie',array()); - if ($p = strpos($flux['data'],'')) - $flux['data'] = substr_replace($flux['data'],$c,$p,0); - else - $flux['data'] .= $c; +function organiseur_affiche_milieu($flux) { + if ($flux['args']['exec'] == 'configurer_interactions') { + $c = recuperer_fond('prive/squelettes/inclure/configurer_messagerie', array()); + if ($p = strpos($flux['data'], '')) { + $flux['data'] = substr_replace($flux['data'], $c, $p, 0); + } else { + $flux['data'] .= $c; + } } - return $flux; + + return $flux; } /** * Diffuser un message qui passe en publie (== a envoyer) * + * @pipeline post_edition * @param array $flux * @return array */ -function organiseur_post_edition($flux){ - - if ($flux['args']['table']=='spip_messages' - AND $flux['args']['action']=='instituer' - AND $flux['data']['statut']=='publie' - AND $flux['args']['statut_ancien']!='publie' - ){ +function organiseur_post_edition($flux) { + + if (isset($flux['args']['table']) + and $flux['args']['table'] == 'spip_messages' + and $flux['args']['action'] == 'instituer' + and $flux['data']['statut'] == 'publie' + and $flux['args']['statut_ancien'] != 'publie' + ) { $id_message = $flux['args']['id_objet']; - $row = sql_fetsel('destinataires,id_auteur,titre,texte','spip_messages','id_message='.intval($id_message)); - if ($row){ + $row = sql_fetsel('destinataires,id_auteur,titre,texte', 'spip_messages', 'id_message=' . intval($id_message)); + if ($row) { include_spip('inc/messages'); - list($auteurs_dest,$email_dests) = messagerie_destiner(explode(',',$row['destinataires'])); + list($auteurs_dest, $email_dests) = messagerie_destiner(explode(',', $row['destinataires'])); // diffuser le message en interne messagerie_diffuser_message($id_message, $auteurs_dest); @@ -187,5 +235,6 @@ function organiseur_post_edition($flux){ messagerie_mailer_message($id_message, $email_dests); } } + return $flux; -} \ No newline at end of file +} diff --git a/www/plugins-dist/organiseur/paquet.xml b/www/plugins-dist/organiseur/paquet.xml index b437e8a0..94b9dd4e 100644 --- a/www/plugins-dist/organiseur/paquet.xml +++ b/www/plugins-dist/organiseur/paquet.xml @@ -1,12 +1,12 @@ +> Organiseur diff --git a/www/plugins-dist/organiseur/prive/objets/liste/messages-recus.html b/www/plugins-dist/organiseur/prive/objets/liste/messages-recus.html index e4fbdc2d..0d40527e 100644 --- a/www/plugins-dist/organiseur/prive/objets/liste/messages-recus.html +++ b/www/plugins-dist/organiseur/prive/objets/liste/messages-recus.html @@ -11,46 +11,43 @@ #ANCRE_PAGINATION
        - +
        [] - - - - - - - - + + + + + + + + [(#SET{vu,[(#TYPE|=={pb}|ou{#VU|match{^(oui|poub)$}})]})] - - - - - - + + + + + - +
        (#ENV*{titre,#GET{nonlus}|singulier_ou_pluriel{organiseur:info_1_message_nonlu,organiseur:info_nb_messages_nonlus} |sinon{#GRAND_TOTAL|singulier_ou_pluriel{info_1_message,info_nb_messages}} })
        [(#TRI{type,#,ajax})][(#CHEMIN_IMAGE{heure-16.png}|balise_img{<:organiseur:info_type_message_rv:>})][(#TRI{nom,<:organiseur:info_message_de:>,ajax})][(#TRI{titre,<:info_titre:>,ajax})][(#TRI{date_heure,<:date:>,ajax})]
        [(#TRI{type,#,ajax})][(#CHEMIN_IMAGE{heure-16.png}|balise_img{<:organiseur:info_type_message_rv:>})][(#TRI{nom,<:organiseur:info_message_de:>,ajax})][(#TRI{titre,<:info_titre:>,ajax})][(#TRI{date_heure,<:date:>,ajax})]
        [(#GET{vu}|?{'',#CHEMIN_IMAGE{pictonew-16.png}|balise_img{<:organiseur:info_message_non_lu:>}|inserer_attribut{title,<:organiseur:info_message_non_lu:>}})][(#CHEMIN_IMAGE{#TYPE|organiseur_icone_message{16}}|balise_img{#VAL{organiseur:info_type_message_}|concat{#TYPE}|_T})][(#RV|=={oui}|oui)[(#CHEMIN_IMAGE{heure-16.png}|balise_img{<:organiseur:info_type_message_rv:>})]]#NOM - #TITRE - + [(#GET{vu}|?{'',#CHEMIN_IMAGE{pictonew-16.png}|balise_img{<:organiseur:info_message_non_lu:>}|inserer_attribut{title,<:organiseur:info_message_non_lu:>}})][(#CHEMIN_IMAGE{#TYPE|organiseur_icone_message{16}}|balise_img{#VAL{organiseur:info_type_message_}|concat{#TYPE}|_T})][(#RV|=={oui}|oui)[(#CHEMIN_IMAGE{heure-16.png}|balise_img{<:organiseur:info_type_message_rv:>})]]#INFO_NOM{auteur,#ID_AUTEUR}#TITRE [(#RV|=={oui}|?{ [(#DATE_HEURE|affdate_debut_fin{#DATE_FIN,oui,abbr})] , [(#DATE_HEURE|affdate_jourcourt)] })]
        -[

        (#PAGINATION{prive})

        ] +[

        (#PAGINATION{prive})

        ]
        [
        (#ENV*{sinon,''})
        diff --git a/www/plugins-dist/organiseur/prive/squelettes/contenu/calendrier.html b/www/plugins-dist/organiseur/prive/squelettes/contenu/calendrier.html index a52b8c76..ff0edabb 100644 --- a/www/plugins-dist/organiseur/prive/squelettes/contenu/calendrier.html +++ b/www/plugins-dist/organiseur/prive/squelettes/contenu/calendrier.html @@ -1,68 +1,31 @@ - +
        - + - + + + \ No newline at end of file + diff --git a/www/plugins-dist/organiseur/prive/squelettes/contenu/message.html b/www/plugins-dist/organiseur/prive/squelettes/contenu/message.html index c7ae6053..cb015ab5 100644 --- a/www/plugins-dist/organiseur/prive/squelettes/contenu/message.html +++ b/www/plugins-dist/organiseur/prive/squelettes/contenu/message.html @@ -14,7 +14,7 @@ #BOITE_FERMER ]
        - +
        @@ -26,9 +26,9 @@ [(#VAL{message-enfants}|trouver_fond{prive/objets/contenu/}|oui) [(#SET{enfants,[(#INCLURE{fond=prive/objets/contenu/message-enfants,id_objet=#ID_MESSAGE,env})]})] ] - [(#PIPELINE{affiche_enfants,[(#ARRAY{args,#ARRAY{objet,message,id_objet,#ID_MESSAGE},data,#GET{enfants}})]})] + [(#PIPELINE{affiche_enfants,[(#ARRAY{args,#ARRAY{exec,message,objet,message,id_objet,#ID_MESSAGE},data,#GET{enfants}})]})] - [(#EVAL{_AJAX}|oui) + [(#CONST{_AJAX}|oui) ] [(#ENV**{exec}|=={message_edit}|?{#INCLURE{fond=prive/squelettes/contenu/message_edit,redirect='',env,retourajax=oui},#REM|sinon_interdire_acces})] - \ No newline at end of file + diff --git a/www/plugins-dist/organiseur/prive/squelettes/inclure/organiseur-autocomplete-auteur.html b/www/plugins-dist/organiseur/prive/squelettes/inclure/organiseur-autocomplete-auteur.html index 0cfc7cb8..bb05c740 100644 --- a/www/plugins-dist/organiseur/prive/squelettes/inclure/organiseur-autocomplete-auteur.html +++ b/www/plugins-dist/organiseur/prive/squelettes/inclure/organiseur-autocomplete-auteur.html @@ -1,5 +1,17 @@ -#HTTP_HEADER{Content-type:text/plain;charset=#CHARSET} -#SET{q,#VAL{%}|concat{#ENV{q,''}|replace{\s+,%},%}} -[(#NOM|textebrut|replace{'\|',' '})]|#ID_AUTEUR -[(#CONFIG{messagerie/autoriser_email}|=={oui}|oui)[(#ENV{q}|email_valide|?{#ENV{q}})|#ENV{q} -]] \ No newline at end of file +#HTTP_HEADER{Content-type:application/json;charset=#CHARSET} +#SET{q,#VAL{%}|concat{#ENV{term,''}|replace{\s+,%},%}} +#SET{data,#LISTE} + + [(#SET{data,[(#GET{data}|push{[(#ARRAY{ + id,[(#NOM|textebrut)], + label,[(#NOM|textebrut)], + value,#ID_AUTEUR})]})]})] + +[(#CONFIG{messagerie/autoriser_email}|=={oui}|et{#ENV{term}|email_valide}) + [(#SET{data,[(#GET{data}|push{[(#ARRAY{ + id,#ENV{term}, + label,#ENV{term}, + value,#ENV{term}})]})]})] +] +[(#GET{data}|json_encode)] +#FILTRE{trim} diff --git a/www/plugins-dist/organiseur/prive/squelettes/inclure/organiseur-rv.html b/www/plugins-dist/organiseur/prive/squelettes/inclure/organiseur-rv.html index 84fbcae7..06463e1a 100644 --- a/www/plugins-dist/organiseur/prive/squelettes/inclure/organiseur-rv.html +++ b/www/plugins-dist/organiseur/prive/squelettes/inclure/organiseur-rv.html @@ -4,7 +4,7 @@ \ No newline at end of file + diff --git a/www/plugins-dist/organiseur/prive/squelettes/navigation/message.html b/www/plugins-dist/organiseur/prive/squelettes/navigation/message.html index 56a52612..5013d8d1 100644 --- a/www/plugins-dist/organiseur/prive/squelettes/navigation/message.html +++ b/www/plugins-dist/organiseur/prive/squelettes/navigation/message.html @@ -1,83 +1,63 @@ +[(#BOITE_OUVRIR{'','info'})] + + + #SET{destinataires,#DESTINATAIRES|explode{','}|array_diff{#LISTE{#SESSION{id_auteur}}}|push{#ID_AUTEUR}} + + [(#URL_ECRIRE{message_edit,[id_message_origine=(#ENV{id_message})&]new=oui&to=[(#GET{destinataires}|implode{'%2C'})]}|parametre_url{redirect,#SELF}|icone_horizontale{<:lien_repondre_message:>,message-24.png,new})] + + [ - #BOITE_OUVRIR{'','info'} - (#AUTORISER{supprimer,message,#ID_MESSAGE}|oui) - [(#URL_ACTION_AUTEUR{supprimer_message,#ID_MESSAGE,#URL_ECRIRE{messages}}|icone_horizontale{<:organiseur:icone_supprimer_message:>,[(#TYPE|organiseur_icone_message)],del})] - #BOITE_FERMER + (#AUTORISER{supprimer,message,#ID_MESSAGE}|oui) + [(#URL_ACTION_AUTEUR{supprimer_message,#ID_MESSAGE,#URL_ECRIRE{messages}}|icone_horizontale{<:organiseur:icone_supprimer_message:>,[(#TYPE|organiseur_icone_message)],del})] ] - - [ - #BOITE_OUVRIR{'','info'} - (#AUTORISER{effacer,messagerecu,#ID_MESSAGE}|oui) - [(#URL_ACTION_AUTEUR{effacer_messagerecu,[(#SESSION{id_auteur})-#ID_MESSAGE],#URL_ECRIRE{messages}}|icone_horizontale{<:organiseur:icone_effacer_message:>,[(#TYPE|organiseur_icone_message)],del})] - #BOITE_FERMER - ] - + + [ + (#AUTORISER{effacer,messagerecu,#ID_MESSAGE}|oui) + [(#URL_ACTION_AUTEUR{effacer_messagerecu,[(#SESSION{id_auteur})-#ID_MESSAGE],#URL_ECRIRE{messages}}|icone_horizontale{<:organiseur:icone_effacer_message:>,[(#TYPE|organiseur_icone_message)],del})] + ] + - + +[(#BOITE_FERMER)] + - +
        - + - + + + - \ No newline at end of file + diff --git a/www/plugins-dist/organiseur/prive/style_prive_plugin_organiseur.html b/www/plugins-dist/organiseur/prive/style_prive_plugin_organiseur.html index ab247cb2..2be0efcc 100644 --- a/www/plugins-dist/organiseur/prive/style_prive_plugin_organiseur.html +++ b/www/plugins-dist/organiseur/prive/style_prive_plugin_organiseur.html @@ -38,7 +38,7 @@ .message #wysiwyg .contenu_date_fin .label {display: block;float:#GET{left};width:6em;clear:#GET{left};text-align:#GET{right};padding:0 10px;} .message #wysiwyg .contenu_date_heure img {vertical-align: middle;} .message #wysiwyg .contenu_date_fin img {vertical-align: middle;visibility: hidden;} -.message #wysiwyg .contenu_from .spip_logos {position: absolute;#GET{right}: 0;top:0;} +.message #wysiwyg .contenu_from .spip_logo {position: absolute;#GET{right}: 0;top:0;border-radius: 50%;} .message #wysiwyg .contenu_titre {display: block;} .message #wysiwyg .contenu_texte {clear:both;border-top: 1px solid #999;margin-top: 1em;padding-top: 1em;} diff --git a/www/plugins-dist/petitions/action/confirmer_signature.php b/www/plugins-dist/petitions/action/confirmer_signature.php index afd97eba..23ffbce0 100644 --- a/www/plugins-dist/petitions/action/confirmer_signature.php +++ b/www/plugins-dist/petitions/action/confirmer_signature.php @@ -10,8 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; - +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} /** @@ -23,30 +24,34 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * * @staticvar string $confirm * @param $var_confirm - * @return string + * @return string */ -function action_confirmer_signature_dist($var_confirm=null) { +function action_confirmer_signature_dist($var_confirm = null) { static $confirm = null; // reponse mise en cache dans la session ? - $code_message = 'signature_message_'.strval($var_confirm); - if (isset($GLOBALS['visiteur_session'][$code_message])) + $code_message = 'signature_message_' . strval($var_confirm); + if (isset($GLOBALS['visiteur_session'][$code_message])) { return $GLOBALS['visiteur_session'][$code_message]; + } // reponse deja calculee depuis public/assembler.php - if (isset($confirm)) + if (isset($confirm)) { return $confirm; + } if (is_null($var_confirm)) { - $securiser_action = charger_fonction('securiser_action','inc'); + $securiser_action = charger_fonction('securiser_action', 'inc'); $var_confirm = $securiser_action(); } - if (!$var_confirm OR $var_confirm == 'publie' OR $var_confirm == 'poubelle') + if (!$var_confirm or $var_confirm == 'publie' or $var_confirm == 'poubelle') { return ''; + } if (!spip_connect()) { $confirm = _T('petitions:form_pet_probleme_technique'); + return ''; } include_spip('inc/texte'); @@ -59,15 +64,19 @@ function action_confirmer_signature_dist($var_confirm=null) { // l'id_signature est dans var_confirm include_spip('inc/securiser_action'); if ($id_signature = intval($var_confirm) - AND ( - $_GET['refus'] == _action_auteur("supprimer signature $id_signature", '', '', 'alea_ephemere') - OR - $_GET['refus'] == _action_auteur("supprimer signature $id_signature", '', '', 'alea_ephemere_ancien') - )) { + and ( + $_GET['refus'] == _action_auteur("supprimer signature $id_signature", '', '', 'alea_ephemere') + or + $_GET['refus'] == _action_auteur("supprimer signature $id_signature", '', '', 'alea_ephemere_ancien') + ) + ) { include_spip('action/editer_signature'); - signature_modifier($id_signature,array("statut" => 'poubelle')); + signature_modifier($id_signature, array("statut" => 'poubelle')); $confirm = _T('petitions:info_signature_supprimee'); - } else $confirm = _T('petitions:info_signature_supprimee_erreur'); + } else { + $confirm = _T('petitions:info_signature_supprimee_erreur'); + } + return ''; } @@ -75,6 +84,7 @@ function action_confirmer_signature_dist($var_confirm=null) { if (!$row) { $confirm = _T('petitions:form_pet_aucune_signature'); + return ''; } @@ -83,25 +93,27 @@ function action_confirmer_signature_dist($var_confirm=null) { $adresse_email = $row['ad_email']; $url_site = $row['url_site']; - $row = sql_fetsel('email_unique, site_unique, id_article', 'spip_petitions', "id_petition=".intval($id_petition)); + $row = sql_fetsel('email_unique, site_unique, id_article', 'spip_petitions', "id_petition=" . intval($id_petition)); - $email_unique = $row['email_unique'] == "oui"; - $site_unique = $row['site_unique'] == "oui"; + $email_unique = $row['email_unique'] == "oui"; + $site_unique = $row['site_unique'] == "oui"; $id_article = $row['id_article']; include_spip('action/editer_signature'); - signature_modifier($id_signature,array('statut' => 'publie')); + signature_modifier($id_signature, array('statut' => 'publie')); if ($email_unique) { - $r = "id_petition=".intval($id_petition)." AND ad_email=" . sql_quote($adresse_email); - if (signature_entrop($r)) - $confirm = _T('petitions:form_pet_deja_signe'); + $r = "id_petition=" . intval($id_petition) . " AND ad_email=" . sql_quote($adresse_email); + if (signature_entrop($r)) { + $confirm = _T('petitions:form_pet_deja_signe'); + } } if ($site_unique) { - $r = "id_petition=".intval($id_petition)." AND url_site=" . sql_quote($url_site); - if (signature_entrop($r)) + $r = "id_petition=" . intval($id_petition) . " AND url_site=" . sql_quote($url_site); + if (signature_entrop($r)) { $confirm = _T('petitions:form_pet_site_deja_enregistre'); + } } include_spip('inc/session'); @@ -121,8 +133,7 @@ function action_confirmer_signature_dist($var_confirm=null) { } // Conserver la reponse dans la session du visiteur - if ($confirm) + if ($confirm) { session_set($code_message, $confirm); + } } - -?> \ No newline at end of file diff --git a/www/plugins-dist/petitions/action/editer_petition.php b/www/plugins-dist/petitions/action/editer_petition.php index a2eb11e9..54c14a15 100644 --- a/www/plugins-dist/petitions/action/editer_petition.php +++ b/www/plugins-dist/petitions/action/editer_petition.php @@ -10,11 +10,19 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +/** + * Gestion de l'action editer_petition + * + * @package SPIP\Petitions\Actions + **/ -function action_editer_petition_dist($arg=null) { +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} - if (is_null($arg)){ +function action_editer_petition_dist($arg = null) { + + if (is_null($arg)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } @@ -31,60 +39,79 @@ function action_editer_petition_dist($arg=null) { } // Enregistre l'envoi dans la BD - if ($id_petition > 0) + if ($id_petition > 0) { $err = petition_modifier($id_petition); + } - return array($id_petition,$err); + return array($id_petition, $err); } /** - * Mettre a jour une petition existante - * + * Mettre à jour une petition existante + * * @param int $id_petition * @param array $set * @return string */ -function petition_modifier($id_petition, $set=null) { +function petition_modifier($id_petition, $set = null) { $err = ''; include_spip('inc/modifier'); $c = collecter_requests( - // white list + // white list array( - "email_unique","site_obli", - "site_unique","message","texte" + "email_unique", + "site_obli", + "site_unique", + "message", + "texte" ), // black list - array('statut','id_article'), + array('statut', 'id_article'), // donnees eventuellement fournies $set ); - if ($err = objet_modifier_champs('petition', $id_petition,array(),$c)) + if ($err = objet_modifier_champs('petition', $id_petition, + array( + 'data' => $set, + ), + $c) + ) { return $err; + } // changement d'article ou de statut ? - $c = collecter_requests(array('statut','id_article'),array(),$set); + $c = collecter_requests(array('statut', 'id_article'), array(), $set); $err .= petition_instituer($id_petition, $c); return $err; } /** - * Inserer une petition en base - * @param $id_article - * @return + * Insérer une petition en base + * + * @param int $id_article + * Identifiant de l'article recevant la pétition + * @param array|null $set + * @return int + * Identifiant de la pétition */ -function petition_inserer($id_article) { +function petition_inserer($id_article, $set = null) { // Si id_article vaut 0 ou n'est pas definie, echouer - if (!$id_article = intval($id_article)) + if (!$id_article = intval($id_article)) { return 0; + } $champs = array( 'id_article' => $id_article, ); + if ($set) { + $champs = array_merge($champs, $set); + } + // Envoyer aux plugins $champs = pipeline('pre_insertion', array( @@ -112,25 +139,25 @@ function petition_inserer($id_article) { /** - * $c est un array ('id_article' = changement d'article) - * il n'est pas autoriser de deplacer une petition + * Institution d'une pétition * - * @param $id_petition - * @param $c - * @param bool $calcul_rub - * @return string + * @param int $id_petition + * Identifiant de la pétition + * @param array $c + * Liste des champs à modifier + * @return string|null */ function petition_instituer($id_petition, $c) { include_spip('inc/autoriser'); include_spip('inc/modifier'); - $row = sql_fetsel("id_article", "spip_petitions", "id_petition=".intval($id_petition)); + $row = sql_fetsel("id_article,statut", "spip_petitions", "id_petition=" . intval($id_petition)); $statut_ancien = $statut = $row['statut']; #$date_ancienne = $date = $row['date_time']; $champs = array(); - $s = isset($c['statut'])?$c['statut']:$statut; + $s = isset($c['statut']) ? $c['statut'] : $statut; // cf autorisations dans inc/petition_instituer if ($s != $statut /*OR ($d AND $d != $date)*/) { @@ -155,22 +182,24 @@ function petition_instituer($id_petition, $c) { 'args' => array( 'table' => 'spip_petitions', 'id_objet' => $id_petition, - 'action'=>'instituer', + 'action' => 'instituer', 'statut_ancien' => $statut_ancien, ), 'data' => $champs ) ); - if (!count($champs)) return; + if (!count($champs)) { + return; + } // Envoyer les modifs. - sql_updateq('spip_petitions',$champs,'id_petition='.intval($id_petition)); + sql_updateq('spip_petitions', $champs, 'id_petition=' . intval($id_petition)); // Invalider les caches include_spip('inc/invalideur'); suivre_invalideur("id='petition/$id_petition'"); - suivre_invalideur("id='article/".$row['id_article']."'"); + suivre_invalideur("id='article/" . $row['id_article'] . "'"); // Pipeline pipeline('post_edition', @@ -178,7 +207,7 @@ function petition_instituer($id_petition, $c) { 'args' => array( 'table' => 'spip_petitions', 'id_objet' => $id_petition, - 'action'=>'instituer', + 'action' => 'instituer', 'statut_ancien' => $statut_ancien, ), 'data' => $champs @@ -196,9 +225,6 @@ function petition_instituer($id_petition, $c) { } // https://code.spip.net/@revision_petition -function revision_petition($id_petition, $c=null) { - return petition_modifier($id_petition,$c); +function revision_petition($id_petition, $c = null) { + return petition_modifier($id_petition, $c); } - - -?> \ No newline at end of file diff --git a/www/plugins-dist/petitions/action/editer_signature.php b/www/plugins-dist/petitions/action/editer_signature.php index d3d83a7b..db56f040 100644 --- a/www/plugins-dist/petitions/action/editer_signature.php +++ b/www/plugins-dist/petitions/action/editer_signature.php @@ -10,12 +10,14 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} // https://code.spip.net/@action_editer_signature_dist -function action_editer_signature_dist($arg=null) { +function action_editer_signature_dist($arg = null) { - if (is_null($arg)){ + if (is_null($arg)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } @@ -24,50 +26,59 @@ function action_editer_signature_dist($arg=null) { // mais on verifie qu'on a toutes les donnees qu'il faut. if (!$id_signature = intval($arg)) { $id_petition = _request('id_petition'); - if (!($id_petition)) - return array(0,''); + if (!($id_petition)) { + return array(0, ''); + } $id_signature = signature_inserer($id_petition); } // Enregistre l'envoi dans la BD - if ($id_signature > 0) + if ($id_signature > 0) { $err = signature_modifier($id_signature); + } - return array($id_signature,$err); + return array($id_signature, $err); } /** * Mettre a jour une signature existante - * + * * @param int $id_signature * @param array $set * @return string */ -function signature_modifier($id_signature, $set=null) { +function signature_modifier($id_signature, $set = null) { $err = ''; include_spip('inc/modifier'); $c = collecter_requests( - // white list + // white list array( - "nom_email","ad_email", - "nom_site","url_site","message","statut" + "nom_email", + "ad_email", + "nom_site", + "url_site", + "message", + "statut" ), // black list - array('statut','id_petition','date_time'), + array('statut', 'id_petition', 'date_time'), // donnees eventuellement fournies $set ); if ($err = objet_modifier_champs('signature', $id_signature, array( + 'data' => $set, 'nonvide' => array('nom_email' => _T('info_sans_titre')) ), - $c)) + $c) + ) { return $err; + } // Modification de statut - $c = collecter_requests(array('statut','id_petition','date_time'),array(),$set); + $c = collecter_requests(array('statut', 'id_petition', 'date_time'), array(), $set); $err .= signature_instituer($id_signature, $c); return $err; @@ -75,19 +86,27 @@ function signature_modifier($id_signature, $set=null) { /** * Inserer une signature en base + * * @param int $id_petition + * @param array|null $set * @return int */ -function signature_inserer($id_petition) { +function signature_inserer($id_petition, $set = null) { // Si $id_petition vaut 0 ou n'est pas definie, echouer - if (!$id_petition = intval($id_petition)) + if (!$id_petition = intval($id_petition)) { return 0; + } $champs = array( 'id_petition' => $id_petition, - 'statut' => 'prepa', - 'date_time' => date('Y-m-d H:i:s')); + 'statut' => 'prepa', + 'date_time' => date('Y-m-d H:i:s') + ); + + if ($set) { + $champs = array_merge($champs, $set); + } // Envoyer aux plugins $champs = pipeline('pre_insertion', @@ -118,21 +137,23 @@ function signature_inserer($id_petition) { // $c est un array ('statut', 'id_petition' = changement de petition) // il n'est pas autoriser de deplacer une signature // https://code.spip.net/@signature_instituer -function signature_instituer($id_signature, $c, $calcul_rub=true) { +function signature_instituer($id_signature, $c, $calcul_rub = true) { include_spip('inc/autoriser'); include_spip('inc/modifier'); - $row = sql_fetsel("S.statut, S.date_time, P.id_article", "spip_signatures AS S JOIN spip_petitions AS P ON S.id_petition=P.id_petition", "S.id_signature=".intval($id_signature)); + $row = sql_fetsel("S.statut, S.date_time, P.id_article", + "spip_signatures AS S JOIN spip_petitions AS P ON S.id_petition=P.id_petition", + "S.id_signature=" . intval($id_signature)); $statut_ancien = $statut = $row['statut']; $date_ancienne = $date = $row['date_time']; $champs = array(); - $d = isset($c['date_time'])?$c['date_time']:null; - $s = isset($c['statut'])?$c['statut']:$statut; + $d = isset($c['date_time']) ? $c['date_time'] : null; + $s = isset($c['statut']) ? $c['statut'] : $statut; // cf autorisations dans inc/signature_instituer - if ($s != $statut OR ($d AND $d != $date)) { + if ($s != $statut or ($d and $d != $date)) { $statut = $champs['statut'] = $s; // En cas de publication, fixer la date a "maintenant" @@ -140,14 +161,15 @@ function signature_instituer($id_signature, $c, $calcul_rub=true) { // ou si l'signature est deja date dans le futur // En cas de proposition d'un signature (mais pas depublication), idem if ($champs['statut'] == 'publie') { - if ($d) + if ($d) { $champs['date_time'] = $date = $d; - else + } else { $champs['date_time'] = $date = date('Y-m-d H:i:s'); - } - // on peut redater une signature qu'on relance - elseif($d) + } + } // on peut redater une signature qu'on relance + elseif ($d) { $champs['date_time'] = $date = $d; + } } // Envoyer aux plugins @@ -156,22 +178,24 @@ function signature_instituer($id_signature, $c, $calcul_rub=true) { 'args' => array( 'table' => 'spip_signatures', 'id_objet' => $id_signature, - 'action'=>'instituer', + 'action' => 'instituer', 'statut_ancien' => $statut_ancien, ), 'data' => $champs ) ); - if (!count($champs)) return; + if (!count($champs)) { + return; + } // Envoyer les modifs. - sql_updateq('spip_signatures',$champs,'id_signature='.intval($id_signature)); + sql_updateq('spip_signatures', $champs, 'id_signature=' . intval($id_signature)); // Invalider les caches include_spip('inc/invalideur'); suivre_invalideur("id='signature/$id_signature'"); - suivre_invalideur("id='article/".$row['id_article']."'"); + suivre_invalideur("id='article/" . $row['id_article'] . "'"); // Pipeline pipeline('post_edition', @@ -179,7 +203,7 @@ function signature_instituer($id_signature, $c, $calcul_rub=true) { 'args' => array( 'table' => 'spip_signatures', 'id_objet' => $id_signature, - 'action'=>'instituer', + 'action' => 'instituer', 'statut_ancien' => $statut_ancien, ), 'data' => $champs @@ -189,7 +213,7 @@ function signature_instituer($id_signature, $c, $calcul_rub=true) { // Notifications if ($notifications = charger_fonction('notifications', 'inc')) { $notifications('instituersignature', $id_signature, - array('statut' => $statut, 'statut_ancien' => $statut_ancien, 'date'=>$date) + array('statut' => $statut, 'statut_ancien' => $statut_ancien, 'date' => $date) ); } @@ -210,21 +234,21 @@ function signature_instituer($id_signature, $c, $calcul_rub=true) { * @param string $where * @return array */ -function signature_entrop($where) -{ +function signature_entrop($where) { $entrop = array(); $where .= " AND statut='publie'"; - $res = sql_select('id_signature', 'spip_signatures', $where,'',"date_time desc"); + $res = sql_select('id_signature', 'spip_signatures', $where, '', "date_time desc"); $n = sql_count($res); - if ($n>1) { - while($r=sql_fetch($res)) - $entrop[]=$r['id_signature']; + if ($n > 1) { + while ($r = sql_fetch($res)) { + $entrop[] = $r['id_signature']; + } // garder la premiere signature array_shift($entrop); } sql_free($res); - if (count($entrop)){ + if (count($entrop)) { sql_delete('spip_signatures', sql_in('id_signature', $entrop)); } @@ -232,8 +256,6 @@ function signature_entrop($where) } // obsolete -function revision_signature($id_signature, $c=false) { - return signature_modifier($id_signature,$c); +function revision_signature($id_signature, $c = false) { + return signature_modifier($id_signature, $c); } - -?> diff --git a/www/plugins-dist/petitions/action/relancer_signature.php b/www/plugins-dist/petitions/action/relancer_signature.php index 88221349..e8399f22 100644 --- a/www/plugins-dist/petitions/action/relancer_signature.php +++ b/www/plugins-dist/petitions/action/relancer_signature.php @@ -10,26 +10,29 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} -function action_relancer_signature_dist($id_signature=null){ - if (!$id_signature){ - $securiser_action = charger_fonction('securiser_action','inc'); +function action_relancer_signature_dist($id_signature = null) { + if (!$id_signature) { + $securiser_action = charger_fonction('securiser_action', 'inc'); $id_signature = $securiser_action(); } - if (autoriser('relancer','signature',$id_signature)){ - $row = sql_fetsel('*', 'spip_signatures', 'id_signature='.intval($id_signature)); - $id_article = sql_getfetsel('id_article','spip_petitions','id_petition='.intval($row['id_petition'])); - if ($id_article=intval($id_article) - AND autoriser('mordererpetition','article',$id_article)) { + if (autoriser('relancer', 'signature', $id_signature)) { + $row = sql_fetsel('*', 'spip_signatures', 'id_signature=' . intval($id_signature)); + $id_article = sql_getfetsel('id_article', 'spip_petitions', 'id_petition=' . intval($row['id_petition'])); + if ($id_article = intval($id_article) + and autoriser('mordererpetition', 'article', $id_article) + ) { include_spip('action/editer_signature'); include_spip('formulaires/signature'); - $url = generer_url_entite_absolue($id_article, 'article','','',true); - if (signature_a_confirmer($id_article, $url, $row['nom_email'], $row['ad_email'], $row['nom_site'], $row['url_site'], $row['message'], $row['lang'], $row['statut'])) + $url = generer_url_entite_absolue($id_article, 'article', '', '', true); + if (signature_a_confirmer($id_article, $url, $row['nom_email'], $row['ad_email'], $row['nom_site'], + $row['url_site'], $row['message'], $row['lang'], $row['statut'])) { signature_modifier($id_signature, array("date_time" => date('Y-m-d H:i:s'))); + } } } } - -?> \ No newline at end of file diff --git a/www/plugins-dist/petitions/action/supprimer_signature.php b/www/plugins-dist/petitions/action/supprimer_signature.php index 996a0e39..fca1a167 100644 --- a/www/plugins-dist/petitions/action/supprimer_signature.php +++ b/www/plugins-dist/petitions/action/supprimer_signature.php @@ -10,21 +10,23 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} -function action_supprimer_signature_dist($id_signature=null){ - if (!$id_signature){ - $securiser_action = charger_fonction('securiser_action','inc'); +function action_supprimer_signature_dist($id_signature = null) { + if (!$id_signature) { + $securiser_action = charger_fonction('securiser_action', 'inc'); $id_signature = $securiser_action(); } - if (autoriser('supprimer','signature',$id_signature)){ - $id_article = sql_getfetsel('P.id_article','spip_signatures AS S JOIN spip_petitions AS P ON S.id_petition=P.id_petition','S.id_signature='.intval($id_signature)); - if ($id_article AND autoriser('modererpetition','article',$id_article)) { + if (autoriser('supprimer', 'signature', $id_signature)) { + $id_article = sql_getfetsel('P.id_article', + 'spip_signatures AS S JOIN spip_petitions AS P ON S.id_petition=P.id_petition', + 'S.id_signature=' . intval($id_signature)); + if ($id_article and autoriser('modererpetition', 'article', $id_article)) { include_spip('action/editer_signature'); - signature_modifier($id_signature, array('statut'=>'poubelle')); + signature_modifier($id_signature, array('statut' => 'poubelle')); } } } - -?> \ No newline at end of file diff --git a/www/plugins-dist/petitions/action/traiter_lot_signature.php b/www/plugins-dist/petitions/action/traiter_lot_signature.php index ee57b059..a127a47c 100644 --- a/www/plugins-dist/petitions/action/traiter_lot_signature.php +++ b/www/plugins-dist/petitions/action/traiter_lot_signature.php @@ -10,11 +10,13 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} -function action_traiter_lot_signature_dist($arg=null) { +function action_traiter_lot_signature_dist($arg = null) { - if (is_null($arg)){ + if (is_null($arg)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } @@ -23,34 +25,36 @@ function action_traiter_lot_signature_dist($arg=null) { * $arg contient l'action relancer/supprimer/valider * les id sont dans un tableau non signe ids[] */ - if (preg_match(",^(\w+)$,",$arg,$match) - AND in_array($statut=$match[1],array('relancer','supprimer','valider')) - AND autoriser('modererlot','petition')){ + if (preg_match(",^(\w+)$,", $arg, $match) + and in_array($statut = $match[1], array('relancer', 'supprimer', 'valider')) + and autoriser('modererlot', 'petition') + ) { $where = ''; - if (intval($id_petition = _request('id_petition'))){ - $where="id_petition=".intval($id_petition); + if (intval($id_petition = _request('id_petition'))) { + $where = "id_petition=" . intval($id_petition); // pour relancer ou valider on ne prend que celles en attente - if (in_array($statut,array('relancer','valider'))) - $where.=" AND statut!='publie' AND statut!='poubelle'"; - } - else { - $ids=_request('ids'); + if (in_array($statut, array('relancer', 'valider'))) { + $where .= " AND statut!='publie' AND statut!='poubelle'"; + } + } else { + $ids = _request('ids'); if (is_array($ids)) { - $ids = array_map('intval',$ids); - $where = sql_in('id_signature',$ids); + $ids = array_map('intval', $ids); + $where = sql_in('id_signature', $ids); } } - if ($where){ + if ($where) { $rows = sql_allfetsel("id_signature", "spip_signatures", $where); - if (!count($rows)) return; - $rows = array_map('reset',$rows); - if ($action = charger_fonction($statut."_signature",'action',true)) + if (!count($rows)) { + return; + } + $rows = array_map('reset', $rows); + if ($action = charger_fonction($statut . "_signature", 'action', true)) { foreach ($rows as $id_signature) { $action($id_signature); } + } } } } - -?> diff --git a/www/plugins-dist/petitions/action/valider_signature.php b/www/plugins-dist/petitions/action/valider_signature.php index d9acb404..8f67bb51 100644 --- a/www/plugins-dist/petitions/action/valider_signature.php +++ b/www/plugins-dist/petitions/action/valider_signature.php @@ -10,18 +10,18 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} -function action_valider_signature_dist($id_signature=null){ - if (!$id_signature){ - $securiser_action = charger_fonction('securiser_action','inc'); +function action_valider_signature_dist($id_signature = null) { + if (!$id_signature) { + $securiser_action = charger_fonction('securiser_action', 'inc'); $id_signature = $securiser_action(); } - if (autoriser('publier','signature',$id_signature)){ + if (autoriser('publier', 'signature', $id_signature)) { include_spip('action/editer_signature'); - signature_modifier($id_signature, array('statut'=>'publie')); + signature_modifier($id_signature, array('statut' => 'publie')); } } - -?> \ No newline at end of file diff --git a/www/plugins-dist/petitions/balise/formulaire_signature.php b/www/plugins-dist/petitions/balise/formulaire_signature.php index a0cd538a..8093ed90 100644 --- a/www/plugins-dist/petitions/balise/formulaire_signature.php +++ b/www/plugins-dist/petitions/balise/formulaire_signature.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; #securite +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} #securite // // Formulaire de signature d'une petition @@ -25,8 +27,8 @@ include_spip('base/abstract_sql'); // si une petition est attachee a l'article. // https://code.spip.net/@balise_FORMULAIRE_SIGNATURE -function balise_FORMULAIRE_SIGNATURE ($p) { - return calculer_balise_dynamique($p,'FORMULAIRE_SIGNATURE', array('id_article','petition')); +function balise_FORMULAIRE_SIGNATURE($p) { + return calculer_balise_dynamique($p, 'FORMULAIRE_SIGNATURE', array('id_article', 'petition')); } // Verification des arguments (contexte + filtres) @@ -35,18 +37,25 @@ function balise_FORMULAIRE_SIGNATURE_stat($args, $context_compil) { // pas d'id_article => erreur de contexte if (!$args[0]) { - $msg = array('zbug_champ_hors_motif', - array ('champ' => 'FORMULAIRE_SIGNATURE', - 'motif' => 'ARTICLES')); + $msg = array( + 'zbug_champ_hors_motif', + array( + 'champ' => 'FORMULAIRE_SIGNATURE', + 'motif' => 'ARTICLES' + ) + ); erreur_squelette($msg, $context_compil); + return ''; + } // article sans petition => pas de balise + else { + if (!$args[1]) { + return ''; + } } - // article sans petition => pas de balise - else if (!$args[1]) - return ''; // on envoie pas cet argument dans le CVT unset($args[1]); + return $args; } -?> diff --git a/www/plugins-dist/petitions/base/petitions.php b/www/plugins-dist/petitions/base/petitions.php index 88f3654d..4e266b1f 100644 --- a/www/plugins-dist/petitions/base/petitions.php +++ b/www/plugins-dist/petitions/base/petitions.php @@ -10,125 +10,150 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Déclarations relatives à la base de données + * + * @package SPIP\Petitions\Pipelines + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Interfaces des tables petitions et signatures pour le compilateur * + * @pipeline declarer_tables_interfaces * @param array $interfaces + * Déclarations d'interface pour le compilateur * @return array + * Déclarations d'interface pour le compilateur */ -function petitions_declarer_tables_interfaces($interfaces){ - - $interfaces['table_des_tables']['petitions']='petitions'; - $interfaces['table_des_tables']['signatures']='signatures'; - - $interfaces['exceptions_des_tables']['signatures']['date']='date_time'; - $interfaces['exceptions_des_tables']['signatures']['nom']='nom_email'; - $interfaces['exceptions_des_tables']['signatures']['email']='ad_email'; - - $interfaces['tables_jointures']['spip_articles'][]= 'petitions'; - $interfaces['tables_jointures']['spip_articles'][]= 'signatures'; +function petitions_declarer_tables_interfaces($interfaces) { + + $interfaces['table_des_tables']['petitions'] = 'petitions'; + $interfaces['table_des_tables']['signatures'] = 'signatures'; + + $interfaces['exceptions_des_tables']['signatures']['date'] = 'date_time'; + $interfaces['exceptions_des_tables']['signatures']['nom'] = 'nom_email'; + $interfaces['exceptions_des_tables']['signatures']['email'] = 'ad_email'; + + $interfaces['tables_jointures']['spip_articles'][] = 'petitions'; + $interfaces['tables_jointures']['spip_articles'][] = 'signatures'; $interfaces['exceptions_des_jointures']['petition'] = array('spip_petitions', 'texte'); - $interfaces['exceptions_des_jointures']['id_signature']= array('spip_signatures', 'id_signature'); + $interfaces['exceptions_des_jointures']['id_signature'] = array('spip_signatures', 'id_signature'); - $interfaces['table_des_traitements']['MESSAGE'][]= _TRAITEMENT_RACCOURCIS; + $interfaces['table_des_traitements']['MESSAGE'][] = _TRAITEMENT_RACCOURCIS; // Signatures : passage des donnees telles quelles, sans traitement typo // la securite et conformite XHTML de ces champs est assuree par safehtml() - foreach(array('NOM_EMAIL','AD_EMAIL','NOM_SITE','URL_SITE','MESSAGE') as $balise) - if (!isset($interfaces['table_des_traitements'][$balise]['signatures'])) + foreach (array('NOM_EMAIL', 'AD_EMAIL', 'NOM_SITE', 'URL_SITE', 'MESSAGE') as $balise) { + if (!isset($interfaces['table_des_traitements'][$balise]['signatures'])) { $interfaces['table_des_traitements'][$balise]['signatures'] = 'liens_nofollow(safehtml(%s))'; - else - if (strpos($interfaces['table_des_traitements'][$balise]['signatures'],'safehtml')==false) - $interfaces['table_des_traitements'][$balise]['signatures'] = 'liens_nofollow(safehtml('.$interfaces['table_des_traitements'][$balise]['signatures'].'))'; + } else { + if (strpos($interfaces['table_des_traitements'][$balise]['signatures'], 'safehtml') == false) { + $interfaces['table_des_traitements'][$balise]['signatures'] = 'liens_nofollow(safehtml(' . $interfaces['table_des_traitements'][$balise]['signatures'] . '))'; + } + } + } return $interfaces; } -function petitions_declarer_tables_objets_sql($tables){ +/** + * Déclarer les objets éditoriaux des pétitions et signatures + * + * @pipeline declarer_tables_objets_sql + * @param array $tables + * Description des tables + * @return array + * Description complétée des tables + */ +function petitions_declarer_tables_objets_sql($tables) { $tables['spip_petitions'] = array( - 'url_voir'=>'controler_petition', - 'url_edit'=>'controler_petition', - 'editable'=>'non', - 'principale' => 'oui', - 'page'=>'', // pas de page editoriale pour une petition + 'url_voir' => 'controler_petition', + 'url_edit' => 'controler_petition', + 'editable' => 'non', + 'principale' => 'oui', + 'page' => '', // pas de page editoriale pour une petition 'texte_retour' => 'icone_retour', 'texte_objets' => 'petitions:titre_petitions', - 'texte_objet' => 'petitions:titre_petition', - + 'texte_objet' => 'petitions:titre_petition', + 'titre' => "texte as titre, '' AS lang", - 'field'=> array( - "id_petition" => "bigint(21) NOT NULL", - "id_article" => "bigint(21) DEFAULT '0' NOT NULL", - "email_unique" => "CHAR (3) DEFAULT '' NOT NULL", - "site_obli" => "CHAR (3) DEFAULT '' NOT NULL", - "site_unique" => "CHAR (3) DEFAULT '' NOT NULL", - "message" => "CHAR (3) DEFAULT '' NOT NULL", - "texte" => "LONGTEXT DEFAULT '' NOT NULL", - "statut" => "VARCHAR (10) DEFAULT 'publie' NOT NULL", - "maj" => "TIMESTAMP" + 'field' => array( + "id_petition" => "bigint(21) NOT NULL", + "id_article" => "bigint(21) DEFAULT '0' NOT NULL", + "email_unique" => "CHAR (3) DEFAULT '' NOT NULL", + "site_obli" => "CHAR (3) DEFAULT '' NOT NULL", + "site_unique" => "CHAR (3) DEFAULT '' NOT NULL", + "message" => "CHAR (3) DEFAULT '' NOT NULL", + "texte" => "LONGTEXT DEFAULT '' NOT NULL", + "statut" => "VARCHAR (10) DEFAULT 'publie' NOT NULL", + "maj" => "TIMESTAMP" ), 'key' => array( - "PRIMARY KEY" => "id_petition", - "UNIQUE id_article" => "id_article" + "PRIMARY KEY" => "id_petition", + "UNIQUE KEY id_article" => "id_article" ), 'statut' => array( - array('champ'=>'statut','publie'=>'publie,off','previsu'=>'publie,off','exception'=>array('statut')), + array('champ' => 'statut', 'publie' => 'publie,off', 'previsu' => 'publie,off', 'exception' => array('statut')), ), ); $tables['spip_signatures'] = array( - 'url_voir'=>'controler_petition', - 'url_edit'=>'controler_petition', - 'editable'=>'non', - 'principale' => 'oui', - 'page'=>'', // pas de page editoriale pour une signature + 'url_voir' => 'controler_petition', + 'url_edit' => 'controler_petition', + 'editable' => 'non', + 'principale' => 'oui', + 'page' => '', // pas de page editoriale pour une signature 'texte_retour' => 'icone_retour', 'texte_objets' => 'public:signatures_petition', 'texte_objet' => 'entree_signature', - 'info_aucun_objet'=> 'petitions:aucune_signature', + 'info_aucun_objet' => 'petitions:aucune_signature', 'info_1_objet' => 'petitions:une_signature', 'info_nb_objets' => 'petitions:nombre_signatures', 'titre' => "nom_email as titre, '' AS lang", 'date' => 'date_time', - 'field'=> array( - "id_signature" => "bigint(21) NOT NULL", - "id_petition" => "bigint(21) DEFAULT '0' NOT NULL", + 'field' => array( + "id_signature" => "bigint(21) NOT NULL", + "id_petition" => "bigint(21) DEFAULT '0' NOT NULL", # "id_article" => "bigint(21) DEFAULT '0' NOT NULL", - "date_time" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", - "nom_email" => "text DEFAULT '' NOT NULL", - "ad_email" => "text DEFAULT '' NOT NULL", - "nom_site" => "text DEFAULT '' NOT NULL", - "url_site" => "text DEFAULT '' NOT NULL", - "message" => "mediumtext DEFAULT '' NOT NULL", - "statut" => "varchar(10) DEFAULT '0' NOT NULL", - "maj" => "TIMESTAMP" + "date_time" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", + "nom_email" => "text DEFAULT '' NOT NULL", + "ad_email" => "text DEFAULT '' NOT NULL", + "nom_site" => "text DEFAULT '' NOT NULL", + "url_site" => "text DEFAULT '' NOT NULL", + "message" => "mediumtext DEFAULT '' NOT NULL", + "statut" => "varchar(10) DEFAULT '0' NOT NULL", + "maj" => "TIMESTAMP" ), 'key' => array( - "PRIMARY KEY" => "id_signature", - "KEY id_petition" => "id_petition", + "PRIMARY KEY" => "id_signature", + "KEY id_petition" => "id_petition", # "KEY id_article" => "id_article", "KEY statut" => "statut" ), 'join' => array( - "id_signature"=>"id_signature", - "id_petition"=>"id_petition" + "id_signature" => "id_signature", + "id_petition" => "id_petition" ), - 'tables_jointures'=> array( + 'tables_jointures' => array( 'petitions' ), 'statut' => array( - array('champ'=>'statut','publie'=>'publie','previsu'=>'publie','exception'=>array('statut','tout')), + array('champ' => 'statut', 'publie' => 'publie', 'previsu' => 'publie', 'exception' => array('statut', 'tout')), ), 'rechercher_champs' => array( - 'nom_email' => 2, 'ad_email' => 4, - 'nom_site' => 2, 'url_site' => 4, + 'nom_email' => 2, + 'ad_email' => 4, + 'nom_site' => 2, + 'url_site' => 4, 'message' => 1 ), 'icone_objet' => 'petition', @@ -136,4 +161,3 @@ function petitions_declarer_tables_objets_sql($tables){ return $tables; } -?> diff --git a/www/plugins-dist/petitions/formulaires/activer_petition_article.html b/www/plugins-dist/petitions/formulaires/activer_petition_article.html index 8a37becc..6d223c9d 100644 --- a/www/plugins-dist/petitions/formulaires/activer_petition_article.html +++ b/www/plugins-dist/petitions/formulaires/activer_petition_article.html @@ -7,59 +7,59 @@ [

        (#ENV*{message_erreur})

        ] [(#ENV{editable})
        - [(#ACTION_FORMULAIRE{#ENV{action}})] -
          -
        • + #ACTION_FORMULAIRE +
          +
          [ (#ENV**{erreurs}|table_valeur{change_petition}) ] -
        • +
        [(#GET{petition}|oui) -
      • +
        -
      • -
      • +
      +
      - -
    • +
    • +
      - -
    • +
    • +
      - -
    • +
    • +
      [ (#ENV**{erreurs}|table_valeur{texte_petition}) ] - ] - +
      ] +

      ] diff --git a/www/plugins-dist/petitions/formulaires/activer_petition_article.php b/www/plugins-dist/petitions/formulaires/activer_petition_article.php index a7a3d254..f2058868 100644 --- a/www/plugins-dist/petitions/formulaires/activer_petition_article.php +++ b/www/plugins-dist/petitions/formulaires/activer_petition_article.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} /** * Charger @@ -18,28 +20,31 @@ if (!defined("_ECRIRE_INC_VERSION")) return; * @param int $id_article * @return array */ -function formulaires_activer_petition_article_charger_dist($id_article){ - +function formulaires_activer_petition_article_charger_dist($id_article) { + $valeurs = array(); - + $valeurs['editable'] = true; - - if (!autoriser('modererpetition', 'article', $id_article)) + + if (!autoriser('modererpetition', 'article', $id_article)) { $valeurs['editable'] = false; + } include_spip('inc/presentation'); include_spip('base/abstract_sql'); $nb_signatures = 0; $petition = sql_fetsel("*", "spip_petitions", "id_article=$id_article"); - if ($petition) - $nb_signatures = sql_countsel("spip_signatures", "id_petition=".intval($petition['id_petition'])); + if ($petition) { + $nb_signatures = sql_countsel("spip_signatures", "id_petition=" . intval($petition['id_petition'])); + } $valeurs['id_article'] = $id_article; $valeurs['petition'] = $petition; - $valeurs['_controle_petition'] = $nb_signatures?singulier_ou_pluriel($nb_signatures,'petitions:une_signature','petitions:nombre_signatures'):""; - + $valeurs['_controle_petition'] = $nb_signatures ? singulier_ou_pluriel($nb_signatures, 'petitions:une_signature', + 'petitions:nombre_signatures') : ""; + return $valeurs; - + } /** @@ -48,44 +53,45 @@ function formulaires_activer_petition_article_charger_dist($id_article){ * @param int $id_article * @return array */ -function formulaires_activer_petition_article_traiter_dist($id_article){ - +function formulaires_activer_petition_article_traiter_dist($id_article) { + include_spip('inc/autoriser'); - - if (autoriser('modererpetition', 'article', $id_article)){ - switch(_request('change_petition')) { - case 'on': - foreach(array('email_unique','site_obli','site_unique','message') as $k) - if (_request($k) != 'oui') - set_request($k,'non'); - - include_spip('action/editer_petition'); - if (!$id_petition=sql_getfetsel('id_petition','spip_petitions','id_article='.intval($id_article))){ - $id_petition = petition_inserer($id_article); - } - - petition_modifier( - $id_petition, - array('email_unique' => _request('email_unique'), - 'site_obli' => _request('site_obli'), - 'site_unique' => _request('site_unique'), - 'message' => _request('message'), - 'texte'=>_request('texte_petition'), - 'statut'=>'publie', - ) - ); - break; - case 'off': - if ($id_petition=sql_getfetsel('id_petition','spip_petitions','id_article='.intval($id_article))){ + + if (autoriser('modererpetition', 'article', $id_article)) { + switch (_request('change_petition')) { + case 'on': + foreach (array('email_unique', 'site_obli', 'site_unique', 'message') as $k) { + if (_request($k) != 'oui') { + set_request($k, 'non'); + } + } + include_spip('action/editer_petition'); - petition_modifier($id_petition,array('statut'=>'poubelle')); - } - break; + if (!$id_petition = sql_getfetsel('id_petition', 'spip_petitions', 'id_article=' . intval($id_article))) { + $id_petition = petition_inserer($id_article); + } + + petition_modifier( + $id_petition, + array( + 'email_unique' => _request('email_unique'), + 'site_obli' => _request('site_obli'), + 'site_unique' => _request('site_unique'), + 'message' => _request('message'), + 'texte' => _request('texte_petition'), + 'statut' => 'publie', + ) + ); + break; + case 'off': + if ($id_petition = sql_getfetsel('id_petition', 'spip_petitions', 'id_article=' . intval($id_article))) { + include_spip('action/editer_petition'); + petition_modifier($id_petition, array('statut' => 'poubelle')); + } + break; } } - - return array('message_ok'=>_T('config_info_enregistree')); - -} -?> + return array('message_ok' => _T('config_info_enregistree')); + +} diff --git a/www/plugins-dist/petitions/formulaires/signature.html b/www/plugins-dist/petitions/formulaires/signature.html index 660a04b0..edb2ae96 100644 --- a/www/plugins-dist/petitions/formulaires/signature.html +++ b/www/plugins-dist/petitions/formulaires/signature.html @@ -4,7 +4,7 @@ [

      (#ENV*{message_erreur})

      ] [(#ENV{editable})
      - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE [
      @@ -13,33 +13,33 @@
      ]
      <:form_forum_identifiants:> -
        -
      • +
        +
        [(#ENV*{erreurs}|table_valeur{session_nom})] -
      • -
      • + +
        [(#ENV*{erreurs}|table_valeur{session_email})] -
      • -
      + +
      <:info_lien_hypertexte:> -
        -
      • +
        +
        [(#ENV*{erreurs}|table_valeur{signature_nom_site})] -
      • -
      • + +
        [(#ENV*{erreurs}|table_valeur{signature_url_site})] -
      • -
      + +
      [(#REM) Piege a robots spammeurs ] @@ -51,12 +51,12 @@ [(#ENV{_message})
      <:petitions:form_pet_message_commentaire:> -
        -
      • +
        +
        -
      • -
      + +
      ]

      diff --git a/www/plugins-dist/petitions/formulaires/signature.php b/www/plugins-dist/petitions/formulaires/signature.php index 5a78eae5..59cddf1f 100644 --- a/www/plugins-dist/petitions/formulaires/signature.php +++ b/www/plugins-dist/petitions/formulaires/signature.php @@ -10,95 +10,109 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} function formulaires_signature_charger_dist($id_article) { include_spip('base/abstract_sql'); // pas de petition, pas de signature - if (!$r = sql_fetsel('*','spip_petitions','id_article='.intval($id_article))) + if (!$r = sql_fetsel('*', 'spip_petitions', 'id_article=' . intval($id_article))) { return false; + } // pas de signature sur une petition fermee (TODO) ou poubelle - if (isset($r['statut']) AND in_array($r['statut'],array('off','poubelle'))) + if (isset($r['statut']) and in_array($r['statut'], array('off', 'poubelle'))) { return false; + } $id_petition = $r['id_petition']; $valeurs = array( 'id_petition' => $id_petition, 'id_article' => $id_article, # pour compat - 'session_nom' => isset($GLOBALS['visiteur_session']['session_nom'])?$GLOBALS['visiteur_session']['session_nom']:(isset($GLOBALS['visiteur_session']['nom'])?$GLOBALS['visiteur_session']['nom']:''), - 'session_email'=> isset($GLOBALS['visiteur_session']['session_email'])?$GLOBALS['visiteur_session']['session_email']:(isset($GLOBALS['visiteur_session']['email'])?$GLOBALS['visiteur_session']['email']:''), - 'signature_nom_site'=>'', - 'signature_url_site'=>'http://', - '_texte'=>$r['texte'], - '_message'=>($r['message'] == 'oui') ? ' ':'', - 'message'=>'', - 'site_obli' => ($r['site_obli'] == 'oui'?' ':''), - 'debut_signatures'=>'' // pour le nettoyer de l'url d'action ! + 'session_nom' => isset($GLOBALS['visiteur_session']['session_nom']) ? $GLOBALS['visiteur_session']['session_nom'] : (isset($GLOBALS['visiteur_session']['nom']) ? $GLOBALS['visiteur_session']['nom'] : ''), + 'session_email' => isset($GLOBALS['visiteur_session']['session_email']) ? $GLOBALS['visiteur_session']['session_email'] : (isset($GLOBALS['visiteur_session']['email']) ? $GLOBALS['visiteur_session']['email'] : ''), + 'signature_nom_site' => '', + 'signature_url_site' => 'http://', + '_texte' => $r['texte'], + '_message' => ($r['message'] == 'oui') ? ' ' : '', + 'message' => '', + 'site_obli' => ($r['site_obli'] == 'oui' ? ' ' : ''), + 'debut_signatures' => '' // pour le nettoyer de l'url d'action ! ); if ($c = _request('var_confirm')) { $valeurs['_confirm'] = $c; $valeurs['editable'] = false; } + return $valeurs; } + function affiche_reponse_confirmation($confirm) { - if (!$confirm) return ''; - $confirmer_signature = charger_fonction('confirmer_signature','action'); + if (!$confirm) { + return ''; + } + $confirmer_signature = charger_fonction('confirmer_signature', 'action'); + return $confirmer_signature($confirm); # calculee plus tot: cf petitions_options } function formulaires_signature_verifier_dist($id_article) { $erreurs = array(); - $oblis = array('session_nom','session_email'); + $oblis = array('session_nom', 'session_email'); include_spip('base/abstract_sql'); - $row = sql_fetsel('*','spip_petitions','id_article='.intval($id_article)); - if (!$row) + $row = sql_fetsel('*', 'spip_petitions', 'id_article=' . intval($id_article)); + if (!$row) { $erreurs['message_erreur'] = _T('petitions:form_pet_probleme_technique'); + } $id_petition = $row['id_petition']; - if ($row['site_obli'] == 'oui'){ + if ($row['site_obli'] == 'oui') { $oblis[] = 'signature_nom_site'; $oblis[] = 'signature_url_site'; set_request('signature_url_site', vider_url(_request('signature_url_site'))); } - foreach ($oblis as $obli) - if (!_request($obli)) + foreach ($oblis as $obli) { + if (!_request($obli)) { $erreurs[$obli] = _T('info_obligatoire'); - - if ($nom = _request('session_nom') AND strlen($nom) < 2) - $erreurs['session_nom'] = _T('form_indiquer_nom'); + } + } + + if ($nom = _request('session_nom') and strlen($nom) < 2) { + $erreurs['session_nom'] = _T('form_indiquer_nom'); + } include_spip('inc/filtres'); - if (($mail=_request('session_email')) == _T('info_mail_fournisseur')) + if (($mail = _request('session_email')) == _T('info_mail_fournisseur')) { $erreurs['session_email'] = _T('form_indiquer_email'); - elseif ($mail AND !email_valide($mail)) + } elseif ($mail and !email_valide($mail)) { $erreurs['session_email'] = _T('form_email_non_valide'); - elseif (strlen(_request('nobot')) - OR (@preg_match_all(',\bhref=[\'"]?http,i', // bug PHP - _request('message') - # , PREG_PATTERN_ORDER - ) - >2)) { + } elseif (strlen(_request('nobot')) + or (@preg_match_all(',\bhref=[\'"]?http,i', // bug PHP + _request('message') + # , PREG_PATTERN_ORDER + ) + > 2) + ) { #$envoyer_mail = charger_fonction('envoyer_mail','inc'); #envoyer_mail('email_moderateur@example.tld', 'spam intercepte', var_export($_POST,1)); $erreurs['message_erreur'] = _T('petitions:form_pet_probleme_liens'); } - if ($row['site_obli'] == 'oui'){ + if ($row['site_obli'] == 'oui') { if (!vider_url($url_site = _request('signature_url_site'))) { $erreurs['signature_url_site'] = _T('form_indiquer_nom_site'); - } - elseif (!count($erreurs)) { + } elseif (!count($erreurs)) { include_spip('inc/distant'); - if (!recuperer_page($url_site, false, true, 0)) + if (!recuperer_page($url_site, false, true, 0)) { $erreurs['signature_url_site'] = _T('petitions:form_pet_url_invalide'); + } } } - if (!count($erreurs)){ + if (!count($erreurs)) { // tout le monde est la. - $email_unique = $row['email_unique'] == "oui"; - $site_unique = $row['site_unique'] == "oui"; + $email_unique = $row['email_unique'] == "oui"; + $site_unique = $row['site_unique'] == "oui"; // Refuser si deja signe par le mail ou le site quand demande // Il y a un acces concurrent potentiel, @@ -106,13 +120,19 @@ function formulaires_signature_verifier_dist($id_article) { // On traite donc le probleme a la confirmation. if ($email_unique) { - $r = sql_countsel('spip_signatures', "id_petition=".intval($id_petition)." AND ad_email=" . sql_quote($mail) . " AND statut='publie'"); - if ($r) $erreurs['message_erreur'] = _T('petitions:form_pet_deja_signe'); + $r = sql_countsel('spip_signatures', + "id_petition=" . intval($id_petition) . " AND ad_email=" . sql_quote($mail) . " AND statut='publie'"); + if ($r) { + $erreurs['message_erreur'] = _T('petitions:form_pet_deja_signe'); + } } if ($site_unique) { - $r = sql_countsel('spip_signatures', "id_petition=".intval($id_petition)." AND url_site=" . sql_quote($url_site) . " AND (statut='publie' OR statut='poubelle')"); - if ($r) $erreurs['message_erreur'] = _T('petitions:form_pet_site_deja_enregistre'); + $r = sql_countsel('spip_signatures', + "id_petition=" . intval($id_petition) . " AND url_site=" . sql_quote($url_site) . " AND (statut='publie' OR statut='poubelle')"); + if ($r) { + $erreurs['message_erreur'] = _T('petitions:form_pet_site_deja_enregistre'); + } } } @@ -125,12 +145,12 @@ function formulaires_signature_traiter_dist($id_article) { if (spip_connect()) { $controler_signature = charger_fonction('controler_signature', 'inc'); $reponse = $controler_signature($id_article, - _request('session_nom'), _request('session_email'), - _request('message'), _request('signature_nom_site'), - _request('signature_url_site'), _request('url_page')); + _request('session_nom'), _request('session_email'), + _request('message'), _request('signature_nom_site'), + _request('signature_url_site'), _request('url_page')); } - return array('message_ok'=>$reponse); + return array('message_ok' => $reponse); } // @@ -143,26 +163,32 @@ function inc_controler_signature_dist($id_article, $nom, $mail, $message, $site, // tout le monde est la. // cela a ete verifie en amont, dans formulaires_signature_verifier() - if (!$row = sql_fetsel('*', 'spip_petitions', "id_article=".intval($id_article))) + if (!$row = sql_fetsel('*', 'spip_petitions', "id_article=" . intval($id_article))) { return _T('petitions:form_pet_probleme_technique'); + } $statut = ""; - if (!$ret = signature_a_confirmer($id_article, $url_page, $nom, $mail, $site, $url_site, $message, $lang, $statut)) + if (!$ret = signature_a_confirmer($id_article, $url_page, $nom, $mail, $site, $url_site, $message, 'fr'/*inutilise*/, + $statut) + ) { return _T('petitions:form_pet_probleme_technique'); + } include_spip('action/editer_signature'); $id_signature = signature_inserer($row['id_petition']); - if (!$id_signature) return _T('petitions:form_pet_probleme_technique'); + if (!$id_signature) { + return _T('petitions:form_pet_probleme_technique'); + } signature_modifier($id_signature, array( - 'statut' => $statut, - 'nom_email' => $nom, - 'ad_email' => $mail, - 'message' => $message, - 'nom_site' => $site, - 'url_site' => $url_site + 'statut' => $statut, + 'nom_email' => $nom, + 'ad_email' => $mail, + 'message' => $message, + 'nom_site' => $site, + 'url_site' => $url_site ) ); @@ -170,8 +196,7 @@ function inc_controler_signature_dist($id_article, $nom, $mail, $message, $site, } // https://code.spip.net/@signature_a_confirmer -function signature_a_confirmer($id_article, $url_page, $nom, $mail, $site, $url, $msg, $lang, &$statut) -{ +function signature_a_confirmer($id_article, $url_page, $nom, $mail, $site, $url, $msg, $lang, &$statut) { include_spip('inc/texte'); include_spip('inc/filtres'); @@ -181,16 +206,16 @@ function signature_a_confirmer($id_article, $url_page, $nom, $mail, $site, $url, if ( // Cas 1: on est loge et on signe avec son vrai email ( - isset($GLOBALS['visiteur_session']['statut']) - AND $GLOBALS['visiteur_session']['session_email'] == $GLOBALS['visiteur_session']['email'] - AND strlen($GLOBALS['visiteur_session']['email']) + isset($GLOBALS['visiteur_session']['statut']) + and $GLOBALS['visiteur_session']['session_email'] == $GLOBALS['visiteur_session']['email'] + and strlen($GLOBALS['visiteur_session']['email']) ) // Cas 2: on a deja signe une petition, et on conserve le meme email - OR ( - isset($GLOBALS['visiteur_session']['email_confirme']) - AND $GLOBALS['visiteur_session']['session_email'] == $GLOBALS['visiteur_session']['email_confirme'] - AND strlen($GLOBALS['visiteur_session']['session_email']) + or ( + isset($GLOBALS['visiteur_session']['email_confirme']) + and $GLOBALS['visiteur_session']['session_email'] == $GLOBALS['visiteur_session']['email_confirme'] + and strlen($GLOBALS['visiteur_session']['session_email']) ) ) { // Si on est en ajax on demande a reposter sans ajax, car il faut @@ -211,32 +236,39 @@ function signature_a_confirmer($id_article, $url_page, $nom, $mail, $site, $url, // // Cas normal : envoi d'une demande de confirmation // - $row = sql_fetsel('titre,lang', 'spip_articles', "id_article=".intval($id_article)); + $row = sql_fetsel('titre,lang', 'spip_articles', "id_article=" . intval($id_article)); $lang = lang_select($row['lang']); $titre = textebrut(typo($row['titre'])); - if ($lang) lang_select(); + if ($lang) { + lang_select(); + } - if (!strlen($statut)) + if (!strlen($statut)) { $statut = signature_test_pass(); + } - if ($lang != $GLOBALS['meta']['langue_site']) - $url_page = parametre_url($url_page, "lang", $lang,'&'); + if ($lang != $GLOBALS['meta']['langue_site']) { + $url_page = parametre_url($url_page, "lang", $lang, '&'); + } $url_page = parametre_url($url_page, 'var_confirm', $statut, '&') - . "#sp$id_article"; + . "#sp$id_article"; $r = _T('petitions:form_pet_mail_confirmation', - array('titre' => $titre, - 'nom_email' => $nom, - 'nom_site' => $site, - 'url_site' => $url, - 'url' => $url_page, - 'message' => $msg)); - - $titre = _T('petitions:form_pet_confirmation')." ". $titre; - $envoyer_mail = charger_fonction('envoyer_mail','inc'); - if ($envoyer_mail($mail,$titre, $r)) - return _T('petitions:form_pet_envoi_mail_confirmation',array('email'=>$mail)); + array( + 'titre' => $titre, + 'nom_email' => $nom, + 'nom_site' => $site, + 'url_site' => $url, + 'url' => $url_page, + 'message' => $msg + )); + + $titre = _T('petitions:form_pet_confirmation') . " " . $titre; + $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); + if ($envoyer_mail($mail, $titre, $r)) { + return _T('petitions:form_pet_envoi_mail_confirmation', array('email' => $mail)); + } return false; # erreur d'envoi de l'email } @@ -252,5 +284,3 @@ function signature_test_pass() { return $passw; } - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions.xml b/www/plugins-dist/petitions/lang/paquet-petitions.xml index ecd7a5ee..43559993 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions.xml +++ b/www/plugins-dist/petitions/lang/paquet-petitions.xml @@ -19,12 +19,18 @@ + + + + + + @@ -37,4 +43,7 @@ + + + diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_ar.php b/www/plugins-dist/petitions/lang/paquet-petitions_ar.php index 81b50545..88901da8 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions_ar.php +++ b/www/plugins-dist/petitions/lang/paquet-petitions_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-petitions?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'petitions_description' => 'العرائض في SPIP', 'petitions_slogan' => 'إدارة العرائض في SPIP' ); - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_de.php b/www/plugins-dist/petitions/lang/paquet-petitions_de.php index b1f0b2ea..221ab2ac 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions_de.php +++ b/www/plugins-dist/petitions/lang/paquet-petitions_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-petitions?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'petitions_description' => 'Petitionen mit SPIP', 'petitions_slogan' => 'Verwaltung von Petitionen mit SPIP' ); - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_en.php b/www/plugins-dist/petitions/lang/paquet-petitions_en.php index 5a91abca..5ddea3d3 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions_en.php +++ b/www/plugins-dist/petitions/lang/paquet-petitions_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-petitions?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'petitions_description' => 'Petitions in SPIP', 'petitions_slogan' => 'Petitions management in SPIP' ); - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_es.php b/www/plugins-dist/petitions/lang/paquet-petitions_es.php index 8409e9fd..5201483d 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions_es.php +++ b/www/plugins-dist/petitions/lang/paquet-petitions_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-petitions?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'petitions_description' => 'Peticiones en SPIP', 'petitions_slogan' => 'Administración de las peticiones en SPIP' ); - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_fa.php b/www/plugins-dist/petitions/lang/paquet-petitions_fa.php index 14ec465f..a5b2c45a 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions_fa.php +++ b/www/plugins-dist/petitions/lang/paquet-petitions_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-petitions?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'petitions_description' => 'طومارها در اسپيپ', 'petitions_slogan' => 'مديريت طومارها در اسپيپ' ); - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_fr.php b/www/plugins-dist/petitions/lang/paquet-petitions_fr.php index c83b80a4..f1e86809 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions_fr.php +++ b/www/plugins-dist/petitions/lang/paquet-petitions_fr.php @@ -1,7 +1,9 @@ 'Pétitions dans SPIP', 'petitions_slogan' => 'Gestion des pétitions dans SPIP' ); - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_fr_fem.php b/www/plugins-dist/petitions/lang/paquet-petitions_fr_fem.php index 1c9543c3..82dfe646 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions_fr_fem.php +++ b/www/plugins-dist/petitions/lang/paquet-petitions_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-petitions?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'petitions_description' => 'Pétitions dans SPIP', 'petitions_slogan' => 'Gestion des pétitions dans SPIP' ); - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_fr_tu.php b/www/plugins-dist/petitions/lang/paquet-petitions_fr_tu.php new file mode 100644 index 00000000..68237941 --- /dev/null +++ b/www/plugins-dist/petitions/lang/paquet-petitions_fr_tu.php @@ -0,0 +1,15 @@ + 'Pétitions dans SPIP', + 'petitions_slogan' => 'Gestion des pétitions dans SPIP' +); diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_it.php b/www/plugins-dist/petitions/lang/paquet-petitions_it.php index 5ec8c8b9..d3f1b5d5 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions_it.php +++ b/www/plugins-dist/petitions/lang/paquet-petitions_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-petitions?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'petitions_description' => 'Petizioni di SPIP', 'petitions_slogan' => 'Gestione delle petizioni di SPIP' ); - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_nl.php b/www/plugins-dist/petitions/lang/paquet-petitions_nl.php index ec281572..8320e3d9 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions_nl.php +++ b/www/plugins-dist/petitions/lang/paquet-petitions_nl.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-petitions?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'petitions_description' => 'Petities in SPIP', 'petitions_slogan' => 'Beheer van petities in SPIP' ); - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_oc_ni_mis.php b/www/plugins-dist/petitions/lang/paquet-petitions_oc_ni_mis.php new file mode 100644 index 00000000..d97beed0 --- /dev/null +++ b/www/plugins-dist/petitions/lang/paquet-petitions_oc_ni_mis.php @@ -0,0 +1,15 @@ + 'Peticioun en SPIP', + 'petitions_slogan' => 'Gestioun dei peticioun en SPIP' +); diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_pt.php b/www/plugins-dist/petitions/lang/paquet-petitions_pt.php index 82e6f7ae..b4143007 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions_pt.php +++ b/www/plugins-dist/petitions/lang/paquet-petitions_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-petitions?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'petitions_description' => 'Petições em SPIP', 'petitions_slogan' => 'Gestão das petições em SPIP' ); - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_pt_br.php b/www/plugins-dist/petitions/lang/paquet-petitions_pt_br.php index 5e856051..48d379d7 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions_pt_br.php +++ b/www/plugins-dist/petitions/lang/paquet-petitions_pt_br.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-petitions?lang_cible=pt_br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'petitions_description' => 'Petições do SPIP', 'petitions_slogan' => 'Gerenciamento de petições do SPIP' ); - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_ru.php b/www/plugins-dist/petitions/lang/paquet-petitions_ru.php index eb02f137..ffac2d9e 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions_ru.php +++ b/www/plugins-dist/petitions/lang/paquet-petitions_ru.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-petitions?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'petitions_description' => 'Модуль сбора подписей для SPIP', 'petitions_slogan' => 'Модуль сбора подписей для SPIP' ); - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_sk.php b/www/plugins-dist/petitions/lang/paquet-petitions_sk.php index 66144999..c29bf603 100644 --- a/www/plugins-dist/petitions/lang/paquet-petitions_sk.php +++ b/www/plugins-dist/petitions/lang/paquet-petitions_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-petitions?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -11,5 +13,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'petitions_description' => 'Petície v SPIPe', 'petitions_slogan' => 'Správa petícií v SPIPe' ); - -?> diff --git a/www/plugins-dist/petitions/lang/paquet-petitions_uk.php b/www/plugins-dist/petitions/lang/paquet-petitions_uk.php new file mode 100644 index 00000000..711f08b1 --- /dev/null +++ b/www/plugins-dist/petitions/lang/paquet-petitions_uk.php @@ -0,0 +1,15 @@ + 'Петиції у SPIP', + 'petitions_slogan' => 'Управління петиціями у SPIP' +); diff --git a/www/plugins-dist/petitions/lang/petitions.xml b/www/plugins-dist/petitions/lang/petitions.xml index 85ba84ee..a27dd96b 100644 --- a/www/plugins-dist/petitions/lang/petitions.xml +++ b/www/plugins-dist/petitions/lang/petitions.xml @@ -1,151 +1,163 @@ - + - + - + - + - + + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + + - + + + - + - + - + - + - + + - + - + - + - + - + + - + - + - + + - + - + - + - + - + + - + - + - + diff --git a/www/plugins-dist/petitions/lang/petitions_ar.php b/www/plugins-dist/petitions/lang/petitions_ar.php index 737c3460..1e7ca094 100644 --- a/www/plugins-dist/petitions/lang/petitions_ar.php +++ b/www/plugins-dist/petitions/lang/petitions_ar.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=ar // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -16,6 +18,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_checkbox_indiquer_site' => 'يجب تحديد موقع على النسيج', 'bouton_checkbox_signature_unique_email' => 'توقيع واحد فقط لكل عنوان بريدي', 'bouton_checkbox_signature_unique_site' => 'توقيع واحد فقط لكل موقع', + 'bouton_radio_activer_petition' => 'تفعيل العريضة', + 'bouton_radio_pas_petition' => 'بدون عرائض', + 'bouton_radio_petition_activee' => 'تم تفعيل العريضة', + 'bouton_radio_supprimer_petition' => 'حذف العريضة', // F 'filtre' => 'مرشح:', @@ -109,5 +115,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // V 'voir_signatures_objet' => 'عرض التواقيع' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_ast.php b/www/plugins-dist/petitions/lang/petitions_ast.php index 7fac2f60..2125863d 100644 --- a/www/plugins-dist/petitions/lang/petitions_ast.php +++ b/www/plugins-dist/petitions/lang/petitions_ast.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=ast // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Activar la solicitú', + 'bouton_radio_pas_petition' => 'Ensin solicitú', + 'bouton_radio_petition_activee' => 'Solicitú activada', + 'bouton_radio_supprimer_petition' => 'Desaniciar la solicitú', + // F 'form_pet_adresse_site' => 'Señes del to sitiu', # MODIF 'form_pet_aucune_signature' => 'Denguna robla concasa con esi códigu...', # MODIF @@ -52,5 +60,3 @@ Gracies por participar // L 'lien_reponse_article' => 'Respuesta a l’artículu' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_ay.php b/www/plugins-dist/petitions/lang/petitions_ay.php index 40e3fb0a..8d88606f 100644 --- a/www/plugins-dist/petitions/lang/petitions_ay.php +++ b/www/plugins-dist/petitions/lang/petitions_ay.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=ay // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Mayiwix naktayaña', + 'bouton_radio_pas_petition' => 'Jan mayiyawimpi', + 'bouton_radio_petition_activee' => 'Mayiyaw naktata', + 'bouton_radio_supprimer_petition' => 'Mayiwi apaqaña', + // F 'form_pet_adresse_site' => 'Qamawimat utjawipa', # MODIF 'form_pet_aucune_signature' => 'Janiw ni mä imt’at qillqa utjkiti aka wakt’at chimpuru', # MODIF @@ -47,5 +55,3 @@ Arsusiwitamatxa yuspagara // I 'info_adresse_email' => 'Aka aruskipayirit utjawi:' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_bg.php b/www/plugins-dist/petitions/lang/petitions_bg.php index 2a2b5d51..bd575c0b 100644 --- a/www/plugins-dist/petitions/lang/petitions_bg.php +++ b/www/plugins-dist/petitions/lang/petitions_bg.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=bg // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Активиране на молбата', + 'bouton_radio_pas_petition' => 'Без молба', + 'bouton_radio_petition_activee' => 'Молбата е активирана', + 'bouton_radio_supprimer_petition' => 'Изтриване на молбата', + // F 'form_pet_adresse_site' => 'URL на сайта', # MODIF 'form_pet_aucune_signature' => 'Кодът не отговаря на никой запис', # MODIF @@ -47,5 +55,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // L 'lien_reponse_article' => 'Отговор на статията' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_br.php b/www/plugins-dist/petitions/lang/petitions_br.php index af5b85a8..c3afc06d 100644 --- a/www/plugins-dist/petitions/lang/petitions_br.php +++ b/www/plugins-dist/petitions/lang/petitions_br.php @@ -3,11 +3,28 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // A + 'alerte_confirmer_suppression_signatures' => 'Emaoc’h o vont da ziverkañ an holl sinadegoù. Daoust hag oc’h sur da vont pelloc’h ?', + 'aucune_signature' => 'Sinadur ebet', + + // B + 'bouton_checkbox_envoi_message' => 'Tu ’zo da gas ur gemenadenn', + 'bouton_checkbox_indiquer_site' => 'Ret eo lakaat ul lec’hienn web', + 'bouton_checkbox_signature_unique_email' => 'nemet ur sinadur evit pep chomlec’h postel', + 'bouton_checkbox_signature_unique_site' => 'nemet ur sinadur evit pep lec’hienn web', + 'bouton_radio_activer_petition' => 'Enaouiñ ar sinadeg', + 'bouton_radio_pas_petition' => 'Sinadeg ebet', + 'bouton_radio_petition_activee' => 'Sinadeg war-enaou', + 'bouton_radio_supprimer_petition' => 'Dilemel ar sinadeg', + // F + 'filtre' => 'Sil : ', 'form_pet_adresse_site' => 'Chomlec’h ho lec’hienn', # MODIF 'form_pet_aucune_signature' => 'Sinadur ebet ne glot gant ar c’hod-mañ...', # MODIF 'form_pet_confirmation' => 'Kadarnait ho sinadur mar-plij :', @@ -32,10 +49,11 @@ Evit kadarnaat ho sinadur eo trawalc’h deoc’h mont d’ar chomlec’h amañ Trugarez da gemer perzh ', + 'form_pet_message_commentaire' => 'Ur gemenadenn, un addisplegadenn ?', 'form_pet_nom_site2' => 'Anv ho lec’hienn', # MODIF 'form_pet_probleme_liens' => 'Savit ho kemennadenn en-dro en ur dennañ ar gourliammoù zo enni. ', 'form_pet_probleme_technique' => 'Ur gudenn deknikel zo, n’haller ket sinañ evit ar poent.', - 'form_pet_signature_validee' => 'Kadarnet eo bet ho sinadur. Trugarez !', + 'form_pet_signature_validee' => 'Kadarnaet eo bet ho sinadur. Trugarez !', 'form_pet_site_deja_enregistre' => 'Enrollet eo bet al lec’hienn-mañ c’hoazh', 'form_pet_url_invalide' => 'Direizh eo an URL bet merket ganeoc’h.', 'form_pet_votre_email' => 'Ho chomlec’h postel', @@ -43,13 +61,52 @@ Trugarez da gemer perzh 'form_pet_votre_site' => 'M’ho peus ul lec’hienn Web e c’hellit he mennegiñ amañ da-heul', // I + 'icone_relancer_signataire' => 'Adlañsañ ar sinader.', + 'icone_relancer_signataires' => 'Alañsañ ar sinaderien', + 'icone_suivi_petitions' => 'Heuliañ/merañ ar sinadegoù', + 'icone_supprimer_signature' => 'Diverkañ ar sinadur mañ', + 'icone_supprimer_signatures' => 'Diverkañ ar sinadurioù', + 'icone_valider_signature' => 'Gwiriekaat ar sinadur mañ', + 'icone_valider_signatures' => 'Gwirekaat ar sinadurioù', 'info_adresse_email' => 'POSTEL :', + 'info_fonctionnement_petition' => 'Mont en-dro ar sinadeg :', 'info_signature_supprimee' => 'Diverket eo bet ar sinadur', 'info_signature_supprimee_erreur' => 'Fazi : ne glot ar c’hod diverkañ-mañ gant sinadur ebet.', # MODIF 'info_site_web' => 'LEC’HIENN :', + 'info_texte_message' => 'Testenn ho kemenadenn :', // L - 'lien_reponse_article' => 'Respont d’ar pennad' -); + 'lien_reponse_article' => 'Respont d’ar pennad', + + // S + 'sans_nom' => 'Dizanv', + 'signatures_article' => 'Sinadurioù ar pennadoù-skrid', + 'signatures_aucune' => 'Hini ebet', + 'signatures_meme_auteur' => 'Sinadurioù ar memes aozour', + 'signatures_meme_site' => 'Sinadurioù ar memes lec’hienn', + 'signatures_poubelle' => 'Bet dilemet', + 'signatures_prop' => 'Lakaet da c’hortoz', + 'signatures_publie' => 'Bet kadarnaet', + 'signatures_recherche_label' => 'Klask sinadurioù : ', + 'signatures_selection' => 'Diuzañ ar sinadurioù : ', + 'signatures_toutes' => 'An holl', + 'statut_poubelle' => 'Bet dilemet', + 'statut_prop' => 'O c’hortoz da vezañ kadarnaet', + 'statut_publie' => 'Ber kadarnaet', -?> + // T + 'texte_descriptif_petition' => ' Deskrivadur ar sinadeg', + 'titre_page_controle_petition' => 'Heuliañ ar sinadegoù', + 'titre_petition' => 'Sinadeg', + 'titre_selection_action' => 'Diuz', + 'titre_signatures_attente' => 'Sinadurioù o c’hortoz bezañ gwiriedekaet', + 'titre_signatures_publie' => 'Sinadurioù gwiriedekaet', + 'titre_suivi_petition' => 'Heuliañ ar sinadegoù', + 'tout_voir' => 'Gwelet an holl sinadurioù', + + // U + 'une_signature' => '1 sinadur', + + // V + 'voir_signatures_objet' => 'Gwelet ar sinadurioù' +); diff --git a/www/plugins-dist/petitions/lang/petitions_bs.php b/www/plugins-dist/petitions/lang/petitions_bs.php index f54a6fe0..95dc055b 100644 --- a/www/plugins-dist/petitions/lang/petitions_bs.php +++ b/www/plugins-dist/petitions/lang/petitions_bs.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=bs // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Aktiviraj peticiju', + 'bouton_radio_pas_petition' => 'Bez peticije', + 'bouton_radio_petition_activee' => 'Peticija je aktivirana', + 'bouton_radio_supprimer_petition' => 'Izbrisi peticiju', + // F 'form_pet_adresse_site' => 'Adresa vase stranice', # MODIF 'form_pet_aucune_signature' => 'Nijedan potpis ne odgovara ovom kodu...', # MODIF @@ -31,5 +39,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // L 'lien_reponse_article' => 'Odgovori na clanak' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_ca.php b/www/plugins-dist/petitions/lang/petitions_ca.php index a970688b..0bf74c07 100644 --- a/www/plugins-dist/petitions/lang/petitions_ca.php +++ b/www/plugins-dist/petitions/lang/petitions_ca.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=ca // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Activar la petició', + 'bouton_radio_pas_petition' => 'Cap petició', + 'bouton_radio_petition_activee' => 'Petició activada', + 'bouton_radio_supprimer_petition' => 'Suprimir la petició', + // F 'form_pet_adresse_site' => 'L’adreça del vostre lloc', # MODIF 'form_pet_aucune_signature' => 'No hi ha cap signatura que correspongui a aquest codi...', # MODIF @@ -52,5 +60,3 @@ Gràcies per la participació // L 'lien_reponse_article' => 'Resposta a l’article' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_co.php b/www/plugins-dist/petitions/lang/petitions_co.php index 1a7a9185..2c027adc 100644 --- a/www/plugins-dist/petitions/lang/petitions_co.php +++ b/www/plugins-dist/petitions/lang/petitions_co.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=co // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Attivà a petizione', + 'bouton_radio_pas_petition' => 'Nisuna petizione', + 'bouton_radio_petition_activee' => 'Petizione attivata', + 'bouton_radio_supprimer_petition' => 'Toglie a petizione', + // F 'form_pet_adresse_site' => 'Indirizzu di u vostru situ', # MODIF 'form_pet_aucune_signature' => 'Nisuna zifra currisponde à stu còdice ...', # MODIF @@ -53,5 +61,3 @@ l’indirizzu quì sottu (o sinnò, serà rifiutata a vostra dumanda) : // L 'lien_reponse_article' => 'Risposta à l’artìculu' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_cpf.php b/www/plugins-dist/petitions/lang/petitions_cpf.php index dd5b2ec2..18ded9c3 100644 --- a/www/plugins-dist/petitions/lang/petitions_cpf.php +++ b/www/plugins-dist/petitions/lang/petitions_cpf.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=cpf // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Fé zwé filsinyatir', + 'bouton_radio_pas_petition' => 'Anpès néna filsinyatir', + 'bouton_radio_petition_activee' => 'Astèr, filsinyatir i mars', + 'bouton_radio_supprimer_petition' => 'Dégrèn filsinyatir', + // F 'form_pet_adresse_site' => 'Ladrès out sitwèb', # MODIF 'form_pet_aucune_signature' => 'Astèr, nana pwinn sinyatir èk kod la-minm...', # MODIF @@ -46,5 +54,3 @@ Mersi aou mèt ansanm isi // L 'lien_reponse_article' => 'Réponn lartik-la' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_cpf_hat.php b/www/plugins-dist/petitions/lang/petitions_cpf_hat.php index e65813d1..d564c30f 100644 --- a/www/plugins-dist/petitions/lang/petitions_cpf_hat.php +++ b/www/plugins-dist/petitions/lang/petitions_cpf_hat.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=cpf_hat // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Mèt yon pétisyon', + 'bouton_radio_pas_petition' => 'Okenn petisyon', + 'bouton_radio_petition_activee' => 'Petisyon ka mache', + 'bouton_radio_supprimer_petition' => 'Kraez petisyon nan', + // F 'form_pet_adresse_site' => 'Ladrès sit ou', # MODIF 'form_pet_aucune_signature' => 'Okenn siyati ka koresponn kod-la...', # MODIF @@ -45,5 +53,3 @@ Mèsi w soutni petisyon-nan // L 'lien_reponse_article' => 'Réponn atik-la' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_cs.php b/www/plugins-dist/petitions/lang/petitions_cs.php index 09eef77d..9aa1a081 100644 --- a/www/plugins-dist/petitions/lang/petitions_cs.php +++ b/www/plugins-dist/petitions/lang/petitions_cs.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=cs // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Zapnout petici', + 'bouton_radio_pas_petition' => 'Bez petice', + 'bouton_radio_petition_activee' => 'Petice zapnuta', + 'bouton_radio_supprimer_petition' => 'Odstranit petici', + // F 'form_pet_adresse_site' => 'Zadejte adresu URL svého webu', # MODIF 'form_pet_aucune_signature' => 'Tomuto kódu neodpovídá žádný podpis...', # MODIF @@ -49,5 +57,3 @@ Děkujeme vám za účast // L 'lien_reponse_article' => 'Odpověď na článek' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_da.php b/www/plugins-dist/petitions/lang/petitions_da.php index 24d2c177..1b80700a 100644 --- a/www/plugins-dist/petitions/lang/petitions_da.php +++ b/www/plugins-dist/petitions/lang/petitions_da.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=da // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Tillad appeller', + 'bouton_radio_pas_petition' => 'Ingen appeller', + 'bouton_radio_petition_activee' => 'Appelfunktion slÃ¥et til', + 'bouton_radio_supprimer_petition' => 'Slet appellen', + // F 'form_pet_adresse_site' => 'Dit websteds URL', # MODIF 'form_pet_aucune_signature' => 'Ingen signatur svarer til denne kode...', # MODIF @@ -45,5 +53,3 @@ Tak for din deltagelse // L 'lien_reponse_article' => 'Kommenter denne artikel' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_de.php b/www/plugins-dist/petitions/lang/petitions_de.php index 280bc4b1..b3aeb802 100644 --- a/www/plugins-dist/petitions/lang/petitions_de.php +++ b/www/plugins-dist/petitions/lang/petitions_de.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=de // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -16,6 +18,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_checkbox_indiquer_site' => 'Angabe einer Website erforderlich', 'bouton_checkbox_signature_unique_email' => 'eine einzige Unterzeichnung pro Email', 'bouton_checkbox_signature_unique_site' => 'nur ein Unterzeichner pro Website', + 'bouton_radio_activer_petition' => 'Petitionen aktivieren', + 'bouton_radio_pas_petition' => 'Keine Petition', + 'bouton_radio_petition_activee' => 'Petition aktiviert', + 'bouton_radio_supprimer_petition' => 'Petition löschen', // F 'filtre' => 'Filter:', @@ -84,6 +90,7 @@ Vielen Dank für Ihre Teilnahme 'signatures_prop' => 'In der Warteschlange', 'signatures_publie' => 'Bestätigt', 'signatures_recherche_label' => 'Unterzeichner suchen:', + 'signatures_selection' => 'Unterschriften auswählen:', 'signatures_toutes' => 'Alle', 'statut_poubelle' => 'Gelöscht', 'statut_prop' => 'Warten auf Freischaltung', @@ -106,5 +113,3 @@ Vielen Dank für Ihre Teilnahme // V 'voir_signatures_objet' => 'Unterzeichner Anzeigen ' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_el.php b/www/plugins-dist/petitions/lang/petitions_el.php index 4c263a52..fd997f6d 100644 --- a/www/plugins-dist/petitions/lang/petitions_el.php +++ b/www/plugins-dist/petitions/lang/petitions_el.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=el // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Ενεργοποίηση της λίστας υπογραφών', + 'bouton_radio_pas_petition' => 'Καμία αίτηση', + 'bouton_radio_petition_activee' => 'Η αίτηση ενεργοποιήθηκε', + 'bouton_radio_supprimer_petition' => 'Διαγράψτε την αίτηση', + // F 'form_pet_adresse_site' => 'Το URL της ιστοσελίδα σας', # MODIF 'form_pet_aucune_signature' => 'Καμία εγγραφή δεν αντιστοιχεί σε αυτόν τον κώδικα...', # MODIF @@ -47,5 +55,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_adresse_email' => 'ΔΙΕΥΘΥΝΣΗ ΗΛΕΚΤΡΟΝΙΚΟΥ ΤΑΧΥΔΡΟΜΕΊΟΥ:', 'info_signature_supprimee' => 'Η υπογραφή διεγράφη' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_en.php b/www/plugins-dist/petitions/lang/petitions_en.php index 570d9f51..733d43c9 100644 --- a/www/plugins-dist/petitions/lang/petitions_en.php +++ b/www/plugins-dist/petitions/lang/petitions_en.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=en // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -16,6 +18,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_checkbox_indiquer_site' => 'must enter the name of a Web site', 'bouton_checkbox_signature_unique_email' => 'only one signature per email', 'bouton_checkbox_signature_unique_site' => 'only one signature per website', + 'bouton_radio_activer_petition' => 'Activate the petition', + 'bouton_radio_pas_petition' => 'No petition', + 'bouton_radio_petition_activee' => 'Petition activated', + 'bouton_radio_supprimer_petition' => 'Delete the petition', // F 'filtre' => 'Filter:', @@ -107,5 +113,3 @@ Thank you for participating! // V 'voir_signatures_objet' => 'Show signatures' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_en_hx.php b/www/plugins-dist/petitions/lang/petitions_en_hx.php index b7759351..b4c659b6 100644 --- a/www/plugins-dist/petitions/lang/petitions_en_hx.php +++ b/www/plugins-dist/petitions/lang/petitions_en_hx.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=en_hx // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => '4c71v471ng 7h3 p371710n', + 'bouton_radio_pas_petition' => 'N0 p371710n', + 'bouton_radio_petition_activee' => 'P371710n 4c71v473d', + 'bouton_radio_supprimer_petition' => 'D31373 7h3 p371710n', + // F 'form_pet_adresse_site' => 'Y0ur 5173’5 UR1', # MODIF 'form_pet_aucune_signature' => 'N0 51gn47ur3 m47ch35 7h15 c0d3...', # MODIF @@ -46,5 +54,3 @@ w111 b3 r3j3c73d): // L 'lien_reponse_article' => 'R3p1y 70 7h3 4r71c13' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_eo.php b/www/plugins-dist/petitions/lang/petitions_eo.php index a581d5f4..7f9f35ff 100644 --- a/www/plugins-dist/petitions/lang/petitions_eo.php +++ b/www/plugins-dist/petitions/lang/petitions_eo.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=eo // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Aktivigi la petskribon', + 'bouton_radio_pas_petition' => 'Neniu petskribo', + 'bouton_radio_petition_activee' => 'Aktivigita petskribo', + 'bouton_radio_supprimer_petition' => 'Forviŝi la petskribon', + // F 'form_pet_adresse_site' => 'Retadreso de via retejo', # MODIF 'form_pet_aucune_signature' => 'Neniu subskribo kongruas kun tiu kodo...', # MODIF @@ -52,5 +60,3 @@ Dankon pro via partopreno // L 'lien_reponse_article' => 'Respondo al la artikolo' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_es.php b/www/plugins-dist/petitions/lang/petitions_es.php index 4f4db2f5..b6009a21 100644 --- a/www/plugins-dist/petitions/lang/petitions_es.php +++ b/www/plugins-dist/petitions/lang/petitions_es.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=es // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -16,6 +18,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_checkbox_indiquer_site' => 'indicar obligatoriamente un sitio web?', 'bouton_checkbox_signature_unique_email' => 'una sola firma por dirección e-mail', 'bouton_checkbox_signature_unique_site' => 'una sola firma por sitio web', + 'bouton_radio_activer_petition' => 'Activar la petición', + 'bouton_radio_pas_petition' => 'Sin petición', + 'bouton_radio_petition_activee' => 'Petición activada', + 'bouton_radio_supprimer_petition' => 'Suprimir la petición', // F 'filtre' => 'Filtro:', @@ -110,5 +116,3 @@ Gracias por tu participación // V 'voir_signatures_objet' => 'Ver las firmas' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_es_co.php b/www/plugins-dist/petitions/lang/petitions_es_co.php index 68fc73ce..a98689e7 100644 --- a/www/plugins-dist/petitions/lang/petitions_es_co.php +++ b/www/plugins-dist/petitions/lang/petitions_es_co.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=es_co // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -42,5 +44,3 @@ Gracias por su participación 'form_pet_votre_nom' => 'Su nombre o seudónimo', # MODIF 'form_pet_votre_site' => 'Si tiene un sitio web, puede indicarlo a continuación' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_eu.php b/www/plugins-dist/petitions/lang/petitions_eu.php index 111addd5..9772494f 100644 --- a/www/plugins-dist/petitions/lang/petitions_eu.php +++ b/www/plugins-dist/petitions/lang/petitions_eu.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=eu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Eskaera aktibatu', + 'bouton_radio_pas_petition' => 'Eskaerarik gabe', + 'bouton_radio_petition_activee' => 'Eskaera aktibaturik', + 'bouton_radio_supprimer_petition' => 'Eskaera ezabatu', + // F 'form_pet_adresse_site' => 'Zure gunearen helbidea', # MODIF 'form_pet_aucune_signature' => 'Ez dago kode honi dagokion sinadurarik...', # MODIF @@ -46,5 +54,3 @@ Milesker parte hartzeagatik ', // L 'lien_reponse_article' => 'Artikuluari erantzuna' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_fa.php b/www/plugins-dist/petitions/lang/petitions_fa.php index 740195c8..a7d11926 100644 --- a/www/plugins-dist/petitions/lang/petitions_fa.php +++ b/www/plugins-dist/petitions/lang/petitions_fa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=fa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -16,6 +18,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_checkbox_indiquer_site' => 'معرفي الزامي يك وب سايت', 'bouton_checkbox_signature_unique_email' => 'فقط يك امضا براي نشاني ايميل ', 'bouton_checkbox_signature_unique_site' => 'فقط يك امضا براي يك وب سايت', + 'bouton_radio_activer_petition' => 'درخواست را فعال كنيد', + 'bouton_radio_pas_petition' => 'بدون درخواست', + 'bouton_radio_petition_activee' => 'درخواست، فعال شده', + 'bouton_radio_supprimer_petition' => 'حذف درخواست', // F 'filtre' => 'فيتلر:', @@ -102,5 +108,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // V 'voir_signatures_objet' => 'ديدن امضاها' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_fi.php b/www/plugins-dist/petitions/lang/petitions_fi.php index 94b88a6d..36d322cd 100644 --- a/www/plugins-dist/petitions/lang/petitions_fi.php +++ b/www/plugins-dist/petitions/lang/petitions_fi.php @@ -3,10 +3,15 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=fi // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_supprimer_petition' => 'Poista vetoomus', + // F 'form_pet_adresse_site' => 'Sivustosi URL-osoite', # MODIF 'form_pet_aucune_signature' => 'Mikään allekirjoitus ei sovi tähän koodiin...', # MODIF @@ -23,5 +28,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_adresse_email' => 'SÄHKÖPOSTI-OSOITE:', 'info_site_web' => 'NETTISIVU:' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_fon.php b/www/plugins-dist/petitions/lang/petitions_fon.php index f858d764..7ef90f6c 100644 --- a/www/plugins-dist/petitions/lang/petitions_fon.php +++ b/www/plugins-dist/petitions/lang/petitions_fon.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=fon // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'mi sɔ kɛn ', + 'bouton_radio_pas_petition' => 'Tajijla ɖé dé a ', + 'bouton_radio_petition_activee' => 'Tajijla ɖé ', + 'bouton_radio_supprimer_petition' => 'mi sunsùn Tajijla ', + // F 'form_pet_adresse_site' => 'gèsí gblogblojí mí tɔn tɔn', # MODIF 'form_pet_aucune_signature' => 'àlɔɖówěmámɛ ɖé jɛ há gbètɛn é lɔ á', # MODIF @@ -29,5 +37,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // L 'lien_reponse_article' => 'yígbjè nú wékpá é lɔ' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_fr.php b/www/plugins-dist/petitions/lang/petitions_fr.php index 4adbe6ba..0a5b0d05 100644 --- a/www/plugins-dist/petitions/lang/petitions_fr.php +++ b/www/plugins-dist/petitions/lang/petitions_fr.php @@ -1,7 +1,9 @@ 'indiquer obligatoirement un site web', 'bouton_checkbox_signature_unique_email' => 'une seule signature par adresse email', 'bouton_checkbox_signature_unique_site' => 'une seule signature par site web', + 'bouton_radio_activer_petition' => 'Activer la pétition', + 'bouton_radio_pas_petition' => 'Pas de pétition', + 'bouton_radio_petition_activee' => 'Pétition activée', + 'bouton_radio_supprimer_petition' => 'Supprimer la pétition', // F 'filtre' => 'Filtre :', @@ -107,5 +113,3 @@ Merci de votre participation // V 'voir_signatures_objet' => 'Voir les signatures' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_fr_biblio.php b/www/plugins-dist/petitions/lang/petitions_fr_biblio.php deleted file mode 100644 index 2c3eef6f..00000000 --- a/www/plugins-dist/petitions/lang/petitions_fr_biblio.php +++ /dev/null @@ -1,112 +0,0 @@ - 'Vous allez supprimer toutes les signatures de cette pétition. Êtes-vous sur de vouloir continuer ?', # NEW - 'aucune_signature' => 'Aucune signature', # NEW - - // B - 'bouton_checkbox_envoi_message' => 'possibilité d\'envoyer un message', # NEW - 'bouton_checkbox_indiquer_site' => 'indiquer obligatoirement un site web', # NEW - 'bouton_checkbox_signature_unique_email' => 'une seule signature par adresse email', # NEW - 'bouton_checkbox_signature_unique_site' => 'une seule signature par site web', # NEW - - // F - 'filtre' => 'Filtre :', # NEW - 'form_pet_adresse_site' => 'Adresse URL de votre site', # NEW - 'form_pet_aucune_signature' => 'Aucune signature ne correspond à ce code...', # NEW - 'form_pet_confirmation' => 'Veuillez confirmer votre signature :', # NEW - 'form_pet_deja_signe' => 'Vous avez déjà signé ce texte.', # NEW - 'form_pet_envoi_mail_confirmation' => 'Un courrier électronique de confirmation vient d\'être envoyé à @email@. Vous devrez visiter l\'adresse web mentionnée dans ce courrier pour valider votre signature.', # NEW - 'form_pet_mail_confirmation' => 'Bonjour, - -Vous avez demandé à signer la pétition : -@titre@. - -Vous avez fourni les informations suivantes : - Nom: @nom_email@ - Site: @nom_site@ - @url_site@ - @message@ - -IMPORTANT... -Pour valider votre signature, il suffit de vous connecter à -l\'adresse ci-dessous (dans le cas contraire, votre demande -sera rejetée) : - - @url@ - - -Merci de votre participation -', # NEW - 'form_pet_message_commentaire' => 'Un message, un commentaire ?', # NEW - 'form_pet_nom_site2' => 'Nom de votre site web', # enlever le gras NEW - 'form_pet_probleme_liens' => 'Veuillez reprendre votre message en supprimant les liens hypertexte.', # NEW - 'form_pet_probleme_technique' => 'Problème technique, les signatures sont temporairement suspendues.', # NEW - 'form_pet_signature_validee' => 'Votre signature est validée. Merci !', # NEW - 'form_pet_site_deja_enregistre' => 'Ce site est déjà enregistré', # NEW - 'form_pet_url_invalide' => 'L\'URL que vous avez indiquée n\'est pas valide.', # NEW - 'form_pet_votre_email' => 'Votre adresse email', # NEW - 'form_pet_votre_nom' => 'Votre nom', # NEW - 'form_pet_votre_site' => 'Si vous avez un site Web, vous pouvez l\'indiquer ci-dessous', # NEW - - // I - 'icone_relancer_signataire' => 'Relancer le signataire', # NEW - 'icone_relancer_signataires' => 'Relancer les signataires', # NEW - 'icone_suivi_petitions' => 'Suivre/gérer les pétitions', # NEW - 'icone_supprimer_signature' => 'Supprimer cette signature', # NEW - 'icone_supprimer_signatures' => 'Supprimer les signatures', # NEW - 'icone_valider_signature' => 'Valider cette signature', # NEW - 'icone_valider_signatures' => 'Valider les signatures', # NEW - 'info_adresse_email' => 'ADRESSE EMAIL :', # NEW - 'info_fonctionnement_petition' => 'Fonctionnement de la pétition :', # NEW - 'info_signature_supprimee' => 'Signature supprimée', # NEW - 'info_signature_supprimee_erreur' => 'Erreur : ce code de suppression ne correspond a aucune signature', # NEW - 'info_site_web' => 'SITE WEB :', # NEW - 'info_texte_message' => 'Texte de votre message :', # NEW - - // L - 'lien_reponse_article' => 'Réponse à l\'article', # NEW - - // N - 'nombre_signatures' => '@nb@ signatures', # NEW - - // S - 'sans_nom' => 'Anonyme', # NEW - 'signatures_article' => 'Signatures de l\'article :', # NEW - 'signatures_aucune' => 'Aucune', # NEW - 'signatures_meme_auteur' => 'Les signatures du m', # NEW - 'signatures_meme_site' => 'Les signatures avec le m', # NEW - 'signatures_poubelle' => 'Supprimées', # NEW - 'signatures_prop' => 'En attente', # NEW - 'signatures_publie' => 'Confirmées', # NEW - 'signatures_recherche_label' => 'Rechercher des signatures :', # NEW - 'signatures_toutes' => 'Toutes', # NEW - 'statut_poubelle' => 'Supprimée', # NEW - 'statut_prop' => 'En attente de validation', # NEW - 'statut_publie' => 'Confirmée', # NEW - - // T - 'texte_descriptif_petition' => 'Descriptif de la pétition', # NEW - 'titre_page_controle_petition' => 'Suivi des pétitions', # NEW - 'titre_petition' => 'Pétition', # NEW - 'titre_petitions' => 'Pétitions', # NEW - 'titre_selection_action' => 'Sélection', # NEW - 'titre_signatures_attente' => 'Signatures en attente de validation', # NEW - 'titre_signatures_publie' => 'Signatures confirmées', # NEW - 'titre_suivi_petition' => 'Suivi des pétitions', # NEW - 'tout_voir' => 'Voir toutes les signatures', # NEW - - // U - 'une_signature' => '1 signature', # NEW - - // V - 'voir_signatures_objet' => 'Voir les signatures' # NEW -); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_fr_fem.php b/www/plugins-dist/petitions/lang/petitions_fr_fem.php index ab32d29a..f09efdda 100644 --- a/www/plugins-dist/petitions/lang/petitions_fr_fem.php +++ b/www/plugins-dist/petitions/lang/petitions_fr_fem.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=fr_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -16,6 +18,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_checkbox_indiquer_site' => 'indiquer obligatoirement un site web', 'bouton_checkbox_signature_unique_email' => 'une seule signature par adresse email', 'bouton_checkbox_signature_unique_site' => 'une seule signature par site web', + 'bouton_radio_activer_petition' => 'Activer la pétition', + 'bouton_radio_pas_petition' => 'Pas de pétition', + 'bouton_radio_petition_activee' => 'Pétition activée', + 'bouton_radio_supprimer_petition' => 'Supprimer la pétition', // F 'filtre' => 'Filtre :', @@ -109,5 +115,3 @@ Merci de votre participation // V 'voir_signatures_objet' => 'Voir les signatures' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_fr_tu.php b/www/plugins-dist/petitions/lang/petitions_fr_tu.php index 8051bd42..704df0fb 100644 --- a/www/plugins-dist/petitions/lang/petitions_fr_tu.php +++ b/www/plugins-dist/petitions/lang/petitions_fr_tu.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=fr_tu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -16,6 +18,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_checkbox_indiquer_site' => 'indiquer obligatoirement un site web', 'bouton_checkbox_signature_unique_email' => 'une seule signature par adresse email', 'bouton_checkbox_signature_unique_site' => 'une seule signature par site web', + 'bouton_radio_activer_petition' => 'Activer la pétition', + 'bouton_radio_pas_petition' => 'Pas de pétition', + 'bouton_radio_petition_activee' => 'Pétition activée', + 'bouton_radio_supprimer_petition' => 'Supprimer la pétition', // F 'filtre' => 'Filtre :', @@ -105,5 +111,3 @@ Merci de ta participation // V 'voir_signatures_objet' => 'Voir les signatures' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_gl.php b/www/plugins-dist/petitions/lang/petitions_gl.php index aff53887..524f9211 100644 --- a/www/plugins-dist/petitions/lang/petitions_gl.php +++ b/www/plugins-dist/petitions/lang/petitions_gl.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=gl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Activar a petición', + 'bouton_radio_pas_petition' => 'Sen petición', + 'bouton_radio_petition_activee' => 'Petición activada', + 'bouton_radio_supprimer_petition' => 'Eliminar a petición', + // F 'form_pet_adresse_site' => 'Enderezo do seu web', # MODIF 'form_pet_aucune_signature' => 'Non hai nengunha sinatura que corresponda a este código...', # MODIF @@ -52,5 +60,3 @@ Grazas pola súa participación // L 'lien_reponse_article' => 'Responder ao artigo' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_hac.php b/www/plugins-dist/petitions/lang/petitions_hac.php index 3b7af2af..9104209a 100644 --- a/www/plugins-dist/petitions/lang/petitions_hac.php +++ b/www/plugins-dist/petitions/lang/petitions_hac.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=hac // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'چالاککەردەی قەواڵەی', + 'bouton_radio_pas_petition' => 'هیچ قەۋاڵیـۋ نییا', + 'bouton_radio_petition_activee' => 'قەۋاڵە چالاك کریان', + 'bouton_radio_supprimer_petition' => 'قەۋاڵەکەی بسەڕۆ', + // F 'form_pet_adresse_site' => 'آدرس سايت تان', # MODIF 'form_pet_aucune_signature' => '...هيچ امضائى با اين كد مطابقت نميكند ', # MODIF @@ -42,5 +50,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_signature_supprimee' => 'امضا حذف شده', 'info_signature_supprimee_erreur' => 'اشتباه: این کد حذفی به هیچ امضائی مربوط نیست' # MODIF ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_he.php b/www/plugins-dist/petitions/lang/petitions_he.php index 351ef00f..93e0e958 100644 --- a/www/plugins-dist/petitions/lang/petitions_he.php +++ b/www/plugins-dist/petitions/lang/petitions_he.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=he // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'להפעיל את העצומה', + 'bouton_radio_pas_petition' => 'אין עצומה', + 'bouton_radio_petition_activee' => 'עצומה מופעלת', + 'bouton_radio_supprimer_petition' => 'מחק את העצומה', + // F 'form_pet_adresse_site' => 'הכתובת הכללית של האתר שלך', # MODIF 'form_pet_aucune_signature' => 'שום חתימה לא מתאימה לקוד...', # MODIF @@ -46,5 +54,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'info_signature_supprimee_erreur' => 'טעות : קוד המחיקה לא מתאים לאף חתימה', # MODIF 'info_site_web' => 'אתר אינטרנט :' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_hr.php b/www/plugins-dist/petitions/lang/petitions_hr.php index 667cf050..8c2666b8 100644 --- a/www/plugins-dist/petitions/lang/petitions_hr.php +++ b/www/plugins-dist/petitions/lang/petitions_hr.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=hr // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -44,5 +46,3 @@ Hvala na suradnji 'info_signature_supprimee' => 'Potpis obrisan', 'info_signature_supprimee_erreur' => 'GreÅ¡ka: Ovaj kod za brisanje ne odgovara nijednom potpisu' # MODIF ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_hu.php b/www/plugins-dist/petitions/lang/petitions_hu.php index 46dc3c0f..8f4ab08f 100644 --- a/www/plugins-dist/petitions/lang/petitions_hu.php +++ b/www/plugins-dist/petitions/lang/petitions_hu.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=hu // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Az aláírásgyűjtés aktiválása', + 'bouton_radio_pas_petition' => 'Nincs aláírásgyűjtés', + 'bouton_radio_petition_activee' => 'Aláírásgyűjtés aktiválása', + 'bouton_radio_supprimer_petition' => 'Törölni az aláírásgyűjtést', + // F 'form_pet_adresse_site' => 'Honlapjának címe', # MODIF 'form_pet_aucune_signature' => 'Egyetlen aláírás sem felel meg ennek a kódnak...', # MODIF @@ -51,5 +59,3 @@ Köszönjük részvételét! // L 'lien_reponse_article' => 'Hozzászólás a cikkről' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_id.php b/www/plugins-dist/petitions/lang/petitions_id.php index 6441c1c6..adb38e3a 100644 --- a/www/plugins-dist/petitions/lang/petitions_id.php +++ b/www/plugins-dist/petitions/lang/petitions_id.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=id // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Aktifkan petisi', + 'bouton_radio_pas_petition' => 'Tidak ada petisi', + 'bouton_radio_petition_activee' => 'Petisi diaktifkan', + 'bouton_radio_supprimer_petition' => 'Hapus petisi', + // F 'form_pet_adresse_site' => 'URL situs anda', # MODIF 'form_pet_aucune_signature' => 'Tidak ada tanda tangan yang cocok dengan kode ini...', # MODIF @@ -47,5 +55,3 @@ Terima kasih atas partisipasi anda! // L 'lien_reponse_article' => 'Balasan pada artikel' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_is.php b/www/plugins-dist/petitions/lang/petitions_is.php index 69169b36..3b0c729f 100644 --- a/www/plugins-dist/petitions/lang/petitions_is.php +++ b/www/plugins-dist/petitions/lang/petitions_is.php @@ -3,12 +3,12 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=is // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // F 'form_pet_confirmation' => 'Staðfestu undirskriftina:' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_it.php b/www/plugins-dist/petitions/lang/petitions_it.php index b1f990e1..55d3e0dc 100644 --- a/www/plugins-dist/petitions/lang/petitions_it.php +++ b/www/plugins-dist/petitions/lang/petitions_it.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=it // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -16,6 +18,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_checkbox_indiquer_site' => 'devi inserire il nome di un sito web', 'bouton_checkbox_signature_unique_email' => 'solo un’adesione per email', 'bouton_checkbox_signature_unique_site' => 'solo una adesione per sito web', + 'bouton_radio_activer_petition' => 'Attiva la petizione', + 'bouton_radio_pas_petition' => 'Nessuna petizione', + 'bouton_radio_petition_activee' => 'Petizione attivata', + 'bouton_radio_supprimer_petition' => 'Elimina la petizione', // F 'filtre' => 'Filtro:', @@ -107,5 +113,3 @@ Grazie per la partecipazione', // V 'voir_signatures_objet' => 'Mostra le adesioni' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_it_fem.php b/www/plugins-dist/petitions/lang/petitions_it_fem.php index c7118766..8b479f90 100644 --- a/www/plugins-dist/petitions/lang/petitions_it_fem.php +++ b/www/plugins-dist/petitions/lang/petitions_it_fem.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=it_fem // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Attiva la petizione', + 'bouton_radio_pas_petition' => 'Nessuna petizione', + 'bouton_radio_petition_activee' => 'Petizione attivata', + 'bouton_radio_supprimer_petition' => 'Elimina la petizione', + // F 'form_pet_adresse_site' => 'Indirizzo del sito', # MODIF 'form_pet_aucune_signature' => 'Nessuna adesione corrisponde a questo codice...', # MODIF @@ -51,5 +59,3 @@ Grazie per la partecipazione', // L 'lien_reponse_article' => 'Risposta all’articolo' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_ja.php b/www/plugins-dist/petitions/lang/petitions_ja.php index 94b65336..7c8c2223 100644 --- a/www/plugins-dist/petitions/lang/petitions_ja.php +++ b/www/plugins-dist/petitions/lang/petitions_ja.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=ja // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => '署名機能を使う', + 'bouton_radio_pas_petition' => '署名機能なし', + 'bouton_radio_petition_activee' => '署名機能を使用中', + 'bouton_radio_supprimer_petition' => '署名機能を無効にする', + // F 'form_pet_adresse_site' => 'あなたのサイトのURL', # MODIF 'form_pet_aucune_signature' => '署名がこのコードと一致しません...', # MODIF @@ -45,5 +53,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // L 'lien_reponse_article' => '記事へ返信' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_km.php b/www/plugins-dist/petitions/lang/petitions_km.php index 8c7ed381..f61a461f 100644 --- a/www/plugins-dist/petitions/lang/petitions_km.php +++ b/www/plugins-dist/petitions/lang/petitions_km.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=km // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'សកម្ម បណ្តឹងជំទាស់', + 'bouton_radio_pas_petition' => 'គ្មាន បណ្តឹងជំទាស់', + 'bouton_radio_petition_activee' => 'បានសកម្ម បណ្តឹងជំទាស់', + 'bouton_radio_supprimer_petition' => 'លុបចេញ បណ្តឹងជំទាស់', + // F 'form_pet_adresse_site' => 'អាសយដ្ឋានវ៉ែបសៃថ៍ របស់​អ្នក', # MODIF 'form_pet_aucune_signature' => 'គ្មាន​ហត្ថលេខា​ ត្រូវ​នឹងអក្សរ​កូដ​នេះ​...', # MODIF @@ -50,5 +58,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // L 'lien_reponse_article' => 'ចំលើយ ទៅ​អត្ថបទ' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_kr.php b/www/plugins-dist/petitions/lang/petitions_kr.php deleted file mode 100644 index 2c3eef6f..00000000 --- a/www/plugins-dist/petitions/lang/petitions_kr.php +++ /dev/null @@ -1,112 +0,0 @@ - 'Vous allez supprimer toutes les signatures de cette pétition. Êtes-vous sur de vouloir continuer ?', # NEW - 'aucune_signature' => 'Aucune signature', # NEW - - // B - 'bouton_checkbox_envoi_message' => 'possibilité d\'envoyer un message', # NEW - 'bouton_checkbox_indiquer_site' => 'indiquer obligatoirement un site web', # NEW - 'bouton_checkbox_signature_unique_email' => 'une seule signature par adresse email', # NEW - 'bouton_checkbox_signature_unique_site' => 'une seule signature par site web', # NEW - - // F - 'filtre' => 'Filtre :', # NEW - 'form_pet_adresse_site' => 'Adresse URL de votre site', # NEW - 'form_pet_aucune_signature' => 'Aucune signature ne correspond à ce code...', # NEW - 'form_pet_confirmation' => 'Veuillez confirmer votre signature :', # NEW - 'form_pet_deja_signe' => 'Vous avez déjà signé ce texte.', # NEW - 'form_pet_envoi_mail_confirmation' => 'Un courrier électronique de confirmation vient d\'être envoyé à @email@. Vous devrez visiter l\'adresse web mentionnée dans ce courrier pour valider votre signature.', # NEW - 'form_pet_mail_confirmation' => 'Bonjour, - -Vous avez demandé à signer la pétition : -@titre@. - -Vous avez fourni les informations suivantes : - Nom: @nom_email@ - Site: @nom_site@ - @url_site@ - @message@ - -IMPORTANT... -Pour valider votre signature, il suffit de vous connecter à -l\'adresse ci-dessous (dans le cas contraire, votre demande -sera rejetée) : - - @url@ - - -Merci de votre participation -', # NEW - 'form_pet_message_commentaire' => 'Un message, un commentaire ?', # NEW - 'form_pet_nom_site2' => 'Nom de votre site web', # enlever le gras NEW - 'form_pet_probleme_liens' => 'Veuillez reprendre votre message en supprimant les liens hypertexte.', # NEW - 'form_pet_probleme_technique' => 'Problème technique, les signatures sont temporairement suspendues.', # NEW - 'form_pet_signature_validee' => 'Votre signature est validée. Merci !', # NEW - 'form_pet_site_deja_enregistre' => 'Ce site est déjà enregistré', # NEW - 'form_pet_url_invalide' => 'L\'URL que vous avez indiquée n\'est pas valide.', # NEW - 'form_pet_votre_email' => 'Votre adresse email', # NEW - 'form_pet_votre_nom' => 'Votre nom', # NEW - 'form_pet_votre_site' => 'Si vous avez un site Web, vous pouvez l\'indiquer ci-dessous', # NEW - - // I - 'icone_relancer_signataire' => 'Relancer le signataire', # NEW - 'icone_relancer_signataires' => 'Relancer les signataires', # NEW - 'icone_suivi_petitions' => 'Suivre/gérer les pétitions', # NEW - 'icone_supprimer_signature' => 'Supprimer cette signature', # NEW - 'icone_supprimer_signatures' => 'Supprimer les signatures', # NEW - 'icone_valider_signature' => 'Valider cette signature', # NEW - 'icone_valider_signatures' => 'Valider les signatures', # NEW - 'info_adresse_email' => 'ADRESSE EMAIL :', # NEW - 'info_fonctionnement_petition' => 'Fonctionnement de la pétition :', # NEW - 'info_signature_supprimee' => 'Signature supprimée', # NEW - 'info_signature_supprimee_erreur' => 'Erreur : ce code de suppression ne correspond a aucune signature', # NEW - 'info_site_web' => 'SITE WEB :', # NEW - 'info_texte_message' => 'Texte de votre message :', # NEW - - // L - 'lien_reponse_article' => 'Réponse à l\'article', # NEW - - // N - 'nombre_signatures' => '@nb@ signatures', # NEW - - // S - 'sans_nom' => 'Anonyme', # NEW - 'signatures_article' => 'Signatures de l\'article :', # NEW - 'signatures_aucune' => 'Aucune', # NEW - 'signatures_meme_auteur' => 'Les signatures du m', # NEW - 'signatures_meme_site' => 'Les signatures avec le m', # NEW - 'signatures_poubelle' => 'Supprimées', # NEW - 'signatures_prop' => 'En attente', # NEW - 'signatures_publie' => 'Confirmées', # NEW - 'signatures_recherche_label' => 'Rechercher des signatures :', # NEW - 'signatures_toutes' => 'Toutes', # NEW - 'statut_poubelle' => 'Supprimée', # NEW - 'statut_prop' => 'En attente de validation', # NEW - 'statut_publie' => 'Confirmée', # NEW - - // T - 'texte_descriptif_petition' => 'Descriptif de la pétition', # NEW - 'titre_page_controle_petition' => 'Suivi des pétitions', # NEW - 'titre_petition' => 'Pétition', # NEW - 'titre_petitions' => 'Pétitions', # NEW - 'titre_selection_action' => 'Sélection', # NEW - 'titre_signatures_attente' => 'Signatures en attente de validation', # NEW - 'titre_signatures_publie' => 'Signatures confirmées', # NEW - 'titre_suivi_petition' => 'Suivi des pétitions', # NEW - 'tout_voir' => 'Voir toutes les signatures', # NEW - - // U - 'une_signature' => '1 signature', # NEW - - // V - 'voir_signatures_objet' => 'Voir les signatures' # NEW -); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_lb.php b/www/plugins-dist/petitions/lang/petitions_lb.php index 8ce3dec2..7114a04c 100644 --- a/www/plugins-dist/petitions/lang/petitions_lb.php +++ b/www/plugins-dist/petitions/lang/petitions_lb.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=lb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'D’Petitioun aschalten', + 'bouton_radio_pas_petition' => 'Keng Petitioun', + 'bouton_radio_petition_activee' => 'Petitioun ageschalt', + 'bouton_radio_supprimer_petition' => 'D’Petitioun läschen', + // F 'form_pet_adresse_site' => 'Adress vun ärem Site', # MODIF 'form_pet_aucune_signature' => 'Ët entsprëcht keng Ënnerschrëft dësem Kode...', # MODIF @@ -51,5 +59,3 @@ Merci fir är Participatioun // L 'lien_reponse_article' => 'Äntwert op den Artikel' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_ling.php b/www/plugins-dist/petitions/lang/petitions_ling.php deleted file mode 100644 index 2c3eef6f..00000000 --- a/www/plugins-dist/petitions/lang/petitions_ling.php +++ /dev/null @@ -1,112 +0,0 @@ - 'Vous allez supprimer toutes les signatures de cette pétition. Êtes-vous sur de vouloir continuer ?', # NEW - 'aucune_signature' => 'Aucune signature', # NEW - - // B - 'bouton_checkbox_envoi_message' => 'possibilité d\'envoyer un message', # NEW - 'bouton_checkbox_indiquer_site' => 'indiquer obligatoirement un site web', # NEW - 'bouton_checkbox_signature_unique_email' => 'une seule signature par adresse email', # NEW - 'bouton_checkbox_signature_unique_site' => 'une seule signature par site web', # NEW - - // F - 'filtre' => 'Filtre :', # NEW - 'form_pet_adresse_site' => 'Adresse URL de votre site', # NEW - 'form_pet_aucune_signature' => 'Aucune signature ne correspond à ce code...', # NEW - 'form_pet_confirmation' => 'Veuillez confirmer votre signature :', # NEW - 'form_pet_deja_signe' => 'Vous avez déjà signé ce texte.', # NEW - 'form_pet_envoi_mail_confirmation' => 'Un courrier électronique de confirmation vient d\'être envoyé à @email@. Vous devrez visiter l\'adresse web mentionnée dans ce courrier pour valider votre signature.', # NEW - 'form_pet_mail_confirmation' => 'Bonjour, - -Vous avez demandé à signer la pétition : -@titre@. - -Vous avez fourni les informations suivantes : - Nom: @nom_email@ - Site: @nom_site@ - @url_site@ - @message@ - -IMPORTANT... -Pour valider votre signature, il suffit de vous connecter à -l\'adresse ci-dessous (dans le cas contraire, votre demande -sera rejetée) : - - @url@ - - -Merci de votre participation -', # NEW - 'form_pet_message_commentaire' => 'Un message, un commentaire ?', # NEW - 'form_pet_nom_site2' => 'Nom de votre site web', # enlever le gras NEW - 'form_pet_probleme_liens' => 'Veuillez reprendre votre message en supprimant les liens hypertexte.', # NEW - 'form_pet_probleme_technique' => 'Problème technique, les signatures sont temporairement suspendues.', # NEW - 'form_pet_signature_validee' => 'Votre signature est validée. Merci !', # NEW - 'form_pet_site_deja_enregistre' => 'Ce site est déjà enregistré', # NEW - 'form_pet_url_invalide' => 'L\'URL que vous avez indiquée n\'est pas valide.', # NEW - 'form_pet_votre_email' => 'Votre adresse email', # NEW - 'form_pet_votre_nom' => 'Votre nom', # NEW - 'form_pet_votre_site' => 'Si vous avez un site Web, vous pouvez l\'indiquer ci-dessous', # NEW - - // I - 'icone_relancer_signataire' => 'Relancer le signataire', # NEW - 'icone_relancer_signataires' => 'Relancer les signataires', # NEW - 'icone_suivi_petitions' => 'Suivre/gérer les pétitions', # NEW - 'icone_supprimer_signature' => 'Supprimer cette signature', # NEW - 'icone_supprimer_signatures' => 'Supprimer les signatures', # NEW - 'icone_valider_signature' => 'Valider cette signature', # NEW - 'icone_valider_signatures' => 'Valider les signatures', # NEW - 'info_adresse_email' => 'ADRESSE EMAIL :', # NEW - 'info_fonctionnement_petition' => 'Fonctionnement de la pétition :', # NEW - 'info_signature_supprimee' => 'Signature supprimée', # NEW - 'info_signature_supprimee_erreur' => 'Erreur : ce code de suppression ne correspond a aucune signature', # NEW - 'info_site_web' => 'SITE WEB :', # NEW - 'info_texte_message' => 'Texte de votre message :', # NEW - - // L - 'lien_reponse_article' => 'Réponse à l\'article', # NEW - - // N - 'nombre_signatures' => '@nb@ signatures', # NEW - - // S - 'sans_nom' => 'Anonyme', # NEW - 'signatures_article' => 'Signatures de l\'article :', # NEW - 'signatures_aucune' => 'Aucune', # NEW - 'signatures_meme_auteur' => 'Les signatures du m', # NEW - 'signatures_meme_site' => 'Les signatures avec le m', # NEW - 'signatures_poubelle' => 'Supprimées', # NEW - 'signatures_prop' => 'En attente', # NEW - 'signatures_publie' => 'Confirmées', # NEW - 'signatures_recherche_label' => 'Rechercher des signatures :', # NEW - 'signatures_toutes' => 'Toutes', # NEW - 'statut_poubelle' => 'Supprimée', # NEW - 'statut_prop' => 'En attente de validation', # NEW - 'statut_publie' => 'Confirmée', # NEW - - // T - 'texte_descriptif_petition' => 'Descriptif de la pétition', # NEW - 'titre_page_controle_petition' => 'Suivi des pétitions', # NEW - 'titre_petition' => 'Pétition', # NEW - 'titre_petitions' => 'Pétitions', # NEW - 'titre_selection_action' => 'Sélection', # NEW - 'titre_signatures_attente' => 'Signatures en attente de validation', # NEW - 'titre_signatures_publie' => 'Signatures confirmées', # NEW - 'titre_suivi_petition' => 'Suivi des pétitions', # NEW - 'tout_voir' => 'Voir toutes les signatures', # NEW - - // U - 'une_signature' => '1 signature', # NEW - - // V - 'voir_signatures_objet' => 'Voir les signatures' # NEW -); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_lt.php b/www/plugins-dist/petitions/lang/petitions_lt.php index f4c4dd8a..907c8233 100644 --- a/www/plugins-dist/petitions/lang/petitions_lt.php +++ b/www/plugins-dist/petitions/lang/petitions_lt.php @@ -3,10 +3,16 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=lt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Aktyvuoti praÅ¡ymą', + 'bouton_radio_supprimer_petition' => 'IÅ¡trinti praÅ¡ymą', + // F 'form_pet_adresse_site' => 'JÅ«sų interneto svetainės adresas', # MODIF 'form_pet_deja_signe' => 'JÅ«s jau pasirašėte šį tekstą', @@ -17,7 +23,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'form_pet_votre_nom' => 'JÅ«sų vardas arba pseudonimas', # MODIF // I - 'info_adresse_email' => 'el. paÅ¡tas:' + 'info_adresse_email' => 'el. paÅ¡tas:', + 'info_texte_message' => 'JÅ«sų žinutės tekstas:' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_my.php b/www/plugins-dist/petitions/lang/petitions_my.php index 2d4772d9..c5eeb35b 100644 --- a/www/plugins-dist/petitions/lang/petitions_my.php +++ b/www/plugins-dist/petitions/lang/petitions_my.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=my // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'တောင်းဆိုမှုကို အသက်ဝင်စေသည်', + 'bouton_radio_pas_petition' => 'လျှောက်လဲချက်မလို', + 'bouton_radio_petition_activee' => 'လျှောက်လဲချက် ​အတည်ပြုခဲ့ပြီးဖြစ်သည်', + 'bouton_radio_supprimer_petition' => 'လျှောက်လဲချက် ပယ်ဖျက်ရန်', + // F 'form_pet_adresse_site' => 'သင့်ဝက်ဘ်ဆိုက်လိပ်စာ', # MODIF 'form_pet_aucune_signature' => 'သင့်လက်မှတ်ကိုက်ညီမှုမရှိပါ', # MODIF @@ -32,5 +40,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // L 'lien_reponse_article' => 'ဆောင်းပါးသို့ ပြန်တုန့်ပြန်ပါ' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_nap.php b/www/plugins-dist/petitions/lang/petitions_nap.php index 0d579cce..965c4cc0 100644 --- a/www/plugins-dist/petitions/lang/petitions_nap.php +++ b/www/plugins-dist/petitions/lang/petitions_nap.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=nap // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -44,5 +46,3 @@ Grazzje assaje pe pparticipà', 'info_signature_supprimee' => 'Firma scartata', 'info_signature_supprimee_erreur' => 'Arrore: chistu codice ’e eliminazzione nun currisponne a nisciuna firma' # MODIF ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_nb.php b/www/plugins-dist/petitions/lang/petitions_nb.php index f6d1dfcd..269180af 100644 --- a/www/plugins-dist/petitions/lang/petitions_nb.php +++ b/www/plugins-dist/petitions/lang/petitions_nb.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=nb // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Aktiverer anmodningen', + 'bouton_radio_pas_petition' => 'Ingen anmodninger', + 'bouton_radio_petition_activee' => 'Anmodning aktivert', + 'bouton_radio_supprimer_petition' => 'Slett anmodning', + // F 'form_pet_adresse_site' => 'Nettstedets URI', # MODIF 'form_pet_aucune_signature' => 'Ingen signatur finnes for denne koden...', # MODIF @@ -48,5 +56,3 @@ Tusen takk! // L 'lien_reponse_article' => 'Svar pÃ¥ artikkelen' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_ne.php b/www/plugins-dist/petitions/lang/petitions_ne.php index 584a5b78..7c4d9b18 100644 --- a/www/plugins-dist/petitions/lang/petitions_ne.php +++ b/www/plugins-dist/petitions/lang/petitions_ne.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=ne // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -46,5 +48,3 @@ will be rejected): 'info_signature_supprimee' => 'दरखस्त मेटियो', 'info_signature_supprimee_erreur' => 'त्रुटि: कुनै पनि दरखस्तसँग मेटाउन खोज्नुभएको कोड मेल खाएन' # MODIF ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_nl.php b/www/plugins-dist/petitions/lang/petitions_nl.php index 00305917..7417a725 100644 --- a/www/plugins-dist/petitions/lang/petitions_nl.php +++ b/www/plugins-dist/petitions/lang/petitions_nl.php @@ -3,27 +3,33 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=nl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // A - 'alerte_confirmer_suppression_signatures' => 'Je zal alle hadtekening van deze petutie uitwissen. Wil je echt verder gaan ?', - 'aucune_signature' => 'Geen handtekening', + 'alerte_confirmer_suppression_signatures' => 'Je gaat alle ondertekening van deze petitie uitwissen. Wil je echt verder gaan?', + 'aucune_signature' => 'Geen ondertekening', // B - 'bouton_checkbox_envoi_message' => 'mogelijkheid om een boodschap te laten', + 'bouton_checkbox_envoi_message' => 'mogelijkheid om een bericht te zenden', 'bouton_checkbox_indiquer_site' => 'verplicht een website aan te geven', - 'bouton_checkbox_signature_unique_email' => 'enkel een handtekening per email address', - 'bouton_checkbox_signature_unique_site' => 'een enkel handtekening per website', + 'bouton_checkbox_signature_unique_email' => 'slechts één ondertekening per email adres', + 'bouton_checkbox_signature_unique_site' => 'één enkele ondertekening per website', + 'bouton_radio_activer_petition' => 'Petitie activeren', + 'bouton_radio_pas_petition' => 'Geen petitie', + 'bouton_radio_petition_activee' => 'Petitie geactiveerd', + 'bouton_radio_supprimer_petition' => 'De petitie verwijderen', // F - 'filtre' => 'Filter :', + 'filtre' => 'Filter:', 'form_pet_adresse_site' => 'Adres van je website', 'form_pet_aucune_signature' => 'Geen enkele naam komt overeen met deze code ...', - 'form_pet_confirmation' => 'Gelieve je handtekening te bevestigen :', + 'form_pet_confirmation' => 'Gelieve je ondertekening te bevestigen:', 'form_pet_deja_signe' => 'Je hebt deze tekst al ondertekend.', - 'form_pet_envoi_mail_confirmation' => 'Een elektronische bevestigingspost is zojuist naar @email@ verzonden. U zult het Web adres moeten bezoeken dat in deze post wordt vermeld om uw handtekening te valideren.', + 'form_pet_envoi_mail_confirmation' => 'Een elektronisch bevestigingsbericht is zojuist naar @email@ verzonden. Je zult het webadres moeten bezoeken dat in dit bericht wordt vermeld om je ondertekening te valideren.', 'form_pet_mail_confirmation' => 'Hallo, Je hebt gevraagd om deze petitie te ondertekenen : @@ -36,76 +42,75 @@ Je hebt ons de volgende informatie bezorgd : BELANGRIJK... Om je gegevens te valideren, volstaat het het onderstaande adres - aan te klikken (in het andere geval, zal je aanvraag verworpen worden) : + aan te klikken (anders zal je aanvraag vervallen): @url@ Bedankt voor je deelname ', - 'form_pet_message_commentaire' => 'Een boodscap, een commentaar ?', + 'form_pet_message_commentaire' => 'Een boodschap, een commentaar ?', 'form_pet_nom_site2' => 'Naam van je website', - 'form_pet_probleme_liens' => 'Gelieve uw bericht te herbeginnen zonder internet links.', + 'form_pet_probleme_liens' => 'Voer je bericht opnieuw in, maar zonder internet links.', 'form_pet_probleme_technique' => 'Technisch probleem. Inloggen is momenteel niet mogelijk.', 'form_pet_signature_validee' => 'Je naam is goedgekeurd. Bedankt!', - 'form_pet_site_deja_enregistre' => 'Deze website is reeds geregistreerd', + 'form_pet_site_deja_enregistre' => 'Deze website is al geregistreerd', 'form_pet_url_invalide' => 'De URL die je opgaf, is ongeldig.', 'form_pet_votre_email' => 'Je e-mailadres', 'form_pet_votre_nom' => 'Je naam of alias', 'form_pet_votre_site' => 'Als je een website hebt, kan je ze hier vermelden', // I - 'icone_relancer_signataire' => 'Handtekenersbevestiging ervragen', - 'icone_relancer_signataires' => 'Handtekenersbevestigingen ervragen', - 'icone_suivi_petitions' => 'Petities volgen/beheren', - 'icone_supprimer_signature' => 'Handtekening uitwissen', - 'icone_supprimer_signatures' => 'Handtekeningen uitwissen', - 'icone_valider_signature' => 'Handtekening bevstigen', - 'icone_valider_signatures' => 'Handtekeningen bvestigen', + 'icone_relancer_signataire' => 'Bevestiging van ondertekening opnieuw verzenden', + 'icone_relancer_signataires' => 'Bevestigingen van ondertekening opnieuw versturen', + 'icone_suivi_petitions' => 'Petities opvolgen/beheren', + 'icone_supprimer_signature' => 'Ondertekening verwijderen', + 'icone_supprimer_signatures' => 'Ondertekeningen verwijderen', + 'icone_valider_signature' => 'Deze ondertekening bevestigen', + 'icone_valider_signatures' => 'Ondertekeningen bevestigen', 'info_adresse_email' => 'E-MAIL ADRES:', 'info_fonctionnement_petition' => 'Werkwijze van de petitie', - 'info_signature_supprimee' => 'Handtekening verwijderd', - 'info_signature_supprimee_erreur' => 'Fout : de verwijderde code komt met geen enkele handtekening overeen.', - 'info_site_web' => 'WEBSITE :', + 'info_signature_supprimee' => 'Ondertekening verwijderd', + 'info_signature_supprimee_erreur' => 'Fout: de verwijderingscode komt met geen enkele ondertekening overeen.', + 'info_site_web' => 'WEBSITE:', 'info_texte_message' => 'Tekst van je boodschap', // L 'lien_reponse_article' => 'Beantwoord dit artikel', // N - 'nombre_signatures' => '@nb@ handtekeningen', + 'nombre_signatures' => '@nb@ ondertekeningen', // S 'sans_nom' => 'Anoniem', - 'signatures_article' => 'Handtekeningen van het artikel', + 'signatures_article' => 'Ondertekeningen van het artikel:', 'signatures_aucune' => 'Geen', - 'signatures_meme_auteur' => 'Handtekeninge van dezelfde auteur', - 'signatures_meme_site' => 'Handtekeningen met dezelfde website', - 'signatures_poubelle' => 'uitgewiste', + 'signatures_meme_auteur' => 'Ondertekeningen door dezelfde auteur', + 'signatures_meme_site' => 'Ondertekeningen met dezelfde website', + 'signatures_poubelle' => 'verwijderde', 'signatures_prop' => 'In afwachting', 'signatures_publie' => 'Bevestigde', - 'signatures_recherche_label' => 'Handtekeningen opzoeken:', + 'signatures_recherche_label' => 'Ondertekeningen opzoeken:', + 'signatures_selection' => 'Ondertekeningen kiezen:', 'signatures_toutes' => 'Alles', 'statut_poubelle' => 'Uitgewist', 'statut_prop' => 'In afwachting van bevestiging', 'statut_publie' => 'Bevestigd', // T - 'texte_descriptif_petition' => 'Beschrijving van de petitie', - 'titre_page_controle_petition' => 'Gevolg van de petities', + 'texte_descriptif_petition' => 'Omschrijving van de petitie', + 'titre_page_controle_petition' => 'Opvolgen van petities', 'titre_petition' => 'Petitie', 'titre_petitions' => 'Petities', 'titre_selection_action' => 'Selectie', - 'titre_signatures_attente' => 'Handtekeningen in fwachting van bevestigingen', - 'titre_signatures_publie' => 'Bevestigde handtekeningen', - 'titre_suivi_petition' => 'Vervolg van de petities', - 'tout_voir' => 'Alle handtekeningen zien', + 'titre_signatures_attente' => 'Ondertekeningen in afwachting van bevestigingen', + 'titre_signatures_publie' => 'Bevestigde ondertekeningen', + 'titre_suivi_petition' => 'Opvolging van petities', + 'tout_voir' => 'Alle ondertekeningen bekijken', // U - 'une_signature' => '1 handtekening', + 'une_signature' => '1 ondertekening', // V - 'voir_signatures_objet' => 'De handtekeningen zien' + 'voir_signatures_objet' => 'De ondertekeningen bekijken' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_no.php b/www/plugins-dist/petitions/lang/petitions_no.php deleted file mode 100644 index 40b1b876..00000000 --- a/www/plugins-dist/petitions/lang/petitions_no.php +++ /dev/null @@ -1,112 +0,0 @@ - 'Vous allez supprimer toutes les signatures de cette pétition. Êtes-vous sur de vouloir continuer ?', # NEW - 'aucune_signature' => 'Aucune signature', # NEW - - // B - 'bouton_checkbox_envoi_message' => 'possibilité d\'envoyer un message', # NEW - 'bouton_checkbox_indiquer_site' => 'indiquer obligatoirement un site web', # NEW - 'bouton_checkbox_signature_unique_email' => 'une seule signature par adresse email', # NEW - 'bouton_checkbox_signature_unique_site' => 'une seule signature par site web', # NEW - - // F - 'filtre' => 'Filtre :', # NEW - 'form_pet_adresse_site' => ' Adresse de votre site', # MODIF - 'form_pet_aucune_signature' => ' Aucune signature ne correspond à ce code...', - 'form_pet_confirmation' => ' Veuillez confirmer votre signature :', - 'form_pet_deja_signe' => ' Vous avez déjà signé ce texte.', - 'form_pet_envoi_mail_confirmation' => ' Un courrier électronique de confirmation vient de vous être envoyé. Vous devrez visiter l\'adresse Web mentionnée dans ce courrier pour valider votre signature.', # MODIF - 'form_pet_mail_confirmation' => ' Bonjour, - -Vous avez demandé à signer la pétition : -@titre@. - -Vous avez fourni les informations suivantes : - Nom: @nom_email@ - Site: @nom_site@ - @url_site@ - - -IMPORTANT... -Pour valider votre signature, il suffit de vous connecter à -l\'adresse ci-dessous (dans le cas contraire, votre demande -sera rejetée) : - - @url@ - - -Merci de votre participation -', - 'form_pet_message_commentaire' => ' Un message, un commentaire ?', # MODIF - 'form_pet_nom_site2' => ' Nom de votre site Web', # MODIF - 'form_pet_probleme_liens' => 'Veuillez reprendre votre message en supprimant les liens hypertexte.', # NEW - 'form_pet_probleme_technique' => ' Problème technique, les signatures sont temporairement suspendues.', - 'form_pet_signature_validee' => ' Votre signature est validée. Elle apparaîtra lors de la prochaine mise à jour du site. Merci !', - 'form_pet_site_deja_enregistre' => ' Ce site est déjà enregistré', - 'form_pet_url_invalide' => ' L\'URL que vous avez indiquée n\'est pas valide.', - 'form_pet_votre_email' => ' Votre adresse email', - 'form_pet_votre_nom' => ' Votre nom ou pseudo', # MODIF - 'form_pet_votre_site' => ' Si vous avez un site Web, vous pouvez l\'indiquer ci-dessous', - - // I - 'icone_relancer_signataire' => 'Relancer le signataire', # NEW - 'icone_relancer_signataires' => 'Relancer les signataires', # NEW - 'icone_suivi_petitions' => 'Suivre/gérer les pétitions', # NEW - 'icone_supprimer_signature' => 'Supprimer cette signature', # NEW - 'icone_supprimer_signatures' => 'Supprimer les signatures', # NEW - 'icone_valider_signature' => 'Valider cette signature', # NEW - 'icone_valider_signatures' => 'Valider les signatures', # NEW - 'info_adresse_email' => ' ADRESSE EMAIL :', - 'info_fonctionnement_petition' => 'Fonctionnement de la pétition :', # NEW - 'info_signature_supprimee' => 'Signature supprimée', # NEW - 'info_signature_supprimee_erreur' => 'Erreur : ce code de suppression ne correspond a aucune signature', # NEW - 'info_site_web' => ' SITE WEB :', - 'info_texte_message' => ' Texte de votre message :', - - // L - 'lien_reponse_article' => ' Réponse à l\'article', - - // N - 'nombre_signatures' => '@nb@ signatures', # NEW - - // S - 'sans_nom' => 'Anonyme', # NEW - 'signatures_article' => 'Signatures de l\'article :', # NEW - 'signatures_aucune' => 'Aucune', # NEW - 'signatures_meme_auteur' => 'Les signatures du m', # NEW - 'signatures_meme_site' => 'Les signatures avec le m', # NEW - 'signatures_poubelle' => 'Supprimées', # NEW - 'signatures_prop' => 'En attente', # NEW - 'signatures_publie' => 'Confirmées', # NEW - 'signatures_recherche_label' => 'Rechercher des signatures :', # NEW - 'signatures_toutes' => 'Toutes', # NEW - 'statut_poubelle' => 'Supprimée', # NEW - 'statut_prop' => 'En attente de validation', # NEW - 'statut_publie' => 'Confirmée', # NEW - - // T - 'texte_descriptif_petition' => 'Descriptif de la pétition', # NEW - 'titre_page_controle_petition' => 'Suivi des pétitions', # NEW - 'titre_petition' => 'Pétition', # NEW - 'titre_petitions' => 'Pétitions', # NEW - 'titre_selection_action' => 'Sélection', # NEW - 'titre_signatures_attente' => 'Signatures en attente de validation', # NEW - 'titre_signatures_publie' => 'Signatures confirmées', # NEW - 'titre_suivi_petition' => 'Suivi des pétitions', # NEW - 'tout_voir' => 'Voir toutes les signatures', # NEW - - // U - 'une_signature' => '1 signature', # NEW - - // V - 'voir_signatures_objet' => 'Voir les signatures' # NEW -); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_oc_auv.php b/www/plugins-dist/petitions/lang/petitions_oc_auv.php index f9cacfa0..e8d41393 100644 --- a/www/plugins-dist/petitions/lang/petitions_oc_auv.php +++ b/www/plugins-dist/petitions/lang/petitions_oc_auv.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=oc_auv // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Activar la peticion', + 'bouton_radio_pas_petition' => 'Gran de peticion', + 'bouton_radio_petition_activee' => 'Peticion activada', + 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', + // F 'form_pet_adresse_site' => 'Adreiça de vòstre sit', # MODIF 'form_pet_aucune_signature' => 'Gran de signatura correspond pas a aquel còde...', # MODIF @@ -48,5 +56,3 @@ Mercés per vòstra participacion // L 'lien_reponse_article' => 'Responsa a l’article' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_oc_gsc.php b/www/plugins-dist/petitions/lang/petitions_oc_gsc.php index 043ccc96..edcf3125 100644 --- a/www/plugins-dist/petitions/lang/petitions_oc_gsc.php +++ b/www/plugins-dist/petitions/lang/petitions_oc_gsc.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=oc_gsc // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Activar la peticion', + 'bouton_radio_pas_petition' => 'Nada peticion', + 'bouton_radio_petition_activee' => 'Peticion activada', + 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', + // F 'form_pet_adresse_site' => 'Adreiça deu vòste sit', # MODIF 'form_pet_aucune_signature' => 'Nada signatura non correspond pas a aqueth còde...', # MODIF @@ -48,5 +56,3 @@ Mercés entà la vòsta participacion // L 'lien_reponse_article' => 'Responsa a l’article' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_oc_lms.php b/www/plugins-dist/petitions/lang/petitions_oc_lms.php index 485326aa..56f9411d 100644 --- a/www/plugins-dist/petitions/lang/petitions_oc_lms.php +++ b/www/plugins-dist/petitions/lang/petitions_oc_lms.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=oc_lms // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Activar la peticion', + 'bouton_radio_pas_petition' => 'Brisa de peticion', + 'bouton_radio_petition_activee' => 'Peticion activada', + 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', + // F 'form_pet_adresse_site' => 'Adreiça de vòstre sit', # MODIF 'form_pet_aucune_signature' => 'Brisa de signatura correspond pas a queu còde...', # MODIF @@ -48,5 +56,3 @@ Mercés per vòstra participacion // L 'lien_reponse_article' => 'Responsa a l’article' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_oc_lnc.php b/www/plugins-dist/petitions/lang/petitions_oc_lnc.php index f19f35d9..aacce046 100644 --- a/www/plugins-dist/petitions/lang/petitions_oc_lnc.php +++ b/www/plugins-dist/petitions/lang/petitions_oc_lnc.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=oc_lnc // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Activar la peticion', + 'bouton_radio_pas_petition' => 'Pas cap de peticion', + 'bouton_radio_petition_activee' => 'Peticion activada', + 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', + // F 'form_pet_adresse_site' => 'Adreiça de vòstre sit', # MODIF 'form_pet_aucune_signature' => 'Cap de signatura correspond pas a aquel còde...', # MODIF @@ -52,5 +60,3 @@ Mercés per vòstra participacion // L 'lien_reponse_article' => 'Responsa a l’article' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_oc_ni.php b/www/plugins-dist/petitions/lang/petitions_oc_ni.php index c109e64c..98c477e5 100644 --- a/www/plugins-dist/petitions/lang/petitions_oc_ni.php +++ b/www/plugins-dist/petitions/lang/petitions_oc_ni.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=oc_ni // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Activar la peticion', + 'bouton_radio_pas_petition' => 'Minga de peticion', + 'bouton_radio_petition_activee' => 'Peticion activada', + 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', + // F 'form_pet_adresse_site' => 'Adreça dau voastre sit', # MODIF 'form_pet_aucune_signature' => 'Minga de signatura correspoande à-n-aqueu còde...', # MODIF @@ -52,5 +60,3 @@ Mercé de la voastra participacion // L 'lien_reponse_article' => 'Respoasta à l’article' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_oc_ni_la.php b/www/plugins-dist/petitions/lang/petitions_oc_ni_la.php index 35eb81da..8687b43a 100644 --- a/www/plugins-dist/petitions/lang/petitions_oc_ni_la.php +++ b/www/plugins-dist/petitions/lang/petitions_oc_ni_la.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=oc_ni_la // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Activar la peticion', + 'bouton_radio_pas_petition' => 'Minga de peticion', + 'bouton_radio_petition_activee' => 'Peticion activada', + 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', + // F 'form_pet_adresse_site' => 'Adreiça dau vòstre sit', # MODIF 'form_pet_aucune_signature' => 'Minga de signatura non correspònde a aqueu còde...', # MODIF @@ -49,5 +57,3 @@ Mercé per la vòstra participacion // L 'lien_reponse_article' => 'Respòsta a l’article' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_oc_ni_mis.php b/www/plugins-dist/petitions/lang/petitions_oc_ni_mis.php new file mode 100644 index 00000000..88280db0 --- /dev/null +++ b/www/plugins-dist/petitions/lang/petitions_oc_ni_mis.php @@ -0,0 +1,115 @@ + 'Anas suprimà touti li firma d’aquela peticioun. Sias segur de voulé countinuà ?', + 'aucune_signature' => 'Mìnga firma', + + // B + 'bouton_checkbox_envoi_message' => 'poussibilità de mandà un message', + 'bouton_checkbox_indiquer_site' => 'endicà oubligatoriamen un sit web', + 'bouton_checkbox_signature_unique_email' => 'una firma souleta per adressa e-mail', + 'bouton_checkbox_signature_unique_site' => 'una firma souleta per sit web', + 'bouton_radio_activer_petition' => 'Ativà la peticioun', + 'bouton_radio_pas_petition' => 'Mìnga peticioun', + 'bouton_radio_petition_activee' => 'Peticioun ativada', + 'bouton_radio_supprimer_petition' => 'Suprimà la peticioun', + + // F + 'filtre' => 'Filtre :', + 'form_pet_adresse_site' => 'Adressa URL dóu vouòstre sit', + 'form_pet_aucune_signature' => 'Mìnga firma courrespouònde en aqueu code…', + 'form_pet_confirmation' => 'Vourguès counfirmà la vouòstra firma :', + 'form_pet_deja_signe' => 'Avès jà firmat aqueu tèstou.', + 'form_pet_envoi_mail_confirmation' => 'Un courrié eletrònicou de counfirmacioun ven d’estre mandat a @email@. Vi deurès visità l’adressa web menciounada en aqueu courrié da validà la vouòstra firma.', + 'form_pet_mail_confirmation' => 'Bouònjou, + +Avès demandat da firmà la peticioun : +@titre@. + +Avès fournit li infourmacioun seguenti : + Noum : @nom_email@ + Sit : @nom_site@ - @url_site@ + @message@ + +IMPOURTANT... +Da validà la vouòstra firma, basta vi counetà a l’adressa aquì souta (en lou cas countrari, la vouòstra demanda serà refudada) : + + @url@ + + +Mercì de la vouòstra participacioun +', + 'form_pet_message_commentaire' => 'Un message, un coumentari ?', + 'form_pet_nom_site2' => 'Noum dóu vouòstre sit web', # enlever le gras + 'form_pet_probleme_liens' => 'Vourguès revirà lou vouòstre message en suprimant lu estac ipertèst.', + 'form_pet_probleme_technique' => 'Proublèma tècnicou, li firma seràn tempourariamen souspendut.', + 'form_pet_signature_validee' => 'La vouòstra firma es validada. Mercì !', + 'form_pet_site_deja_enregistre' => 'Aqueu sit es jà registrat', + 'form_pet_url_invalide' => 'L’URL qu’avès endicat noun es vàlidou.', + 'form_pet_votre_email' => 'La vouòstra adressa e-mail', + 'form_pet_votre_nom' => 'Lou vouòstre noum', + 'form_pet_votre_site' => 'S’avès un sit Web, poudès l’endicà aquì souta', + + // I + 'icone_relancer_signataire' => 'Ensègre lou signatàri', + 'icone_relancer_signataires' => 'Ensègre lu signatàri', + 'icone_suivi_petitions' => 'Sègre/gerà li peticioun', + 'icone_supprimer_signature' => 'Suprimà aquela firma', + 'icone_supprimer_signatures' => 'Suprimà li firma', + 'icone_valider_signature' => 'Validà aquela firma', + 'icone_valider_signatures' => 'Validà li firma', + 'info_adresse_email' => 'ADRESSA E-MAIL :', + 'info_fonctionnement_petition' => 'Founciounamen de la peticioun :', + 'info_signature_supprimee' => 'Firma suprimada', + 'info_signature_supprimee_erreur' => 'Errour : aqueu code de supressioun courrespouònde a mìnga firma', + 'info_site_web' => 'SIT WEB :', + 'info_texte_message' => 'Tèst dóu vouòstre message :', + + // L + 'lien_reponse_article' => 'Respouòsta a l’article', + + // N + 'nombre_signatures' => '@nb@ firma', + + // S + 'sans_nom' => 'Anounime', + 'signatures_article' => 'Firma de l’article :', + 'signatures_aucune' => 'Mìnga', + 'signatures_meme_auteur' => 'Li firma dau meme autour', + 'signatures_meme_site' => 'Li firma emb’au meme sit', + 'signatures_poubelle' => 'Suprimadi', + 'signatures_prop' => 'En aspèra', + 'signatures_publie' => 'Counfirmadi', + 'signatures_recherche_label' => 'Recercà dei firma :', + 'signatures_selection' => 'Seleciounà li firma :', + 'signatures_toutes' => 'Touti', + 'statut_poubelle' => 'Suprimada', + 'statut_prop' => 'En aspera de validacioun', + 'statut_publie' => 'Counfirmada', + + // T + 'texte_descriptif_petition' => 'Descritiéu de la peticioun', + 'titre_page_controle_petition' => 'Seguit dei peticioun', + 'titre_petition' => 'Peticioun', + 'titre_petitions' => 'Peticioun', + 'titre_selection_action' => 'Selecioun', + 'titre_signatures_attente' => 'Firma en aspera de validacioun', + 'titre_signatures_publie' => 'Firma counfirmadi', + 'titre_suivi_petition' => 'Seguit dei peticioun', + 'tout_voir' => 'Veire touti li firma', + + // U + 'une_signature' => '1 firma', + + // V + 'voir_signatures_objet' => 'Veire li firma' +); diff --git a/www/plugins-dist/petitions/lang/petitions_oc_prv.php b/www/plugins-dist/petitions/lang/petitions_oc_prv.php index af4f77fc..1fa4b59d 100644 --- a/www/plugins-dist/petitions/lang/petitions_oc_prv.php +++ b/www/plugins-dist/petitions/lang/petitions_oc_prv.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=oc_prv // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Activar la peticion', + 'bouton_radio_pas_petition' => 'Ges de peticion', + 'bouton_radio_petition_activee' => 'Peticion activada', + 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', + // F 'form_pet_adresse_site' => 'Adreiça de vòstre sit', # MODIF 'form_pet_aucune_signature' => 'Ges de signatura correspònd a aqueu còde...', # MODIF @@ -48,5 +56,3 @@ Grandmercé per vòstra participacion // L 'lien_reponse_article' => 'Respònsa a l’article' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_oc_va.php b/www/plugins-dist/petitions/lang/petitions_oc_va.php index 36be19c4..368eff17 100644 --- a/www/plugins-dist/petitions/lang/petitions_oc_va.php +++ b/www/plugins-dist/petitions/lang/petitions_oc_va.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=oc_va // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Activar la peticion', + 'bouton_radio_pas_petition' => 'Ges de peticion', + 'bouton_radio_petition_activee' => 'Peticion activaa', + 'bouton_radio_supprimer_petition' => 'Suprimir la peticion', + // F 'form_pet_adresse_site' => 'Adreiça de vòstre sit', # MODIF 'form_pet_aucune_signature' => 'Ges de signatura correspònd pas a aqueu còde...', # MODIF @@ -48,5 +56,3 @@ Mercé per vòstra participacion // L 'lien_reponse_article' => 'Respònsa a l’article' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_pl.php b/www/plugins-dist/petitions/lang/petitions_pl.php index 2e0e0aab..8bc29dc0 100644 --- a/www/plugins-dist/petitions/lang/petitions_pl.php +++ b/www/plugins-dist/petitions/lang/petitions_pl.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=pl // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Aktywacja ogłoszeń', + 'bouton_radio_pas_petition' => 'Wyłącz ogłoszenia', + 'bouton_radio_petition_activee' => 'Ogłoszenia włączone', + 'bouton_radio_supprimer_petition' => 'Usuń ogłoszenia', + // F 'form_pet_adresse_site' => 'URL Twojej strony', # MODIF 'form_pet_aucune_signature' => 'Å»aden podpis nie odpowiada podanemu kodowi...', # MODIF @@ -52,5 +60,3 @@ Dziękujemy za wzięcie udziału. // L 'lien_reponse_article' => 'Odpowiedz na ten artykuł' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_pt.php b/www/plugins-dist/petitions/lang/petitions_pt.php index 1e91ddbc..ea52edce 100644 --- a/www/plugins-dist/petitions/lang/petitions_pt.php +++ b/www/plugins-dist/petitions/lang/petitions_pt.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=pt // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -16,6 +18,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_checkbox_indiquer_site' => 'necessita de indicar um sítio web', 'bouton_checkbox_signature_unique_email' => 'apenas uma assinatura por e-mail', 'bouton_checkbox_signature_unique_site' => 'apenas uma assinatura por sítio web', + 'bouton_radio_activer_petition' => 'Activar a petição', + 'bouton_radio_pas_petition' => 'Sem petição', + 'bouton_radio_petition_activee' => 'Petição activada', + 'bouton_radio_supprimer_petition' => 'Suprimir a petição', // F 'filtre' => 'Filtro :', @@ -108,5 +114,3 @@ Obrigado pela sua participação // V 'voir_signatures_objet' => 'Visualizar as assinaturas' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_pt_br.php b/www/plugins-dist/petitions/lang/petitions_pt_br.php index b2513ba9..cc79d845 100644 --- a/www/plugins-dist/petitions/lang/petitions_pt_br.php +++ b/www/plugins-dist/petitions/lang/petitions_pt_br.php @@ -3,16 +3,33 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=pt_br // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // A + 'alerte_confirmer_suppression_signatures' => 'Todas as assinaturas desta petição serão removidas. Tem certeza que deseja continuar?', + 'aucune_signature' => 'Nenhuma assinatura', + + // B + 'bouton_checkbox_envoi_message' => 'possibilidade de enviar mensagem', + 'bouton_checkbox_indiquer_site' => 'tornar obrigatória a indicação de um website', + 'bouton_checkbox_signature_unique_email' => 'apenas uma assinatura por endereço de email', + 'bouton_checkbox_signature_unique_site' => 'somente uma assinatura por website', + 'bouton_radio_activer_petition' => 'Ativar a petição', + 'bouton_radio_pas_petition' => 'Sem petição', + 'bouton_radio_petition_activee' => 'Petição ativada', + 'bouton_radio_supprimer_petition' => 'Excluir a petição', + // F - 'form_pet_adresse_site' => 'Endereço do seu site', # MODIF - 'form_pet_aucune_signature' => 'Nenhuma assinatura corresponde a este código...', # MODIF + 'filtre' => 'Filtro:', + 'form_pet_adresse_site' => 'Endereço de seu site', + 'form_pet_aucune_signature' => 'Nenhuma assinatura corresponde a este código...', 'form_pet_confirmation' => 'Por favor, confirme a sua assinatura:', 'form_pet_deja_signe' => 'Você já assinou este texto.', - 'form_pet_envoi_mail_confirmation' => 'Um e-mail de confirmação acabou de ser enviado para @email@. Você deverá visitar o endereço web mencionado na mensagem para validar a sua assinatura.', # MODIF + 'form_pet_envoi_mail_confirmation' => 'Uma mensagem de confirmação acabou de ser enviada para @email@. Para validar sua assinatura, visite o endereço web mencionado na mensagem.', 'form_pet_mail_confirmation' => 'Bom dia, Você pediu para assinar a petição: @@ -33,24 +50,68 @@ rejeitado): Obrigado por participar ', - 'form_pet_nom_site2' => 'Nome do seu website', # MODIF + 'form_pet_message_commentaire' => 'Uma mensagem ou comentário?', + 'form_pet_nom_site2' => 'Nome de seu website', 'form_pet_probleme_liens' => 'Por favor, retire os links hipertexto da sua mensagem.', 'form_pet_probleme_technique' => 'Problema técnico: as assinaturas estão suspensas temporariamente.', 'form_pet_signature_validee' => 'Sua assinatura foi validada. Obrigado!', 'form_pet_site_deja_enregistre' => 'Este site já está cadastrado', 'form_pet_url_invalide' => 'O URL que você informou não é válido.', 'form_pet_votre_email' => 'Seu endereço de e-mail', - 'form_pet_votre_nom' => 'Seu nome ou apelido', # MODIF + 'form_pet_votre_nom' => 'Seu nome ou apelido', 'form_pet_votre_site' => 'Se você tem um website, você pode informá-lo abaixo', // I + 'icone_relancer_signataire' => 'Recontactar signatário', + 'icone_relancer_signataires' => 'Recontactar signatários', + 'icone_suivi_petitions' => 'Seguir / gerenciar petições', + 'icone_supprimer_signature' => 'Apagar esta assinatura', + 'icone_supprimer_signatures' => 'Remover assinaturas', + 'icone_valider_signature' => 'Validar esta assinatura', + 'icone_valider_signatures' => 'Validar assinaturas', 'info_adresse_email' => 'ENDEREÇO DE E-MAIL:', + 'info_fonctionnement_petition' => 'Funcionamento da petição:', 'info_signature_supprimee' => 'Assinatura excluída', - 'info_signature_supprimee_erreur' => 'Erro: este código de exclusão não corresponde a nenhuma assinatura', # MODIF + 'info_signature_supprimee_erreur' => 'Erro: este código de exclusão não corresponde a nenhuma assinatura', 'info_site_web' => 'WEBSITE:', + 'info_texte_message' => 'Texto de sua mensagem:', // L - 'lien_reponse_article' => 'Resposta à matéria' -); + 'lien_reponse_article' => 'Resposta à matéria', + + // N + 'nombre_signatures' => '@nb@ assinaturas', -?> + // S + 'sans_nom' => 'Anônimo', + 'signatures_article' => 'Assinaturas da matéria:', + 'signatures_aucune' => 'Nenhuma', + 'signatures_meme_auteur' => 'Assinaturas do mesmo autor', + 'signatures_meme_site' => 'Assinaturas com o mesmo site', + 'signatures_poubelle' => 'Removidas', + 'signatures_prop' => 'Na fila', + 'signatures_publie' => 'Confirmadas', + 'signatures_recherche_label' => 'Buscar assinaturas:', + 'signatures_selection' => 'Selecionar assinaturas:', + 'signatures_toutes' => 'Todas', + 'statut_poubelle' => 'Na lixeira', + 'statut_prop' => 'Aguardando validação', + 'statut_publie' => 'Confirmada', + + // T + 'texte_descriptif_petition' => 'Descrição da petição', + 'titre_page_controle_petition' => 'Monitoramento das petições', + 'titre_petition' => 'Petição', + 'titre_petitions' => 'Petições', + 'titre_selection_action' => 'Seleção', + 'titre_signatures_attente' => 'Assinaturas aguardando validação', + 'titre_signatures_publie' => 'Assinaturas confirmadas', + 'titre_suivi_petition' => 'Monitoramento de petições', + 'tout_voir' => 'Ver tudo', + + // U + 'une_signature' => '1 assinatura', + + // V + 'voir_signatures_objet' => 'Ver assinaturas' +); diff --git a/www/plugins-dist/petitions/lang/petitions_rn.php b/www/plugins-dist/petitions/lang/petitions_rn.php deleted file mode 100644 index 309be147..00000000 --- a/www/plugins-dist/petitions/lang/petitions_rn.php +++ /dev/null @@ -1,112 +0,0 @@ - 'Vous allez supprimer toutes les signatures de cette pétition. Êtes-vous sur de vouloir continuer ?', # NEW - 'aucune_signature' => 'Aucune signature', # NEW - - // B - 'bouton_checkbox_envoi_message' => 'possibilité d\'envoyer un message', # NEW - 'bouton_checkbox_indiquer_site' => 'indiquer obligatoirement un site web', # NEW - 'bouton_checkbox_signature_unique_email' => 'une seule signature par adresse email', # NEW - 'bouton_checkbox_signature_unique_site' => 'une seule signature par site web', # NEW - - // F - 'filtre' => 'Filtre :', # NEW - 'form_pet_adresse_site' => 'Adresse de votre site', # MODIF - 'form_pet_aucune_signature' => 'Aucune signature ne correspond à ce code...', - 'form_pet_confirmation' => 'Veuillez confirmer votre signature :', - 'form_pet_deja_signe' => 'Vous avez déjà signé ce texte.', - 'form_pet_envoi_mail_confirmation' => 'Un courrier électronique de confirmation vient de vous être envoyé. Vous devrez visiter l\'adresse Web mentionnée dans ce courrier pour valider votre signature.', # MODIF - 'form_pet_mail_confirmation' => 'Bonjour, - -Vous avez demandé à signer la pétition : -@titre@. - -Vous avez fourni les informations suivantes : - Nom: @nom_email@ - Site: @nom_site@ - @url_site@ - - -IMPORTANT... -Pour valider votre signature, il suffit de vous connecter à -l\'adresse ci-dessous (dans le cas contraire, votre demande -sera rejetée) : - - @url@ - - -Merci de votre participation -', - 'form_pet_message_commentaire' => 'Un message, un commentaire ?', # MODIF - 'form_pet_nom_site2' => 'Nom de votre site Web', # MODIF - 'form_pet_probleme_liens' => 'Veuillez reprendre votre message en supprimant les liens hypertexte.', # NEW - 'form_pet_probleme_technique' => 'Problème technique, les signatures sont temporairement suspendues.', - 'form_pet_signature_validee' => 'Votre signature est validée. Elle apparaîtra lors de la prochaine mise à jour du site. Merci !', # MODIF - 'form_pet_site_deja_enregistre' => 'Ce site est déjà enregistré', - 'form_pet_url_invalide' => 'L\'URL que vous avez indiquée n\'est pas valide.', - 'form_pet_votre_email' => 'Votre adresse email', - 'form_pet_votre_nom' => 'Votre nom ou pseudo', # MODIF - 'form_pet_votre_site' => 'Si vous avez un site Web, vous pouvez l\'indiquer ci-dessous', - - // I - 'icone_relancer_signataire' => 'Relancer le signataire', # NEW - 'icone_relancer_signataires' => 'Relancer les signataires', # NEW - 'icone_suivi_petitions' => 'Suivre/gérer les pétitions', # NEW - 'icone_supprimer_signature' => 'Supprimer cette signature', # NEW - 'icone_supprimer_signatures' => 'Supprimer les signatures', # NEW - 'icone_valider_signature' => 'Valider cette signature', # NEW - 'icone_valider_signatures' => 'Valider les signatures', # NEW - 'info_adresse_email' => 'ADRESSE EMAIL :', # NEW - 'info_fonctionnement_petition' => 'Fonctionnement de la pétition :', # NEW - 'info_signature_supprimee' => 'Signature supprimée', # NEW - 'info_signature_supprimee_erreur' => 'Erreur : ce code de suppression ne correspond a aucune signature', # NEW - 'info_site_web' => 'SITE WEB :', # NEW - 'info_texte_message' => 'Texte de votre message :', # NEW - - // L - 'lien_reponse_article' => 'Réponse à l\'article', # NEW - - // N - 'nombre_signatures' => '@nb@ signatures', # NEW - - // S - 'sans_nom' => 'Anonyme', # NEW - 'signatures_article' => 'Signatures de l\'article :', # NEW - 'signatures_aucune' => 'Aucune', # NEW - 'signatures_meme_auteur' => 'Les signatures du m', # NEW - 'signatures_meme_site' => 'Les signatures avec le m', # NEW - 'signatures_poubelle' => 'Supprimées', # NEW - 'signatures_prop' => 'En attente', # NEW - 'signatures_publie' => 'Confirmées', # NEW - 'signatures_recherche_label' => 'Rechercher des signatures :', # NEW - 'signatures_toutes' => 'Toutes', # NEW - 'statut_poubelle' => 'Supprimée', # NEW - 'statut_prop' => 'En attente de validation', # NEW - 'statut_publie' => 'Confirmée', # NEW - - // T - 'texte_descriptif_petition' => 'Descriptif de la pétition', # NEW - 'titre_page_controle_petition' => 'Suivi des pétitions', # NEW - 'titre_petition' => 'Pétition', # NEW - 'titre_petitions' => 'Pétitions', # NEW - 'titre_selection_action' => 'Sélection', # NEW - 'titre_signatures_attente' => 'Signatures en attente de validation', # NEW - 'titre_signatures_publie' => 'Signatures confirmées', # NEW - 'titre_suivi_petition' => 'Suivi des pétitions', # NEW - 'tout_voir' => 'Voir toutes les signatures', # NEW - - // U - 'une_signature' => '1 signature', # NEW - - // V - 'voir_signatures_objet' => 'Voir les signatures' # NEW -); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_ro.php b/www/plugins-dist/petitions/lang/petitions_ro.php index 6d30b617..3003235e 100644 --- a/www/plugins-dist/petitions/lang/petitions_ro.php +++ b/www/plugins-dist/petitions/lang/petitions_ro.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=ro // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'ActivaÅ£i petiÅ£ia', + 'bouton_radio_pas_petition' => 'Fără petiÅ£ie', + 'bouton_radio_petition_activee' => 'PetiÅ£ie activată', + 'bouton_radio_supprimer_petition' => 'ŞtergeÅ£i petiÅ£ia', + // F 'form_pet_adresse_site' => 'Adresa site-ului dumneavoastră', # MODIF 'form_pet_aucune_signature' => 'Nici o semnătură nu corespunde acestui cod...', # MODIF @@ -51,5 +59,3 @@ MulÅ£umim pentru participarea dumneavoastră // L 'lien_reponse_article' => 'Răspuns la articol' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_roa.php b/www/plugins-dist/petitions/lang/petitions_roa.php index f3f37f15..eeb9bd2a 100644 --- a/www/plugins-dist/petitions/lang/petitions_roa.php +++ b/www/plugins-dist/petitions/lang/petitions_roa.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=roa // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -42,5 +44,3 @@ Merci de votre participation 'form_pet_votre_nom' => 'Votre nom ou pseudo', # MODIF 'form_pet_votre_site' => 'Si vous avez un site Web, vous pouvez l’indiquer ci-dessous' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_ru.php b/www/plugins-dist/petitions/lang/petitions_ru.php index 8434a062..bade74a9 100644 --- a/www/plugins-dist/petitions/lang/petitions_ru.php +++ b/www/plugins-dist/petitions/lang/petitions_ru.php @@ -3,45 +3,51 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=ru // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( // A 'alerte_confirmer_suppression_signatures' => 'Вы удалите все подписи. Продолжить ?', - 'aucune_signature' => 'Пока нет ни одной подписи', + 'aucune_signature' => 'Нет подписей', // B 'bouton_checkbox_envoi_message' => 'возможность отправлять сообщения', 'bouton_checkbox_indiquer_site' => 'необходимо указать название сайта', 'bouton_checkbox_signature_unique_email' => 'один email - одна подпись', 'bouton_checkbox_signature_unique_site' => 'один сайт = одна подпись', + 'bouton_radio_activer_petition' => 'Включить петиции', + 'bouton_radio_pas_petition' => 'Отключить петиции', + 'bouton_radio_petition_activee' => 'Включить петиции', + 'bouton_radio_supprimer_petition' => 'Удалить петиции', // F 'filtre' => 'Фильтр:', 'form_pet_adresse_site' => 'URL вашего сайта', 'form_pet_aucune_signature' => 'Не найдено подписей, соответствующих этому коду...', 'form_pet_confirmation' => 'Пожалуйста, подтвердите вашу подпись:', - 'form_pet_deja_signe' => 'Вы уже оставили подпись под этим текст.', - 'form_pet_envoi_mail_confirmation' => 'Вам было отправлено письмо на e-mail @email@. Что бы подтвердить вашу подпись перейдите по ссылке в письме.', + 'form_pet_deja_signe' => 'Вы уже оставили подпись под этим текстом.', + 'form_pet_envoi_mail_confirmation' => 'Вам было отправлено письмо на e-mail @email@. Чтобы подтвердить вашу подпись перейдите по ссылке в письме.', 'form_pet_mail_confirmation' => 'Добрый день, -Вы решили поддержать материал: +Вы просили подписать петицию: @titre@. Вы предоставили следующую информацию: Имя: @nom_email@ Сайт: @nom_site@ - @url_site@ +@message@ Важно! Чтобы подтвердить свою подпись, перейдите, пожалуйста, по указанному ниже адресу -(иначе, ваша подпись будет удалена): +(иначе ваш запрос будет удалён): @url@ @message@ -Спасибо за участие! -', - 'form_pet_message_commentaire' => 'Сообщение, комментарий ?', +Спасибо за участие!', + 'form_pet_message_commentaire' => 'Сообщение, комментарий?', 'form_pet_nom_site2' => 'Название вашего сайта', 'form_pet_probleme_liens' => 'Отредактируйте ваше сообщение, удалив из него все ссылки.', 'form_pet_probleme_technique' => 'Техническая проблема, временно нельзя оставлять подписи.', @@ -49,7 +55,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'form_pet_site_deja_enregistre' => 'Этот сайт уже зарегистрирован', 'form_pet_url_invalide' => 'Вы указали неправильный URL сайта.', 'form_pet_votre_email' => 'Ваш e-mail адрес', - 'form_pet_votre_nom' => 'Как вас зовут', + 'form_pet_votre_nom' => 'Ваше имя или ник', 'form_pet_votre_site' => 'Вы можете указать URL вашего сайта', // I @@ -61,11 +67,11 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'icone_valider_signature' => 'Подтвердить подпись', 'icone_valider_signatures' => 'Подтвердить подписи', 'info_adresse_email' => 'E-MAIL:', - 'info_fonctionnement_petition' => 'Настройки :', + 'info_fonctionnement_petition' => 'Настройки:', 'info_signature_supprimee' => 'Подпись удалена', - 'info_signature_supprimee_erreur' => 'Ошибка: данному удалению не соответствует ни одна подпись', + 'info_signature_supprimee_erreur' => 'Ошибка: данному коду удаления не соответствует ни одна подпись', 'info_site_web' => 'ВЕБСАЙТ:', - 'info_texte_message' => 'Текст сообщения или комментария :', + 'info_texte_message' => 'Текст сообщения или комментария:', // L 'lien_reponse_article' => 'Оставить комментарий', @@ -74,23 +80,23 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'nombre_signatures' => '@nb@ подписей', // S - 'sans_nom' => 'Анонимус', - 'signatures_article' => 'Подписи под статьей :', + 'sans_nom' => 'Аноним', + 'signatures_article' => 'Подписи под статьей:', 'signatures_aucune' => 'Отсутствует', 'signatures_meme_auteur' => 'Подписи этого же автора', - 'signatures_meme_site' => 'Подписи с такого же сайта', + 'signatures_meme_site' => 'Подписи с этого же сайта', 'signatures_poubelle' => 'Удаленные', 'signatures_prop' => 'Ожидают', 'signatures_publie' => 'Подтвержденные', - 'signatures_recherche_label' => 'Найти подпись :', - 'signatures_selection' => 'Выбор подписи :', + 'signatures_recherche_label' => 'Найти подпись:', + 'signatures_selection' => 'Выбрать подпись:', 'signatures_toutes' => 'Все', 'statut_poubelle' => 'Удаленные', 'statut_prop' => 'Ожидают подтверждения', 'statut_publie' => 'Подтвержденные', // T - 'texte_descriptif_petition' => 'Описание', + 'texte_descriptif_petition' => 'Описание петиции', 'titre_page_controle_petition' => 'Отслеживание подписей', 'titre_petition' => 'Подпись', 'titre_petitions' => 'Подписи', @@ -106,5 +112,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // V 'voir_signatures_objet' => 'Показать подписи' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_sk.php b/www/plugins-dist/petitions/lang/petitions_sk.php index e1a8416b..bce8d004 100644 --- a/www/plugins-dist/petitions/lang/petitions_sk.php +++ b/www/plugins-dist/petitions/lang/petitions_sk.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=sk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -16,6 +18,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'bouton_checkbox_indiquer_site' => 'povinne uviesÅ¥ internetovú stránku', 'bouton_checkbox_signature_unique_email' => 'iba jeden podpis na e-mailovú adresu', 'bouton_checkbox_signature_unique_site' => 'iba jeden podpis na stránku', + 'bouton_radio_activer_petition' => 'AktivovaÅ¥ petíciu', + 'bouton_radio_pas_petition' => 'Žiadne petície', + 'bouton_radio_petition_activee' => 'Petícia aktivovaná', + 'bouton_radio_supprimer_petition' => 'OdstrániÅ¥ petíciu', // F 'filtre' => 'Filter:', @@ -107,5 +113,3 @@ uvedenú nižšie (v opačnom prípade bude vaÅ¡a // V 'voir_signatures_objet' => 'ZobraziÅ¥ podpisy' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_sq.php b/www/plugins-dist/petitions/lang/petitions_sq.php index c7b9257d..5b463675 100644 --- a/www/plugins-dist/petitions/lang/petitions_sq.php +++ b/www/plugins-dist/petitions/lang/petitions_sq.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=sq // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -40,5 +42,3 @@ Faleminderit për pjesëmarrjen 'form_pet_votre_nom' => 'Emri apo pseudonimi', # MODIF 'form_pet_votre_site' => 'Nëse ju keni një faqe, mund ta shkruani këtu poshtë' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_sv.php b/www/plugins-dist/petitions/lang/petitions_sv.php index e6b7ac9b..957e2f2c 100644 --- a/www/plugins-dist/petitions/lang/petitions_sv.php +++ b/www/plugins-dist/petitions/lang/petitions_sv.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=sv // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Aktivera namninsamlingen', + 'bouton_radio_pas_petition' => 'Inga namninsamlingar', + 'bouton_radio_petition_activee' => 'Namninsamling aktiverad', + 'bouton_radio_supprimer_petition' => 'Radera namninsamlingen', + // F 'form_pet_adresse_site' => 'Din sajts URL', # MODIF 'form_pet_aucune_signature' => 'Inga underskrifter motsvarar denna kod...', # MODIF @@ -48,5 +56,3 @@ Tack för ditt deltagande // L 'lien_reponse_article' => 'Svara pÃ¥ artikeln' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_tr.php b/www/plugins-dist/petitions/lang/petitions_tr.php index 39e5b535..a7f0660a 100644 --- a/www/plugins-dist/petitions/lang/petitions_tr.php +++ b/www/plugins-dist/petitions/lang/petitions_tr.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=tr // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Ä°mza kampanyasını aç', + 'bouton_radio_pas_petition' => 'Dilekçe yok', + 'bouton_radio_petition_activee' => 'Etkinleştirilmiş dilekçe', + 'bouton_radio_supprimer_petition' => 'Dilekçeyi sil', + // F 'form_pet_adresse_site' => 'Sitenizin adresi', # MODIF 'form_pet_aucune_signature' => 'Bu koda karşılık hiç bir imza yok...', # MODIF @@ -54,5 +62,3 @@ Katılımınız için teşekkürler // L 'lien_reponse_article' => 'Bu makaleye yanıt ' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_uk.php b/www/plugins-dist/petitions/lang/petitions_uk.php index 64c0c3d9..a6d95f19 100644 --- a/www/plugins-dist/petitions/lang/petitions_uk.php +++ b/www/plugins-dist/petitions/lang/petitions_uk.php @@ -3,30 +3,108 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=uk // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // A + 'alerte_confirmer_suppression_signatures' => 'Ви видалите всі підписи під цією петицією. Ви впевнені, що хочете продовжити?', + 'aucune_signature' => 'Нема підписів', + + // B + 'bouton_checkbox_envoi_message' => 'можливість відправляти повідомлення', + 'bouton_checkbox_indiquer_site' => 'необхідно вказати сайт', + 'bouton_checkbox_signature_unique_email' => 'одна адреса email - один підпис', + 'bouton_checkbox_signature_unique_site' => 'один сайт - один підпис', + 'bouton_radio_activer_petition' => 'Включити петиції', + 'bouton_radio_pas_petition' => 'Немає петицій', + 'bouton_radio_petition_activee' => 'Активована петиція', + 'bouton_radio_supprimer_petition' => 'Видалити петиції', + // F - 'form_pet_adresse_site' => 'Адреса вашого сайту.', # MODIF - 'form_pet_aucune_signature' => 'Ніякий підпис не відповідає цьому коду ...', # MODIF - 'form_pet_confirmation' => 'Будь ласка, підтвердіть свій підпис:', + 'filtre' => 'Фільтр:', + 'form_pet_adresse_site' => 'Адреса вашого сайту.', + 'form_pet_aucune_signature' => 'Жоден підпис не відповідає цьому коду...', + 'form_pet_confirmation' => 'Будь ласка, підтвердьте свій підпис:', 'form_pet_deja_signe' => 'Ви вже підписали цей текст.', - 'form_pet_envoi_mail_confirmation' => 'Підтвердження по електронній пошті було відправлено до вас. Ви повинні відвідати веб-адресу, вказану в листі для підтвердження вашого підпису.', # MODIF - 'form_pet_mail_confirmation' => 'Добрий день! Ви просили підписати петицію: заголовок.Ви надали наступну інформацію: Ім’я: e-mail Сайт: назва сайту Сайт повідомленняВАЖЛИВО ...Щоб перевірити свій підпис, достатньо підключитись за нижче поданою адресою (в іншому випадку, Ваш запит буде відхилено): Спасибі за вашу участь ', - 'form_pet_message_commentaire' => 'Повідомлення чи коментар?', # MODIF - 'form_pet_nom_site2' => 'Назва вашого сайту', # MODIF - 'form_pet_probleme_liens' => 'Будь ласка, відправте ваше повідомлення шляхом видалення гіперпосилання.', + 'form_pet_envoi_mail_confirmation' => 'Підтвердження електронною поштою було відправлено на адресу @email@. Ви повинні відвідати URL-посилання, вказане в листі, для підтвердження вашого підпису.', + 'form_pet_mail_confirmation' => 'Добрий день! +Ви просили підписати петицію: @titre@. +Ви надали наступну інформацію: + Ім’я: @nom_email@ + Сайт: @nom_site@ - @url_site@ +@message@ + +ВАЖЛИВО... +Щоб підтвердити свій підпис перейдіть, будь ласка, за нижче поданою адресою (в іншому випадку, ваш запит буде відхилено): + @url@ + @message@ + +Дякуємо за вашу участь!', + 'form_pet_message_commentaire' => 'Повідомлення, коментар?', + 'form_pet_nom_site2' => 'Назва вашого сайту', + 'form_pet_probleme_liens' => 'Будь ласка, відредагуйте ваше повідомлення, видаливши гіперпосилання.', 'form_pet_probleme_technique' => 'Технічна проблема, підписи тимчасово призупинено.', - 'form_pet_signature_validee' => 'Ваш підпис задіяно. Спасибі!', + 'form_pet_signature_validee' => 'Ваш підпис підтверджено. Дякуємо!', 'form_pet_site_deja_enregistre' => 'Цей сайт вже зареєстровано.', 'form_pet_url_invalide' => 'URL, який ви вказали, невірний.', 'form_pet_votre_email' => 'Ваша адреса email', - 'form_pet_votre_nom' => 'Ваше ім’я або нік', # MODIF + 'form_pet_votre_nom' => 'Ваше ім’я або нік', 'form_pet_votre_site' => 'Якщо у вас є сайт, ви можете ввести його нижче', // I - 'info_adresse_email' => 'Адреса електронної пошти:' -); + 'icone_relancer_signataire' => 'Повторно зв’язатися з тим, хто підписав', + 'icone_relancer_signataires' => 'Повторно зв’язатися з тими, хто підписав', + 'icone_suivi_petitions' => 'Слідкування за петиціями /управління ними', + 'icone_supprimer_signature' => 'Видалити цей підпис', + 'icone_supprimer_signatures' => 'Видалити ці підписи', + 'icone_valider_signature' => 'Підтвердити цей підпис', + 'icone_valider_signatures' => 'Підтвердити підписи', + 'info_adresse_email' => 'EMAIL:', + 'info_fonctionnement_petition' => 'Налаштування петиції:', + 'info_signature_supprimee' => 'Підпис видалено', + 'info_signature_supprimee_erreur' => 'Помилка: цей код видалення не відповідає жодному підпису', + 'info_site_web' => 'Веб-сайт:', + 'info_texte_message' => 'Текст вашого повідомлення:', + + // L + 'lien_reponse_article' => 'Коментувати цю статтю', -?> + // N + 'nombre_signatures' => '@nb@ підписів', + + // S + 'sans_nom' => 'Анонім', + 'signatures_article' => 'Підписи під статтею:', + 'signatures_aucune' => 'Нема', + 'signatures_meme_auteur' => 'Підписи цього автора', + 'signatures_meme_site' => 'Підписи з цього ж сайту', + 'signatures_poubelle' => 'Видалені', + 'signatures_prop' => 'Очікують', + 'signatures_publie' => 'Підтверджені', + 'signatures_recherche_label' => 'Знайти підписи:', + 'signatures_selection' => 'Вибрати підписи:', + 'signatures_toutes' => 'Усі', + 'statut_poubelle' => 'Видалені', + 'statut_prop' => 'Очікують підтвердження', + 'statut_publie' => 'Підтверджені', + + // T + 'texte_descriptif_petition' => 'Опис петиції', + 'titre_page_controle_petition' => 'Відстеження петицій', + 'titre_petition' => 'Петиція', + 'titre_petitions' => 'Петиції', + 'titre_selection_action' => 'Вибір', + 'titre_signatures_attente' => 'Підписи, що чекають на затвердження', + 'titre_signatures_publie' => 'Підтверджені підписи', + 'titre_suivi_petition' => 'Відстеження петицій', + 'tout_voir' => 'Показати усі підписи', + + // U + 'une_signature' => '1 підпис', + + // V + 'voir_signatures_objet' => 'Показати підписи' +); diff --git a/www/plugins-dist/petitions/lang/petitions_vi.php b/www/plugins-dist/petitions/lang/petitions_vi.php index 49d9c327..36bc5afd 100644 --- a/www/plugins-dist/petitions/lang/petitions_vi.php +++ b/www/plugins-dist/petitions/lang/petitions_vi.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=vi // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => 'Dùng thỉnh nguyện thÆ° ', + 'bouton_radio_pas_petition' => 'Không dùng', + 'bouton_radio_petition_activee' => 'Thỉnh nguyện thÆ° được mở lên', + 'bouton_radio_supprimer_petition' => 'Xóa thỉnh nguyện thÆ°', + // F 'form_pet_adresse_site' => 'URL của website bạn', # MODIF 'form_pet_aucune_signature' => 'Không ký hiệu nào phù hợp với mã số này...', # MODIF @@ -45,5 +53,3 @@ Cám Æ¡n sá»± tham gia của bạn.', # MODIF // L 'lien_reponse_article' => 'Hồi âm bài này' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_wo.php b/www/plugins-dist/petitions/lang/petitions_wo.php index aabda027..23b462c8 100644 --- a/www/plugins-dist/petitions/lang/petitions_wo.php +++ b/www/plugins-dist/petitions/lang/petitions_wo.php @@ -3,7 +3,9 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=wo // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( @@ -34,5 +36,3 @@ Jaajëf ci seen wallusi', # MODIF 'form_pet_votre_nom' => 'Sa tur wall dakental ; ', # MODIF 'form_pet_votre_site' => 'Su fekkee am nga dalub web mën nga ko joxoñ fii ci suuf.' ); - -?> diff --git a/www/plugins-dist/petitions/lang/petitions_zh.php b/www/plugins-dist/petitions/lang/petitions_zh.php index 6f446d75..9820c2d2 100644 --- a/www/plugins-dist/petitions/lang/petitions_zh.php +++ b/www/plugins-dist/petitions/lang/petitions_zh.php @@ -3,10 +3,18 @@ // extrait automatiquement de https://trad.spip.net/tradlang_module/petitions?lang_cible=zh // ** ne pas modifier le fichier ** -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} $GLOBALS[$GLOBALS['idx_lang']] = array( + // B + 'bouton_radio_activer_petition' => '激活请求', + 'bouton_radio_pas_petition' => '没有请求', + 'bouton_radio_petition_activee' => '激活请求', + 'bouton_radio_supprimer_petition' => '删除请求', + // F 'form_pet_adresse_site' => '站点链接', # MODIF 'form_pet_aucune_signature' => '没有与该代码匹配的签名...', # MODIF @@ -43,5 +51,3 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // L 'lien_reponse_article' => '回应文章' ); - -?> diff --git a/www/plugins-dist/petitions/paquet.xml b/www/plugins-dist/petitions/paquet.xml index 4fed296b..febd31ff 100644 --- a/www/plugins-dist/petitions/paquet.xml +++ b/www/plugins-dist/petitions/paquet.xml @@ -1,12 +1,12 @@ +> Pétitions @@ -22,4 +22,4 @@ - \ No newline at end of file + diff --git a/www/plugins-dist/petitions/petitions_administrations.php b/www/plugins-dist/petitions/petitions_administrations.php index 6d94929c..ee7dae51 100644 --- a/www/plugins-dist/petitions/petitions_administrations.php +++ b/www/plugins-dist/petitions/petitions_administrations.php @@ -10,7 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Installation/maj des tables petitions et signatures @@ -18,66 +20,67 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * @param string $nom_meta_base_version * @param string $version_cible */ -function petitions_upgrade($nom_meta_base_version,$version_cible){ +function petitions_upgrade($nom_meta_base_version, $version_cible) { // cas particulier : // si plugin pas installe mais que la table existe // considerer que c'est un upgrade depuis v 1.0.0 // pour gerer l'historique des installations SPIP <=2.1 - if (!isset($GLOBALS['meta'][$nom_meta_base_version])){ - $trouver_table = charger_fonction('trouver_table','base'); + if (!isset($GLOBALS['meta'][$nom_meta_base_version])) { + $trouver_table = charger_fonction('trouver_table', 'base'); if ($desc = $trouver_table('spip_signatures') - AND isset($desc['field']['id_article'])){ - ecrire_meta($nom_meta_base_version,'1.0.0'); + and isset($desc['field']['id_article']) + ) { + ecrire_meta($nom_meta_base_version, '1.0.0'); } // si pas de table en base, on fera une simple creation de base } $maj = array(); $maj['create'] = array( - array('maj_tables',array('spip_petitions','spip_signatures')), + array('maj_tables', array('spip_petitions', 'spip_signatures')), ); $maj['1.1.0'] = array( - array('sql_alter',"TABLE spip_petitions DROP PRIMARY KEY"), + array('sql_alter', "TABLE spip_petitions DROP PRIMARY KEY"), ); $maj['1.1.1'] = array( - array('sql_alter',"TABLE spip_petitions ADD UNIQUE id_article (id_article)"), + array('sql_alter', "TABLE spip_petitions ADD UNIQUE id_article (id_article)"), ); $maj['1.1.2'] = array( - array('sql_alter',"TABLE spip_petitions ADD id_petition BIGINT(21) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST"), - array('sql_alter',"TABLE spip_petitions ADD PRIMARY KEY (id_petition)"), + array('sql_alter', "TABLE spip_petitions ADD id_petition BIGINT(21) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST"), + array('sql_alter', "TABLE spip_petitions ADD PRIMARY KEY (id_petition)"), ); $maj['1.1.3'] = array( - array('sql_alter',"TABLE spip_petitions ADD statut VARCHAR (10) DEFAULT 'publie' NOT NULL"), + array('sql_alter', "TABLE spip_petitions ADD statut VARCHAR (10) DEFAULT 'publie' NOT NULL"), ); $maj['1.1.4'] = array( - array('sql_alter',"TABLE spip_signatures ADD id_petition bigint(21) DEFAULT '0' NOT NULL"), - array('sql_alter',"TABLE spip_signatures ADD INDEX id_petition (id_petition)"), - array('sql_updateq','spip_signatures',array('id_petition'=>-1)), + array('sql_alter', "TABLE spip_signatures ADD id_petition bigint(21) DEFAULT '0' NOT NULL"), + array('sql_alter', "TABLE spip_signatures ADD INDEX id_petition (id_petition)"), + array('sql_updateq', 'spip_signatures', array('id_petition' => -1)), ); $maj['1.1.5'] = array( array('upgrade_index_signatures'), ); $maj['1.1.6'] = array( - array('sql_alter',"TABLE spip_signatures DROP INDEX id_article"), - array('sql_alter',"TABLE spip_signatures DROP id_article"), + array('sql_alter', "TABLE spip_signatures DROP INDEX id_article"), + array('sql_alter', "TABLE spip_signatures DROP id_article"), ); include_spip('base/upgrade'); maj_plugin($nom_meta_base_version, $version_cible, $maj); } -function upgrade_index_signatures(){ - while ($rows = sql_allfetsel('DISTINCT id_article','spip_signatures','id_petition=-1','','','0,100')) { - $rows = array_map('reset',$rows); - foreach($rows as $id_article){ - $id_petition = sql_getfetsel('id_petition','spip_petitions','id_article='.intval($id_article)); - if (!$id_petition){ +function upgrade_index_signatures() { + while ($rows = sql_allfetsel('DISTINCT id_article', 'spip_signatures', 'id_petition=-1', '', '', '0,100')) { + $rows = array_map('reset', $rows); + foreach ($rows as $id_article) { + $id_petition = sql_getfetsel('id_petition', 'spip_petitions', 'id_article=' . intval($id_article)); + if (!$id_petition) { include_spip('action/editer_petition'); $id_petition = petition_inserer($id_article); - sql_updateq('spip_petitions',array('statut'=>'poubelle'),'id_petition='.$id_petition); + sql_updateq('spip_petitions', array('statut' => 'poubelle'), 'id_petition=' . $id_petition); } - sql_updateq('spip_signatures',array('id_petition'=>$id_petition),'id_article='.$id_article); + sql_updateq('spip_signatures', array('id_petition' => $id_petition), 'id_article=' . $id_article); } } } @@ -93,5 +96,3 @@ function petitions_vider_tables($nom_meta_base_version) { effacer_meta($nom_meta_base_version); } - -?> diff --git a/www/plugins-dist/petitions/petitions_autoriser.php b/www/plugins-dist/petitions/petitions_autoriser.php index ba354883..f0973f11 100644 --- a/www/plugins-dist/petitions/petitions_autoriser.php +++ b/www/plugins-dist/petitions/petitions_autoriser.php @@ -10,66 +10,143 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Définit les autorisations du plugin Pétitions + * + * @package SPIP\Petitions\Autorisations + **/ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -// fonction pour le pipeline -function petitions_autoriser() {} +/** + * Fonction d'appel pour le pipeline + * + * @pipeline autoriser + */ +function petitions_autoriser() { } -// Moderer la petition ? -// = modifier l'article correspondant -// = droits par defaut sinon (admin complet pour moderation de tout) -// https://code.spip.net/@autoriser_modererpetition_dist + +/** + * Autorisation de modérer une pétition + * + * Il faut avoir droit de modifier l'objet qui reçoit la pétition + * + * @param string $faire Action demandée + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation + * @return bool true s'il a le droit, false sinon + **/ function autoriser_modererpetition_dist($faire, $type, $id, $qui, $opt) { return autoriser('modifier', $type, $id, $qui, $opt); } /** - * Pour publier une signature il faut avoir le droit de moderer la petition de l'article en question - * @return bool + * Autorisation de publier une signature + * + * Il faut avoir le droit de modérer la petition de l'article en question + * + * @param string $faire Action demandée + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation + * @return bool true s'il a le droit, false sinon */ function autoriser_signature_publier($faire, $type, $id, $qui, $opt) { - $id_article = sql_getfetsel('P.id_article','spip_signatures AS S JOIN spip_petitions AS P ON P.id_petition=S.id_petition','S.id_signature='.intval($id)); + $id_article = sql_getfetsel('P.id_article', + 'spip_signatures AS S JOIN spip_petitions AS P ON P.id_petition=S.id_petition', 'S.id_signature=' . intval($id)); + return autoriser('modererpetition', 'article', $id_article, $qui, $opt); } /** - * Pour supprimer une signature il faut avoir le droit de moderer la petition de l'article en question - * @return bool + * Autorisation de supprimer une signature + * + * Il faut avoir le droit de modérer la petition de l'article en question + * + * @param string $faire Action demandée + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation + * @return bool true s'il a le droit, false sinon */ function autoriser_signature_supprimer($faire, $type, $id, $qui, $opt) { - $id_article = sql_getfetsel('P.id_article','spip_signatures AS S JOIN spip_petitions AS P ON P.id_petition=S.id_petition','S.id_signature='.intval($id)); + $id_article = sql_getfetsel('P.id_article', + 'spip_signatures AS S JOIN spip_petitions AS P ON P.id_petition=S.id_petition', 'S.id_signature=' . intval($id)); + return autoriser('modererpetition', 'article', $id_article, $qui, $opt); } /** - * Toute personne idenfiee peut relancer une signature non publiee - * @return bool + * Autorisation de relancer une signature + * + * Toute personne idenfiée peut relancer une signature non publiée + * + * @param string $faire Action demandée + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation + * @return bool true s'il a le droit, false sinon */ function autoriser_signature_relancer($faire, $type, $id, $qui, $opt) { - $statut = sql_getfetsel('statut','spip_signatures','id_signature='.intval($id)); - return ($qui['id_auteur'] && !in_array($statut,array('poubelle','publie'))); + $statut = sql_getfetsel('statut', 'spip_signatures', 'id_signature=' . intval($id)); + + return ($qui['id_auteur'] && !in_array($statut, array('poubelle', 'publie'))); } -// Modifier une signature ? -// = jamais ! -// https://code.spip.net/@autoriser_signature_modifier_dist +/** + * Autorisation de modifier une signature + * + * Jamais + * + * @param string $faire Action demandée + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation + * @return bool true s'il a le droit, false sinon + */ function autoriser_signature_modifier_dist($faire, $type, $id, $qui, $opt) { return false; } -function autoriser_controlerpetition_menu_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL){ - return sql_countsel('spip_signatures')>0; +/** + * Autorisation de voir le menu de gestion des signatures + * + * S'il y a au moins une signature + * + * @param string $faire Action demandée + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation + * @return bool true s'il a le droit, false sinon + */ +function autoriser_controlerpetition_menu_dist($faire, $type = '', $id = 0, $qui = null, $opt = null) { + return sql_countsel('spip_signatures') > 0; } /** - * Auto-association de documents sur des signatures : niet + * Autorisation d'auto-association de documents sur des signatures + * + * Jamais + * + * @param string $faire Action demandée + * @param string $type Type d'objet sur lequel appliquer l'action + * @param int $id Identifiant de l'objet + * @param array $qui Description de l'auteur demandant l'autorisation + * @param array $opt Options de cette autorisation + * @return bool true s'il a le droit, false sinon */ -function autoriser_signature_autoassocierdocument_dist($faire, $type, $id, $qui, $opts) { +function autoriser_signature_autoassocierdocument_dist($faire, $type, $id, $qui, $opt) { return false; } - -?> diff --git a/www/plugins-dist/petitions/petitions_fonctions.php b/www/plugins-dist/petitions/petitions_fonctions.php index a81af291..ced0ce7e 100644 --- a/www/plugins-dist/petitions/petitions_fonctions.php +++ b/www/plugins-dist/petitions/petitions_fonctions.php @@ -10,54 +10,65 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** - * #PETITION - * retourne '' si l'article courant n'a pas de petition - * le texte de celle-ci sinon (et ' ' si il est vide) - * cf FORMULAIRE_PETITION + * Compile la balise `#PETITION` permettant d'afficher, s'il existe, + * le texte de pétition associé à l'article. + * + * Retourne : + * + * - `''` si l'article courant n'a pas de pétition + * - le texte de celle-ci sinon (et `' '` si il est vide) * - * https://code.spip.net/@balise_PETITION_dist + * @see balise_FORMULAIRE_SIGNATURE() + * @link https://www.spip.net/3967 * - * @param $p - * @return + * @param Champ $p + * Pile au niveau de la balise + * @return Champ + * Pile complétée du code à générer */ -function balise_PETITION_dist ($p) { +function balise_PETITION_dist($p) { $nom = $p->id_boucle; $p->code = "quete_petitions(" . - champ_sql('id_article', $p) . - ",'" . - $p->boucles[$nom]->type_requete . - "','" . - $nom . - "','" . - $p->boucles[$nom]->sql_serveur . - "', \$Cache)"; + champ_sql('id_article', $p) . + ",'" . + $p->boucles[$nom]->type_requete . + "','" . + $nom . + "','" . + $p->boucles[$nom]->sql_serveur . + "', \$Cache)"; $p->interdire_scripts = false; + return $p; } -if(!function_exists('quete_petitions')) { -/** - * retourne le champ 'texte' d'une petition - * - * @param int $id_article - * @param string $table - * @param string $id_boucle - * @param string $serveur - * @param array $cache - * @return array|bool|null|string - */ -function quete_petitions($id_article, $table, $id_boucle, $serveur, &$cache) { - $retour = sql_getfetsel('texte', 'spip_petitions',("id_article=".intval($id_article)),'',array(),'','', $serveur); +if (!function_exists('quete_petitions')) { + /** + * retourne le champ 'texte' d'une petition + * + * @param int $id_article + * @param string $table + * @param string $id_boucle + * @param string $serveur + * @param array $cache + * @return array|bool|null|string + */ + function quete_petitions($id_article, $table, $id_boucle, $serveur, &$cache) { + $retour = sql_getfetsel('texte', 'spip_petitions', ("id_article=" . intval($id_article)), '', array(), '', '', + $serveur); - if ($retour === NULL) return ''; - # cette page est invalidee par toute petition - $cache['varia']['pet'.$id_article] = 1; - # ne pas retourner '' car le texte sert aussi de presence - return $retour ? $retour : ' '; -} -} + if ($retour === null) { + return ''; + } + # cette page est invalidee par toute petition + $cache['varia']['pet' . $id_article] = 1; -?> \ No newline at end of file + # ne pas retourner '' car le texte sert aussi de presence + return $retour ? $retour : ' '; + } +} diff --git a/www/plugins-dist/petitions/petitions_options.php b/www/plugins-dist/petitions/petitions_options.php index 28c65401..2413a246 100644 --- a/www/plugins-dist/petitions/petitions_options.php +++ b/www/plugins-dist/petitions/petitions_options.php @@ -10,14 +10,13 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} // si signature de petition, l'enregistrer avant d'afficher la page // afin que celle-ci contienne la signature if (isset($_GET['var_confirm'])) { - $confirmer_signature = charger_fonction('confirmer_signature','action'); + $confirmer_signature = charger_fonction('confirmer_signature', 'action'); $confirmer_signature($_GET['var_confirm']); } - - -?> \ No newline at end of file diff --git a/www/plugins-dist/petitions/petitions_pipelines.php b/www/plugins-dist/petitions/petitions_pipelines.php index 9fddcb8d..af0ad26a 100644 --- a/www/plugins-dist/petitions/petitions_pipelines.php +++ b/www/plugins-dist/petitions/petitions_pipelines.php @@ -10,7 +10,15 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Utilisations de pipelines + * + * @package SPIP\Petitions\Pipelines + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} /** * Boite de configuration des objets articles @@ -18,26 +26,28 @@ if (!defined('_ECRIRE_INC_VERSION')) return; * @param array $flux * @return array */ -function petitions_afficher_config_objet($flux){ - if ((($type = $flux['args']['type'])=='article') - AND ($id = $flux['args']['id'])){ - if (autoriser('modererpetition', $type, $id)){ +function petitions_afficher_config_objet($flux) { + if ((($type = $flux['args']['type']) == 'article') + and ($id = $flux['args']['id']) + ) { + if (autoriser('modererpetition', $type, $id)) { $table = table_objet($type); $id_table_objet = id_table_objet($type); - $flux['data'] .= recuperer_fond("prive/configurer/petitionner",array($id_table_objet=>$id)); + $flux['data'] .= recuperer_fond("prive/configurer/petitionner", array($id_table_objet => $id)); } } + return $flux; } /** - * Optimiser la base de donnee en supprimant les forums orphelins + * Optimiser la base de données en supprimant les pétitions orphelines * - * @param int $n - * @return int + * @param array $flux + * @return array */ -function petitions_optimiser_base_disparus($flux){ +function petitions_optimiser_base_disparus($flux) { $n = &$flux['data']; $mydate = $flux['args']['date']; @@ -45,16 +55,16 @@ function petitions_optimiser_base_disparus($flux){ // Signatures poubelles // - sql_delete("spip_petitions", "statut='poubelle' AND maj < $mydate"); + sql_delete("spip_petitions", "statut=" . sql_quote('poubelle') . " AND maj < " . sql_quote($mydate)); // rejeter les signatures non confirmees trop vieilles (20jours) - if (!defined('_PETITIONS_DELAI_SIGNATURES_REJETEES')) - define('_PETITIONS_DELAI_SIGNATURES_REJETEES',20); - sql_delete("spip_signatures", "NOT (statut='publie' OR statut='poubelle') AND NOT(" . sql_date_proche('date_time', -_PETITIONS_DELAI_SIGNATURES_REJETEES, ' DAY') . ')'); + if (!defined('_PETITIONS_DELAI_SIGNATURES_REJETEES')) { + define('_PETITIONS_DELAI_SIGNATURES_REJETEES', 20); + } + sql_delete("spip_signatures", "NOT (statut='publie' OR statut='poubelle') AND NOT(" . sql_date_proche('date_time', + -_PETITIONS_DELAI_SIGNATURES_REJETEES, ' DAY') . ')'); return $flux; } - -?> diff --git a/www/plugins-dist/petitions/prive/squelettes/contenu/controler_petition.html b/www/plugins-dist/petitions/prive/squelettes/contenu/controler_petition.html index d2cd8ba1..9469333c 100644 --- a/www/plugins-dist/petitions/prive/squelettes/contenu/controler_petition.html +++ b/www/plugins-dist/petitions/prive/squelettes/contenu/controler_petition.html @@ -24,7 +24,7 @@ [
      [(#ENV{ad_email}|ou{#ENV{url_site}}|ou{#ENV{id_signature}}) -[(#CHEMIN{images/annuler-recherche.png}|balise_img|inserer_attribut{alt,<:petitions:tout_voir:>})]] +[(#CHEMIN{images/fermer-16.png}|balise_img|inserer_attribut{alt,<:petitions:tout_voir:>})]]
      <:petitions:filtre:> (#ENV{ad_email}|sinon{#ENV{url_site}})
      ] diff --git a/www/plugins-dist/plan/action/deplacer_objets.php b/www/plugins-dist/plan/action/deplacer_objets.php new file mode 100644 index 00000000..5ec85175 --- /dev/null +++ b/www/plugins-dist/plan/action/deplacer_objets.php @@ -0,0 +1,109 @@ + $id_rubrique_new); + + foreach ($ids as $id) { + if (autoriser('modifier', $objet, $id)) { + if ($err = objet_modifier($objet, $id, $modifs)) { + $errors["$objet-$id"] = $err; + } else { + $success["$objet-$id"] = true; + } + } else { + $errors["$objet-$id"] = _T('plan:erreur_autorisation_insuffisante') . ' ' . _T('plan:erreur_deplacement_impossible'); + } + } + + // dans certains cas… on ne reçoit pas d'erreur… et pourtant ! + if (!$errors) { + // on verifie qu'il n'y a plus d'objets à l'ancien emplacement + $ids = sql_allfetsel( + $_id_table, + $table, + array(sql_in($_id_table, $ids), $champ . '=' . sql_quote($id_rubrique_old)) + ); + $ids = array_map('array_shift', $ids); + if ($ids) { + foreach ($ids as $id) { + $errors["$objet-$id"] = _T('plan:erreur_deplacement'); + unset($success["$objet-$id"]); + } + } + } + + return plan_json_envoi(array( + 'done' => true, + 'success' => $success, + 'errors' => $errors, + )); +} + +function plan_json_envoi($data) { + header('Content-Type: application/json; charset=' . $GLOBALS['meta']['charset']); + echo json_encode($data); +} + +function plan_json_erreur($msg) { + return plan_json_envoi(array( + 'done' => false, + 'success' => array(), + 'errors' => array($msg) + )); +} diff --git a/www/plugins-dist/plan/action/plan.php b/www/plugins-dist/plan/action/plan.php new file mode 100644 index 00000000..9cc19e65 --- /dev/null +++ b/www/plugins-dist/plan/action/plan.php @@ -0,0 +1,48 @@ + intval(_request('id_rubrique')), + // pour le dépliement d'une rubrique, ne pas lister le contenu récursivement + 'lister' => ($objet == 'rubriques') ? 'rubrique' : 'tout', + 'conteneur' => 'non' + ); + + if ($statut = _request('statut')) { + $env['statut'] = $statut; + } + + $fond = "prive/squelettes/inclure/plan-$objet"; + header('Content-Type: text/html; charset=' . $GLOBALS['meta']['charset']); + + if (trouver_fond($fond)) { + echo recuperer_fond($fond, $env); + } else { + echo ''; + } +} diff --git a/www/plugins-dist/plan/css/plan_prive.css.html b/www/plugins-dist/plan/css/plan_prive.css.html new file mode 100644 index 00000000..2d800c2d --- /dev/null +++ b/www/plugins-dist/plan/css/plan_prive.css.html @@ -0,0 +1,56 @@ +[(#REM)"; - echo minipres( _T('svp:installation_en_cours'), $pres . '

      ' . $btn . $styles); + echo minipres(_T('svp:installation_en_cours'), $pres . '

      ' . $btn . $styles); die(); } - redirige_par_entete(str_replace('&','&', $url)); + // s'il n'y avait en tout est pour tout qu'une seule action, rediriger directement + if ($actionneur->progression() === 1 and count($actionneur->done) === 1) { + redirige_par_entete(str_replace('&', '&', $url)); + } + // sinon bel affichage de la progression + svp_redirige_boucle( + str_replace('&', '&', $url), + $actionneur->presenter_derniere_action(), + $actionneur->progression() + ); + } + + foreach ($actionneur->done as $done) { + if ($done['todo'] == 'on') { + if ($voir = session_get('svp_admin_plugin_voir') + and $voir == 'inactif' + ) { + session_set('svp_admin_plugin_voir', 'actif'); + } + break; + } } - + include_spip('inc/svp_depoter_local'); svp_actualiser_paquets_locaux(); - if (!_request('redirect')) + if (!_request('redirect')) { $GLOBALS['redirect'] = generer_url_ecrire('admin_plugin'); - else - $GLOBALS['redirect'] = str_replace('&','&', _request('redirect')); - + } else { + $GLOBALS['redirect'] = str_replace('&', '&', _request('redirect')); + } } -?> +/** + * Redirections par refresh d'une URL afin d'éviter des blocages de redirections par les navigateurs + * lorsqu'elles sont trop nombreuses + * + * @param string $url + * @param string $texte Texte de l'action réalisée + * @param string $progres + */ +function svp_redirige_boucle($url, $texte, $progres){ + include_spip('inc/minipres'); + + //@apache_setenv('no-gzip', 1); // provoque page blanche chez certains hebergeurs donc ne pas utiliser + @ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure + @ini_set('output_buffering', 'off'); + @ini_set('implicit_flush', 1); + @ob_implicit_flush(1); + + $pres = ''; + $pres .=" +
      $texte
      +
      " . round($progres*100) . "%
      +
      + "; + + $styles = " + "; + + echo minipres(_T('svp:installation_en_cours'), $pres . $styles); + exit; +} diff --git a/www/plugins-dist/svp/action/actualiser_depot.php b/www/plugins-dist/svp/action/actualiser_depot.php index 61419ef3..529d4be4 100644 --- a/www/plugins-dist/svp/action/actualiser_depot.php +++ b/www/plugins-dist/svp/action/actualiser_depot.php @@ -6,12 +6,12 @@ * @license GPL * @package SPIP\SVP\Actions */ - + /** * Action de mise à jour en base de données de la liste des plugins * d'un ou de tous les dépots */ -function action_actualiser_depot_dist(){ +function action_actualiser_depot_dist() { // Securisation: aucun argument attendu $securiser_action = charger_fonction('securiser_action', 'inc'); @@ -32,17 +32,17 @@ function action_actualiser_depot_dist(){ if ($arg === 'tout') { if ($ids_depots = sql_allfetsel('id_depot', 'spip_depots')) { $ids_depots = array_map('reset', $ids_depots); - foreach ($ids_depots as $_id_depot) + foreach ($ids_depots as $_id_depot) { svp_actualiser_depot($_id_depot); + } // On consigne l'action spip_log("ACTION ACTUALISER TOUS LES DEPOTS (manuel)", 'svp_actions.' . _LOG_INFO); } - } - else if ($id_depot = intval($arg)) { - svp_actualiser_depot($id_depot); - // On consigne l'action - spip_log("ACTION ACTUALISER DEPOT (manuel) : id_depot = ". $id_depot, 'svp_actions.' . _LOG_INFO); + } else { + if ($id_depot = intval($arg)) { + svp_actualiser_depot($id_depot); + // On consigne l'action + spip_log("ACTION ACTUALISER DEPOT (manuel) : id_depot = " . $id_depot, 'svp_actions.' . _LOG_INFO); + } } } - -?> diff --git a/www/plugins-dist/svp/action/editer_depot.php b/www/plugins-dist/svp/action/editer_depot.php index b19ed870..c5f79a9e 100644 --- a/www/plugins-dist/svp/action/editer_depot.php +++ b/www/plugins-dist/svp/action/editer_depot.php @@ -17,14 +17,16 @@ * @license GPL * @package SPIP\SVP\Actions */ -if (!defined("_ECRIRE_INC_VERSION")) return; +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} /** - * Action de mise à jour des descriptions d'un dépot + * Action de mise à jour des descriptions d'un dépot * * @return array * Liste identifiant du dépot, texte d'erreur éventuel -**/ + **/ function action_editer_depot_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); @@ -49,17 +51,22 @@ function action_editer_depot_dist() { } // On met a jour le depot avec les saisies - if (sql_updateq('spip_depots', - array('titre'=> _request('titre'), - 'descriptif'=> _request('descriptif'), - 'type'=> _request('type')), - 'id_depot=' . sql_quote($id_depot))); - // Enregistre l'envoi dans la BD - // Dans le cas du depot rien n'est fait actuellement, on garde cette fonction - // par souci de coherence avec les autres editions d'objet et pour usage futur - $err = depots_set($id_depot); - if (!$err) - spip_log("ACTION MODIFIER DEPOT (manuel) : id_depot = ". $id_depot, 'svp_actions.' . _LOG_INFO); + if (sql_updateq('spip_depots', + array( + 'titre' => _request('titre'), + 'descriptif' => _request('descriptif'), + 'type' => _request('type') + ), + 'id_depot=' . sql_quote($id_depot))) { + ; + } + // Enregistre l'envoi dans la BD + // Dans le cas du depot rien n'est fait actuellement, on garde cette fonction + // par souci de coherence avec les autres editions d'objet et pour usage futur + $err = depots_set($id_depot); + if (!$err) { + spip_log("ACTION MODIFIER DEPOT (manuel) : id_depot = " . $id_depot, 'svp_actions.' . _LOG_INFO); + } } return array($id_depot, $err); @@ -72,12 +79,12 @@ function action_editer_depot_dist() { * * @note * Cette fonction ne fait rien actuellement !! - * + * * @param int $id_depot * Identifiant du dépot * @return string * Texte d'une eventuelle erreur -**/ + **/ function depots_set($id_depot) { $err = ''; @@ -92,5 +99,3 @@ function depots_set($id_depot) { return $err; } - -?> diff --git a/www/plugins-dist/svp/action/supprimer_depot.php b/www/plugins-dist/svp/action/supprimer_depot.php index ec853299..4ecca9fd 100644 --- a/www/plugins-dist/svp/action/supprimer_depot.php +++ b/www/plugins-dist/svp/action/supprimer_depot.php @@ -6,13 +6,14 @@ * @license GPL * @package SPIP\SVP\Actions */ - + /** * Action de suppression en base de données d'un dépot et de ses plugins * + * @uses svp_supprimer_depot() * @return void */ -function action_supprimer_depot_dist(){ +function action_supprimer_depot_dist() { // Securisation: aucun argument attendu $securiser_action = charger_fonction('securiser_action', 'inc'); @@ -29,8 +30,6 @@ function action_supprimer_depot_dist(){ if ($id_depot = intval($arg)) { include_spip('inc/svp_depoter_distant'); svp_supprimer_depot($id_depot); - spip_log("ACTION SUPPRIMER DEPOT (manuel) : id_depot = ". $id_depot, 'svp_actions.' . _LOG_INFO); + spip_log("ACTION SUPPRIMER DEPOT (manuel) : id_depot = " . $id_depot, 'svp_actions.' . _LOG_INFO); } } - -?> diff --git a/www/plugins-dist/svp/action/teleporter.php b/www/plugins-dist/svp/action/teleporter.php index e3f7386e..4e3e4e94 100644 --- a/www/plugins-dist/svp/action/teleporter.php +++ b/www/plugins-dist/svp/action/teleporter.php @@ -6,11 +6,11 @@ * @license GPL * @package SPIP\SVP\Actions */ - + /** * Téléporter et déballer un composant - * + * * @param string $methode * http|git|svn|... * @param string $source @@ -24,30 +24,34 @@ * String : texte d'une erreur * true si l'opération est correctement réalisée */ -function action_teleporter_composant_dist($methode,$source,$dest,$options=array()){ +function action_teleporter_composant_dist($methode, $source, $dest, $options = array()) { + # Si definie a '', le chargeur est interdit ; mais on n'aurait de toutes # facons jamais pu venir ici avec toutes les securisations faites :^) - - if (!preg_match(','.substr(_DIR_LIB,0,-1).',',$dest) && !_DIR_PLUGINS_AUTO) + # sauf si on doit télécharger une lib dans _DIR_LIB + if (!preg_match(',' . substr(_DIR_LIB, 0, -1) . ',', $dest) && !_DIR_PLUGINS_AUTO) { die('Vous ne pouvez pas télécharger, absence de _DIR_PLUGINS_AUTO'); + } // verifier que la methode est connue - if (!$teleporter = charger_fonction($methode,"teleporter",true)){ - spip_log("Methode $methode inconnue pour teleporter $source vers $dest","teleport"._LOG_ERREUR); - return _T('svp:erreur_teleporter_methode_inconue',array('methode' => $methode)); + if (!$teleporter = charger_fonction($methode, "teleporter", true)) { + spip_log("Methode $methode inconnue pour teleporter $source vers $dest", "teleport" . _LOG_ERREUR); + + return _T('svp:erreur_teleporter_methode_inconue', array('methode' => $methode)); } - if (!$dest = teleporter_verifier_destination($d = $dest)){ - spip_log("Rerpertoire $d non accessible pour teleporter $source vers $d","teleport"._LOG_ERREUR); - return _T('svp:erreur_teleporter_destination_erreur',array('dir' => $d)); + if (!$dest = teleporter_verifier_destination($d = $dest)) { + spip_log("Rerpertoire $d non accessible pour teleporter $source vers $d", "teleport" . _LOG_ERREUR); + + return _T('svp:erreur_teleporter_destination_erreur', array('dir' => $d)); #$texte = "

      "._T('plugin_erreur_droit1',array('dest'=>$dest))."

      " - # . "

      "._T('plugin_erreur_droit2').aide('install0')."

      "; + # . "

      "._T('plugin_erreur_droit2').aider('install0')."

      "; } # destination temporaire des fichiers si besoin $options['dir_tmp'] = sous_repertoire(_DIR_CACHE, 'chargeur'); - return $teleporter($methode,$source,$dest,$options); + return $teleporter($methode, $source, $dest, $options); } @@ -59,28 +63,31 @@ function action_teleporter_composant_dist($methode,$source,$dest,$options=array( * false en cas d'échec * Chemin du répertoire sinon */ -function teleporter_verifier_destination($dest){ - $dest = rtrim($dest,"/"); +function teleporter_verifier_destination($dest) { + $dest = rtrim($dest, "/"); $final = basename($dest); $base = dirname($dest); $create = array(); // on cree tout le chemin jusqu'a dest non inclus - while (!is_dir($base)){ + while (!is_dir($base)) { $create[] = basename($base); $base = dirname($base); } - while (count($create)){ - if (!is_writable($base)) + while (count($create)) { + if (!is_writable($base)) { return false; - $base = sous_repertoire($base,array_pop($create)); - if (!$base) + } + $base = sous_repertoire($base, array_pop($create)); + if (!$base) { return false; + } } - if (!is_writable($base)) + if (!is_writable($base)) { return false; + } - return $base."/$final"; + return $base . "/$final"; } /** @@ -89,22 +96,24 @@ function teleporter_verifier_destination($dest){ * Si le répertoire donné existe, le déplace dans un répertoire de backup. * Si ce backup existe déjà, il est supprimé auparavant. * Retourne le nouveau chemin du répertoire. - * + * * @param string $dest * Chemin du répertoire à déplacer * @return string * Nouveau chemin du répertoire s'il existait, * Chaîne vide sinon -**/ -function teleporter_nettoyer_vieille_version($dest){ + **/ +function teleporter_nettoyer_vieille_version($dest) { $old = ""; - if (is_dir($dest)){ + if (is_dir($dest)) { $dir = dirname($dest); $base = basename($dest); - $old="$dir/.$base.bck"; - if (is_dir($old)) + $old = "$dir/.$base.bck"; + if (is_dir($old)) { supprimer_repertoire($old); - rename($dest,$old); + } + rename($dest, $old); } + return $old; } diff --git a/www/plugins-dist/svp/base/svp_declarer.php b/www/plugins-dist/svp/base/svp_declarer.php index 77bfa811..9feb11d6 100644 --- a/www/plugins-dist/svp/base/svp_declarer.php +++ b/www/plugins-dist/svp/base/svp_declarer.php @@ -1,11 +1,11 @@ 'depots', - 'type' => 'depot', - 'field' => array( - "id_depot" => "bigint(21) NOT NULL", - "titre" => "text DEFAULT '' NOT NULL", - "descriptif" => "text DEFAULT '' NOT NULL", - "type" => "varchar(10) DEFAULT '' NOT NULL", - "url_serveur" => "varchar(255) DEFAULT '' NOT NULL", // url du serveur svn ou git - "url_brouteur" => "varchar(255) DEFAULT '' NOT NULL", // url de l'interface de gestion du repository (trac, redmine...) - "url_archives" => "varchar(255) DEFAULT '' NOT NULL", // url de base des zips - "url_commits" => "varchar(255) DEFAULT '' NOT NULL", // url du flux rss des commits du serveur svn ou git - "xml_paquets" => "varchar(255) DEFAULT '' NOT NULL", // chemin complet du fichier xml du depot - "sha_paquets" => "varchar(40) DEFAULT '' NOT NULL", - "nbr_paquets" => "integer DEFAULT 0 NOT NULL", - "nbr_plugins" => "integer DEFAULT 0 NOT NULL", - "nbr_autres" => "integer DEFAULT 0 NOT NULL", // autres contributions, non plugin - "maj" => "timestamp"), - 'key' => array( - "PRIMARY KEY" => "id_depot"), - 'tables_jointures' => array('id_plugin' => 'depots_plugins'), - 'principale' => 'oui', + 'table_objet' => 'depots', + 'type' => 'depot', + 'field' => array( + "id_depot" => "bigint(21) NOT NULL", + "titre" => "text DEFAULT '' NOT NULL", + "descriptif" => "text DEFAULT '' NOT NULL", + "type" => "varchar(10) DEFAULT '' NOT NULL", + "url_serveur" => "varchar(255) DEFAULT '' NOT NULL", + // url du serveur svn ou git + "url_brouteur" => "varchar(255) DEFAULT '' NOT NULL", + // url de l'interface de gestion du repository (trac, redmine...) + "url_archives" => "varchar(255) DEFAULT '' NOT NULL", + // url de base des zips + "url_commits" => "varchar(255) DEFAULT '' NOT NULL", + // url du flux rss des commits du serveur svn ou git + "xml_paquets" => "varchar(255) DEFAULT '' NOT NULL", + // chemin complet du fichier xml du depot + "sha_paquets" => "varchar(40) DEFAULT '' NOT NULL", + "nbr_paquets" => "integer DEFAULT 0 NOT NULL", + "nbr_plugins" => "integer DEFAULT 0 NOT NULL", + "nbr_autres" => "integer DEFAULT 0 NOT NULL", + // autres contributions, non plugin + "maj" => "timestamp" + ), + 'key' => array( + "PRIMARY KEY" => "id_depot" + ), + 'tables_jointures' => array('id_plugin' => 'depots_plugins'), + 'principale' => 'oui', // Titre, date et gestion du statut - 'titre' => "titre, '' AS lang", - + 'titre' => "titre, '' AS lang", + // Edition, affichage et recherche - 'page' => 'depot', - 'url_voir' => 'depot', - 'url_edit' => 'depot_edit', - 'editable' => lire_config('svp/depot_editable', 'non'), - 'champs_editables' => array('titre', 'descriptif'), - 'icone_objet' => 'depot', - + 'page' => 'depot', + 'url_voir' => 'depot', + 'url_edit' => 'depot_edit', + 'editable' => lire_config('svp/depot_editable', 'non'), + 'champs_editables' => array('titre', 'descriptif'), + 'icone_objet' => 'depot', + // Textes standard - 'texte_retour' => 'icone_retour', - 'texte_modifier' => 'svp:bouton_modifier_depot', - 'texte_creer' => '', - 'texte_creer_associer' => '', + 'texte_retour' => 'icone_retour', + 'texte_modifier' => 'svp:bouton_modifier_depot', + 'texte_creer' => '', + 'texte_creer_associer' => '', 'texte_signale_edition' => '', - 'texte_objet' => 'svp:titre_depot', - 'texte_objets' => 'svp:titre_depots', - 'info_aucun_objet' => 'svp:info_aucun_depot', - 'info_1_objet' => 'svp:info_1_depot', - 'info_nb_objets' => 'svp:info_nb_depots', - 'texte_logo_objet' => 'svp:titre_logo_depot', + 'texte_objet' => 'svp:titre_depot', + 'texte_objets' => 'svp:titre_depots', + 'info_aucun_objet' => 'svp:info_aucun_depot', + 'info_1_objet' => 'svp:info_1_depot', + 'info_nb_objets' => 'svp:info_nb_depots', + 'texte_logo_objet' => 'svp:titre_logo_depot', ); // Table des plugins $tables['spip_plugins'] = array( // Base de donnees - 'table_objet' => 'plugins', - 'type' => 'plugin', - 'field' => array( - "id_plugin" => "bigint(21) NOT NULL", - "prefixe" => "varchar(30) DEFAULT '' NOT NULL", - "nom" => "text DEFAULT '' NOT NULL", - "slogan" => "text DEFAULT '' NOT NULL", - "categorie" => "varchar(100) DEFAULT '' NOT NULL", - "tags" => "text DEFAULT '' NOT NULL", - "vmax" => "varchar(24) DEFAULT '' NOT NULL", // version la plus elevee des paquets du plugin - "date_crea" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // la plus ancienne des paquets du plugin - "date_modif" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // la plus recente des paquets du plugin - "compatibilite_spip" => "varchar(24) DEFAULT '' NOT NULL", // union des intervalles des paquets du plugin - "branches_spip" => "varchar(255) DEFAULT '' NOT NULL"), // union des branches spip supportees par les paquets du plugin - 'key' => array( - "PRIMARY KEY" => "id_plugin", - "KEY prefixe" => "prefixe"), - 'tables_jointures' => array('id_depot' => 'depots_plugins'), - 'principale' => 'oui', + 'table_objet' => 'plugins', + 'type' => 'plugin', + 'field' => array( + "id_plugin" => "bigint(21) NOT NULL", + "prefixe" => "varchar(30) DEFAULT '' NOT NULL", + "nom" => "text DEFAULT '' NOT NULL", + "slogan" => "text DEFAULT '' NOT NULL", + "categorie" => "varchar(100) DEFAULT '' NOT NULL", + "tags" => "text DEFAULT '' NOT NULL", + "vmax" => "varchar(24) DEFAULT '' NOT NULL", // version la plus elevee des paquets du plugin + "date_crea" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // la plus ancienne des paquets du plugin + "date_modif" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // la plus recente des paquets du plugin + "compatibilite_spip" => "varchar(24) DEFAULT '' NOT NULL", // union des intervalles des paquets du plugin + "branches_spip" => "varchar(255) DEFAULT '' NOT NULL" + ), // union des branches spip supportees par les paquets du plugin + 'key' => array( + "PRIMARY KEY" => "id_plugin", + "KEY prefixe" => "prefixe" + ), + 'tables_jointures' => array('id_depot' => 'depots_plugins'), + 'principale' => 'oui', // Titre, date et gestion du statut - 'titre' => "prefixe AS titre, '' AS lang", - + 'titre' => "prefixe AS titre, '' AS lang", + // Edition, affichage et recherche - 'page' => 'plugin', - 'url_voir' => 'plugin', - 'editable' => 'non', - 'champs_editables' => array(), - 'rechercher_champs' => array('prefixe' => 8, 'nom' => 8, 'slogan' => 4), - 'rechercher_jointures' => array('paquet' => array('auteur' => 8, 'description' => 2)), - 'icone_objet' => 'plugin', - + 'page' => 'plugin', + 'url_voir' => 'plugin', + 'editable' => 'non', + 'champs_editables' => array(), + 'rechercher_champs' => array('prefixe' => 8, 'nom' => 8, 'slogan' => 4), + 'rechercher_jointures' => array('paquet' => array('auteur' => 8, 'description' => 2)), + 'icone_objet' => 'plugin', + // Textes standard - 'texte_retour' => 'icone_retour', - 'texte_modifier' => '', - 'texte_creer' => '', - 'texte_creer_associer' => '', + 'texte_retour' => 'icone_retour', + 'texte_modifier' => '', + 'texte_creer' => '', + 'texte_creer_associer' => '', 'texte_signale_edition' => '', - 'texte_objet' => 'svp:titre_plugin', - 'texte_objets' => 'svp:titre_plugins', - 'info_aucun_objet' => 'svp:info_aucun_plugin', - 'info_1_objet' => 'svp:info_1_plugin', - 'info_nb_objets' => 'svp:info_nb_plugins', - 'texte_logo_objet' => 'svp:titre_logo_plugin', + 'texte_objet' => 'svp:titre_plugin', + 'texte_objets' => 'svp:titre_plugins', + 'info_aucun_objet' => 'svp:info_aucun_plugin', + 'info_1_objet' => 'svp:info_1_plugin', + 'info_nb_objets' => 'svp:info_nb_plugins', + 'texte_logo_objet' => 'svp:titre_logo_plugin', ); $tables['spip_paquets'] = array( // Base de donnees - 'table_objet' => 'paquets', - 'type' => 'paquet', - 'field' => array( - "id_paquet" => "bigint(21) NOT NULL", - "id_plugin" => "bigint(21) NOT NULL", - "prefixe" => "varchar(30) DEFAULT '' NOT NULL", - "logo" => "varchar(255) DEFAULT '' NOT NULL", // chemin du logo depuis la racine du plugin - "version" => "varchar(24) DEFAULT '' NOT NULL", - "version_base" => "varchar(24) DEFAULT '' NOT NULL", - "compatibilite_spip" => "varchar(24) DEFAULT '' NOT NULL", - "branches_spip" => "varchar(255) DEFAULT '' NOT NULL", // branches spip supportees (cf meta) - "description" => "text DEFAULT '' NOT NULL", - "auteur" => "text DEFAULT '' NOT NULL", - "credit" => "text DEFAULT '' NOT NULL", - "licence" => "text DEFAULT '' NOT NULL", - "copyright" => "text DEFAULT '' NOT NULL", - "lien_doc" => "text DEFAULT '' NOT NULL", // lien vers la documentation - "lien_demo" => "text DEFAULT '' NOT NULL", // lien vers le site de demo - "lien_dev" => "text DEFAULT '' NOT NULL", // lien vers le site de dev - "etat" => "varchar(16) DEFAULT '' NOT NULL", - "etatnum" => "int(1) DEFAULT 0 NOT NULL", // 0 aucune indication - 1 exp - 2 dev - 3 test - 4 stable - "dependances" => "text DEFAULT '' NOT NULL", - "date_crea" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", - "date_modif" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", - "id_depot" => "bigint(21) DEFAULT 0 NOT NULL", // 0 pour un paquet local - "nom_archive" => "VARCHAR(255) DEFAULT '' NOT NULL", // nom du zip du paquet, depuis l'adresse de la zone - "nbo_archive" => "integer DEFAULT 0 NOT NULL", // taille de l'archive en octets - "maj_archive" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // date de mise a jour de l'archive - "src_archive" => "VARCHAR(255) DEFAULT '' NOT NULL", // source de l'archive sur le depot - "traductions" => "text DEFAULT '' NOT NULL", // tableau serialise par module des langues traduites et de leurs traducteurs - "actif" => "varchar(3) DEFAULT 'non' NOT NULL", // est actif ? oui / non - "installe" => "varchar(3) DEFAULT 'non' NOT NULL", // est desinstallable ? oui / non - "recent" => "int(2) DEFAULT 0 NOT NULL", // a ete utilise recemment ? > 0 : oui - "maj_version" => "VARCHAR(255) DEFAULT '' NOT NULL", // version superieure existante (mise a jour possible) - "superieur" => "varchar(3) DEFAULT 'non' NOT NULL", // superieur : version plus recente disponible (distant) d'un plugin (actif?) existant - "obsolete" => "varchar(3) DEFAULT 'non' NOT NULL", // obsolete : version plus ancienne (locale) disponible d'un plugin local existant - "attente" => "varchar(3) DEFAULT 'non' NOT NULL", // attente : plugin semi actif (il etait actif, mais il lui manque maintenant une dependance : il reste coche actif jusqu'a resolution ou desactivation manuelle) - "constante" => "VARCHAR(30) DEFAULT '' NOT NULL", // nom de la constante _DIR_(PLUGINS|EXTENSIONS|PLUGINS_SUPP) - "signature" => "VARCHAR(32) DEFAULT '' NOT NULL"), // hash MD5 d'un paquet - 'key' => array( - "PRIMARY KEY" => "id_paquet", - "KEY id_plugin" => "id_plugin"), - 'join' => array( - "id_paquet" => "id_paquet", - "id_plugin" => "id_plugin"), - 'principale' => 'oui', + 'table_objet' => 'paquets', + 'type' => 'paquet', + 'field' => array( + "id_paquet" => "bigint(21) NOT NULL", + "id_plugin" => "bigint(21) NOT NULL", + "prefixe" => "varchar(30) DEFAULT '' NOT NULL", + "logo" => "varchar(255) DEFAULT '' NOT NULL", + // chemin du logo depuis la racine du plugin + "version" => "varchar(24) DEFAULT '' NOT NULL", + "version_base" => "varchar(24) DEFAULT '' NOT NULL", + "compatibilite_spip" => "varchar(24) DEFAULT '' NOT NULL", + "branches_spip" => "varchar(255) DEFAULT '' NOT NULL", + // branches spip supportees (cf meta) + "description" => "text DEFAULT '' NOT NULL", + "auteur" => "text DEFAULT '' NOT NULL", + "credit" => "text DEFAULT '' NOT NULL", + "licence" => "text DEFAULT '' NOT NULL", + "copyright" => "text DEFAULT '' NOT NULL", + "lien_doc" => "text DEFAULT '' NOT NULL", + // lien vers la documentation + "lien_demo" => "text DEFAULT '' NOT NULL", + // lien vers le site de demo + "lien_dev" => "text DEFAULT '' NOT NULL", + // lien vers le site de dev + "etat" => "varchar(16) DEFAULT '' NOT NULL", + "etatnum" => "int(1) DEFAULT 0 NOT NULL", + // 0 aucune indication - 1 exp - 2 dev - 3 test - 4 stable + "dependances" => "text DEFAULT '' NOT NULL", + "procure" => "text DEFAULT '' NOT NULL", + "date_crea" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", + "date_modif" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", + "id_depot" => "bigint(21) DEFAULT 0 NOT NULL", + // 0 pour un paquet local + "nom_archive" => "VARCHAR(255) DEFAULT '' NOT NULL", + // nom du zip du paquet, depuis l'adresse de la zone + "nbo_archive" => "integer DEFAULT 0 NOT NULL", + // taille de l'archive en octets + "maj_archive" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", + // date de mise a jour de l'archive + "src_archive" => "VARCHAR(255) DEFAULT '' NOT NULL", + // source de l'archive sur le depot + "traductions" => "text DEFAULT '' NOT NULL", + // tableau serialise par module des langues traduites et de leurs traducteurs + "actif" => "varchar(3) DEFAULT 'non' NOT NULL", + // est actif ? oui / non + "installe" => "varchar(3) DEFAULT 'non' NOT NULL", + // est desinstallable ? oui / non + "recent" => "int(2) DEFAULT 0 NOT NULL", + // a ete utilise recemment ? > 0 : oui + "maj_version" => "VARCHAR(255) DEFAULT '' NOT NULL", + // version superieure existante (mise a jour possible) + "superieur" => "varchar(3) DEFAULT 'non' NOT NULL", + // superieur : version plus recente disponible (distant) d'un plugin (actif?) existant + "obsolete" => "varchar(3) DEFAULT 'non' NOT NULL", + // obsolete : version plus ancienne (locale) disponible d'un plugin local existant + "attente" => "varchar(3) DEFAULT 'non' NOT NULL", + // attente : plugin semi actif (il etait actif, mais il lui manque maintenant une dependance : il reste coche actif jusqu'a resolution ou desactivation manuelle) + "constante" => "VARCHAR(30) DEFAULT '' NOT NULL", + // nom de la constante _DIR_(PLUGINS|EXTENSIONS|PLUGINS_SUPP) + "signature" => "VARCHAR(32) DEFAULT '' NOT NULL" + ), // hash MD5 d'un paquet + 'key' => array( + "PRIMARY KEY" => "id_paquet", + "KEY id_plugin" => "id_plugin" + ), + 'join' => array( + "id_paquet" => "id_paquet", + "id_plugin" => "id_plugin" + ), + 'principale' => 'oui', // Titre, date et gestion du statut - 'titre' => "nom_archive AS titre, '' AS lang", - + 'titre' => "nom_archive AS titre, '' AS lang", + // Edition, affichage et recherche - 'page' => 'paquet', - 'url_voir' => '', - 'editable' => 'non', - 'champs_editables' => array(), - 'rechercher_champs' => array(), - 'rechercher_jointures' => array(), - 'icone_objet' => 'paquet', - + 'page' => 'paquet', + 'url_voir' => '', + 'editable' => 'non', + 'champs_editables' => array(), + 'rechercher_champs' => array(), + 'rechercher_jointures' => array(), + 'icone_objet' => 'paquet', + // Textes standard - 'texte_retour' => '', - 'texte_modifier' => '', - 'texte_creer' => '', - 'texte_creer_associer' => '', + 'texte_retour' => '', + 'texte_modifier' => '', + 'texte_creer' => '', + 'texte_creer_associer' => '', 'texte_signale_edition' => '', - 'texte_objet' => 'svp:titre_paquet', - 'texte_objets' => 'svp:titre_paquets', - 'info_aucun_objet' => 'svp:info_aucun_paquet', - 'info_1_objet' => 'svp:info_1_paquet', - 'info_nb_objets' => 'svp:info_nb_paquets', - 'texte_logo_objet' => '', + 'texte_objet' => 'svp:titre_paquet', + 'texte_objets' => 'svp:titre_paquets', + 'info_aucun_objet' => 'svp:info_aucun_paquet', + 'info_1_objet' => 'svp:info_1_paquet', + 'info_nb_objets' => 'svp:info_nb_paquets', + 'texte_logo_objet' => '', ); return $tables; @@ -215,15 +249,15 @@ function svp_declarer_tables_objets_sql($tables) { function svp_declarer_tables_auxiliaires($tables_auxiliaires) { // Tables de liens entre plugins et depots : spip_depots_plugins $spip_depots_plugins = array( - "id_depot" => "bigint(21) NOT NULL", - "id_plugin" => "bigint(21) NOT NULL" + "id_depot" => "bigint(21) NOT NULL", + "id_plugin" => "bigint(21) NOT NULL" ); $spip_depots_plugins_key = array( - "PRIMARY KEY" => "id_depot, id_plugin" + "PRIMARY KEY" => "id_depot, id_plugin" ); - $tables_auxiliaires['spip_depots_plugins'] = + $tables_auxiliaires['spip_depots_plugins'] = array('field' => &$spip_depots_plugins, 'key' => &$spip_depots_plugins_key); return $tables_auxiliaires; @@ -240,7 +274,7 @@ function svp_declarer_tables_auxiliaires($tables_auxiliaires) { */ function svp_declarer_tables_interfaces($interface) { // Les tables : permet d'appeler une boucle avec le *type* de la table uniquement - $interface['table_des_tables']['depots'] = 'depots'; + $interface['table_des_tables']['depots'] = 'depots'; $interface['table_des_tables']['plugins'] = 'plugins'; $interface['table_des_tables']['paquets'] = 'paquets'; $interface['table_des_tables']['depots_plugins'] = 'depots_plugins'; @@ -256,5 +290,3 @@ function svp_declarer_tables_interfaces($interface) { return $interface; } - -?> diff --git a/www/plugins-dist/svp/exec/admin_plugin.php b/www/plugins-dist/svp/exec/admin_plugin.php index e1295e6b..fcb206c7 100644 --- a/www/plugins-dist/svp/exec/admin_plugin.php +++ b/www/plugins-dist/svp/exec/admin_plugin.php @@ -19,14 +19,25 @@ * * @plugin SVP pour SPIP * @license GPL - * @package SPIP\SVP\Actions + * @package SPIP\SVP\Exec */ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/presentation'); /** * Affichage de la page de gestion des plugins + * + * @uses actualise_plugins_actifs() + * @uses svp_presenter_actions_realisees() + * @uses plugin_installes_meta() + * @uses plugin_donne_erreurs() + * @uses svp_vider_tables() + * + * @pipeline_appel affiche_gauche + * @pipeline_appel affiche_droite */ function exec_admin_plugin_dist() { @@ -39,10 +50,10 @@ function exec_admin_plugin_dist() { // et l'installation des qu'on est dans la colonne principale // si jamais la liste des plugins actifs change, il faut faire un refresh du hit // pour etre sur que les bons fichiers seront charges lors de l'install - include_spip('inc/plugin'); + include_spip('inc/plugin'); $new = actualise_plugins_actifs(); - if ($new AND _request('actualise')<2) { - $url = parametre_url(self(),'actualise',_request('actualise')+1,'&'); + if ($new and _request('actualise') < 2) { + $url = parametre_url(self(), 'actualise', _request('actualise') + 1, '&'); include_spip('inc/headers'); echo redirige_formulaire($url); exit; @@ -64,18 +75,18 @@ function exec_admin_plugin_dist() { // car dans le html d'un squelette, encapsule dans un ob_start()/ob_flush(), // la redirection en cas de timeout sur une installation ne se fait pas. -/* - // on installe les plugins maintenant, - // cela permet aux scripts d'install de faire des affichages (moches...) - plugin_installes_meta(); - - // les squelettes ne peuvent pas s'appeler 'admin_plugin' - // sinon Z les charge en priorite par rapport a ce fichier exec en PHP - set_request('fond', 'svp_admin_plugin'); - - // on lance l'affichage standard Z - include_spip('exec/fond'); -*/ + /* + // on installe les plugins maintenant, + // cela permet aux scripts d'install de faire des affichages (moches...) + plugin_installes_meta(); + + // les squelettes ne peuvent pas s'appeler 'admin_plugin' + // sinon Z les charge en priorite par rapport a ce fichier exec en PHP + set_request('fond', 'svp_admin_plugin'); + + // on lance l'affichage standard Z + include_spip('exec/fond'); + */ // liste des erreurs mises en forme @@ -89,40 +100,75 @@ function exec_admin_plugin_dist() { echo pipeline('affiche_gauche', array( - 'args'=>array('exec'=>'admin_plugin'), - 'data'=> recuperer_fond('prive/squelettes/navigation/svp_admin_plugin') + 'args' => array('exec' => 'admin_plugin'), + 'data' => recuperer_fond('prive/squelettes/navigation/svp_admin_plugin') ) ); echo debut_droite('plugin', true); + echo gros_titre(_T('icone_admin_plugin'), '', false); + // alerte si mode de compatibilité forcée - $mode_compat = defined('_DEV_PLUGINS') ? - ''. _T('svp:alerte_compatibilite') .'' : ''; - - echo gros_titre(_T('icone_admin_plugin') . $mode_compat, '', false); + if (defined('_DEV_VERSION_SPIP_COMPAT')) { + echo '
      ' + . '' . _T('svp:alerte_compatibilite') . '
      ' + . _T('svp:alerte_compatibilite_version_autorisee', array('version' => _DEV_VERSION_SPIP_COMPAT)) + . '
      '; + } // message d'erreur au retour d'une operation - if ($erreur_activation){ + if ($erreur_activation) { include_spip('inc/filtres_boites'); - echo "
      " . boite_ouvrir(_T('svp:actions_en_erreur'), 'error') . $erreur_activation . boite_fermer() . "
      "; + echo "
      " . boite_ouvrir(_T('svp:actions_en_erreur'), + 'error') . $erreur_activation . boite_fermer() . "
      "; } // afficher les actions realisees s'il y en a eu // (activation/desactivation/telechargement...) echo svp_presenter_actions_realisees(); - + // on installe les plugins maintenant, // cela permet aux scripts d'install de faire des affichages (moches...) plugin_installes_meta(); + $args = $_REQUEST; + // quand on demande un 'voir', on le memorise en session utilisateur + if (isset($args['voir'])) { + session_set('svp_admin_plugin_voir', $args['voir']); + } + if (!isset($args['voir']) + and $voir = session_get('svp_admin_plugin_voir') + and in_array($voir, array('tous', 'actif', 'inactif')) + ) { + $args['voir'] = $voir; + } + if (!isset($args['voir'])) { + /*$args['voir'] = 'tous'; + $count = count(liste_plugin_files()); + if ($count>256) */ + $args['voir'] = 'actif'; + } - echo recuperer_fond('prive/squelettes/contenu/svp_admin_plugin', $_REQUEST, array('ajax' => true)); + if (isset($args['verrouille'])) { + session_set('svp_admin_plugin_verrouille', $args['verrouille']); + } + if (!isset($args['verrouille']) + and $verrouille = session_get('svp_admin_plugin_verrouille') + and in_array($verrouille, array('tous', 'oui', 'non')) + ) { + $args['verrouille'] = $verrouille; + } + if (!isset($args['verrouille'])) { + $args['verrouille'] = 'non'; //'tous'; + } + + echo recuperer_fond('prive/squelettes/contenu/svp_admin_plugin', $args, array('ajax' => true)); echo pipeline('affiche_milieu', array( - 'args'=>array('exec'=>'admin_plugin'), - 'data'=>'' + 'args' => array('exec' => 'admin_plugin'), + 'data' => '' ) ); @@ -141,11 +187,11 @@ function exec_admin_plugin_dist() { * dans l'URL (ce lien est justement disponible si l'auteur des actions * tombe sur cette page alors qu'il reste des actions à faire, ce qui * signale en général un problème) - * + * * @return string * Code HTML présentant les actions réalisées * Vide si rien ne s'est passé ! -**/ + **/ function svp_presenter_actions_realisees() { // presenter les traitements realises... si tel est le cas... include_spip('inc/svp_actionner'); @@ -160,7 +206,7 @@ function svp_presenter_actions_realisees() { $pres = $actionneur->presenter_actions($fin = true); // s'il ne reste aucune action a faire - if (!$actionneur->est_verrouille() OR !count($actionneur->end)) { + if (!$actionneur->est_verrouille() or !count($actionneur->end)) { $actionneur->nettoyer_actions(); } diff --git a/www/plugins-dist/svp/formulaires/admin_plugin.html b/www/plugins-dist/svp/formulaires/admin_plugin.html index a2725fef..921e1037 100644 --- a/www/plugins-dist/svp/formulaires/admin_plugin.html +++ b/www/plugins-dist/svp/formulaires/admin_plugin.html @@ -3,25 +3,26 @@ [(#BOITE_OUVRIR{<:svp:actions_en_erreur:>, error})] <:svp:erreurs_xml:>
        - -
      • [(#VALEUR|htmlspecialchars_decode{#EVAL{ENT_QUOTES}})]
      • + +
      • #VALEUR*
      #BOITE_FERMER
      -

      [(#CHEMIN_IMAGE{plugin-24.png}|balise_img{icone plugin-24,cadre-icone})]<:plugins_liste:>

      +

      [(#CHEMIN_IMAGE{plugin-24.png}|balise_img{icone plugin-24,cadre-icone})]<:plugins_liste:>

      + [

      (#ENV*{message_erreur})

      ] [

      (#ENV*{message_ok})

      ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE

      [(#ENV{verrouille}|=={oui}|oui) - #SET{dir_plugins_dist,#EVAL{_DIR_PLUGINS_DIST}|joli_repertoire} + #SET{dir_plugins_dist,#CONST{_DIR_PLUGINS_DIST}|joli_repertoire} <:svp:info_admin_plugin_verrouille{dir_plugins_dist=#GET{dir_plugins_dist}}:> ][(#ENV{verrouille}|=={oui}|non) [(#VAL{svp:info_admin_plugin}|concat{[_actif_(#ENV{actif, oui})], [_verrou_(#ENV{verrouille, non})]}|_T)] @@ -31,7 +32,7 @@

      - [
      (#VAL{'_DIR_PLUGINS_DIST'}|in_array{#ENV{constante,#ARRAY}}|non) + [
      (#CONST{_DIR_PLUGINS_DIST}|in_array{#ENV{constante,#ARRAY}}|non)

      <:svp:tout_cocher:> | <:svp:tout_decocher:> | @@ -41,26 +42,48 @@ [(#ENV{actif}|=={oui}|non)] [(#ENV{actif}|=={non}|non)] - [(#ENV{actif}|=={non}|non)] + [(#ENV{actif}|=={non}|non|et{#AUTORISER{webmestre}}|oui)]

      ]
      diff --git a/www/plugins-dist/svp/formulaires/admin_plugin.php b/www/plugins-dist/svp/formulaires/admin_plugin.php index 9dcc8a50..a2cc3748 100644 --- a/www/plugins-dist/svp/formulaires/admin_plugin.php +++ b/www/plugins-dist/svp/formulaires/admin_plugin.php @@ -1,18 +1,21 @@ diff --git a/www/plugins-dist/svp/formulaires/ajouter_depot.html b/www/plugins-dist/svp/formulaires/ajouter_depot.html index fa9ac4ad..8e0926a3 100644 --- a/www/plugins-dist/svp/formulaires/ajouter_depot.html +++ b/www/plugins-dist/svp/formulaires/ajouter_depot.html @@ -8,11 +8,11 @@ [(#REM) ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE

      <:svp:info_ajouter_depot:>

      -
        -
      • +
        +

        <:svp:info_fichier_depot:> @@ -20,8 +20,8 @@

        [(#ENV{erreurs}|table_valeur{xml_paquets})] -
      • -
      +
      +

      diff --git a/www/plugins-dist/svp/formulaires/ajouter_depot.php b/www/plugins-dist/svp/formulaires/ajouter_depot.php index 5b9b3caa..3daa1801 100644 --- a/www/plugins-dist/svp/formulaires/ajouter_depot.php +++ b/www/plugins-dist/svp/formulaires/ajouter_depot.php @@ -7,16 +7,18 @@ * @license GPL * @package SPIP\SVP\Formulaires */ - -if (!defined("_ECRIRE_INC_VERSION")) return; + +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} /** * Chargement du formulaire d'ajout de dépot * * @return array * Environnement du formulaire -**/ -function formulaires_ajouter_depot_charger_dist(){ + **/ +function formulaires_ajouter_depot_charger_dist() { // On ne renvoie pas les valeurs saisies mais on fait un raz systematique return array(); } @@ -26,27 +28,27 @@ function formulaires_ajouter_depot_charger_dist(){ * * Vérifie qu'une adresse valide est soumise et que ce dépot n'a pas * déjà été créé. - * + * + * @uses svp_verifier_adresse_depot() * @return array * Tableau des erreurs -**/ -function formulaires_ajouter_depot_verifier_dist(){ - + **/ +function formulaires_ajouter_depot_verifier_dist() { + $erreurs = array(); $xml = trim(_request('xml_paquets')); if (!$xml) { // L'url est obligatoire $erreurs['xml_paquets'] = _T('svp:message_nok_champ_obligatoire'); - } - elseif (!svp_verifier_adresse_depot($xml)) { + } elseif (!svp_verifier_adresse_depot($xml)) { // L'url n'est pas correcte, le fichier xml n'a pas ete trouve $erreurs['xml_paquets'] = _T('svp:message_nok_url_depot_incorrecte', array('url' => $xml)); - } - elseif (sql_countsel('spip_depots','xml_paquets='.sql_quote($xml))) { + } elseif (sql_countsel('spip_depots', 'xml_paquets=' . sql_quote($xml))) { // L'url est deja ajoutee $erreurs['xml_paquets'] = _T('svp:message_nok_depot_deja_ajoute', array('url' => $xml)); } + return $erreurs; } @@ -56,11 +58,12 @@ function formulaires_ajouter_depot_verifier_dist(){ * Ajoute le dépot. * Retourne une éventuelle erreur si le dépot a un XML mal formé * ou s'il n'a aucun plugin. - * + * + * @uses svp_ajouter_depot() * @return array * Retours du traitement -**/ -function formulaires_ajouter_depot_traiter_dist(){ + **/ +function formulaires_ajouter_depot_traiter_dist() { include_spip('inc/svp_depoter_distant'); $retour = array(); @@ -73,11 +76,11 @@ function formulaires_ajouter_depot_traiter_dist(){ $ok = svp_ajouter_depot($xml, $erreur); // Determination des messages de retour - if (!$ok) + if (!$ok) { $retour['message_erreur'] = $erreur; - else { + } else { $retour['message_ok'] = _T('svp:message_ok_depot_ajoute', array('url' => $xml)); - spip_log("ACTION AJOUTER DEPOT (manuel) : url = ". $xml, 'svp_actions.' . _LOG_INFO); + spip_log("ACTION AJOUTER DEPOT (manuel) : url = " . $xml, 'svp_actions.' . _LOG_INFO); } $retour['editable'] = true; @@ -90,13 +93,13 @@ function formulaires_ajouter_depot_traiter_dist(){ * * Pour cela on tente de rapatrier le fichier distant * en local. Si on réussi, c'est bon. - * + * * @param string $url * URL du fichier xml de description du depot * @return bool * Le dépot est-il valide ? */ -function svp_verifier_adresse_depot($url){ +function svp_verifier_adresse_depot($url) { include_spip('inc/distant'); // evitons de recuperer 2 fois le XML demandé. // si on le recupere ici, il sera deja a jour pour le prochain copie_locale @@ -104,5 +107,3 @@ function svp_verifier_adresse_depot($url){ return (copie_locale($url) ? true : false); #return (!$xml = recuperer_page($url)) ? false : true; } - -?> diff --git a/www/plugins-dist/svp/formulaires/charger_plugin.html b/www/plugins-dist/svp/formulaires/charger_plugin.html index df33e502..7d5de4ab 100644 --- a/www/plugins-dist/svp/formulaires/charger_plugin.html +++ b/www/plugins-dist/svp/formulaires/charger_plugin.html @@ -3,6 +3,8 @@ [

      (#ENV*{message_erreur})

      ] [

      (#ENV*{message_ok})

      ] + [(#ENV*{_actions_realisees})] + @@ -10,26 +12,26 @@ [(#REM) ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE
      <:svp:legende_rechercher_plugins:>

      <:svp:info_charger_plugin{version=#SPIP_VERSION}:>

      -
        -
      • +
        +

        <:svp:info_critere_phrase:>

        [(#ENV{erreurs}|table_valeur{phrase})] -
      • -
      • +
      +
      [(#ENV{erreurs}|table_valeur{categorie})] - -
    • +
    • +
      [(#ENV{erreurs}|table_valeur{etat})] - -
    • +
    • +
      [(#ENV{erreurs}|table_valeur{depot})] - -
    • +
    • +
      [(#ENV{erreurs}|table_valeur{doublon})] - - +
      +

      @@ -65,7 +67,10 @@ <:svp:legende_installer_plugins:> - + ] diff --git a/www/plugins-dist/svp/formulaires/charger_plugin.php b/www/plugins-dist/svp/formulaires/charger_plugin.php index ab0fba8c..88d271fa 100644 --- a/www/plugins-dist/svp/formulaires/charger_plugin.php +++ b/www/plugins-dist/svp/formulaires/charger_plugin.php @@ -8,16 +8,21 @@ * @license GPL * @package SPIP\SVP\Formulaires */ - -if (!defined("_ECRIRE_INC_VERSION")) return; + +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} + +// pour svp_presenter_actions_realisees() +include_spip('exec/admin_plugin'); /** * Chargement du formulaire de recherche et téléchargement de plugins * * @return array * Environnement du formulaire -**/ -function formulaires_charger_plugin_charger_dist(){ + **/ +function formulaires_charger_plugin_charger_dist() { return array( 'phrase' => _request('phrase'), 'categorie' => _request('categorie'), @@ -26,7 +31,11 @@ function formulaires_charger_plugin_charger_dist(){ 'doublon' => _request('doublon'), 'exclusion' => _request('exclusion'), 'ids_paquet' => _request('ids_paquet'), - '_todo' => _request('_todo')); + '_todo' => _request('_todo'), + '_libelles_actions' => _request('_libelles_actions'), + // on présente les actions réalisées ici au retour, lorsqu'il n'y avait eu que des Téléchargement demandés (sans activation) + '_actions_realisees' => (_request('todo') or _AJAX) ? '' : svp_presenter_actions_realisees() + ); } /** @@ -42,11 +51,12 @@ function formulaires_charger_plugin_charger_dist(){ * de conséquence. * * Si on reçoit une demande de confirmation, on sort sans lever d'erreur ! - * + * + * @uses svp_decider_verifier_actions_demandees() * @return array * Tableau des erreurs -**/ -function formulaires_charger_plugin_verifier_dist(){ + **/ +function formulaires_charger_plugin_verifier_dist() { $erreurs = array(); $a_installer = array(); @@ -55,43 +65,45 @@ function formulaires_charger_plugin_verifier_dist(){ // Requete : Annulation des actions d'installation en cours // -- On vide la liste d'actions en cours set_request('_todo', ''); - + } elseif (_request('valider_actions')) { - - + + } elseif (_request('rechercher')) { // annuler les selections si nouvelle recherche set_request('ids_paquet', array()); } else { // Requete : Installation d'un ou de plusieurs plugins // -- On construit le tableau des ids de paquets conformement a l'interface du decideur - if (_request('installer')) { + if (_request('installer') or _request('telecharger')) { + $action = _request('installer') ? 'geton' : 'get'; // L'utilisateur a demande une installation multiple de paquets // -- on verifie la liste des id_paquets uniquement if ($id_paquets = _request('ids_paquet')) { - foreach ($id_paquets as $_id_paquet) - $a_installer[$_id_paquet] = 'geton'; + foreach ($id_paquets as $_id_paquet) { + $a_installer[$_id_paquet] = $action; + } } - } - else { + } else { // L'utilisateur a demande l'installation d'un paquet en cliquant sur le bouton en regard // du resume du plugin -> installer_paquet - if ($install = _request('installer_paquet')) - if ($id_paquet = key($install)) + if ($install = _request('installer_paquet')) { + if ($id_paquet = key($install)) { $a_installer[$id_paquet] = 'geton'; + } + } } - if (!$a_installer) + if (!$a_installer) { $erreurs['message_erreur'] = _T('svp:message_nok_aucun_plugin_selectionne'); - else { - + } else { // On fait appel au decideur pour determiner la liste exacte des commandes apres // verification des dependances include_spip('inc/svp_decider'); svp_decider_verifier_actions_demandees($a_installer, $erreurs); } } - + return $erreurs; } @@ -100,31 +112,32 @@ function formulaires_charger_plugin_verifier_dist(){ * * Si une liste d'action est validée, on redirige de formulaire sur * l'action 'actionner' qui les traitera une par une. - * + * * @return array * Retours du traitement -**/ -function formulaires_charger_plugin_traiter_dist(){ + **/ +function formulaires_charger_plugin_traiter_dist() { $retour = array(); - if (_request('rechercher') OR _request('annuler_actions')) { + if (_request('rechercher') or _request('annuler_actions')) { - } - elseif (_request('valider_actions')) { + } elseif (_request('valider_actions')) { #refuser_traiter_formulaire_ajax(); // Ajout de la liste des actions à l'actionneur // c'est lui qui va effectuer rellement les actions // lors de l'appel de action/actionner $actions = unserialize(_request('_todo')); include_spip('inc/svp_actionner'); - svp_actionner_traiter_actions_demandees($actions, $retour); + // si toutes les actions sont des téléchargements (pas d'activation), on reste sur cette page + $redirect = null; + if (!array_diff($actions, array('get'))) { + $redirect = self(); + } + svp_actionner_traiter_actions_demandees($actions, $retour, $redirect); } $retour['editable'] = true; return $retour; } - - -?> diff --git a/www/plugins-dist/svp/formulaires/charger_plugin_archive.html b/www/plugins-dist/svp/formulaires/charger_plugin_archive.html index aebed3ec..aafc2431 100644 --- a/www/plugins-dist/svp/formulaires/charger_plugin_archive.html +++ b/www/plugins-dist/svp/formulaires/charger_plugin_archive.html @@ -11,19 +11,19 @@

      ]

      <:svp:telecharger_archive_plugin_explication:>

      -
        -
      • +
        +
        [(#ENV{erreurs/archive})] -
      • -
      • + +
        [(#ENV{erreurs/destination})]

        <:svp:explication_destination:>

        -
      • -
      + +

      diff --git a/www/plugins-dist/svp/formulaires/charger_plugin_archive.php b/www/plugins-dist/svp/formulaires/charger_plugin_archive.php index 57c05ea3..3565c491 100644 --- a/www/plugins-dist/svp/formulaires/charger_plugin_archive.php +++ b/www/plugins-dist/svp/formulaires/charger_plugin_archive.php @@ -7,19 +7,21 @@ * @license GPL * @package SPIP\SVP\Formulaires */ - -if (!defined("_ECRIRE_INC_VERSION")) return; + +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} /** * Chargement du formulaire de téléchargement de plugin * * @return array * Environnement du formulaire -**/ + **/ function formulaires_charger_plugin_archive_charger_dist() { return array( - 'archive' =>'', - 'destination' =>'' + 'archive' => '', + 'destination' => '' ); } @@ -28,11 +30,11 @@ function formulaires_charger_plugin_archive_charger_dist() { * * Vérifie qu'une archive est saisie, et si la destination existe * demande à confirmer l'écrasement - * + * * @return array * Tableau des erreurs -**/ -function formulaires_charger_plugin_archive_verifier_dist(){ + **/ +function formulaires_charger_plugin_archive_verifier_dist() { include_spip('inc/plugin'); // _DIR_PLUGINS_AUTO $erreurs = array(); if (!$archive = _request('archive')) { @@ -42,8 +44,7 @@ function formulaires_charger_plugin_archive_verifier_dist(){ $infos_archive = pathinfo($archive); if (!isset($infos_archive['extension'])) { $erreurs['archive'] = _T('svp:message_nok_url_archive'); - } - else { + } else { // calcul du répertoire de destination if (!$destination = _request('destination')) { $destination = $infos_archive['filename']; @@ -59,7 +60,8 @@ function formulaires_charger_plugin_archive_verifier_dist(){ $backup = "$base/.$nom.bck"; $erreurs['confirmer'] = _T("svp:confirmer_telecharger_dans", array( 'dir' => joli_repertoire($dir), - 'dir_backup' => joli_repertoire($backup))); + 'dir_backup' => joli_repertoire($backup) + )); } } } @@ -71,11 +73,11 @@ function formulaires_charger_plugin_archive_verifier_dist(){ * Traitement du formulaire de téléchargement de plugin * * Télécharge le plugin via le téléporteur et rend la main. - * + * * @return array * Retours du traitement -**/ -function formulaires_charger_plugin_archive_traiter_dist(){ + **/ +function formulaires_charger_plugin_archive_traiter_dist() { $retour = array(); $archive = _request('archive'); @@ -88,11 +90,9 @@ function formulaires_charger_plugin_archive_traiter_dist(){ $retour['message_erreur'] = $ok; } else { $retour['message_ok'] = _T('svp:message_telechargement_archive_effectue', - array('dir' => joli_repertoire( _DIR_PLUGINS_AUTO . $dest ))); + array('dir' => joli_repertoire(_DIR_PLUGINS_AUTO . $dest))); } $retour['editable'] = true; + return $retour; } - - -?> diff --git a/www/plugins-dist/svp/formulaires/configurer_svp.html b/www/plugins-dist/svp/formulaires/configurer_svp.html index a3b0d027..56615e56 100644 --- a/www/plugins-dist/svp/formulaires/configurer_svp.html +++ b/www/plugins-dist/svp/formulaires/configurer_svp.html @@ -8,9 +8,9 @@ #ACTION_FORMULAIRE
      <:svp:fieldset_fonctionnement:> -
        +
        #SET{name,mode_runtime}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        <:svp:config_activer_runtime_explication:>
        [ (#GET{erreurs}) @@ -22,14 +22,14 @@
        -
      • -
          +
        +
      <:svp:fieldset_debug:> -
        +
        #SET{name,mode_pas_a_pas}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        <:svp:config_activer_pas_a_pas_explication:>
        [ (#GET{erreurs}) @@ -41,10 +41,10 @@
        -
      • +
        #SET{name,mode_log_verbeux}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        <:svp:config_activer_log_verbeux_explication:>
        [ (#GET{erreurs}) @@ -56,10 +56,10 @@
        -
      • + #SET{name,autoriser_activer_paquets_obsoletes}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        <:svp:config_autoriser_activer_paquets_obsoletes_explication:>
        [ (#GET{erreurs}) @@ -71,14 +71,14 @@
        -
      • -
          + +
      <:svp:fieldset_edition:> -
        +
        #SET{name,depot_editable}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        <:svp:config_depot_editable_explication:>
        [ (#GET{erreurs}) @@ -90,8 +90,8 @@
        -
      • -
          +
        +

      diff --git a/www/plugins-dist/svp/formulaires/editer_depot.html b/www/plugins-dist/svp/formulaires/editer_depot.html index b9a3e738..ac09548a 100644 --- a/www/plugins-dist/svp/formulaires/editer_depot.html +++ b/www/plugins-dist/svp/formulaires/editer_depot.html @@ -6,22 +6,22 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
        -
      • + #ACTION_FORMULAIRE +
        +
        [(#ENV**{erreurs}|table_valeur{titre})] -
      • -
      • +
      +
      [(#ENV**{erreurs}|table_valeur{descriptif})] - -
    • -
        -
      • +
    • +
      +
      +
      @@ -35,10 +35,10 @@
      - -
      - - +
      + + + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] diff --git a/www/plugins-dist/svp/formulaires/editer_depot.php b/www/plugins-dist/svp/formulaires/editer_depot.php index a845da19..004c6d98 100644 --- a/www/plugins-dist/svp/formulaires/editer_depot.php +++ b/www/plugins-dist/svp/formulaires/editer_depot.php @@ -7,8 +7,10 @@ * @license GPL * @package SPIP\SVP\Formulaires */ - -if (!defined("_ECRIRE_INC_VERSION")) return; + +if (!defined("_ECRIRE_INC_VERSION")) { + return; +} include_spip('inc/editer'); @@ -21,9 +23,10 @@ include_spip('inc/editer'); * URL de redirection * @return array * Environnement du formulaire -**/ -function formulaires_editer_depot_charger_dist($id_depot, $redirect){ + **/ +function formulaires_editer_depot_charger_dist($id_depot, $redirect) { $valeurs = formulaires_editer_objet_charger('depot', $id_depot, 0, 0, $redirect, 'depots_edit_config'); + return $valeurs; } @@ -36,9 +39,10 @@ function formulaires_editer_depot_charger_dist($id_depot, $redirect){ * URL de redirection * @return array * Tableau des erreurs -**/ -function formulaires_editer_depot_verifier_dist($id_depot, $redirect){ + **/ +function formulaires_editer_depot_verifier_dist($id_depot, $redirect) { $erreurs = formulaires_editer_objet_verifier('depot', $id_depot, array('titre')); + return $erreurs; } @@ -51,8 +55,8 @@ function formulaires_editer_depot_verifier_dist($id_depot, $redirect){ * URL de redirection * @return array * Retours du traitement -**/ -function formulaires_editer_depot_traiter_dist($id_depot, $redirect){ + **/ +function formulaires_editer_depot_traiter_dist($id_depot, $redirect) { return formulaires_editer_objet_traiter('depot', $id_depot, 0, 0, $redirect); } @@ -64,15 +68,13 @@ function formulaires_editer_depot_traiter_dist($id_depot, $redirect){ * @return array * Tableau de configurations qui seront ajoutés à l'environnement * du formulaire sous la clé 'config' -**/ -function depots_edit_config($row) -{ + **/ +function depots_edit_config($row) { global $spip_ecran, $spip_lang; $config = $GLOBALS['meta']; $config['lignes'] = ($spip_ecran == "large") ? 8 : 5; $config['langue'] = $spip_lang; + return $config; } - -?> diff --git a/www/plugins-dist/svp/formulaires/inc-admin_plugin.html b/www/plugins-dist/svp/formulaires/inc-admin_plugin.html index 96d2206f..d687af92 100644 --- a/www/plugins-dist/svp/formulaires/inc-admin_plugin.html +++ b/www/plugins-dist/svp/formulaires/inc-admin_plugin.html @@ -1,90 +1,117 @@ #SET{vspip, #EVAL{$GLOBALS['spip_version_branche']}} +#SET{autoriser_plugins_ajouter,#AUTORISER{plugins_ajouter}} +#SET{autoriser_webmestre,#AUTORISER{webmestre}} +[(#SET{image_verrou,[(#CHEMIN_IMAGE{cadenas-16.png}|balise_img{<:svp:plugin_info_verrouille:>,picto_verrou}|inserer_attribut{title,<:svp:plugin_info_verrouille:>})]})] +[(#SET{erreur_attente,[- (#GET{autoriser_plugins_ajouter}|?{<:svp:info_plugin_attente_dependance:>,<:svp:info_plugin_attente_dependance_interdit:>}) ]})] +[(#SET{erreur_incompatible,- <:svp:info_plugin_incompatible:>})] +[(#GET{incompatibles}) + [(#ENV{afficher_incompatibles,''}|non) + <:svp:afficher_les_plugins_incompatibles:> + ] + [(#ENV{afficher_incompatibles,''}|oui) + <:svp:cacher_les_plugins_incompatibles:> + ] +]
        #SET{incompatible, #COMPATIBILITE_SPIP|plugin_version_compatible{#GET{vspip}, spip}|non} #SET{verrou,#CONSTANTE|=={_DIR_PLUGINS_DIST}|oui} -
      • - [(#OBSOLETE|=={non}|et{#CONSTANTE|!={_DIR_PLUGINS_DIST}}|et{#GET{incompatible}|non}|ou{#ATTENTE|=={oui}}|oui) -
        - -
        ] - [(#REM) si la configuration le permet, on peut activer un plugin obsolete ] - [(#OBSOLETE|=={oui}|et{#CONSTANTE|!={_DIR_PLUGINS_DIST}}|et{#GET{incompatible}|non}|oui) - [(#CONFIG{svp/autoriser_activer_paquets_obsoletes}|=={oui}|oui) -
        - -
        + #SET{actif,#ACTIF|=={oui}|oui} + #SET{attente,#ATTENTE|=={oui}|oui} + [(#GET{incompatible})#SET{incompatibles,' '}] + [(#GET{incompatible}|non|ou{#ENV{afficher_incompatibles,''}}|ou{#GET{verrou}}|ou{#GET{actif}}|ou{#GET{attente}}) + #SET{obsolete,#OBSOLETE|=={oui}|oui} + #SET{details,#ENV{id_paquet,''}|=={#ID_PAQUET}|oui} +
      • + [(#GET{incompatible}|non|ou{#GET{attente}}|et{#GET{verrou}|non}) + [(#GET{obsolete}|non) +
        + +
        ] + [(#REM) si la configuration le permet, on peut activer un plugin obsolete ] + [(#GET{obsolete}|et{#GET{incompatible}|non}) + [(#CONFIG{svp/autoriser_activer_paquets_obsoletes}|=={oui}|oui) +
        + +
        + ] ] ] + [(#REM) ] -
        [(#ENV{id_paquet}|=={#ID_PAQUET}|?{#SET{id_paquet,''},#SET{id_paquet,#ID_PAQUET}})] -

        [(#NOM|extraire_multi)]

        +
        +

        [(#NOM|extraire_multi|svp_importer_charset)]

        [(#VERSION)] [ - (#ETAT)] - [(#SET{erreur,[(#OBSOLETE|=={oui}|oui)<:svp:info_plugin_obsolete:> ]})] - [(#SET{erreur,[(#GET{erreur}|concat{[- (#ATTENTE|=={oui}|et{#AUTORISER{plugins_ajouter}|non}|oui)<:svp:info_plugin_attente_dependance_interdit:> ]})]})] - [(#SET{erreur,[(#GET{erreur}|concat{[- (#ATTENTE|=={oui}|et{#AUTORISER{plugins_ajouter}|oui}|oui)<:svp:info_plugin_attente_dependance:> ]})]})] - [(#SET{erreur,[(#GET{erreur}|concat{[- (#GET{incompatible}|oui)<:svp:info_plugin_incompatible:>]})]})] -
        [(#GET{erreur}|ltrim{'-'}|sinon{#SLOGAN|extraire_multi|typo|sinon{#DESCRIPTION|extraire_multi|propre}|PtoBR|explode{'
        '}|reset|couper{80}})]
        - [(#LOGO|oui)
        - [(#CONSTANTE|constant|concat{#SRC_ARCHIVE/#LOGO}|image_reduire{32})] + [(#SET{erreur,[(#GET{obsolete})<:svp:info_plugin_obsolete:> ]})] + [(#GET{attente}) [(#SET{erreur,#GET{erreur}|concat{#GET{erreur_attente}}})] ] + [(#GET{incompatible})[(#SET{erreur,#GET{erreur}|concat{#GET{erreur_incompatible}}})]] + [(#SET{slogan,#GET{erreur}|ltrim{'-'}|trim})] + [(#GET{slogan}|non)[(#SET{slogan,#SLOGAN|extraire_multi|typo})]] + [(#GET{slogan}|non)[(#SET{slogan,#DESCRIPTION|extraire_multi|propre|PtoBR|explode{'
        '}|reset})]] +
        [(#GET{slogan}|couper{80}|svp_importer_charset)]
        + [(#LOGO|et{#GET{incompatible}|non})
        + [(#CONST{#CONSTANTE}|concat{#SRC_ARCHIVE/#LOGO}|balise_img)]
        ]
        - +
        [(#REM) on peut desactiver un plugin - qu'il soit obsolete ou pas ] - [(#CONSTANTE|!={_DIR_PLUGINS_DIST}|et{#GET{incompatible}|non}|oui) - [(#ACTIF|=={oui}|oui) + [(#GET{verrou}|non|et{#GET{incompatible}|non}|oui) + [(#GET{actif}) - [(#INSTALLE|=={oui}|et{#AUTORISER{webmestre}}|oui) + [(#INSTALLE|=={oui}|et{#GET{autoriser_webmestre}}|oui) ] ] ] - [(#OBSOLETE|=={non}|et{#CONSTANTE|!={_DIR_PLUGINS_DIST}}|et{#GET{incompatible}|non}|oui) - [(#ACTIF|=={oui}|non|ou{#ATTENTE|=={oui}}) - [(#ACTIF|=={oui}|non|ou{#ATTENTE|=={oui}|oui|et{#AUTORISER{plugins_ajouter}|oui}}|oui) + [(#GET{obsolete}|non|et{#GET{verrou}|non}|et{#GET{incompatible}|non}|oui) + [(#GET{actif}|non|ou{#GET{attente}}) + [(#GET{actif}|non|ou{#GET{attente}|et{#GET{autoriser_plugins_ajouter}|oui}}|oui) ] ] - [(#MAJ_VERSION|oui|et{#AUTORISER{plugins_ajouter}|oui}|oui) + ] + [(#GET{obsolete}|non|et{#GET{verrou}|non}|oui) + [(#MAJ_VERSION|oui|et{#GET{autoriser_plugins_ajouter}|oui}|oui) ] ] [(#REM) si la configuration le permet, on peut activer un plugin obsolete ] - [(#OBSOLETE|=={oui}|et{#CONSTANTE|!={_DIR_PLUGINS_DIST}}|et{#GET{incompatible}|non}|oui) - [(#ACTIF|=={oui}|non|et{#CONFIG{svp/autoriser_activer_paquets_obsoletes}|=={oui}}) + [(#GET{obsolete}|et{#GET{verrou}|non}|et{#GET{incompatible}|non}|oui) + [(#GET{actif}|non|et{#CONFIG{svp/autoriser_activer_paquets_obsoletes}|=={oui}}) ] ] - [(#ACTIF|=={oui}|non|et{[(#SRC_ARCHIVE|couper{5}|=={auto/})]}) + [(#GET{actif}|non|et{[(#SRC_ARCHIVE|couper{5}|=={auto/})]}) ] - [(#CONSTANTE|=={_DIR_PLUGINS_DIST}|oui) - <:svp:info_verrouille:> + [(#GET{verrou}) + <:svp:info_verrouille:> ]
        - [(#ACTIF|=={oui}|et{#ATTENTE|=={non}}|oui) #SET{prefixe,#PREFIXE|strtolower} + [(#GET{actif}|et{#GET{attente}|non}|oui) #SET{prefixe,#PREFIXE|strtolower} [(#CHEMIN_IMAGE{ok-16.png}|balise_img{<:svp:plugin_info_actif:>,picto_actif}|inserer_attribut{title,<:svp:plugin_info_actif:>})] [(#INCLURE{fond=prive/squelettes/inclure/cfg,script=configurer_#GET{prefixe},nom=#NOM})] ] - [(#GET{verrou}) - [(#CHEMIN_IMAGE{cadenas-16.png}|balise_img{<:svp:plugin_info_verrouille:>,picto_verrou}|inserer_attribut{title,<:svp:plugin_info_verrouille:>})] - ] - [(#MAJ_VERSION|oui|et{#AUTORISER{plugins_ajouter}|oui}|oui) + [(#GET{verrou}|?{#GET{image_verrou}})] + [(#MAJ_VERSION|oui|et{#GET{autoriser_plugins_ajouter}|oui}|oui) [(#CHEMIN_IMAGE{update-16.png}|balise_img{<:svp:plugin_info_up:>,picto_up}|inserer_attribut{title,<:svp:plugin_info_up{version=#MAJ_VERSION}:>})] ] - [(#OBSOLETE|=={oui}|ou{#GET{incompatible}}|ou{#ATTENTE|=={oui}}|oui) - [(#SET{image,plugin-dis-16.png})] - [(#OBSOLETE|=={oui}|oui) [(#SET{err, <:svp:info_plugin_obsolete:>})]] - [(#GET{incompatible}|oui) [(#SET{err, <:svp:info_plugin_incompatible:>})]] - [(#ATTENTE|=={oui}|oui) [(#SET{image, erreur-16.png})]] + [(#GET{obsolete}|ou{#GET{incompatible}}|ou{#GET{attente}}|oui) + [(#SET{image,#GET{attente}|?{erreur-16.png,plugin-dis-16.png}})] + [(#GET{obsolete}) [(#SET{err, <:svp:info_plugin_obsolete:>})]] + [(#GET{incompatible}) [(#SET{err, <:svp:info_plugin_incompatible:>})]] [(#CHEMIN_IMAGE{#GET{image}}|balise_img{#GET{err}, picto_err}|inserer_attribut{title, #GET{err}})] - ][(#ENV{id_paquet}|=={#ID_PAQUET}|?{#SET{id_paquet,#ID_PAQUET},#SET{id_paquet,0}})] - [(#INCLURE{fond=prive/squelettes/inclure/plugin_detail,id_paquet=#GET{id_paquet},ajax=detail_#ID_PAQUET,env})] + ] + [(#GET{details}) + [(#INCLURE{fond=prive/squelettes/inclure/plugin_detail,id_paquet,ajax=detail_#ID_PAQUET,env})] + ] + ]
      @@ -94,12 +121,12 @@ \ No newline at end of file + diff --git a/www/plugins-dist/svp/formulaires/inc-admin_plugin_fonctions.php b/www/plugins-dist/svp/formulaires/inc-admin_plugin_fonctions.php new file mode 100644 index 00000000..df983d54 --- /dev/null +++ b/www/plugins-dist/svp/formulaires/inc-admin_plugin_fonctions.php @@ -0,0 +1,30 @@ +] [
      + [
      + (#ENV**{_notices/decideur_warning}) +
      ]
      <:svp:actions_demandees:> -
        (#ENV**{erreurs/decideur_demandes}|foreach{svp_presenter_actions})
      +
        (#ENV**{_libelles_actions/decideur_demandes}|foreach{svp_presenter_actions})
      [
      <:svp:actions_necessaires:> -
        (#ENV**{erreurs/decideur_propositions}|foreach{svp_presenter_actions})
      +
        (#ENV**{_libelles_actions/decideur_propositions}|foreach{svp_presenter_actions})
      ]

      + //]]> diff --git a/www/plugins/saisies/inclure/voir_saisies.html b/www/plugins/saisies/inclure/voir_saisies.html index 7a77eee8..5c378235 100644 --- a/www/plugins/saisies/inclure/voir_saisies.html +++ b/www/plugins/saisies/inclure/voir_saisies.html @@ -1,7 +1,12 @@ -[(#REM) S'il y a des options afficher_si, il faut vérifier que les conditions sont remplies ] +[(#REM) S'il y a des options afficher_si, il faut v�rifier que les conditions sont remplies ] [(#SET{saisies,#ENV{saisies}|saisies_verifier_afficher_si{#ENV**|unserialize}})] +[(#EVAL{!defined('_SAISIES_AFFICHAGE_COMPACT')}|oui) [(#VAL{saisie}|array_key_exists{#VALEUR}|oui) [(#VALEUR|saisies_generer_vue{#ENV{_env}|sinon{#ENV**|unserialize}})] ] +] +[(#EVAL{defined('_SAISIES_AFFICHAGE_COMPACT')}|oui) +[
      [(#VALEUR|table_valeur{options/label}|typo):] (#VAL{saisie}|array_key_exists{#VALEUR}|?{[(#VALEUR|saisies_generer_vue{#ENV{_env}|sinon{#ENV**|unserialize},#ARRAY{valeur_uniquement,oui,sans_reponse,''}}|ptobr)]})
      ] +] diff --git a/www/plugins/saisies/lang/paquet-saisies.xml b/www/plugins/saisies/lang/paquet-saisies.xml index 99995154..bbfc74d8 100644 --- a/www/plugins/saisies/lang/paquet-saisies.xml +++ b/www/plugins/saisies/lang/paquet-saisies.xml @@ -1,30 +1,30 @@ - - - + + + - - + + - + - - + + - + - - + + - - + + - - + + - - + + - - + + diff --git a/www/plugins/saisies/lang/paquet-saisies_ar.php b/www/plugins/saisies/lang/paquet-saisies_ar.php index bfc7b82b..cd997003 100644 --- a/www/plugins/saisies/lang/paquet-saisies_ar.php +++ b/www/plugins/saisies/lang/paquet-saisies_ar.php @@ -1,6 +1,6 @@ - + + - - - + + + - - - - - - + + + + + + - - - - + + + + + - - + + - + - - - + + + + - + - - - + + + - - - + + + - - - - + + + + - - + + diff --git a/www/plugins/saisies/lang/saisies_ca.php b/www/plugins/saisies/lang/saisies_ca.php index 9c686e43..c7008337 100644 --- a/www/plugins/saisies/lang/saisies_ca.php +++ b/www/plugins/saisies/lang/saisies_ca.php @@ -1,6 +1,6 @@ '(Kopie)', 'construire_action_supprimer' => 'Löschen', 'construire_ajouter_champ' => 'Feld hinzufügen', + 'construire_ajouter_groupe' => 'eine Gruppe hinzufügen', 'construire_attention_enregistrer' => 'Vergessen Sie nicht, Ihre Änderungen zu speichern.', 'construire_attention_modifie' => 'Das untere Formular unterscheidet sich vom ursprünglichen. Sie können es in den Zustand vor den Änderungen zurücksetzen.', 'construire_attention_supprime' => 'Ihre Änderungen umfassen das Löschen von Feldern. Bitte bestätigen das Speichern dieser neuen Version des Formulars.', @@ -57,21 +58,30 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_aff_langue_label' => 'Sprache anzeigen', 'option_aff_rub_interface_explication' => 'Ausschließlich Rubriken in der Sprache des Nutzers anzeigen', 'option_aff_rub_interface_label' => 'Mehrsprachige Anzeige', + 'option_afficher_si_explication' => 'Bestimmt die Bedingungen zur Anzeige des Feldes in Abhängigkeit vom Wert eines anderen Feldes. Die Kennung des anderen Feldes steht zwischen @.
      Beispiel @selection_1@=="Toto" das Feld wird angezeigt, wenn das Feld selection_1 den Wert Toto hat.', + 'option_afficher_si_label' => 'Bedingte Anzeige', + 'option_afficher_si_remplissage_explication' => 'Im Gegensatz zur vorherigen Option, werden diese Felder nur beim ausfüllen des Formulars angezeigt, nicht bei den Ergebnissen. Die Syntax bleibt gleich.', + 'option_afficher_si_remplissage_label' => 'Bedingte Anzeige beim Ausfüllen', 'option_attention_explication' => 'Nachricht wichtiger als Meldung', 'option_attention_label' => 'Achtung', + 'option_attribut_title_label' => 'Titelattribut in das Label mit dem Wert des Felds einfügen. Zurückhaltend zu verwenden.', 'option_autocomplete_defaut' => 'Standardeinstellung belassen', 'option_autocomplete_explication' => 'Beim Laden der Seite kann Ihr Browser das Feld mit bereits verwendeten Werten vorausfüllen.', 'option_autocomplete_label' => 'Feld vorausfüllen', 'option_autocomplete_off' => 'Deaktivieren', 'option_autocomplete_on' => 'Aktivieren', 'option_cacher_option_intro_label' => 'Erste leere Auswahl ausblenden', + 'option_choix_alternatif_label' => 'Alternative Auswahl anbieten', + 'option_choix_alternatif_label_defaut' => 'Andere Auswahl', + 'option_choix_alternatif_label_label' => 'Label dieser alternativen Auswahl', 'option_choix_destinataires_explication' => 'Einer oder mehrere Empfänger, welche der Besucher auswählen kann. Wenn er keine Auswahl trifft, geht die Nachricht an den ersten Administrator (Autor 1).', 'option_choix_destinataires_label' => 'Mögliche Empfänger', 'option_class_label' => 'Zusätzliche CSS-Klassen', 'option_cols_explication' => 'Breite des Blocks in Zeichen. Diese Option kann durch ihre CSS-Stile unwirksam grmacht werden.', 'option_cols_label' => 'Breite', - 'option_datas_explication' => 'Sie müssen in jeder Zeile eine Option im Format "Schlüssel|Bezeichnung" angeben.', # MODIF + 'option_datas_explication' => 'Sie müssen in jeder Zeile eine Option im Format "Schlüssel|Bezeichnung" angeben.', 'option_datas_label' => 'Mögliche Angaben', + 'option_datas_sous_groupe_explication' => 'Sie müssen eine Wahlmöglichkeit pro Linie im Format "cle|Label" eingeben.
      Sie können den Beginn einer Untergruppe in der Form "*Titel der Untergruppe" angeben. Um Eine Untergruppe abzuschliessen beginnen Sie eine neue Untergruppe, oder fügen Sie ein Zeile an, die nur ein "/*" enthält.', 'option_defaut_label' => 'Standardwert', 'option_disable_avec_post_explication' => 'Identisch mit voriger Option, jedoch wird der Wert in ein verstecktes Feld eingefügt.', 'option_disable_avec_post_label' => 'Senden trotz Deaktivierung', @@ -85,6 +95,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_groupe_description' => 'Beschreibung', 'option_groupe_utilisation' => 'Verwendung', 'option_groupe_validation' => 'Bestätigung', + 'option_heure_pas_explication' => 'Wenn Sie das Zeitfeld verwenden, wird ein Menü für die Eingabe von Stunde und Minute angezeigt. Sie können hier den Abstand zwischen den möglichen Zeitpunkten angeben. Grundeinstellung sind 30 Minuten.', + 'option_heure_pas_label' => 'Dauer der Zeitintervalle in Minuten bei der Eingabe', + 'option_horaire_label' => 'Zeit', + 'option_horaire_label_case' => 'Eingabe der Uhrzeit ebenfalls ermöglichen', 'option_id_groupe_label' => 'Schlagwortgruppe', 'option_info_obligatoire_explication' => 'Sie können die Standardbezeichnung für Pflichtfelder ändern:[Pflichtfeld].', 'option_info_obligatoire_label' => 'Pflichtfeld-Anzeige', @@ -95,6 +109,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_label_case_label' => 'Bezeichnung neben dem Feld', 'option_label_explication' => 'Anzeigetitel', 'option_label_label' => 'Bezeichnung', + 'option_label_non_explication' => 'Wird zusammen mit den Ergebnissen angezeigt.', + 'option_label_non_label' => 'Bezeichnung für nicht markiertes Kästchen', + 'option_label_oui_explication' => 'Wird mit den Ergebnissen angezeigt.', + 'option_label_oui_label' => 'Bezeichnung bei markiertem Kästchen', + 'option_limite_branche_explication' => 'Beschränkt die Auswahl auf eine bestimmte Hauptrubrik der Website', + 'option_limite_branche_label' => 'Auf eine Hauptrubrik einschränken', 'option_maxlength_explication' => 'Der Besucher kann maximal diese Anzahl Zeichen eingeben', 'option_maxlength_label' => 'Zeichen maximal', 'option_multiple_explication' => 'Der Nutzer kann mehrere Optionen auswählen', @@ -102,8 +122,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_nom_explication' => 'Reserviertes Wort für das Feld. Darf nur alphanumerische klein geschriebene und das Zeichen "_" (Unterstrich) enthalten.', 'option_nom_label' => 'Feldname', 'option_obligatoire_label' => 'Pflichtfeld', + 'option_option_destinataire_intro_label' => 'Bezeichnung der ersten leeren Auswahl (bei Listenansicht)', 'option_option_intro_label' => 'Bezeichnung der ersten leeren Auswahl', 'option_option_statut_label' => 'Status anzeigen', + 'option_placeholder_label' => 'Platzhalter', 'option_pliable_label' => 'Klappbar', 'option_pliable_label_case' => 'Die Feldgruppe kann zugeklappt werden', 'option_plie_label' => 'Bereits zugeklappt', @@ -116,13 +138,22 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_rows_label' => 'Anzahl Zeilen', 'option_size_explication' => 'Breite des Felds in Zeichen. Diese Option ist nicht immer wirksam, da sie durch individuelle CSS.Stile abgeschaltet werden kann.', 'option_size_label' => 'Feldgröße', + 'option_statut_label' => 'Spezielle(r) Status', 'option_type_choix_plusieurs' => 'Auswahl mehrerer Empfänger erlauben', 'option_type_choix_tous' => 'Alle diese Autoren als Empfänger hinzufügen. Der Besucher kann keine Auswahl treffen.', - 'option_type_choix_un' => 'Der Besucher kann nur einen einzigen Empfänger auswählen.', # MODIF + 'option_type_choix_un' => 'Besucher dürfen einen einzigen Empfänger aus der Liste auswählen.', + 'option_type_choix_un_radio' => 'Dem Benutzer die Wahl eines einzigen Empfängers aus einer Liste ermöglichen.', 'option_type_explication' => 'Im "versteckten" Modus wird der Inhalt dieses Felds nicht angezeigt.', 'option_type_label' => 'Feldtyp', - 'option_type_password' => 'Versteckt', # MODIF + 'option_type_password' => 'Bei der Eingabe verborgener Text (z.B. Passwort)', 'option_type_text' => 'Normal', + 'option_valeur_non_explication' => 'Wert der übergeben wird, wenn das Kästchen nicht ausgewählt wird. Achtung, es handelt sich um den technischen, nicht um den angezeigten Wert.', + 'option_valeur_non_label' => 'Wert nein', + 'option_valeur_oui_explication' => 'Wert der übergeben wird, wenn das Kästchen ausgewählt wird. Achtung, es handelt sich um den technischen, nicht um den angezeigten Wert.', + 'option_valeur_oui_label' => 'Wert ja', + + // P + 'plugin_yaml_inactif' => 'Das Plugin YAML ist inaktiv. Sie müssen es einschalten, damit diese Seite funktioniert.', // S 'saisie_auteurs_explication' => 'Ermöglicht einen oder mehrere Autoren auszuwählen', @@ -135,6 +166,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_date_titre' => 'Datum', 'saisie_destinataires_explication' => 'Ermöglicht mehrere Empfänger aus den vorgeschlagenen Autoren auszuwählen', 'saisie_destinataires_titre' => 'Empfänger', + 'saisie_email_explication' => 'Erlaubt die Nutzung eines Mail-Felds im HTML5-Format.', + 'saisie_email_titre' => 'Mailadresse', 'saisie_explication_explication' => 'Allgemeine Beschreibung', 'saisie_explication_titre' => 'Beschreibung', 'saisie_fieldset_explication' => 'Ein Rahmen, der mehrere Felder enthalten kann', @@ -156,6 +189,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_radio_titre' => 'Radioknöpfe', 'saisie_selecteur_article' => 'Werkzeug zur Auswahl eines Artikels anzeigen', 'saisie_selecteur_article_titre' => 'Artikelwahl', + 'saisie_selecteur_document' => 'Dateiauswahl-Dialog anzeigen', + 'saisie_selecteur_document_titre' => 'Dateiauswahl-Dialog', 'saisie_selecteur_rubrique' => 'Werkzeug zur Auswahl einer Rubrik anzeigen', 'saisie_selecteur_rubrique_article' => 'Werkzeug zur Auswahl einer Rubrik oder eines Artikels anzeigen', 'saisie_selecteur_rubrique_article_titre' => 'Rubrik- oder Artikelwahl', @@ -168,8 +203,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_textarea_titre' => 'Textblock', // T + 'titre_page_saisies_doc' => 'Documentation der Eingabefunktionen', 'tous_visiteurs' => 'Alle Besucher (auch nicht eingeschriebene)', - 'tout_selectionner' => 'Alles auswählen', + 'tout_selectionner' => 'Alles aus/abwählen', // V 'vue_sans_reponse' => 'Ohne Antwort', diff --git a/www/plugins/saisies/lang/saisies_en.php b/www/plugins/saisies/lang/saisies_en.php index a5826173..d4ba7218 100644 --- a/www/plugins/saisies/lang/saisies_en.php +++ b/www/plugins/saisies/lang/saisies_en.php @@ -1,6 +1,6 @@ 'Conditional display when being filled', 'option_attention_explication' => 'A message more important than the explanation.', 'option_attention_label' => 'Warning', + 'option_attribut_title_label' => 'Put a title attribute in the label, containing the value of the field. Use with moderation.', 'option_autocomplete_defaut' => 'Leave the default', 'option_autocomplete_explication' => 'At page load, your browser may pre-fill the field based on its history', 'option_autocomplete_label' => 'Pre-fill the field', @@ -108,6 +109,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_label_case_label' => 'Label located beside the check box', 'option_label_explication' => 'The title that will be displayed.', 'option_label_label' => 'Label', + 'option_label_non_explication' => 'Will be visible when displaying the results.', + 'option_label_non_label' => 'Label if the box is not checked', + 'option_label_oui_explication' => 'Will be visible when displaying the results.', + 'option_label_oui_label' => 'Label if the box is checked', 'option_limite_branche_explication' => 'Limit the choice to one specific branch of the site', 'option_limite_branche_label' => 'Limit to one branch', 'option_maxlength_explication' => 'The user can not type more characters than this number.', @@ -133,6 +138,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_rows_label' => 'Lines number', 'option_size_explication' => 'Field width in characters. This option is not always applied/used because the CSS styles of your site can cancel it.', 'option_size_label' => 'Field size', + 'option_statut_label' => 'Specific status', 'option_type_choix_plusieurs' => 'Allow the user to choose several message recipients.', 'option_type_choix_tous' => 'Make all these authors as recipients. The user will not have choice.', 'option_type_choix_un' => 'Allow the user to choose only one message recipient (as a dropdown list).', @@ -141,11 +147,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_type_label' => 'Field type', 'option_type_password' => 'Text, hidden during input (eg. password)', 'option_type_text' => 'Normal', - 'option_valeur_non_explication' => 'Posted value if the checkbox is not selected', + 'option_valeur_non_explication' => 'Posted value if the checkbox is not selected. Attention, this is a technical value and not a displayed value.', 'option_valeur_non_label' => 'Value No', - 'option_valeur_oui_explication' => 'Posted value if the checkbox is selected', + 'option_valeur_oui_explication' => 'Posted value if the checkbox is selected. Attention, this is a technical value and not a displayed value.', 'option_valeur_oui_label' => 'Value Yes', + // P + 'plugin_yaml_inactif' => 'The YAML plugin is inactive. You must enable it for this page to be functional.', + // S 'saisie_auteurs_explication' => 'Allows you to select one or more authors', 'saisie_auteurs_titre' => 'Autors', @@ -157,6 +166,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_date_titre' => 'Date', 'saisie_destinataires_explication' => 'Used to select one or more recipients from among the pre-selected authors.', 'saisie_destinataires_titre' => 'Recipients', + 'saisie_email_explication' => 'Allows to have an email type field in HTML5.', + 'saisie_email_titre' => 'E-mail adress', 'saisie_explication_explication' => 'A general explanatory description.', 'saisie_explication_titre' => 'Explanation', 'saisie_fieldset_explication' => 'A frame which may include several fields.', @@ -192,8 +203,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_textarea_titre' => 'Textarea', // T + 'titre_page_saisies_doc' => 'Documentation of input fields', 'tous_visiteurs' => 'All visitors (even if not registered)', - 'tout_selectionner' => 'Select all', + 'tout_selectionner' => '(Un)select all', // V 'vue_sans_reponse' => '(no data entered)', diff --git a/www/plugins/saisies/lang/saisies_es.php b/www/plugins/saisies/lang/saisies_es.php index 35b671e3..5040c8b0 100644 --- a/www/plugins/saisies/lang/saisies_es.php +++ b/www/plugins/saisies/lang/saisies_es.php @@ -1,6 +1,6 @@ '(copia)', 'construire_action_supprimer' => 'Eliminar', 'construire_ajouter_champ' => 'Añadir un campo', + 'construire_ajouter_groupe' => 'Agregar un grupo', 'construire_attention_enregistrer' => '¡No olvide guardar sus cambios!', 'construire_attention_modifie' => 'Este formulario es diferente al original. Tiene la posibilidad de restablecerlo conforme a su estado inical. ', 'construire_attention_supprime' => 'Sus cambios implican suprimir campos. Confirme por favor esta nueva versión del formulario. ', @@ -107,6 +108,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_label_case_label' => 'Etiqueta posicionada al lado de la casilla', 'option_label_explication' => 'El título que se mostrará.', 'option_label_label' => 'Etiqueta', + 'option_limite_branche_explication' => 'Limitar la elección a una rama específica de un sitio', # RELIRE + 'option_limite_branche_label' => 'Limitar a una rama', 'option_maxlength_explication' => 'El campo no podrá contener más caracteres que este número.', 'option_maxlength_label' => 'Número máximo de caracteres', 'option_multiple_explication' => 'Se podrán seleccionar varias opciones', @@ -137,6 +140,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_type_label' => 'Tipo del campo', 'option_type_password' => 'Texto escondido mientras tecleando (por ej. contraseña)', 'option_type_text' => 'Normal', + 'option_valeur_non_label' => 'Sin valor', # RELIRE // S 'saisie_auteurs_explication' => 'Permite seleccionar uno o más autores', @@ -149,6 +153,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_date_titre' => 'Fecha', 'saisie_destinataires_explication' => 'Permite elegir una o varias personas destinatarias entre las autoras preseleccionadas.', 'saisie_destinataires_titre' => 'Personas destinatarias', + 'saisie_email_titre' => 'Dirección de correo electrónico', 'saisie_explication_explication' => 'Una explicación general.', 'saisie_explication_titre' => 'Explicación', 'saisie_fieldset_explication' => 'Un marco que podrá englobar varios campos.', @@ -170,6 +175,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_radio_titre' => 'Botones de opción', 'saisie_selecteur_article' => 'Muestra un navegador de selección de artículo', 'saisie_selecteur_article_titre' => 'Selector de artículo', + 'saisie_selecteur_document' => 'Muestra un selector de documento', # RELIRE + 'saisie_selecteur_document_titre' => 'Documento selector ', # RELIRE 'saisie_selecteur_rubrique' => 'Muestra un navegador de selección de sección', 'saisie_selecteur_rubrique_article' => 'Muestra un navegador de selección de artículo o de sección', 'saisie_selecteur_rubrique_article_titre' => 'Selector de artículo o de sección', @@ -183,7 +190,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // T 'tous_visiteurs' => 'Todos los visitantes (incluso no registrados)', - 'tout_selectionner' => 'Seleccionar todo', + 'tout_selectionner' => 'Seleccionar todo', # MODIF // V 'vue_sans_reponse' => 'Sin respuesta', diff --git a/www/plugins/saisies/lang/saisies_fa.php b/www/plugins/saisies/lang/saisies_fa.php index 1ccba8bb..6d721d4a 100644 --- a/www/plugins/saisies/lang/saisies_fa.php +++ b/www/plugins/saisies/lang/saisies_fa.php @@ -1,6 +1,6 @@ 'Affichage conditionnel lors du remplissage', 'option_attention_explication' => 'Un message plus important que l’explication.', 'option_attention_label' => 'Avertissement', + 'option_attribut_title_label' => 'Mettre un attribut title dans le label, contenant la valeur du champ. À utiliser avec modération.', 'option_autocomplete_defaut' => 'Laisser par défaut', 'option_autocomplete_explication' => 'Au chargement de la page, votre navigateur peut pré-remplir le champ en fonction de son historique', 'option_autocomplete_label' => 'Pré-remplissage du champ', @@ -106,6 +107,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_label_case_label' => 'Label placé à côté de la case', 'option_label_explication' => 'Le titre qui sera affiché.', 'option_label_label' => 'Label', + 'option_label_non_explication' => 'Sera visible lors de l’affichage des résultats.', + 'option_label_non_label' => 'Label si la case n’est pas cochée', + 'option_label_oui_explication' => 'Sera visible lors de l’affichage des résultats.', + 'option_label_oui_label' => 'Label si la case est cochée', 'option_limite_branche_explication' => 'Limitera le choix à une branche spécifique du site', 'option_limite_branche_label' => 'Limiter à une branche', 'option_maxlength_explication' => 'L’utilisateur ne pourra pas taper plus de caractères que ce nombre.', @@ -131,6 +136,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_rows_label' => 'Nombre de lignes', 'option_size_explication' => 'Largeur du champ en nombre de caractères. Cette option n’est pas toujours appliquée car les styles CSS de votre site peuvent l’annuler.', 'option_size_label' => 'Taille du champ', + 'option_statut_label' => 'Statut(s) particulier(s)', 'option_type_choix_plusieurs' => 'Permettre à l’utilisateur de choisir plusieurs destinataires.', 'option_type_choix_tous' => 'Mettre tous ces auteurs en destinataires. L’utilisateur n’aura aucun choix.', 'option_type_choix_un' => 'Permettre à l’utilisateur de choisir un seul destinataire (sous forme de liste déroulante).', @@ -139,11 +145,14 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_type_label' => 'Type du champ', 'option_type_password' => 'Texte masqué lors de la saisie (ex : mot de passe)', 'option_type_text' => 'Normal', - 'option_valeur_non_explication' => 'Valeur postée si le checkbox n’est pas sélectionné', + 'option_valeur_non_explication' => 'Valeur postée si la case n’est pas cochée. Attention, il s’agit d’une valeur technique et non d’une valeur affichée.', 'option_valeur_non_label' => 'Valeur non', - 'option_valeur_oui_explication' => 'Valeur postée si le checkbox est sélectionné', + 'option_valeur_oui_explication' => 'Valeur postée si la case est cochée. Attention, il s’agit d’une valeur technique et non d’une valeur affichée.', 'option_valeur_oui_label' => 'Valeur oui', + // P + 'plugin_yaml_inactif' => 'Le plugin YAML est inactif. Vous devez l’activer pour que cette page soit fonctionnelle.', + // S 'saisie_auteurs_explication' => 'Permet de sélectionner un ou plusieurs auteurs', 'saisie_auteurs_titre' => 'Auteurs', @@ -155,6 +164,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_date_titre' => 'Date', 'saisie_destinataires_explication' => 'Permet de choisir un ou plusieurs destinataires parmis des auteurs pré-sélectionné.', 'saisie_destinataires_titre' => 'Destinataires', + 'saisie_email_explication' => 'Permet d’avoir un champ de type email en HTML5.', + 'saisie_email_titre' => 'Adresse email', 'saisie_explication_explication' => 'Un texte explicatif général.', 'saisie_explication_titre' => 'Explication', 'saisie_fieldset_explication' => 'Un cadre qui pourra englober plusieurs champs.', @@ -190,8 +201,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_textarea_titre' => 'Bloc de texte', // T + 'titre_page_saisies_doc' => 'Documentation des saisies', 'tous_visiteurs' => 'Tous les visiteurs (même non enregistrés)', - 'tout_selectionner' => 'Tout sélectionner', + 'tout_selectionner' => 'Tout (dé)sélectionner', // V 'vue_sans_reponse' => 'Sans réponse', diff --git a/www/plugins/saisies/lang/saisies_fr_tu.php b/www/plugins/saisies/lang/saisies_fr_tu.php index 3b442a8c..6de3c822 100644 --- a/www/plugins/saisies/lang/saisies_fr_tu.php +++ b/www/plugins/saisies/lang/saisies_fr_tu.php @@ -1,6 +1,6 @@ '(copie)', 'construire_action_supprimer' => 'Supprimer', 'construire_ajouter_champ' => 'Ajouter un champ', + 'construire_ajouter_groupe' => 'Ajouter un groupe', 'construire_attention_enregistrer' => 'N’oublie pas d’enregistrer tes modifications !', 'construire_attention_modifie' => 'Le formulaire ci-dessous est différent du formulaire initial. Tu as la possibilité de le réinitialiser à son état avant tes modifications.', 'construire_attention_supprime' => 'Tes modifications comportent des suppressions de champs. Confirme l’enregistrement de cette nouvelle version du formulaire.', @@ -63,6 +64,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_afficher_si_remplissage_label' => 'Affichage conditionnel lors du remplissage', 'option_attention_explication' => 'Un message plus important que l’explication.', 'option_attention_label' => 'Avertissement', + 'option_attribut_title_label' => 'Mettre un attribut title dans le label, contenant la valeur du champ. À utiliser avec modération.', 'option_autocomplete_defaut' => 'Laisser par défaut', 'option_autocomplete_explication' => 'Au chargement de la page, ton navigateur peut pré-remplir le champ en fonction de son historique', 'option_autocomplete_label' => 'Pré-remplissage du champ', @@ -97,6 +99,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_heure_pas_label' => 'Intervalle des minutes dans le menu d’aide à la saisie', 'option_horaire_label' => 'Horaire', 'option_horaire_label_case' => 'Permettre de saisie aussi l’horaire', + 'option_id_groupe_label' => 'Groupe de mots', 'option_info_obligatoire_explication' => 'Tu peux modifier l’indication d’obligation par défaut : [Obligatoire].', 'option_info_obligatoire_label' => 'Indication d’obligation', 'option_inserer_barre_choix_edition' => 'barre d’édition complète', @@ -106,6 +109,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_label_case_label' => 'Label placé à côté de la case', 'option_label_explication' => 'Le titre qui sera affiché.', 'option_label_label' => 'Label', + 'option_limite_branche_explication' => 'Limitera le choix à une branche spécifique du site', + 'option_limite_branche_label' => 'Limiter à une branche', 'option_maxlength_explication' => 'L’utilisateur ne pourra pas taper plus de caractères que ce nombre.', 'option_maxlength_label' => 'Nombre de caractères maximum', 'option_multiple_explication' => 'L’utilisateur pourra sélectionner plusieurs valeurs', @@ -116,6 +121,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_option_destinataire_intro_label' => 'Label du premier choix vide (lorsque sous forme de liste)', 'option_option_intro_label' => 'Label du premier choix vide', 'option_option_statut_label' => 'Afficher les statuts', + 'option_placeholder_label' => 'Placeholder', 'option_pliable_label' => 'Pliable', 'option_pliable_label_case' => 'Le groupe de champs pourra être replié.', 'option_plie_label' => 'Déjà plié', @@ -128,6 +134,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_rows_label' => 'Nombre de lignes', 'option_size_explication' => 'Largeur du champ en nombre de caractères. Cette option n’est pas toujours appliquée car les styles CSS de ton site peuvent l’annuler.', 'option_size_label' => 'Taille du champ', + 'option_statut_label' => 'Statut(s) particulier(s)', 'option_type_choix_plusieurs' => 'Permettre à l’utilisateur de choisir plusieurs destinataires.', 'option_type_choix_tous' => 'Mettre tous ces auteurs en destinataires. L’utilisateur n’aura aucun choix.', 'option_type_choix_un' => 'Permettre à l’utilisateur de choisir un seul destinataire.Permettre à l’utilisateur de choisir un seul destinataire (sous forme de liste déroulante).', @@ -136,6 +143,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_type_label' => 'Type du champ', 'option_type_password' => 'Texte masqué lors de la saisie (ex : mot de passe)', 'option_type_text' => 'Normal', + 'option_valeur_non_explication' => 'Valeur postée si le checkbox n’est pas sélectionné', # MODIF + 'option_valeur_non_label' => 'Valeur non', + 'option_valeur_oui_explication' => 'Valeur postée si le checkbox est sélectionné', # MODIF + 'option_valeur_oui_label' => 'Valeur oui', // S 'saisie_auteurs_explication' => 'Permet de sélectionner un ou plusieurs auteurs', @@ -148,6 +159,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_date_titre' => 'Date', 'saisie_destinataires_explication' => 'Permet de choisir un ou plusieurs destinataires parmis des auteurs pré-sélectionné.', 'saisie_destinataires_titre' => 'Destinataires', + 'saisie_email_explication' => 'Permet d’avoir un champ de type email en HTML5.', + 'saisie_email_titre' => 'Adresse email', 'saisie_explication_explication' => 'Un texte explicatif général.', 'saisie_explication_titre' => 'Explication', 'saisie_fieldset_explication' => 'Un cadre qui pourra englober plusieurs champs.', @@ -158,6 +171,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_hidden_titre' => 'Champ caché', 'saisie_input_explication' => 'Une simple ligne de texte, pouvant être visible ou masquée (mot de passe).', 'saisie_input_titre' => 'Ligne de texte', + 'saisie_mot_explication' => 'Un ou plusieurs mots-clés d’un groupe de mot', + 'saisie_mot_titre' => 'Mot-clé', 'saisie_oui_non_explication' => 'Oui ou non, c’est clair ? :)', 'saisie_oui_non_titre' => 'Oui ou non', 'saisie_radio_defaut_choix1' => 'Un', @@ -167,6 +182,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_radio_titre' => 'Boutons radios', 'saisie_selecteur_article' => 'Affiche un navigateur de sélection d’article', 'saisie_selecteur_article_titre' => 'Sélecteur d’article', + 'saisie_selecteur_document' => 'Affiche un sélecteur de document', + 'saisie_selecteur_document_titre' => 'Sélecteur de document', 'saisie_selecteur_rubrique' => 'Affiche un navigateur de sélection de rubrique', 'saisie_selecteur_rubrique_article' => 'Affiche un navigateur de sélection d’article ou de rubrique', 'saisie_selecteur_rubrique_article_titre' => 'Sélecteur d’article ou rubrique', @@ -180,7 +197,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // T 'tous_visiteurs' => 'Tous les visiteurs (même non enregistrés)', - 'tout_selectionner' => 'Tout sélectionner', + 'tout_selectionner' => 'Tout (dé)sélectionner', // V 'vue_sans_reponse' => 'Sans réponse', diff --git a/www/plugins/saisies/lang/saisies_it.php b/www/plugins/saisies/lang/saisies_it.php index 974106b0..97a8f3be 100644 --- a/www/plugins/saisies/lang/saisies_it.php +++ b/www/plugins/saisies/lang/saisies_it.php @@ -1,6 +1,6 @@ 'Tonen indien ingevuld', 'option_attention_explication' => 'Een boodschap die belangrijker is dan de uitleg.', 'option_attention_label' => 'Waarschuwing', + 'option_attribut_title_label' => 'Zet een title attribuut op het label, dat de waarde van het veld bevat. Gebruiken met voorbehoud.', 'option_autocomplete_defaut' => 'Neem de standaardwaarde', 'option_autocomplete_explication' => 'Bij het laden kan de webbrowser de velden met historische informatie vullen', 'option_autocomplete_label' => 'Vul de velden vooraf in', @@ -90,7 +91,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_erreur_obligatoire_label' => 'Bericht verplicht veld', 'option_explication_explication' => 'Indien nodig, een korte omschrijving van het betroffen veld.', 'option_explication_label' => 'Uitleg', - 'option_groupe_affichage' => 'Tonen', + 'option_groupe_affichage' => 'Weergave', 'option_groupe_description' => 'Omschrijving', 'option_groupe_utilisation' => 'Gebruik', 'option_groupe_validation' => 'Validatie', @@ -108,6 +109,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_label_case_label' => 'Label staat naast de checkbox', 'option_label_explication' => 'De titel die zal worden weergegeven.', 'option_label_label' => 'Label', + 'option_label_non_explication' => 'Zal bij weergave van de resultaten zichtbaar zijn.', + 'option_label_non_label' => 'Label wanneer de checkbox niet is geselecteerd', + 'option_label_oui_explication' => 'Zal bij weergave van de resultaten zichtbaar zijn.', + 'option_label_oui_label' => 'Label wanneer de checkbox is geselecteerd', 'option_limite_branche_explication' => 'Beperk de keuze tot een specifieke tak van de site', 'option_limite_branche_label' => 'Tot één tak (hoofdrubriek) beperken', 'option_maxlength_explication' => 'De gebruikers kan niet meer tekens invoeren dan dit aantal.', @@ -133,19 +138,23 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_rows_label' => 'Aantal regels', 'option_size_explication' => 'Veldbreedte in tekens. Deze optie kan door CSS worden overschreven.', 'option_size_label' => 'Veldbreedte', + 'option_statut_label' => 'Specifieke status(sen)', 'option_type_choix_plusieurs' => 'Laat de gebruiker meerdere ontvangers kiezen.', - 'option_type_choix_tous' => 'Maak alle auteurs ontvanger. De gebruiker kan niet kiezen.', + 'option_type_choix_tous' => 'Maak alle auteurs ontvanger. De gebruiker kan niet kiezen.', 'option_type_choix_un' => 'Laat de gebruiker een enkele ontvanger kiezen.', 'option_type_choix_un_radio' => 'Sta de gebruiker toe een enkele geadresseerde te kiezen (door middel van een lijst).', 'option_type_explication' => 'In "discrete" modus wordt de inhoud door sterretjes vervangen.', 'option_type_label' => 'Veldtype', 'option_type_password' => 'Verborgen tekst tijdens invoer (bv: wachtwoord)', 'option_type_text' => 'Normaal', - 'option_valeur_non_explication' => 'Geposte waarde wanneer de checkbox niet wordt geselecteerd', + 'option_valeur_non_explication' => 'Geposte waarde wanneer de checkbox niet wordt geselecteerd. Let op: het gaat om een technische waarde, niet om een weergegeven waarde.', 'option_valeur_non_label' => 'Waarde non', - 'option_valeur_oui_explication' => 'Geposte waarde wanneer de checkbox is geselecteerd', + 'option_valeur_oui_explication' => 'Geposte waarde wanneer de checkbox is geselecteerd. Let op: het gaat om een technische waarde, niet om een weergegeven waarde.', 'option_valeur_oui_label' => 'Waarde oui', + // P + 'plugin_yaml_inactif' => 'Plugin YAML is inactief. Je moet hem activeren om deze pagina te kunnen laten functioneren.', + // S 'saisie_auteurs_explication' => 'Laat je een of meer auteurs kiezen', 'saisie_auteurs_titre' => 'Auteurs', @@ -157,6 +166,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_date_titre' => 'Datum', 'saisie_destinataires_explication' => 'Voor het kiezen van een of meer ontvangers uit voorgeselecteerde auteurs.', 'saisie_destinataires_titre' => 'Ontvangers', + 'saisie_email_explication' => 'Laat een veld van het type email toe in HTML5.', + 'saisie_email_titre' => 'Email-adres', 'saisie_explication_explication' => 'Een algemene omschrijving.', 'saisie_explication_titre' => 'Uitleg', 'saisie_fieldset_explication' => 'Een kader dat meerdere velden kan bevatten.', @@ -192,8 +203,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_textarea_titre' => 'Textarea', // T + 'titre_page_saisies_doc' => 'Documentatie van saisies', 'tous_visiteurs' => 'Alle bezoekers (ook niet-geregistreerde)', - 'tout_selectionner' => 'Alles kiezen', + 'tout_selectionner' => 'Alles/niets selecteren', // V 'vue_sans_reponse' => 'Zonder antwoord', diff --git a/www/plugins/saisies/lang/saisies_pt_br.php b/www/plugins/saisies/lang/saisies_pt_br.php index 9705f87c..1c2812b2 100644 --- a/www/plugins/saisies/lang/saisies_pt_br.php +++ b/www/plugins/saisies/lang/saisies_pt_br.php @@ -1,6 +1,6 @@ 'Rótulo localizado ao lado do checkbox', 'option_label_explication' => 'O titulo que será exibido.', 'option_label_label' => 'Rótulo', + 'option_limite_branche_explication' => 'Limita a escolha a um ramo específico do site', + 'option_limite_branche_label' => 'Limitar a um ramo', 'option_maxlength_explication' => 'O usuário não poderá digitar mais do que esse número de caracteres.', 'option_maxlength_label' => 'Número máximo de caracteres.', 'option_multiple_explication' => 'O usuário poderá selecionar vários valores.', @@ -141,9 +143,9 @@ Você pode indicar o início de um subgrupo, no formato "*Título do subgrupo". 'option_type_label' => 'Tipo do campo', 'option_type_password' => 'Texto mascarado durante o preenchimento (ex: senha).', 'option_type_text' => 'Normal', - 'option_valeur_non_explication' => 'Valor postado se o checkbox não estiver selecionado', + 'option_valeur_non_explication' => 'Valor postado se o checkbox não estiver selecionado', # MODIF 'option_valeur_non_label' => 'Valor não', - 'option_valeur_oui_explication' => 'VAlor postado se o checkbox estiver selecionado', + 'option_valeur_oui_explication' => 'VAlor postado se o checkbox estiver selecionado', # MODIF 'option_valeur_oui_label' => 'Valor sim', // S @@ -193,7 +195,7 @@ Você pode indicar o início de um subgrupo, no formato "*Título do subgrupo". // T 'tous_visiteurs' => 'Todos os visitantes (mesmo os não registrados)', - 'tout_selectionner' => 'Selecionar tudo', + 'tout_selectionner' => 'Selecionar tudo', # MODIF // V 'vue_sans_reponse' => 'Sem resposta', diff --git a/www/plugins/saisies/lang/saisies_ru.php b/www/plugins/saisies/lang/saisies_ru.php index 0f19484e..15bbf139 100644 --- a/www/plugins/saisies/lang/saisies_ru.php +++ b/www/plugins/saisies/lang/saisies_ru.php @@ -1,6 +1,6 @@ 'Все посетители (в том числе не зарегистрированные)', - 'tout_selectionner' => 'Выбрать все', + 'tout_selectionner' => 'Выбрать все', # MODIF // V 'vue_sans_reponse' => 'ничего не задано', diff --git a/www/plugins/saisies/lang/saisies_sk.php b/www/plugins/saisies/lang/saisies_sk.php index a2d89dd6..2f523bd4 100644 --- a/www/plugins/saisies/lang/saisies_sk.php +++ b/www/plugins/saisies/lang/saisies_sk.php @@ -1,6 +1,6 @@ '(kópia)', 'construire_action_supprimer' => 'Odstrániť', 'construire_ajouter_champ' => 'Pridať pole', + 'construire_ajouter_groupe' => 'Pridať skupinu', 'construire_attention_enregistrer' => 'Nezabudnite uložiť zmeny!', 'construire_attention_modifie' => 'Tento formulár sa odlišuje od pôvodného. Máte možnosť ho obnoviť do stavu pred svojimi zmenami.', 'construire_attention_supprime' => 'Medzi vašimi zmenami je vymazanie niekoľkých polí. Potvrďte, prosím, registráciu tejto verzie formulára.', @@ -137,6 +138,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'option_type_label' => 'Typ poľa', 'option_type_password' => 'Skrývaný text pri písaní (napr. heslo)', 'option_type_text' => 'Normálny', + 'option_valeur_non_label' => 'Hodnota nie', + 'option_valeur_oui_label' => 'Hodnota áno', // S 'saisie_auteurs_explication' => 'Umožňuje vám vybrať jedného alebo viacerých autorov', @@ -149,6 +152,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'saisie_date_titre' => 'Dátum', 'saisie_destinataires_explication' => 'Používa sa na výber jedného príjemcu alebo viacerých z dopredu vybraných autorov.', 'saisie_destinataires_titre' => 'Príjemcovia', + 'saisie_email_titre' => 'E-mailová adresa', 'saisie_explication_explication' => 'Všeobecný vysvetľujúci text.', 'saisie_explication_titre' => 'Vysvetlenie', 'saisie_fieldset_explication' => 'Rám, v ktorom môže byť niekoľko polí.', @@ -183,7 +187,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // T 'tous_visiteurs' => 'Všetci návštevníci (aj ne­za­re­gis­tro­va­ní)', - 'tout_selectionner' => 'Vybrať všetko', + 'tout_selectionner' => 'O(d)značiť všetko', // V 'vue_sans_reponse' => 'Bez reakcie', diff --git a/www/plugins/saisies/paquet.xml b/www/plugins/saisies/paquet.xml index 5fe2150e..de8bb178 100644 --- a/www/plugins/saisies/paquet.xml +++ b/www/plugins/saisies/paquet.xml @@ -1,16 +1,16 @@ Saisies - Matthieu Marcillaud - RastaPopoulos - Joseph + Matthieu Marcillaud + RastaPopoulos + Joseph Les Développements Durables GNU/GPL @@ -25,6 +25,9 @@ - + + + + diff --git a/www/plugins/saisies/prive/squelettes/contenu/saisies_doc.html b/www/plugins/saisies/prive/squelettes/contenu/saisies_doc.html new file mode 100644 index 00000000..1cec6d09 --- /dev/null +++ b/www/plugins/saisies/prive/squelettes/contenu/saisies_doc.html @@ -0,0 +1,34 @@ +

      <:saisies:titre_page_saisies_doc:>

      +
      + + + + [(#BOITE_OUVRIR)] +

      [(#ICONE|balise_img) ][(#TITRE)] [((#CLE))]

      +

      [(#DESCRIPTION)]

      + +
      +

      [(#VALEUR{options/label}|saisies_label)]

      + +
        + +
      • [(#VALEUR{options/label}|sinon{#VALEUR{options/label_case}}|saisies_label)] [((#VALEUR{options/nom}))][(#VALEUR{options/label}|oui|et{#VALEUR{options/label_case}|oui})[(#VALEUR{options/label_case}|saisies_label)]] + [(#VALEUR{options/explication}|oui)
        [(#VALEUR{options/explication}|saisies_label)]] + [(#VALEUR{options/defaut}|oui)
        [Par défaut : (#VALEUR{options/defaut}|saisies_label)]] + +
        Choix possibles : +
          +
        • [(#VALEUR|saisies_label)][ ((#CLE))]
        • +
        +
        +
      • +
        +
      +
      +
      +
      + [(#BOITE_FERMER)] +
      +
      +<:saisies:plugin_yaml_inactif:> + diff --git a/www/plugins/saisies/prive/squelettes/navigation/saisies_doc.html b/www/plugins/saisies/prive/squelettes/navigation/saisies_doc.html new file mode 100644 index 00000000..8b0c582e --- /dev/null +++ b/www/plugins/saisies/prive/squelettes/navigation/saisies_doc.html @@ -0,0 +1,9 @@ + + + diff --git a/www/plugins/saisies/prive/style_prive_plugin_saisies.html b/www/plugins/saisies/prive/style_prive_plugin_saisies.html new file mode 100644 index 00000000..523220c6 --- /dev/null +++ b/www/plugins/saisies/prive/style_prive_plugin_saisies.html @@ -0,0 +1,23 @@ +[(#REM) + \ No newline at end of file diff --git a/www/prive/formulaires/configurer_preferences_menus.php b/www/prive/formulaires/configurer_preferences_menus.php new file mode 100644 index 00000000..1371e01e --- /dev/null +++ b/www/prive/formulaires/configurer_preferences_menus.php @@ -0,0 +1,78 @@ + serialize($GLOBALS['visiteur_session']['prefs'])); + auteur_modifier($GLOBALS['visiteur_session']['id_auteur'], $c); + } + } + + return array('message_ok' => _T('config_info_enregistree'), 'editable' => true); +} diff --git a/www/prive/formulaires/configurer_previsualiseur.html b/www/prive/formulaires/configurer_previsualiseur.html index e128a42d..c8363c21 100644 --- a/www/prive/formulaires/configurer_previsualiseur.html +++ b/www/prive/formulaires/configurer_previsualiseur.html @@ -7,23 +7,23 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
        + #ACTION_FORMULAIRE +
        #SET{name,preview}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ]
        -
        -
        -
      • -
      +
      +
      [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

       

      diff --git a/www/prive/formulaires/configurer_previsualiseur.php b/www/prive/formulaires/configurer_previsualiseur.php index 1cc1d23a..5b87e9fe 100644 --- a/www/prive/formulaires/configurer_previsualiseur.php +++ b/www/prive/formulaires/configurer_previsualiseur.php @@ -3,32 +3,36 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/presentation'); -function formulaires_configurer_previsualiseur_charger_dist(){ - $valeurs['preview'] = explode(',',$GLOBALS['meta']['preview']); +function formulaires_configurer_previsualiseur_charger_dist() { + $valeurs = array(); + $valeurs['preview'] = explode(',', $GLOBALS['meta']['preview']); return $valeurs; } -function formulaires_configurer_previsualiseur_traiter_dist(){ - $res = array('editable'=>true); +function formulaires_configurer_previsualiseur_traiter_dist() { + $res = array('editable' => true); - if ($i = _request('preview') AND is_array($i)) - $i = ',' . implode(",",$i) . ','; + if ($i = _request('preview') and is_array($i)) { + $i = ',' . implode(',', $i) . ','; + } ecrire_meta('preview', $i); $res['message_ok'] = _T('config_info_enregistree'); + return $res; } - diff --git a/www/prive/formulaires/configurer_redacteurs.html b/www/prive/formulaires/configurer_redacteurs.html index c7beb0be..eebd2d27 100644 --- a/www/prive/formulaires/configurer_redacteurs.html +++ b/www/prive/formulaires/configurer_redacteurs.html @@ -7,10 +7,10 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
        + #ACTION_FORMULAIRE +
        #SET{name,accepter_inscriptions}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ]
        @@ -21,8 +21,8 @@
        -
      • -
      +
      +
      [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

       

      diff --git a/www/prive/formulaires/configurer_redacteurs.php b/www/prive/formulaires/configurer_redacteurs.php index 560901fe..e8a656aa 100644 --- a/www/prive/formulaires/configurer_redacteurs.php +++ b/www/prive/formulaires/configurer_redacteurs.php @@ -3,42 +3,49 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function formulaires_configurer_redacteurs_charger_dist(){ - foreach(array( - "accepter_inscriptions", - ) as $m) +function formulaires_configurer_redacteurs_charger_dist() { + $valeurs = array(); + foreach (array( + 'accepter_inscriptions', + ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; + } return $valeurs; } -function formulaires_configurer_redacteurs_traiter_dist(){ - $res = array('editable'=>true); +function formulaires_configurer_redacteurs_traiter_dist() { + $res = array('editable' => true); // Modification du reglage accepter_inscriptions => vider le cache // (pour repercuter la modif sur le panneau de login) if (($i = _request('accepter_inscriptions') - AND $i != $GLOBALS['meta']['accepter_inscriptions'])) { + and $i != $GLOBALS['meta']['accepter_inscriptions']) + ) { include_spip('inc/invalideur'); - suivre_invalideur("1"); # tout effacer + suivre_invalideur('1'); # tout effacer } - foreach(array( - "accepter_inscriptions", - ) as $m) - if (!is_null($v=_request($m))) - ecrire_meta($m, $v=='oui'?'oui':'non'); + foreach (array( + 'accepter_inscriptions', + ) as $m) { + if (!is_null($v = _request($m))) { + ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); + } + } $res['message_ok'] = _T('config_info_enregistree'); + return $res; } - diff --git a/www/prive/formulaires/configurer_reducteur.html b/www/prive/formulaires/configurer_reducteur.html index 52a8f4c2..59c810c3 100644 --- a/www/prive/formulaires/configurer_reducteur.html +++ b/www/prive/formulaires/configurer_reducteur.html @@ -6,11 +6,11 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE -
        +
        #SET{name,image_process}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ] @@ -20,7 +20,7 @@ type="submit" class="vignette_reducteur[(#ENV{image_process}|=={#GET{process}}|oui)on]" style="background-image:url((#GET{process}|url_vignette_choix));" - name="image_process_#EVAL{chr(91)}[(#GET{process})]#EVAL{chr(93)}"> + name="image_process_\[#GET{process}\]"> [(#GET{process}|strtoupper)] ] #SET{process,gd2} @@ -28,7 +28,7 @@ type="submit" class="vignette_reducteur[(#ENV{image_process}|=={#GET{process}}|oui)on]" style="background-image:url((#GET{process}|url_vignette_choix));" - name="image_process_#EVAL{chr(91)}[(#GET{process})]#EVAL{chr(93)}"> + name="image_process_\[#GET{process}\]"> [(#GET{process}|strtoupper)] ] #SET{process,netpbm} @@ -36,7 +36,7 @@ type="submit" class="vignette_reducteur[(#ENV{image_process}|=={#GET{process}}|oui)on]" style="background-image:url((#GET{process}|url_vignette_choix));" - name="image_process_#EVAL{chr(91)}[(#GET{process})]#EVAL{chr(93)}"> + name="image_process_\[#GET{process}\]"> [(#GET{process}|strtoupper)] ] #SET{process,imagick} @@ -44,7 +44,7 @@ type="submit" class="vignette_reducteur[(#ENV{image_process}|=={#GET{process}}|oui)on]" style="background-image:url((#GET{process}|url_vignette_choix));" - name="image_process_#EVAL{chr(91)}[(#GET{process})]#EVAL{chr(93)}"> + name="image_process_\[#GET{process}\]"> [(#GET{process}|strtoupper)] ] #SET{process,convert} @@ -52,50 +52,54 @@ type="submit" class="vignette_reducteur[(#ENV{image_process}|=={#GET{process}}|oui)on]" style="background-image:url((#GET{process}|url_vignette_choix));" - name="image_process_#EVAL{chr(91)}[(#GET{process})]#EVAL{chr(93)}"> + name="image_process_\[#GET{process}\]"> [(#GET{process}|strtoupper)] ]

        <:info_image_process2:>

        -
      • +
        [(#ENV{image_process}|match{^(gd1|gd2)$}|oui) #SET{name,max_taille_vignettes}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) - ] -
      • + ] +
      ][(#ENV{formats_graphiques}|oui) -
    • +
      <:info_generation_miniatures_images:>

      <:info_ajout_image:>

      -
        +
        #SET{name,creer_preview}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ]
        + [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] + />
        + [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] + />
        -
      • +
        #SET{name,taille_preview}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ] -
      • -
      +
      + -
    • + ] - + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

       

      diff --git a/www/prive/formulaires/configurer_reducteur.php b/www/prive/formulaires/configurer_reducteur.php index 7120eb74..1014b73c 100644 --- a/www/prive/formulaires/configurer_reducteur.php +++ b/www/prive/formulaires/configurer_reducteur.php @@ -3,98 +3,144 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Formulaire de configuration pour choisir la librairie graphique + * et les tailles de redimensionnement des vignettes + * + * @package SPIP\Core\Formulaires + **/ -function formulaires_configurer_reducteur_charger_dist(){ - foreach(array( - "image_process", - "formats_graphiques", - "creer_preview", - "taille_preview", - ) as $m) - $valeurs[$m] = $GLOBALS['meta'][$m]; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +/** + * Chargement du formulaire de configuration de la librairie graphique + * + * @return array + * Environnement du formulaire + **/ +function formulaires_configurer_reducteur_charger_dist() { + $valeurs = array(); + foreach (array( + 'image_process', + 'formats_graphiques', + 'creer_preview', + 'taille_preview', + ) as $m) { + $valeurs[$m] = isset($GLOBALS['meta'][$m]) ? $GLOBALS['meta'][$m] : null; + } $valeurs['taille_preview'] = intval($valeurs['taille_preview']); - if ($valeurs['taille_preview']<10) + if ($valeurs['taille_preview'] < 10) { $valeurs['taille_preview'] = 120; + } + return $valeurs; } -function formulaires_configurer_reducteur_traiter_dist(){ - $res = array('editable'=>true); +/** + * Traitements du formulaire de configuration de la librairie graphique + * + * @return array + * Retours des traitements + **/ +function formulaires_configurer_reducteur_traiter_dist() { + $res = array('editable' => true); if (is_array($image_process = _request('image_process_'))) { $image_process = array_keys($image_process); $image_process = reset($image_process); - // application du choix de vignette + // application du choix de vignette if ($image_process) { - // mettre a jour les formats graphiques lisibles + // mettre a jour les formats graphiques lisibles switch ($image_process) { - case 'gd1': - case 'gd2': - $formats_graphiques = $GLOBALS['meta']['gd_formats_read']; - break; - case 'netpbm': - $formats_graphiques = $GLOBALS['meta']['netpbm_formats']; - break; - case 'convert': - case 'imagick': - $formats_graphiques = 'gif,jpg,png'; - break; - default: #debug - $formats_graphiques = ''; - $image_process = 'non'; - break; - } - ecrire_meta('formats_graphiques', $formats_graphiques,'non'); - ecrire_meta('image_process', $image_process,'non'); + case 'gd1': + case 'gd2': + $formats_graphiques = $GLOBALS['meta']['gd_formats_read']; + break; + case 'netpbm': + $formats_graphiques = $GLOBALS['meta']['netpbm_formats']; + break; + case 'convert': + case 'imagick': + $formats_graphiques = 'gif,jpg,png'; + break; + default: #debug + $formats_graphiques = ''; + $image_process = 'non'; + break; + } + ecrire_meta('formats_graphiques', $formats_graphiques, 'non'); + ecrire_meta('image_process', $image_process, 'non'); } } - foreach(array( - "creer_preview", - ) as $m) - if (!is_null($v=_request($m))) - ecrire_meta($m, $v=='oui'?'oui':'non'); - if (!is_null($v=_request('taille_preview'))) - ecrire_meta("taille_preview", intval($v)); + foreach (array( + 'creer_preview' + ) as $m) { + if (!is_null($v = _request($m))) { + ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); + } + } + if (!is_null($v = _request('taille_preview'))) { + ecrire_meta('taille_preview', intval($v)); + } $res['message_ok'] = _T('config_info_enregistree'); + return $res; } -function url_vignette_choix($process){ - switch ($process){ +/** + * Indique si une librairie graphique peut être utilisée et retourne alors + * une URL pour tester la librairie + * + * @param string $process + * Code de la libriairie, parmi gd2, gd1, netpbm, imagick ou convert + * @return string + * URL d'action pour tester la librairie graphique en créant une vignette + **/ +function url_vignette_choix($process) { + switch ($process) { case 'gd2': - if (!function_exists("ImageCreateTrueColor")) + if (!function_exists('ImageCreateTrueColor')) { return ''; + } + break; case 'gd1': if (!function_exists('ImageGif') - AND !function_exists('ImageJpeg') - AND !function_exists('ImagePng')) + and !function_exists('ImageJpeg') + and !function_exists('ImagePng') + ) { return ''; + } break; case 'netpbm': - if (defined('_PNMSCALE_COMMAND') AND _PNMSCALE_COMMAND=='') + if (defined('_PNMSCALE_COMMAND') and _PNMSCALE_COMMAND == '') { return ''; + } break; case 'imagick': - if (!method_exists('Imagick','readImage')) + if (!method_exists('Imagick', 'readImage')) { return ''; + } break; case 'convert': - if (defined('_CONVERT_COMMAND') AND _CONVERT_COMMAND=='') + if (defined('_CONVERT_COMMAND') and _CONVERT_COMMAND == '') { return ''; + } break; } - return generer_url_action("tester", "arg=$process&time=".time()); + + return generer_url_action('tester', "arg=$process&time=" . time()); } diff --git a/www/prive/formulaires/configurer_relayeur.html b/www/prive/formulaires/configurer_relayeur.html index 63415bdd..dd1f9ab7 100644 --- a/www/prive/formulaires/configurer_relayeur.html +++ b/www/prive/formulaires/configurer_relayeur.html @@ -8,35 +8,35 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE -
        +
        #SET{name,http_proxy}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ] -
      • +
        #SET{exemple,#VAL{}|concat{'127.0.0.1 .mondomaine.net',''}} #SET{name,http_noproxy}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ]

        <:pas_de_proxy_pour{exemple=#GET{exemple}}:>

        -
      • +
      #SET{name,test_proxy}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
    • +
      [ (#GET{erreurs}) ]

      <:texte_test_proxy:>

      -
    • - + + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

       

      diff --git a/www/prive/formulaires/configurer_relayeur.php b/www/prive/formulaires/configurer_relayeur.php index a5effd2e..4bb0a371 100644 --- a/www/prive/formulaires/configurer_relayeur.php +++ b/www/prive/formulaires/configurer_relayeur.php @@ -3,51 +3,53 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/presentation'); include_spip('inc/config'); -function formulaires_configurer_relayeur_charger_dist(){ +function formulaires_configurer_relayeur_charger_dist() { $valeurs = array( - 'http_proxy' =>no_password_proxy_url(lire_config('http_proxy', '')), - 'http_noproxy' => lire_config('http_noproxy', ''), - 'test_proxy' => 'http://www.spip.net/', - ); + 'http_proxy' => no_password_proxy_url(lire_config('http_proxy', '')), + 'http_noproxy' => lire_config('http_noproxy', ''), + 'test_proxy' => 'http://www.spip.net/', + ); return $valeurs; } -function formulaires_configurer_relayeur_verifier_dist(){ +function formulaires_configurer_relayeur_verifier_dist() { $erreurs = array(); $http_proxy = relayeur_saisie_ou_config(_request('http_proxy'), lire_config('http_proxy', '')); $http_noproxy = _request('http_noproxy'); - if ($http_proxy AND !tester_url_absolue($http_proxy)){ - $erreurs['http_proxy'] = _L('format_proxy_incorrect'); + if ($http_proxy and !tester_url_absolue($http_proxy)) { + $erreurs['http_proxy'] = _T('info_url_proxy_pas_conforme'); } - if (!isset($erreurs['http_proxy']) AND _request('tester_proxy')) { - if (!$http_proxy) + if (!isset($erreurs['http_proxy']) and _request('tester_proxy')) { + if (!$http_proxy) { $erreurs['http_proxy'] = _T('info_obligatoire'); - else { + } else { include_spip('inc/distant'); $test_proxy = _request('test_proxy'); $t = parse_url($test_proxy); if (!@$t['host']) { $erreurs['test_proxy'] = _T('info_adresse_non_indiquee'); - } - else { + } else { include_spip('inc/texte'); // pour aide, couper, lang - $info = ""; - if (!need_proxy($t['host'],$http_proxy,$http_noproxy)) - $info = ""._T('page_pas_proxy')."
      "; + $info = ''; + if (!need_proxy($t['host'], $http_proxy, $http_noproxy)) { + $info = '' . _T('page_pas_proxy') . '
      '; + } // il faut fausser le proxy actuel pour faire le test ! $cur_http_proxy = $GLOBALS['meta']['http_proxy']; @@ -58,81 +60,91 @@ function formulaires_configurer_relayeur_verifier_dist(){ $GLOBALS['meta']['http_proxy'] = $cur_http_proxy; $GLOBALS['meta']['http_noproxy'] = $cur_http_noproxy; if ($page) { - $erreurs['message_ok'] = _T('info_proxy_ok')."
      $info\n".couper(entites_html($page),300).""; - } - else { - $erreurs['message_erreur'] = $info._T('info_impossible_lire_page', array('test_proxy' => "$test_proxy")) - . " ".no_password_proxy_url($http_proxy)."." - . aide('confhttpproxy'); + $erreurs['message_ok'] = _T('info_proxy_ok') . "
      $info\n" . couper(entites_html($page), 300) . ''; + $erreurs['message_erreur'] = ''; + } else { + $erreurs['message_erreur'] = $info . _T( + 'info_impossible_lire_page', + array('test_proxy' => "$test_proxy") + ) + . ' ' . no_password_proxy_url($http_proxy) . '.' + . aider('confhttpproxy'); } } - } } + return $erreurs; } -function formulaires_configurer_relayeur_traiter_dist(){ - $res = array('editable'=>true); +function formulaires_configurer_relayeur_traiter_dist() { + $res = array('editable' => true); $http_proxy = relayeur_saisie_ou_config(_request('http_proxy'), lire_config('http_proxy', '')); $http_noproxy = _request('http_noproxy'); - if ($http_proxy !== NULL) + if ($http_proxy !== null) { ecrire_meta('http_proxy', $http_proxy); + } - if ($http_noproxy !== NULL) + if ($http_noproxy !== null) { ecrire_meta('http_noproxy', $http_noproxy); - + } + $res['message_ok'] = _T('config_info_enregistree'); + return $res; } -function relayeur_saisie_ou_config($http_proxy, $default){ +function relayeur_saisie_ou_config($http_proxy, $default) { // http_proxy : ne pas prendre en compte la modif si le password est '****' - if (preg_match(',:\*\*\*\*@,', $http_proxy)) + if (preg_match(',:\*\*\*\*@,', $http_proxy)) { $http_proxy = $default; + } + return $http_proxy; } // Function glue_url : le pendant de parse_url -// http://doc.spip.org/@glue_url -function glue_url ($url){ - if (!is_array($url)){ +// http://code.spip.net/@glue_url +function glue_url($url) { + if (!is_array($url)) { return false; } // scheme - $uri = (!empty($url['scheme'])) ? $url['scheme'].'://' : ''; + $uri = (!empty($url['scheme'])) ? $url['scheme'] . '://' : ''; // user & pass - if (!empty($url['user'])){ - $uri .= $url['user'].':'.$url['pass'].'@'; + if (!empty($url['user'])) { + $uri .= $url['user'] . ':' . $url['pass'] . '@'; } // host $uri .= $url['host']; // port - $port = (!empty($url['port'])) ? ':'.$url['port'] : ''; + $port = (!empty($url['port'])) ? ':' . $url['port'] : ''; $uri .= $port; // path $uri .= $url['path']; // fragment or query - if (isset($url['fragment'])){ - $uri .= '#'.$url['fragment']; - } elseif (isset($url['query'])){ - $uri .= '?'.$url['query']; + if (isset($url['fragment'])) { + $uri .= '#' . $url['fragment']; + } elseif (isset($url['query'])) { + $uri .= '?' . $url['query']; } + return $uri; } // Ne pas afficher la partie 'password' du proxy -// http://doc.spip.org/@no_password_proxy_url +// http://code.spip.net/@no_password_proxy_url function no_password_proxy_url($http_proxy) { if ($http_proxy - AND $p = @parse_url($http_proxy) - AND isset($p['pass']) - AND $p['pass']) { + and $p = @parse_url($http_proxy) + and isset($p['pass']) + and $p['pass'] + ) { $p['pass'] = '****'; $http_proxy = glue_url($p); } + return $http_proxy; } -?> diff --git a/www/prive/formulaires/configurer_rubriques.html b/www/prive/formulaires/configurer_rubriques.html index 340d1e74..d0efda3f 100644 --- a/www/prive/formulaires/configurer_rubriques.html +++ b/www/prive/formulaires/configurer_rubriques.html @@ -7,10 +7,10 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
        + #ACTION_FORMULAIRE +
        #SET{name,rubriques_descriptif}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ]
        @@ -20,9 +20,9 @@
        -
      • +
        #SET{name,rubriques_texte}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ]
        @@ -32,8 +32,8 @@
        -
      • -
      +
      + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

       

      diff --git a/www/prive/formulaires/configurer_rubriques.php b/www/prive/formulaires/configurer_rubriques.php index c73dbca2..769b46c4 100644 --- a/www/prive/formulaires/configurer_rubriques.php +++ b/www/prive/formulaires/configurer_rubriques.php @@ -3,36 +3,42 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function formulaires_configurer_rubriques_charger_dist(){ - foreach(array( - "rubriques_descriptif", - "rubriques_texte", - ) as $m) +function formulaires_configurer_rubriques_charger_dist() { + $valeurs = array(); + foreach (array( + 'rubriques_descriptif', + 'rubriques_texte' + ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; + } return $valeurs; } -function formulaires_configurer_rubriques_traiter_dist(){ - $res = array('editable'=>true); - foreach(array( - "rubriques_descriptif", - "rubriques_texte", - ) as $m) - if (!is_null($v=_request($m))) - ecrire_meta($m, $v=='oui'?'oui':'non'); +function formulaires_configurer_rubriques_traiter_dist() { + $res = array('editable' => true); + foreach (array( + 'rubriques_descriptif', + 'rubriques_texte' + ) as $m) { + if (!is_null($v = _request($m))) { + ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); + } + } $res['message_ok'] = _T('config_info_enregistree'); + return $res; } - diff --git a/www/prive/formulaires/configurer_transcodeur.html b/www/prive/formulaires/configurer_transcodeur.html index 5ccf54cf..2b0ee40a 100644 --- a/www/prive/formulaires/configurer_transcodeur.html +++ b/www/prive/formulaires/configurer_transcodeur.html @@ -7,22 +7,20 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
        -
      • -
        -

        <:texte_jeu_caractere_3:>

        -
        #ENV{charset}
        -

        <:texte_jeu_caractere_4:>

        -
        -
      • + #ACTION_FORMULAIRE +
        +
        +

        <:texte_jeu_caractere_3:>

        +
        #ENV{charset}
        +

        <:texte_jeu_caractere_4:>

        +
        #SET{name,charset}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ] -
      • -
      +
      + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

       

      diff --git a/www/prive/formulaires/configurer_transcodeur.php b/www/prive/formulaires/configurer_transcodeur.php index 346ed192..5bad0398 100644 --- a/www/prive/formulaires/configurer_transcodeur.php +++ b/www/prive/formulaires/configurer_transcodeur.php @@ -3,40 +3,43 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function formulaires_configurer_transcodeur_charger_dist(){ +function formulaires_configurer_transcodeur_charger_dist() { $valeurs = array( - 'charset' => $GLOBALS['meta']["charset"], + 'charset' => $GLOBALS['meta']['charset'], ); return $valeurs; } -function formulaires_configurer_transcodeur_verifier_dist(){ +function formulaires_configurer_transcodeur_verifier_dist() { include_spip('inc/charsets'); - + $erreurs = array(); - if (!$charset=_request('charset')) + if (!$charset = _request('charset')) { $erreurs['charset'] = _T('info_obligatoire'); - elseif ($charset!='utf-8' AND !load_charset($charset)) - $erreurs['charset'] = _T('utf8_convert_erreur_orig',array('charset'=>$charset)); + } elseif ($charset != 'utf-8' and !load_charset($charset)) { + $erreurs['charset'] = _T('utf8_convert_erreur_orig', array('charset' => entites_html($charset))); + } return $erreurs; } -function formulaires_configurer_transcodeur_traiter_dist(){ - $res = array('editable'=>true); +function formulaires_configurer_transcodeur_traiter_dist() { + $res = array('editable' => true); ecrire_meta('charset', _request('charset')); $res['message_ok'] = _T('config_info_enregistree'); + return $res; } -?> diff --git a/www/prive/formulaires/configurer_visiteurs.html b/www/prive/formulaires/configurer_visiteurs.html index 1a3d30df..f0e14484 100644 --- a/www/prive/formulaires/configurer_visiteurs.html +++ b/www/prive/formulaires/configurer_visiteurs.html @@ -7,10 +7,10 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
        + #ACTION_FORMULAIRE +
        #SET{name,accepter_visiteurs}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ]
        @@ -21,8 +21,8 @@
        -
      • -
      +
      + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

       

      diff --git a/www/prive/formulaires/configurer_visiteurs.php b/www/prive/formulaires/configurer_visiteurs.php index b8438ff3..c0304557 100644 --- a/www/prive/formulaires/configurer_visiteurs.php +++ b/www/prive/formulaires/configurer_visiteurs.php @@ -3,46 +3,54 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/presentation'); -function formulaires_configurer_visiteurs_charger_dist(){ - if (avoir_visiteurs(false,false)) +function formulaires_configurer_visiteurs_charger_dist() { + $valeurs = array(); + if (avoir_visiteurs(false, false)) { $valeurs['editable'] = false; + } - foreach(array( - "accepter_visiteurs", - ) as $m) + foreach (array( + 'accepter_visiteurs' + ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; + } return $valeurs; } -function formulaires_configurer_visiteurs_traiter_dist(){ - $res = array('editable'=>true); +function formulaires_configurer_visiteurs_traiter_dist() { + $res = array('editable' => true); // Modification du reglage accepter_inscriptions => vider le cache // (pour repercuter la modif sur le panneau de login) if (($i = _request('accepter_visiteurs') - AND $i != $GLOBALS['meta']['accepter_visiteurs'])) { + and $i != $GLOBALS['meta']['accepter_visiteurs']) + ) { include_spip('inc/invalideur'); - suivre_invalideur("1"); # tout effacer + suivre_invalideur('1'); # tout effacer } - foreach(array( - "accepter_visiteurs", - ) as $m) - if (!is_null($v=_request($m))) - ecrire_meta($m, $v=='oui'?'oui':'non'); + foreach (array( + 'accepter_visiteurs', + ) as $m) { + if (!is_null($v = _request($m))) { + ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); + } + } $res['message_ok'] = _T('config_info_enregistree'); + return $res; } - diff --git a/www/prive/formulaires/dater.html b/www/prive/formulaires/dater.html index 7bc99da8..2c2b9c50 100644 --- a/www/prive/formulaires/dater.html +++ b/www/prive/formulaires/dater.html @@ -3,35 +3,38 @@ [

      (#ENV*{message_erreur})

      ] [(#ENV{editable})
      + [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE ] -
        +
        #SET{name,date}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ] [(#ENV*{afficher_#GET{name}}|affdate)] - [(#ENV{editable}) - [<:bouton_changer:> \(#ENV{_label_date}\)] + + [] - ] -
      • - [(#ENV{_editer_date_anterieure}|oui) + +
        + #SET{name,date_redac}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ] [(#ENV*{afficher_#GET{name}}|affdate|sinon{<:jour_non_connu_nc:>})] - [(#ENV{editable}) + @@ -40,20 +43,20 @@ - ] + -
      • - ] -
      +
      + + + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] + [(#ENV{editable}) - [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] - -

      +

        -

      diff --git a/www/prive/formulaires/dater.php b/www/prive/formulaires/dater.php index f8aebccd..042f2345 100644 --- a/www/prive/formulaires/dater.php +++ b/www/prive/formulaires/dater.php @@ -3,59 +3,91 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion du formulaire de date + * + * @package SPIP\Core\Formulaires + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function formulaires_dater_charger_dist($objet, $id_objet, $retour='', $options=array()){ + +/** + * Chargement du formulaire d'édition d'une date + * + * @param string $objet + * Type d'objet + * @param int $id_objet + * Identifiant de l'objet + * @param string $retour + * URL de redirection après le traitement + * @param array|string $options + * Options. Si string, unserialize pour obtenir un tableau. + * + * - date_redac : Permet de modifier en plus la date de rédaction antérieure + * @return array + * Environnement du formulaire + **/ +function formulaires_dater_charger_dist($objet, $id_objet, $retour = '', $options = array()) { $objet = objet_type($objet); - if (!$objet OR !intval($id_objet)) + if (!$objet or !intval($id_objet)) { return false; + } - if (!is_array($options)) + if (!is_array($options)) { $options = unserialize($options); + } $_id_objet = id_table_objet($objet); $table = table_objet($objet); - $trouver_table = charger_fonction('trouver_table','base'); + $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table); - if (!$desc) + if (!$desc) { return false; + } - $champ_date = $desc['date']?$desc['date']:'date'; - if (!isset($desc['field'][$champ_date])) + $champ_date = $desc['date'] ? $desc['date'] : 'date'; + if (!isset($desc['field'][$champ_date])) { return false; + } $valeurs = array( - 'objet'=>$objet, - 'id_objet'=>$id_objet, - 'id'=>$id_objet, + 'objet' => $objet, + 'id_objet' => $id_objet, + 'id' => $id_objet, ); $select = "$champ_date as date"; - if (isset($desc['field']['date_redac'])) - $select .= ",date_redac"; - if (isset($desc['field']['statut'])) - $select .= ",statut"; + if (isset($desc['field']['date_redac'])) { + $select .= ',date_redac'; + } + if (isset($desc['field']['statut'])) { + $select .= ',statut'; + } - $row = sql_fetsel($select, $desc['table'], "$_id_objet=".intval($id_objet)); - $statut = isset($row['statut'])?$row['statut']:'publie'; // pas de statut => publie + $row = sql_fetsel($select, $desc['table'], "$_id_objet=" . intval($id_objet)); + $statut = isset($row['statut']) ? $row['statut'] : 'publie'; // pas de statut => publie - $valeurs['editable'] = autoriser('dater',$objet,$id_objet,null,array('statut'=>$statut)); + $valeurs['editable'] = autoriser('dater', $objet, $id_objet, null, array('statut' => $statut)); $possedeDateRedac = false; - if (isset($row['date_redac']) AND - $regs = recup_date($row['date_redac'], false)) { + if (isset($row['date_redac']) and + $regs = recup_date($row['date_redac'], false) + ) { $annee_redac = $regs[0]; $mois_redac = $regs[1]; $jour_redac = $regs[2]; @@ -67,11 +99,12 @@ function formulaires_dater_charger_dist($objet, $id_objet, $retour='', $options= // on verifie donc que le intval($row['date_redac']) qui ressort l'annee // est bien lui aussi <=1 : dans ce cas c'est une date sql 'nulle' ou presque, selon // le gestionnnaire sql utilise (0001-01-01 pour PG par exemple) - if (intval($row['date_redac'])<=1 AND ($annee_redac<=1) AND ($mois_redac<=1) AND ($jour_redac<=1)) + if (intval($row['date_redac']) <= 1 and ($annee_redac <= 1) and ($mois_redac <= 1) and ($jour_redac <= 1)) { $possedeDateRedac = false; - } - else + } + } else { $annee_redac = $mois_redac = $jour_redac = $heure_redac = $minute_redac = 0; + } if ($regs = recup_date($row['date'], false)) { $annee = $regs[0]; @@ -83,134 +116,188 @@ function formulaires_dater_charger_dist($objet, $id_objet, $retour='', $options= // attention, si la variable s'appelle date ou date_redac, le compilo va // la normaliser, ce qu'on ne veut pas ici. - $valeurs['afficher_date_redac'] = ($possedeDateRedac?$row['date_redac']:''); - $valeurs['date_redac_jour'] = dater_formater_saisie_jour($jour_redac,$mois_redac,$annee_redac); + $valeurs['afficher_date_redac'] = ($possedeDateRedac ? $row['date_redac'] : ''); + $valeurs['date_redac_jour'] = dater_formater_saisie_jour($jour_redac, $mois_redac, $annee_redac); $valeurs['date_redac_heure'] = "$heure_redac:$minute_redac"; $valeurs['afficher_date'] = $row['date']; - $valeurs['date_jour'] = dater_formater_saisie_jour($jour,$mois,$annee); + $valeurs['date_jour'] = dater_formater_saisie_jour($jour, $mois, $annee); $valeurs['date_heure'] = "$heure:$minute"; $valeurs['sans_redac'] = !$possedeDateRedac; - if (isset($options['date_redac'])) + if (isset($options['date_redac'])) { $valeurs['_editer_date_anterieure'] = $options['date_redac']; - else - $valeurs['_editer_date_anterieure'] = ($objet=='article' AND ($GLOBALS['meta']["articles_redac"] != 'non' OR $possedeDateRedac)); - $valeurs['_label_date'] = (($statut == 'publie')? _T('texte_date_publication_objet'): _T('texte_date_creation_objet')); - $valeurs['_saisie_en_cours'] = (_request('date_jour')!==null); + } else { + $valeurs['_editer_date_anterieure'] = ($objet == 'article' and ($GLOBALS['meta']['articles_redac'] != 'non' or $possedeDateRedac)); + } + $valeurs['_label_date'] = (($statut == 'publie') ? + _T('texte_date_publication_objet') : _T('texte_date_creation_objet')); + $valeurs['_saisie_en_cours'] = (_request('_saisie_en_cours') !== null or _request('date_jour') !== null); // cas ou l'on ne peut pas dater mais on peut modifier la date de redac anterieure // https://core.spip.net/issues/3494 $valeurs['_editer_date'] = $valeurs['editable']; - if ($valeurs['_editer_date_anterieure'] AND !$valeurs['editable']){ - $valeurs['editable'] = autoriser('modifier',$objet,$id_objet); + if ($valeurs['_editer_date_anterieure'] and !$valeurs['editable']) { + $valeurs['editable'] = autoriser('modifier', $objet, $id_objet); } + return $valeurs; } -function dater_formater_saisie_jour($jour,$mois,$annee,$sep="/"){ - $annee = str_pad($annee,4,'0',STR_PAD_LEFT); - if (intval($jour)){ - $jour = str_pad($jour,2,'0',STR_PAD_LEFT); - $mois = str_pad($mois,2,'0',STR_PAD_LEFT); +/** + * Formate la date + * + * @param string|int $jour + * Numéro du jour + * @param string|int $mois + * Numéro du mois + * @param string|int $annee + * Année + * @param string $sep + * Séparateur + * @return string + * Date formatée tel que `02/10/2012` + **/ +function dater_formater_saisie_jour($jour, $mois, $annee, $sep = '/') { + $annee = str_pad($annee, 4, '0', STR_PAD_LEFT); + if (intval($jour)) { + $jour = str_pad($jour, 2, '0', STR_PAD_LEFT); + $mois = str_pad($mois, 2, '0', STR_PAD_LEFT); + return "$jour$sep$mois$sep$annee"; } if (intval($mois)) { - $mois = str_pad($mois,2,'0',STR_PAD_LEFT); + $mois = str_pad($mois, 2, '0', STR_PAD_LEFT); + return "$mois$sep$annee"; } + return $annee; } + /** - * Identifier le formulaire en faisant abstraction des parametres qui - * ne representent pas l'objet edite - */ -function formulaires_dater_identifier_dist($objet, $id_objet, $retour='', $options=array()){ + * Identifier le formulaire en faisant abstraction des paramètres qui + * ne représentent pas l'objet edité + * + * @param string $objet + * Type d'objet + * @param int $id_objet + * Identifiant de l'objet + * @param string $retour + * URL de redirection après le traitement + * @param array|string $options + * Options. + * @return string + * Hash du formulaire + **/ +function formulaires_dater_identifier_dist($objet, $id_objet, $retour = '', $options = array()) { return serialize(array($objet, $id_objet)); } /** - * Verification avant traitement - * - * On verifie que l'upload s'est bien passe et - * que le document recu est une image (d'apres son extension) + * Vérifications avant traitements du formulaire d'édition d'une date * * @param string $objet - * @param integer $id_objet + * Type d'objet + * @param int $id_objet + * Identifiant de l'objet * @param string $retour - * @return Array Tableau des erreurs + * URL de redirection après le traitement + * @param array|string $options + * Options. + * @return Array + * Tableau des erreurs */ -function formulaires_dater_verifier_dist($objet, $id_objet, $retour=''){ +function formulaires_dater_verifier_dist($objet, $id_objet, $retour = '', $options = array()) { $erreurs = array(); - foreach(array('date','date_redac') as $k){ - if ($v=_request($k."_jour") AND !dater_recuperer_date_saisie($v, $k)) + // ouvrir le formulaire en edition ? + if (_request('_saisie_en_cours')) { + $erreurs['message_erreur'] = ''; + + return $erreurs; + } + + foreach (array('date', 'date_redac') as $k) { + if ($v = _request($k . '_jour') and !dater_recuperer_date_saisie($v, $k)) { $erreurs[$k] = _T('format_date_incorrecte'); - elseif ($v=_request($k."_heure") AND !dater_recuperer_heure_saisie($v)) + } elseif ($v = _request($k . '_heure') and !dater_recuperer_heure_saisie($v)) { $erreurs[$k] = _T('format_heure_incorrecte'); + } } - if (!_request('date_jour')) + if (!_request('date_jour')) { $erreurs['date'] = _T('info_obligatoire'); + } return $erreurs; } /** - * Traitement + * Traitement du formulaire d'édition d'une date * * @param string $objet - * @param integer $id_objet + * Type d'objet + * @param int $id_objet + * Identifiant de l'objet * @param string $retour + * URL de redirection après le traitement + * @param array|string $options + * Options. * @return Array + * Retours des traitements */ -function formulaires_dater_traiter_dist($objet, $id_objet, $retour=''){ - $res = array('editable'=>' '); +function formulaires_dater_traiter_dist($objet, $id_objet, $retour = '', $options = array()) { + $res = array('editable' => ' '); - if (_request('changer')){ - $_id_objet = id_table_objet($objet); + if (_request('changer')) { $table = table_objet($objet); - $trouver_table = charger_fonction('trouver_table','base'); + $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table); - if (!$desc) - return array('message_erreur'=>_L('erreur')); #impossible en principe + if (!$desc) { + return array('message_erreur' => _L('erreur')); + } #impossible en principe - $champ_date = $desc['date']?$desc['date']:'date'; + $champ_date = $desc['date'] ? $desc['date'] : 'date'; $set = array(); - $charger = charger_fonction("charger","formulaires/dater/"); + $charger = charger_fonction('charger', 'formulaires/dater/'); $v = $charger($objet, $id_objet, $retour, $options); - if ($v['_editer_date']){ - if (!$d = dater_recuperer_date_saisie(_request('date_jour'))) - $d = array(date('Y'),date('m'),date('d')); - if (!$h = dater_recuperer_heure_saisie(_request('date_heure'))) - $h = array(0,0); + if ($v['_editer_date']) { + if (!$d = dater_recuperer_date_saisie(_request('date_jour'))) { + $d = array(date('Y'), date('m'), date('d')); + } + if (!$h = dater_recuperer_heure_saisie(_request('date_heure'))) { + $h = array(0, 0); + } $set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]); } - if (isset($desc['field']['date_redac']) AND $v['_editer_date_anterieure']){ - if (!_request('date_redac_jour') OR _request('sans_redac')) - $set['date_redac'] = sql_format_date(0,0,0,0,0,0); - else { - if (!$d = dater_recuperer_date_saisie(_request('date_redac_jour'), "date_redac")) - $d = array(date('Y'),date('m'),date('d')); - if (!$h = dater_recuperer_heure_saisie(_request('date_redac_heure'))) - $h = array(0,0); + if (isset($desc['field']['date_redac']) and $v['_editer_date_anterieure']) { + if (!_request('date_redac_jour') or _request('sans_redac')) { + $set['date_redac'] = sql_format_date(0, 0, 0, 0, 0, 0); + } else { + if (!$d = dater_recuperer_date_saisie(_request('date_redac_jour'), 'date_redac')) { + $d = array(date('Y'), date('m'), date('d')); + } + if (!$h = dater_recuperer_heure_saisie(_request('date_redac_heure'))) { + $h = array(0, 0); + } $set['date_redac'] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]); } } - if (count($set)){ - $publie_avant = objet_test_si_publie($objet,$id_objet); + if (count($set)) { + $publie_avant = objet_test_si_publie($objet, $id_objet); include_spip('action/editer_objet'); objet_modifier($objet, $id_objet, $set); - $publie_apres = objet_test_si_publie($objet,$id_objet); - if ($publie_avant !== $publie_apres){ + $publie_apres = objet_test_si_publie($objet, $id_objet); + if ($publie_avant !== $publie_apres) { // on refuse ajax pour forcer le rechargement de la page ici // on refera traiter une 2eme fois, mais c'est sans consequence refuser_traiter_formulaire_ajax(); @@ -218,8 +305,9 @@ function formulaires_dater_traiter_dist($objet, $id_objet, $retour=''){ } } - if ($retour) + if ($retour) { $res['redirect'] = $retour; + } set_request('date_jour'); set_request('date_redac_jour'); @@ -230,38 +318,46 @@ function formulaires_dater_traiter_dist($objet, $id_objet, $retour=''){ } /** - * Recuperer annee,mois,jour sur la date saisie + * Récupérer annee, mois, jour sur la date saisie + * * @param string $post * @param string $quoi - * @return array + * @return array|string Chaîne vide si date invalide, tableau (année, mois, jour) sinon. */ -function dater_recuperer_date_saisie($post, $quoi="date") { - if (!preg_match('#^(?:(?:([0-9]{1,2})[/-])?([0-9]{1,2})[/-])?([0-9]{4}|[0-9]{1,2})#', $post, $regs)) +function dater_recuperer_date_saisie($post, $quoi = 'date') { + if (!preg_match('#^(?:(?:([0-9]{1,2})[/-])?([0-9]{1,2})[/-])?([0-9]{4}|[0-9]{1,2})#', $post, $regs)) { return ''; - if ($quoi=="date_redac") { - if ($regs[3]<>'' AND $regs[3] < 1001) + } + if ($quoi == 'date_redac') { + if ($regs[3] <> '' and $regs[3] < 1001) { $regs[3] += 9000; + } - return array($regs[3],$regs[2],$regs[1]); - } - else { - $t = mktime(0,0,0,$regs[2],$regs[1],$regs[3]); - // si la date n'est pas valide selon mktime, la refuser - if (!$t) return ''; - return array(date('Y',$t),date('m',$t),date('d',$t)); + return array($regs[3], $regs[2], $regs[1]); + } else { + if ( + checkdate(intval($regs[2]), intval($regs[1]), intval($regs[3])) + and $t = mktime(0, 0, 0, $regs[2], $regs[1], $regs[3]) + ) { + return array(date('Y', $t), date('m', $t), date('d', $t)); + } + return ''; } - } /** - * Recuperer heures,minutes sur l'heure saisie + * Récupérer heures,minutes sur l'heure saisie + * * @param string $post * @return array */ function dater_recuperer_heure_saisie($post) { - if (!preg_match('#([0-9]{1,2})(?:[h:](?:([0-9]{1,2}))?)?#', $post, $regs)) + if (!preg_match('#([0-9]{1,2})(?:[h:](?:([0-9]{1,2}))?)?#', $post, $regs)) { return ''; - return array($regs[1],$regs[2]); -} + } + if ($regs[1] >= 23 or $regs[2] >= 59) { + return ''; + } -?> + return array($regs[1], $regs[2]); +} diff --git a/www/prive/formulaires/dateur/inc-dateur.html b/www/prive/formulaires/dateur/inc-dateur.html index e6089879..c2a78153 100644 --- a/www/prive/formulaires/dateur/inc-dateur.html +++ b/www/prive/formulaires/dateur/inc-dateur.html @@ -26,7 +26,6 @@ function date_picker_options(){ '<:date_jour_5_initiale|texte_script:>','<:date_jour_6_initiale|texte_script:>','<:date_jour_7_initiale|texte_script:>'], dateFormat: 'dd/mm/yy', firstDay: 1, - isRTL: [(#ENV{lang}|lang_dir|=={rtl}|?{true,false})], changeMonth: true, changeYear: true, showOtherMonths: true, @@ -55,7 +54,7 @@ if (window.jQuery){ jQuery(function(){ if (jQuery('input.date,input.heure').length && typeof date_picker_loading=="undefined"){ - date_picker_loading = jQuery.getScript('#PRODUIRE{fond=formulaires/dateur/jquery.dateur.js}'); + date_picker_loading = jQuery.getScript('[(#PRODUIRE{fond=formulaires/dateur/jquery.dateur.js}|timestamp)]'); date_picker_loading.done(function(){ date_picker_init(); onAjaxLoad(date_picker_init); @@ -66,8 +65,8 @@ if (window.jQuery){ /*]]>*/ diff --git a/www/prive/formulaires/dateur/jquery.dateur.js.html b/www/prive/formulaires/dateur/jquery.dateur.js.html index 757b6c6c..dc5b52c9 100644 --- a/www/prive/formulaires/dateur/jquery.dateur.js.html +++ b/www/prive/formulaires/dateur/jquery.dateur.js.html @@ -1,9 +1,7 @@ #HTTP_HEADER{Content-Type: text/js;} [(#REM) \ No newline at end of file diff --git a/www/prive/formulaires/declarer_bases.php b/www/prive/formulaires/declarer_bases.php index 11683dc6..d4f67962 100644 --- a/www/prive/formulaires/declarer_bases.php +++ b/www/prive/formulaires/declarer_bases.php @@ -3,40 +3,42 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/install'); -function formulaires_declarer_bases_charger_dist(){ +function formulaires_declarer_bases_charger_dist() { list($adresse_db, $login_db, $pass_db, $sel, $server_db) = analyse_fichier_connection(_FILE_CONNECT); $deja = bases_referencees(_FILE_CONNECT); // proposer un nom de connect si pas encore saisi - $nom_connect = ""; - if (defined('_DECLARER_choix_db')){ - $nom_connect = _DECLARER_choix_db; - $n=""; - while (in_array($nom_connect.$n,$deja)){ - $n = ($n?$n+1:1); + $nom_connect = ''; + if (defined('_DECLARER_CHOIX_DB')) { + $nom_connect = _DECLARER_CHOIX_DB; + $n = ''; + while (in_array($nom_connect . $n, $deja)) { + $n = ($n ? $n + 1 : 1); } - $nom_connect = $nom_connect.$n; + $nom_connect = $nom_connect . $n; } $valeurs = array( '_etapes' => 3, '_bases_deja' => $deja, - '_bases_prop' => defined('_DECLARER_serveur_db')?liste_bases(_DECLARER_serveur_db):'', - '_tables' => (defined('_DECLARER_serveur_db') AND defined('_DECLARER_choix_db'))? - $tables = sql_alltable('%', _DECLARER_serveur_db) - : - array(), + '_bases_prop' => defined('_DECLARER_SERVEUR_DB') ? liste_bases(_DECLARER_SERVEUR_DB) : '', + '_tables' => (defined('_DECLARER_SERVEUR_DB') and defined('_DECLARER_CHOIX_DB')) ? + $tables = sql_alltable('%', _DECLARER_SERVEUR_DB) + : + array(), 'main_db' => '', '_serveurs' => liste_serveurs(), 'sql_serveur_db' => 'sqlite3', // valeur par defaut @@ -47,161 +49,183 @@ function formulaires_declarer_bases_charger_dist(){ 'table_new' => '', 'nom_connect' => $nom_connect, ); + return $valeurs; } function liste_serveurs() { $options = array(); $dir = _DIR_RESTREINT . 'req/'; - $d = @opendir($dir); - if (!$d) return array(); + $d = opendir($dir); + if (!$d) { + return array(); + } while ($f = readdir($d)) { if ((preg_match('/^(.*)[.]php$/', $f, $s)) - AND is_readable($f = $dir . $f)) { + and is_readable($f = $dir . $f) + ) { require_once($f); $s = $s[1]; $v = 'spip_versions_' . $s; - if (function_exists($v) AND $v()) { - $options[$s] = "install_select_type_$s"; + if (function_exists($v) and $v()) { + $options[$s] = "install_select_type_$s"; + } else { + spip_log("$s: portage indisponible"); } - else spip_log("$s: portage indisponible"); } } ksort($options); + return $options; } -function liste_bases($server_db){ +function liste_bases($server_db) { if (is_null($server_db) - OR !$result = sql_listdbs($server_db)) + or !$result = sql_listdbs($server_db) + ) { return ''; + } $noms = array(); // si sqlite : result est deja un tableau - if (is_array($result)){ + if (is_array($result)) { $noms = $result; } else { while ($row = sql_fetch($result, $server_db)) { $noms[] = reset($row); } } + return $noms; } -function formulaires_declarer_bases_verifier_1_dist(){ +function formulaires_declarer_bases_verifier_1_dist() { $erreurs = array(); list($def_adresse_db, $def_login_db, $def_pass_db, $sel_db, $def_serveur_db) = analyse_fichier_connection(_FILE_CONNECT); - - if (!$adresse_db = _request('adresse_db')){ - if (defined('_INSTALL_HOST_DB')) - $adresse_db =_INSTALL_HOST_DB; - else + if (!$adresse_db = _request('adresse_db')) { + if (defined('_INSTALL_HOST_DB')) { + $adresse_db = _INSTALL_HOST_DB; + } else { $adresse_db = $def_adresse_db; + } } - if (!$serveur_db =_request('sql_serveur_db')){ - if (defined('_INSTALL_SERVER_DB')) + if (!$serveur_db = _request('sql_serveur_db')) { + if (defined('_INSTALL_SERVER_DB')) { $serveur_db = _INSTALL_SERVER_DB; - else + } else { $serveur_db = $def_serveur_db; + } } - $login_db = $pass_db = ""; - if (!preg_match(',^sqlite,i',$serveur_db)){ - if (!$login_db = _request('login_db')){ - if (defined('_INSTALL_USER_DB')) + $login_db = $pass_db = ''; + if (!preg_match(',^sqlite,i', $serveur_db)) { + if (!$login_db = _request('login_db')) { + if (defined('_INSTALL_USER_DB')) { $login_db = _INSTALL_USER_DB; - else + } else { $login_db = $def_login_db; + } } - if (!$pass_db = _request('pass_db')){ - if (defined('_INSTALL_PASS_DB')) - $pass_db = _INSTALL_PASS_DB; - else + if (!$pass_db = _request('pass_db')) { + if (defined('_INSTALL_PASS_DB')) { + $pass_db = _INSTALL_PASS_DB; + } else { $pass_db = $def_pass_db; + } } } $link = spip_connect_db($adresse_db, '', $login_db, $pass_db, '@test@', $serveur_db); if ($link) { - $GLOBALS['connexions'][$serveur_db][$GLOBALS['spip_sql_version']] = $GLOBALS['spip_' . $serveur_db .'_functions_' . $GLOBALS['spip_sql_version']]; + $GLOBALS['connexions'][$serveur_db][$GLOBALS['spip_sql_version']] = $GLOBALS['spip_' . $serveur_db . '_functions_' . $GLOBALS['spip_sql_version']]; $GLOBALS['connexions'][$serveur_db] = $link; - define('_DECLARER_serveur_db',$serveur_db); - define('_DECLARER_adresse_db',$adresse_db); - define('_DECLARER_login_db',$login_db); - define('_DECLARER_pass_db',$pass_db); + define('_DECLARER_SERVEUR_DB', $serveur_db); + define('_DECLARER_ADRESSE_DB', $adresse_db); + define('_DECLARER_LOGIN_DB', $login_db); + define('_DECLARER_PASS_DB', $pass_db); // si on est sur le meme serveur que connect.php // indiquer quelle est la db utilisee pour l'exclure des choix possibles - if ($serveur_db==$def_serveur_db AND $adresse_db==$def_adresse_db) - set_request('main_db',$sel_db); - else - set_request('main_db',''); - } - else { + if ($serveur_db == $def_serveur_db and $adresse_db == $def_adresse_db) { + set_request('main_db', $sel_db); + } else { + set_request('main_db', ''); + } + } else { $erreurs['message_erreur'] = _T('avis_connexion_echec_1'); } + return $erreurs; } -function formulaires_declarer_bases_verifier_2_dist(){ +function formulaires_declarer_bases_verifier_2_dist() { $erreurs = array(); $choix_db = _request('choix_db'); - if ($choix_db=='-1') + if ($choix_db == '-1') { $choix_db = _request('table_new'); - if (!$choix_db) - $erreurs['choix_db']=_T('info_obligatoire'); - else { - define('_ECRIRE_INSTALL',1); // hackons sqlite - if (!sql_selectdb($choix_db, _DECLARER_serveur_db)) - $erreurs['choix_db']=_T('avis_base_inaccessible',array('base'=>$choix_db)); - else - define('_DECLARER_choix_db',$choix_db); + } + if (!$choix_db) { + $erreurs['choix_db'] = _T('info_obligatoire'); + } else { + define('_ECRIRE_INSTALL', 1); // hackons sqlite + if (!sql_selectdb($choix_db, _DECLARER_SERVEUR_DB)) { + $erreurs['choix_db'] = _T('avis_base_inaccessible', array('base' => $choix_db)); + } else { + define('_DECLARER_CHOIX_DB', $choix_db); + } } return $erreurs; } -function formulaires_declarer_bases_verifier_3_dist(){ +function formulaires_declarer_bases_verifier_3_dist() { $erreurs = array(); $nom_connect = _request('nom_connect'); - if (!$nom_connect) - $erreurs['nom_connect']=_T('info_obligatoire'); - else { + if (!$nom_connect) { + $erreurs['nom_connect'] = _T('info_obligatoire'); + } else { // securite : le nom doit etre un mot sans caracteres speciaux - $f = preg_replace(',[^\w],','',$nom_connect); - if ($f!==$nom_connect) - $erreurs['nom_connect']=_T('erreur_nom_connect_incorrect'); - elseif(file_exists(_DIR_CONNECT . $nom_connect. '.php')) - $erreurs['nom_connect']=_T('erreur_connect_deja_existant'); - else - define('_DECLARER_nom_connect',$nom_connect); + $f = preg_replace(',[^\w],', '', $nom_connect); + if ($f !== $nom_connect) { + $erreurs['nom_connect'] = _T('erreur_nom_connect_incorrect'); + } elseif (file_exists(_DIR_CONNECT . $nom_connect . '.php')) { + $erreurs['nom_connect'] = _T('erreur_connect_deja_existant'); + } else { + define('_DECLARER_NOM_CONNECT', $nom_connect); + } } return $erreurs; } -function formulaires_declarer_bases_traiter_dist(){ +function formulaires_declarer_bases_traiter_dist() { - $adresse_db = _DECLARER_adresse_db; - if (preg_match(',(.*):(.*),', $adresse_db, $r)) - list(,$adresse_db, $port) = $r; - else + $adresse_db = _DECLARER_ADRESSE_DB; + if (preg_match(',(.*):(.*),', $adresse_db, $r)) { + list(, $adresse_db, $port) = $r; + } else { $port = ''; + } - $adresse_db = addcslashes($adresse_db,"'\\"); - $port = addcslashes($port,"'\\"); - $login_db = addcslashes(_DECLARER_login_db,"'\\"); - $pass_db = addcslashes(_DECLARER_pass_db,"'\\"); - $sup_db = addcslashes(_DECLARER_choix_db,"'\\"); - $server_db = addcslashes(_DECLARER_serveur_db,"'\\"); + $server_db = addcslashes(_DECLARER_SERVEUR_DB, "'\\"); $conn = install_mode_appel($server_db) - . "spip_connect_db(" - . "'$adresse_db','$port','$login_db'," - . "'$pass_db','$sup_db'" - . ",'$server_db', '');\n"; - - install_fichier_connexion(_DIR_CONNECT . _DECLARER_nom_connect . '.php', $conn); - return array('message_ok'=>_T('install_connect_ok',array('connect' => ""._DECLARER_nom_connect.""))); -} \ No newline at end of file + . install_connexion( + $adresse_db, + $port, + _DECLARER_LOGIN_DB, + _DECLARER_PASS_DB, + _DECLARER_CHOIX_DB, + _DECLARER_SERVEUR_DB, + '', + '', + '' + ); + + install_fichier_connexion(_DIR_CONNECT . _DECLARER_NOM_CONNECT . '.php', $conn); + + return array( + 'message_ok' => _T('install_connect_ok', array('connect' => '' . _DECLARER_NOM_CONNECT . '')) + ); +} diff --git a/www/prive/formulaires/declarer_bases_2.html b/www/prive/formulaires/declarer_bases_2.html index ab1c2d11..dd031b54 100644 --- a/www/prive/formulaires/declarer_bases_2.html +++ b/www/prive/formulaires/declarer_bases_2.html @@ -6,10 +6,10 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
        + #ACTION_FORMULAIRE +
        #SET{name,choix_db}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ] @@ -25,18 +25,18 @@

        <:config_erreur_base_sup:>

        -
      • -
      • +
      • +
        - -
      +
      + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] diff --git a/www/prive/formulaires/declarer_bases_3.html b/www/prive/formulaires/declarer_bases_3.html index ed65715a..9b5931e8 100644 --- a/www/prive/formulaires/declarer_bases_3.html +++ b/www/prive/formulaires/declarer_bases_3.html @@ -11,10 +11,10 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
        + #ACTION_FORMULAIRE +
        #SET{name,nom_connect}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
      • +
        [ (#GET{erreurs}) ] @@ -26,8 +26,8 @@
      • (#ENV*{_tables}|implode{'
      • '})
      ] - - +
      + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] diff --git a/www/prive/formulaires/editer_article.html b/www/prive/formulaires/editer_article.html index a9674251..876ae5c1 100644 --- a/www/prive/formulaires/editer_article.html +++ b/www/prive/formulaires/editer_article.html @@ -5,94 +5,84 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} - -
        - - [(#ENV**{config}|table_valeur{articles_surtitre}|=={non}|?{#ENV**{surtitre,''},' '}|oui) -
      • - [ - (#ENV**{erreurs}|table_valeur{surtitre}) - ] -
      • ] -
      • - [ - (#ENV**{erreurs}|table_valeur{titre}) - ] +
        + [(#ENV**{config}|table_valeur{articles_surtitre}|=={non}|?{#ENV**{surtitre,''},' '}|oui) +
        + [ + (#ENV**{erreurs}|table_valeur{surtitre}) + ] +
        ] +
        + [ + (#ENV**{erreurs}|table_valeur{titre}) + ] -
      • - [(#ENV**{config}|table_valeur{articles_soustitre}|=={non}|?{#ENV**{soustitre,''},' '}|oui) -
      • - [ - (#ENV**{erreurs}|table_valeur{soustitre}) - ] -
      • ] - [
      • +
      + [(#ENV**{config}|table_valeur{articles_soustitre}|=={non}|?{#ENV**{soustitre,''},' '}|oui) +
      + [ + (#ENV**{erreurs}|table_valeur{soustitre}) + ] +
      ] + [
      [ (#ENV**{erreurs}|table_valeur{id_parent}) ] (#VAL|chercher_rubrique{#ENV{id_article},#ENV{id_parent},'article',#ENV{id_secteur},#ENV**{config}|table_valeur{restreint},0,form_simple}) - ] +
      ] - [(#ENV**{config}|table_valeur{articles_descriptif}|=={non}|?{#ENV**{descriptif,''},' '}|oui) -
    • - [ - (#ENV**{erreurs}|table_valeur{descriptif}) - ] -
    • ] - [(#ENV**{config}|table_valeur{articles_chapeau}|=={non}|?{#ENV**{chapo,''},' '}|oui) - [
    • (#ENV**{chapo}|match{^=,Uis}|oui) - [ - (#ENV**{erreurs}|table_valeur{virtuel}) - ] - -

      <:texte_article_virtuel_reference:>

      -
    • ] - [
    • (#ENV**{chapo}|match{^=,Uis}|non) - [ - (#ENV**{erreurs}|table_valeur{chapo}) - ] -
    • ] - ] + [(#ENV**{config}|table_valeur{articles_descriptif}|=={non}|?{#ENV**{descriptif,''},' '}|oui) +
      + [ + (#ENV**{erreurs}|table_valeur{descriptif}) + ] +
      ] + [(#ENV**{config}|table_valeur{articles_chapeau}|=={non}|?{#ENV**{chapo,''},' '}|oui) +
      + [ + (#ENV**{erreurs}|table_valeur{chapo}) + ] +
      ] - [(#ENV**{config}|table_valeur{articles_urlref}|=={non}|?{#ENV**{url_site,#ENV**{nom_site,''}},' '}|oui) -
    • -
      -

      <:entree_liens_sites:>

      -
        -
      • - [ - (#ENV**{erreurs}|table_valeur{nom_site}) - ] -
      • -
      • - [ - (#ENV**{erreurs}|table_valeur{url_site}) - ] -
      • -
      -
      -
    • ] - - [(#ENV**{config}|table_valeur{articles_texte}|=={non}|?{#ENV**{texte,''},' '}|oui) -
    • - [ - (#ENV**{erreurs}|table_valeur{texte}) - ][(#ENV**{_texte_trop_long,''})] - -
    • ] - [(#ENV**{config}|table_valeur{articles_ps}|=={non}|?{#ENV**{ps,''},' '}|oui) -
    • - [ - (#ENV**{erreurs}|table_valeur{ps}) - ] -
    • ] + [(#ENV**{config}|table_valeur{articles_urlref}|=={non}|?{#ENV**{url_site,#ENV**{nom_site,''}},' '}|oui) +
      +
      +

      <:entree_liens_sites:>

      +
      +
      + [ + (#ENV**{erreurs}|table_valeur{nom_site}) + ] +
      +
      + [ + (#ENV**{erreurs}|table_valeur{url_site}) + ] +
      +
      +
      +
      ] - + [(#ENV**{config}|table_valeur{articles_texte}|=={non}|?{#ENV**{texte,''},' '}|oui) +
      + [ + (#ENV**{erreurs}|table_valeur{texte}) + ][(#ENV**{_texte_trop_long,''})] + +
      ] + [(#ENV**{config}|table_valeur{articles_ps}|=={non}|?{#ENV**{ps,''},' '}|oui) +
      + [ + (#ENV**{erreurs}|table_valeur{ps}) + ] +
      ] + - [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] - -

      + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] + +

      ] diff --git a/www/prive/formulaires/editer_article.php b/www/prive/formulaires/editer_article.php index 531ee339..2320df9a 100644 --- a/www/prive/formulaires/editer_article.php +++ b/www/prive/formulaires/editer_article.php @@ -3,21 +3,67 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion du formulaire de d'édition d'article + * + * @package SPIP\Core\Articles\Formulaires + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/actions'); include_spip('inc/editer'); -// http://doc.spip.org/@inc_editer_article_dist -function formulaires_editer_article_charger_dist($id_article='new', $id_rubrique=0, $retour='', $lier_trad=0, $config_fonc='articles_edit_config', $row=array(), $hidden=''){ - $valeurs = formulaires_editer_objet_charger('article',$id_article,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden); +/** + * Chargement du formulaire d'édition d'article + * + * @uses formulaires_editer_objet_charger() + * + * @param int|string $id_article + * Identifiant de l'article. 'new' pour une nouvel article. + * @param int $id_rubrique + * Identifiant de la rubrique parente + * @param string $retour + * URL de redirection après le traitement + * @param int $lier_trad + * Identifiant éventuel d'un article source de traduction + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de l'article, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Environnement du formulaire + **/ +function formulaires_editer_article_charger_dist( + $id_article = 'new', + $id_rubrique = 0, + $retour = '', + $lier_trad = 0, + $config_fonc = 'articles_edit_config', + $row = array(), + $hidden = '' +) { + $valeurs = formulaires_editer_objet_charger( + 'article', + $id_article, + $id_rubrique, + $lier_trad, + $retour, + $config_fonc, + $row, + $hidden + ); // il faut enlever l'id_rubrique car la saisie se fait sur id_parent // et id_rubrique peut etre passe dans l'url comme rubrique parent initiale // et sera perdue si elle est supposee saisie @@ -25,17 +71,47 @@ function formulaires_editer_article_charger_dist($id_article='new', $id_rubrique } /** - * Identifier le formulaire en faisant abstraction des parametres qui - * ne representent pas l'objet edite + * Identifier le formulaire en faisant abstraction des paramètres qui + * ne représentent pas l'objet édité + * + * @param int|string $id_article + * Identifiant de l'article. 'new' pour une nouvel article. + * @param int $id_rubrique + * Identifiant de la rubrique parente + * @param string $retour + * URL de redirection après le traitement + * @param int $lier_trad + * Identifiant éventuel d'un article source de traduction + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de l'article, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return string + * Hash du formulaire */ -function formulaires_editer_article_identifier_dist($id_article='new', $id_rubrique=0, $retour='', $lier_trad=0, $config_fonc='articles_edit_config', $row=array(), $hidden=''){ - return serialize(array(intval($id_article),$lier_trad)); +function formulaires_editer_article_identifier_dist( + $id_article = 'new', + $id_rubrique = 0, + $retour = '', + $lier_trad = 0, + $config_fonc = 'articles_edit_config', + $row = array(), + $hidden = '' +) { + return serialize(array(intval($id_article), $lier_trad)); } -// Choix par defaut des options de presentation -// http://doc.spip.org/@articles_edit_config -function articles_edit_config($row) -{ +/** + * Choix par défaut des options de présentation + * + * @param array $row + * Valeurs de la ligne SQL d'un article, si connu + * return array + * Configuration pour le formulaire + */ +function articles_edit_config($row) { global $spip_lang; $config = $GLOBALS['meta']; @@ -43,30 +119,102 @@ function articles_edit_config($row) $config['langue'] = $spip_lang; $config['restreint'] = ($row['statut'] == 'publie'); + return $config; } -function formulaires_editer_article_verifier_dist($id_article='new', $id_rubrique=0, $retour='', $lier_trad=0, $config_fonc='articles_edit_config', $row=array(), $hidden=''){ +/** + * Vérifications du formulaire d'édition d'article + * + * @uses formulaires_editer_objet_verifier() + * + * @param int|string $id_article + * Identifiant de l'article. 'new' pour une nouvel article. + * @param int $id_rubrique + * Identifiant de la rubrique parente + * @param string $retour + * URL de redirection après le traitement + * @param int $lier_trad + * Identifiant éventuel d'un article source de traduction + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de l'article, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Erreurs du formulaire + **/ +function formulaires_editer_article_verifier_dist( + $id_article = 'new', + $id_rubrique = 0, + $retour = '', + $lier_trad = 0, + $config_fonc = 'articles_edit_config', + $row = array(), + $hidden = '' +) { // auto-renseigner le titre si il n'existe pas - titre_automatique('titre',array('descriptif','chapo','texte')); + titre_automatique('titre', array('descriptif', 'chapo', 'texte')); // on ne demande pas le titre obligatoire : il sera rempli a la volee dans editer_article si vide - $erreurs = formulaires_editer_objet_verifier('article',$id_article,array('id_parent')); - if (!function_exists('autoriser')) - include_spip('inc/autoriser'); // si on utilise le formulaire dans le public + $erreurs = formulaires_editer_objet_verifier('article', $id_article, array('id_parent')); + // si on utilise le formulaire dans le public + if (!function_exists('autoriser')) { + include_spip('inc/autoriser'); + } if (!isset($erreurs['id_parent']) - AND !autoriser('creerarticledans','rubrique',_request('id_parent'))){ + and !autoriser('creerarticledans', 'rubrique', _request('id_parent')) + ) { $erreurs['id_parent'] = _T('info_creerdansrubrique_non_autorise'); } + return $erreurs; } -// http://doc.spip.org/@inc_editer_article_dist -function formulaires_editer_article_traiter_dist($id_article='new', $id_rubrique=0, $retour='', $lier_trad=0, $config_fonc='articles_edit_config', $row=array(), $hidden=''){ +/** + * Traitements du formulaire d'édition d'article + * + * @uses formulaires_editer_objet_traiter() + * + * @param int|string $id_article + * Identifiant de l'article. 'new' pour une nouvel article. + * @param int $id_rubrique + * Identifiant de la rubrique parente + * @param string $retour + * URL de redirection après le traitement + * @param int $lier_trad + * Identifiant éventuel d'un article source de traduction + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de l'article, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Retours des traitements + **/ +function formulaires_editer_article_traiter_dist( + $id_article = 'new', + $id_rubrique = 0, + $retour = '', + $lier_trad = 0, + $config_fonc = 'articles_edit_config', + $row = array(), + $hidden = '' +) { // ici on ignore changer_lang qui est poste en cas de trad, // car l'heuristique du choix de la langue est pris en charge par article_inserer // en fonction de la config du site et de la rubrique choisie - set_request("changer_lang"); - return formulaires_editer_objet_traiter('article',$id_article,$id_rubrique,$lier_trad,$retour,$config_fonc,$row,$hidden); -} + set_request('changer_lang'); -?> + return formulaires_editer_objet_traiter( + 'article', + $id_article, + $id_rubrique, + $lier_trad, + $retour, + $config_fonc, + $row, + $hidden + ); +} diff --git a/www/prive/formulaires/editer_auteur.html b/www/prive/formulaires/editer_auteur.html index 70d0d56d..cf073482 100644 --- a/www/prive/formulaires/editer_auteur.html +++ b/www/prive/formulaires/editer_auteur.html @@ -5,70 +5,70 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE [] -
        -
      • +
        +
        [ (#ENV**{erreurs}|table_valeur{nom}) ][

        (#ENV{id_auteur}|=={#SESSION{id_auteur}}|?{<:entree_nom_pseudo:>,<:entree_nom_pseudo_2:>})

        ] -
      • +
      [(#REM) Modification de l'email ou message disant que seuls les admins peuvent le modifier ] -
    • +
      [][ (#ENV**{erreurs}|table_valeur{email}) ] -
    • -
    • + +
      [][ (#ENV**{erreurs}|table_valeur{bio}) ]

      <:entree_biographie:>

      -
    • + [(#REM) Cle PGP ] -
    • +
      [][ (#ENV**{erreurs}|table_valeur{pgp}) ] -
    • + [(#REM) Statut ] [(#AUTORISER{modifier,auteur,#ID_AUTEUR,'',#ARRAY{statut,'?'}}|oui) -
    • - #INCLURE{fond=formulaires/inc-instituer_auteur,statut=#ENV**{statut,#EVAL{_STATUT_AUTEUR_CREATION}},id_auteur,webmestre} -
    • ] +
      + #INCLURE{fond=formulaires/inc-instituer_auteur,statut=#ENV**{statut,#CONST{_STATUT_AUTEUR_CREATION}},id_auteur,webmestre} +
      ] [(#REM) Site Web : nom et url ] -
    • +
      <:info_site_web:> -
        -
      • +
        +
        [][ (#ENV**{erreurs}|table_valeur{nom_site_auteur}) ] -
      • -
      • +
      +
      [][ (#ENV**{erreurs}|table_valeur{url_site}) ] -
    • - + + - + [(#REM) Identifiants (nom, mot de passe) ] -
    • +
      [(#ENV{id_auteur}|=={#SESSION{id_auteur}}|?{<:entree_identifiants_connexion:>,<:entree_identifiants_connexion_2:>})] [(#REM) Avertissement en cas de modifs de ses propres donnees ] @@ -77,13 +77,13 @@ |and{#SESSION{id_auteur}|=={#ENV{id_auteur}}}|oui)
      <:texte_login_precaution:>
      ] -
        +
        [(#REM) Un redacteur n'a pas le droit de modifier son login ! ] -
      • +
        [(#ENV{config}|table_valeur{edit_login}|oui) [ (#ENV**{erreurs}|table_valeur{login}) - ]

        (<:info_login_trop_court_car_pluriel{nb=#EVAL{_LOGIN_TROP_COURT}}:>)

        + ]

        (<:info_login_trop_court_car_pluriel{nb=#CONST{_LOGIN_TROP_COURT}}:>)

        ] [(#ENV{config}|table_valeur{edit_login}|non) @@ -91,26 +91,30 @@

        (<:info_non_modifiable:>)

        ] -
      • +
        [(#ENV{config}|table_valeur{edit_pass}|oui) -
      • +
        [ (#ENV**{erreurs}|table_valeur{new_pass}) - ]

        (<:info_passe_trop_court_car_pluriel{nb=#EVAL{_PASS_LONGUEUR_MINI}}:>)

        + ]

        (<:info_passe_trop_court_car_pluriel{nb=#CONST{_PASS_LONGUEUR_MINI}}:>)

        -
      • -
      • +
      +
      [ (#ENV**{erreurs}|table_valeur{new_pass2}) ] -
    • ] - + [(#ENV{config/edit_pass}|oui) + + + ] + ] + - - + + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

      ] - \ No newline at end of file + diff --git a/www/prive/formulaires/editer_auteur.php b/www/prive/formulaires/editer_auteur.php index 69e66470..4101f0a4 100644 --- a/www/prive/formulaires/editer_auteur.php +++ b/www/prive/formulaires/editer_auteur.php @@ -1,32 +1,100 @@ true)); $config['edit_login'] = - (auth_autoriser_modifier_login($auth_methode) AND $autoriser); + (auth_autoriser_modifier_login($auth_methode) + and autoriser('modifier', 'auteur', $row['id_auteur'], null, array('email' => true))); $config['edit_pass'] = (auth_autoriser_modifier_pass($auth_methode) - AND - ($GLOBALS['visiteur_session']['id_auteur'] == $row['id_auteur'] OR $autoriser) - ); + and autoriser('modifier', 'auteur', $row['id_auteur'])); return $config; } -function formulaires_editer_auteur_verifier_dist($id_auteur='new', $retour='', $associer_objet='', $config_fonc='auteurs_edit_config', $row=array(), $hidden=''){ +/** + * Vérifications du formulaire d'édition d'un auteur + * + * Vérifie en plus des vérifications prévues : + * - qu'un rédacteur ne peut pas supprimer son adresse mail, + * - que le mot de passe choisi n'est pas trop court et identique à sa + * deuxième saisie + * + * @see formulaires_editer_objet_verifier() + * + * @param int|string $id_auteur + * Identifiant de l'auteur. 'new' pour une nouvel auteur. + * @param string $retour + * URL de redirection après le traitement + * @param string $associer_objet + * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet, + * tel que 'article|3' + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de l'auteur, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Erreurs des saisies + **/ +function formulaires_editer_auteur_verifier_dist( + $id_auteur = 'new', + $retour = '', + $associer_objet = '', + $config_fonc = 'auteurs_edit_config', + $row = array(), + $hidden = '' +) { // auto-renseigner le nom si il n'existe pas, sans couper - titre_automatique('nom',array('email','login'),255); + titre_automatique('nom', array('email', 'login'), 255); + + $oblis = array('nom'); + // si on veut renvoyer des identifiants il faut un email et un login + if (_request('reset_password')) { + $oblis[] = 'email'; + $oblis[] = 'new_login'; + } // mais il reste obligatoire si on a rien trouve - $erreurs = formulaires_editer_objet_verifier('auteur',$id_auteur,array('nom')); + $erreurs = formulaires_editer_objet_verifier('auteur', $id_auteur, $oblis); + if (isset($erreurs['new_login'])) { + $erreurs['login'] = $erreurs['new_login']; + unset($erreurs['new_login']); + } - $auth_methode = sql_getfetsel('source','spip_auteurs','id_auteur='.intval($id_auteur)); + $auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); $auth_methode = ($auth_methode ? $auth_methode : 'spip'); include_spip('inc/auth'); - include_spip('inc/filtres'); if (!nom_acceptable(_request('nom'))) { - $erreurs['nom'] = _T("info_nom_pas_conforme"); + $erreurs['nom'] = _T('info_nom_pas_conforme'); } - if ($email = _request('email')){ + if ($email = _request('email')) { + include_spip('inc/filtres'); include_spip('inc/autoriser'); // un redacteur qui modifie son email n'a pas le droit de le vider si il y en avait un - if (!autoriser('modifier','auteur',$id_auteur,null,array('email'=>'?')) - AND $GLOBALS['visiteur_session']['id_auteur']==$id_auteur - AND !strlen(trim($email)) - AND $email!=($email_ancien=sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.intval($id_auteur))) - ){ - $erreurs['email'] = (($id_auteur==$GLOBALS['visiteur_session']['id_auteur'])?_T('form_email_non_valide'):_T('form_prop_indiquer_email')); - } - else if (!email_valide($email)){ - $erreurs['email'] = (($id_auteur==$GLOBALS['visiteur_session']['id_auteur'])?_T('form_email_non_valide'):_T('form_prop_indiquer_email')); + if (!autoriser('modifier', 'auteur', $id_auteur, null, array('email' => '?')) + and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur + and !strlen(trim($email)) + and $email != ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))) + ) { + $erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email')); + } else { + if (!email_valide($email)) { + $erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email')); + } } - # Ne pas autoriser d'avoir deux auteurs avec le même email # cette fonctionalité nécessite que la base soit clean à l'activation : pas de # doublon sur la requête select email,count(*) from spip_auteurs group by email ; if (defined('_INTERDIRE_AUTEUR_MEME_EMAIL')) { #Nouvel auteur - if (intval($id_auteur)==0) { + if (intval($id_auteur) == 0) { #Un auteur existe deja avec cette adresse ? - if (sql_countsel("spip_auteurs", "email=".sql_quote($email)) > 0) + if (sql_countsel('spip_auteurs', 'email=' . sql_quote($email)) > 0) { $erreurs['email'] = _T('erreur_email_deja_existant'); + } } else { #Un auteur existe deja avec cette adresse ? et n'est pas le user courant. - if ((sql_countsel("spip_auteurs", "email=".sql_quote($email)) > 0) AND ($id_auteur!=($id_auteur_ancien=sql_getfetsel('id_auteur', 'spip_auteurs', "email=".sql_quote($email))))) + if ((sql_countsel( + 'spip_auteurs', + 'email=' . sql_quote($email) + ) > 0) and ($id_auteur != ($id_auteur_ancien = sql_getfetsel( + 'id_auteur', + 'spip_auteurs', + 'email=' . sql_quote($email) + )))) { $erreurs['email'] = _T('erreur_email_deja_existant'); + } } } } + // quand c'est un auteur existant on fait le reset password ici + if (!count($erreurs) and _request('reset_password') and intval($id_auteur)) { + $erreurs = auteur_reset_password($id_auteur, $erreurs); + return $erreurs; + } + // corriger un cas si frequent : www.example.org sans le http:// qui precede if ($url = _request('url_site') and !tester_url_absolue($url)) { if (strpos($url, ':') === false and strncasecmp($url, 'www.', 4) === 0) { @@ -111,77 +235,215 @@ function formulaires_editer_auteur_verifier_dist($id_auteur='new', $retour='', $ $erreurs['url_site'] = _T('info_url_site_pas_conforme'); } - if ($err = auth_verifier_login($auth_methode, _request('new_login'), $id_auteur)){ + $erreurs['message_erreur'] = ''; + + if ($err = auth_verifier_login($auth_methode, _request('new_login'), $id_auteur)) { $erreurs['new_login'] = $err; $erreurs['message_erreur'] .= $err; - } - else { + } else { // pass trop court ou confirmation non identique if ($p = _request('new_pass')) { if ($p != _request('new_pass2')) { $erreurs['new_pass'] = _T('info_passes_identiques'); $erreurs['message_erreur'] .= _T('info_passes_identiques'); - } - elseif ($err = auth_verifier_pass($auth_methode, _request('new_login'),$p, $id_auteur)){ + } elseif ($err = auth_verifier_pass($auth_methode, _request('new_login'), $p, $id_auteur)) { $erreurs['new_pass'] = $err; $erreurs['message_erreur'] .= $err; } } } + + if (!$erreurs['message_erreur']) { + unset($erreurs['message_erreur']); + } + return $erreurs; } -// http://doc.spip.org/@inc_editer_mot_dist -function formulaires_editer_auteur_traiter_dist($id_auteur='new', $retour='', $associer_objet='', $config_fonc='auteurs_edit_config', $row=array(), $hidden=''){ - if (_request('saisie_webmestre') OR _request('webmestre')) - set_request('webmestre',_request('webmestre')?_request('webmestre'):'non'); - $retour = parametre_url($retour, 'email_confirm',''); - set_request('email', email_valide(_request('email'))); // eviter d'enregistrer les cas qui sont acceptés par email_valide dans le verifier : - // "Marie@toto.com " ou encore "Marie Toto " - +/** + * Traitements du formulaire d'édition d'un auteur + * + * En plus de l'enregistrement normal des infos de l'auteur, la fonction + * traite ces cas spécifiques : + * + * - Envoie lorsqu'un rédacteur n'a pas forcément l'autorisation changer + * seul son adresse email, un email à la nouvelle adresse indiquée + * pour vérifier l'email saisi, avec un lien dans le mai sur l'action + * 'confirmer_email' qui acceptera alors le nouvel email. + * + * - Crée aussi une éventuelle laision indiquée dans $associer_objet avec + * cet auteur. + * + * @see formulaires_editer_objet_traiter() + * + * @param int|string $id_auteur + * Identifiant de l'auteur. 'new' pour une nouvel auteur. + * @param string $retour + * URL de redirection après le traitement + * @param string $associer_objet + * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet, + * tel que 'article|3' + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de l'auteur, si connu + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Retour des traitements + **/ +function formulaires_editer_auteur_traiter_dist( + $id_auteur = 'new', + $retour = '', + $associer_objet = '', + $config_fonc = 'auteurs_edit_config', + $row = array(), + $hidden = '' +) { + if (_request('saisie_webmestre') or _request('webmestre')) { + set_request('webmestre', _request('webmestre') ? _request('webmestre') : 'non'); + } + $retour = parametre_url($retour, 'email_confirm', ''); + + set_request( + 'email', + email_valide(_request('email')) + ); // eviter d'enregistrer les cas qui sont acceptés par email_valide dans le verifier : + // "Marie@toto.com " ou encore "Marie Toto " + include_spip('inc/autoriser'); - if (!autoriser('modifier','auteur',$id_auteur,null,array('email'=>'?'))){ + if (!autoriser('modifier', 'auteur', $id_auteur, null, array('email' => '?'))) { $email_nouveau = _request('email'); set_request('email'); // vider la saisie car l'auteur n'a pas le droit de modifier cet email // mais si c'est son propre profil on lui envoie un email à l'adresse qu'il a indique // pour qu'il confirme qu'il possede bien cette adresse // son clic sur l'url du message permettre de confirmer le changement // et de revenir sur son profil - if ($GLOBALS['visiteur_session']['id_auteur']==$id_auteur - AND $email_nouveau!=($email_ancien=sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.intval($id_auteur)))){ - $envoyer_mail = charger_fonction('envoyer_mail','inc'); - $texte = _T('form_auteur_mail_confirmation', - array('url'=>generer_action_auteur('confirmer_email', $email_nouveau,parametre_url($retour, 'email_modif','ok')))); - $envoyer_mail($email_nouveau,_T('form_auteur_confirmation'),$texte); - set_request('email_confirm',$email_nouveau); - if ($email_ancien) - $envoyer_mail($email_ancien,_T('form_auteur_confirmation'),_T('form_auteur_envoi_mail_confirmation',array('email'=>$email_nouveau))); - $retour = parametre_url($retour, 'email_confirm',$email_nouveau); + if ($GLOBALS['visiteur_session']['id_auteur'] == $id_auteur + and $email_nouveau != + ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))) + ) { + $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); + $texte = _T( + 'form_auteur_mail_confirmation', + array( + 'url' => generer_action_auteur( + 'confirmer_email', + $email_nouveau, + parametre_url($retour, 'email_modif', 'ok') + ) + ) + ); + $envoyer_mail($email_nouveau, _T('form_auteur_confirmation'), $texte); + set_request('email_confirm', $email_nouveau); + if ($email_ancien) { + $envoyer_mail($email_ancien, _T('form_auteur_confirmation'), + _T('form_auteur_envoi_mail_confirmation', array('email' => $email_nouveau))); + } + $retour = parametre_url($retour, 'email_confirm', $email_nouveau); } } - $res = formulaires_editer_objet_traiter('auteur',$id_auteur,0,0,$retour,$config_fonc,$row,$hidden); + $res = formulaires_editer_objet_traiter('auteur', $id_auteur, 0, 0, $retour, $config_fonc, $row, $hidden); + + if (_request('reset_password') and !intval($id_auteur) and intval($res['id_auteur'])) { + $erreurs = array(); + $erreurs = auteur_reset_password($res['id_auteur'], $erreurs); + if (isset($erreurs['message_ok'])) { + if (!isset($res['message_ok'])) $res['message_ok'] = ''; + $res['message_ok'] = trim($res['message_ok'] . ' ' . $erreurs['message_ok']); + } + if (isset($erreurs['message_erreur']) and $erreurs['message_erreur']) { + if (!isset($res['message_erreur'])) $res['message_erreur'] = ''; + $res['message_erreur'] = trim($res['message_erreur'] . ' ' . $erreurs['message_erreur']); + } + } // Un lien auteur a prendre en compte ? - if ($associer_objet AND $id_auteur=$res['id_auteur']){ + if ($associer_objet and $id_auteur = $res['id_auteur']) { $objet = ''; - if (intval($associer_objet)){ - $objet='article'; + if (intval($associer_objet)) { + $objet = 'article'; $id_objet = intval($associer_objet); + } elseif (preg_match(',^\w+\|[0-9]+$,', $associer_objet)) { + list($objet, $id_objet) = explode('|', $associer_objet); } - elseif(preg_match(',^\w+\|[0-9]+$,',$associer_objet)){ - list($objet,$id_objet) = explode('|',$associer_objet); - } - if ($objet AND $id_objet AND autoriser('modifier',$objet,$id_objet)){ + if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) { include_spip('action/editer_auteur'); auteur_associer($id_auteur, array($objet => $id_objet)); - if (isset($res['redirect'])) - $res['redirect'] = parametre_url ($res['redirect'], "id_lien_ajoute", $id_auteur, '&'); + if (isset($res['redirect'])) { + $res['redirect'] = parametre_url($res['redirect'], 'id_lien_ajoute', $id_auteur, '&'); + } } } return $res; } -?> + +function auteur_reset_password($id_auteur, $erreurs = array()) { + $auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); + $config = auteurs_edit_config($auteur); + + if ($config['edit_pass']) { + if ($email = auteur_regenerer_identifiants($id_auteur)) { + $erreurs['message_ok'] = _T('message_nouveaux_identifiants_ok', array('email' => $email)); + $erreurs['message_erreur'] = ''; + } elseif ($email === false) { + $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec_envoi'); + } else { + $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec'); + } + } else { + $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec'); + } + + return $erreurs; +} + +/** + * Renvoyer des identifiants + * @param int $id_auteur + * @param bool $notifier + * @param array $contexte + * @return string + */ +function auteur_regenerer_identifiants($id_auteur, $notifier=true, $contexte = array()) { + if ($id_auteur){ + $set = array(); + include_spip('inc/access'); + $set['pass'] = creer_pass_aleatoire(); + + include_spip('action/editer_auteur'); + auteur_modifier($id_auteur,$set); + + $row = sql_fetsel('*','spip_auteurs','id_auteur='.intval($id_auteur)); + include_spip('inc/filtres'); + if ($notifier + and $row['email'] + and email_valide($row['email']) + and trouver_fond($fond = 'modeles/mail_nouveaux_identifiants')){ + // envoyer l'email avec login/pass + $c = array( + 'id_auteur' => $id_auteur, + 'nom' => $row['nom'], + 'mode' => $row['statut'], + 'email' => $row['email'], + 'pass' => $set['pass'], + ); + // on merge avec les champs fournit en appel, qui sont passes au modele de notification donc + $contexte = array_merge($contexte, $c); + $message = recuperer_fond($fond, $contexte); + include_spip("inc/notifications"); + notifications_envoyer_mails($row['email'],$message); + + return $row['email']; + } + + return false; + + } + + return ''; +} \ No newline at end of file diff --git a/www/prive/formulaires/editer_liens.html b/www/prive/formulaires/editer_liens.html index 3bc7d1a6..d0f5a356 100644 --- a/www/prive/formulaires/editer_liens.html +++ b/www/prive/formulaires/editer_liens.html @@ -5,7 +5,7 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE
       
      ] diff --git a/www/prive/formulaires/editer_liens.php b/www/prive/formulaires/editer_liens.php index b027b995..9b0d8456 100644 --- a/www/prive/formulaires/editer_liens.php +++ b/www/prive/formulaires/editer_liens.php @@ -1,9 +1,8 @@ $options); + } elseif (!isset($options['editable'])) { + $options['editable'] = true; + } + + $editable = $options['editable']; + + list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c); + if (!$table_source or !$objet or !$objet_lien or !$id_objet) { return false; + } $objet_source = objet_type($table_source); $table_sql_source = table_objet_sql($objet_source); // verifier existence de la table xxx_liens include_spip('action/editer_liens'); - if (!objet_associable($objet_lien)) + if (!objet_associable($objet_lien)) { return false; - + } + // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument include_spip('inc/autoriser'); - $editable = ($editable and autoriser('associer'.$table_source, $objet, $id_objet) and autoriser('modifier',$objet,$id_objet)); - - if (!$editable AND !count(objet_trouver_liens(array($objet_lien=>'*'),array(($objet_lien==$objet_source?$objet:$objet_source)=>'*')))) + $editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet) + and autoriser('modifier', $objet, $id_objet)); + + if (!$editable and !count(objet_trouver_liens( + array($objet_lien => '*'), + array(($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet) + ))) { return false; - + } + + // squelettes de vue et de d'association + // ils sont différents si des rôles sont définis. + $skel_vue = $table_source . '_lies'; + $skel_ajout = $table_source . '_associer'; + + // description des roles + include_spip('inc/roles'); + if ($roles = roles_presents($objet_source, $objet)) { + // on demande de nouveaux squelettes en conséquence + $skel_vue = $table_source . '_roles_lies'; + $skel_ajout = $table_source . '_roles_associer'; + } + $valeurs = array( - 'id'=>"$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form - '_vue_liee' => $table_source."_lies", - '_vue_ajout' => $table_source."_associer", + 'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form + '_vue_liee' => $skel_vue, + '_vue_ajout' => $skel_ajout, '_objet_lien' => $objet_lien, - 'id_lien_ajoute'=>_request('id_lien_ajoute'), - 'objet'=>$objet, - 'id_objet'=>$id_objet, - 'objet_source'=>$objet_source, + 'id_lien_ajoute' => _request('id_lien_ajoute'), + 'objet' => $objet, + 'id_objet' => $id_objet, + 'objet_source' => $objet_source, 'table_source' => $table_source, - 'recherche'=>'', - 'visible'=>0, - 'ajouter_lien'=>'', - 'supprimer_lien'=>'', + 'recherche' => '', + 'visible' => 0, + 'ajouter_lien' => '', + 'supprimer_lien' => '', + 'qualifier_lien' => '', + '_roles' => $roles, # description des roles '_oups' => _request('_oups'), 'editable' => $editable, ); + // les options non definies dans $valeurs sont passees telles quelles au formulaire html + $valeurs = array_merge($options, $valeurs); + return $valeurs; } /** * Traiter le post des informations d'édition de liens - * - * Les formulaires postent dans trois variables ajouter_lien et supprimer_lien - * et remplacer_lien * - * Les deux premieres peuvent etre de trois formes differentes : + * Les formulaires peuvent poster dans quatre variables + * - ajouter_lien et supprimer_lien + * - remplacer_lien + * - qualifier_lien + * + * Les deux premières peuvent être de trois formes différentes : * ajouter_lien[]="objet1-id1-objet2-id2" * ajouter_lien[objet1-id1-objet2-id2]="nimportequoi" * ajouter_lien['clenonnumerique']="objet1-id1-objet2-id2" * Dans ce dernier cas, la valeur ne sera prise en compte - * que si _request('clenonnumerique') est vrai (submit associe a l'input) + * que si _request('clenonnumerique') est vrai (submit associé a l'input) * - * remplacer_lien doit etre de la forme + * remplacer_lien doit être de la forme * remplacer_lien[objet1-id1-objet2-id2]="objet3-id3-objet2-id2" * ou objet1-id1 est celui qu'on enleve et objet3-id3 celui qu'on ajoute * + * qualifier_lien doit être de la forme, et sert en complément de ajouter_lien + * qualifier_lien[objet1-id1-objet2-id2][role] = array("role1", "autre_role") + * qualifier_lien[objet1-id1-objet2-id2][valeur] = array("truc", "chose") + * produira 2 liens chacun avec array("role"=>"role1","valeur"=>"truc") et array("role"=>"autre_role","valeur"=>"chose") + * * @param string $a * @param string|int $b * @param int|string $c - * @param bool $editable + * @param array|bool $options + * - Si array, tableau d'options + * - Si bool : valeur de l'option 'editable' uniquement + * * @return array */ -function formulaires_editer_liens_traiter_dist($a,$b,$c,$editable=true){ - $res = array('editable'=>$editable?true:false); - list($table_source,$objet,$id_objet,$objet_lien) = determine_source_lien_objet($a,$b,$c); - if (!$table_source OR !$objet OR !$objet_lien) +function formulaires_editer_liens_traiter_dist($a, $b, $c, $options = array()) { + // compat avec ancienne signature ou le 4eme argument est $editable + if (!is_array($options)) { + $options = array('editable' => $options); + } elseif (!isset($options['editable'])) { + $options['editable'] = true; + } + + $editable = $options['editable']; + + $res = array('editable' => $editable ? true : false); + list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c); + if (!$table_source or !$objet or !$objet_lien) { return $res; + } - if (_request('tout_voir')) - set_request('recherche',''); + if (_request('tout_voir')) { + set_request('recherche', ''); + } include_spip('inc/autoriser'); - if (autoriser('modifier',$objet,$id_objet)) { + if (autoriser('modifier', $objet, $id_objet)) { // annuler les suppressions du coup d'avant ! if (_request('annuler_oups') - AND $oups = _request('_oups') - AND $oups = unserialize($oups)){ - if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}","action",true)){ + and $oups = _request('_oups') + and $oups = unserialize($oups) + ) { + if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) { $oups_objets($oups); - } - else { + } else { $objet_source = objet_type($table_source); include_spip('action/editer_liens'); - foreach($oups as $oup) { - if ($objet_lien==$objet_source) - objet_associer(array($objet_source=>$oup[$objet_source]), array($objet=>$oup[$objet]),$oup); - else - objet_associer(array($objet=>$oup[$objet]), array($objet_source=>$oup[$objet_source]),$oup); + foreach ($oups as $oup) { + if ($objet_lien == $objet_source) { + objet_associer(array($objet_source => $oup[$objet_source]), array($objet => $oup[$objet]), $oup); + } else { + objet_associer(array($objet => $oup[$objet]), array($objet_source => $oup[$objet_source]), $oup); + } } } # oups ne persiste que pour la derniere action, si suppression @@ -176,101 +236,225 @@ function formulaires_editer_liens_traiter_dist($a,$b,$c,$editable=true){ // il est possible de preciser dans une seule variable un remplacement : // remplacer_lien[old][new] - if ($remplacer = _request('remplacer_lien')){ - foreach($remplacer as $k=>$v){ - if ($old = lien_verifier_action($k,'')){ - foreach(is_array($v)?$v:array($v) as $kn=>$vn) - if ($new = lien_verifier_action($kn,$vn)){ + if ($remplacer = _request('remplacer_lien')) { + foreach ($remplacer as $k => $v) { + if ($old = lien_verifier_action($k, '')) { + foreach (is_array($v) ? $v : array($v) as $kn => $vn) { + if ($new = lien_verifier_action($kn, $vn)) { $supprimer[$old] = 'x'; $ajouter[$new] = '+'; } + } } } } - if ($supprimer){ - if ($supprimer_objets = charger_fonction("editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}","action",true)){ + if ($supprimer) { + if ($supprimer_objets = charger_fonction( + "editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}", + 'action', + true + )) { $oups = $supprimer_objets($supprimer); - } - else { + } else { include_spip('action/editer_liens'); $oups = array(); - foreach($supprimer as $k=>$v) { - if ($lien = lien_verifier_action($k,$v)){ - $lien = explode("-",$lien); - list($objet_source,$ids,$objet_lie,$idl) = $lien; - if ($objet_lien==$objet_source){ - $oups = array_merge($oups, objet_trouver_liens(array($objet_source=>$ids), array($objet_lie=>$idl))); - objet_dissocier(array($objet_source=>$ids), array($objet_lie=>$idl)); - } - else{ - $oups = array_merge($oups, objet_trouver_liens(array($objet_lie=>$idl), array($objet_source=>$ids))); - objet_dissocier(array($objet_lie=>$idl), array($objet_source=>$ids)); + foreach ($supprimer as $k => $v) { + if ($lien = lien_verifier_action($k, $v)) { + $lien = explode('-', $lien); + list($objet_source, $ids, $objet_lie, $idl, $role) = $lien; + // appliquer une condition sur le rôle si défini ('*' pour tous les roles) + $cond = (!is_null($role) ? array('role' => $role) : array()); + if ($objet_lien == $objet_source) { + $oups = array_merge( + $oups, + objet_trouver_liens(array($objet_source => $ids), array($objet_lie => $idl), $cond) + ); + objet_dissocier(array($objet_source => $ids), array($objet_lie => $idl), $cond); + } else { + $oups = array_merge( + $oups, + objet_trouver_liens(array($objet_lie => $idl), array($objet_source => $ids), $cond) + ); + objet_dissocier(array($objet_lie => $idl), array($objet_source => $ids), $cond); } } } } - set_request('_oups',$oups?serialize($oups):null); + set_request('_oups', $oups ? serialize($oups) : null); } - - if ($ajouter){ - if ($ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}","action",true)){ + + if ($ajouter) { + if ($ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true) + ) { $ajout_ok = $ajouter_objets($ajouter); - } - else { + } else { $ajout_ok = false; include_spip('action/editer_liens'); - foreach($ajouter as $k=>$v){ - if ($lien = lien_verifier_action($k,$v)){ + foreach ($ajouter as $k => $v) { + if ($lien = lien_verifier_action($k, $v)) { $ajout_ok = true; - list($objet1,$ids,$objet2,$idl) = explode("-",$lien); - if ($objet_lien==$objet1) - objet_associer(array($objet1=>$ids), array($objet2=>$idl)); - else - objet_associer(array($objet2=>$idl), array($objet1=>$ids)); - set_request('id_lien_ajoute',$ids); + list($objet1, $ids, $objet2, $idl) = explode('-', $lien); + $qualifs = lien_retrouver_qualif($objet_lien, $lien); + if ($objet_lien == $objet1) { + lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs); + } else { + lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs); + } + set_request('id_lien_ajoute', $ids); } } } # oups ne persiste que pour la derniere action, si suppression # une suppression suivie d'un ajout dans le meme hit est un remplacement # non annulable ! - if ($ajout_ok) + if ($ajout_ok) { set_request('_oups'); + } } } - + return $res; } /** * Retrouver l'action de liaision demandée - * + * * Les formulaires envoient une action dans un tableau ajouter_lien * ou supprimer_lien - * + * * L'action est de la forme : objet1-id1-objet2-id2 + * ou de la forme : objet1-id1-objet2-id2-role * * L'action peut-être indiquée dans la clé ou dans la valeur. * Si elle est indiquee dans la valeur et que la clé est non numérique, * on ne la prend en compte que si un submit avec la clé a été envoyé * + * @internal * @param string $k Clé du tableau * @param string $v Valeur du tableau * @return string Action demandée si trouvée, sinon '' */ -function lien_verifier_action($k,$v){ - if (preg_match(",^\w+-[\w*]+-[\w*]+-[\w*]+,",$k)) - return $k; - if (preg_match(",^\w+-[\w*]+-[\w*]+-[\w*]+,",$v)){ - if (is_numeric($k)) - return $v; - if (_request($k)) - return $v; +function lien_verifier_action($k, $v) { + $action = ''; + if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) { + $action = $k; + } + if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) { + if (is_numeric($k)) { + $action = $v; + } + if (_request($k)) { + $action = $v; + } + } + // ajout un role null fictif (plus pratique) si pas défini + if ($action and count(explode('-', $action)) == 4) { + $action .= '-'; + } + + return $action; +} + + +/** + * Retrouve le ou les qualificatifs postés avec une liaison demandée + * + * @internal + * @param string $objet_lien + * objet qui porte le lien + * @param string $lien + * Action du lien + * @return array + * Liste des qualifs pour chaque lien. Tableau vide s'il n'y en a pas. + **/ +function lien_retrouver_qualif($objet_lien, $lien) { + // un role est défini dans la liaison + $defs = explode('-', $lien); + list($objet1, , $objet2, , $role) = $defs; + if ($objet_lien == $objet1) { + $colonne_role = roles_colonne($objet1, $objet2); + } else { + $colonne_role = roles_colonne($objet2, $objet1); + } + + // cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut) + if ($role) { + return array( + // un seul lien avec ce role + array($colonne_role => $role) + ); + } + + // retrouver les rôles postés pour cette liaison, s'il y en a. + $qualifier_lien = _request('qualifier_lien'); + if (!$qualifier_lien or !is_array($qualifier_lien)) { + return array(); + } + + // pas avec l'action complete (incluant le role) + $qualif = array(); + if ((!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) + and count($defs) == 5 + ) { + // on tente avec l'action sans le role + array_pop($defs); + $lien = implode('-', $defs); + if (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) { + $qualif = array(); + } + } + + // $qualif de la forme array(role=>array(...),valeur=>array(...),....) + // on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...) + $qualifs = array(); + while (count($qualif)) { + $q = array(); + foreach ($qualif as $att => $values) { + if (is_array($values)) { + $q[$att] = array_shift($qualif[$att]); + if (!count($qualif[$att])) { + unset($qualif[$att]); + } + } else { + $q[$att] = $values; + unset($qualif[$att]); + } + } + // pas de rôle vide + if (!$colonne_role or !isset($q[$colonne_role]) or $q[$colonne_role]) { + $qualifs[] = $q; + } + } + + return $qualifs; +} + +/** + * Ajoute les liens demandés en prenant éventuellement en compte le rôle + * + * Appelle la fonction objet_associer. L'appelle autant de fois qu'il y + * a de rôles demandés pour cette liaison. + * + * @internal + * @param string $objet_source Objet source de la liaison (qui a la table de liaison) + * @param array|string $ids Identifiants pour l'objet source + * @param string $objet_lien Objet à lier + * @param array|string $idl Identifiants pour l'objet lié + * @param array $qualifs + * @return void + **/ +function lien_ajouter_liaisons($objet_source, $ids, $objet_lien, $idl, $qualifs) { + + // retrouver la colonne de roles s'il y en a a lier + if (is_array($qualifs) and count($qualifs)) { + foreach ($qualifs as $qualif) { + objet_associer(array($objet_source => $ids), array($objet_lien => $idl), $qualif); + } + } else { + objet_associer(array($objet_source => $ids), array($objet_lien => $idl)); } - return ''; } -?> diff --git a/www/prive/formulaires/editer_logo.html b/www/prive/formulaires/editer_logo.html index 53e5c32b..5d3be5d4 100644 --- a/www/prive/formulaires/editer_logo.html +++ b/www/prive/formulaires/editer_logo.html @@ -8,12 +8,12 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE [(#REM) un submit pour attraper la touche entree]
      ] -
        -
      • +
        +
        [(#ENV{logo_on}|oui) [(#INCLURE{fond=formulaires/inc-apercu-logo,env,logo=#ENV{logo_on},quoi=logo_on,editable=#ENV{logo_off}|non|et{#ENV{editable}}})] ][(#ENV{editable}) @@ -24,15 +24,15 @@ #SET{valider,' '} ] ] -
      • +
      [(#ENV{logo_survol}|ou{#ENV{logo_off}}|oui) -
    • +
      [(#ENV{logo_off}|oui) [(#INCLURE{fond=formulaires/inc-apercu-logo,env,logo=#ENV{logo_off},quoi=logo_off,editable=#ENV{editable}})] ][(#ENV{editable}) [(#ENV{logo_off}|non) + class="ajouter_survol"><:logo_survol:>
      [ (#ENV**{erreurs}|table_valeur{logo_off}) @@ -41,13 +41,16 @@
      ] ] -
    • ] - +
      + ] + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] [(#ENV{editable}) [(#GET{valider}) -

      ] -
      ] +

      + ] + + ] -] +] \ No newline at end of file diff --git a/www/prive/formulaires/editer_logo.php b/www/prive/formulaires/editer_logo.php index 0e5abaa5..0dcc3845 100644 --- a/www/prive/formulaires/editer_logo.php +++ b/www/prive/formulaires/editer_logo.php @@ -3,59 +3,70 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion du formulaire d'édition de logo + * + * Ce formulaire ajoute, modifie ou supprime des logos sur les objets de SPIP. + * + * - En dehors d'une boucle, ce formulaire modifie le logo du site. + * - Dans une boucle, il modifie le logo de la table selectionnée. + * + * Pensez juste que l'appel de `#LOGO_{TYPE}` s'appuie sur le nom de la clé primaire et non sur le + * nom de l'objet réel. Par exemple on ecrira `#LOGO_GROUPE` (et non `#LOGO_GROUPEMOTS`) pour afficher + * un logo issu du formulaire mis dans une boucle `GROUPES_MOTS` + * + * - il est possible de lui passer les paramètres objet et id : `#FORMULAIRE_EDITER_LOGO{article,1}` + * - il est possible de spécifier une URL de redirection apres traitement : + * `#FORMULAIRE_EDITER_LOGO{article,1,#URL_ARTICLE}` + * + * @package SPIP\Core\Formulaires + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} global $logo_libelles; // utilise pour le logo du site, donc doit rester ici $logo_libelles['site'] = _T('logo_site'); $logo_libelles['racine'] = _T('logo_standard_rubrique'); -/** - * Formulaire #EDITER_LOGO - * - * Ce formulaire ajoute, modifie ou supprime des logos sur les objets de SPIP. - * - En dehors d'une boucle, ce formulaire modifie le logo du site. - * - Dans une boucle, il modifie le logo de la table selectionnee. - * Pensez juste que l'appel de #LOGO_{TYPE} s'appuie sur le nom de la cle primaire et non sur le - * nom de l'objet reel. Par exemple on ecrira #LOGO_GROUPE (et non #LOGO_GROUPEMOTS) pour afficher - * un logo issu du formulaire mis dans une boucle GROUPES_MOTS - * - il est possible de lui passer les parametres objet et id : #FORMULAIRE_EDITER_LOGO{article,1} - * - il est possible de spécifier une url de redirection apres traitement : - * ex. #FORMULAIRE_EDITER_LOGO{article,1,#URL_ARTICLE} - */ /** - * Chargement du formulaire + * Chargement du formulaire d'édition de logo * - * @param string $objet Objet SPIP auquel sera lie le document (ex. article) - * @param integer $id_objet Identifiant de l'objet - * @param string $retour Url de redirection apres traitement - * @param Array $options Tableau d'option (exemple : image_reduire => 50) - * @return Array Variables d'environnement pour le fond + * @param string $objet Objet SPIP auquel sera lie le document (ex. article) + * @param int $id_objet Identifiant de l'objet + * @param string $retour Url de redirection apres traitement + * @param array $options Tableau d'option (exemple : image_reduire => 50) + * @return array Variables d'environnement pour le fond */ -function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour='', $options=array()){ +function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $options = array()) { // pas dans une boucle ? formulaire pour le logo du site // dans ce cas, il faut chercher un 'siteon0.ext' - if (!$objet) $objet = 'site'; + if (!$objet) { + $objet = 'site'; + } $objet = objet_type($objet); $_id_objet = id_table_objet($objet); - if (!is_array($options)) + if (!is_array($options)) { $options = unserialize($options); + } - if (!isset ($options['titre'])) { + if (!isset($options['titre'])) { $balise_img = chercher_filtre('balise_img'); - $img = $balise_img(chemin_image('image-24.png'), "", 'cadre-icone'); + $img = $balise_img(chemin_image('image-24.png'),'', 'cadre-icone'); $libelles = pipeline('libeller_logo', $GLOBALS['logo_libelles']); - $libelle = (($id_objet OR $objet != 'rubrique') ? $objet : 'racine'); + $libelle = (($id_objet or $objet != 'rubrique') ? $objet : 'racine'); if (isset($libelles[$libelle])) { $libelle = $libelles[$libelle]; } elseif ($libelle = objet_info($objet, 'texte_logo_objet')) { @@ -63,15 +74,15 @@ function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour='', $op } else { $libelle = _L('Logo'); } - switch($objet){ + switch ($objet) { case 'article': - $libelle .= " " . aide ("logoart"); + $libelle .= ' ' . aider('logoart'); break; case 'breve': - $libelle .= " " . aide ("breveslogo"); + $libelle .= ' ' . aider('breveslogo'); break; case 'rubrique': - $libelle .= " " . aide ("rublogo"); + $libelle .= ' ' . aider('rublogo'); break; default: break; @@ -79,43 +90,46 @@ function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour='', $op $options['titre'] = $img . $libelle; } - if (!isset ($options['editable'])){ + if (!isset($options['editable'])) { include_spip('inc/autoriser'); - $options['editable'] = autoriser('iconifier',$objet,$id_objet); + $options['editable'] = autoriser('iconifier', $objet, $id_objet); } $res = array( - 'editable'=>($GLOBALS['meta']['activer_logos'] == 'oui' ? ' ' : '')&&(!isset($options['editable']) OR $options['editable']), - 'logo_survol'=>($GLOBALS['meta']['activer_logos_survol'] == 'oui' ? ' ' : ''), - 'objet'=>$objet, - 'id_objet'=>$id_objet, - '_options'=>$options, - '_show_upload_off'=>'', + 'editable' => ($GLOBALS['meta']['activer_logos'] == 'oui' ? ' ' : '') && (!isset($options['editable']) or $options['editable']), + 'logo_survol' => ($GLOBALS['meta']['activer_logos_survol'] == 'oui' ? ' ' : ''), + 'objet' => $objet, + 'id_objet' => $id_objet, + '_options' => $options, + '_show_upload_off' => '', ); - + // rechercher le logo de l'objet - // la fonction prend un parametre '_id_objet' etrange : + // la fonction prend un parametre '_id_objet' etrange : // le nom de la cle primaire (et non le nom de la table) // ou directement le nom du raccourcis a chercher $chercher_logo = charger_fonction('chercher_logo', 'inc'); - $etats = $res['logo_survol'] ? array('on','off') : array('on'); - foreach($etats as $etat) { + $etats = $res['logo_survol'] ? array('on', 'off') : array('on'); + foreach ($etats as $etat) { $logo = $chercher_logo($id_objet, $_id_objet, $etat); - if ($logo){ - $res['logo_'.$etat] = $logo[0]; + if ($logo) { + $res['logo_' . $etat] = $logo[0]; } } // pas de logo_on -> pas de formulaire pour le survol - if (!isset($res['logo_on'])) - $res['logo_survol']=''; - elseif (!isset($res['logo_off']) AND _request('logo_up')) + if (!isset($res['logo_on'])) { + $res['logo_survol'] = ''; + } elseif (!isset($res['logo_off']) and _request('logo_up')) { $res['_show_upload_off'] = ' '; + } // si le logo n'est pas editable et qu'il n'y en a pas, on affiche pas du tout le formulaire if (!$res['editable'] - AND !isset($res['logo_off']) - AND !isset($res['logo_on'])) + and !isset($res['logo_off']) + and !isset($res['logo_on']) + ) { return false; + } return $res; } @@ -123,33 +137,45 @@ function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour='', $op /** * Identifier le formulaire en faisant abstraction des parametres qui * ne representent pas l'objet edite + * + * @param string $objet Objet SPIP auquel sera lie le document (ex. article) + * @param int $id_objet Identifiant de l'objet + * @param string $retour Url de redirection apres traitement + * @param array $options Tableau d'option (exemple : image_reduire => 50) + * @return string Hash du formulaire */ -function formulaires_editer_logo_identifier_dist($objet, $id_objet, $retour='', $options=array()){ +function formulaires_editer_logo_identifier_dist($objet, $id_objet, $retour = '', $options = array()) { return serialize(array($objet, $id_objet)); } /** - * Verification avant traitement + * Verification avant traitement du formulaire d'édition de logo * * On verifie que l'upload s'est bien passe et * que le document recu est une image (d'apres son extension) * - * @param string $objet - * @param integer $id_objet - * @param string $retour - * @return Array Tableau des erreurs + * @param string $objet Objet SPIP auquel sera lie le document (ex. article) + * @param int $id_objet Identifiant de l'objet + * @param string $retour Url de redirection apres traitement + * @param array $options Tableau d'option (exemple : image_reduire => 50) + * @return array Erreurs du formulaire */ -function formulaires_editer_logo_verifier_dist($objet, $id_objet, $retour=''){ +function formulaires_editer_logo_verifier_dist($objet, $id_objet, $retour = '', $options = array()) { $erreurs = array(); // verifier les extensions $sources = formulaire_editer_logo_get_sources(); - foreach($sources as $etat=>$file) { + foreach ($sources as $etat => $file) { // seulement si une reception correcte a eu lieu - if ($file AND $file['error'] == 0) { - if (!in_array(strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)),array('jpg','png','gif','jpeg'))) - $erreurs['logo_'.$etat] = _L('Extension non reconnue'); + if ($file and $file['error'] == 0) { + if (!in_array( + strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)), + array('jpg', 'png', 'gif', 'jpeg') + )) { + $erreurs['logo_' . $etat] = _L('Extension non reconnue'); + } } } + return $erreurs; } @@ -159,59 +185,51 @@ function formulaires_editer_logo_verifier_dist($objet, $id_objet, $retour=''){ * Il est affecte au site si la balise n'est pas dans une boucle, * sinon a l'objet concerne par la boucle ou indiquee par les parametres d'appel * - * @param string $objet - * @param integer $id_objet - * @param string $retour - * @return Array + * @param string $objet Objet SPIP auquel sera lie le document (ex. article) + * @param int $id_objet Identifiant de l'objet + * @param string $retour Url de redirection apres traitement + * @param array $options Tableau d'option (exemple : image_reduire => 50) + * @return array Retour des traitements */ -function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour=''){ - $res = array('editable'=>' '); - +function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour = '', $options = array()) { + $res = array('editable' => ' '); + // pas dans une boucle ? formulaire pour le logo du site - // dans ce cas, il faut chercher un 'siteon0.ext' - if (!$objet) $objet = 'site'; + // dans ce cas, il faut chercher un 'siteon0.ext' + if (!$objet) { + $objet = 'site'; + } - $objet = objet_type($objet); - $_id_objet = id_table_objet($objet); + include_spip('action/editer_logo'); - // supprimer l'ancien logo puis copier le nouveau - include_spip('inc/chercher_logo'); - include_spip('inc/flock'); - $type = type_du_logo($_id_objet); - $chercher_logo = charger_fonction('chercher_logo','inc'); - // effectuer la suppression si demandee d'un logo $on = _request('supprimer_logo_on'); - if ($on OR _request('supprimer_logo_off')){ - $logo = $chercher_logo($id_objet, $_id_objet, $on ? 'on' : 'off'); - if ($logo) - spip_unlink($logo[0]); + if ($on or _request('supprimer_logo_off')) { + logo_supprimer($objet, $id_objet, $on ? 'on' : 'off'); $res['message_ok'] = ''; // pas besoin de message : la validation est visuelle - set_request('logo_up',' '); - } - - // sinon supprimer ancien logo puis copier le nouveau + set_request('logo_up', ' '); + } // sinon supprimer ancien logo puis copier le nouveau else { - include_spip('action/iconifier'); - $ajouter_image = charger_fonction('spip_image_ajouter','action'); $sources = formulaire_editer_logo_get_sources(); - foreach($sources as $etat=>$file) { - if ($file and $file['error']==0) { - $logo = $chercher_logo($id_objet, $_id_objet, $etat); - if ($logo) - spip_unlink($logo[0]); - if ($err = $ajouter_image($type.$etat.$id_objet," ",$file,true)) + foreach ($sources as $etat => $file) { + if ($file and $file['error'] == 0) { + if ($err = logo_modifier($objet, $id_objet, $etat, $file)) { $res['message_erreur'] = $err; - else - $res['message_ok'] = ''; // pas besoin de message : la validation est visuelle - set_request('logo_up',' '); + } else { + $res['message_ok'] = ''; + } // pas besoin de message : la validation est visuelle + set_request('logo_up', ' '); } } } - - if ($retour){ - include_spip('inc/headers'); - $res['redirect'] = parametre_url($retour,'var_mode','calcul'); + + // Invalider les caches de l'objet + include_spip('inc/invalideur'); + suivre_invalideur("id='$objet/$id_objet'"); + + + if ($retour) { + $res['redirect'] = $retour; } return $res; @@ -219,21 +237,26 @@ function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour=''){ /** - * Extraction des sources des fichiers uploades correspondant aux 2 logos (normal + survol) + * Extraction des sources des fichiers uploadés correspondant aux 2 logos (normal + survol) * si leur upload s'est bien passé * - * @return Array + * @return array + * Sources des fichiers dans les clés `on` ou `off` */ -function formulaire_editer_logo_get_sources(){ - if (!$_FILES) $_FILES = $GLOBALS['HTTP_POST_FILES']; - if (!is_array($_FILES)) return array(); - +function formulaire_editer_logo_get_sources() { + if (!$_FILES) { + $_FILES = isset($GLOBALS['HTTP_POST_FILES']) ? $GLOBALS['HTTP_POST_FILES'] : array(); + } + if (!is_array($_FILES)) { + return array(); + } + $sources = array(); - foreach(array('on','off') as $etat) { - if ($_FILES['logo_'.$etat]['error'] == 0) { - $sources[$etat] = $_FILES['logo_'.$etat]; + foreach (array('on', 'off') as $etat) { + if (isset($_FILES['logo_' . $etat]) and $_FILES['logo_' . $etat]['error'] == 0) { + $sources[$etat] = $_FILES['logo_' . $etat]; } } + return $sources; } -?> diff --git a/www/prive/formulaires/editer_rubrique.html b/www/prive/formulaires/editer_rubrique.html index ccd9ad29..7af02040 100644 --- a/www/prive/formulaires/editer_rubrique.html +++ b/www/prive/formulaires/editer_rubrique.html @@ -5,36 +5,36 @@
      [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
        -
      • + #ACTION_FORMULAIRE +
        +
        [ (#ENV**{erreurs}|table_valeur{titre}) ] -
      • +
      - [
    • + [
      [ (#ENV**{erreurs}|table_valeur{id_parent}) ] (#VAL|chercher_rubrique{[(#ENV{id_rubrique}|intval)],#ENV{id_parent},'rubrique',#ENV{id_secteur},#ENV**{config}|table_valeur{restreint},0,form_simple}) -
    • ] + ] [(#ENV**{config}|table_valeur{rubriques_descriptif}|=={non}|?{#ENV**{descriptif,''},' '}|?{' '}) -
    • +
      <:entree_contenu_rubrique:>
      [ (#ENV**{erreurs}|table_valeur{descriptif}) ] -
    • ] + ] [(#ENV**{config}|table_valeur{rubriques_texte}|=={non}|?{#ENV**{texte,''},' '}|?{' '}) -
    • +
      [ (#ENV**{erreurs}|table_valeur{texte}) ][(#ENV**{_texte_trop_long,''}) ] -
    • ] - + ] + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]

      diff --git a/www/prive/formulaires/editer_rubrique.php b/www/prive/formulaires/editer_rubrique.php index 0fcea528..59e23186 100644 --- a/www/prive/formulaires/editer_rubrique.php +++ b/www/prive/formulaires/editer_rubrique.php @@ -3,25 +3,79 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion du formulaire de d'édition de rubrique + * + * @package SPIP\Core\Rubriques\Formulaires + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/actions'); include_spip('inc/editer'); -// http://doc.spip.org/@inc_editer_article_dist -function formulaires_editer_rubrique_charger_dist($id_rubrique='new', $id_parent=0, $retour='', $lier_trad=0, $config_fonc='rubriques_edit_config', $row=array(), $hidden=''){ - return formulaires_editer_objet_charger('rubrique',$id_rubrique,$id_parent,$lier_trad,$retour,$config_fonc,$row,$hidden); + +/** + * Chargement du formulaire d'édition d'une rubrique + * + * @see formulaires_editer_objet_charger() + * + * @param int|string $id_rubrique + * Identifiant de la rubrique. 'new' pour une nouvelle rubrique + * @param int $id_parent + * Identifiant de la rubrique parente + * @param string $retour + * URL de redirection après le traitement + * @param int $lier_trad + * Identifiant éventuel d'une rubrique source de traduction + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de la rubrique, si connue + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Environnement du formulaire + **/ +function formulaires_editer_rubrique_charger_dist( + $id_rubrique = 'new', + $id_parent = 0, + $retour = '', + $lier_trad = 0, + $config_fonc = 'rubriques_edit_config', + $row = array(), + $hidden = '' +) { + return formulaires_editer_objet_charger( + 'rubrique', + $id_rubrique, + $id_parent, + $lier_trad, + $retour, + $config_fonc, + $row, + $hidden + ); } -function rubriques_edit_config($row) -{ +/** + * Choix par défaut des options de présentation + * + * @param array $row + * Valeurs de la ligne SQL d'une rubrique, si connue + * return array + * Configuration pour le formulaire + */ +function rubriques_edit_config($row) { global $spip_lang; $config = $GLOBALS['meta']; @@ -29,27 +83,121 @@ function rubriques_edit_config($row) $config['langue'] = $spip_lang; $config['restreint'] = (!$GLOBALS['connect_toutes_rubriques']); + return $config; } /** - * Identifier le formulaire en faisant abstraction des parametres qui - * ne representent pas l'objet edite + * Identifier le formulaire en faisant abstraction des paramètres qui + * ne représentent pas l'objet édité + * + * @param int|string $id_rubrique + * Identifiant de la rubrique. 'new' pour une nouvelle rubrique + * @param int $id_parent + * Identifiant de la rubrique parente + * @param string $retour + * URL de redirection après le traitement + * @param int $lier_trad + * Identifiant éventuel d'une rubrique source de traduction + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de la rubrique, si connue + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return string + * Hash du formulaire */ -function formulaires_editer_rubrique_identifier_dist($id_rubrique='new', $id_parent=0, $retour='', $lier_trad=0, $config_fonc='rubriques_edit_config', $row=array(), $hidden=''){ - return serialize(array(intval($id_rubrique),$lier_trad)); +function formulaires_editer_rubrique_identifier_dist( + $id_rubrique = 'new', + $id_parent = 0, + $retour = '', + $lier_trad = 0, + $config_fonc = 'rubriques_edit_config', + $row = array(), + $hidden = '' +) { + return serialize(array(intval($id_rubrique), $lier_trad)); } -function formulaires_editer_rubrique_verifier_dist($id_rubrique='new', $id_parent=0, $retour='', $lier_trad=0, $config_fonc='rubriques_edit_config', $row=array(), $hidden=''){ +/** + * Vérifications du formulaire d'édition d'une rubrique + * + * @see formulaires_editer_objet_verifier() + * + * @param int|string $id_rubrique + * Identifiant de la rubrique. 'new' pour une nouvelle rubrique + * @param int $id_parent + * Identifiant de la rubrique parente + * @param string $retour + * URL de redirection après le traitement + * @param int $lier_trad + * Identifiant éventuel d'une rubrique source de traduction + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de la rubrique, si connue + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Erreurs du formulaire + **/ +function formulaires_editer_rubrique_verifier_dist( + $id_rubrique = 'new', + $id_parent = 0, + $retour = '', + $lier_trad = 0, + $config_fonc = 'rubriques_edit_config', + $row = array(), + $hidden = '' +) { // auto-renseigner le titre si il n'existe pas - titre_automatique('titre',array('descriptif','texte')); + titre_automatique('titre', array('descriptif', 'texte')); // on ne demande pas le titre obligatoire : il sera rempli a la volee dans editer_rubrique si vide - $erreurs = formulaires_editer_objet_verifier('rubrique',$id_rubrique,array()); + $erreurs = formulaires_editer_objet_verifier('rubrique', $id_rubrique, array()); + return $erreurs; } -function formulaires_editer_rubrique_traiter_dist($id_rubrique='new', $id_parent=0, $retour='', $lier_trad=0, $config_fonc='rubriques_edit_config', $row=array(), $hidden=''){ - return formulaires_editer_objet_traiter('rubrique',$id_rubrique,$id_parent,$lier_trad,$retour,$config_fonc,$row,$hidden); +/** + * Traitements du formulaire d'édition d'une rubrique + * + * @see formulaires_editer_objet_traiter() + * + * @param int|string $id_rubrique + * Identifiant de la rubrique. 'new' pour une nouvelle rubrique + * @param int $id_parent + * Identifiant de la rubrique parente + * @param string $retour + * URL de redirection après le traitement + * @param int $lier_trad + * Identifiant éventuel d'une rubrique source de traduction + * @param string $config_fonc + * Nom de la fonction ajoutant des configurations particulières au formulaire + * @param array $row + * Valeurs de la ligne SQL de la rubrique, si connue + * @param string $hidden + * Contenu HTML ajouté en même temps que les champs cachés du formulaire. + * @return array + * Retour des traitements + **/ +function formulaires_editer_rubrique_traiter_dist( + $id_rubrique = 'new', + $id_parent = 0, + $retour = '', + $lier_trad = 0, + $config_fonc = 'rubriques_edit_config', + $row = array(), + $hidden = '' +) { + return formulaires_editer_objet_traiter( + 'rubrique', + $id_rubrique, + $id_parent, + $lier_trad, + $retour, + $config_fonc, + $row, + $hidden + ); } - -?> diff --git a/www/prive/formulaires/inc-apercu-logo.html b/www/prive/formulaires/inc-apercu-logo.html index c7f6b842..a8888ca9 100644 --- a/www/prive/formulaires/inc-apercu-logo.html +++ b/www/prive/formulaires/inc-apercu-logo.html @@ -1,5 +1,5 @@
      - [] + [] #SET{largeur,#ENV{logo}|largeur} #SET{hauteur,#ENV{logo}|hauteur} [
      (#ENV{titre,''})
      ] diff --git a/www/prive/formulaires/inc-choisir-objets.html b/www/prive/formulaires/inc-choisir-objets.html index c5581e2c..c4d83cda 100644 --- a/www/prive/formulaires/inc-choisir-objets.html +++ b/www/prive/formulaires/inc-choisir-objets.html @@ -1,8 +1,10 @@ -[(#VALEUR{editable}|oui) +#SET{traductions,#ARRAY}[(#EDITABLE|oui) +[(#SET{traductions,#GET{traductions}|array_merge{#ARRAY{#CLE,#TEXTE_OBJETS|_T}}})] +] #SET{id,#ENV{name}|replace{\W,'_'}|concat{'_',#CLE}}
      - +
      -] + diff --git a/www/prive/formulaires/inc-instituer_auteur.html b/www/prive/formulaires/inc-instituer_auteur.html index 5b84276d..7de7942f 100644 --- a/www/prive/formulaires/inc-instituer_auteur.html +++ b/www/prive/formulaires/inc-instituer_auteur.html @@ -1,4 +1,4 @@ -#SET{statuts_auteurs,#VAL{_STATUT_AUTEUR_RUBRIQUE}|constant|explode{','}} +#SET{statuts_auteurs,#CONST{_STATUT_AUTEUR_RUBRIQUE}|explode{','}} @@ -34,7 +34,7 @@ [(#SET{label,<:info_ajouter_rubrique:>})] [(#STATUT|=={0minirezo}|oui) -

      <:info_admin_gere_toutes_rubriques:>

      +

      <:info_auteur_gere_toutes_rubriques:>

      ]
        diff --git a/www/prive/formulaires/inc-instituer_auteur_fonctions.php b/www/prive/formulaires/inc-instituer_auteur_fonctions.php index 2f8c3403..1dc521b3 100644 --- a/www/prive/formulaires/inc-instituer_auteur_fonctions.php +++ b/www/prive/formulaires/inc-instituer_auteur_fonctions.php @@ -1,6 +1,13 @@ ` pour enlever des rubriques * @return string + * Code HTML et javascript */ -function choisir_rubriques_admin_restreint($id_auteur,$label='', $sel_css="#liste_rubriques_restreintes", $img_remove="") { +function choisir_rubriques_admin_restreint( + $id_auteur, + $label = '', + $sel_css = '#liste_rubriques_restreintes', + $img_remove = '' +) { global $spip_lang; - $res = ""; + $res = ''; // Ajouter une rubrique a un administrateur restreint if ($chercher_rubrique = charger_fonction('chercher_rubrique', 'inc') - AND $a = $chercher_rubrique(0, 'auteur', false)) { - - if ($img_remove) + and $a = $chercher_rubrique(0, 'auteur', false) + ) { + if ($img_remove) { $img_remove = addslashes("$img_remove"); + } $res = - "\n
        \n" - . "\n" - . "\n" - . $a - . "
        \n" + "\n
        \n" + . "\n" + . "\n" + . $a + . "
        \n" - // onchange = pour le menu - // l'evenement doit etre provoque a la main par le selecteur ajax - . ""; - } return $res; } - -?> \ No newline at end of file diff --git a/www/prive/formulaires/instituer_objet.html b/www/prive/formulaires/instituer_objet.html index 5043f83c..2705738e 100644 --- a/www/prive/formulaires/instituer_objet.html +++ b/www/prive/formulaires/instituer_objet.html @@ -9,11 +9,11 @@
        [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE ] #SET{name,statut}#SET{obli,'obligatoire'}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
          -
        • +
          +
          [ (#GET{erreurs}) ] @@ -34,8 +34,8 @@ [(#ENV{#GET{name}}|puce_statut{#ENV{_objet}})] [(#ENV{_statuts}|table_valeur{#ENV{#GET{name}}}|_T)] ] -
        • -
        +
        +
        [(#ENV{editable})

          @@ -53,10 +53,10 @@ else boutons.css('visibility','hidden') } - jQuery(function(){ - jQuery(".formulaire_#FORM .show select") - .each(function(){update_select.apply(this,['#ENV{#GET{name}}']);}) - .bind('change',function(){update_select.apply(this,['#ENV{#GET{name}}']);}) - .bind('keyup',function(){update_select.apply(this,['#ENV{#GET{name}}']);}); + jQuery(function($){ + $(".formulaire_#FORM .show select") + .each(function(){update_select.apply(this,['#ENV{#GET{name}}']);}) + .on('change',function(){update_select.apply(this,['#ENV{#GET{name}}']);}) + .on('keyup',function(){update_select.apply(this,['#ENV{#GET{name}}']);}); }); diff --git a/www/prive/formulaires/instituer_objet.php b/www/prive/formulaires/instituer_objet.php index 20f03b6f..e0e2c45a 100644 --- a/www/prive/formulaires/instituer_objet.php +++ b/www/prive/formulaires/instituer_objet.php @@ -3,81 +3,111 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion du formulaire d'institution (changement de statut) d'un objet + * + * @package SPIP\Core\Formulaires + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/editer'); include_spip('inc/autoriser'); include_spip('inc/puce_statut'); /** - * filtres les statuts utilisable selon les droits de publication + * Filtres les statuts utilisable selon les droits de publication + * * @param array $desc * @param bool $publiable * @return array */ -function lister_statuts_proposes($desc,$publiable = true){ - if (!isset($desc['statut_textes_instituer'])) +function lister_statuts_proposes($desc, $publiable = true) { + if (!isset($desc['statut_textes_instituer'])) { return false; + } $l = $desc['statut_textes_instituer']; - if (!$publiable){ + if (!$publiable) { unset($l['publie']); unset($l['refuse']); } + return $l; } /** - * Charger #FORMULAIRE_INSTITUER_OBJET + * Chargement du formulaire instituer objet + * + * @uses formulaires_editer_objet_charger() + * * @param string $objet + * Type d'objet * @param int $id_objet + * Identifiant de l'objet * @param string $retour + * URL de redirection après le traitement + * @param bool $editable + * Indique si le statut est éditable ou non. + * Dans tous les cas, si l'on n'a pas la permission de modifier l'objet, + * cette option sera mise à false. * @return array|bool + * Environnement du formulaire ou false si aucun affichage à faire. */ -function formulaires_instituer_objet_charger_dist($objet,$id_objet,$retour="",$editable = true){ - $editable = ($editable?true:false); +function formulaires_instituer_objet_charger_dist($objet, $id_objet, $retour = '', $editable = true) { + $editable = ($editable ? true : false); $table = table_objet_sql($objet); $desc = lister_tables_objets_sql($table); - if (!isset($desc['statut_textes_instituer'])) + if (!isset($desc['statut_textes_instituer'])) { return false; + } - if (!autoriser('modifier', $objet, $id_objet)) + if (!autoriser('modifier', $objet, $id_objet)) { $editable = false; + } // charger le contenu de l'objet // dont son champ statut - $v = formulaires_editer_objet_charger($objet,$id_objet,0,0,'',''); + $v = formulaires_editer_objet_charger($objet, $id_objet, 0, 0, '', ''); $publiable = true; $statuts = lister_statuts_proposes($desc); // tester si on a le droit de publier, si un statut publie existe - if (isset($statuts['publie'])){ - if (!autoriser('instituer', $objet, $id_objet, null, array('statut'=>'publie'))){ - if ($v['statut'] == 'publie') + if (isset($statuts['publie'])) { + if (!autoriser('instituer', $objet, $id_objet, null, array('statut' => 'publie'))) { + if ($v['statut'] == 'publie') { $editable = false; - else + } else { $publiable = false; + } } } + $statuts = lister_statuts_proposes($desc, $editable ? $publiable : true); + if (count($statuts) == 1 and isset($statuts[$v['statut']])) { + $editable = false; + } + $valeurs = array( 'editable' => $editable, 'statut' => $v['statut'], '_objet' => $objet, '_id_objet' => $id_objet, - '_statuts' => lister_statuts_proposes($desc, $editable?$publiable:true), + '_statuts' => $statuts, '_publiable' => $publiable, - '_label' => isset($desc['texte_changer_statut'])?$desc['texte_changer_statut']:'texte_article_statut', - '_aide' => isset($desc['aide_changer_statut'])?$desc['aide_changer_statut']:'', - '_hidden' => "", + '_label' => isset($desc['texte_changer_statut']) ? $desc['texte_changer_statut'] : 'texte_article_statut', + '_aide' => isset($desc['aide_changer_statut']) ? $desc['aide_changer_statut'] : '', + '_hidden' => "", ); #if (!count($valeurs['statuts'])) @@ -85,65 +115,86 @@ function formulaires_instituer_objet_charger_dist($objet,$id_objet,$retour="",$e } /** - * Verifier #FORMULAIRE_INSTITUER_OBJET + * Vérifications du formulaire instituer objet + * + * @uses formulaires_editer_objet_charger() + * * @param string $objet + * Type d'objet * @param int $id_objet + * Identifiant de l'objet * @param string $retour + * URL de redirection après le traitement + * @param bool $editable + * Indique si le statut est éditable ou non. * @return array + * Tableau des erreurs */ -function formulaires_instituer_objet_verifier_dist($objet,$id_objet,$retour="",$editable = true){ +function formulaires_instituer_objet_verifier_dist($objet, $id_objet, $retour = '', $editable = true) { $erreurs = array(); // charger le contenu de l'objet // dont son champ statut - $v = formulaires_editer_objet_charger($objet,$id_objet,0,0,'',''); + $v = formulaires_editer_objet_charger($objet, $id_objet, 0, 0, '', ''); - if ($v['statut']!==_request('statut_old')) + if ($v['statut'] !== _request('statut_old')) { $erreurs['statut'] = _T('instituer_erreur_statut_a_change'); - else { + } else { $table = table_objet_sql($objet); $desc = lister_tables_objets_sql($table); $publiable = true; if (isset($v['id_rubrique']) - AND !autoriser('publierdans', 'rubrique', $v['id_rubrique'])) { + and !autoriser('publierdans', 'rubrique', $v['id_rubrique']) + ) { $publiable = false; } $l = lister_statuts_proposes($desc, $publiable); $statut = _request('statut'); if (!isset($l[$statut]) - OR !autoriser('instituer',$objet,$id_objet,'',array('statut'=>$statut))) + or !autoriser('instituer', $objet, $id_objet, '', array('statut' => $statut)) + ) { $erreurs['statut'] = _T('instituer_erreur_statut_non_autorise'); + } } return $erreurs; } /** - * Traiter #FORMULAIRE_INSTITUER_OBJET + * Traitements du formulaire instituer objet + * * @param string $objet + * Type d'objet * @param int $id_objet + * Identifiant de l'objet * @param string $retour + * URL de redirection après le traitement + * @param bool $editable + * Indique si le statut est éditable ou non. * @return array + * Retour des traitements */ -function formulaires_instituer_objet_traiter_dist($objet,$id_objet,$retour="",$editable = true){ +function formulaires_instituer_objet_traiter_dist($objet, $id_objet, $retour = '', $editable = true) { $c = array('statut' => _request('statut')); // si on a envoye une 'date_posterieure', l'enregistrer // todo dans le HTML - if ($d = _request('date_posterieure')) + if ($d = _request('date_posterieure')) { $c['date'] = $d; + } include_spip('action/editer_objet'); - if ($err=objet_instituer($objet, $id_objet, $c)) - $res = array('message_erreur'=>$err); - else { - $res = array('message_ok'=>_T('info_modification_enregistree')); - if ($retour) + if ($err = objet_instituer($objet, $id_objet, $c)) { + $res = array('message_erreur' => $err); + } else { + $res = array('message_ok' => _T('info_modification_enregistree')); + if ($retour) { $res['redirect'] = $retour; + } set_request('statut'); set_request('date_posterieure'); } return $res; -} \ No newline at end of file +} diff --git a/www/prive/formulaires/login.html b/www/prive/formulaires/login.html index 764314fe..90a097d8 100644 --- a/www/prive/formulaires/login.html +++ b/www/prive/formulaires/login.html @@ -15,28 +15,28 @@ [(#ENV{editable}) [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE

        <:form_forum_identifiants:> [(#ENV*{_logo,''})] -
          - -
        • + +
          [ (#ENV**{erreurs}|table_valeur{password}) ]

          <:login_motpasseoublie:>

          -
        • + [(#ENV{rester_connecte}) -
        • +
          -
        • ] -
        + ] +

        @@ -46,11 +46,11 @@ (#ENV{auth_http}|form_hidden) ]
        - <:login_sans_cookiie:> + <:login_sans_cookie:> <:login_preferez_refuser:> [] -

        +

        ] diff --git a/www/prive/formulaires/login.php b/www/prive/formulaires/login.php index ef2d6c89..fc46336d 100644 --- a/www/prive/formulaires/login.php +++ b/www/prive/formulaires/login.php @@ -3,38 +3,79 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion du formulaire d'identification / de connexion à SPIP + * + * @package SPIP\Core\Formulaires + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('base/abstract_sql'); -function is_url_prive($cible){ +/** + * Teste si une URL est une URL de l'espace privé (administration de SPIP) + * ou de l'espace public + * + * @param string $cible URL + * @return bool + * true si espace privé, false sinon. + **/ +function is_url_prive($cible) { include_spip('inc/filtres_mini'); - $path = parse_url(tester_url_absolue($cible)?$cible:url_absolue($cible)); - $path = (isset($path['path'])?$path['path']:''); - return strncmp(substr($path,-strlen(_DIR_RESTREINT_ABS)), _DIR_RESTREINT_ABS, strlen(_DIR_RESTREINT_ABS))==0; + $path = parse_url(tester_url_absolue($cible) ? $cible : url_absolue($cible)); + $path = (isset($path['path']) ? $path['path'] : ''); + + return strncmp(substr($path, -strlen(_DIR_RESTREINT_ABS)), _DIR_RESTREINT_ABS, strlen(_DIR_RESTREINT_ABS)) == 0; } -function formulaires_login_charger_dist($cible="",$login="",$prive=null) -{ +/** + * Chargement du formulaire de login + * + * Si on est déjà connecté, on redirige directement sur l'URL cible ! + * + * @uses auth_informer_login() + * @uses is_url_prive() + * @uses login_auth_http() + * + * @param string $cible + * URL de destination après identification. + * Cas spécifique : la valeur `@page_auteur` permet d'être redirigé + * après connexion sur le squelette public de l'auteur qui se connecte. + * @param string $login + * Login de la personne à identifier (si connu) + * @param null|bool $prive + * Identifier pour l'espace privé (true), public (false) + * ou automatiquement (null) en fonction de la destination de l'URL cible. + * @return array + * Environnement du formulaire + **/ +function formulaires_login_charger_dist($cible = '', $login = '', $prive = null) { $erreur = _request('var_erreur'); - if (!$login) $login = strval(_request('var_login')); + if (!$login) { + $login = strval(_request('var_login')); + } // si on est deja identifie - if (!$login AND isset($GLOBALS['visiteur_session']['login'])) { + if (!$login and isset($GLOBALS['visiteur_session']['login'])) { $login = $GLOBALS['visiteur_session']['login']; } // ou si on a un cookie admin if (!$login) { if (isset($_COOKIE['spip_admin']) - AND preg_match(",^@(.*)$,", $_COOKIE['spip_admin'], $regs)) + and preg_match(',^@(.*)$,', $_COOKIE['spip_admin'], $regs) + ) { $login = $regs[1]; + } } include_spip('inc/auth'); @@ -43,43 +84,45 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null) // Construire l'environnement du squelette // Ne pas proposer de "rester connecte quelques jours" // si la duree de l'alea est inferieure a 12 h (valeur par defaut) - + $valeurs = array( 'var_login' => $login, 'editable' => !$row, - 'cnx' => isset($row['cnx']) ? $row['cnx'] : '', + 'cnx' => isset($row['cnx']) ? $row['cnx'] : '0', 'auth_http' => login_auth_http(), - 'rester_connecte' => ((_RENOUVELLE_ALEA < 12*3600)? '' : ' '), + 'rester_connecte' => ((_RENOUVELLE_ALEA < 12 * 3600) ? '' : ' '), '_logo' => isset($row['logo']) ? $row['logo'] : '', - '_alea_actuel' => isset($row['alea_actuel'])?$row['alea_actuel']:'', - '_alea_futur' => isset($row['alea_futur'])?$row['alea_futur']:'', + '_alea_actuel' => isset($row['alea_actuel']) ? $row['alea_actuel'] : '', + '_alea_futur' => isset($row['alea_futur']) ? $row['alea_futur'] : '', '_pipeline' => 'affiche_formulaire_login', // faire passer le formulaire dans un pipe dedie pour les methodes auth - ); + ); - if ($erreur OR !isset($GLOBALS['visiteur_session']['id_auteur']) OR !$GLOBALS['visiteur_session']['id_auteur']) + if ($erreur or !isset($GLOBALS['visiteur_session']['id_auteur']) or !$GLOBALS['visiteur_session']['id_auteur']) { $valeurs['editable'] = true; + } if (is_null($prive) ? is_url_prive($cible) : $prive) { include_spip('inc/autoriser'); $loge = autoriser('ecrire'); - } - else - $loge = (isset($GLOBALS['visiteur_session']['auth']) AND $GLOBALS['visiteur_session']['auth'] != ''); + } else { + $loge = (isset($GLOBALS['visiteur_session']['auth']) and $GLOBALS['visiteur_session']['auth'] != ''); + } // Si on est connecte, appeler traiter() // et lancer la redirection si besoin - if (!$valeurs['editable'] AND $loge) { - $traiter = charger_fonction('traiter','formulaires/login'); + if (!$valeurs['editable'] and $loge) { + $traiter = charger_fonction('traiter', 'formulaires/login'); $res = $traiter($cible, $login, $prive); - $valeurs = array_merge($valeurs,$res); + $valeurs = array_merge($valeurs, $res); - if (isset($res['redirect']) and $res['redirect']){ + if (isset($res['redirect']) and $res['redirect']) { include_spip('inc/headers'); # preparer un lien pour quand redirige_formulaire ne fonctionne pas $m = redirige_formulaire($res['redirect']); $valeurs['_deja_loge'] = inserer_attribut( - "" . _T('login_par_ici') . "$m", - 'href', $res['redirect'] + '' . _T('login_par_ici') . "$m", + 'href', + $res['redirect'] ); } } @@ -87,8 +130,9 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null) // pose de cookie ; s'il n'est pas la, c'est echec cookie // s'il est la, c'est probablement un bookmark sur bonjour=oui, // et pas un echec cookie. - if ($erreur == 'cookie') $valeurs['echec_cookie'] = ' '; - elseif ($erreur){ + if ($erreur == 'cookie') { + $valeurs['echec_cookie'] = ' '; + } elseif ($erreur) { // une erreur d'un SSO indique dans la redirection vers ici // mais il faut se proteger de toute tentative d'injection malveilante include_spip('inc/texte'); @@ -99,26 +143,55 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null) } -// Gerer le cas ou un utilisateur ne souhaite pas de cookie -// on propose alors un formulaire pour s'authentifier via http - -function login_auth_http() -{ +/** + * Identification via HTTP (si pas de cookie) + * + * Gére le cas où un utilisateur ne souhaite pas de cookie : + * on propose alors un formulaire pour s'authentifier via http + * + * @return string + * - Si connection possible en HTTP : URL pour réaliser cette identification, + * - chaîne vide sinon. + **/ +function login_auth_http() { if (!$GLOBALS['ignore_auth_http'] - AND _request('var_erreur')=='cookie' - AND (!isset($_COOKIE['spip_session']) OR $_COOKIE['spip_session'] != 'test_echec_cookie') - AND (($GLOBALS['flag_sapi_name'] AND preg_match(",apache,i", @php_sapi_name())) - OR preg_match(",^Apache.* PHP,", $_SERVER['SERVER_SOFTWARE'])) + and _request('var_erreur') == 'cookie' + and (!isset($_COOKIE['spip_session']) or $_COOKIE['spip_session'] != 'test_echec_cookie') + and (($GLOBALS['flag_sapi_name'] and preg_match(',apache,i', @php_sapi_name())) + or preg_match(',^Apache.* PHP,', $_SERVER['SERVER_SOFTWARE'])) // Attention dans le cas 'intranet' la proposition de se loger // par auth_http peut conduire a l'echec. - AND !(isset($_SERVER['PHP_AUTH_USER']) AND isset($_SERVER['PHP_AUTH_PW']))) - - return generer_url_action('cookie',"",false,true); - else return ''; + and !(isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])) + ) { + return generer_url_action('cookie', '', false, true); + } else { + return ''; + } } -function formulaires_login_verifier_dist($cible="",$login="",$prive=null){ - +/** + * Vérifications du formulaire de login + * + * Connecte la personne si l'identification réussie. + * + * @uses auth_identifier_login() + * @uses auth_loger() + * @uses login_autoriser() + * + * @param string $cible + * URL de destination après identification. + * Cas spécifique : la valeur `@page_auteur` permet d'être redirigé + * après connexion sur le squelette public de l'auteur qui se connecte. + * @param string $login + * Login de la personne à identifier (si connu) + * @param null|bool $prive + * Identifier pour l'espace privé (true), public (false) + * ou automatiquement (null) en fonction de la destination de l'URL cible. + * @return array + * Erreurs du formulaire + **/ +function formulaires_login_verifier_dist($cible = '', $login = '', $prive = null) { + $session_login = _request('var_login'); $session_password = _request('password'); $session_remember = _request('session_remember'); @@ -137,83 +210,123 @@ function formulaires_login_verifier_dist($cible="",$login="",$prive=null){ // on arrive ici si on ne s'est pas identifie avec un SSO if (!is_array($auteur)) { $erreurs = array(); - if (is_string($auteur)) + if (is_string($auteur) and strlen($auteur)) { $erreurs['var_login'] = $auteur; + } include_spip('inc/cookie'); - spip_setcookie("spip_admin", "", time() - 3600); - if (strlen($session_password)) + spip_setcookie('spip_admin', '', time() - 3600); + if (strlen($session_password)) { $erreurs['password'] = _T('login_erreur_pass'); - // sinon c'est un login en deux passe old style (ou js en panne) - // pas de message d'erreur - else + } else { + // sinon c'est un login en deux passe old style (ou js en panne) + // pas de message d'erreur $erreurs['password'] = ' '; + } + return $erreurs; } // on a ete authentifie, construire la session - // en gerant la duree demandee pour son cookie - if ($session_remember !== NULL) + // en gerant la duree demandee pour son cookie + if ($session_remember !== null) { $auteur['cookie'] = $session_remember; - auth_loger($auteur); + } + // si la connexion est refusee on renvoi un message erreur de mot de passe + // car en donnant plus de detail on renseignerait un assaillant sur l'existence d'un compte + if (auth_loger($auteur) === false) { + $erreurs['message_erreur'] = _T('login_erreur_pass'); + return $erreurs; + } return (is_null($prive) ? is_url_prive($cible) : $prive) - ? login_autoriser() : array(); + ? login_autoriser() : array(); } -function login_autoriser() -{ +/** + * Teste l'autorisation d'accéder à l'espace privé une fois une connexion + * réussie, si la cible est une URL privée. + * + * Dans le cas contraire, un message d'erreur est retourné avec un lien + * pour se déconnecter. + * + * @return array + * - Erreur si un connecté n'a pas le droit d'acceder à l'espace privé + * - tableau vide sinon. + **/ +function login_autoriser() { include_spip('inc/autoriser'); - if (!autoriser('ecrire')){ - $h = generer_url_action('logout','logout=prive&url='.urlencode(self())); - return array('message_erreur' => "

        " - ._T('avis_erreur_visiteur') - ."

        " - ._T('texte_erreur_visiteur') - ."

        [" - ._T('icone_deconnecter')."]

        "); + if (!autoriser('ecrire')) { + $h = generer_url_action('logout', 'logout=prive&url=' . urlencode(self())); + + return array( + 'message_erreur' => '

        ' + . _T('avis_erreur_visiteur') + . '

        ' + . _T('texte_erreur_visiteur') + . "

        [" + . _T('icone_deconnecter') . ']

        ' + ); } + return array(); } -function formulaires_login_traiter_dist($cible="",$login="",$prive=null){ +/** + * Traitements du formulaire de login + * + * On arrive ici une fois connecté. + * On redirige simplement sur l'URL cible désignée. + * + * @param string $cible + * URL de destination après identification. + * Cas spécifique : la valeur `@page_auteur` permet d'être redirigé + * après connexion sur le squelette public de l'auteur qui se connecte. + * @param string $login + * Login de la personne à identifier (si connu) + * @param null|bool $prive + * Identifier pour l'espace privé (true), public (false) + * ou automatiquement (null) en fonction de la destination de l'URL cible. + * @return array + * Retours du traitement + **/ +function formulaires_login_traiter_dist($cible = '', $login = '', $prive = null) { $res = array(); - // Si on se connecte dans l'espace prive, + // Si on se connecte dans l'espace prive, // ajouter "bonjour" (repere a peu pres les cookies desactives) if (is_null($prive) ? is_url_prive($cible) : $prive) { $cible = parametre_url($cible, 'bonjour', 'oui', '&'); } - if ($cible=='@page_auteur') - $cible = generer_url_entite($GLOBALS['auteur_session']['id_auteur'],'auteur'); + if ($cible == '@page_auteur') { + $cible = generer_url_entite($GLOBALS['auteur_session']['id_auteur'], 'auteur'); + } if ($cible) { $cible = parametre_url($cible, 'var_login', '', '&'); // transformer la cible absolue en cible relative // pour pas echouer quand la meta adresse_site est foireuse - if (strncmp($cible,$u = url_de_base(),strlen($u))==0){ - $cible = "./".substr($cible,strlen($u)); - } - - // si c'est une url absolue, refuser la redirection - // sauf si cette securite est levee volontairement par le webmestre - elseif (tester_url_absolue($cible) AND !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) { - $cible = ""; + if (strncmp($cible, $u = url_de_base(), strlen($u)) == 0) { + $cible = './' . substr($cible, strlen($u)); + } elseif (tester_url_absolue($cible) and !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) { + // si c'est une url absolue, refuser la redirection + // sauf si cette securite est levee volontairement par le webmestre + $cible = ''; } } // Si on est connecte, envoyer vers la destination - if ($cible AND ($cible!=self('&')) AND ($cible!=self())) { - if (!headers_sent() AND !$_GET['var_mode']) { + if ($cible and ($cible != self('&')) and ($cible != self())) { + if (!headers_sent() and !isset($_GET['var_mode'])) { include_spip('inc/headers'); $res['redirect'] = $cible; } else { $res['message_ok'] = inserer_attribut( - "" . _T('login_par_ici') . "", - 'href', $cible + '' . _T('login_par_ici') . '', + 'href', + $cible ); } } + return $res; } - -?> diff --git a/www/prive/formulaires/recherche_ecrire.php b/www/prive/formulaires/recherche_ecrire.php index 596dfc46..39885499 100644 --- a/www/prive/formulaires/recherche_ecrire.php +++ b/www/prive/formulaires/recherche_ecrire.php @@ -3,30 +3,49 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion du formulaire de recherche pour l'espace privé + * + * @package SPIP\Core\Formulaires + **/ -// chargement des valeurs par defaut des champs du formulaire -function formulaires_recherche_ecrire_charger_dist($action = '',$class=''){ - if ($GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site']) +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +/** + * Chargement des valeurs par defaut des champs du formulaire de recherche de l'espace privé + * + * Le formulaire dirige son action directement sur la page de l'action demandée. + * Il n'y a pas de vérification ni de traitement dans ce formulaire. + * + * @param string $action + * URL de la page exec qui reçoit la recherche. Par défaut l'URL de l'exec 'recherche'. + * @param string $class + * Classe CSS supplémentaire appliquée sur le formulaire + * @return array Environnement du formulaire + **/ +function formulaires_recherche_ecrire_charger_dist($action = '', $class = '') { + if ($GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site']) { $lang = $GLOBALS['spip_lang']; - else - $lang=''; + } else { + $lang = ''; + } - return + return array( - 'action' => ($action ? $action : generer_url_ecrire('recherche')), # action specifique, ne passe pas par Verifier, ni Traiter + 'action' => ($action ? $action : generer_url_ecrire('recherche')), + # action specifique, ne passe pas par Verifier, ni Traiter 'recherche' => _request('recherche'), 'lang' => $lang, 'class' => $class, - '_id_champ' => 'rechercher_'.substr(md5($action.$class),0,4), + '_id_champ' => 'rechercher_' . substr(md5($action . $class), 0, 4), ); } - -?> diff --git a/www/prive/formulaires/rediriger_article.html b/www/prive/formulaires/rediriger_article.html index f54a9b42..c0e22bf6 100644 --- a/www/prive/formulaires/rediriger_article.html +++ b/www/prive/formulaires/rediriger_article.html @@ -6,17 +6,18 @@
        [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} -
          + #ACTION_FORMULAIRE +
          #SET{name,redirection}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} -
        • +
          [ (#GET{erreurs}) - ] -

          <:texte_reference_mais_redirige:>

          -
        • -
        + ]

        <:texte_reference_mais_redirige:>

        + + +
        + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] diff --git a/www/prive/formulaires/rediriger_article.php b/www/prive/formulaires/rediriger_article.php index 29ede2c6..97727ac7 100644 --- a/www/prive/formulaires/rediriger_article.php +++ b/www/prive/formulaires/rediriger_article.php @@ -3,60 +3,72 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} -function formulaires_rediriger_article_charger_dist($id_article,$retour=''){ +function formulaires_rediriger_article_charger_dist($id_article, $retour = '') { include_spip('inc/autoriser'); - if (!autoriser('modifier', 'article', $id_article)) + if (!autoriser('modifier', 'article', $id_article)) { return false; + } - $row = sql_fetsel('id_article,virtuel','spip_articles','id_article='.intval($id_article)); - if (!$row['id_article']) + $row = sql_fetsel('id_article,virtuel', 'spip_articles', 'id_article=' . intval($id_article)); + if (!$row['id_article']) { return false; + } include_spip('inc/lien'); - $redirection = virtuel_redirige($row["virtuel"]); + $redirection = virtuel_redirige($row['virtuel']); if (!$redirection - AND $GLOBALS['meta']['articles_redirection'] != 'oui') + and $GLOBALS['meta']['articles_redirection'] != 'oui' + ) { return false; + } include_spip('inc/texte'); $valeurs = array( - 'redirection'=>$redirection, - 'id'=>$id_article, - '_afficher_url' => ($redirection?propre("[->$redirection]"):''), - ); + 'redirection' => $redirection, + 'id' => $id_article, + '_afficher_url' => ($redirection ? propre("[->$redirection]") : ''), + ); + return $valeurs; } -function formulaires_rediriger_article_verifier_dist($id_article,$retour=''){ +function formulaires_rediriger_article_verifier_dist($id_article, $retour = '') { $erreurs = array(); - if(($redirection = _request('redirection')) == $id_article || $redirection == 'art'.$id_article) + if (($redirection = _request('redirection')) == $id_article || $redirection == 'art' . $id_article) { $erreurs['redirection'] = _T('info_redirection_boucle'); + } return $erreurs; } -function formulaires_rediriger_article_traiter_dist($id_article,$retour=''){ +function formulaires_rediriger_article_traiter_dist($id_article, $retour = '') { - $url = preg_replace(",^\s*https?://$,i", "", rtrim(_request('redirection'))); - if ($url) $url = corriger_caracteres($url); + $url = preg_replace(',^\s*https?://$,i', '', rtrim(_request('redirection'))); + if ($url) { + $url = corriger_caracteres($url); + } include_spip('action/editer_article'); - articles_set($id_article, array('virtuel'=>$url)); + articles_set($id_article, array('virtuel' => $url)); - $js = _AJAX ? '':''; + $js = _AJAX ? '' : ''; - return array('message_ok'=>($url?_T('info_redirection_activee'):_T('info_redirection_desactivee')).$js,'editable'=>true); + return array( + 'message_ok' => ($url ? _T('info_redirection_activee') : _T('info_redirection_desactivee')) . $js, + 'editable' => true + ); } -?> diff --git a/www/prive/formulaires/selecteur/ajax.html b/www/prive/formulaires/selecteur/ajax.html index fee3a58c..5c48d673 100644 --- a/www/prive/formulaires/selecteur/ajax.html +++ b/www/prive/formulaires/selecteur/ajax.html @@ -21,7 +21,7 @@ [(#REM) et enfin le navigateur (et l'ajout rapide) ------]
        -
        +
        #GET{bouton_modif} @@ -33,13 +33,13 @@ url: '[(#URL_PAGE{ajax_selecteur})]', data: { objets:[(#ENV{objets/selectionner}|json_encode|sinon{\[\]}),] - ref: jQuery('#picker_rapide_#ENV{name}').attr('value') + ref: jQuery('#picker_rapide_#ENV{name}').val() }, success: function(r, statut, xhr){ if (r){ jQuery('#picker_rapide_#ENV{name}').item_pick(r.id,'#ENV{name,id_item}',r.titre,r.type); } - jQuery('#picker_rapide_#ENV{name}').attr('value',''); + jQuery('#picker_rapide_#ENV{name}').val(''); } }); return false; diff --git a/www/prive/formulaires/selecteur/ajax_fonctions.php b/www/prive/formulaires/selecteur/ajax_fonctions.php deleted file mode 100644 index 6d8bea31..00000000 --- a/www/prive/formulaires/selecteur/ajax_fonctions.php +++ /dev/null @@ -1,5 +0,0 @@ -var img_unpick='#CHEMIN_IMAGE{supprimer-12.png}'; -jQuery.getScript('#CHEMIN{formulaires/selecteur/jquery.picker.js}'); +jQuery.getScript('[(#CHEMIN{formulaires/selecteur/jquery.picker.js}|timestamp)]'); [(#REM) diff --git a/www/prive/formulaires/selecteur/articles_fonctions.php b/www/prive/formulaires/selecteur/articles_fonctions.php deleted file mode 100644 index 6d8bea31..00000000 --- a/www/prive/formulaires/selecteur/articles_fonctions.php +++ /dev/null @@ -1,5 +0,0 @@ -})] [(#REM) @@ -65,7 +65,7 @@ afficher la selection dans un ul class item_picked [(#ENV{sortable,'non'}|=={oui}|oui) diff --git a/www/prive/formulaires/selecteur/generique_fonctions.php b/www/prive/formulaires/selecteur/generique_fonctions.php index 7a3e79ca..750ad25c 100644 --- a/www/prive/formulaires/selecteur/generique_fonctions.php +++ b/www/prive/formulaires/selecteur/generique_fonctions.php @@ -1,185 +1,10 @@ $chemin){ - $objets_selectionner[] = preg_replace('/^hierarchie-([\w]+)[.]html$/', '$1', $fichier); - } - - // S'il y a une whitelist on ne garde que ce qui est dedans - if (!empty($whitelist)){ - $whitelist = array_map('table_objet', $whitelist); - $objets_selectionner = array_intersect($objets_selectionner, $whitelist); - } - // On supprime ce qui est dans la blacklist - $blacklist = array_map('table_objet', $blacklist); - // On enlève toujours la racine - $blacklist[] = 'racine'; - $objets_selectionner = array_diff($objets_selectionner, $blacklist); - - // Ensuite on cherche ce qu'on doit afficher : au moins ceux qu'on peut sélectionner - $objets_afficher = $objets_selectionner; - - // Il faut alors chercher d'éventuels parents obligatoires en plus : - // lister-trucs-bidules.html => on doit afficher des "trucs" pour trouver des "bidules" - if (!$liste_parents){ - $liste_parents = find_all_in_path('formulaires/selecteur/', 'lister-[\w]+-[\w]+[.]html$'); - } - foreach ($liste_parents as $fichier=>$chemin){ - preg_match('/^lister-([\w]+)-([\w]+)[.]html$/', $fichier, $captures); - $parent = $captures[1]; - $type = $captures[2]; - // Si le type fait partie de ce qu'on doit afficher alors on ajoute aussi le parent à l'affichage - if (in_array($type, $objets_afficher)){ - $objets_afficher[] = $parent; - } - } - - $objets = array( - 'selectionner' => array_unique($objets_selectionner), - 'afficher' => array_unique($objets_afficher), - ); - - return $objets; -} - -/** - * Transformer un tableau d'entrees array("rubrique|9","article|8",...) - * en un tableau contenant uniquement les identifiants d'un type donne. - * Accepte aussi que les valeurs d'entrees soient une chaine brute - * "rubrique|9,article|8,..." - * - * @param array/string $selected liste des entrees : tableau ou chaine separee par des virgules - * @param string $type type de valeur a recuperer ('rubrique', 'article') - * - * @return array liste des identifiants trouves. -**/ -function picker_selected($selected, $type=''){ - $select = array(); - $type = preg_replace(',\W,','',$type); - - if ($selected and !is_array($selected)) - $selected = explode(',', $selected); - - if (is_array($selected)) - foreach($selected as $value){ - // Si c'est le bon format déjà - if (preg_match('/^([\w]+)[|]([0-9]+)$/', $value, $captures)){ - $objet = $captures[1]; - $id_objet = intval($captures[2]); - - // Si on cherche un type et que c'est le bon, on renvoit un tableau que d'identifiants - if (is_string($type) AND $type == $objet AND ($id_objet OR in_array($objet, array('racine', 'rubrique')))){ - $select[] = $id_objet; - } - elseif(!$type AND ($id_objet OR in_array($objet, array('racine', 'rubrique')))){ - $select[] = array('objet' => $objet, 'id_objet' => $id_objet); - } - } - } - return $select; -} - -/* - * Récupère des informations sur un objet pour pouvoir l'ajouter aux éléments sélectionnés - * - * @param string $ref Référence de l'objet à chercher, de la forme "type|id", par exemple "rubrique|123". - * @param mixed $rubriques_ou_objets Soit un booléen (pouvant être une chaîne vide aussi) indiquant que les rubriques sont sélectionnables soit un tableau complet des objets sélectionnables. - * @param bool $articles Booléen indiquant si les articles sont sélectionnables - */ -function picker_identifie_id_rapide($ref, $rubriques_ou_objets=false, $articles=false){ - include_spip('inc/json'); - include_spip('inc/lien'); - - // On construit un tableau des objets sélectionnables suivant les paramètres - $objets = array(); - if ($rubriques_ou_objets and is_array($rubriques_ou_objets)){ - $objets = $rubriques_ou_objets; - } - else{ - if ($rubriques_ou_objets){ $objets[] = 'rubriques'; } - if ($articles){ $objets[] = 'articles'; } - } - - // Si la référence ne correspond à rien, c'est fini - if (!($match = typer_raccourci($ref))){ - return json_export(false); - } - // Sinon on récupère les infos utiles - @list($type,,$id,,,,) = $match; - - // On regarde si le type trouvé fait partie des objets sélectionnables - if (!in_array(table_objet($type), $objets)){ - return json_export(false); - } - - // Maintenant que tout est bon, on cherche les informations sur cet objet - include_spip('inc/filtres'); - if (!$titre = generer_info_entite($id, $type, 'titre')){ - return json_export(false); - } - - // On simplifie le texte - $titre = attribut_html($titre); - - return json_export(array('type' => $type, 'id' => "$type|$id", 'titre' => $titre)); -} - /** - * Determiner si une rubrique a des enfants a afficher ou non - * on test d'abord si la rubrique a des sous rubriques, et sinon on regarde les autrs types selectionnables - * et on regarde la rubrique contient certains de ces objets - * - * Pour optimiser, la fonction calcule sa valeur sur toute la fratrie d'un coup, puisqu'elle est appellee N fois - * pour toutes les rubriques d'un meme niveau - * - * @param $id_rubrique - * @param array $types - * @return string + * Ce fichier n'est la que pour eviter une rupture de compat depuis spip 3.0 pour les plugins */ -function test_enfants_rubrique($id_rubrique,$types=array()){ - static $has_child = array(); - if (!isset($has_child[$id_rubrique])){ - $types = (is_array($types)?array_filter($types):array()); - // recuperer tous les freres et soeurs de la rubrique visee - $id_parent = sql_getfetsel('id_parent','spip_rubriques','id_rubrique='.intval($id_rubrique)); - $fratrie = sql_allfetsel('id_rubrique','spip_rubriques','id_parent='.intval($id_parent)); - $fratrie = array_map('reset',$fratrie); - $has = sql_allfetsel("DISTINCT id_parent","spip_rubriques",sql_in('id_parent',$fratrie)); - $has = array_map('reset',$has); - $fratrie = array_diff($fratrie,$has); - while (count($fratrie) AND is_array($types) AND count($types)){ - $type = array_shift($types); - $h = sql_allfetsel("DISTINCT id_rubrique",table_objet_sql($type),sql_in('id_rubrique',$fratrie)); - $h = array_map('reset',$h); - $has = array_merge($has,$h); - $fratrie = array_diff($fratrie,$h); - } - if (count($has)) - $has_child = $has_child + array_combine($has,array_pad(array(),count($has),true)); - if (count($fratrie)) - $has_child = $has_child + array_combine($fratrie,array_pad(array(),count($fratrie),false)); - } - return $has_child[$id_rubrique]?' ':''; +if (!defined('_ECRIRE_INC_VERSION')) { + return; } -?> +include_spip('inc/filtres_selecteur_generique'); diff --git a/www/prive/formulaires/selecteur/hierarchie-articles.html b/www/prive/formulaires/selecteur/hierarchie-articles.html index e8fb2a94..a9b67a5e 100644 --- a/www/prive/formulaires/selecteur/hierarchie-articles.html +++ b/www/prive/formulaires/selecteur/hierarchie-articles.html @@ -1,7 +1,7 @@
        [(#ENV{forcer_racine_objet}|=={rubrique}|et{#ENV{forcer_racine_id_objet}|>{0}}|non)[(#ENV{label_racine,<:info_racine_site:>})] - > ]#TITRE + > ]#TITRE >

        #TITRE

        diff --git a/www/prive/formulaires/selecteur/hierarchie-rubriques.html b/www/prive/formulaires/selecteur/hierarchie-rubriques.html index f0996910..24ba656b 100644 --- a/www/prive/formulaires/selecteur/hierarchie-rubriques.html +++ b/www/prive/formulaires/selecteur/hierarchie-rubriques.html @@ -1,7 +1,7 @@
        [(#ENV{forcer_racine_objet}|=={rubrique}|et{#ENV{forcer_racine_id_objet}|>{0}}|non)<:info_racine_site:> - > ]#TITRE + > ]#TITRE >

        #TITRE

        diff --git a/www/prive/formulaires/selecteur/inc-nav-articles.html b/www/prive/formulaires/selecteur/inc-nav-articles.html index 52947f8f..8977efea 100644 --- a/www/prive/formulaires/selecteur/inc-nav-articles.html +++ b/www/prive/formulaires/selecteur/inc-nav-articles.html @@ -1,6 +1,6 @@ #SET{p,pa_#ID_RUBRIQUE} [

        (#PAGINATION{prive})

        ] - +
        diff --git a/www/prive/formulaires/selecteur/inc-nav-rubriques_fonctions.php b/www/prive/formulaires/selecteur/inc-nav-rubriques_fonctions.php deleted file mode 100644 index dbdaeb44..00000000 --- a/www/prive/formulaires/selecteur/inc-nav-rubriques_fonctions.php +++ /dev/null @@ -1,5 +0,0 @@ -
        - value = parseInt( elem.css( "zIndex" ), 10 ); - if ( !isNaN( value ) && value !== 0 ) { - return value; - } - } - elem = elem.parent(); - } - } - - return 0; - }, - - disableSelection: function() { - return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + - ".ui-disableSelection", function( event ) { - event.preventDefault(); - }); - }, - - enableSelection: function() { - return this.unbind( ".ui-disableSelection" ); - } -}); - -$.each( [ "Width", "Height" ], function( i, name ) { - var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], - type = name.toLowerCase(), - orig = { - innerWidth: $.fn.innerWidth, - innerHeight: $.fn.innerHeight, - outerWidth: $.fn.outerWidth, - outerHeight: $.fn.outerHeight - }; - - function reduce( elem, size, border, margin ) { - $.each( side, function() { - size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0; - if ( border ) { - size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0; - } - if ( margin ) { - size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0; - } - }); - return size; - } - - $.fn[ "inner" + name ] = function( size ) { - if ( size === undefined ) { - return orig[ "inner" + name ].call( this ); - } - - return this.each(function() { - $( this ).css( type, reduce( this, size ) + "px" ); - }); - }; - - $.fn[ "outer" + name] = function( size, margin ) { - if ( typeof size !== "number" ) { - return orig[ "outer" + name ].call( this, size ); - } - - return this.each(function() { - $( this).css( type, reduce( this, size, true, margin ) + "px" ); - }); - }; -}); - -// selectors -function focusable( element, isTabIndexNotNaN ) { - var nodeName = element.nodeName.toLowerCase(); - if ( "area" === nodeName ) { - var map = element.parentNode, - mapName = map.name, - img; - if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { - return false; - } - img = $( "img[usemap=#" + mapName + "]" )[0]; - return !!img && visible( img ); - } - return ( /input|select|textarea|button|object/.test( nodeName ) - ? !element.disabled - : "a" == nodeName - ? element.href || isTabIndexNotNaN - : isTabIndexNotNaN) - // the element and all of its ancestors must be visible - && visible( element ); -} - -function visible( element ) { - return !$( element ).parents().andSelf().filter(function() { - return $.curCSS( this, "visibility" ) === "hidden" || - $.expr.filters.hidden( this ); - }).length; -} - -$.extend( $.expr[ ":" ], { - data: function( elem, i, match ) { - return !!$.data( elem, match[ 3 ] ); - }, - - focusable: function( element ) { - return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); - }, - - tabbable: function( element ) { - var tabIndex = $.attr( element, "tabindex" ), - isTabIndexNaN = isNaN( tabIndex ); - return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); - } -}); - -// support -$(function() { - var body = document.body, - div = body.appendChild( div = document.createElement( "div" ) ); - - // access offsetHeight before setting the style to prevent a layout bug - // in IE 9 which causes the elemnt to continue to take up space even - // after it is removed from the DOM (#8026) - div.offsetHeight; - - $.extend( div.style, { - minHeight: "100px", - height: "auto", - padding: 0, - borderWidth: 0 - }); - - $.support.minHeight = div.offsetHeight === 100; - $.support.selectstart = "onselectstart" in div; - - // set display to none to avoid a layout bug in IE - // http://dev.jquery.com/ticket/4014 - body.removeChild( div ).style.display = "none"; -}); - - - - - -// deprecated -$.extend( $.ui, { - // $.ui.plugin is deprecated. Use the proxy pattern instead. - plugin: { - add: function( module, option, set ) { - var proto = $.ui[ module ].prototype; - for ( var i in set ) { - proto.plugins[ i ] = proto.plugins[ i ] || []; - proto.plugins[ i ].push( [ option, set[ i ] ] ); - } - }, - call: function( instance, name, args ) { - var set = instance.plugins[ name ]; - if ( !set || !instance.element[ 0 ].parentNode ) { - return; - } - - for ( var i = 0; i < set.length; i++ ) { - if ( instance.options[ set[ i ][ 0 ] ] ) { - set[ i ][ 1 ].apply( instance.element, args ); - } - } - } - }, - - // will be deprecated when we switch to jQuery 1.4 - use jQuery.contains() - contains: function( a, b ) { - return document.compareDocumentPosition ? - a.compareDocumentPosition( b ) & 16 : - a !== b && a.contains( b ); - }, - - // only used by resizable - hasScroll: function( el, a ) { - - //If overflow is hidden, the element might have extra content, but the user wants to hide it - if ( $( el ).css( "overflow" ) === "hidden") { - return false; - } - - var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", - has = false; - - if ( el[ scroll ] > 0 ) { - return true; - } - - // TODO: determine which cases actually cause this to happen - // if the element doesn't have the scroll set, see if it's possible to - // set the scroll - el[ scroll ] = 1; - has = ( el[ scroll ] > 0 ); - el[ scroll ] = 0; - return has; - }, - - // these are odd functions, fix the API or move into individual plugins - isOverAxis: function( x, reference, size ) { - //Determines when x coordinate is over "b" element axis - return ( x > reference ) && ( x < ( reference + size ) ); - }, - isOver: function( y, x, top, left, height, width ) { - //Determines when x, y coordinates is over "b" element - return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width ); - } -}); - -})( jQuery ); -/*! - * jQuery UI Widget 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function( $, undefined ) { - -// jQuery 1.4+ -if ( $.cleanData ) { - var _cleanData = $.cleanData; - $.cleanData = function( elems ) { - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { - try { - $( elem ).triggerHandler( "remove" ); - // http://bugs.jquery.com/ticket/8235 - } catch( e ) {} - } - _cleanData( elems ); - }; -} else { - var _remove = $.fn.remove; - $.fn.remove = function( selector, keepData ) { - return this.each(function() { - if ( !keepData ) { - if ( !selector || $.filter( selector, [ this ] ).length ) { - $( "*", this ).add( [ this ] ).each(function() { - try { - $( this ).triggerHandler( "remove" ); - // http://bugs.jquery.com/ticket/8235 - } catch( e ) {} - }); - } - } - return _remove.call( $(this), selector, keepData ); - }); - }; -} - -$.widget = function( name, base, prototype ) { - var namespace = name.split( "." )[ 0 ], - fullName; - name = name.split( "." )[ 1 ]; - fullName = namespace + "-" + name; - - if ( !prototype ) { - prototype = base; - base = $.Widget; - } - - // create selector for plugin - $.expr[ ":" ][ fullName ] = function( elem ) { - return !!$.data( elem, name ); - }; - - $[ namespace ] = $[ namespace ] || {}; - $[ namespace ][ name ] = function( options, element ) { - // allow instantiation without initializing for simple inheritance - if ( arguments.length ) { - this._createWidget( options, element ); - } - }; - - var basePrototype = new base(); - // we need to make the options hash a property directly on the new instance - // otherwise we'll modify the options hash on the prototype that we're - // inheriting from -// $.each( basePrototype, function( key, val ) { -// if ( $.isPlainObject(val) ) { -// basePrototype[ key ] = $.extend( {}, val ); -// } -// }); - basePrototype.options = $.extend( true, {}, basePrototype.options ); - $[ namespace ][ name ].prototype = $.extend( true, basePrototype, { - namespace: namespace, - widgetName: name, - widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name, - widgetBaseClass: fullName - }, prototype ); - - $.widget.bridge( name, $[ namespace ][ name ] ); -}; - -$.widget.bridge = function( name, object ) { - $.fn[ name ] = function( options ) { - var isMethodCall = typeof options === "string", - args = Array.prototype.slice.call( arguments, 1 ), - returnValue = this; - - // allow multiple hashes to be passed on init - options = !isMethodCall && args.length ? - $.extend.apply( null, [ true, options ].concat(args) ) : - options; - - // prevent calls to internal methods - if ( isMethodCall && options.charAt( 0 ) === "_" ) { - return returnValue; - } - - if ( isMethodCall ) { - this.each(function() { - var instance = $.data( this, name ), - methodValue = instance && $.isFunction( instance[options] ) ? - instance[ options ].apply( instance, args ) : - instance; - // TODO: add this back in 1.9 and use $.error() (see #5972) -// if ( !instance ) { -// throw "cannot call methods on " + name + " prior to initialization; " + -// "attempted to call method '" + options + "'"; -// } -// if ( !$.isFunction( instance[options] ) ) { -// throw "no such method '" + options + "' for " + name + " widget instance"; -// } -// var methodValue = instance[ options ].apply( instance, args ); - if ( methodValue !== instance && methodValue !== undefined ) { - returnValue = methodValue; - return false; - } - }); - } else { - this.each(function() { - var instance = $.data( this, name ); - if ( instance ) { - instance.option( options || {} )._init(); - } else { - $.data( this, name, new object( options, this ) ); - } - }); - } - - return returnValue; - }; -}; - -$.Widget = function( options, element ) { - // allow instantiation without initializing for simple inheritance - if ( arguments.length ) { - this._createWidget( options, element ); - } -}; - -$.Widget.prototype = { - widgetName: "widget", - widgetEventPrefix: "", - options: { - disabled: false - }, - _createWidget: function( options, element ) { - // $.widget.bridge stores the plugin instance, but we do it anyway - // so that it's stored even before the _create function runs - $.data( element, this.widgetName, this ); - this.element = $( element ); - this.options = $.extend( true, {}, - this.options, - this._getCreateOptions(), - options ); - - var self = this; - this.element.bind( "remove." + this.widgetName, function() { - self.destroy(); - }); - - this._create(); - this._trigger( "create" ); - this._init(); - }, - _getCreateOptions: function() { - return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ]; - }, - _create: function() {}, - _init: function() {}, - - destroy: function() { - this.element - .unbind( "." + this.widgetName ) - .removeData( this.widgetName ); - this.widget() - .unbind( "." + this.widgetName ) - .removeAttr( "aria-disabled" ) - .removeClass( - this.widgetBaseClass + "-disabled " + - "ui-state-disabled" ); - }, - - widget: function() { - return this.element; - }, - - option: function( key, value ) { - var options = key; - - if ( arguments.length === 0 ) { - // don't return a reference to the internal hash - return $.extend( {}, this.options ); - } - - if (typeof key === "string" ) { - if ( value === undefined ) { - return this.options[ key ]; - } - options = {}; - options[ key ] = value; - } - - this._setOptions( options ); - - return this; - }, - _setOptions: function( options ) { - var self = this; - $.each( options, function( key, value ) { - self._setOption( key, value ); - }); - - return this; - }, - _setOption: function( key, value ) { - this.options[ key ] = value; - - if ( key === "disabled" ) { - this.widget() - [ value ? "addClass" : "removeClass"]( - this.widgetBaseClass + "-disabled" + " " + - "ui-state-disabled" ) - .attr( "aria-disabled", value ); - } - - return this; - }, - - enable: function() { - return this._setOption( "disabled", false ); - }, - disable: function() { - return this._setOption( "disabled", true ); - }, - - _trigger: function( type, event, data ) { - var prop, orig, - callback = this.options[ type ]; - - data = data || {}; - event = $.Event( event ); - event.type = ( type === this.widgetEventPrefix ? - type : - this.widgetEventPrefix + type ).toLowerCase(); - // the original event may come from any element - // so we need to reset the target on the new event - event.target = this.element[ 0 ]; - - // copy original event properties over to the new event - orig = event.originalEvent; - if ( orig ) { - for ( prop in orig ) { - if ( !( prop in event ) ) { - event[ prop ] = orig[ prop ]; - } - } - } - - this.element.trigger( event, data ); - - return !( $.isFunction(callback) && - callback.call( this.element[0], event, data ) === false || - event.isDefaultPrevented() ); - } -}; - -})( jQuery ); -/*! - * jQuery UI Mouse 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -var mouseHandled = false; -$( document ).mouseup( function( e ) { - mouseHandled = false; -}); - -$.widget("ui.mouse", { - options: { - cancel: ':input,option', - distance: 1, - delay: 0 - }, - _mouseInit: function() { - var self = this; - - this.element - .bind('mousedown.'+this.widgetName, function(event) { - return self._mouseDown(event); - }) - .bind('click.'+this.widgetName, function(event) { - if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) { - $.removeData(event.target, self.widgetName + '.preventClickEvent'); - event.stopImmediatePropagation(); - return false; - } - }); - - this.started = false; - }, - - // TODO: make sure destroying one instance of mouse doesn't mess with - // other instances of mouse - _mouseDestroy: function() { - this.element.unbind('.'+this.widgetName); - $(document) - .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); - }, - - _mouseDown: function(event) { - // don't let more than one widget handle mouseStart - if( mouseHandled ) { return }; - - // we may have missed mouseup (out of window) - (this._mouseStarted && this._mouseUp(event)); - - this._mouseDownEvent = event; - - var self = this, - btnIsLeft = (event.which == 1), - // event.target.nodeName works around a bug in IE 8 with - // disabled inputs (#7620) - elIsCancel = (typeof this.options.cancel == "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); - if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { - return true; - } - - this.mouseDelayMet = !this.options.delay; - if (!this.mouseDelayMet) { - this._mouseDelayTimer = setTimeout(function() { - self.mouseDelayMet = true; - }, this.options.delay); - } - - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = (this._mouseStart(event) !== false); - if (!this._mouseStarted) { - event.preventDefault(); - return true; - } - } - - // Click event may never have fired (Gecko & Opera) - if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) { - $.removeData(event.target, this.widgetName + '.preventClickEvent'); - } - - // these delegates are required to keep context - this._mouseMoveDelegate = function(event) { - return self._mouseMove(event); - }; - this._mouseUpDelegate = function(event) { - return self._mouseUp(event); - }; - $(document) - .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .bind('mouseup.'+this.widgetName, this._mouseUpDelegate); - - event.preventDefault(); - - mouseHandled = true; - return true; - }, - - _mouseMove: function(event) { - // IE mouseup check - mouseup happened when mouse was out of window - if ($.browser.msie && !(document.documentMode >= 9) && !event.button) { - return this._mouseUp(event); - } - - if (this._mouseStarted) { - this._mouseDrag(event); - return event.preventDefault(); - } - - if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { - this._mouseStarted = - (this._mouseStart(this._mouseDownEvent, event) !== false); - (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); - } - - return !this._mouseStarted; - }, - - _mouseUp: function(event) { - $(document) - .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) - .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); - - if (this._mouseStarted) { - this._mouseStarted = false; - - if (event.target == this._mouseDownEvent.target) { - $.data(event.target, this.widgetName + '.preventClickEvent', true); - } - - this._mouseStop(event); - } - - return false; - }, - - _mouseDistanceMet: function(event) { - return (Math.max( - Math.abs(this._mouseDownEvent.pageX - event.pageX), - Math.abs(this._mouseDownEvent.pageY - event.pageY) - ) >= this.options.distance - ); - }, - - _mouseDelayMet: function(event) { - return this.mouseDelayMet; - }, - - // These are placeholder methods, to be overriden by extending plugin - _mouseStart: function(event) {}, - _mouseDrag: function(event) {}, - _mouseStop: function(event) {}, - _mouseCapture: function(event) { return true; } -}); - -})(jQuery); -/*! - * jQuery UI Draggable 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Draggables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -$.widget("ui.draggable", $.ui.mouse, { - widgetEventPrefix: "drag", - options: { - addClasses: true, - appendTo: "parent", - axis: false, - connectToSortable: false, - containment: false, - cursor: "auto", - cursorAt: false, - grid: false, - handle: false, - helper: "original", - iframeFix: false, - opacity: false, - refreshPositions: false, - revert: false, - revertDuration: 500, - scope: "default", - scroll: true, - scrollSensitivity: 20, - scrollSpeed: 20, - snap: false, - snapMode: "both", - snapTolerance: 20, - stack: false, - zIndex: false - }, - _create: function() { - - if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position"))) - this.element[0].style.position = 'relative'; - - (this.options.addClasses && this.element.addClass("ui-draggable")); - (this.options.disabled && this.element.addClass("ui-draggable-disabled")); - - this._mouseInit(); - - }, - - destroy: function() { - if(!this.element.data('draggable')) return; - this.element - .removeData("draggable") - .unbind(".draggable") - .removeClass("ui-draggable" - + " ui-draggable-dragging" - + " ui-draggable-disabled"); - this._mouseDestroy(); - - return this; - }, - - _mouseCapture: function(event) { - - var o = this.options; - - // among others, prevent a drag on a resizable-handle - if (this.helper || o.disabled || $(event.target).is('.ui-resizable-handle')) - return false; - - //Quit if we're not on a valid handle - this.handle = this._getHandle(event); - if (!this.handle) - return false; - - if ( o.iframeFix ) { - $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() { - $('
        ') - .css({ - width: this.offsetWidth+"px", height: this.offsetHeight+"px", - position: "absolute", opacity: "0.001", zIndex: 1000 - }) - .css($(this).offset()) - .appendTo("body"); - }); - } - - return true; - - }, - - _mouseStart: function(event) { - - var o = this.options; - - //Create and append the visible helper - this.helper = this._createHelper(event); - - this.helper.addClass("ui-draggable-dragging"); - - //Cache the helper size - this._cacheHelperProportions(); - - //If ddmanager is used for droppables, set the global draggable - if($.ui.ddmanager) - $.ui.ddmanager.current = this; - - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ - - //Cache the margins of the original element - this._cacheMargins(); - - //Store the helper's css position - this.cssPosition = this.helper.css("position"); - this.scrollParent = this.helper.scrollParent(); - - //The element's absolute position on the page minus margins - this.offset = this.positionAbs = this.element.offset(); - this.offset = { - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - - $.extend(this.offset, { - click: { //Where the click happened, relative to the element - left: event.pageX - this.offset.left, - top: event.pageY - this.offset.top - }, - parent: this._getParentOffset(), - relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper - }); - - //Generate the original position - this.originalPosition = this.position = this._generatePosition(event); - this.originalPageX = event.pageX; - this.originalPageY = event.pageY; - - //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied - (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); - - //Set a containment if given in the options - if(o.containment) - this._setContainment(); - - //Trigger event + callbacks - if(this._trigger("start", event) === false) { - this._clear(); - return false; - } - - //Recache the helper size - this._cacheHelperProportions(); - - //Prepare the droppable offsets - if ($.ui.ddmanager && !o.dropBehaviour) - $.ui.ddmanager.prepareOffsets(this, event); - - - this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position - - //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003) - if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event); - - return true; - }, - - _mouseDrag: function(event, noPropagation) { - - //Compute the helpers position - this.position = this._generatePosition(event); - this.positionAbs = this._convertPositionTo("absolute"); - - //Call plugins and callbacks and use the resulting position if something is returned - if (!noPropagation) { - var ui = this._uiHash(); - if(this._trigger('drag', event, ui) === false) { - this._mouseUp({}); - return false; - } - this.position = ui.position; - } - - if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; - if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; - if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); - - return false; - }, - - _mouseStop: function(event) { - - //If we are using droppables, inform the manager about the drop - var dropped = false; - if ($.ui.ddmanager && !this.options.dropBehaviour) - dropped = $.ui.ddmanager.drop(this, event); - - //if a drop comes from outside (a sortable) - if(this.dropped) { - dropped = this.dropped; - this.dropped = false; - } - - //if the original element is no longer in the DOM don't bother to continue (see #8269) - var element = this.element[0], elementInDom = false; - while ( element && (element = element.parentNode) ) { - if (element == document ) { - elementInDom = true; - } - } - if ( !elementInDom && this.options.helper === "original" ) - return false; - - if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) { - var self = this; - $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() { - if(self._trigger("stop", event) !== false) { - self._clear(); - } - }); - } else { - if(this._trigger("stop", event) !== false) { - this._clear(); - } - } - - return false; - }, - - _mouseUp: function(event) { - if (this.options.iframeFix === true) { - $("div.ui-draggable-iframeFix").each(function() { - this.parentNode.removeChild(this); - }); //Remove frame helpers - } - - //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003) - if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event); - - return $.ui.mouse.prototype._mouseUp.call(this, event); - }, - - cancel: function() { - - if(this.helper.is(".ui-draggable-dragging")) { - this._mouseUp({}); - } else { - this._clear(); - } - - return this; - - }, - - _getHandle: function(event) { - - var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false; - $(this.options.handle, this.element) - .find("*") - .andSelf() - .each(function() { - if(this == event.target) handle = true; - }); - - return handle; - - }, - - _createHelper: function(event) { - - var o = this.options; - var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element); - - if(!helper.parents('body').length) - helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo)); - - if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) - helper.css("position", "absolute"); - - return helper; - - }, - - _adjustOffsetFromHelper: function(obj) { - if (typeof obj == 'string') { - obj = obj.split(' '); - } - if ($.isArray(obj)) { - obj = {left: +obj[0], top: +obj[1] || 0}; - } - if ('left' in obj) { - this.offset.click.left = obj.left + this.margins.left; - } - if ('right' in obj) { - this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; - } - if ('top' in obj) { - this.offset.click.top = obj.top + this.margins.top; - } - if ('bottom' in obj) { - this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; - } - }, - - _getParentOffset: function() { - - //Get the offsetParent and cache its position - this.offsetParent = this.helper.offsetParent(); - var po = this.offsetParent.offset(); - - // This is a special case where we need to modify a offset calculated on start, since the following happened: - // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent - // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that - // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag - if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { - po.left += this.scrollParent.scrollLeft(); - po.top += this.scrollParent.scrollTop(); - } - - if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information - || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix - po = { top: 0, left: 0 }; - - return { - top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), - left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) - }; - - }, - - _getRelativeOffset: function() { - - if(this.cssPosition == "relative") { - var p = this.element.position(); - return { - top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), - left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() - }; - } else { - return { top: 0, left: 0 }; - } - - }, - - _cacheMargins: function() { - this.margins = { - left: (parseInt(this.element.css("marginLeft"),10) || 0), - top: (parseInt(this.element.css("marginTop"),10) || 0), - right: (parseInt(this.element.css("marginRight"),10) || 0), - bottom: (parseInt(this.element.css("marginBottom"),10) || 0) - }; - }, - - _cacheHelperProportions: function() { - this.helperProportions = { - width: this.helper.outerWidth(), - height: this.helper.outerHeight() - }; - }, - - _setContainment: function() { - - var o = this.options; - if(o.containment == 'parent') o.containment = this.helper[0].parentNode; - if(o.containment == 'document' || o.containment == 'window') this.containment = [ - o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, - o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, - (o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, - (o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top - ]; - - if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) { - var c = $(o.containment); - var ce = c[0]; if(!ce) return; - var co = c.offset(); - var over = ($(ce).css("overflow") != 'hidden'); - - this.containment = [ - (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0), - (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0), - (over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, - (over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom - ]; - this.relative_container = c; - - } else if(o.containment.constructor == Array) { - this.containment = o.containment; - } - - }, - - _convertPositionTo: function(d, pos) { - - if(!pos) pos = this.position; - var mod = d == "absolute" ? 1 : -1; - var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - - return { - top: ( - pos.top // The absolute mouse position - + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) - - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) - ), - left: ( - pos.left // The absolute mouse position - + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) - - ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) - ) - }; - - }, - - _generatePosition: function(event) { - - var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - var pageX = event.pageX; - var pageY = event.pageY; - - /* - * - Position constraining - - * Constrain the position to a mix of grid, containment. - */ - - if(this.originalPosition) { //If we are not dragging yet, we won't check for options - var containment; - if(this.containment) { - if (this.relative_container){ - var co = this.relative_container.offset(); - containment = [ this.containment[0] + co.left, - this.containment[1] + co.top, - this.containment[2] + co.left, - this.containment[3] + co.top ]; - } - else { - containment = this.containment; - } - - if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left; - if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top; - if(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left; - if(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top; - } - - if(o.grid) { - //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950) - var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY; - pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; - - var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX; - pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; - } - - } - - return { - top: ( - pageY // The absolute mouse position - - this.offset.click.top // Click offset (relative to the element) - - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.top // The offsetParent's offset without borders (offset + border) - + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) - ), - left: ( - pageX // The absolute mouse position - - this.offset.click.left // Click offset (relative to the element) - - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.left // The offsetParent's offset without borders (offset + border) - + ($.browser.safari && $.browser.version < 526 && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) - ) - }; - - }, - - _clear: function() { - this.helper.removeClass("ui-draggable-dragging"); - if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove(); - //if($.ui.ddmanager) $.ui.ddmanager.current = null; - this.helper = null; - this.cancelHelperRemoval = false; - }, - - // From now on bulk stuff - mainly helpers - - _trigger: function(type, event, ui) { - ui = ui || this._uiHash(); - $.ui.plugin.call(this, type, [event, ui]); - if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins - return $.Widget.prototype._trigger.call(this, type, event, ui); - }, - - plugins: {}, - - _uiHash: function(event) { - return { - helper: this.helper, - position: this.position, - originalPosition: this.originalPosition, - offset: this.positionAbs - }; - } - -}); - -$.extend($.ui.draggable, { - version: "1.8.21" -}); - -$.ui.plugin.add("draggable", "connectToSortable", { - start: function(event, ui) { - - var inst = $(this).data("draggable"), o = inst.options, - uiSortable = $.extend({}, ui, { item: inst.element }); - inst.sortables = []; - $(o.connectToSortable).each(function() { - var sortable = $.data(this, 'sortable'); - if (sortable && !sortable.options.disabled) { - inst.sortables.push({ - instance: sortable, - shouldRevert: sortable.options.revert - }); - sortable.refreshPositions(); // Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page). - sortable._trigger("activate", event, uiSortable); - } - }); - - }, - stop: function(event, ui) { - - //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper - var inst = $(this).data("draggable"), - uiSortable = $.extend({}, ui, { item: inst.element }); - - $.each(inst.sortables, function() { - if(this.instance.isOver) { - - this.instance.isOver = 0; - - inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance - this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work) - - //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid' - if(this.shouldRevert) this.instance.options.revert = true; - - //Trigger the stop of the sortable - this.instance._mouseStop(event); - - this.instance.options.helper = this.instance.options._helper; - - //If the helper has been the original item, restore properties in the sortable - if(inst.options.helper == 'original') - this.instance.currentItem.css({ top: 'auto', left: 'auto' }); - - } else { - this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance - this.instance._trigger("deactivate", event, uiSortable); - } - - }); - - }, - drag: function(event, ui) { - - var inst = $(this).data("draggable"), self = this; - - var checkPos = function(o) { - var dyClick = this.offset.click.top, dxClick = this.offset.click.left; - var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left; - var itemHeight = o.height, itemWidth = o.width; - var itemTop = o.top, itemLeft = o.left; - - return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth); - }; - - $.each(inst.sortables, function(i) { - - //Copy over some variables to allow calling the sortable's native _intersectsWith - this.instance.positionAbs = inst.positionAbs; - this.instance.helperProportions = inst.helperProportions; - this.instance.offset.click = inst.offset.click; - - if(this.instance._intersectsWith(this.instance.containerCache)) { - - //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once - if(!this.instance.isOver) { - - this.instance.isOver = 1; - //Now we fake the start of dragging for the sortable instance, - //by cloning the list group item, appending it to the sortable and using it as inst.currentItem - //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one) - this.instance.currentItem = $(self).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true); - this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it - this.instance.options.helper = function() { return ui.helper[0]; }; - - event.target = this.instance.currentItem[0]; - this.instance._mouseCapture(event, true); - this.instance._mouseStart(event, true, true); - - //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes - this.instance.offset.click.top = inst.offset.click.top; - this.instance.offset.click.left = inst.offset.click.left; - this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left; - this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top; - - inst._trigger("toSortable", event); - inst.dropped = this.instance.element; //draggable revert needs that - //hack so receive/update callbacks work (mostly) - inst.currentItem = inst.element; - this.instance.fromOutside = inst; - - } - - //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable - if(this.instance.currentItem) this.instance._mouseDrag(event); - - } else { - - //If it doesn't intersect with the sortable, and it intersected before, - //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval - if(this.instance.isOver) { - - this.instance.isOver = 0; - this.instance.cancelHelperRemoval = true; - - //Prevent reverting on this forced stop - this.instance.options.revert = false; - - // The out event needs to be triggered independently - this.instance._trigger('out', event, this.instance._uiHash(this.instance)); - - this.instance._mouseStop(event, true); - this.instance.options.helper = this.instance.options._helper; - - //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size - this.instance.currentItem.remove(); - if(this.instance.placeholder) this.instance.placeholder.remove(); - - inst._trigger("fromSortable", event); - inst.dropped = false; //draggable revert needs that - } - - }; - - }); - - } -}); - -$.ui.plugin.add("draggable", "cursor", { - start: function(event, ui) { - var t = $('body'), o = $(this).data('draggable').options; - if (t.css("cursor")) o._cursor = t.css("cursor"); - t.css("cursor", o.cursor); - }, - stop: function(event, ui) { - var o = $(this).data('draggable').options; - if (o._cursor) $('body').css("cursor", o._cursor); - } -}); - -$.ui.plugin.add("draggable", "opacity", { - start: function(event, ui) { - var t = $(ui.helper), o = $(this).data('draggable').options; - if(t.css("opacity")) o._opacity = t.css("opacity"); - t.css('opacity', o.opacity); - }, - stop: function(event, ui) { - var o = $(this).data('draggable').options; - if(o._opacity) $(ui.helper).css('opacity', o._opacity); - } -}); - -$.ui.plugin.add("draggable", "scroll", { - start: function(event, ui) { - var i = $(this).data("draggable"); - if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset(); - }, - drag: function(event, ui) { - - var i = $(this).data("draggable"), o = i.options, scrolled = false; - - if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') { - - if(!o.axis || o.axis != 'x') { - if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) - i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed; - else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) - i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed; - } - - if(!o.axis || o.axis != 'y') { - if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) - i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed; - else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) - i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed; - } - - } else { - - if(!o.axis || o.axis != 'x') { - if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) - scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) - scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - } - - if(!o.axis || o.axis != 'y') { - if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) - scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) - scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - } - - } - - if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) - $.ui.ddmanager.prepareOffsets(i, event); - - } -}); - -$.ui.plugin.add("draggable", "snap", { - start: function(event, ui) { - - var i = $(this).data("draggable"), o = i.options; - i.snapElements = []; - - $(o.snap.constructor != String ? ( o.snap.items || ':data(draggable)' ) : o.snap).each(function() { - var $t = $(this); var $o = $t.offset(); - if(this != i.element[0]) i.snapElements.push({ - item: this, - width: $t.outerWidth(), height: $t.outerHeight(), - top: $o.top, left: $o.left - }); - }); - - }, - drag: function(event, ui) { - - var inst = $(this).data("draggable"), o = inst.options; - var d = o.snapTolerance; - - var x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, - y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; - - for (var i = inst.snapElements.length - 1; i >= 0; i--){ - - var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width, - t = inst.snapElements[i].top, b = t + inst.snapElements[i].height; - - //Yes, I know, this is insane ;) - if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) { - if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); - inst.snapElements[i].snapping = false; - continue; - } - - if(o.snapMode != 'inner') { - var ts = Math.abs(t - y2) <= d; - var bs = Math.abs(b - y1) <= d; - var ls = Math.abs(l - x2) <= d; - var rs = Math.abs(r - x1) <= d; - if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top; - if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top; - if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left; - if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left; - } - - var first = (ts || bs || ls || rs); - - if(o.snapMode != 'outer') { - var ts = Math.abs(t - y1) <= d; - var bs = Math.abs(b - y2) <= d; - var ls = Math.abs(l - x1) <= d; - var rs = Math.abs(r - x2) <= d; - if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top; - if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top; - if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left; - if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left; - } - - if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) - (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item }))); - inst.snapElements[i].snapping = (ts || bs || ls || rs || first); - - }; - - } -}); - -$.ui.plugin.add("draggable", "stack", { - start: function(event, ui) { - - var o = $(this).data("draggable").options; - - var group = $.makeArray($(o.stack)).sort(function(a,b) { - return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0); - }); - if (!group.length) { return; } - - var min = parseInt(group[0].style.zIndex) || 0; - $(group).each(function(i) { - this.style.zIndex = min + i; - }); - - this[0].style.zIndex = min + group.length; - - } -}); - -$.ui.plugin.add("draggable", "zIndex", { - start: function(event, ui) { - var t = $(ui.helper), o = $(this).data("draggable").options; - if(t.css("zIndex")) o._zIndex = t.css("zIndex"); - t.css('zIndex', o.zIndex); - }, - stop: function(event, ui) { - var o = $(this).data("draggable").options; - if(o._zIndex) $(ui.helper).css('zIndex', o._zIndex); - } -}); - -})(jQuery); -/*! - * jQuery UI Sortable 1.8.21 - * - * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Sortables - * - * Depends: - * jquery.ui.core.js - * jquery.ui.mouse.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -$.widget("ui.sortable", $.ui.mouse, { - widgetEventPrefix: "sort", - ready: false, - options: { - appendTo: "parent", - axis: false, - connectWith: false, - containment: false, - cursor: 'auto', - cursorAt: false, - dropOnEmpty: true, - forcePlaceholderSize: false, - forceHelperSize: false, - grid: false, - handle: false, - helper: "original", - items: '> *', - opacity: false, - placeholder: false, - revert: false, - scroll: true, - scrollSensitivity: 20, - scrollSpeed: 20, - scope: "default", - tolerance: "intersect", - zIndex: 1000 - }, - _create: function() { - - var o = this.options; - this.containerCache = {}; - this.element.addClass("ui-sortable"); - - //Get the items - this.refresh(); - - //Let's determine if the items are being displayed horizontally - this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false; - - //Let's determine the parent's offset - this.offset = this.element.offset(); - - //Initialize mouse events for interaction - this._mouseInit(); - - //We're ready to go - this.ready = true - - }, - - destroy: function() { - $.Widget.prototype.destroy.call( this ); - this.element - .removeClass("ui-sortable ui-sortable-disabled"); - this._mouseDestroy(); - - for ( var i = this.items.length - 1; i >= 0; i-- ) - this.items[i].item.removeData(this.widgetName + "-item"); - - return this; - }, - - _setOption: function(key, value){ - if ( key === "disabled" ) { - this.options[ key ] = value; - - this.widget() - [ value ? "addClass" : "removeClass"]( "ui-sortable-disabled" ); - } else { - // Don't call widget base _setOption for disable as it adds ui-state-disabled class - $.Widget.prototype._setOption.apply(this, arguments); - } - }, - - _mouseCapture: function(event, overrideHandle) { - var that = this; - - if (this.reverting) { - return false; - } - - if(this.options.disabled || this.options.type == 'static') return false; - - //We have to refresh the items data once first - this._refreshItems(event); - - //Find out if the clicked node (or one of its parents) is a actual item in this.items - var currentItem = null, self = this, nodes = $(event.target).parents().each(function() { - if($.data(this, that.widgetName + '-item') == self) { - currentItem = $(this); - return false; - } - }); - if($.data(event.target, that.widgetName + '-item') == self) currentItem = $(event.target); - - if(!currentItem) return false; - if(this.options.handle && !overrideHandle) { - var validHandle = false; - - $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; }); - if(!validHandle) return false; - } - - this.currentItem = currentItem; - this._removeCurrentsFromItems(); - return true; - - }, - - _mouseStart: function(event, overrideHandle, noActivation) { - - var o = this.options, self = this; - this.currentContainer = this; - - //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture - this.refreshPositions(); - - //Create and append the visible helper - this.helper = this._createHelper(event); - - //Cache the helper size - this._cacheHelperProportions(); - - /* - * - Position generation - - * This block generates everything position related - it's the core of draggables. - */ - - //Cache the margins of the original element - this._cacheMargins(); - - //Get the next scrolling parent - this.scrollParent = this.helper.scrollParent(); - - //The element's absolute position on the page minus margins - this.offset = this.currentItem.offset(); - this.offset = { - top: this.offset.top - this.margins.top, - left: this.offset.left - this.margins.left - }; - - $.extend(this.offset, { - click: { //Where the click happened, relative to the element - left: event.pageX - this.offset.left, - top: event.pageY - this.offset.top - }, - parent: this._getParentOffset(), - relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper - }); - - // Only after we got the offset, we can change the helper's position to absolute - // TODO: Still need to figure out a way to make relative sorting possible - this.helper.css("position", "absolute"); - this.cssPosition = this.helper.css("position"); - - //Generate the original position - this.originalPosition = this._generatePosition(event); - this.originalPageX = event.pageX; - this.originalPageY = event.pageY; - - //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied - (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt)); - - //Cache the former DOM position - this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] }; - - //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way - if(this.helper[0] != this.currentItem[0]) { - this.currentItem.hide(); - } - - //Create the placeholder - this._createPlaceholder(); - - //Set a containment if given in the options - if(o.containment) - this._setContainment(); - - if(o.cursor) { // cursor option - if ($('body').css("cursor")) this._storedCursor = $('body').css("cursor"); - $('body').css("cursor", o.cursor); - } - - if(o.opacity) { // opacity option - if (this.helper.css("opacity")) this._storedOpacity = this.helper.css("opacity"); - this.helper.css("opacity", o.opacity); - } - - if(o.zIndex) { // zIndex option - if (this.helper.css("zIndex")) this._storedZIndex = this.helper.css("zIndex"); - this.helper.css("zIndex", o.zIndex); - } - - //Prepare scrolling - if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') - this.overflowOffset = this.scrollParent.offset(); - - //Call callbacks - this._trigger("start", event, this._uiHash()); - - //Recache the helper size - if(!this._preserveHelperProportions) - this._cacheHelperProportions(); - - - //Post 'activate' events to possible containers - if(!noActivation) { - for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, self._uiHash(this)); } - } - - //Prepare possible droppables - if($.ui.ddmanager) - $.ui.ddmanager.current = this; - - if ($.ui.ddmanager && !o.dropBehaviour) - $.ui.ddmanager.prepareOffsets(this, event); - - this.dragging = true; - - this.helper.addClass("ui-sortable-helper"); - this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position - return true; - - }, - - _mouseDrag: function(event) { - - //Compute the helpers position - this.position = this._generatePosition(event); - this.positionAbs = this._convertPositionTo("absolute"); - - if (!this.lastPositionAbs) { - this.lastPositionAbs = this.positionAbs; - } - - //Do scrolling - if(this.options.scroll) { - var o = this.options, scrolled = false; - if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') { - - if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) - this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed; - else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) - this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed; - - if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) - this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed; - else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) - this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed; - - } else { - - if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) - scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed); - else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) - scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed); - - if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) - scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed); - else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) - scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed); - - } - - if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) - $.ui.ddmanager.prepareOffsets(this, event); - } - - //Regenerate the absolute position used for position checks - this.positionAbs = this._convertPositionTo("absolute"); - - //Set the helper position - if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px'; - if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px'; - - //Rearrange - for (var i = this.items.length - 1; i >= 0; i--) { - - //Cache variables and intersection, continue if no intersection - var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item); - if (!intersection) continue; - - if(itemElement != this.currentItem[0] //cannot intersect with itself - && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before - && !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked - && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true) - //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container - ) { - - this.direction = intersection == 1 ? "down" : "up"; - - if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) { - this._rearrange(event, item); - } else { - break; - } - - this._trigger("change", event, this._uiHash()); - break; - } - } - - //Post events to containers - this._contactContainers(event); - - //Interconnect with droppables - if($.ui.ddmanager) $.ui.ddmanager.drag(this, event); - - //Call callbacks - this._trigger('sort', event, this._uiHash()); - - this.lastPositionAbs = this.positionAbs; - return false; - - }, - - _mouseStop: function(event, noPropagation) { - - if(!event) return; - - //If we are using droppables, inform the manager about the drop - if ($.ui.ddmanager && !this.options.dropBehaviour) - $.ui.ddmanager.drop(this, event); - - if(this.options.revert) { - var self = this; - var cur = self.placeholder.offset(); - - self.reverting = true; - - $(this.helper).animate({ - left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft), - top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) - }, parseInt(this.options.revert, 10) || 500, function() { - self._clear(event); - }); - } else { - this._clear(event, noPropagation); - } - - return false; - - }, - - cancel: function() { - - var self = this; - - if(this.dragging) { - - this._mouseUp({ target: null }); - - if(this.options.helper == "original") - this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); - else - this.currentItem.show(); - - //Post deactivating events to containers - for (var i = this.containers.length - 1; i >= 0; i--){ - this.containers[i]._trigger("deactivate", null, self._uiHash(this)); - if(this.containers[i].containerCache.over) { - this.containers[i]._trigger("out", null, self._uiHash(this)); - this.containers[i].containerCache.over = 0; - } - } - - } - - if (this.placeholder) { - //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! - if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]); - if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove(); - - $.extend(this, { - helper: null, - dragging: false, - reverting: false, - _noFinalSort: null - }); - - if(this.domPosition.prev) { - $(this.domPosition.prev).after(this.currentItem); - } else { - $(this.domPosition.parent).prepend(this.currentItem); - } - } - - return this; - - }, - - serialize: function(o) { - - var items = this._getItemsAsjQuery(o && o.connected); - var str = []; o = o || {}; - - $(items).each(function() { - var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/)); - if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2])); - }); - - if(!str.length && o.key) { - str.push(o.key + '='); - } - - return str.join('&'); - - }, - - toArray: function(o) { - - var items = this._getItemsAsjQuery(o && o.connected); - var ret = []; o = o || {}; - - items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); }); - return ret; - - }, - - /* Be careful with the following core functions */ - _intersectsWith: function(item) { - - var x1 = this.positionAbs.left, - x2 = x1 + this.helperProportions.width, - y1 = this.positionAbs.top, - y2 = y1 + this.helperProportions.height; - - var l = item.left, - r = l + item.width, - t = item.top, - b = t + item.height; - - var dyClick = this.offset.click.top, - dxClick = this.offset.click.left; - - var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r; - - if( this.options.tolerance == "pointer" - || this.options.forcePointerForContainers - || (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height']) - ) { - return isOverElement; - } else { - - return (l < x1 + (this.helperProportions.width / 2) // Right Half - && x2 - (this.helperProportions.width / 2) < r // Left Half - && t < y1 + (this.helperProportions.height / 2) // Bottom Half - && y2 - (this.helperProportions.height / 2) < b ); // Top Half - - } - }, - - _intersectsWithPointer: function(item) { - - var isOverElementHeight = (this.options.axis === 'x') || $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height), - isOverElementWidth = (this.options.axis === 'y') || $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width), - isOverElement = isOverElementHeight && isOverElementWidth, - verticalDirection = this._getDragVerticalDirection(), - horizontalDirection = this._getDragHorizontalDirection(); - - if (!isOverElement) - return false; - - return this.floating ? - ( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 ) - : ( verticalDirection && (verticalDirection == "down" ? 2 : 1) ); - - }, - - _intersectsWithSides: function(item) { - - var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height), - isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width), - verticalDirection = this._getDragVerticalDirection(), - horizontalDirection = this._getDragHorizontalDirection(); - - if (this.floating && horizontalDirection) { - return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf)); - } else { - return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf)); - } - - }, - - _getDragVerticalDirection: function() { - var delta = this.positionAbs.top - this.lastPositionAbs.top; - return delta != 0 && (delta > 0 ? "down" : "up"); - }, - - _getDragHorizontalDirection: function() { - var delta = this.positionAbs.left - this.lastPositionAbs.left; - return delta != 0 && (delta > 0 ? "right" : "left"); - }, - - refresh: function(event) { - this._refreshItems(event); - this.refreshPositions(); - return this; - }, - - _connectWith: function() { - var options = this.options; - return options.connectWith.constructor == String - ? [options.connectWith] - : options.connectWith; - }, - - _getItemsAsjQuery: function(connected) { - - var self = this; - var items = []; - var queries = []; - var connectWith = this._connectWith(); - - if(connectWith && connected) { - for (var i = connectWith.length - 1; i >= 0; i--){ - var cur = $(connectWith[i]); - for (var j = cur.length - 1; j >= 0; j--){ - var inst = $.data(cur[j], this.widgetName); - if(inst && inst != this && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), inst]); - } - }; - }; - } - - queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not('.ui-sortable-placeholder'), this]); - - for (var i = queries.length - 1; i >= 0; i--){ - queries[i][0].each(function() { - items.push(this); - }); - }; - - return $(items); - - }, - - _removeCurrentsFromItems: function() { - - var list = this.currentItem.find(":data(" + this.widgetName + "-item)"); - - for (var i=0; i < this.items.length; i++) { - - for (var j=0; j < list.length; j++) { - if(list[j] == this.items[i].item[0]) - this.items.splice(i,1); - }; - - }; - - }, - - _refreshItems: function(event) { - - this.items = []; - this.containers = [this]; - var items = this.items; - var self = this; - var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]]; - var connectWith = this._connectWith(); - - if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down - for (var i = connectWith.length - 1; i >= 0; i--){ - var cur = $(connectWith[i]); - for (var j = cur.length - 1; j >= 0; j--){ - var inst = $.data(cur[j], this.widgetName); - if(inst && inst != this && !inst.options.disabled) { - queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]); - this.containers.push(inst); - } - }; - }; - } - - for (var i = queries.length - 1; i >= 0; i--) { - var targetData = queries[i][1]; - var _queries = queries[i][0]; - - for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) { - var item = $(_queries[j]); - - item.data(this.widgetName + '-item', targetData); // Data for target checking (mouse manager) - - items.push({ - item: item, - instance: targetData, - width: 0, height: 0, - left: 0, top: 0 - }); - }; - }; - - }, - - refreshPositions: function(fast) { - - //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change - if(this.offsetParent && this.helper) { - this.offset.parent = this._getParentOffset(); - } - - for (var i = this.items.length - 1; i >= 0; i--){ - var item = this.items[i]; - - //We ignore calculating positions of all connected containers when we're not over them - if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0]) - continue; - - var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item; - - if (!fast) { - item.width = t.outerWidth(); - item.height = t.outerHeight(); - } - - var p = t.offset(); - item.left = p.left; - item.top = p.top; - }; - - if(this.options.custom && this.options.custom.refreshContainers) { - this.options.custom.refreshContainers.call(this); - } else { - for (var i = this.containers.length - 1; i >= 0; i--){ - var p = this.containers[i].element.offset(); - this.containers[i].containerCache.left = p.left; - this.containers[i].containerCache.top = p.top; - this.containers[i].containerCache.width = this.containers[i].element.outerWidth(); - this.containers[i].containerCache.height = this.containers[i].element.outerHeight(); - }; - } - - return this; - }, - - _createPlaceholder: function(that) { - - var self = that || this, o = self.options; - - if(!o.placeholder || o.placeholder.constructor == String) { - var className = o.placeholder; - o.placeholder = { - element: function() { - - var el = $(document.createElement(self.currentItem[0].nodeName)) - .addClass(className || self.currentItem[0].className+" ui-sortable-placeholder") - .removeClass("ui-sortable-helper")[0]; - - if(!className) - el.style.visibility = "hidden"; - - return el; - }, - update: function(container, p) { - - // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that - // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified - if(className && !o.forcePlaceholderSize) return; - - //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item - if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); }; - if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); }; - } - }; - } - - //Create the placeholder - self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem)); - - //Append it after the actual current item - self.currentItem.after(self.placeholder); - - //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) - o.placeholder.update(self, self.placeholder); - - }, - - _contactContainers: function(event) { - - // get innermost container that intersects with item - var innermostContainer = null, innermostIndex = null; - - - for (var i = this.containers.length - 1; i >= 0; i--){ - - // never consider a container that's located within the item itself - if($.ui.contains(this.currentItem[0], this.containers[i].element[0])) - continue; - - if(this._intersectsWith(this.containers[i].containerCache)) { - - // if we've already found a container and it's more "inner" than this, then continue - if(innermostContainer && $.ui.contains(this.containers[i].element[0], innermostContainer.element[0])) - continue; - - innermostContainer = this.containers[i]; - innermostIndex = i; - - } else { - // container doesn't intersect. trigger "out" event if necessary - if(this.containers[i].containerCache.over) { - this.containers[i]._trigger("out", event, this._uiHash(this)); - this.containers[i].containerCache.over = 0; - } - } - - } - - // if no intersecting containers found, return - if(!innermostContainer) return; - - // move the item into the container if it's not there already - if(this.containers.length === 1) { - this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); - this.containers[innermostIndex].containerCache.over = 1; - } else if(this.currentContainer != this.containers[innermostIndex]) { - - //When entering a new container, we will find the item with the least distance and append our item near it - var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[innermostIndex].floating ? 'left' : 'top']; - for (var j = this.items.length - 1; j >= 0; j--) { - if(!$.ui.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) continue; - var cur = this.containers[innermostIndex].floating ? this.items[j].item.offset().left : this.items[j].item.offset().top; - if(Math.abs(cur - base) < dist) { - dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j]; - this.direction = (cur - base > 0) ? 'down' : 'up'; - } - } - - if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled - return; - - this.currentContainer = this.containers[innermostIndex]; - itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true); - this._trigger("change", event, this._uiHash()); - this.containers[innermostIndex]._trigger("change", event, this._uiHash(this)); - - //Update the placeholder - this.options.placeholder.update(this.currentContainer, this.placeholder); - - this.containers[innermostIndex]._trigger("over", event, this._uiHash(this)); - this.containers[innermostIndex].containerCache.over = 1; - } - - - }, - - _createHelper: function(event) { - - var o = this.options; - var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem); - - if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already - $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]); - - if(helper[0] == this.currentItem[0]) - this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") }; - - if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width()); - if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height()); - - return helper; - - }, - - _adjustOffsetFromHelper: function(obj) { - if (typeof obj == 'string') { - obj = obj.split(' '); - } - if ($.isArray(obj)) { - obj = {left: +obj[0], top: +obj[1] || 0}; - } - if ('left' in obj) { - this.offset.click.left = obj.left + this.margins.left; - } - if ('right' in obj) { - this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; - } - if ('top' in obj) { - this.offset.click.top = obj.top + this.margins.top; - } - if ('bottom' in obj) { - this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; - } - }, - - _getParentOffset: function() { - - - //Get the offsetParent and cache its position - this.offsetParent = this.helper.offsetParent(); - var po = this.offsetParent.offset(); - - // This is a special case where we need to modify a offset calculated on start, since the following happened: - // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent - // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that - // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag - if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) { - po.left += this.scrollParent.scrollLeft(); - po.top += this.scrollParent.scrollTop(); - } - - if((this.offsetParent[0] == document.body) //This needs to be actually done for all browsers, since pageX/pageY includes this information - || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix - po = { top: 0, left: 0 }; - - return { - top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0), - left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0) - }; - - }, - - _getRelativeOffset: function() { - - if(this.cssPosition == "relative") { - var p = this.currentItem.position(); - return { - top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(), - left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft() - }; - } else { - return { top: 0, left: 0 }; - } - - }, - - _cacheMargins: function() { - this.margins = { - left: (parseInt(this.currentItem.css("marginLeft"),10) || 0), - top: (parseInt(this.currentItem.css("marginTop"),10) || 0) - }; - }, - - _cacheHelperProportions: function() { - this.helperProportions = { - width: this.helper.outerWidth(), - height: this.helper.outerHeight() - }; - }, - - _setContainment: function() { - - var o = this.options; - if(o.containment == 'parent') o.containment = this.helper[0].parentNode; - if(o.containment == 'document' || o.containment == 'window') this.containment = [ - 0 - this.offset.relative.left - this.offset.parent.left, - 0 - this.offset.relative.top - this.offset.parent.top, - $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left, - ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top - ]; - - if(!(/^(document|window|parent)$/).test(o.containment)) { - var ce = $(o.containment)[0]; - var co = $(o.containment).offset(); - var over = ($(ce).css("overflow") != 'hidden'); - - this.containment = [ - co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left, - co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top, - co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left, - co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - ]; - } - - }, - - _convertPositionTo: function(d, pos) { - - if(!pos) pos = this.position; - var mod = d == "absolute" ? 1 : -1; - var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - - return { - top: ( - pos.top // The absolute mouse position - + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border) - - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod) - ), - left: ( - pos.left // The absolute mouse position - + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent - + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border) - - ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod) - ) - }; - - }, - - _generatePosition: function(event) { - - var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); - - // This is another very weird special case that only happens for relative elements: - // 1. If the css position is relative - // 2. and the scroll parent is the document or similar to the offset parent - // we have to refresh the relative offset during the scroll so there are no jumps - if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) { - this.offset.relative = this._getRelativeOffset(); - } - - var pageX = event.pageX; - var pageY = event.pageY; - - /* - * - Position constraining - - * Constrain the position to a mix of grid, containment. - */ - - if(this.originalPosition) { //If we are not dragging yet, we won't check for options - - if(this.containment) { - if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left; - if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top; - if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left; - if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top; - } - - if(o.grid) { - var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; - pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; - - var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; - pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; - } - - } - - return { - top: ( - pageY // The absolute mouse position - - this.offset.click.top // Click offset (relative to the element) - - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.top // The offsetParent's offset without borders (offset + border) - + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) - ), - left: ( - pageX // The absolute mouse position - - this.offset.click.left // Click offset (relative to the element) - - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent - - this.offset.parent.left // The offsetParent's offset without borders (offset + border) - + ($.browser.safari && this.cssPosition == 'fixed' ? 0 : ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) - ) - }; - - }, - - _rearrange: function(event, i, a, hardRefresh) { - - a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling)); - - //Various things done here to improve the performance: - // 1. we create a setTimeout, that calls refreshPositions - // 2. on the instance, we have a counter variable, that get's higher after every append - // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same - // 4. this lets only the last addition to the timeout stack through - this.counter = this.counter ? ++this.counter : 1; - var self = this, counter = this.counter; - - window.setTimeout(function() { - if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove - },0); - - }, - - _clear: function(event, noPropagation) { - - this.reverting = false; - // We delay all events that have to be triggered to after the point where the placeholder has been removed and - // everything else normalized again - var delayedTriggers = [], self = this; - - // We first have to update the dom position of the actual currentItem - // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088) - if(!this._noFinalSort && this.currentItem.parent().length) this.placeholder.before(this.currentItem); - this._noFinalSort = null; - - if(this.helper[0] == this.currentItem[0]) { - for(var i in this._storedCSS) { - if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = ''; - } - this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"); - } else { - this.currentItem.show(); - } - - if(this.fromOutside && !noPropagation) delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); }); - if((this.fromOutside || this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) && !noPropagation) delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed - if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element - if(!noPropagation) delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); }); - for (var i = this.containers.length - 1; i >= 0; i--){ - if($.ui.contains(this.containers[i].element[0], this.currentItem[0]) && !noPropagation) { - delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - } - }; - }; - - //Post events to containers - for (var i = this.containers.length - 1; i >= 0; i--){ - if(!noPropagation) delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - if(this.containers[i].containerCache.over) { - delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); }; }).call(this, this.containers[i])); - this.containers[i].containerCache.over = 0; - } - } - - //Do what was originally in plugins - if(this._storedCursor) $('body').css("cursor", this._storedCursor); //Reset cursor - if(this._storedOpacity) this.helper.css("opacity", this._storedOpacity); //Reset opacity - if(this._storedZIndex) this.helper.css("zIndex", this._storedZIndex == 'auto' ? '' : this._storedZIndex); //Reset z-index - - this.dragging = false; - if(this.cancelHelperRemoval) { - if(!noPropagation) { - this._trigger("beforeStop", event, this._uiHash()); - for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events - this._trigger("stop", event, this._uiHash()); - } - return false; - } - - if(!noPropagation) this._trigger("beforeStop", event, this._uiHash()); - - //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node! - this.placeholder[0].parentNode.removeChild(this.placeholder[0]); - - if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null; - - if(!noPropagation) { - for (var i=0; i < delayedTriggers.length; i++) { delayedTriggers[i].call(this, event); }; //Trigger all delayed events - this._trigger("stop", event, this._uiHash()); - } - - this.fromOutside = false; - return true; - - }, - - _trigger: function() { - if ($.Widget.prototype._trigger.apply(this, arguments) === false) { - this.cancel(); - } - }, - - _uiHash: function(inst) { - var self = inst || this; - return { - helper: self.helper, - placeholder: self.placeholder || $([]), - position: self.position, - originalPosition: self.originalPosition, - offset: self.positionAbs, - item: self.currentItem, - sender: inst ? inst.element : null - }; - } - -}); - -$.extend($.ui.sortable, { - version: "1.8.21" -}); - -})(jQuery); diff --git a/www/prive/formulaires/selecteur/jquery.picker.js b/www/prive/formulaires/selecteur/jquery.picker.js index 7fc54c50..85e726c3 100644 --- a/www/prive/formulaires/selecteur/jquery.picker.js +++ b/www/prive/formulaires/selecteur/jquery.picker.js @@ -9,11 +9,10 @@ item_picked et picker doivent seulement etre voisins ... **/ -;if (window.jQuery) -(function($) { +;if (window.jQuery) { - jQuery(document).ready(function(){ - var picked = jQuery('ul.item_picked'); + jQuery(function($){ + var picked = $('ul.item_picked'); if (picked.length) { picked.find('>li').removeClass('last').find('li:last').addClass('last'); } @@ -78,14 +77,13 @@ item_picked et picker doivent seulement etre voisins sel.parent().addClass('on'); return this; // don't break the chain } - jQuery.fn.item_unpick = function(){ + jQuery.fn.item_unpick = function() { var picked = this.parents('ul.item_picked'); var me = this.parent(); jQuery(me).fadeOut('fast'); - setTimeout(function(){ + setTimeout(function () { me.remove(); picked.find('>li').removeClass('last').find('li:last').addClass('last'); - },400); + }, 400); } - -})(jQuery); +}; diff --git a/www/prive/formulaires/selecteur/jquery.selecteur.js.html b/www/prive/formulaires/selecteur/jquery.selecteur.js.html new file mode 100644 index 00000000..2444a5c5 --- /dev/null +++ b/www/prive/formulaires/selecteur/jquery.selecteur.js.html @@ -0,0 +1,8 @@ +#HTTP_HEADER{Content-Type: text/js;} +[(#REM) [(#REM) @@ -28,7 +28,7 @@ afficher la selection dans un ul class item_picked
        [(#ENV{sortable,'non'}|=={oui}|oui) diff --git a/www/prive/formulaires/selecteur/rubriques_fonctions.php b/www/prive/formulaires/selecteur/rubriques_fonctions.php deleted file mode 100644 index 6d8bea31..00000000 --- a/www/prive/formulaires/selecteur/rubriques_fonctions.php +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/www/prive/formulaires/traduire.html b/www/prive/formulaires/traduire.html index 6420bb4c..f9780827 100644 --- a/www/prive/formulaires/traduire.html +++ b/www/prive/formulaires/traduire.html @@ -2,64 +2,65 @@ [

        (#ENV**{message_ok})

        ] [

        (#ENV*{message_erreur})

        ] - [(#ENV{editable}) + [(#ENV{editable}|ou{#ENV{_traduisible}})
        [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] - #ACTION_FORMULAIRE{#ENV{action}} + #ACTION_FORMULAIRE ] -
          -
        • +
          +
          [ (#ENV**{erreurs}|table_valeur{changer_lang}) ] [(#ENV{langue}|?{[(#ENV{langue}|traduire_nom_langue)],[((#ENV{langue_parent}|traduire_nom_langue))]})] - [(#ENV{langue_choisie}|=={oui}|non)(<:info_multi_herit:>)] + [(#ENV{langue_choisie}|=={oui}|non)([(#ENV{_objet}|objet_T{info_multi_herit})])] [(#ENV{_langue}|ou{#ENV{_traduire}}|oui) [<:bouton_changer:> \([(#ENV{_langue}|?{[(#ENV{_objet}|objet_info{texte_langue_objet}|_T)],<:info_traductions:>})]\)] - [(#ENV{_langue}|oui) + ><:bouton_changer:> \([(#ENV{_langue}|?{[(#ENV{_objet}|objet_info{texte_langue_objet}|_T)],#ENV{_objet}|objet_T{info_traductions}})]\)] + [(#ENV{editable}|oui) [ ]]] -
        • +
        + [(#ENV{_traduire}|oui) [(#ENV{_lister_id_trad}|oui) -
      • - ,objet=#ENV{_objet},env,ajax} /> - [(#ENV{editable}) +
        + + [(#ENV{editable}|ou{#ENV{_traduisible}}) - + ] -
      • +
        ] [(#ENV{_lister_id_trad}|non) -
      • +
        [ (#ENV**{erreurs}|table_valeur{id_trad}) ] -
      • +
        ] ] - + [(#ENV{_traduire}|oui) [
        - (#URL_ECRIRE{#ENV{_objet}|objet_info{url_edit},new=oui&lier_trad=#ENV{_id_objet}}|parametre_url{#ENV{_objet}|=={rubrique}|?{id_parent,id_rubrique},#ENV{_id_parent}}|icone_horizontale{<:trad_new:>,traduction,new}) + (#URL_ECRIRE{#ENV{_objet}|objet_info{url_edit},new=oui&lier_trad=#ENV{_id_objet}}|parametre_url{#ENV{_objet}|=={rubrique}|?{id_parent,id_rubrique},#ENV{_id_parent}}|icone_horizontale{#ENV{_objet}|objet_T{trad_new},traduction,new})
        ] ] - [(#ENV{editable}) + [(#ENV{editable}|ou{#ENV{_traduisible}})

        ] - + \ No newline at end of file diff --git a/www/prive/formulaires/traduire.php b/www/prive/formulaires/traduire.php index 998afaac..703ce654 100644 --- a/www/prive/formulaires/traduire.php +++ b/www/prive/formulaires/traduire.php @@ -3,53 +3,72 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +/** + * Gestion du formulaire de traduction + * + * @package SPIP\Core\Formulaires + **/ + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} include_spip('inc/actions'); include_spip('inc/editer'); /** - * Charger les donnes de #FORMULAIRE_TRADUIRE + * Charger les données de #FORMULAIRE_TRADUIRE * * @param string $objet + * Type d'objet * @param int $id_objet + * Identifiant de l'objet * @param string $retour - * url de retour + * URL de retour * @param bool $traduire - * permet de desactiver la gestion de traduction sur un objet ayant id_trad + * Permet de désactiver la gestion de traduction sur un objet ayant id_trad * @return array|bool + * False si l'identifiant n'est pas numérique ou si l'objet n'a pas de langue + * Contexte à transmettre au squelette du formulaire sinon */ -function formulaires_traduire_charger_dist($objet, $id_objet, $retour='', $traduire = true){ - if (!intval($id_objet)) +function formulaires_traduire_charger_dist($objet, $id_objet, $retour = '', $traduire = true) { + if (!intval($id_objet)) { return false; - $valeurs = formulaires_editer_objet_charger($objet,$id_objet,null,0,$retour,''); + } + $valeurs = formulaires_editer_objet_charger($objet, $id_objet, null, 0, $retour, ''); // verifier que l'objet indique possede bien des champs id_trad et lang // attention, charger renomme lang => langue pour ne pas perturber la langue d'affichage du squelette - if (!isset($valeurs['langue'])) + if (!isset($valeurs['langue'])) { return false; + } - $valeurs['editable'] = autoriser('changerlangue',$objet,$id_objet); + $valeurs['editable'] = autoriser('changerlangue', $objet, $id_objet); $valeurs['_langue'] = ''; $langue_parent = ''; $id_parent = ''; - if (isset($valeurs['id_rubrique'])) + if (isset($valeurs['id_rubrique'])) { $id_parent = $valeurs['id_rubrique']; - if (isset($valeurs['id_parent'])) - $id_parent = $valeurs['id_parent']; - if ($id_parent) - $langue_parent = sql_getfetsel("lang", "spip_rubriques", "id_rubrique=".intval($id_parent)); - - if (!$langue_parent) + } + if (isset($valeurs['id_parent'])) { + $id_parent = $valeurs['id_parent']; + } + if ($id_parent) { + $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_parent)); + } + + if (!$langue_parent) { $langue_parent = $GLOBALS['meta']['langue_site']; + } if ($valeurs['editable'] - AND in_array(table_objet_sql($objet),explode(',',$GLOBALS['meta']['multi_objets']))){ + and in_array(table_objet_sql($objet), explode(',', $GLOBALS['meta']['multi_objets'])) + ) { $valeurs['_langue'] = $valeurs['langue']; } $valeurs['langue_parent'] = $langue_parent; @@ -59,85 +78,111 @@ function formulaires_traduire_charger_dist($objet, $id_objet, $retour='', $tradu $valeurs['changer_lang'] = ''; + $valeurs['_traduisible'] = autoriser('changertraduction', $objet, $id_objet); $valeurs['_traduire'] = ''; if (isset($valeurs['id_trad'])) { - $valeurs['_traduire'] = ($traduire?' ':''); - $valeurs['_vue_traductions'] = "prive/objets/liste/" . (trouver_fond($f=table_objet($objet)."-trad","prive/objets/liste")?$f:"objets-trad"); - // pour afficher la liste des trad sur la base de l'id_trad en base - // independamment d'une saisie en cours sur id_trad - $valeurs['_lister_id_trad'] = $valeurs['id_trad']; - $valeurs['_id_parent'] = $id_parent; + $valeurs['_traduire'] = ($traduire ? ' ' : ''); + if ($valeurs['_traduisible']) { + $valeurs['_vue_traductions'] = 'prive/objets/liste/' . (trouver_fond( + $f = table_objet($objet) . '-trad', + 'prive/objets/liste' + ) ? $f : 'objets-trad'); + // pour afficher la liste des trad sur la base de l'id_trad en base + // independamment d'une saisie en cours sur id_trad + $valeurs['_lister_id_trad'] = $valeurs['id_trad']; + $valeurs['_id_parent'] = $id_parent; + } } - $valeurs['_saisie_en_cours'] = (!_request('annuler') AND (_request('changer_lang')!==null OR _request('changer_id_trad')!==null)); - $valeurs['_pipeline'] = array('traduire',array('type'=>$objet,'id'=>$id_objet)); + $valeurs['_saisie_en_cours'] = (!_request('annuler') and (_request('changer_lang') !== null + or _request('changer_id_trad') !== null)); + $valeurs['_pipeline'] = array('traduire', array('type' => $objet, 'id' => $id_objet)); return $valeurs; } /** - * Verifier les saisies des valeurs du #FORMULAIRE_TRADUIRE + * Vérifier les saisies des valeurs du #FORMULAIRE_TRADUIRE * * @param string $objet + * Type d'objet * @param int $id_objet + * Identifiant de l'objet * @param string $retour + * URL de retour * @param bool $traduire + * Permet de désactiver la gestion de traduction sur un objet ayant id_trad * @return array + * Erreurs des saisies */ -function formulaires_traduire_verifier_dist($objet, $id_objet, $retour='', $traduire = true){ +function formulaires_traduire_verifier_dist($objet, $id_objet, $retour = '', $traduire = true) { $erreurs = array(); if (null !== _request('changer_lang')) { - $erreurs = formulaires_editer_objet_verifier($objet,$id_objet,array('changer_lang')); + $erreurs = formulaires_editer_objet_verifier($objet, $id_objet, array('changer_lang')); } // si id_trad fourni, verifier que cela ne conflicte pas avec un id_trad existant // et que ca reference bien un objet existant - if ($id_trad = _request('id_trad')){ + if ($id_trad = _request('id_trad')) { $table_objet_sql = table_objet_sql($objet); $_id_table_objet = id_table_objet($objet); - if (sql_getfetsel('id_trad',$table_objet_sql,"$_id_table_objet=".intval($id_objet))) - // ne devrait jamais arriver sauf concurence de saisie + if (sql_getfetsel( + 'id_trad', + $table_objet_sql, + "$_id_table_objet=" . intval($id_objet) + )) { + // ne devrait jamais arriver sauf concurence de saisie $erreurs['id_trad'] = _L('Une traduction est deja referencee'); - elseif (!sql_getfetsel($_id_table_objet,$table_objet_sql,"$_id_table_objet=".intval($id_trad))) + } elseif (!sql_getfetsel($_id_table_objet, $table_objet_sql, "$_id_table_objet=" . intval($id_trad))) { $erreurs['id_trad'] = _L('Indiquez un contenu existant'); + } } + return $erreurs; } /** * Enregistrer en base les saisies du #FORMULAIRE_TRADUIRE - * @param $objet - * @param $id_objet + * + * @param string $objet + * Type d'objet + * @param int $id_objet + * Identifiant de l'objet * @param string $retour + * URL de retour + * @param bool $traduire + * Permet de désactiver la gestion de traduction sur un objet ayant id_trad * @return array + * Retour des traitements */ -function formulaires_traduire_traiter_dist($objet, $id_objet, $retour='', $traduire = true){ +function formulaires_traduire_traiter_dist($objet, $id_objet, $retour = '', $traduire = true) { $res = array(); - if (!_request('annuler') AND autoriser('changerlangue',$objet,$id_objet)) { + if (!_request('annuler') and autoriser('changerlangue', $objet, $id_objet)) { // action/editer_xxx doit traiter la modif de changer_lang - $res = formulaires_editer_objet_traiter($objet,$id_objet,0,0,$retour); - - if ($id_trad=_request('id_trad') OR _request('supprimer_trad')){ - $referencer_traduction = charger_fonction('referencer_traduction','action'); + $res = formulaires_editer_objet_traiter($objet, $id_objet, 0, 0, $retour); + } + if (!_request('annuler') and autoriser('changertraduction', $objet, $id_objet)) { + if ($id_trad = _request('id_trad') or _request('supprimer_trad')) { + $referencer_traduction = charger_fonction('referencer_traduction', 'action'); $referencer_traduction($objet, $id_objet, intval($id_trad)); // 0 si supprimer_trad - } - elseif ($new_id_trad = _request('changer_reference_trad') - AND $new_id_trad = array_keys($new_id_trad) - AND $new_id_trad = reset($new_id_trad)){ + } elseif ($new_id_trad = _request('changer_reference_trad') + and $new_id_trad = array_keys($new_id_trad) + and $new_id_trad = reset($new_id_trad) + ) { $table_objet_sql = table_objet_sql($objet); $_id_table_objet = id_table_objet($objet); - if ($id_trad = sql_getfetsel('id_trad',$table_objet_sql,"$_id_table_objet=".intval($id_objet))){ - $referencer_traduction = charger_fonction('referencer_traduction','action'); + if ($id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$_id_table_objet=" . intval($id_objet))) { + $referencer_traduction = charger_fonction('referencer_traduction', 'action'); $referencer_traduction($objet, $id_trad, $new_id_trad); } } } $res['editable'] = true; - if (!$res['message_erreur']) - set_request('annuler','annuler'); // provoquer la fermeture du forumlaire + if (!isset($res['message_erreur'])) { + set_request('annuler', 'annuler'); + } // provoquer la fermeture du forumlaire + return $res; } - -?> diff --git a/www/prive/ical_prive.html b/www/prive/ical_prive.html index b69b85cc..36b464f3 100644 --- a/www/prive/ical_prive.html +++ b/www/prive/ical_prive.html @@ -119,4 +119,4 @@ END:VCALENDAR +}?> \ No newline at end of file diff --git a/www/prive/images/favicon-spip.png b/www/prive/images/favicon-spip.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1163029e0ddebb97809540a78d7e6a885a9aa5 GIT binary patch literal 4701 zcmX|EcQ~8x_YSeQqEtnZP&1UGHEP6ORi&RARja5yTcx%p_Fh3XMs2Oyd(_^eR!h+; z5+Y{o@s0NS{od=j&hwu0-se8|InVRY8=|Ai&)I z2CwV_x9!Ez$;CFFfWbh$uj2m}uj?AGGe-CdgOTw07u1&X`v=G;I9;Z#P_vPssLDD&HA7`CT$U15qU*&Z{LtM~c_m$hOtL%0cdxsZ$ zM`(Tzw1CGNpWDgM0v^?YGfV!b_NpC-%NoQP4ROOjy$J5vuZ=6h%{`2y@A(RD0~U&X z5_dAWynferUD|J5CgAYXz`AU}Uc{H(fD%H*wX1RjOX$euuXSAoyPS+IT^ybew4MLK zp`ouXw(uADwGE^EsweM2P-pWU`)pS5We_fH$4 z{Z&5qD}{W{7rO_?UuV!FUZ*oFyJ4U9Vyge?Je~f7)rlaK!-)H=KL{d#4?guDcg}9W z!Zshr?kCh?^`kD&&acjhFnKV+x)Cs^v#V%+_rt2;v*pcoDc@~Z6d_39#F-{xA4czl zlw;N2ZT=U3SU+}9(6ylzeo)qTP|!`lU^Njt0VR8g3IZX)y*$6TvVWhG{`qsv&dKoN zx>CqFdi$Wbcjryv*&KRZE?`3ge$+a7`V)=M=^$K~O_RiJ*BnBjZTH;&%f8zGX**lp zI%=BOM>cO7#_gvx9QXVq=Eg^c2l~1?+UrY`5&n+$3?~Qp%}wmapSkb7yT;ni?C*bNpW!-ab0S z5eofUT%4X9A8Ko;tNj!guB|K$-pAoEtA7@zCMO05db>NDo2#qy&ADzIVpjXw>OPm| z20t@Yd?2^9#w-s2(B0HjQ8M)T@#iPGr;!l@V5#ME+CJyC#CQf3Wl9i<01pMlQ-*vh z15y&|5Q>nM9&T=juuDZHI}Yaaq2*kQfcl;_#ARB ziDj04%}-2`?p5j+vp6s?7+qiVhu%{{xNuHD>{if#^kLBYLzAhLbTc}#RCuwm>Ktun zAxL@!S@U0wgA}gJyH2>xubVQZ0Ww@w$u@MCPZklrE6q9WD%?|3u_%92$WvovpIz*s zZlFhve1Mjaj?%G+pH3pRvQnyXXRvH(>)v+2o*3<3!CU0RYwT4+#fadsy+OF;$y=r; zUfk}_VDPY|QCBEBEadHnW_?Hk1>a-{BEb2b!9bcQpCwodX8Y_wi+jNDKt+_Y(!|b7 zC1BIZaJh^%45mLR54f>A_P%H&mo*ep^pmYG40sD2qZK1N4zu#m`f1Vh_>=0&wBB_b zIjG${_}nj#taT2N$QIXvSQ@r|lyofGsG;KzoL%h*ee?mJ`^{370_(oyUu1L~0YN8< zS9D~~Gv}hKeDa0%O<~f*^ZKG1&AP&|vpRH}x_)?f; z@qOIE8>#2jw+;ZhddHlbcVF>D?68JjFXV_m5d5HJC8$S6%ZZJ7wc$k^;r>ps;hcIr z;GJkZswE|`jb0*0-%GICHq_wI8h&KXqa>k}LoNogog^|@IofL*J}ZV4dDR^SbnR+g z^O|tkIS=>W)g0sCJ#S->a1Kf9@=@m6#1923{061klc;HKUC^sBz10l~=}tUcbR4H> zVNF8i0P|Zf-`-XEAV%qc75H*-Mit{u9>LD&wgBK5)P|Ip)Ds6EkE9Kf!=(O8s`)NE){YI@=wU7c4oE^uIqQ0*| zoQh>zgv2sl3MPmQ1|xj)knjYt8MfZrib+fwPiKHx6+m6v5Y>Et^`nAfN-ks4=2C7+ z*1V4Cr1~{reB@$GBT%&%;_jzRflS%nV|O8q@N|aT z{P+y(1nFL*LqPN%u*OIyK+LEpN!JT=cId#A+T1z9oQNJ%G!G>uYZ$Jj5e3xYqa-B? zcYU}31TFC-GHQ7Nd_-gvZ)tyH?EC%JE3DQxRuL7HmIE&1x`AitO2&`j3#Wi4Wn;ji{2l>Y<=vleV>hk!V)P$@Xk4p7LC2k>N-8uUEMWPzX zT_kBh%do^`7D-YW!f2o<3YNhRvW0=Dkza${_ZLj;i^GubJy;hCs(x^w2e7D2MH^n! zx>|Kc<~*FvgQ<8ZxTPUtr;W)0W1Gkl5{?`Cu`%@E@$YI z!co~R_=ZC34pLnV$qRAh$1?o3MOebk0#<3?i~Q)1-+K_?O3mj6)^z;l!SWTE5mwjy z^H3wwxsUc%S6qiTGxw<*bZO1@G-ngqw(6y2v&g%X_=_!3O1_e2NC)uNHLftk| z1@KvRf<%HLNF?r-vcL`$i5TZ0ihoY!HK+p6YsxUF-SYG$u8?+GwwsGuQd-kDaS@tf z401`hKf54RzcR$3_1H%qhm}cOi^D2sh$#7S+|8ay^Q6c9p)^2QM+vmIrYyaLY4r7& z&wiE6SER^b-VTJS$a1W3D?MJbR(Wn#q1$dOY|H_lgeiRfQqc!^HLuE1ks!xtsh?G8?k6Sl69u)TJF}CXCQ`K>xs~qZt4INS zkjr$$wk$!HZ}XtQB87G{TfdW~MfF7X>@@02&W8?@M9iKlV~CSx?E$Q87_)l=cb5o9 z%#Slq8DtT7X!SZ&*?EB%%mS0Ft6=or0V%7M1Z&s7gBA^T+7t-arIpfO+z7CV9P{aiWPk&0bCsxm)Q(M2N;@O_ z%^ak)#om*6@V;*6Wqh$3KppLOdyf@aBJUQ>ade9mrBHFfA?8DaYDNQuVP}ElC@W4u z>2#eGa*h=`!;v*^ST|L>jp6XpeJ=WtW}yvXL!5xPA!peAfwZFZj@QAA`n`{utsjYm zx`vkL1m%I^N{*HFujjD7dth)N)Di}In-%>H1bE`kF)dOwD`}IVo%vy)hv~_C z64McICk-HoEOvv$&}nesg=+NE}JL%caC6S{k)jRVd zdzT{Jki3#7Q2NHGcF~XPp=7zSV}ES){_q&$rn!(E^uuJvSwVJGf^|Ld2D6;C0!u0( zO!^HS(n*vhmYE4z`s4Quw;KEf_LM7h!R0&0Yd5Ba)CZx4hZ>a#fKMRJD#v`Fv1ik%dt+&Uyz+gqmJSCH?vx zULE8e5KqayP{vt1BtrZbB-|(TF++AxhMD)x7m7fY`tz(13x&y*kP(|Y8GC`u#|c#& z-Wcz?G^`P+NX+l#r_T@7o_%VJaFS%_k|9sbymuX(l|^nTjkSRk@&^(-c$UN*h6>Ia zlk25yL@7_McD}9DB%f6U7dlN?7Y!FnIa93@S40_S$pk7)u7z-YN0GdmYRA+&GCEW( znN5tWQ#{(e2eOPopk~}A%H>rCfA7yvk=HbgsQSL+%8(txP%hMydcRT7kU6FgVk^1- zENME2uT|0{tze2_ZE+}n@JCTO7&>SGsZ0S4^n&{f}`Pyn!N+gzkwl+EJ8DXbPXwYYo9T7PLoPBjvHX!P+qZV&wFN zs^izgT=v#N4VF@1J}Ppmg6|ON# zuVtq{ZjwLHnOXcVKDxz$+Zp6(oC)n!tx+w%&oECzd|(r^>x#DwTYX^hPO*<>x_DDe zr}w$RXYQ{0xvD1$`(N*J@U)WC2cd$!%Z%pUvE`Igc$Je{I(rzGp5@(nVHYVC6wH;= z(`mx;u~o`9J&aj0C|NkFrsQc}9hI*rsbbCl!; zoW(nxYV2Zmr^wr@ZWpbL*v7z%p&_4iQ6{Ji{CD7Ev224U`(*a|4qu?oQ*_F|?x4Dh zxEz14=X)?i(L@?JtlJXUOa=Va~Z-<1}Du#okR;cvV_t&g!S#EStet0xm ze>9RKPO}-d(_l*%LPL2br2EpBndnH=rS6dpn<5I9!f5RxRml_-PuvLrstVqXlDZ~H zWa2JzUWvD3^J!Oo>EAA>YR=LwfNK}y4+<2N)t&3`G_FYXuauz)CDWKSU?AbqBWYCf ztMK+~Axk(^3PK{V(G{ut=0RSO@|`H)MGxHOxGiz)D}`FLt?Li2{!=!^sI<6!P#sCF z30ZC&(0<5@txK^`FRbe)Gl|RVGio*mqIQL4xlS(fA=>6L$lc&r276+2CESj~wuTrD zsl|s9HK#LmhONMxx{u*GK<4gAwurvV9FmDk?V}rgyOA_7+H^KY2DIo51OH_JY*(RB zc$BMbKb%<0%)Gu-O-Z@#hy)IplO^7z3auFdUz^<-s<7%xJYA-sC2o1zS6VzQCKvQF zw7iUaLPOj-Up8QiS~R;APu(d7yp}6xRq1f1fPbPh+_Q;Ci;({T Dr*Ua~ literal 0 HcmV?d00001 diff --git a/www/prive/images/index.php b/www/prive/images/index.php index 366f69ba..93d338e7 100644 --- a/www/prive/images/index.php +++ b/www/prive/images/index.php @@ -5,18 +5,18 @@ -
        -

        Index des icones de Spip

        - -\n"; - } -?> - -
        $file$file
        -
        +
        +

        Index des icones de Spip

        + + \n"; + } + } + ?> +
        $file$file
        +
        \ No newline at end of file diff --git a/www/prive/images/logo-spip.png b/www/prive/images/logo-spip.png new file mode 100644 index 0000000000000000000000000000000000000000..7e4ca8270fedf9b7618bf40166b966774fcace0a GIT binary patch literal 30305 zcmaI7byOX}vo4Bk+})kv?(XigahDCjo!}Y>?(XjH&L+6K6EwI72o5j5bMLwL{qfG5 zH8b7QtG=(Qt7=X6%<7I*Q;|hMBt(ROfIyL#lhXKC9{;;);9>vWgY3HF{}lx8(z@=N zPFC*U%v?bb;+9V4AaZ#JGi#6r$js8)WgH{~0Rc^I1JrfbRaO$PaB^TV`;QEZmxJ>^ zGz5f@sF$;ug&oM9+#FEsF` z=Vsw#wqRptC+Fc|VdvuJ;bCVY=U`*!U}gJv@-VY=32^fWaPX44}2M6;%31&BMM|U$XW=A)w|7MT^ zxmmc{IJ?_8IgUf4k|Q!&tq{oLSjf*#6U{{}xnM z{{I(saQHvcZtfbO|7-96C$SsQ+Zn{F0djNlaJBdsI4i3EsB#vNbOo8YJGla#ob3PG zi)vq;+@0LMIysX|YVwfNDVtf?IR2-B{=X2)$^!C^ZtiA|79e>kVak6TEH*Zl0vwXO zT)Z4I{M^!<671~KyyDW5Y;72YzyE2h-Lj}4C{YF`~M2{e>eTh zpZ`?X7sUP>J3wQU)d8j2)Z1A z?FrJku(nHYRb;Njd+6J0b*#-KxSfgo!pTwX=#*6I=uwJo~$UonprS*m~CmfF<=qO&JEd>hHmPF$eV@F)RsGkIa0?~*gnMUL1(5Z9&Od+QjT z^w?(k;tIKL;}2Ip!LQ6K6F{RUGLRM$oGO#|E;(k$RZ>F-C&#@n4BAJ)*ITuX@ZcLe)#xR?FxG%guNhD6|jG zzT$1WN+ZRv=`DXOZ~`@pZOi1);~0@I&wF6-HSp^@fv(?qUjj6LINGb z6UA;K#rn&$=%CQa5i$@^XKE{KGT5LiEM`*l)T)ZUB6|kfkjY;Zlo#sZFS+{4%!H ztVhpZb*ZgHLQ=wX=~VAxghIanm#LrT4YP+8|GZ-aD~6M36MonU5pln5z20>H-6QIc zu2(`XUv&1hVWVwUk|`iY+8G=P{R9+t07GT;e2{7nk)(CMmS+*DuX1&nF~v$dARf*# z^sOkMjM)T2vA{XkOnx_$56ia@E*&;m4&CaYQvEsS<|lcfdH}ioL+~Ai^aAhp`qyA3 z_tuQDv*(xKW5Tw+zn@?!cNhXET}y1KT1CWaxH@WF_bq%cOlU)u3tocL)g?c)C50;S z$*QN$EF3p^JZS{oJ?pP0*Gd;Z#cB*%U+2veeBvt^SSTGU4nk7sUVEQ{Bm)57-uTBH zMh6`_a`$#i5L9AhEsFkBU-WF$e@#IDJHn`ssTG?CDV79{A@R!l&W{Np$*vRKP~lre zMPjKA(#4H0MUTmf&0Su3{DGMFX^z@CV_VzyVuGZWx&}kt7KD=)sq+otqZV=~T<`jw`ChwXr)& zS>B6-rG*UF@aU_KKtIxI{q!i6X7p`rZ6gVm2bH zrUbeuU`!@~9w7q&wB*#Ce*#!4mfIPsMe^1M>C37*!QXQ);vvV~=de?Jk1davN; zq55lIQjm5#?rI)K(Dc@Pcn};*4s}cFckp^6WfB%B#Ai9b=V=v`Ov4r?G@L|b@BzIk z^n!b7Wxr=vOhFLh{ImFL)Zq7VJqZ4SU>KU<1TmTLg4Dcu1a&yACqk3xeKyEccTKa} zmW2kAFlG7y*PAE%D%V?J^zetR1jOn{$r2O3yCY!91EayCV^RX@%ybsN@I)9=TFv^$ zgmKMYa32c8JI2;+eK-V(BP$DEWFP!@jQ((w#-n^wp$&-IHGCWRjG-*cFljY**W@+$ z+%2?7v{Wzz3;TYFEm3iNK!3>ojTB70Q*Gx@ea}|MD*sZ#3MP5sPujZ(Wp8^M$@dPB z0|(_il8O*2vLZ(lH5L9k;H)>jh_26Ge4~-6t{_6ARN)Wjry}6w{8sjD4836Rau|{p zvROHez$?`2@P!ovL&B$(V*JbVB^p;B%luk zq(sVzCW()+(-UNkqxwN7;^B2d%&{365ghDgY-q9sf@bO&_zeHdiLV|zpTXw6a~9MA%VQ-;%?9nT7I zLKSbcn-@F4>ry^CojvI+5NQglK4(=~864KM#C@R;F@dAU|NKIw$Q*3L&b|T!#c=Sgc+s{t))ah3}5q>iww=7dn!C}{;_d_9R@ipZIGQV5Qf4o|%8u&uKgno7Xa zo0R^`H(BGk$_CBwXyg@;Lz!gm8&FB22hq2%Q!j@{Q?UQ7Vp#W8R}UqBai6N!)aNkr z^d~`NlVaePzFRsdYy#jVDU^GM|1tPfYCY&Zp~L1N&{`8P6%MKS^==D1GD9b&Hvllbh3^rk=<`t=d8)SvROSZ=%0<109M1=Q#(v zPh~9MncRB?{O?LV0CsL5tgB+MO1gWcFT5)_zbaO)Gf<|#5|KUVZ_ZW}c?h$Yh)GDv zHEK!8tWvJXiGQ!v>gF8b5iEjdl;sJ!yg**#Z_q5 zlJCop%{w@iax4Z9tbWIL(FSFUig=F)yYO5EAG}j3ByvLf)5~9w@x)O-@#vyK?{zA_V|U3QAP(q z&nc`(h&6hv?GxqnjXVrYQe8PpA%thx9qS=Z)l1_z2wWD!IZ9mLePioF+U($3D?@=OPZv9^{B%4CYjKE!2xX>>3pT>RwgY ztT^tLuZi4T@qiVpoMTu05spl{62YX7=mLA{1mbgvD5P+!aR6L!B5*;>){~2T@KyQiKd`m*D^>C!r_ z4XWjY$X;5o4Ww8Cr(NYTR@VLaJYo|_n#d+eSQ%hNq=$uvT-b800b7Zob1DiFKW*S0 zyW4v&4JFiNVekG;0K$W<2s9UMzK$~lBvVPEOmiuZUjGxBP5%i!i3wxsaY%{Dj5JVT;KprH zYleLl=GIMs$>-xFPfxgTmK&XduuU|e>)0J1DZ2@ouYWiPXdoh@hKP>Lii8|w51#S^ zj%^yt^uex zO$7;|OW>KHB!Wb4Bt8y^={Py_T81WCMt?lvV|V3>sO-N)x2*dQJ;)~8oH<3uSDrpi zSW(SPL3cxwEAOxj&SU26mX_i_$)o`oV=XYNDq~|^yoO;=c<<0MN+62%LzzDX-)f`7 z+nONP9_6U(et>ymvcbWP7`w@f2|{hiw}U^(9k|7{(G$=Q^b^Vd_NFM5B7)s{7+`28 zN?ES114rN|`F%=3YM+9fNg!$U^-p7jyZ{zWhQsIc|MC-k6OF4(Go0V#(`+L*6;A6` z<4Yb$+0`1oz#Plbn)n9Si-lIRo100ps~KJ@z|Sgp+^bQ7lpvg@8qBNwHSNf*JUCui z((f2jE^iG^gPa_O9b{h9@M6IP9d7=xC$8 zFguEVKM3E$CW&gLbpl8TCo4;fg6s7kIjd~^lV^O+I%S#~1YDms3!I^dA;0T5z~`H1 zj#bAptp5gidq!EQRSwKp%La!K(Lv-n>7uzh5&3)*ft0r(SfZ1SWLt4*AYcQ|=z>Oo z(D?Rj&VQurwY}n>*X2aBv62i97FEEwOISz5gsus3T{yb3a+L5GBiawrd(n%eoN8og!%d?(sCE<2)f($L*PYO<&t=+kI-?<01*U8>(5CSlQxxiMBsqqS3v=35D%oE&&}F z|6;OeYszhkpb#z3`-Lt18L`*wU>+soQcy*{U?4iPFuu|0Sz7W_7GP$02HU#(CSK0tft7_sJpGCF0meh0#X!>8_70Pg7FV5I=y_>AZ@8e?aS zHTON?LpSF)y;kLDRwN4UH?T)Q_)z#+7Q`v~^g}e0Sp`;6cYqEhk#&tcgp2cCFSCJF z!1z&^8mu;2hNoPruC=rdOU4qxw1U^nSMgh2XwK+Rm}Iw8@U9`PblIKsW`LMLL)n*5 zwXEJ1w531nzxoL(-tSdPVf6!-7)A;g{;CiY{aEyXSHb@(17t8ij`g2AO%W(p-;lB# za4;@A)k&I`bPVmuJ>*8$L&QC>zoFbEeuY;OiS%(04Bnk^cxuHt33v&xG^v!5{)L1)iquEA6EV?v5;*MA3#h>OGEynnlCasZdF zioM47L%Mns0CT~twe!RL>RMNI4Kb|(79nsn&~kdt%@vS?Sjq(0;FE5RB{7UuXzIz! zo-4jlNK5Zm8{*AyO;7llq*QIK^|Z)GyT+w5*Jm5O7mvxZfQlONau2HSG`WiW5S+(` zH{sm)jf5e|MFA^H1$mtW0%YB2Nu&8N+%qTzhLoJhY)=(i#}z`1)o4jdJHPqu%JQ_@ z0L^Ei75il0!o<{iu{@YWjB702PGbf~y|HaPm?_k4hwp?~bvP z47`^6V`w2Z0HJ>aY>W0vES9MBuQsLUxP401UGqBI-1ZGSZKc{6dR>;k3ce63xq}i| zrsSok)H3UIW(CQ~!(WKRr|QDCX|D$TE!2XMqAj++Yx~#5iU+>#*I+3xLc$isP-tlz zar)MNg=l(hEHaY^U5lH52TlDoQI@!4KUV>F>3?LcUEbE5H&6#`CUv!q$5&#vsn>kJrTos3 zUrG2oid}xQbJ&ynmIp3};WTyKP64kKM@KXs!|p=*??Ijtw)xk_!+41SWU96_sJCGQFlbQk^1K($(Z=Sj^+;3ucF zHU+3$xw$*0OYlTu86m+^;GZ0)t zd<)Lf=>tM@0+%4DfFmWyh{J;~QihH{Nj&bT^|K`m)I%mR<&2yk|0bh;5IM4PJ7}TZ_y)jUXAS8Q&5Aa7Rz>_8DSr37ZAMMoy&7Ne{1tu~VzQhQ0@Ov#$dUOy zhhQ0eBXojvJ^A+z%-rkrZ2&E5KeSpg2Rzu_PN0-r5kkcqh z9g)h88%9nS5LQG5=rqGX0HDklufxnk5^BJ?aW`WDRTWvkv*fCV5aenQh55AICRB%u z1!y2HcKbEg(Qm%4Xo6)zxAghtfLG0PX`v{tj}ew?bSH=RGMO+=+i`os6Rn|df;>3yy3 zj*5|N2-z__C>y{sVx2Kz2OM|8t3c^8Q{y2nzF6%V(xB#$p4j){F#-){4M^5jzIhX1 z;*IUPE1Sbsxw7#?4Gf=C1bC5El;YA2xIw(6DW&&Jy@bvp)o6Lvz9^lAsy)DA+@~|s z2QT5pzd|5ZTMc3F$7KW>&%8`?m~xzN0=+IPNR#zTY|+z%ZA2;RNdGG)EjO!!b{@-u z=A8-06M5(xO<4~M?gTU}+{i*ki>)fo^2*VnqB}9ASTVm@M@|0R z!JxCVVg1I#1VK7IWlc1$%&SVj{8EOKLYw^fX8fjO=p{Ha6E(>;vHSkKAEX=oHP}f4 zk(3S7Ui4t9-#jGoQ5Ac3NSInb!1|8Epr=meL3+Qs;AEx0tv86xaI@W^&mT(V_|J{a zrG1Uz@);Orxg9kzo7AfFY(Carr`}~+KQ(_qo{3WwjpR=?WW7Qvz*5yO)Lb;*NQg@@ z1MpJ}=?^O?mLI*f(39T}2E=}8J`jX&Nu+2{eaU^aJzv)--Ue%R9e3%~8@p7MmBIwv zEEInAtqbPFD^my|G!HWF0dSdxS& z&V>Gslq5%E%~li9YBHA?=L0lU?R~*>(Hp=!?G~CS43I8XU2i&PYWb1|toq$W&kO-! zTv|Ag-8|=d#u~+x#icwcnR^=g@}*kezu$_Gjebd(J6Y!Cfm!m~F+bdlDPtVc1Cz^i zgk`0pVH(IBSxQ5p+C;!*rAzfsiHZ@IUgt)m%BtOin0*dxpCeS#540dd=aB+PEWK0? zL0CP>%zV`%#4fY-r-SJBVTiB~u}9Zk@%)JDs1G%h7MP&mE9`f9I|xeCs4Dp)#q`+L z?B(xilo4O_NWT3nWF%c^ElZdXGX%=<;XATcIyl=*@fn5gFMUViQQM6ySn$j#S;b2A z$e!tW?Mq!L735D4WbNxmgUXqW%PxP#b+>0;hzOH3UJ>(tE-2D!MG)HHNGTuXxXjle+k~qZI(zb$}#G_E}|>+ zDQQ#?QNe;-G%?o0K~`o!n+!dW+7qMS)*>OxX!`2&2W*3%Fo_M&%aMk-BoE<(FZeNw z#p0e2^aoK{FgJMfp*Aj`NRr-+cvK%?X_Tda3|Qjh0e|_1O)&Yy_45V33IfSXCL5zu zu@ct?p~J_+-2n|+ggxiyF`*lezC}X-m(!*(TPVY%E^Y*jMWT*Tv>xMuZLEAtXs+Gh z4;GGJCqY?Ggy$tlSWJvL#=I2V5OVL{sa34An24~&N$ha2aLCS?UlWGm$5MS@Hq>#t zC;>JE=*tt*TX*z+U3jy15GO%`)VdsR92FE_S1C$Zz^g1#Da5(dK_i$vl%~9)kXC|b zU6)F15;El9IX?>HvdX$&e3%aIloRF2zplfsg-EkqwED&cYuzCAxtZ0=1qaEzC{XLd`gh8rrWN$d!@$f`*a2bEvBaFZ_^uV#snNL62B5 z;?ST{nYvhZlh7 zdQ2P=f=54v6->Zd_}v%X_3)N>SN*!Ak8wleybAovG!loE--Rgmij}98CJto`ekK3= z+a?B?06Z~-JY&gmIzO^gAvrF~&pWLnJN251MEgD$KhB%#|E#3Lj z#)!LgRK85>OR^BR1T{t-WC&@IO`|><&E29gK0zV6hv1ROdPJ}qai6LOsj@Fp47jwwVov1G@RGg93pWh6cs;He7~ zs0|0946O62Z`=|qI)t>sF+~CASwic~RKuqvkSi9rtQB^u^egfTVyJSNnxh>wr=r;u zl52kC%l2YbKlJ0olg!NIl zi!4@PF}XbN)sq-+-Gw85M$e;A&83noE*r3!wC69%pDOi8=_V6AmlzqA{Mfy3H}-)a zt^i@DkEAAf|K!RLXq_mFryq%8!A>U~(ON;~t?rXel*Z;fFAZ6zb5qO3A3Bo1`}nhK z8gy*2@CY}_iK0}MyGfiKuHsMpF!`h|RG)p*TZ-op$KaN`sQYnPXmsbd>2+^CpoEg- zA8Tk&F66lo`Wr3mH;?k#)R;%R4qV^H#R_^8;JMM8y(!&oA}m`51^vWDO|xAK?0 zHHXfT<`_e@^;9OPxFb9l_${Awh|=%)%jw)}qYR{qHRpnEdvSsHnSx<0 zA5{bn5UsL@pApH`yp%2w4&(g{>9LDv40iOGmD&i=%)|Wpo=w;j*+TKnyP1MU*l4lT z=VaduXxU|M$aHppeN7Jy=`m&HkG&Dje*Lq!=g)9kn0w}UWgn?@ceEfTuJgP?y1^$5 zjVioKE`a&*AhNJr;)p$PntoHa;ulky)pw!t`E-X+IV4IO<>bO24pUu;#HC{zBsgp z5=HX6Qsw3h0Lo@}-_zgV=a-6AGPfAH)uXiuv|{5AKuvvJv2o?t6MHuLBlx#oozp^m znR^FSg}ugzGKg-L6feh>9!3O1bg10natRy~xt5^+G_Rn;F5SsNTjC^b*_Ix3H=wr| zm^Nz@irLZ;Gpcz>dgCLt`~l%<2Y2?3OF3~!4^hK}G#3zAL}0jb!=ur$6zIkh}J)n!7yktfT2FvF0Knl6wH@Kdn=TG-$QoOUW z6Xtru&Y#?-&d(vb1rkYsvEcVja!d7wkt?=v8fON7_ ztSaR#rb+01%~XTE2?sDGm($0;Y?MH8PEhw3r2>afg;i8g(X&y1(CPio}pPquw#$z<% zEaTC z=(XwRF(5z`lztzQpaK3sH`#D2o8CO=Qxv7PbY6i@<|?ulfB$X_UoIC^cDi^sLmLCB2Q~dYr`rp8&73&^am4aLv|;U$ki*Ur%_}V00Je^%5rF| zrwbWOh{~oRyqfC_;dujr)dzvF{n>xmzAV}-kddeak?}W1X))w*-46eeaFTc=FMK=BOA1UAIumaeu z6erNmv9T39HUo-Ck4+-yNQRu_oK{=?{(RoHx^7~48+aK0<&@pR)^>?Tm2~Nnc&Lpa zyWXoy@xDN3dVsGpL@g#xI%xKA^+)@sx4E=IEvY%%-Zzq{_+f*NDRE}@gjvt&wMCfL zW($Tjv|w+aU3Vl>b9-MAK*xnZK^}oy=w+oVzrqYw5hBL)+N@=x|DyEz$EznmxGwHUs`Fq}H&9HD& z+@G_b8Y0MZsCbECPBjDZ{Ay)mGj5(GY)1@>+%%0|Hk}1goV%FOi8n5{d6SHhbArm5 zs4y!8D#yvunK&^|oja=7=EWB{zOK-q7u5H6lL!!jN>TotU`AYWYV!&asN4^4_@Nnl zjl*7s%F}=8FXIXn{inOU5ymrNo9{=`nEKpBg-;FsBas&+i=Md+(7s|1J!6(62cv2C zr^4fDSQswQfmQkP2epQji#D_?*Hld_rd|rigGZ5vD(+-DHK|>fPrIq~wz0jZ_Zi#G zI77t4qP~2ruxO@7-opIsCBQ1!KcT>e;Q%R><m)mLwUhE0&I z)DHuVIm1ujk>vR7NwM+xj_;7_+lz-~PaM2x&ahcheRq#kG#}75zsj`IB*Fo*#GXEm zHcx-UiE8uNr6g}tDfSYyg(76CxTl(wHq@Tu>y^6JXptBoPvMPK>BquL8q0%P)p4G) zxVA^eb`~%vx*iY4{vA*nE0`rL>9kDh$ST6udPNXXe`WMFptf;g_;~Ayj~+c(O2=H- z2fM8ujv%U{&en821!}W4bp^bd25L6c2IDC5EVd;>ce?Dfl~A3o)j$ zlvT$Eu3xl7zeOQVafCss^6KAY#bJ}$OZaR$-P582Jy5XS+Lc~JGzMvjC56E=u@G65 zjb=HM79(66PnNC9yOgBaQ}=H=A42T(H;CZ6T4fN8l* z9yb$G9uZ7b>Q3`t6U+=At}h9sMzCVN+#O%F4IDaA@Foxh$FsD|^KHd}Ypi-pb7|?KLfCSjI%=bJB)N5$uuttg`a^)06ByrHNpf z9uXAAKTVv$@~zd9rx%VMOKfFzO}fF??&fpOzJ1`zbkhebdgv~FD|%EBN9`Dp;ICcz~)Z_6`YKr6q2_;lN&}}Ff5ekiHGB@&6H170;Sbs z63>}{m1rN#?ZzC+%`(Ch#hhL?h*G3che=LL=VcTZ$P$IuHfKLJz@Q$I%B42KQ{J=V zwWe>n0h>gnaa*}1tWssuN&v&(5LC>~SUs;=Xe1je(qv3E10##h*lze47t>`z?q$v+ zQnC!_7^xnB{;Y%@wIe_m1us%;!T@W8HwT$cb2<%bN}bxhrsEUuBlZd`8t;`a~wRr2&W@d4y9 zCEH2_KL$V}2=iDCAOV0asG8;0K;GA^*?r~OXKo&$K=rV^ZvCZ_;rurkE4WIM-r>m$ zBWh!{xT06&%I20E(oT!)!aYaqD%V-sv3mWAsNjdzh%iYz&&<$9T0+SV!CtF~ zrVM#=TkwRVx=r8URO@jlNAWwyzqwVr_X3q%$hhHw!jIq-kaQyxfH%e{_HPLY|f5G*qjp{1)Von=!gQ#!- z7op9S3Mf%M=_{XK)Ri;@ILW23Dm!C($w1u_$#&n?SzMCFs2zHOrt9m@jLoH2*6@G0 zljzwn((%p3ts`DX=2u+83}T510@M0K&6!DkCh_4(#mN)oQ|G#j2_jhFfRZ`{jLdiF zduz!rwne%~L>tp$98aYwIGm#NYymLhe2GKO4+_v_2fCli{B?%H{doOhqtv*)5cP|X zyqFnssV=iQsBDZQwNz+wRBal1SZSyPe+(gM9XdJ|{Q^Fz#`30B5V=ABrl73Q()xpH zv%xcV%BnV2@M=5+nQEdo#j)UT?R1MCHS4ggYXBYt$Tlm$u^vo_0t`Y3-oCw?e=?4{ zs-wx?`nim+atMU@YUuRzQT%9*$>q_v$q;AFa%dfH?Sd$BV{g*6KT=FS0M;{D!=<*p zkQMWCgsC<_ClX#u8TT8qxc61?BDTuGXG;#XiBCtc55+L0T$!|XZNZl|Ti$2BN(t}T zMd4bIc6$?5V_TdW1<6wCc8c*Th505+qczdvWe^|P@TNWvno$_JSkQhEn40mK`(5mj zLoJ$;1?OcWV*gC4{&7@!$r>hakQ&O<7ioCSYO#hYq@P@aJl7zb;1Nlb#B^b!qZ+OW zvg;u`|XkBrDzr~l!1*Y z_u82ysj{RsqDE~~g1{el-SV&Ex0;XAE=|Jz%`|U+lM?T|xL^(J(w6%;O$vGV~xis|kxq zuq=NB(x`fFlo)^;{^!`DxK^-mCzc(~B)JmA@`{1can^6QLh02>owOZMoX3FXFl2=f zS#Ml?Wqg>5Z#X5Y-^6(|j81&V(j=X&kiLzrk?`G$-d}nW5xPK8RXQ{l)RG`n3>uZ_ zF0Io@p~{u#CmGAjZ(>JhYpFm`p>}t*&%7u?NQbB0!Oz(&@$tq6C*Z&rW59=26ofW$ z`0C5x5F}@k=^)rB>*1rxD{Qq+c6f3;hf^SY3j(jobCiZ?WOqPVzzV@+#?O@Wlx~a+ z_W?V}5#o?LJ_r)Cx4)n-$5*ii@Jgkjea-NcIbvOSumnH&GSo!ySdOZ|i`3D*XSbC) z5{n*Wiz_CU8`_%yx~XtE*9Rn5SZ0`EBs}?)cm(47!SYYBwt7xLrkA{2j>G;#RP2)|;0Qg37Gds}Ma+)R_flt8 zcW!js3GHY!duK?{nx>uiSv-dCZEGY*eWKxF!W=i+QQ1jz5}fjf7Pj;P#~T|`V1!~z z1XW0C9=CL!uEquyXJ(-251AcA6~}ygymW3y_Os0TBb(6#;4_aqDoCVC_Dtrz>&DpVGuJJ7DCx!PGHI}Rv0D0KL|5QdxM@2F5e7a{I{OJ zcDLm6QGL#D5Cd>x)PrOM*rtP_fAT*lg)zP;jkQUSf^?;zU248M@-A56mP|8V5RYe} zB=W>4phC~%g*DTa4T`f((AI;;pvpi*SymeIC~6LYvWQw3(*pwA8%>#iPN|M5NJ(db9TvaHs;E)RS9s?MHMWCe{*#oU#9x4d z0&MIt2kW31x&(v-pcReDu-1 zWm5#N{(dhIag5=bHXXt{o8N>!NzCrhJWMr>)J(eLAL_awh9{%H3^#I|u%)(NCPSx1 zP08DwBRs7W@(4?HhAUW(mc)PvvO~;&;jihU422WkSOHEOA#}^3DV4}$yAw*D zZEmR+5xCj>ybs_oKnB9lc1G}K@1B5YyZ zlgpUKz1$yb`TZ5mi0oak&?;wq!NE>}Nmg7bvqc;$YG{J$xzfdcP{(!|v?cLafR~87 z$m}$9ZATnF$Lz+8PLi(-5wJ_ua+Z2($A}Nxo~)OtuWNkQ3Gm~qHU3`9JrKxz9#*Xhs zuaSiGgcTPE*{wOKD6CK<$ARaGD`Gm!&#A&t^AK{H+qox=9KsCiE&L2-bU-!i1tGS`r-yZdanE;f zHwP|TZV_n|hZS1SN&xYnuSKqZ8hnkOA($VkXlX8stTOeDQWj>z zd}s|ZU-X=nuLD8YhCFdiFXQ$wrKMLfd>hZz0te~US~t1-KevnAr3a#Gg=Rp``i3Mj zGo6+aP4QeEZ{S=U7`!3kHX7m)?9}T70n>=*PJ^q;^MYEFbGw55Wu|cg?Nj`1Y+Z8$ z(Ixa6Zu5Ecp9OJKkxB~U4S;=}!LSRO0&MPnwMbja3$&#NdK(chD#e z2h_`@gB+87v3Rul@h+V2NUN`|)%^>uZrgdIcATb;2v>GEy0SEm7UJ6C8CDh!pJJx=K^VHtB z)kkM*!-R`VZXKeSQ!libVN5N^-s1|ra;pIFIo4UlSaqziAvX*87c#iu_gI=hGTrVr zp~IE|aQ+4Z+vB?Kk7~X6IyZ3m!58wg6W?QHGr@f^tCDsqd{=1i@2i$Hd(Fk&D3r%? zkD9Xx$4MG#RF@Y_;%LESZsnF;!EZ4-ha_GvZuhNN4AO?&JO%ORp@Jqm4kNjg+OjO= zVY(*zsGgqnm7+Rabr%z(DO7vww9Y!9}C;?Q2TWWgZ^4B@oHz#TB$_OBy2Vd{jHS+G9n@YM?Ak# zXTZMS(8=mZ6K{N|r%k*BlG;g8)!yVP1V}s%qf{s$Lnvx9{wY^GnDho7F-L)JITgfq|+l?8sZmx<5@oh{?*{>2*p z#EE*W}+sXB!F%kV?mZy zgX(N#CaZeF5f9&forD@{Q`h8+Ce@jMf3sxTFM$Siz}Xa_i7o_7+K6B@%>^{FZx4QK z5P?pbb}$lDpnM^*?ffML{y6BAD@dx@w48Tzk4`l4e^frb=OYc{((_dvf5Jkmp@wHk zk@*Rsi@z3fxWvY|^lmZgq9)>W2I+>eI!xbV)Xqz-v_~`w$hjRrwDx-?R9KWyKg3d> z2q0vCPPC>RM%~r#gu$6t=Bu#6I7K$vv`I)Uj?-PQIzO+ifv0o)VB_}kEnB5y{}R<| zZw@ep`uBzxuqlSAS|9LF67m`6)z6JUw(-v=p^^)fU~aDy3lec_!rW7Y&5V+VJX}hgY?CN6g-@KAdxx6y}SO* zbCGXHX}nmYMGcZ(KF9ELV&Y?@#wh5h6No~o5&r|Nw6YRX!lhw$0ncJrXsJUI#XA%VS8O^@VB7X?(TK3xXSCiiEugv90+@3w4;_rQ`#Cj?-x-~S?k?e8ux zS|N!@h(MP;$0z^*HSR0L+|H^_*yHI_t+`xNPbjRXi92|nauE%Z8|4xzHV0F?5d2(` z`Ba$t95IKR;wo*HBAb)wXg$hPKzAs~?c%)8=x1I1l^z-%P;Q6gN-1(ZaHH{iR~Bj* zD7ZKE6!;=lKBw$F@PLoj@qTM$GTyxduG4SZMA%B=9~-@1bDBT?{%dqd>Q2O1nyt%cYhlEE*wU&Ep3KHWscYI9lu|jSWL~l-B}Ab z?IIyq`)VKvmHP`t_v5d)p<(g9@~$(=_cy$obcZmp`-d?Jaw+uh8x9J z*0_7qI}!D>8Ru!^X4tBnKP*K1c=I>Kjk9*|>t{*e=LCzex8r&qc2L6`F3J1YLis3j z-BCnVZjXlAqPl+98I+e7bD+uTwImh-Igf$3s0esy$B;pMA)p-{_62tM4gC6fdz)y~2Yl@3ENi(RM|!zrD-%Ji;|2CRa0?hMFUZ`aaL* z#d`VUeI#99I~%b(*&+_`hd$b4;%F>zo?y0i-r0Ejd^IV6TEk}F+zzAfmSbRkSjgR% zm{VTb^ARv{ziWY|!|By_n=V?;NKN2AF`g?~@4sg~o7>MWXnOJSmKX;PJRaD;VORe@ z0jV@r%Y~>TUV!7jX;(OIn=X3abQR!8eBA~8;M6CzcN+UH*r~LEH{L8Mt zYSuQK+1K>%oyW!Hf8yh(R4Tu&MZ>^I0&1?+_uJ*cWr*H#IgI?DZ(N-@@dxwu6OcT# zr_%Yvo&PtRsJ~CE5W0e6(0?f-4tynUxA&}Um7E`C_B_)>LNwRGQ)QW;gkLy;XnY33 zaE&f{K87Qt>m|(fqT*@2biZ0`|1F+J7e9Ove)m;48P3OR7U(8jI?+NF#aiwyD9pLt z>~(T=SZRyXPvTpjM78NNWMGETitZnz=9^i(_)Dpu@!#Q3|GS!mQGEV^r2yVP7r<?xTe~m$k`GMH^-y`8Waff$8knG1r09Ppa#2~Z8OKn@h@#{D**NsSc56;bJ zj^JE>s0wf&j%OkR%rQyr=WS8IEGWU|g%V3jH)Q6Hqv=3dD-35mYL*@Fha;rScOW-rp!ou~I$s`L^k}|Tg5G)td>9`f~-E69M6ajmgp3LkxDsXB?!N^Dl0vA(uQw*^skd|e5wW;VZ8b{ieW$DntZ*K z!Rc>z;1Ar6AiW70^$!*V?0OWXhx=*(kK^P1$OJS{>}BMIXlfX6Q~Q9bCD2IluLSo? zlmTdrk3EF|O?uE#F?5y|q4~`n+VL7)yVdj`6{dq4s|Tb3nXo?;e@SN})+h|BB)D$; zJuo?rVkQANDvgS@Ag&6~^Ko1bHg!#Re2cB+QI>qcq8|vlPfhl^Kam(@2xTnSk=*Bi zm13N&gb;}}2++q^z;4Z~*&@5iwtGy(QCD&uLHGu4bK^=g|EFbSaeH?gJ$s(wvEPo}8GAwUD101FGy`1Jj# ze~v=smD>#~j6}!)HDVK!>O_oMx9mypyFnWPcgvcegZel=FO7*wJVw=kZSeMv+@EXw zv()5>CY_RA11UG*gjp28iI&0xt?&TK2l$A6-HMfg>>0c0bJO*Y;qRZ&dN5rJJNV2f z$fY)@XXkao0U6q|fxnR>+occe`VqNrUI!QGNxRyh%e;FTb}#kh!O`#^>z3)7`28CZ zwCCYM)hf<(GT>Zo&X>S|x}NJeAf2S5@?2qktsEeEey!|vVh*^O5vX*%{Kd{MpTSB@ zI#K;Fn;pH4)y=g!=PDE9CAc$G@cqc9n-GY<+UBtD2^5L$tulD1!e9|WI+kj6&2%8N z>?wT)wc;&3I?(o#1iJY7*0E!-{HgmO*fa~l_E}Rkkb<*EBXfgjGDRZqUmDp4Po$HQ z<9q^jkx*V<zZRxr# z$Dj^&VE<_NEmQ~hGS6*I%o+AqF8Q9K)jTcKNLJD-V9t~$O}J~obK{PuU+Ujf*2@_y z#c{F{FuiOEdTnOp4^fW|v@s0M-EBXP52HA{c@%Y1ltRArYzWKuAxIyqaF`3Y24s** zE#7J%k}*h;NGr3ED8s6;1!!+9gvNtULF->0h02W=10Sgx*8{GEWIfd)8?k3K)HjAv z@IfW8ox^a&oUT>bbmg6FvWCy=*&wE2$R=tqb8f@&+FX}oI(kW=PRz8O!&bPLki$cG zVyv%k1|Gl$S(iC0vL-u@6=Mu>Ux88O?hDH4G7Ln ze5B&(&EAk!ZYA*TYicLrzAFDRv8Il#CrJ^XZ$QBH`m;{nRJc}@?5nen@P6ZGMCR`H z`t=A;%J4;7!HQz4Em)o{RvZRguhR8(0Hy^s5a;umk)IclfMHF4tDE8tc_WIv6ZrVv zy&>#;qRQbJoIDG}dSn?y@s&KvvC}tE{E4O1k3Fl4(%;=U)&O1j$9q7w6R5oQGVMs$ zdZsoA1;!u~iChe#*Nw#!IDv7Z^23l&&_fr$uxAE6PZLZl7 zYdn5E6sQghl%PVGszoq~3&VJXBQ#?YpHH9&Ugf3@qhdaYORfT5N`&`W(=jdChwyus zYT`dWgdlhvSBNLH-yfP6RuQx7e@nd`cErs|gT*!1ORDUGaqE76%YX#~H zG3*`-;HY4qu2_nsLW~p*Pxgdv@tRS!#Mc!U5lV0ADcNX0)Q#m50dxdk8b?4*ph!K5 zi{^B#0#kU+=oz*j z`1rSA>Su0)cxDXbv4;KzMiX8K0a)>}lNc*5xi4BadAJ_jz?#j=ktH9?^if*5DG+~f zkiy&g!D-F?jW#lR40FiZZ3JQuf!P)0tK~3?-$iL~i8R(*66a{i7{?#A0YNg0-<9Hd zHk1KFp2J!)0{NgUME$c|pQ;3Jo&Yv8(v?T0ouoa~^J=O2-pnFOzq8S#^gAwAoK!Y^<03;AdCbk38M$ z{Nedr+&m`uB_Y?FwwF=7ZcMEx?X@CJqfVkT&YF!}XbF2srel5{E3nz0A0m^OXYhx?t+WTq58C{ARbr?QT zg~qpcK<)m^pmP0%(E9YfS|?G;X0vo{gXkpvTFiml|iU8-nx1+wX)@{!Yr+M;o=VpA2{lR0l!IEm)Mw zS_*300p1ub36gj+A)xV(cf<6L-3nskB&7T1Z3X+x$!(aS6T8qP6oq>rP<(1c?1sw0 z)*n&%6bA~^F}#mC-+iJV(6bYNijrZ7#PEAw5v$(`mH5|ttNcq-se-a5OPL(^r!hR7 zCcpOfu<}cn@c@pwBH+Bl2nFW!bT2#MNDHjsY{oot;;^3R_SYAJ+i2Vm`T8 z9(wj2in_;bS_64TrUfQ3?LnOS%ZZK%s^WRh3n~)CK0R)M?DWmeu?gSww(D@bX0_|o zA*yHnp9eq6FM|V|OriTvF9_Us+l_c<3n!Mw?!suf+2bGGp@Y{mr z{jBMUy#tIyHJleIXIBovd6FAf>VLAOxlYoa!RWq29N5BwGLfMG9P;HclM42I z&`Nv!jr1@YUBz~d0sGhM+9^DR)Jey#7yaKFOf{4cmecf?|Gw4Q8AjDV-&~1wghydA zu>oZXi^Y_5$YVX^u(%LkGLPbZ4S^_8L`?9vZa!~91JJo6$c-WoE?%fblh^|$S+?j^m~*nyO3cbUCb41p~ zc0GyrBd`mu7@!K#Yg4$u;1c_(uXMZD2*tj2Qze>Q_9KFTo#49VePalMh!(T^TTz zwt15Tfue3&2{!FO)_k%eUHzWXz~j7rQM;4-MktF*{)4Y zE=#ARUkN;)B;tQ@XQ=*N%1UwCY_L(oXHDlNhzv-oM|%k@A}|;6xC>Oj$zu?Pzf(2Z z8|9(p8z=}N&y!`kn3rZu@<&#<2|U23%lO&7A%7gNOYDoZn-bG{GA;i68%}h6-1*`$ z-qq!>b4jp2A-$C%%0|?2LMW+%U#kc8h0YWA9b3BbV6)Sq#jRke9b^P5o4c)_G=Sqp zSr4~W@F{gcxBN8KEjPb0jF{jwp5I6oU&YsoLp^)lq4U(qtoNdhJwzNfWoj;0_8~ zT*3pttRpp>-e2Q-GCShy;zB_=k+;11Lb&{z4a7!&+PP={jp~V`KLL}K!K*(nvZ{+M zRm{{7LFr)PScD4!E(~1+X?=DC>gy(K+$t&uGvmB2d z5aqF~B)UF^0ccBE@<&J8j`-8m)4}21U9zTj{tcV$CDKUN*b~Cj&$+d8hD{rW!A2ngz*hi##$Q+;I#@Q-`;zhT<)M`f)WJ* zlS*K=oYAZpWKLg$tVtI1e{mC;#MpJXh*9uCNu<3Q$EK6LR-s+Ic7^;7%1ojNqc(?P zp>b?Q|P!c+i3_1b-R1%2?3l%rm03UM6cm@{yc&(~KaGu`QLxBEA zYRpS+lSHL9CN~GBvSFJ#kfqy$TFrGiwy`jg{!^J-NdR04Dz)Fj7=%4E7q;g zE-tdwt*7E95)??m;Qsl5f-D#;;y8o=C12xK1VV*GUIHe5&zsI)3*U9|I%uF?xY+1I ztJwn{1&{E0u+LafOF(2rOC&29K(yu9!)mV`!_=lJRMtjx-U9UUY=_4WUyNi500K}OlRWfNPgT>*nNsam3~#z<9o+cxt`p68jefyT8ksTrH_)8AbEUQ7w5pvVT0+ zgvL_a1gy|Kq!Kr&+-Y1ygYl|IZN`SN?Ek1tUu^34hBUZxb z6(x*YaBMymU6Uk~g8_SFwL)OaxRPz-9Nsxvhu%|1VFe`tvee7`I#K0?ofO1gFl-Gn z0u^*m=2VOB5S-76J=Nzq<4x3-MwFkpZ7l~{Ygm?Aq$6es86$z2XqRdHn+zR|98_;S6_J+2yd4qWyTaKwC)55JM+{HDVe`vTEkhO~oiHj- z+FA(7Gjj*h-SaxmH&4Poo~~(HC{k!+E0xPa_cu55A76H#E3n+X_nke)fVutBaRiw$PuW5NPFd}T50!0{GV6rQWE2L zjz$4g#*qnXkuEpM%457nF~PFXcCl2XmzCWFcnv~im}LYcih=th3OK-pAgY8=p#*?N zM^`lLee0QbrVm?@_5_8tNgpJG*1TY!M4)yueGor(eotwU*OM@4`FQ84EM!&u{GO0M zi(>6p!-3c|K@~Luovx|tN}Kp2Ady{V2;^Q)Y}xhXv!)SgVWFEW4w>^gxmBnN2frHu zdKipU@`#FOraZ-lSb{Nqml7r zELA=meE%sifp*k$GM@a?$SQ@1NOazWU>SSlAgrWvRbL+J!)qwlaFFYytZO=pMg_ln z4)wD}k~~1c^()OTtlc&P6I<7qYk-qG{?{kpN|g*@dK`{d@xisnS;Xs#*W)ujFbR|! zagi&zP{?Su?Nk;rVqnx~KPS}S6CvHUI$D9sV@II*$YGrjF<^2Ka7T6K4P(V(a!^!3 z{Y5Uq-$e`ATqoW)1m|QnoBTHmBPNQLZ*Qxj=%qC6h52I`z&9VF5k_mDz13&(sdk)QJ$qd`XGet5sf8 zYHOCKS#Ud*jX*5RG^^nPxof2hi*a(-xtMI7g|WF2vr{T3T0Y()HO>_}zLx37fF4Qb zOjX9Fd<4PSqIM36nPGH8J2sQQCv{{H8y66C5?F2}uwSOnkm%IKiAKQ(6V?xj+XbM@ zk(}HnEGzB~`DbylSXgz^<9BUAQB!c6Cbs(6kf%Sfej`w+UJkM5LNA8B&Gw@>@$MsO zBfv?$^|FoBGe+x|$rFdJkq9K3D~FEfhO91Olchu_sw2nJZ>c5!%VFkTG;r5CN0oLv7faq9AT6 zT{6a@zPATYCJ7v@$|uHfDV?|Oflx=N=(~CSsfx6RaWWqaS7!psN2NT@^?3aDLi>2F z*y|dcoDE2_?vLxEql}^$`|X7W9BRj(pTh5GFSTLq_I0p@%D9kWY~vIpe{;{9(`V;E zY+ZX&;2{@EgTupX(k#?YOBY)a=p9yQCxt8z+fQX7qtEXN+1C)5?bXhK_S-U9hhUY9cKqk5A(ds0$su zz50(=a0ULmrr@sw=H)IHnSd6k9v=IdMw=F`JIL6va%d5*_`X*_^~!Caj?SYPUxnnp z-EYws<^;7rb?sr?=U|{){oSKHk#Z zbOyPa9AJ!h?7IHAV<@28ko& z?;;SAS$rIC8tH6xTi7ffa7E9Hl{UKESLd+I4VX{nHzUi8Q!Fj%os^?O#U+AK0fMY} zs7G?V*`jU=2Fs*p#M;!>14^yFIf=Ic7lx4~6lYNcd^%DOj4JkJ3K^TheK(`H)?%(j z!pUc$xa+dO*;nyl=c;NXPQ*!^a8>+{l~f*YrG9VOb<$Ux)ky=iAmRi**y+NvEA4+8 z4aL1F{+6H`!uHo*YCb+vgXGb@*Y>{g)b*SULF&Z%;6aoE5I~P1c)sS&Ked7GWW{Y4 z;qtCiUC8kG2`*%xU3DQNmL`ehXiMj8%E3N1s-5)RtR7w5FV>cfX7)9*Vy_?zKe5zW zsS5t5CS-G!tz%_)Vv>C*MvTfc51<-oRve`TggTB*O2dxih}Lz2?ZQH`XOkaa>?J_o z*phHx4fP}eC;ZK%n=zSQ6)FTLiX;Kfk^mW#hG;6_l5|f5sSc0n0_!CR&eY7@*jg4w zsrVPuK?zYq!ozU_OLh3j41RY5kAG1&MSW9IS`^*Gw`%4($&D5%N}rkw*cYNzm_RS^ zc5}!Z%y|c0V*0r5yc@R(tg2@rCpmUE$MWNi|-q?j(iFW8A&I&2;MhnA)`Yt;pq`$eIrvS!&{(`2#222gfs6H}Q(pkUd|Cll1{) zgN87ZSG~YsOs(!ki^W=70GiH>%o`*8#l`P3YEhus_p9S+R-7HxPr?DL@6sLe&b0DX;EG*n|LHG6sc-Q?Wd{3AZ<7s>9h`^;Gp4!4`0`orjG1=9HMe2c3zU zE$yhvH)AVA;urIrL*IW=a-HC3Yt;ynRu8_iZ=S5pzdeP(Y|X8}?DZGIWj}b67V*WU z8wr?K^uE61CO$iHQX=hsTxbpl>>-K@%1MOjMVazkOGyEzB+`1seTYgJ#!Ra|N7peu&dks%jrsZ)Ls7L8ibf# zO=xny3McD5btCS5CjgpSMs&G%8!8|V zb@Z2|2)?x_^6lzMctpyNPYCwOo?VEp=*XH}*Br~1KOefQ!opw6Oz|cQRnq-nPaj*xwA;GR4$1oH_i17!mWrM$DA=#2; zX{G(%eed@C?z>OBTCJ>oHclh6Z)Qi5Exp}$@A;kcJLjGce%&2q-%UlCja*TPElH}m zKNP-hE%RWqjTZCsozC%R&Xj_TFH5(Y3C}Zq`8cn~+NtGW4HyQF$=Dq_*gH%wk7o9z z;?7^xj;OJku_htigRs7uFqCy^7NAmd`SAORm#B_Dz{13|K%%HMp~2Xu!D#CNSe1~f zUf>Y2&;SLkygo1KtvJf60%cLP>SE>Ga`_Kq$h@OXyXc}m@)-6%Vk^+izSF@Y zgY;&hxVy8>`5MWfLd2byq7UsKpu)>PVk_i_2{WGpNN19yP-ZkM`g!=X6g*EImvm)=)Zl<`Pyq269n5MRXzV;g|oga=q zJ8>BRASU&^5?!ca)_^fQpZrZS< z>s8(_vw;0#U?MpI9r?0sHEkBi%N_oT232KMnE@&bK)=X~a+2upyGXnevWMR-1QIX_AFUw;KH*gr_83q?IQIOt4|yikmR_eb;Sq1!?8 zo#!S`1Q!ju#_{K5uy^t^pE-J(wvUb%SlAv8^HQN;ZeV6`Wx7bCDy31)x^#qXEe}rK z&n`%|4s0={-Nh{6R};wq{BMhyUCiaROiu>q{ZSR!VSe`07Hy6DRbXawn1e%f@2ab5 z#YllhdPh_nQ4eyBRg$H1&i5lP1&IVuT>hZvvntUFbZ& zER{to@TPQ@y{E1ymT#<}nJ~JT>yr`Hg|CQb3=UPSGUzP>k3SkiV(ko0^T;r5JT*%D+wJGN4D%a8HpY^5F2Wk-q<&DYvg#f# z>8e8IiG?NapCJpNwzgjtQiB~vfrjjYEhdA`jGY4GUVMr9TtZ5`faOki7&x3@d7}g}IkE?JEAv8MLetjT}2w z;QV2xZ0l9hcEIoIdfn(F0H$#m?=WX5M}sFuXp=0{=$zOW7nS|*c@(e+RE}I#_USrS zM(N4G#C2b@-~lau&k`kO0h{H7o24nOH-*whK5lx~hHp+=5bFRi(f;#}3M)x=Rf-H! zC}&X{>rg=lbwV7Yl>02Z0-skuiw0?W3cLnM*QO5kF68;`D*sdZq0c(WUoCUyP6_Yp#;%pwC^zX+EV^H@S7#wGhSh! zupp~Wcr_Iya$?41H@W6I7Nj*(MhMhIMiJDKaf=)VT;kvmy)}}h9qlGnV$RK7o_sSr zb;A21*03t)t8Vy}$?OiD6q@RUhXCPWM;)PTVoEzub(bV9F8dR8u{HO8AnI|`psB3# zCRk-Cf=^^Cw1yRFW`ao6+&#=3irfD}G3)UOkDa0ZlWBU%W#4&@ z^YwX>{?V8r^R5NXnQ7I7y!=nI7<3mkXbdgWLeJhos-9(8WVpdNW4~N8g&G!+CARBy ziE``;Z0xk?ZCCuT)0dCfI^Yw&ZYTst0!3re;M7QgAlwtN0rvGayEJXUfOOxmyqwVC;YxCU0Z9?3h z^5k*9hF!r@ev04sN>E;Fiq*WUSxReGDeZ=k(t`dYL+BDsX>0Dij9(v*vR+_-?Az~V zknV+oM5fWLtWeUL9l8jR8G1~jFFSZYzf7I+CwRT)PavyNu*?k#vE#!zYI`qD`?3XA z$_|ws^TAF}K2J3BX-5m3jju5E>+b|CmnsFL>U6hoAB@0as%RWrNm=kGOpH_lO_XF5 zJ0l()W`ORPXG74w!&L0A!l~r=%Dy3eg#UIiTh2NfY=tU8YTMEx ztbn$VP%z`gZhv6>PO^UN^9aA?6_bHYsQG8&G zMu)Ssla=-x-SNHrmuq?NPx;MS^%f2TndYVaKED?EK~(grDS@^y%VSdTB=|;#eOyJ* zKpDRWP`b?J`uMe*H?F6{+$e?k3JcXh?a4%1_gP(&@s!Zj)s-&c*X>ar1b=^w0hKqX z2Tj55OIK(i3*5=LwZcrfkIRwVO~sA-mdGr>TR0yxd{fiVLwy6VO7zklDN^!Go^1A) z`uJxwpFVnN+jgd{U+t{Ow`&VYRKSp*p`Gt{XQrZBac0C6WrIlS@@5qc(hu30+5)=l?#??e>pa#$Tpen>Ovw4f3AtaKtrWi@hvty#PH1=k~?Sd%Nc)HWpHjirA{TE@;qY2K-s-nk5v66aT*$ zEs(`vjAu|qQ>GLAI|maM9qMogvxfL17PPIMK20jStI}Db)mdL927t~sNZx8X1rgxu z=X$14rNt4-s3Cq1Itz;Y<4zj~e|>k173i{bK}A?iqZ&TzhE8$^LQ~nMwRoIPckUi&28{3;T3dS_h|{=W4tk)ZOVrZ z3!2TqcRguH+EyE-UC8f&SKSfH-H{cUsS+FB;^*3f_u8B=DW5dQSC%WsKiZe>L>C8? z{0U@q3Eg%ELzlcDu25knQQ^;liEIN5@)Ic=tw&F?3_Ze>Ql4M16- z*S*qat~=})S6*82Z%O*}5L?nU{IwfVLq}E{JL8-d0U`(?+9>7(oz4oeW7wee(8LL% zBVB%Q#4a1W7y2He{m3m$rLvQwv*C3O1zq-<{`}C)$Aez3>%yPiAac6vXSQsgU-oZz z%at__>jVDCU51ohEC83Vg-WW7DCDlXX1ZWn@9=YNM;$2NYajb|C%PI~%6dTIT=rU4 zG+-YMSU`B4QL{jFa!UO(ghxRD%bplhXj?p)lCluK2N=yYr68>n)4FTc><^;sHz;in z`-tox|71?6aCEc8ofh4A$oD>$^1M$wWqCcX&wTbI=P?_ZZ%M+$X`_U-ikpSJW%cs@ zy~aTQ?>w(_!j}ixb@9&!lr3;J5H47fpmDS8J!y$vCV0>5%%(*)$!mFYt}udOQwYFT zm_ab37f?SevV;z{X%>L5?&%%&Ah^9=4#nCIX1M8CAs) z;{$Q?1^&D*)aE9mq7)Tg{A~(Hd<={M7Q~XRQz~bAmfH0L*gCubKxe5%_yS|kFUrr%uU9J9q*UYL|~j0;H`w?tVlL}Jli zlW)B({5SZWR^S)P5!c)~B*f0TXOA&}5tHZ;!L)~d{+JmH@dZC{Y2FV|w!k@!fZ>JX zhJ-&U*nNb5JQ8ZxP_w&|8qS+O+vcbmN(K>*O;B}mW_kwrVpJTFVB`W zF>8Wqllm*y2`GSh8T;oe3PGT$!F7L>eLx9gzo``C&t`=|Xk8Z;n6Lmy{9cjw)G-4( z9hlSqNury@r z{7j_Msytw1K3jU5vWuk%D42ynO6k$V~lYX|EeYWvx(w9drCjT5q zGS?UViK6!g3JsLD>A9Pr{HXY0Mdrn&+$*UC&JV1`4E!TWYuRF=IW!`*O)PlR{$}X2 z?u!`+G(BxzM8JgAgvCU=meJ|6jUv&11mO<2Dv|z2Z9er<3!EQJV3vbYB(|6y-H7Up znf**$NOJ#h)56ApKja$J;~KB?_s_|TWZgzlQ^~+w%f4nww?=Jn;TZ6tX73%>jnjS| zGs*Ggw`N1HfEG9}fPf*P9ol|13)gi8UzLP4NY86@eWKa-vGp{E-Ejj)DgR(x1nUMD z08wldoTC;L3avD~e-27}S+j}^Ci>^>VJpyQ8Q*2Pwn@(7HS@JHLn`C#yk@AWOrIT?xSC4W!@a|C7W-Y}D1-EG zXUkf(zO4 zCWIFW2QQ{9^a}cFr-w-^vvAEMgU|>PG45ngqT^se^*#~}Gll9d^etOG(^|pL1fBh9 z(xM}_@l2N|x6G!sYJu~804B6N{7M9V)@CX*`AXAWpFNuez`alx3Shp_ZX>_+QT};@ zKTFpQ$pxUX@GY0=1cOTR^#9YEX-o^uc3q3RIbop*`VUx%Jtk%u!)Sr?JgRSjtG|gf_P7BoA3 z@)kJH;|ivJ2i*)nZL{K>&!%$x`d5D8{0-wd$_0arVZ-p4zGiw{V^_Z|zRA{em+KSx zvwYpKMioKL9xpYz{!KFt6ldp{sR(u@#E302?>a{BA=mhhBk6~51N>PEOkDpbzyQBJ V2}&DqhRXl|002ovPDHLkV1mIUfL8zj literal 0 HcmV?d00001 diff --git a/www/prive/images/rien.gif b/www/prive/images/rien.gif old mode 100755 new mode 100644 diff --git a/www/prive/informer_auteur_fonctions.php b/www/prive/informer_auteur_fonctions.php index c12d3eed..87ae8a15 100644 --- a/www/prive/informer_auteur_fonctions.php +++ b/www/prive/informer_auteur_fonctions.php @@ -3,50 +3,45 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2016 * + * Copyright (c) 2001-2017 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ -if (!defined('_ECRIRE_INC_VERSION')) return; +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + -// Filtre ad hoc pour le formulaire de login: -// le parametre var_login n'est pas dans le contexte pour optimiser le cache -// il faut aller le chercher a la main -function informer_auteur($bof) -{ +/** + * Retrouve pour le formulaire de login les informations d'un login qui permettront de crypter le mot de passe saisi + * + * Si le login n'est pas trouvé, retourne de fausses informations, + * sauf si la constante `_AUTORISER_AUTH_FAIBLE` est déclarée à true. + * + * @note + * Le parametre var_login n'est pas dans le contexte pour optimiser le cache + * il faut aller le chercher à la main + * + * @uses auth_informer_login() + * @uses json_export() + * + * @param string $bof + * Date de la demande + * @return string + * JSON des différentes informations + */ +function informer_auteur($bof) { include_spip('inc/json'); include_spip('formulaires/login'); include_spip('inc/auth'); $login = strval(_request('var_login')); $row = auth_informer_login($login); - if ($row AND is_array($row)) { + if ($row and is_array($row) and isset($row['id_auteur'])) { unset($row['id_auteur']); } - // permettre d'autoriser l'envoi de password non crypte lorsque - // l'auteur n'est pas (encore) declare dans SPIP, par exemple pour les cas - // de premiere authentification via SPIP a une autre application. - else if (defined('_AUTORISER_AUTH_FAIBLE') and _AUTORISER_AUTH_FAIBLE) { - $row = array(); - } - // generer de fausses infos, mais credibles, pour eviter une attaque - // http://core.spip.org/issues/1758 - else { - include_spip('inc/securiser_action'); - $fauxalea1 = md5('fauxalea'.secret_du_site().$login.floor(date('U')/86400)); - $fauxalea2 = md5('fauxalea'.secret_du_site().$login.ceil(date('U')/86400)); - - $row = array('login' => $login, - 'cnx' => '0', - 'logo' => "", - 'alea_actuel' => substr_replace($fauxalea1,'.',24,0), - 'alea_futur' => substr_replace($fauxalea2,'.',24,0) - ); - } - + return json_export($row); } - -?> diff --git a/www/prive/javascript/ajaxCallback.js b/www/prive/javascript/ajaxCallback.js index 3df5c884..777a0cba 100644 --- a/www/prive/javascript/ajaxCallback.js +++ b/www/prive/javascript/ajaxCallback.js @@ -37,6 +37,9 @@ if(!jQuery.spip.load_handlers) { // intercept jQuery.fn.load jQuery.spip.intercepted.load = jQuery.fn.load; jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string") { + return jQuery.spip.intercepted.load.apply( this, arguments ); + } callback = callback || function(){}; @@ -49,6 +52,7 @@ if(!jQuery.spip.load_handlers) { params = null; } } + params = jQuery.extend(params, {triggerAjaxLoad:false}); // prevent $.ajax to triggerAjaxLoad var callback2 = function() {jQuery.spip.log('jQuery.load');jQuery.spip.triggerAjaxLoad(this);callback.apply(this,arguments);}; return jQuery.spip.intercepted.load.apply(this,[url, params, callback2]); }; @@ -75,33 +79,95 @@ if(!jQuery.spip.load_handlers) { // intercept jQuery.ajax jQuery.spip.intercepted.ajax = jQuery.ajax; - jQuery.ajax = function(type) { - var s = jQuery.extend(true, {}, jQuery.ajaxSettings, type); + jQuery.ajax = function(url, settings) { + if (typeof settings == 'undefined') { + settings = {}; + if (typeof url == 'object') { + settings = url; + url = null; + } + } + if (typeof url == 'string') { + settings['url'] = url; + } + // if triggerAjaxLoad is prevented, finish without faking callback + if (settings.data && settings.data['triggerAjaxLoad'] === false) { + settings.data['triggerAjaxLoad'] = null; + return jQuery.spip.intercepted.ajax(settings); + } + var s = jQuery.extend(true, {}, jQuery.ajaxSettings, settings); var callbackContext = s.context || s; try { if (jQuery.ajax.caller==jQuery.spip.intercepted.load || jQuery.ajax.caller==jQuery.spip.intercepted.ajaxSubmit) - return jQuery.spip.intercepted.ajax(type); + return jQuery.spip.intercepted.ajax(settings); } catch (err){} var orig_complete = s.complete || function() {}; - type.complete = function(res,status) { + settings.complete = function(res,status) { // Do not fire OnAjaxLoad if the dataType is not html - var dataType = type.dataType; + var dataType = settings.dataType; var ct = (res && (typeof res.getResponseHeader == 'function')) ? res.getResponseHeader("content-type"): ''; var xml = !dataType && ct && ct.indexOf("xml") >= 0; orig_complete.call( callbackContext, res, status); - if(!dataType && !xml || dataType == "html") { + if((!dataType && !xml) || dataType == "html") { jQuery.spip.log('jQuery.ajax'); if (typeof s.onAjaxLoad=="undefined" || s.onAjaxLoad!=false) jQuery.spip.triggerAjaxLoad(s.ajaxTarget?s.ajaxTarget:document); } }; - return jQuery.spip.intercepted.ajax(type); + return jQuery.spip.intercepted.ajax(settings); }; } +/* jQuery.browser */ +jQuery.uaMatch = function( ua ) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || + /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; +}; + +// Don't clobber any existing jQuery.browser in case it's different +if ( !jQuery.browser ) { + matched = jQuery.uaMatch( navigator.userAgent ); + browser = {}; + + if ( matched.browser ) { + browser[ matched.browser ] = true; + browser.version = matched.version; + } + + // Chrome is Webkit, but Webkit is also Safari. + if ( browser.chrome ) { + browser.webkit = true; + } else if ( browser.webkit ) { + browser.safari = true; + } + + jQuery.browser = browser; +} + +// jQuery.getScript cache par defaut +jQuery.getScript = function(url,callback){ + return $.ajax({ + url: url, + dataType: "script", + success: callback, + cache: true + }); +} + /** * if not fully visible, scroll the page to position * target block at the top of page @@ -143,7 +209,7 @@ jQuery.spip.updateReaderBuffer = function(){ if (!i.length) return; // incrementons l'input hidden, ce qui a pour effet de forcer le rafraichissement du // buffer du lecteur d'ecran (au moins dans Jaws) - i.attr('value',parseInt(i.attr('value'))+1); + i.val(parseInt(i.val())+1); } jQuery.fn.formulaire_setARIA = function(){ @@ -164,33 +230,44 @@ jQuery.fn.formulaire_setARIA = function(){ jQuery.fn.formulaire_dyn_ajax = function(target) { if (this.length) jQuery.spip.initReaderBuffer(); - return this.each(function() { - var scrollwhensubmit = !jQuery(this).is('.noscroll'); + return this.each(function() { + var scrollwhensubmit = !jQuery(this).is('.noscroll'); var cible = target || this; - jQuery(cible).formulaire_setARIA(); + jQuery(cible).formulaire_setARIA(); jQuery('form:not(.noajax):not(.bouton_action_post)', this).each(function(){ var leform = this; var leclk,leclk_x,leclk_y; + var onError = function(xhr, status, error, $form){ + jQuery(leform).ajaxFormUnbind().find('input[name="var_ajax"]').remove(); + var msg = "Erreur"; + if (typeof(error_on_ajaxform)!=="undefined") msg = error_on_ajaxform; + jQuery(leform).prepend("

        "+msg+"

        ").find('.ajax-error').show('fast'); + jQuery(cible).closest('.ariaformprop').endLoading(true); + } jQuery(this).prepend("") .ajaxForm({ beforeSubmit: function(){ // memoriser le bouton clique, en cas de repost non ajax leclk = leform.clk; - if (leclk) { - var n = leclk.name; - if (n && !leclk.disabled && leclk.type == "image") { - leclk_x = leform.clk_x; - leclk_y = leform.clk_y; - } - } + var scrollwhensubmit_button = true; + if (leclk) { + scrollwhensubmit_button = !jQuery(leclk).is('.noscroll'); + var n = leclk.name; + if (n && !leclk.disabled && leclk.type == "image") { + leclk_x = leform.clk_x; + leclk_y = leform.clk_y; + } + } jQuery(cible).wrap('
        '); cible = jQuery(cible).parent(); jQuery(cible).closest('.ariaformprop').animateLoading(); - if (scrollwhensubmit) + if (scrollwhensubmit && scrollwhensubmit_button) { jQuery(cible).positionner(false,false); + } }, - success: function(c){ - if (c=='noajax'){ + error: onError, + success: function(c, status, xhr , $form){ + if (c.match(/^\s*noajax\s*$/)){ // le serveur ne veut pas traiter ce formulaire en ajax // on resubmit sans ajax jQuery("input[name=var_ajax]",leform).remove(); @@ -198,8 +275,8 @@ jQuery.fn.formulaire_dyn_ajax = function(target) { // les reinjecter dans le dom sous forme de input hidden // pour que le serveur les recoive if (leclk){ - var n = leclk.name; - if (n && !leclk.disabled) { + var n = leclk.name; + if (n && !leclk.disabled) { jQuery(leform).prepend(""); if (leclk.type == "image") { jQuery(leform).prepend(""); @@ -210,6 +287,8 @@ jQuery.fn.formulaire_dyn_ajax = function(target) { jQuery(leform).ajaxFormUnbind().submit(); } else { + if (!c.length || c.indexOf("ajax-form-is-ok")==-1) + return onError.apply(this,[status, xhr , $form]); // commencons par vider le cache des urls, si jamais un js au retour // essaye tout de suite de suivre un lien en cache // dans le doute sur la validite du cache il vaut mieux l'invalider @@ -273,13 +352,12 @@ jQuery.fn.formulaire_dyn_ajax = function(target) { // a supprimer ? jQuery.spip.updateReaderBuffer(); } - }, - iframe: jQuery.browser.msie + }/*, + iframe: jQuery.browser.msie*/ }) // previent qu'on n'ajaxera pas deux fois le meme formulaire en cas de ajaxload // mais le marquer comme ayant l'ajax au cas ou on reinjecte du contenu ajax dedans - .addClass('noajax hasajax') - ; + .addClass('noajax hasajax'); }); }); } @@ -321,7 +399,7 @@ jQuery.fn.formulaire_activer_verif_auto = function(callback){ .find('form') .attr('data-verifjson','on') .find('input,select,textarea') - .bind('change',check); + .on('change', check); } } jQuery(activer); @@ -555,7 +633,7 @@ jQuery.spip.makeAjaxUrl = function(href,ajax_env,origin){ if (p!==-1) arg = arg.substring(0,p); val = parametre_url(href,arg); - if (typeof val=="undefined") + if (typeof val=="undefined" || val==null) url[0] = url[0] + '&' + arg + '='; } } @@ -582,7 +660,7 @@ jQuery.spip.ajaxReload = function(blocfrag, options){ if (!ajax_env || ajax_env==undefined) return; var href = options.href || blocfrag.attr('data-url') || blocfrag.attr('data-origin'); if (href && typeof href != undefined){ - options == options || {}; + options = options || {}; var callback=options.callback || null; var history=options.history || false; var args = options.args || {}; @@ -635,26 +713,26 @@ jQuery.fn.ajaxbloc = function() { if (ajaxbloc_selecteur==undefined) ajaxbloc_selecteur = '.pagination a,a.ajax'; - return this.each(function() { - // traiter les enfants d'abord : - // un lien ajax provoque le rechargement - // du plus petit bloc ajax le contenant - jQuery('div.ajaxbloc',this).ajaxbloc(); + return this.each(function() { + // traiter les enfants d'abord : + // un lien ajax provoque le rechargement + // du plus petit bloc ajax le contenant + jQuery('div.ajaxbloc',this).ajaxbloc(); var blocfrag = jQuery(this); var ajax_env = blocfrag.attr('data-ajax-env'); if (!ajax_env || ajax_env==undefined) return; - blocfrag.not('.bind-ajaxReload').bind('ajaxReload',function(event, options){ - if (jQuery.spip.ajaxReload(blocfrag,options)) + blocfrag.not('.bind-ajaxReload').on('ajaxReload', function(event, options){ + if (jQuery.spip.ajaxReload(blocfrag,options)) // don't trig reload of parent blocks event.stopPropagation(); - }).addClass('bind-ajaxReload') - .attr('aria-live','polite').attr('aria-atomic','true'); + }).addClass('bind-ajaxReload') + .attr('aria-live','polite').attr('aria-atomic','true'); // dans un formulaire, le screen reader relit tout a chaque saisie d'un caractere si on est en aria-live - // mettre un aria-live="off" sur les forms inclus dans ce bloc aria-live="polite" - jQuery('form',this).not('[aria-live]').attr('aria-live','off'); + // mettre un aria-live="off" sur les forms inclus dans ce bloc aria-live="polite" + jQuery('form',this).not('[aria-live]').attr('aria-live','off'); jQuery(ajaxbloc_selecteur,this).not('.noajax,.bind-ajax') .click(function(){return jQuery.spip.ajaxClick(blocfrag,this.href,{force:jQuery(this).is('.nocache'),history:!(jQuery(this).is('.nohistory')||jQuery(this).closest('.box_modalbox').length)});}) @@ -673,21 +751,24 @@ jQuery.fn.ajaxbloc = function() { jQuery('form.bouton_action_post.ajax', this).not('.noajax,.bind-ajax').each(function(){ var leform = this; var url = jQuery(this).attr('action').split('#'); + var scrollwhensubmit = (!jQuery(this).is('.noscroll') && !jQuery('.submit',this).is('.noscroll')); jQuery(this) .prepend(""+(url[1]?"":"")) .ajaxForm({ beforeSubmit: function(){ - jQuery(blocfrag).animateLoading().positionner(false); + jQuery(blocfrag).animateLoading(); + if (scrollwhensubmit) { + jQuery(blocfrag).positionner(false); + } }, onAjaxLoad:false, success: function(c){ jQuery.spip.on_ajax_loaded(blocfrag,c); jQuery.spip.preloaded_urls = {}; // on vide le cache des urls car on a fait une action en bdd - }, - iframe: jQuery.browser.msie + }/*, + iframe: jQuery.browser.msie*/ }) - .addClass('bind-ajax') // previent qu'on n'ajaxera pas deux fois le meme formulaire en cas de ajaxload - ; + .addClass('bind-ajax'); // previent qu'on n'ajaxera pas deux fois le meme formulaire en cas de ajaxload }); }); }; @@ -786,7 +867,7 @@ jQuery.fn.animateRemove = function(callback){ // if target is a tr, include td childrens cause background color on tr doesn't works in a lot of browsers if (sel.is('tr')) sel = sel.add('>td',sel); - sel.addClass('remove').css({backgroundColor: color}).animate({opacity: "0.0"}, 'fast',function(){ + sel.addClass('remove').css({backgroundColor: color}).animate({opacity: "0.0"}, 'fast', function(){ sel.removeClass('remove').css({backgroundColor: ''}); if (callback) callback.apply(me); @@ -795,6 +876,7 @@ jQuery.fn.animateRemove = function(callback){ return this; // don't break the chain } + /** * animation d'un item que l'on ajoute : * ajout de la classe append @@ -851,7 +933,7 @@ function parametre_url(url,c,v,sep,force_vide){ if (typeof(url) == 'undefined'){ url = ''; } - + var p; // lever l'#ancre var ancre=''; @@ -905,8 +987,8 @@ function parametre_url(url,c,v,sep,force_vide){ na.push(r[1]+'='+u); ajouts.push(r[1]); } - /* Pour les tableaux ont laisse tomber les valeurs de départ, on - remplira à l'étape suivante */ + /* Pour les tableaux ont laisse tomber les valeurs de départ, on + remplira à l'étape suivante */ // else na.push(args[n]); } else diff --git a/www/prive/javascript/gadgets.js b/www/prive/javascript/gadgets.js index c1125357..b178cdee 100644 --- a/www/prive/javascript/gadgets.js +++ b/www/prive/javascript/gadgets.js @@ -16,7 +16,7 @@ function focus_zone(selecteur){ jQuery(selecteur).eq(0).find('a,input:visible').get(0).focus(); return false; } -jQuery(document).ready(function(){ +jQuery(function(){ init_gadgets(url_menu_rubrique); var is_open = 0; jQuery.fn.menuItemOpen = function(){ @@ -104,6 +104,7 @@ jQuery(document).ready(function(){ .blur(function(){ jQuery('#bando_liens_rapides').removeClass('actif'); }); - if (typeof window.test_accepte_ajax != "undefined") + if (typeof window.test_accepte_ajax != "undefined") { test_accepte_ajax(); + } }); diff --git a/www/prive/javascript/jquery-migrate-3.0.1.js b/www/prive/javascript/jquery-migrate-3.0.1.js new file mode 100644 index 00000000..8aa36234 --- /dev/null +++ b/www/prive/javascript/jquery-migrate-3.0.1.js @@ -0,0 +1,632 @@ +/*! + * jQuery Migrate - v3.0.1 - 2017-09-26 + * Copyright jQuery Foundation and other contributors + */ +;( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "jquery" ], window, factory ); + } else if ( typeof module === "object" && module.exports ) { + + // Node/CommonJS + // eslint-disable-next-line no-undef + module.exports = factory( require( "jquery" ), window ); + } else { + + // Browser globals + factory( jQuery, window ); + } +} )( function( jQuery, window ) { +"use strict"; + + +jQuery.migrateVersion = "3.0.1"; + +// Included only in the minified build, via Uglify2 +// Only turn warnings off if not already overridden +if ( typeof jQuery.migrateMute === "undefined" ) { + jQuery.migrateMute = true; +} + +/* exported migrateWarn, migrateWarnFunc, migrateWarnProp */ + +( function() { + + var rbadVersions = /^[12]\./; + + // Support: IE9 only + // IE9 only creates console object when dev tools are first opened + // IE9 console is a host object, callable but doesn't have .apply() + if ( !window.console || !window.console.log ) { + return; + } + + // Need jQuery 3.0.0+ and no older Migrate loaded + if ( !jQuery || rbadVersions.test( jQuery.fn.jquery ) ) { + window.console.log( "JQMIGRATE: jQuery 3.0.0+ REQUIRED" ); + } + if ( jQuery.migrateWarnings ) { + window.console.log( "JQMIGRATE: Migrate plugin loaded multiple times" ); + } + + // Show a message on the console so devs know we're active + window.console.log( "JQMIGRATE: Migrate is installed" + + ( jQuery.migrateMute ? "" : " with logging active" ) + + ", version " + jQuery.migrateVersion ); + +} )(); + +var warnedAbout = {}; + +// List of warnings already given; public read only +jQuery.migrateWarnings = []; + +// Set to false to disable traces that appear with warnings +if ( jQuery.migrateTrace === undefined ) { + jQuery.migrateTrace = true; +} + +// Forget any warnings we've already given; public +jQuery.migrateReset = function() { + warnedAbout = {}; + jQuery.migrateWarnings.length = 0; +}; + +function migrateWarn( msg ) { + var console = window.console; + if ( !warnedAbout[ msg ] ) { + warnedAbout[ msg ] = true; + jQuery.migrateWarnings.push( msg ); + if ( console && console.warn && !jQuery.migrateMute ) { + console.warn( "JQMIGRATE: " + msg ); + if ( jQuery.migrateTrace && console.trace ) { + console.trace(); + } + } + } +} + +function migrateWarnProp( obj, prop, value, msg ) { + Object.defineProperty( obj, prop, { + configurable: true, + enumerable: true, + get: function() { + migrateWarn( msg ); + return value; + }, + set: function( newValue ) { + migrateWarn( msg ); + value = newValue; + } + } ); +} + +function migrateWarnFunc( obj, prop, newFunc, msg ) { + obj[ prop ] = function() { + migrateWarn( msg ); + return newFunc.apply( this, arguments ); + }; +} + +if ( window.document.compatMode === "BackCompat" ) { + + // JQuery has never supported or tested Quirks Mode + migrateWarn( "jQuery is not compatible with Quirks Mode" ); +} + + +var oldInit = jQuery.fn.init, + oldIsNumeric = jQuery.isNumeric, + oldFind = jQuery.find, + rattrHashTest = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/, + rattrHashGlob = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g; + +jQuery.fn.init = function( arg1 ) { + var args = Array.prototype.slice.call( arguments ); + + if ( typeof arg1 === "string" && arg1 === "#" ) { + + // JQuery( "#" ) is a bogus ID selector, but it returned an empty set before jQuery 3.0 + migrateWarn( "jQuery( '#' ) is not a valid selector" ); + args[ 0 ] = []; + } + + return oldInit.apply( this, args ); +}; +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.find = function( selector ) { + var args = Array.prototype.slice.call( arguments ); + + // Support: PhantomJS 1.x + // String#match fails to match when used with a //g RegExp, only on some strings + if ( typeof selector === "string" && rattrHashTest.test( selector ) ) { + + // The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0 + // First see if qS thinks it's a valid selector, if so avoid a false positive + try { + window.document.querySelector( selector ); + } catch ( err1 ) { + + // Didn't *look* valid to qSA, warn and try quoting what we think is the value + selector = selector.replace( rattrHashGlob, function( _, attr, op, value ) { + return "[" + attr + op + "\"" + value + "\"]"; + } ); + + // If the regexp *may* have created an invalid selector, don't update it + // Note that there may be false alarms if selector uses jQuery extensions + try { + window.document.querySelector( selector ); + migrateWarn( "Attribute selector with '#' must be quoted: " + args[ 0 ] ); + args[ 0 ] = selector; + } catch ( err2 ) { + migrateWarn( "Attribute selector with '#' was not fixed: " + args[ 0 ] ); + } + } + } + + return oldFind.apply( this, args ); +}; + +// Copy properties attached to original jQuery.find method (e.g. .attr, .isXML) +var findProp; +for ( findProp in oldFind ) { + if ( Object.prototype.hasOwnProperty.call( oldFind, findProp ) ) { + jQuery.find[ findProp ] = oldFind[ findProp ]; + } +} + +// The number of elements contained in the matched element set +jQuery.fn.size = function() { + migrateWarn( "jQuery.fn.size() is deprecated and removed; use the .length property" ); + return this.length; +}; + +jQuery.parseJSON = function() { + migrateWarn( "jQuery.parseJSON is deprecated; use JSON.parse" ); + return JSON.parse.apply( null, arguments ); +}; + +jQuery.isNumeric = function( val ) { + + // The jQuery 2.2.3 implementation of isNumeric + function isNumeric2( obj ) { + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; + } + + var newValue = oldIsNumeric( val ), + oldValue = isNumeric2( val ); + + if ( newValue !== oldValue ) { + migrateWarn( "jQuery.isNumeric() should not be called on constructed objects" ); + } + + return oldValue; +}; + +migrateWarnFunc( jQuery, "holdReady", jQuery.holdReady, + "jQuery.holdReady is deprecated" ); + +migrateWarnFunc( jQuery, "unique", jQuery.uniqueSort, + "jQuery.unique is deprecated; use jQuery.uniqueSort" ); + +// Now jQuery.expr.pseudos is the standard incantation +migrateWarnProp( jQuery.expr, "filters", jQuery.expr.pseudos, + "jQuery.expr.filters is deprecated; use jQuery.expr.pseudos" ); +migrateWarnProp( jQuery.expr, ":", jQuery.expr.pseudos, + "jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos" ); + + +var oldAjax = jQuery.ajax; + +jQuery.ajax = function( ) { + var jQXHR = oldAjax.apply( this, arguments ); + + // Be sure we got a jQXHR (e.g., not sync) + if ( jQXHR.promise ) { + migrateWarnFunc( jQXHR, "success", jQXHR.done, + "jQXHR.success is deprecated and removed" ); + migrateWarnFunc( jQXHR, "error", jQXHR.fail, + "jQXHR.error is deprecated and removed" ); + migrateWarnFunc( jQXHR, "complete", jQXHR.always, + "jQXHR.complete is deprecated and removed" ); + } + + return jQXHR; +}; + + +var oldRemoveAttr = jQuery.fn.removeAttr, + oldToggleClass = jQuery.fn.toggleClass, + rmatchNonSpace = /\S+/g; + +jQuery.fn.removeAttr = function( name ) { + var self = this; + + jQuery.each( name.match( rmatchNonSpace ), function( i, attr ) { + if ( jQuery.expr.match.bool.test( attr ) ) { + migrateWarn( "jQuery.fn.removeAttr no longer sets boolean properties: " + attr ); + self.prop( attr, false ); + } + } ); + + return oldRemoveAttr.apply( this, arguments ); +}; + +jQuery.fn.toggleClass = function( state ) { + + // Only deprecating no-args or single boolean arg + if ( state !== undefined && typeof state !== "boolean" ) { + return oldToggleClass.apply( this, arguments ); + } + + migrateWarn( "jQuery.fn.toggleClass( boolean ) is deprecated" ); + + // Toggle entire class name of each element + return this.each( function() { + var className = this.getAttribute && this.getAttribute( "class" ) || ""; + + if ( className ) { + jQuery.data( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || state === false ? + "" : + jQuery.data( this, "__className__" ) || "" + ); + } + } ); +}; + + +var internalSwapCall = false; + +// If this version of jQuery has .swap(), don't false-alarm on internal uses +if ( jQuery.swap ) { + jQuery.each( [ "height", "width", "reliableMarginRight" ], function( _, name ) { + var oldHook = jQuery.cssHooks[ name ] && jQuery.cssHooks[ name ].get; + + if ( oldHook ) { + jQuery.cssHooks[ name ].get = function() { + var ret; + + internalSwapCall = true; + ret = oldHook.apply( this, arguments ); + internalSwapCall = false; + return ret; + }; + } + } ); +} + +jQuery.swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + if ( !internalSwapCall ) { + migrateWarn( "jQuery.swap() is undocumented and deprecated" ); + } + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + +var oldData = jQuery.data; + +jQuery.data = function( elem, name, value ) { + var curData; + + // Name can be an object, and each entry in the object is meant to be set as data + if ( name && typeof name === "object" && arguments.length === 2 ) { + curData = jQuery.hasData( elem ) && oldData.call( this, elem ); + var sameKeys = {}; + for ( var key in name ) { + if ( key !== jQuery.camelCase( key ) ) { + migrateWarn( "jQuery.data() always sets/gets camelCased names: " + key ); + curData[ key ] = name[ key ]; + } else { + sameKeys[ key ] = name[ key ]; + } + } + + oldData.call( this, elem, sameKeys ); + + return name; + } + + // If the name is transformed, look for the un-transformed name in the data object + if ( name && typeof name === "string" && name !== jQuery.camelCase( name ) ) { + curData = jQuery.hasData( elem ) && oldData.call( this, elem ); + if ( curData && name in curData ) { + migrateWarn( "jQuery.data() always sets/gets camelCased names: " + name ); + if ( arguments.length > 2 ) { + curData[ name ] = value; + } + return curData[ name ]; + } + } + + return oldData.apply( this, arguments ); +}; + +var oldTweenRun = jQuery.Tween.prototype.run; +var linearEasing = function( pct ) { + return pct; + }; + +jQuery.Tween.prototype.run = function( ) { + if ( jQuery.easing[ this.easing ].length > 1 ) { + migrateWarn( + "'jQuery.easing." + this.easing.toString() + "' should use only one argument" + ); + + jQuery.easing[ this.easing ] = linearEasing; + } + + oldTweenRun.apply( this, arguments ); +}; + +jQuery.fx.interval = jQuery.fx.interval || 13; + +// Support: IE9, Android <=4.4 +// Avoid false positives on browsers that lack rAF +if ( window.requestAnimationFrame ) { + migrateWarnProp( jQuery.fx, "interval", jQuery.fx.interval, + "jQuery.fx.interval is deprecated" ); +} + +var oldLoad = jQuery.fn.load, + oldEventAdd = jQuery.event.add, + originalFix = jQuery.event.fix; + +jQuery.event.props = []; +jQuery.event.fixHooks = {}; + +migrateWarnProp( jQuery.event.props, "concat", jQuery.event.props.concat, + "jQuery.event.props.concat() is deprecated and removed" ); + +jQuery.event.fix = function( originalEvent ) { + var event, + type = originalEvent.type, + fixHook = this.fixHooks[ type ], + props = jQuery.event.props; + + if ( props.length ) { + migrateWarn( "jQuery.event.props are deprecated and removed: " + props.join() ); + while ( props.length ) { + jQuery.event.addProp( props.pop() ); + } + } + + if ( fixHook && !fixHook._migrated_ ) { + fixHook._migrated_ = true; + migrateWarn( "jQuery.event.fixHooks are deprecated and removed: " + type ); + if ( ( props = fixHook.props ) && props.length ) { + while ( props.length ) { + jQuery.event.addProp( props.pop() ); + } + } + } + + event = originalFix.call( this, originalEvent ); + + return fixHook && fixHook.filter ? fixHook.filter( event, originalEvent ) : event; +}; + +jQuery.event.add = function( elem, types ) { + + // This misses the multiple-types case but that seems awfully rare + if ( elem === window && types === "load" && window.document.readyState === "complete" ) { + migrateWarn( "jQuery(window).on('load'...) called after load event occurred" ); + } + return oldEventAdd.apply( this, arguments ); +}; + +jQuery.each( [ "load", "unload", "error" ], function( _, name ) { + + jQuery.fn[ name ] = function() { + var args = Array.prototype.slice.call( arguments, 0 ); + + // If this is an ajax load() the first arg should be the string URL; + // technically this could also be the "Anything" arg of the event .load() + // which just goes to show why this dumb signature has been deprecated! + // jQuery custom builds that exclude the Ajax module justifiably die here. + if ( name === "load" && typeof args[ 0 ] === "string" ) { + return oldLoad.apply( this, args ); + } + + migrateWarn( "jQuery.fn." + name + "() is deprecated" ); + + args.splice( 0, 0, name ); + if ( arguments.length ) { + return this.on.apply( this, args ); + } + + // Use .triggerHandler here because: + // - load and unload events don't need to bubble, only applied to window or image + // - error event should not bubble to window, although it does pre-1.7 + // See http://bugs.jquery.com/ticket/11820 + this.triggerHandler.apply( this, args ); + return this; + }; + +} ); + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + migrateWarn( "jQuery.fn." + name + "() event shorthand is deprecated" ); + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +// Trigger "ready" event only once, on document ready +jQuery( function() { + jQuery( window.document ).triggerHandler( "ready" ); +} ); + +jQuery.event.special.ready = { + setup: function() { + if ( this === window.document ) { + migrateWarn( "'ready' event is deprecated" ); + } + } +}; + +jQuery.fn.extend( { + + bind: function( types, data, fn ) { + migrateWarn( "jQuery.fn.bind() is deprecated" ); + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + migrateWarn( "jQuery.fn.unbind() is deprecated" ); + return this.off( types, null, fn ); + }, + delegate: function( selector, types, data, fn ) { + migrateWarn( "jQuery.fn.delegate() is deprecated" ); + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + migrateWarn( "jQuery.fn.undelegate() is deprecated" ); + return arguments.length === 1 ? + this.off( selector, "**" ) : + this.off( types, selector || "**", fn ); + }, + hover: function( fnOver, fnOut ) { + migrateWarn( "jQuery.fn.hover() is deprecated" ); + return this.on( "mouseenter", fnOver ).on( "mouseleave", fnOut || fnOver ); + } +} ); + + +var oldOffset = jQuery.fn.offset; + +jQuery.fn.offset = function() { + var docElem, + elem = this[ 0 ], + origin = { top: 0, left: 0 }; + + if ( !elem || !elem.nodeType ) { + migrateWarn( "jQuery.fn.offset() requires a valid DOM element" ); + return origin; + } + + docElem = ( elem.ownerDocument || window.document ).documentElement; + if ( !jQuery.contains( docElem, elem ) ) { + migrateWarn( "jQuery.fn.offset() requires an element connected to a document" ); + return origin; + } + + return oldOffset.apply( this, arguments ); +}; + + +var oldParam = jQuery.param; + +jQuery.param = function( data, traditional ) { + var ajaxTraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + + if ( traditional === undefined && ajaxTraditional ) { + + migrateWarn( "jQuery.param() no longer uses jQuery.ajaxSettings.traditional" ); + traditional = ajaxTraditional; + } + + return oldParam.call( this, data, traditional ); +}; + +var oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack; + +jQuery.fn.andSelf = function() { + migrateWarn( "jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()" ); + return oldSelf.apply( this, arguments ); +}; + + +var oldDeferred = jQuery.Deferred, + tuples = [ + + // Action, add listener, callbacks, .then handlers, final state + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), "rejected" ], + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ) ] + ]; + +jQuery.Deferred = function( func ) { + var deferred = oldDeferred(), + promise = deferred.promise(); + + deferred.pipe = promise.pipe = function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + migrateWarn( "deferred.pipe() is deprecated" ); + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + + // Deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + + }; + + if ( func ) { + func.call( deferred, deferred ); + } + + return deferred; +}; + +// Preserve handler of uncaught exceptions in promise chains +jQuery.Deferred.exceptionHook = oldDeferred.exceptionHook; + +return jQuery; +} ); diff --git a/www/prive/javascript/jquery.autosave.js b/www/prive/javascript/jquery.autosave.js index 70dddd6b..006d477d 100644 --- a/www/prive/javascript/jquery.autosave.js +++ b/www/prive/javascript/jquery.autosave.js @@ -36,22 +36,21 @@ } }).removeClass('autosavechanged'); } - $(window) - .bind('unload',save_changed); + $(window).on('unload', save_changed); return this - .bind('keyup', function() { - $(this).addClass('autosavechanged'); - }) - .bind('change', function() { - $(this).addClass('autosavechanged'); - save_changed(); - }) - .bind('submit',function() { - save_changed(); - /* trop agressif : exemple du submit previsu forum, ou des submit suivant/precedent d'un cvt multipage - on sauvegarde toujours, et le serveur videra quand il faudra */ - /*$(this).removeClass('autosavechanged')*/; - }); + .on('keyup', function() { + $(this).addClass('autosavechanged'); + }) + .on('change', function() { + $(this).addClass('autosavechanged'); + save_changed(); + }) + .on('submit',function() { + save_changed(); + /* trop agressif : exemple du submit previsu forum, ou des submit suivant/precedent d'un cvt multipage + on sauvegarde toujours, et le serveur videra quand il faudra */ + /*$(this).removeClass('autosavechanged')*/; + }); } })(jQuery); diff --git a/www/prive/javascript/jquery.colors.js b/www/prive/javascript/jquery.colors.js deleted file mode 100644 index a41697ef..00000000 --- a/www/prive/javascript/jquery.colors.js +++ /dev/null @@ -1,123 +0,0 @@ -/* - * jQuery Color Animations - * Copyright 2007 John Resig - * Released under the MIT and GPL licenses. - */ - -(function(jQuery){ - - // We override the animation for all of these color styles - jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){ - jQuery.fx.step[attr] = function(fx){ - if ( fx.state == 0 ) { - fx.start = getColor( fx.elem, attr ); - fx.end = getRGB( fx.end ); - } - - fx.elem.style[attr] = "rgb(" + [ - Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0), - Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0), - Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0) - ].join(",") + ")"; - } - }); - - // Color Conversion functions from highlightFade - // By Blair Mitchelmore - // http://jquery.offput.ca/highlightFade/ - - // Parse strings looking for color tuples [255,255,255] - function getRGB(color) { - var result; - - // Check if we're already dealing with an array of colors - if ( color && color.constructor == Array && color.length == 3 ) - return color; - - // Look for rgb(num,num,num) - if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) - return [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])]; - - // Look for rgb(num%,num%,num%) - if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) - return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; - - // Look for #a0b1c2 - if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) - return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; - - // Look for #fff - if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) - return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; - - // Otherwise, we're most likely dealing with a named color - return colors[jQuery.trim(color).toLowerCase()]; - } - - function getColor(elem, attr) { - var color; - - do { - color = jQuery.curCSS(elem, attr); - - // Keep going until we find an element that has color, or we hit the body - if ( color != '' && color != 'transparent' || jQuery.nodeName(elem, "body") ) - break; - - attr = "backgroundColor"; - } while ( elem = elem.parentNode ); - - return getRGB(color); - }; - - // Some named colors to work with - // From Interface by Stefan Petre - // http://interface.eyecon.ro/ - - var colors = { - aqua:[0,255,255], - azure:[240,255,255], - beige:[245,245,220], - black:[0,0,0], - blue:[0,0,255], - brown:[165,42,42], - cyan:[0,255,255], - darkblue:[0,0,139], - darkcyan:[0,139,139], - darkgrey:[169,169,169], - darkgreen:[0,100,0], - darkkhaki:[189,183,107], - darkmagenta:[139,0,139], - darkolivegreen:[85,107,47], - darkorange:[255,140,0], - darkorchid:[153,50,204], - darkred:[139,0,0], - darksalmon:[233,150,122], - darkviolet:[148,0,211], - fuchsia:[255,0,255], - gold:[255,215,0], - green:[0,128,0], - indigo:[75,0,130], - khaki:[240,230,140], - lightblue:[173,216,230], - lightcyan:[224,255,255], - lightgreen:[144,238,144], - lightgrey:[211,211,211], - lightpink:[255,182,193], - lightyellow:[255,255,224], - lime:[0,255,0], - magenta:[255,0,255], - maroon:[128,0,0], - navy:[0,0,128], - olive:[128,128,0], - orange:[255,165,0], - pink:[255,192,203], - purple:[128,0,128], - violet:[128,0,128], - red:[255,0,0], - silver:[192,192,192], - white:[255,255,255], - yellow:[255,255,0] - }; - -})(jQuery); diff --git a/www/prive/javascript/jquery.cookie.js b/www/prive/javascript/jquery.cookie.js index 6df1faca..6f67ad46 100644 --- a/www/prive/javascript/jquery.cookie.js +++ b/www/prive/javascript/jquery.cookie.js @@ -1,96 +1,37 @@ -/** - * Cookie plugin - * - * Copyright (c) 2006 Klaus Hartl (stilbuero.de) - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * +/*! + * Rétro Compatibilité entre l'ancien plugin jQuery Cookie + * et le nouveau JS Cookie. */ +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD + define(['jquery'], factory); + } else if (typeof exports === 'object') { + // CommonJS + factory(require('jquery')); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { -/** - * Create a cookie with the given name and value and other optional parameters. - * - * @example $.cookie('the_cookie', 'the_value'); - * @desc Set the value of a cookie. - * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true }); - * @desc Create a cookie with all available options. - * @example $.cookie('the_cookie', 'the_value'); - * @desc Create a session cookie. - * @example $.cookie('the_cookie', null); - * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain - * used when the cookie was set. - * - * @param String name The name of the cookie. - * @param String value The value of the cookie. - * @param Object options An object literal containing key/value pairs to provide optional cookie attributes. - * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object. - * If a negative value is specified (e.g. a date in the past), the cookie will be deleted. - * If set to null or omitted, the cookie will be a session cookie and will not be retained - * when the the browser exits. - * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie). - * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie). - * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will - * require a secure protocol (like HTTPS). - * @type undefined - * - * @name $.cookie - * @cat Plugins/Cookie - * @author Klaus Hartl/klaus.hartl@stilbuero.de - */ + $.cookie = function (key, value, options) { + if (value !== undefined && !$.isFunction(value)) { + console.warn("Deprecated jQuery.cookie(). Please use Cookies.set()"); + console.trace(); + return Cookies.set(key, value, options); + } else { + console.warn("Deprecated jQuery.cookie(). Please use Cookies.get()"); + console.trace(); + return Cookies.get(key, value); + } + }; -/** - * Get the value of a cookie with the given name. - * - * @example $.cookie('the_cookie'); - * @desc Get the value of a cookie. - * - * @param String name The name of the cookie. - * @return The value of the cookie. - * @type String - * - * @name $.cookie - * @cat Plugins/Cookie - * @author Klaus Hartl/klaus.hartl@stilbuero.de - */ -jQuery.cookie = function(name, value, options) { - if (typeof value != 'undefined') { // name and value given, set cookie - options = options || {}; - if (value === null) { - value = ''; - options.expires = -1; - } - var expires = ''; - if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { - var date; - if (typeof options.expires == 'number') { - date = new Date(); - date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); - } else { - date = options.expires; - } - expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE - } - // CAUTION: Needed to parenthesize options.path and options.domain - // in the following expressions, otherwise they evaluate to undefined - // in the packed version for some reason... - var path = options.path ? '; path=' + (options.path) : ''; - var domain = options.domain ? '; domain=' + (options.domain) : ''; - var secure = options.secure ? '; secure' : ''; - document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); - } else { // only name given, get cookie - var cookieValue = null; - if (document.cookie && document.cookie != '') { - var cookies = document.cookie.split(';'); - for (var i = 0; i < cookies.length; i++) { - var cookie = jQuery.trim(cookies[i]); - // Does this cookie string begin with the name we want? - if (cookie.substring(0, name.length + 1) == (name + '=')) { - cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); - break; - } - } - } - return cookieValue; - } -}; \ No newline at end of file + $.removeCookie = function (key, options) { + console.warn("Deprecated jQuery.removeCookie(). Please use Cookies.remove()"); + console.trace(); + Cookies.remove(key, options); + return true; + }; + +})); diff --git a/www/prive/javascript/jquery.form.js b/www/prive/javascript/jquery.form.js index b499d4dc..2a75fe0c 100644 --- a/www/prive/javascript/jquery.form.js +++ b/www/prive/javascript/jquery.form.js @@ -1,980 +1,1531 @@ /*! * jQuery Form Plugin - * version: 2.94 (13-DEC-2011) - * @requires jQuery v1.3.2 or later - * - * Examples and documentation at: http://malsup.com/jquery/form/ - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html + * version: 4.2.2 + * Requires jQuery v1.7.2 or later + * Project repository: https://github.com/jquery-form/form + + * Copyright 2017 Kevin Morris + * Copyright 2006 M. Alsup + + * Dual licensed under the LGPL-2.1+ or MIT licenses + * https://github.com/jquery-form/form#license + + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * This library 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 + * Lesser General Public License for more details. */ -;(function($) { - -/* - Usage Note: - ----------- - Do not use both ajaxSubmit and ajaxForm on the same form. These - functions are intended to be exclusive. Use ajaxSubmit if you want - to bind your own submit handler to the form. For example, - - $(document).ready(function() { - $('#myForm').bind('submit', function(e) { - e.preventDefault(); // <-- important - $(this).ajaxSubmit({ +/* global ActiveXObject */ + +/* eslint-disable */ +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else if (typeof module === 'object' && module.exports) { + // Node/CommonJS + module.exports = function( root, jQuery ) { + if (typeof jQuery === 'undefined') { + // require('jQuery') returns a factory that requires window to build a jQuery instance, we normalize how we use modules + // that require this pattern but the window provided is a noop if it's defined (how jquery works) + if (typeof window !== 'undefined') { + jQuery = require('jquery'); + } + else { + jQuery = require('jquery')(root); + } + } + factory(jQuery); + return jQuery; + }; + } else { + // Browser globals + factory(jQuery); + } + +}(function ($) { +/* eslint-enable */ + 'use strict'; + + /* + Usage Note: + ----------- + Do not use both ajaxSubmit and ajaxForm on the same form. These + functions are mutually exclusive. Use ajaxSubmit if you want + to bind your own submit handler to the form. For example, + + $(document).ready(function() { + $('#myForm').on('submit', function(e) { + e.preventDefault(); // <-- important + $(this).ajaxSubmit({ + target: '#output' + }); + }); + }); + + Use ajaxForm when you want the plugin to manage all the event binding + for you. For example, + + $(document).ready(function() { + $('#myForm').ajaxForm({ target: '#output' }); }); - }); - Use ajaxForm when you want the plugin to manage all the event binding - for you. For example, + You can also use ajaxForm with delegation (requires jQuery v1.7+), so the + form does not have to exist when you invoke ajaxForm: - $(document).ready(function() { $('#myForm').ajaxForm({ + delegation: true, target: '#output' }); - }); - When using ajaxForm, the ajaxSubmit function will be invoked for you - at the appropriate time. -*/ + When using ajaxForm, the ajaxSubmit function will be invoked for you + at the appropriate time. + */ -/** - * ajaxSubmit() provides a mechanism for immediately submitting - * an HTML form using AJAX. - */ -$.fn.ajaxSubmit = function(options) { - // fast fail if nothing selected (http://dev.jquery.com/ticket/2752) - if (!this.length) { - log('ajaxSubmit: skipping submit process - no element selected'); - return this; - } - - var method, action, url, $form = this; + var rCRLF = /\r?\n/g; - if (typeof options == 'function') { - options = { success: options }; - } + /** + * Feature detection + */ + var feature = {}; - method = this.attr('method'); - action = this.attr('action'); - url = (typeof action === 'string') ? $.trim(action) : ''; - url = url || window.location.href || ''; - if (url) { - // clean url (don't include hash vaue) - url = (url.match(/^([^#]+)/)||[])[1]; - } + feature.fileapi = $('').get(0).files !== undefined; + feature.formdata = (typeof window.FormData !== 'undefined'); - options = $.extend(true, { - url: url, - success: $.ajaxSettings.success, - type: method || 'GET', - iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank' - }, options); - - // hook for manipulating the form data before it is extracted; - // convenient for use with rich editors like tinyMCE or FCKEditor - var veto = {}; - this.trigger('form-pre-serialize', [this, options, veto]); - if (veto.veto) { - log('ajaxSubmit: submit vetoed via form-pre-serialize trigger'); - return this; - } + var hasProp = !!$.fn.prop; - // provide opportunity to alter form data before it is serialized - if (options.beforeSerialize && options.beforeSerialize(this, options) === false) { - log('ajaxSubmit: submit aborted via beforeSerialize callback'); - return this; - } + // attr2 uses prop when it can but checks the return type for + // an expected string. This accounts for the case where a form + // contains inputs with names like "action" or "method"; in those + // cases "prop" returns the element + $.fn.attr2 = function() { + if (!hasProp) { + return this.attr.apply(this, arguments); + } - var traditional = options.traditional; - if ( traditional === undefined ) { - traditional = $.ajaxSettings.traditional; - } - - var qx,n,v,a = this.formToArray(options.semantic); - if (options.data) { - options.extraData = options.data; - qx = $.param(options.data, traditional); - } + var val = this.prop.apply(this, arguments); - // give pre-submit callback an opportunity to abort the submit - if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) { - log('ajaxSubmit: submit aborted via beforeSubmit callback'); - return this; - } + if ((val && val.jquery) || typeof val === 'string') { + return val; + } - // fire vetoable 'validate' event - this.trigger('form-submit-validate', [a, this, options, veto]); - if (veto.veto) { - log('ajaxSubmit: submit vetoed via form-submit-validate trigger'); - return this; - } + return this.attr.apply(this, arguments); + }; - var q = $.param(a, traditional); - if (qx) { - q = ( q ? (q + '&' + qx) : qx ); - } - if (options.type.toUpperCase() == 'GET') { - options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q; - options.data = null; // data is null for 'get' - } - else { - options.data = q; // data is the query string for 'post' - } + /** + * ajaxSubmit() provides a mechanism for immediately submitting + * an HTML form using AJAX. + * + * @param {object|string} options jquery.form.js parameters or custom url for submission + * @param {object} data extraData + * @param {string} dataType ajax dataType + * @param {function} onSuccess ajax success callback function + */ + $.fn.ajaxSubmit = function(options, data, dataType, onSuccess) { + // fast fail if nothing selected (http://dev.jquery.com/ticket/2752) + if (!this.length) { + log('ajaxSubmit: skipping submit process - no element selected'); - var callbacks = []; - if (options.resetForm) { - callbacks.push(function() { $form.resetForm(); }); - } - if (options.clearForm) { - callbacks.push(function() { $form.clearForm(options.includeHidden); }); - } + return this; + } - // perform a load on the target only if dataType is not provided - if (!options.dataType && options.target) { - var oldSuccess = options.success || function(){}; - callbacks.push(function(data) { - var fn = options.replaceTarget ? 'replaceWith' : 'html'; - $(options.target)[fn](data).each(oldSuccess, arguments); - }); - } - else if (options.success) { - callbacks.push(options.success); - } + /* eslint consistent-this: ["error", "$form"] */ + var method, action, url, $form = this; + + if (typeof options === 'function') { + options = {success: options}; - options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg - var context = options.context || options; // jQuery 1.4+ supports scope context - for (var i=0, max=callbacks.length; i < max; i++) { - callbacks[i].apply(context, [data, status, xhr || $form, $form]); + } else if (typeof options === 'string' || (options === false && arguments.length > 0)) { + options = { + 'url' : options, + 'data' : data, + 'dataType' : dataType + }; + + if (typeof onSuccess === 'function') { + options.success = onSuccess; + } + + } else if (typeof options === 'undefined') { + options = {}; } - }; - // are there files to upload? - var fileInputs = $('input:file:enabled[value]', this); // [value] (issue #113) - var hasFileInputs = fileInputs.length > 0; - var mp = 'multipart/form-data'; - var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp); - - var fileAPI = !!(hasFileInputs && fileInputs.get(0).files && window.FormData); - log("fileAPI :" + fileAPI); - var shouldUseFrame = (hasFileInputs || multipart) /*&& !fileAPI*/; /* fileAPI bug sous tous les navs dans cette version */ - - // options.iframe allows user to force iframe mode - // 06-NOV-09: now defaulting to iframe mode if file input is detected - if (options.iframe !== false && (options.iframe || shouldUseFrame)) { - // hack to fix Safari hang (thanks to Tim Molendijk for this) - // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d - if (options.closeKeepAlive) { - $.get(options.closeKeepAlive, function() { - fileUploadIframe(a); - }); + method = options.method || options.type || this.attr2('method'); + action = options.url || this.attr2('action'); + + url = (typeof action === 'string') ? $.trim(action) : ''; + url = url || window.location.href || ''; + if (url) { + // clean url (don't include hash vaue) + url = (url.match(/^([^#]+)/) || [])[1]; } - else { - fileUploadIframe(a); - } - } - else if ((hasFileInputs || multipart) && fileAPI) { - options.progress = options.progress || $.noop; - fileUploadXhr(a); - } - else { - $.ajax(options); - } - // fire 'notify' event - this.trigger('form-submit-notify', [this, options]); - return this; + options = $.extend(true, { + url : url, + success : $.ajaxSettings.success, + type : method || $.ajaxSettings.type, + iframeSrc : /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank' // eslint-disable-line no-script-url + }, options); - // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz) - function fileUploadXhr(a) { - var formdata = new FormData(); + // hook for manipulating the form data before it is extracted; + // convenient for use with rich editors like tinyMCE or FCKEditor + var veto = {}; - for (var i=0; i < a.length; i++) { - if (a[i].type == 'file') - continue; - formdata.append(a[i].name, a[i].value); + this.trigger('form-pre-serialize', [this, options, veto]); + + if (veto.veto) { + log('ajaxSubmit: submit vetoed via form-pre-serialize trigger'); + + return this; } - $form.find('input:file:enabled').each(function(){ - var name = $(this).attr('name'), files = this.files; - if (name) { - for (var i=0; i < files.length; i++) - formdata.append(name, files[i]); - } - }); + // provide opportunity to alter form data before it is serialized + if (options.beforeSerialize && options.beforeSerialize(this, options) === false) { + log('ajaxSubmit: submit aborted via beforeSerialize callback'); - if (options.extraData) { - for (var k in options.extraData) - formdata.append(k, options.extraData[k]) + return this; } - options.data = null; + var traditional = options.traditional; - var s = $.extend(true, {}, $.ajaxSettings, options, { - contentType: false, - processData: false, - cache: false, - type: 'POST' - }); + if (typeof traditional === 'undefined') { + traditional = $.ajaxSettings.traditional; + } - s.context = s.context || s; - - s.data = null; - var beforeSend = s.beforeSend; - s.beforeSend = function(xhr, o) { - o.data = formdata; - if(xhr.upload) { // unfortunately, jQuery doesn't expose this prop (http://bugs.jquery.com/ticket/10190) - xhr.upload.onprogress = function(event) { - o.progress(event.position, event.total); - }; - } - if(beforeSend) - beforeSend.call(o, xhr, options); - }; - $.ajax(s); - } - - // private function for handling file uploads (hat tip to YAHOO!) - function fileUploadIframe(a) { - var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle; - var useProp = !!$.fn.prop; - - if (a) { - if ( useProp ) { - // ensure that every serialized input is still enabled - for (i=0; i < a.length; i++) { - el = $(form[a[i].name]); - el.prop('disabled', false); - } - } else { - for (i=0; i < a.length; i++) { - el = $(form[a[i].name]); - el.removeAttr('disabled'); - } - }; + var elements = []; + var qx, a = this.formToArray(options.semantic, elements, options.filtering); + + if (options.data) { + var optionsData = $.isFunction(options.data) ? options.data(a) : options.data; + + options.extraData = optionsData; + qx = $.param(optionsData, traditional); } - if ($(':input[name=submit],:input[id=submit]', form).length) { - // if there is an input with a name or id of 'submit' then we won't be - // able to invoke the submit fn on the form (at least not x-browser) - alert('Error: Form elements must not have name or id of "submit".'); - return; + // give pre-submit callback an opportunity to abort the submit + if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) { + log('ajaxSubmit: submit aborted via beforeSubmit callback'); + + return this; } - - s = $.extend(true, {}, $.ajaxSettings, options); - s.context = s.context || s; - id = 'jqFormIO' + (new Date().getTime()); - if (s.iframeTarget) { - $io = $(s.iframeTarget); - n = $io.attr('name'); - if (n == null) - $io.attr('name', id); - else - id = n; - } - else { - $io = $(' diff --git a/www/prive/squelettes/inclure/admin_vider_images.html b/www/prive/squelettes/inclure/admin_vider_images.html index 3a91b426..6a845954 100644 --- a/www/prive/squelettes/inclure/admin_vider_images.html +++ b/www/prive/squelettes/inclure/admin_vider_images.html @@ -4,7 +4,9 @@